diff --git a/.gitignore b/.gitignore index c34459ead..6a3a7bfdb 100644 --- a/.gitignore +++ b/.gitignore @@ -104,3 +104,12 @@ spine-turbulenz/spine-js/spine.js spine-threejs/spine-js/spine.js spine-ts/.vscode/* + +spine-ue4/Binaries +spine-ue4/Intermediate +spine-ue4/Saved +spine-ue4/SpineUE4.xcworkspace +spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/spine-c +spine-ue4/Plugins/SpinePlugin/Binaries +spine-ue4/SpineUE4.VC.opendb +spine-ue4/SpineUE4.sln diff --git a/spine-ue4/Config/DefaultEditor.ini b/spine-ue4/Config/DefaultEditor.ini new file mode 100644 index 000000000..6838df001 --- /dev/null +++ b/spine-ue4/Config/DefaultEditor.ini @@ -0,0 +1,5 @@ +[EditoronlyBP] +bAllowClassAndBlueprintPinMatching=true +bReplaceBlueprintWithClass=true +bDontLoadBlueprintOutsideEditor=true +bBlueprintIsNotBlueprintType=true diff --git a/spine-ue4/Config/DefaultEngine.ini b/spine-ue4/Config/DefaultEngine.ini new file mode 100644 index 000000000..244a1d163 --- /dev/null +++ b/spine-ue4/Config/DefaultEngine.ini @@ -0,0 +1,9 @@ +[URL] + +[/Script/HardwareTargeting.HardwareTargetingSettings] +TargetedHardwareClass=Desktop +AppliedTargetedHardwareClass=Desktop +DefaultGraphicsPerformance=Maximum +AppliedDefaultGraphicsPerformance=Maximum + + diff --git a/spine-ue4/Config/DefaultGame.ini b/spine-ue4/Config/DefaultGame.ini new file mode 100644 index 000000000..579ad9274 --- /dev/null +++ b/spine-ue4/Config/DefaultGame.ini @@ -0,0 +1,2 @@ +[/Script/EngineSettings.GeneralProjectSettings] +ProjectID=A32BDAC45F432EB90DF445842A670D58 diff --git a/spine-ue4/Content/GettingStarted/01-basic-animation.umap b/spine-ue4/Content/GettingStarted/01-basic-animation.umap new file mode 100644 index 000000000..3e75454db Binary files /dev/null and b/spine-ue4/Content/GettingStarted/01-basic-animation.umap differ diff --git a/spine-ue4/Content/GettingStarted/01-basic-animation_2.uasset b/spine-ue4/Content/GettingStarted/01-basic-animation_2.uasset new file mode 100644 index 000000000..2272e48ad Binary files /dev/null and b/spine-ue4/Content/GettingStarted/01-basic-animation_2.uasset differ diff --git a/spine-ue4/Content/GettingStarted/02-complex-animation.umap b/spine-ue4/Content/GettingStarted/02-complex-animation.umap new file mode 100644 index 000000000..5b93bf702 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/02-complex-animation.umap differ diff --git a/spine-ue4/Content/GettingStarted/03-multiple-tracks-and-events.umap b/spine-ue4/Content/GettingStarted/03-multiple-tracks-and-events.umap new file mode 100644 index 000000000..d7c341b4f Binary files /dev/null and b/spine-ue4/Content/GettingStarted/03-multiple-tracks-and-events.umap differ diff --git a/spine-ue4/Content/GettingStarted/04-basic-controls.umap b/spine-ue4/Content/GettingStarted/04-basic-controls.umap new file mode 100644 index 000000000..a3c1a4720 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/04-basic-controls.umap differ diff --git a/spine-ue4/Content/GettingStarted/05-driving-bones.umap b/spine-ue4/Content/GettingStarted/05-driving-bones.umap new file mode 100644 index 000000000..8897df843 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/05-driving-bones.umap differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Doi/Doi-atlas.atlas b/spine-ue4/Content/GettingStarted/Assets/Doi/Doi-atlas.atlas new file mode 100644 index 000000000..0dde0b61b --- /dev/null +++ b/spine-ue4/Content/GettingStarted/Assets/Doi/Doi-atlas.atlas @@ -0,0 +1,279 @@ + +Doi.png +size: 646,520 +format: RGBA8888 +filter: Linear,Linear +repeat: none +armL + rotate: false + xy: 1, 46 + size: 163, 133 + orig: 163, 133 + offset: 0, 0 + index: -1 +armR + rotate: true + xy: 165, 46 + size: 133, 109 + orig: 133, 109 + offset: 0, 0 + index: -1 +arrow + rotate: true + xy: 467, 1 + size: 64, 85 + orig: 64, 85 + offset: 0, 0 + index: -1 +body + rotate: false + xy: 1, 180 + size: 274, 339 + orig: 274, 339 + offset: 0, 0 + index: -1 +bootR + rotate: false + xy: 499, 258 + size: 91, 84 + orig: 91, 84 + offset: 0, 0 + index: -1 +browL + rotate: false + xy: 228, 23 + size: 40, 22 + orig: 40, 22 + offset: 0, 0 + index: -1 +browR + rotate: true + xy: 591, 287 + size: 32, 25 + orig: 32, 25 + offset: 0, 0 + index: -1 +eyelids closed + rotate: false + xy: 276, 201 + size: 183, 92 + orig: 183, 92 + offset: 0, 0 + index: -1 +eyelids open + rotate: true + xy: 499, 343 + size: 176, 89 + orig: 176, 89 + offset: 0, 0 + index: -1 +hairL + rotate: false + xy: 589, 459 + size: 54, 60 + orig: 54, 60 + offset: 0, 0 + index: -1 +hairL2 + rotate: false + xy: 553, 4 + size: 71, 76 + orig: 71, 76 + offset: 0, 0 + index: -1 +hairM + rotate: true + xy: 467, 66 + size: 96, 77 + orig: 96, 77 + offset: 0, 0 + index: -1 +hairM blob + rotate: true + xy: 133, 15 + size: 30, 45 + orig: 30, 45 + offset: 0, 0 + index: -1 +hairM blobS + rotate: false + xy: 545, 142 + size: 16, 20 + orig: 16, 20 + offset: 0, 0 + index: -1 +hairR + rotate: true + xy: 1, 4 + size: 41, 83 + orig: 41, 83 + offset: 0, 0 + index: -1 +hairR2 + rotate: true + xy: 460, 163 + size: 94, 101 + orig: 94, 101 + offset: 0, 0 + index: -1 +hairSide + rotate: false + xy: 179, 21 + size: 48, 24 + orig: 48, 24 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 276, 294 + size: 222, 225 + orig: 222, 225 + offset: 0, 0 + index: -1 +indexL + rotate: true + xy: 405, 7 + size: 24, 36 + orig: 24, 36 + offset: 0, 0 + index: -1 +indexR + rotate: false + xy: 296, 3 + size: 34, 28 + orig: 34, 28 + offset: 0, 0 + index: -1 +inmouth + rotate: false + xy: 589, 403 + size: 46, 55 + orig: 46, 55 + offset: 0, 0 + index: -1 +irisL + rotate: true + xy: 85, 11 + size: 34, 47 + orig: 34, 47 + offset: 0, 0 + index: -1 +irisL flatspec + rotate: false + xy: 625, 70 + size: 19, 10 + orig: 19, 10 + offset: 0, 0 + index: -1 +irisL spec + rotate: true + xy: 624, 384 + size: 18, 21 + orig: 18, 21 + offset: 0, 0 + index: -1 +irisR + rotate: false + xy: 589, 355 + size: 34, 47 + orig: 34, 47 + offset: 0, 0 + index: -1 +irisR flatspec + rotate: true + xy: 445, 178 + size: 22, 11 + orig: 22, 11 + offset: 0, 0 + index: -1 +irisR spec + rotate: false + xy: 545, 124 + size: 16, 17 + orig: 16, 17 + offset: 0, 0 + index: -1 +middleL + rotate: true + xy: 331, 5 + size: 26, 36 + orig: 26, 36 + offset: 0, 0 + index: -1 +middleR + rotate: true + xy: 591, 320 + size: 34, 26 + orig: 34, 26 + offset: 0, 0 + index: -1 +mouth + rotate: true + xy: 562, 168 + size: 89, 83 + orig: 89, 83 + offset: 0, 0 + index: -1 +nose + rotate: false + xy: 545, 113 + size: 11, 10 + orig: 11, 10 + offset: 0, 0 + index: -1 +pinkyL + rotate: false + xy: 442, 4 + size: 24, 27 + orig: 24, 27 + offset: 0, 0 + index: -1 +pony1 + rotate: false + xy: 394, 32 + size: 72, 105 + orig: 72, 105 + offset: 0, 0 + index: -1 +pony2 + rotate: true + xy: 562, 81 + size: 86, 83 + orig: 86, 83 + offset: 0, 0 + index: -1 +ringL + rotate: false + xy: 269, 1 + size: 26, 30 + orig: 26, 30 + offset: 0, 0 + index: -1 +rotate + rotate: true + xy: 275, 32 + size: 105, 118 + orig: 105, 118 + offset: 0, 0 + index: -1 +strap + rotate: true + xy: 276, 138 + size: 62, 168 + orig: 62, 168 + offset: 0, 0 + index: -1 +thumbL + rotate: false + xy: 460, 265 + size: 37, 28 + orig: 37, 28 + offset: 0, 0 + index: -1 +thumbR + rotate: false + xy: 368, 6 + size: 36, 25 + orig: 36, 25 + offset: 0, 0 + index: -1 diff --git a/spine-ue4/Content/GettingStarted/Assets/Doi/Doi-atlas.uasset b/spine-ue4/Content/GettingStarted/Assets/Doi/Doi-atlas.uasset new file mode 100644 index 000000000..4e75f7294 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Doi/Doi-atlas.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Doi/Doi-data.json b/spine-ue4/Content/GettingStarted/Assets/Doi/Doi-data.json new file mode 100644 index 000000000..5c53448ec --- /dev/null +++ b/spine-ue4/Content/GettingStarted/Assets/Doi/Doi-data.json @@ -0,0 +1,2526 @@ +{ +"skeleton": { "hash": "0C6whivVQVuD/woFtbJBZAqNHq4", "spine": "3.5.03-beta", "width": 519.09, "height": 542.36, "fps": 30, "images": "" }, +"bones": [ + { "name": "root" }, + { "name": "arrowOrigin", "parent": "root", "x": 172.99, "y": 292 }, + { "name": "arrowX", "parent": "arrowOrigin", "length": 71.44, "rotation": -4.7, "x": 47.68, "y": -3.92 }, + { "name": "arrowY", "parent": "arrowOrigin", "length": 71.44, "rotation": 49.81, "x": 37.77, "y": 44.72 }, + { "name": "hip", "parent": "root", "length": 68.61, "rotation": -171.49, "x": -19.9, "y": 151.37, "color": "ffe941ff" }, + { "name": "lumbar", "parent": "hip", "length": 33.93, "rotation": -97.88, "x": 0.07, "y": -4.74 }, + { "name": "thorax", "parent": "lumbar", "length": 54.39, "rotation": -18.29, "x": 35.09, "y": -0.8 }, + { "name": "head", "parent": "thorax", "length": 14.3, "rotation": 6.59, "x": 70.1, "y": -1.78 }, + { "name": "browL", "parent": "head", "length": 31.37, "rotation": -58.18, "x": 128.48, "y": -11.4 }, + { "name": "browR", "parent": "head", "length": 26.75, "rotation": 65.11, "x": 121.66, "y": 39.52 }, + { "name": "eyelids", "parent": "head", "length": 14.96, "rotation": -82.34, "x": 79.11, "y": 8.18 }, + { "name": "femurL", "parent": "hip", "length": 92.96, "rotation": 125.21, "x": -52.77, "y": 39.86 }, + { "name": "femurR", "parent": "hip", "length": 45.3, "rotation": 53.25, "x": 43.53, "y": 43.45 }, + { "name": "tibiaL", "parent": "femurL", "length": 83, "rotation": -24.72, "x": 107.79, "y": -1.31 }, + { "name": "footL", "parent": "tibiaL", "length": 54.47, "rotation": 37.77, "x": 82.83, "y": -20.62 }, + { "name": "hairL1", "parent": "head", "length": 27.5, "rotation": -150.58, "x": 179.86, "y": -9.57 }, + { "name": "hairL2", "parent": "head", "length": 35.09, "rotation": -135.32, "x": 173.5, "y": -26.26 }, + { "name": "hairL2 2", "parent": "hairL2", "length": 32.49, "rotation": 17.32, "x": 37.68, "y": -0.62 }, + { "name": "hairM", "parent": "head", "length": 25.81, "rotation": -173.33, "x": 182.69, "y": 31.1 }, + { "name": "hairML", "parent": "hairM", "length": 46.41, "rotation": 32.57, "x": 13.83, "y": 24.11 }, + { "name": "hairMR", "parent": "hairM", "length": 44.06, "rotation": -6.41, "x": 17, "y": -28.44 }, + { "name": "hairR1", "parent": "head", "length": 43.15, "rotation": -178.89, "x": 157.15, "y": 74.61 }, + { "name": "hairR2", "parent": "head", "length": 49.32, "rotation": 157.66, "x": 179.91, "y": 62.62 }, + { "name": "hairR2 2", "parent": "hairR2", "length": 28.91, "rotation": -50.6, "x": 45.74, "y": -13.91 }, + { "name": "hairSide", "parent": "head", "length": 33.33, "rotation": 94.94, "x": 47.44, "y": -92.9 }, + { "name": "humerusL", "parent": "thorax", "length": 73.48, "rotation": -65.21, "x": 41.33, "y": -55.5 }, + { "name": "radiusL", "parent": "humerusL", "length": 65.38, "rotation": 43.11, "x": 75.72, "y": 1.83 }, + { "name": "handL", "parent": "radiusL", "rotation": -52.7, "x": 80.44, "y": 2.06 }, + { "name": "humerusR", "parent": "thorax", "length": 55.73, "rotation": 137.38, "x": 23.08, "y": 29.13 }, + { "name": "radiusR", "parent": "humerusR", "length": 47.29, "rotation": 4.01, "x": 58.87 }, + { "name": "handR", "parent": "radiusR", "x": 54.01, "y": -1.07 }, + { "name": "handleCenterTargetR", "parent": "handR", "rotation": -89, "x": 18.07, "y": 0.06, "color": "ff0000ff" }, + { "name": "indexL", "parent": "handL", "length": 22, "rotation": 99.18, "x": -13.07, "y": 20.89 }, + { "name": "indexR", "parent": "handR", "length": 18, "rotation": -11.04, "x": 6.82, "y": -13.85 }, + { "name": "irisL", "parent": "head", "rotation": -79.01, "x": 82.7, "y": -29.95 }, + { "name": "irisR", "parent": "head", "rotation": -79.01, "x": 72.86, "y": 40.02 }, + { "name": "middleL", "parent": "handL", "length": 23.21, "rotation": 75.15, "x": 4.54, "y": 20.96 }, + { "name": "middleR", "parent": "handR", "length": 19.24, "rotation": -23.52, "x": -3.3, "y": -17.06 }, + { "name": "mouth", "parent": "head", "rotation": -77.99, "x": 28.05, "y": 0.81 }, + { "name": "mouth opening", "parent": "mouth" }, + { "name": "pinkyL", "parent": "handL", "length": 12.17, "rotation": 37.78, "x": 22.03, "y": -15.19 }, + { "name": "pinkyR", "parent": "handR", "length": 20.98, "rotation": -38.56, "x": -15.17, "y": -0.62 }, + { "name": "pony1 1", "parent": "head", "length": 26.78, "rotation": -127.21, "x": 3.24, "y": -49.43 }, + { "name": "pony1 2", "parent": "pony1 1", "length": 20.86, "rotation": -14.7, "x": 29.89, "y": -1.1 }, + { "name": "pony1 3L", "parent": "pony1 2", "length": 36.26, "rotation": -26.46, "x": 27.65, "y": -8.15 }, + { "name": "pony1 3R", "parent": "pony1 2", "length": 37.66, "rotation": -2.95, "x": 34.01, "y": 6.79 }, + { "name": "pony2 1", "parent": "head", "length": 22.09, "rotation": -126.98, "x": 12.68, "y": -53.86 }, + { "name": "pony2 2", "parent": "pony2 1", "length": 24.31, "rotation": 2.08, "x": 25.67, "y": -0.29 }, + { "name": "pony2 3L", "parent": "pony2 2", "length": 33.37, "rotation": -9.21, "x": 31.3, "y": -1.21 }, + { "name": "pony2 3R", "parent": "pony2 2", "length": 43.41, "rotation": 15.37, "x": 27.7, "y": 0.83 }, + { "name": "ringL", "parent": "handL", "length": 15.27, "rotation": 62.01, "x": 21.05, "y": 12.5 }, + { "name": "ringR", "parent": "handR", "length": 18.11, "rotation": -31.44, "x": -10.21, "y": -16.03 }, + { "name": "rotateHandle", "parent": "root", "length": 55.27, "rotation": 124.8, "x": -152.63, "y": 153.44, "color": "ff0000ff" }, + { "name": "rs", "parent": "rotateHandle", "scaleX": 1.294, "scaleY": 0.767, "color": "ff0000ff" }, + { "name": "rr", "parent": "rs", "color": "ff0000ff" }, + { "name": "strap anchor", "parent": "hip", "length": 31.94, "rotation": -85.09, "x": 2.3, "y": 43.77, "color": "ff702eff" }, + { "name": "strap tie", "parent": "thorax", "length": 32.33, "rotation": 174.59, "x": 48.07, "y": 9.54, "color": "ff702eff" }, + { "name": "thumbL", "parent": "handL", "length": 16.61, "rotation": 150.77, "x": -29.83, "y": -12.11 }, + { "name": "thumbR", "parent": "handR", "length": 20.56, "rotation": -7.45, "x": 4.36, "y": 18.56 }, + { "name": "tibiaR", "parent": "femurR", "length": 42.31, "rotation": 106.18, "x": 52.54, "y": 9.88 } +], +"slots": [ + { "name": "rotate", "bone": "rr", "attachment": "rotate" }, + { "name": "pony2", "bone": "pony2 1", "attachment": "pony2" }, + { "name": "pony1", "bone": "pony1 1", "attachment": "pony1" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "inmouth", "bone": "mouth", "attachment": "inmouth" }, + { "name": "mouth", "bone": "mouth opening", "attachment": "mouth" }, + { "name": "irisL", "bone": "irisL", "attachment": "irisL" }, + { "name": "irisR", "bone": "irisR", "attachment": "irisR" }, + { "name": "eyelids open", "bone": "eyelids", "attachment": "eyelids open" }, + { "name": "irisR spec", "bone": "irisR", "attachment": "irisR spec" }, + { "name": "irisR flatspec", "bone": "irisR", "attachment": "irisR flatspec" }, + { "name": "irisL flatspec", "bone": "irisL", "attachment": "irisL flatspec" }, + { "name": "irisL spec", "bone": "irisL", "attachment": "irisL spec" }, + { "name": "eyelids closed", "bone": "eyelids" }, + { "name": "nose", "bone": "head", "attachment": "nose" }, + { "name": "browR", "bone": "browR", "attachment": "browR" }, + { "name": "browL", "bone": "browL", "attachment": "browL" }, + { "name": "hairR2", "bone": "hairR2", "attachment": "hairR2" }, + { "name": "hairL2", "bone": "hairL2", "attachment": "hairL2" }, + { "name": "hairL", "bone": "hairL1", "attachment": "hairL" }, + { "name": "hairR", "bone": "hairR1", "attachment": "hairR" }, + { "name": "hairM", "bone": "hairM", "attachment": "hairM" }, + { "name": "hairM blobS", "bone": "hairM", "attachment": "hairM blobS" }, + { "name": "hairM blob", "bone": "hairM", "attachment": "hairM blob" }, + { "name": "hairSide", "bone": "hairSide", "attachment": "hairSide" }, + { "name": "thumbR", "bone": "thumbR", "attachment": "thumbR" }, + { "name": "pinkyR", "bone": "pinkyR", "attachment": "middleR" }, + { "name": "ringR", "bone": "ringR", "attachment": "indexR" }, + { "name": "middleR", "bone": "middleR", "attachment": "middleR" }, + { "name": "indexR", "bone": "indexR", "attachment": "indexR" }, + { "name": "armR", "bone": "humerusR", "attachment": "armR" }, + { "name": "bootR", "bone": "tibiaR", "attachment": "bootR" }, + { "name": "body", "bone": "hip", "attachment": "body" }, + { "name": "strap", "bone": "strap anchor", "attachment": "strap" }, + { "name": "armL", "bone": "humerusL", "attachment": "armL" }, + { "name": "thumbL", "bone": "thumbL", "attachment": "thumbL" }, + { "name": "indexL", "bone": "indexL", "attachment": "indexL" }, + { "name": "middleL", "bone": "middleL", "attachment": "middleL" }, + { "name": "ringL", "bone": "ringL", "attachment": "ringL" }, + { "name": "pinkyL", "bone": "pinkyL", "attachment": "pinkyL" }, + { "name": "arrowY", "bone": "arrowY", "attachment": "arrowY" }, + { "name": "arrowX", "bone": "arrowX", "attachment": "arrowX" } +], +"transform": [ + { + "name": "rotateHandleTarget", + "order": 1, + "bones": [ "rotateHandle" ], + "target": "handleCenterTargetR" + }, + { + "name": "translateHandleTarget", + "order": 0, + "bones": [ "arrowOrigin" ], + "target": "handL" + } +], +"skins": { + "default": { + "armL": { + "armL": { + "type": "mesh", + "uvs": [ 0, 0.53854, 0.04432, 0.51804, 0.12166, 0.54622, 0.18646, 0.55903, 0.30561, 0.55903, 0.3934, 0.5411, 0.46656, 0.44375, 0.51882, 0.33872, 0.57944, 0.20807, 0.63169, 0.09022, 0.71322, 0.02618, 0.79683, 5.6E-4, 0.91598, 0.01081, 0.98914, 0.11584, 1, 0.2798, 0.99332, 0.41045, 0.95778, 0.54622, 0.87626, 0.69993, 0.79265, 0.80497, 0.65887, 0.88438, 0.47701, 0.94843, 0.3077, 0.97405, 0.17601, 0.97149, 0.11748, 0.98429, 0.07149, 0.99967, 0.03386, 0.95355, 0, 0.8562, 0, 0.64614, 0.17852, 0.72842, 0.42193, 0.62878, 0.64362, 0.53195, 0.79941, 0.13446, 0.60451, 0.76196, 0.36098, 0.83549, 0.76897, 0.34426, 0.84802, 0.50653 ], + "triangles": [ 27, 0, 1, 27, 1, 2, 26, 27, 28, 26, 23, 25, 24, 25, 23, 30, 34, 35, 35, 34, 15, 34, 8, 31, 15, 34, 14, 31, 11, 12, 31, 12, 13, 10, 11, 31, 31, 13, 14, 31, 9, 10, 34, 31, 14, 31, 8, 9, 16, 35, 15, 7, 8, 34, 17, 35, 16, 17, 30, 35, 6, 7, 30, 29, 6, 30, 30, 17, 32, 18, 32, 17, 30, 7, 34, 32, 29, 30, 19, 32, 18, 29, 4, 5, 28, 2, 3, 27, 2, 28, 4, 29, 28, 28, 3, 4, 29, 33, 28, 20, 33, 32, 20, 32, 19, 28, 22, 26, 22, 28, 33, 21, 22, 33, 21, 33, 20, 22, 23, 26, 33, 29, 32, 29, 5, 6 ], + "vertices": [ 1, 6, 72.47, -38.61999, 1, 1, 6, 77.25, -44.68999, 1, 3, 25, 17.27, 31.86, 0.82719, 26, -22.11, 61.86999, 0.00479, 6, 77.48999, -57.83, 0.16798, 2, 25, 27.54, 28.85, 0.9593, 26, -16.67, 52.65999, 0.04067, 2, 25, 46.81, 26.42, 0.89978, 26, -4.26999, 37.70999, 0.10019, 2, 25, 61.29999, 27, 0.58206, 26, 6.69, 28.21999, 0.41791, 3, 25, 74.75, 38.36, 0.24874, 26, 24.27, 27.30999, 0.62042, 27, -54.13, -29.37999, 0.1308, 2, 26, 40.45999, 29.68, 0.60754, 27, -46.2, -15.06999, 0.39245, 1, 27, -37.04999, 2.7, 1, 1, 27, -29.18, 18.70999, 1, 1, 27, -16.26, 27.78, 1, 1, 27, -2.77999, 31.75, 1, 1, 27, 16.67, 31.19, 1, 2, 26, 112.22, -10.38, 0.00319, 27, 29.17, 17.71999, 0.9968, 1, 27, 31.84, -3.98, 1, 1, 27, 31.46999, -21.38999, 1, 2, 26, 64.9, -43, 0.34301, 27, 26.44, -39.68, 0.65697, 3, 25, 136.75, -3.76999, 0.00362, 26, 40.68999, -45.83, 0.69388, 27, 14, -60.65999, 0.30248, 3, 25, 121.48, -15.93, 0.19496, 26, 21.22999, -44.25999, 0.50686, 27, 0.95999, -75.18, 0.29815, 2, 25, 98.52999, -23.69, 0.6028, 26, -0.81, -34.22, 0.39719, 2, 25, 68.05999, -28.44, 0.98195, 26, -26.29, -16.85, 0.01803, 1, 25, 40.25, -28.37, 1, 1, 25, 19, -25.35, 1, 2, 25, 9.31999, -25.85, 0.82398, 6, 21.76, -74.8, 0.17599, 1, 6, 17.54999, -68.26999, 1, 1, 6, 21.54, -60.58, 1, 1, 6, 32.20999, -51.4, 1, 1, 6, 58.83, -42.95, 1, 2, 25, 23.44, 6.65999, 0.99125, 26, -34.84, 39.27, 0.00872, 2, 25, 64.45999, 14.85, 0.69542, 26, 0.68, 17.2, 0.30456, 2, 26, 33.66999, -2.38, 0.736, 27, -24.79999, -39.9, 0.26399, 1, 27, -1.62, 13.97, 1, 2, 25, 91.76999, -6.42999, 0.73822, 26, 6.05, -17.01, 0.26175, 1, 25, 51.16999, -11.17, 1, 2, 26, 65.91999, -2.16, 0.33599, 27, -5.42, -14.10999, 0.66399, 1, 27, 8.34, -35.13999, 1 ], + "hull": 28, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 0 ], + "width": 163, + "height": 133 + } + }, + "armR": { + "armR": { + "type": "mesh", + "uvs": [ 0, 0.7003, 0.04189, 0.50764, 0.19978, 0.38837, 0.34264, 0.32186, 0.43474, 0.29663, 0.53625, 0.22553, 0.75429, 0.06727, 0.88211, 0, 0.9761, 0.02828, 1, 0.22323, 0.96294, 0.34479, 0.86708, 0.46635, 0.68662, 0.60397, 0.60016, 0.67966, 0.51557, 0.75534, 0.39151, 0.86314, 0.27685, 0.97094, 0.18662, 1, 0.087, 0.96177, 0.03061, 0.87232, 0, 0.79434, 0.13963, 0.63837, 0.30505, 0.50764, 0.47422, 0.41819, 0.62647, 0.31039, 0.81068, 0.16131, 0.16783, 0.86314, 0.27685, 0.74158, 0.44038, 0.60626, 0.6152, 0.48012, 0.77121, 0.3425, 0.90843, 0.2347 ], + "triangles": [ 16, 17, 26, 17, 18, 26, 16, 26, 15, 18, 19, 26, 19, 20, 26, 26, 27, 15, 15, 27, 14, 20, 21, 26, 26, 21, 27, 20, 0, 21, 27, 28, 14, 14, 28, 13, 27, 22, 28, 27, 21, 22, 0, 1, 21, 21, 2, 22, 21, 1, 2, 13, 28, 29, 28, 22, 23, 23, 3, 4, 23, 22, 3, 22, 2, 3, 12, 13, 29, 28, 23, 29, 12, 29, 11, 29, 30, 11, 29, 24, 30, 29, 23, 24, 11, 30, 10, 24, 4, 5, 24, 23, 4, 30, 31, 10, 10, 31, 9, 30, 25, 31, 30, 24, 25, 25, 24, 6, 31, 25, 8, 31, 8, 9, 8, 25, 7, 24, 5, 6, 25, 6, 7 ], + "vertices": [ 1, 29, 65.4, -17.71999, 1, 1, 29, 49.09, -32.06999, 1, 2, 28, 85.41, -29.40999, 0.00106, 29, 24.40999, -31.2, 0.99892, 2, 28, 65.31999, -26.27, 0.14336, 29, 4.59, -26.64999, 0.85663, 2, 28, 53.31999, -22.56999, 0.51598, 29, -7.11, -22.12999, 0.48401, 2, 28, 37.75999, -22.59, 0.92585, 29, -22.63999, -21.05999, 0.07412, 2, 28, 4.01999, -23.15999, 0.99997, 29, -56.34, -19.26, 0, 2, 28, -14.36999, -21.07999, 0.99997, 29, -74.54, -15.89999, 0, 2, 28, -23.69, -12.18999, 0.99997, 29, -83.20999, -6.38999, 0, 2, 28, -15.89, 7.82, 0.99998, 29, -74.04, 13.02999, 0, 1, 28, -5.03, 16.87, 1, 1, 28, 12.60999, 22.04, 1, 2, 28, 40.88999, 23.13999, 0.90114, 29, -16.31999, 24.34, 0.09883, 2, 28, 54.97, 24.57999, 0.45831, 29, -2.17, 24.79999, 0.54167, 2, 28, 68.83, 26.15999, 0.06027, 29, 11.76, 25.39999, 0.93971, 1, 29, 32, 25.97999, 1, 1, 29, 51.20999, 27.27, 1, 1, 29, 62.95, 23.21999, 1, 1, 29, 71.63999, 12.39, 1, 1, 29, 72.44999, 0.11999, 1, 1, 29, 71.11, -9.19999, 1, 1, 29, 46.22, -13, 1, 2, 28, 79.72, -11.18, 0.00277, 29, 20.01, -12.60999, 0.99721, 2, 28, 55.34999, -8.46, 0.56562, 29, -4.09999, -8.18999, 0.43437, 2, 28, 31.94, -8.6, 0.9957, 29, -27.46999, -6.69999, 0.00429, 2, 28, 2.59999, -10.52999, 0.99998, 29, -56.86999, -6.57, 0, 1, 29, 56.72999, 9.43999, 1, 1, 29, 37.31, 6.48999, 1, 1, 29, 11.02999, 6.32999, 1, 2, 28, 42.43, 6.69999, 0.94672, 29, -15.93, 7.82999, 0.05327, 1, 28, 16.96999, 3.99, 1, 2, 28, -4.69999, 2.85999, 0.99998, 29, -63.22, 7.3, 0 ], + "hull": 21, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 0, 40, 42, 44, 44, 46, 46, 48, 48, 50, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62 ], + "width": 133, + "height": 109 + } + }, + "arrowX": { + "arrowX": { "path": "arrow", "color": "f0100cff", "x": 36.22, "y": 1.18, "rotation": -60.13, "width": 64, "height": 85 } + }, + "arrowY": { + "arrowY": { "path": "arrow", "color": "99ff00ff", "x": 36.22, "y": 1.18, "rotation": -60.13, "width": 64, "height": 85 } + }, + "body": { + "body": { + "type": "mesh", + "uvs": [ 0.38823, 0, 0.3066, 0, 0.21707, 0.04123, 0.15987, 0.09148, 0.10764, 0.16385, 0.09272, 0.24023, 0.10142, 0.3116, 0.1151, 0.37391, 0.08153, 0.41512, 0.04919, 0.46638, 0, 0.58297, 0, 0.6684, 0.07531, 0.68548, 0.1723, 0.66538, 0.22329, 0.6091, 0.26929, 0.58096, 0.35261, 0.55583, 0.43841, 0.57593, 0.49561, 0.60206, 0.54535, 0.62116, 0.62867, 0.66639, 0.65354, 0.6885, 0.65851, 0.71765, 0.6697, 0.77594, 0.69955, 0.85231, 0.7468, 0.92568, 0.77665, 0.94678, 0.82639, 0.97292, 0.92587, 0.99704, 1, 1, 1, 0.95181, 1, 0.91796, 1, 0.88949, 0.99426, 0.84326, 0.96441, 0.73672, 0.92214, 0.66235, 0.88732, 0.62415, 0.86618, 0.60405, 0.84628, 0.58395, 0.76918, 0.51762, 0.661, 0.44726, 0.61002, 0.4151, 0.57768, 0.38595, 0.54038, 0.34675, 0.5267, 0.30756, 0.52581, 0.27771, 0.55068, 0.2566, 0.58425, 0.2375, 0.6228, 0.21037, 0.65389, 0.14705, 0.63897, 0.08674, 0.56933, 0.04252, 0.46985, 0, 0.21649, 0.53614, 0.2549, 0.38287, 0.38346, 0.24995, 0.24331, 0.30662, 0.69584, 0.53321, 0.48354, 0.10468, 0.33238, 0.32689, 0.37187, 0.1683, 0.7505, 0.7801, 0.2752, 0.11006, 0.28246, 0.22606, 0.63511, 0.56427, 0.12875, 0.57015, 0.79784, 0.67188, 0.16469, 0.44561, 0.50331, 0.42526, 0.17172, 0.25178, 0.57192, 0.16189, 0.45878, 0.31875, 0.47189, 0.20966, 0.29645, 0.47484, 0.9177, 0.90248, 0.71807, 0.60369, 0.3892, 0.07463, 0.17518, 0.34541, 0.87803, 0.78245, 0.38636, 0.40615, 0.40981, 0.49336, 0.79937, 0.88039, 0.42912, 0.13933, 0.19937, 0.16866, 0.56174, 0.51389, 0.48177, 0.52211, 0.3175, 0.39771, 0.7973, 0.91644, 0.94422, 0.96365 ], + "triangles": [ 26, 25, 87, 88, 74, 31, 30, 88, 31, 87, 74, 88, 27, 87, 88, 26, 87, 27, 28, 27, 88, 88, 30, 29, 28, 88, 29, 76, 0, 52, 58, 52, 51, 76, 52, 58, 62, 2, 1, 3, 2, 62, 82, 76, 58, 70, 51, 50, 70, 50, 49, 58, 51, 70, 1, 76, 62, 76, 1, 0, 60, 76, 82, 60, 62, 76, 83, 3, 62, 4, 3, 83, 72, 82, 58, 72, 58, 70, 48, 70, 49, 63, 62, 60, 83, 62, 63, 47, 70, 48, 46, 72, 70, 72, 55, 60, 72, 60, 82, 63, 60, 55, 69, 4, 83, 69, 83, 63, 5, 4, 69, 47, 46, 70, 45, 72, 46, 71, 55, 72, 59, 63, 55, 66, 38, 37, 22, 21, 66, 61, 23, 22, 66, 61, 22, 36, 66, 37, 35, 66, 36, 78, 35, 34, 35, 78, 66, 61, 66, 78, 78, 34, 33, 24, 23, 61, 81, 61, 78, 24, 61, 81, 74, 78, 33, 74, 33, 32, 81, 78, 74, 81, 25, 24, 87, 81, 74, 74, 32, 31, 87, 25, 81, 41, 84, 68, 41, 68, 42, 84, 41, 40, 85, 80, 68, 84, 85, 68, 57, 40, 39, 64, 84, 40, 57, 64, 40, 18, 85, 84, 17, 85, 18, 75, 57, 39, 75, 39, 38, 64, 57, 75, 19, 18, 84, 19, 84, 64, 20, 19, 64, 20, 64, 75, 66, 75, 38, 21, 20, 75, 21, 75, 66, 65, 9, 67, 10, 9, 65, 65, 53, 14, 13, 65, 14, 12, 11, 10, 65, 12, 10, 13, 12, 65, 67, 9, 8, 65, 67, 53, 56, 69, 63, 6, 5, 69, 71, 72, 45, 71, 45, 44, 59, 55, 71, 56, 63, 59, 77, 69, 56, 6, 69, 77, 7, 6, 77, 54, 56, 59, 77, 56, 54, 86, 54, 59, 79, 59, 71, 86, 59, 79, 43, 68, 71, 43, 71, 44, 68, 43, 42, 79, 71, 68, 67, 7, 77, 67, 77, 54, 8, 7, 67, 73, 54, 86, 67, 54, 73, 80, 79, 68, 53, 67, 73, 73, 79, 80, 79, 73, 86, 16, 73, 80, 15, 53, 73, 17, 80, 85, 16, 80, 17, 16, 15, 73, 14, 53, 15 ], + "vertices": [ 1, 6, 77.69, -3.34999, 1, 1, 6, 70.93, 17.96999, 1, 5, 4, 5.71, -100.8, 0.01449, 13, -247.48, -75.75, 0, 5, 94.38999, 18.70999, 0.00384, 6, 50.18999, 37.13, 0.98163, 25, -80.4, 46.88, 0, 5, 4, 23.73999, -86.27999, 0.08471, 13, -236.49, -96.12999, 0, 5, 77.54, 34.58, 0.0357, 6, 29.20999, 46.91999, 0.87955, 25, -98.08999, 31.93, 0, 5, 4, 41.52999, -64.15, 0.26317, 13, -217.96, -117.66, 0, 5, 53.18, 49.18, 0.08089, 6, 1.5, 53.15, 0.65592, 25, -115.36, 9.38, 0, 5, 4, 49.41999, -39.15, 0.58274, 13, -194.81, -129.97, 0, 5, 27.34, 53.58, 0.077, 6, -24.40999, 49.22, 0.34024, 25, -122.66, -15.8, 0, 3, 4, 50.65, -14.86999, 0.84586, 5, 3.11999, 51.47999, 0.04506, 6, -46.75999, 39.63, 0.10905, 2, 4, 50.08, 6.57, 0.99949, 6, -65.76, 29.68, 5.0E-4, 4, 4, 61.25, 19.02, 0.41233, 12, -8.97, -28.81999, 0.58676, 5, -31.89999, 57.34999, 0, 6, -81.86, 34.22, 8.8E-4, 4, 4, 72.58999, 34.88999, 0.07953, 12, 10.52, -28.40999, 0.92009, 5, -49.16999, 66.41999, 0, 6, -101.09999, 37.41999, 3.6E-4, 4, 4, 91.79, 71.97, 0.02573, 12, 51.72, -21.6, 0.97336, 5, -88.52999, 80.37, 0, 6, -142.86, 38.31999, 8.9E-4, 4, 4, 96.08999, 100.61, 0, 12, 77.23999, -7.90999, 0.99997, 5, -117.48999, 80.70999, 0, 6, -170.47, 29.56999, 0, 3, 4, 76.54, 109.4, 0, 12, 72.58999, 13, 0.99997, 5, -123.52999, 60.13999, 0, 2, 4, 49.25, 106.61, 0.14582, 12, 54.02, 33.2, 0.85417, 2, 4, 32.59999, 89.80999, 0.31082, 12, 30.6, 36.49, 0.68917, 2, 4, 18.71999, 82.25, 0.83942, 12, 16.23999, 43.09, 0.16055, 3, 4, -5.11, 77.22, 0.9139, 12, -2.04999, 59.18, 0.048, 11, 3.03999, -60.47, 0.03807, 2, 4, -27.35, 87.44, 0.75787, 11, 24.20999, -48.2, 0.24211, 3, 4, -41.54, 98.52999, 0.16242, 11, 41.45, -43, 0.83708, 13, -42.83, -65.61, 4.7E-4, 4, 4, -54.04999, 106.95999, 0.00263, 12, -7.5, 116.18, 0.02514, 11, 55.54999, -37.63999, 0.92651, 13, -32.27, -54.84, 0.04568, 4, 4, -74.34999, 125.51, 1.4E-4, 12, -4.78, 143.55, 0.00626, 11, 82.41, -31.75, 0.81753, 13, -10.31999, -38.25999, 0.17602, 3, 12, -1.39999, 153.1, 2.5E-4, 11, 92.54, -32.00999, 0.60675, 13, -1.00999, -34.25999, 0.39298, 2, 11, 100.62, -37.86, 0.33847, 13, 8.76, -36.18999, 0.66152, 2, 11, 117.01999, -49.29999, 0.13549, 13, 28.45, -39.74, 0.86449, 1, 13, 55.59, -40.45, 1, 2, 13, 83.33, -36.33, 0.92668, 14, -10.6, -11.59, 0.07329, 2, 13, 92.76, -30.93, 0.09792, 14, -0.07999, -14.31, 0.90205, 1, 14, 16.05999, -16.11, 1, 1, 14, 44.09999, -11.17, 1, 1, 14, 62.7, -2.95, 1, 3, 11, 222.66, -25.14999, 1.0E-5, 13, 114.33999, 26.37, 0.13331, 14, 55.36, 11.64, 0.86665, 3, 11, 216.44, -20.19, 4.4E-4, 13, 106.59999, 28.28, 0.42261, 14, 48.75, 24.07999, 0.57692, 3, 11, 207.4, -10.55, 8.0E-4, 13, 94.36, 33.25999, 0.66584, 14, 45.88, 30.52, 0.33333, 3, 11, 195, -0.83999, 0.00298, 13, 79.02999, 36.88, 0.8859, 14, 37.43, 43.81999, 0.11111, 2, 11, 163.25, 18.20999, 0.00655, 13, 42.22, 40.93, 0.99343, 2, 11, 137.02998, 27.28, 0.05801, 13, 14.6, 38.20999, 0.94198, 2, 11, 121.08, 29.34, 0.16157, 13, -0.74, 33.40999, 0.83841, 2, 11, 112.15, 29.87, 0.33221, 13, -9.06999, 30.15999, 0.66777, 2, 11, 103.45999, 30.63999, 0.60759, 13, -17.29, 27.21999, 0.39239, 2, 11, 72.59999, 30.93, 0.83736, 13, -45.45, 14.59, 0.16263, 2, 11, 34.88, 26.01, 0.9936, 13, -77.66999, -5.65, 0.00639, 3, 4, -81.94, 40.50999, 0.30239, 11, 17.34, 23.45999, 0.6976, 13, -92.52999, -15.3, 0, 3, 4, -74.65, 29.42, 0.60736, 11, 4.07999, 23.88999, 0.39263, 13, -104.76, -20.45, 0, 4, 4, -66.51, 14.76, 0.78491, 11, -12.57999, 25.69, 0.21277, 13, -120.66, -25.78, 0, 6, -21.76, -78.62, 0.0023, 4, 4, -64.77999, 1.05999, 0.77424, 11, -24.77, 32.16999, 0.13584, 13, -134.45, -24.98999, 0, 6, -10.22999, -71.02999, 0.08989, 4, 4, -66.04, -8.97, 0.68678, 13, -144.09, -21.92, 0, 6, -0.66, -67.73999, 0.31202, 25, -6.48, -43.25999, 0.00115, 4, 4, -73.83999, -15.02999, 0.38179, 13, -148.63, -13.14, 0, 6, 8.22, -72.06999, 0.49072, 25, 1.16999, -37.00999, 0.12748, 4, 4, -83.9, -20.06999, 0.19576, 13, -151.75, -2.32999, 0, 6, 17.17, -78.88999, 0.55656, 25, 11.1, -31.73999, 0.24763, 3, 4, -95.70999, -27.6, 0.10164, 6, 29.12999, -86.18, 0.54541, 25, 22.73999, -23.93, 0.35293, 3, 4, -107.31999, -47.56, 0.07677, 6, 52.16999, -87.80999, 0.57428, 25, 33.88, -3.69, 0.34891, 3, 4, -106.30999, -68.38999, 0.0383, 6, 70.41999, -77.73, 0.62598, 25, 32.38, 17.1, 0.3357, 3, 4, -89.66999, -86.04, 0.0131, 6, 78.94999, -55.00999, 0.7682, 25, 15.31999, 34.36, 0.21865, 1, 6, 84.44999, -24.67, 1, 2, 4, 30.77, 65.08, 0.72329, 12, 9.68999, 23.14999, 0.27669, 1, 4, 12.64999, 15.26, 1, 3, 13, -165.71, -55.72999, 0, 5, 23.09, -26.03, 0.72213, 6, -3.47, -27.70999, 0.27785, 1, 4, 11.94999, -10.77, 1, 1, 11, 62.52999, 12.76, 1, 1, 6, 51.75, -38.97, 1, 3, 4, -11.14999, -0.34999, 0.71938, 11, -56.84999, -10.81, 0.08551, 5, -2.80999, -11.72, 0.19507, 3, 13, -192.91998, -49.7, 0, 5, 50.81, -23.18, 0.05995, 6, 21.94, -16.31999, 0.94003, 1, 13, 37, -19.27, 1, 1, 6, 32.75999, 14.89, 1, 2, 5, 31.52, 1.53999, 0.46799, 6, -4.11999, 1.11, 0.53198, 2, 12, -36.13, 128.74, 1.1E-4, 11, 58.63, -6.53, 0.99988, 1, 12, 31.20999, 7.42, 1, 1, 13, 6.55, 4.94999, 1, 3, 4, 40.25, 32.61999, 0.73018, 12, -10.64, -3.84999, 0.26962, 6, -84.83, 9.38, 1.8E-4, 2, 4, -52.52, 39.56999, 0.42399, 11, -0.37999, -0.03999, 0.57599, 3, 4, 28.59, -32.06, 0.4151, 5, 23.15999, 31.97999, 0.19535, 6, -21.6, 27.39999, 0.38953, 3, 4, -84.36, -45.91999, 0.10305, 6, 40.58, -67.91999, 0.52539, 25, 10.96, -5.86999, 0.37152, 5, 4, -45.81, 2.05999, 0.90915, 11, -34.9, 16.11, 0.04371, 13, -136.93, -43.81999, 0, 5, -0.46, -46.38999, 0.04496, 6, -19.46999, -54.43999, 0.00215, 3, 4, -54.84999, -33.97, 0.03193, 5, 36.45999, -50.41999, 0.01638, 6, 16.86, -46.68, 0.95165, 1, 4, 6.01999, 47.77999, 1, 2, 13, 91.16999, 10.5, 0.91198, 14, 27.7, 16.45999, 0.08799, 1, 11, 84, 0.63999, 1, 1, 6, 53.65, -11.25, 1, 1, 4, 32.36999, -0.52999, 1, 1, 13, 49.15, 13.5, 1, 1, 4, -21.79, 28.40999, 1, 2, 4, -23.76, 58.59999, 0.89677, 11, -1.40999, -34.50999, 0.10322, 1, 13, 73.51, -17.7, 1, 1, 6, 36.04999, -28.29999, 1, 4, 4, 16.92, -58.79999, 0.08669, 13, -208.22, -94.43, 0, 5, 51.25, 24.06999, 0.04853, 6, 7.53999, 28.7, 0.86475, 3, 4, -63.88999, 71.66, 5.3E-4, 12, -41.66999, 102.94999, 0.01015, 11, 32.38999, -9.25, 0.9893, 2, 4, -41.81, 71.16, 0.017, 11, 19.25, -27, 0.98299, 1, 4, -3.55999, 22.78, 1, 1, 14, -0.09, -2.88, 1, 1, 14, 43.02999, 2.02999, 1 ], + "hull": 53, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 64, 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 92, 92, 94, 94, 96, 96, 98, 98, 100, 100, 102, 102, 104, 104, 0, 174, 176, 60, 62, 62, 64 ], + "width": 274, + "height": 339 + } + }, + "bootR": { + "bootR": { + "type": "mesh", + "uvs": [ 0, 0.54474, 0.46746, 1, 0.71832, 1, 1, 0.80288, 1, 0.24718, 0.71458, 0, 0.38509, 0, 0, 0.15389, 0.51169, 0.62779, 0.42963, 0.26122, 0.73117, 0.38791, 0.23532, 0.39703 ], + "triangles": [ 9, 6, 5, 7, 6, 9, 10, 5, 4, 9, 5, 10, 11, 7, 9, 0, 7, 11, 8, 9, 10, 11, 9, 8, 10, 4, 3, 8, 10, 3, 8, 0, 11, 2, 1, 8, 1, 0, 8, 3, 2, 8 ], + "vertices": [ -22.6, -25.18, 26.96999, -53.70999, 49.29, -48.95999, 70.91, -27.42, 61.18, 18.21999, 31.45, 33.11999, 2.13, 26.87, -29.44, 6.92, 24.38999, -22.29999, 10.67, 6.25, 39.72, 1.55999, -4.23999, -8.57999 ], + "hull": 8, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 0 ], + "width": 91, + "height": 84 + } + }, + "browL": { + "browL": { + "type": "mesh", + "uvs": [ 0.62764, 0, 0, 0.55392, 0, 1, 0.37349, 1, 1, 0.4836, 1, 0 ], + "triangles": [ 0, 5, 4, 1, 0, 4, 3, 2, 1, 4, 3, 1 ], + "vertices": [ 24.47999, 8.56999, -3.30999, 6.09, -6.78999, -3.06999, 7.17, -8.38, 34.63, -6.65999, 38.4, 3.27999 ], + "hull": 6, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 0, 10 ], + "width": 40, + "height": 22 + } + }, + "browR": { + "browR": { + "type": "mesh", + "uvs": [ 0.32799, 0.01349, 0, 0, 0.01721, 0.47317, 0.66639, 1, 1, 1, 1, 0.60577 ], + "triangles": [ 2, 1, 0, 2, 0, 5, 3, 2, 5, 3, 5, 4 ], + "vertices": [ 24.12, -6.57, 32.81999, -0.68999, 25.44, 8.56, 0.88999, 7.05, -7.75, 0.79, -1.97, -7.19 ], + "hull": 6, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 0, 10 ], + "width": 32, + "height": 25 + } + }, + "eyelids closed": { + "eyelids closed": { "x": 7.71, "y": 8.77, "rotation": 3.33, "width": 183, "height": 92 } + }, + "eyelids open": { + "eyelids open": { + "type": "mesh", + "uvs": [ 0, 0.66298, 0.14307, 0.91808, 0.34607, 0.94181, 0.45207, 0.70056, 0.58607, 0.94972, 0.75507, 1, 0.99997, 0.80932, 1, 0.29912, 0.90697, 0.09741, 0.72297, 0.05391, 0.55697, 0.17058, 0.45697, 0.43161, 0.37697, 0.14883, 0.23197, 0, 0.10068, 0, 0, 0.23386 ], + "triangles": [ 15, 11, 0, 15, 14, 13, 13, 12, 15, 11, 15, 12, 3, 0, 11, 7, 10, 9, 7, 9, 8, 7, 11, 10, 6, 11, 7, 3, 11, 6, 1, 0, 3, 2, 1, 3, 4, 3, 6, 5, 4, 6 ], + "vertices": [ -80.37, -10.14, -53.90999, -31.34, -18.12, -31.37999, -0.74, -8.85999, 24.07999, -29.62999, 54.02999, -32.36999, 96.06999, -12.92, 93.44, 32.4, 76.05999, 49.36999, 43.5, 51.34999, 14.93999, 39.29, -1.26999, 15.07999, -16.79, 39.38, -43.04, 51.13, -66.11, 49.77999, -82.58999, 27.97999 ], + "hull": 16, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30 ], + "width": 176, + "height": 89 + } + }, + "hairL": { + "hairL": { + "type": "mesh", + "uvs": [ 0, 0.51919, 0.0632, 0.70911, 0.29876, 0.93436, 0.59811, 0.97853, 0.99999, 1, 0.92691, 0.87253, 0.7257, 0.68703, 0.58339, 0.51036, 0.49506, 0.27186, 0.37728, 0.0157, 0.00922, 0, 0, 0.2807 ], + "triangles": [ 11, 10, 9, 11, 9, 8, 0, 11, 8, 0, 8, 7, 1, 0, 7, 2, 1, 7, 2, 7, 6, 3, 2, 6, 3, 6, 5, 3, 5, 4 ], + "vertices": [ 10.89, -19.51, 22.78, -19.87999, 39.63, -12.09, 47.25999, 2.4, 55.34, 22.57999, 46.84, 21.25, 32.84, 14.47, 20.36, 10.52999, 5.26999, 10.52999, -11.31, 9.35999, -18.48999, -9.18, -2.67, -14.97999 ], + "hull": 12, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22 ], + "width": 54, + "height": 60 + } + }, + "hairL2": { + "hairL2": { + "type": "mesh", + "uvs": [ 0, 0.35686, 0.08751, 0.53469, 0.27039, 0.74739, 0.4906, 0.8764, 0.74067, 0.94614, 0.95342, 1, 1, 0.9287, 0.82279, 0.78574, 0.6399, 0.59048, 0.51673, 0.35686, 0.37117, 0.09883, 0.26666, 0, 0, 0 ], + "triangles": [ 6, 5, 7, 5, 4, 7, 4, 3, 7, 3, 8, 7, 3, 2, 8, 2, 9, 8, 2, 1, 9, 1, 0, 9, 0, 10, 9, 0, 11, 10, 0, 12, 11 ], + "vertices": [ 2, 16, 3.29999, -16.42, 0.88765, 17, -37.52999, -4.84, 0.11234, 2, 16, 17.98999, -18.75, 0.67842, 17, -24.2, -11.43999, 0.32157, 2, 16, 38.63999, -16.93, 0.38403, 17, -3.94, -15.85, 0.61596, 2, 16, 55.47, -9.35999, 0.14944, 17, 14.38, -13.64, 0.85054, 2, 16, 69.73999, 2.45, 0.02565, 17, 31.52, -6.59999, 0.97434, 1, 17, 45.83, -0.28, 1, 2, 16, 78.86, 18.5, 0.03593, 17, 45, 6, 0.96404, 2, 16, 62.84, 14.06999, 0.18298, 17, 28.37999, 6.53999, 0.81699, 2, 16, 43.27999, 11.5, 0.44115, 17, 8.96, 9.90999, 0.55883, 2, 16, 23.65999, 14.09, 0.73855, 17, -9, 18.21999, 0.26144, 2, 16, 1.61, 16.37999, 0.92483, 17, -29.36, 26.96999, 0.07515, 2, 16, -8.73999, 14.36999, 0.99967, 17, -39.86, 28.14999, 3.1E-4, 2, 16, -19.25, -1.37, 0.98638, 17, -54.58, 16.23999, 0.0136 ], + "hull": 13, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24 ], + "width": 71, + "height": 76 + } + }, + "hairM": { + "hairM": { + "type": "mesh", + "uvs": [ 0.12393, 0.10157, 0.05237, 0.3157, 0.00704, 0.53875, 0, 0.87482, 0.03805, 1, 0.10007, 1, 0.3577, 0.91645, 0.49881, 0.9119, 0.6344, 0.90753, 0.91588, 0.95512, 1, 0.97891, 0.94689, 0.76775, 0.87056, 0.5566, 0.86817, 0.33949, 0.83955, 0.09562, 0.67496, 0, 0.29568, 0, 0.50907, 0.24347, 0.34406, 0.60578, 0.22208, 0.30093, 0.67769, 0.45813, 0.58656, 0.67825, 0.16063, 0.73851 ], + "triangles": [ 9, 11, 10, 9, 8, 11, 7, 21, 8, 8, 21, 11, 6, 5, 22, 22, 5, 3, 5, 4, 3, 7, 6, 18, 6, 22, 18, 3, 2, 22, 7, 18, 21, 21, 12, 11, 22, 2, 18, 19, 2, 1, 2, 19, 18, 21, 20, 12, 21, 18, 20, 18, 17, 20, 18, 19, 17, 20, 13, 12, 13, 20, 17, 13, 17, 14, 14, 17, 15, 1, 0, 19, 19, 16, 17, 19, 0, 16, 17, 16, 15 ], + "vertices": [ 1, 18, -2.05999, -32.41999, 1, 1, 18, 14.88, -38.04, 1, 2, 18, 32.34, -41.09, 0.66666, 20, 16.64999, -10.85, 0.33333, 2, 18, 58.18999, -39.83, 0.33452, 20, 42.20999, -6.71, 0.66545, 3, 18, 67.52999, -35.45999, 0.16543, 20, 51, -1.33, 0.82718, 19, 13.17, -79.12, 0.00736, 3, 18, 67.08, -29.52, 0.14636, 20, 49.88999, 4.51, 0.76915, 19, 15.98999, -73.87, 0.08446, 3, 18, 58.81999, -5.34, 0.23614, 20, 38.97999, 27.62, 0.49129, 19, 22.04, -49.04999, 0.27254, 3, 18, 57.45, 8.13, 0.22896, 20, 36.11999, 40.86999, 0.35341, 19, 28.14999, -36.95, 0.4176, 3, 18, 56.13999, 21.09, 0.22205, 20, 33.36999, 53.59999, 0.22093, 19, 34.02, -25.32999, 0.55699, 3, 18, 57.77, 48.31, 0.13017, 20, 31.95, 80.83, 0.05674, 19, 50.04999, -3.26999, 0.81306, 3, 18, 58.99, 56.5, 0.15029, 20, 32.25, 89.09999, 0.00246, 19, 55.49, 2.97, 0.84722, 2, 18, 43.15999, 50.18999, 0.33346, 19, 38.75999, 6.17999, 0.66651, 2, 18, 27.5, 41.66999, 0.66666, 19, 20.96999, 7.42999, 0.33333, 1, 18, 10.85, 40.18999, 1, 1, 18, -7.65999, 36.04, 1, 1, 18, -13.81999, 19.72999, 1, 1, 18, -11.1, -16.56999, 1, 1, 18, 6.05, 5.26, 1, 3, 18, 35.06, -8.43999, 0.61317, 20, 15.72, 21.88999, 0.38471, 19, 0.36, -38.86999, 0.00209, 1, 18, 12.52999, -21.87999, 1, 1, 18, 21.31999, 22.63999, 1, 3, 18, 38.88, 15.18, 0.59022, 20, 16.87999, 45.79999, 0.17654, 19, 16.29999, -21.01, 0.2332, 3, 18, 46.56999, -25.22999, 0.47519, 20, 29.03, 6.48, 0.52381, 19, 1.00999, -59.22, 9.8E-4 ], + "hull": 17, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 0, 12, 14, 14, 16 ], + "width": 96, + "height": 77 + } + }, + "hairM blob": { + "hairM blob": { + "type": "mesh", + "uvs": [ 0.69346, 0, 0.31103, 0.03982, 0, 0.45391, 0.05436, 1, 0.4984, 0.99804, 1, 0.5292, 0.95526, 0.08774 ], + "triangles": [ 5, 4, 1, 0, 5, 1, 5, 0, 6, 2, 1, 4, 3, 2, 4 ], + "vertices": [ -2.83999, -14.31999, -0.18999, -25.62999, 19.07999, -33.54, 43.45999, -30.06999, 42.36999, -16.79, 20.20999, -3.36999, 0.5, -6.19 ], + "hull": 7, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 0, 12 ], + "width": 30, + "height": 45 + } + }, + "hairM blobS": { + "hairM blobS": { + "type": "mesh", + "uvs": [ 0.94868, 0.00232, 0.40005, 0, 0, 0.64141, 0.13055, 1, 0.6118, 0.94556, 1, 0.30261 ], + "triangles": [ 5, 4, 1, 5, 1, 0, 2, 1, 4, 3, 2, 4 ], + "vertices": [ 6.32999, 5.59, 6.94, -3.16, 20.20999, -8.57999, 27.20999, -5.96, 25.54, 1.62, 12.26, 6.84999 ], + "hull": 6, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 0, 10 ], + "width": 16, + "height": 20 + } + }, + "hairR": { + "hairR": { + "type": "mesh", + "uvs": [ 0.32525, 0.09815, 0.12488, 0.25779, 0, 0.48767, 0.02147, 0.73351, 0.11842, 0.89315, 0.28, 1, 0.48037, 1, 0.41574, 0.88038, 0.40281, 0.71435, 0.66781, 0.45893, 0.84878, 0.26737, 1, 0.15562, 0.99744, 0, 0.64842, 0 ], + "triangles": [ 10, 13, 12, 10, 12, 11, 9, 13, 10, 0, 13, 9, 9, 1, 0, 8, 1, 9, 2, 1, 8, 3, 2, 8, 4, 3, 8, 4, 8, 7, 5, 4, 7, 5, 7, 6 ], + "vertices": [ -9.09, -6.80999, 5.36, -12.64, 25.03, -14.42, 44.97999, -10.06, 57.36, -3.88, 64.95999, 4.15999, 63.56, 12.25, 54.22999, 7.94, 40.74, 5.05999, 18, 12.14, 1.05999, 16.72999, -9.13, 21.25, -21.84, 18.93, -19.38999, 4.84 ], + "hull": 14, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 0, 26 ], + "width": 41, + "height": 83 + } + }, + "hairR2": { + "hairR2": { + "type": "mesh", + "uvs": [ 0.89239, 0, 0.74016, 0.07452, 0.55691, 0.2267, 0.44133, 0.29491, 0.29192, 0.33689, 0.16505, 0.33427, 0.00718, 0.31328, 0, 0.41036, 0.15378, 0.44972, 0.25245, 0.47333, 0.35394, 0.46546, 0.43875, 0.42724, 0.43287, 0.45234, 0.37085, 0.60714, 0.3483, 0.78818, 0.38213, 0.9666, 0.49207, 0.9666, 0.66686, 0.48907, 1, 0.14536, 1, 0, 0.60766, 0.30016, 0.51389, 0.3818 ], + "triangles": [ 11, 3, 21, 7, 6, 5, 11, 4, 3, 8, 7, 5, 11, 10, 4, 9, 5, 4, 9, 4, 10, 8, 5, 9, 21, 3, 2, 12, 11, 21, 0, 19, 18, 20, 2, 1, 18, 17, 20, 21, 20, 17, 1, 0, 18, 18, 20, 1, 12, 21, 17, 13, 12, 17, 17, 14, 13, 16, 15, 14, 17, 16, 14, 21, 2, 20 ], + "vertices": [ 1, 22, -2.69, -5.03, 1, 2, 22, 11.44999, -12.85, 0.97293, 23, -22.59, -25.82999, 0.02706, 2, 22, 33.79, -19.13999, 0.26298, 23, -3.54999, -12.55, 0.73699, 1, 23, 8.47999, -7.17999, 1, 1, 23, 24.95999, -5.76999, 1, 1, 23, 37.43, -7.71, 1, 1, 23, 51.97, -11.39, 1, 1, 23, 53.68, -1.71, 1, 1, 23, 39.72, 3.76999, 1, 1, 23, 30.54999, 7.25, 1, 1, 23, 19.89999, 8.15999, 1, 2, 22, 56.79, -17.09, 0.18535, 23, 9.47, 6.51, 0.81462, 1, 22, 59.2, -16.03, 1, 1, 22, 75.47, -12.31, 1, 2, 22, 91.91, -4.03999, 0.99835, 23, 21.69, 41.93999, 0.00164, 1, 22, 105.23, 8.51, 1, 1, 22, 99.55, 17.13999, 1, 1, 22, 50.22, 4.38, 1, 2, 22, 4.01, 11.47999, 0.99998, 23, -46.11999, -16.11, 0, 2, 22, -8.25, 3.41, 1, 23, -47.68, -30.71999, 0, 1, 22, 37.33, -10.73999, 1, 1, 22, 49.06999, -13.57999, 1 ], + "hull": 20, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 0, 38, 40, 4, 20, 22, 24, 42, 42, 40, 22, 42, 22, 24 ], + "width": 94, + "height": 101 + } + }, + "hairSide": { + "hairSide": { + "type": "mesh", + "uvs": [ 0.86288, 0.88915, 0.22757, 0.9212, 0.00508, 0.04663, 0.9922, 0.44959 ], + "triangles": [ 3, 1, 2, 0, 1, 3 ], + "vertices": [ -1, 7.55999, 29.23999, 11.53999, 42.06999, -8.18999, -6.05999, -3.56999 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 48, + "height": 24 + } + }, + "head": { + "head": { + "type": "mesh", + "uvs": [ 0.24206, 0, 0, 0.45222, 9.0E-5, 0.80446, 0.28242, 1, 0.64097, 1, 0.93277, 0.93463, 0.98244, 0.80292, 0.99999, 0.41699, 0.88777, 0.16274, 0.64718, 0 ], + "triangles": [ 9, 8, 1, 3, 2, 1, 7, 6, 3, 9, 1, 0, 1, 8, 7, 6, 4, 3, 1, 7, 3, 5, 4, 6 ], + "vertices": [ 193.43, 73.88999, 83.29, 107.23, 5.5, 92.09999, -25.71999, 22.18, -10.53999, -55.95, 16.25, -116.73, 47.43999, -121.91, 133.41998, -109.16, 184.82, -73.8, 210.58, -14.38 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "width": 222, + "height": 225 + } + }, + "indexL": { + "indexL": { + "type": "mesh", + "uvs": [ 0.27265, 0.05076, 0.07156, 0.21655, 0.02393, 0.36472, 0.11389, 0.73513, 0.35202, 0.91152, 0.65893, 0.97855, 0.89177, 0.86566, 0.98173, 0.63283, 0.92352, 0.25888, 0.8071, 0.08955, 0.60073, 0 ], + "triangles": [ 2, 1, 0, 0, 8, 2, 10, 8, 0, 9, 8, 10, 3, 2, 8, 3, 8, 7, 7, 4, 3, 7, 5, 4, 6, 5, 7 ], + "vertices": [ 26.34, 4.59999, 20.97999, 10.1, 15.81999, 11.85999, 2.32999, 11.3, -4.65, 6.38, -7.92, -0.63999, -4.53999, -6.67, 3.50999, -9.81, 17.04999, -10.02, 23.43, -7.96999, 27.21999, -3.43 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20, 4, 16, 6, 14 ], + "width": 24, + "height": 36 + } + }, + "indexR": { + "indexR": { + "type": "mesh", + "uvs": [ 0.36032, 0, 0.28713, 0.09647, 0.17785, 0.24051, 0, 0.52251, 0.07832, 0.85151, 0.28291, 0.93208, 0.52068, 0.93208, 0.68103, 0.67023, 0.84138, 0.6098, 0.94644, 0.3748, 0.94091, 0.17337, 0.70867, 0.05251, 0.45985, 0, 0.50962, 0.38823 ], + "triangles": [ 13, 12, 11, 1, 0, 12, 13, 1, 12, 11, 9, 13, 9, 11, 10, 8, 13, 9, 7, 13, 8, 3, 5, 4, 2, 1, 13, 13, 3, 2, 13, 5, 3, 5, 13, 7, 6, 5, 7 ], + "vertices": [ 9.19999, -14.52, 12.53999, -12.98999, 17.53, -10.71, 26.15999, -5.76999, 27.28, 3.74, 21.73999, 8.52, 14.27999, 11.64999, 6.42, 7, 0.73, 7.55, -5.09999, 2.86999, -7.11, -2.39, -1.13999, -8.56999, 6.07999, -13.21, 8.72999, -2.52999 ], + "hull": 13, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24, 0, 2, 2, 4 ], + "width": 34, + "height": 28 + } + }, + "inmouth": { + "inmouth": { "x": 1.53, "y": 3.93, "rotation": -1.02, "width": 46, "height": 55 } + }, + "irisL": { + "irisL": { + "type": "mesh", + "uvs": [ 0.50042, 8.0E-5, 0.26704, 0.08083, 0.08101, 0.25455, 0.00321, 0.46742, 0.08777, 0.70966, 0.28057, 0.92987, 0.48689, 0.99838, 0.70336, 0.92987, 0.92998, 0.69987, 1, 0.45029, 0.92659, 0.24721, 0.75748, 0.07349 ], + "triangles": [ 8, 10, 9, 4, 2, 1, 3, 2, 4, 8, 4, 1, 11, 1, 0, 10, 1, 11, 8, 1, 10, 7, 5, 4, 8, 7, 4, 6, 5, 7 ], + "vertices": [ 0.86, 22.87999, -7.07, 19.07999, -13.39, 10.92, -16.04, 0.91, -13.15999, -10.46, -6.61, -20.80999, 0.4, -24.03, 7.76, -20.80999, 15.46, -10, 17.84, 1.72, 15.35, 11.26, 9.6, 19.43 ], + "hull": 12, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22 ], + "width": 34, + "height": 47 + } + }, + "irisL flatspec": { + "irisL flatspec": { + "type": "mesh", + "uvs": [ 0.86335, 0.82292, 0.10561, 0.78759, 0.06831, 0.15344, 0.96892, 0.16522 ], + "triangles": [ 0, 1, 2, 3, 0, 2 ], + "vertices": [ 16.54, -10.97, 2.14, -10.61999, 1.42999, -4.28, 18.54, -4.4 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 19, + "height": 10 + } + }, + "irisL spec": { + "irisL spec": { + "type": "mesh", + "uvs": [ 0.86251, 0.79041, 0.11006, 0.75378, 0.25366, 1.0E-5, 0.96942, 0.04714 ], + "triangles": [ 0, 2, 3, 1, 2, 0 ], + "vertices": [ 0.56999, 3.49, -12.97, 4.26, -10.38, 20.09, 2.49, 19.1 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 18, + "height": 21 + } + }, + "irisR": { + "irisR": { + "type": "mesh", + "uvs": [ 0.52601, 0.01062, 0.25542, 0.08402, 0.08293, 0.25774, 0.00851, 0.4804, 0.09307, 0.70306, 0.26895, 0.91104, 0.52601, 1, 0.76616, 0.91593, 0.91498, 0.71285, 1, 0.47551, 0.93528, 0.24796, 0.75939, 0.07668 ], + "triangles": [ 4, 2, 1, 3, 2, 4, 8, 11, 10, 8, 10, 9, 1, 8, 4, 4, 8, 5, 1, 0, 8, 11, 8, 0, 7, 5, 8, 6, 5, 7 ], + "vertices": [ -0.1, 22.30999, -9.3, 18.86, -15.17, 10.68999, -17.7, 0.23, -14.81999, -10.22999, -8.84, -20, -0.1, -24.18, 8.05, -20.22999, 13.10999, -10.68999, 16, 0.46, 13.8, 11.14999, 7.82, 19.2 ], + "hull": 12, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22 ], + "width": 34, + "height": 47 + } + }, + "irisR flatspec": { + "irisR flatspec": { + "type": "mesh", + "uvs": [ 0.8498, 0.80682, 0.06439, 0.76397, 0.07509, 0.12877, 0.94096, 0.24675 ], + "triangles": [ 1, 2, 3, 0, 1, 3 ], + "vertices": [ 12.69999, -6.86, -4.57, -6.38999, -4.32999, 0.58999, 14.69999, -0.69999 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 22, + "height": 11 + } + }, + "irisR spec": { + "irisR spec": { + "type": "mesh", + "uvs": [ 0.83035, 0.9236, 0.05166, 0.85421, 0.20652, 0.09722, 0.95572, 0.11107 ], + "triangles": [ 0, 2, 3, 1, 2, 0 ], + "vertices": [ -1.1, 3.50999, -13.56, 4.69, -11.07999, 17.55999, 0.89999, 17.31999 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 16, + "height": 17 + } + }, + "middleL": { + "middleL": { + "type": "mesh", + "uvs": [ 0.56585, 0.02295, 0.30716, 0.12726, 0.15283, 0.2387, 0.01668, 0.58288, 0.0666, 0.7861, 0.25268, 0.94671, 0.55676, 0.95654, 0.83814, 0.76316, 0.95159, 0.48459, 0.93346, 0.24203, 0.8382, 0.07484 ], + "triangles": [ 0, 10, 9, 8, 0, 9, 1, 0, 8, 2, 1, 8, 7, 2, 8, 3, 2, 7, 5, 4, 3, 3, 6, 5, 7, 6, 3 ], + "vertices": [ 28.67, 3.85999, 23.09, 9.18, 18.06999, 11.81999, 5.19, 11.53999, -1.40999, 8.14, -5.5, 1.79999, -3.5, -5.84, 5.3, -10.77, 15.76, -10.61999, 23.95999, -7.59, 28.97999, -3.45 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20, 4, 16, 6, 14 ], + "width": 26, + "height": 36 + } + }, + "middleR": { + "middleR": { + "type": "mesh", + "uvs": [ 0.58054, 0.02406, 0.33431, 0.17106, 0.06666, 0.32506, 0.00778, 0.54906, 0.07737, 0.82906, 0.29148, 1, 0.53772, 0.86406, 0.66619, 0.82206, 0.84284, 0.85006, 0.97131, 0.64706, 0.98736, 0.31106, 0.60322, 0.46044, 0.33022, 0.59344 ], + "triangles": [ 11, 0, 10, 1, 0, 11, 12, 2, 1, 12, 1, 11, 3, 2, 12, 9, 11, 10, 7, 11, 9, 6, 12, 11, 4, 3, 12, 8, 7, 9, 7, 6, 11, 5, 4, 12, 6, 5, 12 ], + "vertices": [ 4.36999, -13.18999, 13.28999, -10.93, 22.95999, -8.60999, 25.96999, -3.24, 24.94, 4.34, 18.56999, 10.01, 9.69999, 8.02999, 5.21, 7.73999, -0.56, 9.52999, -5.8, 5.11999, -7.9, -3.36999, 5.63999, -1.88999, 15.39, -0.14 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20, 22, 24 ], + "width": 34, + "height": 26 + } + }, + "mouth": { + "mouth": { "x": 1.05, "y": 2.98, "rotation": -1.02, "width": 89, "height": 83 } + }, + "nose": { + "nose": { + "type": "mesh", + "uvs": [ 1, 0.59333, 0.31942, 0.98575, 0.00201, 0.51279, 0.81751, 0 ], + "triangles": [ 2, 3, 0, 1, 2, 0 ], + "vertices": [ 66.01999, 9.53999, 60.74, 16.13999, 64.72, 20.46999, 71.45999, 12.64999 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 11, + "height": 10 + } + }, + "pinkyL": { + "pinkyL": { + "type": "mesh", + "uvs": [ 0.3883, 0.02395, 0.06918, 0.31172, 0.00906, 0.71872, 0.32818, 1, 0.79067, 0.83383, 1, 0.46794, 0.83692, 0.09383 ], + "triangles": [ 5, 4, 0, 5, 0, 6, 1, 0, 4, 3, 2, 1, 4, 3, 1 ], + "vertices": [ 10.27999, 12, -0.46, 10.10999, -8, 1.99, -6.15999, -8.63, 5.46999, -11.39999, 15.28999, -6.26, 17.95999, 4.23 ], + "hull": 7, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 0, 12 ], + "width": 24, + "height": 27 + } + }, + "pinkyR": { + "middleR": { + "type": "mesh", + "uvs": [ 0.53113, 0.03869, 0.33308, 0.19269, 0.10825, 0.29069, 0, 0.57768, 0.04402, 0.78068, 0.18319, 0.91368, 0.39196, 0.98368, 0.59537, 0.83668, 0.77737, 0.86468, 0.91119, 0.73868, 0.99684, 0.47968, 0.91654, 0.24869, 0.76666, 0.10869, 0.52043, 0.52868 ], + "triangles": [ 13, 1, 0, 13, 0, 12, 13, 12, 11, 13, 11, 10, 9, 13, 10, 13, 4, 3, 7, 13, 9, 8, 7, 9, 3, 2, 13, 13, 2, 1, 6, 5, 13, 5, 4, 13, 7, 6, 13 ], + "vertices": [ 7.25, -13.23999, 14.53999, -10.35999, 22.48999, -9.06999, 27.30999, -2.28999, 26.68, 3.15, 22.55999, 7.32, 15.84, 10.25, 8.39999, 7.57999, 2.41, 9.28999, -2.59999, 6.78, -6.55, 0.58999, -4.80999, -5.76, -0.36, -10.17, 9.64, -0.72 ], + "hull": 13, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24 ], + "width": 34, + "height": 26 + } + }, + "pony1": { + "pony1": { + "type": "mesh", + "uvs": [ 0, 0.13329, 0.13824, 0.27986, 0.24274, 0.41991, 0.32824, 0.58277, 0.33792, 0.66575, 0.34724, 0.74563, 0.34724, 0.81699, 0.34724, 0.90197, 0.32824, 0.99969, 0.45, 0.98684, 0.48609, 0.98303, 0.63699, 0.96711, 0.83259, 0.95658, 1, 0.94757, 1, 0.86614, 0.96762, 0.78148, 0.93149, 0.687, 0.8884, 0.60724, 0.83649, 0.51111, 0.74295, 0.41244, 0.65124, 0.31569, 0.50399, 0.19191, 0.29024, 0.0486, 0.17624, 0, 0.00524, 0, 0.67788, 0.7395, 0.59398, 0.54813, 0.47976, 0.69723, 0.8721, 0.85824, 0.5766, 0.86607, 0.50503, 0.80776, 0.47478, 0.81588 ], + "triangles": [ 12, 11, 25, 11, 29, 25, 30, 29, 10, 12, 28, 13, 12, 25, 28, 28, 14, 13, 28, 15, 14, 28, 16, 15, 28, 25, 16, 25, 17, 16, 29, 30, 25, 10, 29, 11, 27, 26, 25, 8, 7, 9, 10, 9, 31, 9, 7, 31, 30, 10, 31, 7, 6, 31, 6, 5, 31, 30, 31, 27, 31, 5, 27, 30, 27, 25, 5, 4, 27, 27, 4, 3, 25, 18, 17, 18, 26, 19, 18, 25, 26, 26, 27, 3, 3, 2, 26, 2, 21, 26, 26, 20, 19, 26, 21, 20, 2, 1, 21, 1, 0, 23, 1, 22, 21, 1, 23, 22, 23, 0, 24 ], + "vertices": [ 1, 42, -2.75, -10.56999, 1, 1, 42, 15.34, -13.42, 1, 2, 42, 31.31999, -17.62, 0.18388, 43, 5.57, -15.61999, 0.8161, 2, 43, 23.6, -17.94, 0.66187, 44, 0.72, -10.56, 0.33812, 2, 43, 31.67, -21.29, 0.49237, 44, 9.43999, -9.97, 0.50761, 2, 43, 39.43999, -24.52, 0.33096, 44, 17.84, -9.39999, 0.66903, 2, 43, 46.11, -27.94, 0.30663, 44, 25.32999, -9.48999, 0.69335, 1, 44, 34.25999, -9.6, 1, 1, 44, 44.50999, -11.09, 1, 1, 44, 43.25999, -2.30999, 1, 3, 43, 66.18, -27, 0.00552, 44, 42.88999, 0.28999, 0.30346, 45, 33.86999, -32.09, 0.69099, 2, 44, 41.34999, 11.18, 0.22585, 45, 36.79, -21.5, 0.77414, 2, 44, 40.40999, 25.27, 0.09713, 45, 41.54999, -8.19999, 0.90285, 1, 45, 45.63, 3.18, 1, 1, 45, 37.83, 6.67999, 1, 2, 43, 63.15999, 13.51, 0.27285, 45, 28.77, 8.19999, 0.72712, 2, 43, 53.15, 15.72, 0.32969, 45, 18.64999, 9.89999, 0.6703, 2, 43, 44.27999, 16.78, 0.4778, 45, 9.73999, 10.5, 0.52218, 2, 43, 33.59, 18.04999, 0.65925, 45, -0.99, 11.22999, 0.34073, 2, 43, 21.29999, 16.79, 0.82889, 45, -13.19999, 9.32999, 0.17109, 2, 42, 42.77999, 11.59, 0.18399, 43, 9.23999, 15.53999, 0.81599, 1, 42, 26.02, 12.35, 1, 1, 42, 4.55, 10.92, 1, 1, 42, -4.71999, 8.21, 1, 1, 42, -12.93, -0.95999, 1, 3, 43, 49.72, -3.03999, 0.21698, 44, 17.47999, 14.40999, 0.57976, 45, 16.19, -9.01, 0.20322, 1, 43, 29.09, 0.74, 1, 3, 43, 39.27, -13.71, 0.04696, 44, 12.86999, 0.18999, 0.83092, 45, 6.3, -20.2, 0.12207, 2, 44, 30.11, 28.23999, 0.06201, 45, 33.29999, -1.36, 0.93797, 2, 44, 30.68, 6.94999, 0.24265, 45, 25.32999, -21.11, 0.75734, 3, 43, 50.43, -17.38999, 0.00887, 44, 24.5, 1.87, 0.39098, 45, 17.63999, -23.29999, 0.60012, 3, 43, 50.18999, -19.71999, 0.02759, 44, 25.32999, -0.31, 0.91781, 45, 17.52, -25.63999, 0.05457 ], + "hull": 25, + "edges": [ 0, 2, 2, 4, 4, 6, 14, 16, 26, 28, 40, 42, 42, 44, 44, 46, 46, 48, 0, 48, 50, 52, 32, 34, 34, 36, 6, 8, 8, 10, 10, 12, 12, 14, 28, 30, 30, 32, 36, 38, 38, 40, 22, 24, 24, 26, 20, 22, 26, 56, 20, 60, 60, 54, 54, 62, 16, 18, 18, 20, 62, 18 ], + "width": 72, + "height": 105 + } + }, + "pony2": { + "pony2": { + "type": "mesh", + "uvs": [ 0, 0.01225, 0, 0.16059, 0.07048, 0.25835, 0.10916, 0.31199, 0.14855, 0.36662, 0.20193, 0.43853, 0.24878, 0.50163, 0.28646, 0.55239, 0.31721, 0.5938, 0.34738, 0.63445, 0.38869, 0.68437, 0.42486, 0.7281, 0.47502, 0.78874, 0.51441, 0.83635, 0.68143, 1, 0.81664, 0.95172, 1, 0.88168, 1, 0.79515, 0.83255, 0.65917, 0.76214, 0.61585, 0.70529, 0.58088, 0.63899, 0.54009, 0.57803, 0.50259, 0.54048, 0.4656, 0.49529, 0.42107, 0.44368, 0.37023, 0.39267, 0.31997, 0.33545, 0.2636, 0.30394, 0.21751, 0.27183, 0.17054, 0.20024, 0.06582, 0.14457, 0.00401, 0.55254, 0.65391, 0.67684, 0.74492 ], + "triangles": [ 20, 32, 21, 33, 20, 19, 33, 32, 20, 15, 18, 17, 18, 33, 19, 16, 15, 17, 15, 33, 18, 32, 22, 21, 12, 11, 32, 13, 12, 32, 33, 13, 32, 14, 33, 15, 13, 33, 14, 11, 10, 32, 1, 0, 31, 1, 31, 30, 2, 1, 30, 2, 30, 29, 3, 2, 29, 3, 29, 28, 4, 3, 28, 4, 28, 27, 5, 4, 27, 5, 27, 26, 6, 5, 26, 6, 26, 25, 7, 6, 25, 7, 25, 24, 8, 7, 24, 23, 9, 8, 23, 8, 24, 9, 23, 22, 32, 9, 22, 10, 9, 32 ], + "vertices": [ 1, 46, -8.14, 1.04999, 1, 1, 46, 0.99, -7.17999, 1, 1, 46, 11.06999, -8.10999, 1, 2, 47, -9.35, -8, 0.20667, 46, 16.61, -8.63, 0.79332, 2, 47, -3.74, -8.72999, 0.41714, 46, 22.23999, -9.14999, 0.58284, 2, 47, 3.73, -9.59, 0.72759, 46, 29.75, -9.72999, 0.27239, 1, 47, 10.3, -10.34, 1, 3, 47, 15.57999, -10.94999, 0.94603, 48, -13.96, -12.11999, 0.04289, 49, -14.81, -8.14, 0.01104, 3, 47, 19.88999, -11.43999, 0.85611, 48, -9.63, -11.92, 0.10558, 49, -10.77999, -9.76, 0.03829, 3, 47, 24.12, -11.93, 0.71141, 48, -5.38, -11.72, 0.19561, 49, -6.84, -11.35, 0.09295, 3, 47, 29.55999, -12.26, 0.5223, 48, 0.03999, -11.18, 0.43939, 49, -1.66999, -13.11999, 0.03829, 3, 47, 34.33, -12.55, 0.31189, 48, 4.8, -10.71, 0.67703, 49, 2.83999, -14.67, 0.01104, 3, 47, 40.95, -12.96, 0.13584, 48, 11.39999, -10.05, 0.86242, 49, 9.10999, -16.80999, 0.0017, 1, 48, 16.57999, -9.53999, 1, 1, 48, 35.93999, -5.53, 1, 2, 48, 39.31, 6.28, 0.50398, 49, 41.29, -13.55, 0.49599, 1, 49, 51.93, -0.54, 1, 1, 49, 48.27999, 5.63999, 1, 1, 49, 30.13999, 8.05, 1, 3, 47, 47.84, 14.73999, 0.10666, 48, 13.77, 18.39999, 6.6E-4, 49, 23.1, 8.07999, 0.89266, 3, 47, 42.34999, 13.25, 0.27184, 48, 8.59, 16.04999, 0.00626, 49, 17.42, 8.1, 0.72188, 3, 47, 35.95, 11.52, 0.49123, 48, 2.54999, 13.31999, 0.02538, 49, 10.77999, 8.11999, 0.48335, 3, 47, 30.06999, 9.92, 0.69315, 48, -2.99, 10.8, 0.06975, 49, 4.69, 8.14, 0.23707, 3, 47, 25.62, 9.73999, 0.82519, 48, -7.36, 9.90999, 0.02538, 49, 0.34999, 9.14, 0.1494, 4, 47, 20.26, 9.52, 0.89665, 46, 45.56999, 9.96, 0.01837, 48, -12.61999, 8.84, 0.00626, 49, -4.86999, 10.35, 0.07868, 4, 47, 14.14, 9.27999, 0.89544, 46, 39.47, 9.48999, 0.07349, 48, -18.62, 7.61999, 6.6E-4, 49, -10.82999, 11.73999, 0.03036, 2, 47, 8.09, 9.02999, 0.83459, 46, 33.43, 9.02999, 0.16538, 2, 47, 1.30999, 8.76, 0.64908, 46, 26.65999, 8.51, 0.35089, 2, 47, -3.31999, 9.47, 0.3443, 46, 22, 9.06, 0.65569, 2, 47, -8.03999, 10.19999, 0.0337, 46, 17.26, 9.60999, 0.96628, 1, 46, 6.67999, 10.85999, 1, 1, 46, -0.33, 10.73999, 1, 2, 48, 6.03999, 1.80999, 0.51199, 49, 9.17, -3.78999, 0.488, 3, 47, 50.41999, 2.01999, 0.00322, 48, 18.35, 6.25, 0.48682, 49, 22.21999, -4.86999, 0.50994 ], + "hull": 32, + "edges": [ 0, 2, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 60, 62, 0, 62, 2, 4, 58, 60, 18, 20, 20, 22, 22, 24, 24, 26, 40, 42, 42, 44, 36, 38, 38, 40, 66, 64, 54, 56, 56, 58, 50, 52, 52, 54, 8, 10, 10, 12, 4, 6, 6, 8, 12, 14, 48, 50, 14, 16, 16, 18, 44, 46, 46, 48, 44, 18 ], + "width": 86, + "height": 83 + } + }, + "ringL": { + "ringL": { + "type": "mesh", + "uvs": [ 0.53521, 0.0222, 0.95301, 0.12326, 0.88955, 0.66716, 0.45407, 1, 0.06137, 0.87066, 0.08698, 0.36747 ], + "triangles": [ 2, 0, 1, 5, 0, 2, 3, 4, 5, 2, 3, 5 ], + "vertices": [ 19.25, 6.34, 22.12, -4.55999, 7.19999, -11.38, -7.11999, -6.65, -8.93, 4.11, 4.42, 11.15999 ], + "hull": 6, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 0, 10 ], + "width": 26, + "height": 30 + } + }, + "ringR": { + "indexR": { + "type": "mesh", + "uvs": [ 0.34216, 0.00754, 0.1334, 0.26103, 0.01028, 0.43003, 0.03705, 0.81353, 0.19228, 0.95003, 0.45993, 0.99553, 0.71151, 0.69003, 0.83998, 0.61853, 0.9631, 0.31953, 0.97381, 0.15703, 0.68475, 0.05303, 0.50275, 0.01403, 0.53057, 0.38289, 0.35393, 0.59089 ], + "triangles": [ 8, 10, 9, 12, 11, 10, 12, 10, 8, 0, 12, 1, 12, 0, 11, 13, 1, 12, 2, 1, 13, 7, 12, 8, 6, 12, 7, 13, 12, 6, 3, 2, 13, 4, 3, 13, 5, 13, 6, 4, 13, 5 ], + "vertices": [ 7.28, -13.60999, 16.75, -10.26, 22.56999, -7.78999, 26.37, 2.27999, 23.25, 8, 15.57999, 13.06999, 4.17999, 9.02999, -0.62, 9.10999, -8, 3.34999, -10.28999, -0.58999, -2.67, -7.44999, 2.43, -11.1, 6.03, -1.37, 13.96, 1.28999 ], + "hull": 12, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22, 26, 24 ], + "width": 34, + "height": 28 + } + }, + "rotate": { + "rotate": { + "type": "mesh", + "color": "f0100cff", + "uvs": [ 0.48079, 0, 0.34251, 0.15285, 0, 0.22277, 0, 0.75692, 0.29851, 1, 0.66936, 1, 1, 0.77929, 1, 0.34582, 0.60965, 0.13328 ], + "triangles": [ 1, 0, 8, 3, 2, 1, 8, 7, 6, 4, 3, 1, 5, 4, 1, 1, 8, 5, 6, 5, 8 ], + "vertices": [ 65.26999, 1.17999, 47.24, 15.69999, 38.99, 51.66999, -24.03, 51.66999, -52.72, 20.31999, -52.72, -18.61, -26.67, -53.31999, 24.46999, -53.31999, 49.54999, -12.34 ], + "hull": 9, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 0, 16 ], + "width": 105, + "height": 118 + } + }, + "strap": { + "strap": { + "type": "mesh", + "uvs": [ 0.34969, 0, 0.20076, 0.08266, 0.03528, 0.21905, 0.02424, 0.46741, 0.10147, 0.76869, 0, 0.82773, 0, 0.93562, 0.23386, 1, 0.83511, 1, 1, 0.87862, 1, 0.82773, 0.64757, 0.72187, 0.4545, 0.43891, 0.47657, 0.24348, 0.64205, 0.08673, 0.66963, 0.01752 ], + "triangles": [ 14, 0, 15, 13, 0, 14, 1, 0, 13, 13, 2, 1, 12, 2, 13, 4, 3, 12, 3, 2, 12, 8, 11, 10, 6, 5, 4, 6, 4, 7, 9, 8, 10, 7, 11, 8, 4, 12, 11, 7, 4, 11 ], + "vertices": [ 1, 56, -7.67, -10.93, 1, 1, 56, 8.72, -14, 1, 2, 5, 58.56999, 20.03, 0.02146, 56, 33.81999, -14.47999, 0.97852, 3, 55, 69.27999, 10.56999, 0.00935, 5, 16.86, 21.19, 0.97687, 56, 72.48999, 1.2, 0.01375, 1, 55, 18.94, 17.69, 1, 1, 55, 10.76, 26.12, 1, 1, 55, -6.86, 30.34, 1, 1, 55, -20.75, 18.75, 1, 1, 55, -29.42, -17.5, 1, 1, 55, -11.97, -32.18, 1, 1, 55, -3.65, -34.16999, 1, 2, 55, 18.71999, -17.05999, 0.98246, 5, -26.32999, -16.92, 0.01751, 1, 5, 21.34, -5.53, 1, 2, 5, 54.15, -7.26999, 0.10496, 56, 26.88999, 12.3, 0.89503, 1, 56, -1.35, 11.43999, 1, 1, 56, -12.72, 8.46, 1 ], + "hull": 16, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30 ], + "width": 62, + "height": 168 + } + }, + "thumbL": { + "thumbL": { + "type": "mesh", + "uvs": [ 0.02768, 0.34732, 0.02654, 0.705, 0.2247, 0.80529, 0.48611, 0.83593, 0.61892, 0.94736, 0.80232, 0.93621, 0.96886, 0.75793, 1, 0.55457, 0.91615, 0.31779, 0.82762, 0.17851, 0.68216, 0.05872, 0.52616, 0.02251, 0.3807, 0.04479, 0.24789, 0.09215, 0.11719, 0.16736, 0.37101, 0.43959, 0.66614, 0.51109 ], + "triangles": [ 15, 13, 12, 14, 13, 15, 0, 14, 15, 10, 15, 11, 16, 10, 9, 16, 9, 8, 15, 12, 11, 10, 16, 15, 16, 8, 7, 1, 0, 15, 6, 16, 7, 2, 1, 15, 3, 15, 16, 16, 4, 3, 2, 15, 3, 6, 5, 16, 5, 4, 16 ], + "vertices": [ 26.92, 6.63, 21.70999, 15.18999, 13.98999, 13.73999, 5.3, 9.39999, -0.50999, 9.47999, -6.11999, 5.65999, -8.76, -1.80999, -6.76, -7.26, -0.63999, -11.27999, 4.17999, -12.89, 10.52999, -12.93, 15.97, -10.77, 20.22999, -7.42, 23.71999, -3.71, 26.73999, 0.61, 14.73999, 2.18, 4.38999, -1.83 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 30, 32 ], + "width": 37, + "height": 28 + } + }, + "thumbR": { + "thumbR": { + "type": "mesh", + "uvs": [ 0.66994, 0, 0.47671, 0.20243, 0.2626, 0.17987, 0.06938, 0.33779, 0, 0.68371, 0.10071, 0.93939, 0.40883, 1, 0.6856, 0.89427, 0.80049, 0.63859, 0.9676, 0.37539, 0.95716, 0.16483, 0.84749, 0.07459, 0.39531, 0.5683, 0.58237, 0.52462 ], + "triangles": [ 1, 9, 13, 11, 1, 0, 11, 9, 1, 9, 11, 10, 12, 2, 1, 12, 1, 13, 3, 2, 12, 8, 13, 9, 4, 3, 12, 7, 13, 8, 5, 4, 12, 7, 6, 12, 7, 12, 13, 5, 12, 6 ], + "vertices": [ -0.75, -8.31999, 7.71999, -6.86999, 14.38, -10.8, 22.36, -10.35, 28.44, -3.71, 28.03, 3.61999, 18.77, 9.89999, 8.65999, 11.96, 2.11999, 8.06999, -6.17999, 4.84, -8.18, -0.02999, -5.65, -3.80999, 14.40999, 0.00999, 7.88999, 2.02999 ], + "hull": 12, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22, 24, 26 ], + "width": 36, + "height": 25 + } + } + } +}, +"animations": { + "blink": { + "slots": { + "eyelids closed": { + "attachment": [ + { "time": 0, "name": "eyelids closed" }, + { "time": 0.0666, "name": null } + ] + } + }, + "bones": { + "eyelids": { + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { + "time": 0.0666, + "x": 1, + "y": 0.894, + "curve": [ 0.15, 0, 0.341, 1 ] + }, + { "time": 0.3333, "x": 1, "y": 1 } + ] + } + } + }, + "main": { + "bones": { + "hip": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "x": 0, + "y": 13.42, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "x": 1, + "y": 1.019, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 1, "y": 1 } + ], + "shear": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.583, 1 ] + }, + { + "time": 1.0333, + "x": -1.76, + "y": 0, + "curve": [ 0.25, 0, 0.583, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "femurR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "angle": 4.88, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "x": -2.37, + "y": 1.21, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1.0333, + "x": 0.982, + "y": 1.046, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2, "x": 1, "y": 1 } + ] + }, + "tibiaR": { + "rotate": [ + { + "time": 0, + "angle": 2.93, + "curve": [ 0.316, 0.54, 0.642, 1 ] + }, + { "time": 0.3333, "angle": 0 }, + { + "time": 1.5, + "angle": 8.61, + "curve": [ 0.357, 0, 0.672, 0.55 ] + }, + { "time": 2, "angle": 2.93 } + ], + "shear": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.429, 0, 0.452, 1 ] + }, + { + "time": 1.1666, + "x": 6.16, + "y": 6.93, + "curve": [ 0.429, 0, 0.452, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "femurL": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1, + "angle": -11.11, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "shear": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.9333, + "x": 0, + "y": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "tibiaL": { + "rotate": [ + { + "time": 0, + "angle": 3.48, + "curve": [ 0.375, 0.5, 0.75, 1 ] + }, + { + "time": 0.5, + "angle": 10.23, + "curve": [ 0.389, 0.4, 0.56, 1 ] + }, + { + "time": 1.5, + "angle": -3.26, + "curve": [ 0.25, 0, 0.625, 0.5 ] + }, + { "time": 2, "angle": 3.48 } + ], + "shear": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.442, 1 ] + }, + { + "time": 0.6, + "x": 0, + "y": -3.74, + "curve": [ 0.25, 0, 0.442, 1 ] + }, + { + "time": 1.3999, + "x": 0, + "y": 3.76, + "curve": [ 0.25, 0, 0.442, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "lumbar": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "angle": 0.11, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "x": 2.48, + "y": 0.23, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "thorax": { + "rotate": [ + { + "time": 0, + "angle": 0.95, + "curve": [ 0.317, 0.57, 0.645, 1 ] + }, + { "time": 0.3333, "angle": 0 }, + { + "time": 1.3333, + "angle": 3.86, + "curve": [ 0.358, 0, 0.668, 0.6 ] + }, + { "time": 2, "angle": 0.95 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "x": 2.95, + "y": -0.65, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "humerusR": { + "rotate": [ + { + "time": 0, + "angle": -3.46, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 0.8666, + "angle": 7.59, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "angle": -3.46 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 0.9666, + "x": -1.08, + "y": -1.53, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ], + "shear": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.59, 1 ] + }, + { + "time": 0.9666, + "x": 0, + "y": 2.87, + "curve": [ 0.25, 0, 0.59, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "radiusR": { + "rotate": [ + { + "time": 0, + "angle": -4.64, + "curve": [ 0.316, 0.54, 0.642, 1 ] + }, + { + "time": 0.3333, + "angle": -9.49, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1.5, + "angle": 4.71, + "curve": [ 0.357, 0, 0.672, 0.55 ] + }, + { "time": 2, "angle": -4.64 } + ] + }, + "humerusL": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 0.8999, + "angle": 17.78, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 0.8999, + "x": 0.04, + "y": 0.95, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "radiusL": { + "rotate": [ + { + "time": 0, + "angle": 2.91, + "curve": [ 0.317, 0.57, 0.646, 1 ] + }, + { "time": 0.2333, "angle": 0 }, + { + "time": 0.6666, + "angle": -5.94, + "curve": [ 0.319, 0.46, 0.636, 1 ] + }, + { + "time": 1.5, + "angle": 12.84, + "curve": [ 0.358, 0, 0.667, 0.61 ] + }, + { "time": 2, "angle": 2.91 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": -5.09, + "y": -2.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ], + "shear": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.487, 1 ] + }, + { + "time": 0.9666, + "x": 0, + "y": 3.38, + "curve": [ 0.25, 0, 0.487, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "head": { + "translate": [ + { + "time": 0, + "x": 2.99, + "y": 0.95, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 2.99, "y": 0.95 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 1.006, + "y": 0.98, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 1, "y": 1 } + ] + }, + "rr": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.79, 0, 0.524, 1 ] + }, + { + "time": 1.1666, + "angle": 51.39, + "curve": [ 0.79, 0, 0.635, 1 ] + }, + { "time": 2, "angle": 0 } + ] + }, + "strap anchor": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 1.54, + "y": -0.49, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1, + "x": 0.97, + "y": 1, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2, "x": 1, "y": 1 } + ] + }, + "strap tie": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "x": 0.39, + "y": 0.59, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "arrowY": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.347, 0, 0.677, 0.4 ] + }, + { + "time": 0.3333, + "x": 5.25, + "y": 6.22, + "curve": [ 0.328, 0.33, 0.633, 1 ] + }, + { + "time": 1.3333, + "x": -17.78, + "y": -21.05, + "curve": [ 0.2, 0, 0.289, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "arrowX": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.347, 0, 0.677, 0.4 ] + }, + { + "time": 0.3333, + "x": 8.76, + "y": -0.72, + "curve": [ 0.328, 0.33, 0.633, 1 ] + }, + { + "time": 1.3333, + "x": -23.36, + "y": 1.91, + "curve": [ 0.2, 0, 0.289, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "hairR1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.223, 0.33, 0.635, 1 ] + }, + { + "time": 0.3333, + "angle": 4.4, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 0.6666, + "angle": 355.25, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1.2, + "angle": 4.4, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1.5, + "angle": 358.55, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1.7333, + "angle": 353.9, + "curve": [ 0.353, 0, 0.825, 0.73 ] + }, + { "time": 2, "angle": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 0.6, + "x": 1, + "y": 1.119, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 1, + "y": 1, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.6, + "x": 1, + "y": 1.119, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 1, "y": 1 } + ] + }, + "hairM": { + "rotate": [ + { + "time": 0, + "angle": -2.48, + "curve": [ 0.235, 0.51, 0.483, 1 ] + }, + { "time": 0.4666, "angle": 0 }, + { + "time": 1.4666, + "angle": -5.52, + "curve": [ 0.542, 0, 0.764, 0.51 ] + }, + { "time": 2, "angle": -2.48 } + ] + }, + "hairMR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 0.5, + "angle": -4.64, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "angle": 4.36, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.5, + "angle": -8.58, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ] + }, + "hairML": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.266, 0.3, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": 1.52, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.3333, + "angle": -11.95, + "curve": [ 0.25, 0, 0.794, 0.75 ] + }, + { "time": 2, "angle": 0 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 1.2, "x": 5.99, "y": 0 }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "hairL1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.1666, + "angle": -8.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "angle": 0 } + ] + }, + "hairL2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 0.5, + "angle": -4.71, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "angle": -0.28, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.5, + "angle": -6.78, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1.03, + "curve": [ 0.327, 0.5, 0.653, 1 ] + }, + { "time": 0.5, "x": 1, "y": 1 }, + { + "time": 1.5, + "x": 1, + "y": 1.06, + "curve": [ 0.35, 0, 0.676, 0.5 ] + }, + { "time": 2, "x": 1, "y": 1.03 } + ] + }, + "hairR2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "angle": 1.75, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1.003, + "y": 1.016, + "curve": [ 0.233, 0.54, 0.506, 1 ] + }, + { "time": 0.4, "x": 1, "y": 1 }, + { + "time": 1.3999, + "x": 1.01, + "y": 1.05, + "curve": [ 0.56, 0, 0.747, 0.55 ] + }, + { "time": 2, "x": 1.003, "y": 1.016 } + ] + }, + "hairR2 2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 0.3, + "angle": 13.76, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 0.8666, + "angle": 3.94, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.5, + "angle": 13.76, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 1.0666, "x": 9.12, "y": 0 }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "eyelids": { + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 1, "x": -0.97, "y": -0.13 }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "mouth": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": -1.18, + "y": 0.01, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "mouth opening": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 0, + "y": -0.64, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 0.847, + "y": 0.958, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 1, "y": 1 } + ] + }, + "browR": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 0.12, + "y": -4.71, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "browL": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": -2.35, + "y": 4.93, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "hairSide": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.227, 0.29, 0.655, 1 ] + }, + { + "time": 0.2333, + "angle": -7.55, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 0.8666, + "angle": 10.25, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.3666, + "angle": -7.46, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.7666, + "angle": 8.26, + "curve": [ 0.353, 0, 0.817, 0.56 ] + }, + { "time": 2, "angle": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1.059, "y": 0.925 }, + { "time": 1, "x": 1.004, "y": 0.95 }, + { "time": 1.5, "x": 1.059, "y": 0.925 }, + { "time": 2, "x": 1, "y": 1 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 1.2, "x": 5, "y": -5.19 }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "thumbL": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 0.5333, + "angle": 21.4, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1.3666, + "angle": -22.39, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 4.53, + "y": -3.02, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "indexL": { + "rotate": [ + { + "time": 0, + "angle": 3.22, + "curve": [ 0.326, 0.53, 0.654, 1 ] + }, + { "time": 0.3333, "angle": 0 }, + { + "time": 0.8999, + "angle": -9.85, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.5333, + "angle": 8.52, + "curve": [ 0.352, 0, 0.675, 0.54 ] + }, + { "time": 2, "angle": 3.22 } + ], + "translate": [ + { + "time": 0, + "x": -0.9, + "y": -0.8, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { "time": 0.3666, "x": 0, "y": 0 }, + { + "time": 1.2666, + "x": -3.2, + "y": -2.85, + "curve": [ 0.243, 0, 0.648, 0.6 ] + }, + { "time": 2, "x": -0.9, "y": -0.8 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 1.3999, "x": -2.26, "y": -8.67 }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "middleL": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.3333, "angle": 0 }, + { "time": 0.7666, "angle": -13.31 }, + { "time": 1.1666, "angle": -0.17 }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.251, 0, 0.623, 0.49 ] + }, + { + "time": 0.4333, + "x": 0.16, + "y": 2.38, + "curve": [ 0.373, 0.49, 0.751, 1 ] + }, + { + "time": 1.4666, + "x": -2.49, + "y": -5.66, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "ringL": { + "rotate": [ + { "time": 0, "angle": -20.61, "curve": "stepped" }, + { + "time": 0.4666, + "angle": -20.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "angle": -17.66, + "curve": [ 0.251, 0, 0.623, 0.49 ] + }, + { + "time": 1.3666, + "angle": 12.76, + "curve": [ 0.373, 0.49, 0.75, 1 ] + }, + { "time": 2, "angle": -20.61 } + ], + "translate": [ + { + "time": 0, + "x": -2.13, + "y": -2.27, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { "time": 0.3333, "x": 0, "y": 0 }, + { + "time": 0.7666, + "x": -1.19, + "y": 0.27, + "curve": [ 0.367, 0.46, 0.753, 1 ] + }, + { + "time": 1.3333, + "x": -7.51, + "y": -8.02, + "curve": [ 0.243, 0, 0.648, 0.6 ] + }, + { "time": 2, "x": -2.13, "y": -2.27 } + ] + }, + "pinkyL": { + "rotate": [ + { + "time": 0, + "angle": 7.2, + "curve": [ 0.326, 0.57, 0.656, 1 ] + }, + { "time": 0.3333, "angle": 0 }, + { + "time": 1.1, + "angle": -20.2, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5666, + "angle": 27.64, + "curve": [ 0.353, 0, 0.672, 0.6 ] + }, + { "time": 2, "angle": 7.2 } + ], + "translate": [ + { + "time": 0, + "x": -4.47, + "y": -1.73, + "curve": [ 0.378, 0.52, 0.746, 1 ] + }, + { "time": 0.3333, "x": 0, "y": 0 }, + { + "time": 0.8333, + "x": 0.78, + "y": 0.49, + "curve": [ 0.361, 0.44, 0.755, 1 ] + }, + { + "time": 1.6, + "x": -10.16, + "y": -3.94, + "curve": [ 0.247, 0, 0.629, 0.52 ] + }, + { "time": 2, "x": -4.47, "y": -1.73 } + ], + "scale": [ + { + "time": 0, + "x": 0.969, + "y": 0.993, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { "time": 0.3333, "x": 1, "y": 1 }, + { + "time": 1.3333, + "x": 0.892, + "y": 0.976, + "curve": [ 0.243, 0, 0.648, 0.6 ] + }, + { "time": 2, "x": 0.969, "y": 0.993 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.8666, "x": -8.46, "y": 0 }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "handL": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -13.99, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4666, + "angle": -1.75, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": -2.94, + "y": -3.59, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 1.079, + "y": 1.079, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 1, "y": 1 } + ] + }, + "thumbR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.348, 0, 0.676, 0.44 ] + }, + { + "time": 0.7666, + "angle": 14.27, + "curve": [ 0.334, 0.32, 0.667, 0.66 ] + }, + { + "time": 1.1666, + "angle": 12.05, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.35, 0, 0.676, 0.5 ] + }, + { + "time": 0.5, + "x": 2.17, + "y": 1.11, + "curve": [ 0.332, 0.36, 0.663, 0.73 ] + }, + { + "time": 0.7666, + "x": -4.4, + "y": 4.26, + "curve": [ 0.326, 0.6, 0.658, 1 ] + }, + { + "time": 1, + "x": -6.85, + "y": 2.43, + "curve": [ 0.35, 0, 0.676, 0.5 ] + }, + { + "time": 1.5, + "x": -0.15, + "y": 2.83, + "curve": [ 0.327, 0.5, 0.653, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "indexR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "angle": 5.32, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.349, 0, 0.676, 0.46 ] + }, + { + "time": 0.4333, + "x": 2.73, + "y": 5.71, + "curve": [ 0.329, 0.46, 0.652, 1 ] + }, + { + "time": 1, + "x": 2.75, + "y": 13.12, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "middleR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "angle": 11.8, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.35, 0, 0.676, 0.5 ] + }, + { + "time": 0.5, + "x": 5.17, + "y": -0.78, + "curve": [ 0.327, 0.5, 0.653, 1 ] + }, + { + "time": 1, + "x": 7.99, + "y": 5.3, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.5, + "x": 5.17, + "y": -0.78, + "curve": [ 0.327, 0.5, 0.653, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "ringR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "angle": 11.72, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.35, 0, 0.676, 0.5 ] + }, + { + "time": 0.5, + "x": 4.21, + "y": -1.67, + "curve": [ 0.327, 0.5, 0.653, 1 ] + }, + { + "time": 1, + "x": 9.2, + "y": 1.03, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.5, + "x": 4.21, + "y": -1.67, + "curve": [ 0.327, 0.5, 0.653, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "footL": { + "rotate": [ + { + "time": 0, + "angle": -2.11, + "curve": [ 0.328, 0.47, 0.652, 1 ] + }, + { + "time": 0.6, + "angle": 6.05, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.5, + "angle": -8.19, + "curve": [ 0.349, 0, 0.676, 0.47 ] + }, + { "time": 2, "angle": -2.11 } + ] + }, + "pinkyR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.2666, + "angle": -2.35, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.672, 0.6 ] + }, + { + "time": 0.6666, + "x": -0.04, + "y": -9.92, + "curve": [ 0.326, 0.57, 0.656, 1 ] + }, + { + "time": 1.2666, + "x": 3.35, + "y": -10.54, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "handR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.79, 0, 0.635, 1 ] + }, + { + "time": 1, + "angle": -4.18, + "curve": [ 0.79, 0, 0.635, 1 ] + }, + { "time": 2, "angle": 0 } + ] + }, + "pony1 1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "angle": -12.37, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ] + }, + "pony1 2": { + "rotate": [ + { + "time": 0, + "angle": 4.41, + "curve": [ 0.326, 0.54, 0.654, 1 ] + }, + { + "time": 0.4, + "angle": 10.29, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.3999, + "angle": -6.34, + "curve": [ 0.352, 0, 0.674, 0.55 ] + }, + { "time": 2, "angle": 4.41 } + ] + }, + "pony1 3R": { + "rotate": [ + { + "time": 0, + "angle": -7.59, + "curve": [ 0.6, 0.28, 0.534, 1 ] + }, + { + "time": 0.6666, + "angle": 12.45, + "curve": [ 0.79, 0, 0.635, 1 ] + }, + { + "time": 1.8333, + "angle": -8.13, + "curve": [ 0.424, 0, 0.747, 0.38 ] + }, + { "time": 2, "angle": -7.59 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 1.2, "x": 0, "y": -10.63 }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "pony1 3L": { + "rotate": [ + { + "time": 0, + "angle": -0.17, + "curve": [ 0.245, 0.48, 0.463, 1 ] + }, + { + "time": 0.5666, + "angle": 10.98, + "curve": [ 0.79, 0, 0.635, 1 ] + }, + { + "time": 1.5, + "angle": -8.13, + "curve": [ 0.521, 0, 0.772, 0.48 ] + }, + { "time": 2, "angle": -0.17 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 1.2999, "x": 0, "y": 12.73 }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "pony2 1": { + "rotate": [ + { + "time": 0, + "angle": -8.23, + "curve": [ 0.337, 0.31, 0.652, 1 ] + }, + { "time": 0.7666, "angle": 0 }, + { + "time": 1.7666, + "angle": -9.51, + "curve": [ 0.343, 0, 0.674, 0.39 ] + }, + { "time": 2, "angle": -8.23 } + ] + }, + "pony2 2": { + "rotate": [ + { + "time": 0, + "angle": -16.39, + "curve": [ 0.346, 0, 0.676, 0.42 ] + }, + { + "time": 0.3333, + "angle": -11.16, + "curve": [ 0.332, 0.4, 0.652, 1 ] + }, + { + "time": 1, + "angle": -7.45, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": -16.39 } + ] + }, + "pony2 3R": { + "rotate": [ + { + "time": 0, + "angle": -11.29, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 0.8666, + "angle": -6.62, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2, "angle": -11.29 } + ] + }, + "pony2 3L": { + "rotate": [ + { + "time": 0, + "angle": -10.97, + "curve": [ 0.471, 0.19, 0.438, 1 ] + }, + { + "time": 0.6666, + "angle": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1.6666, + "angle": -13.5, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2, "angle": -10.97 } + ] + }, + "irisR": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": 0.26, + "y": -1.35, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "irisL": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": 0.31, + "y": -2.38, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "hairL2 2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7666, + "angle": -7.98, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.2, + "angle": -0.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5333, + "angle": -9.16, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 1, "x": 8.26, "y": 0 }, + { "time": 2, "x": 0, "y": 0 } + ] + } + }, + "deform": { + "default": { + "armL": { + "armL": [ + { "time": 0, "curve": "stepped" }, + { + "time": 0.8999, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.2666, + "offset": 28, + "vertices": [ -1.51086, 0.7194, -1.20222, -0.99176, -1.74438, -0.55032, -1.74438, -0.55032, -5.4474, -2.71472, -6.01333, -5.1203, -6.01333, -5.1203, -8.01959, 2.93899, -6.01333, -5.1203, -6.01333, -5.1203, -6.01333, -5.1203, -8.01959, 2.93899, -6.01333, -5.1203, -3.22636, -2.41085, -3.92453, 0.90549, -2.31031, -2.9559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.92453, 0.90549, -2.31031, -2.9559, -6.81498, -7.15472, 0, 0, 0, 0, 0, 0, -8.95159, 4.12372, -7.38049, -5.44018, -4.89614, -4.35224 ], + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2 } + ] + }, + "armR": { + "armR": [ + { + "time": 0, + "curve": [ 0.79, 0, 0.635, 1 ] + }, + { + "time": 1, + "vertices": [ 3.29416, 7.54852, 7.38307, 4.59548, 3.10798, 4.21008, 3.70951, 3.69085, 2.18121, 3.09289, 2.62421, 2.72685, -3.07338, 1.39288, -2.82711, 1.84239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.41422, 0.03585, 0.41485, -0.02728, 0.41422, 0.03585, 0.41485, -0.02728, 0, 0, 0, 0, -2.70642, -0.02931, -7.84894, 0.7765, -6.89496, 4.14276, -6.60889, 5.26571, -3.56116, 5.85961, -1.18236, 5.82011, 3.62316, 4.25227, 2.36634, 3.31623, 2.84126, 2.91955, -0.40275, 1.8318, -0.12073, 1.8717, 0.78494, 0.48286, 0.84898, 0.35839, 0, 0, 0, 0, -2.54119, 3.44401, -0.37628, 0.85307, 0, 0, 1.28616, -0.30337, 1.22529, -0.4947 ], + "curve": [ 0.79, 0, 0.635, 1 ] + }, + { "time": 2 } + ] + }, + "bootR": { + "bootR": [ + { + "time": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 0.8333, + "offset": 2, + "vertices": [ 5.22825, -1.73952, 4.71845, 0.22129, 5.62447, 6.47461, 1.50862, 7.97214, -4.4706, 2.31834, 0, 0, 0, 0, -4.4706, 2.31834, -4.4706, 2.31834, -4.4706, 2.31834, -4.4706, 2.31834 ], + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2 } + ] + }, + "hairM blob": { + "hairM blob": [ + { + "time": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1, + "vertices": [ -1.08212, 8.65523, -1.11431, 7.52468, -2.24057, 6.26953, -3.82797, 5.99093, -3.91436, 7.22202, -2.67053, 9.04969, -1.38165, 9.20383 ], + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2 } + ] + }, + "hairM blobS": { + "hairM blobS": [ + { + "time": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1, + "vertices": [ -5.04184, 4.96768, -4.67045, 7.01031, -4.93046, 10.27776, -5.3127, 10.78222, -5.59051, 8.83482, -5.32306, 5.60684 ], + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2 } + ] + }, + "hairSide": { + "hairSide": [ + { "time": 0 }, + { + "time": 0.6, + "vertices": [ -1.60583, 0.69799, -2.3974, 5.14581, 1.78112, 10.48461, -1.31721, -1.77716 ] + }, + { "time": 1.1 }, + { + "time": 1.6666, + "vertices": [ -1.60583, 0.69799, -2.3974, 5.14581, 1.78112, 10.48461, -1.31721, -1.77716 ] + }, + { "time": 2 } + ] + }, + "indexL": { + "indexL": [ + { "time": 0, "curve": "stepped" }, + { + "time": 0.3333, + "curve": [ 0.35, 0, 0.676, 0.48 ] + }, + { + "time": 0.8, + "vertices": [ 0.3316, -0.01168, 0.3316, -0.01168, 0.3316, -0.01168, 0.32022, -0.02302, 0, 0, 0, 0, 0, 0, 0.32022, -0.02302, 0.3316, -0.01168, 0.3316, -0.01168, 0.3316, -0.01168 ], + "curve": [ 0.328, 0.48, 0.652, 1 ] + }, + { + "time": 1.2666, + "vertices": [ -7.78268, -0.32069, -7.78268, -0.32069, -7.78268, -0.32069, -1.72647, -0.27644, 0, 0, 0, 0, 0, 0, -1.72647, -0.27644, -7.78268, -0.32069, -7.78268, -0.32069, -7.78268, -0.32069 ], + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2 } + ] + }, + "indexR": { + "indexR": [ + { + "time": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "vertices": [ -3.70743, 2.07255, -3.56297, 1.70497, -4.31731, -0.57101, -3.25647, -3.29185, -2.18936, -5.81704, 0.70666, -5.57202, 1.93817, -3.54266, 1.80318, 0.17359, 0.49382, -1.71757, 0.49382, -1.71757, 0, 0, 0, 0, -4.19105, 3.05998, -1.06692, -0.08682 ], + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2 } + ] + }, + "irisL flatspec": { + "irisL flatspec": [ + { "time": 0 }, + { + "time": 0.5, + "vertices": [ 0.61251, -0.47808, -0.34621, -0.26419, -0.95873, 0.21389 ] + }, + { "time": 1 }, + { + "time": 1.5666, + "vertices": [ 0.61251, -0.47808, -0.34621, -0.26419, -1.41388, 0.64572, 1.69758, 0.8432 ] + }, + { "time": 2 } + ] + }, + "irisL spec": { + "irisL spec": [ + { "time": 0 }, + { + "time": 0.5, + "vertices": [ 2.6656, -1.34318, -0.62154, -1.43818, 2.1585, -0.04376, 3.15285, -1.17855 ] + }, + { + "time": 1, + "vertices": [ 0.98534, -1.2969, -1.24309, -2.87637, -2.16038, -1.52056 ] + }, + { + "time": 1.5666, + "vertices": [ 2.93274, 1.38347, 1.49109, -0.79592, -0.93616, -0.65891 ] + }, + { "time": 2 } + ] + }, + "irisR flatspec": { + "irisR flatspec": [ + { "time": 0 }, + { + "time": 0.4666, + "offset": 2, + "vertices": [ -1.70543, 0.46472, -1.25659, -0.32217, 1.71141, 0.20523 ] + }, + { "time": 0.9666 }, + { + "time": 1.5666, + "vertices": [ 0.42843, -0.47369, -1.27699, -0.00897, -1.25659, -0.32217, 1.71141, 0.20523 ] + }, + { "time": 2 } + ] + }, + "irisR spec": { + "irisR spec": [ + { "time": 0 }, + { + "time": 0.4, + "vertices": [ 1.33019, 0.30987, -0.77219, -1.58123, -0.9354, -2.05615, -0.31694, 1.15225 ] + }, + { + "time": 0.9666, + "vertices": [ -1.23871, -0.1724, -2.84217, 0.45324, 1.84366, 0.51276, 1.38389, 0.67143 ] + }, + { + "time": 1.5, + "vertices": [ -0.55318, 2.56623, -1.37524, 0.21931, -0.9046, 0.64041, -1.50448, -0.12948 ] + }, + { "time": 2 } + ] + }, + "middleL": { + "middleL": [ + { + "time": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 0.6999, + "vertices": [ 1.875, -1.17946, 2.27199, -0.96693, 2.27367, -1.08019, -0.73205, -0.10649, 0, 0, 0, 0, 0, 0, -0.55562, -0.01207, 2.27367, -1.08019, 1.79737, -1.19242, 1.78679, -1.22669 ], + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1.3666, + "vertices": [ -6.1622, -0.21533, -4.73236, 0.55014, -4.72631, 0.14221, -2.63659, -0.38357, 0, 0, 0, 0, 0, 0, -2.00115, -0.04347, -4.72631, 0.14221, -6.44177, -0.26199, -6.47988, -0.38543 ], + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2 } + ] + }, + "ringL": { + "ringL": [ + { + "time": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1.1333, + "vertices": [ 2.29756, -2.1041, 2.29756, -2.1041, 2.29756, -2.1041, 0, 0, 0, 0, -0.61599, -0.2029 ], + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1.5333, + "vertices": [ -3.41744, -0.94554, -3.41744, -0.94554, -3.41744, -0.94554, 0, 0, 0, 0, -1.24407, -0.40979 ], + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2 } + ] + }, + "thumbL": { + "thumbL": [ + { "time": 0, "curve": "stepped" }, + { + "time": 0.4666, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.1666, + "vertices": [ -2.29185, -3.98126, -0.23339, -3.13461, 0.49542, -1.60928, 1.06944, 0.67767, -0.11907, -0.5765, -0.11912, -0.57647, 0, 0, 0, 0, -1.80242, 1.16174, -2.50971, 0.70312, -3.87533, 0.49871, -4.51916, -1.38058, -4.28195, -2.70175, -3.59239, -3.16152, -3.25914, -3.82949, -1.17744, -0.89035, 0.37959, 0.01583 ], + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2 } + ] + }, + "thumbR": { + "thumbR": [ + { + "time": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "offset": 2, + "vertices": [ 4.24297, 0.26622, 5.38371, 4.83061, 3.73976, 9.41351, -1.18714, 11.81196, -5.39822, 10.30255, -6.95536, 4.73573, -3.19515, -0.32293, -1.316, 0.11442, 0, 0, 0, 0, 0, 0, -0.93784, 2.97592 ], + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2 } + ] + } + } + } + } +} +} \ No newline at end of file diff --git a/spine-ue4/Content/GettingStarted/Assets/Doi/Doi-data.uasset b/spine-ue4/Content/GettingStarted/Assets/Doi/Doi-data.uasset new file mode 100644 index 000000000..dc593f6e4 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Doi/Doi-data.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Doi/Doi.png b/spine-ue4/Content/GettingStarted/Assets/Doi/Doi.png new file mode 100644 index 000000000..de4f02228 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Doi/Doi.png differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Doi/Textures/Doi.uasset b/spine-ue4/Content/GettingStarted/Assets/Doi/Textures/Doi.uasset new file mode 100644 index 000000000..b36fc3722 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Doi/Textures/Doi.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Raptor/Textures/raptor.png b/spine-ue4/Content/GettingStarted/Assets/Raptor/Textures/raptor.png new file mode 100644 index 000000000..78aed4d3e Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Raptor/Textures/raptor.png differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Raptor/Textures/raptor.uasset b/spine-ue4/Content/GettingStarted/Assets/Raptor/Textures/raptor.uasset new file mode 100644 index 000000000..b181c2a23 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Raptor/Textures/raptor.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor-atlas.atlas b/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor-atlas.atlas new file mode 100644 index 000000000..c90da0078 --- /dev/null +++ b/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor-atlas.atlas @@ -0,0 +1,251 @@ + +raptor.png +size: 1022,1022 +format: RGBA8888 +filter: Linear,Linear +repeat: none +back_arm + rotate: false + xy: 410, 545 + size: 46, 29 + orig: 46, 29 + offset: 0, 0 + index: -1 +back_bracer + rotate: false + xy: 540, 548 + size: 39, 28 + orig: 39, 28 + offset: 0, 0 + index: -1 +back_hand + rotate: true + xy: 504, 538 + size: 36, 34 + orig: 36, 34 + offset: 0, 0 + index: -1 +back_knee + rotate: false + xy: 299, 478 + size: 49, 67 + orig: 49, 67 + offset: 0, 0 + index: -1 +back_thigh + rotate: true + xy: 140, 247 + size: 39, 24 + orig: 39, 24 + offset: 0, 0 + index: -1 +eyes_open + rotate: true + xy: 2, 2 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +front_arm + rotate: false + xy: 360, 544 + size: 48, 30 + orig: 48, 30 + offset: 0, 0 + index: -1 +front_bracer + rotate: false + xy: 538, 578 + size: 41, 29 + orig: 41, 29 + offset: 0, 0 + index: -1 +front_hand + rotate: false + xy: 538, 609 + size: 41, 38 + orig: 41, 38 + offset: 0, 0 + index: -1 +front_open_hand + rotate: false + xy: 894, 782 + size: 43, 44 + orig: 43, 44 + offset: 0, 0 + index: -1 +front_thigh + rotate: false + xy: 942, 849 + size: 57, 29 + orig: 57, 29 + offset: 0, 0 + index: -1 +gun + rotate: false + xy: 785, 774 + size: 107, 103 + orig: 107, 103 + offset: 0, 0 + index: -1 +gun_nohand + rotate: false + xy: 614, 703 + size: 105, 102 + orig: 105, 102 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 2, 137 + size: 136, 149 + orig: 136, 149 + offset: 0, 0 + index: -1 +lower_leg + rotate: true + xy: 780, 699 + size: 73, 98 + orig: 73, 98 + offset: 0, 0 + index: -1 +mouth_smile + rotate: true + xy: 49, 2 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +neck + rotate: true + xy: 1001, 860 + size: 18, 21 + orig: 18, 21 + offset: 0, 0 + index: -1 +raptor_arm_back + rotate: false + xy: 940, 936 + size: 82, 86 + orig: 82, 86 + offset: 0, 0 + index: -1 +raptor_body + rotate: false + xy: 2, 737 + size: 610, 285 + orig: 610, 285 + offset: 0, 0 + index: -1 +raptor_front_arm + rotate: true + xy: 195, 464 + size: 81, 102 + orig: 81, 102 + offset: 0, 0 + index: -1 +raptor_front_leg + rotate: false + xy: 2, 478 + size: 191, 257 + orig: 191, 257 + offset: 0, 0 + index: -1 +raptor_hindleg_back + rotate: false + xy: 614, 807 + size: 169, 215 + orig: 169, 215 + offset: 0, 0 + index: -1 +raptor_horn + rotate: false + xy: 360, 655 + size: 182, 80 + orig: 182, 80 + offset: 0, 0 + index: -1 +raptor_horn_back + rotate: false + xy: 360, 576 + size: 176, 77 + orig: 176, 77 + offset: 0, 0 + index: -1 +raptor_jaw + rotate: false + xy: 785, 879 + size: 153, 143 + orig: 153, 143 + offset: 0, 0 + index: -1 +raptor_saddle_noshadow + rotate: false + xy: 2, 288 + size: 163, 188 + orig: 163, 188 + offset: 0, 0 + index: -1 +raptor_saddle_strap_front + rotate: false + xy: 721, 710 + size: 57, 95 + orig: 57, 95 + offset: 0, 0 + index: -1 +raptor_saddle_strap_rear + rotate: true + xy: 940, 880 + size: 54, 74 + orig: 54, 74 + offset: 0, 0 + index: -1 +raptor_saddle_w_shadow + rotate: false + xy: 195, 547 + size: 163, 188 + orig: 163, 188 + offset: 0, 0 + index: -1 +raptor_tongue + rotate: true + xy: 544, 649 + size: 86, 64 + orig: 86, 64 + offset: 0, 0 + index: -1 +stirrup_back + rotate: false + xy: 458, 539 + size: 44, 35 + orig: 44, 35 + offset: 0, 0 + index: -1 +stirrup_front + rotate: true + xy: 81, 4 + size: 45, 50 + orig: 45, 50 + offset: 0, 0 + index: -1 +stirrup_strap + rotate: true + xy: 894, 828 + size: 49, 46 + orig: 49, 46 + offset: 0, 0 + index: -1 +torso + rotate: true + xy: 610, 647 + size: 54, 91 + orig: 54, 91 + offset: 0, 0 + index: -1 +visor + rotate: false + xy: 2, 51 + size: 131, 84 + orig: 131, 84 + offset: 0, 0 + index: -1 diff --git a/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor-atlas.uasset b/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor-atlas.uasset new file mode 100644 index 000000000..e3f3bff7b Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor-atlas.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor-data.json b/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor-data.json new file mode 100644 index 000000000..22489774d --- /dev/null +++ b/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor-data.json @@ -0,0 +1,2750 @@ +{ +"skeleton": { + "hash": "ClZfWteo4B6kP4Y3PoEi+MHqmeo", + "spine": "3.5.03-beta", + "width": 1223.75, + "height": 1053.54, + "fps": 30, + "images": "C:/Program Files (x86)/Spine/examples/raptor/images/" +}, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "rotation": 3.15, "x": -136.78, "y": 415.47, "color": "fbff00ff" }, + { "name": "torso1", "parent": "hip", "length": 126.25, "rotation": -4.97, "x": 30.03, "y": -0.4, "color": "eaff00ff" }, + { "name": "saddle", "parent": "torso1", "length": 50.91, "rotation": 91.8, "x": 4.56, "y": 71.86, "color": "ff7300ff" }, + { "name": "spineboy_hip", "parent": "saddle", "length": 0.52, "rotation": 90.01, "x": 81.88, "y": 2.68, "color": "ffffffff" }, + { + "name": "spineboy_torso", + "parent": "spineboy_hip", + "length": 122.45, + "rotation": -75.85, + "x": 1.05, + "y": -2.1, + "color": "ffffffff" + }, + { "name": "torso2", "parent": "torso1", "length": 121.2, "rotation": 39.84, "x": 126.25, "y": -0.37, "color": "eaff00ff" }, + { "name": "neck", "parent": "torso2", "length": 70.59, "rotation": 41.37, "x": 121.19, "y": 0.34, "color": "eaff00ff" }, + { "name": "head", "parent": "neck", "length": 105.5, "rotation": 9.82, "x": 70.59, "y": 0.03, "color": "eaff00ff" }, + { "name": "horn_rear", "parent": "head", "length": 73.78, "rotation": 44.31, "x": 99.27, "y": -226.79, "color": "e07800ff" }, + { "name": "rear_arm_target", "parent": "horn_rear", "rotation": -133.55, "x": 232.68, "y": 245.84, "color": "e07800ff" }, + { + "name": "back_arm", + "parent": "spineboy_torso", + "length": 67.21, + "rotation": -120.89, + "x": 96.33, + "y": -38.46, + "color": "ffffffff" + }, + { "name": "back_bracer", "parent": "back_arm", "length": 43.68, "rotation": 17.48, "x": 67.21, "y": -0.31, "color": "ffffffff" }, + { + "name": "back_hand", + "parent": "back_bracer", + "length": 41.97, + "rotation": 9.2, + "x": 43.68, + "y": 0.06, + "transform": "noRotationOrReflection", + "color": "ffffffff" + }, + { "name": "spineboy_rear_arm_goal", "parent": "saddle", "x": -30.43, "y": -100.08, "color": "ff0001ff" }, + { "name": "back_thigh", "parent": "spineboy_hip", "length": 71.15, "rotation": 160.75, "x": -9.57, "y": 2.31, "color": "ffffffff" }, + { "name": "back_knee", "parent": "back_thigh", "length": 97.17, "rotation": -54.97, "x": 71.15, "y": -0.28, "color": "ffffffff" }, + { "name": "horn_front", "parent": "head", "length": 87.48, "rotation": 49.36, "x": 82.09, "y": -221.36, "color": "15ff00ff" }, + { "name": "front_arm_target", "parent": "horn_front", "rotation": -138.59, "x": 294.58, "y": 234.17, "color": "15ff00ff" }, + { + "name": "front_arm", + "parent": "spineboy_torso", + "length": 74.51, + "rotation": -118.16, + "x": 101.37, + "y": 9.78, + "color": "ffffffff" + }, + { "name": "front_bracer", "parent": "front_arm", "length": 39.85, "rotation": 20.3, "x": 74.52, "y": -0.41, "color": "ffffffff" }, + { "name": "front_arm1", "parent": "torso2", "length": 109.99, "rotation": 224.54, "x": 46.37, "y": -84.61, "color": "15ff00ff" }, + { "name": "front_arm2", "parent": "front_arm1", "length": 86.33, "rotation": 105.23, "x": 109.99, "y": 0.2, "color": "15ff00ff" }, + { "name": "front_foot_goal", "parent": "root", "rotation": -0.94, "x": -45.79, "y": -28.67, "color": "ff0000ff" }, + { "name": "front_leg_goal", "parent": "front_foot_goal", "x": -106.06, "y": 115.58, "color": "ff0000ff" }, + { "name": "front_leg1", "parent": "hip", "length": 251.74, "rotation": -51.5, "x": 27.36, "y": -28.27, "color": "15ff00ff" }, + { "name": "front_leg2", "parent": "front_leg1", "length": 208.54, "rotation": 261.93, "x": 251.03, "y": 0.16, "color": "15ff00ff" }, + { "name": "front_leg3", "parent": "front_leg2", "length": 118.18, "rotation": 85.46, "x": 208.5, "y": -1.63, "color": "15ff00ff" }, + { + "name": "front_foot1", + "parent": "front_leg3", + "length": 57.79, + "rotation": 54.46, + "x": 118.19, + "y": -0.79, + "scaleX": 1.126, + "color": "15ff00ff" + }, + { + "name": "front_foot2", + "parent": "front_foot1", + "length": 56.19, + "rotation": -0.46, + "x": 57.78, + "y": -0.02, + "scaleX": 0.73, + "scaleY": 0.823, + "transform": "noRotationOrReflection", + "color": "15ff00ff" + }, + { + "name": "front_foot3", + "parent": "front_foot2", + "length": 129.88, + "rotation": -3.16, + "x": 49.71, + "y": 20.65, + "scaleX": 1.154, + "transform": "noRotationOrReflection", + "color": "15ff00ff" + }, + { "name": "front_hand", "parent": "front_arm2", "length": 47.55, "rotation": -56.83, "x": 86.33, "y": 0.06, "color": "15ff00ff" }, + { + "name": "front_hand2", + "parent": "front_bracer", + "length": 58.18, + "rotation": 13.89, + "x": 39.98, + "y": -0.89, + "transform": "noRotationOrReflection", + "color": "ffffffff" + }, + { "name": "spineboy_front_arm_goal", "parent": "saddle", "x": -50.7, "y": -96.93, "color": "ff0004ff" }, + { + "name": "front_thigh", + "parent": "spineboy_hip", + "length": 77.79, + "rotation": 163.34, + "x": 15.51, + "y": 17.01, + "color": "ffffffff" + }, + { "name": "lower_leg", "parent": "front_thigh", "length": 111.5, "rotation": -49.62, "x": 77.92, "y": -0.1, "color": "ffffffff" }, + { + "name": "gun", + "parent": "spineboy_hip", + "length": 181.35, + "rotation": 107.11, + "x": 16.86, + "y": -7.89, + "scaleX": 0.816, + "scaleY": 0.816, + "color": "ffffffff" + }, + { "name": "neck2", "parent": "spineboy_torso", "length": 32.04, "rotation": -45.22, "x": 113.44, "y": -15.21, "color": "ffffffff" }, + { "name": "head2", "parent": "neck2", "length": 249.64, "rotation": 11.65, "x": 23.01, "y": 3.47, "color": "ffffffff" }, + { + "name": "jaw", + "parent": "head", + "length": 203.76, + "rotation": -140.14, + "x": 29.36, + "y": -40.15, + "transform": "noScale", + "color": "ffff00ff" + }, + { "name": "rear_arm1", "parent": "torso2", "length": 109.56, "rotation": -124.71, "x": 57.05, "y": -95.38, "color": "e07800ff" }, + { "name": "rear_arm2", "parent": "rear_arm1", "length": 85.8, "rotation": 123.56, "x": 109.56, "color": "e07800ff" }, + { "name": "rear_foot_goal", "parent": "root", "x": 33.43, "y": 30.81, "color": "ff0000ff" }, + { "name": "rear_leg_goal", "parent": "rear_foot_goal", "x": -127.51, "y": 75.99, "color": "ff0000ff" }, + { "name": "rear_leg1", "parent": "hip", "length": 226.27, "rotation": -54.76, "x": 55.19, "y": -71.25, "color": "e07800ff" }, + { "name": "rear_leg2", "parent": "rear_leg1", "length": 172.58, "rotation": -92.25, "x": 226.32, "y": 0.23, "color": "e07800ff" }, + { "name": "rear_leg3", "parent": "rear_leg2", "length": 103.05, "rotation": 82.81, "x": 172.31, "y": 2.21, "color": "e07800ff" }, + { "name": "rear_foot1", "parent": "rear_leg3", "length": 84.51, "rotation": 75.43, "x": 102.37, "y": -0.02, "color": "e07800ff" }, + { + "name": "rear_foot2", + "parent": "rear_foot1", + "length": 102.31, + "rotation": -6.13, + "x": 84.49, + "y": -0.34, + "transform": "noRotationOrReflection", + "color": "e07800ff" + }, + { "name": "rear_hand", "parent": "rear_arm2", "length": 45.8, "rotation": -76.28, "x": 85.8, "y": 0.1, "color": "e07800ff" }, + { + "name": "saddle_strap_front1", + "parent": "saddle", + "length": 97.27, + "rotation": -148.11, + "x": -27.36, + "y": -73.38, + "color": "ff7300ff" + }, + { + "name": "saddle_strap_front2", + "parent": "saddle_strap_front1", + "length": 102.74, + "rotation": -11.13, + "x": 97.29, + "y": 0.3, + "color": "ff7300ff" + }, + { + "name": "saddle_strap_rear1", + "parent": "saddle", + "length": 38.62, + "rotation": 151.13, + "x": -33.34, + "y": 87.32, + "color": "ff7300ff" + }, + { "name": "saddle_strap_rear2", "parent": "saddle_strap_rear1", "length": 54.36, "x": 38.63, "y": -0.02, "color": "ff7300ff" }, + { + "name": "saddle_strap_rear3", + "parent": "saddle_strap_rear2", + "length": 44.04, + "rotation": 3.63, + "x": 54.86, + "y": 0.19, + "color": "ff7300ff" + }, + { "name": "stirrup", "parent": "saddle", "length": 78.17, "rotation": -68.85, "x": -81.94, "y": -103.38, "color": "ff7300ff" }, + { "name": "stirrup_strap1", "parent": "saddle", "length": 43.69, "rotation": -135, "x": -20.38, "y": -29.37, "color": "ff7300ff" }, + { "name": "stirrup_strap2", "parent": "stirrup_strap1", "length": 51.62, "rotation": 9.38, "x": 43.7, "color": "ff7300ff" }, + { "name": "tail1", "parent": "hip", "length": 162.53, "rotation": 162.92, "x": -20.86, "y": 6.87, "color": "eaff00ff" }, + { "name": "tail2", "parent": "tail1", "length": 130.02, "rotation": 30.3, "x": 162.53, "y": -0.82, "color": "eaff00ff" }, + { "name": "tail3", "parent": "tail2", "length": 141.06, "rotation": 6.88, "x": 130.02, "y": 0.1, "color": "eaff00ff" }, + { "name": "tail4", "parent": "tail3", "length": 126.25, "rotation": -18.86, "x": 141.05, "y": 0.64, "color": "eaff00ff" }, + { "name": "tail5", "parent": "tail4", "length": 91.06, "rotation": -22.34, "x": 126.25, "y": -0.47, "color": "eaff00ff" }, + { "name": "tongue1", "parent": "head", "length": 55.11, "rotation": -129.04, "x": 20.81, "y": -104.75, "color": "ffff00ff" }, + { "name": "tongue2", "parent": "tongue1", "length": 44.66, "rotation": 8.93, "x": 55.59, "y": 0.93, "color": "fff200ff" }, + { "name": "tongue3", "parent": "tongue2", "length": 43.64, "rotation": 12.86, "x": 44.26, "y": -0.2, "color": "fff200ff" } +], +"slots": [ + { "name": "back_hand", "bone": "back_hand", "attachment": "back_hand" }, + { "name": "back_arm", "bone": "back_arm", "attachment": "back_arm" }, + { "name": "back_bracer", "bone": "back_bracer", "attachment": "back_bracer" }, + { "name": "back_knee", "bone": "back_knee", "attachment": "back_knee" }, + { "name": "raptor_horn_back", "bone": "horn_rear", "attachment": "raptor_horn_back" }, + { "name": "raptor_tongue", "bone": "root", "attachment": "raptor_tongue" }, + { "name": "raptor_hindleg_back", "bone": "rear_leg1", "attachment": "raptor_hindleg_back" }, + { "name": "raptor_arm_back", "bone": "root", "attachment": "raptor_arm_back" }, + { "name": "raptor_body", "bone": "torso1", "attachment": "raptor_body" }, + { "name": "back_thigh", "bone": "back_thigh", "attachment": "back_thigh" }, + { "name": "raptor_saddle_strap_front", "bone": "saddle_strap_front1", "attachment": "raptor_saddle_strap_front" }, + { "name": "raptor_saddle_strap_rear", "bone": "saddle_strap_rear1", "attachment": "raptor_saddle_strap_rear" }, + { "name": "raptor_saddle_w_shadow", "bone": "saddle", "attachment": "raptor_saddle_w_shadow" }, + { "name": "raptor_saddle_noshadow", "bone": "saddle" }, + { "name": "raptor_front_arm", "bone": "root", "attachment": "raptor_front_arm" }, + { "name": "raptor_front_leg", "bone": "front_leg1", "attachment": "raptor_front_leg" }, + { "name": "raptor_jaw", "bone": "jaw", "attachment": "raptor_jaw" }, + { "name": "neck", "bone": "neck2", "attachment": "neck" }, + { "name": "spineboy_torso", "bone": "spineboy_torso", "attachment": "torso" }, + { "name": "head", "bone": "head2", "attachment": "head" }, + { "name": "eyes_open", "bone": "head2", "attachment": "eyes_open" }, + { "name": "mouth_smile", "bone": "head2", "attachment": "mouth_smile" }, + { "name": "visor", "bone": "head2", "attachment": "visor" }, + { "name": "raptor_horn", "bone": "horn_front", "attachment": "raptor_horn" }, + { "name": "front_thigh", "bone": "front_thigh", "attachment": "front_thigh" }, + { "name": "stirrup_back", "bone": "stirrup", "attachment": "stirrup_back" }, + { "name": "lower_leg", "bone": "lower_leg", "attachment": "lower_leg" }, + { "name": "stirrup_strap", "bone": "stirrup", "attachment": "stirrup_strap" }, + { "name": "stirrup_front", "bone": "stirrup", "attachment": "stirrup_front" }, + { "name": "gun", "bone": "gun", "attachment": "gun_nohand" }, + { "name": "front_arm", "bone": "front_arm", "attachment": "front_arm" }, + { "name": "front_bracer", "bone": "front_bracer", "attachment": "front_bracer" }, + { "name": "front_hand", "bone": "front_hand2", "attachment": "front_hand" } +], +"ik": [ + { + "name": "front_arm_goal", + "order": 0, + "bones": [ "front_arm", "front_bracer" ], + "target": "front_arm_target" + }, + { + "name": "front_foot_goal", + "order": 2, + "bones": [ "front_leg3", "front_foot1" ], + "target": "front_foot_goal" + }, + { + "name": "front_leg_goal", + "order": 1, + "bones": [ "front_leg1", "front_leg2" ], + "target": "front_leg_goal", + "bendPositive": false + }, + { + "name": "rear_arm_goal", + "order": 3, + "bones": [ "back_arm", "back_bracer" ], + "target": "rear_arm_target" + }, + { + "name": "rear_foot_goal", + "order": 5, + "bones": [ "rear_leg3", "rear_foot1" ], + "target": "rear_foot_goal" + }, + { + "name": "rear_leg_goal", + "order": 4, + "bones": [ "rear_leg1", "rear_leg2" ], + "target": "rear_leg_goal", + "bendPositive": false + }, + { + "name": "spineboy_front_leg_goal", + "order": 6, + "bones": [ "front_thigh", "lower_leg" ], + "target": "spineboy_front_arm_goal", + "bendPositive": false + }, + { + "name": "spineboy_rear_leg_goal", + "order": 7, + "bones": [ "back_thigh", "back_knee" ], + "target": "spineboy_rear_arm_goal", + "bendPositive": false + }, + { + "name": "stirrup", + "order": 8, + "bones": [ "stirrup_strap1", "stirrup_strap2" ], + "target": "stirrup" + } +], +"skins": { + "default": { + "back_arm": { + "back_arm": { "x": 29.71, "y": 2.04, "rotation": 16.75, "width": 91, "height": 57 } + }, + "back_bracer": { + "back_bracer": { "x": 13.19, "y": -4.28, "rotation": -0.72, "width": 77, "height": 55 } + }, + "back_hand": { + "back_hand": { "x": 18.6, "y": 4.23, "rotation": -10.99, "width": 72, "height": 68 } + }, + "back_knee": { + "back_knee": { "x": 45.77, "y": 20.47, "rotation": 74.22, "width": 97, "height": 134 } + }, + "back_thigh": { + "back_thigh": { "x": 37.85, "y": -4.36, "rotation": 19.24, "width": 78, "height": 47 } + }, + "eyes_open": { + "eyes_open": { "x": 93.23, "y": -25.45, "rotation": -70.57, "width": 93, "height": 89 } + }, + "front_arm": { + "front_arm": { "x": 31.38, "y": 5.09, "rotation": 14.02, "width": 96, "height": 60 } + }, + "front_bracer": { + "front_bracer": { "x": 11.68, "y": -1.36, "rotation": -6.28, "width": 81, "height": 58 } + }, + "front_hand": { + "front_hand": { "x": 35.7, "y": 7.84, "rotation": -13.96, "width": 82, "height": 75 }, + "front_open_hand": { "x": 42.54, "y": 4.62, "rotation": 62.19, "width": 86, "height": 87 }, + "gun": { "x": 98.9, "y": 22.97, "rotation": 56.34, "width": 213, "height": 206 } + }, + "front_thigh": { + "front_thigh": { "x": 45.7, "y": -3.1, "rotation": 16.65, "width": 114, "height": 58 } + }, + "gun": { + "gun_nohand": { + "type": "mesh", + "uvs": [ 0.71081, 0.16149, 0.85807, 0.41784, 1, 0.6649, 1, 1, 0.71457, 1, 0.49802, 0.6905, 0.30182, 0.41009, 0, 0.58226, 0, 0.1174, 0.27187, 0.12429, 0.24857, 0, 0.36658, 0, 0.61804, 0, 0.70575, 0.53546, 0.53668, 0.26855 ], + "triangles": [ 3, 13, 2, 5, 13, 4, 3, 4, 13, 13, 6, 14, 13, 5, 6, 13, 1, 2, 6, 8, 9, 6, 7, 8, 13, 14, 1, 14, 0, 1, 6, 9, 14, 9, 11, 14, 14, 12, 0, 14, 11, 12, 9, 10, 11 ], + "vertices": [ 23.47999, 50.63, 83.86, 46.31999, 142.05, 42.16999, 197.91, 3.33999, 163.7, -45.86, 86.15, -47.34, 15.89999, -48.68, 8.42, -120.68, -69.05999, -66.80999, -35.31999, -20.72999, -58.83, -10.35, -44.68999, 9.98999, -14.55, 53.34999, 85.20999, 6.42999, 20.45, 8.19999 ], + "hull": 13, + "edges": [ 14, 12, 6, 8, 6, 4, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 8, 10, 10, 12, 6, 26, 10, 26, 4, 2, 26, 2, 22, 28, 28, 26, 12, 28, 2, 0, 0, 24, 28, 0, 18, 12 ], + "width": 210, + "height": 203 + } + }, + "head": { + "head": { "x": 132.33, "y": 1.19, "rotation": -70.57, "width": 271, "height": 298 } + }, + "lower_leg": { + "lower_leg": { "x": 76.2, "y": 22.2, "rotation": 66.28, "width": 146, "height": 195 } + }, + "mouth_smile": { + "mouth_smile": { "x": 27.66, "y": -31.33, "rotation": -70.57, "width": 93, "height": 59 } + }, + "neck": { + "neck": { "x": 15.09, "y": -1.66, "rotation": -58.91, "width": 36, "height": 41 } + }, + "raptor_arm_back": { + "raptor_arm_back": { + "type": "mesh", + "uvs": [ 0.38711, 0.29362, 0.31382, 0.46513, 0.29242, 0.51521, 0.32475, 0.4931, 0.57587, 0.32138, 0.63254, 0.28263, 0.71632, 0.34507, 0.94948, 0.51888, 0.94947, 0.60129, 1, 0.65257, 1, 0.90624, 0.95462, 0.99934, 0.88957, 0.83204, 0.80294, 0.99998, 0.75236, 0.75696, 0.6654, 0.713, 0.62288, 0.63242, 0.58194, 0.65031, 0.22478, 0.80641, 0.07791, 0.73315, 0.07825, 0.66549, 0.07984, 0.34306, 0, 0.29728, 0, 0, 0.32334, 0 ], + "triangles": [ 6, 15, 16, 5, 6, 16, 5, 16, 4, 6, 7, 15, 16, 17, 4, 8, 15, 7, 14, 15, 8, 12, 14, 8, 12, 8, 9, 12, 9, 10, 11, 12, 10, 13, 14, 12, 17, 3, 4, 19, 20, 2, 18, 19, 2, 18, 2, 3, 18, 3, 17, 21, 22, 23, 24, 21, 23, 0, 21, 24, 1, 21, 0, 1, 20, 21, 2, 20, 1 ], + "vertices": [ 2, 40, 36.95, 33.31, 0.91666, 41, 68.52999, 41.04999, 0.08332, 2, 40, 66.01999, 20.35, 0.76813, 41, 41.40999, 24.38999, 0.23185, 2, 40, 74.51, 16.56999, 0.64468, 41, 33.49, 19.53, 0.3553, 3, 40, 70.88999, 21.96999, 0.27669, 41, 39.99, 19.45999, 0.67508, 49, -29.67, -39.90999, 0.04822, 3, 40, 42.77, 63.88999, 0.11483, 41, 90.47, 18.95, 0.60853, 49, -17.2, 9, 0.2766, 2, 41, 101.86, 18.82999, 0.45954, 49, -14.38, 20.04, 0.54044, 2, 41, 106.47, 2.07999, 0.0625, 49, 2.98, 20.55999, 0.9375, 1, 49, 51.31999, 21.97999, 1, 1, 49, 60.40999, 11.1, 1, 1, 49, 72.38999, 9.60999, 1, 1, 49, 100.36, -23.87, 1, 1, 49, 104.95999, -40.9, 1, 1, 49, 78.37, -25.61, 1, 1, 49, 86.05, -56.84, 1, 1, 49, 52.91999, -30.04, 1, 2, 41, 62.24, -43.91999, 0.0625, 49, 37.18999, -33.33, 0.9375, 2, 41, 64.88999, -28.64999, 0.3125, 49, 22.97999, -27.13999, 0.6875, 2, 41, 57.68999, -27.17, 0.30612, 49, 19.82999, -33.77999, 0.69387, 2, 40, 124.19, 3.82999, 0.19394, 41, -5.09, -14.22999, 0.80603, 2, 40, 110.76999, -19.64999, 0.3125, 41, -16.87999, 10.1, 0.6875, 2, 40, 99.13999, -19.2, 0.51612, 41, -9.93, 19.44, 0.48385, 2, 40, 43.72999, -17.03, 0.9375, 41, 23.17, 63.91999, 0.0625, 1, 40, 35.40999, -29.77, 1, 1, 40, -15.68, -28.02, 1, 1, 40, -13.86999, 24.64999, 1 ], + "hull": 25, + "edges": [ 44, 46, 44, 42, 38, 36, 32, 30, 30, 28, 28, 26, 24, 22, 18, 16, 16, 14, 46, 48, 38, 4, 6, 4, 6, 36, 42, 40, 40, 38, 4, 2, 2, 0, 40, 2, 10, 32, 36, 34, 34, 32, 10, 8, 8, 6, 34, 8, 14, 12, 12, 10, 12, 30, 18, 20, 22, 20, 26, 24, 48, 0 ], + "width": 163, + "height": 172 + } + }, + "raptor_body": { + "raptor_body": { + "type": "mesh", + "uvs": [ 0.89014, 0.11136, 1, 0.22194, 1, 0.42847, 0.88179, 0.38589, 0.874, 0.47986, 0.84783, 0.51728, 0.82504, 0.54984, 0.82403, 0.61606, 0.82305, 0.67972, 0.74042, 0.86709, 0.61596, 0.93097, 0.49649, 0.90968, 0.41186, 0.71379, 0.36955, 0.70086, 0.32823, 0.68824, 0.30082, 0.69962, 0.27515, 0.71028, 0.25301, 0.71948, 0.22568, 0.73082, 0.20832, 0.72362, 0.19092, 0.7164, 0.15952, 0.70337, 0.1301, 0.69116, 0.09227, 0.67546, 0.06029, 0.63165, 0.02855, 0.58817, 0, 0.49874, 0.05045, 0.53494, 0.08267, 0.54507, 0.11815, 0.55623, 0.14733, 0.54161, 0.17913, 0.52568, 0.20324, 0.5136, 0.22867, 0.50087, 0.24871, 0.47664, 0.27523, 0.44458, 0.32026, 0.39015, 0.37517, 0.35747, 0.43476, 0.32201, 0.4893, 0.35534, 0.56021, 0.39867, 0.61587, 0.40674, 0.67769, 0.4157, 0.69094, 0.31314, 0.69362, 0.14742, 0.79219, 0.08354, 0.51541, 0.74573, 0.62393, 0.75425, 0.70856, 0.7287, 0.76132, 0.63288, 0.7566, 0.49454, 0.80613, 0.27517, 0.65885, 0.59037, 0.53929, 0.54937, 0.42632, 0.52207, 0.3246, 0.55241, 0.22715, 0.618, 0.10574, 0.61341, 0.03969, 0.56109, 0.77916, 0.39461, 0.37556, 0.53721, 0.27743, 0.58416, 0.16958, 0.61582, 0.07259, 0.58715, 0.87545, 0.31683, 0.85488, 0.21417, 0.81012, 0.17403, 0.83214, 0.25662, 0.83823, 0.32214, 0.84622, 0.41719, 0.59954, 0.57003, 0.49074, 0.53763, 0.76917, 0.43888, 0.75912, 0.56845, 0.871, 0.3701, 0.85431, 0.43545, 0.89558, 0.32412, 0.90105, 0.22877, 0.91523, 0.20564, 0.93086, 0.219, 0.93446, 0.25858, 0.91956, 0.2776, 0.9061, 0.26423, 0.9415, 0.25929, 0.93589, 0.21545, 0.91669, 0.19192, 0.89297, 0.22201, 0.90245, 0.28513, 0.92006, 0.281, 0.92143, 0.29619, 0.94856, 0.2643, 0.19894, 0.61694, 0.13973, 0.61469, 0.25158, 0.60156, 0.88779, 0.26675 ], + "triangles": [ 13, 60, 12, 12, 71, 46, 46, 70, 47, 11, 12, 46, 47, 11, 46, 10, 11, 47, 13, 14, 55, 15, 93, 14, 58, 26, 27, 28, 58, 27, 63, 28, 29, 63, 58, 28, 25, 26, 58, 25, 58, 63, 57, 63, 29, 92, 29, 30, 57, 29, 92, 24, 25, 63, 24, 63, 57, 23, 24, 57, 92, 23, 57, 22, 23, 92, 62, 22, 92, 21, 22, 62, 20, 21, 91, 92, 30, 62, 91, 21, 62, 62, 30, 31, 91, 62, 31, 31, 32, 93, 93, 91, 31, 20, 91, 56, 56, 19, 20, 17, 19, 56, 18, 19, 17, 55, 34, 35, 33, 34, 55, 61, 33, 55, 61, 32, 33, 93, 32, 61, 56, 91, 93, 56, 93, 15, 16, 56, 15, 16, 17, 56, 36, 37, 54, 60, 35, 36, 54, 60, 36, 60, 55, 35, 61, 55, 14, 93, 61, 14, 60, 13, 55, 12, 60, 54, 39, 54, 37, 39, 37, 38, 71, 54, 39, 40, 71, 39, 53, 71, 40, 53, 40, 41, 12, 54, 71, 46, 71, 53, 66, 45, 0, 44, 45, 66, 1, 84, 85, 65, 66, 0, 0, 85, 65, 85, 86, 65, 85, 0, 1, 78, 85, 84, 79, 78, 84, 78, 86, 85, 77, 86, 78, 77, 78, 79, 67, 66, 65, 83, 80, 79, 84, 83, 79, 77, 79, 80, 84, 90, 83, 82, 77, 80, 1, 90, 84, 94, 65, 86, 94, 86, 77, 94, 77, 82, 67, 65, 94, 51, 44, 66, 51, 66, 67, 81, 82, 80, 83, 88, 81, 87, 94, 82, 87, 82, 81, 87, 81, 88, 88, 90, 89, 87, 88, 89, 80, 83, 81, 90, 88, 83, 43, 44, 51, 64, 67, 94, 64, 94, 87, 68, 67, 64, 51, 67, 68, 76, 64, 87, 76, 87, 89, 74, 68, 64, 74, 64, 76, 3, 74, 76, 59, 43, 51, 59, 51, 68, 69, 59, 68, 74, 69, 68, 69, 74, 3, 90, 1, 2, 89, 90, 2, 76, 89, 2, 3, 76, 2, 75, 69, 3, 4, 75, 3, 75, 72, 69, 5, 75, 4, 5, 72, 75, 72, 59, 69, 59, 42, 43, 72, 42, 59, 50, 42, 72, 50, 72, 5, 6, 50, 5, 73, 50, 6, 52, 70, 42, 50, 52, 42, 73, 52, 50, 7, 73, 6, 49, 73, 7, 52, 73, 49, 8, 49, 7, 48, 52, 49, 48, 49, 8, 47, 52, 48, 70, 53, 41, 70, 41, 42, 46, 53, 70, 47, 70, 52, 9, 48, 8, 47, 48, 9, 10, 47, 9 ], + "vertices": [ 1, 8, 147.48, -145.48, 1, 1, 8, 89.4, -281.62, 1, 1, 8, -28.23999, -285.93, 1, 1, 8, -14.57999, -194.68, 1, 5, 2, 363.21, 87.73, 0.02178, 6, 238.38998, -84.12999, 0.20397, 7, 32.09999, -140.85, 0.18915, 8, -61.95999, -132.26, 0.41196, 39, 129.57, 6.38999, 0.17309, 5, 2, 332.7, 63.70999, 0.06904, 6, 199.57, -83.02999, 0.29423, 7, 3.69, -114.37, 0.2194, 8, -85.43, -101.31999, 0.30858, 39, 127.33999, -26.63999, 0.10869, 5, 2, 307.08, 43.5, 0.11017, 6, 166.95, -82.12999, 0.37281, 7, -20.18, -92.13999, 0.24571, 8, -105.18, -75.33999, 0.21862, 39, 123.08, -64.79, 0.05263, 5, 2, 307.75, 5.69999, 0.18145, 6, 143.25, -111.58999, 0.56511, 7, -57.43, -98.56999, 0.12043, 8, -142.98, -75.33, 0.10715, 39, 154.85, -83.48999, 0.0258, 2, 2, 308.7, -30.54999, 0.25, 6, 120.75, -140.04, 0.75, 2, 2, 213.94, -142.7, 0.75, 6, -23.82999, -165.45, 0.25, 3, 2, 64.44999, -187.34, 0.31139, 58, -158.45, 158.33, 0.10379, 1, 84.16, -190.98, 0.5848, 1, 1, -61.47, -178.84, 1, 7, 2, -193.84, -78.37, 0.01006, 58, 118.47, 114.73999, 0.07207, 59, 17.17, 122.48999, 0.17087, 60, -100.70999, 132.55, 0.06655, 61, -272.53, 39.70999, 0.01269, 62, -381.15, -123.98999, 0.00106, 1, -166.91, -67.94999, 0.66666, 7, 2, -246.26, -74, 0.00846, 58, 170.4, 123.12999, 0.06072, 59, 66.70999, 104.76999, 0.19505, 60, -53.08, 110.20999, 0.11161, 61, -220.11, 35.29999, 0.03559, 62, -331.4, -106.88999, 0.02704, 1, -217.69, -61.33, 0.56147, 7, 2, -297.45, -69.73999, 0.007, 58, 221.11, 131.31, 0.05019, 59, 115.06999, 87.47, 0.21349, 60, -6.57999, 88.38999, 0.15181, 61, -168.91998, 31, 0.05913, 62, -282.82, -90.19, 0.05445, 1, -267.66, -55.13999, 0.46388, 7, 2, -322.38, -89.70999, 0.00571, 58, 245.52998, 147.45, 0.04098, 59, 146.51, 86.08, 0.22288, 60, 26.65999, 83.38999, 0.18427, 61, -134.99, 41.34, 0.0837, 62, -257.52, -60.65, 0.08408, 1, -298.87, -61.99, 0.37832, 7, 2, -359.24, -85.09999, 0.00461, 58, 277.38, 161.09, 0.03305, 59, 178.73, 86.41, 0.22347, 60, 56.68, 81.29, 0.20918, 61, -107.12999, 46.31, 0.10922, 62, -232.44, -51.25999, 0.11588, 1, -328.68, -69.23999, 0.30452, 7, 2, -376.16, -107.83, 0.00361, 58, 294.31, 176.47, 0.0259, 59, 203.26, 86.51, 0.21875, 60, 83.05999, 77.01999, 0.22949, 61, -79.55999, 53.52999, 0.13534, 62, -210.88998, -28.29999, 0.14902, 1, -354.01, -75.41, 0.23782, 7, 2, -416.83, -99.41, 0.00301, 58, 329.83, 188.85, 0.02164, 59, 238.06, 85.41, 0.19918, 60, 115.65, 74.66, 0.23164, 61, -49.52999, 60.58, 0.16134, 62, -185.49, -14.97999, 0.18637, 1, -385.33, -83.15, 0.19674, 7, 2, -428.02, -116.80999, 0.00249, 58, 343.12, 196.13998, 0.01806, 59, 255.33, 78.84999, 0.17873, 60, 133.83, 63.18, 0.23027, 61, -27.04, 56.84, 0.18641, 62, -163.58, -5.26, 0.22335, 1, -406.45, -79.88999, 0.16063, 7, 2, -449.42, -116.23, 0.00209, 58, 364.17, 200.07, 0.01518, 59, 275.48, 71.62, 0.15813, 60, 152.97, 53.58, 0.22594, 61, -5.82, 53.93999, 0.21024, 62, -142.85, 0.10999, 0.25891, 1, -427.72, -77.47, 0.12944, 7, 2, -498.22, -88.19, 0.00178, 58, 411.52, 197.55, 0.0131, 59, 313.81, 53.61, 0.13839, 60, 188.04, 35.81999, 0.21975, 61, 31.84, 49.29999, 0.23251, 62, -106.45999, 7.48999, 0.2917, 1, -465.96, -72.58999, 0.10271, 7, 2, -524.31, -113.4, 0.00156, 58, 437.98, 213.02998, 0.01185, 59, 345.74, 45.54, 0.12065, 60, 219.6, 19.28, 0.2131, 61, 68.30999, 43.02, 0.25281, 62, -70.12999, 18.19, 0.32012, 1, -502.09, -68.19, 0.07982, 7, 2, -580.94, -76.79, 0.00147, 58, 494.56, 206.4, 0.01161, 59, 390.81, 21.29999, 0.10603, 60, 261.62, -3.66, 0.20745, 61, 114.55, 37.83, 0.27063, 62, -26.14999, 30.34, 0.34248, 1, -548.33, -63.22, 0.06027, 7, 2, -621.23, -53.97999, 0.00153, 58, 539.16, 193.96, 0.01255, 59, 423.87, -11.10999, 0.09566, 60, 291.46, -39.06, 0.20412, 61, 154.83, 14.98999, 0.28529, 62, 19.90999, 25.67, 0.35721, 1, -589.02, -42.18999, 0.0436, 7, 2, -661.22, -31.34, 0.00173, 58, 583.41, 181.62, 0.01498, 59, 456.68, -43.27, 0.09053, 60, 321.06, -74.19999, 0.20421, 61, 194.79, -7.65999, 0.29602, 62, 65.62, 21.04, 0.36309, 1, -629.78, -21.51, 0.02937, 7, 2, -698.76, 17.63999, 0.00212, 58, 631.64, 143.1, 0.01927, 59, 480.34, -100.27999, 0.09165, 60, 339.2, -133.2, 0.20843, 61, 232.3, -56.68999, 0.30195, 62, 119.69999, -8.68999, 0.35936, 1, -669.35, 25.70999, 0.01717, 7, 2, -636.21, 0.4, 0.00185, 58, 566.79, 144.77998, 0.02215, 59, 424.34, -67.51999, 0.09477, 60, 286.57, -95.26999, 0.21971, 61, 169.77, -39.4, 0.30022, 62, 55.50999, -18.07999, 0.34915, 1, -606.08, 11.21, 0.01207, 7, 2, -596.68, -3.21, 0.00182, 58, 527.55, 138.77998, 0.0279, 59, 387.08, -53.84, 0.10537, 60, 250.77, -78.11, 0.23429, 61, 130.24, -35.75, 0.29251, 62, 17.87, -30.67, 0.32978, 1, -566.25, 9.38, 0.00827, 7, 2, -553.14, -7.19999, 0.00202, 58, 484.33, 132.16998, 0.03717, 59, 346.04, -38.77999, 0.12358, 60, 211.34, -59.22, 0.25058, 61, 86.69999, -31.71999, 0.27864, 62, -23.59, -44.54, 0.30239, 1, -522.33, 7.03, 0.00553, 7, 2, -516.96, -25.93, 0.00246, 58, 449.17, 125.97, 0.05073, 59, 311.45, -35.25, 0.14934, 60, 175.88998, -56.83, 0.26647, 61, 51.52999, -43.13999, 0.2587, 62, -52.88, -67.87, 0.26866, 1, -487.23, 18.30999, 0.00359, 7, 2, -479.88, 14.23999, 0.00316, 58, 418.38, 93.72, 0.06938, 59, 269.72, -40.63999, 0.18219, 60, 135.19, -53.81999, 0.27948, 61, 13.42, -53.11, 0.23297, 62, -82.02999, -93.66, 0.23049, 1, -449.1, 30.05999, 0.00225, 7, 2, -451.64, 0.31999, 0.00417, 58, 390.82, 86.58, 0.09391, 59, 241.19, -39.79999, 0.22144, 60, 105.58999, -52.93, 0.28714, 61, -16.25, -62.15999, 0.20206, 62, -108.33999, -111.23999, 0.18983, 1, -419.88, 38.84, 0.00138, 7, 2, -420.35, 31.65999, 0.00546, 58, 364.8, 62.47999, 0.12486, 59, 207.71, -42.13999, 0.26611, 60, 73.33, -49.43, 0.28756, 61, -46.11, -70.48999, 0.16676, 62, -129.51, -133.56, 0.14835, 1, -389.13, 47.88, 8.0E-4, 7, 2, -399.11, 28.97999, 0.00747, 58, 345.49, 47.52999, 0.17172, 59, 182.34, -50.61999, 0.31858, 60, 45.86999, -56.61999, 0.26574, 61, -71.56999, -84.95999, 0.1256, 62, -150.85, -153.35, 0.11023, 1, -365.08, 62.86, 5.7E-4, 7, 2, -365.43, 66.79, 0.00956, 58, 319.95, 15.14999, 0.2203, 59, 145.6, -61.95, 0.3715, 60, 9.60999, -63.25999, 0.24135, 61, -101.05999, -105.58, 0.08415, 62, -165.65, -187.83, 0.07271, 1, -333.3, 82.65, 3.6E-4, 7, 2, -312.31, 100.77999, 0.01174, 58, 276.58, -30.61, 0.27125, 59, 85.51999, -81.11, 0.42508, 60, -52.00999, -76.62, 0.21335, 61, -154.2, -139.52, 0.04227, 62, -200.6, -240.31, 0.03607, 1, -278.65, 115.59999, 1.6E-4, 6, 2, -242.48, 124.41, 0.01401, 58, 214.5, -70.36, 0.32389, 59, 11.97, -85.98, 0.47911, 60, -125.69, -74.48, 0.1828, 61, -224.04, -163.1, 1.1E-4, 62, -255.01, -290.05, 2.0E-5, 6, 2, -166.71, 150.07, 0.02469, 58, 147.13998, -113.5, 0.57033, 59, -67.83999, -91.26, 0.38714, 60, -205.65, -72.16, 0.01755, 61, -299.83, -188.7, 1.9E-4, 62, -314.05, -344.03, 4.0E-5, 2, 2, -113.13999, 135.84, 0.24191, 58, 91.72, -112.58999, 0.75806, 2, 2, -42.11999, 116.76999, 0.14515, 58, 18.2, -111.16999, 0.85483, 1, 2, 44.2, 107.09999, 1, 2, 2, 140.09, 96.34999, 0.22578, 6, 72.58999, 65.41, 0.7742, 4, 2, 137.69, 169.35, 0.05643, 6, 117.5, 123, 0.24355, 7, 78.3, 94.48, 0.2125, 8, 23.7, 91.73999, 0.4875, 2, 7, 171.15, 111.98, 0.25, 8, 118.16999, 93.15, 0.75, 1, 8, 158.96, -25.57999, 1, 1, 1, -40.63, -86.01, 1, 3, 2, 67.33999, -86.66, 0.33215, 58, -137.02, 59.91999, 0.08303, 1, 92.54, -90.61, 0.5848, 2, 2, 170.13, -66.29, 0.75, 6, -8.52999, -78.72, 0.25, 2, 2, 231.74, -8.11999, 0.4, 6, 76.02999, -73.51999, 0.6, 5, 2, 222.04, 70.41, 0.16893, 6, 118.9, -7, 0.53729, 7, -6.57999, -3.99, 0.17073, 8, -76.73, 9.18, 0.08551, 39, 45.04999, -108.01999, 0.03748, 1, 8, 50.43, -46.56, 1, 1, 6, -9.88, 20.64999, 1, 2, 2, -53.22, 20.53, 0.2, 58, 5.8, -15.09, 0.8, 6, 2, -180.7, 32.22, 0.08489, 58, 132.35, 4.23999, 0.55722, 59, -23.97999, 19.01, 0.34911, 60, -151.51, 33.43999, 0.0085, 61, -285.75, -70.86, 1.8E-4, 62, -348.66, -230.51, 4.0E-5, 7, 2, -304.22, 7.94999, 0.0403, 58, 246.38998, 57.52999, 0.26453, 59, 101.61, 10.64999, 0.41135, 60, -27.28, 13.19999, 0.19981, 61, -162.22, -46.68999, 0.04444, 62, -245.36, -158.59, 0.03937, 1, -272.64, 22.61, 1.4E-4, 7, 2, -418.56, -35.09999, 0.01926, 58, 346.99, 126.84999, 0.12662, 59, 223.16998, 22.82999, 0.27476, 60, 94.87999, 13.77, 0.24466, 61, -47.84999, -3.72, 0.1726, 62, -158.02, -73.16, 0.16123, 1, -387.18, -18.90999, 7.9E-4, 7, 2, -566.47, -40.56999, 0.0061, 58, 489.24, 167.77, 0.04145, 59, 367.51, -9.96, 0.13446, 60, 235.45, -32.56999, 0.21638, 61, 100.05999, 1.62, 0.28345, 62, -24.80999, -8.63, 0.31257, 1, -534.79, -26.69, 0.00552, 7, 2, -648.5, -15.18999, 0.0031, 58, 574.96, 162.88, 0.02391, 59, 440.24, -55.59999, 0.09893, 60, 303.52, -84.91, 0.20698, 61, 182.07, -23.79999, 0.30202, 62, 60.47999, 1.13999, 0.35291, 1, -617.72, -4.84, 0.01207, 3, 6, 174.99, 22.21999, 0.2, 7, 54.81999, -19.13999, 0.6, 8, -18.79999, -16.2, 0.2, 6, 2, -242.34, 20.11, 0.0482, 58, 189.25, 30.82999, 0.31644, 59, 38.68, 14.84, 0.45752, 60, -89.51999, 23.34, 0.17767, 61, -224.1, -58.79999, 9.0E-5, 62, -297.11, -194.62, 2.0E-5, 7, 2, -359.57, -12.88, 0.03246, 58, 295.08, 91.08, 0.21317, 59, 160.45, 16.54, 0.3652, 60, 31.85, 13.47999, 0.22125, 61, -106.86, -25.88999, 0.08868, 62, -203.08, -117.23999, 0.07889, 1, -328.24, 2.88, 2.8E-4, 7, 2, -488.69, -37.68999, 0.01113, 58, 414.43, 146.25, 0.07357, 59, 291.61, 7.26999, 0.1952, 60, 161.52998, -8.19999, 0.2345, 61, 22.27, -1.17999, 0.2393, 62, -94.86, -42.56, 0.24398, 1, -457.15, -22.02, 0.00224, 7, 2, -607.64, -27.82999, 0.00441, 58, 532.26, 165.32, 0.03116, 59, 404.01, -32.86999, 0.11327, 60, 269.61, -58.84, 0.20983, 61, 141.21, -11.13, 0.29594, 62, 17.97999, -3.72, 0.33702, 1, -576.34, -15.61999, 0.00827, 1, 8, 26.39999, -166.06, 1, 1, 8, 87.20999, -106.12, 1, 1, 8, 108.19, -49.61999, 1, 2, 8, 61.72999, -82.12999, 0.5002, 39, 4.42, 52.83, 0.49977, 2, 8, 22.84, -109.4, 0.5002, 39, 51.52, 46.72999, 0.49977, 5, 2, 348.39, 119.12999, 0.00694, 6, 247.12, -50.52, 0.06498, 7, 60.86, -121.4, 0.06027, 8, -30.29999, -118, 0.48737, 39, 96.58, 17.21999, 0.38038, 1, 2, 26.72999, 14.8, 1, 2, 2, -107.97, 25.67, 0.24191, 58, 60.16999, -6.90999, 0.75806, 5, 2, 235.52998, 102.95999, 0.07484, 6, 150.1, 9.35, 0.34942, 7, 27.63999, -12.34, 0.40983, 8, -44.43, -4.86999, 0.14927, 39, 34.02999, -74.38999, 0.01659, 5, 2, 227.15, 28.48999, 0.29238, 6, 95.95999, -42.45999, 0.5708, 7, -47.22999, -15.43999, 0.07952, 8, -118.73999, 4.84, 0.03982, 39, 84.84999, -129.5, 0.01744, 2, 8, 5.19, -153.1, 0.87617, 39, 90.95999, 71.20999, 0.12381, 5, 2, 351.78, 108.84999, 0.01126, 6, 243.13, -60.59, 0.10548, 7, 51.20999, -126.33, 0.09781, 8, -40.65, -121.20999, 0.4654, 39, 105.70999, 17.32999, 0.31999, 1, 8, 23.69, -185.21, 1, 1, 8, 79.63999, -175.94, 1, 1, 8, 93.95999, -187.56, 1, 1, 8, 87.06999, -206.55, 1, 1, 8, 64.19999, -216.74, 1, 1, 8, 52.22999, -203.68, 1, 1, 8, 59.24, -187.02998, 1, 1, 8, 64.26, -223.8, 1, 1, 8, 89.44, -211.41, 1, 1, 8, 102.04, -186.95, 1, 1, 8, 83.09999, -166.13998, 1, 1, 8, 46.84, -186.41, 1, 1, 8, 50.31999, -204.36, 1, 1, 8, 41.7, -206.59, 1, 1, 8, 61.86999, -230.97, 1, 7, 2, -448.12, -58.75, 0.01475, 58, 374.97, 143.6, 0.09708, 59, 256.29, 17.42, 0.23314, 60, 127.43, 2.06999, 0.24171, 61, -13.35, -3.04999, 0.20841, 62, -128.13998, -55.45999, 0.20349, 1, -421.47, -20.30999, 0.00136, 7, 2, -519.55, -68.54, 0.00829, 58, 442.75, 168.18, 0.05533, 59, 327.21, 4.42, 0.162, 60, 196.27998, -19.31999, 0.22526, 61, 58.70999, -1.04999, 0.26449, 62, -62.24, -26.20999, 0.28097, 1, -493.48, -23.90999, 0.00358, 7, 2, -386.43, -41.34999, 0.02472, 58, 318.32, 113.62, 0.16235, 59, 192.26, 20.13999, 0.31904, 60, 64.19, 12.43999, 0.24198, 61, -76.55, -13.67, 0.13287, 62, -182.56, -89.30999, 0.11856, 1, -358.52, -8.28999, 4.2E-4, 2, 8, 56.97999, -162.99, 0.89258, 39, 57.54, 112, 0.1074 ], + "hull": 46, + "edges": [ 22, 20, 20, 18, 18, 16, 6, 4, 4, 2, 90, 88, 54, 52, 52, 50, 24, 22, 88, 86, 86, 84, 8, 6, 24, 26, 26, 28, 72, 74, 74, 76, 70, 72, 46, 48, 48, 50, 54, 56, 56, 58, 80, 82, 82, 84, 76, 78, 78, 80, 8, 10, 10, 12, 12, 14, 14, 16, 0, 90, 0, 2, 62, 64, 64, 66, 40, 42, 58, 60, 60, 62, 42, 44, 44, 46, 66, 68, 68, 70, 32, 34, 34, 36, 52, 116, 116, 126, 126, 114, 114, 184, 184, 124, 124, 182, 182, 112, 112, 186, 186, 122, 122, 110, 110, 120, 120, 108, 108, 142, 142, 106, 106, 140, 140, 104, 92, 94, 94, 96, 96, 98, 98, 146, 146, 100, 100, 144, 144, 118, 118, 102, 8, 150, 150, 138, 138, 136, 136, 134, 134, 132, 156, 154, 154, 164, 164, 162, 162, 160, 160, 158, 158, 156, 180, 178, 178, 174, 174, 188, 188, 172, 170, 168, 28, 30, 30, 32, 36, 38, 38, 40 ], + "width": 1219, + "height": 570 + } + }, + "raptor_front_arm": { + "raptor_front_arm": { + "type": "mesh", + "uvs": [ 0.39562, 0.1396, 0.3877, 0.30212, 0.3123, 0.41784, 0.27287, 0.47835, 0.33388, 0.4507, 0.54879, 0.35328, 0.64092, 0.31152, 0.73024, 0.36529, 1, 0.5277, 1, 0.86606, 0.93242, 1, 0.86176, 0.80967, 0.75576, 0.99765, 0.71748, 1, 0.70276, 0.77442, 0.62031, 0.73448, 0.58792, 0.64519, 0.53561, 0.6582, 0.13448, 0.75798, 0, 0.69218, 0.01846, 0.56357, 0.05498, 0.30917, 0, 0.27863, 0, 0.12423, 0, 0, 0.19596, 0, 0.40242, 0, 0.24536, 0.1924, 0.21678, 0.0811 ], + "triangles": [ 0, 28, 26, 23, 25, 28, 28, 25, 26, 23, 24, 25, 6, 7, 16, 6, 16, 5, 15, 16, 7, 7, 14, 15, 8, 14, 7, 11, 14, 8, 11, 8, 9, 12, 14, 11, 13, 14, 12, 10, 11, 9, 17, 4, 5, 16, 17, 5, 18, 19, 3, 18, 3, 4, 18, 4, 17, 27, 28, 0, 27, 22, 23, 27, 23, 28, 1, 27, 0, 21, 22, 27, 21, 27, 1, 2, 21, 1, 2, 20, 21, 3, 20, 2, 19, 20, 3 ], + "vertices": [ 2, 21, 3.05999, 31.87999, 0.51074, 6, 66.55999, -109.48, 0.48923, 1, 21, 35.86999, 35.61999, 1, 2, 21, 60.93999, 27.12, 0.8464, 22, 46.49, 31.12, 0.15358, 3, 21, 74.05, 22.67, 0.34375, 22, 36.5, 21.53, 0.64061, 31, -45.25, -29.95999, 0.01561, 3, 21, 67, 31.57999, 0.10937, 22, 47.65999, 23.68, 0.78125, 31, -40.93, -19.44, 0.10937, 3, 21, 42.16999, 62.99, 0.01561, 22, 86.98, 31.23999, 0.64061, 31, -25.75, 17.61, 0.34375, 2, 22, 103.83, 34.49, 0.34375, 31, -19.23999, 33.49, 0.65625, 2, 22, 114.04, 19.51, 0.10937, 31, -1.11, 33.84, 0.89061, 2, 22, 144.85, -25.72999, 0.02082, 31, 53.61999, 34.88, 0.97916, 1, 31, 96.02999, -19.15999, 1, 1, 31, 104.19999, -47.31, 1, 1, 31, 71.33999, -23.97999, 1, 1, 31, 81.38999, -64.61, 1, 1, 31, 76.8, -68.80999, 1, 2, 22, 83.18, -57.72, 0.02082, 31, 46.65, -34.25, 0.97916, 2, 22, 73.12999, -45.75999, 0.10937, 31, 31.13999, -36.11999, 0.89061, 2, 22, 73.98, -26.89999, 0.34375, 31, 15.81999, -25.09, 0.65625, 3, 21, 103.66999, 70.27999, 0.01561, 22, 65.09999, -26.69, 0.64061, 31, 10.77999, -32.40999, 0.34375, 3, 21, 133.56, 9.13, 0.10937, 22, -2.94, -25.03, 0.78125, 31, -27.84, -88.47, 0.10937, 3, 21, 123.66999, -14.42, 0.34375, 22, -19.29, -5.38999, 0.64061, 31, -53.22999, -91.41, 0.01561, 2, 21, 97.41, -15.43, 0.8464, 22, -8.07999, 18.37, 0.15358, 1, 21, 45.45999, -17.43, 1, 2, 21, 40.68999, -27.17, 0.45034, 6, -1.69, -93.8, 0.54963, 2, 21, -2.74, -29.62999, 0.44352, 6, 18.98999, -72.93, 0.55646, 1, 6, 32.11, -48.45, 1, 1, 6, 57.56, -67.43, 1, 1, 6, 84.37999, -87.41999, 1, 2, 21, 16.44, 5.21, 0.7182, 6, 46.31, -101.86, 0.28178, 2, 21, -4.51, 5.32, 0.48851, 6, 52.81999, -81.94, 0.51147 ], + "hull": 27, + "edges": [ 38, 36, 32, 30, 30, 28, 28, 26, 24, 26, 24, 22, 22, 20, 20, 18, 18, 16, 44, 42, 38, 6, 38, 40, 40, 42, 6, 4, 4, 2, 40, 4, 8, 6, 36, 8, 32, 12, 42, 2, 52, 0, 0, 2, 16, 14, 14, 12, 30, 14, 36, 34, 34, 32, 12, 10, 10, 8, 34, 10, 48, 50, 50, 52, 44, 46, 46, 48, 50, 56, 56, 54 ], + "width": 162, + "height": 203 + } + }, + "raptor_front_leg": { + "raptor_front_leg": { + "type": "mesh", + "uvs": [ 0.55116, 0.17817, 0.6279, 0.36027, 0.6671, 0.4533, 0.64879, 0.51527, 0.53553, 0.56893, 0.32335, 0.66946, 0.28674, 0.72086, 0.32538, 0.804, 0.36258, 0.80144, 0.42056, 0.79744, 0.61015, 0.78435, 0.84813, 0.84028, 1, 0.93854, 0.62439, 0.91738, 0.72812, 1, 0.58574, 1, 0.36707, 0.96667, 0.26306, 0.95082, 0.16266, 0.93552, 0.03859, 0.72237, 0, 0.66946, 0.0374, 0.62999, 0.1647, 0.49562, 0.23731, 0.4568, 0.27019, 0.43923, 0.28063, 0.43364, 0.223, 0.4057, 0.12565, 0.35851, 0, 0.29759, 0, 0.1524, 0, 0, 0.32132, 0, 0.32222, 0.22778, 0.4493, 0.38031, 0.47664, 0.44361, 0.4615, 0.47375, 0.35106, 0.53247, 0.20091, 0.65256, 0.18527, 0.72148, 0.25222, 0.86314, 0.30941, 0.88124, 0.55694, 0.89613, 0.55857, 0.89207, 0.47493, 0.85339, 0.6059, 0.91526, 0.39705, 0.89129, 0.13229, 0.09352, 0.36997, 0.45345, 0.37163, 0.43827, 0.32515, 0.39424, 0.23759, 0.34425, 0.34065, 0.47414 ], + "triangles": [ 46, 30, 31, 15, 44, 13, 13, 11, 12, 11, 13, 10, 10, 13, 42, 13, 44, 42, 41, 43, 42, 42, 43, 10, 43, 9, 10, 41, 42, 44, 45, 41, 44, 45, 43, 41, 14, 15, 13, 16, 45, 15, 15, 45, 44, 17, 40, 16, 16, 40, 45, 45, 40, 8, 45, 9, 43, 45, 8, 9, 18, 39, 17, 17, 39, 40, 18, 38, 39, 18, 19, 38, 40, 7, 8, 40, 39, 7, 39, 6, 7, 39, 38, 6, 20, 21, 19, 19, 21, 38, 38, 37, 6, 38, 21, 37, 6, 37, 5, 5, 36, 4, 5, 37, 36, 36, 23, 51, 36, 37, 23, 21, 22, 37, 37, 22, 23, 36, 35, 4, 4, 35, 3, 36, 47, 35, 36, 51, 47, 35, 34, 3, 3, 34, 2, 23, 24, 51, 51, 24, 47, 47, 48, 35, 35, 48, 34, 24, 25, 47, 47, 25, 48, 34, 1, 2, 48, 33, 34, 34, 33, 1, 25, 49, 48, 48, 49, 33, 25, 26, 49, 26, 50, 49, 26, 27, 50, 33, 49, 32, 49, 50, 32, 33, 0, 1, 33, 32, 0, 50, 27, 46, 32, 50, 46, 46, 27, 28, 28, 29, 46, 46, 31, 32, 32, 31, 0, 29, 30, 46 ], + "vertices": [ 3, 25, 128.02998, 88.47, 0.83907, 26, -70.19999, -134.13, 0.01331, 1, 158.83, -71.91, 0.14759, 2, 25, 219.55, 53.15, 0.77987, 26, -48.04, -38.58, 0.2201, 3, 25, 266.3, 35.09999, 0.5353, 26, -36.72999, 10.22, 0.46443, 28, 127.25, 245.46, 2.3E-4, 4, 25, 286.89, 9.78999, 0.35076, 26, -14.56, 34.13999, 0.64666, 28, 125.69, 212.88, 0.0023, 29, 101.38999, 199.13, 2.5E-4, 4, 25, 281.54, -41.24, 0.09168, 26, 36.70999, 36, 0.90196, 28, 87.63999, 178.44, 0.00512, 29, 58.29, 171.29, 0.00118, 5, 25, 271.53, -136.86, 0.05607, 26, 132.77, 39.47999, 0.69231, 27, 34.99, 78.76, 0.22087, 28, 16.37999, 113.93, 0.02239, 29, -22.45, 119.12999, 0.00829, 5, 25, 283.51, -164.25, 0.01986, 26, 158.21, 55.16999, 0.50334, 27, 52.65, 54.63, 0.36169, 28, 7.01, 85.54, 0.08321, 29, -36.27999, 92.62999, 0.03184, 6, 25, 326.15, -179.3, 0.00798, 26, 167.13998, 99.48999, 0.21326, 27, 97.55, 49.25, 0.35074, 28, 28.71999, 45.86999, 0.14106, 29, -21.26, 49.99, 0.22311, 30, -72.29, 25.95999, 0.06379, 6, 25, 333.96, -167.35, 0.00242, 26, 154.22, 105.55, 0.07519, 27, 102.56999, 62.59999, 0.22994, 28, 42.50999, 49.54999, 0.2831, 29, -7.05999, 51.38999, 0.2694, 30, -58.16999, 28.03, 0.13991, 6, 25, 344.19, -149.68, 4.9E-4, 26, 134.24, 114.44, 0.01759, 27, 109.72, 83.38999, 0.11395, 28, 64.08999, 55.22999, 0.07976, 29, 15.11999, 53.50999, 0.36291, 30, -36.09, 31.19, 0.42522, 1, 30, 35.79999, 41.81, 1, 1, 30, 128.11, 17.93, 1, 1, 30, 188.72, -29.42, 1, 1, 30, 44.86, -26.17, 1, 1, 29, 133.16998, -49.83, 1, 1, 29, 78.77999, -50.15, 1, 5, 25, 399.32, -220.02, 2.2E-4, 26, 195.56, 179.43, 0.01703, 27, 179.46, 27.52, 0.2372, 28, 58.34, -33.93, 0.20229, 29, -4.90999, -33.54999, 0.54324, 5, 25, 370.41, -244.91, 3.1E-4, 26, 225.9, 152.49, 0.02512, 27, 155.04, -5.13, 0.35003, 28, 17.87999, -32.5, 0.29851, 29, -44.61999, -25.61, 0.32598, 5, 25, 340.37, -270.04, 0.00251, 26, 254.98, 126.26999, 0.10129, 27, 131.21, -36.2, 0.54075, 28, -21.23999, -31.17, 0.20819, 29, -83.01999, -17.96999, 0.14722, 5, 25, 225.1, -238.94, 0.01528, 26, 240.33, 7.80999, 0.24036, 27, 11.93999, -30.97999, 0.5788, 28, -86.30999, 68.9, 0.12022, 29, -131.06, 91.29, 0.04527, 5, 25, 194.63998, -233.55, 0.04819, 26, 239.26, -23.1, 0.40426, 27, -18.95999, -32.36999, 0.48451, 28, -105.4, 93.25, 0.04603, 29, -145.97, 118.4, 0.01696, 5, 25, 187.65, -209.73, 0.09565, 26, 216.66, -33.34999, 0.57617, 27, -30.96999, -10.64999, 0.30651, 28, -94.70999, 115.65, 0.01788, 29, -131.8, 138.77998, 0.00375, 4, 25, 163.85, -128.66998, 0.19532, 26, 139.75, -68.26, 0.8011, 28, -58.31999, 191.88, 0.00326, 29, -83.58, 208.13, 2.8E-4, 4, 25, 165.74, -94.48999, 0.3192, 26, 105.58999, -71.26, 0.67949, 28, -5.03999, 220.72, 0.00116, 29, -56.31999, 275.96, 9.0E-5, 4, 25, 166.38998, -79.06999, 0.46204, 26, 90.23, -72.76, 0.53751, 28, 5.55, 230.48, 3.9E-4, 29, -40.61, 286.16, 1.0E-5, 3, 25, 166.49, -74.16999, 0.53779, 26, 85.41999, -73.27999, 0.46208, 28, -19.98999, 230.7, 1.1E-4, 2, 25, 141.54, -82.45999, 0.73137, 26, 97.12999, -96.81999, 0.26861, 3, 25, 99.76, -97.08, 0.81379, 26, 117.33999, -136.23, 0.13997, 1, -2.55999, -164.19, 0.04622, 3, 25, 45.00999, -114.55999, 0.81859, 26, 142.41, -187.88998, 0.02098, 1, -51.09, -135.29, 0.1604, 3, 25, -16.2, -74.76, 0.62388, 26, 113.81999, -253.08, 0.00951, 1, -42.95, -58.38, 0.36658, 2, 25, -74.73, -19.32999, 0.31468, 1, -52.65999, 17.54999, 0.68531, 2, 25, 1.66999, 76.75, 0.25576, 1, 70.06999, 18.78, 0.74422, 1, 25, 93.54, 4.13, 1, 2, 25, 185.13998, -6.65999, 0.75461, 26, 15.97999, -64.26999, 0.24537, 2, 25, 217.11, -18.75, 0.50844, 26, 23.46999, -30.93, 0.49154, 3, 25, 225.63, -32.91999, 0.32512, 26, 36.29999, -20.5, 0.67439, 28, 51.56999, 221.95, 4.6E-4, 4, 25, 223, -84.73, 0.2006, 26, 87.95999, -15.85999, 0.79286, 28, 15.02999, 185.13, 0.00581, 29, -12.27999, 189.61, 6.9E-4, 5, 25, 235.61, -168.06, 0.07777, 26, 168.69, 8.28999, 0.54931, 27, 6.73999, 40.47, 0.33412, 28, -31.18, 114.66, 0.03209, 29, -69.26999, 127.55, 0.00667, 5, 25, 259.63, -194.79, 0.0192, 26, 191.79, 35.79999, 0.30498, 27, 36, 19.62, 0.53641, 28, -31.13999, 78.73999, 0.09567, 29, -75.02999, 92.08999, 0.04368, 5, 25, 332.55, -220.1, 0.00292, 26, 206.63998, 111.52999, 0.10775, 27, 112.69, 10.81999, 0.51915, 28, 6.25, 11.22999, 0.23449, 29, -49.02999, 19.43, 0.13565, 4, 26, 192.51, 130.62, 0.03212, 27, 130.6, 26.40999, 0.33941, 28, 29.35, 5.71, 0.27333, 29, -27.12, 10.25, 0.3551, 1, 30, 18.54999, -16.62999, 1, 1, 30, 19.06999, -14.51, 1, 6, 25, 381.55, -150.4, 3.0E-4, 26, 130.71, 150.34, 0.0081, 27, 145.36, 89.52999, 0.04101, 28, 89.29, 30.40999, 0.02558, 29, 36, 24.95, 0.37635, 30, -13.89, 3.64, 0.5486, 1, 30, 37.75, -25.45999, 1, 4, 26, 164.9, 153.55, 0.02263, 27, 151.18, 56, 0.23907, 28, 65.44, 5.55, 0.19254, 29, 8.44999, 4.26999, 0.54574, 2, 25, -9.27999, -17.5, 0.59605, 1, 7.71999, -30.85, 0.40393, 3, 25, 195.9, -53.81, 0.42355, 26, 61.11, -47.06, 0.57612, 28, 39.7, 225.21, 2.8E-4, 3, 25, 190.1, -48.45, 0.53227, 26, 56.61, -53.56, 0.46764, 28, 39.83, 233.12, 5.0E-5, 2, 25, 161.26, -48.25999, 0.79873, 26, 60.43999, -82.12999, 0.20126, 3, 25, 120.37, -58.54, 0.8485, 26, 76.30999, -121.18, 0.1444, 1, 41.04, -161.4, 0.00706, 4, 25, 197.37, -69.23, 0.33487, 26, 76.16999, -43.45999, 0.66324, 28, 30.34, 213.88, 0.0017, 29, -9.09, 262.42, 1.8E-4 ], + "hull": 32, + "edges": [ 40, 38, 38, 36, 28, 30, 28, 26, 26, 24, 24, 22, 22, 20, 14, 12, 12, 10, 6, 4, 60, 62, 0, 62, 40, 42, 42, 44, 34, 36, 16, 14, 52, 50, 4, 2, 2, 0, 10, 8, 8, 6, 72, 74, 74, 76, 76, 78, 78, 80, 80, 90, 90, 88, 16, 18, 18, 20, 30, 32, 32, 34, 56, 58, 58, 60, 94, 96, 96, 98, 52, 54, 54, 56, 100, 98, 48, 50, 44, 46, 46, 48, 102, 94, 72, 70, 70, 68, 66, 68, 66, 64, 64, 92, 86, 84, 50, 96, 94, 48, 46, 102, 52, 98, 54, 100, 70, 6, 68, 4, 66, 2, 72, 8, 86, 20, 86, 82, 82, 88, 84, 26, 88, 26 ], + "width": 382, + "height": 514 + } + }, + "raptor_hindleg_back": { + "raptor_hindleg_back": { + "type": "mesh", + "uvs": [ 0.45041, 0.09352, 0.56933, 0.23361, 0.65294, 0.47296, 0.66353, 0.50822, 0.63174, 0.54254, 0.32383, 0.69723, 0.30068, 0.73875, 0.27934, 0.77704, 0.30417, 0.83513, 0.31058, 0.85014, 0.341, 0.85046, 0.45165, 0.85163, 0.59555, 0.81881, 0.91176, 0.92548, 1, 1, 0.56336, 0.96426, 0.48349, 0.9826, 0.29878, 0.98027, 0.22808, 0.98389, 0.15997, 0.98737, 0.15423, 0.95546, 0.13894, 0.87047, 0.07371, 0.78726, 0, 0.75299, 0, 0.7049, 0, 0.671, 0.11875, 0.64652, 0.16535, 0.52659, 0.28495, 0.47397, 0.2901, 0.45773, 0.29427, 0.4446, 0.20635, 0.40396, 0.06128, 0.33691, 0, 0.25247, 0, 0, 0.30793, 0, 0.27599, 0.20261, 0.40397, 0.31121, 0.48439, 0.45963, 0.48317, 0.48383, 0.47029, 0.51062, 0.22698, 0.67328, 0.17141, 0.7242, 0.17122, 0.78241, 0.22995, 0.89469, 0.24677, 0.90829, 0.28672, 0.9146, 0.46582, 0.91414 ], + "triangles": [ 15, 47, 12, 15, 12, 13, 16, 47, 15, 15, 13, 14, 47, 11, 12, 47, 46, 10, 47, 10, 11, 17, 46, 47, 17, 47, 16, 18, 45, 46, 18, 46, 17, 22, 23, 24, 43, 42, 7, 43, 22, 42, 21, 22, 43, 44, 43, 7, 44, 7, 8, 44, 8, 9, 21, 43, 44, 45, 44, 9, 46, 45, 9, 46, 9, 10, 20, 21, 44, 20, 45, 19, 44, 45, 20, 45, 18, 19, 40, 29, 39, 28, 29, 40, 40, 39, 4, 41, 27, 28, 26, 27, 41, 41, 28, 40, 5, 41, 40, 5, 40, 4, 24, 25, 26, 42, 26, 41, 24, 26, 42, 6, 41, 5, 42, 41, 6, 7, 42, 6, 24, 42, 22, 36, 34, 35, 36, 35, 0, 33, 34, 36, 37, 36, 0, 37, 0, 1, 32, 33, 36, 31, 32, 36, 31, 36, 37, 30, 31, 37, 38, 37, 1, 30, 37, 38, 38, 1, 2, 39, 30, 38, 39, 38, 2, 29, 30, 39, 39, 2, 3, 4, 39, 3 ], + "vertices": [ 1, 44, 53.93999, 69.15, 1, 1, 44, 126.23, 67.30999, 1, 2, 44, 226.41998, 31.12999, 0.9375, 45, -30.87, -1.11, 0.0625, 2, 44, 240.84, 25.32999, 0.69998, 45, -25.63999, 13.52, 0.3, 2, 44, 246.66998, 8.05, 0.3, 45, -8.60999, 20.02, 0.69998, 3, 44, 240.81, -115.25, 0.0625, 45, 114.8, 19.01, 0.875, 46, 9.47999, 59.15999, 0.0625, 2, 45, 131.07, 29.69, 0.69998, 46, 22.11, 44.34999, 0.3, 2, 45, 146.06, 39.54, 0.3, 46, 33.75999, 30.70999, 0.69998, 4, 45, 152.6, 65.01, 0.12437, 46, 59.84999, 27.40999, 0.74434, 47, 15.85, 48.04999, 0.12104, 48, -80.51999, 23.87, 0.01021, 4, 45, 154.27998, 71.58999, 0.05189, 46, 66.58999, 26.55999, 0.74748, 47, 16.71999, 41.31, 0.154, 48, -77.54, 17.76, 0.04658, 4, 45, 145.73, 77.3, 0.02192, 46, 71.19, 35.75999, 0.63296, 47, 26.78, 39.16999, 0.1288, 48, -67.31999, 18.95999, 0.21627, 3, 46, 87.93, 69.20999, 0.0625, 47, 63.36999, 31.38999, 0.675, 48, -30.17, 23.29999, 0.26249, 2, 47, 113.81999, 35.72, 0.10379, 48, 16.22999, 43.56, 0.89618, 1, 48, 128.13998, 12.02, 1, 1, 48, 161.85, -15.81, 1, 2, 47, 90.98, -23.36, 0.01379, 48, 13.52, -19.71999, 0.98619, 2, 47, 62.97, -25.80999, 0.69998, 48, -12.22999, -31.02, 0.3, 3, 46, 115.12, -1.33, 0.08332, 47, 1.92999, -12.65999, 0.83332, 48, -74.26, -38.09999, 0.08332, 2, 46, 106.11, -23.53, 0.3, 47, -21.79999, -9.52, 0.69998, 2, 46, 97.43, -44.9, 0.69998, 47, -44.66999, -6.51, 0.3, 2, 46, 84.26, -40.68999, 0.9375, 47, -43.9, 7.28999, 0.0625, 1, 46, 49.18, -29.45999, 1, 2, 45, 206.75, 5.36999, 0.13333, 46, 7.44, -33.77, 0.86665, 2, 45, 219.63998, -20.52, 0.36111, 46, -16.63999, -49.79999, 0.63888, 2, 45, 208.4, -37.81999, 0.72083, 46, -35.22, -40.81999, 0.27915, 2, 45, 200.49, -50.02, 0.91666, 46, -48.31, -34.47999, 0.08332, 1, 45, 161.1, -36.97, 1, 2, 44, 150.1, -116.76, 0.08332, 45, 119.87999, -71.55, 0.91666, 2, 44, 154.99, -70.70999, 0.42846, 45, 73.68, -68.47, 0.57152, 2, 44, 150.3, -65.26999, 0.35604, 45, 68.41999, -73.36, 0.64394, 2, 44, 146.51, -60.86999, 0.59147, 45, 64.16999, -77.31999, 0.40852, 2, 44, 115.12, -75.08, 0.8446, 45, 79.61, -108.12999, 0.15538, 1, 44, 63.33, -98.52999, 1, 1, 44, 21.78, -94.55, 1, 1, 44, -66.69, -32.04, 1, 1, 44, -6.61999, 52.97, 1, 1, 44, 58.13999, -6, 1, 1, 44, 121.16999, 2.44, 1, 2, 44, 188.87, -12.1, 0.95999, 45, 13.78999, -36.91999, 0.03999, 2, 44, 197.11, -18.42, 0.69998, 45, 19.79, -28.44, 0.3, 2, 44, 203.98, -28.61, 0.3, 45, 29.69, -21.17, 0.69998, 3, 44, 213.52998, -136.06, 0.03999, 45, 136.66998, -7.42, 0.91999, 46, -14.02, 34.15999, 0.03999, 2, 45, 164.32, 0.66, 0.69998, 46, -2.52999, 7.73, 0.3, 2, 45, 177.97, 21.56999, 0.25, 46, 19.92, -3.19, 0.75, 3, 45, 187.55, 72.77999, 0.03999, 46, 71.93, -6.28999, 0.91999, 47, -13.72, 27.87, 0.03999, 2, 46, 79.66, -3.72, 0.69998, 47, -9.27999, 21.04, 0.3, 3, 46, 87.98, 7.25, 0.3, 47, 3.42, 15.76, 0.66, 48, -81.95999, -10.69999, 0.03999, 3, 46, 114.16, 61.84999, 0.03999, 47, 62.84, 4.15, 0.69998, 48, -21.95, -2.66, 0.25999 ], + "hull": 36, + "edges": [ 66, 68, 66, 64, 56, 54, 54, 52, 52, 50, 46, 44, 44, 42, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 68, 70, 0, 70, 46, 48, 48, 50, 14, 12, 12, 10, 60, 58, 58, 56, 42, 40, 40, 38, 18, 16, 16, 14, 22, 20, 20, 18, 38, 36, 36, 34, 60, 62, 62, 64, 68, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 84, 84, 86, 16, 88, 86, 88, 18, 90, 90, 38, 88, 90, 20, 92, 92, 36, 90, 92, 92, 94, 94, 22, 94, 32, 30, 24, 88, 40, 86, 14, 84, 12, 82, 10, 82, 52, 48, 84, 44, 86, 78, 6, 4, 76, 80, 8, 80, 56, 58, 78, 76, 60 ], + "width": 338, + "height": 429 + } + }, + "raptor_horn": { + "raptor_horn": { "x": 156.2, "y": 74.1, "rotation": -137.26, "width": 363, "height": 159 } + }, + "raptor_horn_back": { + "raptor_horn_back": { "x": 121.42, "y": 83.01, "rotation": -132.21, "width": 351, "height": 153 } + }, + "raptor_jaw": { + "raptor_jaw": { + "type": "mesh", + "uvs": [ 0.40984, 0.22169, 0.42214, 0.3988, 0.67894, 0.53819, 0.7589, 0.62838, 0.99998, 0.4726, 1, 0.53491, 0.87731, 0.77925, 0.63281, 0.94487, 0.39908, 0.96947, 0.19456, 0.89404, 0.21609, 0.6497, 0, 0.46111, 0, 0, 0.26069, 0, 0.19456, 0.29385 ], + "triangles": [ 14, 13, 0, 14, 0, 1, 5, 3, 4, 10, 14, 1, 11, 14, 10, 6, 3, 5, 2, 10, 1, 7, 2, 3, 7, 3, 6, 2, 8, 10, 8, 9, 10, 2, 7, 8, 14, 12, 13, 11, 12, 14 ], + "vertices": [ 1, 39, 28.6, 68.84999, 1, 1, 39, 69.65, 38.95, 1, 1, 39, 150.72, 72.87999, 1, 1, 39, 186.16, 74.79, 1, 1, 39, 199.76, 159.69, 1, 1, 39, 213.35, 148.16, 1, 1, 39, 242.43, 74.41999, 1, 1, 39, 230.31, -13.07999, 1, 1, 39, 189.56, -71.98999, 1, 1, 39, 132.76, -105.59999, 1, 1, 39, 83.70999, -55.38999, 1, 2, 8, -18.30999, 12.1, 0.67732, 39, -0.03999, -70.76, 0.32267, 1, 8, 113.44, 16.95, 1, 1, 8, 116.36, -62.47999, 1, 1, 39, 1.86, 5.42999, 1 ], + "hull": 14, + "edges": [ 22, 24, 22, 20, 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 24, 26, 0, 26, 24, 28, 22, 28, 28, 0 ], + "width": 305, + "height": 286 + } + }, + "raptor_saddle_noshadow": { + "raptor_saddle_noshadow": { "x": 80.83, "y": 10.63, "rotation": -88.64, "width": 326, "height": 375 } + }, + "raptor_saddle_strap_front": { + "raptor_saddle_strap_front": { "x": 128.83, "y": -4.71, "rotation": 61.29, "width": 114, "height": 189 } + }, + "raptor_saddle_strap_rear": { + "raptor_saddle_strap_rear": { + "type": "mesh", + "uvs": [ 0.85499, 0.06802, 1, 0.13237, 1, 0.20266, 0.95981, 0.26524, 0.88583, 0.38045, 0.80684, 0.46413, 0.74038, 0.53453, 0.81676, 0.5895, 0.51961, 1, 0.4516, 1, 0.01739, 0.8407, 0, 0.80889, 0.24645, 0.36639, 0.3792, 0.39151, 0.42457, 0.32099, 0.49229, 0.21571, 0.57673, 0.10986, 0.66437, 0, 0.70168, 0, 0.56028, 0.46321, 0.68822, 0.29772, 0.76845, 0.18722, 0.61529, 0.39206 ], + "triangles": [ 19, 14, 22, 13, 14, 19, 19, 22, 6, 13, 10, 11, 9, 13, 19, 8, 9, 19, 6, 8, 19, 13, 11, 12, 9, 10, 13, 7, 8, 6, 15, 16, 20, 20, 21, 4, 22, 15, 20, 14, 15, 22, 5, 20, 4, 22, 20, 5, 6, 22, 5, 21, 18, 0, 16, 17, 18, 21, 16, 18, 0, 1, 2, 3, 21, 0, 2, 3, 0, 20, 16, 21, 4, 21, 3 ], + "vertices": [ 1, 52, 3.9, -3.26999, 1, 1, 52, 4.25, 15.05, 1, 1, 52, 13.23999, 20.28, 1, 2, 52, 23.42, 21.2, 0.69998, 53, -15.19999, 21.21999, 0.3, 3, 52, 41.11, 22.87, 0.3, 53, 2.48, 22.88999, 0.63748, 54, -33.83, 24.95999, 0.0625, 3, 52, 52.06999, 21.71999, 0.0625, 53, 13.43, 21.73999, 0.63748, 54, -22.96999, 23.11, 0.3, 2, 53, 18.38999, 20.76, 0.25, 54, -18.09, 21.81999, 0.75, 1, 54, -18.76, 33.09, 1, 1, 54, 49.91999, 31.56999, 1, 1, 54, 53.20999, 25, 1, 1, 54, 53.11, -27.47999, 1, 1, 54, 49.74, -31.27, 1, 1, 54, -20.72999, -36.75999, 1, 1, 54, -23.81999, -22.28, 1, 3, 52, 53.47999, -24.61, 0.0625, 53, 14.84, -24.59, 0.57498, 54, -24.51, -23.20999, 0.3625, 3, 52, 41.43999, -26.12, 0.3, 53, 2.80999, -26.09, 0.63748, 54, -36.61999, -23.95, 0.0625, 2, 52, 24.37999, -26.12, 0.69998, 53, -14.23999, -26.1, 0.3, 1, 52, 5.57, -26.12, 1, 1, 52, 3.53999, -22.63999, 1, 1, 54, -23.07999, -0.03999, 1, 3, 52, 41.65999, -1.72, 0.3, 53, 3.02999, -1.7, 0.66, 54, -34.84999, 0.37999, 0.03999, 2, 52, 23.85, -2.46, 0.69998, 53, -14.77, -2.44, 0.3, 3, 52, 52.58, -1.51999, 0.03999, 53, 13.94999, -1.5, 0.62, 54, -23.94, -0.10999, 0.34 ], + "hull": 19, + "edges": [ 26, 24, 24, 22, 22, 20, 20, 18, 16, 18, 16, 14, 14, 12, 4, 2, 34, 36, 12, 38, 38, 26, 8, 40, 40, 30, 2, 0, 0, 36, 30, 32, 32, 34, 32, 42, 4, 6, 6, 8, 42, 6, 26, 28, 28, 30, 28, 44, 8, 10, 10, 12, 44, 10 ], + "width": 108, + "height": 148 + } + }, + "raptor_saddle_w_shadow": { + "raptor_saddle_w_shadow": { "x": 80.83, "y": 10.63, "rotation": -88.64, "width": 326, "height": 375 } + }, + "raptor_tongue": { + "raptor_tongue": { + "type": "mesh", + "uvs": [ 0.35242, 0.2156, 0.4794, 0.44245, 0.62071, 0.61176, 0.80562, 0.75373, 1, 0.90297, 1, 1, 0.8971, 1, 0.72054, 0.92254, 0.50668, 0.82872, 0.30401, 0.70725, 0.10537, 0.57888, 0, 0.50622, 0, 0, 0.26224, 0 ], + "triangles": [ 8, 7, 6, 6, 4, 5, 4, 6, 3, 6, 7, 3, 7, 8, 3, 8, 2, 3, 9, 10, 1, 8, 9, 2, 9, 1, 2, 1, 10, 0, 10, 11, 0, 0, 12, 13, 0, 11, 12 ], + "vertices": [ 2, 63, 3.63, 27.04, 0.6875, 64, -47.25999, 33.86999, 0.3125, 3, 63, 39.09, 19.45, 0.3125, 64, -13.40999, 20.86, 0.625, 65, -51.54, 33.36999, 0.0625, 3, 63, 71.55999, 19.02, 0.0625, 64, 18.57999, 15.39, 0.625, 65, -21.55999, 20.92, 0.3125, 2, 64, 55.02999, 16.85, 0.3125, 65, 14.28999, 14.22999, 0.6875, 2, 64, 93.33999, 18.38999, 0.08332, 65, 51.97999, 7.21, 0.91666, 1, 65, 56.09, -4.5, 1, 2, 64, 85.05999, -1.49, 0.08332, 65, 39.47999, -10.32999, 0.91666, 2, 64, 54.22, -9.18, 0.3125, 65, 7.71, -10.96, 0.6875, 3, 63, 75.13999, -14.72, 0.0625, 64, 16.87, -18.5, 0.625, 65, -30.77, -11.72999, 0.3125, 3, 63, 38.79999, -25.79999, 0.3125, 64, -20.73999, -23.79999, 0.625, 65, -68.62, -8.52999, 0.0625, 2, 63, 2.4, -35.77, 0.6875, 64, -58.25, -27.98999, 0.3125, 2, 63, -17.28, -40.61999, 0.91666, 64, -78.44999, -29.70999, 0.08332, 1, 63, -59.90999, 8.18, 1, 2, 63, -26.12999, 37.68999, 0.91666, 64, -75.01999, 49.02, 0.08332 ], + "hull": 14, + "edges": [ 22, 24, 10, 12, 10, 8, 24, 26, 16, 4, 18, 16, 2, 4, 18, 2, 22, 20, 0, 26, 20, 0, 0, 2, 12, 14, 14, 16, 4, 6, 6, 8, 14, 6, 20, 18 ], + "width": 171, + "height": 128 + } + }, + "spineboy_torso": { + "torso": { "x": 55.88, "y": 4.86, "rotation": -104.14, "width": 108, "height": 182 } + }, + "stirrup_back": { + "stirrup_back": { "x": 53.2, "y": 31.34, "rotation": -21.12, "width": 87, "height": 69 } + }, + "stirrup_front": { + "stirrup_front": { "x": 36.13, "y": 20.39, "rotation": -21.12, "width": 89, "height": 100 } + }, + "stirrup_strap": { + "stirrup_strap": { + "type": "mesh", + "uvs": [ 0.36822, 0.27893, 0.45737, 0.38897, 0.54451, 0.49651, 0.67872, 0.59135, 0.81977, 0.69102, 1, 0.77344, 1, 1, 0.77956, 1, 0.63729, 0.81629, 0.53364, 0.72348, 0.40534, 0.6086, 0.30886, 0.52535, 0.21049, 0.44047, 0, 0.26245, 0, 0, 0.30637, 0, 0.20241, 0.23 ], + "triangles": [ 2, 10, 1, 9, 10, 2, 9, 2, 3, 8, 9, 3, 8, 3, 4, 7, 8, 4, 7, 4, 5, 7, 5, 6, 16, 14, 15, 13, 14, 16, 16, 15, 0, 12, 16, 0, 12, 0, 1, 13, 16, 12, 11, 12, 1, 10, 11, 1 ], + "vertices": [ 2, 56, 24.70999, 8.02999, 0.80343, 57, -17.42, 11.02, 0.19654, 2, 56, 37.95, 8.03999, 0.59978, 57, -4.36, 8.86999, 0.4002, 2, 56, 50.88, 8.03999, 0.36895, 57, 8.39, 6.76999, 0.63103, 2, 56, 65.91999, 12.27, 0.17747, 57, 23.90999, 8.47999, 0.82251, 2, 56, 81.72, 16.7, 0.05942, 57, 40.22999, 10.27999, 0.94055, 2, 56, 98.81999, 25.04, 0.01209, 57, 58.45999, 15.71, 0.9879, 2, 56, 114.44, 11.56999, 0.0019, 57, 71.66999, -0.10999, 0.99808, 2, 56, 100.47, -4.61, 0.01816, 57, 55.25, -13.81, 0.98181, 2, 56, 78.79, -4.13999, 0.07486, 57, 33.93999, -9.81, 0.92511, 2, 56, 65.83, -6.23999, 0.2028, 57, 20.80999, -9.76, 0.79719, 2, 56, 49.77999, -8.82999, 0.3997, 57, 4.55, -9.69999, 0.60027, 2, 56, 37.93, -10.97, 0.62657, 57, -7.48, -9.88, 0.3734, 2, 56, 25.85, -13.14999, 0.82033, 57, -19.75, -10.06, 0.17964, 2, 56, 0.25, -18.03, 0.95288, 57, -45.81, -10.69999, 0.0471, 2, 56, -17.82999, -2.43, 0.97709, 57, -61.11, 7.63, 0.0229, 2, 56, 1.57, 20.06999, 0.94774, 57, -38.29, 26.67, 0.05225, 2, 56, 10.84, -1.23, 0.97709, 57, -32.61999, 4.13999, 0.0229 ], + "hull": 16, + "edges": [ 28, 30, 30, 0, 12, 10, 8, 10, 12, 14, 14, 16, 26, 28, 24, 26, 26, 32, 32, 30, 20, 22, 22, 24, 0, 2, 2, 4, 4, 6, 6, 8, 16, 18, 18, 20 ], + "width": 97, + "height": 91 + } + }, + "visor": { + "visor": { "x": 99.13, "y": 6.51, "rotation": -70.57, "width": 261, "height": 168 } + } + } +}, +"events": { + "footstep": {} +}, +"animations": { + "Jump": { + "bones": { + "root": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { + "time": 0.3, + "x": 0, + "y": 0, + "curve": [ 0.201, 0.17, 0.815, 0.83 ] + }, + { "time": 0.6666, "x": 1482.78, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_foot_goal": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.2, "angle": 0 }, + { "time": 0.3, "angle": -41.64 }, + { "time": 0.3666, "angle": -69.66 }, + { "time": 0.4333, "angle": -12.8 }, + { "time": 0.5333, "angle": 5.73 }, + { "time": 0.6666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.3, "x": 0, "y": 0 }, + { "time": 0.3666, "x": -60.01, "y": 111.1 }, + { "time": 0.4333, "x": 213.18, "y": 291.22 }, + { "time": 0.5333, "x": 243.73, "y": 332.61 }, + { "time": 0.6666, "x": 95.94, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.6666, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": -4.48 }, + { "time": 0.1, "angle": -23.02 }, + { "time": 0.3, "angle": 19.24 }, + { "time": 0.5333, "angle": 20.85 }, + { "time": 0.6666, "angle": -10.76 }, + { "time": 0.7666, "angle": -18.58 }, + { "time": 0.9333, "angle": -3.56 }, + { "time": 1.0666, "angle": -4.48 } + ], + "translate": [ + { "time": 0, "x": -100.65, "y": 49.77 }, + { + "time": 0.1, + "x": 9.37, + "y": -109.06, + "curve": [ 0.245, 0, 0.609, 0.41 ] + }, + { + "time": 0.1666, + "x": 150.37, + "y": -76.51, + "curve": [ 0.401, 0.34, 0.858, 0.87 ] + }, + { "time": 0.3, "x": 361, "y": 36.69 }, + { + "time": 0.5333, + "x": 5.36, + "y": 290.91, + "curve": [ 0.808, 0, 0.892, 0.81 ] + }, + { "time": 0.6666, "x": -56.27, "y": 88.07 }, + { + "time": 0.7666, + "x": 179.93, + "y": -59.94, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.9333, + "x": 238.11, + "y": 50.63, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.0666, "x": 213.19, "y": 49.77 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_foot_goal": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.2, "angle": 0 }, + { "time": 0.3, "angle": -41.64 }, + { "time": 0.3666, "angle": -69.66 }, + { "time": 0.4333, "angle": -57.97 }, + { "time": 0.6999, "angle": -9.19 }, + { "time": 0.7333, "angle": -7.78 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.3, "x": 0, "y": 0 }, + { "time": 0.3666, "x": -131.66, "y": 47.58 }, + { "time": 0.4333, "x": -16.1, "y": 205.84 }, + { "time": 0.5333, "x": 61.29, "y": 320.2 }, + { "time": 0.7333, "x": 235.62, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.6999, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.7333, "x": 1, "y": 1 } + ] + }, + "front_leg1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_leg_goal": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.3, "x": 0, "y": 0 }, + { "time": 0.6999, "x": -0.39, "y": 24.29 }, + { "time": 0.7666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_leg1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_leg_goal": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.3, "x": 0, "y": 0 }, + { "time": 0.6999, "x": 6.75, "y": 25.64 }, + { "time": 0.7666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "tail1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -11.02 }, + { "time": 0.3, "angle": 0.53 }, + { "time": 0.4333, "angle": 8.64 }, + { "time": 0.6999, "angle": -9.73 }, + { + "time": 0.7666, + "angle": -4.46, + "curve": [ 0.243, 0, 0.648, 1 ] + }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "torso1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_leg2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_leg2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "saddle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "tail2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -39.83 }, + { "time": 0.3, "angle": -31.82 }, + { "time": 0.4333, "angle": -7.28 }, + { "time": 0.5333, "angle": 1.28 }, + { "time": 0.6, "angle": -7.22 }, + { "time": 0.6999, "angle": -30.66 }, + { + "time": 0.7666, + "angle": -40.54, + "curve": [ 0.243, 0, 0.648, 1 ] + }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "torso2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 0.51 }, + { "time": 0.3, "angle": -1.9 }, + { "time": 0.5333, "angle": 1.04 }, + { "time": 0.6999, "angle": -3.25 }, + { "time": 0.7666, "angle": 4.81 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_arm1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -308.79 }, + { "time": 0.3, "angle": -398.7 }, + { "time": 0.5333, "angle": -297.8 }, + { "time": 0.6999, "angle": 62.19 }, + { "time": 0.7666, "angle": -325.36 }, + { "time": 0.8333, "angle": -374.42 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_leg3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -8.25 }, + { "time": 0.3, "angle": -1.9 }, + { "time": 0.5333, "angle": 5.44 }, + { "time": 0.6999, "angle": 24.01 }, + { "time": 0.7666, "angle": 4.82 }, + { "time": 0.8666, "angle": -1.78 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.1, "x": 0, "y": 0 }, + { "time": 0.3, "x": 62.9, "y": -44.25 }, + { "time": 0.5333, "x": -4.35, "y": 17.31 }, + { "time": 0.6999, "x": 0, "y": 0 }, + { "time": 0.7666, "x": 23.29, "y": -42.27 }, + { "time": 0.8666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_arm1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 51.2 }, + { "time": 0.3333, "angle": -38.7 }, + { "time": 0.6, "angle": 62.19, "curve": "stepped" }, + { "time": 0.7333, "angle": 62.19 }, + { "time": 0.8, "angle": 34.62 }, + { "time": 0.8666, "angle": -14.43 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_leg3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "saddle_strap_front1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "saddle_strap_rear1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "spineboy_front_arm_goal": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "spineboy_hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8666, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1, "x": 35.96, "y": -11.83 }, + { "time": 0.3, "x": 31.1, "y": -50.39 }, + { "time": 0.5333, "x": 12.1, "y": -8.03 }, + { "time": 0.6999, "x": 41.7, "y": -19.46 }, + { "time": 0.8666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8666, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "spineboy_rear_arm_goal": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "stirrup": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "stirrup_strap1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "tail3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -8.97 }, + { "time": 0.3, "angle": -18.38 }, + { "time": 0.4333, "angle": 0.9 }, + { "time": 0.5333, "angle": 11.43 }, + { "time": 0.6, "angle": 17.22 }, + { "time": 0.6999, "angle": 4.74 }, + { + "time": 0.7666, + "angle": -20.69, + "curve": [ 0.243, 0, 0.648, 1 ] + }, + { + "time": 0.9666, + "angle": -20.4, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "back_thigh": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_arm2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 23.1 }, + { "time": 0.3, "angle": -75.92 }, + { "time": 0.5333, "angle": -1.41 }, + { "time": 0.7666, "angle": 26.86 }, + { "time": 0.8333, "angle": -56.14 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_foot1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_thigh": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 15.27 }, + { "time": 0.3, "angle": -53.4 }, + { "time": 0.5666, "angle": -63.35 }, + { "time": 0.7666, "angle": -29.92 }, + { "time": 0.8999, "angle": 7.24 }, + { "time": 1, "angle": -3.69 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 9.93 }, + { "time": 0.3, "angle": -3.76 }, + { "time": 0.5333, "angle": -26.63 }, + { "time": 0.6999, "angle": -10.23 }, + { "time": 0.7666, "angle": 21.8 }, + { "time": 0.8666, "angle": 15.36 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_arm2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 23.1 }, + { "time": 0.3, "angle": -75.92 }, + { "time": 0.5333, "angle": -1.41 }, + { "time": 0.7666, "angle": 26.86 }, + { "time": 0.8333, "angle": -56.14 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_foot1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "saddle_strap_front2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "saddle_strap_rear2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "spineboy_torso": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -24.93 }, + { "time": 0.2333, "angle": -20.34 }, + { "time": 0.5333, "angle": -11.2 }, + { "time": 0.6999, "angle": 10.49 }, + { + "time": 0.8333, + "angle": -30.21, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1, "angle": 1.34 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "stirrup_strap2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "tail4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 34.12 }, + { "time": 0.3, "angle": -12.25 }, + { "time": 0.4333, "angle": 11.11 }, + { "time": 0.5333, "angle": 25.19 }, + { "time": 0.6, "angle": 32.5 }, + { "time": 0.6999, "angle": 24.4 }, + { + "time": 0.7666, + "angle": 9.9, + "curve": [ 0.243, 0, 0.648, 1 ] + }, + { + "time": 0.9666, + "angle": -11.72, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "back_arm": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "back_knee": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_arm": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_foot2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.3, "angle": 0 }, + { "time": 0.3666, "angle": -63.6 }, + { "time": 0.4333, "angle": -80.16 }, + { "time": 0.5333, "angle": -17.48 }, + { "time": 0.6666, "angle": 24.85 }, + { "time": 0.7666, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.6666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.6666, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_hand": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5333, "angle": -27.74 }, + { "time": 0.7666, "angle": -27.09 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "horn_front": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "horn_rear": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "jaw": { + "rotate": [ + { "time": 0, "angle": 15.56 }, + { "time": 0.2333, "angle": -0.92 }, + { "time": 0.5, "angle": 20.4 }, + { "time": 0.6999, "angle": 18.32 }, + { "time": 0.7666, "angle": 5.17 }, + { "time": 0.8333, "angle": 20.34 }, + { "time": 1.0666, "angle": 15.56 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "lower_leg": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "neck2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 11.08 }, + { "time": 0.8333, "angle": 8.16 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_foot2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.3, "angle": 0 }, + { "time": 0.3666, "angle": -87.93 }, + { "time": 0.4333, "angle": -126.75 }, + { "time": 0.5333, "angle": -63.79 }, + { "time": 0.6999, "angle": 24.85 }, + { "time": 0.7666, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.6999, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.6999, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_hand": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5333, "angle": -27.74 }, + { "time": 0.7666, "angle": -27.09 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "saddle_strap_rear3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "tail5": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 76.87 }, + { "time": 0.3, "angle": -12.25 }, + { "time": 0.4333, "angle": 10.5 }, + { "time": 0.5333, "angle": 24.81 }, + { "time": 0.6, "angle": 32.21 }, + { "time": 0.6999, "angle": 24.4 }, + { + "time": 0.7666, + "angle": 9.9, + "curve": [ 0.243, 0, 0.648, 1 ] + }, + { + "time": 0.9666, + "angle": -41.66, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "tongue1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "back_bracer": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_arm_target": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_foot3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.3, "angle": 0 }, + { "time": 0.3666, "angle": -84.17 }, + { "time": 0.4333, "angle": -127.53 }, + { "time": 0.5333, "angle": -52.16 }, + { "time": 0.6666, "angle": 10.77 }, + { "time": 0.7666, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.6666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.6666, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "head2": { + "rotate": [ + { "time": 0, "angle": 15.31 }, + { "time": 0.1, "angle": 29.85 }, + { "time": 0.2, "angle": 22.43 }, + { "time": 0.3, "angle": 12.64 }, + { "time": 0.4666, "angle": 24.85 }, + { "time": 0.5333, "angle": 9.28 }, + { "time": 0.6999, "angle": 4.77 }, + { "time": 0.7666, "angle": 37.9 }, + { + "time": 0.8333, + "angle": 18.87, + "curve": [ 0.056, 0.81, 0.75, 1 ] + }, + { "time": 1, "angle": 22.96 }, + { "time": 1.0666, "angle": 15.31 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_arm_target": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "tongue2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "back_hand": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_hand2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "tongue3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + } + } + }, + "debugfade": { + "slots": { + "raptor_body": { + "color": [ + { "time": 0, "color": "ffffffff" }, + { "time": 1, "color": "ffffff00" } + ] + } + } + }, + "gungrab": { + "slots": { + "front_hand": { + "attachment": [ + { "time": 0, "name": "front_open_hand" }, + { "time": 0.1666, "name": "gun" } + ] + }, + "gun": { + "attachment": [ + { "time": 0, "name": "gun_nohand" }, + { "time": 0.1666, "name": null } + ] + } + }, + "bones": { + "front_hand2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 12.33 }, + { "time": 0.1666, "angle": -89.54 }, + { "time": 0.2333, "angle": -79.78 }, + { "time": 0.4666, "angle": -10.18 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1666, "x": 0.938, "y": 0.938 }, + { "time": 0.4666, "x": 1, "y": 1 } + ] + }, + "front_arm": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0666, "angle": -31.99 }, + { + "time": 0.1666, + "angle": 223.11, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.2333, + "angle": 155.19, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.3666, + "angle": 246.13, + "curve": [ 0.184, 0.33, 0.75, 1 ] + }, + { "time": 0.4666, "angle": -56.74 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1666, "x": 6.49, "y": -2.66 }, + { "time": 0.2333, "x": 6.84, "y": 4.79 }, + { "time": 0.4666, "x": 0, "y": 0 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 86.01 }, + { "time": 0.2333, "angle": 114.94 }, + { + "time": 0.3666, + "angle": 81.86, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4666, "angle": 34.73 } + ] + } + }, + "ik": { + "front_arm_goal": [ + { "time": 0, "mix": 0 } + ] + } + }, + "gunkeep": { + "slots": { + "front_hand": { + "attachment": [ + { "time": 0, "name": "gun" }, + { "time": 0.4, "name": "front_open_hand" }, + { "time": 0.5333, "name": "front_hand" } + ] + }, + "gun": { + "attachment": [ + { "time": 0, "name": null }, + { "time": 0.1, "name": null }, + { "time": 0.4, "name": "gun_nohand" } + ] + } + }, + "bones": { + "front_hand2": { + "rotate": [ + { "time": 0, "angle": -10.18, "curve": "stepped" }, + { "time": 0.1, "angle": -10.18 }, + { "time": 0.3333, "angle": -79.78 }, + { "time": 0.4, "angle": -89.54 }, + { "time": 0.4333, "angle": 12.33 }, + { "time": 0.5666, "angle": 0, "curve": "stepped" }, + { "time": 0.6999, "angle": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.1, "x": 1, "y": 1 }, + { "time": 0.4, "x": 0.938, "y": 0.938 }, + { "time": 0.5666, "x": 1, "y": 1 } + ] + }, + "front_arm": { + "rotate": [ + { "time": 0, "angle": -56.74, "curve": "stepped" }, + { "time": 0.1, "angle": -56.74 }, + { + "time": 0.2, + "angle": 246.13, + "curve": [ 0.184, 0.33, 0.75, 1 ] + }, + { + "time": 0.3333, + "angle": 155.19, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "angle": 223.11, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.5, "angle": -31.99 }, + { "time": 0.5666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.1, "x": 0, "y": 0 }, + { "time": 0.3333, "x": 6.84, "y": 4.79 }, + { "time": 0.4, "x": 6.49, "y": -2.66 }, + { "time": 0.5666, "x": 0, "y": 0 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 34.73, "curve": "stepped" }, + { "time": 0.1, "angle": 34.73 }, + { + "time": 0.2, + "angle": 81.86, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.3333, "angle": 114.94 }, + { "time": 0.4, "angle": 86.01 }, + { "time": 0.5666, "angle": 0 } + ] + } + }, + "ik": { + "front_arm_goal": [ + { "time": 0, "mix": 0, "curve": "stepped" }, + { "time": 0.5666 } + ] + } + }, + "walk": { + "bones": { + "root": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "front_foot_goal": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2666, "angle": -51.26 }, + { "time": 0.4, "angle": -65.17 }, + { "time": 0.5333, "angle": -76.28 }, + { "time": 0.8, "angle": -76.52 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 343.28, "y": 36.5 }, + { "time": 0.2666, "x": 86.5, "y": 36.99 }, + { "time": 0.5333, "x": -173.36, "y": 37.42 }, + { "time": 0.6, "x": -68.15, "y": 141.15 }, + { "time": 0.7333, "x": 91.78, "y": 238.01 }, + { "time": 0.8, "x": 155.89, "y": 190.91 }, + { "time": 0.9666, "x": 303.28, "y": 94.4 }, + { "time": 1.0666, "x": 343.28, "y": 36.5 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": -4.78 }, + { "time": 0.0666, "angle": -3.99 }, + { "time": 0.2666, "angle": -12.49 }, + { "time": 0.5333, "angle": -4.78 }, + { "time": 0.6, "angle": -3.99 }, + { "time": 0.8, "angle": -12.49 }, + { "time": 1.0666, "angle": -4.78 } + ], + "translate": [ + { + "time": 0, + "x": 161.93, + "y": 4.89, + "curve": [ 0.27, 0.37, 0.62, 0.4 ] + }, + { + "time": 0.0666, + "x": 165.04, + "y": -5.99, + "curve": [ 0.244, 0, 0.757, 1 ] + }, + { + "time": 0.2666, + "x": 178.8, + "y": 136.52, + "curve": [ 0.25, 0, 0.841, 0.8 ] + }, + { + "time": 0.5333, + "x": 161.93, + "y": 4.89, + "curve": [ 0.27, 0.37, 0.62, 0.4 ] + }, + { + "time": 0.6, + "x": 165.04, + "y": -5.99, + "curve": [ 0.244, 0, 0.757, 1 ] + }, + { + "time": 0.8, + "x": 178.8, + "y": 136.52, + "curve": [ 0.25, 0, 0.858, 0.81 ] + }, + { "time": 1.0666, "x": 161.93, "y": 4.89 } + ] + }, + "rear_foot_goal": { + "rotate": [ + { "time": 0, "angle": -62.73 }, + { "time": 0.2666, "angle": -107.17 }, + { "time": 0.4666, "angle": -40.51 }, + { "time": 0.8, "angle": -97.15 }, + { "time": 1.0666, "angle": -62.73 } + ], + "translate": [ + { "time": 0, "x": -266.69, "y": -15.46 }, + { "time": 0.1333, "x": -87.88, "y": 124.85 }, + { "time": 0.2666, "x": 88.35, "y": 134.06 }, + { "time": 0.3666, "x": 198.39, "y": 90.64 }, + { "time": 0.4666, "x": 308.19, "y": -26.42 }, + { "time": 0.6, "x": 167.06, "y": -26.42 }, + { "time": 1.0666, "x": -266.69, "y": -15.46 } + ] + }, + "front_leg1": { + "rotate": [ + { "time": 0, "angle": 27.07 }, + { "time": 1.0666, "angle": 31.39 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0666, "x": -0.21, "y": 15.19 }, + { "time": 0.5333, "x": -0.33, "y": 12.15 }, + { "time": 0.7333, "x": -4.74, "y": 31.93 }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "front_leg_goal": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -18.04, "y": -2.88 }, + { "time": 0.4333, "x": -42.2, "y": -88.63 }, + { "time": 0.5333, "x": -27.31, "y": -43.9 }, + { "time": 0.7333, "x": -1.52, "y": -94.28 }, + { "time": 0.8, "x": -24.29, "y": -116.41 }, + { "time": 1, "x": -41.88, "y": -93.3 }, + { "time": 1.0666, "x": -18.04, "y": -2.88 } + ] + }, + "rear_leg1": { + "rotate": [ + { "time": 0, "angle": -64.85 }, + { "time": 1.0666, "angle": -45.71 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "rear_leg_goal": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -2.05, "y": 15.12 }, + { "time": 0.2666, "x": 17.49, "y": -150.43 }, + { "time": 0.4666, "x": -40.21, "y": -81.76 }, + { "time": 0.5333, "x": -31.68, "y": -82.43 }, + { "time": 0.8, "x": 2.65, "y": -169.21 }, + { "time": 0.9333, "x": -16.76, "y": -98.31 }, + { "time": 1.0666, "x": -2.05, "y": 15.12 } + ] + }, + "tail1": { + "rotate": [ + { "time": 0, "angle": 1.3 }, + { "time": 0.0666, "angle": 4.13 }, + { "time": 0.3333, "angle": -5.77 }, + { "time": 0.6333, "angle": 4.13 }, + { "time": 0.8999, "angle": -5.77 }, + { "time": 1.0666, "angle": 1.3 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "torso1": { + "rotate": [ + { "time": 0, "angle": 7.21 }, + { "time": 0.2666, "angle": 4.19 }, + { "time": 0.5333, "angle": 7.21 }, + { "time": 0.8, "angle": 4.19 }, + { "time": 1.0666, "angle": 7.21 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "front_leg2": { + "rotate": [ + { "time": 0, "angle": -347.28 }, + { "time": 1.0666, "angle": -362.06 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "rear_leg2": { + "rotate": [ + { "time": 0, "angle": 27.05 }, + { "time": 1.0666, "angle": 9.92 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "saddle": { + "rotate": [ + { "time": 0, "angle": -2.51 }, + { "time": 0.2666, "angle": -4.17 }, + { "time": 0.5333, "angle": -3.85 }, + { "time": 0.8, "angle": -3.09 }, + { "time": 1.0666, "angle": -2.51 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { + "time": 0.2666, + "x": 0, + "y": 0, + "curve": [ 0.149, 0.28, 0.75, 1 ] + }, + { + "time": 0.3333, + "x": -0.03, + "y": 5.91, + "curve": [ 0.421, 0, 0.85, 0.78 ] + }, + { "time": 0.5333, "x": 0, "y": 0 }, + { "time": 0.6, "x": -0.2, "y": -2.35 }, + { + "time": 0.8, + "x": 0, + "y": 0, + "curve": [ 0.149, 0.28, 0.75, 1 ] + }, + { + "time": 0.8666, + "x": -0.03, + "y": 5.91, + "curve": [ 0.421, 0, 0.85, 0.78 ] + }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "tail2": { + "rotate": [ + { "time": 0, "angle": -19.15 }, + { "time": 0.2333, "angle": -11.3 }, + { "time": 0.5, "angle": -9.37 }, + { "time": 0.7666, "angle": -11.3 }, + { "time": 1.0333, "angle": -20.27 }, + { "time": 1.0666, "angle": -19.15 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 0.8, "y": 1 }, + { "time": 0.2333, "x": 0.899, "y": 1 }, + { "time": 0.5, "x": 0.8, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 0.8, "y": 1 } + ] + }, + "torso2": { + "rotate": [ + { "time": 0, "angle": 8.6 }, + { + "time": 0.2666, + "angle": 9.52, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.5333, "angle": 8.01 }, + { + "time": 0.8, + "angle": 5.48, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.0666, "angle": 8.6 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "front_arm1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": -367.82 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 20.64, "y": -7.55 }, + { "time": 0.5, "x": -2.86, "y": 3.32 }, + { "time": 0.8, "x": 24.09, "y": -1.47 }, + { "time": 0.9333, "x": 21.73, "y": -3.7 }, + { "time": 1.0666, "x": 20.64, "y": -7.55 } + ] + }, + "front_leg3": { + "rotate": [ + { "time": 0, "angle": 1.14, "curve": "stepped" }, + { "time": 1.0666, "angle": 1.14 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 6.5 }, + { "time": 0.2666, "angle": 12.71 }, + { "time": 0.5333, "angle": 6.5 }, + { "time": 0.8, "angle": 12.71 }, + { "time": 1.0666, "angle": 6.5 } + ], + "translate": [ + { "time": 0, "x": 12.59, "y": -31.3 }, + { + "time": 0.2666, + "x": -10.84, + "y": -72.28, + "curve": [ 0.204, 0.01, 0.861, 0.86 ] + }, + { "time": 0.5333, "x": 12.59, "y": -31.3 }, + { + "time": 0.8, + "x": -10.84, + "y": -72.28, + "curve": [ 0.204, 0.01, 0.861, 0.86 ] + }, + { "time": 1.0666, "x": 12.59, "y": -31.3 } + ] + }, + "rear_arm1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": 13.71 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.5, "x": 11.12, "y": -13.38 }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "rear_leg3": { + "rotate": [ + { "time": 0, "angle": -23.18, "curve": "stepped" }, + { "time": 1.0666, "angle": -23.18 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "saddle_strap_front1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "saddle_strap_rear1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "tail3": { + "rotate": [ + { "time": 0, "angle": -12.46 }, + { "time": 0.2333, "angle": 12.65 }, + { "time": 0.5, "angle": -20.79 }, + { "time": 0.7666, "angle": 12.65 }, + { "time": 1.0333, "angle": -16.04 }, + { "time": 1.0666, "angle": -12.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.2333, "x": 1, "y": 1 }, + { "time": 0.5, "x": 0.997, "y": 1 }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_arm2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": 22.44 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "front_foot1": { + "rotate": [ + { "time": 0, "angle": -41.33, "curve": "stepped" }, + { "time": 1.0666, "angle": -41.33 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -7.36 }, + { + "time": 0.1333, + "angle": -12.99, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4, "angle": -6.12 }, + { "time": 0.5333, "angle": -7.36 }, + { + "time": 0.6666, + "angle": -12.99, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.9333, "angle": -6.12 }, + { "time": 1.0666, "angle": -7.36 } + ], + "translate": [ + { "time": 0, "x": -3.88, "y": -32.87 }, + { "time": 0.9333, "x": -3.33, "y": -22.81 }, + { "time": 1.0666, "x": -3.88, "y": -32.87 } + ] + }, + "rear_arm2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": -30.2 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "rear_foot1": { + "rotate": [ + { "time": 0, "angle": 2.07, "curve": "stepped" }, + { "time": 1.0666, "angle": 2.07 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "saddle_strap_front2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "saddle_strap_rear2": { + "rotate": [ + { "time": 0, "angle": -4.44 }, + { "time": 0.1, "angle": -2.66 }, + { "time": 0.3, "angle": -0.35 }, + { "time": 0.4333, "angle": -1.7 }, + { "time": 0.6333, "angle": -2.54 }, + { "time": 0.8999, "angle": -0.51 }, + { "time": 1.0666, "angle": -4.44 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "stirrup": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2666, "angle": -4.95 }, + { "time": 0.5333, "angle": 0 }, + { "time": 0.8, "angle": -4.95 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 8.97, "y": 4.99 }, + { "time": 0.2666, "x": 4.85, "y": 0.99 }, + { "time": 0.5333, "x": 7.75, "y": -2.99 }, + { "time": 0.8, "x": 4.85, "y": 0.99 }, + { "time": 1.0666, "x": 8.97, "y": 4.99 } + ] + }, + "tail4": { + "rotate": [ + { "time": 0, "angle": 10.25 }, + { + "time": 0.2333, + "angle": 39.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.5, "angle": 1.33 }, + { + "time": 0.7666, + "angle": 39.47, + "curve": [ 0.664, 0, 0.75, 1 ] + }, + { "time": 1.0333, "angle": 6.08 }, + { "time": 1.0666, "angle": 10.25 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.2333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_foot2": { + "rotate": [ + { "time": 0, "angle": 44.18 }, + { "time": 0.0666, "angle": 7.88 }, + { "time": 0.1333, "angle": 4.66 }, + { "time": 0.4, "angle": 7.59 }, + { "time": 0.5333, "angle": 8.08 }, + { "time": 0.6666, "angle": -67.33 }, + { "time": 0.7333, "angle": -65.23 }, + { "time": 1, "angle": 42.33 }, + { "time": 1.0666, "angle": 44.18 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "front_hand": { + "rotate": [ + { "time": 0, "angle": 9.49 }, + { "time": 0.5, "angle": -48.6 }, + { "time": 1.0666, "angle": 9.49 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "horn_front": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.2666, "x": -7.18, "y": -1.38 }, + { "time": 0.5333, "x": 0, "y": 0 }, + { "time": 0.8, "x": -7.18, "y": -1.38 }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "horn_rear": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.2666, "x": 12.34, "y": 9.16 }, + { "time": 0.5333, "x": 0, "y": 0 }, + { "time": 0.8, "x": 12.34, "y": 9.16 }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "jaw": { + "rotate": [ + { "time": 0, "angle": 25.56 }, + { "time": 0.2, "angle": 21.27 }, + { "time": 0.3333, "angle": 21.35 }, + { "time": 0.6666, "angle": 15.6 }, + { "time": 0.8666, "angle": 22.96 }, + { "time": 1.0666, "angle": 25.56 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "rear_foot2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": -82.37 }, + { "time": 0.2666, "angle": -110.3 }, + { "time": 0.4333, "angle": 36.21 }, + { "time": 0.5333, "angle": 2.1 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "rear_hand": { + "rotate": [ + { "time": 0, "angle": -28.89 }, + { "time": 0.5, "angle": 12.19 }, + { "time": 1.0666, "angle": -28.89 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "saddle_strap_rear3": { + "rotate": [ + { "time": 0, "angle": -1.31 }, + { "time": 0.1, "angle": 0.46 }, + { "time": 0.3, "angle": 2.77 }, + { "time": 0.4333, "angle": 1.42 }, + { "time": 0.6333, "angle": 0.58 }, + { "time": 0.8999, "angle": 2.61 }, + { "time": 1.0666, "angle": -1.31 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "tail5": { + "rotate": [ + { + "time": 0, + "angle": -26.34, + "curve": [ 0.391, -0.58, 0.653, 1.01 ] + }, + { + "time": 0.2333, + "angle": 45.41, + "curve": [ 0.391, -0.58, 0.653, 1.01 ] + }, + { + "time": 0.5, + "angle": -21.92, + "curve": [ 0.391, -0.58, 0.653, 1.01 ] + }, + { + "time": 0.7666, + "angle": 45.41, + "curve": [ 0.391, -0.58, 0.653, 1.01 ] + }, + { "time": 1.0333, "angle": -7.73 }, + { "time": 1.0666, "angle": -26.34 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 0.765, "y": 1 }, + { "time": 0.2333, "x": 1, "y": 1 }, + { "time": 0.5, "x": 0.765, "y": 1 }, + { "time": 0.7666, "x": 1, "y": 1 }, + { "time": 1.0666, "x": 0.765, "y": 1 } + ] + }, + "tongue1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.3333, "angle": 7.55 }, + { "time": 0.6666, "angle": -1.68 }, + { "time": 0.9333, "angle": 8.11 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "front_foot3": { + "rotate": [ + { "time": 0, "angle": 27.59 }, + { "time": 0.0666, "angle": -5.29 }, + { "time": 0.1333, "angle": -3.94 }, + { "time": 0.2666, "angle": -3.81 }, + { "time": 0.5333, "angle": -5.89 }, + { "time": 0.6, "angle": -21.2 }, + { "time": 0.6666, "angle": -73.63 }, + { "time": 0.7333, "angle": -102.81 }, + { "time": 0.8333, "angle": -41.3 }, + { "time": 1, "angle": 27.59 }, + { "time": 1.0666, "angle": 27.59 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "tongue2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.3333, "angle": 7.55 }, + { "time": 0.6666, "angle": -1.68 }, + { "time": 0.9333, "angle": 8.11 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "tongue3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.3333, "angle": 7.55 }, + { "time": 0.6666, "angle": -1.68 }, + { "time": 0.9333, "angle": 8.11 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "head2": { + "rotate": [ + { "time": 0, "angle": 38.59 }, + { "time": 0.2666, "angle": 43.18 }, + { "time": 0.5333, "angle": 38.59 }, + { "time": 0.8, "angle": 43.18 }, + { "time": 1.0666, "angle": 38.59 } + ] + }, + "neck2": { + "rotate": [ + { "time": 0, "angle": 9.65 }, + { "time": 0.2666, "angle": 14.71 }, + { "time": 0.5333, "angle": 9.65 }, + { "time": 0.8, "angle": 14.71 }, + { "time": 1.0666, "angle": 9.65 } + ] + }, + "spineboy_hip": { + "translate": [ + { + "time": 0, + "x": 32.54, + "y": 1.34, + "curve": [ 0.412, 0, 0.872, 0.78 ] + }, + { + "time": 0.2666, + "x": -12.88, + "y": 0.58, + "curve": [ 0.138, 0.17, 0.75, 1 ] + }, + { + "time": 0.5333, + "x": 32.54, + "y": 1.34, + "curve": [ 0.367, 0, 0.867, 0.81 ] + }, + { + "time": 0.8, + "x": -12.88, + "y": 0.58, + "curve": [ 0.164, 0.17, 0.75, 1 ] + }, + { "time": 1.0666, "x": 32.54, "y": 1.34 } + ] + }, + "spineboy_torso": { + "rotate": [ + { "time": 0, "angle": -37.93 }, + { + "time": 0.2666, + "angle": -29.47, + "curve": [ 0.492, 0, 0.75, 1 ] + }, + { "time": 0.5333, "angle": -37.93 }, + { + "time": 0.8, + "angle": -29.47, + "curve": [ 0.492, 0, 0.75, 1 ] + }, + { "time": 1.0666, "angle": -37.71 } + ] + }, + "front_arm": { + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.3333, "x": -14.43, "y": -11.03 }, + { "time": 0.5333, "x": 0, "y": 0 }, + { "time": 0.8, "x": -14.43, "y": -11.03 }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": -11.68, + "curve": [ 0.379, 0.6, 0.724, 1 ] + }, + { "time": 0.0666, "angle": -17.59 }, + { + "time": 0.3333, + "angle": 14.45, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6, + "angle": -24.74, + "curve": [ 0.326, 0, 0.715, 1 ] + }, + { + "time": 0.8666, + "angle": 14.45, + "curve": [ 0.242, 0, 0.666, 0.66 ] + }, + { "time": 1.0666, "angle": -11.68 } + ], + "translate": [ + { "time": 0, "x": 0.84, "y": -3.81 }, + { "time": 0.0666, "x": 0, "y": 0 }, + { "time": 0.3333, "x": 3.37, "y": -15.27 }, + { "time": 0.6, "x": 0, "y": 0 }, + { "time": 0.8666, "x": 3.37, "y": -15.27 }, + { "time": 1.0666, "x": 0.84, "y": -3.81 } + ] + } + }, + "deform": { + "default": { + "raptor_body": { + "raptor_body": [ + { "time": 0 }, + { + "time": 0.2666, + "offset": 452, + "vertices": [ -16.78684, 15.47479, -0.63024, 22.82083, 18.11511, 13.89254, 19.32452, 12.15423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, 0, 0, 0, 0, 0, 0, -3.24548, 0.81152, 0, 0, -3.24548, 0.81152 ] + }, + { "time": 0.5333 }, + { + "time": 0.8, + "offset": 452, + "vertices": [ -16.78684, 15.47479, -0.63024, 22.82083, 18.11511, 13.89254, 19.32452, 12.15423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, 0, 0, 0, 0, 0, 0, -3.24548, 0.81152, 0, 0, -3.24548, 0.81152 ] + }, + { "time": 1.0666 } + ] + }, + "raptor_front_leg": { + "raptor_front_leg": [ + { "time": 0, "curve": "stepped" }, + { "time": 0.2666 }, + { + "time": 0.5333, + "offset": 206, + "vertices": [ -2.23608, 21.95403, -21.04627, 6.63481, 21.54915, -4.7554 ] + }, + { + "time": 0.6, + "offset": 206, + "vertices": [ 7.17962, 15.14358, -16.74015, -0.80053, 15.26523, -6.91741 ] + }, + { + "time": 0.7333, + "offset": 160, + "vertices": [ -0.82485, 0.73406, -0.01284, -1.10443, -0.27497, 1.06005, -1.28054, 0.39633, 0, 0, 0, 0, 0, 0, 0, 0, 1.4866, -2.59426, 0.98071, 2.82342, -0.10126, -2.98623, 2.95008, -2.11668, 2.7366, -10.49935, 6.12506, 8.95281, -2.88093, -10.35023, -2.60873, -2.28384, 3.43417, -0.47045, -2.28305, -4.76037, 5.08892, 1.40078, -4.58522, -2.61465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.37966, -1.75515, -2.13229, -0.65667, -2.86239, -0.77365, 2.45989, -1.65319, -2.51593, 0.86412 ] + }, + { "time": 0.8, "curve": "stepped" }, + { "time": 0.9666, "curve": "stepped" }, + { "time": 1.0666 } + ] + } + } + }, + "events": [ + { "time": 0.0333, "name": "footstep" }, + { "time": 0.5333, "name": "footstep" } + ] + } +} +} \ No newline at end of file diff --git a/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor-data.uasset b/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor-data.uasset new file mode 100644 index 000000000..bd6541edb Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Raptor/raptor-data.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Sounds/Footstep.uasset b/spine-ue4/Content/GettingStarted/Assets/Sounds/Footstep.uasset new file mode 100644 index 000000000..33d839137 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Sounds/Footstep.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Sounds/Footstep.wav b/spine-ue4/Content/GettingStarted/Assets/Sounds/Footstep.wav new file mode 100644 index 000000000..80474558e Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Sounds/Footstep.wav differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Spineboy/Textures/spineboy-hover.uasset b/spine-ue4/Content/GettingStarted/Assets/Spineboy/Textures/spineboy-hover.uasset new file mode 100644 index 000000000..dfa284f62 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Spineboy/Textures/spineboy-hover.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Spineboy/Textures/spineboy.uasset b/spine-ue4/Content/GettingStarted/Assets/Spineboy/Textures/spineboy.uasset new file mode 100644 index 000000000..2e1afe976 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Spineboy/Textures/spineboy.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy-hover.atlas b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy-hover.atlas new file mode 100644 index 000000000..a66d9fe19 --- /dev/null +++ b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy-hover.atlas @@ -0,0 +1,216 @@ + +spineboy-hover.png +size: 1024,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +eye_indifferent + rotate: true + xy: 648, 629 + size: 93, 89 + orig: 93, 89 + offset: 0, 0 + index: -1 +eye_surprised + rotate: true + xy: 233, 179 + size: 93, 89 + orig: 93, 89 + offset: 0, 0 + index: -1 +front_bracer + rotate: false + xy: 245, 2 + size: 58, 80 + orig: 58, 80 + offset: 0, 0 + index: -1 +front_fist_closed + rotate: false + xy: 168, 45 + size: 75, 82 + orig: 75, 82 + offset: 0, 0 + index: -1 +front_fist_open + rotate: false + xy: 844, 646 + size: 86, 87 + orig: 86, 87 + offset: 0, 0 + index: -1 +front_foot + rotate: true + xy: 310, 326 + size: 126, 69 + orig: 126, 69 + offset: 0, 0 + index: -1 +front_foot_bend1 + rotate: true + xy: 951, 894 + size: 128, 70 + orig: 128, 70 + offset: 0, 0 + index: -1 +front_foot_bend2 + rotate: false + xy: 2, 33 + size: 108, 93 + orig: 108, 93 + offset: 0, 0 + index: -1 +front_shin + rotate: true + xy: 739, 735 + size: 82, 184 + orig: 82, 184 + offset: 0, 0 + index: -1 +front_thigh + rotate: false + xy: 381, 340 + size: 48, 112 + orig: 48, 112 + offset: 0, 0 + index: -1 +front_upper_arm + rotate: false + xy: 112, 29 + size: 54, 97 + orig: 54, 97 + offset: 0, 0 + index: -1 +goggles + rotate: false + xy: 156, 454 + size: 261, 166 + orig: 261, 166 + offset: 0, 0 + index: -1 +gun + rotate: false + xy: 739, 819 + size: 210, 203 + orig: 210, 203 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 466, 724 + size: 271, 298 + orig: 271, 298 + offset: 0, 0 + index: -1 +hoverboard_board + rotate: true + xy: 2, 128 + size: 492, 152 + orig: 492, 152 + offset: 0, 0 + index: -1 +hoverboard_thruster + rotate: false + xy: 602, 558 + size: 60, 64 + orig: 60, 64 + offset: 0, 0 + index: -1 +hoverglow_small + rotate: true + xy: 156, 178 + size: 274, 75 + orig: 274, 75 + offset: 0, 0 + index: -1 +mouth_grind + rotate: true + xy: 951, 799 + size: 93, 59 + orig: 93, 59 + offset: 0, 0 + index: -1 +mouth_oooo + rotate: true + xy: 245, 84 + size: 93, 59 + orig: 93, 59 + offset: 0, 0 + index: -1 +mouth_smile + rotate: false + xy: 925, 738 + size: 93, 59 + orig: 93, 59 + offset: 0, 0 + index: -1 +muzzle + rotate: false + xy: 2, 622 + size: 462, 400 + orig: 462, 400 + offset: 0, 0 + index: -1 +neck + rotate: false + xy: 168, 2 + size: 36, 41 + orig: 36, 41 + offset: 0, 0 + index: -1 +rear_bracer + rotate: false + xy: 932, 664 + size: 56, 72 + orig: 56, 72 + offset: 0, 0 + index: -1 +rear_foot + rotate: false + xy: 487, 562 + size: 113, 60 + orig: 113, 60 + offset: 0, 0 + index: -1 +rear_foot_bend1 + rotate: true + xy: 419, 503 + size: 117, 66 + orig: 117, 66 + offset: 0, 0 + index: -1 +rear_foot_bend2 + rotate: false + xy: 739, 650 + size: 103, 83 + orig: 103, 83 + offset: 0, 0 + index: -1 +rear_shin + rotate: false + xy: 233, 274 + size: 75, 178 + orig: 75, 178 + offset: 0, 0 + index: -1 +rear_thigh + rotate: true + xy: 487, 495 + size: 65, 104 + orig: 65, 104 + offset: 0, 0 + index: -1 +rear_upper_arm + rotate: true + xy: 156, 129 + size: 47, 87 + orig: 47, 87 + offset: 0, 0 + index: -1 +torso + rotate: true + xy: 466, 624 + size: 98, 180 + orig: 98, 180 + offset: 0, 0 + index: -1 diff --git a/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy-hover.json b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy-hover.json new file mode 100644 index 000000000..672051ea1 --- /dev/null +++ b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy-hover.json @@ -0,0 +1,960 @@ +{ +"skeleton": { + "hash": "Vw3hWCw+PV8Q6kMU7bcyWS2a+uw", + "spine": "3.5.03-beta", + "width": 511.47, + "height": 739.87, + "fps": 30, + "images": "./images/" +}, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "x": -49.89, "y": 290.95 }, + { "name": "hoverboard", "parent": "root", "length": 72.32, "x": 9.9, "y": 57.05 }, + { "name": "rear_foot_ik", "parent": "hoverboard", "rotation": -0.97, "x": 83.75, "y": 21.7, "color": "ff3f00ff" }, + { "name": "rear_ankle_ik", "parent": "rear_foot_ik", "x": -33.9, "y": 37.33, "color": "ff3f00ff" }, + { "name": "rear_thigh", "parent": "hip", "length": 85.7, "rotation": -72.54, "x": 8.9, "y": -5.61, "color": "ff000dff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.82, "x": 86.09, "y": -1.32, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 51.58, "rotation": 45.77, "x": 121.44, "y": -0.75, "color": "ff000dff" }, + { "name": "rear_toe_ik", "parent": "hoverboard", "rotation": -0.97, "x": 135.05, "y": 20.47, "color": "ff3f00ff" }, + { "name": "back_foot_tip", "parent": "rear_foot", "length": 50.29, "rotation": 46.61, "x": 51.15, "y": 0.23, "color": "ff000dff" }, + { "name": "exhaust1", "parent": "hoverboard", "rotation": 3.19, "x": -249.74, "y": 52.63 }, + { "name": "exhaust2", "parent": "hoverboard", "rotation": 26.5, "x": -191.57, "y": -23.5 }, + { "name": "front_foot_ik", "parent": "hoverboard", "rotation": -16.95, "x": -100.29, "y": 23.95, "color": "ff3f00ff" }, + { "name": "front_ankle_ik", "parent": "front_foot_ik", "x": -28.38, "y": 29.05, "color": "ff3f00ff" }, + { "name": "torso", "parent": "hip", "length": 127.55, "rotation": 64.59, "x": -1.61, "y": 4.9, "color": "e0da19ff" }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.44, "rotation": 125.79, "x": 103.75, "y": 19.31, "color": "00ff04ff" }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.56, + "rotation": 18.29, + "x": 68.8, + "y": -0.68, + "color": "00ff04ff" + }, + { "name": "front_fist", "parent": "front_bracer", "length": 65.37, "rotation": 12.43, "x": 40.56, "y": 0.18, "color": "00ff04ff" }, + { "name": "front_thigh", "parent": "hip", "length": 74.8, "rotation": -95.51, "x": -17.45, "y": -11.64, "color": "00ff04ff" }, + { "name": "front_shin", "parent": "front_thigh", "length": 128.75, "rotation": -2.21, "x": 78.69, "y": 1.6, "color": "00ff04ff" }, + { "name": "front_foot", "parent": "front_shin", "length": 41, "rotation": 51.25, "x": 128.75, "y": -0.33, "color": "00ff04ff" }, + { "name": "front_toe_ik", "parent": "hoverboard", "rotation": -0.97, "x": -44.59, "y": 21.98, "color": "ff3f00ff" }, + { + "name": "front_foot_tip", + "parent": "front_foot", + "length": 56.02, + "rotation": 44.29, + "x": 41.41, + "y": -0.07, + "color": "00ff04ff" + }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -153.6, "x": 92.34, "y": -19.21, "color": "ff000dff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.54, "rotation": 43.56, "x": 51.34, "color": "ff000dff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.09, "rotation": 17.61, "x": 34.41, "y": -0.44, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "rotation": 6.82, "x": 201.03, "y": 52.13, "color": "ff000dff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.48, "y": -0.3, "color": "e0da19ff" }, + { "name": "head", "parent": "neck", "length": 131.78, "rotation": 51.9, "x": 27.65, "y": -0.25, "color": "e0da19ff" }, + { "name": "hair1", "parent": "head", "length": 47.22, "rotation": -49.09, "x": 149.82, "y": -59.77, "color": "e0da19ff" }, + { "name": "hair2", "parent": "hair1", "length": 55.56, "rotation": 50.4, "x": 47.22, "y": 0.18, "color": "e0da19ff" }, + { "name": "hair3", "parent": "head", "length": 62.22, "rotation": -32.15, "x": 164.13, "y": 3.68, "color": "e0da19ff" }, + { "name": "hair4", "parent": "hair3", "length": 80.27, "rotation": 83.69, "x": 62.22, "y": -0.02, "color": "e0da19ff" }, + { + "name": "hoverboard_thruster_front", + "parent": "hoverboard", + "rotation": -29.03, + "x": 95.77, + "y": -2.7, + "transform": "noRotationOrReflection" + }, + { + "name": "hoverboard_thruster_rear", + "parent": "hoverboard", + "rotation": -29.03, + "x": -76.46, + "y": -5.11, + "transform": "noRotationOrReflection" + }, + { "name": "hoverglow_front", "parent": "hoverboard_thruster_front", "x": -1.88, "y": -37.77 }, + { "name": "hoverglow_rear", "parent": "hoverboard_thruster_rear", "x": 0.94, "y": -35.65 } +], +"slots": [ + { "name": "hoverboard_thruster_rear", "bone": "hoverboard_thruster_rear", "attachment": "hoverboard_thruster" }, + { "name": "hoverboard_thruster_front", "bone": "hoverboard_thruster_front", "attachment": "hoverboard_thruster" }, + { "name": "hoverboard_board", "bone": "hoverboard", "attachment": "hoverboard_board" }, + { "name": "rear_upper_arm", "bone": "rear_upper_arm", "attachment": "rear_upper_arm" }, + { "name": "rear_bracer", "bone": "rear_bracer", "attachment": "rear_bracer" }, + { "name": "gun", "bone": "gun", "attachment": "gun" }, + { "name": "rear_foot", "bone": "rear_foot", "attachment": "rear_foot" }, + { "name": "rear_thigh", "bone": "rear_thigh", "attachment": "rear_thigh" }, + { "name": "rear_shin", "bone": "rear_shin", "attachment": "rear_shin" }, + { "name": "neck", "bone": "neck", "attachment": "neck" }, + { "name": "torso", "bone": "torso", "attachment": "torso" }, + { "name": "front_upper_arm", "bone": "front_upper_arm", "attachment": "front_upper_arm" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "eye", "bone": "head", "attachment": "eye_indifferent" }, + { "name": "front_thigh", "bone": "front_thigh", "attachment": "front_thigh" }, + { "name": "front_foot", "bone": "front_foot", "attachment": "front_foot" }, + { "name": "front_shin", "bone": "front_shin", "attachment": "front_shin" }, + { "name": "mouth", "bone": "head", "attachment": "mouth_smile" }, + { "name": "goggles", "bone": "head", "attachment": "goggles" }, + { "name": "front_bracer", "bone": "front_bracer", "attachment": "front_bracer" }, + { "name": "front_fist", "bone": "front_fist", "attachment": "front_fist_closed" }, + { "name": "muzzle", "bone": "gunTip", "blend": "additive" }, + { "name": "head-bb", "bone": "head" }, + { "name": "hoverglow_front", "bone": "hoverglow_front", "attachment": "hoverglow_small", "blend": "additive" }, + { "name": "hoverglow_rear", "bone": "hoverglow_rear", "attachment": "hoverglow_small", "blend": "additive" }, + { "name": "exhaust1", "bone": "exhaust2", "color": "ffffff98", "attachment": "hoverglow_small", "blend": "additive" }, + { "name": "exhaust2", "bone": "exhaust1", "color": "ffffff98", "attachment": "hoverglow_small", "blend": "additive" } +], +"ik": [ + { + "name": "front_ankle_ik", + "order": 0, + "bones": [ "front_thigh", "front_shin" ], + "target": "front_ankle_ik", + "bendPositive": false + }, + { + "name": "front_foot_ik", + "order": 1, + "bones": [ "front_foot" ], + "target": "front_foot_ik" + }, + { + "name": "front_toe_ik", + "order": 2, + "bones": [ "front_foot_tip" ], + "target": "front_toe_ik" + }, + { + "name": "rear_ankle_ik", + "order": 3, + "bones": [ "rear_thigh", "rear_shin" ], + "target": "rear_ankle_ik", + "bendPositive": false + }, + { + "name": "rear_foot_ik", + "order": 4, + "bones": [ "rear_foot" ], + "target": "rear_foot_ik" + }, + { + "name": "rear_toe_ik", + "order": 5, + "bones": [ "back_foot_tip" ], + "target": "rear_toe_ik" + } +], +"skins": { + "default": { + "exhaust1": { + "hoverglow_small": { "scaleX": 0.462, "scaleY": 0.812, "rotation": -83.09, "width": 274, "height": 75 } + }, + "exhaust2": { + "hoverglow_small": { "y": -0.76, "scaleX": 0.413, "scaleY": 0.487, "rotation": -89.24, "width": 274, "height": 75 } + }, + "eye": { + "eye_indifferent": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 59.15, -86.8, 28.30999, 0.92, 112.26, 30.44, 143.11, -57.27 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 89 + }, + "eye_surprised": { "x": 85.72, "y": -28.18, "rotation": -70.62, "width": 93, "height": 89 } + }, + "front_bracer": { + "front_bracer": { "x": 12.02, "y": -1.66, "rotation": 79.58, "width": 58, "height": 80 } + }, + "front_fist": { + "front_fist_closed": { "x": 35.49, "y": 6, "rotation": 67.16, "width": 75, "height": 82 }, + "front_fist_open": { "x": 39.56, "y": 7.76, "rotation": 67.16, "width": 86, "height": 87 } + }, + "front_foot": { + "front_foot": { + "type": "mesh", + "uvs": [ 0.59416, 0.2342, 0.62256, 0.30335, 0.65008, 0.37035, 0.67637, 0.38403, 0.72067, 0.40709, 0.76263, 0.42893, 1, 0.70375, 1, 1, 0.65517, 1, 0.36439, 1, 0, 1, 0, 0.39195, 0, 0, 0.17845, 0, 0.49794, 0 ], + "triangles": [ 8, 9, 3, 4, 8, 3, 8, 4, 5, 8, 5, 6, 8, 6, 7, 11, 12, 13, 11, 1, 10, 13, 14, 0, 0, 11, 13, 1, 11, 0, 2, 9, 10, 2, 10, 1, 9, 2, 3 ], + "vertices": [ 2, 20, 18.17, 41.56, 0.72254, 22, 12.46, 46.04, 0.27744, 2, 20, 24.06999, 40.75, 0.57406, 22, 16.12, 41.34, 0.42592, 2, 20, 29.79, 39.97, 0.47663, 22, 19.67, 36.77, 0.52336, 2, 20, 32.79, 41.65, 0.37452, 22, 22.97999, 35.88, 0.62546, 2, 20, 37.86, 44.5, 0.24772, 22, 28.6, 34.4, 0.75226, 2, 20, 42.65, 47.2, 0.17781, 22, 33.9, 32.97, 0.82216, 1, 22, 64.15, 14.56, 1, 1, 22, 64.51, -5.86, 1, 1, 22, 21.05999, -6.63, 1, 2, 20, 35.38, -16.14999, 0.99997, 22, -15.52999, -7.28, 0, 1, 20, 3.08999, -48.81, 1, 1, 20, -26.70999, -19.29999, 1, 1, 20, -45.95, -0.28, 1, 1, 20, -30.12999, 15.68, 1, 2, 20, -1.84, 44.31, 0.91509, 22, 0.05, 61.97, 0.08488 ], + "hull": 15, + "edges": [ 14, 16, 16, 18, 18, 20, 4, 18, 20, 22, 22, 24, 24, 26, 26, 28, 22, 26, 12, 14, 10, 12, 2, 4, 2, 20, 4, 6, 6, 16, 2, 0, 0, 28, 6, 8, 8, 10 ], + "width": 126, + "height": 69 + }, + "front_foot_bend1": { "x": 22.86, "y": 20.23, "rotation": 45.31, "width": 128, "height": 70 }, + "front_foot_bend2": { "x": 8.15, "y": 19.56, "rotation": 45.31, "width": 108, "height": 93 } + }, + "front_shin": { + "front_shin": { "x": 60.91, "y": -3.9, "rotation": 96.58, "width": 82, "height": 184 } + }, + "front_thigh": { + "front_thigh": { "x": 42.47, "y": 4.44, "rotation": 84.86, "width": 48, "height": 112 } + }, + "front_upper_arm": { + "front_upper_arm": { "x": 28.29, "y": 7.36, "rotation": 97.88, "width": 54, "height": 97 } + }, + "goggles": { + "goggles": { + "type": "mesh", + "uvs": [ 0.53653, 0.04112, 0.72921, 0.16034, 0.91666, 0.33221, 0.97045, 0.31328, 1, 0.48052, 0.95754, 0.57328, 0.88824, 0.63279, 0.86877, 0.78961, 0.77403, 0.86748, 0.72627, 1, 0.60712, 0.93861, 0.49599, 0.88138, 0.41556, 0.75025, 0.32547, 0.70083, 0.2782, 0.58256, 0.17208, 0.6328, 0.17227, 0.75071, 0.10779, 0.79896, 0, 0.32304, 0, 0.12475, 0.07372, 0.07343, 0.15422, 0.10733, 0.23164, 0.13993, 0.30313, 0.02256, 0.34801, 0, 0.42978, 0.69182, 0.39474, 0.51041, 0.39487, 0.3151, 0.45877, 0.23196, 0.56501, 0.28108, 0.69959, 0.39215, 0.82038, 0.54202, 0.85737, 0.62342, 0.91106, 0.51406, 0.72637, 0.32146, 0.58762, 0.19608, 0.48074, 0.11268, 0.37821, 0.055, 0.32868, 0.17866, 0.31898, 0.30498, 0.36035, 0.53798, 0.40327, 0.70072, 0.30057, 0.55836, 0.21955, 0.2815, 0.09962, 0.28942, 0.56862, 0.4368, 0.4911, 0.37156, 0.51183, 0.52091, 0.67018, 0.59302, 0.7619, 0.68573, 0.73295, 0.43353 ], + "triangles": [ 49, 8, 48, 9, 48, 8, 12, 25, 11, 48, 9, 10, 47, 48, 10, 47, 10, 25, 25, 10, 11, 8, 49, 7, 17, 15, 16, 17, 18, 15, 49, 32, 7, 7, 32, 6, 41, 42, 40, 12, 41, 25, 41, 12, 42, 13, 14, 42, 12, 13, 42, 41, 40, 25, 40, 26, 25, 25, 26, 47, 49, 31, 32, 31, 49, 50, 18, 44, 15, 42, 14, 44, 14, 15, 44, 5, 6, 33, 6, 32, 33, 32, 31, 33, 47, 45, 48, 49, 48, 50, 50, 45, 30, 50, 48, 45, 42, 44, 43, 5, 33, 4, 42, 39, 40, 42, 43, 39, 31, 50, 33, 40, 39, 26, 45, 47, 46, 33, 2, 4, 2, 33, 34, 47, 26, 46, 26, 27, 46, 26, 39, 27, 2, 3, 4, 30, 45, 29, 30, 34, 50, 33, 50, 34, 45, 46, 29, 30, 29, 34, 27, 28, 46, 46, 28, 29, 18, 19, 44, 29, 35, 34, 2, 34, 1, 34, 35, 1, 28, 27, 38, 27, 39, 38, 39, 43, 38, 44, 19, 21, 44, 21, 43, 21, 19, 20, 43, 22, 38, 43, 21, 22, 29, 28, 35, 28, 36, 35, 28, 38, 36, 36, 0, 35, 35, 0, 1, 22, 23, 38, 38, 37, 36, 37, 23, 24, 37, 38, 23, 36, 37, 0, 37, 24, 0 ], + "vertices": [ 172.08, 22.79999, 170.08, -31.19, 159.41, -86.8, 167.02, -99, 143.38998, -115.48, 125.19, -110.12999, 109.87, -96.33999, 83.62999, -100.19, 63.25, -81.15, 38.36, -76.69, 37.65, -43.97, 37, -13.47, 50.56, 13.52999, 50.5, 38.45, 64.94, 56.59, 47.88, 79.94, 29.45, 73.41, 16.29999, 86.62, 81.5, 139.38, 112.55, 150.27998, 126.97, 134.97, 128.63, 113.26999, 130.22, 92.43, 154.77998, 81.29, 162.21, 71.48, 60.95, 13.26, 86.33, 31.87, 116.91, 42.59, 135.47, 31.44, 136.97, 2.56999, 131.22, -36.65, 118.22, -74.65, 108.68, -88.23, 130.44, -95.43, 144.61, -39.36, 152.24, 1.69, 156.05, 32.59, 156.21, 61, 132.55, 66.4, 111.94, 61.83, 79.01999, 38.83, 57.27, 19.29, 70.66, 52.40999, 107.01, 87.61, 95.37999, 116.69, 112.91, -6.86, 116.41, 15.8, 94.80999, 2.47, 97.23, -40.47, 90.66, -68.16, 127.62999, -47.15 ], + "hull": 25, + "edges": [ 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 48, 48, 46, 46, 44, 36, 38, 40, 38, 24, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 62, 64, 64, 12, 8, 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 24, 24, 84, 84, 86, 86, 44, 40, 42, 42, 44, 42, 88, 88, 30, 58, 90, 90, 92, 92, 94, 18, 20, 20, 22, 94, 20, 18, 96, 96, 98, 60, 100, 100, 62, 98, 100 ], + "width": 261, + "height": 166 + } + }, + "gun": { + "gun": { "x": 77.3, "y": 16.39, "rotation": 60.81, "width": 210, "height": 203 } + }, + "head": { + "head": { + "type": "mesh", + "uvs": [ 0.75918, 0.06106, 0.88392, 0.17892, 0.90174, 0.30856, 0.94222, 0.1966, 1, 0.26583, 1, 0.42199, 0.95863, 0.46992, 0.92118, 0.51332, 0.85957, 0.53469, 0.78387, 0.65605, 0.74383, 0.74838, 0.85114, 0.75151, 0.84828, 0.82563, 0.81779, 0.85367, 0.75598, 0.85905, 0.76235, 0.90467, 0.65874, 1, 0.38335, 1, 0.18579, 0.85403, 0.1274, 0.81089, 0.06024, 0.69208, 0, 0.58551, 0, 0.41021, 0.08528, 0.2069, 0.24243, 0.14504, 0.49998, 0.14208, 0.50322, 0.07433, 0.41738, 0, 0.57612, 0, 0.85058, 0.36085, 0.7343, 0.43206, 0.6848, 0.3127, 0.72163, 0.16717, 0.55931, 0.04152, 0.44762, 0.22893, 0.23925, 0.26559, 0.71271, 0.44034, 0.56992, 0.38299, 0.41677, 0.33509, 0.29298, 0.31496, 0.70801, 0.44501, 0.56676, 0.38975, 0.41519, 0.34415, 0.28753, 0.33017, 0.88988, 0.50176, 0.30388, 0.73461, 0.2646, 0.65674, 0.21413, 0.61583, 0.14611, 0.62193, 0.10315, 0.66636, 0.10356, 0.72556, 0.14505, 0.79163, 0.20262, 0.81354, 0.27871, 0.80158, 0.34946, 0.7376, 0.23072, 0.57072, 0.08878, 0.60706, 0.2946, 0.8129, 0.73005, 0.87883, 0.69804, 0.87348, 0.66165, 0.7968 ], + "triangles": [ 16, 58, 15, 16, 59, 58, 59, 16, 60, 18, 57, 17, 57, 54, 17, 16, 17, 60, 17, 54, 60, 58, 14, 15, 58, 59, 14, 59, 60, 14, 60, 10, 14, 14, 10, 13, 18, 53, 57, 18, 52, 53, 19, 51, 18, 18, 51, 52, 13, 10, 12, 12, 10, 11, 53, 52, 45, 57, 45, 54, 57, 53, 45, 20, 50, 19, 46, 45, 52, 47, 46, 50, 50, 48, 47, 19, 50, 51, 46, 52, 51, 54, 41, 60, 10, 60, 9, 60, 41, 40, 46, 51, 50, 9, 60, 40, 55, 42, 41, 54, 55, 41, 46, 54, 45, 20, 49, 50, 50, 49, 48, 20, 56, 49, 20, 21, 56, 49, 56, 48, 47, 55, 46, 42, 55, 43, 55, 54, 46, 9, 40, 8, 47, 48, 55, 55, 48, 56, 55, 56, 22, 56, 21, 22, 55, 22, 43, 8, 44, 7, 40, 36, 8, 8, 36, 44, 7, 44, 6, 41, 37, 40, 40, 37, 36, 43, 22, 39, 22, 23, 35, 41, 42, 38, 43, 39, 42, 42, 39, 38, 38, 39, 34, 39, 22, 35, 39, 35, 34, 35, 24, 34, 35, 23, 24, 34, 24, 25, 36, 30, 44, 44, 30, 6, 30, 29, 6, 30, 36, 31, 36, 37, 31, 30, 31, 29, 37, 41, 38, 31, 37, 34, 31, 32, 29, 37, 38, 34, 34, 25, 31, 2, 32, 1, 31, 25, 32, 33, 32, 25, 33, 25, 26, 32, 0, 1, 32, 33, 0, 0, 33, 28, 26, 27, 33, 33, 27, 28, 6, 29, 5, 29, 2, 5, 2, 4, 5, 2, 29, 32, 2, 3, 4 ], + "vertices": [ 1, 32, 41.97, -41.79, 1, 3, 30, 73.44999, 27.54, 0.18925, 32, -5.75, -51.7, 0.72417, 31, 112.98, -11.43, 0.08656, 3, 30, 38.22, 10.97, 0.84284, 32, -41, -35.22, 0.09705, 31, 92.72, -44.65999, 0.0601, 1, 30, 73.33999, 10.89, 1, 1, 30, 58.59, -10.38, 1, 2, 30, 14.35, -24.79, 0.89741, 29, 75.48, -4.55, 0.10256, 2, 30, -2.69, -18.55999, 0.58265, 29, 59.81, -13.72, 0.41734, 1, 28, 163.05, -108.68, 1, 1, 28, 151.52, -95.04, 1, 1, 28, 110.58999, -87.69, 1, 1, 28, 81.05, -86.58, 1, 1, 28, 89.8, -114.30999, 1, 1, 28, 68.72, -120.91, 1, 1, 28, 58.09, -115.87999, 1, 1, 28, 51.02, -100.62, 1, 1, 28, 38.77, -106.76, 1, 1, 28, 2.67, -89.69, 1, 1, 28, -22.05999, -19.29, 1, 1, 28, 1.19, 45.61, 1, 1, 28, 8.06, 64.8, 1, 1, 28, 35.43, 93.72, 1, 1, 28, 59.97, 119.66, 1, 1, 28, 109.25, 136.97, 1, 1, 28, 174.07, 135.27, 1, 2, 31, -16.79, 104.62, 0.16235, 28, 205.58, 101.22, 0.83762, 2, 32, 58.93, 30.5, 0.60734, 31, 38.36, 61.88, 0.39263, 2, 32, 75.55, 19, 0.94502, 31, 51.61, 77.15, 0.05496, 1, 32, 106.69, 26.88999, 1, 1, 32, 83.76999, -9.5, 1, 4, 30, 19.12, 19.31999, 0.58066, 32, -46.81, -15.18, 0.07453, 31, 72.16, -48.24, 0.14877, 29, 44.52, 27.22999, 0.196, 2, 31, 34.31, -45.24, 0.20795, 29, 7.42, 19.06999, 0.79202, 1, 31, 45.93, -9.06, 1, 1, 32, 20.62, -16.35, 1, 1, 32, 75.73, 0.93, 1, 3, 32, 44.58, 56.29, 0.14948, 31, 11.14999, 50.45, 0.36829, 28, 200.44, 40.47, 0.48219, 1, 28, 171.41, 90.11, 1, 2, 31, 28.19, -43.54, 0.20795, 29, 1.07, 18.93, 0.79202, 3, 31, 8.52999, -6.07, 0.75382, 29, -28.62, 49.02, 0.13132, 28, 168.13, -6.01, 0.11484, 2, 31, -15.06, 30.88999, 0.72898, 28, 167.82, 37.86, 0.27101, 1, 28, 162.36, 71.5, 1, 1, 28, 163.1, -47.43, 1, 1, 28, 165.94, -5.86, 1, 1, 28, 165.13, 37.36, 1, 1, 28, 157.6, 71.37999, 1, 1, 28, 163.5, -99.51999, 1, 1, 28, 45.36, 27.22999, 1, 1, 28, 63.72, 44.97, 1, 1, 28, 70.69, 61.90999, 1, 1, 28, 62.86, 78.69, 1, 1, 28, 46.52, 85.3, 1, 1, 28, 29.92, 79.33, 1, 1, 28, 15.06, 62.2, 1, 1, 28, 14.09, 45.31, 1, 1, 28, 24.29, 27.04, 1, 1, 28, 48.63, 15.27999, 1, 1, 28, 84.87, 62.13, 1, 1, 28, 61.9, 94.83, 1, 1, 28, 22.54, 21.87, 1, 1, 28, 43.13, -95.94, 1, 1, 28, 41.77, -87.23, 1, 1, 28, 60.04, -70.33999, 1 ], + "hull": 29, + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 56, 54, 56, 54, 52, 52, 50, 50, 48, 48, 46, 46, 44, 42, 44, 32, 34, 4, 58, 58, 60, 62, 64, 64, 66, 66, 54, 50, 68, 68, 70, 70, 44, 60, 72, 62, 74, 72, 74, 74, 76, 76, 78, 78, 44, 16, 80, 80, 82, 82, 84, 84, 86, 86, 44, 14, 88, 88, 72, 14, 16, 10, 12, 12, 14, 12, 60, 90, 92, 92, 94, 94, 96, 96, 98, 98, 100, 100, 102, 102, 104, 104, 106, 106, 90, 108, 110, 110, 112, 38, 40, 40, 42, 112, 40, 34, 36, 36, 38, 36, 114, 114, 108, 30, 32, 30, 28, 24, 26, 28, 26, 22, 24, 22, 20, 20, 18, 18, 16, 28, 116, 116, 118, 118, 120, 120, 20 ], + "width": 271, + "height": 298 + } + }, + "head-bb": { + "head": { + "type": "boundingbox", + "vertexCount": 6, + "vertices": [ -19.13999, -70.3, 40.79999, -118.06999, 257.77, -115.61, 285.16, 57.18, 120.76999, 164.95, -5.05999, 76.94 ] + } + }, + "hoverboard_board": { + "hoverboard_board": { "x": -11.6, "y": 25.63, "rotation": 0.17, "width": 492, "height": 152 } + }, + "hoverboard_thruster_front": { + "hoverboard_thruster": { "y": -7.07, "width": 60, "height": 64 } + }, + "hoverboard_thruster_rear": { + "hoverboard_thruster": { "x": 1.08, "y": -6.28, "width": 60, "height": 64 } + }, + "hoverglow_front": { + "hoverglow_small": { "x": 2.13, "y": -2, "scaleX": 0.303, "scaleY": 0.495, "rotation": 0.15, "width": 274, "height": 75 } + }, + "hoverglow_rear": { + "hoverglow_small": { "x": 1.38, "y": -2.08, "scaleX": 0.303, "scaleY": 0.495, "rotation": 0.6, "width": 274, "height": 75 } + }, + "mouth": { + "mouth_grind": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 11.27, -85.87, -19.54999, 1.84, 36.09, 21.39999, 66.93, -66.3 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + }, + "mouth_oooo": { "x": 23.68, "y": -32.22, "rotation": -70.62, "width": 93, "height": 59 }, + "mouth_smile": { "x": 23.68, "y": -32.22, "rotation": -70.62, "width": 93, "height": 59 } + }, + "muzzle": { + "muzzle": { "x": 18.25, "y": 5.44, "rotation": 0.15, "width": 462, "height": 400 } + }, + "neck": { + "neck": { "x": 9.76, "y": -3, "rotation": -55.22, "width": 36, "height": 41 } + }, + "rear_bracer": { + "rear_bracer": { "x": 11.14, "y": -2.2, "rotation": 66.16, "width": 56, "height": 72 } + }, + "rear_foot": { + "rear_foot": { + "type": "mesh", + "uvs": [ 0.48368, 0.13869, 0.5199, 0.21423, 0.55098, 0.27906, 0.58837, 0.29815, 0.63488, 0.3219, 0.77341, 0.39265, 1, 0.73346, 1, 1, 0.59434, 1, 0.31159, 1, 0, 1, 0, 0.41396, 0.13629, 0, 0.41716, 0 ], + "triangles": [ 4, 8, 3, 5, 8, 4, 6, 8, 5, 8, 6, 7, 11, 1, 10, 12, 13, 0, 0, 11, 12, 1, 11, 0, 2, 9, 10, 2, 10, 1, 9, 2, 3, 8, 9, 3 ], + "vertices": [ 2, 7, 10.43999, 29.39999, 0.88823, 9, -6.73, 49.61, 0.11174, 2, 7, 16.54, 29.27, 0.83161, 9, -2.65, 45.08, 0.16834, 2, 7, 21.79, 29.13999, 0.78305, 9, 0.85, 41.18, 0.21694, 2, 7, 25.53, 31.43, 0.67843, 9, 5.07, 40.04, 0.32155, 2, 7, 30.17, 34.27, 0.5483, 9, 10.31999, 38.61, 0.45166, 2, 7, 44, 42.72, 0.16068, 9, 25.95999, 34.36, 0.83929, 1, 9, 51.56, 13.89, 1, 1, 9, 51.54, -2.07999, 1, 2, 7, 56.58, 2.98, 0.02958, 9, 5.71, -2.03999, 0.97039, 1, 7, 34.63, -20.20999, 0.99997, 1, 7, 10.43, -45.79, 0.99997, 1, 7, -15.1, -21.62999, 1, 1, 7, -22.54999, 6.61, 0.99997, 2, 7, -0.75, 29.67, 0.99219, 9, -14.25, 57.93, 0.00779 ], + "hull": 14, + "edges": [ 14, 12, 10, 12, 14, 16, 16, 18, 18, 20, 4, 18, 20, 22, 24, 26, 22, 24, 4, 2, 2, 20, 4, 6, 6, 16, 6, 8, 8, 10, 2, 0, 0, 26 ], + "width": 113, + "height": 60 + }, + "rear_foot_bend1": { "x": 29.61, "y": 18.12, "rotation": 46.59, "width": 117, "height": 66 }, + "rear_foot_bend2": { "x": 22.81, "y": 23.69, "rotation": 46.59, "width": 103, "height": 83 } + }, + "rear_shin": { + "rear_shin": { "x": 58.29, "y": -2.75, "rotation": 92.37, "width": 75, "height": 178 } + }, + "rear_thigh": { + "rear_thigh": { "x": 33.09, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 } + }, + "rear_upper_arm": { + "rear_upper_arm": { "x": 21.12, "y": 4.07, "rotation": 89.31, "width": 47, "height": 87 } + }, + "torso": { + "torso": { + "type": "mesh", + "uvs": [ 0.62509, 0.12671, 1, 0.26359, 1, 0.2887, 1, 0.66021, 1, 0.68244, 0.92322, 0.69257, 0.95115, 0.84965, 0.77122, 1, 0.49654, 1, 0.2718, 1, 0.13842, 0.77196, 0, 0.45614, 0, 0.19436, 0.14462, 0, 0.27801, 0, 0.72523, 0.27834, 0.7609, 0.46215, 0.84887, 0.67962, 0.68256, 0.63248, 0.53984, 0.38468, 0.25442, 0.32168, 0.30061, 0.55172, 0.39552, 0.79505, 0.26388, 0.17005, 0.52408, 0.18672 ], + "triangles": [ 6, 17, 5, 6, 7, 17, 8, 18, 7, 7, 18, 17, 9, 22, 8, 8, 22, 18, 9, 10, 22, 10, 21, 22, 22, 21, 18, 10, 11, 21, 4, 5, 3, 5, 17, 3, 3, 17, 16, 17, 18, 16, 16, 2, 3, 21, 19, 18, 18, 19, 16, 11, 20, 21, 21, 20, 19, 19, 15, 16, 16, 15, 2, 11, 12, 20, 20, 24, 19, 19, 24, 15, 20, 23, 24, 20, 12, 23, 15, 1, 2, 24, 0, 15, 15, 0, 1, 12, 13, 23, 0, 24, 14, 14, 24, 13, 24, 23, 13 ], + "vertices": [ 129.61, -10.38, 102.16, -45.06, 97.66, -44.7, 31, -39.45, 27.01, -39.13, 25.78, -31.47999, -2.59999, -31.97999, -28.2, -12.27999, -26.06999, 14.52999, -24.34, 36.5, 17.59, 46.29, 75.33, 55.34, 122.3, 51.63, 156.07, 34.75, 155.02998, 21.70999, 101.62999, -18.02, 68.37, -18.88999, 28.68, -24.39999, 38.40999, -8.81999, 83.98, 1.59, 97.5, 28.56999, 55.86, 27.31999, 11.47, 21.51, 124.62, 25.51, 119.62, 0.31 ], + "hull": 15, + "edges": [ 14, 12, 12, 10, 10, 8, 18, 20, 20, 22, 22, 24, 26, 28, 24, 26, 2, 4, 30, 4, 30, 32, 32, 34, 4, 6, 6, 8, 34, 6, 34, 36, 36, 38, 38, 40, 40, 24, 36, 14, 40, 42, 42, 44, 14, 16, 16, 18, 44, 16, 40, 46, 38, 48, 48, 30, 2, 0, 0, 28, 48, 0, 48, 26 ], + "width": 98, + "height": 180 + } + } + } +}, +"events": { + "footstep": {}, + "headAttach": { "int": 3, "float": 4 }, + "headBehind": { "int": 5, "float": 6, "string": "setup" }, + "headPop": { "int": 1, "float": 2 } +}, +"animations": { + "fly": { + "slots": { + "exhaust1": { + "color": [ + { + "time": 0, + "color": "ffffff98", + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.3333, + "color": "ffffffff", + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5666, + "color": "ffffffb0", + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.3333, "color": "ffffff98" } + ] + }, + "exhaust2": { + "color": [ + { + "time": 0, + "color": "ffffff98", + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.3333, + "color": "ffffffff", + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5666, + "color": "ffffffb0", + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.3333, "color": "ffffff98" } + ] + }, + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_open" } + ] + }, + "hoverglow_front": { + "color": [ + { "time": 0, "color": "ffffff8d" }, + { "time": 0.5, "color": "ffffffff" }, + { "time": 1.3333, "color": "ffffff8d" } + ] + }, + "hoverglow_rear": { + "color": [ + { "time": 0, "color": "ffffff8d" }, + { "time": 0.5, "color": "ffffffff" }, + { "time": 1.3333, "color": "ffffff8d" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_grind" }, + { "time": 1.3333, "name": "mouth_grind" } + ] + } + }, + "bones": { + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 4.72, + "y": -29.18, + "curve": [ 0.155, 0.18, 0.75, 1 ] + }, + { + "time": 0.1, + "x": 4.72, + "y": -34.45, + "curve": [ 0.191, -0.39, 0.719, 1 ] + }, + { + "time": 0.4333, + "x": 23.48, + "y": 14.72, + "curve": [ 0.311, 0.02, 0.795, 0.98 ] + }, + { + "time": 0.8333, + "x": 71.9, + "y": 28.45, + "curve": [ 0.319, 0, 0.824, 0.84 ] + }, + { "time": 1.3333, "x": 4.72, "y": -29.18 } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -5.34, + "curve": [ 0.247, 0, 0.629, 0.52 ] + }, + { + "time": 0.3, + "angle": -4.14, + "curve": [ 0.221, 0.11, 0.747, 1 ] + }, + { + "time": 0.6999, + "angle": 22.54, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.3333, "angle": -5.34 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "neck": { + "rotate": [ + { + "time": 0, + "angle": 0.65, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.3, + "angle": -1.58, + "curve": [ 0.45, 0, 0.75, 1 ] + }, + { + "time": 0.6999, + "angle": -12.82, + "curve": [ 0.25, 0, 0.625, 0.5 ] + }, + { + "time": 1.0666, + "angle": -6.71, + "curve": [ 0.375, 0.5, 0.75, 1 ] + }, + { "time": 1.3333, "angle": 0.65 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 8.04 }, + { "time": 0.3, "angle": -1.58 }, + { "time": 0.6999, "angle": -12.82 }, + { "time": 1.0666, "angle": 3.26 }, + { "time": 1.3333, "angle": 8.04 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "hair1": { + "rotate": [ + { "time": 0, "angle": 6.48 }, + { "time": 0.1333, "angle": 7.25 }, + { "time": 0.2666, "angle": 3.81 }, + { "time": 0.3666, "angle": 5.38 }, + { "time": 0.4666, "angle": 4.42 }, + { "time": 0.6333, "angle": 0.75 }, + { "time": 0.8, "angle": 0.58 }, + { "time": 0.8999, "angle": 3.76 }, + { "time": 1.0666, "angle": 4.09 }, + { "time": 1.2333, "angle": 7.48 }, + { "time": 1.3333, "angle": 6.48 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "hair3": { + "rotate": [ + { "time": 0, "angle": 9.46 }, + { "time": 0.1333, "angle": 10.24 }, + { "time": 0.2666, "angle": 6.79 }, + { "time": 0.3666, "angle": 8.36 }, + { "time": 0.4666, "angle": 7.41 }, + { "time": 0.6333, "angle": 3.73 }, + { "time": 0.8, "angle": 3.56 }, + { "time": 0.8999, "angle": 6.74 }, + { "time": 1.0666, "angle": 7.07 }, + { "time": 1.2333, "angle": 10.46 }, + { "time": 1.3333, "angle": 9.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "hair2": { + "rotate": [ + { "time": 0, "angle": -0.25 }, + { "time": 0.1333, "angle": 6.78 }, + { "time": 0.2666, "angle": 9.6 }, + { "time": 0.3666, "angle": 15.86 }, + { "time": 0.4666, "angle": 19.6 }, + { "time": 0.6333, "angle": 3.35 }, + { "time": 0.8, "angle": -9.4 }, + { "time": 0.8999, "angle": -5.61 }, + { "time": 1.0666, "angle": -4.26 }, + { "time": 1.2333, "angle": 0.14 }, + { "time": 1.3333, "angle": -0.25 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "hair4": { + "rotate": [ + { "time": 0, "angle": 6.9 }, + { "time": 0.1333, "angle": 7.86 }, + { "time": 0.2333, "angle": 5.54 }, + { "time": 0.3666, "angle": 11.19 }, + { "time": 0.5, "angle": 12.62 }, + { "time": 0.6, "angle": 17.84 }, + { "time": 0.6999, "angle": 20.53 }, + { "time": 0.8666, "angle": 11.84 }, + { "time": 1.0333, "angle": 6.65 }, + { "time": 1.1333, "angle": 8.52 }, + { "time": 1.2999, "angle": 6.66 }, + { "time": 1.3333, "angle": 6.9 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.2333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": 24.72, + "curve": [ 0.259, 0, 0.618, 0.44 ] + }, + { + "time": 0.4, + "angle": 35.93, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8333, + "angle": 18.74, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.1666, + "angle": 31.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.3333, "angle": 24.72 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "hoverboard": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.257, 0, 0.618, 0.45 ] + }, + { + "time": 0.3333, + "angle": 15.41, + "curve": [ 0.195, 0.35, 0.75, 1 ] + }, + { + "time": 0.8333, + "angle": -16.01, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 25.22, + "y": 7.84, + "curve": [ 0.553, 0.02, 0.75, 1 ] + }, + { + "time": 0.5, + "x": 67.8, + "y": 62.57, + "curve": [ 0.246, 0, 0.737, 1 ] + }, + { "time": 1.3333, "x": 25.22, "y": 7.84 } + ] + }, + "front_foot_ik": { + "rotate": [ + { "time": 0, "angle": -22.24 }, + { "time": 0.5, "angle": 9.33 }, + { "time": 1.3333, "angle": -22.24 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "front_thigh": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "front_toe_ik": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "hoverboard_thruster_front": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.3333, + "angle": 26.79, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8333, + "angle": 41.42, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "hoverboard_thruster_rear": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.3333, + "angle": 26.79, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8333, + "angle": 41.42, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "rear_foot_ik": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "rear_toe_ik": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "front_ankle_ik": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -6.56 }, + { + "time": 0.6999, + "angle": -45.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.3333, "angle": -6.56 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4333, + "x": 4.01, + "y": 1.45, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "rear_ankle_ik": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "angle": -22.48, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 53, + "curve": [ 0.259, 0, 0.618, 0.44 ] + }, + { + "time": 0.6999, + "angle": 27.8, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "angle": 56.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.3333, "angle": 53 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 0 }, + { + "time": 0.8, + "angle": 16.99, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "back_foot_tip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "front_foot_tip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 20.28, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "angle": 3.84, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.3333, "angle": 20.28 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "gunTip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.3333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 0 } + ] + }, + "hoverglow_front": { + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1, "y": 1.565 }, + { "time": 1.3333, "x": 1, "y": 1 } + ] + }, + "hoverglow_rear": { + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1, "y": 1.565 }, + { "time": 1.3333, "x": 1, "y": 1 } + ] + }, + "exhaust1": { + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.3333, "x": 1.597, "y": 1 }, + { "time": 0.5666, "x": 1.223, "y": 1 }, + { "time": 1.3333, "x": 1, "y": 1 } + ] + }, + "exhaust2": { + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.3333, "x": 1.597, "y": 1 }, + { "time": 0.5666, "x": 1.223, "y": 1 }, + { "time": 1.3333, "x": 1, "y": 1 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy-hover.png b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy-hover.png new file mode 100644 index 000000000..2eae82219 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy-hover.png differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy-hover.uasset b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy-hover.uasset new file mode 100644 index 000000000..168e2c6e0 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy-hover.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.atlas b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.atlas new file mode 100644 index 000000000..b73245a06 --- /dev/null +++ b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.atlas @@ -0,0 +1,195 @@ + +spineboy.png +size: 1022,1022 +format: RGBA8888 +filter: Linear,Linear +repeat: none +eye_indifferent + rotate: false + xy: 549, 694 + size: 93, 89 + orig: 93, 89 + offset: 0, 0 + index: -1 +eye_surprised + rotate: false + xy: 834, 857 + size: 93, 89 + orig: 93, 89 + offset: 0, 0 + index: -1 +front_bracer + rotate: true + xy: 375, 432 + size: 58, 80 + orig: 58, 80 + offset: 0, 0 + index: -1 +front_fist_closed + rotate: true + xy: 466, 593 + size: 75, 82 + orig: 75, 82 + offset: 0, 0 + index: -1 +front_fist_open + rotate: false + xy: 447, 504 + size: 86, 87 + orig: 86, 87 + offset: 0, 0 + index: -1 +front_foot + rotate: false + xy: 549, 785 + size: 126, 69 + orig: 126, 69 + offset: 0, 0 + index: -1 +front_foot_bend1 + rotate: true + xy: 375, 492 + size: 128, 70 + orig: 128, 70 + offset: 0, 0 + index: -1 +front_foot_bend2 + rotate: true + xy: 275, 330 + size: 108, 93 + orig: 108, 93 + offset: 0, 0 + index: -1 +front_shin + rotate: false + xy: 466, 670 + size: 81, 184 + orig: 82, 184 + offset: 1, 0 + index: -1 +front_thigh + rotate: false + xy: 214, 208 + size: 48, 112 + orig: 48, 112 + offset: 0, 0 + index: -1 +front_upper_arm + rotate: false + xy: 214, 109 + size: 54, 97 + orig: 54, 97 + offset: 0, 0 + index: -1 +goggles + rotate: false + xy: 466, 856 + size: 261, 166 + orig: 261, 166 + offset: 0, 0 + index: -1 +gun + rotate: false + xy: 2, 117 + size: 210, 203 + orig: 210, 203 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 2, 322 + size: 271, 298 + orig: 271, 298 + offset: 0, 0 + index: -1 +mouth_grind + rotate: false + xy: 929, 896 + size: 93, 59 + orig: 93, 59 + offset: 0, 0 + index: -1 +mouth_oooo + rotate: false + xy: 929, 835 + size: 93, 59 + orig: 93, 59 + offset: 0, 0 + index: -1 +mouth_smile + rotate: true + xy: 550, 599 + size: 93, 59 + orig: 93, 59 + offset: 0, 0 + index: -1 +muzzle + rotate: false + xy: 2, 622 + size: 462, 400 + orig: 462, 400 + offset: 0, 0 + index: -1 +neck + rotate: false + xy: 64, 6 + size: 35, 41 + orig: 36, 41 + offset: 0, 0 + index: -1 +rear_bracer + rotate: false + xy: 677, 782 + size: 55, 72 + orig: 56, 72 + offset: 0, 0 + index: -1 +rear_foot + rotate: true + xy: 2, 2 + size: 113, 60 + orig: 113, 60 + offset: 0, 0 + index: -1 +rear_foot_bend1 + rotate: false + xy: 64, 49 + size: 117, 66 + orig: 117, 66 + offset: 0, 0 + index: -1 +rear_foot_bend2 + rotate: false + xy: 729, 863 + size: 103, 83 + orig: 103, 83 + offset: 0, 0 + index: -1 +rear_shin + rotate: true + xy: 729, 948 + size: 74, 178 + orig: 75, 178 + offset: 1, 0 + index: -1 +rear_thigh + rotate: true + xy: 909, 957 + size: 65, 103 + orig: 65, 104 + offset: 0, 1 + index: -1 +rear_upper_arm + rotate: false + xy: 370, 343 + size: 47, 87 + orig: 47, 87 + offset: 0, 0 + index: -1 +torso + rotate: false + xy: 275, 440 + size: 98, 180 + orig: 98, 180 + offset: 0, 0 + index: -1 diff --git a/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.json b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.json new file mode 100644 index 000000000..5a785dc43 --- /dev/null +++ b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.json @@ -0,0 +1,4562 @@ +{ +"skeleton": { + "hash": "el6mTobqJcoc5sAB6isOC6TBkKg", + "spine": "3.5.32", + "width": 470.71, + "height": 731.57, + "images": "C:/Program Files (x86)/Spine/examples/spineboy/images/" +}, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "y": 247.47 }, + { "name": "shoot target", "parent": "root", "rotation": 1.23, "x": 578.74, "y": 350.09, "color": "ff3f00ff" }, + { "name": "aimer", "parent": "hip", "length": 350.94, "rotation": 1.57, "x": -5.73, "y": 98.76 }, + { "name": "aiming gun target", "parent": "aimer", "rotation": 0.34, "x": 317.92, "y": -78.75, "color": "ff3f00ff" }, + { "name": "free gun bone", "parent": "root", "rotation": -37.23, "x": 41.14, "y": 276.21 }, + { "name": "torso", "parent": "hip", "length": 127.56, "rotation": 103.82, "x": -1.62, "y": 4.9, "color": "e0da19ff" }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "rotation": 168.38, "x": 103.76, "y": 19.33, "color": "00ff04ff" }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.57, + "rotation": 18.3, + "x": 68.8, + "y": -0.68, + "color": "00ff04ff" + }, + { "name": "front_fist", "parent": "front_bracer", "length": 65.39, "rotation": 29.29, "x": 40.57, "y": 0.2, "color": "00ff04ff" }, + { "name": "front_thigh", "parent": "hip", "length": 74.81, "rotation": -95.51, "x": -17.46, "y": -11.64, "color": "00ff04ff" }, + { + "name": "front_shin", + "parent": "front_thigh", + "length": 128.77, + "rotation": -2.21, + "x": 78.69, + "y": 1.6, + "transform": "noScale", + "color": "00ff04ff" + }, + { "name": "front_foot", "parent": "front_shin", "length": 91.34, "rotation": 77.91, "x": 128.76, "y": -0.34, "color": "00ff04ff" }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.94, "rotation": -169.56, "x": 92.36, "y": -19.22, "color": "ff000dff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.56, "rotation": 23.15, "x": 51.36, "color": "ff000dff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.11, "rotation": 5.35, "x": 34.42, "y": -0.45, "color": "ff000dff" }, + { "name": "gun2", "parent": "root", "x": 390.37, "y": 534.39 }, + { "name": "gun3", "parent": "root", "x": 227.4, "y": 464.27 }, + { "name": "gun4", "parent": "root", "x": 250.14, "y": 672.72 }, + { "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.04, "y": 52.13, "color": "ff000dff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.54, "x": 127.5, "y": -0.31, "color": "e0da19ff" }, + { "name": "head", "parent": "neck", "length": 263.58, "rotation": 23.18, "x": 27.66, "y": -0.26, "color": "e0da19ff" }, + { "name": "pathbone", "parent": "root", "x": 71.67, "y": 368.83 }, + { "name": "rear_thigh", "parent": "hip", "length": 85.72, "rotation": -72.54, "x": 8.91, "y": -5.63, "color": "ff000dff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.88, "rotation": -19.83, "x": 86.1, "y": -1.33, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "rotation": 69.3, "x": 121.46, "y": -0.76, "color": "ff000dff" } +], +"slots": [ + { "name": "rear_upper_arm", "bone": "rear_upper_arm", "attachment": "rear_upper_arm" }, + { "name": "rear_bracer", "bone": "rear_bracer", "attachment": "rear_bracer" }, + { "name": "gun", "bone": "gun", "attachment": "gun" }, + { "name": "rear_foot", "bone": "rear_foot", "attachment": "rear_foot" }, + { "name": "rear_thigh", "bone": "rear_thigh", "attachment": "rear_thigh" }, + { "name": "rear_shin", "bone": "rear_shin", "attachment": "rear_shin" }, + { "name": "neck", "bone": "neck", "attachment": "neck" }, + { "name": "torso", "bone": "torso", "attachment": "torso" }, + { "name": "--A", "bone": "root" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "eye", "bone": "head", "attachment": "eye_indifferent" }, + { "name": "front_upper_arm", "bone": "front_upper_arm", "attachment": "front_upper_arm" }, + { "name": "front_thigh", "bone": "front_thigh", "attachment": "front_thigh" }, + { "name": "front_foot", "bone": "front_foot", "attachment": "front_foot" }, + { "name": "front_shin", "bone": "front_shin", "attachment": "front_shin" }, + { "name": "mouth", "bone": "head", "attachment": "mouth_smile" }, + { "name": "goggles", "bone": "head", "attachment": "goggles" }, + { "name": "--B", "bone": "root" }, + { "name": "front_bracer", "bone": "front_bracer", "attachment": "front_bracer" }, + { "name": "front_fist", "bone": "front_fist", "attachment": "front_fist_closed" }, + { "name": "muzzle", "bone": "gunTip", "blend": "additive" }, + { "name": "head-bb", "bone": "head" }, + { "name": "gun2", "bone": "gun2" }, + { "name": "gun3", "bone": "gun3" }, + { "name": "gun4", "bone": "gun4" }, + { "name": "gunspath", "bone": "pathbone", "attachment": "gunspath" } +], +"ik": [ + { + "name": "aiming constraint", + "order": 0, + "bones": [ "aimer" ], + "target": "shoot target", + "mix": 0 + }, + { + "name": "aiming gun constraint", + "order": 1, + "bones": [ "rear_upper_arm", "rear_bracer" ], + "target": "aiming gun target", + "mix": 0 + } +], +"transform": [ + { + "name": "gun flying", + "order": 3, + "bones": [ "gun" ], + "target": "free gun bone", + "rotateMix": 0, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + } +], +"path": [ + { + "name": "spinning guns", + "order": 2, + "bones": [ "gun4", "gun3", "gun2" ], + "target": "gunspath", + "spacingMode": "percent", + "spacing": 0.335, + "rotateMix": 0, + "translateMix": 0 + } +], +"skins": { + "default": { + "eye": { + "eye_indifferent": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 }, + "eye_surprised": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 } + }, + "front_bracer": { + "front_bracer": { "x": 12.03, "y": -1.68, "rotation": 79.6, "width": 58, "height": 80 } + }, + "front_fist": { + "front_fist_closed": { "x": 35.71, "y": -4.54, "rotation": 50.31, "width": 75, "height": 82 }, + "front_fist_open": { "x": 40.12, "y": -4.04, "rotation": 50.31, "width": 86, "height": 87 } + }, + "front_foot": { + "front_foot": { "x": 29.52, "y": 7.84, "rotation": 18.69, "width": 126, "height": 69 }, + "front_foot_bend1": { "x": 29.52, "y": 7.84, "rotation": 18.69, "width": 128, "height": 70 }, + "front_foot_bend2": { "x": 16.07, "y": 13.84, "rotation": 18.69, "width": 108, "height": 93 } + }, + "front_shin": { + "front_shin": { "x": 55.12, "y": -3.54, "rotation": 96.59, "width": 82, "height": 184 } + }, + "front_thigh": { + "front_thigh": { "x": 42.48, "y": 4.45, "rotation": 84.87, "width": 48, "height": 112 } + }, + "front_upper_arm": { + "front_upper_arm": { "x": 28.31, "y": 7.37, "rotation": 97.9, "width": 54, "height": 97 } + }, + "goggles": { + "goggles": { "x": 97.08, "y": 6.54, "rotation": -70.63, "width": 261, "height": 166 } + }, + "gun": { + "gun": { "x": 77.29, "y": 16.4, "rotation": 60.83, "width": 210, "height": 203 } + }, + "gun2": { + "gun": { "x": 43.59, "y": -39.79, "width": 210, "height": 203 } + }, + "gun3": { + "gun": { "x": 39.79, "y": -39.8, "width": 210, "height": 203 } + }, + "gun4": { + "gun": { "x": 41.69, "y": -36, "width": 210, "height": 203 } + }, + "gunspath": { + "gunspath": { + "type": "path", + "closed": true, + "lengths": [ 534.73, 1020.73, 1497.06, 1846.09 ], + "vertexCount": 12, + "vertices": [ -175.36, 204.8, -71.34, 203.78, 121.95, 201.89, 376.27, 145.38, 369.88, -13.62, 363.36, -174.04, 157.89, -197.96, -31.54, -205.54, -224.8, -211.56, -421.28, -97.38, -436.34, -4.18, -453.89, 104.42 ], + "color": "ffffffff" + } + }, + "head": { + "head": { "x": 128.96, "y": 0.3, "rotation": -70.63, "width": 271, "height": 298 } + }, + "head-bb": { + "head": { + "type": "boundingbox", + "vertexCount": 6, + "vertices": [ -19.14, -70.3, 40.8, -118.07, 257.77, -115.62, 285.16, 57.18, 120.77, 164.95, -5.07, 76.95 ] + } + }, + "mouth": { + "mouth_grind": { "x": 23.69, "y": -32.24, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth_oooo": { "x": 23.69, "y": -32.24, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth_smile": { "x": 23.69, "y": -32.24, "rotation": -70.63, "width": 93, "height": 59 } + }, + "muzzle": { + "muzzle": { "x": 18.25, "y": 5.45, "rotation": 0.15, "width": 462, "height": 400 } + }, + "neck": { + "neck": { "x": 9.77, "y": -3.01, "rotation": -55.22, "width": 36, "height": 41 } + }, + "rear_bracer": { + "rear_bracer": { "x": 11.15, "y": -2.2, "rotation": 66.17, "width": 56, "height": 72 } + }, + "rear_foot": { + "rear_foot": { "x": 31.51, "y": 3.58, "rotation": 23.07, "width": 113, "height": 60 }, + "rear_foot_bend1": { "x": 34.39, "y": 4.8, "rotation": 23.07, "width": 117, "height": 66 }, + "rear_foot_bend2": { "x": 30.38, "y": 12.62, "rotation": 23.07, "width": 103, "height": 83 } + }, + "rear_shin": { + "rear_shin": { "x": 58.29, "y": -2.75, "rotation": 92.37, "width": 75, "height": 178 } + }, + "rear_thigh": { + "rear_thigh": { "x": 33.11, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 } + }, + "rear_upper_arm": { + "rear_upper_arm": { "x": 21.13, "y": 4.09, "rotation": 89.33, "width": 47, "height": 87 } + }, + "torso": { + "torso": { "x": 63.61, "y": 7.12, "rotation": -94.54, "width": 98, "height": 180 } + } + } +}, +"events": { + "footstep": {}, + "headAttach": { "int": 3, "float": 4 }, + "headBehind": { "int": 5, "float": 6, "string": "setup" }, + "headPop": { "int": 1, "float": 2 } +}, +"animations": { + "death": { + "slots": { + "eye": { + "attachment": [ + { "time": 0, "name": "eye_surprised" }, + { "time": 0.4667, "name": "eye_indifferent" }, + { "time": 2.2333, "name": "eye_surprised" }, + { "time": 4.5333, "name": "eye_indifferent" } + ] + }, + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_oooo" }, + { "time": 2.2333, "name": "mouth_grind" }, + { "time": 4.5333, "name": "mouth_oooo" } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { "time": 0, "angle": -2.83 }, + { "time": 0.1333, "angle": -28.74 }, + { "time": 0.2333, "angle": 11.43 }, + { "time": 0.3333, "angle": -50.25 }, + { "time": 0.4, "angle": -72.67, "curve": "stepped" }, + { "time": 0.4333, "angle": -72.67 }, + { "time": 0.5, "angle": -20.25 }, + { "time": 0.5667, "angle": -85.29, "curve": "stepped" }, + { "time": 0.9333, "angle": -85.29, "curve": "stepped" }, + { "time": 2.2333, "angle": -85.29 }, + { "time": 2.5, "angle": -51.96, "curve": "stepped" }, + { "time": 4.5333, "angle": -51.96 }, + { "time": 4.6667, "angle": -85.29 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": -2.83 }, + { "time": 0.1333, "angle": 12.35 }, + { "time": 0.2333, "angle": 29.89 }, + { "time": 0.3, "angle": 70.36 }, + { "time": 0.4, "angle": -10.22, "curve": "stepped" }, + { "time": 0.4333, "angle": -10.22 }, + { "time": 0.5, "angle": 2.93 }, + { "time": 0.5667, "angle": 47.95, "curve": "stepped" }, + { "time": 2.2333, "angle": 47.95 }, + { "time": 2.5, "angle": 18.51, "curve": "stepped" }, + { "time": 4.5333, "angle": 18.51 }, + { "time": 4.6667, "angle": 47.95 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -8.62 }, + { "time": 0.1333, "angle": 28.2 }, + { "time": 0.2667, "angle": -280.19 }, + { "time": 0.4, "angle": -237.23, "curve": "stepped" }, + { "time": 0.4333, "angle": -237.23 }, + { "time": 0.5, "angle": 76.03 }, + { "time": 0.5667, "angle": -280.99 }, + { "time": 0.6333, "angle": 76.03, "curve": "stepped" }, + { "time": 0.8, "angle": 76.03, "curve": "stepped" }, + { "time": 0.9333, "angle": 76.03, "curve": "stepped" }, + { "time": 2.2333, "angle": 76.03 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -38.86 }, + { "time": 0.1333, "angle": -299.59 }, + { "time": 0.2667, "angle": -244.75 }, + { "time": 0.4, "angle": -292.36 }, + { "time": 0.4333, "angle": -315.85 }, + { "time": 0.5, "angle": -347.94 }, + { "time": 0.7, "angle": -347.33, "curve": "stepped" }, + { "time": 2.2333, "angle": -347.33 }, + { "time": 2.7, "angle": -290.68 }, + { "time": 2.7667, "angle": -285.11 }, + { "time": 4.6667, "angle": -290.68 }, + { "time": 4.8, "angle": 8.61 }, + { "time": 4.8667, "angle": 10.94 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": -44.7 }, + { "time": 0.1333, "angle": 112.26 }, + { "time": 0.2667, "angle": 129.08 }, + { "time": 0.4, "angle": 134.94, "curve": "stepped" }, + { "time": 0.4333, "angle": 134.94 }, + { "time": 0.5667, "angle": 172.6, "curve": "stepped" }, + { "time": 0.9333, "angle": 172.6, "curve": "stepped" }, + { "time": 2.2333, "angle": 172.6 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 21.88 }, + { "time": 0.1333, "angle": 11.49 }, + { "time": 0.2667, "angle": -18.82 }, + { "time": 0.4, "angle": -18.93 }, + { "time": 0.4333, "angle": -18.28 }, + { "time": 0.5, "angle": 60.62 }, + { "time": 0.7, "angle": -18.88, "curve": "stepped" }, + { "time": 2.2333, "angle": -18.88 }, + { "time": 2.7, "angle": -1.96, "curve": "stepped" }, + { "time": 4.6667, "angle": -1.96 }, + { "time": 4.8, "angle": 34.55 }, + { "time": 4.9333, "angle": -18.75 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -2.33 }, + { "time": 0.2667, "angle": 26.35 }, + { "time": 0.7, "angle": -6.08, "curve": "stepped" }, + { "time": 2.2333, "angle": -6.08 }, + { "time": 2.7, "angle": 5.73, "curve": "stepped" }, + { "time": 4.6667, "angle": 5.73 }, + { "time": 4.8667, "angle": -6.52 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 10.36 }, + { "time": 0.1333, "angle": -23.12 }, + { "time": 0.2667, "angle": -23.12 }, + { "time": 0.4, "angle": -23.16, "curve": "stepped" }, + { "time": 0.4333, "angle": -23.16 }, + { "time": 0.5667, "angle": -23.2, "curve": "stepped" }, + { "time": 0.9333, "angle": -23.2, "curve": "stepped" }, + { "time": 2.2333, "angle": -23.2 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": -2.79 }, + { "time": 0.1333, "angle": -24.58 } + ] + }, + "front_thigh": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 8.47 }, + { "time": 0.2667, "angle": 115.96 }, + { "time": 0.4, "angle": 180.66 }, + { "time": 0.5667, "angle": 192.71 }, + { "time": 0.6667, "angle": 155.22 }, + { "time": 0.7667, "angle": 97.74 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": -27.37 }, + { "time": 0.2667, "angle": -35.1 }, + { "time": 0.4, "angle": -37.73, "curve": "stepped" }, + { "time": 0.5667, "angle": -37.73 }, + { + "time": 0.6667, + "angle": -40.07, + "curve": [ 0.153, 0.89, 0.75, 1 ] + }, + { "time": 0.8, "angle": 2.76 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 70.45 }, + { "time": 0.2667, "angle": 155.35 }, + { "time": 0.4, "angle": 214.31, "curve": "stepped" }, + { "time": 0.4333, "angle": 214.31 }, + { "time": 0.5, "angle": 169.67 }, + { "time": 0.7, "angle": 83.27 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 18.94 }, + { "time": 0.2667, "angle": -21.04 }, + { "time": 0.4, "angle": -29.94, "curve": "stepped" }, + { "time": 0.4333, "angle": -29.94 }, + { + "time": 0.5667, + "angle": 9.4, + "curve": [ 0.053, 0.95, 0.75, 1 ] + }, + { "time": 0.7333, "angle": 7.78 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": -41.12 }, + { "time": 0.3333, "angle": 9.01 }, + { "time": 0.5333, "angle": -45.6 }, + { "time": 0.7333, "angle": -26.91 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2, "angle": -27.98 }, + { "time": 0.3667, "angle": 12.63 }, + { "time": 0.4333, "angle": -4.7 }, + { "time": 0.6667, "angle": -26.62 } + ] + }, + "hip": { + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.2, "x": 50.35, "y": 151.73 }, + { "time": 0.4, "x": 5.17, "y": -119.65, "curve": "stepped" }, + { "time": 0.4333, "x": 5.17, "y": -119.65 }, + { "time": 0.5, "x": 50.35, "y": -205.19 }, + { "time": 0.5667, "x": 50.35, "y": -193.76 }, + { "time": 0.6333, "x": 50.35, "y": -205.19 } + ] + } + } + }, + "frozen": { + "slots": { + "eye": { + "attachment": [ + { "time": 0.1333, "name": "eye_surprised" } + ] + }, + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_closed" }, + { "time": 0.1333, "name": "front_fist_open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_grind" }, + { "time": 0.1333, "name": "mouth_oooo" } + ] + }, + "torso": { + "attachment": [ + { "time": 0, "name": "torso" } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 52.68, + "curve": [ 0.196, 0.86, 0.75, 1 ] + }, + { "time": 0.1333, "angle": 17.37 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.1333, "x": 0, "y": 0 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -39.71 }, + { "time": 0.1333, "angle": -8.62 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -40.64 }, + { "time": 0.1333, "angle": 0.09 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": -11.27 }, + { "time": 0.1333, "angle": 18.91 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1, "x": 1, "y": 1.677 }, + { "time": 0.2333, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -29.44, + "curve": [ 0.181, 3.16, 0.494, 0.18 ] + }, + { "time": 0.1333, "angle": -342.9 } + ], + "translate": [ + { + "time": 0, + "x": 6.25, + "y": 10.05, + "curve": [ 0.181, 3.16, 0.494, 0.18 ] + }, + { "time": 0.1333, "x": 0, "y": 0 } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 33.44, + "curve": [ 0.181, 3.16, 0.494, 0.18 ] + }, + { "time": 0.1333, "angle": -18.87 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { + "time": 0.0667, + "x": 1.363, + "y": 1.725, + "curve": [ 0.067, 0.92, 0.75, 1 ] + }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -19.76 }, + { "time": 0.1333, "angle": -2.33 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 132.24 }, + { "time": 0.1333, "angle": -44.7 } + ], + "translate": [ + { "time": 0, "x": -2.57, "y": -8.89 }, + { "time": 0.1333, "x": 0, "y": 0 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": -23.08 }, + { "time": 0.1333, "angle": 10.36 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1.435, "curve": "stepped" }, + { + "time": 0.1333, + "x": 1, + "y": 1.435, + "curve": [ 0.067, 0.92, 0.75, 1 ] + }, + { "time": 0.3, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.1333, "angle": 28.62 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 11.03, "curve": "stepped" }, + { "time": 0.0667, "angle": 11.03 }, + { "time": 0.1333, "angle": -19.91 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -16.4, + "curve": [ 0.481, 0.01, 0.75, 1 ] + }, + { "time": 0.1333, "angle": 6.7 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": -2.79 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": -19.8, "curve": "stepped" }, + { "time": 0.0667, "angle": -19.8 }, + { "time": 0.2, "angle": 26.02 }, + { "time": 0.5547, "angle": 21.04 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": -28.21 }, + { "time": 0.1333, "angle": 34.38 }, + { "time": 0.5547, "angle": 15.66 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0 }, + { + "time": 0.2333, + "angle": 10.03, + "curve": [ 0.703, 0, 0.983, 0.63 ] + }, + { "time": 0.6333, "angle": 103.91 }, + { "time": 0.9667, "angle": 53.87 }, + { "time": 1.2333, "angle": 88.22 }, + { "time": 1.4333, "angle": 67 }, + { "time": 1.5667, "angle": 83.04 }, + { "time": 1.6667, "angle": 74.76, "curve": "stepped" }, + { "time": 2.0667, "angle": 74.76 } + ], + "translate": [ + { "time": 0, "x": -62.48, "y": -23.11 }, + { "time": 0.0667, "x": -29.42, "y": 35.86 }, + { + "time": 0.1333, + "x": 49.05, + "y": -20.73, + "curve": [ 0.072, 1, 0.75, 1 ] + }, + { + "time": 0.3667, + "x": 38.46, + "y": 14.56, + "curve": [ 0.703, 0, 0.983, 0.63 ] + }, + { + "time": 0.6333, + "x": 22.33, + "y": -97, + "curve": [ 0.067, 0.92, 0.75, 1 ] + }, + { + "time": 0.8, + "x": 19.78, + "y": -1.57, + "curve": [ 0.703, 0, 0.983, 0.63 ] + }, + { + "time": 0.9667, + "x": 34.56, + "y": -134.63, + "curve": [ 0.067, 0.92, 0.75, 1 ] + }, + { + "time": 1.1, + "x": 19.78, + "y": -1.57, + "curve": [ 0.703, 0, 0.983, 0.63 ] + }, + { + "time": 1.2333, + "x": 21.04, + "y": -138.7, + "curve": [ 0.067, 0.92, 0.75, 1 ] + }, + { + "time": 1.3333, + "x": 25.56, + "y": -115.49, + "curve": [ 0.703, 0, 0.983, 0.63 ] + }, + { + "time": 1.4333, + "x": 30.14, + "y": -176.43, + "curve": [ 0.289, 0.9, 0.781, 1 ] + }, + { + "time": 1.5, + "x": 28.25, + "y": -135.65, + "curve": [ 0.703, 0, 0.983, 0.63 ] + }, + { "time": 1.5667, "x": 30.14, "y": -176.43 }, + { "time": 1.6, "x": 30.94, "y": -178.66 }, + { "time": 1.6667, "x": 33.22, "y": -196.45, "curve": "stepped" }, + { "time": 2.0667, "x": 33.22, "y": -196.45 } + ], + "scale": [ + { "time": 0, "x": 1.411, "y": 0.796 }, + { "time": 0.0667, "x": 0.979, "y": 1.249 }, + { + "time": 0.1333, + "x": 1.286, + "y": 0.849, + "curve": [ 0.086, 2.14, 0.471, 0.77 ] + }, + { "time": 0.4, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.1667, "x": 1, "y": 1 } + ] + } + } + }, + "gun toss": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_open" }, + { "time": 0.1667, "name": "front_fist_open" }, + { "time": 0.5667, "name": "front_fist_closed" }, + { "time": 1.2, "name": "front_fist_open" }, + { "time": 2.5333, "name": "front_fist_open" } + ] + }, + "gun2": { + "attachment": [ + { "time": 0.6333, "name": "gun" }, + { "time": 1.6667, "name": null } + ] + }, + "gun3": { + "attachment": [ + { "time": 0.6333, "name": "gun" }, + { "time": 1.6667, "name": null } + ] + }, + "gun4": { + "attachment": [ + { "time": 0.6333, "name": "gun" }, + { "time": 1.6667, "name": null } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_smile" }, + { "time": 2.2333, "name": "mouth_smile" }, + { "time": 2.5333, "name": "mouth_smile" } + ] + }, + "muzzle": { + "color": [ + { "time": 0, "color": "ffffff00", "curve": "stepped" }, + { "time": 0.7667, "color": "ffffff00", "curve": "stepped" }, + { "time": 0.8, "color": "ffffffff", "curve": "stepped" }, + { "time": 0.8333, "color": "ffffff00", "curve": "stepped" }, + { "time": 0.8667, "color": "ffffffff", "curve": "stepped" }, + { "time": 0.9, "color": "ffffff00", "curve": "stepped" }, + { "time": 0.9333, "color": "ffffffff", "curve": "stepped" }, + { "time": 0.9667, "color": "ffffff00", "curve": "stepped" }, + { "time": 1.1, "color": "ffffffff", "curve": "stepped" }, + { "time": 1.1333, "color": "ffffff00", "curve": "stepped" }, + { "time": 1.2, "color": "ffffff00", "curve": "stepped" }, + { "time": 1.2333, "color": "ffffffff", "curve": "stepped" }, + { "time": 1.2667, "color": "ffffff00", "curve": "stepped" }, + { "time": 1.3333, "color": "ffffff00", "curve": "stepped" }, + { "time": 2.5333, "color": "ffffff00" } + ], + "attachment": [ + { "time": 0, "name": null }, + { "time": 0.7667, "name": "muzzle" }, + { "time": 1.3333, "name": null }, + { "time": 2.5333, "name": null } + ] + } + }, + "bones": { + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 1.0333, + "angle": 0, + "curve": [ 0.25, 0, 0.986, 0.38 ] + }, + { "time": 1.1, "angle": -83.32 }, + { + "time": 1.2, + "angle": 155.47, + "curve": [ 0.187, 0.37, 0.477, 1 ] + }, + { "time": 1.4667, "angle": 0, "curve": "stepped" }, + { "time": 2.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -6.64, "y": -23.02, "curve": "stepped" }, + { + "time": 0.9, + "x": -6.64, + "y": -23.02, + "curve": [ 0.329, 0.07, 0.662, 0.41 ] + }, + { + "time": 0.9667, + "x": -5.86, + "y": -99.55, + "curve": [ 0.32, 0.15, 0.653, 0.5 ] + }, + { + "time": 1.1667, + "x": -9.34, + "y": 237.84, + "curve": [ 0.315, 0.02, 0.648, 0.39 ] + }, + { "time": 1.4333, "x": -3.93, "y": -66.28, "curve": "stepped" }, + { + "time": 1.7, + "x": -3.93, + "y": -66.28, + "curve": [ 0.33, 0.31, 0.664, 0.65 ] + }, + { + "time": 1.7667, + "x": -3.93, + "y": -90.62, + "curve": [ 0.332, 0.33, 0.665, 0.66 ] + }, + { + "time": 1.9, + "x": -0.93, + "y": 15.75, + "curve": [ 0.329, 0.31, 0.663, 0.65 ] + }, + { + "time": 2.0333, + "x": -6.64, + "y": -23.02, + "curve": [ 0.33, 0.09, 0.663, 0.43 ] + }, + { + "time": 2.1, + "x": -6.64, + "y": -34.66, + "curve": [ 0.325, 0.17, 0.658, 0.51 ] + }, + { "time": 2.2667, "x": -6.64, "y": -23.02, "curve": "stepped" }, + { "time": 2.5333, "x": -6.64, "y": -23.02 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9, "x": 1, "y": 1 }, + { "time": 0.9667, "x": 1.099, "y": 0.921 }, + { "time": 1.0667, "x": 1, "y": 1.1 }, + { "time": 1.3, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 2.5333, "x": 1, "y": 1 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.9, "x": 0, "y": 0 }, + { "time": 0.9667, "x": 0, "y": -1 }, + { "time": 1.1667, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "front_thigh": { + "rotate": [ + { "time": 0, "angle": 0.65, "curve": "stepped" }, + { + "time": 0.9, + "angle": 0.65, + "curve": [ 0.329, 0.07, 0.662, 0.41 ] + }, + { + "time": 0.9667, + "angle": 39.67, + "curve": [ 0.327, 0.21, 0.66, 0.55 ] + }, + { + "time": 1.0333, + "angle": -13.86, + "curve": [ 0.327, 0.27, 0.66, 0.6 ] + }, + { + "time": 1.1667, + "angle": 86.97, + "curve": [ 0.315, 0.02, 0.648, 0.39 ] + }, + { "time": 1.4333, "angle": -15.98, "curve": "stepped" }, + { + "time": 1.7, + "angle": -15.98, + "curve": [ 0.332, 0.32, 0.665, 0.66 ] + }, + { + "time": 1.7667, + "angle": -5.82, + "curve": [ 0.328, 0.3, 0.661, 0.64 ] + }, + { + "time": 2.0333, + "angle": 0.65, + "curve": [ 0.33, 0.09, 0.663, 0.43 ] + }, + { + "time": 2.1, + "angle": 14.29, + "curve": [ 0.325, 0.17, 0.658, 0.51 ] + }, + { "time": 2.2667, "angle": 0.65, "curve": "stepped" }, + { "time": 2.5333, "angle": 0.65 } + ], + "translate": [ + { "time": 0, "x": -13.4, "y": 6.7, "curve": "stepped" }, + { + "time": 0.9, + "x": -13.4, + "y": 6.7, + "curve": [ 0.315, 0.02, 0.648, 0.39 ] + }, + { + "time": 1.1667, + "x": -12.04, + "y": 18.87, + "curve": [ 0.315, 0.02, 0.648, 0.39 ] + }, + { "time": 1.4333, "x": -10.69, "y": 14.81, "curve": "stepped" }, + { + "time": 1.7, + "x": -10.69, + "y": 14.81, + "curve": [ 0.326, 0.29, 0.66, 0.63 ] + }, + { "time": 2.0333, "x": -13.4, "y": 6.7, "curve": "stepped" }, + { "time": 2.5333, "x": -13.4, "y": 6.7 } + ], + "scale": [ + { "time": 0, "x": 0.897, "y": 1, "curve": "stepped" }, + { "time": 2.5333, "x": 0.897, "y": 1 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.6667, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": -19.29, "curve": "stepped" }, + { + "time": 0.9, + "angle": -19.29, + "curve": [ 0.329, 0.07, 0.662, 0.41 ] + }, + { + "time": 0.9667, + "angle": -87.27, + "curve": [ 0.327, 0.21, 0.66, 0.55 ] + }, + { + "time": 1.0333, + "angle": 2.81, + "curve": [ 0.327, 0.27, 0.66, 0.6 ] + }, + { + "time": 1.1667, + "angle": -103.46, + "curve": [ 0.322, 0.03, 0.655, 0.39 ] + }, + { + "time": 1.3333, + "angle": -22.81, + "curve": [ 0.327, 0.27, 0.66, 0.6 ] + }, + { "time": 1.4667, "angle": -26.17, "curve": "stepped" }, + { + "time": 1.7, + "angle": -26.17, + "curve": [ 0.332, 0.32, 0.665, 0.66 ] + }, + { + "time": 1.7667, + "angle": -44.54, + "curve": [ 0.328, 0.3, 0.661, 0.64 ] + }, + { + "time": 2.0333, + "angle": -19.29, + "curve": [ 0.33, 0.09, 0.663, 0.43 ] + }, + { + "time": 2.1, + "angle": -41.72, + "curve": [ 0.325, 0.17, 0.658, 0.51 ] + }, + { "time": 2.2667, "angle": -19.29, "curve": "stepped" }, + { "time": 2.5333, "angle": -19.29 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0667, "x": 1, "y": 1 }, + { "time": 1.1333, "x": 1, "y": 2.131 }, + { "time": 1.3, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 2.5333, "x": 1, "y": 1 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { + "time": 0.9, + "x": 0, + "y": 0, + "curve": [ 0.263, 0.47, 0.75, 1 ] + }, + { "time": 0.9667, "x": -3.29, "y": 22.69 }, + { + "time": 1.0333, + "x": 0, + "y": 9.7, + "curve": [ 0.337, 0, 0.611, 0.5 ] + }, + { + "time": 1.1333, + "x": 0, + "y": -12.29, + "curve": [ 0.23, 0.5, 0.528, 1 ] + }, + { + "time": 1.2, + "x": 0, + "y": 9.7, + "curve": [ 0.25, 0, 0.407, 1 ] + }, + { "time": 1.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.7, "x": 0, "y": 0 }, + { "time": 1.7667, "x": -4.4, "y": 13.34 }, + { "time": 2.0333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": 30.51, "curve": "stepped" }, + { + "time": 0.9, + "angle": 30.51, + "curve": [ 0.327, 0.06, 0.66, 0.4 ] + }, + { + "time": 0.9667, + "angle": 75.84, + "curve": [ 0.324, 0.21, 0.657, 0.55 ] + }, + { + "time": 1.0667, + "angle": 87.84, + "curve": [ 0.324, 0.27, 0.657, 0.61 ] + }, + { + "time": 1.1667, + "angle": 57.78, + "curve": [ 0.309, 0.02, 0.641, 0.4 ] + }, + { "time": 1.4333, "angle": 56.48, "curve": "stepped" }, + { "time": 1.7, "angle": 56.48 }, + { "time": 1.7667, "angle": 73.88 }, + { "time": 1.9, "angle": 9.72 }, + { + "time": 2.0333, + "angle": 30.51, + "curve": [ 0.33, 0.09, 0.663, 0.43 ] + }, + { + "time": 2.1, + "angle": 40.04, + "curve": [ 0.325, 0.17, 0.658, 0.51 ] + }, + { "time": 2.2667, "angle": 30.51, "curve": "stepped" }, + { "time": 2.5333, "angle": 30.51 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": -23.83, "curve": "stepped" }, + { + "time": 0.9, + "angle": -23.83, + "curve": [ 0.327, 0.06, 0.66, 0.4 ] + }, + { + "time": 0.9667, + "angle": -80.38, + "curve": [ 0.324, 0.21, 0.657, 0.55 ] + }, + { + "time": 1.0667, + "angle": -124.5, + "curve": [ 0.324, 0.27, 0.657, 0.61 ] + }, + { + "time": 1.2667, + "angle": 10.25, + "curve": [ 0.309, 0.02, 0.641, 0.4 ] + }, + { "time": 1.4667, "angle": -49.11, "curve": "stepped" }, + { "time": 1.7, "angle": -49.11 }, + { "time": 1.7667, "angle": -67.91 }, + { "time": 1.9, "angle": 12.33 }, + { + "time": 2.0333, + "angle": -23.83, + "curve": [ 0.33, 0.09, 0.663, 0.43 ] + }, + { + "time": 2.1, + "angle": -37.67, + "curve": [ 0.325, 0.17, 0.658, 0.51 ] + }, + { "time": 2.2667, "angle": -23.83, "curve": "stepped" }, + { "time": 2.5333, "angle": -23.83 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.1667, "x": 1, "y": 1 }, + { "time": 1.3, "x": 1, "y": 1.804 }, + { "time": 1.4667, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 2.5333, "x": 1, "y": 1 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0333, "x": 0, "y": 0 }, + { + "time": 1.1, + "x": -16.58, + "y": 0, + "curve": [ 0.25, 0, 0.223, 1 ] + }, + { + "time": 1.2667, + "x": 14.35, + "y": 0, + "curve": [ 0.25, 0, 0.504, 1 ] + }, + { "time": 1.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 8.88, + "curve": [ 0.315, 0.02, 0.648, 0.39 ] + }, + { + "time": 0.9, + "angle": 5.14, + "curve": [ 0.552, 0.06, 0.838, 0.21 ] + }, + { + "time": 0.9667, + "angle": 26.21, + "curve": [ 0.32, 0.15, 0.653, 0.5 ] + }, + { + "time": 1.0333, + "angle": -12.16, + "curve": [ 0.32, 0.15, 0.653, 0.5 ] + }, + { "time": 1.1333, "angle": -20.78, "curve": "stepped" }, + { + "time": 1.3333, + "angle": -20.78, + "curve": [ 0.315, 0.02, 0.648, 0.39 ] + }, + { "time": 1.4333, "angle": 31.01, "curve": "stepped" }, + { + "time": 1.7, + "angle": 31.01, + "curve": [ 0.332, 0.33, 0.666, 0.66 ] + }, + { + "time": 1.7667, + "angle": 36.47, + "curve": [ 0.331, 0.32, 0.665, 0.66 ] + }, + { + "time": 1.8667, + "angle": -18.45, + "curve": [ 0.33, 0.31, 0.663, 0.64 ] + }, + { + "time": 1.9667, + "angle": 23.37, + "curve": [ 0.331, 0.32, 0.664, 0.65 ] + }, + { + "time": 2.0333, + "angle": 7.95, + "curve": [ 0.332, 0.33, 0.666, 0.66 ] + }, + { + "time": 2.1, + "angle": 15.51, + "curve": [ 0.324, 0.12, 0.658, 0.47 ] + }, + { "time": 2.2667, "angle": 5.14, "curve": "stepped" }, + { "time": 2.5333, "angle": 5.14 } + ], + "scale": [ + { "time": 0, "x": 0.755, "y": 1.31, "curve": "stepped" }, + { "time": 1.1, "x": 0.755, "y": 1.31 }, + { "time": 1.2, "x": 1.272, "y": 1.31, "curve": "stepped" }, + { "time": 1.2667, "x": 1.272, "y": 1.31 }, + { "time": 1.4, "x": 0.755, "y": 1.31, "curve": "stepped" }, + { "time": 2.5333, "x": 0.755, "y": 1.31 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 62.42, + "curve": [ 0.504, 0.02, 0.75, 1 ] + }, + { "time": 0.1667, "angle": -54.91 }, + { "time": 0.5333, "angle": 299.39 }, + { "time": 0.7, "angle": 103.94 }, + { "time": 0.7667, "angle": 149.61 }, + { "time": 1.3, "angle": 12.1 }, + { + "time": 1.4667, + "angle": 269.28, + "curve": [ 0.25, 0, 0.401, 1 ] + }, + { "time": 1.6, "angle": -90.72, "curve": "stepped" }, + { + "time": 1.6333, + "angle": -90.72, + "curve": [ 0.098, 0.63, 0.26, 1 ] + }, + { "time": 2, "angle": 62.42, "curve": "stepped" }, + { "time": 2.5333, "angle": 62.42 } + ], + "translate": [ + { "time": 0, "x": -1.83, "y": -16.79 }, + { "time": 0.1667, "x": -3.74, "y": 56.01 }, + { "time": 0.5333, "x": 8.85, "y": 49.53 }, + { "time": 0.7, "x": 4.6, "y": -0.69, "curve": "stepped" }, + { "time": 0.7667, "x": 4.6, "y": -0.69 }, + { "time": 1.4333, "x": 7.37, "y": 37.32 }, + { "time": 1.5667, "x": 29.37, "y": 77.69, "curve": "stepped" }, + { "time": 1.6333, "x": 29.37, "y": 77.69 }, + { "time": 2, "x": -1.83, "y": -16.79, "curve": "stepped" }, + { "time": 2.5333, "x": -1.83, "y": -16.79 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.2667, "x": 0, "y": 0 }, + { + "time": 1.4, + "x": 16.97, + "y": 0, + "curve": [ 0.25, 0, 0.511, 1 ] + }, + { "time": 1.6, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.9667, "x": 0, "y": 0 }, + { + "time": 2.0667, + "x": -8.12, + "y": 0, + "curve": [ 0.25, 0, 0.433, 1 ] + }, + { "time": 2.4667, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -59.85, + "curve": [ 0.493, 0, 0.75, 1 ] + }, + { "time": 0.3, "angle": 52.27 }, + { + "time": 0.5333, + "angle": -300.75, + "curve": [ 0.25, 0, 0.567, 1.78 ] + }, + { "time": 0.7, "angle": -41.32 }, + { + "time": 0.8333, + "angle": -47.52, + "curve": [ 0.47, 0, 0.572, 1 ] + }, + { + "time": 1.2333, + "angle": -292.9, + "curve": [ 0.515, 0, 0.803, 0.43 ] + }, + { + "time": 1.3, + "angle": -231.77, + "curve": [ 0.343, 0.4, 0.364, 1 ] + }, + { "time": 1.5667, "angle": -30.13, "curve": "stepped" }, + { "time": 1.7333, "angle": -30.13 }, + { "time": 2.3333, "angle": -59.85, "curve": "stepped" }, + { "time": 2.5333, "angle": -59.85 } + ], + "translate": [ + { "time": 0, "x": -7.12, "y": -8.24, "curve": "stepped" }, + { "time": 0.3, "x": -7.12, "y": -8.24 }, + { + "time": 0.5333, + "x": -4.99, + "y": -22.3, + "curve": [ 0.25, 0, 0.567, 1.78 ] + }, + { "time": 0.7, "x": -2.87, "y": 8.61, "curve": "stepped" }, + { + "time": 0.8333, + "x": -2.87, + "y": 8.61, + "curve": [ 0.47, 0, 0.572, 1 ] + }, + { "time": 1.2333, "x": -4.27, "y": -30.12 }, + { "time": 1.5667, "x": -11.4, "y": 10.92, "curve": "stepped" }, + { "time": 1.7333, "x": -11.4, "y": 10.92 }, + { "time": 2.3333, "x": -7.12, "y": -8.24, "curve": "stepped" }, + { "time": 2.5333, "x": -7.12, "y": -8.24 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.2, "x": 0, "y": 0 }, + { + "time": 0.3, + "x": 8.24, + "y": 0, + "curve": [ 0.25, 0, 0.333, 1 ] + }, + { "time": 0.4333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3667, "x": 0, "y": 0 }, + { + "time": 1.4667, + "x": 8.24, + "y": 0, + "curve": [ 0.25, 0, 0.333, 1 ] + }, + { "time": 1.6667, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.9667, "x": 0, "y": 0 }, + { + "time": 2.1333, + "x": 10.64, + "y": 0, + "curve": [ 0.25, 0, 0.333, 1 ] + }, + { "time": 2.4667, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -5.62, + "curve": [ 0.299, 0, 0.636, 0.36 ] + }, + { + "time": 0.1667, + "angle": -19.41, + "curve": [ 0.285, 0.17, 0.69, 0.75 ] + }, + { + "time": 0.4333, + "angle": -22.45, + "curve": [ 0.285, 0.17, 0.69, 0.75 ] + }, + { "time": 0.7, "angle": 0.33, "curve": "stepped" }, + { + "time": 1.0333, + "angle": 0.33, + "curve": [ 0.25, 0, 0.548, 1 ] + }, + { "time": 1.3667, "angle": -80.69 }, + { "time": 1.4333, "angle": -65.08 }, + { + "time": 1.4667, + "angle": -95.78, + "curve": [ 0.224, 0.39, 0.459, 1 ] + }, + { + "time": 1.6333, + "angle": -85.99, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2.1667, "angle": -5.62, "curve": "stepped" }, + { "time": 2.5333, "angle": -5.62 } + ], + "translate": [ + { "time": 0, "x": -6.5, "y": 0 }, + { "time": 0.1667, "x": -6.5, "y": -5.46, "curve": "stepped" }, + { "time": 0.4333, "x": -6.5, "y": -5.46 }, + { "time": 0.7, "x": -6.5, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": -6.5, "y": 0 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { + "time": 1.1, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.456, 1 ] + }, + { + "time": 1.2, + "x": 7.28, + "y": 0, + "curve": [ 0.25, 0, 0.456, 1 ] + }, + { "time": 1.4333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 45.47, + "curve": [ 0.493, 0, 0.75, 1 ] + }, + { "time": 0.1667, "angle": 62.76 }, + { + "time": 0.5667, + "angle": 89.75, + "curve": [ 0.179, 0.73, 0.456, 1 ] + }, + { "time": 0.7, "angle": -20.53, "curve": "stepped" }, + { + "time": 0.8333, + "angle": -20.53, + "curve": [ 0.47, 0, 0.572, 1 ] + }, + { "time": 1, "angle": 61.24 }, + { + "time": 1.4, + "angle": 93.64, + "curve": [ 0.295, 1.38, 0.624, 1 ] + }, + { "time": 1.6667, "angle": -18.24, "curve": "stepped" }, + { "time": 1.7333, "angle": -18.24 }, + { + "time": 1.9667, + "angle": -24.33, + "curve": [ 0.25, 0, 0.519, 1 ] + }, + { "time": 2.4, "angle": 45.47, "curve": "stepped" }, + { "time": 2.5333, "angle": 45.47 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { + "time": 0.8333, + "x": 0, + "y": 0, + "curve": [ 0.47, 0, 0.572, 1 ] + }, + { "time": 1, "x": -18.67, "y": 2.59, "curve": "stepped" }, + { "time": 1.7333, "x": -18.67, "y": 2.59 }, + { "time": 2.3333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": -7.34, "curve": "stepped" }, + { + "time": 0.9, + "angle": -7.34, + "curve": [ 0.327, 0.06, 0.66, 0.4 ] + }, + { + "time": 0.9667, + "angle": 4.56, + "curve": [ 0.327, 0.24, 0.66, 0.57 ] + }, + { + "time": 1.0333, + "angle": -5.78, + "curve": [ 0.321, 0.24, 0.654, 0.58 ] + }, + { + "time": 1.1667, + "angle": 19.82, + "curve": [ 0.328, 0.06, 0.661, 0.4 ] + }, + { "time": 1.4333, "angle": 2.28 }, + { + "time": 1.5, + "angle": -5.49, + "curve": [ 0.326, 0.22, 0.659, 0.56 ] + }, + { + "time": 1.7667, + "angle": -5.7, + "curve": [ 0.33, 0.31, 0.664, 0.64 ] + }, + { + "time": 1.9, + "angle": -33.95, + "curve": [ 0.326, 0.28, 0.659, 0.62 ] + }, + { + "time": 2.0333, + "angle": -7.34, + "curve": [ 0.325, 0.04, 0.658, 0.39 ] + }, + { + "time": 2.1, + "angle": -2.68, + "curve": [ 0.317, 0.19, 0.65, 0.54 ] + }, + { "time": 2.2333, "angle": -7.34, "curve": "stepped" }, + { "time": 2.2667, "angle": -7.34, "curve": "stepped" }, + { "time": 2.5333, "angle": -7.34 } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": -17.16, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.1667, "angle": -24.08 }, + { "time": 0.4333, "angle": -29.77 }, + { "time": 0.5667, "angle": -68.85 }, + { "time": 0.7, "angle": -22.33 }, + { "time": 0.7667, "angle": -20.19, "curve": "stepped" }, + { + "time": 0.8667, + "angle": -20.19, + "curve": [ 0.25, 0, 0.517, 1 ] + }, + { + "time": 1.2, + "angle": 3.47, + "curve": [ 0.278, 0, 0.569, 0.67 ] + }, + { + "time": 1.5, + "angle": 17.64, + "curve": [ 0.298, 0.6, 0.628, 1 ] + }, + { "time": 1.6, "angle": -23.73, "curve": "stepped" }, + { "time": 1.6333, "angle": -23.73 }, + { + "time": 1.8, + "angle": -80.6, + "curve": [ 0.465, 0.15, 0.853, 0.46 ] + }, + { "time": 2.2, "angle": -17.16, "curve": "stepped" }, + { "time": 2.5333, "angle": -17.16 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -5.51, "curve": "stepped" }, + { + "time": 0.3667, + "angle": -5.51, + "curve": [ 0.317, 0, 0.651, 0.35 ] + }, + { + "time": 0.8333, + "angle": -35.47, + "curve": [ 0.299, 0.15, 0.637, 0.51 ] + }, + { + "time": 1.2, + "angle": -14.39, + "curve": [ 0.25, 0, 0.37, 1 ] + }, + { "time": 1.5667, "angle": -35.47, "curve": "stepped" }, + { + "time": 1.6667, + "angle": -35.47, + "curve": [ 0.433, 0, 0.717, 0.44 ] + }, + { "time": 1.8333, "angle": -14.55 }, + { + "time": 1.9333, + "angle": 30.05, + "curve": [ 0.198, 0.64, 0.414, 1 ] + }, + { "time": 2.4, "angle": -5.51, "curve": "stepped" }, + { "time": 2.5333, "angle": -5.51 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.1, "x": 1, "y": 1 }, + { "time": 1.2, "x": 1, "y": 1.384, "curve": "stepped" }, + { "time": 1.2667, "x": 1, "y": 1.384 }, + { "time": 1.4667, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 2.5333, "x": 1, "y": 1 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.1, "x": 0, "y": 0 }, + { "time": 1.2, "x": 0, "y": 33.37, "curve": "stepped" }, + { "time": 1.3333, "x": 0, "y": 33.37 }, + { "time": 1.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.6667, "x": 0, "y": 0 }, + { + "time": 1.8667, + "x": -17.77, + "y": 0, + "curve": [ 0.25, 0, 0.677, 1 ] + }, + { "time": 2, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -6.85, + "curve": [ 0.368, 0, 0.699, 0.39 ] + }, + { "time": 0.1667, "angle": -7.87, "curve": "stepped" }, + { + "time": 0.4333, + "angle": -7.87, + "curve": [ 0.421, 0.25, 0.727, 0.76 ] + }, + { + "time": 0.6667, + "angle": -19.63, + "curve": [ 0.343, 0.62, 0.673, 1 ] + }, + { "time": 0.7333, "angle": -6.85, "curve": "stepped" }, + { "time": 1.0333, "angle": -6.85 }, + { + "time": 1.1667, + "angle": 77.82, + "curve": [ 0.25, 0, 0.438, 1 ] + }, + { "time": 1.5, "angle": -6.85, "curve": "stepped" }, + { + "time": 1.7, + "angle": -6.85, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.0333, + "angle": -44.05, + "curve": [ 0.25, 0, 0.556, 1 ] + }, + { "time": 2.4, "angle": -6.85, "curve": "stepped" }, + { "time": 2.5333, "angle": -6.85 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5667, "x": 1, "y": 1 }, + { "time": 0.6, "x": 1, "y": 2, "curve": "stepped" }, + { "time": 0.6333, "x": 1, "y": 2 }, + { "time": 0.6667, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.2333, "x": 1, "y": 1 }, + { "time": 1.3667, "x": 1, "y": 2, "curve": "stepped" }, + { "time": 1.4333, "x": 1, "y": 2 }, + { "time": 1.5667, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 2.5333, "x": 1, "y": 1 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.3, "x": -11.46, "y": 0 }, + { "time": 0.5333, "x": -14.51, "y": -10.12 }, + { "time": 0.6, "x": 9.5, "y": -7.03 }, + { "time": 0.7, "x": 0, "y": 0, "curve": "stepped" }, + { + "time": 1.4, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.553, 1 ] + }, + { + "time": 1.5667, + "x": -13.44, + "y": 0, + "curve": [ 0.25, 0, 0.553, 1 ] + }, + { + "time": 1.8, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.553, 1 ] + }, + { + "time": 2.0333, + "x": -16.53, + "y": 0, + "curve": [ 0.25, 0, 0.553, 1 ] + }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.287, 0, 0.627, 0.38 ] + }, + { "time": 0.1667, "angle": -8.73, "curve": "stepped" }, + { + "time": 0.4333, + "angle": -8.73, + "curve": [ 0.301, 0.23, 0.655, 0.63 ] + }, + { + "time": 0.5667, + "angle": -43.92, + "curve": [ 0.349, 0.39, 0.692, 0.75 ] + }, + { "time": 0.7, "angle": 0, "curve": "stepped" }, + { + "time": 1.7333, + "angle": 0, + "curve": [ 0.245, 0, 0.637, 0.56 ] + }, + { + "time": 1.9667, + "angle": -23.42, + "curve": [ 0.381, 0.55, 0.438, 1 ] + }, + { "time": 2.2333, "angle": 0, "curve": "stepped" }, + { "time": 2.5333, "angle": 0 } + ] + }, + "free gun bone": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.1667, "angle": 0, "curve": "stepped" }, + { "time": 0.4333, "angle": 0 }, + { "time": 0.6667, "angle": 81.73 }, + { "time": 0.7333, "angle": 201.73 }, + { "time": 0.8, "angle": 321.73 }, + { "time": 0.8667, "angle": 441.73 }, + { "time": 0.9667, "angle": 201.73 }, + { "time": 1.1333, "angle": 321.73 }, + { "time": 1.3333, "angle": 81.73 }, + { "time": 1.6333, "angle": 147.13, "curve": "stepped" }, + { + "time": 1.7333, + "angle": 147.13, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2.2333, "angle": 0, "curve": "stepped" }, + { "time": 2.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.1667, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4333, "x": 0, "y": 0 }, + { + "time": 0.6667, + "x": 24.84, + "y": 38.07, + "curve": [ 0.063, 0.75, 0.53, 0.91 ] + }, + { + "time": 1.1333, + "x": 12.43, + "y": 700.82, + "curve": [ 0.478, 0, 0.876, 0.5 ] + }, + { + "time": 1.6667, + "x": -45.79, + "y": 5.56, + "curve": [ 0.19, 0.41, 0.401, 1 ] + }, + { "time": 2.2333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.6, "x": 0, "y": 0 }, + { "time": 0.7333, "x": -26.22, "y": 0 }, + { "time": 1.0667, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "gunTip": { + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.7667, "x": 0, "y": 0 }, + { "time": 0.8333, "x": 20.93, "y": 1.58 }, + { "time": 0.8667, "x": 0, "y": 0 }, + { "time": 0.9333, "x": 20.93, "y": 1.58 }, + { "time": 0.9667, "x": 0, "y": 0 }, + { "time": 1.0333, "x": 20.93, "y": 1.58 }, + { "time": 1.0667, "x": 0, "y": 0 }, + { "time": 1.1333, "x": 20.93, "y": 1.58 }, + { "time": 1.2, "x": 0, "y": 0 }, + { "time": 1.3333, "x": 20.93, "y": 1.58, "curve": "stepped" }, + { "time": 2.5333, "x": 20.93, "y": 1.58 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { + "time": 0.7667, + "x": 1, + "y": 1, + "curve": [ 0.706, 0, 0.49, 1 ] + }, + { "time": 0.8333, "x": 1.247, "y": 1.517 }, + { + "time": 0.8667, + "x": 1, + "y": 1, + "curve": [ 0.706, 0, 0.49, 1 ] + }, + { "time": 0.9333, "x": 1.247, "y": 1.517 }, + { + "time": 0.9667, + "x": 1, + "y": 1, + "curve": [ 0.706, 0, 0.49, 1 ] + }, + { "time": 1.0333, "x": 1.247, "y": 1.517 }, + { + "time": 1.0667, + "x": 1, + "y": 1, + "curve": [ 0.706, 0, 0.49, 1 ] + }, + { "time": 1.1333, "x": 1.247, "y": 1.517 }, + { + "time": 1.2, + "x": 1, + "y": 1, + "curve": [ 0.706, 0, 0.49, 1 ] + }, + { "time": 1.3333, "x": 1.247, "y": 1.517, "curve": "stepped" }, + { "time": 2.5333, "x": 1.247, "y": 1.517 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4, "angle": 14.09 }, + { "time": 0.8667, "angle": -7.49 }, + { "time": 1.1333, "angle": -14.82 }, + { "time": 1.3333, "angle": -5.35 }, + { "time": 1.5, "angle": 0, "curve": "stepped" }, + { "time": 2.5333, "angle": 0 } + ] + }, + "pathbone": { + "rotate": [ + { "time": 0.6667, "angle": 0 }, + { "time": 1, "angle": -126.96 }, + { "time": 1.3333, "angle": 65.58 }, + { "time": 1.6667, "angle": 0 } + ], + "scale": [ + { "time": 0.6667, "x": 1, "y": 1 }, + { "time": 1.1667, "x": 1.619, "y": 1.619 }, + { "time": 1.6667, "x": 1, "y": 1 } + ] + }, + "gun2": { + "rotate": [ + { "time": 1.6667, "angle": -123.5 } + ], + "translate": [ + { "time": 0.6, "x": -271.69, "y": -301.15 }, + { "time": 1.6667, "x": -408.03, "y": -266.19 } + ] + }, + "gun3": { + "rotate": [ + { "time": 1.6667, "angle": -123.5 } + ], + "translate": [ + { "time": 0.6, "x": -111.29, "y": -212.77 }, + { "time": 1.6667, "x": -247.64, "y": -177.81 } + ] + }, + "gun4": { + "rotate": [ + { "time": 1.6667, "angle": -123.5 } + ], + "translate": [ + { "time": 0.6, "x": -144.03, "y": -425.54 }, + { "time": 1.6667, "x": -280.37, "y": -390.58 } + ] + } + }, + "ik": { + "aiming constraint": [ + { "time": 0, "mix": 0, "curve": "stepped" }, + { "time": 2.5333, "mix": 0 } + ], + "aiming gun constraint": [ + { "time": 0, "mix": 0, "curve": "stepped" }, + { "time": 2.5333, "mix": 0 } + ] + }, + "transform": { + "gun flying": [ + { "time": 0, "rotateMix": 0, "translateMix": 0, "scaleMix": 0, "shearMix": 0, "curve": "stepped" }, + { "time": 0.6667, "rotateMix": 0, "translateMix": 0, "scaleMix": 0, "shearMix": 0 }, + { "time": 0.7, "curve": "stepped" }, + { "time": 1.6333 }, + { "time": 1.6667, "rotateMix": 0, "translateMix": 0, "scaleMix": 0, "shearMix": 0, "curve": "stepped" }, + { "time": 2.5333, "rotateMix": 0, "translateMix": 0, "scaleMix": 0, "shearMix": 0 } + ] + }, + "paths": { + "spinning guns": { + "position": [ + { "time": 0.6667 }, + { "time": 1.6667, "position": 2.034 } + ], + "mix": [ + { "time": 0.6667, "rotateMix": 0, "translateMix": 0 }, + { "time": 0.7333, "curve": "stepped" }, + { "time": 1.5667 }, + { "time": 1.6667, "rotateMix": 0, "translateMix": 0 } + ] + } + } + }, + "hit": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0.1, "name": "front_fist_open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_grind" }, + { "time": 0.2, "name": "mouth_smile" } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { "time": 0, "angle": 56.42 }, + { "time": 0.2, "angle": 8.89 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 35.39 }, + { "time": 0.1333, "angle": 24.95 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 10.22 }, + { "time": 0.2, "angle": -41.3 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -310.93, + "curve": [ 0.38, 0.53, 0.745, 1 ] + }, + { "time": 0.2, "angle": -112.6 } + ], + "translate": [ + { "time": 0, "x": 7.23, "y": -13.13 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 36.99 }, + { "time": 0.2, "angle": -28.65 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": 13.59 }, + { "time": 0.2, "angle": 7.56 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 271.02, + "curve": [ 0.343, 0.36, 0.68, 0.71 ] + }, + { "time": 0.2, "angle": -15.84 } + ], + "translate": [ + { "time": 0.2, "x": -0.1, "y": -0.46 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2, "angle": 40.03 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 14.98 }, + { "time": 0.2, "angle": 39.76 } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 90.94, + "curve": [ 0.227, 0.27, 0.433, 1 ] + }, + { "time": 0.2, "angle": 32.03 } + ], + "translate": [ + { "time": 0, "x": 7.21, "y": -4 } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 40.52, + "curve": [ 0.296, 0.3, 0.59, 1 ] + }, + { "time": 0.2, "angle": 90.77 } + ], + "translate": [ + { "time": 0, "x": -1.96, "y": -0.32 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": -96.63 }, + { "time": 0.2, "angle": -15.13 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 8 }, + { "time": 0.2, "angle": -67.54 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 5.4 }, + { "time": 0.2, "angle": -16.27 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 2.67 }, + { "time": 0.2, "angle": -10.31 } + ] + }, + "hip": { + "translate": [ + { "time": 0, "x": -75.55, "y": -78.04 }, + { "time": 0.1333, "x": -36.48, "y": 12.42 }, + { "time": 0.2, "x": -36.48, "y": -3 } + ] + } + } + }, + "hit old": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0.1667, "name": "front_fist_open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_grind" }, + { "time": 0.3333, "name": "mouth_smile" } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { "time": 0, "angle": 56.42 }, + { "time": 0.3333, "angle": 8.89 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 35.39 }, + { "time": 0.2333, "angle": 24.95 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 10.22 }, + { "time": 0.3333, "angle": -41.3 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -310.93, + "curve": [ 0.38, 0.53, 0.745, 1 ] + }, + { "time": 0.3333, "angle": -112.6 } + ], + "translate": [ + { "time": 0, "x": 7.23, "y": -13.13 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 36.99 }, + { "time": 0.3333, "angle": -28.65 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": 13.59 }, + { "time": 0.3333, "angle": 7.56 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 271.02, + "curve": [ 0.343, 0.36, 0.68, 0.71 ] + }, + { "time": 0.3333, "angle": -15.84 } + ], + "translate": [ + { "time": 0.3333, "x": -0.1, "y": -0.46 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.3333, "angle": 40.03 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 14.98 }, + { "time": 0.3333, "angle": 39.76 } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 90.94, + "curve": [ 0.227, 0.27, 0.433, 1 ] + }, + { "time": 0.3333, "angle": 32.03 } + ], + "translate": [ + { "time": 0, "x": 7.21, "y": -4 } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 40.52, + "curve": [ 0.296, 0.3, 0.59, 1 ] + }, + { "time": 0.3333, "angle": 90.77 } + ], + "translate": [ + { "time": 0, "x": -1.96, "y": -0.32 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": -96.63 }, + { "time": 0.3333, "angle": -15.13 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 8 }, + { "time": 0.3333, "angle": -67.54 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 5.4 }, + { "time": 0.3333, "angle": -16.27 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 2.67 }, + { "time": 0.3333, "angle": -10.31 } + ] + }, + "hip": { + "translate": [ + { "time": 0, "x": -75.55, "y": -78.04 }, + { "time": 0.2333, "x": -36.48, "y": 12.42 }, + { "time": 0.3333, "x": -36.48, "y": -3 } + ] + } + } + }, + "idle": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_open" }, + { "time": 1.6667, "name": "front_fist_open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_smile" }, + { "time": 1.6667, "name": "mouth_smile" } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { + "time": 0, + "angle": -5.62, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8333, + "angle": -9.66, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6667, "angle": -5.62 } + ], + "translate": [ + { "time": 0, "x": -6.5, "y": 0 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -59.85, + "curve": [ 0.493, 0, 0.75, 1 ] + }, + { + "time": 0.6667, + "angle": -54.32, + "curve": [ 0.324, 0.11, 0.75, 1 ] + }, + { "time": 1.6667, "angle": -59.85 } + ], + "translate": [ + { "time": 0, "x": -7.12, "y": -8.24 }, + { "time": 0.6667, "x": -6.32, "y": -8.31 }, + { "time": 1.6667, "x": -7.12, "y": -8.24 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 62.42, + "curve": [ 0.504, 0.02, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": 43.83, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6667, "angle": 62.42 } + ], + "translate": [ + { "time": 0, "x": -1.83, "y": -16.79 }, + { "time": 0.6667, "x": 0.35, "y": -15.23 }, + { "time": 1.6667, "x": -1.83, "y": -16.79 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.6667, "angle": 2.39 }, + { "time": 1.6667, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -1.89, "y": -4.76, "curve": "stepped" }, + { "time": 1.6667, "x": -1.89, "y": -4.76 } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0.65, + "curve": [ 0.236, 0.01, 0.559, 0.99 ] + }, + { + "time": 0.6667, + "angle": -4.34, + "curve": [ 0.595, 0, 0.653, 1 ] + }, + { "time": 1.6667, "angle": 0.65 } + ], + "translate": [ + { "time": 0, "x": -13.4, "y": 6.7, "curve": "stepped" }, + { "time": 1.6667, "x": -13.4, "y": 6.7 } + ], + "scale": [ + { + "time": 0, + "x": 0.897, + "y": 1, + "curve": [ 0.236, 0.01, 0.559, 0.99 ] + }, + { + "time": 0.6667, + "x": 0.826, + "y": 1, + "curve": [ 0.595, 0, 0.653, 1 ] + }, + { "time": 1.6667, "x": 0.897, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": -19.29, "curve": "stepped" }, + { "time": 1.6667, "angle": -19.29 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.236, 0.01, 0.559, 0.99 ] + }, + { + "time": 0.6667, + "x": 0.994, + "y": 1, + "curve": [ 0.595, 0, 0.653, 1 ] + }, + { "time": 1.6667, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 30.51, + "curve": [ 0.236, 0.01, 0.559, 0.99 ] + }, + { + "time": 0.6667, + "angle": 40.15, + "curve": [ 0.595, 0, 0.653, 1 ] + }, + { "time": 1.6667, "angle": 30.51 } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -23.83, + "curve": [ 0.236, 0.01, 0.559, 0.99 ] + }, + { + "time": 0.6667, + "angle": -43.77, + "curve": [ 0.595, 0, 0.653, 1 ] + }, + { "time": 1.6667, "angle": -23.83 } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 5.14, + "curve": [ 0.236, 0.01, 0.559, 0.99 ] + }, + { + "time": 0.6667, + "angle": 10.05, + "curve": [ 0.595, 0, 0.653, 1 ] + }, + { "time": 1.6667, "angle": 5.14 } + ], + "scale": [ + { "time": 0, "x": 0.755, "y": 1.31, "curve": "stepped" }, + { "time": 1.6667, "x": 0.755, "y": 1.31 } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": -7.34, + "curve": [ 0.236, 0.01, 0.559, 0.99 ] + }, + { + "time": 0.6667, + "angle": 3.85, + "curve": [ 0.595, 0, 0.653, 1 ] + }, + { "time": 1.6667, "angle": -7.34 } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": -17.16, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6667, + "angle": 12.53, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6667, "angle": -17.16 } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": -5.51, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6667, + "angle": -3.12, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6667, "angle": -5.51 } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 45.47, + "curve": [ 0.493, 0, 0.75, 1 ] + }, + { + "time": 0.6667, + "angle": 41.34, + "curve": [ 0.321, 0.11, 0.736, 0.92 ] + }, + { "time": 1.6667, "angle": 45.47 } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6667, + "angle": -15.59, + "curve": [ 0.733, 0, 0.77, 0.99 ] + }, + { "time": 1.6667, "angle": 0 } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -6.85, + "curve": [ 0.493, 0, 0.75, 1 ] + }, + { + "time": 0.6667, + "angle": -14.63, + "curve": [ 0.324, 0.11, 0.75, 1 ] + }, + { "time": 1.6667, "angle": -6.85 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6667, + "x": 0.8, + "y": 1.101, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6667, "x": 1, "y": 1 } + ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -6.64, + "y": -23.02, + "curve": [ 0.236, 0.01, 0.559, 0.99 ] + }, + { + "time": 0.6667, + "x": 6.28, + "y": -35.01, + "curve": [ 0.595, 0, 0.653, 1 ] + }, + { "time": 1.6667, "x": -6.64, "y": -23.02 } + ] + } + } + }, + "jump": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_open" }, + { "time": 0.1333, "name": "front_fist_closed" }, + { "time": 0.6, "name": "front_fist_open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_grind" } + ] + }, + "torso": { + "attachment": [ + { "time": 0, "name": "torso" } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 91.53, + "curve": [ 0.278, 0.46, 0.764, 1 ] + }, + { + "time": 0.1333, + "angle": -35.84, + "curve": [ 0.761, 0, 0.75, 1 ] + }, + { "time": 0.3667, "angle": 127.74 }, + { + "time": 0.6667, + "angle": 48.18, + "curve": [ 0.227, 0.27, 0.433, 1 ] + }, + { "time": 0.7667, "angle": 25.35 }, + { "time": 0.8667, "angle": 45.38 }, + { "time": 0.9667, "angle": 38.12 }, + { "time": 1.0667, "angle": 25.35 }, + { "time": 1.2667, "angle": 91.53 } + ], + "translate": [ + { "time": 0, "x": -2.57, "y": 5.78 }, + { "time": 0.3667, "x": 8.3, "y": 7.99 }, + { "time": 0.6667, "x": 7.21, "y": -4 }, + { "time": 1.2667, "x": -2.57, "y": 5.78 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -42.64 }, + { "time": 0.1333, "angle": -5.74 }, + { "time": 0.3667, "angle": -50.76 }, + { "time": 0.6667, "angle": 1.9 }, + { "time": 0.7667, "angle": 11.59 }, + { "time": 0.9, "angle": -1.9 }, + { "time": 1.0667, "angle": 11.59 }, + { "time": 1.2667, "angle": -42.64 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -26.32 }, + { "time": 0.1333, "angle": 121.44 }, + { "time": 0.3667, "angle": 70.55 }, + { + "time": 0.6667, + "angle": 79.9, + "curve": [ 0.296, 0.3, 0.59, 1 ] + }, + { "time": 0.7667, "angle": 99.12 }, + { "time": 0.8667, "angle": 74.06 }, + { "time": 0.9667, "angle": 98.05 }, + { "time": 1.0667, "angle": 99.12 }, + { "time": 1.2667, "angle": -26.32 } + ], + "translate": [ + { "time": 0, "x": -0.56, "y": -0.32 }, + { "time": 0.3667, "x": -8.5, "y": 10.58 }, + { "time": 0.6667, "x": -1.96, "y": -0.32 }, + { "time": 1.2667, "x": -0.56, "y": -0.32 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": -78.69 }, + { "time": 0.3667, "angle": -55.56 }, + { "time": 0.6667, "angle": -62.84 }, + { "time": 0.7667, "angle": -80.75 }, + { "time": 0.8667, "angle": -41.13 }, + { "time": 0.9667, "angle": -77.4 }, + { "time": 1.0667, "angle": -80.75 }, + { "time": 1.2667, "angle": -78.69 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -22.62 }, + { "time": 0.1333, "angle": -246.69 }, + { + "time": 0.5333, + "angle": 11.28, + "curve": [ 0.246, 0, 0.633, 0.54 ] + }, + { + "time": 0.6667, + "angle": -57.46, + "curve": [ 0.38, 0.53, 0.745, 1 ] + }, + { "time": 0.8, "angle": -112.6 }, + { "time": 0.8667, "angle": -102.17 }, + { "time": 0.9667, "angle": -108.61 }, + { "time": 1.0667, "angle": -112.6 }, + { "time": 1.2667, "angle": -22.62 } + ], + "translate": [ + { "time": 0, "x": 6.08, "y": 7.15 }, + { "time": 0.1333, "x": 7.23, "y": -13.13, "curve": "stepped" }, + { "time": 0.6667, "x": 7.23, "y": -13.13 }, + { "time": 1.2667, "x": 6.08, "y": 7.15 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 66.47 }, + { "time": 0.1333, "angle": 42.4 }, + { "time": 0.3667, "angle": 26.06 }, + { "time": 0.6667, "angle": 13.28 }, + { "time": 0.8, "angle": -28.65 }, + { "time": 0.8667, "angle": -22.31 }, + { "time": 0.9667, "angle": -35.39 }, + { "time": 1.0667, "angle": -28.65 }, + { "time": 1.2667, "angle": 66.47 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -28.43 }, + { "time": 0.3667, "angle": -45.61 }, + { "time": 0.6667, "angle": -53.66 }, + { "time": 0.8, "angle": 7.56 }, + { "time": 0.8667, "angle": 31.16 }, + { "time": 0.9667, "angle": -32.59 }, + { "time": 1.0667, "angle": 7.56 }, + { "time": 1.2667, "angle": -28.43 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 39.69 }, + { "time": 0.1333, "angle": 276.58 }, + { "time": 0.2333, "angle": 17.74 }, + { "time": 0.3667, "angle": 83.38 }, + { + "time": 0.5333, + "angle": -4.72, + "curve": [ 0.246, 0, 0.633, 0.54 ] + }, + { + "time": 0.6667, + "angle": -69.63, + "curve": [ 0.343, 0.36, 0.68, 0.71 ] + }, + { + "time": 0.7, + "angle": 321.47, + "curve": [ 0.334, 0.33, 0.667, 0.67 ] + }, + { + "time": 0.7333, + "angle": 33.71, + "curve": [ 0.359, 0.64, 0.694, 1 ] + }, + { "time": 0.8, "angle": 34.56 }, + { "time": 0.9667, "angle": 71.97 }, + { "time": 1.0667, "angle": 34.56 }, + { "time": 1.2667, "angle": 39.69 } + ], + "translate": [ + { "time": 0, "x": -3.1, "y": -4.87 }, + { "time": 0.1333, "x": 23.33, "y": 49.07 }, + { "time": 0.3667, "x": 20.78, "y": 40.21 }, + { "time": 1.2667, "x": -3.1, "y": -4.87 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 29.67 }, + { "time": 0.1333, "angle": 45.07 }, + { "time": 0.3667, "angle": -4.35 }, + { "time": 0.7, "angle": 61.69 }, + { "time": 0.7333, "angle": 82.6 }, + { "time": 0.8, "angle": 80.06 }, + { "time": 0.9667, "angle": 57.56 }, + { "time": 1.0667, "angle": 80.06 }, + { "time": 1.2667, "angle": 29.67 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 24.91 }, + { "time": 0.1333, "angle": 16.32 }, + { "time": 0.3667, "angle": 7.45 }, + { "time": 0.6667, "angle": -20.35 }, + { "time": 0.7667, "angle": -0.69, "curve": "stepped" }, + { "time": 1.0667, "angle": -0.69 }, + { "time": 1.2667, "angle": 24.91 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 24.92 }, + { "time": 0.1333, "angle": 10.36 }, + { "time": 0.3667, "angle": 28.65 }, + { "time": 0.6667, "angle": -2.66 }, + { "time": 0.7667, "angle": -28.94, "curve": "stepped" }, + { "time": 1.0667, "angle": -28.94 }, + { "time": 1.2667, "angle": 24.92 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -90.63, + "curve": [ 0.416, 0.55, 0.743, 1 ] + }, + { + "time": 0.1333, + "angle": -10.52, + "curve": [ 0.644, 0.01, 0.75, 1 ] + }, + { "time": 0.3667, "angle": -127.72 }, + { "time": 0.6667, "angle": -19.92 }, + { "time": 0.7667, "angle": -5.17 }, + { "time": 0.8667, "angle": -35.06 }, + { "time": 0.9667, "angle": -43.97 }, + { "time": 1.0667, "angle": -5.17 }, + { "time": 1.2667, "angle": -90.63 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 16.28 }, + { "time": 0.0333, "angle": 21.02 }, + { "time": 0.0667, "angle": 10.93 }, + { "time": 0.1333, "angle": -38.46 }, + { "time": 0.3667, "angle": 6.62 }, + { "time": 0.6667, "angle": -11.52 }, + { "time": 0.9667, "angle": -22.92 }, + { "time": 1.2667, "angle": -0.8 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": -12.78 }, + { "time": 0.1333, "angle": 17.06 }, + { "time": 0.3667, "angle": 19.45 }, + { "time": 0.6667, "angle": 2.67 }, + { "time": 0.9667, "angle": -28.5 }, + { "time": 1.2667, "angle": -12.78 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 6.18 }, + { "time": 0.1333, "angle": 30.81 }, + { "time": 0.3667, "angle": 13.26 }, + { "time": 0.6667, "angle": 14.98 }, + { "time": 0.7, "angle": 25.65 }, + { "time": 0.7333, "angle": 20.62 }, + { "time": 0.8, "angle": 64.53 }, + { "time": 0.9667, "angle": 8.6 }, + { "time": 1.0667, "angle": 64.53 }, + { "time": 1.2667, "angle": 6.18 } + ] + } + } + }, + "jump old": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_open" }, + { "time": 0.2, "name": "front_fist_closed" }, + { "time": 0.6667, "name": "front_fist_open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_grind" } + ] + }, + "torso": { + "attachment": [ + { "time": 0, "name": "torso" } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 91.53, + "curve": [ 0.278, 0.46, 0.764, 1 ] + }, + { + "time": 0.2, + "angle": -35.84, + "curve": [ 0.761, 0, 0.75, 1 ] + }, + { "time": 0.4333, "angle": 127.74 }, + { + "time": 0.7333, + "angle": 48.18, + "curve": [ 0.227, 0.27, 0.433, 1 ] + }, + { "time": 0.8333, "angle": 25.35 }, + { "time": 0.9333, "angle": 45.38 }, + { "time": 1.0333, "angle": 38.12 }, + { "time": 1.1333, "angle": 25.35 }, + { "time": 1.3333, "angle": 91.53 } + ], + "translate": [ + { "time": 0, "x": -2.57, "y": 5.78 }, + { "time": 0.4333, "x": 8.3, "y": 7.99 }, + { "time": 0.7333, "x": 7.21, "y": -4 }, + { "time": 1.3333, "x": -2.57, "y": 5.78 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -42.64 }, + { "time": 0.2, "angle": -5.74 }, + { "time": 0.4333, "angle": -50.76 }, + { "time": 0.7333, "angle": 1.9 }, + { "time": 0.8333, "angle": 11.59 }, + { "time": 0.9667, "angle": -1.9 }, + { "time": 1.1333, "angle": 11.59 }, + { "time": 1.3333, "angle": -42.64 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -26.32 }, + { "time": 0.2, "angle": 121.44 }, + { "time": 0.4333, "angle": 70.55 }, + { + "time": 0.7333, + "angle": 79.9, + "curve": [ 0.296, 0.3, 0.59, 1 ] + }, + { "time": 0.8333, "angle": 99.12 }, + { "time": 0.9333, "angle": 74.06 }, + { "time": 1.0333, "angle": 98.05 }, + { "time": 1.1333, "angle": 99.12 }, + { "time": 1.3333, "angle": -26.32 } + ], + "translate": [ + { "time": 0, "x": -0.56, "y": -0.32 }, + { "time": 0.4333, "x": -8.5, "y": 10.58 }, + { "time": 0.7333, "x": -1.96, "y": -0.32 }, + { "time": 1.3333, "x": -0.56, "y": -0.32 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": -78.69 }, + { "time": 0.4333, "angle": -55.56 }, + { "time": 0.7333, "angle": -62.84 }, + { "time": 0.8333, "angle": -80.75 }, + { "time": 0.9333, "angle": -41.13 }, + { "time": 1.0333, "angle": -77.4 }, + { "time": 1.1333, "angle": -80.75 }, + { "time": 1.3333, "angle": -78.69 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -22.62 }, + { "time": 0.2, "angle": -246.69 }, + { + "time": 0.6, + "angle": 11.28, + "curve": [ 0.246, 0, 0.633, 0.54 ] + }, + { + "time": 0.7333, + "angle": -57.46, + "curve": [ 0.38, 0.53, 0.745, 1 ] + }, + { "time": 0.8667, "angle": -112.6 }, + { "time": 0.9333, "angle": -102.17 }, + { "time": 1.0333, "angle": -108.61 }, + { "time": 1.1333, "angle": -112.6 }, + { "time": 1.3333, "angle": -22.62 } + ], + "translate": [ + { "time": 0, "x": 6.08, "y": 7.15 }, + { "time": 0.2, "x": 7.23, "y": -13.13, "curve": "stepped" }, + { "time": 0.7333, "x": 7.23, "y": -13.13 }, + { "time": 1.3333, "x": 6.08, "y": 7.15 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 66.47 }, + { "time": 0.2, "angle": 42.4 }, + { "time": 0.4333, "angle": 26.06 }, + { "time": 0.7333, "angle": 13.28 }, + { "time": 0.8667, "angle": -28.65 }, + { "time": 0.9333, "angle": -22.31 }, + { "time": 1.0333, "angle": -35.39 }, + { "time": 1.1333, "angle": -28.65 }, + { "time": 1.3333, "angle": 66.47 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -28.43 }, + { "time": 0.4333, "angle": -45.61 }, + { "time": 0.7333, "angle": -53.66 }, + { "time": 0.8667, "angle": 7.56 }, + { "time": 0.9333, "angle": 31.16 }, + { "time": 1.0333, "angle": -32.59 }, + { "time": 1.1333, "angle": 7.56 }, + { "time": 1.3333, "angle": -28.43 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 39.69 }, + { "time": 0.2, "angle": 276.58 }, + { "time": 0.3, "angle": 17.74 }, + { "time": 0.4333, "angle": 83.38 }, + { + "time": 0.6, + "angle": -4.72, + "curve": [ 0.246, 0, 0.633, 0.54 ] + }, + { + "time": 0.7333, + "angle": -69.63, + "curve": [ 0.343, 0.36, 0.68, 0.71 ] + }, + { + "time": 0.7667, + "angle": 321.47, + "curve": [ 0.334, 0.33, 0.667, 0.67 ] + }, + { + "time": 0.8, + "angle": 33.71, + "curve": [ 0.359, 0.64, 0.694, 1 ] + }, + { "time": 0.8667, "angle": 34.56 }, + { "time": 1.0333, "angle": 71.97 }, + { "time": 1.1333, "angle": 34.56 }, + { "time": 1.3333, "angle": 39.69 } + ], + "translate": [ + { "time": 0, "x": -3.1, "y": -4.87 }, + { "time": 0.2, "x": 23.33, "y": 49.07 }, + { "time": 0.4333, "x": 20.78, "y": 40.21 }, + { "time": 1.3333, "x": -3.1, "y": -4.87 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 29.67 }, + { "time": 0.2, "angle": 45.07 }, + { "time": 0.4333, "angle": -4.35 }, + { "time": 0.7667, "angle": 61.69 }, + { "time": 0.8, "angle": 82.6 }, + { "time": 0.8667, "angle": 80.06 }, + { "time": 1.0333, "angle": 57.56 }, + { "time": 1.1333, "angle": 80.06 }, + { "time": 1.3333, "angle": 29.67 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 24.91 }, + { "time": 0.2, "angle": 16.32 }, + { "time": 0.4333, "angle": 7.45 }, + { "time": 0.7333, "angle": -20.35 }, + { "time": 0.8333, "angle": -0.69, "curve": "stepped" }, + { "time": 1.1333, "angle": -0.69 }, + { "time": 1.3333, "angle": 24.91 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 24.92 }, + { "time": 0.2, "angle": 10.36 }, + { "time": 0.4333, "angle": 28.65 }, + { "time": 0.7333, "angle": -2.66 }, + { "time": 0.8333, "angle": -28.94, "curve": "stepped" }, + { "time": 1.1333, "angle": -28.94 }, + { "time": 1.3333, "angle": 24.92 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -90.63, + "curve": [ 0.416, 0.55, 0.743, 1 ] + }, + { + "time": 0.2, + "angle": -10.52, + "curve": [ 0.644, 0.01, 0.75, 1 ] + }, + { "time": 0.4333, "angle": -127.72 }, + { "time": 0.7333, "angle": -19.92 }, + { "time": 0.8333, "angle": -5.17 }, + { "time": 0.9333, "angle": -35.06 }, + { "time": 1.0333, "angle": -43.97 }, + { "time": 1.1333, "angle": -5.17 }, + { "time": 1.3333, "angle": -90.63 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": -0.8 }, + { "time": 0.0333, "angle": 16.28 }, + { "time": 0.0667, "angle": 23.52 }, + { "time": 0.1, "angle": 21.02 }, + { "time": 0.1333, "angle": 10.93 }, + { "time": 0.2, "angle": -38.46 }, + { "time": 0.4333, "angle": 6.62 }, + { "time": 0.7333, "angle": -11.52 }, + { "time": 1.0333, "angle": -22.92 }, + { "time": 1.3333, "angle": -0.8 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": -12.78 }, + { "time": 0.2, "angle": 17.06 }, + { "time": 0.4333, "angle": 19.45 }, + { "time": 0.7333, "angle": 2.67 }, + { "time": 1.0333, "angle": -28.5 }, + { "time": 1.3333, "angle": -12.78 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 6.18 }, + { "time": 0.2, "angle": 30.81 }, + { "time": 0.4333, "angle": 13.26 }, + { "time": 0.7333, "angle": 14.98 }, + { "time": 0.7667, "angle": 25.65 }, + { "time": 0.8, "angle": 20.62 }, + { "time": 0.8667, "angle": 64.53 }, + { "time": 1.0333, "angle": 8.6 }, + { "time": 1.1333, "angle": 64.53 }, + { "time": 1.3333, "angle": 6.18 } + ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -34.52, + "y": -78.63, + "curve": [ 0.233, 1.01, 0.75, 1 ] + }, + { + "time": 0.2, + "x": -34.52, + "y": 182.51, + "curve": [ 0.232, 0.48, 0.599, 0.79 ] + }, + { + "time": 0.7667, + "x": -34.52, + "y": 596.22, + "curve": [ 0.33, 0.17, 0.661, 0.22 ] + }, + { "time": 1.1333, "x": -34.52, "y": 2.5 }, + { "time": 1.3333, "x": -34.52, "y": -78.63 } + ] + } + } + }, + "lastframehidehead": { + "slots": { + "eye": { + "attachment": [ + { "time": 0, "name": "eye_indifferent" }, + { "time": 2, "name": null } + ] + }, + "goggles": { + "attachment": [ + { "time": 0, "name": "goggles" }, + { "time": 2, "name": null } + ] + }, + "head": { + "attachment": [ + { "time": 0, "name": "head" }, + { "time": 2, "name": null } + ] + } + } + }, + "pole": { + "slots": { + "eye": { + "attachment": [ + { "time": 0, "name": "eye_indifferent" }, + { "time": 0.0667, "name": "eye_surprised" } + ] + }, + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_closed" }, + { "time": 0.0667, "name": "front_fist_open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_grind" }, + { "time": 0.0667, "name": "mouth_oooo" } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 12.9, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { + "time": 0.0333, + "angle": -25.77, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { + "time": 0.1, + "angle": 115.25, + "curve": [ 0.356, 0, 0.672, 0.4 ] + }, + { + "time": 0.1333, + "angle": 95.68, + "curve": [ 0.306, 0.27, 0.623, 0.64 ] + }, + { + "time": 0.2333, + "angle": 104.33, + "curve": [ 0.224, 0.5, 0.519, 1 ] + }, + { "time": 0.3333, "angle": 95, "curve": "stepped" }, + { "time": 0.6, "angle": 95 }, + { "time": 1.6, "angle": 96.51 } + ], + "translate": [ + { "time": 0, "x": -6.42, "y": 10.27, "curve": "stepped" }, + { "time": 0.0333, "x": -6.42, "y": 10.27 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.0333, "x": 1, "y": 1 }, + { "time": 0.0667, "x": 1.192, "y": 1 }, + { "time": 0.2, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -48.5, "curve": "stepped" }, + { "time": 0.0333, "angle": -48.5 }, + { "time": 0.1, "angle": -15.03 } + ], + "translate": [ + { "time": 0.0667, "x": 0, "y": 0 }, + { "time": 0.1, "x": -8.62, "y": 0 }, + { "time": 0.1333, "x": -2.83, "y": 0.78 }, + { "time": 0.2667, "x": 0, "y": 0 } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 3.19, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { + "time": 0.0333, + "angle": 26.57, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { "time": 0.1, "angle": 94.86 }, + { "time": 0.1333, "angle": 75.28 }, + { + "time": 0.2, + "angle": 83.94, + "curve": [ 0.224, 0.5, 0.519, 1 ] + }, + { "time": 0.3, "angle": 74.6, "curve": "stepped" }, + { "time": 0.6, "angle": 74.6 }, + { "time": 1.5667, "angle": 76.56 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": -95.04, "curve": "stepped" }, + { + "time": 0.0333, + "angle": -95.04, + "curve": [ 0.394, 0, 0.618, 0.5 ] + }, + { + "time": 0.1333, + "angle": 51.53, + "curve": [ 0.196, 0.5, 0.473, 1 ] + }, + { "time": 0.3, "angle": 18.99 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.0667, "x": 1, "y": 1.871 }, + { "time": 0.1333, "x": 1.123, "y": 1 }, + { "time": 0.3, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -58.84, "curve": "stepped" }, + { + "time": 0.0333, + "angle": -58.84, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { "time": 0.1333, "angle": -246.98 }, + { "time": 0.1667, "angle": -262.98 }, + { "time": 0.2333, "angle": -247.78 }, + { "time": 0.3333, "angle": -254.23 } + ], + "translate": [ + { "time": 0, "x": 5.76, "y": 1.36, "curve": "stepped" }, + { + "time": 0.0333, + "x": 5.76, + "y": 1.36, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { "time": 0.1667, "x": -8.47, "y": -20.05 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.1, "x": 1, "y": 1 }, + { "time": 0.1333, "x": 1.308, "y": 1 }, + { "time": 0.1667, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 17.9, "curve": "stepped" }, + { + "time": 0.0333, + "angle": 17.9, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { "time": 0.2333, "angle": -18.94 } + ], + "scale": [ + { "time": 0.0333, "x": 1, "y": 1 }, + { "time": 0.0667, "x": 1, "y": 1.739 }, + { "time": 0.1333, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -43.95, "curve": "stepped" }, + { + "time": 0.0333, + "angle": -43.95, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { "time": 0.2333, "angle": -7.14 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.0333, "x": 1, "y": 1 }, + { "time": 0.0667, "x": 1, "y": 1.935 }, + { + "time": 0.1667, + "x": 1.264, + "y": 1.264, + "curve": [ 0.25, 0, 0.45, 1 ] + }, + { "time": 0.3, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 32.13, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { + "time": 0.0333, + "angle": 329.76, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { "time": 0.1, "angle": 97.77 }, + { "time": 0.1333, "angle": 79.34 }, + { + "time": 0.2, + "angle": 90.89, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.3333, "angle": 81.65 } + ], + "translate": [ + { "time": 0, "x": -4.16, "y": 3.18, "curve": "stepped" }, + { + "time": 0.0333, + "x": -4.16, + "y": 3.18, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { "time": 0.2333, "x": 15.52, "y": -0.24 } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": -24.98, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { + "time": 0.0333, + "angle": -35.98, + "curve": [ 0.376, 0, 0.697, 0.38 ] + }, + { + "time": 0.1, + "angle": -47.82, + "curve": [ 0.203, 0.25, 0.342, 1 ] + }, + { "time": 0.2667, "angle": -23.11 } + ], + "scale": [ + { "time": 0.0333, "x": 1, "y": 1 }, + { "time": 0.0667, "x": 1, "y": 1.673 }, + { "time": 0.1333, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 12.31, "curve": "stepped" }, + { + "time": 0.0333, + "angle": 12.31, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { "time": 0.1333, "angle": 30.51 } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 12.35, + "curve": [ 0.399, 0, 0.683, 0.43 ] + }, + { + "time": 0.0667, + "angle": 15.36, + "curve": [ 0.216, 0.55, 0.516, 1 ] + }, + { "time": 0.2333, "angle": 15.94 } + ], + "translate": [ + { "time": 0.0333, "x": 0, "y": 0 }, + { "time": 0.0667, "x": -39.16, "y": 35.37 }, + { "time": 0.1, "x": 0.2, "y": 12.02 }, + { "time": 0.1333, "x": -1.5, "y": -0.97 }, + { "time": 0.2333, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0.0333, "x": 1, "y": 1 }, + { "time": 0.0667, "x": 1.149, "y": 0.815 }, + { "time": 0.1, "x": 0.95, "y": 1.244 }, + { "time": 0.1667, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -42.51, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { + "time": 0.0333, + "angle": -2.14, + "curve": [ 0.393, 0, 0.694, 0.41 ] + }, + { + "time": 0.1, + "angle": 15.89, + "curve": [ 0.185, 0.35, 0.379, 1 ] + }, + { "time": 0.3, "angle": 3.49 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.0667, "x": 1, "y": 1.539 }, + { "time": 0.1, "x": 1.172, "y": 1.207 }, + { "time": 0.2333, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 29.93, "curve": "stepped" }, + { + "time": 0.0333, + "angle": 29.93, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { "time": 0.2333, "angle": -4.58 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.0667, "x": 1, "y": 1 }, + { + "time": 0.1333, + "x": 1.277, + "y": 1.277, + "curve": [ 0.25, 0, 0.401, 1 ] + }, + { "time": 0.3, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": -6.46, "curve": "stepped" }, + { "time": 0.0333, "angle": -6.46 }, + { "time": 0.0667, "angle": 18.59 }, + { "time": 0.1333, "angle": -6.46 } + ], + "scale": [ + { "time": 0.1333, "x": 1, "y": 1 }, + { "time": 0.1667, "x": 1.241, "y": 1.241 }, + { "time": 0.2667, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 18.55, "curve": "stepped" }, + { + "time": 0.0333, + "angle": 18.55, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { "time": 0.2333, "angle": -11.76 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.0667, "x": 1, "y": 1.148 }, + { "time": 0.1, "x": 1, "y": 1 }, + { "time": 0.1667, "x": 1.209, "y": 1.209 }, + { "time": 0.2667, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.0333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -62.48, "y": -31.55, "curve": "stepped" }, + { + "time": 0.0333, + "x": -62.48, + "y": -31.55, + "curve": [ 0.267, 0, 0.304, 1 ] + }, + { "time": 0.0667, "x": -34.76, "y": -23.15 }, + { "time": 0.1667, "x": -34.76, "y": -14.31, "curve": "stepped" }, + { + "time": 0.6667, + "x": -34.76, + "y": -14.31, + "curve": [ 0.434, 0, 0.824, 1 ] + }, + { "time": 1.6333, "x": -34.76, "y": -148.56, "curve": "stepped" }, + { "time": 2, "x": -34.76, "y": -148.56 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.0667, "x": 1, "y": 1 }, + { "time": 0.0865, "x": 0.9, "y": 1.1 }, + { + "time": 0.1144, + "x": 1.164, + "y": 1, + "curve": [ 0.075, 0.49, 0.331, 1 ] + }, + { "time": 0.2333, "x": 1, "y": 1 } + ] + } + } + }, + "run": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_closed" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_grind" } + ] + }, + "torso": { + "attachment": [ + { "time": 0, "name": "torso" } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 42.05, + "curve": [ 0.196, 0.86, 0.75, 1 ] + }, + { "time": 0.0667, "angle": 46.08 }, + { "time": 0.1333, "angle": -20.29 }, + { "time": 0.2, "angle": -27.24 }, + { "time": 0.2667, "angle": -47.17 }, + { "time": 0.3333, "angle": -39.79 }, + { "time": 0.4, "angle": -25.86 }, + { "time": 0.4667, "angle": 14.35 }, + { "time": 0.5333, "angle": 55.63 }, + { "time": 0.6, "angle": 69.65 }, + { "time": 0.6667, "angle": 86.41 }, + { "time": 0.7333, "angle": 65.88 }, + { "time": 0.8, "angle": 42.05 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0333, "x": -5.8, "y": 11.16 }, + { "time": 0.0667, "x": -5.13, "y": 11.55 }, + { "time": 0.1333, "x": -7.7, "y": 8.99 }, + { "time": 0.5333, "x": -1.26, "y": 3.83 }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -39.71 }, + { "time": 0.2, "angle": -57.29 }, + { "time": 0.4, "angle": -39.71 }, + { "time": 0.6, "angle": -57.29 }, + { "time": 0.8, "angle": -39.71 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -56.59 }, + { "time": 0.0667, "angle": -21.57 }, + { "time": 0.1333, "angle": 27.95 }, + { "time": 0.2, "angle": 42.43 }, + { "time": 0.2667, "angle": 62.37 }, + { "time": 0.3333, "angle": 45.43 }, + { "time": 0.4, "angle": 15.67 }, + { "time": 0.4667, "angle": 28.22 }, + { "time": 0.5333, "angle": -38.62 }, + { "time": 0.6, "angle": -53.27 }, + { "time": 0.6667, "angle": -79.31 }, + { "time": 0.7333, "angle": -86.47 }, + { "time": 0.8, "angle": -56.59 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.4, "x": -6.76, "y": -3.86 }, + { "time": 0.4333, "x": -15.85, "y": 7.28 }, + { "time": 0.4667, "x": -13.05, "y": 4.05 }, + { "time": 0.5, "x": -10.25, "y": 7.11 }, + { "time": 0.5333, "x": -9.02, "y": -5.15 }, + { "time": 0.6667, "x": -23.18, "y": -2.58 }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": -74 }, + { "time": 0.0667, "angle": -83.38 }, + { "time": 0.1333, "angle": -106.7 }, + { "time": 0.2, "angle": -66.01 }, + { "time": 0.2667, "angle": -55.22 }, + { "time": 0.3333, "angle": -24.8 }, + { + "time": 0.4, + "angle": 18.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4667, "angle": -56.65 }, + { + "time": 0.5333, + "angle": -11.95, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6667, "angle": -41.27 }, + { "time": 0.7333, "angle": -43.61 }, + { "time": 0.8, "angle": -74 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -89.37 }, + { "time": 0.0667, "angle": -95.67 }, + { "time": 0.1333, "angle": -22.01 }, + { "time": 0.2, "angle": -316.04 }, + { "time": 0.2667, "angle": -274.94 }, + { "time": 0.3333, "angle": -273.74 }, + { "time": 0.4, "angle": -272.09 }, + { "time": 0.4667, "angle": -264.9 }, + { "time": 0.5333, "angle": -320.1 }, + { "time": 0.6, "angle": -50.84 }, + { "time": 0.6667, "angle": -81.73 }, + { "time": 0.7333, "angle": -83.92 }, + { "time": 0.8, "angle": -89.37 } + ], + "translate": [ + { "time": 0, "x": 6.25, "y": 10.05 }, + { "time": 0.2667, "x": 4.96, "y": -13.13 }, + { "time": 0.6, "x": -2.43, "y": 1.95 }, + { "time": 0.8, "x": 6.25, "y": 10.05 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 33.44 }, + { "time": 0.0667, "angle": 20.54 }, + { "time": 0.1333, "angle": 15.26 }, + { "time": 0.2, "angle": 19.29 }, + { "time": 0.2667, "angle": 22.62 }, + { "time": 0.3333, "angle": 37.29 }, + { "time": 0.4, "angle": 41.53 }, + { "time": 0.4667, "angle": 31.74 }, + { "time": 0.5333, "angle": 67.45 }, + { "time": 0.6667, "angle": 39.77 }, + { "time": 0.7333, "angle": 30.95 }, + { "time": 0.8, "angle": 33.44 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -19.76 }, + { "time": 0.0667, "angle": -37.11 }, + { "time": 0.1333, "angle": -50.8 }, + { "time": 0.2667, "angle": -12.69 }, + { "time": 0.3333, "angle": 3.01 }, + { "time": 0.4333, "angle": 12.06 }, + { "time": 0.5333, "angle": 13.26 }, + { "time": 0.8, "angle": -19.76 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 68.68 }, + { "time": 0.0667, "angle": 73.89 }, + { "time": 0.1333, "angle": -9.64 }, + { "time": 0.2, "angle": 284.28 }, + { "time": 0.2667, "angle": 283.29 }, + { "time": 0.3333, "angle": 278.29 }, + { "time": 0.4, "angle": 271.03 }, + { "time": 0.4667, "angle": 263.2 }, + { "time": 0.5333, "angle": 314.26 }, + { "time": 0.6, "angle": 16.83 }, + { "time": 0.6667, "angle": 70.35 }, + { "time": 0.7333, "angle": 73.54 }, + { "time": 0.8, "angle": 68.68 } + ], + "translate": [ + { "time": 0, "x": -2.57, "y": -8.89 }, + { "time": 0.1333, "x": -4.68, "y": 7.21 }, + { "time": 0.2, "x": 21.73, "y": 51.18 }, + { "time": 0.6, "x": 4.33, "y": 2.06 }, + { "time": 0.8, "x": -2.57, "y": -8.89 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 31.05 }, + { "time": 0.0667, "angle": 28.28 }, + { "time": 0.1333, "angle": 49.36 }, + { "time": 0.2, "angle": 59.37 }, + { "time": 0.2667, "angle": 8.56 }, + { "time": 0.3333, "angle": 9.39 }, + { "time": 0.4, "angle": 11.51 }, + { "time": 0.4667, "angle": 7.22 }, + { "time": 0.5333, "angle": -18.44 }, + { "time": 0.6, "angle": 11.45 }, + { "time": 0.6667, "angle": 9.99 }, + { "time": 0.7333, "angle": 8.29 }, + { "time": 0.8, "angle": 31.05 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.2, "angle": 13.59 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.6, "angle": 13.59 }, + { "time": 0.8, "angle": 11.03 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.1, "angle": 12.35 }, + { "time": 0.2, "angle": 25.55 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.5, "angle": 12.35 }, + { "time": 0.6, "angle": 25.55 }, + { "time": 0.8, "angle": 11.03 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.481, 0.01, 0.75, 1 ] + }, + { "time": 0.0667, "angle": -64.42 }, + { + "time": 0.1333, + "angle": -20.6, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.2667, "angle": -62.52 }, + { "time": 0.3333, "angle": -79.75 }, + { "time": 0.4, "angle": -78.28 }, + { + "time": 0.4667, + "angle": -118.96, + "curve": [ 0.93, 0.01, 0.953, 0.95 ] + }, + { "time": 0.6, "angle": -88.96 }, + { "time": 0.6667, "angle": -79.1 }, + { "time": 0.7333, "angle": -47.78 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { + "time": 0.0333, + "angle": -21.13, + "curve": [ 0.121, 0.24, 0.75, 1 ] + }, + { "time": 0.0667, "angle": 17.64 }, + { "time": 0.1, "angle": 29.93 }, + { "time": 0.1333, "angle": 16.45 }, + { "time": 0.2, "angle": -29.23 }, + { "time": 0.2667, "angle": -1.62 }, + { "time": 0.3333, "angle": -10.23 }, + { "time": 0.4667, "angle": -15.99 }, + { "time": 0.6, "angle": 9.03 }, + { "time": 0.7333, "angle": 17.33 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0667, "angle": -12.04 }, + { "time": 0.1333, "angle": -0.87 }, + { "time": 0.2, "angle": 25.81 }, + { "time": 0.2667, "angle": 4.71 }, + { + "time": 0.4, + "angle": 18.09, + "curve": [ 0.281, 0.74, 0.75, 1 ] + }, + { "time": 0.4333, "angle": -1.71 }, + { "time": 0.4667, "angle": 27.13 }, + { "time": 0.5, "angle": 38.84 }, + { "time": 0.5333, "angle": 30.77 }, + { "time": 0.5667, "angle": -20.49 }, + { "time": 0.6, "angle": -30.81 }, + { "time": 0.6667, "angle": -1.32 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 24.73 }, + { "time": 0.5, "angle": -11.88 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -62.48, "y": -23.11 }, + { + "time": 0.0667, + "x": -62.48, + "y": -38.51, + "curve": [ 0.244, 0.04, 0.75, 1 ] + }, + { + "time": 0.2667, + "x": -62.48, + "y": 22.29, + "curve": [ 0.17, 0.53, 0.75, 1 ] + }, + { "time": 0.4, "x": -62.48, "y": -23.11 }, + { "time": 0.4333, "x": -62.48, "y": -24.59 }, + { + "time": 0.4667, + "x": -62.48, + "y": -43.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6667, "x": -62.48, "y": 22.29 }, + { "time": 0.8, "x": -62.48, "y": -23.11 } + ] + } + }, + "events": [ + { "time": 0, "name": "footstep" }, + { "time": 0.4, "name": "footstep", "int": 1 } + ] + }, + "shoot": { + "slots": { + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_grind" } + ] + }, + "muzzle": { + "color": [ + { + "time": 0.0225, + "color": "ffffff00", + "curve": [ 0.119, 0.99, 0.75, 1 ] + }, + { "time": 0.0667, "color": "ffffffff", "curve": "stepped" }, + { "time": 0.1, "color": "ffffffff" }, + { "time": 0.1667, "color": "ffffff00" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle" }, + { "time": 0.1667, "name": null } + ] + } + }, + "bones": { + "gunTip": { + "translate": [ + { "time": 0.0333, "x": 0, "y": 0 }, + { "time": 0.1667, "x": 20.93, "y": 1.58 } + ], + "scale": [ + { + "time": 0.0333, + "x": 1, + "y": 1, + "curve": [ 0.706, 0, 0.49, 1 ] + }, + { "time": 0.1667, "x": 1.247, "y": 1.517 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 1.91 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0333, "x": -6.43, "y": 6.69 }, + { + "time": 0.0667, + "x": 0, + "y": 0, + "curve": [ 0, 0.99, 0.354, 0.99 ] + }, + { "time": 0.1667, "x": -9.3, "y": -1.41 }, + { "time": 0.2667, "x": 0, "y": 0 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": -30.47 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0, 0.3, 0.679, 1 ] + }, + { "time": 0.2, "x": -6, "y": -3.72 }, + { "time": 0.2667, "x": 0, "y": 0 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 62.31 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0, 0.3, 0.679, 1 ] + }, + { "time": 0.2, "x": 2.81, "y": 11.42 }, + { "time": 0.2667, "x": 0, "y": 0 } + ] + }, + "aiming gun target": { + "translate": [ + { "time": 0, "x": 2.57, "y": -9.1 } + ] + } + }, + "ik": { + "aiming constraint": [ + { "time": 0 } + ], + "aiming gun constraint": [ + { "time": 0 } + ] + } + }, + "shoot old": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0.1333, "name": "front_fist_closed" }, + { "time": 0.4, "name": "front_fist_open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0.1333, "name": "mouth_grind" } + ] + }, + "muzzle": { + "color": [ + { + "time": 0.1333, + "color": "ffffff00", + "curve": [ 0.119, 0.99, 0.75, 1 ] + }, + { + "time": 0.1667, + "color": "ffffffff", + "curve": [ 0.821, 0, 0.91, 0.9 ] + }, + { "time": 0.2667, "color": "ffffff00" } + ], + "attachment": [ + { "time": 0.1333, "name": "muzzle" }, + { "time": 0.2667, "name": null } + ] + } + }, + "bones": { + "gunTip": { + "translate": [ + { "time": 0.1333, "x": 0, "y": 0 }, + { "time": 0.2, "x": 20.93, "y": 1.58 } + ], + "scale": [ + { "time": 0.1333, "x": 1, "y": 1 }, + { "time": 0.2, "x": 1.247, "y": 1.517 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 1.91 } + ], + "translate": [ + { + "time": 0, + "x": 7.95, + "y": 5.85, + "curve": [ 0, 0.3, 0.679, 1 ] + }, + { "time": 0.3, "x": -9.3, "y": -1.41 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": -30.47 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0, 0.3, 0.679, 1 ] + }, + { "time": 0.3, "x": -6, "y": -3.72 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 62.31 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0, 0.3, 0.679, 1 ] + }, + { "time": 0.3, "x": 2.81, "y": 11.42 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "aiming gun target": { + "translate": [ + { "time": 0, "x": -0.07, "y": -10.4 } + ] + } + }, + "ik": { + "aiming constraint": [ + { "time": 0 } + ], + "aiming gun constraint": [ + { "time": 0 } + ] + } + }, + "test": { + "slots": { + "front_foot": { + "color": [ + { "time": 0.6667, "color": "ffffffff" }, + { "time": 1.3333, "color": "ff0700ff" } + ] + }, + "gun": { + "color": [ + { "time": 0, "color": "ffffffff", "curve": "stepped" }, + { "time": 0.6667, "color": "ffffffff" }, + { "time": 1.3333, "color": "32ff00ff" } + ] + }, + "rear_foot": { + "color": [ + { "time": 0.6667, "color": "ffffffff" }, + { "time": 1.3333, "color": "ff0700ff" } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.3333, "angle": -20.72 }, + { "time": 0.6667, "angle": -32.42 }, + { "time": 1, "angle": -5.3 }, + { "time": 1.3333, "angle": 24.96 }, + { "time": 1.6667, "angle": 15.62 }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.173, 0.38, 0.575, 0.74 ] + }, + { + "time": 0.1667, + "x": 144.2, + "y": -77.59, + "curve": [ 0.372, 0.61, 0.766, 1 ] + }, + { + "time": 0.3333, + "x": 217.61, + "y": -192.64, + "curve": [ 0.282, 0, 0.625, 0.32 ] + }, + { + "time": 0.5, + "x": 181.21, + "y": -365.66, + "curve": [ 0.314, 0.21, 0.655, 0.54 ] + }, + { + "time": 0.6667, + "x": 20.1, + "y": -500.41, + "curve": [ 0.147, 0.28, 0.75, 1 ] + }, + { "time": 0.8333, "x": -194.24, "y": -341.85 }, + { "time": 1, "x": -307.93, "y": -114 }, + { + "time": 1.1667, + "x": -330.39, + "y": 121.42, + "curve": [ 0.25, 0, 0.764, 0.49 ] + }, + { + "time": 1.3333, + "x": -240.42, + "y": 335.66, + "curve": [ 0.23, 0.37, 0.58, 0.73 ] + }, + { + "time": 1.5, + "x": -56.12, + "y": 288.06, + "curve": [ 0.296, 0.61, 0.642, 1 ] + }, + { + "time": 1.6667, + "x": 87.63, + "y": 191.34, + "curve": [ 0.239, 0, 0.627, 0.39 ] + }, + { + "time": 1.8333, + "x": 60.62, + "y": 95.15, + "curve": [ 0.41, 0.26, 0.804, 0.62 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + } + }, + "drawOrder": [ + { + "time": 0.6667, + "offsets": [ + { "slot": "head", "offset": -9 }, + { "slot": "eye", "offset": -9 }, + { "slot": "mouth", "offset": -13 }, + { "slot": "goggles", "offset": -13 } + ] + }, + { "time": 1.3333 } + ], + "events": [ + { "time": 0, "name": "headPop", "int": 0, "float": 0, "string": "pop.wav" }, + { "time": 1, "name": "headBehind", "int": 7, "float": 8, "string": "animate" }, + { "time": 2, "name": "headAttach", "int": 0, "float": 0, "string": "attach.wav" } + ] + }, + "walk": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_closed" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_smile" } + ] + }, + "torso": { + "attachment": [ + { "time": 0, "name": "torso" } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { "time": 0, "angle": 15.79 }, + { "time": 0.1, "angle": 27.4 }, + { "time": 0.2, "angle": -7.95 }, + { "time": 0.3, "angle": -16.95 }, + { "time": 0.4, "angle": -28.62 }, + { "time": 0.5, "angle": -19.31 }, + { "time": 0.6, "angle": -3.09 }, + { "time": 0.7, "angle": 29.52 }, + { "time": 0.8, "angle": 15.79 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.4, "x": -1.19, "y": 0.55 }, + { "time": 0.5, "x": 0.12, "y": 0.41 }, + { "time": 0.6, "x": 9.49, "y": 0.27 }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": 5.13 }, + { "time": 0.1, "angle": -20.88 }, + { "time": 0.2, "angle": 13.37 }, + { "time": 0.3, "angle": 15.99 }, + { "time": 0.4, "angle": 5.95 }, + { "time": 0.5, "angle": -26.77 }, + { "time": 0.7, "angle": -55.44 }, + { "time": 0.8, "angle": 5.13 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -34.38 }, + { "time": 0.1, "angle": -30.33 }, + { "time": 0.2, "angle": -37.22 }, + { "time": 0.3, "angle": 20.73 }, + { "time": 0.4, "angle": 8.69 }, + { "time": 0.5, "angle": 12.16 }, + { "time": 0.6, "angle": -24.62 }, + { "time": 0.7, "angle": -27.27 }, + { "time": 0.8, "angle": -34.38 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.4, "x": 4.09, "y": -9.53 }, + { "time": 0.5, "x": 0, "y": 0 }, + { "time": 0.7, "x": -21.14, "y": -9.61 }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 14.26 }, + { "time": 0.1, "angle": -17.3 }, + { "time": 0.2, "angle": -12.68 }, + { "time": 0.3, "angle": -58.9 }, + { "time": 0.4, "angle": 15.95 }, + { "time": 0.5, "angle": -9.01 }, + { "time": 0.6, "angle": 26.07 }, + { "time": 0.7, "angle": 21.86 }, + { "time": 0.8, "angle": 14.26 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1, "x": 0.952, "y": 1 }, + { "time": 0.5, "x": 0.976, "y": 1 }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 10.13 }, + { "time": 0.1, "angle": 12.28 }, + { "time": 0.2, "angle": -2.95 }, + { "time": 0.3, "angle": 6.29 }, + { "time": 0.4, "angle": 13.46 }, + { "time": 0.5, "angle": -3.57 }, + { "time": 0.6, "angle": -0.97 }, + { "time": 0.7, "angle": 2.98 }, + { "time": 0.8, "angle": 10.13 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -23.74 }, + { "time": 0.4, "angle": -320.57 }, + { "time": 0.8, "angle": -23.74 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 11.63 }, + { "time": 0.1, "angle": 19.37 }, + { "time": 0.4, "angle": 345.27 }, + { "time": 0.5, "angle": 343.44 }, + { "time": 0.8, "angle": 11.63 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -12.11 }, + { "time": 0.1667, "angle": -17.16 }, + { "time": 0.4, "angle": -12.11 }, + { "time": 0.5667, "angle": -15.81 }, + { "time": 0.8, "angle": -12.11 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 1.41 }, + { "time": 0.2333, "angle": -3.04 }, + { "time": 0.4, "angle": 1.41 }, + { "time": 0.6333, "angle": -3.04 }, + { "time": 0.8, "angle": 1.41 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 6.98 }, + { "time": 0.1667, "angle": 8.02 }, + { "time": 0.2667, "angle": 12.65 }, + { "time": 0.4, "angle": 6.98 }, + { "time": 0.5667, "angle": 8.02 }, + { "time": 0.6667, "angle": 12.65 }, + { "time": 0.8, "angle": 6.98 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4, "angle": 20.6 }, + { "time": 0.8, "angle": 0 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 12.49 }, + { "time": 0.1, "angle": -8.34 }, + { "time": 0.2, "angle": -6.18 }, + { "time": 0.3, "angle": -0.76 }, + { "time": 0.3333, "angle": 3.89 }, + { "time": 0.4, "angle": 10.22 }, + { "time": 0.5, "angle": 11.44 }, + { "time": 0.6, "angle": -0.34 }, + { "time": 0.7, "angle": 0.15 }, + { "time": 0.8, "angle": 12.49 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 3.59 }, + { "time": 0.1, "angle": 5.51 }, + { "time": 0.4, "angle": -22.78 }, + { "time": 0.5, "angle": -9.65 }, + { "time": 0.8, "angle": 3.59 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -15.22 }, + { "time": 0.1, "angle": -51.4 }, + { "time": 0.4, "angle": -39.4 }, + { "time": 0.5, "angle": 19.26 }, + { "time": 0.8, "angle": -15.22 } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": -24.07, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.1, + "angle": -10.95, + "curve": [ 0.381, 0.55, 0.742, 1 ] + }, + { + "time": 0.4, + "angle": 25.34, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6667, + "angle": -27.48, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.8, "angle": -24.07 } + ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -23.93, + "y": 3.22, + "curve": [ 0.519, 0.04, 0.807, 0.61 ] + }, + { + "time": 0.1, + "x": -23.93, + "y": -9.25, + "curve": [ 0.136, 0.34, 0.601, 1 ] + }, + { + "time": 0.2, + "x": -23.93, + "y": 4.36, + "curve": [ 0.204, 0.69, 0.75, 1 ] + }, + { + "time": 0.3, + "x": -23.93, + "y": 2.39, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "x": -23.93, + "y": -2.5, + "curve": [ 0.693, 0.02, 0.75, 1 ] + }, + { + "time": 0.5, + "x": -23.93, + "y": -10.32, + "curve": [ 0.236, 0.78, 0.75, 1 ] + }, + { + "time": 0.6, + "x": -23.93, + "y": 4.36, + "curve": [ 0.287, 0.38, 0.719, 0.77 ] + }, + { + "time": 0.7, + "x": -23.93, + "y": 10.35, + "curve": [ 0.616, 0, 0.75, 1 ] + }, + { "time": 0.8, "x": -23.93, "y": 3.22 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.png b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.png new file mode 100644 index 000000000..c5f650b15 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.png differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.uasset b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.uasset new file mode 100644 index 000000000..207d258a3 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Spineboy/spineboy.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Textures/Doi.uasset b/spine-ue4/Content/GettingStarted/Assets/Textures/Doi.uasset new file mode 100644 index 000000000..19c3b5438 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Textures/Doi.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Assets/Textures/raptor.uasset b/spine-ue4/Content/GettingStarted/Assets/Textures/raptor.uasset new file mode 100644 index 000000000..02ffdd288 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Assets/Textures/raptor.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Blueprints/ControlledSpineboy_Blueprint.uasset b/spine-ue4/Content/GettingStarted/Blueprints/ControlledSpineboy_Blueprint.uasset new file mode 100644 index 000000000..80b03267e Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Blueprints/ControlledSpineboy_Blueprint.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Blueprints/HoverController_Blueprint.uasset b/spine-ue4/Content/GettingStarted/Blueprints/HoverController_Blueprint.uasset new file mode 100644 index 000000000..c731939bd Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Blueprints/HoverController_Blueprint.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Blueprints/Raptor_Blueprint.uasset b/spine-ue4/Content/GettingStarted/Blueprints/Raptor_Blueprint.uasset new file mode 100644 index 000000000..418e7c1ae Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Blueprints/Raptor_Blueprint.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Blueprints/SpineBoy_Blueprint.uasset b/spine-ue4/Content/GettingStarted/Blueprints/SpineBoy_Blueprint.uasset new file mode 100644 index 000000000..b082a0339 Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Blueprints/SpineBoy_Blueprint.uasset differ diff --git a/spine-ue4/Content/GettingStarted/Blueprints/SpineGIrl_Blueprint.uasset b/spine-ue4/Content/GettingStarted/Blueprints/SpineGIrl_Blueprint.uasset new file mode 100644 index 000000000..4514f369b Binary files /dev/null and b/spine-ue4/Content/GettingStarted/Blueprints/SpineGIrl_Blueprint.uasset differ diff --git a/spine-ue4/LICENSE b/spine-ue4/LICENSE new file mode 100644 index 000000000..daceab94a --- /dev/null +++ b/spine-ue4/LICENSE @@ -0,0 +1,27 @@ +Spine Runtimes Software License v2.5 + +Copyright (c) 2013-2016, Esoteric Software +All rights reserved. + +You are granted a perpetual, non-exclusive, non-sublicensable, and +non-transferable license to use, install, execute, and perform the Spine +Runtimes software and derivative works solely for personal or internal +use. Without the written permission of Esoteric Software (see Section 2 of +the Spine Software License Agreement), you may not (a) modify, translate, +adapt, or develop new applications using the Spine Runtimes or otherwise +create derivative works or improvements of the Spine Runtimes or (b) remove, +delete, alter, or obscure any trademarks or any copyright, trademark, patent, +or other intellectual property or proprietary rights notices on or in the +Software, including any copy thereof. Redistributions in binary or source +form must include this license and terms. + +THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF +USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitAdditiveMaterial.uasset b/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitAdditiveMaterial.uasset new file mode 100644 index 000000000..72db80d95 Binary files /dev/null and b/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitAdditiveMaterial.uasset differ diff --git a/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitMultiplyMaterial.uasset b/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitMultiplyMaterial.uasset new file mode 100644 index 000000000..0c7650adc Binary files /dev/null and b/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitMultiplyMaterial.uasset differ diff --git a/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitNormalMaterial.uasset b/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitNormalMaterial.uasset new file mode 100644 index 000000000..6923c3f89 Binary files /dev/null and b/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitNormalMaterial.uasset differ diff --git a/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitScreenMaterial.uasset b/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitScreenMaterial.uasset new file mode 100644 index 000000000..675910f9f Binary files /dev/null and b/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitScreenMaterial.uasset differ diff --git a/spine-ue4/Plugins/SpinePlugin/Resources/Icon128.png b/spine-ue4/Plugins/SpinePlugin/Resources/Icon128.png new file mode 100644 index 000000000..ae6416412 Binary files /dev/null and b/spine-ue4/Plugins/SpinePlugin/Resources/Icon128.png differ diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp new file mode 100644 index 000000000..52cf27984 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp @@ -0,0 +1,145 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#include "SpineEditorPluginPrivatePCH.h" + +#include "SpineAtlasAsset.h" +#include "AssetRegistryModule.h" +#include "AssetToolsModule.h" +#include "PackageTools.h" +#include "Developer/DesktopPlatform/Public/IDesktopPlatform.h" +#include "Developer/DesktopPlatform/Public/DesktopPlatformModule.h" +#include "spine/spine.h" +#include +#include +#include + +#define LOCTEXT_NAMESPACE "Spine" + +USpineAtlasAssetFactory::USpineAtlasAssetFactory (const FObjectInitializer& objectInitializer): Super(objectInitializer) { + bCreateNew = false; + bEditAfterNew = true; + bEditorImport = true; + SupportedClass = USpineAtlasAsset::StaticClass(); + + Formats.Add(TEXT("atlas;Spine atlas file")); +} + +FText USpineAtlasAssetFactory::GetToolTip () const { + return LOCTEXT("SpineAtlasAssetFactory", "Animations exported from Spine"); +} + +bool USpineAtlasAssetFactory::FactoryCanImport (const FString& Filename) { + return true; +} + +UObject* USpineAtlasAssetFactory::FactoryCreateFile (UClass * InClass, UObject * InParent, FName InName, EObjectFlags Flags, const FString & Filename, const TCHAR* Parms, FFeedbackContext * Warn, bool& bOutOperationCanceled) { + FString rawString; + if (!FFileHelper::LoadFileToString(rawString, *Filename)) { + return nullptr; + } + + FString currentSourcePath, filenameNoExtension, unusedExtension; + const FString longPackagePath = FPackageName::GetLongPackagePath(InParent->GetOutermost()->GetPathName()); + FPaths::Split(UFactory::GetCurrentFilename(), currentSourcePath, filenameNoExtension, unusedExtension); + FString name(InName.ToString()); + name.Append("-atlas"); + + USpineAtlasAsset* asset = NewObject(InParent, InClass, FName(*name), Flags); + asset->SetRawData(rawString); + asset->SetAtlasFileName(FName(*Filename)); + LoadAtlas(asset, currentSourcePath, longPackagePath); + return asset; +} + +bool USpineAtlasAssetFactory::CanReimport (UObject* Obj, TArray& OutFilenames) { + USpineAtlasAsset* asset = Cast(Obj); + if (!asset) return false; + + FString filename = asset->GetAtlasFileName().ToString(); + if (!filename.IsEmpty()) + OutFilenames.Add(filename); + + return true; +} + +void USpineAtlasAssetFactory::SetReimportPaths (UObject* Obj, const TArray& NewReimportPaths) { + USpineAtlasAsset* asset = Cast(Obj); + + if (asset && ensure(NewReimportPaths.Num() == 1)) + asset->SetAtlasFileName(FName(*NewReimportPaths[0])); +} + +EReimportResult::Type USpineAtlasAssetFactory::Reimport (UObject* Obj) { + USpineAtlasAsset* asset = Cast(Obj); + FString rawString; + if (!FFileHelper::LoadFileToString(rawString, *asset->GetAtlasFileName().ToString())) return EReimportResult::Failed; + asset->SetRawData(rawString); + + FString currentSourcePath, filenameNoExtension, unusedExtension; + const FString longPackagePath = FPackageName::GetLongPackagePath(asset->GetOutermost()->GetPathName()); + FPaths::Split(UFactory::GetCurrentFilename(), currentSourcePath, filenameNoExtension, unusedExtension); + + LoadAtlas(asset, currentSourcePath, longPackagePath); + + if (Obj->GetOuter()) Obj->GetOuter()->MarkPackageDirty(); + else Obj->MarkPackageDirty(); + + return EReimportResult::Succeeded; +} + +UTexture2D* resolveTexture (USpineAtlasAsset* Asset, const FString& PageFileName, const FString& TargetSubPath) { + FAssetToolsModule& AssetToolsModule = FModuleManager::GetModuleChecked("AssetTools"); + + TArray fileNames; + fileNames.Add(PageFileName); + + TArray importedAsset = AssetToolsModule.Get().ImportAssets(fileNames, TargetSubPath); + UTexture2D* texture = (importedAsset.Num() > 0) ? Cast(importedAsset[0]) : nullptr; + + return texture; +} + +void USpineAtlasAssetFactory::LoadAtlas (USpineAtlasAsset* Asset, const FString& CurrentSourcePath, const FString& LongPackagePath) { + spAtlas* atlas = Asset->GetAtlas(true); + Asset->atlasPages.Empty(); + + const FString targetTexturePath = LongPackagePath / TEXT("Textures"); + + spAtlasPage* page = atlas->pages; + while (page) { + const FString sourceTextureFilename = FPaths::Combine(*CurrentSourcePath, UTF8_TO_TCHAR(page->name)); + UTexture2D* texture = resolveTexture(Asset, sourceTextureFilename, targetTexturePath); + page = page->next; + Asset->atlasPages.Add(texture); + } +} + +#undef LOCTEXT_NAMESPACE diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineEditorPlugin.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineEditorPlugin.cpp new file mode 100644 index 000000000..af2bfcd45 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineEditorPlugin.cpp @@ -0,0 +1,49 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#include "SpineEditorPluginPrivatePCH.h" +#include "spine/spine.h" + + +class FSpineEditorPlugin: public ISpineEditorPlugin { + virtual void StartupModule() override; + virtual void ShutdownModule() override; +}; + +IMPLEMENT_MODULE(FSpineEditorPlugin, ISpineEditorPlugin) + + + +void FSpineEditorPlugin::StartupModule () { } + +void FSpineEditorPlugin::ShutdownModule () { } + + + diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineEditorPluginPrivatePCH.h b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineEditorPluginPrivatePCH.h new file mode 100644 index 000000000..020796315 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineEditorPluginPrivatePCH.h @@ -0,0 +1,34 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#include "SpineEditorPlugin.h" +#include "SpinePlugin.h" +#include "SpineAtlasImportFactory.h" +#include "SpineSkeletonImportFactory.h" diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineSkeletonImportFactory.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineSkeletonImportFactory.cpp new file mode 100644 index 000000000..cb14265bc --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineSkeletonImportFactory.cpp @@ -0,0 +1,121 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#include "SpineEditorPluginPrivatePCH.h" + +#include "SpineSkeletonDataAsset.h" +#include "AssetRegistryModule.h" +#include "AssetToolsModule.h" +#include "PackageTools.h" +#include "Developer/DesktopPlatform/Public/IDesktopPlatform.h" +#include "Developer/DesktopPlatform/Public/DesktopPlatformModule.h" +#include "spine/spine.h" +#include +#include +#include + +#define LOCTEXT_NAMESPACE "Spine" + +USpineSkeletonAssetFactory::USpineSkeletonAssetFactory (const FObjectInitializer& objectInitializer): Super(objectInitializer) { + bCreateNew = false; + bEditAfterNew = true; + bEditorImport = true; + SupportedClass = USpineSkeletonDataAsset::StaticClass(); + + Formats.Add(TEXT("json;Spine skeleton file")); + Formats.Add(TEXT("skel;Spine skeleton file")); +} + +FText USpineSkeletonAssetFactory::GetToolTip () const { + return LOCTEXT("USpineSkeletonAssetFactory", "Animations exported from Spine"); +} + +bool USpineSkeletonAssetFactory::FactoryCanImport (const FString& Filename) { + return true; +} + +void LoadAtlas (const FString& Filename, const FString& TargetPath) { + FAssetToolsModule& AssetToolsModule = FModuleManager::GetModuleChecked("AssetTools"); + + FString skelFile = Filename.Replace(TEXT(".skel"), TEXT(".atlas")).Replace(TEXT(".json"), TEXT(".atlas")); + if (!FPaths::FileExists(skelFile)) return; + + TArray fileNames; + fileNames.Add(skelFile); + AssetToolsModule.Get().ImportAssets(fileNames, TargetPath); +} + +UObject* USpineSkeletonAssetFactory::FactoryCreateFile (UClass * InClass, UObject * InParent, FName InName, EObjectFlags Flags, const FString & Filename, const TCHAR* Parms, FFeedbackContext * Warn, bool& bOutOperationCanceled) { + FString name(InName.ToString()); + name.Append("-data"); + + USpineSkeletonDataAsset* asset = NewObject(InParent, InClass, FName(*name), Flags); + if (!FFileHelper::LoadFileToArray(asset->GetRawData(), *Filename, 0)) { + return nullptr; + } + + asset->SetSkeletonDataFileName(FName(*Filename)); + const FString longPackagePath = FPackageName::GetLongPackagePath(asset->GetOutermost()->GetPathName()); + LoadAtlas(Filename, longPackagePath); + return asset; +} + +bool USpineSkeletonAssetFactory::CanReimport (UObject* Obj, TArray& OutFilenames) { + USpineSkeletonDataAsset* asset = Cast(Obj); + if (!asset) return false; + + FString filename = asset->GetSkeletonDataFileName().ToString(); + if (!filename.IsEmpty()) + OutFilenames.Add(filename); + + return true; +} + +void USpineSkeletonAssetFactory::SetReimportPaths (UObject* Obj, const TArray& NewReimportPaths) { + USpineSkeletonDataAsset* asset = Cast(Obj); + + if (asset && ensure(NewReimportPaths.Num() == 1)) + asset->SetSkeletonDataFileName(FName(*NewReimportPaths[0])); +} + +EReimportResult::Type USpineSkeletonAssetFactory::Reimport (UObject* Obj) { + USpineSkeletonDataAsset* asset = Cast(Obj); + if (!FFileHelper::LoadFileToArray(asset->GetRawData(), *asset->GetSkeletonDataFileName().ToString(), 0)) return EReimportResult::Failed; + + const FString longPackagePath = FPackageName::GetLongPackagePath(asset->GetOutermost()->GetPathName()); + LoadAtlas(*asset->GetSkeletonDataFileName().ToString(), longPackagePath); + + if (Obj->GetOuter()) Obj->GetOuter()->MarkPackageDirty(); + else Obj->MarkPackageDirty(); + + return EReimportResult::Succeeded; +} + +#undef LOCTEXT_NAMESPACE diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineAtlasImportFactory.h b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineAtlasImportFactory.h new file mode 100644 index 000000000..475ab07fd --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineAtlasImportFactory.h @@ -0,0 +1,51 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#pragma once + +#include "UnrealEd.h" +#include "SpineAtlasAsset.h" +#include "SpineAtlasImportFactory.generated.h" + +UCLASS() +class USpineAtlasAssetFactory: public UFactory, public FReimportHandler { + GENERATED_UCLASS_BODY() + + virtual FText GetToolTip() const override; + + virtual bool FactoryCanImport(const FString& Filename) override; + virtual UObject* FactoryCreateFile (UClass * InClass, UObject * InParent, FName InName, EObjectFlags Flags, const FString & Filename, const TCHAR* Parms, FFeedbackContext * Warn, bool& bOutOperationCanceled) override; + + virtual bool CanReimport(UObject* Obj, TArray& OutFilenames) override; + virtual void SetReimportPaths(UObject* Obj, const TArray& NewReimportPaths) override; + virtual EReimportResult::Type Reimport(UObject* Obj) override; + + void LoadAtlas(USpineAtlasAsset* Asset, const FString& CurrentSourcePath, const FString& LongPackagePath); +}; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineEditorPlugin.h b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineEditorPlugin.h new file mode 100644 index 000000000..3af03f274 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineEditorPlugin.h @@ -0,0 +1,46 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#pragma once + +#include "ModuleManager.h" + +class ISpineEditorPlugin : public IModuleInterface { + +public: + static inline ISpineEditorPlugin& Get() { + return FModuleManager::LoadModuleChecked< ISpineEditorPlugin >( "SpineEditorPlugin" ); + } + + static inline bool IsAvailable() { + return FModuleManager::Get().IsModuleLoaded( "SpineEditorPlugin" ); + } +}; + diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineSkeletonImportFactory.h b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineSkeletonImportFactory.h new file mode 100644 index 000000000..004220f6b --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Public/SpineSkeletonImportFactory.h @@ -0,0 +1,48 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#pragma once + +#include "UnrealEd.h" +#include "SpineAtlasAsset.h" +#include "SpineSkeletonImportFactory.generated.h" + +UCLASS() +class USpineSkeletonAssetFactory : public UFactory, public FReimportHandler { + GENERATED_UCLASS_BODY() + + virtual FText GetToolTip () const override; + virtual bool FactoryCanImport (const FString& Filename) override; + virtual UObject* FactoryCreateFile (UClass * InClass, UObject * InParent, FName InName, EObjectFlags Flags, const FString & Filename, const TCHAR* Parms, FFeedbackContext * Warn, bool& bOutOperationCanceled) override; + + virtual bool CanReimport (UObject* Obj, TArray& OutFilenames) override; + virtual void SetReimportPaths (UObject* Obj, const TArray& NewReimportPaths) override; + virtual EReimportResult::Type Reimport (UObject* Obj) override; +}; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/SpineEditorPlugin.Build.cs b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/SpineEditorPlugin.Build.cs new file mode 100644 index 000000000..c8aaba35c --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/SpineEditorPlugin.Build.cs @@ -0,0 +1,32 @@ +// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved. + +namespace UnrealBuildTool.Rules +{ + public class SpineEditorPlugin : ModuleRules + { + public SpineEditorPlugin(TargetInfo Target) + { + PublicIncludePaths.AddRange(new string[] { "SpineEditorPlugin/Public" }); + + PrivateIncludePaths.AddRange(new string[] { "SpineEditorPlugin/Private" }); + + PublicDependencyModuleNames.AddRange(new string[] { + "Core", + "CoreUObject", + "Engine", + "UnrealEd", + "SpinePlugin" + }); + + PublicIncludePathModuleNames.AddRange(new string[] { + "AssetTools", + "AssetRegistry" + }); + + DynamicallyLoadedModuleNames.AddRange(new string[] { + "AssetTools", + "AssetRegistry" + }); + } + } +} \ No newline at end of file diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp new file mode 100644 index 000000000..9846a7186 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp @@ -0,0 +1,116 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#include "SpinePluginPrivatePCH.h" +#include "spine/spine.h" +#include +#include +#include + +#define LOCTEXT_NAMESPACE "Spine" + +FString USpineAtlasAsset::GetRawData () const { + return rawData; +} + +FName USpineAtlasAsset::GetAtlasFileName () const { +#if WITH_EDITORONLY_DATA + TArray files; + if (importData) importData->ExtractFilenames(files); + if (files.Num() > 0) return FName(*files[0]); + else return atlasFileName; +#else + return atlasFileName; +#endif +} + +#if WITH_EDITORONLY_DATA + +void USpineAtlasAsset::SetRawData (const FString &RawData) { + this->rawData = RawData; +} + +void USpineAtlasAsset::SetAtlasFileName (const FName &AtlasFileName) { + importData->UpdateFilenameOnly(AtlasFileName.ToString()); + TArray files; + importData->ExtractFilenames(files); + if (files.Num() > 0) atlasFileName = FName(*files[0]); +} + +void USpineAtlasAsset::PostInitProperties () { + if (!HasAnyFlags(RF_ClassDefaultObject)) importData = NewObject(this, TEXT("AssetImportData")); + Super::PostInitProperties(); +} + +void USpineAtlasAsset::GetAssetRegistryTags (TArray& OutTags) const { + if (importData) { + OutTags.Add(FAssetRegistryTag(SourceFileTagName(), importData->GetSourceData().ToJson(), FAssetRegistryTag::TT_Hidden) ); + } + + Super::GetAssetRegistryTags(OutTags); +} + +void USpineAtlasAsset::Serialize (FArchive& Ar) { + Super::Serialize(Ar); + if (Ar.IsLoading() && Ar.UE4Ver() < VER_UE4_ASSET_IMPORT_DATA_AS_JSON && !importData) + importData = NewObject(this, TEXT("AssetImportData")); +} + +void USpineAtlasAsset::BeginDestroy () { + if (atlas) { + spAtlas_dispose(atlas); + atlas = nullptr; + } + Super::BeginDestroy(); +} + +spAtlas* USpineAtlasAsset::GetAtlas (bool ForceReload) { + if (!atlas || ForceReload) { + if (atlas) { + spAtlas_dispose(atlas); + atlas = nullptr; + } + std::string t = TCHAR_TO_UTF8(*rawData); + atlas = spAtlas_create(t.c_str(), strlen(t.c_str()), "", nullptr); + spAtlasPage* page = atlas->pages; + int i = 0; + while (page) { + int num = atlasPages.Num(); + if (atlasPages.Num() > 0 && atlasPages.Num() > i) + page->rendererObject = atlasPages[i++]; + page = page->next; + } + } + return this->atlas; +} + +#endif + +#undef LOCTEXT_NAMESPACE diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineBoneDriverComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineBoneDriverComponent.cpp new file mode 100644 index 000000000..8a99bc6cb --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineBoneDriverComponent.cpp @@ -0,0 +1,64 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#include "SpinePluginPrivatePCH.h" + +USpineBoneDriverComponent::USpineBoneDriverComponent () { + bWantsBeginPlay = true; + PrimaryComponentTick.bCanEverTick = true; + bTickInEditor = true; + bAutoActivate = true; +} + +void USpineBoneDriverComponent::BeginPlay () { + Super::BeginPlay(); +} + +void USpineBoneDriverComponent::BeforeUpdateWorldTransform(USpineSkeletonComponent* skeleton) { + AActor* owner = GetOwner(); + if (owner && skeleton == lastBoundComponent) { + skeleton->SetBoneWorldPosition(BoneName, owner->GetActorLocation() ); + } +} + +void USpineBoneDriverComponent::TickComponent (float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) { + Super::TickComponent(DeltaTime, TickType, ThisTickFunction); + + if (Target) { + USpineSkeletonComponent* skeleton = static_cast(Target->GetComponentByClass(USpineSkeletonComponent::StaticClass())); + if (skeleton != lastBoundComponent) { + // if (lastBoundComponent) lastBoundComponent->BeforeUpdateWorldTransform.RemoveAll(this); + if (!skeleton->BeforeUpdateWorldTransform.GetAllObjects().Contains(this)) + skeleton->BeforeUpdateWorldTransform.AddDynamic(this, &USpineBoneDriverComponent::BeforeUpdateWorldTransform); + lastBoundComponent = skeleton; + } + } +} + diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineBoneFollowerComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineBoneFollowerComponent.cpp new file mode 100644 index 000000000..95f391aba --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineBoneFollowerComponent.cpp @@ -0,0 +1,58 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#include "SpinePluginPrivatePCH.h" + +USpineBoneFollowerComponent::USpineBoneFollowerComponent () { + bWantsBeginPlay = true; + PrimaryComponentTick.bCanEverTick = true; + bTickInEditor = true; + bAutoActivate = true; +} + +void USpineBoneFollowerComponent::BeginPlay () { + Super::BeginPlay(); +} + +void USpineBoneFollowerComponent::TickComponent ( float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction ) { + Super::TickComponent( DeltaTime, TickType, ThisTickFunction ); + + AActor* owner = GetOwner(); + if (Target && owner) { + USpineSkeletonComponent* skeleton = static_cast(Target->GetComponentByClass(USpineSkeletonComponent::StaticClass())); + if (skeleton) { + FTransform transform = skeleton->GetBoneWorldTransform(BoneName); + if (UsePosition) owner->SetActorLocation(transform.GetLocation()); + if (UseRotation) owner->SetActorRotation(transform.GetRotation()); + if (UseScale) owner->SetActorScale3D(transform.GetScale3D()); + } + } +} + diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp new file mode 100644 index 000000000..c0dc79974 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp @@ -0,0 +1,54 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#include "SpinePluginPrivatePCH.h" + +class FSpinePlugin : public SpinePlugin { + virtual void StartupModule() override; + virtual void ShutdownModule() override; +}; + +IMPLEMENT_MODULE( FSpinePlugin, SpinePlugin ) + +void FSpinePlugin::StartupModule() { } + + +void FSpinePlugin::ShutdownModule() { } + +// These are not used in the Spine UE4 plugin, see SpineAtlasAsset on how atlas page textures +// are loaded, See SpineSkeletonRendererComponent on how these textures are used for rendering. +extern "C" { + void _spAtlasPage_createTexture (spAtlasPage* self, const char* path) { } + void _spAtlasPage_disposeTexture (spAtlasPage* self) { } + char* _spUtil_readFile (const char* path, int* length) { return 0; } +} + + + diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePluginPrivatePCH.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePluginPrivatePCH.h new file mode 100644 index 000000000..d6f7713f3 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePluginPrivatePCH.h @@ -0,0 +1,38 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#include "SpinePlugin.h" +#include "SpineSkeletonDataAsset.h" +#include "SpineAtlasAsset.h" +#include "SpineSkeletonComponent.h" +#include "SpineSkeletonAnimationComponent.h" +#include "SpineSkeletonRendererComponent.h" +#include "SpineBoneFollowerComponent.h" +#include "SpineBoneDriverComponent.h" diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp new file mode 100644 index 000000000..0f7b26be6 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp @@ -0,0 +1,228 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#include "SpinePluginPrivatePCH.h" + +#define LOCTEXT_NAMESPACE "Spine" + +void UTrackEntry::SetTrackEntry(spTrackEntry* entry) { + this->entry = entry; + if (entry) entry->rendererObject = (void*)this; +} + +void callback(spAnimationState* state, spEventType type, spTrackEntry* entry, spEvent* event) { + USpineSkeletonAnimationComponent* component = (USpineSkeletonAnimationComponent*)state->rendererObject; + + if (entry->rendererObject) { + UTrackEntry* uEntry = (UTrackEntry*)entry->rendererObject; + if (type == SP_ANIMATION_START) { + component->AnimationStart.Broadcast(uEntry); + uEntry->AnimationStart.Broadcast(uEntry); + } + else if (type == SP_ANIMATION_INTERRUPT) { + component->AnimationInterrupt.Broadcast(uEntry); + uEntry->AnimationInterrupt.Broadcast(uEntry); + } else if (type == SP_ANIMATION_EVENT) { + FSpineEvent evt; + evt.SetEvent(event); + component->AnimationEvent.Broadcast(uEntry, evt); + uEntry->AnimationEvent.Broadcast(uEntry, evt); + } + else if (type == SP_ANIMATION_COMPLETE) { + component->AnimationComplete.Broadcast(uEntry); + uEntry->AnimationComplete.Broadcast(uEntry); + } + else if (type == SP_ANIMATION_END) { + component->AnimationEnd.Broadcast(uEntry); + uEntry->AnimationEnd.Broadcast(uEntry); + } + else if (type == SP_ANIMATION_DISPOSE) { + component->AnimationDispose.Broadcast(uEntry); + uEntry->AnimationDispose.Broadcast(uEntry); + uEntry->SetTrackEntry(nullptr); + component->GCTrackEntry(uEntry); + } + } +} + +USpineSkeletonAnimationComponent::USpineSkeletonAnimationComponent () { + bWantsBeginPlay = true; + PrimaryComponentTick.bCanEverTick = true; + bTickInEditor = true; + bAutoActivate = true; +} + +void USpineSkeletonAnimationComponent::BeginPlay() { + Super::BeginPlay(); + trackEntries.Empty(); +} + +void USpineSkeletonAnimationComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) { + Super::Super::TickComponent(DeltaTime, TickType, ThisTickFunction); + + InternalTick(DeltaTime); +} + +void USpineSkeletonAnimationComponent::InternalTick(float DeltaTime, bool CallDelegates) { + CheckState(); + + if (state) { + spAnimationState_update(state, DeltaTime); + spAnimationState_apply(state, skeleton); + if (CallDelegates) BeforeUpdateWorldTransform.Broadcast(this); + spSkeleton_updateWorldTransform(skeleton); + if (CallDelegates) AfterUpdateWorldTransform.Broadcast(this); + } +} + +void USpineSkeletonAnimationComponent::CheckState () { + if (lastAtlas != Atlas || lastData != SkeletonData) { + DisposeState(); + + if (Atlas && SkeletonData) { + spSkeletonData* data = SkeletonData->GetSkeletonData(Atlas->GetAtlas(false), false); + skeleton = spSkeleton_create(data); + spAnimationStateData* stateData = SkeletonData->GetAnimationStateData(Atlas->GetAtlas(false)); + state = spAnimationState_create(stateData); + state->rendererObject = (void*)this; + state->listener = callback; + trackEntries.Empty(); + } + + lastAtlas = Atlas; + lastData = SkeletonData; + } +} + +void USpineSkeletonAnimationComponent::DisposeState () { + if (state) { + spAnimationState_dispose(state); + state = nullptr; + } + + if (skeleton) { + spSkeleton_dispose(skeleton); + skeleton = nullptr; + } + + trackEntries.Empty(); +} + +void USpineSkeletonAnimationComponent::FinishDestroy () { + DisposeState(); + Super::FinishDestroy(); +} + +void USpineSkeletonAnimationComponent::SetTimeScale(float timeScale) { + CheckState(); + if (state) state->timeScale = timeScale; +} + +float USpineSkeletonAnimationComponent::GetTimeScale() { + CheckState(); + if (state) return state->timeScale; + return 1; +} + +UTrackEntry* USpineSkeletonAnimationComponent::SetAnimation (int trackIndex, FString animationName, bool loop) { + CheckState(); + if (state && spSkeletonData_findAnimation(skeleton->data, TCHAR_TO_UTF8(*animationName))) { + spTrackEntry* entry = spAnimationState_setAnimationByName(state, trackIndex, TCHAR_TO_UTF8(*animationName), loop ? 1 : 0); + UTrackEntry* uEntry = NewObject(); + uEntry->SetTrackEntry(entry); + trackEntries.Add(uEntry); + return uEntry; + } else return NewObject(); + +} + +UTrackEntry* USpineSkeletonAnimationComponent::AddAnimation (int trackIndex, FString animationName, bool loop, float delay) { + CheckState(); + if (state && spSkeletonData_findAnimation(skeleton->data, TCHAR_TO_UTF8(*animationName))) { + spTrackEntry* entry = spAnimationState_addAnimationByName(state, trackIndex, TCHAR_TO_UTF8(*animationName), loop ? 1 : 0, delay); + UTrackEntry* uEntry = NewObject(); + uEntry->SetTrackEntry(entry); + trackEntries.Add(uEntry); + return uEntry; + } else return NewObject(); +} + +UTrackEntry* USpineSkeletonAnimationComponent::SetEmptyAnimation (int trackIndex, float mixDuration) { + CheckState(); + if (state) { + spTrackEntry* entry = spAnimationState_setEmptyAnimation(state, trackIndex, mixDuration); + UTrackEntry* uEntry = NewObject(); + uEntry->SetTrackEntry(entry); + trackEntries.Add(uEntry); + return uEntry; + } else return NewObject(); +} + +UTrackEntry* USpineSkeletonAnimationComponent::AddEmptyAnimation (int trackIndex, float mixDuration, float delay) { + CheckState(); + if (state) { + spTrackEntry* entry = spAnimationState_addEmptyAnimation(state, trackIndex, mixDuration, delay); + UTrackEntry* uEntry = NewObject(); + uEntry->SetTrackEntry(entry); + trackEntries.Add(uEntry); + return uEntry; + } else return NewObject(); +} + +UTrackEntry* USpineSkeletonAnimationComponent::GetCurrent (int trackIndex) { + CheckState(); + if (state) { + spTrackEntry* entry = spAnimationState_getCurrent(state, trackIndex); + if (entry->rendererObject) { + return (UTrackEntry*)entry->rendererObject; + } else { + UTrackEntry* uEntry = NewObject(); + uEntry->SetTrackEntry(entry); + trackEntries.Add(uEntry); + return uEntry; + } + } else return NewObject(); +} + +void USpineSkeletonAnimationComponent::ClearTracks () { + CheckState(); + if (state) { + spAnimationState_clearTracks(state); + } +} + +void USpineSkeletonAnimationComponent::ClearTrack (int trackIndex) { + CheckState(); + if (state) { + spAnimationState_clearTrack(state, trackIndex); + } +} + +#undef LOCTEXT_NAMESPACE diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonComponent.cpp new file mode 100644 index 000000000..050265f87 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonComponent.cpp @@ -0,0 +1,207 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#include "SpinePluginPrivatePCH.h" + +#define LOCTEXT_NAMESPACE "Spine" + +USpineSkeletonComponent::USpineSkeletonComponent () { + bWantsBeginPlay = true; + PrimaryComponentTick.bCanEverTick = true; + bTickInEditor = true; + bAutoActivate = true; +} + +bool USpineSkeletonComponent::SetSkin(const FString& skinName) { + CheckState(); + if (skeleton) return spSkeleton_setSkinByName(skeleton, TCHAR_TO_UTF8(*skinName)) != 0; + else return false; +} + +bool USpineSkeletonComponent::SetAttachment (const FString& slotName, const FString& attachmentName) { + CheckState(); + if (skeleton) return spSkeleton_setAttachment(skeleton, TCHAR_TO_UTF8(*slotName), TCHAR_TO_UTF8(*attachmentName)) != 0; + return false; +} + +FTransform USpineSkeletonComponent::GetBoneWorldTransform (const FString& BoneName) { + CheckState(); + if (skeleton) { + spBone* bone = spSkeleton_findBone(skeleton, TCHAR_TO_UTF8(*BoneName)); + if (!bone) return FTransform(); + if (!bone->appliedValid) this->InternalTick(0, false); + + // Need to fetch the renderer component to get world transform of actor plus + // offset by renderer component and its parent component(s). If no renderer + // component is found, this components owner's transform is used as a fallback + FTransform baseTransform; + AActor* owner = GetOwner(); + if (owner) { + USpineSkeletonRendererComponent* rendererComponent = static_cast(owner->GetComponentByClass(USpineSkeletonRendererComponent::StaticClass())); + if (rendererComponent) baseTransform = rendererComponent->GetComponentTransform(); + else baseTransform = owner->GetActorTransform(); + } + + FVector position(bone->worldX, 0, bone->worldY); + FMatrix localTransform; + localTransform.SetIdentity(); + localTransform.SetAxis(2, FVector(bone->a, 0, bone->c)); + localTransform.SetAxis(0, FVector(bone->b, 0, bone->d)); + localTransform.SetOrigin(FVector(bone->worldX, 0, bone->worldY)); + localTransform = localTransform * baseTransform.ToMatrixWithScale(); + + FTransform result; + result.SetFromMatrix(localTransform); + return result; + } + return FTransform(); +} + +void USpineSkeletonComponent::SetBoneWorldPosition (const FString& BoneName, const FVector& position) { + CheckState(); + if (skeleton) { + spBone* bone = spSkeleton_findBone(skeleton, TCHAR_TO_UTF8(*BoneName)); + if (!bone) return; + if (!bone->appliedValid) this->InternalTick(0, false); + + // Need to fetch the renderer component to get world transform of actor plus + // offset by renderer component and its parent component(s). If no renderer + // component is found, this components owner's transform is used as a fallback + FTransform baseTransform; + AActor* owner = GetOwner(); + if (owner) { + USpineSkeletonRendererComponent* rendererComponent = static_cast(owner->GetComponentByClass(USpineSkeletonRendererComponent::StaticClass())); + if (rendererComponent) baseTransform = rendererComponent->GetComponentTransform(); + else baseTransform = owner->GetActorTransform(); + } + + baseTransform = baseTransform.Inverse(); + FVector localPosition = baseTransform.TransformPosition(position); + float localX = 0, localY = 0; + if (bone->parent) { + spBone_worldToLocal(bone->parent, localPosition.X, localPosition.Z, &localX, &localY); + } else { + spBone_worldToLocal(bone, localPosition.X, localPosition.Z, &localX, &localY); + } + bone->x = localX; + bone->y = localY; + } +} + +void USpineSkeletonComponent::UpdateWorldTransform() { + CheckState(); + if (skeleton) { + spSkeleton_updateWorldTransform(skeleton); + } +} + +void USpineSkeletonComponent::SetToSetupPose () { + CheckState(); + if (skeleton) spSkeleton_setToSetupPose(skeleton); +} + +void USpineSkeletonComponent::SetBonesToSetupPose () { + CheckState(); + if (skeleton) spSkeleton_setBonesToSetupPose(skeleton); +} + +void USpineSkeletonComponent::SetSlotsToSetupPose () { + CheckState(); + if (skeleton) spSkeleton_setSlotsToSetupPose(skeleton); +} + +void USpineSkeletonComponent::SetFlipX (bool flipX) { + CheckState(); + if (skeleton) skeleton->flipX = flipX ? 1 : 0; +} + +bool USpineSkeletonComponent::GetFlipX() { + CheckState(); + if (skeleton) return skeleton->flipX != 0; + return false; +} + +void USpineSkeletonComponent::SetFlipY(bool flipY) { + CheckState(); + if (skeleton) skeleton->flipY = flipY ? 1 : 0; +} + +bool USpineSkeletonComponent::GetFlipY() { + CheckState(); + if (skeleton) return skeleton->flipY != 0; + return false; +} + +void USpineSkeletonComponent::BeginPlay() { + Super::BeginPlay(); +} + +void USpineSkeletonComponent::TickComponent (float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) { + Super::TickComponent(DeltaTime, TickType, ThisTickFunction); + InternalTick(DeltaTime); +} + +void USpineSkeletonComponent::InternalTick(float DeltaTime, bool CallDelegates) { + CheckState(); + + if (skeleton) { + if (CallDelegates) BeforeUpdateWorldTransform.Broadcast(this); + spSkeleton_updateWorldTransform(skeleton); + if (CallDelegates) AfterUpdateWorldTransform.Broadcast(this); + } +} + +void USpineSkeletonComponent::CheckState () { + if (lastAtlas != Atlas || lastData != SkeletonData) { + DisposeState(); + + if (Atlas && SkeletonData) { + spSkeletonData* data = SkeletonData->GetSkeletonData(Atlas->GetAtlas(false), false); + skeleton = spSkeleton_create(data); + } + + lastAtlas = Atlas; + lastData = SkeletonData; + } +} + +void USpineSkeletonComponent::DisposeState () { + if (skeleton) { + spSkeleton_dispose(skeleton); + skeleton = nullptr; + } +} + +void USpineSkeletonComponent::FinishDestroy () { + DisposeState(); + Super::FinishDestroy(); +} + +#undef LOCTEXT_NAMESPACE diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp new file mode 100644 index 000000000..b42a5c60e --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp @@ -0,0 +1,155 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#include "SpinePluginPrivatePCH.h" +#include "spine/spine.h" +#include +#include +#include + +#define LOCTEXT_NAMESPACE "Spine" + +FName USpineSkeletonDataAsset::GetSkeletonDataFileName () const { +#if WITH_EDITORONLY_DATA + TArray files; + if (importData) importData->ExtractFilenames(files); + if (files.Num() > 0) return FName(*files[0]); + else return skeletonDataFileName; +#else + return skeletonDataFileName; +#endif +} + +TArray& USpineSkeletonDataAsset::GetRawData () { + return this->rawData; +} + +#if WITH_EDITORONLY_DATA + +void USpineSkeletonDataAsset::SetSkeletonDataFileName (const FName &SkeletonDataFileName) { + importData->UpdateFilenameOnly(SkeletonDataFileName.ToString()); + TArray files; + importData->ExtractFilenames(files); + if (files.Num() > 0) this->skeletonDataFileName = FName(*files[0]); +} + +void USpineSkeletonDataAsset::PostInitProperties () { + if (!HasAnyFlags(RF_ClassDefaultObject)) importData = NewObject(this, TEXT("AssetImportData")); + Super::PostInitProperties(); +} + +void USpineSkeletonDataAsset::GetAssetRegistryTags (TArray& OutTags) const { + if (importData) { + OutTags.Add(FAssetRegistryTag(SourceFileTagName(), importData->GetSourceData().ToJson(), FAssetRegistryTag::TT_Hidden) ); + } + + Super::GetAssetRegistryTags(OutTags); +} + +void USpineSkeletonDataAsset::Serialize (FArchive& Ar) { + Super::Serialize(Ar); + if (Ar.IsLoading() && Ar.UE4Ver() < VER_UE4_ASSET_IMPORT_DATA_AS_JSON && !importData) + importData = NewObject(this, TEXT("AssetImportData")); +} + +void USpineSkeletonDataAsset::BeginDestroy () { + if (this->skeletonData) { + spSkeletonData_dispose(this->skeletonData); + this->skeletonData = nullptr; + } + if (this->animationStateData) { + spAnimationStateData_dispose(this->animationStateData); + this->animationStateData = nullptr; + } + Super::BeginDestroy(); +} + +spSkeletonData* USpineSkeletonDataAsset::GetSkeletonData (spAtlas* Atlas, bool ForceReload) { + if (!skeletonData || ForceReload) { + if (skeletonData) { + spSkeletonData_dispose(skeletonData); + skeletonData = nullptr; + } + int dataLen = rawData.Num(); + if (skeletonDataFileName.GetPlainNameString().Contains(TEXT(".json"))) { + spSkeletonJson* json = spSkeletonJson_create(Atlas); + this->skeletonData = spSkeletonJson_readSkeletonData(json, (const char*)rawData.GetData()); + spSkeletonJson_dispose(json); + } else { + spSkeletonBinary* binary = spSkeletonBinary_create(Atlas); + this->skeletonData = spSkeletonBinary_readSkeletonData(binary, (const unsigned char*)rawData.GetData(), (int)rawData.Num()); + spSkeletonBinary_dispose(binary); + } + if (animationStateData) { + spAnimationStateData_dispose(animationStateData); + GetAnimationStateData(Atlas); + } + lastAtlas = Atlas; + } + return this->skeletonData; +} + +spAnimationStateData* USpineSkeletonDataAsset::GetAnimationStateData(spAtlas* atlas) { + if (!animationStateData) { + spSkeletonData* skeletonData = GetSkeletonData(atlas, false); + animationStateData = spAnimationStateData_create(skeletonData); + } + for (auto& data : MixData) { + if (!data.From.IsEmpty() && !data.To.IsEmpty()) { + const char* fromChar = TCHAR_TO_UTF8(*data.From); + const char* toChar = TCHAR_TO_UTF8(*data.To); + spAnimationStateData_setMixByName(animationStateData, fromChar, toChar, data.Mix); + } + } + animationStateData->defaultMix = DefaultMix; + return this->animationStateData; +} + +void USpineSkeletonDataAsset::SetMix(const FString& from, const FString& to, float mix) { + FSpineAnimationStateMixData data; + data.From = from; + data.To = to; + data.Mix = mix; + this->MixData.Add(data); + if (lastAtlas) { + GetAnimationStateData(lastAtlas); + } +} + +float USpineSkeletonDataAsset::GetMix(const FString& from, const FString& to) { + for (auto& data : MixData) { + if (data.From.Equals(from) && data.To.Equals(to)) return data.Mix; + } + return 0; +} + +#endif + +#undef LOCTEXT_NAMESPACE diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp new file mode 100644 index 000000000..5c0e4570f --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp @@ -0,0 +1,326 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#include "SpinePluginPrivatePCH.h" +#include "Engine.h" +#include "spine/spine.h" +#include + +#define LOCTEXT_NAMESPACE "Spine" + +USpineSkeletonRendererComponent::USpineSkeletonRendererComponent (const FObjectInitializer& ObjectInitializer) +: UProceduralMeshComponent(ObjectInitializer) { + bWantsBeginPlay = true; + PrimaryComponentTick.bCanEverTick = true; + bTickInEditor = true; + bAutoActivate = true; + + static ConstructorHelpers::FObjectFinder NormalMaterialRef(TEXT("/SpinePlugin/SpineUnlitNormalMaterial")); + NormalBlendMaterial = NormalMaterialRef.Object; + + static ConstructorHelpers::FObjectFinder AdditiveMaterialRef(TEXT("/SpinePlugin/SpineUnlitAdditiveMaterial")); + AdditiveBlendMaterial = AdditiveMaterialRef.Object; + + static ConstructorHelpers::FObjectFinder MultiplyMaterialRef(TEXT("/SpinePlugin/SpineUnlitMultiplyMaterial")); + MultiplyBlendMaterial = MultiplyMaterialRef.Object; + + static ConstructorHelpers::FObjectFinder ScreenMaterialRef(TEXT("/SpinePlugin/SpineUnlitScreenMaterial")); + ScreenBlendMaterial = ScreenMaterialRef.Object; + + + TextureParameterName = FName(TEXT("SpriteTexture")); +} + +void USpineSkeletonRendererComponent::BeginPlay () { + Super::BeginPlay(); +} + +void USpineSkeletonRendererComponent::TickComponent (float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) { + Super::TickComponent(DeltaTime, TickType, ThisTickFunction); + + AActor* owner = GetOwner(); + if (owner) { + UClass* skeletonClass = USpineSkeletonComponent::StaticClass(); + USpineSkeletonComponent* skeleton = Cast(owner->GetComponentByClass(skeletonClass)); + + if (skeleton && !skeleton->IsBeingDestroyed() && skeleton->GetSkeleton() && skeleton->Atlas) { + if (atlasNormalBlendMaterials.Num() != skeleton->Atlas->atlasPages.Num()) { + atlasNormalBlendMaterials.SetNum(0); + pageToNormalBlendMaterial.Empty(); + atlasAdditiveBlendMaterials.SetNum(0); + pageToAdditiveBlendMaterial.Empty(); + atlasMultiplyBlendMaterials.SetNum(0); + pageToMultiplyBlendMaterial.Empty(); + atlasScreenBlendMaterials.SetNum(0); + pageToScreenBlendMaterial.Empty(); + + spAtlasPage* currPage = skeleton->Atlas->GetAtlas(false)->pages; + for (int i = 0; i < skeleton->Atlas->atlasPages.Num(); i++) { + + UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(NormalBlendMaterial, owner); + material->SetTextureParameterValue(TextureParameterName, skeleton->Atlas->atlasPages[i]); + atlasNormalBlendMaterials.Add(material); + pageToNormalBlendMaterial.Add(currPage, material); + + material = UMaterialInstanceDynamic::Create(AdditiveBlendMaterial, owner); + material->SetTextureParameterValue(TextureParameterName, skeleton->Atlas->atlasPages[i]); + atlasAdditiveBlendMaterials.Add(material); + pageToAdditiveBlendMaterial.Add(currPage, material); + + material = UMaterialInstanceDynamic::Create(MultiplyBlendMaterial, owner); + material->SetTextureParameterValue(TextureParameterName, skeleton->Atlas->atlasPages[i]); + atlasMultiplyBlendMaterials.Add(material); + pageToMultiplyBlendMaterial.Add(currPage, material); + + material = UMaterialInstanceDynamic::Create(ScreenBlendMaterial, owner); + material->SetTextureParameterValue(TextureParameterName, skeleton->Atlas->atlasPages[i]); + atlasScreenBlendMaterials.Add(material); + pageToScreenBlendMaterial.Add(currPage, material); + + currPage = currPage->next; + } + } else { + pageToNormalBlendMaterial.Empty(); + pageToAdditiveBlendMaterial.Empty(); + pageToMultiplyBlendMaterial.Empty(); + pageToScreenBlendMaterial.Empty(); + + spAtlasPage* currPage = skeleton->Atlas->GetAtlas(false)->pages; + for (int i = 0; i < skeleton->Atlas->atlasPages.Num(); i++) { + UTexture2D* texture = skeleton->Atlas->atlasPages[i]; + UTexture* oldTexture = nullptr; + + UMaterialInstanceDynamic* current = atlasNormalBlendMaterials[i]; + if(!current || !current->GetTextureParameterValue(TextureParameterName, oldTexture) || oldTexture != texture) { + UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(NormalBlendMaterial, owner); + material->SetTextureParameterValue(TextureParameterName, texture); + atlasNormalBlendMaterials[i] = material; + } + pageToNormalBlendMaterial.Add(currPage, atlasNormalBlendMaterials[i]); + + current = atlasAdditiveBlendMaterials[i]; + if(!current || !current->GetTextureParameterValue(TextureParameterName, oldTexture) || oldTexture != texture) { + UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(AdditiveBlendMaterial, owner); + material->SetTextureParameterValue(TextureParameterName, texture); + atlasAdditiveBlendMaterials[i] = material; + } + pageToAdditiveBlendMaterial.Add(currPage, atlasAdditiveBlendMaterials[i]); + + current = atlasMultiplyBlendMaterials[i]; + if(!current || !current->GetTextureParameterValue(TextureParameterName, oldTexture) || oldTexture != texture) { + UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(MultiplyBlendMaterial, owner); + material->SetTextureParameterValue(TextureParameterName, texture); + atlasMultiplyBlendMaterials[i] = material; + } + pageToMultiplyBlendMaterial.Add(currPage, atlasMultiplyBlendMaterials[i]); + + current = atlasScreenBlendMaterials[i]; + if(!current || !current->GetTextureParameterValue(TextureParameterName, oldTexture) || oldTexture != texture) { + UMaterialInstanceDynamic* material = UMaterialInstanceDynamic::Create(ScreenBlendMaterial, owner); + material->SetTextureParameterValue(TextureParameterName, texture); + atlasScreenBlendMaterials[i] = material; + } + pageToScreenBlendMaterial.Add(currPage, atlasScreenBlendMaterials[i]); + + currPage = currPage->next; + } + } + UpdateMesh(skeleton->GetSkeleton()); + } else { + ClearAllMeshSections(); + } + } +} + +void USpineSkeletonRendererComponent::Flush (int &Idx, TArray &Vertices, TArray &Indices, TArray &Uvs, TArray &Colors, UMaterialInstanceDynamic* Material) { + if (Vertices.Num() == 0) return; + SetMaterial(Idx, Material); + CreateMeshSection(Idx, Vertices, Indices, TArray(), Uvs, Colors, TArray(), false); + Vertices.SetNum(0); + Indices.SetNum(0); + Uvs.SetNum(0); + Colors.SetNum(0); + Idx++; +} + +void USpineSkeletonRendererComponent::UpdateMesh(spSkeleton* Skeleton) { + TArray vertices; + TArray indices; + TArray uvs; + TArray colors; + + TArray worldVertices; + worldVertices.SetNumUninitialized(2 * 1024); + int idx = 0; + int meshSection = 0; + UMaterialInstanceDynamic* lastMaterial = nullptr; + + ClearAllMeshSections(); + + float depthOffset = 0; + + for (int i = 0; i < Skeleton->slotsCount; ++i) { + spSlot* slot = Skeleton->drawOrder[i]; + spAttachment* attachment = slot->attachment; + if (!attachment) continue; + + if (attachment->type == SP_ATTACHMENT_REGION) { + spRegionAttachment* regionAttachment = (spRegionAttachment*)attachment; + spAtlasRegion* region = (spAtlasRegion*)regionAttachment->rendererObject; + + UMaterialInstanceDynamic* material = nullptr; + + // if the user switches the atlas data while not having switched + // to the correct skeleton data yet, we won't find any regions. + // ignore regions for which we can't find a material + switch(slot->data->blendMode) { + case SP_BLEND_MODE_NORMAL: + if (!pageToNormalBlendMaterial.Contains(region->page)) continue; + material = pageToNormalBlendMaterial[region->page]; + break; + case SP_BLEND_MODE_ADDITIVE: + if (!pageToAdditiveBlendMaterial.Contains(region->page)) continue; + material = pageToAdditiveBlendMaterial[region->page]; + break; + case SP_BLEND_MODE_MULTIPLY: + if (!pageToMultiplyBlendMaterial.Contains(region->page)) continue; + material = pageToMultiplyBlendMaterial[region->page]; + break; + case SP_BLEND_MODE_SCREEN: + if (!pageToScreenBlendMaterial.Contains(region->page)) continue; + material = pageToScreenBlendMaterial[region->page]; + break; + default: + if (!pageToNormalBlendMaterial.Contains(region->page)) continue; + material = pageToNormalBlendMaterial[region->page]; + } + + if (lastMaterial != material) { + Flush(meshSection, vertices, indices, uvs, colors, lastMaterial); + lastMaterial = material; + idx = 0; + } + + spRegionAttachment_computeWorldVertices(regionAttachment, slot->bone, worldVertices.GetData()); + + uint8 r = static_cast(Skeleton->r * slot->r * 255); + uint8 g = static_cast(Skeleton->g * slot->g * 255); + uint8 b = static_cast(Skeleton->b * slot->b * 255); + uint8 a = static_cast(Skeleton->a * slot->a * 255); + + colors.Add(FColor(r, g, b, a)); + vertices.Add(FVector(worldVertices[0], depthOffset, worldVertices[1])); + uvs.Add(FVector2D(regionAttachment->uvs[0], regionAttachment->uvs[1])); + + colors.Add(FColor(r, g, b, a)); + vertices.Add(FVector(worldVertices[2], depthOffset, worldVertices[3])); + uvs.Add(FVector2D(regionAttachment->uvs[2], regionAttachment->uvs[3])); + + colors.Add(FColor(r, g, b, a)); + vertices.Add(FVector(worldVertices[4], depthOffset, worldVertices[5])); + uvs.Add(FVector2D(regionAttachment->uvs[4], regionAttachment->uvs[5])); + + colors.Add(FColor(r, g, b, a)); + vertices.Add(FVector(worldVertices[6], depthOffset, worldVertices[7])); + uvs.Add(FVector2D(regionAttachment->uvs[6], regionAttachment->uvs[7])); + + indices.Add(idx + 0); + indices.Add(idx + 1); + indices.Add(idx + 2); + indices.Add(idx + 0); + indices.Add(idx + 2); + indices.Add(idx + 3); + idx += 4; + depthOffset += this->DepthOffset; + } else if (attachment->type == SP_ATTACHMENT_MESH) { + spMeshAttachment* mesh = (spMeshAttachment*)attachment; + spAtlasRegion* region = (spAtlasRegion*)mesh->rendererObject; + UMaterialInstanceDynamic* material = nullptr; + + // if the user switches the atlas data while not having switched + // to the correct skeleton data yet, we won't find any regions. + // ignore regions for which we can't find a material + switch(slot->data->blendMode) { + case SP_BLEND_MODE_NORMAL: + if (!pageToNormalBlendMaterial.Contains(region->page)) continue; + material = pageToNormalBlendMaterial[region->page]; + break; + case SP_BLEND_MODE_ADDITIVE: + if (!pageToAdditiveBlendMaterial.Contains(region->page)) continue; + material = pageToAdditiveBlendMaterial[region->page]; + break; + case SP_BLEND_MODE_MULTIPLY: + if (!pageToMultiplyBlendMaterial.Contains(region->page)) continue; + material = pageToMultiplyBlendMaterial[region->page]; + break; + case SP_BLEND_MODE_SCREEN: + if (!pageToScreenBlendMaterial.Contains(region->page)) continue; + material = pageToScreenBlendMaterial[region->page]; + break; + default: + if (!pageToNormalBlendMaterial.Contains(region->page)) continue; + material = pageToNormalBlendMaterial[region->page]; + } + + if (lastMaterial != material) { + Flush(meshSection, vertices, indices, uvs, colors, lastMaterial); + lastMaterial = material; + idx = 0; + } + + if (mesh->super.worldVerticesLength> worldVertices.Num()) { + worldVertices.SetNum(mesh->super.worldVerticesLength); + } + spMeshAttachment_computeWorldVertices(mesh, slot, worldVertices.GetData()); + + uint8 r = static_cast(Skeleton->r * slot->r * 255); + uint8 g = static_cast(Skeleton->g * slot->g * 255); + uint8 b = static_cast(Skeleton->b * slot->b * 255); + uint8 a = static_cast(Skeleton->a * slot->a * 255); + + for (int j = 0; j < mesh->super.worldVerticesLength; j += 2) { + colors.Add(FColor(r, g, b, a)); + vertices.Add(FVector(worldVertices[j], depthOffset, worldVertices[j + 1])); + uvs.Add(FVector2D(mesh->uvs[j], mesh->uvs[j + 1])); + } + + for (int j = 0; j < mesh->trianglesCount; j++) { + indices.Add(idx + mesh->triangles[j]); + } + idx += mesh->super.worldVerticesLength >> 1; + depthOffset += this->DepthOffset; + SetMaterial(meshSection, material); + } + } + + Flush(meshSection, vertices, indices, uvs, colors, lastMaterial); +} + +#undef LOCTEXT_NAMESPACE diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineAtlasAsset.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineAtlasAsset.h new file mode 100644 index 000000000..1c273a230 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineAtlasAsset.h @@ -0,0 +1,76 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#pragma once + +#include "Engine.h" +#include "spine/spine.h" +#include "SpineAtlasAsset.generated.h" + +UCLASS(ClassGroup=(Spine)) +class SPINEPLUGIN_API USpineAtlasAsset: public UObject { + GENERATED_BODY() + +public: + spAtlas* GetAtlas (bool ForceReload = false); + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TArray atlasPages; + + FString GetRawData () const; + + FName GetAtlasFileName () const; + + virtual void BeginDestroy () override; + +protected: + spAtlas* atlas = nullptr; + + UPROPERTY() + FString rawData; + + UPROPERTY() + FName atlasFileName; + +#if WITH_EDITORONLY_DATA + +public: + void SetRawData (const FString &RawData); + void SetAtlasFileName (const FName &AtlasFileName); + +protected: + UPROPERTY(VisibleAnywhere, Instanced, Category=ImportSettings) + class UAssetImportData* importData; + + virtual void PostInitProperties ( ) override; + virtual void GetAssetRegistryTags(TArray& OutTags) const override; + virtual void Serialize (FArchive& Ar) override; +#endif +}; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineBoneDriverComponent.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineBoneDriverComponent.h new file mode 100644 index 000000000..24e98cbf2 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineBoneDriverComponent.h @@ -0,0 +1,69 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#pragma once + +#include "Components/ActorComponent.h" +#include "SpineBoneDriverComponent.generated.h" + +class USpineSkeletonComponent; + +UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent)) +class SPINEPLUGIN_API USpineBoneDriverComponent : public UActorComponent { + GENERATED_BODY() + +public: + UPROPERTY(EditAnywhere, BlueprintReadWrite) + AActor* Target = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + FString BoneName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + bool UsePosition = true; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + bool UseRotation = true; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + bool UseScale = true; + + USpineBoneDriverComponent(); + + virtual void BeginPlay() override; + + virtual void TickComponent( float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction ) override; + +protected: + UFUNCTION() + void BeforeUpdateWorldTransform(USpineSkeletonComponent* skeleton); + + USpineSkeletonComponent* lastBoundComponent = nullptr; +}; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineBoneFollowerComponent.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineBoneFollowerComponent.h new file mode 100644 index 000000000..d0e85e9c2 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineBoneFollowerComponent.h @@ -0,0 +1,62 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#pragma once + +#include "Components/ActorComponent.h" +#include "SpineBoneFollowerComponent.generated.h" + + +UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent)) +class SPINEPLUGIN_API USpineBoneFollowerComponent : public UActorComponent { + GENERATED_BODY() + +public: + UPROPERTY(EditAnywhere, BlueprintReadWrite) + AActor* Target = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + FString BoneName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + bool UsePosition = true; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + bool UseRotation = true; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + bool UseScale = true; + + USpineBoneFollowerComponent (); + + virtual void BeginPlay () override; + + virtual void TickComponent (float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; +}; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpinePlugin.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpinePlugin.h new file mode 100644 index 000000000..6011f932d --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpinePlugin.h @@ -0,0 +1,47 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#pragma once + +#include "ModuleManager.h" + +class SPINEPLUGIN_API SpinePlugin : public IModuleInterface { + +public: + + static inline SpinePlugin& Get() { + return FModuleManager::LoadModuleChecked< SpinePlugin >( "SpinePlugin" ); + } + + static inline bool IsAvailable() { + return FModuleManager::Get().IsModuleLoaded( "SpinePlugin" ); + } +}; + diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h new file mode 100644 index 000000000..e551e9bd6 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h @@ -0,0 +1,278 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#pragma once + +#include "Components/ActorComponent.h" +#include "SpineSkeletonComponent.h" +#include "spine/spine.h" +#include "SpineSkeletonAnimationComponent.generated.h" + +USTRUCT(BlueprintType, Category="Spine") +struct SPINEPLUGIN_API FSpineEvent { + GENERATED_BODY(); + +public: + void SetEvent(spEvent* event) { + Name = FString(UTF8_TO_TCHAR(event->data->name)); + if (event->stringValue) { + StringValue = FString(UTF8_TO_TCHAR(event->stringValue)); + } + this->IntValue = event->intValue; + this->FloatValue = event->floatValue; + this->Time = event->time; + } + + UPROPERTY(BlueprintReadonly) + FString Name; + + UPROPERTY(BlueprintReadOnly) + FString StringValue; + + UPROPERTY(BlueprintReadOnly) + int IntValue; + + UPROPERTY(BlueprintReadOnly) + float FloatValue; + + UPROPERTY(BlueprintReadOnly) + float Time; +}; + +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FSpineAnimationStartDelegate, UTrackEntry*, entry); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FSpineAnimationEventDelegate, UTrackEntry*, entry, FSpineEvent, evt); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FSpineAnimationInterruptDelegate, UTrackEntry*, entry); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FSpineAnimationCompleteDelegate, UTrackEntry*, entry); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FSpineAnimationEndDelegate, UTrackEntry*, entry); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FSpineAnimationDisposeDelegate, UTrackEntry*, entry); + +UCLASS(ClassGroup=(Spine), meta=(BlueprintSpawnableComponent), BlueprintType) +class SPINEPLUGIN_API UTrackEntry: public UObject { + GENERATED_BODY () + +public: + + UTrackEntry () { } + + void SetTrackEntry (spTrackEntry* entry); + spTrackEntry* GetTrackEntry(); + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + int GetTrackIndex () { return entry ? entry->trackIndex : 0; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + bool GetLoop () { return entry ? entry->loop != 0 : false; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetLoop (bool loop) { if (entry) entry->loop = loop ? 1 : 0; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetEventThreshold () { return entry ? entry->eventThreshold : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetEventThreshold(float eventThreshold) { if (entry) entry->eventThreshold = eventThreshold; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetAttachmentThreshold() { return entry ? entry->attachmentThreshold : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetAttachmentThreshold(float attachmentThreshold) { if (entry) entry->attachmentThreshold = attachmentThreshold; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetDrawOrderThreshold() { return entry ? entry->drawOrderThreshold : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetDrawOrderThreshold(float drawOrderThreshold) { if (entry) entry->drawOrderThreshold = drawOrderThreshold; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetAnimationStart() { return entry ? entry->animationStart : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetAnimationStart(float animationStart) { if (entry) entry->animationStart = animationStart; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetAnimationEnd() { return entry ? entry->animationEnd : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetAnimationEnd(float animationEnd) { if (entry) entry->animationEnd = animationEnd; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetAnimationLast() { return entry ? entry->animationLast : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetAnimationLast(float animationLast) { if (entry) entry->animationLast = animationLast; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetNextAnimationLast() { return entry ? entry->nextAnimationLast : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetNextAnimationLast(float nextAnimationLast) { if (entry) entry->nextAnimationLast = nextAnimationLast; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetDelay() { return entry ? entry->delay : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetDelay(float delay) { if (entry) entry->delay = delay; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetTrackTime() { return entry ? entry->trackTime : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetTrackTime(float trackTime) { if (entry) entry->trackTime = trackTime; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetTrackLast() { return entry ? entry->trackLast : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetTrackLast(float trackLast) { if (entry) entry->trackLast = trackLast; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetNextTrackLast() { return entry ? entry->nextTrackLast : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetNextTrackLast(float nextTrackLast) { if (entry) entry->nextTrackLast = nextTrackLast; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetTrackEnd() { return entry ? entry->trackEnd : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetTrackEnd(float trackEnd) { if (entry) entry->trackEnd = trackEnd; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetTimeScale() { return entry ? entry->timeScale : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetTimeScale(float timeScale) { if (entry) entry->timeScale = timeScale; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetAlpha() { return entry ? entry->alpha : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetAlpha(float alpha) { if (entry) entry->alpha = alpha; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetMixTime() { return entry ? entry->mixTime : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetMixTime(float mixTime) { if (entry) entry->mixTime = mixTime; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetMixDuration() { return entry ? entry->mixDuration : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetMixDuration(float mixDuration) { if (entry) entry->mixDuration = mixDuration; } + + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + float GetMixAlpha() { return entry ? entry->mixAlpha : 0; } + UFUNCTION(BlueprintCallable, Category="Components|Spine|TrackEntry") + void SetMixAlpha(float mixAlpha) { if (entry) entry->mixAlpha = mixAlpha; } + + UPROPERTY(BlueprintAssignable, Category = "Components|Spine|TrackEntry") + FSpineAnimationStartDelegate AnimationStart; + + UPROPERTY(BlueprintAssignable, Category = "Components|Spine|TrackEntry") + FSpineAnimationInterruptDelegate AnimationInterrupt; + + UPROPERTY(BlueprintAssignable, Category = "Components|Spine|TrackEntry") + FSpineAnimationEventDelegate AnimationEvent; + + UPROPERTY(BlueprintAssignable, Category = "Components|Spine|TrackEntry") + FSpineAnimationCompleteDelegate AnimationComplete; + + UPROPERTY(BlueprintAssignable, Category = "Components|Spine|TrackEntry") + FSpineAnimationEndDelegate AnimationEnd; + + UPROPERTY(BlueprintAssignable, Category = "Components|Spine|TrackEntry") + FSpineAnimationDisposeDelegate AnimationDispose; + +protected: + spTrackEntry* entry = nullptr; +}; + +class USpineAtlasAsset; +UCLASS(ClassGroup=(Spine), meta=(BlueprintSpawnableComponent)) +class SPINEPLUGIN_API USpineSkeletonAnimationComponent: public USpineSkeletonComponent { + GENERATED_BODY() + +public: + spAnimationState* GetAnimationState () { return state; }; + + USpineSkeletonAnimationComponent (); + + virtual void BeginPlay () override; + + virtual void TickComponent (float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; + + virtual void FinishDestroy () override; + + // Blueprint functions + UFUNCTION(BlueprintCallable, Category="Components|Spine|Animation") + void SetTimeScale(float timeScale); + + UFUNCTION(BlueprintCallable, Category="Components|Spine|Animation") + float GetTimeScale(); + + UFUNCTION(BlueprintCallable, Category="Components|Spine|Animation") + UTrackEntry* SetAnimation (int trackIndex, FString animationName, bool loop); + + UFUNCTION(BlueprintCallable, Category="Components|Spine|Animation") + UTrackEntry* AddAnimation (int trackIndex, FString animationName, bool loop, float delay); + + UFUNCTION(BlueprintCallable, Category="Components|Spine|Animation") + UTrackEntry* SetEmptyAnimation (int trackIndex, float mixDuration); + + UFUNCTION(BlueprintCallable, Category="Components|Spine|Animation") + UTrackEntry* AddEmptyAnimation (int trackIndex, float mixDuration, float delay); + + UFUNCTION(BlueprintCallable, Category="Components|Spine|Animation") + UTrackEntry* GetCurrent (int trackIndex); + + UFUNCTION(BlueprintCallable, Category="Components|Spine|Animation") + void ClearTracks (); + + UFUNCTION(BlueprintCallable, Category="Components|Spine|Animation") + void ClearTrack (int trackIndex); + + UPROPERTY(BlueprintAssignable, Category="Components|Spine|Animation") + FSpineAnimationStartDelegate AnimationStart; + + UPROPERTY(BlueprintAssignable, Category="Components|Spine|Animation") + FSpineAnimationInterruptDelegate AnimationInterrupt; + + UPROPERTY(BlueprintAssignable, Category="Components|Spine|Animation") + FSpineAnimationEventDelegate AnimationEvent; + + UPROPERTY(BlueprintAssignable, Category="Components|Spine|Animation") + FSpineAnimationCompleteDelegate AnimationComplete; + + UPROPERTY(BlueprintAssignable, Category="Components|Spine|Animation") + FSpineAnimationEndDelegate AnimationEnd; + + UPROPERTY(BlueprintAssignable, Category="Components|Spine|Animation") + FSpineAnimationDisposeDelegate AnimationDispose; + + // used in C event callback. Needs to be public as we can't call + // protected methods from plain old C function. + void GCTrackEntry(UTrackEntry* entry) { trackEntries.Remove(entry); } +protected: + virtual void CheckState () override; + virtual void InternalTick(float DeltaTime, bool CallDelegates = true) override; + virtual void DisposeState () override; + + spAnimationState* state; + + // keep track of track entries so they won't get GCed while + // in transit within a blueprint + UPROPERTY() + TSet trackEntries; +}; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h new file mode 100644 index 000000000..182a02ae1 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h @@ -0,0 +1,114 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#pragma once + +#include "Components/ActorComponent.h" +#include "spine/spine.h" +#include "SpineSkeletonComponent.generated.h" + +class USpineSkeletonComponent; + +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FSpineBeforeUpdateWorldTransformDelegate, USpineSkeletonComponent*, skeleton); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FSpineAfterUpdateWorldTransformDelegate, USpineSkeletonComponent*, skeleton); + +class USpineAtlasAsset; +UCLASS(ClassGroup=(Spine), meta=(BlueprintSpawnableComponent)) +class SPINEPLUGIN_API USpineSkeletonComponent: public UActorComponent { + GENERATED_BODY() + +public: + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Spine) + USpineAtlasAsset* Atlas; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Spine) + USpineSkeletonDataAsset* SkeletonData; + + spSkeleton* GetSkeleton () { return skeleton; }; + + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + bool SetSkin (const FString& SkinName); + + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + bool SetAttachment (const FString& slotName, const FString& attachmentName); + + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + FTransform GetBoneWorldTransform (const FString& BoneName); + + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + void SetBoneWorldPosition (const FString& BoneName, const FVector& position); + + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + void UpdateWorldTransform(); + + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + void SetToSetupPose (); + + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + void SetBonesToSetupPose (); + + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + void SetSlotsToSetupPose(); + + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + void SetFlipX(bool flipX); + + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + bool GetFlipX(); + + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + void SetFlipY(bool flipY); + + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + bool GetFlipY(); + + UPROPERTY(BlueprintAssignable, Category = "Components|Spine|Skeleton") + FSpineBeforeUpdateWorldTransformDelegate BeforeUpdateWorldTransform; + + UPROPERTY(BlueprintAssignable, Category = "Components|Spine|Skeleton") + FSpineAfterUpdateWorldTransformDelegate AfterUpdateWorldTransform; + + USpineSkeletonComponent (); + + virtual void BeginPlay () override; + + virtual void TickComponent (float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; + + virtual void FinishDestroy () override; + +protected: + virtual void CheckState (); + virtual void InternalTick(float DeltaTime, bool CallDelegates = true); + virtual void DisposeState (); + + spSkeleton* skeleton; + USpineAtlasAsset* lastAtlas = nullptr; + USpineSkeletonDataAsset* lastData = nullptr; +}; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h new file mode 100644 index 000000000..aa8b4df03 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h @@ -0,0 +1,97 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#pragma once + +#include "Engine.h" +#include "spine/spine.h" +#include "SpineSkeletonDataAsset.generated.h" + +USTRUCT(BlueprintType, Category = "Spine") +struct SPINEPLUGIN_API FSpineAnimationStateMixData { + GENERATED_BODY(); + +public: + UPROPERTY(EditAnywhere, BlueprintReadWrite) + FString From; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + FString To; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + float Mix = 0; +}; + +UCLASS(ClassGroup=(Spine)) +class SPINEPLUGIN_API USpineSkeletonDataAsset: public UObject { + GENERATED_BODY() + +public: + spSkeletonData* GetSkeletonData(spAtlas* Atlas, bool ForceReload = false); + + spAnimationStateData* GetAnimationStateData(spAtlas* atlas); + void SetMix(const FString& from, const FString& to, float mix); + float GetMix(const FString& from, const FString& to); + + FName GetSkeletonDataFileName () const; + TArray& GetRawData (); + + virtual void BeginDestroy () override; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + float DefaultMix = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TArray MixData; + +protected: + UPROPERTY() + TArray rawData; + + UPROPERTY() + FName skeletonDataFileName; + + spSkeletonData* skeletonData; + spAnimationStateData* animationStateData; + spAtlas* lastAtlas; + +#if WITH_EDITORONLY_DATA +public: + void SetSkeletonDataFileName (const FName &skeletonDataFileName); + +protected: + UPROPERTY(VisibleAnywhere, Instanced, Category=ImportSettings) + class UAssetImportData* importData; + + virtual void PostInitProperties ( ) override; + virtual void GetAssetRegistryTags(TArray& OutTags) const override; + virtual void Serialize (FArchive& Ar) override; +#endif +}; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonRendererComponent.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonRendererComponent.h new file mode 100644 index 000000000..fbe631885 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonRendererComponent.h @@ -0,0 +1,89 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#pragma once + +#include "Components/ActorComponent.h" +#include "ProceduralMeshComponent.h" +#include "SpineSkeletonAnimationComponent.h" +#include "SpineSkeletonRendererComponent.generated.h" + + +UCLASS(ClassGroup=(Spine), meta=(BlueprintSpawnableComponent)) +class SPINEPLUGIN_API USpineSkeletonRendererComponent: public UProceduralMeshComponent { + GENERATED_BODY() + +public: + USpineSkeletonRendererComponent (const FObjectInitializer& ObjectInitializer); + + virtual void BeginPlay () override; + + virtual void TickComponent (float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; + + UPROPERTY(Category = Spine, EditAnywhere, BlueprintReadOnly) + UMaterialInterface* NormalBlendMaterial; + + UPROPERTY(Category = Spine, EditAnywhere, BlueprintReadOnly) + UMaterialInterface* AdditiveBlendMaterial; + + UPROPERTY(Category = Spine, EditAnywhere, BlueprintReadOnly) + UMaterialInterface* MultiplyBlendMaterial; + + UPROPERTY(Category = Spine, EditAnywhere, BlueprintReadOnly) + UMaterialInterface* ScreenBlendMaterial; + + UPROPERTY(Category = Spine, EditAnywhere, BlueprintReadWrite) + float DepthOffset = 0.1f; + + UPROPERTY(Category = Spine, EditAnywhere, BlueprintReadWrite) + FName TextureParameterName; + +protected: + void UpdateMesh (spSkeleton* Skeleton); + + void Flush (int &Idx, TArray &Vertices, TArray &Indices, TArray &Uvs, TArray &Colors, UMaterialInstanceDynamic* Material); + + // Need to hold on to the dynamic instances, or the GC will kill us while updating them + UPROPERTY() + TArray atlasNormalBlendMaterials; + TMap pageToNormalBlendMaterial; + + UPROPERTY() + TArray atlasAdditiveBlendMaterials; + TMap pageToAdditiveBlendMaterial; + + UPROPERTY() + TArray atlasMultiplyBlendMaterials; + TMap pageToMultiplyBlendMaterial; + + UPROPERTY() + TArray atlasScreenBlendMaterials; + TMap pageToScreenBlendMaterial; +}; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/SpinePlugin.Build.cs b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/SpinePlugin.Build.cs new file mode 100644 index 000000000..dc8524d4d --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/SpinePlugin.Build.cs @@ -0,0 +1,15 @@ +// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved. + +namespace UnrealBuildTool.Rules +{ + public class SpinePlugin : ModuleRules + { + public SpinePlugin(TargetInfo Target) + { + PublicIncludePaths.AddRange(new string[] { "SpinePlugin/Public", "SpinePlugin/Public/spine-c/include" }); + PrivateIncludePaths.AddRange(new string[] { "SpinePlugin/Private", "SpinePlugin/Public/spine-c/include" }); + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "RHI", "RenderCore", "ShaderCore", "ProceduralMeshComponent" }); + OptimizeCode = CodeOptimization.Never; + } + } +} \ No newline at end of file diff --git a/spine-ue4/Plugins/SpinePlugin/SpinePlugin.uplugin b/spine-ue4/Plugins/SpinePlugin/SpinePlugin.uplugin new file mode 100644 index 000000000..144586253 --- /dev/null +++ b/spine-ue4/Plugins/SpinePlugin/SpinePlugin.uplugin @@ -0,0 +1,29 @@ +{ + "FileVersion" : 3, + "Version" : 1, + "VersionName" : "1.0", + "FriendlyName" : "Spine Plugin", + "Description" : "A plugin to load and render Spine animations in Unreal Engine", + "Category" : "2D", + "CreatedBy" : "Esoteric Software", + "CreatedByURL" : "http://esotericsoftware.com", + "DocsURL" : "", + "MarketplaceURL" : "", + "SupportURL" : "", + "EnabledByDefault" : true, + "CanContainContent" : true, + "IsBetaVersion" : false, + "Installed" : false, + "Modules" : + [ + { + "Name" : "SpinePlugin", + "Type" : "Runtime", + "LoadingPhase" : "PreDefault" + }, + { + "Name" : "SpineEditorPlugin", + "Type" : "Editor" + } + ] +} diff --git a/spine-ue4/README.md b/spine-ue4/README.md new file mode 100644 index 000000000..6cfa5c09d --- /dev/null +++ b/spine-ue4/README.md @@ -0,0 +1,35 @@ +# spine-ue4 +The spine-ue4 runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using [Unreal Engine 4](https://www.unrealengine.com/). spine-ue4 is based on [spine-c](https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-c). + +## Licensing + +This Spine Runtime may only be used for personal or internal use, typically to evaluate Spine before purchasing. If you would like to incorporate a Spine Runtime into your applications, distribute software containing a Spine Runtime, or modify a Spine Runtime, then you will need a valid [Spine license](https://esotericsoftware.com/spine-purchase). Please see the [Spine Runtimes Software License](https://github.com/EsotericSoftware/spine-runtimes/blob/master/LICENSE) for detailed information. + +The Spine Runtimes are developed with the intent to be used with data exported from Spine. By purchasing Spine, `Section 2` of the [Spine Software License](https://esotericsoftware.com/files/license.txt) grants the right to create and distribute derivative works of the Spine Runtimes. + +## Spine version + +spine-ue4 works with data exported from Spine 3.4.02. + +spine-ue4 supports all Spine features. + +spine-ue4 does not support multiply and screen blending. spine-ue4 does not support pre-multiplied alpha atlases. + +## Usage +### [Please see the spine-ue4 guide for full documentation](http://esotericsoftware.com/spine-ue4) + +1. Create a new Unreal Engine code project. You don't need to write C++, but the code project is needed for the plugin to compile. See the [Unreal Engine documentation](https://docs.unrealengine.com/latest/INT/) or have a look at the example in this repository. +2. Download the Spine Runtimes source using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip) +3. Copy the `Plugins` folder from this directory to your new project's root directory. +4. Copy the `spine-c` folder from this repositories root directory to your project's `Plugins/SpinePlugin/Sources/SpinePlugin/Public/` directory. +5. Open the Unreal Project in the Unreal Editor + +See the [Spine Runtimes documentation](http://esotericsoftware.com/spine-documentation#runtimesTitle) on how to use the APIs or check out the Spine UE4 example. + +## Example +### [Please see the spine-ue4 guide for full documentation](http://esotericsoftware.com/spine-ue4) + +The Spine UE4 example works on all platforms supported by Unreal Engine. + +1. Copy the `spine-c` folder from this repositories root directory to your `Plugins/SpinePlugin/Sources/SpinePlugin/Public/` directory. +2. Open the SpineUE4.uproject file with Unreal Editor diff --git a/spine-ue4/Source/SpineUE4.Target.cs b/spine-ue4/Source/SpineUE4.Target.cs new file mode 100644 index 000000000..c5288c9b5 --- /dev/null +++ b/spine-ue4/Source/SpineUE4.Target.cs @@ -0,0 +1,25 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class SpineUE4Target : TargetRules +{ + public SpineUE4Target(TargetInfo Target) + { + Type = TargetType.Game; + } + + // + // TargetRules interface. + // + + public override void SetupBinaries( + TargetInfo Target, + ref List OutBuildBinaryConfigurations, + ref List OutExtraModuleNames + ) + { + OutExtraModuleNames.AddRange( new string[] { "SpineUE4" } ); + } +} diff --git a/spine-ue4/Source/SpineUE4/SpineUE4.Build.cs b/spine-ue4/Source/SpineUE4/SpineUE4.Build.cs new file mode 100644 index 000000000..08f863be8 --- /dev/null +++ b/spine-ue4/Source/SpineUE4/SpineUE4.Build.cs @@ -0,0 +1,21 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; + +public class SpineUE4 : ModuleRules +{ + public SpineUE4(TargetInfo Target) + { + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "ProceduralMeshComponent" }); + + PrivateDependencyModuleNames.AddRange(new string[] { }); + + // Uncomment if you are using Slate UI + // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); + + // Uncomment if you are using online features + // PrivateDependencyModuleNames.Add("OnlineSubsystem"); + + // To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true + } +} diff --git a/spine-ue4/Source/SpineUE4/SpineUE4.cpp b/spine-ue4/Source/SpineUE4/SpineUE4.cpp new file mode 100644 index 000000000..43f51b9b2 --- /dev/null +++ b/spine-ue4/Source/SpineUE4/SpineUE4.cpp @@ -0,0 +1,5 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#include "SpineUE4.h" + +IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, SpineUE4, "SpineUE4" ); diff --git a/spine-ue4/Source/SpineUE4/SpineUE4.h b/spine-ue4/Source/SpineUE4/SpineUE4.h new file mode 100644 index 000000000..3d85d22a4 --- /dev/null +++ b/spine-ue4/Source/SpineUE4/SpineUE4.h @@ -0,0 +1,6 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "Engine.h" + diff --git a/spine-ue4/Source/SpineUE4/SpineUE4GameMode.cpp b/spine-ue4/Source/SpineUE4/SpineUE4GameMode.cpp new file mode 100644 index 000000000..16d36891b --- /dev/null +++ b/spine-ue4/Source/SpineUE4/SpineUE4GameMode.cpp @@ -0,0 +1,8 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#include "SpineUE4.h" +#include "SpineUE4GameMode.h" + + + + diff --git a/spine-ue4/Source/SpineUE4/SpineUE4GameMode.h b/spine-ue4/Source/SpineUE4/SpineUE4GameMode.h new file mode 100644 index 000000000..3570c67a0 --- /dev/null +++ b/spine-ue4/Source/SpineUE4/SpineUE4GameMode.h @@ -0,0 +1,19 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "GameFramework/GameMode.h" +#include "SpineUE4GameMode.generated.h" + +/** + * + */ +UCLASS() +class SPINEUE4_API ASpineUE4GameMode : public AGameMode +{ + GENERATED_BODY() + + + + +}; diff --git a/spine-ue4/Source/SpineUE4Editor.Target.cs b/spine-ue4/Source/SpineUE4Editor.Target.cs new file mode 100644 index 000000000..3b5458abe --- /dev/null +++ b/spine-ue4/Source/SpineUE4Editor.Target.cs @@ -0,0 +1,25 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class SpineUE4EditorTarget : TargetRules +{ + public SpineUE4EditorTarget(TargetInfo Target) + { + Type = TargetType.Editor; + } + + // + // TargetRules interface. + // + + public override void SetupBinaries( + TargetInfo Target, + ref List OutBuildBinaryConfigurations, + ref List OutExtraModuleNames + ) + { + OutExtraModuleNames.AddRange( new string[] { "SpineUE4" } ); + } +} diff --git a/spine-ue4/SpineUE4.uproject b/spine-ue4/SpineUE4.uproject new file mode 100644 index 000000000..eb0145b0b --- /dev/null +++ b/spine-ue4/SpineUE4.uproject @@ -0,0 +1,16 @@ +{ + "FileVersion": 3, + "EngineAssociation": "4.14", + "Category": "", + "Description": "", + "Modules": [ + { + "Name": "SpineUE4", + "Type": "Runtime", + "LoadingPhase": "Default", + "AdditionalDependencies": [ + "Engine" + ] + } + ] +} \ No newline at end of file