diff --git a/.gitignore b/.gitignore index fdfa581..d9840fc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ TTSModManager.exe bash.exe.stackdump oryxBuildBinary + +# Ownership marker dropped into a tool-managed objects dir (see file/dirops.go) +.ttsmm-managed diff --git a/testdata/simple/SCE.png b/testdata/simple/SCE.png deleted file mode 100644 index 07effe2..0000000 Binary files a/testdata/simple/SCE.png and /dev/null differ diff --git a/testdata/simple/config.json b/testdata/simple/config.json index 7fc9d0d..66eb47d 100644 --- a/testdata/simple/config.json +++ b/testdata/simple/config.json @@ -1,12 +1,30 @@ { - "SaveName": "simple", - "ImagePath": "SCE.png", - "LuaScriptPath": "Global.-1.ttslua", + "CameraStates": [], + "ComponentTags": {}, + "CustomUIAssets": [], + "DecalPallet": [], + "Decals": [], + "GameComplexity": "", + "GameMode": "", + "GameType": "", + "Grid": {}, + "Hands": {}, + "Lighting": {}, + "LuaScript": "", "LuaScriptState": "", - "TabStatesPath": "tabStates.json", - "MusicPlayerPath": "music.json", - "GridPath": "grid.json", - "LightingPath": "lighting.json", - "DecalPalletPath": "decalPallet.json", - "SnapPointsPath": "snapPoints.json" + "MusicPlayer": {}, + "Note": "", + "ObjectStates_order": [ + "15990d", + "196f99", + "22928c" + ], + "SaveName": "", + "Sky": "", + "SnapPoints": [], + "TabStates": {}, + "Table": "", + "Turns": {}, + "VersionNumber": "", + "XmlUI": "" } diff --git a/testdata/simple/json/decalPallet.json b/testdata/simple/json/decalPallet.json deleted file mode 100644 index 81fb07c..0000000 --- a/testdata/simple/json/decalPallet.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - { - "Name": "Achivement Checkmark", - "ImageURL": "http://cloud-3.steamusercontent.com/ugc/1474319121424323663/BC5570ECF747F1B30224461B576E8B0FE7FA5F33/", - "Size": 0.1 - } -] diff --git a/testdata/simple/json/grid.json b/testdata/simple/json/grid.json deleted file mode 100644 index a378e99..0000000 --- a/testdata/simple/json/grid.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "Type": 0, - "Lines": false, - "Color": { - "r": 0.0, - "g": 0.0, - "b": 0.0 - }, - "Opacity": 0.75, - "ThickLines": false, - "Snapping": false, - "Offset": false, - "BothSnapping": false, - "xSize": 2.0, - "ySize": 2.0, - "PosOffset": { - "x": 0.0, - "y": 1.0, - "z": 0.0 - } - } diff --git a/testdata/simple/json/lighting.json b/testdata/simple/json/lighting.json deleted file mode 100644 index c217848..0000000 --- a/testdata/simple/json/lighting.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "LightIntensity": 0.54, - "LightColor": { - "r": 1.0, - "g": 0.9804, - "b": 0.8902 - }, - "AmbientIntensity": 1.3, - "AmbientType": 0, - "AmbientSkyColor": { - "r": 0.5, - "g": 0.5, - "b": 0.5 - }, - "AmbientEquatorColor": { - "r": 0.5, - "g": 0.5, - "b": 0.5 - }, - "AmbientGroundColor": { - "r": 0.5, - "g": 0.5, - "b": 0.5 - }, - "ReflectionIntensity": 1.0, - "LutIndex": 0, - "LutContribution": 1.0 -} diff --git a/testdata/simple/json/music.json b/testdata/simple/json/music.json deleted file mode 100644 index 218bf85..0000000 --- a/testdata/simple/json/music.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "RepeatSong": false, - "PlaylistEntry": 0, - "CurrentAudioTitle": "Laudanum - Atrium Carceri: Black Corner Den", - "CurrentAudioURL": "http://cloud-3.steamusercontent.com/ugc/784110538847453001/4481D1CC5684FCF04AB143954DEFE09E94BF5CEB/", - "AudioLibrary": [ - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538847453001/4481D1CC5684FCF04AB143954DEFE09E94BF5CEB/", - "Item2": "Laudanum - Atrium Carceri: Black Corner Den" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538847453925/A083A3784DAC15D75513F92C54642D58B05FA996/", - "Item2": "Prepare the Stage of Night - Atrium Carceri: Black Corner Den" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538847448789/4E04CB9EBECDF5BEA8EF1B146ACAB711D9AF5F0F/", - "Item2": "An Atrementous City - Atrium Carceri: Black Corner Den" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538847444523/8C8AE52CABE62CF84AEA1B9A6055C0C39375FCDB/", - "Item2": "A Deeper Dream - Atrium Carceri: Black Corner Den" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538847455056/0D6EAB8903C3B6E44CB2F3F2ACF34297F3757DC4/", - "Item2": "Wind-Up Orchestra - Atrium Carceri: Black Corner Den" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538847451936/3D8B9C473889956F22DF84285A5BA9ABBCEE4D8F/", - "Item2": "House of Tinctures - Atrium Carceri: Black Corner Den" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538847450067/DC4A12A8E621CFE19BAB9AB6B6BD30C337B39B27/", - "Item2": "End of the Century - Atrium Carceri: Black Corner Den" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538843610156/990053307E71986B46045FF0EC8BFABBD6EBE7BF/", - "Item2": "Cthulhu - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848438651/B87CFA9DAAB2DDF3ECCD714348B23498AFCC7804/", - "Item2": "Azathoth 1 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848445981/7CAE63540FD2C218DD5B85D53B391C6DE1D0D200/", - "Item2": "Azathoth 2 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848464736/632CB8C59B9E7B0979A40468E0F0AE2ACB1B6B21/", - "Item2": "Nyarlathotep 1 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848480793/17DC9A3323A5381B1DD7316C67F3F554FDC52B27/", - "Item2": "Nyarlathotep 2 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848485973/A65ABDA232410FB64FA0A4BD26431ACDF3E2D46A/", - "Item2": "Nyarlathotep 3 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848495368/3236262EB67C1DFE3DC26574452EDE61B825B201/", - "Item2": "Shub-Niggurath 1 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848498833/955B04EC164A2A2DF6AA683A44451A24E6BC3453/", - "Item2": "Shub-Niggurath 2 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848501343/E56987BC93B5E591A7764C29400DC29CCBFDD3DD/", - "Item2": "Yog-Sothoth 1 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848504941/FA9BA511380775C163A0C0F08FA3D1CA033E68E2/", - "Item2": "Yog-Sothoth 2 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848530903/E08BB3474D49477CAA9B78D3A8AA54FDC757B351/", - "Item2": "The Gargantuan Tower - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848530379/F1C98200F021A2471E5575DE934C62C927A8FFA4/", - "Item2": "The Dark Mother - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848526667/76C6786A4A463EF6A7E43DE6C407246A8ED5D6F6/", - "Item2": "Across the Sea of the Dead - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848527228/A96DC0E3ED5C000807E8C8600BA52F9282FE35EB/", - "Item2": "Black Needle - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848527836/48245BF2494C1865834A412BC7E591EA04F3A919/", - "Item2": "Decrepit City - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848529472/D4C99D8D6C0E16AB561FA6C190B18E96D808DE8B/", - "Item2": "Sacred Slab - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848525938/26EC4322860F6AE86A1EADBED45E91C6E6F599B0/", - "Item2": "200 Days - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848528926/CC697AF9346939B202B65F863B641DC562039E0F/", - "Item2": "Industrial District - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848528271/E2BA3FB96D587B12148FE05FEA5E4E5C886CAA43/", - "Item2": "Heart of the Metropolis - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848529861/BC675583A20F58532A065945588D352295AFDDB9/", - "Item2": "The Cowled Seers - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848531283/612B88F51901DE770452542640D1F89C9604BDBF/", - "Item2": "The Machine - Atrium Carceri: Metropolis" - } - ] - } diff --git a/testdata/simple/json/snapPoints.json b/testdata/simple/json/snapPoints.json deleted file mode 100644 index 4d1fc03..0000000 --- a/testdata/simple/json/snapPoints.json +++ /dev/null @@ -1,3948 +0,0 @@ -[ - { - "Position": { - "x": -3.845435, - "y": 1.58976722, - "z": 10.3834543 - }, - "Rotation": { - "x": 359.919739, - "y": 269.999573, - "z": 0.0168350544 - } - }, - { - "Position": { - "x": -2.72472644, - "y": 1.585399, - "z": 0.373324752 - } - }, - { - "Position": { - "x": -5.31640673, - "y": 1.58825409, - "z": 0.378317744 - } - }, - { - "Position": { - "x": -2.68854523, - "y": 1.58325064, - "z": -5.04852962 - } - }, - { - "Position": { - "x": -3.95596576, - "y": 1.58430552, - "z": -10.4411573 - }, - "Rotation": { - "x": 359.919739, - "y": 270.003235, - "z": 0.01682912 - } - }, - { - "Position": { - "x": 1.75446582, - "y": 1.574745, - "z": -14.1857309 - }, - "Rotation": { - "x": 0.0113445576, - "y": 315.009125, - "z": 0.0220897216 - } - }, - { - "Position": { - "x": -47.7640343, - "y": 1.54184234, - "z": -21.1023788 - }, - "Rotation": { - "x": 359.9201, - "y": 270.000183, - "z": 0.0168620814 - } - }, - { - "Position": { - "x": -47.7640343, - "y": 1.54165757, - "z": -22.3407784 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0006, - "z": 0.0168691035 - } - }, - { - "Position": { - "x": -47.7640266, - "y": 1.54117012, - "z": -23.5710926 - }, - "Rotation": { - "x": 359.9201, - "y": 270.00058, - "z": 0.0168637782 - } - }, - { - "Position": { - "x": -47.7639427, - "y": 1.55540693, - "z": 23.50612 - }, - "Rotation": { - "x": 359.9201, - "y": 270.000366, - "z": 0.016871931 - } - }, - { - "Position": { - "x": -47.7639427, - "y": 1.55472648, - "z": 22.2677231 - }, - "Rotation": { - "x": 359.9201, - "y": 270.000977, - "z": 0.0168490242 - } - }, - { - "Position": { - "x": -47.7639351, - "y": 1.55435538, - "z": 21.0374069 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0006, - "z": 0.0168621428 - } - }, - { - "Position": { - "x": -20.2555027, - "y": 1.515446, - "z": 19.26074 - }, - "Rotation": { - "x": 359.983154, - "y": 0.0197058022, - "z": 359.9201 - } - }, - { - "Position": { - "x": -19.0251865, - "y": 1.51380873, - "z": 19.26075 - }, - "Rotation": { - "x": 359.983154, - "y": 0.0200998988, - "z": 359.9201 - } - }, - { - "Position": { - "x": -17.7867889, - "y": 1.51204312, - "z": 19.26075 - }, - "Rotation": { - "x": 359.983154, - "y": 0.019635139, - "z": 359.9201 - } - }, - { - "Position": { - "x": -20.1443539, - "y": 1.50389183, - "z": -19.3585243 - }, - "Rotation": { - "x": 0.0168991, - "y": 179.987747, - "z": 0.07989301 - } - }, - { - "Position": { - "x": -18.9059563, - "y": 1.50211513, - "z": -19.3585243 - }, - "Rotation": { - "x": 0.0169066451, - "y": 179.9881, - "z": 0.07989447 - } - }, - { - "Position": { - "x": -17.6756458, - "y": 1.50049651, - "z": -19.358511 - }, - "Rotation": { - "x": 0.0169040821, - "y": 179.987854, - "z": 0.07989501 - } - }, - { - "Position": { - "x": -43.37005, - "y": 1.64700723, - "z": 15.1900015 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0276, - "z": 0.0168321952 - } - }, - { - "Position": { - "x": -43.370018, - "y": 1.64425993, - "z": 7.56962061 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027618, - "z": 0.0168310646 - } - }, - { - "Position": { - "x": -43.3700027, - "y": 1.64225531, - "z": -0.02999994 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0274, - "z": 0.0168344658 - } - }, - { - "Position": { - "x": -43.3700638, - "y": 1.63971853, - "z": -7.7 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0277, - "z": 0.0168305077 - } - }, - { - "Position": { - "x": -43.37012, - "y": 1.63784754, - "z": -15.28 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027069, - "z": 0.0168322 - } - }, - { - "Position": { - "x": -36.7733078, - "y": 1.62873137, - "z": -15.28 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0271, - "z": 0.0168333072 - } - }, - { - "Position": { - "x": -36.77326, - "y": 1.63104331, - "z": -7.7 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0277, - "z": 0.0168298464 - } - }, - { - "Position": { - "x": -36.77319, - "y": 1.63347471, - "z": -0.0299996752 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027466, - "z": 0.016830802 - } - }, - { - "Position": { - "x": -36.77321, - "y": 1.63546467, - "z": 7.57000065 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027649, - "z": 0.0168310981 - } - }, - { - "Position": { - "x": -36.77324, - "y": 1.6375246, - "z": 15.1900024 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027466, - "z": 0.0168305077 - } - }, - { - "Position": { - "x": -30.224287, - "y": 1.62843, - "z": 15.1900015 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0276, - "z": 0.0168302115 - } - }, - { - "Position": { - "x": -30.2242565, - "y": 1.62627017, - "z": 7.57 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027618, - "z": 0.0168303512 - } - }, - { - "Position": { - "x": -30.2242374, - "y": 1.62384152, - "z": -0.0299994443 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027466, - "z": 0.01683095 - } - }, - { - "Position": { - "x": -30.2243061, - "y": 1.62182045, - "z": -7.70000029 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027679, - "z": 0.0168308988 - } - }, - { - "Position": { - "x": -30.2243557, - "y": 1.619888, - "z": -15.28 - }, - "Rotation": { - "x": 359.9201, - "y": 270.026978, - "z": 0.0168320984 - } - }, - { - "Position": { - "x": -23.6766357, - "y": 1.61027014, - "z": -15.2800007 - }, - "Rotation": { - "x": 359.9201, - "y": 270.02713, - "z": 0.0168321785 - } - }, - { - "Position": { - "x": -23.67659, - "y": 1.612856, - "z": -7.70000029 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027771, - "z": 0.0168297477 - } - }, - { - "Position": { - "x": -23.6765213, - "y": 1.61451125, - "z": -0.0299998261 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027466, - "z": 0.0168311764 - } - }, - { - "Position": { - "x": -23.67654, - "y": 1.6168257, - "z": 7.570001 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0277, - "z": 0.0168301668 - } - }, - { - "Position": { - "x": -23.67657, - "y": 1.61912513, - "z": 15.1900005 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027618, - "z": 0.0168319754 - } - }, - { - "Position": { - "x": -17.1200542, - "y": 1.61067736, - "z": 15.1900005 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027527, - "z": 0.016832035 - } - }, - { - "Position": { - "x": -17.12002, - "y": 1.60809219, - "z": 7.57000065 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027618, - "z": 0.0168309156 - } - }, - { - "Position": { - "x": -17.1200027, - "y": 1.6060853, - "z": -0.0299997777 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027466, - "z": 0.0168315787 - } - }, - { - "Position": { - "x": -17.1200714, - "y": 1.60347533, - "z": -7.70000029 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027649, - "z": 0.0168311615 - } - }, - { - "Position": { - "x": -17.120121, - "y": 1.60156679, - "z": -15.2800007 - }, - "Rotation": { - "x": 359.9201, - "y": 270.026917, - "z": 0.016833229 - } - }, - { - "Position": { - "x": -43.3700027, - "y": 1.64513254, - "z": 11.46 - } - }, - { - "Position": { - "x": -43.3700027, - "y": 1.64333713, - "z": 3.86000085 - } - }, - { - "Position": { - "x": -43.3700027, - "y": 1.64140487, - "z": -3.82999945 - } - }, - { - "Position": { - "x": -43.37, - "y": 1.63861811, - "z": -11.5100012 - } - }, - { - "Position": { - "x": -36.77319, - "y": 1.63090754, - "z": -11.51 - } - }, - { - "Position": { - "x": -36.77319, - "y": 1.63239479, - "z": -3.83 - } - }, - { - "Position": { - "x": -36.7731934, - "y": 1.63394141, - "z": 3.86000061 - } - }, - { - "Position": { - "x": -36.7731934, - "y": 1.63626719, - "z": 11.4600019 - } - }, - { - "Position": { - "x": -30.2242413, - "y": 1.626422, - "z": 11.4600019 - } - }, - { - "Position": { - "x": -30.2242413, - "y": 1.62466407, - "z": 3.86000085 - } - }, - { - "Position": { - "x": -30.2242374, - "y": 1.62282109, - "z": -3.82999969 - } - }, - { - "Position": { - "x": -30.2242374, - "y": 1.62101281, - "z": -11.51 - } - }, - { - "Position": { - "x": -23.6765213, - "y": 1.61238325, - "z": -11.51 - } - }, - { - "Position": { - "x": -23.6765213, - "y": 1.61426854, - "z": -3.82999921 - } - }, - { - "Position": { - "x": -23.6765251, - "y": 1.61644459, - "z": 3.86000013 - } - }, - { - "Position": { - "x": -23.6765251, - "y": 1.618611, - "z": 11.4600019 - } - }, - { - "Position": { - "x": -17.1200047, - "y": 1.6088289, - "z": 11.460001 - } - }, - { - "Position": { - "x": -17.1200066, - "y": 1.60692859, - "z": 3.86000037 - } - }, - { - "Position": { - "x": -17.1200085, - "y": 1.6050005, - "z": -3.83 - } - }, - { - "Position": { - "x": -17.1200047, - "y": 1.60282743, - "z": -11.51 - } - }, - { - "Position": { - "x": 22.9514027, - "y": 1.45106924, - "z": -30.8727665 - }, - "Rotation": { - "x": 359.920563, - "y": 300.012024, - "z": 359.973663 - } - }, - { - "Position": { - "x": 38.66109, - "y": 1.41606772, - "z": -36.0124245 - }, - "Rotation": { - "x": 359.929657, - "y": 315.014771, - "z": 359.953766 - } - }, - { - "Position": { - "x": -5.3694253, - "y": 1.58748043, - "z": -5.09977245 - } - }, - { - "Position": { - "x": -47.7700577, - "y": 1.5540359, - "z": 19.7594471 - }, - "Rotation": { - "x": 359.9201, - "y": 269.981384, - "z": 0.0169203151 - } - }, - { - "Position": { - "x": -47.7703552, - "y": 1.55352783, - "z": 18.4533367 - }, - "Rotation": { - "x": 359.9201, - "y": 269.981384, - "z": 0.0169184469 - } - }, - { - "Position": { - "x": -47.76952, - "y": 1.54237592, - "z": -18.54153 - }, - "Rotation": { - "x": 359.920135, - "y": 269.981079, - "z": 0.0169145186 - } - }, - { - "Position": { - "x": -47.76952, - "y": 1.54228687, - "z": -19.84764 - }, - "Rotation": { - "x": 359.9201, - "y": 269.981476, - "z": 0.0169213954 - } - }, - { - "Position": { - "x": -21.2858257, - "y": 1.50565612, - "z": -19.352438 - }, - "Rotation": { - "x": 0.01685757, - "y": 180.003113, - "z": 0.0798824951 - } - }, - { - "Position": { - "x": -22.49995, - "y": 1.50744331, - "z": -19.3514824 - }, - "Rotation": { - "x": 0.0166406352, - "y": 180.160553, - "z": 0.0799282342 - } - }, - { - "Position": { - "x": -21.5195179, - "y": 1.5173384, - "z": 19.260006 - }, - "Rotation": { - "x": 359.983124, - "y": 0.00329320785, - "z": 359.9201 - } - }, - { - "Position": { - "x": -22.8255882, - "y": 1.51926339, - "z": 19.260004 - }, - "Rotation": { - "x": 359.983154, - "y": 0.00271474943, - "z": 359.9201 - } - }, - { - "Position": { - "x": -1.46550024, - "y": 1.475424, - "z": -26.9304066 - } - }, - { - "Position": { - "x": -20.9389057, - "y": 1.26746678, - "z": 85.60665 - } - }, - { - "Position": { - "x": -20.9389076, - "y": 1.26645875, - "z": 83.30666 - } - }, - { - "Position": { - "x": -20.9389038, - "y": 1.26574934, - "z": 81.00666 - } - }, - { - "Position": { - "x": -20.9389019, - "y": 1.2649827, - "z": 78.70666 - } - }, - { - "Position": { - "x": -20.9388981, - "y": 1.26454091, - "z": 76.4066544 - } - }, - { - "Position": { - "x": -20.9389, - "y": 1.26380777, - "z": 74.10665 - } - }, - { - "Position": { - "x": -20.9389133, - "y": 1.26316476, - "z": 71.80665 - } - }, - { - "Position": { - "x": -20.93891, - "y": 1.262509, - "z": 69.5066452 - } - }, - { - "Position": { - "x": -20.9389038, - "y": 1.26141346, - "z": 64.90665 - } - }, - { - "Position": { - "x": -20.9389076, - "y": 1.26190877, - "z": 67.20665 - } - }, - { - "Position": { - "x": -20.9389057, - "y": 1.26024914, - "z": 62.6065826 - } - }, - { - "Position": { - "x": -20.9389114, - "y": 1.25962758, - "z": 60.30655 - } - }, - { - "Position": { - "x": -20.9389133, - "y": 1.25898314, - "z": 58.00654 - } - }, - { - "Position": { - "x": -20.93891, - "y": 1.25834715, - "z": 55.70664 - } - }, - { - "Position": { - "x": -20.9389076, - "y": 1.2578826, - "z": 53.40664 - } - }, - { - "Position": { - "x": -20.93687, - "y": 1.25715, - "z": 51.10642 - } - }, - { - "Position": { - "x": -24.4533653, - "y": 1.26596868, - "z": 85.59461 - } - }, - { - "Position": { - "x": -24.453371, - "y": 1.26535738, - "z": 83.2946243 - } - }, - { - "Position": { - "x": -24.4533672, - "y": 1.26434422, - "z": 80.99462 - } - }, - { - "Position": { - "x": -24.45337, - "y": 1.26368392, - "z": 78.69461 - } - }, - { - "Position": { - "x": -24.4533634, - "y": 1.26301813, - "z": 76.39461 - } - }, - { - "Position": { - "x": -24.453371, - "y": 1.262502, - "z": 74.0946045 - } - }, - { - "Position": { - "x": -24.4533768, - "y": 1.2617588, - "z": 71.7946 - } - }, - { - "Position": { - "x": -24.4533768, - "y": 1.26133192, - "z": 69.4946 - } - }, - { - "Position": { - "x": -24.453373, - "y": 1.2606411, - "z": 67.1946 - } - }, - { - "Position": { - "x": -24.453371, - "y": 1.2598412, - "z": 64.8946 - } - }, - { - "Position": { - "x": -24.4533749, - "y": 1.259108, - "z": 62.594532 - } - }, - { - "Position": { - "x": -24.45338, - "y": 1.25863564, - "z": 60.29453 - } - }, - { - "Position": { - "x": -24.4534, - "y": 1.25791037, - "z": 57.994503 - } - }, - { - "Position": { - "x": -24.4533978, - "y": 1.25690889, - "z": 55.6946 - } - }, - { - "Position": { - "x": -24.4446354, - "y": 1.25593579, - "z": 51.0944252 - } - }, - { - "Position": { - "x": -24.45326, - "y": 1.25634432, - "z": 53.3946381 - } - }, - { - "Position": { - "x": -20.8025455, - "y": 1.26917124, - "z": 91.59857 - } - }, - { - "Position": { - "x": -33.8014221, - "y": 1.26442635, - "z": 91.60342 - } - }, - { - "Position": { - "x": -33.8782272, - "y": 1.262609, - "z": 85.60903 - } - }, - { - "Position": { - "x": -33.8782272, - "y": 1.26209974, - "z": 83.3090439 - } - }, - { - "Position": { - "x": -37.3926849, - "y": 1.261385, - "z": 85.59699 - } - }, - { - "Position": { - "x": -37.3926926, - "y": 1.26059008, - "z": 83.2970047 - } - }, - { - "Position": { - "x": -37.39269, - "y": 1.25996923, - "z": 80.997 - } - }, - { - "Position": { - "x": -33.8782234, - "y": 1.26102686, - "z": 81.00904 - } - }, - { - "Position": { - "x": -33.8782234, - "y": 1.26047421, - "z": 78.70904 - } - }, - { - "Position": { - "x": -37.39269, - "y": 1.25935566, - "z": 78.69699 - } - }, - { - "Position": { - "x": -37.3926926, - "y": 1.25817132, - "z": 74.0969849 - } - }, - { - "Position": { - "x": -33.87822, - "y": 1.259699, - "z": 76.4090347 - } - }, - { - "Position": { - "x": -37.3926849, - "y": 1.25872183, - "z": 76.39699 - } - }, - { - "Position": { - "x": -33.87822, - "y": 1.2591089, - "z": 74.10903 - } - }, - { - "Position": { - "x": -33.8782349, - "y": 1.258448, - "z": 71.80903 - } - }, - { - "Position": { - "x": -37.3926964, - "y": 1.25731874, - "z": 71.79698 - } - }, - { - "Position": { - "x": -37.3926964, - "y": 1.25662065, - "z": 69.49698 - } - }, - { - "Position": { - "x": -33.87823, - "y": 1.25750113, - "z": 69.5090256 - } - }, - { - "Position": { - "x": -33.8782272, - "y": 1.25697291, - "z": 67.20903 - } - }, - { - "Position": { - "x": -37.3926926, - "y": 1.25570011, - "z": 67.19698 - } - }, - { - "Position": { - "x": -37.3926926, - "y": 1.25489891, - "z": 64.89698 - } - }, - { - "Position": { - "x": -33.8782234, - "y": 1.2563194, - "z": 64.90903 - } - }, - { - "Position": { - "x": -33.8782272, - "y": 1.25568974, - "z": 62.60879 - } - }, - { - "Position": { - "x": -37.3926964, - "y": 1.25411487, - "z": 62.59674 - } - }, - { - "Position": { - "x": -37.3927, - "y": 1.2536732, - "z": 60.2967377 - } - }, - { - "Position": { - "x": -33.87823, - "y": 1.25482333, - "z": 60.3087578 - } - }, - { - "Position": { - "x": -33.8782349, - "y": 1.2545011, - "z": 58.0087471 - } - }, - { - "Position": { - "x": -37.39272, - "y": 1.25332761, - "z": 57.99671 - } - }, - { - "Position": { - "x": -37.39272, - "y": 1.2524116, - "z": 55.6968079 - } - }, - { - "Position": { - "x": -33.87823, - "y": 1.2535708, - "z": 55.708847 - } - }, - { - "Position": { - "x": -33.8782272, - "y": 1.25299418, - "z": 53.4088478 - } - }, - { - "Position": { - "x": -37.3925819, - "y": 1.25163436, - "z": 53.3968468 - } - }, - { - "Position": { - "x": -37.3839569, - "y": 1.25111818, - "z": 51.0966339 - } - }, - { - "Position": { - "x": -33.87619, - "y": 1.25225854, - "z": 51.1086273 - } - }, - { - "Position": { - "x": 62.5637169, - "y": 1.29313, - "z": 70.53486 - } - }, - { - "Position": { - "x": 66.61391, - "y": 1.29616284, - "z": 75.8792953 - } - }, - { - "Position": { - "x": 66.5779953, - "y": 1.294907, - "z": 70.50754 - } - }, - { - "Position": { - "x": 66.5937347, - "y": 1.29304647, - "z": 65.0752258 - } - }, - { - "Position": { - "x": 66.5834, - "y": 1.29176581, - "z": 59.6779671 - } - }, - { - "Position": { - "x": 66.57824, - "y": 1.290194, - "z": 54.34889 - } - }, - { - "Position": { - "x": 66.59369, - "y": 1.288504, - "z": 49.02466 - } - }, - { - "Position": { - "x": 40.9634361, - "y": 1.27867866, - "z": 48.75275 - } - }, - { - "Position": { - "x": 40.9634361, - "y": 1.2794311, - "z": 51.0597725 - } - }, - { - "Position": { - "x": 40.9634361, - "y": 1.28026581, - "z": 53.3492279 - } - }, - { - "Position": { - "x": 40.9634361, - "y": 1.28108048, - "z": 55.64923 - } - }, - { - "Position": { - "x": 40.9634361, - "y": 1.28155029, - "z": 57.9485741 - } - }, - { - "Position": { - "x": 40.96033, - "y": 1.28247023, - "z": 60.2488 - } - }, - { - "Position": { - "x": 40.9601936, - "y": 1.28316569, - "z": 62.54876 - } - }, - { - "Position": { - "x": 40.96019, - "y": 1.2840817, - "z": 64.84866 - } - }, - { - "Position": { - "x": 40.9602127, - "y": 1.28449643, - "z": 67.14869 - } - }, - { - "Position": { - "x": 40.9602127, - "y": 1.28530955, - "z": 69.44869 - } - }, - { - "Position": { - "x": 40.96022, - "y": 1.28582716, - "z": 71.7486954 - } - }, - { - "Position": { - "x": 40.9602165, - "y": 1.28676808, - "z": 74.0487 - } - }, - { - "Position": { - "x": 40.9602165, - "y": 1.28737, - "z": 76.3486938 - } - }, - { - "Position": { - "x": 40.9602127, - "y": 1.28790629, - "z": 78.6487 - } - }, - { - "Position": { - "x": 40.9602242, - "y": 1.28869033, - "z": 80.9487 - } - }, - { - "Position": { - "x": 40.960228, - "y": 1.28926826, - "z": 83.2487 - } - }, - { - "Position": { - "x": 40.960228, - "y": 1.29017448, - "z": 85.5487061 - } - }, - { - "Position": { - "x": 40.9602242, - "y": 1.29071677, - "z": 87.84872 - } - }, - { - "Position": { - "x": 40.9602242, - "y": 1.29106641, - "z": 90.14872 - } - }, - { - "Position": { - "x": 40.9602242, - "y": 1.29189122, - "z": 92.44871 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.29470038, - "z": 92.4528 - } - }, - { - "Position": { - "x": 53.2285767, - "y": 1.29660666, - "z": 92.44123 - } - }, - { - "Position": { - "x": 53.2285767, - "y": 1.29568541, - "z": 90.14124 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.29423237, - "z": 90.15277 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.293214, - "z": 85.5527954 - } - }, - { - "Position": { - "x": 53.2285767, - "y": 1.2948004, - "z": 87.84124 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.29357529, - "z": 87.8528061 - } - }, - { - "Position": { - "x": 53.22858, - "y": 1.29403818, - "z": 85.54124 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.29238141, - "z": 83.25279 - } - }, - { - "Position": { - "x": 53.22858, - "y": 1.29348159, - "z": 83.2412338 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.29205048, - "z": 80.95279 - } - }, - { - "Position": { - "x": 53.2285767, - "y": 1.29293251, - "z": 80.94123 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.291133, - "z": 78.65279 - } - }, - { - "Position": { - "x": 53.22857, - "y": 1.29205287, - "z": 78.64123 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.289854, - "z": 74.05279 - } - }, - { - "Position": { - "x": 53.22857, - "y": 1.29160774, - "z": 76.3412247 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.29015315, - "z": 76.35278 - } - }, - { - "Position": { - "x": 53.2285728, - "y": 1.2909112, - "z": 74.04123 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.288802, - "z": 71.7527847 - } - }, - { - "Position": { - "x": 53.2285728, - "y": 1.289899, - "z": 71.74123 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.28820527, - "z": 69.45278 - } - }, - { - "Position": { - "x": 53.22857, - "y": 1.28912687, - "z": 69.44122 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.28758645, - "z": 67.1526947 - } - }, - { - "Position": { - "x": 53.2285652, - "y": 1.28840756, - "z": 67.1411057 - } - }, - { - "Position": { - "x": 53.2285652, - "y": 1.28799891, - "z": 64.841095 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.28675449, - "z": 64.85267 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.28612339, - "z": 62.5527649 - } - }, - { - "Position": { - "x": 53.22857, - "y": 1.28716826, - "z": 62.5411949 - } - }, - { - "Position": { - "x": 53.2306061, - "y": 1.286359, - "z": 57.9409752 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.285639, - "z": 60.2528038 - } - }, - { - "Position": { - "x": 53.22857, - "y": 1.28661871, - "z": 60.2411957 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.28503168, - "z": 57.95258 - } - }, - { - "Position": { - "x": 53.22848, - "y": 1.28564227, - "z": 55.6411972 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.28426623, - "z": 55.6527977 - } - }, - { - "Position": { - "x": 53.22861, - "y": 1.28459334, - "z": 53.34118 - } - }, - { - "Position": { - "x": 49.54717, - "y": 1.28261352, - "z": 51.06334 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.28365183, - "z": 53.35279 - } - }, - { - "Position": { - "x": 53.21279, - "y": 1.2838558, - "z": 51.05174 - } - }, - { - "Position": { - "x": 53.21263, - "y": 1.28320742, - "z": 48.74529 - } - }, - { - "Position": { - "x": 49.54679, - "y": 1.28225446, - "z": 48.75681 - } - }, - { - "Position": { - "x": 58.3700562, - "y": 1.28495312, - "z": 48.6489143 - } - }, - { - "Position": { - "x": 58.3680649, - "y": 1.28596377, - "z": 51.0008774 - } - }, - { - "Position": { - "x": 58.38389, - "y": 1.28678489, - "z": 53.2903175 - } - }, - { - "Position": { - "x": 58.38375, - "y": 1.2875427, - "z": 55.5903358 - } - }, - { - "Position": { - "x": 58.38588, - "y": 1.28792191, - "z": 57.8901138 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.28834844, - "z": 60.1903343 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.28872633, - "z": 62.4903336 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.29039466, - "z": 67.09024 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.28979969, - "z": 64.79024 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.290749, - "z": 69.3903656 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.29203963, - "z": 71.69037 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.29232371, - "z": 73.99037 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.2929641, - "z": 76.29037 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.293665, - "z": 78.59037 - } - }, - { - "Position": { - "x": 58.38385, - "y": 1.294165, - "z": 80.89037 - } - }, - { - "Position": { - "x": 58.3838577, - "y": 1.29487526, - "z": 83.19038 - } - }, - { - "Position": { - "x": 58.3838577, - "y": 1.2958343, - "z": 85.49038 - } - }, - { - "Position": { - "x": 58.38385, - "y": 1.2963804, - "z": 87.79038 - } - }, - { - "Position": { - "x": 58.38385, - "y": 1.29708922, - "z": 90.0903854 - } - }, - { - "Position": { - "x": 58.38385, - "y": 1.29774785, - "z": 92.39037 - } - }, - { - "Position": { - "x": -26.3000088, - "y": 1.3009671, - "z": -53.43685 - } - }, - { - "Position": { - "x": -22.6138859, - "y": 1.30193734, - "z": -53.4381142 - } - }, - { - "Position": { - "x": -19.3000031, - "y": 1.3032428, - "z": -53.43582 - } - }, - { - "Position": { - "x": -16.64005, - "y": 1.30449986, - "z": -52.15201 - } - }, - { - "Position": { - "x": -16.6400528, - "y": 1.30425811, - "z": -53.3904076 - } - }, - { - "Position": { - "x": -16.6400547, - "y": 1.30388188, - "z": -54.62073 - } - }, - { - "Position": { - "x": -19.30006, - "y": 1.3010509, - "z": -61.23324 - } - }, - { - "Position": { - "x": -16.64007, - "y": 1.30185783, - "z": -61.2309761 - } - }, - { - "Position": { - "x": -16.6400738, - "y": 1.30217159, - "z": -60.0009766 - } - }, - { - "Position": { - "x": -16.64003, - "y": 1.30137312, - "z": -62.4609146 - } - }, - { - "Position": { - "x": -22.6169434, - "y": 1.2998848, - "z": -61.24137 - } - }, - { - "Position": { - "x": -26.3001442, - "y": 1.29872739, - "z": -61.2409668 - } - }, - { - "Position": { - "x": -26.3001881, - "y": 1.29632378, - "z": -69.060585 - } - }, - { - "Position": { - "x": -22.615675, - "y": 1.297138, - "z": -69.0756 - } - }, - { - "Position": { - "x": -19.29586, - "y": 1.29860735, - "z": -69.06069 - } - }, - { - "Position": { - "x": -16.6400661, - "y": 1.29980421, - "z": -67.82058 - } - }, - { - "Position": { - "x": -16.6402836, - "y": 1.29948664, - "z": -69.0602951 - } - }, - { - "Position": { - "x": -16.6400623, - "y": 1.29911947, - "z": -70.29058 - } - }, - { - "Position": { - "x": -16.6402931, - "y": 1.29759026, - "z": -75.70543 - } - }, - { - "Position": { - "x": -16.6395817, - "y": 1.297198, - "z": -76.94563 - } - }, - { - "Position": { - "x": -16.6401215, - "y": 1.29682636, - "z": -78.17564 - } - }, - { - "Position": { - "x": -19.2935925, - "y": 1.29627025, - "z": -76.9415359 - } - }, - { - "Position": { - "x": -22.6157455, - "y": 1.29521048, - "z": -76.94603 - } - }, - { - "Position": { - "x": -26.3001842, - "y": 1.293819, - "z": -76.94564 - } - }, - { - "Position": { - "x": -26.299593, - "y": 1.29146552, - "z": -84.81799 - } - }, - { - "Position": { - "x": -22.6168957, - "y": 1.29257679, - "z": -84.81849 - } - }, - { - "Position": { - "x": -19.2997684, - "y": 1.2937001, - "z": -84.81817 - } - }, - { - "Position": { - "x": -16.6393929, - "y": 1.29451442, - "z": -86.0185852 - } - }, - { - "Position": { - "x": -16.6402264, - "y": 1.29479432, - "z": -84.81819 - } - }, - { - "Position": { - "x": -16.6385555, - "y": 1.295311, - "z": -83.5415039 - } - }, - { - "Position": { - "x": 66.3220139, - "y": 1.2955277, - "z": -63.9796257 - } - }, - { - "Position": { - "x": 66.29916, - "y": 1.29411173, - "z": -69.3567 - } - }, - { - "Position": { - "x": 66.3143539, - "y": 1.292618, - "z": -74.78968 - } - }, - { - "Position": { - "x": 66.299614, - "y": 1.29084647, - "z": -80.18447 - } - }, - { - "Position": { - "x": 66.29667, - "y": 1.28934729, - "z": -85.51392 - } - }, - { - "Position": { - "x": 66.3128, - "y": 1.288014, - "z": -90.8375854 - } - }, - { - "Position": { - "x": 58.0996742, - "y": 1.29744935, - "z": -47.4709663 - } - }, - { - "Position": { - "x": 58.0996742, - "y": 1.29690325, - "z": -49.7709541 - } - }, - { - "Position": { - "x": 58.0996742, - "y": 1.29619539, - "z": -52.0709572 - } - }, - { - "Position": { - "x": 58.09968, - "y": 1.295507, - "z": -54.37096 - } - }, - { - "Position": { - "x": 58.09968, - "y": 1.294888, - "z": -56.6709633 - } - }, - { - "Position": { - "x": 58.0996742, - "y": 1.2940737, - "z": -58.9709663 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.29347837, - "z": -61.27097 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.29284012, - "z": -63.5709724 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.29224491, - "z": -65.87083 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.29148126, - "z": -68.17083 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.2905457, - "z": -70.47083 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.28980207, - "z": -72.77096 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.28948426, - "z": -75.07096 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.28880274, - "z": -77.3708649 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.28833532, - "z": -79.67087 - } - }, - { - "Position": { - "x": 58.1016922, - "y": 1.28740478, - "z": -81.97109 - } - }, - { - "Position": { - "x": 58.0995636, - "y": 1.28650737, - "z": -84.270874 - } - }, - { - "Position": { - "x": 58.0997, - "y": 1.286053, - "z": -86.57089 - } - }, - { - "Position": { - "x": 58.0838776, - "y": 1.28537929, - "z": -88.86033 - } - }, - { - "Position": { - "x": 58.08587, - "y": 1.28485417, - "z": -91.2122955 - } - }, - { - "Position": { - "x": 52.92828, - "y": 1.28289843, - "z": -91.1161346 - } - }, - { - "Position": { - "x": 52.92844, - "y": 1.283767, - "z": -88.80969 - } - }, - { - "Position": { - "x": 52.94426, - "y": 1.28441775, - "z": -86.52025 - } - }, - { - "Position": { - "x": 52.94413, - "y": 1.28505635, - "z": -84.22023 - } - }, - { - "Position": { - "x": 52.9462547, - "y": 1.28565979, - "z": -81.9204559 - } - }, - { - "Position": { - "x": 52.9442177, - "y": 1.28654468, - "z": -79.62024 - } - }, - { - "Position": { - "x": 52.9442177, - "y": 1.28714752, - "z": -77.32024 - } - }, - { - "Position": { - "x": 52.9442139, - "y": 1.28767264, - "z": -75.02033 - } - }, - { - "Position": { - "x": 52.9442139, - "y": 1.28845644, - "z": -72.72032 - } - }, - { - "Position": { - "x": 52.94422, - "y": 1.28927469, - "z": -68.1202 - } - }, - { - "Position": { - "x": 52.9442177, - "y": 1.28905928, - "z": -70.4202042 - } - }, - { - "Position": { - "x": 52.94422, - "y": 1.29028988, - "z": -65.8202 - } - }, - { - "Position": { - "x": 52.9442177, - "y": 1.29098272, - "z": -63.5203438 - } - }, - { - "Position": { - "x": 52.9442177, - "y": 1.29159307, - "z": -61.22034 - } - }, - { - "Position": { - "x": 52.9442253, - "y": 1.29235625, - "z": -58.9203377 - } - }, - { - "Position": { - "x": 52.94423, - "y": 1.2931788, - "z": -56.6203346 - } - }, - { - "Position": { - "x": 52.94423, - "y": 1.29390347, - "z": -54.32033 - } - }, - { - "Position": { - "x": 52.9442253, - "y": 1.29437709, - "z": -52.02033 - } - }, - { - "Position": { - "x": 52.9442253, - "y": 1.29492152, - "z": -49.7203255 - } - }, - { - "Position": { - "x": 52.9442253, - "y": 1.29571271, - "z": -47.4203377 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.29458511, - "z": -47.40877 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.29381084, - "z": -49.7087975 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.29295814, - "z": -52.0087624 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.29241037, - "z": -54.308773 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.29141617, - "z": -56.6087761 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.29077768, - "z": -58.90878 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.29027653, - "z": -61.2087822 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.289767, - "z": -63.5087852 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28908551, - "z": -65.80864 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28855276, - "z": -68.10864 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28747988, - "z": -70.4086456 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28690422, - "z": -72.70873 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28634024, - "z": -75.00876 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28576362, - "z": -77.30867 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28526175, - "z": -79.60863 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28440058, - "z": -81.90885 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28354764, - "z": -84.20863 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28287387, - "z": -86.50864 - } - }, - { - "Position": { - "x": 49.2628174, - "y": 1.28216815, - "z": -88.79809 - } - }, - { - "Position": { - "x": 49.26244, - "y": 1.28176832, - "z": -91.1046143 - } - }, - { - "Position": { - "x": 32.3000031, - "y": 1.44443262, - "z": 28.5300121 - } - }, - { - "Position": { - "x": 32.3000031, - "y": 1.44076753, - "z": 14.4999838 - } - }, - { - "Position": { - "x": 51.74794, - "y": 1.42008257, - "z": 28.5300045 - } - }, - { - "Position": { - "x": 51.65227, - "y": 1.41464353, - "z": 14.5000238 - } - }, - { - "Position": { - "x": 51.6549034, - "y": 1.40983319, - "z": 0.140253112 - } - }, - { - "Position": { - "x": 51.65601, - "y": 1.40506518, - "z": -13.7182093 - } - }, - { - "Position": { - "x": 51.65232, - "y": 1.40055454, - "z": -27.8697281 - } - }, - { - "Position": { - "x": 63.0257759, - "y": 1.39148343, - "z": 0.140274137 - } - }, - { - "Position": { - "x": 63.02728, - "y": 1.39948249, - "z": 14.5002966 - } - }, - { - "Position": { - "x": 63.0254936, - "y": 1.40184367, - "z": 28.5303841 - } - }, - { - "Position": { - "x": 32.3000031, - "y": 1.43620026, - "z": 0.14000009 - } - }, - { - "Position": { - "x": 32.4525223, - "y": 1.43262136, - "z": -13.1238556 - } - }, - { - "Position": { - "x": 12.2494068, - "y": 1.47258127, - "z": 35.9863548 - } - }, - { - "Position": { - "x": 12.2503014, - "y": 1.47144163, - "z": 27.98636 - } - }, - { - "Position": { - "x": 12.2500954, - "y": 1.46984768, - "z": 19.98636 - } - }, - { - "Position": { - "x": 12.2520952, - "y": 1.46744418, - "z": 11.9863577 - } - }, - { - "Position": { - "x": 12.2499952, - "y": 1.46522963, - "z": 3.98634982 - } - }, - { - "Position": { - "x": 12.2495975, - "y": 1.46357608, - "z": -4.013653 - } - }, - { - "Position": { - "x": 12.2501, - "y": 1.46166158, - "z": -12.013649 - } - }, - { - "Position": { - "x": 12.2504969, - "y": 1.45960414, - "z": -20.0136547 - } - }, - { - "Position": { - "x": 12.2495995, - "y": 1.45641756, - "z": -28.0136547 - } - }, - { - "Position": { - "x": 12.2504215, - "y": 1.45459831, - "z": -36.0138321 - } - }, - { - "Position": { - "x": 23.753355, - "y": 1.44447052, - "z": -13.1285114 - } - }, - { - "Position": { - "x": 37.416, - "y": 1.28915572, - "z": 92.46073 - } - }, - { - "Position": { - "x": 33.8628922, - "y": 1.28769708, - "z": 92.4487 - } - }, - { - "Position": { - "x": 33.8628922, - "y": 1.2869792, - "z": 90.14871 - } - }, - { - "Position": { - "x": 33.8628922, - "y": 1.286134, - "z": 87.84871 - } - }, - { - "Position": { - "x": 33.8629, - "y": 1.28530645, - "z": 85.5487 - } - }, - { - "Position": { - "x": 33.8629, - "y": 1.28456831, - "z": 83.2486954 - } - }, - { - "Position": { - "x": 33.8628845, - "y": 1.28304, - "z": 78.64869 - } - }, - { - "Position": { - "x": 33.8628845, - "y": 1.28201032, - "z": 74.04869 - } - }, - { - "Position": { - "x": 33.8628922, - "y": 1.28132582, - "z": 71.74869 - } - }, - { - "Position": { - "x": 33.8628769, - "y": 1.280112, - "z": 67.14868 - } - }, - { - "Position": { - "x": 33.86286, - "y": 1.279238, - "z": 64.8486557 - } - }, - { - "Position": { - "x": 33.86286, - "y": 1.27836406, - "z": 62.5487556 - } - }, - { - "Position": { - "x": 33.863, - "y": 1.27764225, - "z": 60.2487946 - } - }, - { - "Position": { - "x": 33.8661041, - "y": 1.27688551, - "z": 55.6492271 - } - }, - { - "Position": { - "x": 37.4159, - "y": 1.27759337, - "z": 55.6607857 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.27913022, - "z": 60.2607841 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.280205, - "z": 62.5607834 - } - }, - { - "Position": { - "x": 37.4159851, - "y": 1.28162849, - "z": 67.16069 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.2826879, - "z": 71.76073 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.28366375, - "z": 74.06073 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.28470445, - "z": 78.66073 - } - }, - { - "Position": { - "x": 37.416, - "y": 1.285579, - "z": 80.96073 - } - }, - { - "Position": { - "x": 37.416, - "y": 1.28653467, - "z": 85.56074 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.288172, - "z": 90.16074 - } - }, - { - "Position": { - "x": 37.416, - "y": 1.28761017, - "z": 87.86074 - } - }, - { - "Position": { - "x": 37.416, - "y": 1.28620529, - "z": 83.2607346 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.28395736, - "z": 76.3607254 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.28205276, - "z": 69.4607239 - } - }, - { - "Position": { - "x": 33.8628845, - "y": 1.28053427, - "z": 69.4486847 - } - }, - { - "Position": { - "x": 33.8628922, - "y": 1.28415394, - "z": 80.94869 - } - }, - { - "Position": { - "x": 37.41803, - "y": 1.27869236, - "z": 57.9605637 - } - }, - { - "Position": { - "x": 33.8661041, - "y": 1.27756965, - "z": 57.94857 - } - }, - { - "Position": { - "x": 37.4159851, - "y": 1.28103614, - "z": 64.86069 - } - }, - { - "Position": { - "x": 37.41603, - "y": 1.27740252, - "z": 53.3607674 - } - }, - { - "Position": { - "x": 33.8661041, - "y": 1.27611911, - "z": 53.3492241 - } - }, - { - "Position": { - "x": 33.8661041, - "y": 1.27528262, - "z": 51.05977 - } - }, - { - "Position": { - "x": 37.4002151, - "y": 1.27683961, - "z": 51.0713272 - } - }, - { - "Position": { - "x": 37.40004, - "y": 1.27590275, - "z": 48.764 - } - }, - { - "Position": { - "x": 33.8661041, - "y": 1.27464926, - "z": 48.7527466 - } - }, - { - "Position": { - "x": 33.8628845, - "y": 1.28299832, - "z": 76.34869 - } - }, - { - "Position": { - "x": 45.98, - "y": 1.29211712, - "z": 92.4528046 - } - }, - { - "Position": { - "x": 45.98, - "y": 1.29116917, - "z": 90.15278 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.29039729, - "z": 87.85281 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28990746, - "z": 85.5528 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.2892369, - "z": 83.2528 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28863, - "z": 80.9528 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28789, - "z": 78.6527939 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28720582, - "z": 76.35279 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.2865777, - "z": 74.0527954 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28590167, - "z": 71.75279 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.2851727, - "z": 69.45279 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28445113, - "z": 67.1527 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28394485, - "z": 64.85268 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28310108, - "z": 62.55277 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28255057, - "z": 60.2528076 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28170848, - "z": 57.9525833 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28099191, - "z": 55.6528 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28034508, - "z": 53.3527946 - } - }, - { - "Position": { - "x": 45.9637833, - "y": 1.27987647, - "z": 51.063343 - } - }, - { - "Position": { - "x": 45.9634056, - "y": 1.27929091, - "z": 48.756813 - } - }, - { - "Position": { - "x": 45.6394653, - "y": 1.29181886, - "z": -47.4098969 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.29098332, - "z": -49.7098961 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.29040909, - "z": -52.0098953 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28967047, - "z": -54.30867 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28910577, - "z": -56.6086731 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28856969, - "z": -58.9086761 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28787434, - "z": -61.20868 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28705382, - "z": -63.50868 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28649783, - "z": -65.8086 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28583622, - "z": -68.1086044 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28518963, - "z": -70.40861 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28451347, - "z": -72.7086945 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28387618, - "z": -75.00872 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28326178, - "z": -77.30863 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28246593, - "z": -79.60859 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28173733, - "z": -81.90881 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28103638, - "z": -84.2085953 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28051937, - "z": -86.5086 - } - }, - { - "Position": { - "x": 45.62377, - "y": 1.27994442, - "z": -88.79805 - } - }, - { - "Position": { - "x": 45.623394, - "y": 1.27922964, - "z": -91.1045761 - } - }, - { - "Position": { - "x": 32.985302, - "y": 1.28735256, - "z": -47.40955 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28630078, - "z": -52.00955 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.2848593, - "z": -56.608326 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28221273, - "z": -65.80826 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28023648, - "z": -72.70835 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.27823079, - "z": -79.6082458 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.27607512, - "z": -86.508255 - } - }, - { - "Position": { - "x": 36.60866, - "y": 1.27631569, - "z": -88.79774 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.27810454, - "z": -84.20828 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28412712, - "z": -63.50844 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.2862879, - "z": -56.60843 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28899884, - "z": -49.70845 - } - }, - { - "Position": { - "x": 40.2900658, - "y": 1.28480053, - "z": -65.81985 - } - }, - { - "Position": { - "x": 40.2742844, - "y": 1.27716756, - "z": -88.80934 - } - }, - { - "Position": { - "x": 40.2921, - "y": 1.279801, - "z": -81.920105 - } - }, - { - "Position": { - "x": 40.29006, - "y": 1.2820015, - "z": -72.71997 - } - }, - { - "Position": { - "x": 40.2900658, - "y": 1.28334785, - "z": -68.11985 - } - }, - { - "Position": { - "x": 40.290062, - "y": 1.284641, - "z": -63.5199966 - } - }, - { - "Position": { - "x": 40.2900734, - "y": 1.28781986, - "z": -54.3199844 - } - }, - { - "Position": { - "x": 40.29007, - "y": 1.28894377, - "z": -49.71998 - } - }, - { - "Position": { - "x": 40.29007, - "y": 1.290063, - "z": -47.41999 - } - }, - { - "Position": { - "x": 40.29007, - "y": 1.28811061, - "z": -52.01998 - } - }, - { - "Position": { - "x": 40.2900734, - "y": 1.28725445, - "z": -56.6199875 - } - }, - { - "Position": { - "x": 40.29007, - "y": 1.285944, - "z": -58.91999 - } - }, - { - "Position": { - "x": 40.290062, - "y": 1.28537035, - "z": -61.2199936 - } - }, - { - "Position": { - "x": 40.290062, - "y": 1.282721, - "z": -70.41985 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28101408, - "z": -75.00841 - } - }, - { - "Position": { - "x": 40.290062, - "y": 1.2809298, - "z": -77.3198853 - } - }, - { - "Position": { - "x": 40.29006, - "y": 1.28155673, - "z": -75.01998 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.27997816, - "z": -77.30832 - } - }, - { - "Position": { - "x": 40.290062, - "y": 1.28052819, - "z": -79.61989 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.27882218, - "z": -79.60828 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.27845466, - "z": -81.9085 - } - }, - { - "Position": { - "x": 40.2899742, - "y": 1.27921557, - "z": -84.21988 - } - }, - { - "Position": { - "x": 40.2901039, - "y": 1.27835965, - "z": -86.5199 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.27703023, - "z": -86.5082855 - } - }, - { - "Position": { - "x": 36.608284, - "y": 1.27630758, - "z": -91.10426 - } - }, - { - "Position": { - "x": 40.2741241, - "y": 1.2773788, - "z": -91.11578 - } - }, - { - "Position": { - "x": 32.96923, - "y": 1.27455485, - "z": -91.10423 - } - }, - { - "Position": { - "x": 32.9696045, - "y": 1.27537262, - "z": -88.79771 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.27635276, - "z": -84.20825 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.27720129, - "z": -81.90847 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.27830982, - "z": -77.30829 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.27916753, - "z": -75.00838 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.280421, - "z": -70.4082642 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28155637, - "z": -68.10826 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28274655, - "z": -68.10829 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28347969, - "z": -65.80829 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28199029, - "z": -70.4082947 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28125787, - "z": -72.70838 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28223443, - "z": -63.50833 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28348243, - "z": -61.2083321 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28398371, - "z": -58.90833 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28525078, - "z": -58.908432 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28478837, - "z": -61.2084351 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28675485, - "z": -54.3084259 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.285481, - "z": -54.3083229 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28715646, - "z": -52.0084152 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28686869, - "z": -49.70955 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28846765, - "z": -47.4084244 - } - }, - { - "Position": { - "x": 29.3400745, - "y": 1.28597653, - "z": -47.4096222 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.28529572, - "z": -49.70962 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.2847054, - "z": -52.00962 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.28379667, - "z": -54.3083954 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.28299594, - "z": -56.6084 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.28244519, - "z": -58.9084 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.28186262, - "z": -61.2084045 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.28080726, - "z": -63.5084038 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27991, - "z": -68.10847 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.28047419, - "z": -65.8084641 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27917814, - "z": -70.40847 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27855825, - "z": -72.70856 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27774477, - "z": -75.00858 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.2773304, - "z": -77.3084946 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27670634, - "z": -79.60845 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27590442, - "z": -81.9086761 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27517438, - "z": -84.20846 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27443349, - "z": -86.50846 - } - }, - { - "Position": { - "x": 29.3243771, - "y": 1.2738682, - "z": -88.79791 - } - }, - { - "Position": { - "x": 29.3240032, - "y": 1.27318287, - "z": -91.10444 - } - }, - { - "Position": { - "x": 30.3081856, - "y": 1.28623271, - "z": 92.44871 - } - }, - { - "Position": { - "x": 30.3081856, - "y": 1.28567123, - "z": 90.14872 - } - }, - { - "Position": { - "x": 30.3081856, - "y": 1.28496671, - "z": 87.84872 - } - }, - { - "Position": { - "x": 30.3081932, - "y": 1.28416157, - "z": 85.5487061 - } - }, - { - "Position": { - "x": 30.3081932, - "y": 1.28340948, - "z": 83.2487 - } - }, - { - "Position": { - "x": 30.3081779, - "y": 1.282251, - "z": 78.6487 - } - }, - { - "Position": { - "x": 30.3081856, - "y": 1.28324521, - "z": 80.9487 - } - }, - { - "Position": { - "x": 30.3081779, - "y": 1.28150773, - "z": 76.3486938 - } - }, - { - "Position": { - "x": 30.3081779, - "y": 1.28073943, - "z": 74.0487 - } - }, - { - "Position": { - "x": 30.3081856, - "y": 1.279962, - "z": 71.7486954 - } - }, - { - "Position": { - "x": 30.30817, - "y": 1.27895975, - "z": 67.14869 - } - }, - { - "Position": { - "x": 30.3081551, - "y": 1.27831411, - "z": 64.84866 - } - }, - { - "Position": { - "x": 30.3081551, - "y": 1.27765858, - "z": 62.5487633 - } - }, - { - "Position": { - "x": 30.3082924, - "y": 1.276932, - "z": 60.2488022 - } - }, - { - "Position": { - "x": 30.3113976, - "y": 1.27603257, - "z": 57.9485779 - } - }, - { - "Position": { - "x": 30.3113976, - "y": 1.27529621, - "z": 55.6501465 - } - }, - { - "Position": { - "x": 30.31239, - "y": 1.27457035, - "z": 53.3694038 - } - }, - { - "Position": { - "x": 30.3113976, - "y": 1.27419889, - "z": 51.0597763 - } - }, - { - "Position": { - "x": 30.3113976, - "y": 1.27331829, - "z": 48.7527542 - } - }, - { - "Position": { - "x": 30.3081779, - "y": 1.2793709, - "z": 69.44869 - } - }, - { - "Position": { - "x": -29.1834469, - "y": 1.26261938, - "z": 95.80177 - } - } - ] diff --git a/testdata/simple/json/tabStates.json b/testdata/simple/json/tabStates.json deleted file mode 100644 index b35e45f..0000000 --- a/testdata/simple/json/tabStates.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "8": { - "title": "Basic Intro", - "body": "Welcome to Arkham Horror LCG - Super Complete Edition!\r\n\r\nBelow you will find all the features and instructions this mod is loaded with, that will make your AH LCG experience easier.\r\n\r\nDECKBUILDING\r\n1. All current existing investigators are on the right-hand side, and within each chest you will find their investigator-specific assets and weaknesses. Also included is a basic starter deck which only requires you to add a basic random weakness to get going.\r\n\r\n2. On the left-hand side you will find both the weakness decks as well as lvl 0 cards sorted by class. To reveal the cards, click on each corresponding token to deal the cards onto the table. Cards are sorted by order of Skill, event and Asset cards top-down and increasing resource cost, left to right. \r\n\r\n3. On the upper side you have the upgrade cards. Similarly, click each token to deal the cards out onto the table. Cards are arranged both in increasing xp cost and resource cost, left to right. Typically, these are the cards you will be spending XP on between scenarios to purchase and improve your deck.\r\n4. On the right-hand side underneath the Investigators, you will find the automated ArkhamDB Deckbuilder (coded and maintained by Grabben). Click the load cards button to activate the Deckbuilder, check ArkhamDB for your chosen deck’s URL and insert its number code following the instructions on the deckbuilder, and it will build the deck automatically for you.\r\n\r\nSCENARIOS & SETUP\r\n1. \tArkham Horror LCG comes with a core campaign (Night of the Zealot) and several expansions (The Dunwich Legacy, The Path to Carcosa & The Forgotten Age). Within each box you will find the volumes that contain all the cards required for each scenario setup, as well as a tablet linking to the official campaign guide PDF. Also included are chaos token cards and a Campaign Log.\r\n\r\n2. \tEach scenario is setup differently, and while some of the work has been prepared beforehand (such as building encounter decks), you will have to refer to the Campaign Guide for specific instructions on how to set up each scenario.\r\n\r\n3. \tThe chaos bag is always placed on the scenario setup mat in the upper right-hand corner onto a snap point that tilts it at a 45-degree angle. Each scenario volume will contain a difficulty card, where you will have the choice of four difficulties. Press the button on the card according to the difficulty of your choosing and the chaos bag will automatically be configured with the tokens specific to that difficulty. In campaign play it is recommended to save your decks and chaos bag at the end of your scenario to carry over onto the next, as often tokens are added or removed from the chaos bag depending on actions or decisions made during the game. These additional tokens can be drawn from the token reserve book resting next to the newspaper in the middle of the main table – right click it and search for the token you need.\n\r\n4. \tWhen placing location cards, always place them face down on the main play area (the dark map of Arkham, Massachusetts) with the number of clues per location unrevealed. The mod is scripted so that when you flip said location cards (usually when entering the location with an investigator), if it contains clues, the number of clues specific to that location will automatically spawn. Note, that the mod only spawns tokens in relation to the number of players currently set on the playmat player settings. To set the number of players, left-click on the \"Investigators Playing\" number to increase, or right-click to decrease.\r\n\n5. To make location mapping easier, you can draw location connector tokens from the arrow-shaped container below the main play area. Each token has three states (one way, two way and four way) to use them accordingly to better visualize how your locations connect.\n\r\n6. \tIf you require additional doom or clue tokens, these are located on the scenario playmat in their corresponding containers. A handy Doom counter has been also been added to track the doom on the agenda – left-click to add to add, and right-click to deduct. Keep in mind that any doom spawned on enemies, locations or assets needs to be mentally added to the doom in play on the agenda to account for total doom.\r\n\r\nINVESTIGATOR PLAYMAT AND GAMEPLAY\r\n1. \tInvestigator mats are scripted to automate most of the gameplay for you. wdw\n\r\n2. \tEach mat has slots for inventory, where if you play an asset (for example you put a gun that has 4 ammo into your right-hand slot), the mod will automatically spawn the 4 resource tokens onto your equipped card.\n\r\n3.\tThe draw encounter button on the left-hand side will draw the topmost card from the encounter deck and put it in your threat area. Left-clicking will draw the card face-down, and right-clicking will draw the card face-up. When you draw a weakness, or engage an enemy, it is recommended you put it in your threat area, and once you defeat the enemy or treachery, you can send it to the encounter discard pile by clicking the discard button. If you defeat an enemy with a victory point, make sure not to discard to the discard pile, but pick the card up and drop it at the victory display.\n\r\n4. \tThe Click for Chaos button does just that, draw a random chaos token from your chaos bag. Clicking a second time, sends your chaos token back into the bag, which is then shuffled. If one player clicks to draw a token and doesn’t click a second time to send it back, the click from another player on his personal mat will send the token back first, and the next click will draw the token. Additionally, right-clicking the button will continue drawing tokens and line them up next to each other, which is useful for specific draw conditions the game may require from you. Left-clicking again will send all drawn tokens back to the bag.\n\nADDITIONAL FEATURES:\n1. Over 20 Fan-made scenarios created by the thriving community of Arkham Horror LCG have been included. Some of these are one-scenario missions, others are long involved campaigns spanning multiple scenarios. These are all contained in \"The Side Missions\". This boxset also includes the official FFG-created sidemissions Curse of the Rougarou, Carnevale of Horrors, Labrynths of Lunacy and The Eternal Slumber. Read the rulebook on including a side-mission into an ongoing campaign, or play it as a one-off adventure! Setup instructions are included in each volume.\n\n2. If you are not a fan of the dark themed Arkham map for the playmat, you can change the image on it to any you like. At the top left hand side of the playmat is an image icon, which when clicked will reveal a image swap panel. Input the URL for the image you want to repalce the playmat with, and the panel will apply the image for you. Keep in mind this will not change the existing snap points on the current playmat.\n\r\nAs a final comment, please be sure to let me know on the mod page in steam workshop if you find any bugs, issues or have any suggestions for improvement!\r\n\r\n\r\n \r\n\r\n", - "color": "Grey", - "visibleColor": { - "r": 0.5, - "g": 0.5, - "b": 0.5 - }, - "id": 8 - }, - "9": { - "title": "Bless / Curse Manager", - "body": "Implemented by Tikatoy\nIdea conceived by Cadentia\n\nTop buttons manage bless tokens, bottom buttons manage curse tokens\nADD - creates a new token and adds it to the chaos bag\nREMOVE - removes a token from the chaos bag and destroys it\nTAKE - takes a token from the chaos bag and places it below the manager (for sealing)\nRETURN - returns the last token taken from the chaos bag to the chaos bag\n\n---Other Notes---\n\nOnly use ONE token manager at a time\nTokens are limited to 10 of each type in play\nBless and curse tokens should be in the chaos bag before trying to REMOVE or TAKE them\nEach action logs a message which ends with (# in bag/# taken); hit enter to view log\n**WARNING**: Tracking # of tokens in bag and in play will NOT persist between saves\n\nVersion 3.0 UPDATE: Added a bindable hot key to display the current number of bless and curse tokens in the bag and in play (e.g. sealed on cards). To use, Options -> Game Keys, then bind Bless Curse Status to a key or mouse button. Only the player who uses the hot key will see the status.\n\nAdded a Reset button to refresh the manager's tracking of bless/curse tokens in the bag and in the play area. When tokens are deleted, or manually removed or returned to the bag, the manager will no longer have the correct state and will not function properly. Use the Reset button to restore correct state.\r", - "color": "Grey", - "visibleColor": { - "r": 0.5, - "g": 0.5, - "b": 0.5 - }, - "id": 9 - }, - "7": { - "title": "How to Hide Hands", - "body": "The server host can enable or disable cards in hands being hidden from other players by going to the menu at the top of the TTS screen, clicking options, and choosing Hands. The \"Disable\" setting reveals all player hands to all players, while the \"Default\" setting means that each player can only see the cards in their own hand.", - "color": "Grey", - "visibleColor": { - "r": 0.5, - "g": 0.5, - "b": 0.5 - }, - "id": 7 - }, - "10": { - "title": "Token Remover", - "body": "Created by Whimsical\n\nAnything that passes over the remover that isn't a card or a deck will be deleted.\r\nTo use the remover, right click on it, choose the \"Enable\" option, and take your card with resources/horror/damage and swipe it over the remover. You may wish to unlock and/or copy the remover to your play area first.", - "color": "Grey", - "visibleColor": { - "r": 0.5, - "g": 0.5, - "b": 0.5 - }, - "id": 10 - }, - "11": { - "title": "Numpad Hotkeys", - "body": "By Whimsical. Requires Numlock set to On.\n\nNumpad 4: Spawn Damage\nNumpad 5: Spawn Connection Marker\nNumpad 6: Spawn Horror\nNumpad 7: Spawn Doom\nNumpad 8: Spawn Clue\nNumpad 9: Spawn Resource", - "color": "Grey", - "visibleColor": { - "r": 0.5, - "g": 0.5, - "b": 0.5 - }, - "id": 11 - } -} diff --git a/testdata/simple/objects/15990d.json b/testdata/simple/objects/15990d.json new file mode 100644 index 0000000..4046c7b --- /dev/null +++ b/testdata/simple/objects/15990d.json @@ -0,0 +1,3 @@ +{ + "GUID": "15990d" +} diff --git a/testdata/simple/objects/196f99.json b/testdata/simple/objects/196f99.json new file mode 100644 index 0000000..cc3d46a --- /dev/null +++ b/testdata/simple/objects/196f99.json @@ -0,0 +1,3 @@ +{ + "GUID": "196f99" +} diff --git a/testdata/simple/objects/22928c.json b/testdata/simple/objects/22928c.json new file mode 100644 index 0000000..104dad7 --- /dev/null +++ b/testdata/simple/objects/22928c.json @@ -0,0 +1,3 @@ +{ + "GUID": "22928c" +} diff --git a/testdata/simple/objects/5fe087.json b/testdata/simple/objects/5fe087.json deleted file mode 100644 index b168614..0000000 --- a/testdata/simple/objects/5fe087.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "GUID": "5fe087", - "Name": "HandTrigger", - "Transform": { - "posX": -65.72001, - "posY": 6.0, - "posZ": -13.61, - "rotX": 0.0, - "rotY": 90.0, - "rotZ": 0.0, - "scaleX": 22.956728, - "scaleY": 7.0, - "scaleZ": 7.102174 - }, - "Nickname": "", - "Description": "", - "GMNotes": "", - "ColorDiffuse": { - "r": 0.9559999, - "g": 0.39199996, - "b": 0.112999953, - "a": 0.0 - }, - "LayoutGroupSortIndex": 0, - "Value": 0, - "Locked": true, - "Grid": false, - "Snap": true, - "IgnoreFoW": false, - "MeasureMovement": false, - "DragSelectable": true, - "Autoraise": true, - "Sticky": true, - "Tooltip": true, - "GridProjection": false, - "HideWhenFaceDown": false, - "Hands": false, - "FogColor": "Orange", - "LuaScript": "", - "LuaScriptState": "", - "XmlUI": "" -} diff --git a/testdata/simple/objects/be2f17.json b/testdata/simple/objects/be2f17.json deleted file mode 100644 index 3301845..0000000 --- a/testdata/simple/objects/be2f17.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "GUID": "be2f17", - "Name": "HandTrigger", - "Transform": { - "posX": -27.96, - "posY": 6.0, - "posZ": -36.3643074, - "rotX": 0.0, - "rotY": 1.00179122E-05, - "rotZ": 0.0, - "scaleX": 21.9605045, - "scaleY": 7.0, - "scaleZ": 6.517999 - }, - "Nickname": "", - "Description": "", - "GMNotes": "", - "ColorDiffuse": { - "r": 0.856, - "g": 0.09999997, - "b": 0.09399996, - "a": 0.0 - }, - "LayoutGroupSortIndex": 0, - "Value": 0, - "Locked": true, - "Grid": false, - "Snap": true, - "IgnoreFoW": false, - "MeasureMovement": false, - "DragSelectable": true, - "Autoraise": true, - "Sticky": true, - "Tooltip": true, - "GridProjection": false, - "HideWhenFaceDown": false, - "Hands": false, - "FogColor": "Red", - "LuaScript": "", - "LuaScriptState": "", - "XmlUI": "" - } diff --git a/testdata/simple/objects/chinese_checkers.json b/testdata/simple/objects/chinese_checkers.json deleted file mode 100644 index b9a17b0..0000000 --- a/testdata/simple/objects/chinese_checkers.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "GUID": "bd69bd", - "Name": "Chinese_Checkers_Piece", - "Transform": { - "posX": 73.16, - "posY": -0.259998322, - "posZ": -43.72, - "rotX": 0.00190076465, - "rotY": 180.0, - "rotZ": 0.000379891542, - "scaleX": 1.6499995, - "scaleY": 1.6499995, - "scaleZ": 1.6499995 - }, - "Nickname": "Flex Table Control", - "Description": "", - "GMNotes": "", - "ColorDiffuse": { - "r": 1.0, - "g": 1.0, - "b": 1.0 - }, - "LayoutGroupSortIndex": 0, - "Value": 0, - "Locked": true, - "Grid": true, - "Snap": true, - "IgnoreFoW": false, - "MeasureMovement": false, - "DragSelectable": true, - "Autoraise": true, - "Sticky": true, - "Tooltip": false, - "GridProjection": false, - "HideWhenFaceDown": false, - "Hands": false, - "MaterialIndex": 1, - "LuaScriptPath": "chinesecheckers.ttslua", - "LuaScriptState": "{\"cd\":{\"move\":true,\"scale\":false},\"tid\":[{\"name\":\"Felt - Grey\",\"url\":\"https://i.imgur.com/N0O6aqj.jpg\"},{\"name\":\"Wood\",\"url\":\"https://i.imgur.com/iOFFsGh.jpg\"},{\"name\":\"Wood 2\",\"url\":\"https://i.imgur.com/SQ2t01d.jpg\"}]}", - "XmlUI": "" - } diff --git a/testdata/simple/output.json b/testdata/simple/output.json deleted file mode 100644 index af9cfb8..0000000 --- a/testdata/simple/output.json +++ /dev/null @@ -1,4317 +0,0 @@ -{ - "DecalPallet": [ - { - "ImageURL": "http://cloud-3.steamusercontent.com/ugc/1474319121424323663/BC5570ECF747F1B30224461B576E8B0FE7FA5F33/", - "Name": "Achivement Checkmark", - "Size": 0.1 - } - ], - "Grid": { - "BothSnapping": false, - "Color": { - "b": 0, - "g": 0, - "r": 0 - }, - "Lines": false, - "Offset": false, - "Opacity": 0.75, - "PosOffset": { - "x": 0, - "y": 1, - "z": 0 - }, - "Snapping": false, - "ThickLines": false, - "Type": 0, - "xSize": 2, - "ySize": 2 - }, - "ImagePath": "SCE.png", - "Lighting": { - "AmbientEquatorColor": { - "b": 0.5, - "g": 0.5, - "r": 0.5 - }, - "AmbientGroundColor": { - "b": 0.5, - "g": 0.5, - "r": 0.5 - }, - "AmbientIntensity": 1.3, - "AmbientSkyColor": { - "b": 0.5, - "g": 0.5, - "r": 0.5 - }, - "AmbientType": 0, - "LightColor": { - "b": 0.8902, - "g": 0.9804, - "r": 1 - }, - "LightIntensity": 0.54, - "LutContribution": 1, - "LutIndex": 0, - "ReflectionIntensity": 1 - }, - "LuaScript": "--[[ Lua code. See documentation: http://berserk-games.com/knowledgebase/scripting/ --]]\r\n-- Card size used for autodealing --\r\n\r\n-- global position constants\r\nENCOUNTER_DECK_POS = {-3.8, 1, 5.7}\r\nENCOUNTER_DECK_SPAWN_POS = {-3.8, 3, 5.7}\r\nENCOUNTER_DECK_DISCARD_POSITION = {-3.8, 0.5, 10.5}\r\ng_cardWith=2.30;\r\ng_cardHeigth=3.40;\r\n\r\ncontainerId = 'fea079'\r\ntokenDataId = '708279'\r\n\r\n\r\nmaxSquid = 0\r\n\r\nCACHE = {\r\n object = {},\r\n data = {}\r\n}\r\n\r\n--[[ The OnLoad function. This is called after everything in the game save finishes loading.\r\nMost of your script code goes here. --]]\r\nfunction onload()\r\n --Player.White.changeColor('Yellow')\r\n tokenplayerone = {\r\n damageone = \"http://cloud-3.steamusercontent.com/ugc/1758068501357115146/903D11AAE7BD5C254C8DC136E9202EE516289DEA/\",\r\n damagethree = \"http://cloud-3.steamusercontent.com/ugc/1758068501357113055/8A45F27B2838FED09DEFE492C9C40DD82781613A/\",\r\n horrorone = \"http://cloud-3.steamusercontent.com/ugc/1758068501357163535/6D9E0756503664D65BDB384656AC6D4BD713F5FC/\",\r\n horrorthree = \"http://cloud-3.steamusercontent.com/ugc/1758068501357162977/E5D453CC14394519E004B4F8703FC425A7AE3D6C/\",\r\n resource = \"http://cloud-3.steamusercontent.com/ugc/1758068501357192910/11DDDC7EF621320962FDCF3AE3211D5EDC3D1573/\",\r\n resourcethree = \"https://i.imgur.com/1GZsDTt.png\",\r\n doom = \"https://i.imgur.com/EoL7yaZ.png\",\r\n clue = \"http://cloud-3.steamusercontent.com/ugc/1758068501357164917/1D06F1DC4D6888B6F57124BD2AFE20D0B0DA15A8/\"\r\n }\r\n\r\n TOKEN_DATA = {\r\n clue = {image = tokenplayerone.clue, scale = {0.15, 0.15, 0.15}},\r\n resource = {image = tokenplayerone.resource, scale = {0.17, 0.17, 0.17}},\r\n doom = {image = tokenplayerone.doom, scale = {0.17, 0.17, 0.17}}\r\n }\r\n\r\n getObjectFromGUID(\"6161b4\").interactable=false\r\n getObjectFromGUID(\"721ba2\").interactable=false\r\n getObjectFromGUID(\"9f334f\").interactable=false\r\n getObjectFromGUID(\"23a43c\").interactable=false\r\n getObjectFromGUID(\"5450cc\").interactable=false\r\n getObjectFromGUID(\"463022\").interactable=false\r\n getObjectFromGUID(\"9487a4\").interactable=false\r\n getObjectFromGUID(\"91dd9b\").interactable=false\r\n getObjectFromGUID(\"f182ee\").interactable=false\r\n\r\nend\r\n\r\nfunction take_callback(object_spawned, mat)\r\n customObject = object_spawned.getCustomObject()\r\n local player = mat.getGUID();\r\n\r\n local image = customObject.image\r\n\r\n -- Update global stats\r\n if PULLS[image] == nil then\r\n PULLS[image] = 0\r\n end\r\n PULLS[image] = PULLS[image] + 1\r\n -- Update player stats\r\n if PLAYER_PULLS[player][image] == nil then\r\n PLAYER_PULLS[player][image] = 0\r\n end\r\n PLAYER_PULLS[player][image] = PLAYER_PULLS[player][image] + 1\r\n\r\nend\r\nMAT_GUID_TO_COLOUR = {\r\n [\"8b081b\"] = \"White\",\r\n -- player 2 conrad\r\n [\"bd0ff4\"] = \"Orange\",\r\n -- player\r\n [\"383d8b\"] = \"Green\",\r\n -- playur 4 olivia\r\n [\"0840d5\"] = \"Red\"\r\n}\r\n\r\n\r\nPLAYER_PULLS = {\r\n -- player 1 max\r\n [\"8b081b\"] = {},\r\n -- player 2 conrad\r\n [\"bd0ff4\"] = {},\r\n -- player\r\n [\"383d8b\"] = {},\r\n -- playur 4 olivia\r\n [\"0840d5\"] = {}\r\n}\r\n\r\nPULLS = {\r\n -- cultist\r\n [\"https://i.imgur.com/VzhJJaH.png\"] = 0,\r\n -- skull\r\n [\"https://i.imgur.com/stbBxtx.png\"] = 0,\r\n -- tablet\r\n [\"https://i.imgur.com/1plY463.png\"] = 0,\r\n -- curse\r\n [\"http://cloud-3.steamusercontent.com/ugc/1655601092778636039/2A25BD38E8C44701D80DD96BF0121DA21843672E/\"] = 0,\r\n -- tentacle\r\n [\"https://i.imgur.com/lns4fhz.png\"] = 0,\r\n -- minus eight\r\n [\"https://i.imgur.com/9t3rPTQ.png\"] = 0,\r\n -- minus seven\r\n [\"https://i.imgur.com/4WRD42n.png\"] = 0,\r\n -- minus six\r\n [\"https://i.imgur.com/c9qdSzS.png\"] = 0,\r\n -- minus five\r\n [\"https://i.imgur.com/3Ym1IeG.png\"] = 0,\r\n -- minus four\r\n [\"https://i.imgur.com/qrgGQRD.png\"] = 0,\r\n -- minus three\r\n [\"https://i.imgur.com/yfs8gHq.png\"] = 0,\r\n -- minus two\r\n [\"https://i.imgur.com/bfTg2hb.png\"] = 0,\r\n -- minus one\r\n [\"https://i.imgur.com/w3XbrCC.png\"] = 0,\r\n -- zero\r\n [\"https://i.imgur.com/btEtVfd.png\"] = 0,\r\n -- plus one\r\n [\"https://i.imgur.com/uIx8jbY.png\"] = 0,\r\n -- elder thing\r\n [\"https://i.imgur.com/ttnspKt.png\"] = 0,\r\n -- bless\r\n [\"http://cloud-3.steamusercontent.com/ugc/1655601092778627699/339FB716CB25CA6025C338F13AFDFD9AC6FA8356/\"] = 0,\r\n -- elder sign\r\n [\"https://i.imgur.com/nEmqjmj.png\"] = 0,\r\n}\r\n\r\nIMAGE_TOKEN_MAP = {\r\n -- elder sign\r\n [\"https://i.imgur.com/nEmqjmj.png\"] = \"Elder Sign\",\r\n -- plus one\r\n [\"https://i.imgur.com/uIx8jbY.png\"] = \"+1\",\r\n -- zero\r\n [\"https://i.imgur.com/btEtVfd.png\"] = \"0\",\r\n -- minus one\r\n [\"https://i.imgur.com/w3XbrCC.png\"] = \"-1\",\r\n -- minus two\r\n [\"https://i.imgur.com/bfTg2hb.png\"] = \"-2\",\r\n -- minus three\r\n [\"https://i.imgur.com/yfs8gHq.png\"] = \"-3\",\r\n -- minus four\r\n [\"https://i.imgur.com/qrgGQRD.png\"] = \"-4\",\r\n -- minus five\r\n [\"https://i.imgur.com/3Ym1IeG.png\"] = \"-5\",\r\n -- minus six\r\n [\"https://i.imgur.com/c9qdSzS.png\"] = \"-6\",\r\n -- minus seven\r\n [\"https://i.imgur.com/4WRD42n.png\"] = \"-7\",\r\n -- minus eight\r\n [\"https://i.imgur.com/9t3rPTQ.png\"] = \"-8\",\r\n -- skull\r\n [\"https://i.imgur.com/stbBxtx.png\"] = \"Skull\",\r\n -- cultist\r\n [\"https://i.imgur.com/VzhJJaH.png\"] = \"Cultist\",\r\n -- tablet\r\n [\"https://i.imgur.com/1plY463.png\"] = \"Tablet\",\r\n -- elder thing\r\n [\"https://i.imgur.com/ttnspKt.png\"] = \"Elder Thing\",\r\n -- tentacle\r\n [\"https://i.imgur.com/lns4fhz.png\"] = \"Auto-fail\",\r\n -- bless\r\n [\"http://cloud-3.steamusercontent.com/ugc/1655601092778627699/339FB716CB25CA6025C338F13AFDFD9AC6FA8356/\"] = \"Bless\",\r\n -- curse\r\n [\"http://cloud-3.steamusercontent.com/ugc/1655601092778636039/2A25BD38E8C44701D80DD96BF0121DA21843672E/\"] = \"Curse\"\r\n}\r\n\r\nfunction resetStats()\r\n for key,value in pairs(PULLS) do\r\n PULLS[key] = 0\r\n end\r\n for playerKey, playerValue in pairs(PLAYER_PULLS) do\r\n for key,value in pairs(PULLS) do\r\n PLAYER_PULLS[playerKey][key] = value\r\n end\r\n end\r\n\r\n\r\nend\r\n\r\nfunction getPlayerName(playerMatGuid)\r\n local playerColour = MAT_GUID_TO_COLOUR[playerMatGuid]\r\n if Player[playerColour].seated then\r\n return Player[playerColour].steam_name\r\n else\r\n return playerColour\r\n end\r\nend\r\n\r\nfunction printStats()\r\n local squidKing = \"Nobody\"\r\n\r\n\r\n printToAll(\"\\nOverall Game stats\\n\")\r\n printNonZeroTokenPairs(PULLS)\r\n printToAll(\"\\nIndividual Stats\\n\")\r\n for playerMatGuid, countTable in pairs(PLAYER_PULLS) do\r\n local playerName = getPlayerName(playerMatGuid)\r\n printToAll(playerName .. \" Stats\", {r=255,g=0,b=0})\r\n printNonZeroTokenPairs(PLAYER_PULLS[playerMatGuid])\r\n playerSquidCount = PLAYER_PULLS[playerMatGuid][\"https://i.imgur.com/lns4fhz.png\"]\r\n if playerSquidCount ~= nil and playerSquidCount \u003e maxSquid then\r\n squidKing = playerName\r\n\t maxSquid = playerSquidCount\r\n end\r\n end\r\n printToAll(squidKing .. \" is an auto-fail magnet.\", {r=255,g=0,b=0})\r\nend\r\n\r\nfunction printNonZeroTokenPairs(theTable)\r\n for key,value in pairs(theTable) do\r\n if value ~= 0 then\r\n printToAll(IMAGE_TOKEN_MAP[key] .. '=' .. tostring(value))\r\n end\r\n end\r\nend\r\n\r\n-- Remove comments to enable autorotate cards on hands.\r\n-- function onObjectEnterScriptingZone(zone, object)\r\n-- Autorotate cards with right side up when entering hand.\r\n-- if zone.getGUID() == \"c506bf\" or -- white\r\n-- zone.getGUID() == \"cbc751\" then -- orange\r\n-- object.setRotationSmooth({0,270,0})\r\n-- elseif zone.getGUID() == \"67ce9a\" then -- green\r\n-- object.setRotationSmooth({0,0,0})\r\n-- elseif zone.getGUID() == \"57c22c\" then -- red\r\n-- object.setRotationSmooth({0,180,0})\r\n--end\r\n--end\r\n\r\nfunction findInRadiusBy(pos, radius, filter, debug)\r\n local radius = (radius or 1)\r\n local objList = Physics.cast({\r\n origin = pos,\r\n direction = {0,1,0},\r\n type = 2,\r\n size = {radius, radius, radius},\r\n max_distance = 0,\r\n debug = (debug or false)\r\n })\r\n\r\n local filteredList = {}\r\n for _, obj in ipairs(objList) do\r\n if filter == nil then\r\n table.insert(filteredList, obj.hit_object)\r\n elseif filter and filter(obj.hit_object) then\r\n table.insert(filteredList, obj.hit_object)\r\n end\r\n end\r\n return filteredList\r\nend\r\n\r\nfunction dealCardsInRows(paramlist)\r\n \tlocal currPosition={};\r\n local numRow=1;\r\n\tlocal numCard=0;\r\n\tlocal invMultiplier=1;\r\n\tlocal allCardsDealed=0;\r\n\t\tif paramlist.inverse then\r\n\t\tinvMultiplier=-1;\r\n\tend\r\n\t\tif paramlist.maxCardsDealed==nil then\r\n\r\n\t\tallCardsDealed=0;\r\n\t\tparamlist.maxCardsDealed=paramlist.cardDeck.getQuantity()\r\n\r\n\telseif paramlist.maxCardsDealed\u003e=paramlist.cardDeck.getQuantity() or paramlist.maxCardsDealed\u003c=0 then\r\n\r\n\t\tallCardsDealed=0;\r\n\t\tparamlist.maxCardsDealed=paramlist.cardDeck.getQuantity()\r\n\r\n\telse\r\n\r\n\t\tallCardsDealed=1;\r\n\r\n\tend\r\n\r\n\tif paramlist.mode==\"x\" then\r\n\t\tcurrPosition={paramlist.iniPosition[1]+(2*g_cardWith*invMultiplier*allCardsDealed),paramlist.iniPosition[2],paramlist.iniPosition[3]};\r\n\r\n\telse\r\n\t\tcurrPosition={paramlist.iniPosition[1],paramlist.iniPosition[2],paramlist.iniPosition[3]+(2*g_cardWith*invMultiplier*allCardsDealed)};\r\n\r\n\tend\r\n\r\n\tfor i = 1,paramlist.maxCardsDealed,1 do\r\n\r\n paramlist.cardDeck.takeObject\r\n ({\r\n position= currPosition,\r\n smooth= true\r\n });\r\n\r\n\t\tnumCard=numCard+1;\r\n\t\tif numCard\u003e=paramlist.maxCardRow then\r\n\r\n\t\t\tif paramlist.mode==\"x\" then\r\n\t\t\t\tcurrPosition={paramlist.iniPosition[1]+(2*g_cardWith*invMultiplier*allCardsDealed),paramlist.iniPosition[2],paramlist.iniPosition[3]};\r\n\t\t\t\tcurrPosition[3]=currPosition[3]-(numRow*g_cardHeigth*invMultiplier);\r\n\t\t\telse\r\n\t\t\t\tcurrPosition={paramlist.iniPosition[1],paramlist.iniPosition[2],paramlist.iniPosition[3]+(2*g_cardWith*invMultiplier*allCardsDealed)};\r\n\t\t\t\tcurrPosition[1]=currPosition[1]+(numRow*g_cardHeigth*invMultiplier);\r\n\t\t\tend\r\n\t\t\tnumCard=0;\r\n\t\t\tnumRow=numRow+1;\r\n\r\n\t\telse\r\n\t\t\tif paramlist.mode==\"x\" then\r\n\t\t\t\tcurrPosition[1]=currPosition[1]+(g_cardWith*invMultiplier);\r\n\t\t\telse\r\n\t\t\t\tcurrPosition[3]=currPosition[3]+(g_cardWith*invMultiplier);\r\n\t\t\tend\r\n\t\tend\r\n end\r\nend\r\n\r\nfunction isDeck(x)\r\n return x.tag == 'Deck'\r\nend\r\n\r\nfunction isCardOrDeck(x)\r\n return x.tag == 'Card' or isDeck(x)\r\nend\r\n\r\nfunction drawEncountercard(params) --[[ Parameter Table Position, Table Rotation]]\r\n local position = params[1]\r\n local rotation = params[2]\r\n local alwaysFaceUp = params[3]\r\n local faceUpRotation\r\n local card\r\n local items = findInRadiusBy(ENCOUNTER_DECK_POS, 4, isCardOrDeck)\r\n if #items \u003e 0 then\r\n for i, v in ipairs(items) do\r\n if v.tag == 'Deck' then\r\n card = v.takeObject({index = 0})\r\n break\r\n end\r\n end\r\n -- we didn't find the deck so just pull the first thing we did find\r\n if card == nil then card = items[1] end\r\n actualEncounterCardDraw(card, params)\r\n return\r\n end\r\n-- nothing here, time to reshuffle\r\n reshuffleEncounterDeck(params)\r\nend\r\n\r\nfunction actualEncounterCardDraw(card, params)\r\n local position = params[1]\r\n local rotation = params[2]\r\n local alwaysFaceUp = params[3]\r\n local faceUpRotation = 0\r\n if not alwaysFaceUp then\r\n if getObjectFromGUID(tokenDataId).call('checkHiddenCard', card.getName()) then\r\n faceUpRotation = 180\r\n end\r\n end\r\n card.setPositionSmooth(position, false, false)\r\n card.setRotationSmooth({0,rotation.y,faceUpRotation}, false, false)\r\nend\r\n\r\nIS_RESHUFFLING = false\r\nfunction reshuffleEncounterDeck(params)\r\n -- finishes moving the deck back and draws a card\r\n local function move(deck)\r\n deck.setPositionSmooth(ENCOUNTER_DECK_SPAWN_POS, true, false)\r\n actualEncounterCardDraw(deck.takeObject({index=0}), params)\r\n Wait.time(function()\r\n IS_RESHUFFLING = false\r\n end, 1)\r\n end\r\n -- bail out if we're mid reshuffle\r\n if IS_RESHUFFLING then\r\n return\r\n end\r\n local discarded = findInRadiusBy(ENCOUNTER_DECK_DISCARD_POSITION, 4, isDeck)\r\n if #discarded \u003e 0 then\r\n IS_RESHUFFLING = true\r\n local deck = discarded[1]\r\n if not deck.is_face_down then\r\n deck.flip()\r\n end\r\n deck.shuffle()\r\n Wait.time(|| move(deck), 0.3)\r\n else\r\n printToAll(\"couldn't find encounter discard pile to reshuffle\", {1, 0, 0})\r\n end\r\nend\r\n\r\nCHAOS_TOKENS = {}\r\nCHAOS_TOKENS_LAST_MAT = nil\r\nfunction putBackChaosTokens()\r\n local chaosbagposition = chaosbag.getPosition()\r\n for k, token in pairs(CHAOS_TOKENS) do\r\n if token ~= nil then\r\n chaosbag.putObject(token)\r\n token.setPosition({chaosbagposition[1],chaosbagposition[2]+0.5,chaosbagposition[3]})\r\n end\r\n end\r\n CHAOS_TOKENS = {}\r\n end\r\n\r\nfunction drawChaostoken(params)\r\n local mat = params[1]\r\n local tokenOffset = params[2]\r\n local isRightClick = params[3]\r\n local isSameMat = (CHAOS_TOKENS_LAST_MAT == nil or CHAOS_TOKENS_LAST_MAT == mat)\r\n if not isSameMat then\r\n putBackChaosTokens()\r\n end\r\n CHAOS_TOKENS_LAST_MAT = mat\r\n -- if we have left clicked and have no tokens OR if we have right clicked\r\n if isRightClick or #CHAOS_TOKENS == 0 then\r\n local items = getObjectFromGUID(\"83ef06\").getObjects()\r\n for i,v in ipairs(items) do\r\n if items[i].getDescription() == \"Chaos Bag\" then\r\n chaosbag = getObjectFromGUID(items[i].getGUID())\r\n break\r\n end\r\n end\r\n -- bail out if we have no tokens\r\n if #chaosbag.getObjects() == 0 then\r\n return\r\n end\r\n chaosbag.shuffle()\r\n -- add the token to the list, compute new position based on list length\r\n tokenOffset[1] = tokenOffset[1] + (0.17 * #CHAOS_TOKENS)\r\n local toPosition = mat.positionToWorld(tokenOffset)\r\n local token = chaosbag.takeObject({\r\n index = 0,\r\n position = toPosition,\r\n rotation = mat.getRotation(),\r\n\t callback_function = function(obj) take_callback(obj, mat) end\r\n })\r\n CHAOS_TOKENS[#CHAOS_TOKENS + 1] = token\r\n return\r\n else\r\n putBackChaosTokens()\r\n end\r\nend\r\n\r\nfunction spawnToken(params)\r\n -- Position to spawn,\r\n -- rotation vector to apply\r\n -- translation vector to apply\r\n -- token type\r\n local position = params[1]\r\n local tokenType = params[2]\r\n local tokenData = TOKEN_DATA[tokenType]\r\n if tokenData == nil then\r\n error(\"no token data found for '\" .. tokenType .. \"'\")\r\n end\r\n\r\n local token = spawnObject({\r\n type = 'Custom_Token',\r\n position = position,\r\n\trotation = {x=0, y=270, z=0}\r\n })\r\n token.setCustomObject({\r\n image = tokenData['image'],\r\n thickness = 0.3,\r\n merge_distance = 5.0,\r\n stackable = true,\r\n })\r\n token.use_snap_points=false\r\n token.scale(tokenData['scale'])\r\n return token\r\nend\r\n\r\nfunction round(params) -- Parameter (int number, int numberDecimalPlaces)\r\n return tonumber(string.format(\"%.\" .. (params[2] or 0) .. \"f\", params[1]))\r\nend\r\n\r\nfunction roundposition(params) -- Parameter (Table position)\r\n return {round({params[1], 2}),round({params[2], 2}),round({params[3], 2})}\r\nend\r\n\r\nfunction isEqual(params) --Parameter (Table table1, Table table2) returns true if the tables are equal\r\n if params[1][1] == params[2][1] and params[1][2] == params[2][2] and params[1][3] == params[2][3] then\r\n return true\r\n else\r\n return false\r\n end\r\nend\r\n\r\nfunction isFaceup(params) --Object object\r\n if params.getRotation()[3] \u003e -5 and params.getRotation()[3] \u003c 5 then\r\n return true\r\n else\r\n return false\r\n end\r\nend\r\n\r\n--Difficulty selector script\r\n\r\nfunction createSetupButtons(args)\r\n local data = getDataValue('modeData', args.key)\r\n if data ~= nil then\r\n local z = -0.15\r\n if data.easy ~= nil then\r\n args.object.createButton({\r\n label = 'Easy',\r\n click_function = 'easyClick',\r\n function_owner = args.object,\r\n position = {0, 0.1, z},\r\n rotation = {0, 0, 0},\r\n scale = {0.47, 1, 0.47},\r\n height = 200,\r\n width = 1150,\r\n font_size = 100,\r\n color = {0.87, 0.8, 0.70},\r\n font_color = {0, 0, 0}\r\n })\r\n z = z + 0.20\r\n end\r\n if data.normal ~= nil then\r\n args.object.createButton({\r\n label = 'Standard',\r\n click_function = 'normalClick',\r\n function_owner = args.object,\r\n position = {0, 0.1, z},\r\n rotation = {0, 0, 0},\r\n scale = {0.47, 1, 0.47},\r\n height = 200,\r\n width = 1150,\r\n font_size = 100,\r\n color = {0.87, 0.8, 0.70},\r\n font_color = {0, 0, 0}\r\n })\r\n z = z + 0.20\r\n end\r\n if data.hard ~= nil then\r\n args.object.createButton({\r\n label = 'Hard',\r\n click_function = 'hardClick',\r\n function_owner = args.object,\r\n position = {0, 0.1, z},\r\n rotation = {0, 0, 0},\r\n scale = {0.47, 1, 0.47},\r\n height = 200,\r\n width = 1150,\r\n font_size = 100,\r\n color = {0.87, 0.8, 0.70},\r\n font_color = {0, 0, 0}\r\n })\r\n z = z + 0.20\r\n end\r\n if data.expert ~= nil then\r\n args.object.createButton({\r\n label = 'Expert',\r\n click_function = 'expertClick',\r\n function_owner = args.object,\r\n position = {0, 0.1, z},\r\n rotation = {0, 0, 0},\r\n scale = {0.47, 1, 0.47},\r\n height = 200,\r\n width = 1150,\r\n font_size = 100,\r\n color = {0.87, 0.8, 0.70},\r\n font_color = {0, 0, 0}\r\n })\r\n z = z + 0.20\r\n end\r\n z = z + 0.10\r\n if data.standalone ~= nil then\r\n args.object.createButton({\r\n label = 'Standalone',\r\n click_function = 'standaloneClick',\r\n function_owner = args.object,\r\n position = {0, 0.1, z},\r\n rotation = {0, 0, 0},\r\n scale = {0.47, 1, 0.47},\r\n height = 200,\r\n width = 1150,\r\n font_size = 100,\r\n color = {0.87, 0.8, 0.70},\r\n font_color = {0, 0, 0}\r\n })\r\n end\r\n end\r\nend\r\n\r\nfunction fillContainer(args)\r\n local container = getObjectCache(containerId)\r\n\r\n if container ~= nil then\r\n local data = getDataValue('modeData', args.key)\r\n if data == nil then return end\r\n\r\n local value = data[args.mode]\r\n if value == nil or value.token == nil then return end\r\n\r\n local pos = container.getPosition()\r\n if args.object ~= nil then\r\n pos = args.object.getPosition()\r\n end\r\n\r\n cleanContainer(container)\r\n\r\n for _, token in ipairs(value.token) do\r\n local obj = spawnToken_2(token, pos)\r\n if obj ~= nil then\r\n container.putObject(obj)\r\n end\r\n end\r\n\r\n if value.append ~= nil then\r\n for _, token in ipairs(value.append) do\r\n local obj = spawnToken_2(token, pos)\r\n if obj ~= nil then\r\n container.putObject(obj)\r\n end\r\n end\r\n end\r\n\r\n if value.random then\r\n local n = #value.random\r\n if n \u003e 0 then\r\n for _, token in ipairs(value.random[getRandomCount(n)]) do\r\n local obj = spawnToken_2(token, pos)\r\n if obj ~= nil then\r\n container.putObject(obj)\r\n end\r\n end\r\n end\r\n end\r\n\r\n if value.message then\r\n broadcastToAll(value.message)\r\n end\r\n if value.warning then\r\n broadcastToAll(value.warning, { 1, 0.5, 0.5 })\r\n end\r\n end\r\nend\r\n\r\nfunction spawnToken_2(id, pos)\r\n local url = getImageUrl(id)\r\n if url ~= '' then\r\n local obj = spawnObject({\r\n type = 'Custom_Tile',\r\n position = {pos.x, pos.y + 3, pos.z},\r\n rotation = {x = 0, y = 260, z = 0}\r\n })\r\n obj.setCustomObject({\r\n type = 2,\r\n image = url,\r\n thickness = 0.10,\r\n })\r\n obj.scale {0.81, 1, 0.81}\r\n obj.setName(getTokenName({ url=url }))\r\n return obj\r\n end\r\nend\r\n\r\nfunction getTokenName(params)\r\n local name = IMAGE_TOKEN_MAP[params.url]\r\n if name == nil then name = \"\" end\r\n return name\r\nend\r\n\r\nfunction getImageUrl(id)\r\n if id == 'p1' then return 'https://i.imgur.com/uIx8jbY.png' end\r\n if id == '0' then return 'https://i.imgur.com/btEtVfd.png' end\r\n if id == 'm1' then return 'https://i.imgur.com/w3XbrCC.png' end\r\n if id == 'm2' then return 'https://i.imgur.com/bfTg2hb.png' end\r\n if id == 'm3' then return 'https://i.imgur.com/yfs8gHq.png' end\r\n if id == 'm4' then return 'https://i.imgur.com/qrgGQRD.png' end\r\n if id == 'm5' then return 'https://i.imgur.com/3Ym1IeG.png' end\r\n if id == 'm6' then return 'https://i.imgur.com/c9qdSzS.png' end\r\n if id == 'm7' then return 'https://i.imgur.com/4WRD42n.png' end\r\n if id == 'm8' then return 'https://i.imgur.com/9t3rPTQ.png' end\r\n if id == 'skull' then return 'https://i.imgur.com/stbBxtx.png' end\r\n if id == 'cultist' then return 'https://i.imgur.com/VzhJJaH.png' end\r\n if id == 'tablet' then return 'https://i.imgur.com/1plY463.png' end\r\n if id == 'elder' then return 'https://i.imgur.com/ttnspKt.png' end\r\n if id == 'red' then return 'https://i.imgur.com/lns4fhz.png' end\r\n if id == 'blue' then return 'https://i.imgur.com/nEmqjmj.png' end\r\n return ''\r\nend\r\n\r\nfunction cleanContainer(container)\r\n for _, item in ipairs(container.getObjects()) do\r\n destroyObject(container.takeObject({}))\r\n end\r\nend\r\n\r\nfunction getObjectsInZone(zoneId)\r\n local zoneObject = getObjectCache(zoneId)\r\n\r\n if zoneObject == nil then\r\n return\r\n end\r\n\r\n local objectsInZone = zoneObject.getObjects()\r\n local objectsFound = {}\r\n\r\n for i = 1, #objectsInZone do\r\n local object = objectsInZone[i]\r\n if object.tag == 'Bag' then\r\n table.insert(objectsFound, object.guid)\r\n end\r\n end\r\n\r\n if #objectsFound \u003e 0 then\r\n return objectsFound\r\n end\r\nend\r\n\r\nfunction getObjectCache(id)\r\n if CACHE.object[id] == nil then\r\n CACHE.object[id] = getObjectFromGUID(id)\r\n end\r\n return CACHE.object[id]\r\nend\r\n\r\nfunction getDataTable(storage)\r\n if CACHE.data[storage] == nil then\r\n local obj = getObjectCache(tokenDataId)\r\n if obj ~= nil then\r\n CACHE.data[storage] = obj.getTable(storage)\r\n end\r\n end\r\n return CACHE.data[storage]\r\nend\r\n\r\nfunction getDataValue(storage, key)\r\n local data = getDataTable(storage)\r\n if data ~= nil then\r\n local value = data[key]\r\n if value ~= nil then\r\n local res = {}\r\n for m, v in pairs(value) do\r\n res[m] = v\r\n if res[m].parent ~= nil then\r\n local parentData = getDataValue(storage, res[m].parent)\r\n if parentData ~= nil and parentData[m] ~= nil and parentData[m].token ~= nil then\r\n res[m].token = parentData[m].token\r\n end\r\n res[m].parent = nil\r\n end\r\n end\r\n return res\r\n end\r\n end\r\nend\r\n\r\nfunction getRandomCount(to)\r\n updateRandomSeed()\r\n return math.random(1, to)\r\nend\r\n\r\nfunction updateRandomSeed()\r\n local chance = math.random(1,10)\r\n if chance == 1 then\r\n math.randomseed(os.time())\r\n end\r\nend\r\n", - "LuaScriptState": "", - "MusicPlayer": { - "AudioLibrary": [ - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538847453001/4481D1CC5684FCF04AB143954DEFE09E94BF5CEB/", - "Item2": "Laudanum - Atrium Carceri: Black Corner Den" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538847453925/A083A3784DAC15D75513F92C54642D58B05FA996/", - "Item2": "Prepare the Stage of Night - Atrium Carceri: Black Corner Den" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538847448789/4E04CB9EBECDF5BEA8EF1B146ACAB711D9AF5F0F/", - "Item2": "An Atrementous City - Atrium Carceri: Black Corner Den" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538847444523/8C8AE52CABE62CF84AEA1B9A6055C0C39375FCDB/", - "Item2": "A Deeper Dream - Atrium Carceri: Black Corner Den" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538847455056/0D6EAB8903C3B6E44CB2F3F2ACF34297F3757DC4/", - "Item2": "Wind-Up Orchestra - Atrium Carceri: Black Corner Den" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538847451936/3D8B9C473889956F22DF84285A5BA9ABBCEE4D8F/", - "Item2": "House of Tinctures - Atrium Carceri: Black Corner Den" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538847450067/DC4A12A8E621CFE19BAB9AB6B6BD30C337B39B27/", - "Item2": "End of the Century - Atrium Carceri: Black Corner Den" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538843610156/990053307E71986B46045FF0EC8BFABBD6EBE7BF/", - "Item2": "Cthulhu - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848438651/B87CFA9DAAB2DDF3ECCD714348B23498AFCC7804/", - "Item2": "Azathoth 1 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848445981/7CAE63540FD2C218DD5B85D53B391C6DE1D0D200/", - "Item2": "Azathoth 2 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848464736/632CB8C59B9E7B0979A40468E0F0AE2ACB1B6B21/", - "Item2": "Nyarlathotep 1 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848480793/17DC9A3323A5381B1DD7316C67F3F554FDC52B27/", - "Item2": "Nyarlathotep 2 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848485973/A65ABDA232410FB64FA0A4BD26431ACDF3E2D46A/", - "Item2": "Nyarlathotep 3 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848495368/3236262EB67C1DFE3DC26574452EDE61B825B201/", - "Item2": "Shub-Niggurath 1 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848498833/955B04EC164A2A2DF6AA683A44451A24E6BC3453/", - "Item2": "Shub-Niggurath 2 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848501343/E56987BC93B5E591A7764C29400DC29CCBFDD3DD/", - "Item2": "Yog-Sothoth 1 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848504941/FA9BA511380775C163A0C0F08FA3D1CA033E68E2/", - "Item2": "Yog-Sothoth 2 - Cryo Chamber" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848530903/E08BB3474D49477CAA9B78D3A8AA54FDC757B351/", - "Item2": "The Gargantuan Tower - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848530379/F1C98200F021A2471E5575DE934C62C927A8FFA4/", - "Item2": "The Dark Mother - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848526667/76C6786A4A463EF6A7E43DE6C407246A8ED5D6F6/", - "Item2": "Across the Sea of the Dead - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848527228/A96DC0E3ED5C000807E8C8600BA52F9282FE35EB/", - "Item2": "Black Needle - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848527836/48245BF2494C1865834A412BC7E591EA04F3A919/", - "Item2": "Decrepit City - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848529472/D4C99D8D6C0E16AB561FA6C190B18E96D808DE8B/", - "Item2": "Sacred Slab - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848525938/26EC4322860F6AE86A1EADBED45E91C6E6F599B0/", - "Item2": "200 Days - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848528926/CC697AF9346939B202B65F863B641DC562039E0F/", - "Item2": "Industrial District - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848528271/E2BA3FB96D587B12148FE05FEA5E4E5C886CAA43/", - "Item2": "Heart of the Metropolis - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848529861/BC675583A20F58532A065945588D352295AFDDB9/", - "Item2": "The Cowled Seers - Atrium Carceri: Metropolis" - }, - { - "Item1": "http://cloud-3.steamusercontent.com/ugc/784110538848531283/612B88F51901DE770452542640D1F89C9604BDBF/", - "Item2": "The Machine - Atrium Carceri: Metropolis" - } - ], - "CurrentAudioTitle": "Laudanum - Atrium Carceri: Black Corner Den", - "CurrentAudioURL": "http://cloud-3.steamusercontent.com/ugc/784110538847453001/4481D1CC5684FCF04AB143954DEFE09E94BF5CEB/", - "PlaylistEntry": 0, - "RepeatSong": false - }, - "Name": "simple", - "ObjectStates": [ - { - "Autoraise": true, - "ColorDiffuse": { - "a": 0, - "b": 0.112999953, - "g": 0.39199996, - "r": 0.9559999 - }, - "ContainedObjects": [], - "Description": "", - "DragSelectable": true, - "FogColor": "Orange", - "GMNotes": "", - "GUID": "5fe087", - "Grid": false, - "GridProjection": false, - "Hands": false, - "HideWhenFaceDown": false, - "IgnoreFoW": false, - "LayoutGroupSortIndex": 0, - "Locked": true, - "LuaScript": "", - "LuaScriptState": "", - "MeasureMovement": false, - "Name": "HandTrigger", - "Nickname": "", - "Snap": true, - "Sticky": true, - "Tooltip": true, - "Transform": { - "posX": -65.72001, - "posY": 6, - "posZ": -13.61, - "rotX": 0, - "rotY": 90, - "rotZ": 0, - "scaleX": 22.956728, - "scaleY": 7, - "scaleZ": 7.102174 - }, - "Value": 0, - "XmlUI": "" - }, - { - "Autoraise": true, - "ColorDiffuse": { - "a": 0, - "b": 0.09399996, - "g": 0.09999997, - "r": 0.856 - }, - "ContainedObjects": [], - "Description": "", - "DragSelectable": true, - "FogColor": "Red", - "GMNotes": "", - "GUID": "be2f17", - "Grid": false, - "GridProjection": false, - "Hands": false, - "HideWhenFaceDown": false, - "IgnoreFoW": false, - "LayoutGroupSortIndex": 0, - "Locked": true, - "LuaScript": "", - "LuaScriptState": "", - "MeasureMovement": false, - "Name": "HandTrigger", - "Nickname": "", - "Snap": true, - "Sticky": true, - "Tooltip": true, - "Transform": { - "posX": -27.96, - "posY": 6, - "posZ": -36.3643074, - "rotX": 0, - "rotY": 0.0000100179122, - "rotZ": 0, - "scaleX": 21.9605045, - "scaleY": 7, - "scaleZ": 6.517999 - }, - "Value": 0, - "XmlUI": "" - }, - { - "Autoraise": true, - "ColorDiffuse": { - "b": 1, - "g": 1, - "r": 1 - }, - "ContainedObjects": [], - "Description": "", - "DragSelectable": true, - "GMNotes": "", - "GUID": "bd69bd", - "Grid": true, - "GridProjection": false, - "Hands": false, - "HideWhenFaceDown": false, - "IgnoreFoW": false, - "LayoutGroupSortIndex": 0, - "Locked": true, - "LuaScript": "\r\n\r\nfunction onSave()\r\n saved_data = JSON.encode({tid=tableImageData, cd=checkData})\r\n --saved_data = \"\"\r\n return saved_data\r\nend\r\n\r\nfunction onload(saved_data)\r\n --Loads the tracking for if the game has started yet\r\n if saved_data ~= \"\" then\r\n local loaded_data = JSON.decode(saved_data)\r\n tableImageData = loaded_data.tid\r\n checkData = loaded_data.cd\r\n else\r\n tableImageData = {}\r\n checkData = {move=false, scale=false}\r\n end\r\n\r\n --Disables interactable status of objects with GUID in list\r\n for _, guid in ipairs(ref_noninteractable) do\r\n local obj = getObjectFromGUID(guid)\r\n if obj then obj.interactable = false end\r\n end\r\n\r\n\r\n\r\n obj_surface = getObjectFromGUID(\"721ba2\")\r\n\r\n\r\n controlActive = false\r\n createOpenCloseButton()\r\nend\r\n\r\n\r\n\r\n--Activation/deactivation of control panel\r\n\r\n\r\n\r\n--Activated by clicking on\r\nfunction click_toggleControl(_, color)\r\n if permissionCheck(color) then\r\n if not controlActive then\r\n --Activate control panel\r\n controlActive = true\r\n self.clearButtons()\r\n createOpenCloseButton()\r\n createSurfaceInput()\r\n createSurfaceButtons()\r\n\r\n else\r\n --Deactivate control panel\r\n controlActive = false\r\n self.clearButtons()\r\n self.clearInputs()\r\n createOpenCloseButton()\r\n\r\n end\r\n end\r\nend\r\n\r\n\r\n\r\n\r\n--Table surface control\r\n\r\n\r\n\r\n--Changes table surface\r\nfunction click_applySurface(_, color)\r\n if permissionCheck(color) then\r\n updateSurface()\r\n broadcastToAll(\"New Playmat Image Applied\", {0.2,0.9,0.2})\r\n end\r\nend\r\n\r\n--Updates surface from the values in the input field\r\nfunction updateSurface()\r\n local customInfo = obj_surface.getCustomObject()\r\n customInfo.image = self.getInputs()[1].value\r\n obj_surface.setCustomObject(customInfo)\r\n obj_surface = obj_surface.reload()\r\nend\r\n\r\n\r\n\r\n--Information gathering\r\n\r\n\r\n\r\n--Checks if a color is promoted or host\r\nfunction permissionCheck(color)\r\n if Player[color].host==true or Player[color].promoted==true then\r\n return true\r\n else\r\n return false\r\n end\r\nend\r\n\r\n--Locates a string saved within memory file\r\nfunction findInImageDataIndex(...)\r\n for _, str in ipairs({...}) do\r\n for i, v in ipairs(tableImageData) do\r\n if v.url == str or v.name == str then\r\n return i\r\n end\r\n end\r\n end\r\n return nil\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\r\n--Locates a button with a helper function\r\nfunction findButton(obj, func)\r\n if func==nil then error(\"No func supplied to findButton\") end\r\n for _, v in ipairs(obj.getButtons()) do\r\n if func(v) then\r\n return v\r\n end\r\n end\r\n return nil\r\nend\r\n\r\n\r\n\r\n--Creation of buttons/inputs\r\n\r\n\r\n\r\nfunction createOpenCloseButton()\r\n local tooltip = \"Open Playmat Panel\"\r\n if controlActive then\r\n tooltip = \"Close Playmat Panel\"\r\n end\r\n self.createButton({\r\n click_function=\"click_toggleControl\", function_owner=self,\r\n position={0,0,0}, rotation={-45,0,0}, height=1500, width=1500,\r\n color={1,1,1,0}, tooltip=tooltip\r\n })\r\nend\r\n\r\nfunction createSurfaceInput()\r\n local currentURL = obj_surface.getCustomObject().diffuse\r\n local nickname = \"\"\r\n if findInImageDataIndex(currentURL) ~= nil then\r\n nickname = tableImageData[findInImageDataIndex(currentURL)].name\r\n end\r\n\r\n self.createInput({\r\n label=\"URL\", input_function=\"none\", function_owner=self,\r\n alignment=3, position={0,0.15,3}, height=224, width=4000,\r\n font_size=200, tooltip=\"Enter URL for playmat image\",\r\n value=currentURL\r\n })\r\nend\r\n\r\nfunction createSurfaceButtons()\r\n --Label\r\n self.createButton({\r\n label=\"Playmat Image Swapper\", click_function=\"none\",\r\n position={0,0.15,2.2}, height=0, width=0, font_size=300, font_color={1,1,1}\r\n })\r\n --Functional\r\n self.createButton({\r\n label=\"Apply Image\\nTo Playmat\", click_function=\"click_applySurface\",\r\n function_owner=self, tooltip=\"Apply URL as playmat image\",\r\n position={0,0.15,4}, height=440, width=1400, font_size=200,\r\n })\r\n\r\nend\r\n\r\n\r\n\r\n\r\n\r\n\r\n--Data tables\r\n\r\n\r\n\r\n\r\nref_noninteractable = {\r\n \"afc863\",\"c8edca\",\"393bf7\",\"12c65e\",\"f938a2\",\"9f95fd\",\"35b95f\",\r\n \"5af8f2\",\"4ee1f2\",\"bd69bd\"\r\n}\r\n\r\nref_playerColor = {\r\n \"White\", \"Brown\", \"Red\", \"Orange\", \"Yellow\",\r\n \"Green\", \"Teal\", \"Blue\", \"Purple\", \"Pink\", \"Black\"\r\n}\r\n\r\n--Dummy function, absorbs unwanted triggers\r\nfunction none() end\r\n", - "LuaScriptState": "{\"cd\":{\"move\":true,\"scale\":false},\"tid\":[{\"name\":\"Felt - Grey\",\"url\":\"https://i.imgur.com/N0O6aqj.jpg\"},{\"name\":\"Wood\",\"url\":\"https://i.imgur.com/iOFFsGh.jpg\"},{\"name\":\"Wood 2\",\"url\":\"https://i.imgur.com/SQ2t01d.jpg\"}]}", - "MaterialIndex": 1, - "MeasureMovement": false, - "Name": "Chinese_Checkers_Piece", - "Nickname": "Flex Table Control", - "Snap": true, - "Sticky": true, - "Tooltip": false, - "Transform": { - "posX": 73.16, - "posY": -0.259998322, - "posZ": -43.72, - "rotX": 0.00190076465, - "rotY": 180, - "rotZ": 0.000379891542, - "scaleX": 1.6499995, - "scaleY": 1.6499995, - "scaleZ": 1.6499995 - }, - "Value": 0, - "XmlUI": "" - } - ], - "SnapPoints": [ - { - "Position": { - "x": -3.845435, - "y": 1.58976722, - "z": 10.3834543 - }, - "Rotation": { - "x": 359.919739, - "y": 269.999573, - "z": 0.0168350544 - } - }, - { - "Position": { - "x": -2.72472644, - "y": 1.585399, - "z": 0.373324752 - } - }, - { - "Position": { - "x": -5.31640673, - "y": 1.58825409, - "z": 0.378317744 - } - }, - { - "Position": { - "x": -2.68854523, - "y": 1.58325064, - "z": -5.04852962 - } - }, - { - "Position": { - "x": -3.95596576, - "y": 1.58430552, - "z": -10.4411573 - }, - "Rotation": { - "x": 359.919739, - "y": 270.003235, - "z": 0.01682912 - } - }, - { - "Position": { - "x": 1.75446582, - "y": 1.574745, - "z": -14.1857309 - }, - "Rotation": { - "x": 0.0113445576, - "y": 315.009125, - "z": 0.0220897216 - } - }, - { - "Position": { - "x": -47.7640343, - "y": 1.54184234, - "z": -21.1023788 - }, - "Rotation": { - "x": 359.9201, - "y": 270.000183, - "z": 0.0168620814 - } - }, - { - "Position": { - "x": -47.7640343, - "y": 1.54165757, - "z": -22.3407784 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0006, - "z": 0.0168691035 - } - }, - { - "Position": { - "x": -47.7640266, - "y": 1.54117012, - "z": -23.5710926 - }, - "Rotation": { - "x": 359.9201, - "y": 270.00058, - "z": 0.0168637782 - } - }, - { - "Position": { - "x": -47.7639427, - "y": 1.55540693, - "z": 23.50612 - }, - "Rotation": { - "x": 359.9201, - "y": 270.000366, - "z": 0.016871931 - } - }, - { - "Position": { - "x": -47.7639427, - "y": 1.55472648, - "z": 22.2677231 - }, - "Rotation": { - "x": 359.9201, - "y": 270.000977, - "z": 0.0168490242 - } - }, - { - "Position": { - "x": -47.7639351, - "y": 1.55435538, - "z": 21.0374069 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0006, - "z": 0.0168621428 - } - }, - { - "Position": { - "x": -20.2555027, - "y": 1.515446, - "z": 19.26074 - }, - "Rotation": { - "x": 359.983154, - "y": 0.0197058022, - "z": 359.9201 - } - }, - { - "Position": { - "x": -19.0251865, - "y": 1.51380873, - "z": 19.26075 - }, - "Rotation": { - "x": 359.983154, - "y": 0.0200998988, - "z": 359.9201 - } - }, - { - "Position": { - "x": -17.7867889, - "y": 1.51204312, - "z": 19.26075 - }, - "Rotation": { - "x": 359.983154, - "y": 0.019635139, - "z": 359.9201 - } - }, - { - "Position": { - "x": -20.1443539, - "y": 1.50389183, - "z": -19.3585243 - }, - "Rotation": { - "x": 0.0168991, - "y": 179.987747, - "z": 0.07989301 - } - }, - { - "Position": { - "x": -18.9059563, - "y": 1.50211513, - "z": -19.3585243 - }, - "Rotation": { - "x": 0.0169066451, - "y": 179.9881, - "z": 0.07989447 - } - }, - { - "Position": { - "x": -17.6756458, - "y": 1.50049651, - "z": -19.358511 - }, - "Rotation": { - "x": 0.0169040821, - "y": 179.987854, - "z": 0.07989501 - } - }, - { - "Position": { - "x": -43.37005, - "y": 1.64700723, - "z": 15.1900015 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0276, - "z": 0.0168321952 - } - }, - { - "Position": { - "x": -43.370018, - "y": 1.64425993, - "z": 7.56962061 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027618, - "z": 0.0168310646 - } - }, - { - "Position": { - "x": -43.3700027, - "y": 1.64225531, - "z": -0.02999994 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0274, - "z": 0.0168344658 - } - }, - { - "Position": { - "x": -43.3700638, - "y": 1.63971853, - "z": -7.7 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0277, - "z": 0.0168305077 - } - }, - { - "Position": { - "x": -43.37012, - "y": 1.63784754, - "z": -15.28 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027069, - "z": 0.0168322 - } - }, - { - "Position": { - "x": -36.7733078, - "y": 1.62873137, - "z": -15.28 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0271, - "z": 0.0168333072 - } - }, - { - "Position": { - "x": -36.77326, - "y": 1.63104331, - "z": -7.7 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0277, - "z": 0.0168298464 - } - }, - { - "Position": { - "x": -36.77319, - "y": 1.63347471, - "z": -0.0299996752 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027466, - "z": 0.016830802 - } - }, - { - "Position": { - "x": -36.77321, - "y": 1.63546467, - "z": 7.57000065 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027649, - "z": 0.0168310981 - } - }, - { - "Position": { - "x": -36.77324, - "y": 1.6375246, - "z": 15.1900024 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027466, - "z": 0.0168305077 - } - }, - { - "Position": { - "x": -30.224287, - "y": 1.62843, - "z": 15.1900015 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0276, - "z": 0.0168302115 - } - }, - { - "Position": { - "x": -30.2242565, - "y": 1.62627017, - "z": 7.57 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027618, - "z": 0.0168303512 - } - }, - { - "Position": { - "x": -30.2242374, - "y": 1.62384152, - "z": -0.0299994443 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027466, - "z": 0.01683095 - } - }, - { - "Position": { - "x": -30.2243061, - "y": 1.62182045, - "z": -7.70000029 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027679, - "z": 0.0168308988 - } - }, - { - "Position": { - "x": -30.2243557, - "y": 1.619888, - "z": -15.28 - }, - "Rotation": { - "x": 359.9201, - "y": 270.026978, - "z": 0.0168320984 - } - }, - { - "Position": { - "x": -23.6766357, - "y": 1.61027014, - "z": -15.2800007 - }, - "Rotation": { - "x": 359.9201, - "y": 270.02713, - "z": 0.0168321785 - } - }, - { - "Position": { - "x": -23.67659, - "y": 1.612856, - "z": -7.70000029 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027771, - "z": 0.0168297477 - } - }, - { - "Position": { - "x": -23.6765213, - "y": 1.61451125, - "z": -0.0299998261 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027466, - "z": 0.0168311764 - } - }, - { - "Position": { - "x": -23.67654, - "y": 1.6168257, - "z": 7.570001 - }, - "Rotation": { - "x": 359.9201, - "y": 270.0277, - "z": 0.0168301668 - } - }, - { - "Position": { - "x": -23.67657, - "y": 1.61912513, - "z": 15.1900005 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027618, - "z": 0.0168319754 - } - }, - { - "Position": { - "x": -17.1200542, - "y": 1.61067736, - "z": 15.1900005 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027527, - "z": 0.016832035 - } - }, - { - "Position": { - "x": -17.12002, - "y": 1.60809219, - "z": 7.57000065 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027618, - "z": 0.0168309156 - } - }, - { - "Position": { - "x": -17.1200027, - "y": 1.6060853, - "z": -0.0299997777 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027466, - "z": 0.0168315787 - } - }, - { - "Position": { - "x": -17.1200714, - "y": 1.60347533, - "z": -7.70000029 - }, - "Rotation": { - "x": 359.9201, - "y": 270.027649, - "z": 0.0168311615 - } - }, - { - "Position": { - "x": -17.120121, - "y": 1.60156679, - "z": -15.2800007 - }, - "Rotation": { - "x": 359.9201, - "y": 270.026917, - "z": 0.016833229 - } - }, - { - "Position": { - "x": -43.3700027, - "y": 1.64513254, - "z": 11.46 - } - }, - { - "Position": { - "x": -43.3700027, - "y": 1.64333713, - "z": 3.86000085 - } - }, - { - "Position": { - "x": -43.3700027, - "y": 1.64140487, - "z": -3.82999945 - } - }, - { - "Position": { - "x": -43.37, - "y": 1.63861811, - "z": -11.5100012 - } - }, - { - "Position": { - "x": -36.77319, - "y": 1.63090754, - "z": -11.51 - } - }, - { - "Position": { - "x": -36.77319, - "y": 1.63239479, - "z": -3.83 - } - }, - { - "Position": { - "x": -36.7731934, - "y": 1.63394141, - "z": 3.86000061 - } - }, - { - "Position": { - "x": -36.7731934, - "y": 1.63626719, - "z": 11.4600019 - } - }, - { - "Position": { - "x": -30.2242413, - "y": 1.626422, - "z": 11.4600019 - } - }, - { - "Position": { - "x": -30.2242413, - "y": 1.62466407, - "z": 3.86000085 - } - }, - { - "Position": { - "x": -30.2242374, - "y": 1.62282109, - "z": -3.82999969 - } - }, - { - "Position": { - "x": -30.2242374, - "y": 1.62101281, - "z": -11.51 - } - }, - { - "Position": { - "x": -23.6765213, - "y": 1.61238325, - "z": -11.51 - } - }, - { - "Position": { - "x": -23.6765213, - "y": 1.61426854, - "z": -3.82999921 - } - }, - { - "Position": { - "x": -23.6765251, - "y": 1.61644459, - "z": 3.86000013 - } - }, - { - "Position": { - "x": -23.6765251, - "y": 1.618611, - "z": 11.4600019 - } - }, - { - "Position": { - "x": -17.1200047, - "y": 1.6088289, - "z": 11.460001 - } - }, - { - "Position": { - "x": -17.1200066, - "y": 1.60692859, - "z": 3.86000037 - } - }, - { - "Position": { - "x": -17.1200085, - "y": 1.6050005, - "z": -3.83 - } - }, - { - "Position": { - "x": -17.1200047, - "y": 1.60282743, - "z": -11.51 - } - }, - { - "Position": { - "x": 22.9514027, - "y": 1.45106924, - "z": -30.8727665 - }, - "Rotation": { - "x": 359.920563, - "y": 300.012024, - "z": 359.973663 - } - }, - { - "Position": { - "x": 38.66109, - "y": 1.41606772, - "z": -36.0124245 - }, - "Rotation": { - "x": 359.929657, - "y": 315.014771, - "z": 359.953766 - } - }, - { - "Position": { - "x": -5.3694253, - "y": 1.58748043, - "z": -5.09977245 - } - }, - { - "Position": { - "x": -47.7700577, - "y": 1.5540359, - "z": 19.7594471 - }, - "Rotation": { - "x": 359.9201, - "y": 269.981384, - "z": 0.0169203151 - } - }, - { - "Position": { - "x": -47.7703552, - "y": 1.55352783, - "z": 18.4533367 - }, - "Rotation": { - "x": 359.9201, - "y": 269.981384, - "z": 0.0169184469 - } - }, - { - "Position": { - "x": -47.76952, - "y": 1.54237592, - "z": -18.54153 - }, - "Rotation": { - "x": 359.920135, - "y": 269.981079, - "z": 0.0169145186 - } - }, - { - "Position": { - "x": -47.76952, - "y": 1.54228687, - "z": -19.84764 - }, - "Rotation": { - "x": 359.9201, - "y": 269.981476, - "z": 0.0169213954 - } - }, - { - "Position": { - "x": -21.2858257, - "y": 1.50565612, - "z": -19.352438 - }, - "Rotation": { - "x": 0.01685757, - "y": 180.003113, - "z": 0.0798824951 - } - }, - { - "Position": { - "x": -22.49995, - "y": 1.50744331, - "z": -19.3514824 - }, - "Rotation": { - "x": 0.0166406352, - "y": 180.160553, - "z": 0.0799282342 - } - }, - { - "Position": { - "x": -21.5195179, - "y": 1.5173384, - "z": 19.260006 - }, - "Rotation": { - "x": 359.983124, - "y": 0.00329320785, - "z": 359.9201 - } - }, - { - "Position": { - "x": -22.8255882, - "y": 1.51926339, - "z": 19.260004 - }, - "Rotation": { - "x": 359.983154, - "y": 0.00271474943, - "z": 359.9201 - } - }, - { - "Position": { - "x": -1.46550024, - "y": 1.475424, - "z": -26.9304066 - } - }, - { - "Position": { - "x": -20.9389057, - "y": 1.26746678, - "z": 85.60665 - } - }, - { - "Position": { - "x": -20.9389076, - "y": 1.26645875, - "z": 83.30666 - } - }, - { - "Position": { - "x": -20.9389038, - "y": 1.26574934, - "z": 81.00666 - } - }, - { - "Position": { - "x": -20.9389019, - "y": 1.2649827, - "z": 78.70666 - } - }, - { - "Position": { - "x": -20.9388981, - "y": 1.26454091, - "z": 76.4066544 - } - }, - { - "Position": { - "x": -20.9389, - "y": 1.26380777, - "z": 74.10665 - } - }, - { - "Position": { - "x": -20.9389133, - "y": 1.26316476, - "z": 71.80665 - } - }, - { - "Position": { - "x": -20.93891, - "y": 1.262509, - "z": 69.5066452 - } - }, - { - "Position": { - "x": -20.9389038, - "y": 1.26141346, - "z": 64.90665 - } - }, - { - "Position": { - "x": -20.9389076, - "y": 1.26190877, - "z": 67.20665 - } - }, - { - "Position": { - "x": -20.9389057, - "y": 1.26024914, - "z": 62.6065826 - } - }, - { - "Position": { - "x": -20.9389114, - "y": 1.25962758, - "z": 60.30655 - } - }, - { - "Position": { - "x": -20.9389133, - "y": 1.25898314, - "z": 58.00654 - } - }, - { - "Position": { - "x": -20.93891, - "y": 1.25834715, - "z": 55.70664 - } - }, - { - "Position": { - "x": -20.9389076, - "y": 1.2578826, - "z": 53.40664 - } - }, - { - "Position": { - "x": -20.93687, - "y": 1.25715, - "z": 51.10642 - } - }, - { - "Position": { - "x": -24.4533653, - "y": 1.26596868, - "z": 85.59461 - } - }, - { - "Position": { - "x": -24.453371, - "y": 1.26535738, - "z": 83.2946243 - } - }, - { - "Position": { - "x": -24.4533672, - "y": 1.26434422, - "z": 80.99462 - } - }, - { - "Position": { - "x": -24.45337, - "y": 1.26368392, - "z": 78.69461 - } - }, - { - "Position": { - "x": -24.4533634, - "y": 1.26301813, - "z": 76.39461 - } - }, - { - "Position": { - "x": -24.453371, - "y": 1.262502, - "z": 74.0946045 - } - }, - { - "Position": { - "x": -24.4533768, - "y": 1.2617588, - "z": 71.7946 - } - }, - { - "Position": { - "x": -24.4533768, - "y": 1.26133192, - "z": 69.4946 - } - }, - { - "Position": { - "x": -24.453373, - "y": 1.2606411, - "z": 67.1946 - } - }, - { - "Position": { - "x": -24.453371, - "y": 1.2598412, - "z": 64.8946 - } - }, - { - "Position": { - "x": -24.4533749, - "y": 1.259108, - "z": 62.594532 - } - }, - { - "Position": { - "x": -24.45338, - "y": 1.25863564, - "z": 60.29453 - } - }, - { - "Position": { - "x": -24.4534, - "y": 1.25791037, - "z": 57.994503 - } - }, - { - "Position": { - "x": -24.4533978, - "y": 1.25690889, - "z": 55.6946 - } - }, - { - "Position": { - "x": -24.4446354, - "y": 1.25593579, - "z": 51.0944252 - } - }, - { - "Position": { - "x": -24.45326, - "y": 1.25634432, - "z": 53.3946381 - } - }, - { - "Position": { - "x": -20.8025455, - "y": 1.26917124, - "z": 91.59857 - } - }, - { - "Position": { - "x": -33.8014221, - "y": 1.26442635, - "z": 91.60342 - } - }, - { - "Position": { - "x": -33.8782272, - "y": 1.262609, - "z": 85.60903 - } - }, - { - "Position": { - "x": -33.8782272, - "y": 1.26209974, - "z": 83.3090439 - } - }, - { - "Position": { - "x": -37.3926849, - "y": 1.261385, - "z": 85.59699 - } - }, - { - "Position": { - "x": -37.3926926, - "y": 1.26059008, - "z": 83.2970047 - } - }, - { - "Position": { - "x": -37.39269, - "y": 1.25996923, - "z": 80.997 - } - }, - { - "Position": { - "x": -33.8782234, - "y": 1.26102686, - "z": 81.00904 - } - }, - { - "Position": { - "x": -33.8782234, - "y": 1.26047421, - "z": 78.70904 - } - }, - { - "Position": { - "x": -37.39269, - "y": 1.25935566, - "z": 78.69699 - } - }, - { - "Position": { - "x": -37.3926926, - "y": 1.25817132, - "z": 74.0969849 - } - }, - { - "Position": { - "x": -33.87822, - "y": 1.259699, - "z": 76.4090347 - } - }, - { - "Position": { - "x": -37.3926849, - "y": 1.25872183, - "z": 76.39699 - } - }, - { - "Position": { - "x": -33.87822, - "y": 1.2591089, - "z": 74.10903 - } - }, - { - "Position": { - "x": -33.8782349, - "y": 1.258448, - "z": 71.80903 - } - }, - { - "Position": { - "x": -37.3926964, - "y": 1.25731874, - "z": 71.79698 - } - }, - { - "Position": { - "x": -37.3926964, - "y": 1.25662065, - "z": 69.49698 - } - }, - { - "Position": { - "x": -33.87823, - "y": 1.25750113, - "z": 69.5090256 - } - }, - { - "Position": { - "x": -33.8782272, - "y": 1.25697291, - "z": 67.20903 - } - }, - { - "Position": { - "x": -37.3926926, - "y": 1.25570011, - "z": 67.19698 - } - }, - { - "Position": { - "x": -37.3926926, - "y": 1.25489891, - "z": 64.89698 - } - }, - { - "Position": { - "x": -33.8782234, - "y": 1.2563194, - "z": 64.90903 - } - }, - { - "Position": { - "x": -33.8782272, - "y": 1.25568974, - "z": 62.60879 - } - }, - { - "Position": { - "x": -37.3926964, - "y": 1.25411487, - "z": 62.59674 - } - }, - { - "Position": { - "x": -37.3927, - "y": 1.2536732, - "z": 60.2967377 - } - }, - { - "Position": { - "x": -33.87823, - "y": 1.25482333, - "z": 60.3087578 - } - }, - { - "Position": { - "x": -33.8782349, - "y": 1.2545011, - "z": 58.0087471 - } - }, - { - "Position": { - "x": -37.39272, - "y": 1.25332761, - "z": 57.99671 - } - }, - { - "Position": { - "x": -37.39272, - "y": 1.2524116, - "z": 55.6968079 - } - }, - { - "Position": { - "x": -33.87823, - "y": 1.2535708, - "z": 55.708847 - } - }, - { - "Position": { - "x": -33.8782272, - "y": 1.25299418, - "z": 53.4088478 - } - }, - { - "Position": { - "x": -37.3925819, - "y": 1.25163436, - "z": 53.3968468 - } - }, - { - "Position": { - "x": -37.3839569, - "y": 1.25111818, - "z": 51.0966339 - } - }, - { - "Position": { - "x": -33.87619, - "y": 1.25225854, - "z": 51.1086273 - } - }, - { - "Position": { - "x": 62.5637169, - "y": 1.29313, - "z": 70.53486 - } - }, - { - "Position": { - "x": 66.61391, - "y": 1.29616284, - "z": 75.8792953 - } - }, - { - "Position": { - "x": 66.5779953, - "y": 1.294907, - "z": 70.50754 - } - }, - { - "Position": { - "x": 66.5937347, - "y": 1.29304647, - "z": 65.0752258 - } - }, - { - "Position": { - "x": 66.5834, - "y": 1.29176581, - "z": 59.6779671 - } - }, - { - "Position": { - "x": 66.57824, - "y": 1.290194, - "z": 54.34889 - } - }, - { - "Position": { - "x": 66.59369, - "y": 1.288504, - "z": 49.02466 - } - }, - { - "Position": { - "x": 40.9634361, - "y": 1.27867866, - "z": 48.75275 - } - }, - { - "Position": { - "x": 40.9634361, - "y": 1.2794311, - "z": 51.0597725 - } - }, - { - "Position": { - "x": 40.9634361, - "y": 1.28026581, - "z": 53.3492279 - } - }, - { - "Position": { - "x": 40.9634361, - "y": 1.28108048, - "z": 55.64923 - } - }, - { - "Position": { - "x": 40.9634361, - "y": 1.28155029, - "z": 57.9485741 - } - }, - { - "Position": { - "x": 40.96033, - "y": 1.28247023, - "z": 60.2488 - } - }, - { - "Position": { - "x": 40.9601936, - "y": 1.28316569, - "z": 62.54876 - } - }, - { - "Position": { - "x": 40.96019, - "y": 1.2840817, - "z": 64.84866 - } - }, - { - "Position": { - "x": 40.9602127, - "y": 1.28449643, - "z": 67.14869 - } - }, - { - "Position": { - "x": 40.9602127, - "y": 1.28530955, - "z": 69.44869 - } - }, - { - "Position": { - "x": 40.96022, - "y": 1.28582716, - "z": 71.7486954 - } - }, - { - "Position": { - "x": 40.9602165, - "y": 1.28676808, - "z": 74.0487 - } - }, - { - "Position": { - "x": 40.9602165, - "y": 1.28737, - "z": 76.3486938 - } - }, - { - "Position": { - "x": 40.9602127, - "y": 1.28790629, - "z": 78.6487 - } - }, - { - "Position": { - "x": 40.9602242, - "y": 1.28869033, - "z": 80.9487 - } - }, - { - "Position": { - "x": 40.960228, - "y": 1.28926826, - "z": 83.2487 - } - }, - { - "Position": { - "x": 40.960228, - "y": 1.29017448, - "z": 85.5487061 - } - }, - { - "Position": { - "x": 40.9602242, - "y": 1.29071677, - "z": 87.84872 - } - }, - { - "Position": { - "x": 40.9602242, - "y": 1.29106641, - "z": 90.14872 - } - }, - { - "Position": { - "x": 40.9602242, - "y": 1.29189122, - "z": 92.44871 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.29470038, - "z": 92.4528 - } - }, - { - "Position": { - "x": 53.2285767, - "y": 1.29660666, - "z": 92.44123 - } - }, - { - "Position": { - "x": 53.2285767, - "y": 1.29568541, - "z": 90.14124 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.29423237, - "z": 90.15277 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.293214, - "z": 85.5527954 - } - }, - { - "Position": { - "x": 53.2285767, - "y": 1.2948004, - "z": 87.84124 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.29357529, - "z": 87.8528061 - } - }, - { - "Position": { - "x": 53.22858, - "y": 1.29403818, - "z": 85.54124 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.29238141, - "z": 83.25279 - } - }, - { - "Position": { - "x": 53.22858, - "y": 1.29348159, - "z": 83.2412338 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.29205048, - "z": 80.95279 - } - }, - { - "Position": { - "x": 53.2285767, - "y": 1.29293251, - "z": 80.94123 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.291133, - "z": 78.65279 - } - }, - { - "Position": { - "x": 53.22857, - "y": 1.29205287, - "z": 78.64123 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.289854, - "z": 74.05279 - } - }, - { - "Position": { - "x": 53.22857, - "y": 1.29160774, - "z": 76.3412247 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.29015315, - "z": 76.35278 - } - }, - { - "Position": { - "x": 53.2285728, - "y": 1.2909112, - "z": 74.04123 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.288802, - "z": 71.7527847 - } - }, - { - "Position": { - "x": 53.2285728, - "y": 1.289899, - "z": 71.74123 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.28820527, - "z": 69.45278 - } - }, - { - "Position": { - "x": 53.22857, - "y": 1.28912687, - "z": 69.44122 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.28758645, - "z": 67.1526947 - } - }, - { - "Position": { - "x": 53.2285652, - "y": 1.28840756, - "z": 67.1411057 - } - }, - { - "Position": { - "x": 53.2285652, - "y": 1.28799891, - "z": 64.841095 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.28675449, - "z": 64.85267 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.28612339, - "z": 62.5527649 - } - }, - { - "Position": { - "x": 53.22857, - "y": 1.28716826, - "z": 62.5411949 - } - }, - { - "Position": { - "x": 53.2306061, - "y": 1.286359, - "z": 57.9409752 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.285639, - "z": 60.2528038 - } - }, - { - "Position": { - "x": 53.22857, - "y": 1.28661871, - "z": 60.2411957 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.28503168, - "z": 57.95258 - } - }, - { - "Position": { - "x": 53.22848, - "y": 1.28564227, - "z": 55.6411972 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.28426623, - "z": 55.6527977 - } - }, - { - "Position": { - "x": 53.22861, - "y": 1.28459334, - "z": 53.34118 - } - }, - { - "Position": { - "x": 49.54717, - "y": 1.28261352, - "z": 51.06334 - } - }, - { - "Position": { - "x": 49.56286, - "y": 1.28365183, - "z": 53.35279 - } - }, - { - "Position": { - "x": 53.21279, - "y": 1.2838558, - "z": 51.05174 - } - }, - { - "Position": { - "x": 53.21263, - "y": 1.28320742, - "z": 48.74529 - } - }, - { - "Position": { - "x": 49.54679, - "y": 1.28225446, - "z": 48.75681 - } - }, - { - "Position": { - "x": 58.3700562, - "y": 1.28495312, - "z": 48.6489143 - } - }, - { - "Position": { - "x": 58.3680649, - "y": 1.28596377, - "z": 51.0008774 - } - }, - { - "Position": { - "x": 58.38389, - "y": 1.28678489, - "z": 53.2903175 - } - }, - { - "Position": { - "x": 58.38375, - "y": 1.2875427, - "z": 55.5903358 - } - }, - { - "Position": { - "x": 58.38588, - "y": 1.28792191, - "z": 57.8901138 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.28834844, - "z": 60.1903343 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.28872633, - "z": 62.4903336 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.29039466, - "z": 67.09024 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.28979969, - "z": 64.79024 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.290749, - "z": 69.3903656 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.29203963, - "z": 71.69037 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.29232371, - "z": 73.99037 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.2929641, - "z": 76.29037 - } - }, - { - "Position": { - "x": 58.3838425, - "y": 1.293665, - "z": 78.59037 - } - }, - { - "Position": { - "x": 58.38385, - "y": 1.294165, - "z": 80.89037 - } - }, - { - "Position": { - "x": 58.3838577, - "y": 1.29487526, - "z": 83.19038 - } - }, - { - "Position": { - "x": 58.3838577, - "y": 1.2958343, - "z": 85.49038 - } - }, - { - "Position": { - "x": 58.38385, - "y": 1.2963804, - "z": 87.79038 - } - }, - { - "Position": { - "x": 58.38385, - "y": 1.29708922, - "z": 90.0903854 - } - }, - { - "Position": { - "x": 58.38385, - "y": 1.29774785, - "z": 92.39037 - } - }, - { - "Position": { - "x": -26.3000088, - "y": 1.3009671, - "z": -53.43685 - } - }, - { - "Position": { - "x": -22.6138859, - "y": 1.30193734, - "z": -53.4381142 - } - }, - { - "Position": { - "x": -19.3000031, - "y": 1.3032428, - "z": -53.43582 - } - }, - { - "Position": { - "x": -16.64005, - "y": 1.30449986, - "z": -52.15201 - } - }, - { - "Position": { - "x": -16.6400528, - "y": 1.30425811, - "z": -53.3904076 - } - }, - { - "Position": { - "x": -16.6400547, - "y": 1.30388188, - "z": -54.62073 - } - }, - { - "Position": { - "x": -19.30006, - "y": 1.3010509, - "z": -61.23324 - } - }, - { - "Position": { - "x": -16.64007, - "y": 1.30185783, - "z": -61.2309761 - } - }, - { - "Position": { - "x": -16.6400738, - "y": 1.30217159, - "z": -60.0009766 - } - }, - { - "Position": { - "x": -16.64003, - "y": 1.30137312, - "z": -62.4609146 - } - }, - { - "Position": { - "x": -22.6169434, - "y": 1.2998848, - "z": -61.24137 - } - }, - { - "Position": { - "x": -26.3001442, - "y": 1.29872739, - "z": -61.2409668 - } - }, - { - "Position": { - "x": -26.3001881, - "y": 1.29632378, - "z": -69.060585 - } - }, - { - "Position": { - "x": -22.615675, - "y": 1.297138, - "z": -69.0756 - } - }, - { - "Position": { - "x": -19.29586, - "y": 1.29860735, - "z": -69.06069 - } - }, - { - "Position": { - "x": -16.6400661, - "y": 1.29980421, - "z": -67.82058 - } - }, - { - "Position": { - "x": -16.6402836, - "y": 1.29948664, - "z": -69.0602951 - } - }, - { - "Position": { - "x": -16.6400623, - "y": 1.29911947, - "z": -70.29058 - } - }, - { - "Position": { - "x": -16.6402931, - "y": 1.29759026, - "z": -75.70543 - } - }, - { - "Position": { - "x": -16.6395817, - "y": 1.297198, - "z": -76.94563 - } - }, - { - "Position": { - "x": -16.6401215, - "y": 1.29682636, - "z": -78.17564 - } - }, - { - "Position": { - "x": -19.2935925, - "y": 1.29627025, - "z": -76.9415359 - } - }, - { - "Position": { - "x": -22.6157455, - "y": 1.29521048, - "z": -76.94603 - } - }, - { - "Position": { - "x": -26.3001842, - "y": 1.293819, - "z": -76.94564 - } - }, - { - "Position": { - "x": -26.299593, - "y": 1.29146552, - "z": -84.81799 - } - }, - { - "Position": { - "x": -22.6168957, - "y": 1.29257679, - "z": -84.81849 - } - }, - { - "Position": { - "x": -19.2997684, - "y": 1.2937001, - "z": -84.81817 - } - }, - { - "Position": { - "x": -16.6393929, - "y": 1.29451442, - "z": -86.0185852 - } - }, - { - "Position": { - "x": -16.6402264, - "y": 1.29479432, - "z": -84.81819 - } - }, - { - "Position": { - "x": -16.6385555, - "y": 1.295311, - "z": -83.5415039 - } - }, - { - "Position": { - "x": 66.3220139, - "y": 1.2955277, - "z": -63.9796257 - } - }, - { - "Position": { - "x": 66.29916, - "y": 1.29411173, - "z": -69.3567 - } - }, - { - "Position": { - "x": 66.3143539, - "y": 1.292618, - "z": -74.78968 - } - }, - { - "Position": { - "x": 66.299614, - "y": 1.29084647, - "z": -80.18447 - } - }, - { - "Position": { - "x": 66.29667, - "y": 1.28934729, - "z": -85.51392 - } - }, - { - "Position": { - "x": 66.3128, - "y": 1.288014, - "z": -90.8375854 - } - }, - { - "Position": { - "x": 58.0996742, - "y": 1.29744935, - "z": -47.4709663 - } - }, - { - "Position": { - "x": 58.0996742, - "y": 1.29690325, - "z": -49.7709541 - } - }, - { - "Position": { - "x": 58.0996742, - "y": 1.29619539, - "z": -52.0709572 - } - }, - { - "Position": { - "x": 58.09968, - "y": 1.295507, - "z": -54.37096 - } - }, - { - "Position": { - "x": 58.09968, - "y": 1.294888, - "z": -56.6709633 - } - }, - { - "Position": { - "x": 58.0996742, - "y": 1.2940737, - "z": -58.9709663 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.29347837, - "z": -61.27097 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.29284012, - "z": -63.5709724 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.29224491, - "z": -65.87083 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.29148126, - "z": -68.17083 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.2905457, - "z": -70.47083 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.28980207, - "z": -72.77096 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.28948426, - "z": -75.07096 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.28880274, - "z": -77.3708649 - } - }, - { - "Position": { - "x": 58.0996666, - "y": 1.28833532, - "z": -79.67087 - } - }, - { - "Position": { - "x": 58.1016922, - "y": 1.28740478, - "z": -81.97109 - } - }, - { - "Position": { - "x": 58.0995636, - "y": 1.28650737, - "z": -84.270874 - } - }, - { - "Position": { - "x": 58.0997, - "y": 1.286053, - "z": -86.57089 - } - }, - { - "Position": { - "x": 58.0838776, - "y": 1.28537929, - "z": -88.86033 - } - }, - { - "Position": { - "x": 58.08587, - "y": 1.28485417, - "z": -91.2122955 - } - }, - { - "Position": { - "x": 52.92828, - "y": 1.28289843, - "z": -91.1161346 - } - }, - { - "Position": { - "x": 52.92844, - "y": 1.283767, - "z": -88.80969 - } - }, - { - "Position": { - "x": 52.94426, - "y": 1.28441775, - "z": -86.52025 - } - }, - { - "Position": { - "x": 52.94413, - "y": 1.28505635, - "z": -84.22023 - } - }, - { - "Position": { - "x": 52.9462547, - "y": 1.28565979, - "z": -81.9204559 - } - }, - { - "Position": { - "x": 52.9442177, - "y": 1.28654468, - "z": -79.62024 - } - }, - { - "Position": { - "x": 52.9442177, - "y": 1.28714752, - "z": -77.32024 - } - }, - { - "Position": { - "x": 52.9442139, - "y": 1.28767264, - "z": -75.02033 - } - }, - { - "Position": { - "x": 52.9442139, - "y": 1.28845644, - "z": -72.72032 - } - }, - { - "Position": { - "x": 52.94422, - "y": 1.28927469, - "z": -68.1202 - } - }, - { - "Position": { - "x": 52.9442177, - "y": 1.28905928, - "z": -70.4202042 - } - }, - { - "Position": { - "x": 52.94422, - "y": 1.29028988, - "z": -65.8202 - } - }, - { - "Position": { - "x": 52.9442177, - "y": 1.29098272, - "z": -63.5203438 - } - }, - { - "Position": { - "x": 52.9442177, - "y": 1.29159307, - "z": -61.22034 - } - }, - { - "Position": { - "x": 52.9442253, - "y": 1.29235625, - "z": -58.9203377 - } - }, - { - "Position": { - "x": 52.94423, - "y": 1.2931788, - "z": -56.6203346 - } - }, - { - "Position": { - "x": 52.94423, - "y": 1.29390347, - "z": -54.32033 - } - }, - { - "Position": { - "x": 52.9442253, - "y": 1.29437709, - "z": -52.02033 - } - }, - { - "Position": { - "x": 52.9442253, - "y": 1.29492152, - "z": -49.7203255 - } - }, - { - "Position": { - "x": 52.9442253, - "y": 1.29571271, - "z": -47.4203377 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.29458511, - "z": -47.40877 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.29381084, - "z": -49.7087975 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.29295814, - "z": -52.0087624 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.29241037, - "z": -54.308773 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.29141617, - "z": -56.6087761 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.29077768, - "z": -58.90878 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.29027653, - "z": -61.2087822 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.289767, - "z": -63.5087852 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28908551, - "z": -65.80864 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28855276, - "z": -68.10864 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28747988, - "z": -70.4086456 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28690422, - "z": -72.70873 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28634024, - "z": -75.00876 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28576362, - "z": -77.30867 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28526175, - "z": -79.60863 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28440058, - "z": -81.90885 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28354764, - "z": -84.20863 - } - }, - { - "Position": { - "x": 49.2785072, - "y": 1.28287387, - "z": -86.50864 - } - }, - { - "Position": { - "x": 49.2628174, - "y": 1.28216815, - "z": -88.79809 - } - }, - { - "Position": { - "x": 49.26244, - "y": 1.28176832, - "z": -91.1046143 - } - }, - { - "Position": { - "x": 32.3000031, - "y": 1.44443262, - "z": 28.5300121 - } - }, - { - "Position": { - "x": 32.3000031, - "y": 1.44076753, - "z": 14.4999838 - } - }, - { - "Position": { - "x": 51.74794, - "y": 1.42008257, - "z": 28.5300045 - } - }, - { - "Position": { - "x": 51.65227, - "y": 1.41464353, - "z": 14.5000238 - } - }, - { - "Position": { - "x": 51.6549034, - "y": 1.40983319, - "z": 0.140253112 - } - }, - { - "Position": { - "x": 51.65601, - "y": 1.40506518, - "z": -13.7182093 - } - }, - { - "Position": { - "x": 51.65232, - "y": 1.40055454, - "z": -27.8697281 - } - }, - { - "Position": { - "x": 63.0257759, - "y": 1.39148343, - "z": 0.140274137 - } - }, - { - "Position": { - "x": 63.02728, - "y": 1.39948249, - "z": 14.5002966 - } - }, - { - "Position": { - "x": 63.0254936, - "y": 1.40184367, - "z": 28.5303841 - } - }, - { - "Position": { - "x": 32.3000031, - "y": 1.43620026, - "z": 0.14000009 - } - }, - { - "Position": { - "x": 32.4525223, - "y": 1.43262136, - "z": -13.1238556 - } - }, - { - "Position": { - "x": 12.2494068, - "y": 1.47258127, - "z": 35.9863548 - } - }, - { - "Position": { - "x": 12.2503014, - "y": 1.47144163, - "z": 27.98636 - } - }, - { - "Position": { - "x": 12.2500954, - "y": 1.46984768, - "z": 19.98636 - } - }, - { - "Position": { - "x": 12.2520952, - "y": 1.46744418, - "z": 11.9863577 - } - }, - { - "Position": { - "x": 12.2499952, - "y": 1.46522963, - "z": 3.98634982 - } - }, - { - "Position": { - "x": 12.2495975, - "y": 1.46357608, - "z": -4.013653 - } - }, - { - "Position": { - "x": 12.2501, - "y": 1.46166158, - "z": -12.013649 - } - }, - { - "Position": { - "x": 12.2504969, - "y": 1.45960414, - "z": -20.0136547 - } - }, - { - "Position": { - "x": 12.2495995, - "y": 1.45641756, - "z": -28.0136547 - } - }, - { - "Position": { - "x": 12.2504215, - "y": 1.45459831, - "z": -36.0138321 - } - }, - { - "Position": { - "x": 23.753355, - "y": 1.44447052, - "z": -13.1285114 - } - }, - { - "Position": { - "x": 37.416, - "y": 1.28915572, - "z": 92.46073 - } - }, - { - "Position": { - "x": 33.8628922, - "y": 1.28769708, - "z": 92.4487 - } - }, - { - "Position": { - "x": 33.8628922, - "y": 1.2869792, - "z": 90.14871 - } - }, - { - "Position": { - "x": 33.8628922, - "y": 1.286134, - "z": 87.84871 - } - }, - { - "Position": { - "x": 33.8629, - "y": 1.28530645, - "z": 85.5487 - } - }, - { - "Position": { - "x": 33.8629, - "y": 1.28456831, - "z": 83.2486954 - } - }, - { - "Position": { - "x": 33.8628845, - "y": 1.28304, - "z": 78.64869 - } - }, - { - "Position": { - "x": 33.8628845, - "y": 1.28201032, - "z": 74.04869 - } - }, - { - "Position": { - "x": 33.8628922, - "y": 1.28132582, - "z": 71.74869 - } - }, - { - "Position": { - "x": 33.8628769, - "y": 1.280112, - "z": 67.14868 - } - }, - { - "Position": { - "x": 33.86286, - "y": 1.279238, - "z": 64.8486557 - } - }, - { - "Position": { - "x": 33.86286, - "y": 1.27836406, - "z": 62.5487556 - } - }, - { - "Position": { - "x": 33.863, - "y": 1.27764225, - "z": 60.2487946 - } - }, - { - "Position": { - "x": 33.8661041, - "y": 1.27688551, - "z": 55.6492271 - } - }, - { - "Position": { - "x": 37.4159, - "y": 1.27759337, - "z": 55.6607857 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.27913022, - "z": 60.2607841 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.280205, - "z": 62.5607834 - } - }, - { - "Position": { - "x": 37.4159851, - "y": 1.28162849, - "z": 67.16069 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.2826879, - "z": 71.76073 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.28366375, - "z": 74.06073 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.28470445, - "z": 78.66073 - } - }, - { - "Position": { - "x": 37.416, - "y": 1.285579, - "z": 80.96073 - } - }, - { - "Position": { - "x": 37.416, - "y": 1.28653467, - "z": 85.56074 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.288172, - "z": 90.16074 - } - }, - { - "Position": { - "x": 37.416, - "y": 1.28761017, - "z": 87.86074 - } - }, - { - "Position": { - "x": 37.416, - "y": 1.28620529, - "z": 83.2607346 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.28395736, - "z": 76.3607254 - } - }, - { - "Position": { - "x": 37.4159927, - "y": 1.28205276, - "z": 69.4607239 - } - }, - { - "Position": { - "x": 33.8628845, - "y": 1.28053427, - "z": 69.4486847 - } - }, - { - "Position": { - "x": 33.8628922, - "y": 1.28415394, - "z": 80.94869 - } - }, - { - "Position": { - "x": 37.41803, - "y": 1.27869236, - "z": 57.9605637 - } - }, - { - "Position": { - "x": 33.8661041, - "y": 1.27756965, - "z": 57.94857 - } - }, - { - "Position": { - "x": 37.4159851, - "y": 1.28103614, - "z": 64.86069 - } - }, - { - "Position": { - "x": 37.41603, - "y": 1.27740252, - "z": 53.3607674 - } - }, - { - "Position": { - "x": 33.8661041, - "y": 1.27611911, - "z": 53.3492241 - } - }, - { - "Position": { - "x": 33.8661041, - "y": 1.27528262, - "z": 51.05977 - } - }, - { - "Position": { - "x": 37.4002151, - "y": 1.27683961, - "z": 51.0713272 - } - }, - { - "Position": { - "x": 37.40004, - "y": 1.27590275, - "z": 48.764 - } - }, - { - "Position": { - "x": 33.8661041, - "y": 1.27464926, - "z": 48.7527466 - } - }, - { - "Position": { - "x": 33.8628845, - "y": 1.28299832, - "z": 76.34869 - } - }, - { - "Position": { - "x": 45.98, - "y": 1.29211712, - "z": 92.4528046 - } - }, - { - "Position": { - "x": 45.98, - "y": 1.29116917, - "z": 90.15278 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.29039729, - "z": 87.85281 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28990746, - "z": 85.5528 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.2892369, - "z": 83.2528 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28863, - "z": 80.9528 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28789, - "z": 78.6527939 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28720582, - "z": 76.35279 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.2865777, - "z": 74.0527954 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28590167, - "z": 71.75279 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.2851727, - "z": 69.45279 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28445113, - "z": 67.1527 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28394485, - "z": 64.85268 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28310108, - "z": 62.55277 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28255057, - "z": 60.2528076 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28170848, - "z": 57.9525833 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28099191, - "z": 55.6528 - } - }, - { - "Position": { - "x": 45.9794731, - "y": 1.28034508, - "z": 53.3527946 - } - }, - { - "Position": { - "x": 45.9637833, - "y": 1.27987647, - "z": 51.063343 - } - }, - { - "Position": { - "x": 45.9634056, - "y": 1.27929091, - "z": 48.756813 - } - }, - { - "Position": { - "x": 45.6394653, - "y": 1.29181886, - "z": -47.4098969 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.29098332, - "z": -49.7098961 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.29040909, - "z": -52.0098953 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28967047, - "z": -54.30867 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28910577, - "z": -56.6086731 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28856969, - "z": -58.9086761 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28787434, - "z": -61.20868 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28705382, - "z": -63.50868 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28649783, - "z": -65.8086 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28583622, - "z": -68.1086044 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28518963, - "z": -70.40861 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28451347, - "z": -72.7086945 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28387618, - "z": -75.00872 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28326178, - "z": -77.30863 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28246593, - "z": -79.60859 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28173733, - "z": -81.90881 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28103638, - "z": -84.2085953 - } - }, - { - "Position": { - "x": 45.63946, - "y": 1.28051937, - "z": -86.5086 - } - }, - { - "Position": { - "x": 45.62377, - "y": 1.27994442, - "z": -88.79805 - } - }, - { - "Position": { - "x": 45.623394, - "y": 1.27922964, - "z": -91.1045761 - } - }, - { - "Position": { - "x": 32.985302, - "y": 1.28735256, - "z": -47.40955 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28630078, - "z": -52.00955 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.2848593, - "z": -56.608326 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28221273, - "z": -65.80826 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28023648, - "z": -72.70835 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.27823079, - "z": -79.6082458 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.27607512, - "z": -86.508255 - } - }, - { - "Position": { - "x": 36.60866, - "y": 1.27631569, - "z": -88.79774 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.27810454, - "z": -84.20828 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28412712, - "z": -63.50844 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.2862879, - "z": -56.60843 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28899884, - "z": -49.70845 - } - }, - { - "Position": { - "x": 40.2900658, - "y": 1.28480053, - "z": -65.81985 - } - }, - { - "Position": { - "x": 40.2742844, - "y": 1.27716756, - "z": -88.80934 - } - }, - { - "Position": { - "x": 40.2921, - "y": 1.279801, - "z": -81.920105 - } - }, - { - "Position": { - "x": 40.29006, - "y": 1.2820015, - "z": -72.71997 - } - }, - { - "Position": { - "x": 40.2900658, - "y": 1.28334785, - "z": -68.11985 - } - }, - { - "Position": { - "x": 40.290062, - "y": 1.284641, - "z": -63.5199966 - } - }, - { - "Position": { - "x": 40.2900734, - "y": 1.28781986, - "z": -54.3199844 - } - }, - { - "Position": { - "x": 40.29007, - "y": 1.28894377, - "z": -49.71998 - } - }, - { - "Position": { - "x": 40.29007, - "y": 1.290063, - "z": -47.41999 - } - }, - { - "Position": { - "x": 40.29007, - "y": 1.28811061, - "z": -52.01998 - } - }, - { - "Position": { - "x": 40.2900734, - "y": 1.28725445, - "z": -56.6199875 - } - }, - { - "Position": { - "x": 40.29007, - "y": 1.285944, - "z": -58.91999 - } - }, - { - "Position": { - "x": 40.290062, - "y": 1.28537035, - "z": -61.2199936 - } - }, - { - "Position": { - "x": 40.290062, - "y": 1.282721, - "z": -70.41985 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28101408, - "z": -75.00841 - } - }, - { - "Position": { - "x": 40.290062, - "y": 1.2809298, - "z": -77.3198853 - } - }, - { - "Position": { - "x": 40.29006, - "y": 1.28155673, - "z": -75.01998 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.27997816, - "z": -77.30832 - } - }, - { - "Position": { - "x": 40.290062, - "y": 1.28052819, - "z": -79.61989 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.27882218, - "z": -79.60828 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.27845466, - "z": -81.9085 - } - }, - { - "Position": { - "x": 40.2899742, - "y": 1.27921557, - "z": -84.21988 - } - }, - { - "Position": { - "x": 40.2901039, - "y": 1.27835965, - "z": -86.5199 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.27703023, - "z": -86.5082855 - } - }, - { - "Position": { - "x": 36.608284, - "y": 1.27630758, - "z": -91.10426 - } - }, - { - "Position": { - "x": 40.2741241, - "y": 1.2773788, - "z": -91.11578 - } - }, - { - "Position": { - "x": 32.96923, - "y": 1.27455485, - "z": -91.10423 - } - }, - { - "Position": { - "x": 32.9696045, - "y": 1.27537262, - "z": -88.79771 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.27635276, - "z": -84.20825 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.27720129, - "z": -81.90847 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.27830982, - "z": -77.30829 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.27916753, - "z": -75.00838 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.280421, - "z": -70.4082642 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28155637, - "z": -68.10826 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28274655, - "z": -68.10829 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28347969, - "z": -65.80829 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28199029, - "z": -70.4082947 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28125787, - "z": -72.70838 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28223443, - "z": -63.50833 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28348243, - "z": -61.2083321 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28398371, - "z": -58.90833 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28525078, - "z": -58.908432 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28478837, - "z": -61.2084351 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28675485, - "z": -54.3084259 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.285481, - "z": -54.3083229 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28715646, - "z": -52.0084152 - } - }, - { - "Position": { - "x": 32.9853, - "y": 1.28686869, - "z": -49.70955 - } - }, - { - "Position": { - "x": 36.62435, - "y": 1.28846765, - "z": -47.4084244 - } - }, - { - "Position": { - "x": 29.3400745, - "y": 1.28597653, - "z": -47.4096222 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.28529572, - "z": -49.70962 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.2847054, - "z": -52.00962 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.28379667, - "z": -54.3083954 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.28299594, - "z": -56.6084 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.28244519, - "z": -58.9084 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.28186262, - "z": -61.2084045 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.28080726, - "z": -63.5084038 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27991, - "z": -68.10847 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.28047419, - "z": -65.8084641 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27917814, - "z": -70.40847 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27855825, - "z": -72.70856 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27774477, - "z": -75.00858 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.2773304, - "z": -77.3084946 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27670634, - "z": -79.60845 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27590442, - "z": -81.9086761 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27517438, - "z": -84.20846 - } - }, - { - "Position": { - "x": 29.34007, - "y": 1.27443349, - "z": -86.50846 - } - }, - { - "Position": { - "x": 29.3243771, - "y": 1.2738682, - "z": -88.79791 - } - }, - { - "Position": { - "x": 29.3240032, - "y": 1.27318287, - "z": -91.10444 - } - }, - { - "Position": { - "x": 30.3081856, - "y": 1.28623271, - "z": 92.44871 - } - }, - { - "Position": { - "x": 30.3081856, - "y": 1.28567123, - "z": 90.14872 - } - }, - { - "Position": { - "x": 30.3081856, - "y": 1.28496671, - "z": 87.84872 - } - }, - { - "Position": { - "x": 30.3081932, - "y": 1.28416157, - "z": 85.5487061 - } - }, - { - "Position": { - "x": 30.3081932, - "y": 1.28340948, - "z": 83.2487 - } - }, - { - "Position": { - "x": 30.3081779, - "y": 1.282251, - "z": 78.6487 - } - }, - { - "Position": { - "x": 30.3081856, - "y": 1.28324521, - "z": 80.9487 - } - }, - { - "Position": { - "x": 30.3081779, - "y": 1.28150773, - "z": 76.3486938 - } - }, - { - "Position": { - "x": 30.3081779, - "y": 1.28073943, - "z": 74.0487 - } - }, - { - "Position": { - "x": 30.3081856, - "y": 1.279962, - "z": 71.7486954 - } - }, - { - "Position": { - "x": 30.30817, - "y": 1.27895975, - "z": 67.14869 - } - }, - { - "Position": { - "x": 30.3081551, - "y": 1.27831411, - "z": 64.84866 - } - }, - { - "Position": { - "x": 30.3081551, - "y": 1.27765858, - "z": 62.5487633 - } - }, - { - "Position": { - "x": 30.3082924, - "y": 1.276932, - "z": 60.2488022 - } - }, - { - "Position": { - "x": 30.3113976, - "y": 1.27603257, - "z": 57.9485779 - } - }, - { - "Position": { - "x": 30.3113976, - "y": 1.27529621, - "z": 55.6501465 - } - }, - { - "Position": { - "x": 30.31239, - "y": 1.27457035, - "z": 53.3694038 - } - }, - { - "Position": { - "x": 30.3113976, - "y": 1.27419889, - "z": 51.0597763 - } - }, - { - "Position": { - "x": 30.3113976, - "y": 1.27331829, - "z": 48.7527542 - } - }, - { - "Position": { - "x": 30.3081779, - "y": 1.2793709, - "z": 69.44869 - } - }, - { - "Position": { - "x": -29.1834469, - "y": 1.26261938, - "z": 95.80177 - } - } - ], - "TabStates": { - "10": { - "body": "Created by Whimsical\n\nAnything that passes over the remover that isn't a card or a deck will be deleted.\r\nTo use the remover, right click on it, choose the \"Enable\" option, and take your card with resources/horror/damage and swipe it over the remover. You may wish to unlock and/or copy the remover to your play area first.", - "color": "Grey", - "id": 10, - "title": "Token Remover", - "visibleColor": { - "b": 0.5, - "g": 0.5, - "r": 0.5 - } - }, - "11": { - "body": "By Whimsical. Requires Numlock set to On.\n\nNumpad 4: Spawn Damage\nNumpad 5: Spawn Connection Marker\nNumpad 6: Spawn Horror\nNumpad 7: Spawn Doom\nNumpad 8: Spawn Clue\nNumpad 9: Spawn Resource", - "color": "Grey", - "id": 11, - "title": "Numpad Hotkeys", - "visibleColor": { - "b": 0.5, - "g": 0.5, - "r": 0.5 - } - }, - "7": { - "body": "The server host can enable or disable cards in hands being hidden from other players by going to the menu at the top of the TTS screen, clicking options, and choosing Hands. The \"Disable\" setting reveals all player hands to all players, while the \"Default\" setting means that each player can only see the cards in their own hand.", - "color": "Grey", - "id": 7, - "title": "How to Hide Hands", - "visibleColor": { - "b": 0.5, - "g": 0.5, - "r": 0.5 - } - }, - "8": { - "body": "Welcome to Arkham Horror LCG - Super Complete Edition!\r\n\r\nBelow you will find all the features and instructions this mod is loaded with, that will make your AH LCG experience easier.\r\n\r\nDECKBUILDING\r\n1. All current existing investigators are on the right-hand side, and within each chest you will find their investigator-specific assets and weaknesses. Also included is a basic starter deck which only requires you to add a basic random weakness to get going.\r\n\r\n2. On the left-hand side you will find both the weakness decks as well as lvl 0 cards sorted by class. To reveal the cards, click on each corresponding token to deal the cards onto the table. Cards are sorted by order of Skill, event and Asset cards top-down and increasing resource cost, left to right. \r\n\r\n3. On the upper side you have the upgrade cards. Similarly, click each token to deal the cards out onto the table. Cards are arranged both in increasing xp cost and resource cost, left to right. Typically, these are the cards you will be spending XP on between scenarios to purchase and improve your deck.\r\n4. On the right-hand side underneath the Investigators, you will find the automated ArkhamDB Deckbuilder (coded and maintained by Grabben). Click the load cards button to activate the Deckbuilder, check ArkhamDB for your chosen deck’s URL and insert its number code following the instructions on the deckbuilder, and it will build the deck automatically for you.\r\n\r\nSCENARIOS \u0026 SETUP\r\n1. \tArkham Horror LCG comes with a core campaign (Night of the Zealot) and several expansions (The Dunwich Legacy, The Path to Carcosa \u0026 The Forgotten Age). Within each box you will find the volumes that contain all the cards required for each scenario setup, as well as a tablet linking to the official campaign guide PDF. Also included are chaos token cards and a Campaign Log.\r\n\r\n2. \tEach scenario is setup differently, and while some of the work has been prepared beforehand (such as building encounter decks), you will have to refer to the Campaign Guide for specific instructions on how to set up each scenario.\r\n\r\n3. \tThe chaos bag is always placed on the scenario setup mat in the upper right-hand corner onto a snap point that tilts it at a 45-degree angle. Each scenario volume will contain a difficulty card, where you will have the choice of four difficulties. Press the button on the card according to the difficulty of your choosing and the chaos bag will automatically be configured with the tokens specific to that difficulty. In campaign play it is recommended to save your decks and chaos bag at the end of your scenario to carry over onto the next, as often tokens are added or removed from the chaos bag depending on actions or decisions made during the game. These additional tokens can be drawn from the token reserve book resting next to the newspaper in the middle of the main table – right click it and search for the token you need.\n\r\n4. \tWhen placing location cards, always place them face down on the main play area (the dark map of Arkham, Massachusetts) with the number of clues per location unrevealed. The mod is scripted so that when you flip said location cards (usually when entering the location with an investigator), if it contains clues, the number of clues specific to that location will automatically spawn. Note, that the mod only spawns tokens in relation to the number of players currently set on the playmat player settings. To set the number of players, left-click on the \"Investigators Playing\" number to increase, or right-click to decrease.\r\n\n5. To make location mapping easier, you can draw location connector tokens from the arrow-shaped container below the main play area. Each token has three states (one way, two way and four way) to use them accordingly to better visualize how your locations connect.\n\r\n6. \tIf you require additional doom or clue tokens, these are located on the scenario playmat in their corresponding containers. A handy Doom counter has been also been added to track the doom on the agenda – left-click to add to add, and right-click to deduct. Keep in mind that any doom spawned on enemies, locations or assets needs to be mentally added to the doom in play on the agenda to account for total doom.\r\n\r\nINVESTIGATOR PLAYMAT AND GAMEPLAY\r\n1. \tInvestigator mats are scripted to automate most of the gameplay for you. wdw\n\r\n2. \tEach mat has slots for inventory, where if you play an asset (for example you put a gun that has 4 ammo into your right-hand slot), the mod will automatically spawn the 4 resource tokens onto your equipped card.\n\r\n3.\tThe draw encounter button on the left-hand side will draw the topmost card from the encounter deck and put it in your threat area. Left-clicking will draw the card face-down, and right-clicking will draw the card face-up. When you draw a weakness, or engage an enemy, it is recommended you put it in your threat area, and once you defeat the enemy or treachery, you can send it to the encounter discard pile by clicking the discard button. If you defeat an enemy with a victory point, make sure not to discard to the discard pile, but pick the card up and drop it at the victory display.\n\r\n4. \tThe Click for Chaos button does just that, draw a random chaos token from your chaos bag. Clicking a second time, sends your chaos token back into the bag, which is then shuffled. If one player clicks to draw a token and doesn’t click a second time to send it back, the click from another player on his personal mat will send the token back first, and the next click will draw the token. Additionally, right-clicking the button will continue drawing tokens and line them up next to each other, which is useful for specific draw conditions the game may require from you. Left-clicking again will send all drawn tokens back to the bag.\n\nADDITIONAL FEATURES:\n1. Over 20 Fan-made scenarios created by the thriving community of Arkham Horror LCG have been included. Some of these are one-scenario missions, others are long involved campaigns spanning multiple scenarios. These are all contained in \"The Side Missions\". This boxset also includes the official FFG-created sidemissions Curse of the Rougarou, Carnevale of Horrors, Labrynths of Lunacy and The Eternal Slumber. Read the rulebook on including a side-mission into an ongoing campaign, or play it as a one-off adventure! Setup instructions are included in each volume.\n\n2. If you are not a fan of the dark themed Arkham map for the playmat, you can change the image on it to any you like. At the top left hand side of the playmat is an image icon, which when clicked will reveal a image swap panel. Input the URL for the image you want to repalce the playmat with, and the panel will apply the image for you. Keep in mind this will not change the existing snap points on the current playmat.\n\r\nAs a final comment, please be sure to let me know on the mod page in steam workshop if you find any bugs, issues or have any suggestions for improvement!\r\n\r\n\r\n \r\n\r\n", - "color": "Grey", - "id": 8, - "title": "Basic Intro", - "visibleColor": { - "b": 0.5, - "g": 0.5, - "r": 0.5 - } - }, - "9": { - "body": "Implemented by Tikatoy\nIdea conceived by Cadentia\n\nTop buttons manage bless tokens, bottom buttons manage curse tokens\nADD - creates a new token and adds it to the chaos bag\nREMOVE - removes a token from the chaos bag and destroys it\nTAKE - takes a token from the chaos bag and places it below the manager (for sealing)\nRETURN - returns the last token taken from the chaos bag to the chaos bag\n\n---Other Notes---\n\nOnly use ONE token manager at a time\nTokens are limited to 10 of each type in play\nBless and curse tokens should be in the chaos bag before trying to REMOVE or TAKE them\nEach action logs a message which ends with (# in bag/# taken); hit enter to view log\n**WARNING**: Tracking # of tokens in bag and in play will NOT persist between saves\n\nVersion 3.0 UPDATE: Added a bindable hot key to display the current number of bless and curse tokens in the bag and in play (e.g. sealed on cards). To use, Options -\u003e Game Keys, then bind Bless Curse Status to a key or mouse button. Only the player who uses the hot key will see the status.\n\nAdded a Reset button to refresh the manager's tracking of bless/curse tokens in the bag and in the play area. When tokens are deleted, or manually removed or returned to the bag, the manager will no longer have the correct state and will not function properly. Use the Reset button to restore correct state.\r", - "color": "Grey", - "id": 9, - "title": "Bless / Curse Manager", - "visibleColor": { - "b": 0.5, - "g": 0.5, - "r": 0.5 - } - } - } -} \ No newline at end of file diff --git a/testdata/simple/textfiles/Global.-1.ttslua b/testdata/simple/textfiles/Global.-1.ttslua deleted file mode 100644 index b38f82d..0000000 --- a/testdata/simple/textfiles/Global.-1.ttslua +++ /dev/null @@ -1,763 +0,0 @@ ---[[ Lua code. See documentation: http://berserk-games.com/knowledgebase/scripting/ --]] --- Card size used for autodealing -- - --- global position constants -ENCOUNTER_DECK_POS = {-3.8, 1, 5.7} -ENCOUNTER_DECK_SPAWN_POS = {-3.8, 3, 5.7} -ENCOUNTER_DECK_DISCARD_POSITION = {-3.8, 0.5, 10.5} -g_cardWith=2.30; -g_cardHeigth=3.40; - -containerId = 'fea079' -tokenDataId = '708279' - - -maxSquid = 0 - -CACHE = { - object = {}, - data = {} -} - ---[[ The OnLoad function. This is called after everything in the game save finishes loading. -Most of your script code goes here. --]] -function onload() - --Player.White.changeColor('Yellow') - tokenplayerone = { - damageone = "http://cloud-3.steamusercontent.com/ugc/1758068501357115146/903D11AAE7BD5C254C8DC136E9202EE516289DEA/", - damagethree = "http://cloud-3.steamusercontent.com/ugc/1758068501357113055/8A45F27B2838FED09DEFE492C9C40DD82781613A/", - horrorone = "http://cloud-3.steamusercontent.com/ugc/1758068501357163535/6D9E0756503664D65BDB384656AC6D4BD713F5FC/", - horrorthree = "http://cloud-3.steamusercontent.com/ugc/1758068501357162977/E5D453CC14394519E004B4F8703FC425A7AE3D6C/", - resource = "http://cloud-3.steamusercontent.com/ugc/1758068501357192910/11DDDC7EF621320962FDCF3AE3211D5EDC3D1573/", - resourcethree = "https://i.imgur.com/1GZsDTt.png", - doom = "https://i.imgur.com/EoL7yaZ.png", - clue = "http://cloud-3.steamusercontent.com/ugc/1758068501357164917/1D06F1DC4D6888B6F57124BD2AFE20D0B0DA15A8/" - } - - TOKEN_DATA = { - clue = {image = tokenplayerone.clue, scale = {0.15, 0.15, 0.15}}, - resource = {image = tokenplayerone.resource, scale = {0.17, 0.17, 0.17}}, - doom = {image = tokenplayerone.doom, scale = {0.17, 0.17, 0.17}} - } - - getObjectFromGUID("6161b4").interactable=false - getObjectFromGUID("721ba2").interactable=false - getObjectFromGUID("9f334f").interactable=false - getObjectFromGUID("23a43c").interactable=false - getObjectFromGUID("5450cc").interactable=false - getObjectFromGUID("463022").interactable=false - getObjectFromGUID("9487a4").interactable=false - getObjectFromGUID("91dd9b").interactable=false - getObjectFromGUID("f182ee").interactable=false - -end - -function take_callback(object_spawned, mat) - customObject = object_spawned.getCustomObject() - local player = mat.getGUID(); - - local image = customObject.image - - -- Update global stats - if PULLS[image] == nil then - PULLS[image] = 0 - end - PULLS[image] = PULLS[image] + 1 - -- Update player stats - if PLAYER_PULLS[player][image] == nil then - PLAYER_PULLS[player][image] = 0 - end - PLAYER_PULLS[player][image] = PLAYER_PULLS[player][image] + 1 - -end -MAT_GUID_TO_COLOUR = { - ["8b081b"] = "White", - -- player 2 conrad - ["bd0ff4"] = "Orange", - -- player - ["383d8b"] = "Green", - -- playur 4 olivia - ["0840d5"] = "Red" -} - - -PLAYER_PULLS = { - -- player 1 max - ["8b081b"] = {}, - -- player 2 conrad - ["bd0ff4"] = {}, - -- player - ["383d8b"] = {}, - -- playur 4 olivia - ["0840d5"] = {} -} - -PULLS = { - -- cultist - ["https://i.imgur.com/VzhJJaH.png"] = 0, - -- skull - ["https://i.imgur.com/stbBxtx.png"] = 0, - -- tablet - ["https://i.imgur.com/1plY463.png"] = 0, - -- curse - ["http://cloud-3.steamusercontent.com/ugc/1655601092778636039/2A25BD38E8C44701D80DD96BF0121DA21843672E/"] = 0, - -- tentacle - ["https://i.imgur.com/lns4fhz.png"] = 0, - -- minus eight - ["https://i.imgur.com/9t3rPTQ.png"] = 0, - -- minus seven - ["https://i.imgur.com/4WRD42n.png"] = 0, - -- minus six - ["https://i.imgur.com/c9qdSzS.png"] = 0, - -- minus five - ["https://i.imgur.com/3Ym1IeG.png"] = 0, - -- minus four - ["https://i.imgur.com/qrgGQRD.png"] = 0, - -- minus three - ["https://i.imgur.com/yfs8gHq.png"] = 0, - -- minus two - ["https://i.imgur.com/bfTg2hb.png"] = 0, - -- minus one - ["https://i.imgur.com/w3XbrCC.png"] = 0, - -- zero - ["https://i.imgur.com/btEtVfd.png"] = 0, - -- plus one - ["https://i.imgur.com/uIx8jbY.png"] = 0, - -- elder thing - ["https://i.imgur.com/ttnspKt.png"] = 0, - -- bless - ["http://cloud-3.steamusercontent.com/ugc/1655601092778627699/339FB716CB25CA6025C338F13AFDFD9AC6FA8356/"] = 0, - -- elder sign - ["https://i.imgur.com/nEmqjmj.png"] = 0, -} - -IMAGE_TOKEN_MAP = { - -- elder sign - ["https://i.imgur.com/nEmqjmj.png"] = "Elder Sign", - -- plus one - ["https://i.imgur.com/uIx8jbY.png"] = "+1", - -- zero - ["https://i.imgur.com/btEtVfd.png"] = "0", - -- minus one - ["https://i.imgur.com/w3XbrCC.png"] = "-1", - -- minus two - ["https://i.imgur.com/bfTg2hb.png"] = "-2", - -- minus three - ["https://i.imgur.com/yfs8gHq.png"] = "-3", - -- minus four - ["https://i.imgur.com/qrgGQRD.png"] = "-4", - -- minus five - ["https://i.imgur.com/3Ym1IeG.png"] = "-5", - -- minus six - ["https://i.imgur.com/c9qdSzS.png"] = "-6", - -- minus seven - ["https://i.imgur.com/4WRD42n.png"] = "-7", - -- minus eight - ["https://i.imgur.com/9t3rPTQ.png"] = "-8", - -- skull - ["https://i.imgur.com/stbBxtx.png"] = "Skull", - -- cultist - ["https://i.imgur.com/VzhJJaH.png"] = "Cultist", - -- tablet - ["https://i.imgur.com/1plY463.png"] = "Tablet", - -- elder thing - ["https://i.imgur.com/ttnspKt.png"] = "Elder Thing", - -- tentacle - ["https://i.imgur.com/lns4fhz.png"] = "Auto-fail", - -- bless - ["http://cloud-3.steamusercontent.com/ugc/1655601092778627699/339FB716CB25CA6025C338F13AFDFD9AC6FA8356/"] = "Bless", - -- curse - ["http://cloud-3.steamusercontent.com/ugc/1655601092778636039/2A25BD38E8C44701D80DD96BF0121DA21843672E/"] = "Curse" -} - -function resetStats() - for key,value in pairs(PULLS) do - PULLS[key] = 0 - end - for playerKey, playerValue in pairs(PLAYER_PULLS) do - for key,value in pairs(PULLS) do - PLAYER_PULLS[playerKey][key] = value - end - end - - -end - -function getPlayerName(playerMatGuid) - local playerColour = MAT_GUID_TO_COLOUR[playerMatGuid] - if Player[playerColour].seated then - return Player[playerColour].steam_name - else - return playerColour - end -end - -function printStats() - local squidKing = "Nobody" - - - printToAll("\nOverall Game stats\n") - printNonZeroTokenPairs(PULLS) - printToAll("\nIndividual Stats\n") - for playerMatGuid, countTable in pairs(PLAYER_PULLS) do - local playerName = getPlayerName(playerMatGuid) - printToAll(playerName .. " Stats", {r=255,g=0,b=0}) - printNonZeroTokenPairs(PLAYER_PULLS[playerMatGuid]) - playerSquidCount = PLAYER_PULLS[playerMatGuid]["https://i.imgur.com/lns4fhz.png"] - if playerSquidCount ~= nil and playerSquidCount > maxSquid then - squidKing = playerName - maxSquid = playerSquidCount - end - end - printToAll(squidKing .. " is an auto-fail magnet.", {r=255,g=0,b=0}) -end - -function printNonZeroTokenPairs(theTable) - for key,value in pairs(theTable) do - if value ~= 0 then - printToAll(IMAGE_TOKEN_MAP[key] .. '=' .. tostring(value)) - end - end -end - --- Remove comments to enable autorotate cards on hands. --- function onObjectEnterScriptingZone(zone, object) --- Autorotate cards with right side up when entering hand. --- if zone.getGUID() == "c506bf" or -- white --- zone.getGUID() == "cbc751" then -- orange --- object.setRotationSmooth({0,270,0}) --- elseif zone.getGUID() == "67ce9a" then -- green --- object.setRotationSmooth({0,0,0}) --- elseif zone.getGUID() == "57c22c" then -- red --- object.setRotationSmooth({0,180,0}) ---end ---end - -function findInRadiusBy(pos, radius, filter, debug) - local radius = (radius or 1) - local objList = Physics.cast({ - origin = pos, - direction = {0,1,0}, - type = 2, - size = {radius, radius, radius}, - max_distance = 0, - debug = (debug or false) - }) - - local filteredList = {} - for _, obj in ipairs(objList) do - if filter == nil then - table.insert(filteredList, obj.hit_object) - elseif filter and filter(obj.hit_object) then - table.insert(filteredList, obj.hit_object) - end - end - return filteredList -end - -function dealCardsInRows(paramlist) - local currPosition={}; - local numRow=1; - local numCard=0; - local invMultiplier=1; - local allCardsDealed=0; - if paramlist.inverse then - invMultiplier=-1; - end - if paramlist.maxCardsDealed==nil then - - allCardsDealed=0; - paramlist.maxCardsDealed=paramlist.cardDeck.getQuantity() - - elseif paramlist.maxCardsDealed>=paramlist.cardDeck.getQuantity() or paramlist.maxCardsDealed<=0 then - - allCardsDealed=0; - paramlist.maxCardsDealed=paramlist.cardDeck.getQuantity() - - else - - allCardsDealed=1; - - end - - if paramlist.mode=="x" then - currPosition={paramlist.iniPosition[1]+(2*g_cardWith*invMultiplier*allCardsDealed),paramlist.iniPosition[2],paramlist.iniPosition[3]}; - - else - currPosition={paramlist.iniPosition[1],paramlist.iniPosition[2],paramlist.iniPosition[3]+(2*g_cardWith*invMultiplier*allCardsDealed)}; - - end - - for i = 1,paramlist.maxCardsDealed,1 do - - paramlist.cardDeck.takeObject - ({ - position= currPosition, - smooth= true - }); - - numCard=numCard+1; - if numCard>=paramlist.maxCardRow then - - if paramlist.mode=="x" then - currPosition={paramlist.iniPosition[1]+(2*g_cardWith*invMultiplier*allCardsDealed),paramlist.iniPosition[2],paramlist.iniPosition[3]}; - currPosition[3]=currPosition[3]-(numRow*g_cardHeigth*invMultiplier); - else - currPosition={paramlist.iniPosition[1],paramlist.iniPosition[2],paramlist.iniPosition[3]+(2*g_cardWith*invMultiplier*allCardsDealed)}; - currPosition[1]=currPosition[1]+(numRow*g_cardHeigth*invMultiplier); - end - numCard=0; - numRow=numRow+1; - - else - if paramlist.mode=="x" then - currPosition[1]=currPosition[1]+(g_cardWith*invMultiplier); - else - currPosition[3]=currPosition[3]+(g_cardWith*invMultiplier); - end - end - end -end - -function isDeck(x) - return x.tag == 'Deck' -end - -function isCardOrDeck(x) - return x.tag == 'Card' or isDeck(x) -end - -function drawEncountercard(params) --[[ Parameter Table Position, Table Rotation]] - local position = params[1] - local rotation = params[2] - local alwaysFaceUp = params[3] - local faceUpRotation - local card - local items = findInRadiusBy(ENCOUNTER_DECK_POS, 4, isCardOrDeck) - if #items > 0 then - for i, v in ipairs(items) do - if v.tag == 'Deck' then - card = v.takeObject({index = 0}) - break - end - end - -- we didn't find the deck so just pull the first thing we did find - if card == nil then card = items[1] end - actualEncounterCardDraw(card, params) - return - end --- nothing here, time to reshuffle - reshuffleEncounterDeck(params) -end - -function actualEncounterCardDraw(card, params) - local position = params[1] - local rotation = params[2] - local alwaysFaceUp = params[3] - local faceUpRotation = 0 - if not alwaysFaceUp then - if getObjectFromGUID(tokenDataId).call('checkHiddenCard', card.getName()) then - faceUpRotation = 180 - end - end - card.setPositionSmooth(position, false, false) - card.setRotationSmooth({0,rotation.y,faceUpRotation}, false, false) -end - -IS_RESHUFFLING = false -function reshuffleEncounterDeck(params) - -- finishes moving the deck back and draws a card - local function move(deck) - deck.setPositionSmooth(ENCOUNTER_DECK_SPAWN_POS, true, false) - actualEncounterCardDraw(deck.takeObject({index=0}), params) - Wait.time(function() - IS_RESHUFFLING = false - end, 1) - end - -- bail out if we're mid reshuffle - if IS_RESHUFFLING then - return - end - local discarded = findInRadiusBy(ENCOUNTER_DECK_DISCARD_POSITION, 4, isDeck) - if #discarded > 0 then - IS_RESHUFFLING = true - local deck = discarded[1] - if not deck.is_face_down then - deck.flip() - end - deck.shuffle() - Wait.time(|| move(deck), 0.3) - else - printToAll("couldn't find encounter discard pile to reshuffle", {1, 0, 0}) - end -end - -CHAOS_TOKENS = {} -CHAOS_TOKENS_LAST_MAT = nil -function putBackChaosTokens() - local chaosbagposition = chaosbag.getPosition() - for k, token in pairs(CHAOS_TOKENS) do - if token ~= nil then - chaosbag.putObject(token) - token.setPosition({chaosbagposition[1],chaosbagposition[2]+0.5,chaosbagposition[3]}) - end - end - CHAOS_TOKENS = {} - end - -function drawChaostoken(params) - local mat = params[1] - local tokenOffset = params[2] - local isRightClick = params[3] - local isSameMat = (CHAOS_TOKENS_LAST_MAT == nil or CHAOS_TOKENS_LAST_MAT == mat) - if not isSameMat then - putBackChaosTokens() - end - CHAOS_TOKENS_LAST_MAT = mat - -- if we have left clicked and have no tokens OR if we have right clicked - if isRightClick or #CHAOS_TOKENS == 0 then - local items = getObjectFromGUID("83ef06").getObjects() - for i,v in ipairs(items) do - if items[i].getDescription() == "Chaos Bag" then - chaosbag = getObjectFromGUID(items[i].getGUID()) - break - end - end - -- bail out if we have no tokens - if #chaosbag.getObjects() == 0 then - return - end - chaosbag.shuffle() - -- add the token to the list, compute new position based on list length - tokenOffset[1] = tokenOffset[1] + (0.17 * #CHAOS_TOKENS) - local toPosition = mat.positionToWorld(tokenOffset) - local token = chaosbag.takeObject({ - index = 0, - position = toPosition, - rotation = mat.getRotation(), - callback_function = function(obj) take_callback(obj, mat) end - }) - CHAOS_TOKENS[#CHAOS_TOKENS + 1] = token - return - else - putBackChaosTokens() - end -end - -function spawnToken(params) - -- Position to spawn, - -- rotation vector to apply - -- translation vector to apply - -- token type - local position = params[1] - local tokenType = params[2] - local tokenData = TOKEN_DATA[tokenType] - if tokenData == nil then - error("no token data found for '" .. tokenType .. "'") - end - - local token = spawnObject({ - type = 'Custom_Token', - position = position, - rotation = {x=0, y=270, z=0} - }) - token.setCustomObject({ - image = tokenData['image'], - thickness = 0.3, - merge_distance = 5.0, - stackable = true, - }) - token.use_snap_points=false - token.scale(tokenData['scale']) - return token -end - -function round(params) -- Parameter (int number, int numberDecimalPlaces) - return tonumber(string.format("%." .. (params[2] or 0) .. "f", params[1])) -end - -function roundposition(params) -- Parameter (Table position) - return {round({params[1], 2}),round({params[2], 2}),round({params[3], 2})} -end - -function isEqual(params) --Parameter (Table table1, Table table2) returns true if the tables are equal - if params[1][1] == params[2][1] and params[1][2] == params[2][2] and params[1][3] == params[2][3] then - return true - else - return false - end -end - -function isFaceup(params) --Object object - if params.getRotation()[3] > -5 and params.getRotation()[3] < 5 then - return true - else - return false - end -end - ---Difficulty selector script - -function createSetupButtons(args) - local data = getDataValue('modeData', args.key) - if data ~= nil then - local z = -0.15 - if data.easy ~= nil then - args.object.createButton({ - label = 'Easy', - click_function = 'easyClick', - function_owner = args.object, - position = {0, 0.1, z}, - rotation = {0, 0, 0}, - scale = {0.47, 1, 0.47}, - height = 200, - width = 1150, - font_size = 100, - color = {0.87, 0.8, 0.70}, - font_color = {0, 0, 0} - }) - z = z + 0.20 - end - if data.normal ~= nil then - args.object.createButton({ - label = 'Standard', - click_function = 'normalClick', - function_owner = args.object, - position = {0, 0.1, z}, - rotation = {0, 0, 0}, - scale = {0.47, 1, 0.47}, - height = 200, - width = 1150, - font_size = 100, - color = {0.87, 0.8, 0.70}, - font_color = {0, 0, 0} - }) - z = z + 0.20 - end - if data.hard ~= nil then - args.object.createButton({ - label = 'Hard', - click_function = 'hardClick', - function_owner = args.object, - position = {0, 0.1, z}, - rotation = {0, 0, 0}, - scale = {0.47, 1, 0.47}, - height = 200, - width = 1150, - font_size = 100, - color = {0.87, 0.8, 0.70}, - font_color = {0, 0, 0} - }) - z = z + 0.20 - end - if data.expert ~= nil then - args.object.createButton({ - label = 'Expert', - click_function = 'expertClick', - function_owner = args.object, - position = {0, 0.1, z}, - rotation = {0, 0, 0}, - scale = {0.47, 1, 0.47}, - height = 200, - width = 1150, - font_size = 100, - color = {0.87, 0.8, 0.70}, - font_color = {0, 0, 0} - }) - z = z + 0.20 - end - z = z + 0.10 - if data.standalone ~= nil then - args.object.createButton({ - label = 'Standalone', - click_function = 'standaloneClick', - function_owner = args.object, - position = {0, 0.1, z}, - rotation = {0, 0, 0}, - scale = {0.47, 1, 0.47}, - height = 200, - width = 1150, - font_size = 100, - color = {0.87, 0.8, 0.70}, - font_color = {0, 0, 0} - }) - end - end -end - -function fillContainer(args) - local container = getObjectCache(containerId) - - if container ~= nil then - local data = getDataValue('modeData', args.key) - if data == nil then return end - - local value = data[args.mode] - if value == nil or value.token == nil then return end - - local pos = container.getPosition() - if args.object ~= nil then - pos = args.object.getPosition() - end - - cleanContainer(container) - - for _, token in ipairs(value.token) do - local obj = spawnToken_2(token, pos) - if obj ~= nil then - container.putObject(obj) - end - end - - if value.append ~= nil then - for _, token in ipairs(value.append) do - local obj = spawnToken_2(token, pos) - if obj ~= nil then - container.putObject(obj) - end - end - end - - if value.random then - local n = #value.random - if n > 0 then - for _, token in ipairs(value.random[getRandomCount(n)]) do - local obj = spawnToken_2(token, pos) - if obj ~= nil then - container.putObject(obj) - end - end - end - end - - if value.message then - broadcastToAll(value.message) - end - if value.warning then - broadcastToAll(value.warning, { 1, 0.5, 0.5 }) - end - end -end - -function spawnToken_2(id, pos) - local url = getImageUrl(id) - if url ~= '' then - local obj = spawnObject({ - type = 'Custom_Tile', - position = {pos.x, pos.y + 3, pos.z}, - rotation = {x = 0, y = 260, z = 0} - }) - obj.setCustomObject({ - type = 2, - image = url, - thickness = 0.10, - }) - obj.scale {0.81, 1, 0.81} - obj.setName(getTokenName({ url=url })) - return obj - end -end - -function getTokenName(params) - local name = IMAGE_TOKEN_MAP[params.url] - if name == nil then name = "" end - return name -end - -function getImageUrl(id) - if id == 'p1' then return 'https://i.imgur.com/uIx8jbY.png' end - if id == '0' then return 'https://i.imgur.com/btEtVfd.png' end - if id == 'm1' then return 'https://i.imgur.com/w3XbrCC.png' end - if id == 'm2' then return 'https://i.imgur.com/bfTg2hb.png' end - if id == 'm3' then return 'https://i.imgur.com/yfs8gHq.png' end - if id == 'm4' then return 'https://i.imgur.com/qrgGQRD.png' end - if id == 'm5' then return 'https://i.imgur.com/3Ym1IeG.png' end - if id == 'm6' then return 'https://i.imgur.com/c9qdSzS.png' end - if id == 'm7' then return 'https://i.imgur.com/4WRD42n.png' end - if id == 'm8' then return 'https://i.imgur.com/9t3rPTQ.png' end - if id == 'skull' then return 'https://i.imgur.com/stbBxtx.png' end - if id == 'cultist' then return 'https://i.imgur.com/VzhJJaH.png' end - if id == 'tablet' then return 'https://i.imgur.com/1plY463.png' end - if id == 'elder' then return 'https://i.imgur.com/ttnspKt.png' end - if id == 'red' then return 'https://i.imgur.com/lns4fhz.png' end - if id == 'blue' then return 'https://i.imgur.com/nEmqjmj.png' end - return '' -end - -function cleanContainer(container) - for _, item in ipairs(container.getObjects()) do - destroyObject(container.takeObject({})) - end -end - -function getObjectsInZone(zoneId) - local zoneObject = getObjectCache(zoneId) - - if zoneObject == nil then - return - end - - local objectsInZone = zoneObject.getObjects() - local objectsFound = {} - - for i = 1, #objectsInZone do - local object = objectsInZone[i] - if object.tag == 'Bag' then - table.insert(objectsFound, object.guid) - end - end - - if #objectsFound > 0 then - return objectsFound - end -end - -function getObjectCache(id) - if CACHE.object[id] == nil then - CACHE.object[id] = getObjectFromGUID(id) - end - return CACHE.object[id] -end - -function getDataTable(storage) - if CACHE.data[storage] == nil then - local obj = getObjectCache(tokenDataId) - if obj ~= nil then - CACHE.data[storage] = obj.getTable(storage) - end - end - return CACHE.data[storage] -end - -function getDataValue(storage, key) - local data = getDataTable(storage) - if data ~= nil then - local value = data[key] - if value ~= nil then - local res = {} - for m, v in pairs(value) do - res[m] = v - if res[m].parent ~= nil then - local parentData = getDataValue(storage, res[m].parent) - if parentData ~= nil and parentData[m] ~= nil and parentData[m].token ~= nil then - res[m].token = parentData[m].token - end - res[m].parent = nil - end - end - return res - end - end -end - -function getRandomCount(to) - updateRandomSeed() - return math.random(1, to) -end - -function updateRandomSeed() - local chance = math.random(1,10) - if chance == 1 then - math.randomseed(os.time()) - end -end diff --git a/testdata/simple/textfiles/chinesecheckers.ttslua b/testdata/simple/textfiles/chinesecheckers.ttslua deleted file mode 100644 index 164a305..0000000 --- a/testdata/simple/textfiles/chinesecheckers.ttslua +++ /dev/null @@ -1,199 +0,0 @@ - - -function onSave() - saved_data = JSON.encode({tid=tableImageData, cd=checkData}) - --saved_data = "" - return saved_data -end - -function onload(saved_data) - --Loads the tracking for if the game has started yet - if saved_data ~= "" then - local loaded_data = JSON.decode(saved_data) - tableImageData = loaded_data.tid - checkData = loaded_data.cd - else - tableImageData = {} - checkData = {move=false, scale=false} - end - - --Disables interactable status of objects with GUID in list - for _, guid in ipairs(ref_noninteractable) do - local obj = getObjectFromGUID(guid) - if obj then obj.interactable = false end - end - - - - obj_surface = getObjectFromGUID("721ba2") - - - controlActive = false - createOpenCloseButton() -end - - - ---Activation/deactivation of control panel - - - ---Activated by clicking on -function click_toggleControl(_, color) - if permissionCheck(color) then - if not controlActive then - --Activate control panel - controlActive = true - self.clearButtons() - createOpenCloseButton() - createSurfaceInput() - createSurfaceButtons() - - else - --Deactivate control panel - controlActive = false - self.clearButtons() - self.clearInputs() - createOpenCloseButton() - - end - end -end - - - - ---Table surface control - - - ---Changes table surface -function click_applySurface(_, color) - if permissionCheck(color) then - updateSurface() - broadcastToAll("New Playmat Image Applied", {0.2,0.9,0.2}) - end -end - ---Updates surface from the values in the input field -function updateSurface() - local customInfo = obj_surface.getCustomObject() - customInfo.image = self.getInputs()[1].value - obj_surface.setCustomObject(customInfo) - obj_surface = obj_surface.reload() -end - - - ---Information gathering - - - ---Checks if a color is promoted or host -function permissionCheck(color) - if Player[color].host==true or Player[color].promoted==true then - return true - else - return false - end -end - ---Locates a string saved within memory file -function findInImageDataIndex(...) - for _, str in ipairs({...}) do - for i, v in ipairs(tableImageData) do - if v.url == str or v.name == str then - return i - end - end - end - return nil -end - ---Round number (num) to the Nth decimal (dec) -function round(num, dec) - local mult = 10^(dec or 0) - return math.floor(num * mult + 0.5) / mult -end - ---Locates a button with a helper function -function findButton(obj, func) - if func==nil then error("No func supplied to findButton") end - for _, v in ipairs(obj.getButtons()) do - if func(v) then - return v - end - end - return nil -end - - - ---Creation of buttons/inputs - - - -function createOpenCloseButton() - local tooltip = "Open Playmat Panel" - if controlActive then - tooltip = "Close Playmat Panel" - end - self.createButton({ - click_function="click_toggleControl", function_owner=self, - position={0,0,0}, rotation={-45,0,0}, height=1500, width=1500, - color={1,1,1,0}, tooltip=tooltip - }) -end - -function createSurfaceInput() - local currentURL = obj_surface.getCustomObject().diffuse - local nickname = "" - if findInImageDataIndex(currentURL) ~= nil then - nickname = tableImageData[findInImageDataIndex(currentURL)].name - end - - self.createInput({ - label="URL", input_function="none", function_owner=self, - alignment=3, position={0,0.15,3}, height=224, width=4000, - font_size=200, tooltip="Enter URL for playmat image", - value=currentURL - }) -end - -function createSurfaceButtons() - --Label - self.createButton({ - label="Playmat Image Swapper", click_function="none", - position={0,0.15,2.2}, height=0, width=0, font_size=300, font_color={1,1,1} - }) - --Functional - self.createButton({ - label="Apply Image\nTo Playmat", click_function="click_applySurface", - function_owner=self, tooltip="Apply URL as playmat image", - position={0,0.15,4}, height=440, width=1400, font_size=200, - }) - -end - - - - - - ---Data tables - - - - -ref_noninteractable = { - "afc863","c8edca","393bf7","12c65e","f938a2","9f95fd","35b95f", - "5af8f2","4ee1f2","bd69bd" -} - -ref_playerColor = { - "White", "Brown", "Red", "Orange", "Yellow", - "Green", "Teal", "Blue", "Purple", "Pink", "Black" -} - ---Dummy function, absorbs unwanted triggers -function none() end