{ "GUID": "1ee775", "Name": "Custom_Model_Bag", "Transform": { "posX": -3.0761013, "posY": 0.9600001, "posZ": -0.0913313255, "rotX": 5.933675E-07, "rotY": 179.999924, "rotZ": 3.44316618E-06, "scaleX": 4.033575, "scaleY": 0.8395674, "scaleZ": 4.416855 }, "Nickname": "Player Expansion", "Description": "Night of Vespers", "GMNotes": "", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 1.0, "g": 1.0, "b": 1.0 }, "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": false, "Hands": false, "MaterialIndex": -1, "MeshIndex": -1, "CustomMesh": { "MeshURL": "https://raw.githubusercontent.com/RobMayer/TTSLibrary/master/advboxes/tuckbox_h_MSH.obj", "DiffuseURL": "https://i.imgur.com/SIA4QST.jpghttps://i.imgur.com/SIA4QST.jpg", "NormalURL": "", "ColliderURL": "", "Convex": true, "MaterialIndex": 3, "TypeIndex": 6, "CustomShader": { "SpecularColor": { "r": 1.0, "g": 1.0, "b": 1.0 }, "SpecularIntensity": 0.0, "SpecularSharpness": 2.0, "FresnelStrength": 0.0 }, "CastShadows": true }, "Bag": { "Order": 0 }, "LuaScript": "-- Utility memory bag by Directsun\r\n-- Version 2.5.2\r\n-- Fork of Memory Bag 2.0 by MrStump\r\n\r\nfunction updateSave()\r\n local data_to_save = {[\"ml\"]=memoryList}\r\n saved_data = JSON.encode(data_to_save)\r\n self.script_state = saved_data\r\nend\r\n\r\nfunction combineMemoryFromBagsWithin()\r\n local bagObjList = self.getObjects()\r\n for _, bagObj in ipairs(bagObjList) do\r\n local data = bagObj.lua_script_state\r\n if data ~= nil then\r\n local j = JSON.decode(data)\r\n if j ~= nil and j.ml ~= nil then\r\n for guid, entry in pairs(j.ml) do\r\n memoryList[guid] = entry\r\n end\r\n end\r\n end\r\n end\r\nend\r\n\r\nfunction updateMemoryWithMoves()\r\n memoryList = memoryListBackup\r\n --get the first transposed object's coordinates\r\n local obj = getObjectFromGUID(moveGuid)\r\n\r\n -- p1 is where needs to go, p2 is where it was\r\n local refObjPos = memoryList[moveGuid].pos\r\n local deltaPos = findOffsetDistance(obj.getPosition(), refObjPos, nil)\r\n local movedRotation = obj.getRotation()\r\n for guid, entry in pairs(memoryList) do\r\n memoryList[guid].pos.x = entry.pos.x - deltaPos.x\r\n memoryList[guid].pos.y = entry.pos.y - deltaPos.y\r\n memoryList[guid].pos.z = entry.pos.z - deltaPos.z\r\n -- memoryList[guid].rot.x = movedRotation.x\r\n -- memoryList[guid].rot.y = movedRotation.y\r\n -- memoryList[guid].rot.z = movedRotation.z\r\n end\r\n\r\n --theList[obj.getGUID()] = {\r\n -- pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},\r\n -- rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},\r\n -- lock=obj.getLock()\r\n --}\r\n moveList = {}\r\nend\r\n\r\nfunction onload(saved_data)\r\n fresh = true\r\n if saved_data ~= \"\" then\r\n local loaded_data = JSON.decode(saved_data)\r\n --Set up information off of loaded_data\r\n memoryList = loaded_data.ml\r\n else\r\n --Set up information for if there is no saved saved data\r\n memoryList = {}\r\n end\r\n\r\n moveList = {}\r\n moveGuid = nil\r\n\r\n if next(memoryList) == nil then\r\n createSetupButton()\r\n else\r\n fresh = false\r\n createMemoryActionButtons()\r\n end\r\nend\r\n\r\n\r\n--Beginning Setup\r\n\r\n\r\n--Make setup button\r\nfunction createSetupButton()\r\n self.createButton({\r\n label=\"Setup\", click_function=\"buttonClick_setup\", function_owner=self,\r\n position={0,0.1,-2.1}, rotation={0,0,0}, height=220, width=500,\r\n font_size=130, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n--Triggered by Transpose button\r\nfunction buttonClick_transpose()\r\n moveGuid = nil\r\n broadcastToAll(\"Select one object and move it- all objects will move relative to the new location\", {0.75, 0.75, 1})\r\n memoryListBackup = duplicateTable(memoryList)\r\n memoryList = {}\r\n moveList = {}\r\n self.clearButtons()\r\n createButtonsOnAllObjects(true)\r\n createSetupActionButtons(true)\r\nend\r\n\r\n--Triggered by setup button,\r\nfunction buttonClick_setup()\r\n memoryListBackup = duplicateTable(memoryList)\r\n memoryList = {}\r\n self.clearButtons()\r\n createButtonsOnAllObjects(false)\r\n createSetupActionButtons(false)\r\nend\r\n\r\nfunction getAllObjectsInMemory()\r\n local objTable = {}\r\n local curObj = {}\r\n\r\n for guid in pairs(memoryListBackup) do\r\n curObj = getObjectFromGUID(guid)\r\n table.insert(objTable, curObj)\r\n end\r\n\r\n return objTable\r\n -- return getAllObjects()\r\nend\r\n\r\n--Creates selection buttons on objects\r\nfunction createButtonsOnAllObjects(move)\r\n local howManyButtons = 0\r\n\r\n local objsToHaveButtons = {}\r\n if move == true then\r\n objsToHaveButtons = getAllObjectsInMemory()\r\n else\r\n objsToHaveButtons = getAllObjects()\r\n end\r\n\r\n for _, obj in ipairs(objsToHaveButtons) do\r\n if obj ~= self then\r\n local dummyIndex = howManyButtons\r\n --On a normal bag, the button positions aren't the same size as the bag.\r\n globalScaleFactor = 1 * 1/self.getScale().x\r\n --Super sweet math to set button positions\r\n local selfPos = self.getPosition()\r\n local objPos = obj.getPosition()\r\n local deltaPos = findOffsetDistance(selfPos, objPos, obj)\r\n local objPos = rotateLocalCoordinates(deltaPos, self)\r\n objPos.x = -objPos.x * globalScaleFactor\r\n objPos.y = objPos.y * globalScaleFactor + 2\r\n objPos.z = objPos.z * globalScaleFactor * 0.9\r\n --Offset rotation of bag\r\n local rot = self.getRotation()\r\n rot.y = -rot.y + 180\r\n --Create function\r\n local funcName = \"selectButton_\" .. howManyButtons\r\n local func = function() buttonClick_selection(dummyIndex, obj, move) end\r\n local color = {0.75,0.25,0.25,0.6}\r\n local colorMove = {0,0,1,0.6}\r\n if move == true then\r\n color = colorMove\r\n end\r\n self.setVar(funcName, func)\r\n self.createButton({\r\n click_function=funcName, function_owner=self,\r\n position=objPos, rotation=rot, height=500, width=500,\r\n color=color,\r\n })\r\n howManyButtons = howManyButtons + 1\r\n end\r\n end\r\nend\r\n\r\n--Creates submit and cancel buttons\r\nfunction createSetupActionButtons(move)\r\n self.createButton({\r\n label=\"Cancel\", click_function=\"buttonClick_cancel\", function_owner=self,\r\n position={-0.6,0.1,-2.1}, rotation={0,0,0}, height=220, width=550,\r\n font_size=130, color={0,0,0}, font_color={1,1,1}\r\n })\r\n\r\n self.createButton({\r\n label=\"Submit\", click_function=\"buttonClick_submit\", function_owner=self,\r\n position={-0.6,0.3,-2.5}, rotation={0,0,0}, height=220, width=550,\r\n font_size=130, color={0,0,0}, font_color={1,1,1}\r\n })\r\n\r\n if move == false then\r\n self.createButton({\r\n label=\"Add\", click_function=\"buttonClick_add\", function_owner=self,\r\n position={0.6,0.3,-2.1}, rotation={0,0,0}, height=220, width=550,\r\n font_size=130, color={0,0,0}, font_color={0.25,1,0.25}\r\n })\r\n\r\n if fresh == false then\r\n self.createButton({\r\n label=\"Set New\", click_function=\"buttonClick_setNew\", function_owner=self,\r\n position={0.6,0.3,-2.9}, rotation={0,0,0}, height=220, width=550,\r\n font_size=130, color={0,0,0}, font_color={0.75,0.75,1}\r\n })\r\n self.createButton({\r\n label=\"Remove\", click_function=\"buttonClick_remove\", function_owner=self,\r\n position={0.6,0.3,-2.5}, rotation={0,0,0}, height=220, width=550,\r\n font_size=130, color={0,0,0}, font_color={1,0.25,0.25}\r\n })\r\n end\r\n end\r\n\r\n self.createButton({\r\n label=\"Reset\", click_function=\"buttonClick_reset\", function_owner=self,\r\n position={-0.6,0.3,-2.9}, rotation={0,0,0}, height=220, width=550,\r\n font_size=130, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n\r\n--During Setup\r\n\r\n\r\n--Checks or unchecks buttons\r\nfunction buttonClick_selection(index, obj, move)\r\n local colorMove = {0,0,1,0.6}\r\n local color = {0,1,0,0.6}\r\n\r\n previousGuid = selectedGuid\r\n selectedGuid = obj.getGUID()\r\n\r\n theList = memoryList\r\n if move == true then\r\n theList = moveList\r\n if previousGuid ~= nil and previousGuid ~= selectedGuid then\r\n local prevObj = getObjectFromGUID(previousGuid)\r\n prevObj.highlightOff()\r\n self.editButton({index=previousIndex, color=colorMove})\r\n theList[previousGuid] = nil\r\n end\r\n previousIndex = index\r\n end\r\n\r\n if theList[selectedGuid] == nil then\r\n self.editButton({index=index, color=color})\r\n --Adding pos/rot to memory table\r\n local pos, rot = obj.getPosition(), obj.getRotation()\r\n --I need to add it like this or it won't save due to indexing issue\r\n theList[obj.getGUID()] = {\r\n pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},\r\n rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},\r\n lock=obj.getLock()\r\n }\r\n obj.highlightOn({0,1,0})\r\n else\r\n color = {0.75,0.25,0.25,0.6}\r\n if move == true then\r\n color = colorMove\r\n end\r\n self.editButton({index=index, color=color})\r\n theList[obj.getGUID()] = nil\r\n obj.highlightOff()\r\n end\r\nend\r\n\r\n--Cancels selection process\r\nfunction buttonClick_cancel()\r\n memoryList = memoryListBackup\r\n moveList = {}\r\n self.clearButtons()\r\n if next(memoryList) == nil then\r\n createSetupButton()\r\n else\r\n createMemoryActionButtons()\r\n end\r\n removeAllHighlights()\r\n broadcastToAll(\"Selection Canceled\", {1,1,1})\r\n moveGuid = nil\r\nend\r\n\r\n--Saves selections\r\nfunction buttonClick_submit()\r\n fresh = false\r\n if next(moveList) ~= nil then\r\n for guid in pairs(moveList) do\r\n moveGuid = guid\r\n end\r\n if memoryListBackup[moveGuid] == nil then\r\n broadcastToAll(\"Item selected for moving is not already in memory\", {1, 0.25, 0.25})\r\n else\r\n broadcastToAll(\"Moving all items in memory relative to new objects position!\", {0.75, 0.75, 1})\r\n self.clearButtons()\r\n createMemoryActionButtons()\r\n local count = 0\r\n for guid in pairs(moveList) do\r\n moveGuid = guid\r\n count = count + 1\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then obj.highlightOff() end\r\n end\r\n updateMemoryWithMoves()\r\n updateSave()\r\n buttonClick_place()\r\n end\r\n elseif next(memoryList) == nil and moveGuid == nil then\r\n memoryList = memoryListBackup\r\n broadcastToAll(\"No selections made.\", {0.75, 0.25, 0.25})\r\n end\r\n combineMemoryFromBagsWithin()\r\n self.clearButtons()\r\n createMemoryActionButtons()\r\n local count = 0\r\n for guid in pairs(memoryList) do\r\n count = count + 1\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then obj.highlightOff() end\r\n end\r\n broadcastToAll(count..\" Objects Saved\", {1,1,1})\r\n updateSave()\r\n moveGuid = nil\r\nend\r\n\r\nfunction combineTables(first_table, second_table)\r\n for k,v in pairs(second_table) do first_table[k] = v end\r\nend\r\n\r\nfunction buttonClick_add()\r\n fresh = false\r\n combineTables(memoryList, memoryListBackup)\r\n broadcastToAll(\"Adding internal bags and selections to existing memory\", {0.25, 0.75, 0.25})\r\n combineMemoryFromBagsWithin()\r\n self.clearButtons()\r\n createMemoryActionButtons()\r\n local count = 0\r\n for guid in pairs(memoryList) do\r\n count = count + 1\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then obj.highlightOff() end\r\n end\r\n broadcastToAll(count..\" Objects Saved\", {1,1,1})\r\n updateSave()\r\nend\r\n\r\nfunction buttonClick_remove()\r\n broadcastToAll(\"Removing Selected Entries From Memory\", {1.0, 0.25, 0.25})\r\n self.clearButtons()\r\n createMemoryActionButtons()\r\n local count = 0\r\n for guid in pairs(memoryList) do\r\n count = count + 1\r\n memoryListBackup[guid] = nil\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then obj.highlightOff() end\r\n end\r\n broadcastToAll(count..\" Objects Removed\", {1,1,1})\r\n memoryList = memoryListBackup\r\n updateSave()\r\nend\r\n\r\nfunction buttonClick_setNew()\r\n broadcastToAll(\"Setting new position relative to items in memory\", {0.75, 0.75, 1})\r\n self.clearButtons()\r\n createMemoryActionButtons()\r\n local count = 0\r\n for _, obj in ipairs(getAllObjects()) do\r\n guid = obj.guid\r\n if memoryListBackup[guid] ~= nil then\r\n count = count + 1\r\n memoryListBackup[guid].pos = obj.getPosition()\r\n memoryListBackup[guid].rot = obj.getRotation()\r\n memoryListBackup[guid].lock = obj.getLock()\r\n end\r\n end\r\n broadcastToAll(count..\" Objects Saved\", {1,1,1})\r\n memoryList = memoryListBackup\r\n updateSave()\r\nend\r\n\r\n--Resets bag to starting status\r\nfunction buttonClick_reset()\r\n fresh = true\r\n memoryList = {}\r\n self.clearButtons()\r\n createSetupButton()\r\n removeAllHighlights()\r\n broadcastToAll(\"Tool Reset\", {1,1,1})\r\n updateSave()\r\nend\r\n\r\n\r\n--After Setup\r\n\r\n\r\n--Creates recall and place buttons\r\nfunction createMemoryActionButtons()\r\n self.createButton({\r\n label=\"Place\", click_function=\"buttonClick_place\", function_owner=self,\r\n position={0.6,0.1,2.1}, rotation={0,0,0}, height=220, width=500,\r\n font_size=130, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Recall\", click_function=\"buttonClick_recall\", function_owner=self,\r\n position={-0.6,0.1,2.1}, rotation={0,0,0}, height=220, width=500,\r\n font_size=130, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Setup\", click_function=\"buttonClick_setup\", function_owner=self,\r\n position={0,0.1,-2.1}, rotation={0,0,0}, height=220, width=500,\r\n font_size=130, color={0,0,0}, font_color={1,1,1}\r\n })\r\n--- self.createButton({\r\n--- label=\"Move\", click_function=\"buttonClick_transpose\", function_owner=self,\r\n--- position={-2.8,0.3,0}, rotation={0,0,0}, height=350, width=800,\r\n--- font_size=250, color={0,0,0}, font_color={0.75,0.75,1}\r\n--- })\r\nend\r\n\r\n--Sends objects from bag/table to their saved position/rotation\r\nfunction buttonClick_place()\r\n local bagObjList = self.getObjects()\r\n for guid, entry in pairs(memoryList) do\r\n local obj = getObjectFromGUID(guid)\r\n --If obj is out on the table, move it to the saved pos/rot\r\n if obj ~= nil then\r\n obj.setPositionSmooth(entry.pos)\r\n obj.setRotationSmooth(entry.rot)\r\n obj.setLock(entry.lock)\r\n else\r\n --If obj is inside of the bag\r\n for _, bagObj in ipairs(bagObjList) do\r\n if bagObj.guid == guid then\r\n local item = self.takeObject({\r\n guid=guid, position=entry.pos, rotation=entry.rot, smooth=false\r\n })\r\n item.setLock(entry.lock)\r\n break\r\n end\r\n end\r\n end\r\n end\r\n broadcastToAll(\"Objects Placed\", {1,1,1})\r\nend\r\n\r\n--Recalls objects to bag from table\r\nfunction buttonClick_recall()\r\n for guid, entry in pairs(memoryList) do\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then self.putObject(obj) end\r\n end\r\n broadcastToAll(\"Objects Recalled\", {1,1,1})\r\nend\r\n\r\n\r\n--Utility functions\r\n\r\n\r\n--Find delta (difference) between 2 x/y/z coordinates\r\nfunction findOffsetDistance(p1, p2, obj)\r\n local yOffset = 0\r\n if obj ~= nil then\r\n local bounds = obj.getBounds()\r\n yOffset = (bounds.size.y - bounds.offset.y)\r\n end\r\n local deltaPos = {}\r\n deltaPos.x = (p2.x-p1.x)\r\n deltaPos.y = (p2.y-p1.y) + yOffset\r\n deltaPos.z = (p2.z-p1.z)\r\n return deltaPos\r\nend\r\n\r\n--Used to rotate a set of coordinates by an angle\r\nfunction rotateLocalCoordinates(desiredPos, obj)\r\n\tlocal objPos, objRot = obj.getPosition(), obj.getRotation()\r\n local angle = math.rad(objRot.y)\r\n\tlocal x = desiredPos.x * math.cos(angle) - desiredPos.z * math.sin(angle)\r\n\tlocal z = desiredPos.x * math.sin(angle) + desiredPos.z * math.cos(angle)\r\n\t--return {x=objPos.x+x, y=objPos.y+desiredPos.y, z=objPos.z+z}\r\n return {x=x, y=desiredPos.y, z=z}\r\nend\r\n\r\nfunction rotateMyCoordinates(desiredPos, obj)\r\n\tlocal angle = math.rad(obj.getRotation().y)\r\n local x = desiredPos.x * math.sin(angle)\r\n\tlocal z = desiredPos.z * math.cos(angle)\r\n return {x=x, y=desiredPos.y, z=z}\r\nend\r\n\r\n--Coroutine delay, in seconds\r\nfunction wait(time)\r\n local start = os.time()\r\n repeat coroutine.yield(0) until os.time() > start + time\r\nend\r\n\r\n--Duplicates a table (needed to prevent it making reference to the same objects)\r\nfunction duplicateTable(oldTable)\r\n local newTable = {}\r\n for k, v in pairs(oldTable) do\r\n newTable[k] = v\r\n end\r\n return newTable\r\nend\r\n\r\n--Moves scripted highlight from all objects\r\nfunction removeAllHighlights()\r\n for _, obj in ipairs(getAllObjects()) do\r\n obj.highlightOff()\r\n end\r\nend\r\n\r\n--Round number (num) to the Nth decimal (dec)\r\nfunction round(num, dec)\r\n local mult = 10^(dec or 0)\r\n return math.floor(num * mult + 0.5) / mult\r\nend", "LuaScriptState": "{\"ml\":{\"0d7682\":{\"lock\":false,\"pos\":{\"x\":41.7073,\"y\":1.2965,\"z\":38.5493},\"rot\":{\"x\":0,\"y\":89.9999,\"z\":0}},\"1e66f1\":{\"lock\":false,\"pos\":{\"x\":41.7009,\"y\":1.2965,\"z\":19.4273},\"rot\":{\"x\":0,\"y\":89.992,\"z\":0}},\"24c6a6\":{\"lock\":false,\"pos\":{\"x\":67.3706,\"y\":1.4951,\"z\":39.6816},\"rot\":{\"x\":0,\"y\":269.9908,\"z\":0}},\"a18537\":{\"lock\":false,\"pos\":{\"x\":41.7009,\"y\":1.2965,\"z\":27.0873},\"rot\":{\"x\":0,\"y\":89.9748,\"z\":0}},\"d0beaa\":{\"lock\":false,\"pos\":{\"x\":41.7035,\"y\":1.2965,\"z\":23.2398},\"rot\":{\"x\":0,\"y\":90,\"z\":0}},\"e00001\":{\"lock\":false,\"pos\":{\"x\":63.9265,\"y\":1.4951,\"z\":20.9899},\"rot\":{\"x\":0,\"y\":269.9997,\"z\":0}},\"e00015\":{\"lock\":false,\"pos\":{\"x\":63.824,\"y\":1.4951,\"z\":13.2998},\"rot\":{\"x\":0,\"y\":269.9993,\"z\":0}},\"e00016\":{\"lock\":false,\"pos\":{\"x\":64.0706,\"y\":1.4951,\"z\":35.8516},\"rot\":{\"x\":0,\"y\":270.0257,\"z\":0}},\"e00017\":{\"lock\":false,\"pos\":{\"x\":64.0706,\"y\":1.4951,\"z\":39.6816},\"rot\":{\"x\":0,\"y\":270.0164,\"z\":0}},\"e00019\":{\"lock\":false,\"pos\":{\"x\":67.3707,\"y\":1.4951,\"z\":35.8516},\"rot\":{\"x\":0,\"y\":269.9955,\"z\":0}},\"e0001f\":{\"lock\":false,\"pos\":{\"x\":63.8367,\"y\":1.4951,\"z\":17.1568},\"rot\":{\"x\":0,\"y\":269.9962,\"z\":0}},\"e00039\":{\"lock\":false,\"pos\":{\"x\":67.124,\"y\":1.4951,\"z\":17.1198},\"rot\":{\"x\":0,\"y\":269.975,\"z\":0}},\"e0003a\":{\"lock\":false,\"pos\":{\"x\":52.9835,\"y\":1.4951,\"z\":13.3252},\"rot\":{\"x\":0,\"y\":269.9965,\"z\":0}},\"e0003b\":{\"lock\":false,\"pos\":{\"x\":49.6835,\"y\":1.4951,\"z\":13.3252},\"rot\":{\"x\":0,\"y\":269.9966,\"z\":0}},\"e0003c\":{\"lock\":false,\"pos\":{\"x\":52.9835,\"y\":1.4951,\"z\":17.1552},\"rot\":{\"x\":0,\"y\":269.9968,\"z\":0}},\"e0003d\":{\"lock\":false,\"pos\":{\"x\":56.2835,\"y\":1.4951,\"z\":13.3252},\"rot\":{\"x\":0,\"y\":269.9964,\"z\":0}},\"e0003e\":{\"lock\":false,\"pos\":{\"x\":56.2835,\"y\":1.4951,\"z\":17.1552},\"rot\":{\"x\":0,\"y\":269.9968,\"z\":0}},\"e0003f\":{\"lock\":false,\"pos\":{\"x\":59.5832,\"y\":1.4951,\"z\":17.1552},\"rot\":{\"x\":0,\"y\":269.9963,\"z\":0}},\"e00040\":{\"lock\":false,\"pos\":{\"x\":59.5835,\"y\":1.4951,\"z\":13.3252},\"rot\":{\"x\":0,\"y\":269.9966,\"z\":0}},\"e00041\":{\"lock\":false,\"pos\":{\"x\":49.6835,\"y\":1.4951,\"z\":17.1552},\"rot\":{\"x\":0,\"y\":269.9966,\"z\":0}},\"e00043\":{\"lock\":false,\"pos\":{\"x\":67.124,\"y\":1.4951,\"z\":13.2998},\"rot\":{\"x\":0,\"y\":269.9869,\"z\":0}},\"e0005c\":{\"lock\":false,\"pos\":{\"x\":67.2442,\"y\":1.4951,\"z\":24.5632},\"rot\":{\"x\":0,\"y\":269.9872,\"z\":0}},\"e0005d\":{\"lock\":false,\"pos\":{\"x\":63.9442,\"y\":1.4951,\"z\":24.5632},\"rot\":{\"x\":0,\"y\":269.998,\"z\":0}},\"e0005f\":{\"lock\":false,\"pos\":{\"x\":67.2442,\"y\":1.4951,\"z\":20.7432},\"rot\":{\"x\":0,\"y\":269.9959,\"z\":0}},\"e00078\":{\"lock\":false,\"pos\":{\"x\":63.9117,\"y\":1.4951,\"z\":28.0165},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e0007a\":{\"lock\":false,\"pos\":{\"x\":63.9117,\"y\":1.4951,\"z\":31.8465},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e0007b\":{\"lock\":false,\"pos\":{\"x\":67.2117,\"y\":1.4951,\"z\":28.0165},\"rot\":{\"x\":0,\"y\":269.9955,\"z\":0}},\"e00094\":{\"lock\":false,\"pos\":{\"x\":63.6759,\"y\":1.4951,\"z\":9.873},\"rot\":{\"x\":0,\"y\":269.9992,\"z\":0}},\"e00095\":{\"lock\":false,\"pos\":{\"x\":63.6363,\"y\":1.4951,\"z\":7.174},\"rot\":{\"x\":0,\"y\":270.0034,\"z\":0}},\"e00096\":{\"lock\":false,\"pos\":{\"x\":66.9759,\"y\":1.4951,\"z\":9.873},\"rot\":{\"x\":0,\"y\":269.9916,\"z\":0}},\"e00097\":{\"lock\":false,\"pos\":{\"x\":66.9363,\"y\":1.4951,\"z\":7.1747},\"rot\":{\"x\":0,\"y\":269.9994,\"z\":0}},\"e37dcd\":{\"lock\":false,\"pos\":{\"x\":41.7009,\"y\":1.2965,\"z\":34.7373},\"rot\":{\"x\":0,\"y\":90.0144,\"z\":0}},\"f89c5b\":{\"lock\":false,\"pos\":{\"x\":67.2117,\"y\":1.4951,\"z\":31.846},\"rot\":{\"x\":0,\"y\":269.9906,\"z\":0}},\"fa11c6\":{\"lock\":false,\"pos\":{\"x\":41.7072,\"y\":1.2965,\"z\":30.8959},\"rot\":{\"x\":0,\"y\":89.9999,\"z\":0}}}}", "XmlUI": "", "ContainedObjects": [ { "GUID": "e00001", "Name": "Card", "Transform": { "posX": 64.0284, "posY": 1.49510384, "posZ": 20.7380486, "rotX": -1.56241313E-08, "rotY": 270.0, "rotZ": -3.810049E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "The Jig is Up!", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"d90738fa-8ba2-4a1b-8d0d-fbfbde83c574\",\"type\":\"Treachery\",\"traits\":\"Blunder\",\"weakness\":true}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100000, "SidewaysCard": false, "CustomDeck": { "1000": { "FaceURL": "https://i.imgur.com/qQffDsn.jpg", "BackURL": "https://i.imgur.com/EcbhVuh.jpg/", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": false, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "0d7682", "Name": "Bag", "Transform": { "posX": 41.7073, "posY": 1.29646444, "posZ": 38.5493, "rotX": -1.1319711E-07, "rotY": 89.99982, "rotZ": -1.018759E-06, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "NoV Guardian Cards", "Description": "", "GMNotes": "", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.294424117, "g": 0.3943, "b": 1.0 }, "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": false, "Hands": false, "MaterialIndex": -1, "MeshIndex": -1, "Bag": { "Order": 0 }, "LuaScript": "function updateSave()\r\n local data_to_save = {[\"ml\"]=memoryList}\r\n saved_data = JSON.encode(data_to_save)\r\n self.script_state = saved_data\r\nend\r\n\r\nfunction onload(saved_data)\r\n if saved_data ~= \"\" then\r\n local loaded_data = JSON.decode(saved_data)\r\n --Set up information off of loaded_data\r\n memoryList = loaded_data.ml\r\n else\r\n --Set up information for if there is no saved saved data\r\n memoryList = {}\r\n end\r\n\r\n if next(memoryList) == nil then\r\n createSetupButton()\r\n else\r\n createMemoryActionButtons()\r\n end\r\nend\r\n\r\n\r\n--Beginning Setup\r\n\r\n\r\n--Make setup button\r\nfunction createSetupButton()\r\n self.createButton({\r\n label=\"Setup\", click_function=\"buttonClick_setup\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n--Triggered by setup button,\r\nfunction buttonClick_setup()\r\n memoryListBackup = duplicateTable(memoryList)\r\n memoryList = {}\r\n self.clearButtons()\r\n createButtonsOnAllObjects()\r\n createSetupActionButtons()\r\nend\r\n\r\n--Creates selection buttons on objects\r\nfunction createButtonsOnAllObjects()\r\n local howManyButtons = 0\r\n for _, obj in ipairs(getAllObjects()) do\r\n if obj ~= self then\r\n local dummyIndex = howManyButtons\r\n --On a normal bag, the button positions aren't the same size as the bag.\r\n globalScaleFactor = 1.25 * 1/self.getScale().x\r\n --Super sweet math to set button positions\r\n local selfPos = self.getPosition()\r\n local objPos = obj.getPosition()\r\n local deltaPos = findOffsetDistance(selfPos, objPos, obj)\r\n local objPos = rotateLocalCoordinates(deltaPos, self)\r\n objPos.x = -objPos.x * globalScaleFactor\r\n objPos.y = objPos.y * globalScaleFactor\r\n objPos.z = objPos.z * globalScaleFactor\r\n --Offset rotation of bag\r\n local rot = self.getRotation()\r\n rot.y = -rot.y + 180\r\n --Create function\r\n local funcName = \"selectButton_\" .. howManyButtons\r\n local func = function() buttonClick_selection(dummyIndex, obj) end\r\n self.setVar(funcName, func)\r\n self.createButton({\r\n click_function=funcName, function_owner=self,\r\n position=objPos, rotation=rot, height=1000, width=1000,\r\n color={0.75,0.25,0.25,0.6},\r\n })\r\n howManyButtons = howManyButtons + 1\r\n end\r\n end\r\nend\r\n\r\n--Creates submit and cancel buttons\r\nfunction createSetupActionButtons()\r\n self.createButton({\r\n label=\"Cancel\", click_function=\"buttonClick_cancel\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=1100,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Submit\", click_function=\"buttonClick_submit\", function_owner=self,\r\n position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=1100,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Reset\", click_function=\"buttonClick_reset\", function_owner=self,\r\n position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n\r\n--During Setup\r\n\r\n\r\n--Checks or unchecks buttons\r\nfunction buttonClick_selection(index, obj)\r\n local color = {0,1,0,0.6}\r\n if memoryList[obj.getGUID()] == nil then\r\n self.editButton({index=index, color=color})\r\n --Adding pos/rot to memory table\r\n local pos, rot = obj.getPosition(), obj.getRotation()\r\n --I need to add it like this or it won't save due to indexing issue\r\n memoryList[obj.getGUID()] = {\r\n pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},\r\n rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},\r\n lock=obj.getLock()\r\n }\r\n obj.highlightOn({0,1,0})\r\n else\r\n color = {0.75,0.25,0.25,0.6}\r\n self.editButton({index=index, color=color})\r\n memoryList[obj.getGUID()] = nil\r\n obj.highlightOff()\r\n end\r\nend\r\n\r\n--Cancels selection process\r\nfunction buttonClick_cancel()\r\n memoryList = memoryListBackup\r\n self.clearButtons()\r\n if next(memoryList) == nil then\r\n createSetupButton()\r\n else\r\n createMemoryActionButtons()\r\n end\r\n removeAllHighlights()\r\n broadcastToAll(\"Selection Canceled\", {1,1,1})\r\nend\r\n\r\n--Saves selections\r\nfunction buttonClick_submit()\r\n if next(memoryList) == nil then\r\n broadcastToAll(\"You cannot submit without any selections.\", {0.75, 0.25, 0.25})\r\n else\r\n self.clearButtons()\r\n createMemoryActionButtons()\r\n local count = 0\r\n for guid in pairs(memoryList) do\r\n count = count + 1\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then obj.highlightOff() end\r\n end\r\n broadcastToAll(count..\" Objects Saved\", {1,1,1})\r\n updateSave()\r\n end\r\nend\r\n\r\n--Resets bag to starting status\r\nfunction buttonClick_reset()\r\n memoryList = {}\r\n self.clearButtons()\r\n createSetupButton()\r\n removeAllHighlights()\r\n broadcastToAll(\"Tool Reset\", {1,1,1})\r\n updateSave()\r\nend\r\n\r\n\r\n--After Setup\r\n\r\n\r\n--Creates recall and place buttons\r\nfunction createMemoryActionButtons()\r\n self.createButton({\r\n label=\"Place\", click_function=\"buttonClick_place\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Recall\", click_function=\"buttonClick_recall\", function_owner=self,\r\n position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Setup\", click_function=\"buttonClick_setup\", function_owner=self,\r\n position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n--Sends objects from bag/table to their saved position/rotation\r\nfunction buttonClick_place()\r\n local bagObjList = self.getObjects()\r\n for guid, entry in pairs(memoryList) do\r\n local obj = getObjectFromGUID(guid)\r\n --If obj is out on the table, move it to the saved pos/rot\r\n if obj ~= nil then\r\n obj.setPositionSmooth(entry.pos)\r\n obj.setRotationSmooth(entry.rot)\r\n obj.setLock(entry.lock)\r\n else\r\n --If obj is inside of the bag\r\n for _, bagObj in ipairs(bagObjList) do\r\n if bagObj.guid == guid then\r\n local item = self.takeObject({\r\n guid=guid, position=entry.pos, rotation=entry.rot,\r\n })\r\n item.setLock(entry.lock)\r\n break\r\n end\r\n end\r\n end\r\n end\r\n broadcastToAll(\"Objects Placed\", {1,1,1})\r\nend\r\n\r\n--Recalls objects to bag from table\r\nfunction buttonClick_recall()\r\n for guid, entry in pairs(memoryList) do\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then self.putObject(obj) end\r\n end\r\n broadcastToAll(\"Objects Recalled\", {1,1,1})\r\nend\r\n\r\n\r\n--Utility functions\r\n\r\n\r\n--Find delta (difference) between 2 x/y/z coordinates\r\nfunction findOffsetDistance(p1, p2, obj)\r\n local deltaPos = {}\r\n local bounds = obj.getBounds()\r\n deltaPos.x = (p2.x-p1.x)\r\n deltaPos.y = (p2.y-p1.y) + (bounds.size.y - bounds.offset.y)\r\n deltaPos.z = (p2.z-p1.z)\r\n return deltaPos\r\nend\r\n\r\n--Used to rotate a set of coordinates by an angle\r\nfunction rotateLocalCoordinates(desiredPos, obj)\r\n\tlocal objPos, objRot = obj.getPosition(), obj.getRotation()\r\n local angle = math.rad(objRot.y)\r\n\tlocal x = desiredPos.x * math.cos(angle) - desiredPos.z * math.sin(angle)\r\n\tlocal z = desiredPos.x * math.sin(angle) + desiredPos.z * math.cos(angle)\r\n\t--return {x=objPos.x+x, y=objPos.y+desiredPos.y, z=objPos.z+z}\r\n return {x=x, y=desiredPos.y, z=z}\r\nend\r\n\r\n--Coroutine delay, in seconds\r\nfunction wait(time)\r\n local start = os.time()\r\n repeat coroutine.yield(0) until os.time() > start + time\r\nend\r\n\r\n--Duplicates a table (needed to prevent it making reference to the same objects)\r\nfunction duplicateTable(oldTable)\r\n local newTable = {}\r\n for k, v in pairs(oldTable) do\r\n newTable[k] = v\r\n end\r\n return newTable\r\nend\r\n\r\n--Moves scripted highlight from all objects\r\nfunction removeAllHighlights()\r\n for _, obj in ipairs(getAllObjects()) do\r\n obj.highlightOff()\r\n end\r\nend\r\n\r\n--Round number (num) to the Nth decimal (dec)\r\nfunction round(num, dec)\r\n local mult = 10^(dec or 0)\r\n return math.floor(num * mult + 0.5) / mult\r\nend\r\n", "LuaScriptState": "{\"ml\":{\"a7cf6e\":{\"lock\":false,\"pos\":{\"x\":57.6848,\"y\":1.4951,\"z\":-3.6988},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"b82397\":{\"lock\":false,\"pos\":{\"x\":61.0404,\"y\":1.4951,\"z\":-3.7307},\"rot\":{\"x\":0,\"y\":270.0002,\"z\":0}},\"e00001\":{\"lock\":false,\"pos\":{\"x\":67.5929,\"y\":1.4951,\"z\":-18.9779},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00002\":{\"lock\":false,\"pos\":{\"x\":57.6929,\"y\":1.4951,\"z\":0.1521},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00003\":{\"lock\":false,\"pos\":{\"x\":60.9929,\"y\":1.4951,\"z\":0.1521},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00004\":{\"lock\":false,\"pos\":{\"x\":67.5929,\"y\":1.4951,\"z\":0.1521},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e00005\":{\"lock\":false,\"pos\":{\"x\":64.2929,\"y\":1.4951,\"z\":0.1521},\"rot\":{\"x\":0,\"y\":269.9997,\"z\":0}},\"e00006\":{\"lock\":false,\"pos\":{\"x\":54.3929,\"y\":1.4951,\"z\":0.1521},\"rot\":{\"x\":0,\"y\":269.9708,\"z\":0}},\"e00009\":{\"lock\":false,\"pos\":{\"x\":67.593,\"y\":1.4951,\"z\":-3.6679},\"rot\":{\"x\":0,\"y\":270.0001,\"z\":0}},\"e0000a\":{\"lock\":false,\"pos\":{\"x\":64.293,\"y\":1.4951,\"z\":-3.6679},\"rot\":{\"x\":0,\"y\":269.9997,\"z\":0}},\"e0000b\":{\"lock\":false,\"pos\":{\"x\":67.593,\"y\":1.4951,\"z\":-7.4979},\"rot\":{\"x\":0,\"y\":269.9996,\"z\":0}},\"e0000c\":{\"lock\":false,\"pos\":{\"x\":64.293,\"y\":1.4951,\"z\":-7.4979},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e0000d\":{\"lock\":false,\"pos\":{\"x\":64.293,\"y\":1.4951,\"z\":-11.3179},\"rot\":{\"x\":0,\"y\":269.9997,\"z\":0}},\"e0000e\":{\"lock\":false,\"pos\":{\"x\":67.593,\"y\":1.4951,\"z\":-11.3179},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e0000f\":{\"lock\":false,\"pos\":{\"x\":67.593,\"y\":1.4951,\"z\":-15.1479},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e00010\":{\"lock\":false,\"pos\":{\"x\":64.293,\"y\":1.4951,\"z\":-15.1479},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e00011\":{\"lock\":false,\"pos\":{\"x\":54.3929,\"y\":1.4951,\"z\":-3.6679},\"rot\":{\"x\":0,\"y\":270.0062,\"z\":0}},\"e00012\":{\"lock\":false,\"pos\":{\"x\":57.6929,\"y\":1.4951,\"z\":-7.4979},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00013\":{\"lock\":false,\"pos\":{\"x\":60.9929,\"y\":1.4951,\"z\":-7.4979},\"rot\":{\"x\":0,\"y\":269.9997,\"z\":0}},\"e00014\":{\"lock\":false,\"pos\":{\"x\":64.2929,\"y\":1.4951,\"z\":-18.9779},\"rot\":{\"x\":0,\"y\":269.9994,\"z\":0}}}}", "XmlUI": "", "ContainedObjects": [ { "GUID": "e00006", "Name": "Card", "Transform": { "posX": 54.3929, "posY": 1.49510384, "posZ": 0.1521, "rotX": 5.24044346E-08, "rotY": 269.970825, "rotZ": 5.25879571E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Harassing Fire", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"59aa563a-0a73-47ba-bc87-1b59f9e0499f\",\"type\":\"Skill\",\"class\":\"Guardian\",\"traits\":\"Tactic\",\"fightIcons\":1,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100500, "SidewaysCard": false, "CustomDeck": { "1005": { "FaceURL": "https://i.imgur.com/vdymrDq.jpg", "BackURL": "https://i.imgur.com/R5WFGp8.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00011", "Name": "Card", "Transform": { "posX": 54.3929, "posY": 1.49510384, "posZ": -3.6679, "rotX": 2.79441565E-07, "rotY": 270.006226, "rotZ": -1.70303423E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Show of Bravery", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"5376f258-4ca7-4686-817a-38a1bfa7a1a7\",\"type\":\"Skill\",\"class\":\"Guardian\",\"traits\":\"Innate. \",\"fightIcons\":2,\"willpowerIcons\":2,\"wildIcons\":1,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101600, "SidewaysCard": false, "CustomDeck": { "1016": { "FaceURL": "https://i.imgur.com/Gacx4NM.jpg", "BackURL": "https://i.imgur.com/0equWNO.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00002", "Name": "Card", "Transform": { "posX": 57.6929, "posY": 1.49510384, "posZ": 0.152100012, "rotX": -6.826973E-08, "rotY": 269.999939, "rotZ": 1.6617382E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Divinity Within", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"5efd300b-f6aa-418b-9b93-39fb5c31a08e\",\"type\":\"Event\",\"class\":\"Guardian\",\"traits\":\"Blessed. Boon\",\"willpowerIcons\":2,\"cost\":0,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100100, "SidewaysCard": false, "CustomDeck": { "1001": { "FaceURL": "https://i.imgur.com/i7hCmiu.jpg", "BackURL": "https://i.imgur.com/cQ7B0Ot.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "a7cf6e", "Name": "Card", "Transform": { "posX": 57.6848335, "posY": 1.49510384, "posZ": -3.69876838, "rotX": 9.301129E-08, "rotY": 269.999969, "rotZ": 4.55007523E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "\"Head 'em Off!\"", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"c0d530c6-97fa-4862-94ec-e838ecb8fb31\",\"type\":\"Event\",\"class\":\"Guardian\",\"traits\":\"Tactic\",\"agilityIcons\":1,\"fightIcons\":1,\"cost\":3,\"level\":4}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 268000, "SidewaysCard": false, "CustomDeck": { "2680": { "FaceURL": "https://i.imgur.com/zxibpVJ.jpg", "BackURL": "https://i.imgur.com/2DZnVzC.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00012", "Name": "Card", "Transform": { "posX": 57.6929, "posY": 1.49510384, "posZ": -7.4979, "rotX": -7.2381647E-07, "rotY": 270.0, "rotZ": 3.90298318E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Spirit Transference", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"515f102e-414c-4f82-9a42-fd4d9f12eaea\",\"type\":\"Event\",\"class\":\"Guardian\",\"traits\":\"Spell. Ritual. Blessed\",\"willpowerIcons\":2,\"cost\":1,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101700, "SidewaysCard": false, "CustomDeck": { "1017": { "FaceURL": "https://i.imgur.com/ZWGd4iy.jpg", "BackURL": "https://i.imgur.com/r0dhcYK.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00003", "Name": "Card", "Transform": { "posX": 60.9929, "posY": 1.49510384, "posZ": 0.1521, "rotX": -6.291593E-08, "rotY": 269.999878, "rotZ": -8.041524E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Divinity Within", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"1f83750e-1bd4-4ba8-a7aa-691e7a25ddb1\",\"type\":\"Event\",\"class\":\"Guardian\",\"traits\":\"Blessed. Boon\",\"willpowerIcons\":1,\"cost\":0,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100200, "SidewaysCard": false, "CustomDeck": { "1002": { "FaceURL": "https://i.imgur.com/ZPnaAwp.jpg", "BackURL": "https://i.imgur.com/wWNsW67.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "b82397", "Name": "Card", "Transform": { "posX": 61.04042, "posY": 1.49510384, "posZ": -3.730714, "rotX": 6.27834368E-07, "rotY": 270.000244, "rotZ": 7.409257E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "\"Head 'em Off!\"", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"af7f33c9-f3ed-41e2-a40a-0a20de440a45\",\"type\":\"Event\",\"class\":\"Guardian\",\"traits\":\"Tactic\",\"agilityIcons\":1,\"cost\":3,\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 267900, "SidewaysCard": false, "CustomDeck": { "2679": { "FaceURL": "https://i.imgur.com/rcdH0aM.jpg", "BackURL": "https://i.imgur.com/nilr9AA.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00013", "Name": "Card", "Transform": { "posX": 60.9929, "posY": 1.49510384, "posZ": -7.4979, "rotX": -5.36106235E-08, "rotY": 269.9997, "rotZ": 7.84064653E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Spirit Transference", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"513442ed-0f52-460d-9460-649b5502e148\",\"type\":\"Event\",\"class\":\"Guardian\",\"traits\":\"Spell. Ritual. Blessed\",\"willpowerIcons\":2,\"cost\":1,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101800, "SidewaysCard": false, "CustomDeck": { "1018": { "FaceURL": "https://i.imgur.com/DsymXuY.jpg", "BackURL": "https://i.imgur.com/qmxI7RM.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000c", "Name": "Card", "Transform": { "posX": 64.293, "posY": 1.49510384, "posZ": -7.4979, "rotX": -2.64429119E-08, "rotY": 269.999817, "rotZ": 8.44353849E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Izaak Orlofsky", "Description": "Henpecked Hitman", "GMNotes": "{\"TtsZoopGuid\":\"3a54d573-4b6c-4536-9192-623cf8e1bc46\",\"type\":\"Asset\",\"class\":\"Guardian\",\"traits\":\"Ally. Criminal\",\"fightIcons\":1,\"intellectIcons\":1,\"willpowerIcons\":1,\"cost\":3,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101100, "SidewaysCard": false, "CustomDeck": { "1011": { "FaceURL": "https://i.imgur.com/Pzghu8t.jpg", "BackURL": "https://i.imgur.com/EdX5xQa.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000a", "Name": "Card", "Transform": { "posX": 64.292984, "posY": 1.49510384, "posZ": -3.66788435, "rotX": 2.06352855E-08, "rotY": 269.9997, "rotZ": -1.462786E-06, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Ijaya Trinket", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"07829f29-ee6a-48b6-af13-4529c8c3df53\",\"type\":\"Asset\",\"class\":\"Guardian\",\"traits\":\"Item. Charm. Occult\",\"agilityIcons\":1,\"fightIcons\":1,\"wildIcons\":1,\"cost\":1,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100900, "SidewaysCard": false, "CustomDeck": { "1009": { "FaceURL": "https://i.imgur.com/eRcIlJ9.jpg", "BackURL": "https://i.imgur.com/sOLhfNn.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00005", "Name": "Card", "Transform": { "posX": 64.2929, "posY": 1.49510384, "posZ": 0.1520998, "rotX": -3.023448E-09, "rotY": 269.999664, "rotZ": -1.82535146E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "La Sir�ne's Favor", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"3b769473-ba0a-4096-8e51-7cde15d0182b\",\"type\":\"Asset\",\"class\":\"Guardian\",\"traits\":\"Ritual\",\"agilityIcons\":1,\"willpowerIcons\":2,\"cost\":3,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100400, "SidewaysCard": false, "CustomDeck": { "1004": { "FaceURL": "https://i.imgur.com/elTWsG5.jpg", "BackURL": "https://i.imgur.com/xmJm0ZW.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00004", "Name": "Card", "Transform": { "posX": 67.5929, "posY": 1.49510384, "posZ": 0.1521, "rotX": 1.37010659E-07, "rotY": 269.999817, "rotZ": 1.46901314E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "La Sir�ne's Favor", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"c96c5fb5-bb92-4748-a30a-faffda5926b0\",\"type\":\"Asset\",\"class\":\"Guardian\",\"traits\":\"Ritual\",\"willpowerIcons\":1,\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100300, "SidewaysCard": false, "CustomDeck": { "1003": { "FaceURL": "https://i.imgur.com/fnvUx4c.jpg", "BackURL": "https://i.imgur.com/km1Yidb.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00009", "Name": "Card", "Transform": { "posX": 67.593, "posY": 1.49510384, "posZ": -3.6679, "rotX": -2.23126861E-07, "rotY": 270.000122, "rotZ": -5.38100444E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Ijaya Trinket", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"a160a241-ea3c-4d4f-ab55-cab1f76c7dfe\",\"type\":\"Asset\",\"class\":\"Guardian\",\"traits\":\"Item. Charm. Occult\",\"agilityIcons\":1,\"fightIcons\":1,\"cost\":1,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100800, "SidewaysCard": false, "CustomDeck": { "1008": { "FaceURL": "https://i.imgur.com/qf6jh7P.jpg", "BackURL": "https://i.imgur.com/yWaTObg.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000b", "Name": "Card", "Transform": { "posX": 67.593, "posY": 1.49510384, "posZ": -7.4979, "rotX": -7.369766E-07, "rotY": 269.999573, "rotZ": -3.68728024E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Izaak Orlofsky", "Description": "Henpecked Hitman", "GMNotes": "{\"TtsZoopGuid\":\"cd1044c1-3b98-4605-98bd-81f8b4e62f8f\",\"type\":\"Asset\",\"class\":\"Guardian\",\"traits\":\"Ally. Criminal\",\"fightIcons\":1,\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101000, "SidewaysCard": false, "CustomDeck": { "1010": { "FaceURL": "https://i.imgur.com/woUOWRi.jpg", "BackURL": "https://i.imgur.com/icB0GSv.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000e", "Name": "Card", "Transform": { "posX": 67.593, "posY": 1.49510384, "posZ": -11.3179, "rotX": -2.39751841E-07, "rotY": 269.999817, "rotZ": 3.744777E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Lewis Mk IV", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"fac13a0f-c043-4486-9036-02530514ae5a\",\"type\":\"Asset\",\"class\":\"Guardian\",\"traits\":\"Item. Weapon. Firearm\",\"fightIcons\":3,\"cost\":5,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101300, "SidewaysCard": false, "CustomDeck": { "1013": { "FaceURL": "https://i.imgur.com/YeAyoSa.jpg", "BackURL": "https://i.imgur.com/SXZrsXA.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000d", "Name": "Card", "Transform": { "posX": 64.293, "posY": 1.49510384, "posZ": -11.3179, "rotX": -2.61083756E-07, "rotY": 269.9997, "rotZ": 2.49989256E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Lewis Mk IV", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"be944575-6390-4636-98ef-10a6ee34ce56\",\"type\":\"Asset\",\"class\":\"Guardian\",\"traits\":\"Item. Weapon. Firearm\",\"fightIcons\":3,\"wildIcons\":1,\"cost\":5,\"level\":5}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101200, "SidewaysCard": false, "CustomDeck": { "1012": { "FaceURL": "https://i.imgur.com/3K0Ae9f.jpg", "BackURL": "https://i.imgur.com/nJ2DvMP.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00010", "Name": "Card", "Transform": { "posX": 64.293, "posY": 1.49510384, "posZ": -15.1479, "rotX": -7.53659251E-08, "rotY": 269.999817, "rotZ": -2.58451411E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Pugilist", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"c8e41cb3-1f1a-4afd-8646-0923889a3cff\",\"type\":\"Asset\",\"permanent\":true,\"class\":\"Guardian\",\"traits\":\"Talent\",\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101500, "SidewaysCard": false, "CustomDeck": { "1015": { "FaceURL": "https://i.imgur.com/2I67xBi.jpg", "BackURL": "https://i.imgur.com/GI9VMxM.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000f", "Name": "Card", "Transform": { "posX": 67.593, "posY": 1.49510384, "posZ": -15.1479, "rotX": -2.35810447E-07, "rotY": 269.999817, "rotZ": 2.89661756E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Pugilist", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"7a3b7210-9d61-4726-8310-d78d22b731a0\",\"type\":\"Asset\",\"class\":\"Guardian\",\"traits\":\"Talent\",\"fightIcons\":2,\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101400, "SidewaysCard": false, "CustomDeck": { "1014": { "FaceURL": "https://i.imgur.com/w1fJeLc.jpg", "BackURL": "https://i.imgur.com/yyhj2Pj.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00001", "Name": "Card", "Transform": { "posX": 67.5929, "posY": 1.49510384, "posZ": -18.9779, "rotX": 1.020508E-07, "rotY": 269.999939, "rotZ": -3.900754E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Browning 1910", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"9239d8a9-f4f2-4bf4-bb7e-c0902a13ea4b\",\"type\":\"Asset\",\"class\":\"Guardian\",\"traits\":\"Item. Firearm. Weapon. \",\"fightIcons\":1,\"intellectIcons\":1,\"cost\":3,\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100000, "SidewaysCard": false, "CustomDeck": { "1000": { "FaceURL": "https://i.imgur.com/SYpLsiF.jpg", "BackURL": "https://i.imgur.com/TODL9pD.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00014", "Name": "Card", "Transform": { "posX": 64.2929, "posY": 1.49510384, "posZ": -18.9779, "rotX": 7.690324E-09, "rotY": 269.9994, "rotZ": -1.06392854E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Watchman", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"06f9f9e6-1b5f-431f-b8b8-075c74b146b5\",\"type\":\"Asset\",\"permanent\":true,\"class\":\"Guardian\",\"traits\":\"Talent\",\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 267800, "SidewaysCard": false, "CustomDeck": { "2678": { "FaceURL": "https://i.imgur.com/KCs0G7M.jpg", "BackURL": "https://i.imgur.com/KQXJ2uc.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" } ] }, { "GUID": "1e66f1", "Name": "Bag", "Transform": { "posX": 41.7009, "posY": 1.2964654, "posZ": 19.4273, "rotX": 2.18152593E-07, "rotY": 89.9918442, "rotZ": 2.18121528E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "NoV Multiclass Cards", "Description": "", "GMNotes": "", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 1.0, "g": 0.591078162, "b": 0.0 }, "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": false, "Hands": false, "MaterialIndex": -1, "MeshIndex": -1, "Bag": { "Order": 0 }, "LuaScript": "function updateSave()\r\n local data_to_save = {[\"ml\"]=memoryList}\r\n saved_data = JSON.encode(data_to_save)\r\n self.script_state = saved_data\r\nend\r\n\r\nfunction onload(saved_data)\r\n if saved_data ~= \"\" then\r\n local loaded_data = JSON.decode(saved_data)\r\n --Set up information off of loaded_data\r\n memoryList = loaded_data.ml\r\n else\r\n --Set up information for if there is no saved saved data\r\n memoryList = {}\r\n end\r\n\r\n if next(memoryList) == nil then\r\n createSetupButton()\r\n else\r\n createMemoryActionButtons()\r\n end\r\nend\r\n\r\n\r\n--Beginning Setup\r\n\r\n\r\n--Make setup button\r\nfunction createSetupButton()\r\n self.createButton({\r\n label=\"Setup\", click_function=\"buttonClick_setup\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n--Triggered by setup button,\r\nfunction buttonClick_setup()\r\n memoryListBackup = duplicateTable(memoryList)\r\n memoryList = {}\r\n self.clearButtons()\r\n createButtonsOnAllObjects()\r\n createSetupActionButtons()\r\nend\r\n\r\n--Creates selection buttons on objects\r\nfunction createButtonsOnAllObjects()\r\n local howManyButtons = 0\r\n for _, obj in ipairs(getAllObjects()) do\r\n if obj ~= self then\r\n local dummyIndex = howManyButtons\r\n --On a normal bag, the button positions aren't the same size as the bag.\r\n globalScaleFactor = 1.25 * 1/self.getScale().x\r\n --Super sweet math to set button positions\r\n local selfPos = self.getPosition()\r\n local objPos = obj.getPosition()\r\n local deltaPos = findOffsetDistance(selfPos, objPos, obj)\r\n local objPos = rotateLocalCoordinates(deltaPos, self)\r\n objPos.x = -objPos.x * globalScaleFactor\r\n objPos.y = objPos.y * globalScaleFactor\r\n objPos.z = objPos.z * globalScaleFactor\r\n --Offset rotation of bag\r\n local rot = self.getRotation()\r\n rot.y = -rot.y + 180\r\n --Create function\r\n local funcName = \"selectButton_\" .. howManyButtons\r\n local func = function() buttonClick_selection(dummyIndex, obj) end\r\n self.setVar(funcName, func)\r\n self.createButton({\r\n click_function=funcName, function_owner=self,\r\n position=objPos, rotation=rot, height=1000, width=1000,\r\n color={0.75,0.25,0.25,0.6},\r\n })\r\n howManyButtons = howManyButtons + 1\r\n end\r\n end\r\nend\r\n\r\n--Creates submit and cancel buttons\r\nfunction createSetupActionButtons()\r\n self.createButton({\r\n label=\"Cancel\", click_function=\"buttonClick_cancel\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=1100,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Submit\", click_function=\"buttonClick_submit\", function_owner=self,\r\n position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=1100,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Reset\", click_function=\"buttonClick_reset\", function_owner=self,\r\n position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n\r\n--During Setup\r\n\r\n\r\n--Checks or unchecks buttons\r\nfunction buttonClick_selection(index, obj)\r\n local color = {0,1,0,0.6}\r\n if memoryList[obj.getGUID()] == nil then\r\n self.editButton({index=index, color=color})\r\n --Adding pos/rot to memory table\r\n local pos, rot = obj.getPosition(), obj.getRotation()\r\n --I need to add it like this or it won't save due to indexing issue\r\n memoryList[obj.getGUID()] = {\r\n pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},\r\n rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},\r\n lock=obj.getLock()\r\n }\r\n obj.highlightOn({0,1,0})\r\n else\r\n color = {0.75,0.25,0.25,0.6}\r\n self.editButton({index=index, color=color})\r\n memoryList[obj.getGUID()] = nil\r\n obj.highlightOff()\r\n end\r\nend\r\n\r\n--Cancels selection process\r\nfunction buttonClick_cancel()\r\n memoryList = memoryListBackup\r\n self.clearButtons()\r\n if next(memoryList) == nil then\r\n createSetupButton()\r\n else\r\n createMemoryActionButtons()\r\n end\r\n removeAllHighlights()\r\n broadcastToAll(\"Selection Canceled\", {1,1,1})\r\nend\r\n\r\n--Saves selections\r\nfunction buttonClick_submit()\r\n if next(memoryList) == nil then\r\n broadcastToAll(\"You cannot submit without any selections.\", {0.75, 0.25, 0.25})\r\n else\r\n self.clearButtons()\r\n createMemoryActionButtons()\r\n local count = 0\r\n for guid in pairs(memoryList) do\r\n count = count + 1\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then obj.highlightOff() end\r\n end\r\n broadcastToAll(count..\" Objects Saved\", {1,1,1})\r\n updateSave()\r\n end\r\nend\r\n\r\n--Resets bag to starting status\r\nfunction buttonClick_reset()\r\n memoryList = {}\r\n self.clearButtons()\r\n createSetupButton()\r\n removeAllHighlights()\r\n broadcastToAll(\"Tool Reset\", {1,1,1})\r\n updateSave()\r\nend\r\n\r\n\r\n--After Setup\r\n\r\n\r\n--Creates recall and place buttons\r\nfunction createMemoryActionButtons()\r\n self.createButton({\r\n label=\"Place\", click_function=\"buttonClick_place\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Recall\", click_function=\"buttonClick_recall\", function_owner=self,\r\n position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Setup\", click_function=\"buttonClick_setup\", function_owner=self,\r\n position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n--Sends objects from bag/table to their saved position/rotation\r\nfunction buttonClick_place()\r\n local bagObjList = self.getObjects()\r\n for guid, entry in pairs(memoryList) do\r\n local obj = getObjectFromGUID(guid)\r\n --If obj is out on the table, move it to the saved pos/rot\r\n if obj ~= nil then\r\n obj.setPositionSmooth(entry.pos)\r\n obj.setRotationSmooth(entry.rot)\r\n obj.setLock(entry.lock)\r\n else\r\n --If obj is inside of the bag\r\n for _, bagObj in ipairs(bagObjList) do\r\n if bagObj.guid == guid then\r\n local item = self.takeObject({\r\n guid=guid, position=entry.pos, rotation=entry.rot,\r\n })\r\n item.setLock(entry.lock)\r\n break\r\n end\r\n end\r\n end\r\n end\r\n broadcastToAll(\"Objects Placed\", {1,1,1})\r\nend\r\n\r\n--Recalls objects to bag from table\r\nfunction buttonClick_recall()\r\n for guid, entry in pairs(memoryList) do\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then self.putObject(obj) end\r\n end\r\n broadcastToAll(\"Objects Recalled\", {1,1,1})\r\nend\r\n\r\n\r\n--Utility functions\r\n\r\n\r\n--Find delta (difference) between 2 x/y/z coordinates\r\nfunction findOffsetDistance(p1, p2, obj)\r\n local deltaPos = {}\r\n local bounds = obj.getBounds()\r\n deltaPos.x = (p2.x-p1.x)\r\n deltaPos.y = (p2.y-p1.y) + (bounds.size.y - bounds.offset.y)\r\n deltaPos.z = (p2.z-p1.z)\r\n return deltaPos\r\nend\r\n\r\n--Used to rotate a set of coordinates by an angle\r\nfunction rotateLocalCoordinates(desiredPos, obj)\r\n\tlocal objPos, objRot = obj.getPosition(), obj.getRotation()\r\n local angle = math.rad(objRot.y)\r\n\tlocal x = desiredPos.x * math.cos(angle) - desiredPos.z * math.sin(angle)\r\n\tlocal z = desiredPos.x * math.sin(angle) + desiredPos.z * math.cos(angle)\r\n\t--return {x=objPos.x+x, y=objPos.y+desiredPos.y, z=objPos.z+z}\r\n return {x=x, y=desiredPos.y, z=z}\r\nend\r\n\r\n--Coroutine delay, in seconds\r\nfunction wait(time)\r\n local start = os.time()\r\n repeat coroutine.yield(0) until os.time() > start + time\r\nend\r\n\r\n--Duplicates a table (needed to prevent it making reference to the same objects)\r\nfunction duplicateTable(oldTable)\r\n local newTable = {}\r\n for k, v in pairs(oldTable) do\r\n newTable[k] = v\r\n end\r\n return newTable\r\nend\r\n\r\n--Moves scripted highlight from all objects\r\nfunction removeAllHighlights()\r\n for _, obj in ipairs(getAllObjects()) do\r\n obj.highlightOff()\r\n end\r\nend\r\n\r\n--Round number (num) to the Nth decimal (dec)\r\nfunction round(num, dec)\r\n local mult = 10^(dec or 0)\r\n return math.floor(num * mult + 0.5) / mult\r\nend\r\n", "LuaScriptState": "{\"ml\":{\"aa9d28\":{\"lock\":false,\"pos\":{\"x\":68.0519,\"y\":1.4951,\"z\":-4.7142},\"rot\":{\"x\":0,\"y\":270.0028,\"z\":0}},\"e0001d\":{\"lock\":false,\"pos\":{\"x\":64.7519,\"y\":1.4951,\"z\":-8.5342},\"rot\":{\"x\":0,\"y\":269.9993,\"z\":0}},\"e0001e\":{\"lock\":false,\"pos\":{\"x\":68.0519,\"y\":1.4951,\"z\":-8.5342},\"rot\":{\"x\":0,\"y\":270.0006,\"z\":0}},\"e00020\":{\"lock\":false,\"pos\":{\"x\":64.7519,\"y\":1.4951,\"z\":-4.7142},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}}}}", "XmlUI": "", "ContainedObjects": [ { "GUID": "aa9d28", "Name": "Card", "Transform": { "posX": 68.05187, "posY": 1.49510384, "posZ": -4.71417046, "rotX": -4.77818446E-07, "rotY": 270.002777, "rotZ": -4.571737E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Morphine", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"0e2c8d73-31f0-4d29-97ad-5dfbaab337b2\",\"type\":\"Asset\",\"class\":\"Seeker|Rogue\",\"traits\":\"Item. Science. Illicit\",\"cost\":1,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 102600, "SidewaysCard": false, "CustomDeck": { "1026": { "FaceURL": "https://i.imgur.com/CpqC2MC.jpg", "BackURL": "https://i.imgur.com/pSgCuaW.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0001e", "Name": "Card", "Transform": { "posX": 68.05187, "posY": 1.49510384, "posZ": -8.534183, "rotX": 6.37356038E-07, "rotY": 270.00058, "rotZ": 5.552392E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Morphine", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"f7be1a8a-24b9-48f0-9013-cff883049e95\",\"type\":\"Asset\",\"class\":\"Seeker|Rogue\",\"traits\":\"Item. Science. Illicit\",\"cost\":1,\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 102500, "SidewaysCard": false, "CustomDeck": { "1025": { "FaceURL": "https://i.imgur.com/1O38gSl.jpg", "BackURL": "https://i.imgur.com/URVi6Dy.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00020", "Name": "Card", "Transform": { "posX": 64.75187, "posY": 1.49510384, "posZ": -4.71417046, "rotX": -4.439611E-07, "rotY": 269.999939, "rotZ": -2.804762E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Salt and Light", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"fab0a8ee-42ef-4cf6-8b55-2c4251044eb6\",\"type\":\"Asset\",\"permanent\":true,\"class\":\"Guardian|Mystic\",\"traits\":\"Ritual\",\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 102700, "SidewaysCard": false, "CustomDeck": { "1027": { "FaceURL": "https://i.imgur.com/mvUZbIS.jpg", "BackURL": "https://i.imgur.com/AViIogR.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0001d", "Name": "Card", "Transform": { "posX": 64.75188, "posY": 1.49510384, "posZ": -8.534182, "rotX": 1.51988047E-07, "rotY": 269.999268, "rotZ": -1.24374125E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Goetic Patron", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"1c7c51ee-a298-4462-b335-0c99c25fef70\",\"type\":\"Asset\",\"class\":\"Survivor|Mystic\",\"traits\":\"Ally. Patron. Daemon. Goetia\",\"willpowerIcons\":1,\"wildIcons\":1,\"cost\":2,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 102400, "SidewaysCard": false, "CustomDeck": { "1024": { "FaceURL": "https://i.imgur.com/fi5RZMa.jpg", "BackURL": "https://i.imgur.com/ZyxZud9.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" } ] }, { "GUID": "24c6a6", "Name": "Card", "Transform": { "posX": 67.3706, "posY": 1.49510372, "posZ": 39.6816, "rotX": 3.62588622E-07, "rotY": 269.9908, "rotZ": -1.04201241E-07, "scaleX": 0.5864608, "scaleY": 1.0, "scaleZ": 0.5864608 }, "Nickname": "Simone Toussaint", "Description": "The Priestess", "GMNotes": "{\"TtsZoopGuid\":\"94be00ee-821c-46df-b051-40a2b38e501d\",\"type\":\"Investigator\",\"class\":\"Guardian\",\"traits\":\"Warden. Witch\",\"agilityIcons\":4,\"fightIcons\":1,\"intellectIcons\":3,\"willpowerIcons\":4}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Investigator", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 266400, "SidewaysCard": false, "CustomDeck": { "2664": { "FaceURL": "https://i.imgur.com/DtyO9cb.jpg", "BackURL": "https://i.imgur.com/g5x2NgU.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "a18537", "Name": "Bag", "Transform": { "posX": 41.7009, "posY": 1.2964654, "posZ": 27.0873, "rotX": -4.029494E-07, "rotY": 89.9748154, "rotZ": 1.40795692E-06, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "NoV Mystic Cards", "Description": "", "GMNotes": "", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.675667167, "g": 0.450630128, "b": 0.933797836 }, "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": false, "Hands": false, "MaterialIndex": -1, "MeshIndex": -1, "Bag": { "Order": 0 }, "LuaScript": "function updateSave()\r\n local data_to_save = {[\"ml\"]=memoryList}\r\n saved_data = JSON.encode(data_to_save)\r\n self.script_state = saved_data\r\nend\r\n\r\nfunction onload(saved_data)\r\n if saved_data ~= \"\" then\r\n local loaded_data = JSON.decode(saved_data)\r\n --Set up information off of loaded_data\r\n memoryList = loaded_data.ml\r\n else\r\n --Set up information for if there is no saved saved data\r\n memoryList = {}\r\n end\r\n\r\n if next(memoryList) == nil then\r\n createSetupButton()\r\n else\r\n createMemoryActionButtons()\r\n end\r\nend\r\n\r\n\r\n--Beginning Setup\r\n\r\n\r\n--Make setup button\r\nfunction createSetupButton()\r\n self.createButton({\r\n label=\"Setup\", click_function=\"buttonClick_setup\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n--Triggered by setup button,\r\nfunction buttonClick_setup()\r\n memoryListBackup = duplicateTable(memoryList)\r\n memoryList = {}\r\n self.clearButtons()\r\n createButtonsOnAllObjects()\r\n createSetupActionButtons()\r\nend\r\n\r\n--Creates selection buttons on objects\r\nfunction createButtonsOnAllObjects()\r\n local howManyButtons = 0\r\n for _, obj in ipairs(getAllObjects()) do\r\n if obj ~= self then\r\n local dummyIndex = howManyButtons\r\n --On a normal bag, the button positions aren't the same size as the bag.\r\n globalScaleFactor = 1.25 * 1/self.getScale().x\r\n --Super sweet math to set button positions\r\n local selfPos = self.getPosition()\r\n local objPos = obj.getPosition()\r\n local deltaPos = findOffsetDistance(selfPos, objPos, obj)\r\n local objPos = rotateLocalCoordinates(deltaPos, self)\r\n objPos.x = -objPos.x * globalScaleFactor\r\n objPos.y = objPos.y * globalScaleFactor\r\n objPos.z = objPos.z * globalScaleFactor\r\n --Offset rotation of bag\r\n local rot = self.getRotation()\r\n rot.y = -rot.y + 180\r\n --Create function\r\n local funcName = \"selectButton_\" .. howManyButtons\r\n local func = function() buttonClick_selection(dummyIndex, obj) end\r\n self.setVar(funcName, func)\r\n self.createButton({\r\n click_function=funcName, function_owner=self,\r\n position=objPos, rotation=rot, height=1000, width=1000,\r\n color={0.75,0.25,0.25,0.6},\r\n })\r\n howManyButtons = howManyButtons + 1\r\n end\r\n end\r\nend\r\n\r\n--Creates submit and cancel buttons\r\nfunction createSetupActionButtons()\r\n self.createButton({\r\n label=\"Cancel\", click_function=\"buttonClick_cancel\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=1100,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Submit\", click_function=\"buttonClick_submit\", function_owner=self,\r\n position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=1100,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Reset\", click_function=\"buttonClick_reset\", function_owner=self,\r\n position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n\r\n--During Setup\r\n\r\n\r\n--Checks or unchecks buttons\r\nfunction buttonClick_selection(index, obj)\r\n local color = {0,1,0,0.6}\r\n if memoryList[obj.getGUID()] == nil then\r\n self.editButton({index=index, color=color})\r\n --Adding pos/rot to memory table\r\n local pos, rot = obj.getPosition(), obj.getRotation()\r\n --I need to add it like this or it won't save due to indexing issue\r\n memoryList[obj.getGUID()] = {\r\n pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},\r\n rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},\r\n lock=obj.getLock()\r\n }\r\n obj.highlightOn({0,1,0})\r\n else\r\n color = {0.75,0.25,0.25,0.6}\r\n self.editButton({index=index, color=color})\r\n memoryList[obj.getGUID()] = nil\r\n obj.highlightOff()\r\n end\r\nend\r\n\r\n--Cancels selection process\r\nfunction buttonClick_cancel()\r\n memoryList = memoryListBackup\r\n self.clearButtons()\r\n if next(memoryList) == nil then\r\n createSetupButton()\r\n else\r\n createMemoryActionButtons()\r\n end\r\n removeAllHighlights()\r\n broadcastToAll(\"Selection Canceled\", {1,1,1})\r\nend\r\n\r\n--Saves selections\r\nfunction buttonClick_submit()\r\n if next(memoryList) == nil then\r\n broadcastToAll(\"You cannot submit without any selections.\", {0.75, 0.25, 0.25})\r\n else\r\n self.clearButtons()\r\n createMemoryActionButtons()\r\n local count = 0\r\n for guid in pairs(memoryList) do\r\n count = count + 1\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then obj.highlightOff() end\r\n end\r\n broadcastToAll(count..\" Objects Saved\", {1,1,1})\r\n updateSave()\r\n end\r\nend\r\n\r\n--Resets bag to starting status\r\nfunction buttonClick_reset()\r\n memoryList = {}\r\n self.clearButtons()\r\n createSetupButton()\r\n removeAllHighlights()\r\n broadcastToAll(\"Tool Reset\", {1,1,1})\r\n updateSave()\r\nend\r\n\r\n\r\n--After Setup\r\n\r\n\r\n--Creates recall and place buttons\r\nfunction createMemoryActionButtons()\r\n self.createButton({\r\n label=\"Place\", click_function=\"buttonClick_place\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Recall\", click_function=\"buttonClick_recall\", function_owner=self,\r\n position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Setup\", click_function=\"buttonClick_setup\", function_owner=self,\r\n position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n--Sends objects from bag/table to their saved position/rotation\r\nfunction buttonClick_place()\r\n local bagObjList = self.getObjects()\r\n for guid, entry in pairs(memoryList) do\r\n local obj = getObjectFromGUID(guid)\r\n --If obj is out on the table, move it to the saved pos/rot\r\n if obj ~= nil then\r\n obj.setPositionSmooth(entry.pos)\r\n obj.setRotationSmooth(entry.rot)\r\n obj.setLock(entry.lock)\r\n else\r\n --If obj is inside of the bag\r\n for _, bagObj in ipairs(bagObjList) do\r\n if bagObj.guid == guid then\r\n local item = self.takeObject({\r\n guid=guid, position=entry.pos, rotation=entry.rot,\r\n })\r\n item.setLock(entry.lock)\r\n break\r\n end\r\n end\r\n end\r\n end\r\n broadcastToAll(\"Objects Placed\", {1,1,1})\r\nend\r\n\r\n--Recalls objects to bag from table\r\nfunction buttonClick_recall()\r\n for guid, entry in pairs(memoryList) do\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then self.putObject(obj) end\r\n end\r\n broadcastToAll(\"Objects Recalled\", {1,1,1})\r\nend\r\n\r\n\r\n--Utility functions\r\n\r\n\r\n--Find delta (difference) between 2 x/y/z coordinates\r\nfunction findOffsetDistance(p1, p2, obj)\r\n local deltaPos = {}\r\n local bounds = obj.getBounds()\r\n deltaPos.x = (p2.x-p1.x)\r\n deltaPos.y = (p2.y-p1.y) + (bounds.size.y - bounds.offset.y)\r\n deltaPos.z = (p2.z-p1.z)\r\n return deltaPos\r\nend\r\n\r\n--Used to rotate a set of coordinates by an angle\r\nfunction rotateLocalCoordinates(desiredPos, obj)\r\n\tlocal objPos, objRot = obj.getPosition(), obj.getRotation()\r\n local angle = math.rad(objRot.y)\r\n\tlocal x = desiredPos.x * math.cos(angle) - desiredPos.z * math.sin(angle)\r\n\tlocal z = desiredPos.x * math.sin(angle) + desiredPos.z * math.cos(angle)\r\n\t--return {x=objPos.x+x, y=objPos.y+desiredPos.y, z=objPos.z+z}\r\n return {x=x, y=desiredPos.y, z=z}\r\nend\r\n\r\n--Coroutine delay, in seconds\r\nfunction wait(time)\r\n local start = os.time()\r\n repeat coroutine.yield(0) until os.time() > start + time\r\nend\r\n\r\n--Duplicates a table (needed to prevent it making reference to the same objects)\r\nfunction duplicateTable(oldTable)\r\n local newTable = {}\r\n for k, v in pairs(oldTable) do\r\n newTable[k] = v\r\n end\r\n return newTable\r\nend\r\n\r\n--Moves scripted highlight from all objects\r\nfunction removeAllHighlights()\r\n for _, obj in ipairs(getAllObjects()) do\r\n obj.highlightOff()\r\n end\r\nend\r\n\r\n--Round number (num) to the Nth decimal (dec)\r\nfunction round(num, dec)\r\n local mult = 10^(dec or 0)\r\n return math.floor(num * mult + 0.5) / mult\r\nend\r\n", "LuaScriptState": "{\"ml\":{\"e00001\":{\"lock\":false,\"pos\":{\"x\":67.5377,\"y\":1.4951,\"z\":1.5293},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00002\":{\"lock\":false,\"pos\":{\"x\":64.2377,\"y\":1.4951,\"z\":1.5293},\"rot\":{\"x\":0,\"y\":270.0001,\"z\":0}},\"e00003\":{\"lock\":false,\"pos\":{\"x\":54.3377,\"y\":1.4951,\"z\":1.5293},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00004\":{\"lock\":false,\"pos\":{\"x\":67.5378,\"y\":1.4951,\"z\":-2.2907},\"rot\":{\"x\":0,\"y\":270.0001,\"z\":0}},\"e00005\":{\"lock\":false,\"pos\":{\"x\":64.2377,\"y\":1.4951,\"z\":-2.2907},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00006\":{\"lock\":false,\"pos\":{\"x\":60.9377,\"y\":1.4951,\"z\":1.5293},\"rot\":{\"x\":0,\"y\":270.0001,\"z\":0}},\"e00007\":{\"lock\":false,\"pos\":{\"x\":57.6377,\"y\":1.4951,\"z\":1.5293},\"rot\":{\"x\":0,\"y\":270.0001,\"z\":0}},\"e00008\":{\"lock\":false,\"pos\":{\"x\":60.9377,\"y\":1.4951,\"z\":-2.2907},\"rot\":{\"x\":0,\"y\":270.0002,\"z\":0}},\"e00009\":{\"lock\":false,\"pos\":{\"x\":67.5156,\"y\":1.4951,\"z\":-6.1751},\"rot\":{\"x\":0,\"y\":270.0002,\"z\":0}},\"e0000a\":{\"lock\":false,\"pos\":{\"x\":64.2156,\"y\":1.4951,\"z\":-6.1751},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e0000b\":{\"lock\":false,\"pos\":{\"x\":67.5378,\"y\":1.4951,\"z\":-9.9407},\"rot\":{\"x\":0,\"y\":270.0001,\"z\":0}},\"e0000c\":{\"lock\":false,\"pos\":{\"x\":64.2377,\"y\":1.4951,\"z\":-9.9407},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e0000d\":{\"lock\":false,\"pos\":{\"x\":67.5156,\"y\":1.4951,\"z\":-13.8252},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e0000e\":{\"lock\":false,\"pos\":{\"x\":64.2156,\"y\":1.4951,\"z\":-13.8252},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e0000f\":{\"lock\":false,\"pos\":{\"x\":54.3377,\"y\":1.4951,\"z\":-2.2907},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00010\":{\"lock\":false,\"pos\":{\"x\":67.5156,\"y\":1.4951,\"z\":-17.6552},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00011\":{\"lock\":false,\"pos\":{\"x\":64.2156,\"y\":1.4951,\"z\":-17.6552},\"rot\":{\"x\":0,\"y\":269.9996,\"z\":0}},\"e00012\":{\"lock\":false,\"pos\":{\"x\":57.6377,\"y\":1.4951,\"z\":-6.1207},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00013\":{\"lock\":false,\"pos\":{\"x\":60.9377,\"y\":1.4951,\"z\":-6.1207},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00023\":{\"lock\":false,\"pos\":{\"x\":57.6377,\"y\":1.4951,\"z\":-2.2907},\"rot\":{\"x\":0,\"y\":270.003,\"z\":0}}}}", "XmlUI": "", "ContainedObjects": [ { "GUID": "e00001", "Name": "Card", "Transform": { "posX": 67.5377, "posY": 1.49510384, "posZ": 1.5293, "rotX": -1.33429083E-07, "rotY": 270.000031, "rotZ": 3.519374E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Apotropaic Ward", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"3b89ff0c-8b18-46b4-b963-6dec91ac3391\",\"type\":\"Asset\",\"class\":\"Mystic\",\"traits\":\"Ritual\",\"agilityIcons\":1,\"willpowerIcons\":1,\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100000, "SidewaysCard": false, "CustomDeck": { "1000": { "FaceURL": "https://i.imgur.com/uRR4pQw.jpg", "BackURL": "https://i.imgur.com/ateuHAk.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00002", "Name": "Card", "Transform": { "posX": 64.2377, "posY": 1.49510384, "posZ": 1.5293, "rotX": 1.16485133E-08, "rotY": 270.000061, "rotZ": 3.19068434E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Apotropaic Ward", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"8be2ed07-862e-4f93-86bc-b64819d8a262\",\"type\":\"Asset\",\"class\":\"Mystic\",\"traits\":\"Ritual\",\"agilityIcons\":2,\"willpowerIcons\":1,\"cost\":3,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100100, "SidewaysCard": false, "CustomDeck": { "1001": { "FaceURL": "https://i.imgur.com/74ggCFQ.jpg", "BackURL": "https://i.imgur.com/T3Z8jKp.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00006", "Name": "Card", "Transform": { "posX": 60.9377, "posY": 1.49510384, "posZ": 1.5293, "rotX": -8.257873E-08, "rotY": 270.000061, "rotZ": -6.2545304E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Expel the Spirit", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"3bb35c66-21f3-473f-b280-0e287e6c531f\",\"type\":\"Event\",\"class\":\"Mystic\",\"traits\":\"Spell. Spirit\",\"willpowerIcons\":2,\"cost\":2,\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100500, "SidewaysCard": false, "CustomDeck": { "1005": { "FaceURL": "https://i.imgur.com/62Kotsy.jpg", "BackURL": "https://i.imgur.com/Rue6b9I.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00007", "Name": "Card", "Transform": { "posX": 57.6377, "posY": 1.49510384, "posZ": 1.5293, "rotX": -1.05904419E-07, "rotY": 270.000061, "rotZ": -5.7049764E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Expel the Spirit", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"8ec3d177-d9b8-455b-ae33-3c69026febc1\",\"type\":\"Event\",\"class\":\"Mystic\",\"traits\":\"Spell. Spirit\",\"willpowerIcons\":2,\"cost\":2,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100600, "SidewaysCard": false, "CustomDeck": { "1006": { "FaceURL": "https://i.imgur.com/Qejbgcw.jpg", "BackURL": "https://i.imgur.com/92aKXqK.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00003", "Name": "Card", "Transform": { "posX": 54.3377, "posY": 1.49510384, "posZ": 1.5293, "rotX": 1.448931E-07, "rotY": 269.999969, "rotZ": -8.933981E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Chthonic Channel", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"0384f51f-42d0-400b-b034-17cc4b27bff1\",\"type\":\"Skill\",\"class\":\"Mystic\",\"traits\":\"Innate. Ritual\",\"wildIcons\":1,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100200, "SidewaysCard": false, "CustomDeck": { "1002": { "FaceURL": "https://i.imgur.com/ffzt4SV.jpg", "BackURL": "https://i.imgur.com/9Ga02Sa.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000f", "Name": "Card", "Transform": { "posX": 54.3377, "posY": 1.49510384, "posZ": -2.2907, "rotX": -9.79397754E-08, "rotY": 270.0, "rotZ": -8.526644E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Strange Attractor", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"e5782b2a-299b-4274-b359-c3d3f9fe5918\",\"type\":\"Skill\",\"class\":\"Mystic\",\"traits\":\"Gambit. Paradox\",\"wildIcons\":1,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101400, "SidewaysCard": false, "CustomDeck": { "1014": { "FaceURL": "https://i.imgur.com/jRzkkmT.jpg", "BackURL": "https://i.imgur.com/hm8fwJy.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00023", "Name": "Card", "Transform": { "posX": 57.6377, "posY": 1.49510384, "posZ": -2.2907, "rotX": -7.058338E-08, "rotY": 270.003, "rotZ": -1.56435078E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Light of Tabor", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"161441bf-cf73-4a59-8694-6eaccb6f6615\",\"type\":\"Event\",\"class\":\"Mystic\",\"traits\":\"Spell. Blessed\",\"intellectIcons\":1,\"willpowerIcons\":1,\"cost\":3,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 103100, "SidewaysCard": false, "CustomDeck": { "1031": { "FaceURL": "https://i.imgur.com/ygcr2HS.jpg", "BackURL": "https://i.imgur.com/Q8KKIKW.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00008", "Name": "Card", "Transform": { "posX": 60.9377, "posY": 1.49510384, "posZ": -2.2907, "rotX": -2.891804E-07, "rotY": 270.000183, "rotZ": -5.925732E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Light of Tabor", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"8e33ee09-c5c8-41ac-a823-c8d9acece9ba\",\"type\":\"Event\",\"class\":\"Mystic\",\"traits\":\"Spell. Blessed\",\"willpowerIcons\":1,\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100700, "SidewaysCard": false, "CustomDeck": { "1007": { "FaceURL": "https://i.imgur.com/nLGCfAW.jpg", "BackURL": "https://i.imgur.com/Mxe3xxa.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00005", "Name": "Card", "Transform": { "posX": 64.2377, "posY": 1.49510384, "posZ": -2.2907, "rotX": -4.32595385E-07, "rotY": 269.999939, "rotZ": -4.11085352E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Celestial Boline", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"55120ac8-aaf7-47c2-a3e9-86ef4d57d551\",\"type\":\"Asset\",\"class\":\"Mystic\",\"traits\":\"Item. Relic. Weapon. Melee\",\"fightIcons\":1,\"willpowerIcons\":1,\"cost\":3,\"level\":4}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100400, "SidewaysCard": false, "CustomDeck": { "1004": { "FaceURL": "https://i.imgur.com/n4ZMNas.jpg", "BackURL": "https://i.imgur.com/QhAXiIW.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00004", "Name": "Card", "Transform": { "posX": 67.5378, "posY": 1.49510384, "posZ": -2.2907, "rotX": 1.09810841E-07, "rotY": 270.000061, "rotZ": -1.71555911E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Celestial Boline", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"b253b3a5-34af-4520-b90e-e61697fef380\",\"type\":\"Asset\",\"class\":\"Mystic\",\"traits\":\"Item. Relic. Weapon. Melee\",\"fightIcons\":1,\"cost\":3,\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100300, "SidewaysCard": false, "CustomDeck": { "1003": { "FaceURL": "https://i.imgur.com/z3uHp3K.jpg", "BackURL": "https://i.imgur.com/dewF7bM.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00009", "Name": "Card", "Transform": { "posX": 67.5156, "posY": 1.49510384, "posZ": -6.1751, "rotX": -6.308656E-08, "rotY": 270.000244, "rotZ": 1.35649316E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Luca Gasparotto", "Description": "Fledgling Warlock", "GMNotes": "{\"TtsZoopGuid\":\"ea86229a-ea21-4d45-accd-36db178e84a9\",\"type\":\"Asset\",\"class\":\"Mystic\",\"traits\":\"Ally. Witch\",\"intellectIcons\":1,\"willpowerIcons\":1,\"cost\":4,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100800, "SidewaysCard": false, "CustomDeck": { "1008": { "FaceURL": "https://i.imgur.com/WH6NVCg.jpg", "BackURL": "https://i.imgur.com/au6V06t.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000a", "Name": "Card", "Transform": { "posX": 64.2156, "posY": 1.49510384, "posZ": -6.1751, "rotX": 6.554614E-09, "rotY": 269.999939, "rotZ": -8.103567E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Luca Gasparotto", "Description": "Fledgling Warlock", "GMNotes": "{\"TtsZoopGuid\":\"6018bcf6-1374-4195-bd8e-4aebddf10421\",\"type\":\"Asset\",\"class\":\"Mystic\",\"traits\":\"Ally. Witch\",\"intellectIcons\":2,\"willpowerIcons\":1,\"cost\":3,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100900, "SidewaysCard": false, "CustomDeck": { "1009": { "FaceURL": "https://i.imgur.com/1XEs36B.jpg", "BackURL": "https://i.imgur.com/q5rCZuO.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00013", "Name": "Card", "Transform": { "posX": 60.9377, "posY": 1.49510384, "posZ": -6.1207, "rotX": -1.68831519E-07, "rotY": 270.0, "rotZ": 1.7405678E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Wake the Dead", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"ce51ee78-fd96-42d8-b553-580ce2357d5a\",\"type\":\"Event\",\"class\":\"Mystic\",\"traits\":\"Spell. Ritual\",\"wildIcons\":1,\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101800, "SidewaysCard": false, "CustomDeck": { "1018": { "FaceURL": "https://i.imgur.com/ephvOMx.jpg", "BackURL": "https://i.imgur.com/K1WlzwN.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00012", "Name": "Card", "Transform": { "posX": 57.6377, "posY": 1.49510384, "posZ": -6.1207, "rotX": -1.73507587E-07, "rotY": 270.0, "rotZ": 2.32010422E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Wake the Dead", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"7b26f921-1dc9-4f9d-a361-e45c9020acd0\",\"type\":\"Event\",\"class\":\"Mystic\",\"traits\":\"Spell. Ritual\",\"wildIcons\":1,\"cost\":3,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101700, "SidewaysCard": false, "CustomDeck": { "1017": { "FaceURL": "https://i.imgur.com/aaufnub.jpg", "BackURL": "https://i.imgur.com/iOQc9hl.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000c", "Name": "Card", "Transform": { "posX": 64.2377, "posY": 1.49510384, "posZ": -9.9407, "rotX": 9.985445E-08, "rotY": 269.999939, "rotZ": -2.4112552E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Malediction", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"fb7db820-7088-42d6-9dae-029c3ab44d0a\",\"type\":\"Asset\",\"class\":\"Mystic\",\"traits\":\"Spell\",\"willpowerIcons\":2,\"wildIcons\":1,\"cost\":2,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101100, "SidewaysCard": false, "CustomDeck": { "1011": { "FaceURL": "https://i.imgur.com/YTVIhwM.jpg", "BackURL": "https://i.imgur.com/iu2fPTg.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000b", "Name": "Card", "Transform": { "posX": 67.5378, "posY": 1.49510384, "posZ": -9.9407, "rotX": -1.342354E-07, "rotY": 270.000061, "rotZ": -3.1183145E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Malediction", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"c863d764-1d04-41d1-9166-32ae83b495f6\",\"type\":\"Asset\",\"class\":\"Mystic\",\"traits\":\"Spell\",\"willpowerIcons\":2,\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101000, "SidewaysCard": false, "CustomDeck": { "1010": { "FaceURL": "https://i.imgur.com/8GPDwdb.jpg", "BackURL": "https://i.imgur.com/SRgCpGl.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000d", "Name": "Card", "Transform": { "posX": 67.5156, "posY": 1.49510384, "posZ": -13.8252, "rotX": 6.579143E-08, "rotY": 270.0, "rotZ": 7.50044E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Ouija Board", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"9b98dc39-a504-4d4b-9e5e-02f1125f8631\",\"type\":\"Asset\",\"class\":\"Mystic\",\"traits\":\"Item. Occult\",\"wildIcons\":1,\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101200, "SidewaysCard": false, "CustomDeck": { "1012": { "FaceURL": "https://i.imgur.com/AaSa01S.jpg", "BackURL": "https://i.imgur.com/NqDwX4F.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000e", "Name": "Card", "Transform": { "posX": 64.2156, "posY": 1.49510384, "posZ": -13.8252, "rotX": -2.895079E-08, "rotY": 269.999817, "rotZ": -1.66306666E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Ouija Board", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"8eff77ba-daa7-4bca-8c78-b570689ce982\",\"type\":\"Asset\",\"class\":\"Mystic\",\"traits\":\"Item. Occult\",\"wildIcons\":2,\"cost\":2,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101300, "SidewaysCard": false, "CustomDeck": { "1013": { "FaceURL": "https://i.imgur.com/aDI4tbx.jpg", "BackURL": "https://i.imgur.com/YuD64L6.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00011", "Name": "Card", "Transform": { "posX": 64.2156, "posY": 1.49510384, "posZ": -17.6552, "rotX": 5.71594931E-08, "rotY": 269.999573, "rotZ": -1.630256E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "The Gospel of Aradia", "Description": "Scripture of the Witches", "GMNotes": "{\"TtsZoopGuid\":\"e5eac920-9bd4-4446-85c9-743e5de96615\",\"type\":\"Asset\",\"class\":\"Mystic\",\"traits\":\"Item. Tome. Relic\",\"intellectIcons\":1,\"willpowerIcons\":2,\"cost\":4,\"level\":4}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101600, "SidewaysCard": false, "CustomDeck": { "1016": { "FaceURL": "https://i.imgur.com/rTEyNP4.jpg", "BackURL": "https://i.imgur.com/AZdPHdO.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00010", "Name": "Card", "Transform": { "posX": 67.5156, "posY": 1.49510384, "posZ": -17.6552, "rotX": 7.56579652E-08, "rotY": 270.0, "rotZ": -3.80086469E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "The Gospel of Aradia", "Description": "Scripture of the Witches", "GMNotes": "{\"TtsZoopGuid\":\"5fa19768-5315-41e4-bba6-e75eb5a456ef\",\"type\":\"Asset\",\"class\":\"Mystic\",\"traits\":\"Item. Tome. Relic\",\"intellectIcons\":1,\"willpowerIcons\":1,\"cost\":5,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101500, "SidewaysCard": false, "CustomDeck": { "1015": { "FaceURL": "https://i.imgur.com/ZrBkG4G.jpg", "BackURL": "https://i.imgur.com/lbxgMLk.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" } ] }, { "GUID": "d0beaa", "Name": "Bag", "Transform": { "posX": 41.7035, "posY": 1.29646575, "posZ": 23.2398, "rotX": 1.53285521E-06, "rotY": 89.99995, "rotZ": 2.358165E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "NoV Survivor Cards", "Description": "", "GMNotes": "", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.8397212, "g": 0.2647893, "b": 0.2647893 }, "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": false, "Hands": false, "MaterialIndex": -1, "MeshIndex": -1, "Bag": { "Order": 0 }, "LuaScript": "function updateSave()\r\n local data_to_save = {[\"ml\"]=memoryList}\r\n saved_data = JSON.encode(data_to_save)\r\n self.script_state = saved_data\r\nend\r\n\r\nfunction onload(saved_data)\r\n if saved_data ~= \"\" then\r\n local loaded_data = JSON.decode(saved_data)\r\n --Set up information off of loaded_data\r\n memoryList = loaded_data.ml\r\n else\r\n --Set up information for if there is no saved saved data\r\n memoryList = {}\r\n end\r\n\r\n if next(memoryList) == nil then\r\n createSetupButton()\r\n else\r\n createMemoryActionButtons()\r\n end\r\nend\r\n\r\n\r\n--Beginning Setup\r\n\r\n\r\n--Make setup button\r\nfunction createSetupButton()\r\n self.createButton({\r\n label=\"Setup\", click_function=\"buttonClick_setup\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n--Triggered by setup button,\r\nfunction buttonClick_setup()\r\n memoryListBackup = duplicateTable(memoryList)\r\n memoryList = {}\r\n self.clearButtons()\r\n createButtonsOnAllObjects()\r\n createSetupActionButtons()\r\nend\r\n\r\n--Creates selection buttons on objects\r\nfunction createButtonsOnAllObjects()\r\n local howManyButtons = 0\r\n for _, obj in ipairs(getAllObjects()) do\r\n if obj ~= self then\r\n local dummyIndex = howManyButtons\r\n --On a normal bag, the button positions aren't the same size as the bag.\r\n globalScaleFactor = 1.25 * 1/self.getScale().x\r\n --Super sweet math to set button positions\r\n local selfPos = self.getPosition()\r\n local objPos = obj.getPosition()\r\n local deltaPos = findOffsetDistance(selfPos, objPos, obj)\r\n local objPos = rotateLocalCoordinates(deltaPos, self)\r\n objPos.x = -objPos.x * globalScaleFactor\r\n objPos.y = objPos.y * globalScaleFactor\r\n objPos.z = objPos.z * globalScaleFactor\r\n --Offset rotation of bag\r\n local rot = self.getRotation()\r\n rot.y = -rot.y + 180\r\n --Create function\r\n local funcName = \"selectButton_\" .. howManyButtons\r\n local func = function() buttonClick_selection(dummyIndex, obj) end\r\n self.setVar(funcName, func)\r\n self.createButton({\r\n click_function=funcName, function_owner=self,\r\n position=objPos, rotation=rot, height=1000, width=1000,\r\n color={0.75,0.25,0.25,0.6},\r\n })\r\n howManyButtons = howManyButtons + 1\r\n end\r\n end\r\nend\r\n\r\n--Creates submit and cancel buttons\r\nfunction createSetupActionButtons()\r\n self.createButton({\r\n label=\"Cancel\", click_function=\"buttonClick_cancel\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=1100,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Submit\", click_function=\"buttonClick_submit\", function_owner=self,\r\n position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=1100,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Reset\", click_function=\"buttonClick_reset\", function_owner=self,\r\n position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n\r\n--During Setup\r\n\r\n\r\n--Checks or unchecks buttons\r\nfunction buttonClick_selection(index, obj)\r\n local color = {0,1,0,0.6}\r\n if memoryList[obj.getGUID()] == nil then\r\n self.editButton({index=index, color=color})\r\n --Adding pos/rot to memory table\r\n local pos, rot = obj.getPosition(), obj.getRotation()\r\n --I need to add it like this or it won't save due to indexing issue\r\n memoryList[obj.getGUID()] = {\r\n pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},\r\n rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},\r\n lock=obj.getLock()\r\n }\r\n obj.highlightOn({0,1,0})\r\n else\r\n color = {0.75,0.25,0.25,0.6}\r\n self.editButton({index=index, color=color})\r\n memoryList[obj.getGUID()] = nil\r\n obj.highlightOff()\r\n end\r\nend\r\n\r\n--Cancels selection process\r\nfunction buttonClick_cancel()\r\n memoryList = memoryListBackup\r\n self.clearButtons()\r\n if next(memoryList) == nil then\r\n createSetupButton()\r\n else\r\n createMemoryActionButtons()\r\n end\r\n removeAllHighlights()\r\n broadcastToAll(\"Selection Canceled\", {1,1,1})\r\nend\r\n\r\n--Saves selections\r\nfunction buttonClick_submit()\r\n if next(memoryList) == nil then\r\n broadcastToAll(\"You cannot submit without any selections.\", {0.75, 0.25, 0.25})\r\n else\r\n self.clearButtons()\r\n createMemoryActionButtons()\r\n local count = 0\r\n for guid in pairs(memoryList) do\r\n count = count + 1\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then obj.highlightOff() end\r\n end\r\n broadcastToAll(count..\" Objects Saved\", {1,1,1})\r\n updateSave()\r\n end\r\nend\r\n\r\n--Resets bag to starting status\r\nfunction buttonClick_reset()\r\n memoryList = {}\r\n self.clearButtons()\r\n createSetupButton()\r\n removeAllHighlights()\r\n broadcastToAll(\"Tool Reset\", {1,1,1})\r\n updateSave()\r\nend\r\n\r\n\r\n--After Setup\r\n\r\n\r\n--Creates recall and place buttons\r\nfunction createMemoryActionButtons()\r\n self.createButton({\r\n label=\"Place\", click_function=\"buttonClick_place\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Recall\", click_function=\"buttonClick_recall\", function_owner=self,\r\n position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Setup\", click_function=\"buttonClick_setup\", function_owner=self,\r\n position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n--Sends objects from bag/table to their saved position/rotation\r\nfunction buttonClick_place()\r\n local bagObjList = self.getObjects()\r\n for guid, entry in pairs(memoryList) do\r\n local obj = getObjectFromGUID(guid)\r\n --If obj is out on the table, move it to the saved pos/rot\r\n if obj ~= nil then\r\n obj.setPositionSmooth(entry.pos)\r\n obj.setRotationSmooth(entry.rot)\r\n obj.setLock(entry.lock)\r\n else\r\n --If obj is inside of the bag\r\n for _, bagObj in ipairs(bagObjList) do\r\n if bagObj.guid == guid then\r\n local item = self.takeObject({\r\n guid=guid, position=entry.pos, rotation=entry.rot,\r\n })\r\n item.setLock(entry.lock)\r\n break\r\n end\r\n end\r\n end\r\n end\r\n broadcastToAll(\"Objects Placed\", {1,1,1})\r\nend\r\n\r\n--Recalls objects to bag from table\r\nfunction buttonClick_recall()\r\n for guid, entry in pairs(memoryList) do\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then self.putObject(obj) end\r\n end\r\n broadcastToAll(\"Objects Recalled\", {1,1,1})\r\nend\r\n\r\n\r\n--Utility functions\r\n\r\n\r\n--Find delta (difference) between 2 x/y/z coordinates\r\nfunction findOffsetDistance(p1, p2, obj)\r\n local deltaPos = {}\r\n local bounds = obj.getBounds()\r\n deltaPos.x = (p2.x-p1.x)\r\n deltaPos.y = (p2.y-p1.y) + (bounds.size.y - bounds.offset.y)\r\n deltaPos.z = (p2.z-p1.z)\r\n return deltaPos\r\nend\r\n\r\n--Used to rotate a set of coordinates by an angle\r\nfunction rotateLocalCoordinates(desiredPos, obj)\r\n\tlocal objPos, objRot = obj.getPosition(), obj.getRotation()\r\n local angle = math.rad(objRot.y)\r\n\tlocal x = desiredPos.x * math.cos(angle) - desiredPos.z * math.sin(angle)\r\n\tlocal z = desiredPos.x * math.sin(angle) + desiredPos.z * math.cos(angle)\r\n\t--return {x=objPos.x+x, y=objPos.y+desiredPos.y, z=objPos.z+z}\r\n return {x=x, y=desiredPos.y, z=z}\r\nend\r\n\r\n--Coroutine delay, in seconds\r\nfunction wait(time)\r\n local start = os.time()\r\n repeat coroutine.yield(0) until os.time() > start + time\r\nend\r\n\r\n--Duplicates a table (needed to prevent it making reference to the same objects)\r\nfunction duplicateTable(oldTable)\r\n local newTable = {}\r\n for k, v in pairs(oldTable) do\r\n newTable[k] = v\r\n end\r\n return newTable\r\nend\r\n\r\n--Moves scripted highlight from all objects\r\nfunction removeAllHighlights()\r\n for _, obj in ipairs(getAllObjects()) do\r\n obj.highlightOff()\r\n end\r\nend\r\n\r\n--Round number (num) to the Nth decimal (dec)\r\nfunction round(num, dec)\r\n local mult = 10^(dec or 0)\r\n return math.floor(num * mult + 0.5) / mult\r\nend\r\n", "LuaScriptState": "{\"ml\":{\"e00001\":{\"lock\":false,\"pos\":{\"x\":66.6557,\"y\":1.4951,\"z\":3.1286},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e00002\":{\"lock\":false,\"pos\":{\"x\":63.3557,\"y\":1.4951,\"z\":3.1286},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e00003\":{\"lock\":false,\"pos\":{\"x\":66.6557,\"y\":1.4951,\"z\":-0.6914},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e00004\":{\"lock\":false,\"pos\":{\"x\":63.3557,\"y\":1.4951,\"z\":-0.6914},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00005\":{\"lock\":false,\"pos\":{\"x\":60.0557,\"y\":1.4951,\"z\":3.1286},\"rot\":{\"x\":0,\"y\":269.9997,\"z\":0}},\"e00006\":{\"lock\":false,\"pos\":{\"x\":56.7557,\"y\":1.4951,\"z\":3.1286},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00007\":{\"lock\":false,\"pos\":{\"x\":53.4557,\"y\":1.4951,\"z\":3.1286},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e00008\":{\"lock\":false,\"pos\":{\"x\":66.6557,\"y\":1.4951,\"z\":-4.5214},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e00009\":{\"lock\":false,\"pos\":{\"x\":63.3557,\"y\":1.4951,\"z\":-4.5214},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e0000a\":{\"lock\":false,\"pos\":{\"x\":53.4557,\"y\":1.4951,\"z\":-0.6914},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e0000b\":{\"lock\":false,\"pos\":{\"x\":66.716,\"y\":1.4951,\"z\":-8.3487},\"rot\":{\"x\":0,\"y\":269.9997,\"z\":0}},\"e0000c\":{\"lock\":false,\"pos\":{\"x\":63.3557,\"y\":1.4951,\"z\":-8.3414},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e0000d\":{\"lock\":false,\"pos\":{\"x\":60.0557,\"y\":1.4951,\"z\":-0.6914},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e0000e\":{\"lock\":false,\"pos\":{\"x\":56.7557,\"y\":1.4951,\"z\":-0.6914},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e0000f\":{\"lock\":false,\"pos\":{\"x\":56.7557,\"y\":1.4951,\"z\":-4.5214},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00010\":{\"lock\":false,\"pos\":{\"x\":60.0557,\"y\":1.4951,\"z\":-4.5214},\"rot\":{\"x\":0,\"y\":269.9996,\"z\":0}},\"e00011\":{\"lock\":false,\"pos\":{\"x\":66.6557,\"y\":1.4951,\"z\":-12.1714},\"rot\":{\"x\":0,\"y\":269.9997,\"z\":0}},\"e00012\":{\"lock\":false,\"pos\":{\"x\":63.3557,\"y\":1.4951,\"z\":-12.1714},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00013\":{\"lock\":false,\"pos\":{\"x\":66.6557,\"y\":1.4951,\"z\":-16.0014},\"rot\":{\"x\":0,\"y\":269.9995,\"z\":0}},\"e00014\":{\"lock\":false,\"pos\":{\"x\":63.3557,\"y\":1.4951,\"z\":-16.0014},\"rot\":{\"x\":0,\"y\":270,\"z\":0}}}}", "XmlUI": "", "ContainedObjects": [ { "GUID": "e00007", "Name": "Card", "Transform": { "posX": 53.4557, "posY": 1.49510384, "posZ": 3.1286, "rotX": -1.61453016E-07, "rotY": 269.999817, "rotZ": 8.09612146E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Captured Imagination", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"6870b50c-1565-4d79-b3e6-862d6e5a550c\",\"type\":\"Skill\",\"class\":\"Survivor\",\"traits\":\"Innate. Talent\",\"willpowerIcons\":2,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100600, "SidewaysCard": false, "CustomDeck": { "1006": { "FaceURL": "https://i.imgur.com/PI7qSBE.jpg", "BackURL": "https://i.imgur.com/fgjOuQM.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000a", "Name": "Card", "Transform": { "posX": 53.4557, "posY": 1.49510384, "posZ": -0.691400051, "rotX": -1.71637907E-07, "rotY": 269.999817, "rotZ": 9.265222E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Hasty Aid", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"848dbdb2-6cdd-4e43-816b-593e24e50115\",\"type\":\"Skill\",\"class\":\"Survivor\",\"traits\":\"Practiced\",\"fightIcons\":1,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100900, "SidewaysCard": false, "CustomDeck": { "1009": { "FaceURL": "https://i.imgur.com/SDB1viH.jpg", "BackURL": "https://i.imgur.com/42cM3P6.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00006", "Name": "Card", "Transform": { "posX": 56.7557, "posY": 1.49510384, "posZ": 3.1286, "rotX": -7.597327E-10, "rotY": 269.999878, "rotZ": -1.07296536E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Blessing of Guede Nibo", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"d2540bbf-e2dd-4dc1-bb88-aea7d981564f\",\"type\":\"Event\",\"class\":\"Survivor\",\"traits\":\"Spell. Blessed\",\"willpowerIcons\":2,\"wildIcons\":1,\"cost\":1,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100500, "SidewaysCard": false, "CustomDeck": { "1005": { "FaceURL": "https://i.imgur.com/dqdhMYQ.jpg", "BackURL": "https://i.imgur.com/3SG1ktN.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000e", "Name": "Card", "Transform": { "posX": 56.7557, "posY": 1.49510384, "posZ": -0.6914, "rotX": 1.19206952E-07, "rotY": 270.000031, "rotZ": -4.726285E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Terrifying Realization", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"a02ba41d-e1f8-4f54-b090-ccc2c76d0ce6\",\"type\":\"Event\",\"class\":\"Survivor\",\"traits\":\"Insight\",\"intellectIcons\":1,\"willpowerIcons\":1,\"cost\":1,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101300, "SidewaysCard": false, "CustomDeck": { "1013": { "FaceURL": "https://i.imgur.com/jDFbQrH.jpg", "BackURL": "https://i.imgur.com/EfZy1Sd.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000f", "Name": "Card", "Transform": { "posX": 56.7557, "posY": 1.49510384, "posZ": -4.5214, "rotX": 5.13394971E-09, "rotY": 269.999939, "rotZ": -7.122066E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Downhearted Blues", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"2c1a2a88-b7ce-461a-a772-a0f6339397cb\",\"type\":\"Event\",\"class\":\"Survivor\",\"traits\":\"Song. Fated\",\"agilityIcons\":1,\"cost\":2,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101400, "SidewaysCard": false, "CustomDeck": { "1014": { "FaceURL": "https://i.imgur.com/BSwLqKz.jpg", "BackURL": "https://i.imgur.com/3QO6r1E.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00010", "Name": "Card", "Transform": { "posX": 60.0557, "posY": 1.49510384, "posZ": -4.5214, "rotX": -2.79353909E-08, "rotY": 269.999542, "rotZ": -1.74526349E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Downhearted Blues", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"dc4b0c1b-693d-4677-90ad-566dea32d0e1\",\"type\":\"Event\",\"class\":\"Survivor\",\"traits\":\"Song. Fated\",\"agilityIcons\":1,\"cost\":2,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101500, "SidewaysCard": false, "CustomDeck": { "1015": { "FaceURL": "https://i.imgur.com/HkjIR2Y.jpg", "BackURL": "https://i.imgur.com/juxnFEm.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000d", "Name": "Card", "Transform": { "posX": 60.0557, "posY": 1.49510384, "posZ": -0.6914, "rotX": 8.814242E-08, "rotY": 269.999969, "rotZ": 2.56037929E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Terrifying Realization", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"641d0888-f267-400a-9260-db9ca93bf152\",\"type\":\"Event\",\"class\":\"Survivor\",\"traits\":\"Insight\",\"willpowerIcons\":1,\"cost\":1,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101200, "SidewaysCard": false, "CustomDeck": { "1012": { "FaceURL": "https://i.imgur.com/wRCyOMK.jpg", "BackURL": "https://i.imgur.com/nMyuWXp.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00005", "Name": "Card", "Transform": { "posX": 60.0557, "posY": 1.49510384, "posZ": 3.1286, "rotX": -1.13123477E-07, "rotY": 269.999664, "rotZ": -2.500584E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Blessing of Guede Nibo", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"51d4f41f-e9bc-4d27-a619-85ad873a0c95\",\"type\":\"Event\",\"class\":\"Survivor\",\"traits\":\"Spell. Blessed\",\"willpowerIcons\":2,\"cost\":1,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100400, "SidewaysCard": false, "CustomDeck": { "1004": { "FaceURL": "https://i.imgur.com/INQqzQJ.jpg", "BackURL": "https://i.imgur.com/Kr1kslv.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00002", "Name": "Card", "Transform": { "posX": 63.3557129, "posY": 1.49510384, "posZ": 3.1286335, "rotX": 9.084348E-07, "rotY": 270.0004, "rotZ": -2.30664853E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Allure", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"d51c3668-f6cb-4dcc-a178-9fe83c5c4f15\",\"type\":\"Asset\",\"class\":\"Survivor\",\"traits\":\"Talent\",\"cost\":2,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100100, "SidewaysCard": false, "CustomDeck": { "1001": { "FaceURL": "https://i.imgur.com/gq622PO.jpg", "BackURL": "https://i.imgur.com/dSnOPpg.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00001", "Name": "Card", "Transform": { "posX": 66.65569, "posY": 1.49510384, "posZ": 3.12857771, "rotX": -2.20462759E-08, "rotY": 269.999268, "rotZ": -1.46997451E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Allure", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"5dfca9ab-5c2a-4aca-ba6c-15641cdc1de1\",\"type\":\"Asset\",\"class\":\"Survivor\",\"traits\":\"Talent\",\"cost\":2,\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100000, "SidewaysCard": false, "CustomDeck": { "1000": { "FaceURL": "https://i.imgur.com/gw59POm.jpg", "BackURL": "https://i.imgur.com/Bwt8Q7l.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00003", "Name": "Card", "Transform": { "posX": 66.6557, "posY": 1.49510384, "posZ": -0.691400051, "rotX": -4.930972E-08, "rotY": 269.999817, "rotZ": -5.09123019E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Ambition", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"5d00086d-cebd-4e17-bc77-b165ae5c609e\",\"type\":\"Asset\",\"class\":\"Survivor\",\"traits\":\"Talent\",\"wildIcons\":1,\"cost\":2,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100200, "SidewaysCard": false, "CustomDeck": { "1002": { "FaceURL": "https://i.imgur.com/ixnkD1V.jpg", "BackURL": "https://i.imgur.com/yZgR1gP.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00004", "Name": "Card", "Transform": { "posX": 63.3557, "posY": 1.49510384, "posZ": -0.6914, "rotX": 7.970433E-08, "rotY": 269.999878, "rotZ": 9.721077E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Ambition", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"6cccf386-2bbe-450c-9c57-c373cd3838bc\",\"type\":\"Asset\",\"class\":\"Survivor\",\"traits\":\"Talent\",\"wildIcons\":2,\"cost\":3,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100300, "SidewaysCard": false, "CustomDeck": { "1003": { "FaceURL": "https://i.imgur.com/wSYhQk5.jpg", "BackURL": "https://i.imgur.com/s1IQO3d.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00009", "Name": "Card", "Transform": { "posX": 63.3557, "posY": 1.49510384, "posZ": -4.5214, "rotX": -1.9222891E-07, "rotY": 269.999939, "rotZ": 1.318929E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Ezrulie-je-Wouj's B�ton", "Description": "Illusory Mace of the Red Loa", "GMNotes": "{\"TtsZoopGuid\":\"b1e4efc3-0a89-4510-b256-be66fa1e7201\",\"type\":\"Asset\",\"class\":\"Survivor\",\"traits\":\"Spell. Weapon\",\"agilityIcons\":1,\"fightIcons\":1,\"willpowerIcons\":1,\"cost\":3,\"level\":4}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100800, "SidewaysCard": false, "CustomDeck": { "1008": { "FaceURL": "https://i.imgur.com/scWMhWG.jpg", "BackURL": "https://i.imgur.com/80W9zMx.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00008", "Name": "Card", "Transform": { "posX": 66.6557, "posY": 1.49510384, "posZ": -4.5214, "rotX": -2.54611223E-07, "rotY": 269.999817, "rotZ": 3.2620818E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Ezrulie-je-Wouj's B�ton", "Description": "Illusory Mace of the Red Loa", "GMNotes": "{\"TtsZoopGuid\":\"6a202689-23b7-469e-a427-c773ed41f9f9\",\"type\":\"Asset\",\"class\":\"Survivor\",\"traits\":\"Spell. Weapon\",\"agilityIcons\":1,\"fightIcons\":1,\"willpowerIcons\":1,\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100700, "SidewaysCard": false, "CustomDeck": { "1007": { "FaceURL": "https://i.imgur.com/rj5uURc.jpg", "BackURL": "https://i.imgur.com/TZSmyDU.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000b", "Name": "Card", "Transform": { "posX": 66.716, "posY": 1.49510384, "posZ": -8.3487, "rotX": -1.50039678E-08, "rotY": 269.999725, "rotZ": 1.5575371E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Nora Barber", "Description": "Angel of St. Mary's", "GMNotes": "{\"TtsZoopGuid\":\"a5d685db-7594-458e-9310-63b3a4edcb73\",\"type\":\"Asset\",\"class\":\"Survivor\",\"traits\":\"Ally. Medic\",\"cost\":2,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101000, "SidewaysCard": false, "CustomDeck": { "1010": { "FaceURL": "https://i.imgur.com/2ctBHWn.jpg", "BackURL": "https://i.imgur.com/rkQTJaD.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000c", "Name": "Card", "Transform": { "posX": 63.3557, "posY": 1.49510384, "posZ": -8.3414, "rotX": -1.09617204E-07, "rotY": 269.999878, "rotZ": -1.35551289E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Nora Barber", "Description": "Angel of St. Mary's", "GMNotes": "{\"TtsZoopGuid\":\"c6278d41-b4f9-4cb0-acf9-2547faeb557a\",\"type\":\"Asset\",\"class\":\"Survivor\",\"traits\":\"Ally. Medic\",\"wildIcons\":1,\"cost\":2,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101100, "SidewaysCard": false, "CustomDeck": { "1011": { "FaceURL": "https://i.imgur.com/rxqzRu6.jpg", "BackURL": "https://i.imgur.com/Td3WWYZ.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00012", "Name": "Card", "Transform": { "posX": 63.3557, "posY": 1.49510384, "posZ": -12.1714, "rotX": 1.09031122E-08, "rotY": 269.999939, "rotZ": 3.169085E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Virtuoso", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"263f82df-f519-43aa-b6dc-90e1741edc1a\",\"type\":\"Asset\",\"permanent\":true,\"class\":\"Survivor\",\"traits\":\"Talent\",\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101700, "SidewaysCard": false, "CustomDeck": { "1017": { "FaceURL": "https://i.imgur.com/qtK4JvK.jpg", "BackURL": "https://i.imgur.com/OMZA9t6.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00011", "Name": "Card", "Transform": { "posX": 66.6557, "posY": 1.49510384, "posZ": -12.1714, "rotX": 2.94638447E-08, "rotY": 269.999725, "rotZ": 2.10508361E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Virtuoso", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"a0f0abb4-fa2a-4734-a84d-9736e04b5c33\",\"type\":\"Asset\",\"class\":\"Survivor\",\"traits\":\"Talent\",\"agilityIcons\":1,\"intellectIcons\":1,\"willpowerIcons\":1,\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101600, "SidewaysCard": false, "CustomDeck": { "1016": { "FaceURL": "https://i.imgur.com/zaKtRO8.jpg", "BackURL": "https://i.imgur.com/ggN46Fi.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00013", "Name": "Card", "Transform": { "posX": 66.6557, "posY": 1.49510384, "posZ": -16.0014, "rotX": -5.58798163E-08, "rotY": 269.999542, "rotZ": 2.75711916E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Watchful Psychopomp", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"34f00107-2133-48a2-abb1-382c3a83f3c8\",\"type\":\"Asset\",\"class\":\"Survivor\",\"traits\":\"Ally. Creature. Dreamlands\",\"willpowerIcons\":1,\"wildIcons\":1,\"cost\":2,\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101800, "SidewaysCard": false, "CustomDeck": { "1018": { "FaceURL": "https://i.imgur.com/UOJP4Z4.jpg", "BackURL": "https://i.imgur.com/Q0fIAQt.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00014", "Name": "Card", "Transform": { "posX": 63.3557, "posY": 1.49510384, "posZ": -16.0014, "rotX": -2.09762874E-08, "rotY": 270.0, "rotZ": 4.184346E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Watchful Psychopomp", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"33701eba-6155-4ce3-afca-19622463531c\",\"type\":\"Asset\",\"class\":\"Survivor\",\"traits\":\"Ally. Creature. Dreamlands\",\"willpowerIcons\":1,\"wildIcons\":2,\"cost\":2,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 267600, "SidewaysCard": false, "CustomDeck": { "2676": { "FaceURL": "https://i.imgur.com/XyZZMP6.jpg", "BackURL": "https://i.imgur.com/0WKd1KX.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" } ] }, { "GUID": "e00015", "Name": "Card", "Transform": { "posX": 63.824, "posY": 1.49510384, "posZ": 13.2998, "rotX": -8.804927E-08, "rotY": 269.9993, "rotZ": 8.488666E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Consumed", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"080c839e-6084-469b-b54e-4c94b8f7d37e\",\"type\":\"Treachery\",\"traits\":\"Pact\",\"weakness\":true}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101900, "SidewaysCard": false, "CustomDeck": { "1019": { "FaceURL": "https://i.imgur.com/r69KGtA.jpg", "BackURL": "https://i.imgur.com/EcbhVuh.jpg/", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": false, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00016", "Name": "Card", "Transform": { "posX": 64.0706, "posY": 1.49510384, "posZ": 35.8516, "rotX": 8.018811E-09, "rotY": 270.0257, "rotZ": -8.544599E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Gaze of the Duchess", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"30940ec2-6cb4-47f3-94be-528717c48f28\",\"type\":\"Treachery\",\"traits\":\"Hex. Omen\",\"weakness\":true}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 102000, "SidewaysCard": false, "CustomDeck": { "1020": { "FaceURL": "https://i.imgur.com/LyH7Fjd.jpg", "BackURL": "https://i.imgur.com/EcbhVuh.jpg/", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": false, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00017", "Name": "Card", "Transform": { "posX": 64.0706, "posY": 1.49510384, "posZ": 39.6816, "rotX": -2.09199229E-07, "rotY": 270.0164, "rotZ": 3.00666954E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Sigil of Ezrulie Dantor", "Description": "Keepsake from the Waters", "GMNotes": "{\"TtsZoopGuid\":\"5caf1688-1fb4-4771-832d-08def15a1895\",\"type\":\"Asset\",\"class\":\"Neutral\",\"traits\":\"Item. Charm. Relic\",\"fightIcons\":1,\"willpowerIcons\":2,\"cost\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 102100, "SidewaysCard": false, "CustomDeck": { "1021": { "FaceURL": "https://i.imgur.com/U9DIdhD.jpg", "BackURL": "https://i.imgur.com/djVoRpV.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00019", "Name": "Card", "Transform": { "posX": 67.3707, "posY": 1.49510384, "posZ": 35.8516, "rotX": -2.31550814E-07, "rotY": 269.9955, "rotZ": 3.81092278E-08, "scaleX": 0.5795455, "scaleY": 1.0, "scaleZ": 0.5795455 }, "Nickname": "", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"53fc550e-c88b-4c97-a50d-d14c7d6191d7\",\"type\":\"Minicard\"}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 102300, "SidewaysCard": false, "CustomDeck": { "1023": { "FaceURL": "https://i.imgur.com/LUXeKH7.jpg", "BackURL": "https://i.imgur.com/p0ZgPdq.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0001f", "Name": "Card", "Transform": { "posX": 63.8367, "posY": 1.49510384, "posZ": 17.1568, "rotX": 1.585708E-06, "rotY": 269.996155, "rotZ": -1.56320752E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Written in Blood", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"05f6b498-d068-4c15-a227-cfd493930bdc\",\"type\":\"Event\",\"class\":\"Neutral\",\"traits\":\"Ritual\",\"cost\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 102900, "SidewaysCard": false, "CustomDeck": { "1029": { "FaceURL": "https://i.imgur.com/ScACBso.jpg", "BackURL": "https://i.imgur.com/RoyHJJT.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00039", "Name": "Card", "Transform": { "posX": 67.124, "posY": 1.49510384, "posZ": 17.1198, "rotX": -2.4388774E-07, "rotY": 269.975, "rotZ": 1.35603841E-07, "scaleX": 0.5864608, "scaleY": 1.0, "scaleZ": 0.5864608 }, "Nickname": "Edith Foster", "Description": "The Occultist", "GMNotes": "{\"TtsZoopGuid\":\"00e54a05-edc1-4f18-86e4-2ceafeee215f\",\"type\":\"Investigator\",\"class\":\"Mystic\",\"traits\":\"Cultist. Believer\",\"agilityIcons\":3,\"fightIcons\":3,\"intellectIcons\":3,\"willpowerIcons\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Investigator", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 104900, "SidewaysCard": false, "CustomDeck": { "1049": { "FaceURL": "https://i.imgur.com/TVngk2h.jpg", "BackURL": "https://i.imgur.com/BzmHh65.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0003a", "Name": "Card", "Transform": { "posX": 52.9835, "posY": 1.495104, "posZ": 13.3252, "rotX": 1.99503472E-08, "rotY": 269.99646, "rotZ": 1.01439547E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Engraving of Blindness", "Description": "Mark of the Demiurge", "GMNotes": "{\"TtsZoopGuid\":\"67c26999-509c-4b2b-851e-f98f7936e8d1\",\"type\":\"Asset\",\"permanent\":true,\"class\":\"Neutral\",\"traits\":\"Engraving\"}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 105000, "SidewaysCard": false, "CustomDeck": { "1050": { "FaceURL": "https://i.imgur.com/nMNS0e4.jpg", "BackURL": "https://i.imgur.com/4Zof2od.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0003b", "Name": "Card", "Transform": { "posX": 49.6835, "posY": 1.49510384, "posZ": 13.3252, "rotX": 1.89536173E-08, "rotY": 269.9966, "rotZ": -1.85952165E-09, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Engraving of Fire", "Description": "Mark of the Living Flame", "GMNotes": "{\"TtsZoopGuid\":\"828d63ed-4c51-4932-9837-fbd75b79e498\",\"type\":\"Asset\",\"permanent\":true,\"class\":\"Neutral\",\"traits\":\"Engraving\"}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 105100, "SidewaysCard": false, "CustomDeck": { "1051": { "FaceURL": "https://i.imgur.com/imhIJzn.jpg", "BackURL": "https://i.imgur.com/2ZarRBj.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0003c", "Name": "Card", "Transform": { "posX": 52.9835, "posY": 1.49510384, "posZ": 17.1552, "rotX": -5.741506E-08, "rotY": 269.9968, "rotZ": 1.63646874E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Engraving of Thresholds", "Description": "Mark of the Lurker", "GMNotes": "{\"TtsZoopGuid\":\"0d09f239-2548-4669-9379-85c3d5dcc388\",\"type\":\"Asset\",\"permanent\":true,\"class\":\"Neutral\",\"traits\":\"Engraving\"}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 105200, "SidewaysCard": false, "CustomDeck": { "1052": { "FaceURL": "https://i.imgur.com/frKDUmu.jpg", "BackURL": "https://i.imgur.com/qTHtxU1.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0003d", "Name": "Card", "Transform": { "posX": 56.2835, "posY": 1.49510384, "posZ": 13.3252, "rotX": -1.54431575E-07, "rotY": 269.9964, "rotZ": 7.276185E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Engraving of Masks", "Description": "Mark of the Faceless", "GMNotes": "{\"TtsZoopGuid\":\"8b94fbd4-bc36-48c9-84cd-76fb210306be\",\"type\":\"Asset\",\"permanent\":true,\"class\":\"Neutral\",\"traits\":\"Engraving\"}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 105300, "SidewaysCard": false, "CustomDeck": { "1053": { "FaceURL": "https://i.imgur.com/tEuQAkw.jpg", "BackURL": "https://i.imgur.com/YYQifXQ.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0003e", "Name": "Card", "Transform": { "posX": 56.2835, "posY": 1.495104, "posZ": 17.1552, "rotX": -7.302918E-08, "rotY": 269.9968, "rotZ": 8.767261E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Engraving of Silence", "Description": "Mark of the Winds", "GMNotes": "{\"TtsZoopGuid\":\"673911cc-a949-409d-8748-45df85be7d2e\",\"type\":\"Asset\",\"permanent\":true,\"class\":\"Neutral\",\"traits\":\"Engraving\"}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 105400, "SidewaysCard": false, "CustomDeck": { "1054": { "FaceURL": "https://i.imgur.com/ZlWlRe0.jpg", "BackURL": "https://i.imgur.com/dlIlYHf.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0003f", "Name": "Card", "Transform": { "posX": 59.5832, "posY": 1.49510384, "posZ": 17.1552, "rotX": 1.2609144E-08, "rotY": 269.9963, "rotZ": -1.16635178E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Engraving of the Deep", "Description": "Mark of the Drowned", "GMNotes": "{\"TtsZoopGuid\":\"5a962087-4324-4d5d-b453-e76d901b6d1b\",\"type\":\"Asset\",\"permanent\":true,\"class\":\"Neutral\",\"traits\":\"Engraving\"}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 105500, "SidewaysCard": false, "CustomDeck": { "1055": { "FaceURL": "https://i.imgur.com/UW4i1GQ.jpg", "BackURL": "https://i.imgur.com/PjPdMJq.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00040", "Name": "Card", "Transform": { "posX": 59.5835, "posY": 1.49510372, "posZ": 13.3252, "rotX": -6.457536E-09, "rotY": 269.9966, "rotZ": -3.42548638E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Engraving of Sacrifice", "Description": "Mark of the Woods", "GMNotes": "{\"TtsZoopGuid\":\"c2269fe7-2bb6-41d4-88ff-b9e7502cad28\",\"type\":\"Asset\",\"permanent\":true,\"class\":\"Neutral\",\"traits\":\"Engraving\"}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 105600, "SidewaysCard": false, "CustomDeck": { "1056": { "FaceURL": "https://i.imgur.com/mVesHLC.jpg", "BackURL": "https://i.imgur.com/JuP4bkT.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00041", "Name": "Card", "Transform": { "posX": 49.6835, "posY": 1.49510372, "posZ": 17.1552, "rotX": 1.57618683E-06, "rotY": 269.9966, "rotZ": -4.42329657E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Engraving of Visions", "Description": "Mark of the Shepherd", "GMNotes": "{\"TtsZoopGuid\":\"a3ba4fcc-992a-42ef-8c32-01bcf248b150\",\"type\":\"Asset\",\"permanent\":true,\"class\":\"Neutral\",\"traits\":\"Engraving\"}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 105700, "SidewaysCard": false, "CustomDeck": { "1057": { "FaceURL": "https://i.imgur.com/NbQpXWI.jpg", "BackURL": "https://i.imgur.com/KxxmO6h.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00043", "Name": "Card", "Transform": { "posX": 67.124, "posY": 1.49510384, "posZ": 13.2998, "rotX": 2.844968E-09, "rotY": 269.9869, "rotZ": -4.48976863E-07, "scaleX": 0.5795455, "scaleY": 1.0, "scaleZ": 0.5795455 }, "Nickname": "", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"e9703afc-ddb9-4a21-a91c-658cfb0c1784\",\"type\":\"Minicard\"}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 105900, "SidewaysCard": false, "CustomDeck": { "1059": { "FaceURL": "https://i.imgur.com/Ff8pNCJ.jpg", "BackURL": "https://i.imgur.com/OjhXbuR.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0005c", "Name": "Card", "Transform": { "posX": 67.2442, "posY": 1.49510384, "posZ": 24.5632, "rotX": 1.30045962E-07, "rotY": 269.9872, "rotZ": 1.04904181E-07, "scaleX": 0.5864608, "scaleY": 1.0, "scaleZ": 0.5864608 }, "Nickname": "Elsie Malone", "Description": "The Informant", "GMNotes": "{\"TtsZoopGuid\":\"1030fde5-0c2f-4ced-a29f-5b61dd32c51b\",\"type\":\"Investigator\",\"class\":\"Rogue\",\"traits\":\"Criminal\",\"agilityIcons\":4,\"fightIcons\":2,\"intellectIcons\":2,\"willpowerIcons\":4}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Investigator", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 108000, "SidewaysCard": false, "CustomDeck": { "1080": { "FaceURL": "https://i.imgur.com/hhy7e9r.jpg", "BackURL": "https://i.imgur.com/dRCscAT.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0005d", "Name": "Card", "Transform": { "posX": 63.9442, "posY": 1.49510384, "posZ": 24.5632, "rotX": -1.73202625E-06, "rotY": 269.998, "rotZ": 4.894782E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Quid Pro Quo", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"16a04764-1118-4037-9cdd-7307e6a3e31f\",\"type\":\"Skill\",\"class\":\"Neutral\",\"traits\":\"Gambit. Favor. Service\",\"wildIcons\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 108100, "SidewaysCard": false, "CustomDeck": { "1081": { "FaceURL": "https://i.imgur.com/qEHJJyO.jpg", "BackURL": "https://i.imgur.com/XIwDXZk.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0005f", "Name": "Card", "Transform": { "posX": 67.2442, "posY": 1.49510384, "posZ": 20.7432, "rotX": -2.579497E-07, "rotY": 269.9959, "rotZ": 2.26765692E-07, "scaleX": 0.5795455, "scaleY": 1.0, "scaleZ": 0.5795455 }, "Nickname": "", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"0b2d466c-9d03-4de1-ac3b-af197eba9c06\",\"type\":\"Minicard\"}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 108300, "SidewaysCard": false, "CustomDeck": { "1083": { "FaceURL": "https://i.imgur.com/TeBmcK5.jpg", "BackURL": "https://i.imgur.com/DbUCo9Y.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00078", "Name": "Card", "Transform": { "posX": 63.9117, "posY": 1.49510372, "posZ": 28.0165, "rotX": -4.29037534E-08, "rotY": 269.999939, "rotZ": -2.649405E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Black Lung", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"b11e53c6-3d05-45c0-b848-a05b13147e04\",\"type\":\"Treachery\",\"traits\":\"Injury. Hex\",\"weakness\":true}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 110400, "SidewaysCard": false, "CustomDeck": { "1104": { "FaceURL": "https://i.imgur.com/SPbFLnb.jpg", "BackURL": "https://i.imgur.com/EcbhVuh.jpg/", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": false, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0007a", "Name": "Card", "Transform": { "posX": 63.9117, "posY": 1.49510372, "posZ": 31.8465, "rotX": -1.75302063E-07, "rotY": 269.999939, "rotZ": -8.064503E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "O'Bannion Family Ledger", "Description": "Volume II, C. 1915-1925", "GMNotes": "{\"TtsZoopGuid\":\"02d9a66a-6a69-4818-923e-86d55904fb48\",\"type\":\"Asset\",\"class\":\"Neutral\",\"traits\":\"Item. Tome. Illicit\",\"agilityIcons\":1,\"intellectIcons\":1,\"cost\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 110600, "SidewaysCard": false, "CustomDeck": { "1106": { "FaceURL": "https://i.imgur.com/jsO7KVp.jpg", "BackURL": "https://i.imgur.com/mQ7itNU.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0007b", "Name": "Card", "Transform": { "posX": 67.2117, "posY": 1.49510384, "posZ": 28.0165, "rotX": -1.49139836E-07, "rotY": 269.9955, "rotZ": -8.225175E-08, "scaleX": 0.5795455, "scaleY": 1.0, "scaleZ": 0.5795455 }, "Nickname": "", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"9b9c6570-22fd-4976-8048-ec69e633cf31\",\"type\":\"Minicard\"}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 110700, "SidewaysCard": false, "CustomDeck": { "1107": { "FaceURL": "https://i.imgur.com/zDsKik7.jpg", "BackURL": "https://i.imgur.com/aOcEkiu.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00094", "Name": "Card", "Transform": { "posX": 63.6759, "posY": 1.49510384, "posZ": 9.873, "rotX": -7.15721953E-08, "rotY": 269.9992, "rotZ": -3.13413828E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Cain Adeon, Esquire", "Description": "The Perfect Wingman", "GMNotes": "{\"TtsZoopGuid\":\"02a039e3-c777-498b-b504-d349f3766456\",\"type\":\"Asset\",\"class\":\"Neutral\",\"traits\":\"Ally. Socialite. Patron\",\"wildIcons\":1,\"cost\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 112800, "SidewaysCard": false, "CustomDeck": { "1128": { "FaceURL": "https://i.imgur.com/aPaO72s.jpg", "BackURL": "https://i.imgur.com/Gw12FQ5.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00095", "Name": "Card", "Transform": { "posX": 63.6363, "posY": 1.49510384, "posZ": 7.174, "rotX": -1.01791677E-07, "rotY": 270.0034, "rotZ": -1.31832593E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Camio, The Great Prince", "Description": "Insatiably Inquisitive", "GMNotes": "{\"TtsZoopGuid\":\"8c3c05cd-030b-438c-b9aa-9ba7999771db\",\"type\":\"Asset\",\"traits\":\"Ally. Daemon. Goetia. Patron\",\"weakness\":true,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 112900, "SidewaysCard": false, "CustomDeck": { "1129": { "FaceURL": "https://i.imgur.com/xLVa9ac.jpg", "BackURL": "https://i.imgur.com/dpUTqzc.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00096", "Name": "Card", "Transform": { "posX": 66.9759, "posY": 1.49510384, "posZ": 9.873, "rotX": 1.37068668E-07, "rotY": 269.991577, "rotZ": 1.291846E-07, "scaleX": 0.5864608, "scaleY": 1.0, "scaleZ": 0.5864608 }, "Nickname": "Sebastian Ben�tez", "Description": "The Prot�g�", "GMNotes": "{\"TtsZoopGuid\":\"945244c3-dcb3-4317-a0a2-04d4ad0e2510\",\"type\":\"Investigator\",\"class\":\"Survivor\",\"traits\":\"Socialite. Drifter\",\"agilityIcons\":2,\"fightIcons\":4,\"intellectIcons\":1,\"willpowerIcons\":4}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Investigator", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 113000, "SidewaysCard": false, "CustomDeck": { "1130": { "FaceURL": "https://i.imgur.com/jy6f21R.jpg", "BackURL": "https://i.imgur.com/N1PFr8R.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00097", "Name": "Card", "Transform": { "posX": 66.9363, "posY": 1.49510384, "posZ": 7.1747, "rotX": 5.13735365E-08, "rotY": 269.9994, "rotZ": 1.144255E-07, "scaleX": 0.5795455, "scaleY": 1.0, "scaleZ": 0.5795455 }, "Nickname": "", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"ffab2a33-06bc-464a-88ce-1704adc3d235\",\"type\":\"Minicard\"}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 113100, "SidewaysCard": false, "CustomDeck": { "1131": { "FaceURL": "https://i.imgur.com/dbwvTBD.jpg", "BackURL": "https://i.imgur.com/GCXc5Jf.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e37dcd", "Name": "Bag", "Transform": { "posX": 41.7009, "posY": 1.2964642, "posZ": 34.7373, "rotX": -4.3660048E-08, "rotY": 90.01448, "rotZ": 2.58221633E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "NoV Seeker Cards", "Description": "", "GMNotes": "", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 1.0, "g": 0.670092762, "b": 0.4274503 }, "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": false, "Hands": false, "MaterialIndex": -1, "MeshIndex": -1, "Bag": { "Order": 0 }, "LuaScript": "function updateSave()\r\n local data_to_save = {[\"ml\"]=memoryList}\r\n saved_data = JSON.encode(data_to_save)\r\n self.script_state = saved_data\r\nend\r\n\r\nfunction onload(saved_data)\r\n if saved_data ~= \"\" then\r\n local loaded_data = JSON.decode(saved_data)\r\n --Set up information off of loaded_data\r\n memoryList = loaded_data.ml\r\n else\r\n --Set up information for if there is no saved saved data\r\n memoryList = {}\r\n end\r\n\r\n if next(memoryList) == nil then\r\n createSetupButton()\r\n else\r\n createMemoryActionButtons()\r\n end\r\nend\r\n\r\n\r\n--Beginning Setup\r\n\r\n\r\n--Make setup button\r\nfunction createSetupButton()\r\n self.createButton({\r\n label=\"Setup\", click_function=\"buttonClick_setup\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n--Triggered by setup button,\r\nfunction buttonClick_setup()\r\n memoryListBackup = duplicateTable(memoryList)\r\n memoryList = {}\r\n self.clearButtons()\r\n createButtonsOnAllObjects()\r\n createSetupActionButtons()\r\nend\r\n\r\n--Creates selection buttons on objects\r\nfunction createButtonsOnAllObjects()\r\n local howManyButtons = 0\r\n for _, obj in ipairs(getAllObjects()) do\r\n if obj ~= self then\r\n local dummyIndex = howManyButtons\r\n --On a normal bag, the button positions aren't the same size as the bag.\r\n globalScaleFactor = 1.25 * 1/self.getScale().x\r\n --Super sweet math to set button positions\r\n local selfPos = self.getPosition()\r\n local objPos = obj.getPosition()\r\n local deltaPos = findOffsetDistance(selfPos, objPos, obj)\r\n local objPos = rotateLocalCoordinates(deltaPos, self)\r\n objPos.x = -objPos.x * globalScaleFactor\r\n objPos.y = objPos.y * globalScaleFactor\r\n objPos.z = objPos.z * globalScaleFactor\r\n --Offset rotation of bag\r\n local rot = self.getRotation()\r\n rot.y = -rot.y + 180\r\n --Create function\r\n local funcName = \"selectButton_\" .. howManyButtons\r\n local func = function() buttonClick_selection(dummyIndex, obj) end\r\n self.setVar(funcName, func)\r\n self.createButton({\r\n click_function=funcName, function_owner=self,\r\n position=objPos, rotation=rot, height=1000, width=1000,\r\n color={0.75,0.25,0.25,0.6},\r\n })\r\n howManyButtons = howManyButtons + 1\r\n end\r\n end\r\nend\r\n\r\n--Creates submit and cancel buttons\r\nfunction createSetupActionButtons()\r\n self.createButton({\r\n label=\"Cancel\", click_function=\"buttonClick_cancel\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=1100,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Submit\", click_function=\"buttonClick_submit\", function_owner=self,\r\n position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=1100,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Reset\", click_function=\"buttonClick_reset\", function_owner=self,\r\n position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n\r\n--During Setup\r\n\r\n\r\n--Checks or unchecks buttons\r\nfunction buttonClick_selection(index, obj)\r\n local color = {0,1,0,0.6}\r\n if memoryList[obj.getGUID()] == nil then\r\n self.editButton({index=index, color=color})\r\n --Adding pos/rot to memory table\r\n local pos, rot = obj.getPosition(), obj.getRotation()\r\n --I need to add it like this or it won't save due to indexing issue\r\n memoryList[obj.getGUID()] = {\r\n pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},\r\n rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},\r\n lock=obj.getLock()\r\n }\r\n obj.highlightOn({0,1,0})\r\n else\r\n color = {0.75,0.25,0.25,0.6}\r\n self.editButton({index=index, color=color})\r\n memoryList[obj.getGUID()] = nil\r\n obj.highlightOff()\r\n end\r\nend\r\n\r\n--Cancels selection process\r\nfunction buttonClick_cancel()\r\n memoryList = memoryListBackup\r\n self.clearButtons()\r\n if next(memoryList) == nil then\r\n createSetupButton()\r\n else\r\n createMemoryActionButtons()\r\n end\r\n removeAllHighlights()\r\n broadcastToAll(\"Selection Canceled\", {1,1,1})\r\nend\r\n\r\n--Saves selections\r\nfunction buttonClick_submit()\r\n if next(memoryList) == nil then\r\n broadcastToAll(\"You cannot submit without any selections.\", {0.75, 0.25, 0.25})\r\n else\r\n self.clearButtons()\r\n createMemoryActionButtons()\r\n local count = 0\r\n for guid in pairs(memoryList) do\r\n count = count + 1\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then obj.highlightOff() end\r\n end\r\n broadcastToAll(count..\" Objects Saved\", {1,1,1})\r\n updateSave()\r\n end\r\nend\r\n\r\n--Resets bag to starting status\r\nfunction buttonClick_reset()\r\n memoryList = {}\r\n self.clearButtons()\r\n createSetupButton()\r\n removeAllHighlights()\r\n broadcastToAll(\"Tool Reset\", {1,1,1})\r\n updateSave()\r\nend\r\n\r\n\r\n--After Setup\r\n\r\n\r\n--Creates recall and place buttons\r\nfunction createMemoryActionButtons()\r\n self.createButton({\r\n label=\"Place\", click_function=\"buttonClick_place\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Recall\", click_function=\"buttonClick_recall\", function_owner=self,\r\n position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Setup\", click_function=\"buttonClick_setup\", function_owner=self,\r\n position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n--Sends objects from bag/table to their saved position/rotation\r\nfunction buttonClick_place()\r\n local bagObjList = self.getObjects()\r\n for guid, entry in pairs(memoryList) do\r\n local obj = getObjectFromGUID(guid)\r\n --If obj is out on the table, move it to the saved pos/rot\r\n if obj ~= nil then\r\n obj.setPositionSmooth(entry.pos)\r\n obj.setRotationSmooth(entry.rot)\r\n obj.setLock(entry.lock)\r\n else\r\n --If obj is inside of the bag\r\n for _, bagObj in ipairs(bagObjList) do\r\n if bagObj.guid == guid then\r\n local item = self.takeObject({\r\n guid=guid, position=entry.pos, rotation=entry.rot,\r\n })\r\n item.setLock(entry.lock)\r\n break\r\n end\r\n end\r\n end\r\n end\r\n broadcastToAll(\"Objects Placed\", {1,1,1})\r\nend\r\n\r\n--Recalls objects to bag from table\r\nfunction buttonClick_recall()\r\n for guid, entry in pairs(memoryList) do\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then self.putObject(obj) end\r\n end\r\n broadcastToAll(\"Objects Recalled\", {1,1,1})\r\nend\r\n\r\n\r\n--Utility functions\r\n\r\n\r\n--Find delta (difference) between 2 x/y/z coordinates\r\nfunction findOffsetDistance(p1, p2, obj)\r\n local deltaPos = {}\r\n local bounds = obj.getBounds()\r\n deltaPos.x = (p2.x-p1.x)\r\n deltaPos.y = (p2.y-p1.y) + (bounds.size.y - bounds.offset.y)\r\n deltaPos.z = (p2.z-p1.z)\r\n return deltaPos\r\nend\r\n\r\n--Used to rotate a set of coordinates by an angle\r\nfunction rotateLocalCoordinates(desiredPos, obj)\r\n\tlocal objPos, objRot = obj.getPosition(), obj.getRotation()\r\n local angle = math.rad(objRot.y)\r\n\tlocal x = desiredPos.x * math.cos(angle) - desiredPos.z * math.sin(angle)\r\n\tlocal z = desiredPos.x * math.sin(angle) + desiredPos.z * math.cos(angle)\r\n\t--return {x=objPos.x+x, y=objPos.y+desiredPos.y, z=objPos.z+z}\r\n return {x=x, y=desiredPos.y, z=z}\r\nend\r\n\r\n--Coroutine delay, in seconds\r\nfunction wait(time)\r\n local start = os.time()\r\n repeat coroutine.yield(0) until os.time() > start + time\r\nend\r\n\r\n--Duplicates a table (needed to prevent it making reference to the same objects)\r\nfunction duplicateTable(oldTable)\r\n local newTable = {}\r\n for k, v in pairs(oldTable) do\r\n newTable[k] = v\r\n end\r\n return newTable\r\nend\r\n\r\n--Moves scripted highlight from all objects\r\nfunction removeAllHighlights()\r\n for _, obj in ipairs(getAllObjects()) do\r\n obj.highlightOff()\r\n end\r\nend\r\n\r\n--Round number (num) to the Nth decimal (dec)\r\nfunction round(num, dec)\r\n local mult = 10^(dec or 0)\r\n return math.floor(num * mult + 0.5) / mult\r\nend\r\n", "LuaScriptState": "{\"ml\":{\"6483a5\":{\"lock\":false,\"pos\":{\"x\":57.0107,\"y\":1.4951,\"z\":-5.384},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00001\":{\"lock\":false,\"pos\":{\"x\":63.6107,\"y\":1.4951,\"z\":-20.6841},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00002\":{\"lock\":false,\"pos\":{\"x\":60.3107,\"y\":1.4951,\"z\":-1.554},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00003\":{\"lock\":false,\"pos\":{\"x\":57.0107,\"y\":1.4951,\"z\":-1.554},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00004\":{\"lock\":false,\"pos\":{\"x\":53.7107,\"y\":1.4951,\"z\":-5.384},\"rot\":{\"x\":0,\"y\":269.9997,\"z\":0}},\"e00005\":{\"lock\":false,\"pos\":{\"x\":60.3107,\"y\":1.4951,\"z\":-5.384},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00006\":{\"lock\":false,\"pos\":{\"x\":66.9108,\"y\":1.4951,\"z\":-1.554},\"rot\":{\"x\":0,\"y\":270.0001,\"z\":0}},\"e00007\":{\"lock\":false,\"pos\":{\"x\":63.6107,\"y\":1.4951,\"z\":-1.554},\"rot\":{\"x\":0,\"y\":269.9996,\"z\":0}},\"e00008\":{\"lock\":false,\"pos\":{\"x\":66.9108,\"y\":1.4951,\"z\":-5.384},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00009\":{\"lock\":false,\"pos\":{\"x\":63.6107,\"y\":1.4951,\"z\":-5.384},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e0000a\":{\"lock\":false,\"pos\":{\"x\":53.7107,\"y\":1.4951,\"z\":-1.554},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e0000b\":{\"lock\":false,\"pos\":{\"x\":66.9108,\"y\":1.4951,\"z\":-9.204},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e0000c\":{\"lock\":false,\"pos\":{\"x\":63.6107,\"y\":1.4951,\"z\":-9.204},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e0000d\":{\"lock\":false,\"pos\":{\"x\":66.9108,\"y\":1.4951,\"z\":-13.034},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e0000e\":{\"lock\":false,\"pos\":{\"x\":66.9108,\"y\":1.4951,\"z\":-20.6841},\"rot\":{\"x\":0,\"y\":269.9997,\"z\":0}},\"e0000f\":{\"lock\":false,\"pos\":{\"x\":63.6107,\"y\":1.4951,\"z\":-16.8641},\"rot\":{\"x\":0,\"y\":269.9993,\"z\":0}},\"e00010\":{\"lock\":false,\"pos\":{\"x\":63.6107,\"y\":1.4951,\"z\":-13.034},\"rot\":{\"x\":0,\"y\":269.9995,\"z\":0}},\"e00011\":{\"lock\":false,\"pos\":{\"x\":66.9108,\"y\":1.4951,\"z\":-16.8641},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00012\":{\"lock\":false,\"pos\":{\"x\":60.3107,\"y\":1.4951,\"z\":-9.204},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00013\":{\"lock\":false,\"pos\":{\"x\":57.0107,\"y\":1.4951,\"z\":-9.204},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}}}}", "XmlUI": "", "ContainedObjects": [ { "GUID": "6483a5", "Name": "Card", "Transform": { "posX": 57.0107, "posY": 1.49510384, "posZ": -5.384, "rotX": -1.312816E-07, "rotY": 270.0, "rotZ": 5.15655145E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Pore Over", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"782d2cfc-f455-4a35-ac99-ac97e298a94a\",\"type\":\"Event\",\"class\":\"Seeker\",\"traits\":\"Insight\",\"intellectIcons\":2,\"cost\":2,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 267000, "SidewaysCard": false, "CustomDeck": { "2670": { "FaceURL": "https://i.imgur.com/oo0YyKQ.jpg", "BackURL": "https://i.imgur.com/UOvq4Xh.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00001", "Name": "Card", "Transform": { "posX": 63.6107, "posY": 1.49510384, "posZ": -20.6841, "rotX": -3.603177E-08, "rotY": 270.0, "rotZ": 3.73566955E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Contemporary Asceticism", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"b64eccd4-6cc1-4b19-95dd-78f0d254e4e1\",\"type\":\"Asset\",\"permanent\":true,\"class\":\"Seeker\",\"traits\":\"Condition\",\"level\":5}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100000, "SidewaysCard": false, "CustomDeck": { "1000": { "FaceURL": "https://i.imgur.com/PX43C2k.jpg", "BackURL": "https://i.imgur.com/4dLtlW0.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00002", "Name": "Card", "Transform": { "posX": 60.3107, "posY": 1.49510384, "posZ": -1.554, "rotX": 1.04885792E-07, "rotY": 270.0, "rotZ": 3.89893785E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Dredge the Past", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"40be7660-b9a4-454b-85db-d75f9dc6235e\",\"type\":\"Event\",\"class\":\"Seeker\",\"traits\":\"Insight\",\"intellectIcons\":1,\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100100, "SidewaysCard": false, "CustomDeck": { "1001": { "FaceURL": "https://i.imgur.com/rlpTsod.jpg", "BackURL": "https://i.imgur.com/2QWKxZ8.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00003", "Name": "Card", "Transform": { "posX": 57.0107, "posY": 1.49510384, "posZ": -1.554, "rotX": 9.904807E-08, "rotY": 270.0, "rotZ": 4.26139934E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Dredge the Past", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"971b44a2-bd1d-485c-93dd-4ed39c5c0362\",\"type\":\"Event\",\"class\":\"Seeker\",\"traits\":\"Insight\",\"intellectIcons\":1,\"cost\":3,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100200, "SidewaysCard": false, "CustomDeck": { "1002": { "FaceURL": "https://i.imgur.com/AWnfMDk.jpg", "BackURL": "https://i.imgur.com/4xIHaDr.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00004", "Name": "Card", "Transform": { "posX": 53.7107, "posY": 1.49510384, "posZ": -5.384, "rotX": 7.80206051E-08, "rotY": 269.999725, "rotZ": -1.44317127E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Magnum Opus", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"68ffe32a-be15-4918-983a-bd708882c2ab\",\"type\":\"Skill\",\"victory\":0,\"class\":\"Seeker\",\"traits\":\"Fortune. Developed\",\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100300, "SidewaysCard": false, "CustomDeck": { "1003": { "FaceURL": "https://i.imgur.com/QalOr5y.jpg", "BackURL": "https://i.imgur.com/LG6YiuR.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00005", "Name": "Card", "Transform": { "posX": 60.3107, "posY": 1.49510384, "posZ": -5.384, "rotX": -1.42096454E-07, "rotY": 270.0, "rotZ": 1.00065762E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Pore Over", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"f79836ab-a0a6-45fa-87f7-41bce96d8c6c\",\"type\":\"Event\",\"class\":\"Seeker\",\"traits\":\"Insight\",\"intellectIcons\":1,\"cost\":1,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100400, "SidewaysCard": false, "CustomDeck": { "1004": { "FaceURL": "https://i.imgur.com/TY0ZG9W.jpg", "BackURL": "https://i.imgur.com/QZsgjKT.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00006", "Name": "Card", "Transform": { "posX": 66.9108, "posY": 1.49510384, "posZ": -1.554, "rotX": -2.46435228E-08, "rotY": 270.000061, "rotZ": 2.65118473E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Professor Niall O'Farrell", "Description": "The Persistence of Memory", "GMNotes": "{\"TtsZoopGuid\":\"c4b70ac1-1404-4cdd-88da-f73526a38674\",\"type\":\"Asset\",\"class\":\"Seeker\",\"traits\":\"Ally. Artist. Miskatonic\",\"intellectIcons\":1,\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100500, "SidewaysCard": false, "CustomDeck": { "1005": { "FaceURL": "https://i.imgur.com/FDdyJwb.jpg", "BackURL": "https://i.imgur.com/EFxorTO.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00007", "Name": "Card", "Transform": { "posX": 63.6107, "posY": 1.49510384, "posZ": -1.554, "rotX": -4.13983372E-08, "rotY": 269.999634, "rotZ": -2.78145169E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Professor Niall O'Farrell", "Description": "The Persistence of Memory", "GMNotes": "{\"TtsZoopGuid\":\"f1f4c35a-cc23-4a78-a2cb-a1160cfa5b1b\",\"type\":\"Asset\",\"class\":\"Seeker\",\"traits\":\"Ally. Artist. Miskatonic\",\"intellectIcons\":2,\"cost\":3,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100600, "SidewaysCard": false, "CustomDeck": { "1006": { "FaceURL": "https://i.imgur.com/F52K0Jy.jpg", "BackURL": "https://i.imgur.com/O0FZ0Y1.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00008", "Name": "Card", "Transform": { "posX": 66.9108, "posY": 1.49510384, "posZ": -5.384, "rotX": 6.83641455E-09, "rotY": 269.999878, "rotZ": -9.077664E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Saturnine Foresight", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"805df2c1-cda7-441e-b7ec-0010143ad36c\",\"type\":\"Asset\",\"class\":\"Seeker\",\"traits\":\"Augury. Spell\",\"willpowerIcons\":2,\"cost\":2,\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100700, "SidewaysCard": false, "CustomDeck": { "1007": { "FaceURL": "https://i.imgur.com/X5FcxLy.jpg", "BackURL": "https://i.imgur.com/HmMPuUn.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00009", "Name": "Card", "Transform": { "posX": 63.6107, "posY": 1.49510384, "posZ": -5.384, "rotX": 1.202368E-07, "rotY": 269.9998, "rotZ": -2.71185939E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Saturnine Foresight", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"cf61913c-f05f-4f68-aff9-9f5d5a384fe4\",\"type\":\"Asset\",\"class\":\"Seeker\",\"traits\":\"Augury. Spell\",\"wildIcons\":2,\"cost\":2,\"level\":4}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100800, "SidewaysCard": false, "CustomDeck": { "1008": { "FaceURL": "https://i.imgur.com/K5DmgxT.jpg", "BackURL": "https://i.imgur.com/Y8K0rgX.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000a", "Name": "Card", "Transform": { "posX": 53.7107, "posY": 1.49510384, "posZ": -1.554, "rotX": 1.36398938E-07, "rotY": 269.999939, "rotZ": 5.17139938E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Synaesthesia", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"1e58d232-8dc0-4f13-9658-70b0b4392adc\",\"type\":\"Skill\",\"class\":\"Seeker\",\"traits\":\"Innate. Developed\",\"wildIcons\":1,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100900, "SidewaysCard": false, "CustomDeck": { "1009": { "FaceURL": "https://i.imgur.com/u9gO0O7.jpg", "BackURL": "https://i.imgur.com/OpC5Lcd.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000b", "Name": "Card", "Transform": { "posX": 66.9108, "posY": 1.49510384, "posZ": -9.204, "rotX": -6.096229E-08, "rotY": 269.999878, "rotZ": -1.29717634E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "The Triangular Manuscript", "Description": "Legacy of St. Germain", "GMNotes": "{\"TtsZoopGuid\":\"5e16c181-4719-45f7-bdb6-66297cb8790c\",\"type\":\"Asset\",\"class\":\"Seeker\",\"traits\":\"Item. Tome. Relic. Occult\",\"intellectIcons\":2,\"cost\":3,\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101000, "SidewaysCard": false, "CustomDeck": { "1010": { "FaceURL": "https://i.imgur.com/kYMrCoc.jpg", "BackURL": "https://i.imgur.com/wQO5ODX.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000c", "Name": "Card", "Transform": { "posX": 63.6107, "posY": 1.49510384, "posZ": -9.204, "rotX": -4.73419277E-08, "rotY": 269.999817, "rotZ": -3.55961838E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "The Triangular Manuscript", "Description": "Legacy of St. Germain", "GMNotes": "{\"TtsZoopGuid\":\"afc489d9-fb42-45d9-b731-8f5c33416c1f\",\"type\":\"Asset\",\"class\":\"Seeker\",\"traits\":\"Item. Tome. Relic. Occult\",\"intellectIcons\":2,\"willpowerIcons\":2,\"cost\":3,\"level\":4}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101100, "SidewaysCard": false, "CustomDeck": { "1011": { "FaceURL": "https://i.imgur.com/rMYsb1E.jpg", "BackURL": "https://i.imgur.com/E9IlPyt.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000d", "Name": "Card", "Transform": { "posX": 66.9108, "posY": 1.49510384, "posZ": -13.034, "rotX": 1.30848914E-08, "rotY": 269.999969, "rotZ": -1.04575349E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Timeworn Chronicle", "Description": "Tales Untold", "GMNotes": "{\"TtsZoopGuid\":\"653ab9a9-0ab8-47c5-968f-3d1e02aca0a3\",\"type\":\"Asset\",\"class\":\"Seeker\",\"traits\":\"Item. Tome. Relic\",\"wildIcons\":1,\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101200, "SidewaysCard": false, "CustomDeck": { "1012": { "FaceURL": "https://i.imgur.com/jTdCbiV.jpg", "BackURL": "https://i.imgur.com/RcY0OiU.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000e", "Name": "Card", "Transform": { "posX": 66.9108, "posY": 1.49510384, "posZ": -20.6841, "rotX": -1.41356139E-07, "rotY": 269.999725, "rotZ": 7.194973E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Timeworn Chronicle", "Description": "The Idylls of Lyonesse", "GMNotes": "{\"TtsZoopGuid\":\"ee60305b-a04b-46c0-a069-469414a1d3e6\",\"type\":\"Asset\",\"class\":\"Seeker\",\"traits\":\"Item. Tome. Relic\",\"fightIcons\":1,\"intellectIcons\":1,\"wildIcons\":1,\"cost\":3,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101300, "SidewaysCard": false, "CustomDeck": { "1013": { "FaceURL": "https://i.imgur.com/IhIwDc7.jpg", "BackURL": "https://i.imgur.com/au4oRo1.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000f", "Name": "Card", "Transform": { "posX": 63.6107, "posY": 1.49510384, "posZ": -16.8641, "rotX": -9.441763E-10, "rotY": 269.999329, "rotZ": 1.591521E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Timeworn Chronicle", "Description": "Tall Tales from Kumari Nadu", "GMNotes": "{\"TtsZoopGuid\":\"3b6c8c45-e6ea-41b2-8404-6245dcc70e29\",\"type\":\"Asset\",\"class\":\"Seeker\",\"traits\":\"Item. Tome. Relic\",\"intellectIcons\":1,\"willpowerIcons\":1,\"wildIcons\":1,\"cost\":3,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101400, "SidewaysCard": false, "CustomDeck": { "1014": { "FaceURL": "https://i.imgur.com/bKTBnmA.jpg", "BackURL": "https://i.imgur.com/IlfMiOS.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00010", "Name": "Card", "Transform": { "posX": 63.6107, "posY": 1.49510384, "posZ": -13.034, "rotX": 7.442876E-08, "rotY": 269.999481, "rotZ": 2.7162077E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Timeworn Chronicle", "Description": "The Lesson of Ys", "GMNotes": "{\"TtsZoopGuid\":\"84e2531c-d80d-4226-a44c-f15293e14808\",\"type\":\"Asset\",\"class\":\"Seeker\",\"traits\":\"Item. Tome. Relic\",\"agilityIcons\":1,\"willpowerIcons\":1,\"wildIcons\":1,\"cost\":3,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101500, "SidewaysCard": false, "CustomDeck": { "1015": { "FaceURL": "https://i.imgur.com/gt4IoeS.jpg", "BackURL": "https://i.imgur.com/iZlMpXm.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00011", "Name": "Card", "Transform": { "posX": 66.9108, "posY": 1.49510384, "posZ": -16.8641, "rotX": 1.05179609E-07, "rotY": 269.999939, "rotZ": -3.57422124E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Timeworn Chronicle", "Description": "The Ballad of Cantre'r Gwaelod", "GMNotes": "{\"TtsZoopGuid\":\"b123d5ba-af59-47e0-8fd5-a57e8620e75c\",\"type\":\"Asset\",\"class\":\"Seeker\",\"traits\":\"Item. Tome. Relic\",\"intellectIcons\":1,\"willpowerIcons\":1,\"wildIcons\":1,\"cost\":3,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101600, "SidewaysCard": false, "CustomDeck": { "1016": { "FaceURL": "https://i.imgur.com/499zGc4.jpg", "BackURL": "https://i.imgur.com/P6Np6Zb.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00012", "Name": "Card", "Transform": { "posX": 60.3107, "posY": 1.49510384, "posZ": -9.204, "rotX": 1.28294673E-07, "rotY": 270.000031, "rotZ": -1.1975321E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Undivided Attention", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"c6adf898-be22-4dd9-8973-8dd9323e37ae\",\"type\":\"Event\",\"class\":\"Seeker\",\"traits\":\"Insight\",\"intellectIcons\":1,\"wildIcons\":1,\"cost\":2,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101700, "SidewaysCard": false, "CustomDeck": { "1017": { "FaceURL": "https://i.imgur.com/hEtnHdl.jpg", "BackURL": "https://i.imgur.com/4OA46gb.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00013", "Name": "Card", "Transform": { "posX": 57.0107, "posY": 1.49510384, "posZ": -9.204, "rotX": -7.465195E-09, "rotY": 269.999939, "rotZ": -3.04197727E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Undivided Attention", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"6318072f-fb5b-4923-a11b-c03140dd167b\",\"type\":\"Event\",\"class\":\"Seeker\",\"traits\":\"Insight\",\"intellectIcons\":1,\"wildIcons\":2,\"cost\":2,\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101800, "SidewaysCard": false, "CustomDeck": { "1018": { "FaceURL": "https://i.imgur.com/1r2u6IF.jpg", "BackURL": "https://i.imgur.com/YPPzxZY.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" } ] }, { "GUID": "f89c5b", "Name": "Card", "Transform": { "posX": 67.2117, "posY": 1.49510384, "posZ": 31.846, "rotX": -2.54740542E-07, "rotY": 269.9906, "rotZ": 8.89266545E-08, "scaleX": 0.5864608, "scaleY": 1.0, "scaleZ": 0.5864608 }, "Nickname": "Colin Montgomery", "Description": "The Bookie", "GMNotes": "{\"TtsZoopGuid\":\"316ddf18-cebf-4908-9778-140c98cc6243\",\"type\":\"Investigator\",\"class\":\"Seeker\",\"traits\":\"Assistant. Criminal\",\"agilityIcons\":3,\"fightIcons\":3,\"intellectIcons\":4,\"willpowerIcons\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Investigator", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 266600, "SidewaysCard": false, "CustomDeck": { "2666": { "FaceURL": "https://i.imgur.com/NiWcZel.jpg", "BackURL": "https://i.imgur.com/8b7oT6L.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "fa11c6", "Name": "Bag", "Transform": { "posX": 41.7072, "posY": 1.29646587, "posZ": 30.8959, "rotX": -3.41944961E-08, "rotY": 89.99989, "rotZ": -3.419443E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "NoV Rogue Cards", "Description": "", "GMNotes": "", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.478438258, "g": 0.937282145, "b": 0.5224872 }, "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": false, "Hands": false, "MaterialIndex": -1, "MeshIndex": -1, "Bag": { "Order": 0 }, "LuaScript": "function updateSave()\r\n local data_to_save = {[\"ml\"]=memoryList}\r\n saved_data = JSON.encode(data_to_save)\r\n self.script_state = saved_data\r\nend\r\n\r\nfunction onload(saved_data)\r\n if saved_data ~= \"\" then\r\n local loaded_data = JSON.decode(saved_data)\r\n --Set up information off of loaded_data\r\n memoryList = loaded_data.ml\r\n else\r\n --Set up information for if there is no saved saved data\r\n memoryList = {}\r\n end\r\n\r\n if next(memoryList) == nil then\r\n createSetupButton()\r\n else\r\n createMemoryActionButtons()\r\n end\r\nend\r\n\r\n\r\n--Beginning Setup\r\n\r\n\r\n--Make setup button\r\nfunction createSetupButton()\r\n self.createButton({\r\n label=\"Setup\", click_function=\"buttonClick_setup\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n--Triggered by setup button,\r\nfunction buttonClick_setup()\r\n memoryListBackup = duplicateTable(memoryList)\r\n memoryList = {}\r\n self.clearButtons()\r\n createButtonsOnAllObjects()\r\n createSetupActionButtons()\r\nend\r\n\r\n--Creates selection buttons on objects\r\nfunction createButtonsOnAllObjects()\r\n local howManyButtons = 0\r\n for _, obj in ipairs(getAllObjects()) do\r\n if obj ~= self then\r\n local dummyIndex = howManyButtons\r\n --On a normal bag, the button positions aren't the same size as the bag.\r\n globalScaleFactor = 1.25 * 1/self.getScale().x\r\n --Super sweet math to set button positions\r\n local selfPos = self.getPosition()\r\n local objPos = obj.getPosition()\r\n local deltaPos = findOffsetDistance(selfPos, objPos, obj)\r\n local objPos = rotateLocalCoordinates(deltaPos, self)\r\n objPos.x = -objPos.x * globalScaleFactor\r\n objPos.y = objPos.y * globalScaleFactor\r\n objPos.z = objPos.z * globalScaleFactor\r\n --Offset rotation of bag\r\n local rot = self.getRotation()\r\n rot.y = -rot.y + 180\r\n --Create function\r\n local funcName = \"selectButton_\" .. howManyButtons\r\n local func = function() buttonClick_selection(dummyIndex, obj) end\r\n self.setVar(funcName, func)\r\n self.createButton({\r\n click_function=funcName, function_owner=self,\r\n position=objPos, rotation=rot, height=1000, width=1000,\r\n color={0.75,0.25,0.25,0.6},\r\n })\r\n howManyButtons = howManyButtons + 1\r\n end\r\n end\r\nend\r\n\r\n--Creates submit and cancel buttons\r\nfunction createSetupActionButtons()\r\n self.createButton({\r\n label=\"Cancel\", click_function=\"buttonClick_cancel\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=1100,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Submit\", click_function=\"buttonClick_submit\", function_owner=self,\r\n position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=1100,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Reset\", click_function=\"buttonClick_reset\", function_owner=self,\r\n position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n\r\n--During Setup\r\n\r\n\r\n--Checks or unchecks buttons\r\nfunction buttonClick_selection(index, obj)\r\n local color = {0,1,0,0.6}\r\n if memoryList[obj.getGUID()] == nil then\r\n self.editButton({index=index, color=color})\r\n --Adding pos/rot to memory table\r\n local pos, rot = obj.getPosition(), obj.getRotation()\r\n --I need to add it like this or it won't save due to indexing issue\r\n memoryList[obj.getGUID()] = {\r\n pos={x=round(pos.x,4), y=round(pos.y,4), z=round(pos.z,4)},\r\n rot={x=round(rot.x,4), y=round(rot.y,4), z=round(rot.z,4)},\r\n lock=obj.getLock()\r\n }\r\n obj.highlightOn({0,1,0})\r\n else\r\n color = {0.75,0.25,0.25,0.6}\r\n self.editButton({index=index, color=color})\r\n memoryList[obj.getGUID()] = nil\r\n obj.highlightOff()\r\n end\r\nend\r\n\r\n--Cancels selection process\r\nfunction buttonClick_cancel()\r\n memoryList = memoryListBackup\r\n self.clearButtons()\r\n if next(memoryList) == nil then\r\n createSetupButton()\r\n else\r\n createMemoryActionButtons()\r\n end\r\n removeAllHighlights()\r\n broadcastToAll(\"Selection Canceled\", {1,1,1})\r\nend\r\n\r\n--Saves selections\r\nfunction buttonClick_submit()\r\n if next(memoryList) == nil then\r\n broadcastToAll(\"You cannot submit without any selections.\", {0.75, 0.25, 0.25})\r\n else\r\n self.clearButtons()\r\n createMemoryActionButtons()\r\n local count = 0\r\n for guid in pairs(memoryList) do\r\n count = count + 1\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then obj.highlightOff() end\r\n end\r\n broadcastToAll(count..\" Objects Saved\", {1,1,1})\r\n updateSave()\r\n end\r\nend\r\n\r\n--Resets bag to starting status\r\nfunction buttonClick_reset()\r\n memoryList = {}\r\n self.clearButtons()\r\n createSetupButton()\r\n removeAllHighlights()\r\n broadcastToAll(\"Tool Reset\", {1,1,1})\r\n updateSave()\r\nend\r\n\r\n\r\n--After Setup\r\n\r\n\r\n--Creates recall and place buttons\r\nfunction createMemoryActionButtons()\r\n self.createButton({\r\n label=\"Place\", click_function=\"buttonClick_place\", function_owner=self,\r\n position={0,0.3,-2}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Recall\", click_function=\"buttonClick_recall\", function_owner=self,\r\n position={0,0.3,-2.8}, rotation={0,180,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\n self.createButton({\r\n label=\"Setup\", click_function=\"buttonClick_setup\", function_owner=self,\r\n position={-2,0.3,0}, rotation={0,270,0}, height=350, width=800,\r\n font_size=250, color={0,0,0}, font_color={1,1,1}\r\n })\r\nend\r\n\r\n--Sends objects from bag/table to their saved position/rotation\r\nfunction buttonClick_place()\r\n local bagObjList = self.getObjects()\r\n for guid, entry in pairs(memoryList) do\r\n local obj = getObjectFromGUID(guid)\r\n --If obj is out on the table, move it to the saved pos/rot\r\n if obj ~= nil then\r\n obj.setPositionSmooth(entry.pos)\r\n obj.setRotationSmooth(entry.rot)\r\n obj.setLock(entry.lock)\r\n else\r\n --If obj is inside of the bag\r\n for _, bagObj in ipairs(bagObjList) do\r\n if bagObj.guid == guid then\r\n local item = self.takeObject({\r\n guid=guid, position=entry.pos, rotation=entry.rot,\r\n })\r\n item.setLock(entry.lock)\r\n break\r\n end\r\n end\r\n end\r\n end\r\n broadcastToAll(\"Objects Placed\", {1,1,1})\r\nend\r\n\r\n--Recalls objects to bag from table\r\nfunction buttonClick_recall()\r\n for guid, entry in pairs(memoryList) do\r\n local obj = getObjectFromGUID(guid)\r\n if obj ~= nil then self.putObject(obj) end\r\n end\r\n broadcastToAll(\"Objects Recalled\", {1,1,1})\r\nend\r\n\r\n\r\n--Utility functions\r\n\r\n\r\n--Find delta (difference) between 2 x/y/z coordinates\r\nfunction findOffsetDistance(p1, p2, obj)\r\n local deltaPos = {}\r\n local bounds = obj.getBounds()\r\n deltaPos.x = (p2.x-p1.x)\r\n deltaPos.y = (p2.y-p1.y) + (bounds.size.y - bounds.offset.y)\r\n deltaPos.z = (p2.z-p1.z)\r\n return deltaPos\r\nend\r\n\r\n--Used to rotate a set of coordinates by an angle\r\nfunction rotateLocalCoordinates(desiredPos, obj)\r\n\tlocal objPos, objRot = obj.getPosition(), obj.getRotation()\r\n local angle = math.rad(objRot.y)\r\n\tlocal x = desiredPos.x * math.cos(angle) - desiredPos.z * math.sin(angle)\r\n\tlocal z = desiredPos.x * math.sin(angle) + desiredPos.z * math.cos(angle)\r\n\t--return {x=objPos.x+x, y=objPos.y+desiredPos.y, z=objPos.z+z}\r\n return {x=x, y=desiredPos.y, z=z}\r\nend\r\n\r\n--Coroutine delay, in seconds\r\nfunction wait(time)\r\n local start = os.time()\r\n repeat coroutine.yield(0) until os.time() > start + time\r\nend\r\n\r\n--Duplicates a table (needed to prevent it making reference to the same objects)\r\nfunction duplicateTable(oldTable)\r\n local newTable = {}\r\n for k, v in pairs(oldTable) do\r\n newTable[k] = v\r\n end\r\n return newTable\r\nend\r\n\r\n--Moves scripted highlight from all objects\r\nfunction removeAllHighlights()\r\n for _, obj in ipairs(getAllObjects()) do\r\n obj.highlightOff()\r\n end\r\nend\r\n\r\n--Round number (num) to the Nth decimal (dec)\r\nfunction round(num, dec)\r\n local mult = 10^(dec or 0)\r\n return math.floor(num * mult + 0.5) / mult\r\nend\r\n", "LuaScriptState": "{\"ml\":{\"11610d\":{\"lock\":false,\"pos\":{\"x\":57.3039,\"y\":1.4951,\"z\":-6.9828},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"4cd990\":{\"lock\":false,\"pos\":{\"x\":64.2839,\"y\":1.4951,\"z\":-3.3323},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"5f7838\":{\"lock\":false,\"pos\":{\"x\":54.2807,\"y\":1.4951,\"z\":-3.1689},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00001\":{\"lock\":false,\"pos\":{\"x\":54.3816,\"y\":1.4951,\"z\":0.4865},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00003\":{\"lock\":false,\"pos\":{\"x\":60.9816,\"y\":1.4951,\"z\":0.4865},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e00004\":{\"lock\":false,\"pos\":{\"x\":57.6816,\"y\":1.4951,\"z\":0.4865},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00005\":{\"lock\":false,\"pos\":{\"x\":67.5817,\"y\":1.4951,\"z\":0.4866},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00006\":{\"lock\":false,\"pos\":{\"x\":64.2817,\"y\":1.4951,\"z\":0.4866},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e00007\":{\"lock\":false,\"pos\":{\"x\":67.5817,\"y\":1.4951,\"z\":-3.3334},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00009\":{\"lock\":false,\"pos\":{\"x\":57.6816,\"y\":1.4951,\"z\":-3.3335},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e0000a\":{\"lock\":false,\"pos\":{\"x\":60.9816,\"y\":1.4951,\"z\":-3.3335},\"rot\":{\"x\":0,\"y\":269.9997,\"z\":0}},\"e0000b\":{\"lock\":false,\"pos\":{\"x\":67.5817,\"y\":1.4951,\"z\":-7.1634},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e0000c\":{\"lock\":false,\"pos\":{\"x\":64.2817,\"y\":1.4951,\"z\":-7.1634},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e0000d\":{\"lock\":false,\"pos\":{\"x\":67.5817,\"y\":1.4951,\"z\":-10.9834},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e0000e\":{\"lock\":false,\"pos\":{\"x\":64.2817,\"y\":1.4951,\"z\":-10.9834},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}},\"e0000f\":{\"lock\":false,\"pos\":{\"x\":60.9816,\"y\":1.4951,\"z\":-7.1635},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00011\":{\"lock\":false,\"pos\":{\"x\":67.5817,\"y\":1.4951,\"z\":-14.8135},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00012\":{\"lock\":false,\"pos\":{\"x\":64.2817,\"y\":1.4951,\"z\":-14.8135},\"rot\":{\"x\":0,\"y\":269.9999,\"z\":0}},\"e00013\":{\"lock\":false,\"pos\":{\"x\":64.2817,\"y\":1.4951,\"z\":-18.6435},\"rot\":{\"x\":0,\"y\":270,\"z\":0}},\"e00014\":{\"lock\":false,\"pos\":{\"x\":67.5817,\"y\":1.4951,\"z\":-18.6435},\"rot\":{\"x\":0,\"y\":269.9998,\"z\":0}}}}", "XmlUI": "", "ContainedObjects": [ { "GUID": "e00001", "Name": "Card", "Transform": { "posX": 54.3816, "posY": 1.49510372, "posZ": 0.4865002, "rotX": -4.0154454E-08, "rotY": 270.0, "rotZ": 5.450469E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Beginner's Luck", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"637a1cb3-62d0-4bca-becd-c549859744dc\",\"type\":\"Skill\",\"class\":\"Rogue\",\"traits\":\"Gambit. Fortune\",\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100000, "SidewaysCard": false, "CustomDeck": { "1000": { "FaceURL": "https://i.imgur.com/AucTRCj.jpg", "BackURL": "https://i.imgur.com/6uzf05U.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "5f7838", "Name": "Card", "Transform": { "posX": 54.2807, "posY": 1.49510372, "posZ": -3.1689, "rotX": 3.329363E-07, "rotY": 269.999939, "rotZ": -1.12448106E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Hard Bargain", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"cd5b450d-02dd-4789-a1fc-553fbc8965c7\",\"type\":\"Skill\",\"class\":\"Rogue\",\"traits\":\"Gambit. Illicit\",\"wildIcons\":1,\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100100, "SidewaysCard": false, "CustomDeck": { "1001": { "FaceURL": "https://i.imgur.com/0Xdqjhe.jpg", "BackURL": "https://i.imgur.com/WOMJ19d.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00004", "Name": "Card", "Transform": { "posX": 57.6816, "posY": 1.4951036, "posZ": 0.4865006, "rotX": -5.062844E-08, "rotY": 269.999939, "rotZ": 1.88342057E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Chin Music", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"61a8d86e-ff79-46b3-8eff-a24bfccf277a\",\"type\":\"Event\",\"class\":\"Rogue\",\"traits\":\"Tactic. Trick\",\"fightIcons\":2,\"cost\":2,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100300, "SidewaysCard": false, "CustomDeck": { "1003": { "FaceURL": "https://i.imgur.com/Ks8Zwhp.jpg", "BackURL": "https://i.imgur.com/aWf7FvI.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00009", "Name": "Card", "Transform": { "posX": 57.6816, "posY": 1.49510372, "posZ": -3.3335, "rotX": 6.172488E-08, "rotY": 270.0, "rotZ": -2.73584078E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Grand Entrance", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"0455ea95-fcaa-43c0-aaaf-1c4cd0509d2f\",\"type\":\"Event\",\"class\":\"Rogue\",\"traits\":\"Trick\",\"agilityIcons\":1,\"cost\":0,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100800, "SidewaysCard": false, "CustomDeck": { "1008": { "FaceURL": "https://i.imgur.com/hOj156L.jpg", "BackURL": "https://i.imgur.com/k85YbOO.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "11610d", "Name": "Card", "Transform": { "posX": 57.303875, "posY": 1.49510384, "posZ": -6.982765, "rotX": -8.9891455E-07, "rotY": 270.0, "rotZ": 3.00666244E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Stack the Deck", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"bf41e324-c99a-495a-8479-9a3c38d38471\",\"type\":\"Event\",\"class\":\"Rogue\",\"traits\":\"Trick. Gambit. Fortune\",\"agilityIcons\":1,\"intellectIcons\":1,\"wildIcons\":1,\"level\":3}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 268100, "SidewaysCard": false, "CustomDeck": { "2681": { "FaceURL": "https://i.imgur.com/ELMzkzm.jpg", "BackURL": "https://i.imgur.com/oGVsLCu.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000f", "Name": "Card", "Transform": { "posX": 60.9816, "posY": 1.49510372, "posZ": -7.1635, "rotX": 4.99663E-08, "rotY": 269.999939, "rotZ": -4.8616883E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Shakedown", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"116507fb-db6d-4fcd-a4b0-c065e04ae388\",\"type\":\"Event\",\"class\":\"Rogue\",\"traits\":\"Trick. Illicit\",\"fightIcons\":1,\"wildIcons\":1,\"cost\":0,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101400, "SidewaysCard": false, "CustomDeck": { "1014": { "FaceURL": "https://i.imgur.com/v7yX5x3.jpg", "BackURL": "https://i.imgur.com/GR68DwF.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000a", "Name": "Card", "Transform": { "posX": 60.9816, "posY": 1.49510384, "posZ": -3.3335, "rotX": -3.03334559E-07, "rotY": 269.999725, "rotZ": -2.64289E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Long Farewell", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"5e2ad5b2-8a1f-4941-bebd-8bf5ee9718ae\",\"type\":\"Event\",\"class\":\"Rogue\",\"traits\":\"Trick. Fortune\",\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100900, "SidewaysCard": false, "CustomDeck": { "1009": { "FaceURL": "https://i.imgur.com/txXe6JC.jpg", "BackURL": "https://i.imgur.com/Ej7wwwF.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00003", "Name": "Card", "Transform": { "posX": 60.9816, "posY": 1.49510384, "posZ": 0.4865004, "rotX": 4.96654842E-08, "rotY": 269.999817, "rotZ": 1.03761593E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Chin Music", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"fb44c2f7-5790-4d0b-829d-1e4ce9ed8f00\",\"type\":\"Event\",\"class\":\"Rogue\",\"traits\":\"Tactic. Trick\",\"fightIcons\":2,\"cost\":0,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100200, "SidewaysCard": false, "CustomDeck": { "1002": { "FaceURL": "https://i.imgur.com/nsLqhzx.jpg", "BackURL": "https://i.imgur.com/WLwlFUf.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00006", "Name": "Card", "Transform": { "posX": 64.2817, "posY": 1.4951036, "posZ": 0.4866001, "rotX": 5.86779265E-08, "rotY": 269.999756, "rotZ": 4.940219E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Duelist", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"e4b6b1e4-a51d-4b8c-853f-62afe04694b7\",\"type\":\"Asset\",\"class\":\"Rogue\",\"traits\":\"Talent\",\"agilityIcons\":1,\"fightIcons\":1,\"cost\":2,\"level\":4}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100500, "SidewaysCard": false, "CustomDeck": { "1005": { "FaceURL": "https://i.imgur.com/9m7ogp5.jpg", "BackURL": "https://i.imgur.com/UIG1fcP.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00005", "Name": "Card", "Transform": { "posX": 67.5817, "posY": 1.495104, "posZ": 0.486599952, "rotX": -1.62415361E-08, "rotY": 269.999878, "rotZ": -6.902777E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Duelist", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"7244e998-7f56-4f67-8b3b-4a4323e8117d\",\"type\":\"Asset\",\"class\":\"Rogue\",\"traits\":\"Talent\",\"agilityIcons\":1,\"fightIcons\":1,\"cost\":2,\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100400, "SidewaysCard": false, "CustomDeck": { "1004": { "FaceURL": "https://i.imgur.com/v4zJ3P4.jpg", "BackURL": "https://i.imgur.com/OpAL7fH.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "4cd990", "Name": "Card", "Transform": { "posX": 64.2839, "posY": 1.49510384, "posZ": -3.3323, "rotX": -2.09554059E-07, "rotY": 270.0, "rotZ": -3.60081856E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Entourage", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"4121df61-7246-422c-ac77-00fdea79a124\",\"type\":\"Asset\",\"class\":\"Rogue\",\"traits\":\"Connection\",\"willpowerIcons\":1,\"wildIcons\":1,\"cost\":2,\"level\":4}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 267900, "SidewaysCard": false, "CustomDeck": { "2679": { "FaceURL": "https://i.imgur.com/tKkOviq.jpg", "BackURL": "https://i.imgur.com/rppCtwD.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00007", "Name": "Card", "Transform": { "posX": 67.5817, "posY": 1.49510384, "posZ": -3.3334, "rotX": -3.91060723E-07, "rotY": 270.0, "rotZ": -3.44665239E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Entourage", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"e8df89ce-eaee-4717-9510-3947160ca956\",\"type\":\"Asset\",\"class\":\"Rogue\",\"traits\":\"Connection\",\"willpowerIcons\":1,\"cost\":2,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 100600, "SidewaysCard": false, "CustomDeck": { "1006": { "FaceURL": "https://i.imgur.com/BpZikuG.jpg", "BackURL": "https://i.imgur.com/o4iAWtW.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000b", "Name": "Card", "Transform": { "posX": 67.5817, "posY": 1.49510384, "posZ": -7.1634, "rotX": -6.26254E-08, "rotY": 269.9998, "rotZ": -6.64096E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Madame Bilqis", "Description": "Purveyor of Pleasures", "GMNotes": "{\"TtsZoopGuid\":\"6f263d64-b204-4ea6-a000-5bf6764376e3\",\"type\":\"Asset\",\"class\":\"Rogue\",\"traits\":\"Ally. Entrepreneur. Syndicate\",\"willpowerIcons\":2,\"cost\":4,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101000, "SidewaysCard": false, "CustomDeck": { "1010": { "FaceURL": "https://i.imgur.com/X9ECfNO.jpg", "BackURL": "https://i.imgur.com/FWY1yaH.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000c", "Name": "Card", "Transform": { "posX": 64.2817, "posY": 1.49510372, "posZ": -7.1634, "rotX": -9.293617E-08, "rotY": 269.999939, "rotZ": -1.35674583E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Madame Bilqis", "Description": "Purveyor of Pleasures", "GMNotes": "{\"TtsZoopGuid\":\"fe272985-6a2a-4e7d-8738-34f5c1a7b7b5\",\"type\":\"Asset\",\"class\":\"Rogue\",\"traits\":\"Ally. Entrepreneur. Syndicate\",\"willpowerIcons\":1,\"wildIcons\":2,\"cost\":4,\"level\":5}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101100, "SidewaysCard": false, "CustomDeck": { "1011": { "FaceURL": "https://i.imgur.com/gL6N8rm.jpg", "BackURL": "https://i.imgur.com/rArxgJB.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000e", "Name": "Card", "Transform": { "posX": 64.2817, "posY": 1.49510384, "posZ": -10.9834, "rotX": -5.21918651E-08, "rotY": 269.999817, "rotZ": -5.09697458E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Model 10 Remington", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"5ff270da-16bc-40be-91c7-7794745ead74\",\"type\":\"Asset\",\"class\":\"Rogue\",\"traits\":\"Item. Weapon. Firearm. Illicit\",\"fightIcons\":1,\"wildIcons\":1,\"cost\":4,\"level\":4}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101300, "SidewaysCard": false, "CustomDeck": { "1013": { "FaceURL": "https://i.imgur.com/uGwgCnb.jpg", "BackURL": "https://i.imgur.com/uDVntRf.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e0000d", "Name": "Card", "Transform": { "posX": 67.5817, "posY": 1.49510372, "posZ": -10.9834, "rotX": -5.97916952E-08, "rotY": 269.999939, "rotZ": 4.20796953E-09, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Model 10 Remington", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"4f9df003-7208-4d23-884d-54cd73f6d7ed\",\"type\":\"Asset\",\"class\":\"Rogue\",\"traits\":\"Item. Weapon. Firearm. Illicit\",\"fightIcons\":1,\"wildIcons\":1,\"cost\":4,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101200, "SidewaysCard": false, "CustomDeck": { "1012": { "FaceURL": "https://i.imgur.com/2e9NzSI.jpg", "BackURL": "https://i.imgur.com/262OFRN.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00011", "Name": "Card", "Transform": { "posX": 67.5817, "posY": 1.49510384, "posZ": -14.8135, "rotX": -9.413567E-08, "rotY": 269.999969, "rotZ": -7.78801237E-08, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "The Tear of Ezrulie Freda", "Description": "Pendant of the Black Madonna", "GMNotes": "{\"TtsZoopGuid\":\"8015c46d-d54a-4262-ac67-a8684156b5ef\",\"type\":\"Asset\",\"class\":\"Rogue\",\"traits\":\"Item. Relic. Charm\",\"wildIcons\":2,\"cost\":2,\"level\":2}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101600, "SidewaysCard": false, "CustomDeck": { "1016": { "FaceURL": "https://i.imgur.com/LC0lhR1.jpg", "BackURL": "https://i.imgur.com/hgBrdri.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00012", "Name": "Card", "Transform": { "posX": 64.2817, "posY": 1.49510384, "posZ": -14.8135, "rotX": 9.00585562E-08, "rotY": 269.999939, "rotZ": -2.10808537E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "The Tear of Ezrulie Freda", "Description": "Pendant of the Black Madonna", "GMNotes": "{\"TtsZoopGuid\":\"25de826c-70c2-4197-8405-0be5b828f93f\",\"type\":\"Asset\",\"class\":\"Rogue\",\"traits\":\"Item. Relic. Charm\",\"wildIcons\":4,\"cost\":2,\"level\":5}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101700, "SidewaysCard": false, "CustomDeck": { "1017": { "FaceURL": "https://i.imgur.com/7add98v.jpg", "BackURL": "https://i.imgur.com/4tE47K8.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00013", "Name": "Card", "Transform": { "posX": 64.2817, "posY": 1.49510384, "posZ": -18.6435, "rotX": 2.66303513E-08, "rotY": 270.0, "rotZ": -4.01012585E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Wiretap", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"50b91d9c-d08d-4213-81c1-c711c97cb8e8\",\"type\":\"Asset\",\"class\":\"Rogue\",\"traits\":\"Item. Tool. Illicit\",\"agilityIcons\":1,\"intellectIcons\":1,\"cost\":3,\"level\":1}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 101800, "SidewaysCard": false, "CustomDeck": { "1018": { "FaceURL": "https://i.imgur.com/6r6AEBc.jpg", "BackURL": "https://i.imgur.com/rKXdG7c.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" }, { "GUID": "e00014", "Name": "Card", "Transform": { "posX": 67.5817, "posY": 1.49510384, "posZ": -18.6435, "rotX": -2.47650775E-07, "rotY": 269.999817, "rotZ": 3.7731678E-07, "scaleX": 1.0, "scaleY": 1.0, "scaleZ": 1.0 }, "Nickname": "Wiretap", "Description": "", "GMNotes": "{\"TtsZoopGuid\":\"ab971b63-cccc-4ca1-851a-b31b363b161d\",\"type\":\"Asset\",\"class\":\"Rogue\",\"traits\":\"Item. Tool. Illicit\",\"intellectIcons\":1,\"cost\":3,\"level\":0}", "AltLookAngle": { "x": 0.0, "y": 0.0, "z": 0.0 }, "ColorDiffuse": { "r": 0.713235259, "g": 0.713235259, "b": 0.713235259 }, "Tags": [ "Asset", "PlayerCard" ], "LayoutGroupSortIndex": 0, "Value": 0, "Locked": false, "Grid": true, "Snap": true, "IgnoreFoW": false, "MeasureMovement": false, "DragSelectable": true, "Autoraise": true, "Sticky": true, "Tooltip": true, "GridProjection": false, "HideWhenFaceDown": true, "Hands": true, "CardID": 267800, "SidewaysCard": false, "CustomDeck": { "2678": { "FaceURL": "https://i.imgur.com/uVQ2ruw.jpg", "BackURL": "https://i.imgur.com/MQE5SKc.jpg", "NumWidth": 1, "NumHeight": 1, "BackIsHidden": true, "UniqueBack": true, "Type": 0 } }, "LuaScript": "", "LuaScriptState": "", "XmlUI": "" } ] } ], "AttachedDecals": [ { "Transform": { "posX": -0.0021877822, "posY": -0.08963572, "posZ": -0.00288731651, "rotX": 270.0, "rotY": 359.869568, "rotZ": 0.0, "scaleX": 2.00000215, "scaleY": 2.00000238, "scaleZ": 2.00000262 }, "CustomDecal": { "Name": "dunwich_back", "ImageURL": "http://cloud-3.steamusercontent.com/ugc/959719855119695911/931B9829687A20F4DEADB36DA57B7E6D76792231/", "Size": 7.4 } } ] }