diff --git a/.gitignore b/.gitignore index 48c4c8354..13d206e55 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ target *.user .DS_Store + .idea/ build/ @@ -23,9 +24,9 @@ spine-sfml/Debug/* spine-sfml/SFML spine-sfml/dependencies -spine-libgdx/spine-libgdx/bin/* -spine-libgdx/spine-libgdx-tests/bin/* -spine-libgdx/spine-skeletonviewer/bin/* +spine-libgdx/spine-libgdx/bin +spine-libgdx/spine-libgdx-tests/bin +spine-libgdx/spine-skeletonviewer/bin spine-cocos2dx/dependencies spine-cocos2dx/example/cocos2dx.zip @@ -34,12 +35,14 @@ spine-cocos2dx/example/cocos2d spine-cocos2dx/example/proj.win32/spine-cocos2d-x.VC.opendb xcuserdata/ -spine-cocos2d-iphone/cocos2d/* -spine-cocos2d-iphone/spine-cocos2d-iphone-ios.xcodeproj/project.xcworkspace/xcshareddata/ +spine-cocos2d-objc/cocos2d/* +spine-cocos2d-objc/spine-cocos2d-iphone-objc.xcodeproj/project.xcworkspace/xcshareddata/ spine-csharp/bin spine-csharp/obj +spine-csharp/src/*.meta spine-csharp/src/*.cs.meta +spine-csharp/src/Attachments/*.cs.meta spine-monogame/xamarinstudio-ios/src/bin spine-monogame/xamarinstudio-ios/src/obj diff --git a/examples/alien/alien.spine b/examples/alien/alien.spine new file mode 100644 index 000000000..8009445b3 Binary files /dev/null and b/examples/alien/alien.spine differ diff --git a/examples/alien/export/alien-pma.atlas b/examples/alien/export/alien-pma.atlas new file mode 100644 index 000000000..601b63765 --- /dev/null +++ b/examples/alien/export/alien-pma.atlas @@ -0,0 +1,153 @@ + +alien-pma.png +size: 1024,512 +format: RGBA8888 +filter: Linear,Linear +repeat: none +back_foot + rotate: true + xy: 1016, 366 + size: 8, 6 + orig: 8, 6 + offset: 0, 0 + index: -1 +back_shin + rotate: false + xy: 28, 2 + size: 21, 24 + orig: 21, 24 + offset: 0, 0 + index: -1 +back_thigh + rotate: false + xy: 2, 2 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +backarmor + rotate: false + xy: 933, 295 + size: 81, 91 + orig: 81, 91 + offset: 0, 0 + index: -1 +blown_up_nck + rotate: false + xy: 2, 28 + size: 77, 52 + orig: 77, 52 + offset: 0, 0 + index: -1 +body + rotate: true + xy: 781, 167 + size: 98, 118 + orig: 98, 118 + offset: 0, 0 + index: -1 +burst01 + rotate: false + xy: 788, 355 + size: 143, 155 + orig: 143, 155 + offset: 0, 0 + index: -1 +burst02 + rotate: false + xy: 630, 329 + size: 156, 181 + orig: 156, 181 + offset: 0, 0 + index: -1 +front_foot + rotate: true + xy: 1016, 376 + size: 10, 6 + orig: 10, 6 + offset: 0, 0 + index: -1 +front_lower_arm + rotate: true + xy: 81, 25 + size: 55, 63 + orig: 55, 63 + offset: 0, 0 + index: -1 +front_shin + rotate: true + xy: 287, 55 + size: 25, 28 + orig: 25, 28 + offset: 0, 0 + index: -1 +front_thigh + rotate: false + xy: 258, 53 + size: 27, 27 + orig: 27, 27 + offset: 0, 0 + index: -1 +front_upper_arm + rotate: false + xy: 199, 52 + size: 57, 28 + orig: 57, 28 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 630, 191 + size: 149, 136 + orig: 149, 136 + offset: 0, 0 + index: -1 +jaw + rotate: true + xy: 933, 388 + size: 122, 86 + orig: 122, 86 + offset: 0, 0 + index: -1 +lower_back_arm + rotate: false + xy: 146, 34 + size: 51, 46 + orig: 51, 46 + offset: 0, 0 + index: -1 +metaljaw + rotate: false + xy: 788, 267 + size: 122, 86 + orig: 122, 86 + offset: 0, 0 + index: -1 +splat01 + rotate: false + xy: 371, 258 + size: 257, 252 + orig: 257, 252 + offset: 0, 0 + index: -1 +splat02 + rotate: false + xy: 2, 254 + size: 367, 256 + orig: 367, 256 + offset: 0, 0 + index: -1 +splat03 + rotate: false + xy: 2, 82 + size: 362, 170 + orig: 362, 170 + offset: 0, 0 + index: -1 +upper_back_arm + rotate: true + xy: 146, 2 + size: 30, 43 + orig: 30, 43 + offset: 0, 0 + index: -1 diff --git a/examples/alien/export/alien-pma.png b/examples/alien/export/alien-pma.png new file mode 100644 index 000000000..53be17bea Binary files /dev/null and b/examples/alien/export/alien-pma.png differ diff --git a/examples/alien/export/alien.atlas b/examples/alien/export/alien.atlas new file mode 100644 index 000000000..7ce1d1d99 --- /dev/null +++ b/examples/alien/export/alien.atlas @@ -0,0 +1,153 @@ + +alien.png +size: 1024,512 +format: RGBA8888 +filter: Linear,Linear +repeat: none +back_foot + rotate: true + xy: 1016, 366 + size: 8, 6 + orig: 8, 6 + offset: 0, 0 + index: -1 +back_shin + rotate: false + xy: 28, 2 + size: 21, 24 + orig: 21, 24 + offset: 0, 0 + index: -1 +back_thigh + rotate: false + xy: 2, 2 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +backarmor + rotate: false + xy: 933, 295 + size: 81, 91 + orig: 81, 91 + offset: 0, 0 + index: -1 +blown_up_nck + rotate: false + xy: 2, 28 + size: 77, 52 + orig: 77, 52 + offset: 0, 0 + index: -1 +body + rotate: true + xy: 781, 167 + size: 98, 118 + orig: 98, 118 + offset: 0, 0 + index: -1 +burst01 + rotate: false + xy: 788, 355 + size: 143, 155 + orig: 143, 155 + offset: 0, 0 + index: -1 +burst02 + rotate: false + xy: 630, 329 + size: 156, 181 + orig: 156, 181 + offset: 0, 0 + index: -1 +front_foot + rotate: true + xy: 1016, 376 + size: 10, 6 + orig: 10, 6 + offset: 0, 0 + index: -1 +front_lower_arm + rotate: true + xy: 81, 25 + size: 55, 63 + orig: 55, 63 + offset: 0, 0 + index: -1 +front_shin + rotate: true + xy: 287, 55 + size: 25, 28 + orig: 25, 28 + offset: 0, 0 + index: -1 +front_thigh + rotate: false + xy: 258, 53 + size: 27, 27 + orig: 27, 27 + offset: 0, 0 + index: -1 +front_upper_arm + rotate: false + xy: 199, 52 + size: 57, 28 + orig: 57, 28 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 630, 191 + size: 149, 136 + orig: 149, 136 + offset: 0, 0 + index: -1 +jaw + rotate: true + xy: 933, 388 + size: 122, 86 + orig: 122, 86 + offset: 0, 0 + index: -1 +lower_back_arm + rotate: false + xy: 146, 34 + size: 51, 46 + orig: 51, 46 + offset: 0, 0 + index: -1 +metaljaw + rotate: false + xy: 788, 267 + size: 122, 86 + orig: 122, 86 + offset: 0, 0 + index: -1 +splat01 + rotate: false + xy: 371, 258 + size: 257, 252 + orig: 257, 252 + offset: 0, 0 + index: -1 +splat02 + rotate: false + xy: 2, 254 + size: 367, 256 + orig: 367, 256 + offset: 0, 0 + index: -1 +splat03 + rotate: false + xy: 2, 82 + size: 362, 170 + orig: 362, 170 + offset: 0, 0 + index: -1 +upper_back_arm + rotate: true + xy: 146, 2 + size: 30, 43 + orig: 30, 43 + offset: 0, 0 + index: -1 diff --git a/examples/alien/export/alien.json b/examples/alien/export/alien.json new file mode 100644 index 000000000..a22636406 --- /dev/null +++ b/examples/alien/export/alien.json @@ -0,0 +1,1501 @@ +{ +"skeleton": { "hash": "V4Hi+nECzrockiU2TB2cDcvEn38", "spine": "3.4.00", "width": 365.8, "height": 429.96, "images": "./images/" }, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "x": -8.17, "y": 73.5, "color": "fff200ff" }, + { "name": "back_thigh", "parent": "hip", "length": 44.3, "rotation": -54.08, "x": -2.82, "y": -2.64, "color": "ff0008ff" }, + { "name": "back_shin", "parent": "back_thigh", "length": 31.17, "rotation": -50.15, "x": 44.3, "y": 0.06, "color": "ff0008ff" }, + { "name": "back_foot", "parent": "back_shin", "length": 11.75, "rotation": 91.8, "x": 31.17, "y": 0.09, "color": "ff0008ff" }, + { "name": "body", "parent": "hip", "length": 116.25, "rotation": 99.84, "x": -34.28, "y": 4.2, "color": "fff200ff" }, + { "name": "head", "parent": "body", "length": 213.84, "rotation": -36.34, "x": 116.32, "y": 1.79, "color": "fff200ff" }, + { "name": "blown_up_nck", "parent": "head", "x": -6.12, "y": -25.01, "color": "fff200ff" }, + { "name": "front_thigh", "parent": "hip", "length": 52.72, "rotation": -55.89, "x": -42.79, "y": 4.11, "color": "04ff00ff" }, + { "name": "front_shin", "parent": "front_thigh", "length": 34.38, "rotation": -45.22, "x": 52.73, "y": 0.06, "color": "04ff00ff" }, + { "name": "front_foot", "parent": "front_shin", "length": 13.58, "rotation": 86.84, "x": 34.36, "y": -0.12, "color": "04ff00ff" }, + { "name": "front_upper_arm", "parent": "body", "length": 47.09, "rotation": 121.33, "x": 90.9, "y": 42.96, "color": "04ff00ff" }, + { + "name": "front_lower_arm", + "parent": "front_upper_arm", + "length": 75.87, + "rotation": 71.97, + "x": 47.09, + "y": -0.29, + "color": "04ff00ff" + }, + { "name": "upper_back_arm", "parent": "body", "length": 50.28, "rotation": 172.11, "x": 50.4, "y": -84.36, "color": "ff0008ff" }, + { + "name": "lower_back_arm", + "parent": "upper_back_arm", + "length": 65.27, + "rotation": 74.17, + "x": 50.28, + "y": -0.11, + "color": "ff0008ff" + }, + { "name": "metaljaw", "parent": "root", "length": 75.82, "rotation": -74.86, "x": -37.1, "y": 230.8, "color": "fff200ff" }, + { "name": "splat", "parent": "root", "x": -11.57, "y": 253.52 } +], +"slots": [ + { "name": "upper_back_arm", "bone": "upper_back_arm", "attachment": "upper_back_arm" }, + { "name": "lower_back_arm", "bone": "lower_back_arm", "attachment": "lower_back_arm" }, + { "name": "back_thigh", "bone": "back_thigh", "attachment": "back_thigh" }, + { "name": "back_foot", "bone": "back_foot", "attachment": "back_foot" }, + { "name": "back_shin", "bone": "back_shin", "attachment": "back_shin" }, + { "name": "backarmor", "bone": "body", "attachment": "backarmor" }, + { "name": "blown_up_nck", "bone": "blown_up_nck" }, + { "name": "head", "bone": "head", "attachment": "burst01" }, + { "name": "splat01", "bone": "splat" }, + { "name": "body", "bone": "body", "attachment": "body" }, + { "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": "metaljaw", "bone": "metaljaw", "attachment": "metaljaw" }, + { "name": "front_upper_arm", "bone": "front_upper_arm", "attachment": "front_upper_arm" }, + { "name": "front_lower_arm", "bone": "front_lower_arm", "attachment": "front_lower_arm" } +], +"skins": { + "default": { + "back_foot": { + "back_foot": { "x": 4.53, "y": 2.76, "rotation": 12.42, "width": 16, "height": 11 } + }, + "back_shin": { + "back_shin": { "x": 9.6, "y": 0.84, "rotation": 104.23, "width": 42, "height": 48 } + }, + "back_thigh": { + "back_thigh": { "x": 21.8, "y": -0.35, "rotation": 54.08, "width": 47, "height": 47 } + }, + "backarmor": { + "backarmor": { "x": 121.41, "y": -18.48, "rotation": -99.84, "width": 162, "height": 182 } + }, + "blown_up_nck": { + "blown_up_nck": { "x": 11.7, "y": -5.74, "rotation": -63.5, "width": 153, "height": 104 } + }, + "body": { + "body": { "x": 96.07, "y": -9.51, "rotation": -99.84, "width": 196, "height": 235 } + }, + "front_foot": { + "front_foot": { "x": 5.11, "y": 2.54, "rotation": 14.27, "width": 19, "height": 12 } + }, + "front_lower_arm": { + "front_lower_arm": { "x": 52.88, "y": 5.47, "rotation": 102.64, "width": 110, "height": 125 } + }, + "front_shin": { + "front_shin": { "x": 10.32, "y": 1.86, "rotation": 101.12, "width": 49, "height": 56 } + }, + "front_thigh": { + "front_thigh": { "x": 26.99, "y": 0.4, "rotation": 55.89, "width": 54, "height": 54 } + }, + "front_upper_arm": { + "front_upper_arm": { "x": 35.92, "y": 6.58, "rotation": 174.62, "width": 113, "height": 55 } + }, + "head": { + "burst01": { "x": 104.65, "y": -32.91, "rotation": -63.5, "width": 286, "height": 309 }, + "burst02": { "x": 124.78, "y": -27.35, "rotation": -63.5, "width": 311, "height": 361 }, + "head": { "x": 92.32, "y": -53.02, "rotation": -63.5, "width": 297, "height": 272 } + }, + "lower_back_arm": { + "lower_back_arm": { "x": 42.34, "y": 10.93, "rotation": -5.4, "width": 101, "height": 91 } + }, + "metaljaw": { + "metaljaw": { "x": 86.81, "y": 55.48, "rotation": 64.15, "width": 243, "height": 172 } + }, + "splat01": { + "splat01": { "x": 77.57, "y": 167.97, "width": 514, "height": 503 }, + "splat02": { "x": 69.07, "y": -3.02, "width": 734, "height": 511 }, + "splat03": { "x": 14.57, "y": -102.52, "width": 723, "height": 339 } + }, + "upper_back_arm": { + "upper_back_arm": { "x": 38.71, "y": 2.9, "rotation": 68.76, "width": 60, "height": 86 } + } + } +}, +"events": { + "squish": {} +}, +"animations": { + "death": { + "slots": { + "blown_up_nck": { + "attachment": [ + { "time": 0, "name": null }, + { "time": 0.8333, "name": "blown_up_nck" } + ] + }, + "head": { + "attachment": [ + { "time": 0, "name": "burst01" }, + { "time": 0.4666, "name": "burst02" }, + { "time": 0.8333, "name": null } + ] + }, + "splat01": { + "color": [ + { "time": 0.9333, "color": "ffffffff" }, + { + "time": 1.0333, + "color": "ffffffbb", + "curve": [ 0.353, 0.02, 0.686, 0.37 ] + }, + { "time": 1.1333, "color": "ffffff00" } + ], + "attachment": [ + { "time": 0, "name": null }, + { "time": 0.8333, "name": "splat01" }, + { "time": 0.9333, "name": "splat02" }, + { "time": 1.0333, "name": "splat03" }, + { "time": 1.1333, "name": null } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 8.46 }, + { "time": 0.8333, "angle": -2.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.0333, "x": 0, "y": 0 }, + { "time": 0.1, "x": -10.63, "y": -18.38 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1, "x": 1.105, "y": 1.105 }, + { "time": 0.4651, "x": 1.49, "y": 1.211 }, + { "time": 0.4666, "x": 1.227, "y": 1.221 }, + { "time": 0.8333, "x": 1.461, "y": 1.987 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1333, "x": 0, "y": -9.23, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": -9.23 }, + { "time": 1.0333, "x": -20.27, "y": -19.1 }, + { "time": 1.1666, "x": -39.1, "y": -19.1 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "back_thigh": { + "rotate": [ + { "time": 0, "angle": -4.38 }, + { "time": 0.1333, "angle": -1.22, "curve": "stepped" }, + { "time": 0.9333, "angle": -1.22 }, + { "time": 1.0333, "angle": 14.85 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.1333, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1333, "x": 0.92, "y": 1 } + ] + }, + "body": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.738, 0.01, 0.961, 0.9 ] + }, + { "time": 0.8333, "angle": 10.74 }, + { "time": 1.0333, "angle": 30.29 }, + { "time": 1.1666, "angle": 74.27 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_thigh": { + "rotate": [ + { "time": 0, "angle": -15.6 }, + { "time": 0.1333, "angle": -5.96, "curve": "stepped" }, + { "time": 0.8333, "angle": -5.96 }, + { "time": 0.9333, "angle": 6.79 }, + { "time": 1, "angle": 7.9 }, + { "time": 1.0333, "angle": 19.67 }, + { "time": 1.1666, "angle": 23.38 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "back_shin": { + "rotate": [ + { "time": 0, "angle": 12.88 }, + { "time": 0.1333, "angle": 48.03, "curve": "stepped" }, + { "time": 0.9333, "angle": 48.03 }, + { "time": 1.0333, "angle": 39.59 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": -20.49 }, + { "time": 0.1333, "angle": -46.7, "curve": "stepped" }, + { "time": 0.8333, "angle": -46.7 }, + { "time": 0.9333, "angle": -52.98 }, + { "time": 1.0333, "angle": -55.88 }, + { "time": 1.1333, "angle": -20.01 }, + { "time": 1.1666, "angle": 27.07 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -37.4, + "curve": [ 0.647, 0, 0.93, 0.87 ] + }, + { + "time": 0.5666, + "angle": 45.89, + "curve": [ 0.172, 0.35, 0.632, 0.98 ] + }, + { + "time": 0.6333, + "angle": 52.04, + "curve": [ 0.423, 0.01, 0.721, 0.99 ] + }, + { "time": 0.8333, "angle": 42.79 }, + { "time": 0.9, "angle": 45.89 }, + { "time": 0.9333, "angle": 52.28 }, + { "time": 1, "angle": 43.46 }, + { "time": 1.0333, "angle": 42.53 }, + { "time": 1.1333, "angle": 43.86 }, + { "time": 1.1666, "angle": 50.52 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "upper_back_arm": { + "rotate": [ + { + "time": 0, + "angle": -327.38, + "curve": [ 0.518, 0, 0.872, 0.77 ] + }, + { + "time": 0.5666, + "angle": -13.54, + "curve": [ 0.189, 0.36, 0.59, 1 ] + }, + { + "time": 0.6333, + "angle": -18.33, + "curve": [ 0.501, 0, 0.75, 1 ] + }, + { "time": 0.8333, "angle": -10.06 }, + { "time": 0.9, "angle": -13.54 }, + { "time": 1, "angle": -21.13 }, + { "time": 1.0333, "angle": -36.05 }, + { "time": 1.1333, "angle": -52.59 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.5666, "x": 14.08, "y": -3.26, "curve": "stepped" }, + { "time": 0.9, "x": 14.08, "y": -3.26, "curve": "stepped" }, + { "time": 1, "x": 14.08, "y": -3.26 }, + { "time": 1.0333, "x": 7.82, "y": 9.2 }, + { "time": 1.1333, "x": 0.17, "y": 15.5 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "back_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": -38, "curve": "stepped" }, + { "time": 0.6333, "angle": -38 }, + { "time": 0.8333, "angle": -46.36 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1333, "x": 0.69, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 25.3 }, + { "time": 0.1333, "angle": 41.81, "curve": "stepped" }, + { "time": 0.8333, "angle": 41.81 }, + { "time": 0.9333, "angle": 14.08 }, + { "time": 1, "angle": 27.15 }, + { "time": 1.0333, "angle": 27.54 }, + { "time": 1.1333, "angle": -5.57 }, + { "time": 1.2, "angle": -34.27 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_lower_arm": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.647, 0, 0.93, 0.87 ] + }, + { + "time": 0.5666, + "angle": -60.24, + "curve": [ 0.172, 0.35, 0.632, 0.98 ] + }, + { + "time": 0.6333, + "angle": -54.1, + "curve": [ 0.423, 0.01, 0.721, 0.99 ] + }, + { + "time": 0.8333, + "angle": -38.77, + "curve": [ 0.43, 0.42, 0.768, 0.75 ] + }, + { + "time": 0.9, + "angle": -39.1, + "curve": [ 0.476, 0.47, 0.829, 0.81 ] + }, + { "time": 0.9333, "angle": -44.9 }, + { "time": 0.9666, "angle": -31.46 }, + { "time": 1, "angle": -22.11 }, + { "time": 1.0333, "angle": -18.78 }, + { "time": 1.1666, "angle": -18.51 }, + { "time": 1.2666, "angle": -32.15 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "lower_back_arm": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.518, 0, 0.872, 0.77 ] + }, + { + "time": 0.5666, + "angle": -70.85, + "curve": [ 0.189, 0.36, 0.59, 1 ] + }, + { + "time": 0.6333, + "angle": -75.64, + "curve": [ 0.501, 0, 0.75, 1 ] + }, + { "time": 0.8333, "angle": -67.37 }, + { "time": 0.9, "angle": -70.85 }, + { "time": 0.9333, "angle": -81.64 }, + { "time": 1.0333, "angle": -70.07 }, + { "time": 1.1333, "angle": -61.11 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "metaljaw": { + "rotate": [ + { "time": 0, "angle": 0 }, + { + "time": 0.1333, + "angle": -21.58, + "curve": [ 0.155, 0.33, 0.652, 0.99 ] + }, + { + "time": 0.4666, + "angle": -10.42, + "curve": [ 0.447, 0, 0.915, 0.86 ] + }, + { "time": 0.6, "angle": -15.89 }, + { + "time": 0.8333, + "angle": -27.91, + "curve": [ 0.178, 0.6, 0.832, 0.94 ] + }, + { "time": 1, "angle": 17.95 }, + { "time": 1.1333, "angle": 68.03 }, + { + "time": 1.4, + "angle": 91.38, + "curve": [ 0.152, 0.48, 0.45, 0.99 ] + }, + { + "time": 1.4666, + "angle": -14.52, + "curve": [ 0.481, 0, 0.791, 0.48 ] + }, + { + "time": 1.5666, + "angle": -9.82, + "curve": [ 0.542, 0.42, 0.817, 0.88 ] + }, + { "time": 1.6666, "angle": 18.64 }, + { + "time": 1.7666, + "angle": 34.81, + "curve": [ 0.432, 0, 0.75, 1 ] + }, + { "time": 1.8666, "angle": 25.82 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1333, "x": 0, "y": -7.87 }, + { + "time": 0.8333, + "x": 36.57, + "y": 5.26, + "curve": [ 0.178, 0.6, 0.832, 0.94 ] + }, + { + "time": 1.1333, + "x": -128.37, + "y": 509.99, + "curve": [ 0.338, 0.03, 0.867, 0.5 ] + }, + { + "time": 1.4, + "x": -61.21, + "y": -164.71, + "curve": [ 0.152, 0.48, 0.45, 0.99 ] + }, + { + "time": 1.4666, + "x": -11.42, + "y": -59.18, + "curve": [ 0.481, 0, 0.791, 0.48 ] + }, + { + "time": 1.5666, + "x": -21.13, + "y": -68.23, + "curve": [ 0.542, 0.42, 0.817, 0.88 ] + }, + { "time": 1.6666, "x": -79.89, "y": -122.98 }, + { + "time": 1.7666, + "x": -89.22, + "y": -149.43, + "curve": [ 0.432, 0, 0.75, 1 ] + }, + { "time": 1.8666, "x": -78.33, "y": -135.43 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "splat": { + "rotate": [ + { "time": 0, "angle": -6.77 }, + { "time": 0.8333, "angle": -9.4 }, + { "time": 1.0333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -40.51 }, + { "time": 0.8333, "x": -13.63, "y": -32.56 }, + { "time": 0.9333, "x": -30.67, "y": -20.06 }, + { "time": 1.0333, "x": -75.55, "y": 85.08 }, + { "time": 1.1333, "x": -75.55, "y": -8.8 } + ], + "scale": [ + { "time": 0, "x": 1.113, "y": 1.113 }, + { "time": 0.8333, "x": 1, "y": 1 }, + { "time": 0.9333, "x": 1.229, "y": 1.229 }, + { "time": 1.0333, "x": 1.37, "y": 1.37 }, + { "time": 1.1333, "x": 1.37, "y": 0.94 } + ] + }, + "blown_up_nck": { + "translate": [ + { "time": 0.9333, "x": 6.73, "y": 10.57 } + ], + "scale": [ + { "time": 0.8333, "x": 0.684, "y": 0.503 } + ] + }, + "root": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + } + }, + "drawOrder": [ + { "time": 0 }, + { + "time": 0.8333, + "offsets": [ + { "slot": "splat01", "offset": 5 } + ] + }, + { + "time": 0.9333, + "offsets": [ + { "slot": "splat01", "offset": 7 } + ] + }, + { + "time": 1.4, + "offsets": [ + { "slot": "splat01", "offset": 4 } + ] + } + ], + "events": [ + { "time": 0.8333, "name": "squish" } + ] + }, + "hit": { + "slots": { + "blown_up_nck": { + "attachment": [ + { "time": 0, "name": null } + ] + }, + "splat01": { + "attachment": [ + { "time": 0, "name": null } + ] + } + }, + "bones": { + "root": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 8.56 }, + { "time": 0.3333, "angle": 17.04 } + ], + "translate": [ + { "time": 0, "x": -17.33, "y": 19.69 }, + { "time": 0.3333, "x": -2.36, "y": 6.3 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "metaljaw": { + "rotate": [ + { "time": 0, "angle": 53.35 }, + { "time": 0.3333, "angle": 22.34 } + ], + "translate": [ + { "time": 0, "x": -196.31, "y": -132.59 }, + { "time": 0.3333, "x": -111.57, "y": -37.47 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "splat": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "back_thigh": { + "rotate": [ + { "time": 0, "angle": 71.89 }, + { "time": 0.3333, "angle": 7.6 } + ], + "translate": [ + { "time": 0, "x": -18.91, "y": 2.36 }, + { "time": 0.3333, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": 79.37 }, + { "time": 0.3333, "angle": 24.17 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_thigh": { + "rotate": [ + { "time": 0, "angle": 15.56 }, + { "time": 0.3333, "angle": -7.16 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "back_shin": { + "rotate": [ + { "time": 0, "angle": 17.2 }, + { "time": 0.3333, "angle": 0.31 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": 11.67 }, + { "time": 0.3333, "angle": -25.5 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": 43.23 }, + { "time": 0.3333, "angle": -61.4 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 15.26 }, + { "time": 0.3333, "angle": 1.58 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.3333, "x": -8.33, "y": -13 } + ], + "scale": [ + { "time": 0, "x": 1.5, "y": 0.834 }, + { "time": 0.3333, "x": 0.953, "y": 1.318 } + ] + }, + "upper_back_arm": { + "rotate": [ + { "time": 0, "angle": -239.2 }, + { "time": 0.3333, "angle": -335.27 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "back_foot": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "blown_up_nck": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.3333, "angle": 33.66 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_lower_arm": { + "rotate": [ + { "time": 0, "angle": 30.24 }, + { "time": 0.3333, "angle": -72.16 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "lower_back_arm": { + "rotate": [ + { "time": 0, "angle": -31.93 }, + { "time": 0.3333, "angle": -36.5 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + } + }, + "drawOrder": [ + { "time": 0 } + ] + }, + "jump": { + "slots": { + "blown_up_nck": { + "attachment": [ + { "time": 0, "name": null } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { "time": 0, "angle": 26.18 }, + { "time": 0.1, "angle": -77.7 }, + { "time": 0.2333, "angle": -99.82 }, + { "time": 0.4, "angle": -96.94 }, + { "time": 0.4333, "angle": -99.54 }, + { "time": 0.5, "angle": -40.21 }, + { "time": 0.6666, "angle": -15.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": -29.42 }, + { "time": 0.1, "angle": 43.97 }, + { "time": 0.2333, "angle": -5.79 }, + { "time": 0.4, "angle": 45.02 }, + { "time": 0.4333, "angle": 45.34 }, + { "time": 0.5, "angle": -20.45 }, + { "time": 0.6666, "angle": -38.85 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "back_thigh": { + "rotate": [ + { "time": 0, "angle": -83.38 }, + { "time": 0.1, "angle": 46.33 }, + { "time": 0.2437, "angle": -47.1 }, + { "time": 0.4, "angle": -80.1 }, + { "time": 0.4333, "angle": -80.25 }, + { "time": 0.5, "angle": -19.81 }, + { "time": 0.6666, "angle": 8.99 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.4, "x": 0, "y": 6.83 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4333, "angle": -23.67 }, + { "time": 0.5, "angle": -5.92, "curve": "stepped" }, + { "time": 0.6666, "angle": -5.92 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -13.1 }, + { "time": 0.0666, "x": 0, "y": 12.04 }, + { "time": 0.1, "x": 0, "y": -2.1 }, + { "time": 0.1666, "x": 0, "y": 7.95 }, + { "time": 0.4333, "x": -71.74, "y": -9.07 }, + { "time": 0.5, "x": 0, "y": -2.89, "curve": "stepped" }, + { "time": 0.6666, "x": 0, "y": -2.89 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "metaljaw": { + "rotate": [ + { "time": 0, "angle": 28.25 }, + { "time": 0.1, "angle": 5.51 }, + { "time": 0.2333, "angle": -1.94 }, + { "time": 0.4333, "angle": -9.19 }, + { "time": 0.5, "angle": 21.79 }, + { "time": 0.6666, "angle": 26.9 } + ], + "translate": [ + { "time": 0, "x": -54.5, "y": -12.42 }, + { "time": 0.1, "x": -16.52, "y": -5.35 }, + { "time": 0.2333, "x": 31.77, "y": 9.62 }, + { "time": 0.4333, "x": 61.21, "y": -63.32 }, + { "time": 0.5, "x": 109.6, "y": -49.68 }, + { "time": 0.6666, "x": 39.09, "y": 4.74 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.2333, "x": 1.23, "y": 1 }, + { "time": 0.4333, "x": 1.555, "y": 1 }, + { "time": 0.5, "x": 1.23, "y": 1 }, + { "time": 0.6666, "x": 1, "y": 1 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": 17.89 }, + { "time": 0.5, "angle": -42.29 }, + { "time": 0.6666, "angle": -12.34 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -11.37 }, + { "time": 0.1, "angle": -287.29 }, + { "time": 0.2333, "angle": -268.61 }, + { "time": 0.4333, "angle": 4.09 }, + { "time": 0.5, "angle": 6.27 }, + { "time": 0.6666, "angle": 12.39 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_lower_arm": { + "rotate": [ + { "time": 0, "angle": 9.75 }, + { "time": 0.2333, "angle": -22.81 }, + { "time": 0.4333, "angle": -72.32 }, + { "time": 0.5, "angle": -72.27 }, + { "time": 0.6666, "angle": 3.89 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "upper_back_arm": { + "rotate": [ + { "time": 0, "angle": -339.16 }, + { "time": 0.1, "angle": -79.86 }, + { "time": 0.2333, "angle": -291.77 }, + { "time": 0.5, "angle": -71.4 }, + { "time": 0.6666, "angle": -341.82 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "lower_back_arm": { + "rotate": [ + { "time": 0, "angle": -12.56 }, + { "time": 0.2333, "angle": -33.93 }, + { "time": 0.5, "angle": -74.21 }, + { "time": 0.6666, "angle": 7.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "root": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "splat": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "back_shin": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2437, "angle": -38.14 }, + { "time": 0.4, "angle": 7.23 }, + { "time": 0.4333, "angle": 50.06 }, + { "time": 0.5, "angle": -11.95 }, + { "time": 0.6666, "angle": 4.26 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2333, "angle": 15.45 }, + { "time": 0.4333, "angle": 66.11 }, + { "time": 0.5, "angle": 21.66 }, + { "time": 0.6666, "angle": 22.07 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.2333, "x": 16.33, "y": -5.62 }, + { "time": 0.4333, "x": 21.99, "y": -5.09 }, + { "time": 0.5, "x": 35.17, "y": -16.94, "curve": "stepped" }, + { "time": 0.6666, "x": 35.17, "y": -16.94 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.0666, "x": 0.891, "y": 1 }, + { "time": 0.4333, "x": 1.606, "y": 1 }, + { "time": 0.5, "x": 1.09, "y": 1 }, + { "time": 0.6666, "x": 1, "y": 1 } + ] + }, + "back_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4333, "angle": -91.65 }, + { "time": 0.5, "angle": 24.5 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "blown_up_nck": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -31.86 }, + { "time": 0.4, "angle": 17.82 }, + { "time": 0.4333, "angle": -59.24 }, + { "time": 0.6666, "angle": 16.42 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + } + } + }, + "run": { + "slots": { + "blown_up_nck": { + "attachment": [ + { "time": 0, "name": null } + ] + } + }, + "bones": { + "front_shin": { + "rotate": [ + { "time": 0, "angle": 46.48 }, + { "time": 0.0333, "angle": -19.25 }, + { "time": 0.0666, "angle": -16.44 }, + { "time": 0.1, "angle": 35.98 }, + { "time": 0.1333, "angle": -13.49 }, + { "time": 0.1666, "angle": -27.81 }, + { "time": 0.2333, "angle": -46.66 }, + { "time": 0.2666, "angle": -62.65 }, + { "time": 0.3333, "angle": -26.02 }, + { "time": 0.3666, "angle": -2.18 }, + { "time": 0.4, "angle": 46.48 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "back_thigh": { + "rotate": [ + { "time": 0, "angle": -86.45 }, + { "time": 0.0333, "angle": -62.71 }, + { "time": 0.0666, "angle": -7.96 }, + { "time": 0.1, "angle": 8.31 }, + { "time": 0.1333, "angle": 29.38 }, + { "time": 0.1666, "angle": 15.43 }, + { "time": 0.2, "angle": 2.12 }, + { "time": 0.2333, "angle": -0.97 }, + { "time": 0.2666, "angle": -38.85 }, + { "time": 0.3, "angle": -63.94 }, + { "time": 0.3333, "angle": -88.2 }, + { "time": 0.3666, "angle": -76.84 }, + { "time": 0.4, "angle": -86.45 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.3333, "x": -5.82, "y": 0 }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "back_shin": { + "rotate": [ + { "time": 0, "angle": -17.82 }, + { "time": 0.0333, "angle": -31.8 }, + { "time": 0.0666, "angle": -48.72 }, + { "time": 0.1, "angle": -29.52 }, + { "time": 0.1333, "angle": -15.23 }, + { "time": 0.1666, "angle": 16.27 }, + { "time": 0.2, "angle": 42.32 }, + { "time": 0.2333, "angle": -13.7 }, + { "time": 0.2666, "angle": 1.27 }, + { "time": 0.3, "angle": 34.49 }, + { "time": 0.3333, "angle": -15.12 }, + { "time": 0.3666, "angle": -26.51 }, + { "time": 0.4, "angle": -17.82 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "back_foot": { + "rotate": [ + { "time": 0, "angle": -22.78 }, + { "time": 0.0333, "angle": -35.73 }, + { "time": 0.1, "angle": 1.28 }, + { "time": 0.2, "angle": -7.86 }, + { "time": 0.2333, "angle": 18.54 }, + { "time": 0.2666, "angle": 16.13 }, + { "time": 0.3, "angle": -33.84 }, + { "time": 0.3333, "angle": -15.97 }, + { "time": 0.4, "angle": -22.78 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "upper_back_arm": { + "rotate": [ + { "time": 0, "angle": -19.69 }, + { "time": 0.1333, "angle": -10.14 }, + { "time": 0.2666, "angle": -5.43 }, + { "time": 0.4, "angle": -19.69 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": -2.7 }, + { "time": 0.0666, "angle": -7.41 }, + { "time": 0.1333, "angle": -3.64 }, + { "time": 0.2, "angle": -2.7 }, + { "time": 0.2666, "angle": -7.41 }, + { "time": 0.3333, "angle": -3.64 }, + { "time": 0.4, "angle": -2.7 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "metaljaw": { + "rotate": [ + { "time": 0, "angle": -0.25 }, + { + "time": 0.0333, + "angle": 2.21, + "curve": [ 0.181, 0.38, 0.75, 1 ] + }, + { "time": 0.0666, "angle": -8.85 }, + { "time": 0.1, "angle": 2.21 }, + { "time": 0.1333, "angle": 4.78 }, + { "time": 0.1666, "angle": 7.18 }, + { "time": 0.2, "angle": -0.25 }, + { + "time": 0.2333, + "angle": -2.6, + "curve": [ 0.175, 0.32, 0.75, 1 ] + }, + { "time": 0.2666, "angle": -8.85 }, + { "time": 0.3, "angle": 2.21 }, + { "time": 0.3333, "angle": 4.78 }, + { "time": 0.3666, "angle": 7.18 }, + { "time": 0.4, "angle": -0.25 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0666, "x": -1.26, "y": -13.31 }, + { "time": 0.1333, "x": -5.86, "y": 9.03 }, + { "time": 0.2, "x": -4.36, "y": -5.23 }, + { "time": 0.2666, "x": -2.61, "y": -4.36 }, + { "time": 0.3333, "x": -0.43, "y": 1.3 }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0333, "x": 0, "y": -3.97 }, + { "time": 0.0666, "x": 0, "y": -1.35 }, + { "time": 0.1, "x": 0, "y": 3.28 }, + { "time": 0.1333, "x": 0, "y": 11.57 }, + { "time": 0.1666, "x": 0, "y": 2.03 }, + { "time": 0.2, "x": 0, "y": -6.45 }, + { "time": 0.2333, "x": 0, "y": -3.97 }, + { "time": 0.2666, "x": 0, "y": -1.35 }, + { "time": 0.3, "x": 0, "y": 3.28 }, + { "time": 0.3333, "x": 0, "y": 11.57 }, + { "time": 0.3666, "x": 0, "y": 2.03 }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "root": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "front_thigh": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0333, "angle": 11.49 }, + { "time": 0.0666, "angle": -39.11 }, + { "time": 0.1, "angle": -67.88 }, + { "time": 0.1333, "angle": -87.79 }, + { "time": 0.1666, "angle": -74.85 }, + { "time": 0.2, "angle": -54.57 }, + { "time": 0.2333, "angle": -27.42 }, + { "time": 0.2666, "angle": 2.48 }, + { "time": 0.3333, "angle": 22.08 }, + { "time": 0.3666, "angle": 23.18 }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0666, "x": 6.81, "y": 1.04 }, + { "time": 0.2, "x": 23.4, "y": 4.1 }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.1333, "x": 1, "y": 1 }, + { "time": 0.2333, "x": 0.886, "y": 1 }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.29, 0, 0.629, 0.37 ] + }, + { + "time": 0.0666, + "angle": -2.71, + "curve": [ 0.31, 0.25, 0.648, 0.6 ] + }, + { + "time": 0.1333, + "angle": -3.71, + "curve": [ 0.325, 0.3, 0.662, 0.65 ] + }, + { + "time": 0.2, + "angle": 4.2, + "curve": [ 0.337, 0.34, 0.675, 0.69 ] + }, + { + "time": 0.2666, + "angle": 0.94, + "curve": [ 0.351, 0.4, 0.689, 0.74 ] + }, + { + "time": 0.3333, + "angle": -3.36, + "curve": [ 0.37, 0.62, 0.709, 1 ] + }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0666, "angle": -2.94 }, + { "time": 0.2, "angle": 0 }, + { "time": 0.2666, "angle": -2.94 }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.2, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.0666, "x": 0.819, "y": 1 }, + { "time": 0.2, "x": 1.04, "y": 1 }, + { "time": 0.2666, "x": 0.819, "y": 1 }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0333, "angle": 9.87 }, + { "time": 0.0666, "angle": 12.87 }, + { "time": 0.1, "angle": -32.16 }, + { "time": 0.1666, "angle": -39.59 }, + { "time": 0.3333, "angle": 13.67 }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "front_lower_arm": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.29, 0, 0.629, 0.37 ] + }, + { + "time": 0.0666, + "angle": -5.39, + "curve": [ 0.31, 0.25, 0.648, 0.6 ] + }, + { + "time": 0.1333, + "angle": -10.33, + "curve": [ 0.325, 0.3, 0.662, 0.65 ] + }, + { + "time": 0.2, + "angle": 4.2, + "curve": [ 0.337, 0.34, 0.675, 0.69 ] + }, + { + "time": 0.2666, + "angle": -5.34, + "curve": [ 0.351, 0.4, 0.689, 0.74 ] + }, + { + "time": 0.3333, + "angle": -10.36, + "curve": [ 0.37, 0.62, 0.709, 1 ] + }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "lower_back_arm": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0666, "angle": -11.65 }, + { "time": 0.1333, "angle": -16.99 }, + { "time": 0.2, "angle": -7.9 }, + { "time": 0.2666, "angle": -8.99 }, + { "time": 0.3333, "angle": -10.59 }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "blown_up_nck": { + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "splat": { + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/examples/alien/export/alien.png b/examples/alien/export/alien.png new file mode 100644 index 000000000..f5eecf819 Binary files /dev/null and b/examples/alien/export/alien.png differ diff --git a/examples/alien/export/alien.skel b/examples/alien/export/alien.skel new file mode 100644 index 000000000..e113ee1a6 Binary files /dev/null and b/examples/alien/export/alien.skel differ diff --git a/examples/alien/images/back_foot.png b/examples/alien/images/back_foot.png new file mode 100644 index 000000000..83c72a645 Binary files /dev/null and b/examples/alien/images/back_foot.png differ diff --git a/examples/alien/images/back_shin.png b/examples/alien/images/back_shin.png new file mode 100644 index 000000000..982d3714a Binary files /dev/null and b/examples/alien/images/back_shin.png differ diff --git a/examples/alien/images/back_thigh.png b/examples/alien/images/back_thigh.png new file mode 100644 index 000000000..dd413f5fc Binary files /dev/null and b/examples/alien/images/back_thigh.png differ diff --git a/examples/alien/images/backarmor.png b/examples/alien/images/backarmor.png new file mode 100644 index 000000000..0350068f2 Binary files /dev/null and b/examples/alien/images/backarmor.png differ diff --git a/examples/alien/images/blown_up_nck.png b/examples/alien/images/blown_up_nck.png new file mode 100644 index 000000000..c7edc6b59 Binary files /dev/null and b/examples/alien/images/blown_up_nck.png differ diff --git a/examples/alien/images/body.png b/examples/alien/images/body.png new file mode 100644 index 000000000..7a6cc458e Binary files /dev/null and b/examples/alien/images/body.png differ diff --git a/examples/alien/images/burst01.png b/examples/alien/images/burst01.png new file mode 100644 index 000000000..885aad6e0 Binary files /dev/null and b/examples/alien/images/burst01.png differ diff --git a/examples/alien/images/burst02.png b/examples/alien/images/burst02.png new file mode 100644 index 000000000..f92e481b3 Binary files /dev/null and b/examples/alien/images/burst02.png differ diff --git a/examples/alien/images/front_foot.png b/examples/alien/images/front_foot.png new file mode 100644 index 000000000..7ab7a79d0 Binary files /dev/null and b/examples/alien/images/front_foot.png differ diff --git a/examples/alien/images/front_lower_arm.png b/examples/alien/images/front_lower_arm.png new file mode 100644 index 000000000..e48dc126d Binary files /dev/null and b/examples/alien/images/front_lower_arm.png differ diff --git a/examples/alien/images/front_shin.png b/examples/alien/images/front_shin.png new file mode 100644 index 000000000..a4bcdad3c Binary files /dev/null and b/examples/alien/images/front_shin.png differ diff --git a/examples/alien/images/front_thigh.png b/examples/alien/images/front_thigh.png new file mode 100644 index 000000000..863e938dd Binary files /dev/null and b/examples/alien/images/front_thigh.png differ diff --git a/examples/alien/images/front_upper_arm.png b/examples/alien/images/front_upper_arm.png new file mode 100644 index 000000000..7bb7f2ab5 Binary files /dev/null and b/examples/alien/images/front_upper_arm.png differ diff --git a/examples/alien/images/head.png b/examples/alien/images/head.png new file mode 100644 index 000000000..b8d775bdc Binary files /dev/null and b/examples/alien/images/head.png differ diff --git a/examples/alien/images/jaw.png b/examples/alien/images/jaw.png new file mode 100644 index 000000000..65f9dbe1f Binary files /dev/null and b/examples/alien/images/jaw.png differ diff --git a/examples/alien/images/lower_back_arm.png b/examples/alien/images/lower_back_arm.png new file mode 100644 index 000000000..d4d682364 Binary files /dev/null and b/examples/alien/images/lower_back_arm.png differ diff --git a/examples/alien/images/metaljaw.png b/examples/alien/images/metaljaw.png new file mode 100644 index 000000000..db9e77ddd Binary files /dev/null and b/examples/alien/images/metaljaw.png differ diff --git a/examples/alien/images/splat01.png b/examples/alien/images/splat01.png new file mode 100644 index 000000000..6126b6d85 Binary files /dev/null and b/examples/alien/images/splat01.png differ diff --git a/examples/alien/images/splat02.png b/examples/alien/images/splat02.png new file mode 100644 index 000000000..3c93a7bd8 Binary files /dev/null and b/examples/alien/images/splat02.png differ diff --git a/examples/alien/images/splat03.png b/examples/alien/images/splat03.png new file mode 100644 index 000000000..185a3f125 Binary files /dev/null and b/examples/alien/images/splat03.png differ diff --git a/examples/alien/images/upper_back_arm.png b/examples/alien/images/upper_back_arm.png new file mode 100644 index 000000000..3dd0bb7d6 Binary files /dev/null and b/examples/alien/images/upper_back_arm.png differ diff --git a/examples/alien/license.txt b/examples/alien/license.txt new file mode 100644 index 000000000..cd3e3b481 --- /dev/null +++ b/examples/alien/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2013, Esoteric Software + +The images in this project may be redistributed as long as they are accompanied +by this license file. The images may not be used for commercial use of any +kind. + +The project file is released into the public domain. It may be used as the basis +for derivative work. \ No newline at end of file diff --git a/examples/dragon/dragon.spine b/examples/dragon/dragon.spine new file mode 100644 index 000000000..5199cec66 Binary files /dev/null and b/examples/dragon/dragon.spine differ diff --git a/examples/dragon/export/dragon-pma.atlas b/examples/dragon/export/dragon-pma.atlas new file mode 100644 index 000000000..3175bd0ab --- /dev/null +++ b/examples/dragon/export/dragon-pma.atlas @@ -0,0 +1,299 @@ + +dragon-pma.png +size: 1024,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +L_front_leg + rotate: false + xy: 56, 871 + size: 84, 57 + orig: 84, 57 + offset: 0, 0 + index: -1 +L_rear_thigh + rotate: false + xy: 447, 498 + size: 91, 149 + orig: 91, 149 + offset: 0, 0 + index: -1 +L_wing01 + rotate: true + xy: 335, 3 + size: 191, 256 + orig: 191, 256 + offset: 0, 0 + index: -1 +L_wing06 + rotate: true + xy: 2, 2 + size: 192, 331 + orig: 192, 331 + offset: 0, 0 + index: -1 +L_wing07 + rotate: false + xy: 780, 4 + size: 159, 255 + orig: 159, 255 + offset: 0, 0 + index: -1 +R_rear_leg + rotate: false + xy: 891, 532 + size: 116, 100 + orig: 116, 100 + offset: 0, 0 + index: -1 +R_wing02 + rotate: true + xy: 593, 725 + size: 203, 305 + orig: 203, 305 + offset: 0, 0 + index: -1 +R_wing04 + rotate: true + xy: 447, 649 + size: 279, 144 + orig: 279, 144 + offset: 0, 0 + index: -1 +R_wing06 + rotate: true + xy: 649, 261 + size: 200, 366 + orig: 200, 366 + offset: 0, 0 + index: -1 +R_wing07 + rotate: false + xy: 447, 198 + size: 200, 263 + orig: 200, 263 + offset: 0, 0 + index: -1 +back + rotate: true + xy: 593, 6 + size: 190, 185 + orig: 190, 185 + offset: 0, 0 + index: -1 +chest + rotate: true + xy: 900, 731 + size: 136, 122 + orig: 136, 122 + offset: 0, 0 + index: -1 +front_toeA + rotate: false + xy: 273, 878 + size: 29, 50 + orig: 29, 50 + offset: 0, 0 + index: -1 +front_toeB + rotate: false + xy: 142, 871 + size: 56, 57 + orig: 56, 57 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 593, 463 + size: 296, 260 + orig: 296, 260 + offset: 0, 0 + index: -1 +logo + rotate: false + xy: 2, 930 + size: 897, 92 + orig: 897, 92 + offset: 0, 0 + index: -1 +rear-toe + rotate: true + xy: 941, 150 + size: 109, 77 + orig: 109, 77 + offset: 0, 0 + index: -1 +tail01 + rotate: false + xy: 901, 869 + size: 120, 153 + orig: 120, 153 + offset: 0, 0 + index: -1 +tail02 + rotate: true + xy: 900, 634 + size: 95, 120 + orig: 95, 120 + offset: 0, 0 + index: -1 +tail03 + rotate: false + xy: 941, 56 + size: 73, 92 + orig: 73, 92 + offset: 0, 0 + index: -1 +tail04 + rotate: true + xy: 200, 872 + size: 56, 71 + orig: 56, 71 + offset: 0, 0 + index: -1 +tail05 + rotate: false + xy: 2, 869 + size: 52, 59 + orig: 52, 59 + offset: 0, 0 + index: -1 +template + rotate: true + xy: 2, 196 + size: 671, 443 + orig: 671, 443 + offset: 0, 0 + index: -1 + +dragon-pma2.png +size: 1024,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +L_front_thigh + rotate: false + xy: 619, 544 + size: 84, 72 + orig: 84, 72 + offset: 0, 0 + index: -1 +L_rear_leg + rotate: false + xy: 208, 214 + size: 206, 177 + orig: 206, 177 + offset: 0, 0 + index: -1 +L_wing02 + rotate: true + xy: 753, 824 + size: 179, 269 + orig: 179, 269 + offset: 0, 0 + index: -1 +L_wing03 + rotate: true + xy: 2, 2 + size: 186, 207 + orig: 186, 207 + offset: 0, 0 + index: -1 +L_wing04 + rotate: false + xy: 753, 687 + size: 188, 135 + orig: 188, 135 + offset: 0, 0 + index: -1 +L_wing05 + rotate: false + xy: 233, 541 + size: 218, 213 + orig: 218, 213 + offset: 0, 0 + index: -1 +L_wing08 + rotate: false + xy: 453, 573 + size: 164, 181 + orig: 164, 181 + offset: 0, 0 + index: -1 +L_wing09 + rotate: true + xy: 211, 8 + size: 204, 167 + orig: 204, 167 + offset: 0, 0 + index: -1 +R_front_leg + rotate: false + xy: 380, 13 + size: 101, 89 + orig: 101, 89 + offset: 0, 0 + index: -1 +R_front_thigh + rotate: false + xy: 380, 104 + size: 108, 108 + orig: 108, 108 + offset: 0, 0 + index: -1 +R_rear_thigh + rotate: false + xy: 619, 618 + size: 91, 149 + orig: 91, 149 + offset: 0, 0 + index: -1 +R_wing01 + rotate: false + xy: 2, 693 + size: 219, 310 + orig: 219, 310 + offset: 0, 0 + index: -1 +R_wing03 + rotate: false + xy: 223, 756 + size: 272, 247 + orig: 272, 247 + offset: 0, 0 + index: -1 +R_wing05 + rotate: true + xy: 2, 440 + size: 251, 229 + orig: 251, 229 + offset: 0, 0 + index: -1 +R_wing08 + rotate: true + xy: 497, 769 + size: 234, 254 + orig: 234, 254 + offset: 0, 0 + index: -1 +R_wing09 + rotate: true + xy: 2, 190 + size: 248, 204 + orig: 248, 204 + offset: 0, 0 + index: -1 +chin + rotate: false + xy: 233, 393 + size: 214, 146 + orig: 214, 146 + offset: 0, 0 + index: -1 +tail06 + rotate: true + xy: 943, 727 + size: 95, 68 + orig: 95, 68 + offset: 0, 0 + index: -1 diff --git a/examples/dragon/export/dragon-pma.png b/examples/dragon/export/dragon-pma.png new file mode 100644 index 000000000..0f8a143a9 Binary files /dev/null and b/examples/dragon/export/dragon-pma.png differ diff --git a/examples/dragon/export/dragon-pma2.png b/examples/dragon/export/dragon-pma2.png new file mode 100644 index 000000000..2411030cb Binary files /dev/null and b/examples/dragon/export/dragon-pma2.png differ diff --git a/examples/dragon/export/dragon.atlas b/examples/dragon/export/dragon.atlas new file mode 100644 index 000000000..b8f17aa57 --- /dev/null +++ b/examples/dragon/export/dragon.atlas @@ -0,0 +1,299 @@ + +dragon.png +size: 1024,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +L_front_leg + rotate: false + xy: 56, 871 + size: 84, 57 + orig: 84, 57 + offset: 0, 0 + index: -1 +L_rear_thigh + rotate: false + xy: 447, 498 + size: 91, 149 + orig: 91, 149 + offset: 0, 0 + index: -1 +L_wing01 + rotate: true + xy: 335, 3 + size: 191, 256 + orig: 191, 256 + offset: 0, 0 + index: -1 +L_wing06 + rotate: true + xy: 2, 2 + size: 192, 331 + orig: 192, 331 + offset: 0, 0 + index: -1 +L_wing07 + rotate: false + xy: 780, 4 + size: 159, 255 + orig: 159, 255 + offset: 0, 0 + index: -1 +R_rear_leg + rotate: false + xy: 891, 532 + size: 116, 100 + orig: 116, 100 + offset: 0, 0 + index: -1 +R_wing02 + rotate: true + xy: 593, 725 + size: 203, 305 + orig: 203, 305 + offset: 0, 0 + index: -1 +R_wing04 + rotate: true + xy: 447, 649 + size: 279, 144 + orig: 279, 144 + offset: 0, 0 + index: -1 +R_wing06 + rotate: true + xy: 649, 261 + size: 200, 366 + orig: 200, 366 + offset: 0, 0 + index: -1 +R_wing07 + rotate: false + xy: 447, 198 + size: 200, 263 + orig: 200, 263 + offset: 0, 0 + index: -1 +back + rotate: true + xy: 593, 6 + size: 190, 185 + orig: 190, 185 + offset: 0, 0 + index: -1 +chest + rotate: true + xy: 900, 731 + size: 136, 122 + orig: 136, 122 + offset: 0, 0 + index: -1 +front_toeA + rotate: false + xy: 273, 878 + size: 29, 50 + orig: 29, 50 + offset: 0, 0 + index: -1 +front_toeB + rotate: false + xy: 142, 871 + size: 56, 57 + orig: 56, 57 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 593, 463 + size: 296, 260 + orig: 296, 260 + offset: 0, 0 + index: -1 +logo + rotate: false + xy: 2, 930 + size: 897, 92 + orig: 897, 92 + offset: 0, 0 + index: -1 +rear-toe + rotate: true + xy: 941, 150 + size: 109, 77 + orig: 109, 77 + offset: 0, 0 + index: -1 +tail01 + rotate: false + xy: 901, 869 + size: 120, 153 + orig: 120, 153 + offset: 0, 0 + index: -1 +tail02 + rotate: true + xy: 900, 634 + size: 95, 120 + orig: 95, 120 + offset: 0, 0 + index: -1 +tail03 + rotate: false + xy: 941, 56 + size: 73, 92 + orig: 73, 92 + offset: 0, 0 + index: -1 +tail04 + rotate: true + xy: 200, 872 + size: 56, 71 + orig: 56, 71 + offset: 0, 0 + index: -1 +tail05 + rotate: false + xy: 2, 869 + size: 52, 59 + orig: 52, 59 + offset: 0, 0 + index: -1 +template + rotate: true + xy: 2, 196 + size: 671, 443 + orig: 671, 443 + offset: 0, 0 + index: -1 + +dragon2.png +size: 1024,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +L_front_thigh + rotate: false + xy: 619, 544 + size: 84, 72 + orig: 84, 72 + offset: 0, 0 + index: -1 +L_rear_leg + rotate: false + xy: 208, 214 + size: 206, 177 + orig: 206, 177 + offset: 0, 0 + index: -1 +L_wing02 + rotate: true + xy: 753, 824 + size: 179, 269 + orig: 179, 269 + offset: 0, 0 + index: -1 +L_wing03 + rotate: true + xy: 2, 2 + size: 186, 207 + orig: 186, 207 + offset: 0, 0 + index: -1 +L_wing04 + rotate: false + xy: 753, 687 + size: 188, 135 + orig: 188, 135 + offset: 0, 0 + index: -1 +L_wing05 + rotate: false + xy: 233, 541 + size: 218, 213 + orig: 218, 213 + offset: 0, 0 + index: -1 +L_wing08 + rotate: false + xy: 453, 573 + size: 164, 181 + orig: 164, 181 + offset: 0, 0 + index: -1 +L_wing09 + rotate: true + xy: 211, 8 + size: 204, 167 + orig: 204, 167 + offset: 0, 0 + index: -1 +R_front_leg + rotate: false + xy: 380, 13 + size: 101, 89 + orig: 101, 89 + offset: 0, 0 + index: -1 +R_front_thigh + rotate: false + xy: 380, 104 + size: 108, 108 + orig: 108, 108 + offset: 0, 0 + index: -1 +R_rear_thigh + rotate: false + xy: 619, 618 + size: 91, 149 + orig: 91, 149 + offset: 0, 0 + index: -1 +R_wing01 + rotate: false + xy: 2, 693 + size: 219, 310 + orig: 219, 310 + offset: 0, 0 + index: -1 +R_wing03 + rotate: false + xy: 223, 756 + size: 272, 247 + orig: 272, 247 + offset: 0, 0 + index: -1 +R_wing05 + rotate: true + xy: 2, 440 + size: 251, 229 + orig: 251, 229 + offset: 0, 0 + index: -1 +R_wing08 + rotate: true + xy: 497, 769 + size: 234, 254 + orig: 234, 254 + offset: 0, 0 + index: -1 +R_wing09 + rotate: true + xy: 2, 190 + size: 248, 204 + orig: 248, 204 + offset: 0, 0 + index: -1 +chin + rotate: false + xy: 233, 393 + size: 214, 146 + orig: 214, 146 + offset: 0, 0 + index: -1 +tail06 + rotate: true + xy: 943, 727 + size: 95, 68 + orig: 95, 68 + offset: 0, 0 + index: -1 diff --git a/examples/dragon/export/dragon.json b/examples/dragon/export/dragon.json new file mode 100644 index 000000000..9994c80d7 --- /dev/null +++ b/examples/dragon/export/dragon.json @@ -0,0 +1,784 @@ +{ +"skeleton": { "hash": "9MKo2cmJTDc3IPV4B3LRJxWbl04", "spine": "3.4.00", "width": 897, "height": 716.36, "images": "./images/" }, +"bones": [ + { "name": "root", "y": -176.12 }, + { "name": "COG", "parent": "root", "y": 176.12 }, + { "name": "chest", "parent": "COG", "length": 31.24, "rotation": 161.7, "x": 52.52, "y": 15.34 }, + { "name": "L_front_thigh", "parent": "chest", "length": 67.42, "rotation": 138.94, "x": -45.58, "y": 7.92 }, + { "name": "L_front_leg", "parent": "L_front_thigh", "length": 51.57, "rotation": 43.36, "x": 67.42, "y": 0.02 }, + { "name": "L_front_toe1", "parent": "L_front_leg", "length": 51.44, "rotation": -98, "x": 45.53, "y": 2.43 }, + { "name": "L_front_toe2", "parent": "L_front_leg", "length": 61.97, "rotation": -55.26, "x": 51.57, "y": -0.12 }, + { "name": "L_front_toe3", "parent": "L_front_leg", "length": 45.65, "rotation": -11.13, "x": 54.19, "y": 0.6, "scaleX": 1.134 }, + { "name": "L_front_toe4", "parent": "L_front_leg", "length": 53.47, "rotation": 19.42, "x": 50.6, "y": 7.08, "scaleX": 1.134 }, + { "name": "back", "parent": "COG", "length": 115.37, "rotation": 151.83, "x": 16.03, "y": 27.94 }, + { "name": "R_rear_thigh", "parent": "back", "length": 123.46, "rotation": 104.87, "x": 65.31, "y": 59.89 }, + { "name": "L_rear_thigh", "parent": "R_rear_thigh", "length": 88.05, "rotation": 28.35, "x": -8.59, "y": 30.18 }, + { "name": "L_rear_leg", "parent": "L_rear_thigh", "length": 103.74, "rotation": -122.41, "x": 96.04, "y": -0.97 }, + { "name": "L_wing", "parent": "chest", "length": 301.12, "rotation": -75.51, "x": -7.24, "y": -24.65 }, + { "name": "R_front_thigh", "parent": "chest", "length": 81.63, "rotation": 67.96, "x": -10.89, "y": 28.25 }, + { "name": "R_front_leg", "parent": "R_front_thigh", "length": 66.52, "rotation": 92.7, "x": 83.04, "y": -0.3 }, + { "name": "R_front_toe1", "parent": "R_front_leg", "length": 46.65, "rotation": 8.59, "x": 70.03, "y": 5.31 }, + { "name": "R_front_toe2", "parent": "R_front_leg", "length": 53.66, "rotation": -35.02, "x": 66.52, "y": 0.33 }, + { "name": "R_front_toe3", "parent": "R_front_leg", "length": 58.38, "rotation": -74.67, "x": 62.1, "y": -0.79 }, + { "name": "R_rear_leg", "parent": "R_rear_thigh", "length": 91.06, "rotation": -129.04, "x": 123.46, "y": -0.26 }, + { "name": "R_rear_toe1", "parent": "R_rear_leg", "length": 94.99, "rotation": 141.98, "x": 90.06, "y": 2.12 }, + { "name": "R_rear_toe2", "parent": "R_rear_leg", "length": 99.29, "rotation": 125.32, "x": 89.6, "y": 1.52 }, + { "name": "R_rear_toe3", "parent": "R_rear_leg", "length": 103.45, "rotation": 112.26, "x": 91.06, "y": -0.35 }, + { "name": "neck", "parent": "COG", "length": 41.36, "rotation": 39.05, "x": 64.75, "y": 11.98 }, + { "name": "head", "parent": "neck", "length": 188.83, "rotation": 8.06, "x": 69.96, "y": 2.49 }, + { "name": "R_wing", "parent": "head", "length": 359.5, "rotation": 83.21, "x": -74.68, "y": 20.9 }, + { "name": "chin", "parent": "neck", "length": 153.15, "rotation": -69.07, "x": 64.62, "y": -6.99 }, + { "name": "tail1", "parent": "back", "length": 65.65, "rotation": 44.31, "x": 115.37, "y": -0.19 }, + { "name": "tail2", "parent": "tail1", "length": 54.5, "rotation": 12, "x": 65.65, "y": 0.22 }, + { "name": "tail3", "parent": "tail2", "length": 41.78, "rotation": 1.8, "x": 54.5, "y": 0.37 }, + { "name": "tail4", "parent": "tail3", "length": 34.19, "rotation": -1.8, "x": 41.78, "y": 0.16 }, + { "name": "tail5", "parent": "tail4", "length": 32.32, "rotation": -3.15, "x": 34.19, "y": -0.19 }, + { "name": "tail6", "parent": "tail5", "length": 80.08, "rotation": -29.55, "x": 32.32, "y": -0.23 } +], +"slots": [ + { "name": "L_rear_leg", "bone": "L_rear_leg", "attachment": "L_rear_leg" }, + { "name": "L_rear_thigh", "bone": "L_rear_thigh", "attachment": "L_rear_thigh" }, + { "name": "L_wing", "bone": "L_wing", "attachment": "L_wing01" }, + { "name": "tail6", "bone": "tail6", "attachment": "tail06" }, + { "name": "tail5", "bone": "tail5", "attachment": "tail05" }, + { "name": "tail4", "bone": "tail4", "attachment": "tail04" }, + { "name": "tail3", "bone": "tail3", "attachment": "tail03" }, + { "name": "tail2", "bone": "tail2", "attachment": "tail02" }, + { "name": "tail1", "bone": "tail1", "attachment": "tail01" }, + { "name": "back", "bone": "back", "attachment": "back" }, + { "name": "L_front_thigh", "bone": "L_front_thigh", "attachment": "L_front_thigh" }, + { "name": "L_front_leg", "bone": "L_front_leg", "attachment": "L_front_leg" }, + { "name": "L_front_toe1", "bone": "L_front_toe1", "attachment": "front_toeA" }, + { "name": "L_front_toe4", "bone": "L_front_toe4", "attachment": "front_toeB" }, + { "name": "L_front_toe3", "bone": "L_front_toe3", "attachment": "front_toeB" }, + { "name": "L_front_toe2", "bone": "L_front_toe2", "attachment": "front_toeB" }, + { "name": "chest", "bone": "chest", "attachment": "chest" }, + { "name": "R_rear_toe1", "bone": "R_rear_toe1", "attachment": "rear-toe" }, + { "name": "R_rear_toe2", "bone": "R_rear_toe2", "attachment": "rear-toe" }, + { "name": "R_rear_toe3", "bone": "R_rear_toe3", "attachment": "rear-toe" }, + { "name": "R_rear_leg", "bone": "R_rear_leg", "attachment": "R_rear_leg" }, + { "name": "R_rear_thigh", "bone": "R_rear_thigh", "attachment": "R_rear_thigh" }, + { "name": "R_front_toe1", "bone": "R_front_toe1", "attachment": "front_toeB" }, + { "name": "R_front_thigh", "bone": "R_front_thigh", "attachment": "R_front_thigh" }, + { "name": "R_front_leg", "bone": "R_front_leg", "attachment": "R_front_leg" }, + { "name": "R_front_toe2", "bone": "R_front_toe2", "attachment": "front_toeB" }, + { "name": "R_front_toe3", "bone": "R_front_toe3", "attachment": "front_toeB" }, + { "name": "chin", "bone": "chin", "attachment": "chin" }, + { "name": "R_wing", "bone": "R_wing", "attachment": "R_wing01" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "logo", "bone": "root", "attachment": "logo" } +], +"skins": { + "default": { + "L_front_leg": { + "L_front_leg": { "x": 14.68, "y": 0.48, "rotation": 15.99, "width": 84, "height": 57 } + }, + "L_front_thigh": { + "L_front_thigh": { "x": 27.66, "y": -11.58, "rotation": 58.66, "width": 84, "height": 72 } + }, + "L_front_toe1": { + "front_toeA": { "x": 31.92, "y": 0.61, "rotation": 109.55, "width": 29, "height": 50 } + }, + "L_front_toe2": { + "front_toeB": { "x": 26.83, "y": -4.94, "rotation": 109.51, "width": 56, "height": 57 } + }, + "L_front_toe3": { + "front_toeB": { "x": 18.21, "y": -7.21, "scaleX": 0.881, "scaleY": 0.94, "rotation": 99.71, "width": 56, "height": 57 } + }, + "L_front_toe4": { + "front_toeB": { "x": 23.21, "y": -11.68, "scaleX": 0.881, "rotation": 79.89, "width": 56, "height": 57 } + }, + "L_rear_leg": { + "L_rear_leg": { "x": 67.29, "y": 12.62, "rotation": -162.65, "width": 206, "height": 177 } + }, + "L_rear_thigh": { + "L_rear_thigh": { "x": 56.03, "y": 27.38, "rotation": 74.93, "width": 91, "height": 149 } + }, + "L_wing": { + "L_wing01": { "x": 129.21, "y": -45.49, "rotation": -83.7, "width": 191, "height": 256 }, + "L_wing02": { "x": 126.37, "y": -31.69, "rotation": -86.18, "width": 179, "height": 269 }, + "L_wing03": { "x": 110.26, "y": -90.89, "rotation": -86.18, "width": 186, "height": 207 }, + "L_wing04": { "x": -61.61, "y": -83.26, "rotation": -86.18, "width": 188, "height": 135 }, + "L_wing05": { "x": -90.01, "y": -78.14, "rotation": -86.18, "width": 218, "height": 213 }, + "L_wing06": { "x": -143.76, "y": -83.71, "rotation": -86.18, "width": 192, "height": 331 }, + "L_wing07": { "x": -133.04, "y": -33.89, "rotation": -86.18, "width": 159, "height": 255 }, + "L_wing08": { "x": 50.15, "y": -15.71, "rotation": -86.18, "width": 164, "height": 181 }, + "L_wing09": { "x": 85.94, "y": -11.32, "rotation": -86.18, "width": 204, "height": 167 } + }, + "R_front_leg": { + "R_front_leg": { "x": 17.79, "y": 4.22, "rotation": 37.62, "width": 101, "height": 89 } + }, + "R_front_thigh": { + "R_front_thigh": { "x": 35.28, "y": 2.11, "rotation": 130.33, "width": 108, "height": 108 } + }, + "R_front_toe1": { + "front_toeB": { "x": 24.49, "y": -2.61, "rotation": 104.18, "width": 56, "height": 57 } + }, + "R_front_toe2": { + "front_toeB": { "x": 26.39, "y": 1.16, "rotation": 104.57, "width": 56, "height": 57 } + }, + "R_front_toe3": { + "front_toeB": { "x": 30.66, "y": -0.06, "rotation": 112.29, "width": 56, "height": 57 } + }, + "R_rear_leg": { + "R_rear_leg": { "x": 60.87, "y": -5.72, "rotation": -127.66, "width": 116, "height": 100 } + }, + "R_rear_thigh": { + "R_rear_thigh": { "x": 53.25, "y": 12.58, "rotation": 103.29, "width": 91, "height": 149 } + }, + "R_rear_toe1": { + "rear-toe": { "x": 54.75, "y": -5.72, "rotation": 134.79, "width": 109, "height": 77 } + }, + "R_rear_toe2": { + "rear-toe": { "x": 57.02, "y": -7.22, "rotation": 134.42, "width": 109, "height": 77 } + }, + "R_rear_toe3": { + "rear-toe": { "x": 47.46, "y": -7.64, "rotation": 134.34, "width": 109, "height": 77 } + }, + "R_wing": { + "R_wing01": { "x": 170.08, "y": -23.67, "rotation": -130.33, "width": 219, "height": 310 }, + "R_wing02": { "x": 171.14, "y": -19.33, "rotation": -130.33, "width": 203, "height": 305 }, + "R_wing03": { "x": 166.46, "y": 29.23, "rotation": -130.33, "width": 272, "height": 247 }, + "R_wing04": { "x": 42.94, "y": 134.05, "rotation": -130.33, "width": 279, "height": 144 }, + "R_wing05": { "x": -8.83, "y": 142.59, "rotation": -130.33, "width": 251, "height": 229 }, + "R_wing06": { "x": -123.33, "y": 111.22, "rotation": -130.33, "width": 200, "height": 366 }, + "R_wing07": { "x": -40.17, "y": 118.03, "rotation": -130.33, "width": 200, "height": 263 }, + "R_wing08": { "x": 48.01, "y": 28.76, "rotation": -130.33, "width": 234, "height": 254 }, + "R_wing09": { "x": 128.1, "y": 21.12, "rotation": -130.33, "width": 248, "height": 204 } + }, + "back": { + "back": { "x": 35.84, "y": 19.99, "rotation": -151.83, "width": 190, "height": 185 } + }, + "chest": { + "chest": { "x": -14.6, "y": 24.78, "rotation": -161.7, "width": 136, "height": 122 } + }, + "chin": { + "chin": { "x": 66.55, "y": 7.32, "rotation": 30.01, "width": 214, "height": 146 } + }, + "head": { + "head": { "x": 76.68, "y": 32.21, "rotation": -47.12, "width": 296, "height": 260 } + }, + "logo": { + "logo": { "y": -176.72, "width": 897, "height": 92 } + }, + "tail1": { + "tail01": { "x": 22.59, "y": -4.5, "rotation": 163.85, "width": 120, "height": 153 } + }, + "tail2": { + "tail02": { "x": 18.11, "y": -1.75, "rotation": 151.84, "width": 95, "height": 120 } + }, + "tail3": { + "tail03": { "x": 16.94, "y": -2, "rotation": 150.04, "width": 73, "height": 92 } + }, + "tail4": { + "tail04": { "x": 15.34, "y": -2.17, "rotation": 151.84, "width": 56, "height": 71 } + }, + "tail5": { + "tail05": { "x": 15.05, "y": -3.57, "rotation": 155, "width": 52, "height": 59 } + }, + "tail6": { + "tail06": { "x": 28.02, "y": -16.83, "rotation": -175.44, "width": 95, "height": 68 } + } + } +}, +"animations": { + "flying": { + "slots": { + "L_wing": { + "attachment": [ + { "time": 0, "name": "L_wing01" }, + { "time": 0.0666, "name": "L_wing02" }, + { "time": 0.1333, "name": "L_wing03" }, + { "time": 0.2, "name": "L_wing04" }, + { "time": 0.2666, "name": "L_wing05" }, + { "time": 0.3333, "name": "L_wing06" }, + { "time": 0.4, "name": "L_wing07" }, + { "time": 0.4666, "name": "L_wing08" }, + { "time": 0.5333, "name": "L_wing09" }, + { "time": 0.6, "name": "L_wing01" }, + { "time": 0.7333, "name": "L_wing02" }, + { "time": 0.8, "name": "L_wing03" }, + { "time": 0.8333, "name": "L_wing04" }, + { "time": 0.8666, "name": "L_wing05" }, + { "time": 0.9, "name": "L_wing06" }, + { "time": 0.9333, "name": "L_wing07" }, + { "time": 0.9666, "name": "L_wing08" }, + { "time": 1, "name": "L_wing01" } + ] + }, + "R_wing": { + "attachment": [ + { "time": 0, "name": "R_wing01" }, + { "time": 0.0666, "name": "R_wing02" }, + { "time": 0.1333, "name": "R_wing03" }, + { "time": 0.2, "name": "R_wing04" }, + { "time": 0.2666, "name": "R_wing05" }, + { "time": 0.3333, "name": "R_wing06" }, + { "time": 0.4, "name": "R_wing07" }, + { "time": 0.4666, "name": "R_wing08" }, + { "time": 0.5333, "name": "R_wing09" }, + { "time": 0.6, "name": "R_wing01" }, + { "time": 0.7333, "name": "R_wing02" }, + { "time": 0.7666, "name": "R_wing02" }, + { "time": 0.8, "name": "R_wing03" }, + { "time": 0.8333, "name": "R_wing04" }, + { "time": 0.8666, "name": "R_wing05" }, + { "time": 0.9, "name": "R_wing06" }, + { "time": 0.9333, "name": "R_wing07" }, + { "time": 0.9666, "name": "R_wing08" }, + { "time": 1, "name": "R_wing01" } + ] + } + }, + "bones": { + "back": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 17.39 }, + { "time": 0.5, "angle": 0 }, + { "time": 0.8333, "angle": 7 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -8.18 }, + { "time": 0.3333, "angle": -23.16 }, + { "time": 0.5, "angle": -18.01 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "chest": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "tail1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -2.42 }, + { "time": 0.3333, "angle": -26.2 }, + { "time": 0.5, "angle": -29.65 }, + { "time": 0.6666, "angle": -23.15 }, + { "time": 0.8333, "angle": -55.46 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_rear_thigh": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "tail2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -1.12 }, + { "time": 0.3333, "angle": 10.48 }, + { "time": 0.5, "angle": 7.89 }, + { "time": 0.8333, "angle": -10.38 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "tail3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 8.24 }, + { "time": 0.3333, "angle": 15.21 }, + { "time": 0.5, "angle": 14.84 }, + { "time": 0.8333, "angle": -18.9 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "tail4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 17.46 }, + { "time": 0.3333, "angle": 22.15 }, + { "time": 0.5, "angle": 22.76 }, + { "time": 0.8333, "angle": -4.37 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "tail5": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 7.4 }, + { "time": 0.3333, "angle": 28.5 }, + { "time": 0.5, "angle": 21.33 }, + { "time": 0.8333, "angle": -1.27 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "tail6": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 45.99 }, + { "time": 0.4, "angle": 43.53 }, + { "time": 0.5, "angle": 61.79 }, + { "time": 0.8333, "angle": 13.28 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_rear_leg": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -14.21 }, + { "time": 0.5, "angle": 47.17 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_rear_toe3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": -36.06 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_rear_toe2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": -20.32 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_rear_toe1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": -18.71 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.408, 1.36, 0.675, 1.43 ] + }, + { "time": 0.5, "angle": 1.03 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "chin": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.416, 1.15, 0.494, 1.27 ] + }, + { "time": 0.3333, "angle": -5.15 }, + { "time": 0.5, "angle": 9.79 }, + { "time": 0.6666, "angle": 18.94 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "L_front_thigh": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -19.18 }, + { "time": 0.3333, "angle": -32.02 }, + { "time": 0.5, "angle": -19.62 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_front_thigh": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -12.96 }, + { "time": 0.5, "angle": 16.2 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "L_front_leg": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 37.77 }, + { "time": 0.5, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "L_front_toe1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -16.08 }, + { "time": 0.5, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "L_front_toe2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1.33, "y": 1.029 }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "L_front_toe4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": 26.51 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1.21, "y": 0.993 }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "L_front_toe3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": 16.99 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1.354, "y": 1.007 }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_front_leg": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 26.07 }, + { "time": 0.5, "angle": -21.6 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_front_toe1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 29.23 }, + { "time": 0.5, "angle": 34.83 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1.412, "y": 1 }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_front_toe2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 24.89 }, + { "time": 0.5, "angle": 23.16 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1.407, "y": 1.057 }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_front_toe3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 11.01 }, + { "time": 0.5, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1.329, "y": 1.181 }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "L_rear_leg": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.3666, "angle": 25.19 }, + { "time": 0.6666, "angle": -15.65 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "COG": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.456, 0.2, 0.422, 1.06 ] + }, + { "time": 0.3333, "angle": 23.93 }, + { + "time": 0.6666, + "angle": 337.8, + "curve": [ 0.41, 0, 0.887, 0.75 ] + }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.33, 1, 0.816, 1.33 ] + }, + { + "time": 0.5, + "x": 0, + "y": 113.01, + "curve": [ 0.396, 0, 0.709, 2.03 ] + }, + { "time": 1, "x": 0, "y": 0 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/examples/dragon/export/dragon.png b/examples/dragon/export/dragon.png new file mode 100644 index 000000000..808d7ded9 Binary files /dev/null and b/examples/dragon/export/dragon.png differ diff --git a/examples/dragon/export/dragon.skel b/examples/dragon/export/dragon.skel new file mode 100644 index 000000000..50e45e120 Binary files /dev/null and b/examples/dragon/export/dragon.skel differ diff --git a/examples/dragon/export/dragon2.png b/examples/dragon/export/dragon2.png new file mode 100644 index 000000000..905bf363b Binary files /dev/null and b/examples/dragon/export/dragon2.png differ diff --git a/examples/dragon/images/L_front_leg.png b/examples/dragon/images/L_front_leg.png new file mode 100644 index 000000000..585a2585a Binary files /dev/null and b/examples/dragon/images/L_front_leg.png differ diff --git a/examples/dragon/images/L_front_thigh.png b/examples/dragon/images/L_front_thigh.png new file mode 100644 index 000000000..48380f868 Binary files /dev/null and b/examples/dragon/images/L_front_thigh.png differ diff --git a/examples/dragon/images/L_rear_leg.png b/examples/dragon/images/L_rear_leg.png new file mode 100644 index 000000000..51f5419ea Binary files /dev/null and b/examples/dragon/images/L_rear_leg.png differ diff --git a/examples/dragon/images/L_rear_thigh.png b/examples/dragon/images/L_rear_thigh.png new file mode 100644 index 000000000..c72754aa5 Binary files /dev/null and b/examples/dragon/images/L_rear_thigh.png differ diff --git a/examples/dragon/images/L_wing01.png b/examples/dragon/images/L_wing01.png new file mode 100644 index 000000000..aa376652d Binary files /dev/null and b/examples/dragon/images/L_wing01.png differ diff --git a/examples/dragon/images/L_wing02.png b/examples/dragon/images/L_wing02.png new file mode 100644 index 000000000..a0eb34e00 Binary files /dev/null and b/examples/dragon/images/L_wing02.png differ diff --git a/examples/dragon/images/L_wing03.png b/examples/dragon/images/L_wing03.png new file mode 100644 index 000000000..36592d464 Binary files /dev/null and b/examples/dragon/images/L_wing03.png differ diff --git a/examples/dragon/images/L_wing04.png b/examples/dragon/images/L_wing04.png new file mode 100644 index 000000000..19929852d Binary files /dev/null and b/examples/dragon/images/L_wing04.png differ diff --git a/examples/dragon/images/L_wing05.png b/examples/dragon/images/L_wing05.png new file mode 100644 index 000000000..80f450927 Binary files /dev/null and b/examples/dragon/images/L_wing05.png differ diff --git a/examples/dragon/images/L_wing06.png b/examples/dragon/images/L_wing06.png new file mode 100644 index 000000000..35482d857 Binary files /dev/null and b/examples/dragon/images/L_wing06.png differ diff --git a/examples/dragon/images/L_wing07.png b/examples/dragon/images/L_wing07.png new file mode 100644 index 000000000..a2417fcc4 Binary files /dev/null and b/examples/dragon/images/L_wing07.png differ diff --git a/examples/dragon/images/L_wing08.png b/examples/dragon/images/L_wing08.png new file mode 100644 index 000000000..3ec424129 Binary files /dev/null and b/examples/dragon/images/L_wing08.png differ diff --git a/examples/dragon/images/L_wing09.png b/examples/dragon/images/L_wing09.png new file mode 100644 index 000000000..671db9482 Binary files /dev/null and b/examples/dragon/images/L_wing09.png differ diff --git a/examples/dragon/images/R_front_leg.png b/examples/dragon/images/R_front_leg.png new file mode 100644 index 000000000..d7c6ef7eb Binary files /dev/null and b/examples/dragon/images/R_front_leg.png differ diff --git a/examples/dragon/images/R_front_thigh.png b/examples/dragon/images/R_front_thigh.png new file mode 100644 index 000000000..544428439 Binary files /dev/null and b/examples/dragon/images/R_front_thigh.png differ diff --git a/examples/dragon/images/R_rear_leg.png b/examples/dragon/images/R_rear_leg.png new file mode 100644 index 000000000..3eaf94d5f Binary files /dev/null and b/examples/dragon/images/R_rear_leg.png differ diff --git a/examples/dragon/images/R_rear_thigh.png b/examples/dragon/images/R_rear_thigh.png new file mode 100644 index 000000000..adaf6d62c Binary files /dev/null and b/examples/dragon/images/R_rear_thigh.png differ diff --git a/examples/dragon/images/R_wing01.png b/examples/dragon/images/R_wing01.png new file mode 100644 index 000000000..c20d24f0a Binary files /dev/null and b/examples/dragon/images/R_wing01.png differ diff --git a/examples/dragon/images/R_wing02.png b/examples/dragon/images/R_wing02.png new file mode 100644 index 000000000..d5d94a599 Binary files /dev/null and b/examples/dragon/images/R_wing02.png differ diff --git a/examples/dragon/images/R_wing03.png b/examples/dragon/images/R_wing03.png new file mode 100644 index 000000000..6e2af7a39 Binary files /dev/null and b/examples/dragon/images/R_wing03.png differ diff --git a/examples/dragon/images/R_wing04.png b/examples/dragon/images/R_wing04.png new file mode 100644 index 000000000..0c34329f7 Binary files /dev/null and b/examples/dragon/images/R_wing04.png differ diff --git a/examples/dragon/images/R_wing05.png b/examples/dragon/images/R_wing05.png new file mode 100644 index 000000000..5c28703bf Binary files /dev/null and b/examples/dragon/images/R_wing05.png differ diff --git a/examples/dragon/images/R_wing06.png b/examples/dragon/images/R_wing06.png new file mode 100644 index 000000000..4a24b6e6a Binary files /dev/null and b/examples/dragon/images/R_wing06.png differ diff --git a/examples/dragon/images/R_wing07.png b/examples/dragon/images/R_wing07.png new file mode 100644 index 000000000..2c936dae6 Binary files /dev/null and b/examples/dragon/images/R_wing07.png differ diff --git a/examples/dragon/images/R_wing08.png b/examples/dragon/images/R_wing08.png new file mode 100644 index 000000000..70c13f7a2 Binary files /dev/null and b/examples/dragon/images/R_wing08.png differ diff --git a/examples/dragon/images/R_wing09.png b/examples/dragon/images/R_wing09.png new file mode 100644 index 000000000..7d6c47a46 Binary files /dev/null and b/examples/dragon/images/R_wing09.png differ diff --git a/examples/dragon/images/back.png b/examples/dragon/images/back.png new file mode 100644 index 000000000..060ebb1ed Binary files /dev/null and b/examples/dragon/images/back.png differ diff --git a/examples/dragon/images/chest.png b/examples/dragon/images/chest.png new file mode 100644 index 000000000..0fd160f0d Binary files /dev/null and b/examples/dragon/images/chest.png differ diff --git a/examples/dragon/images/chin.png b/examples/dragon/images/chin.png new file mode 100644 index 000000000..b9793449c Binary files /dev/null and b/examples/dragon/images/chin.png differ diff --git a/examples/dragon/images/front_toeA.png b/examples/dragon/images/front_toeA.png new file mode 100644 index 000000000..1bebb04c4 Binary files /dev/null and b/examples/dragon/images/front_toeA.png differ diff --git a/examples/dragon/images/front_toeB.png b/examples/dragon/images/front_toeB.png new file mode 100644 index 000000000..9597b55d0 Binary files /dev/null and b/examples/dragon/images/front_toeB.png differ diff --git a/examples/dragon/images/head.png b/examples/dragon/images/head.png new file mode 100644 index 000000000..934e1cd5a Binary files /dev/null and b/examples/dragon/images/head.png differ diff --git a/examples/dragon/images/logo.png b/examples/dragon/images/logo.png new file mode 100644 index 000000000..e824c48ad Binary files /dev/null and b/examples/dragon/images/logo.png differ diff --git a/examples/dragon/images/rear-toe.png b/examples/dragon/images/rear-toe.png new file mode 100644 index 000000000..3f9e32e52 Binary files /dev/null and b/examples/dragon/images/rear-toe.png differ diff --git a/examples/dragon/images/tail01.png b/examples/dragon/images/tail01.png new file mode 100644 index 000000000..eee316ae2 Binary files /dev/null and b/examples/dragon/images/tail01.png differ diff --git a/examples/dragon/images/tail02.png b/examples/dragon/images/tail02.png new file mode 100644 index 000000000..924f25731 Binary files /dev/null and b/examples/dragon/images/tail02.png differ diff --git a/examples/dragon/images/tail03.png b/examples/dragon/images/tail03.png new file mode 100644 index 000000000..6fb1f9b92 Binary files /dev/null and b/examples/dragon/images/tail03.png differ diff --git a/examples/dragon/images/tail04.png b/examples/dragon/images/tail04.png new file mode 100644 index 000000000..ef1819b5b Binary files /dev/null and b/examples/dragon/images/tail04.png differ diff --git a/examples/dragon/images/tail05.png b/examples/dragon/images/tail05.png new file mode 100644 index 000000000..913512e1a Binary files /dev/null and b/examples/dragon/images/tail05.png differ diff --git a/examples/dragon/images/tail06.png b/examples/dragon/images/tail06.png new file mode 100644 index 000000000..997c8b594 Binary files /dev/null and b/examples/dragon/images/tail06.png differ diff --git a/examples/dragon/images/template.png b/examples/dragon/images/template.png new file mode 100644 index 000000000..c4e7e06ab Binary files /dev/null and b/examples/dragon/images/template.png differ diff --git a/examples/dragon/license.txt b/examples/dragon/license.txt new file mode 100644 index 000000000..41ebddd5b --- /dev/null +++ b/examples/dragon/license.txt @@ -0,0 +1,5 @@ +Copyright (c) 2013, ODI EntertainmenT + +The project file and images in this "dragon" project are provided for +demonstration purposes only and may not be redistributed for any reason nor +used as the basis for derivative work. \ No newline at end of file diff --git a/examples/export/atlas-0.5-pma.json b/examples/export/atlas-0.5-pma.json new file mode 100644 index 000000000..9bd4e5678 --- /dev/null +++ b/examples/export/atlas-0.5-pma.json @@ -0,0 +1,38 @@ +{ +"pot": true, +"paddingX": 2, +"paddingY": 2, +"edgePadding": true, +"duplicatePadding": false, +"rotation": true, +"minWidth": 16, +"minHeight": 16, +"maxWidth": 1024, +"maxHeight": 1024, +"square": false, +"stripWhitespaceX": false, +"stripWhitespaceY": false, +"alphaThreshold": 0, +"filterMin": "Linear", +"filterMag": "Linear", +"wrapX": "ClampToEdge", +"wrapY": "ClampToEdge", +"format": "RGBA8888", +"alias": true, +"outputFormat": "png", +"jpegQuality": 0.9, +"ignoreBlankImages": true, +"fast": false, +"debug": false, +"silent": false, +"combineSubdirectories": false, +"flattenPaths": false, +"premultiplyAlpha": true, +"useIndexes": false, +"bleed": false, +"limitMemory": false, +"grid": false, +"scale": [ 0.5 ], +"scaleSuffix": [ "" ], +"atlasExtension": ".atlas" +} \ No newline at end of file diff --git a/examples/export/atlas-0.5.json b/examples/export/atlas-0.5.json new file mode 100644 index 000000000..bad7dfb34 --- /dev/null +++ b/examples/export/atlas-0.5.json @@ -0,0 +1,38 @@ +{ +"pot": true, +"paddingX": 2, +"paddingY": 2, +"edgePadding": true, +"duplicatePadding": false, +"rotation": true, +"minWidth": 16, +"minHeight": 16, +"maxWidth": 1024, +"maxHeight": 1024, +"square": false, +"stripWhitespaceX": false, +"stripWhitespaceY": false, +"alphaThreshold": 0, +"filterMin": "Linear", +"filterMag": "Linear", +"wrapX": "ClampToEdge", +"wrapY": "ClampToEdge", +"format": "RGBA8888", +"alias": true, +"outputFormat": "png", +"jpegQuality": 0.9, +"ignoreBlankImages": true, +"fast": false, +"debug": false, +"silent": false, +"combineSubdirectories": false, +"flattenPaths": false, +"premultiplyAlpha": false, +"useIndexes": false, +"bleed": false, +"limitMemory": false, +"grid": false, +"scale": [ 0.5 ], +"scaleSuffix": [ "" ], +"atlasExtension": ".atlas" +} \ No newline at end of file diff --git a/examples/export/atlas-1.0-pma.json b/examples/export/atlas-1.0-pma.json new file mode 100644 index 000000000..4cc60d3c5 --- /dev/null +++ b/examples/export/atlas-1.0-pma.json @@ -0,0 +1,38 @@ +{ +"pot": true, +"paddingX": 2, +"paddingY": 2, +"edgePadding": true, +"duplicatePadding": false, +"rotation": true, +"minWidth": 16, +"minHeight": 16, +"maxWidth": 1024, +"maxHeight": 1024, +"square": false, +"stripWhitespaceX": false, +"stripWhitespaceY": false, +"alphaThreshold": 0, +"filterMin": "Linear", +"filterMag": "Linear", +"wrapX": "ClampToEdge", +"wrapY": "ClampToEdge", +"format": "RGBA8888", +"alias": true, +"outputFormat": "png", +"jpegQuality": 0.9, +"ignoreBlankImages": true, +"fast": false, +"debug": false, +"silent": false, +"combineSubdirectories": false, +"flattenPaths": false, +"premultiplyAlpha": true, +"useIndexes": false, +"bleed": false, +"limitMemory": false, +"grid": false, +"scale": [ 1 ], +"scaleSuffix": [ "" ], +"atlasExtension": ".atlas" +} \ No newline at end of file diff --git a/examples/export/atlas-1.0.json b/examples/export/atlas-1.0.json new file mode 100644 index 000000000..e2e638b67 --- /dev/null +++ b/examples/export/atlas-1.0.json @@ -0,0 +1,38 @@ +{ +"pot": true, +"paddingX": 2, +"paddingY": 2, +"edgePadding": true, +"duplicatePadding": false, +"rotation": true, +"minWidth": 16, +"minHeight": 16, +"maxWidth": 1024, +"maxHeight": 1024, +"square": false, +"stripWhitespaceX": false, +"stripWhitespaceY": false, +"alphaThreshold": 0, +"filterMin": "Linear", +"filterMag": "Linear", +"wrapX": "ClampToEdge", +"wrapY": "ClampToEdge", +"format": "RGBA8888", +"alias": true, +"outputFormat": "png", +"jpegQuality": 0.9, +"ignoreBlankImages": true, +"fast": false, +"debug": false, +"silent": false, +"combineSubdirectories": false, +"flattenPaths": false, +"premultiplyAlpha": false, +"useIndexes": false, +"bleed": false, +"limitMemory": false, +"grid": false, +"scale": [ 1 ], +"scaleSuffix": [ "" ], +"atlasExtension": ".atlas" +} \ No newline at end of file diff --git a/examples/export/binary.json b/examples/export/binary.json new file mode 100644 index 000000000..25353bb00 --- /dev/null +++ b/examples/export/binary.json @@ -0,0 +1,5 @@ +{ +"class": "binary", +"extension": ".skel", +"nonessential": "true" +} \ No newline at end of file diff --git a/examples/export/export.bat b/examples/export/export.bat new file mode 100644 index 000000000..fa0cb745b --- /dev/null +++ b/examples/export/export.bat @@ -0,0 +1,92 @@ +@echo off + +echo Cleaning... +del /q ..\alien\export\* +del /q ..\dragon\export\* +del /q ..\goblins\export\* +del /q ..\hero\export\* +del /q ..\powerup\export\* +del /q ..\speedy\export\* +del /q ..\spineboy\export\* +del /q ..\spineboy-old\export\* +del /q ..\spinosaurus\export\* +del /q ..\stretchyman\export\* +del /q ..\raptor\export\* +del /q ..\tank\export\* +del /q ..\vine\export\* + +echo. +echo Exporting... +"C:\Program Files (x86)\Spine\Spine.com" ^ +-i ../alien/alien.spine -o ../alien/export -e json.json ^ +-i ../alien/alien.spine -o ../alien/export -e binary.json ^ +-i ../alien/images -o ../alien/export -n alien -p atlas-0.5.json ^ +-i ../alien/images -o ../alien/export -n alien-pma -p atlas-0.5-pma.json ^ + +-i ../dragon/dragon.spine -o ../dragon/export -e json.json ^ +-i ../dragon/dragon.spine -o ../dragon/export -e binary.json ^ +-i ../dragon/images -o ../dragon/export -n dragon -p atlas-1.0.json ^ +-i ../dragon/images -o ../dragon/export -n dragon-pma -p atlas-1.0-pma.json ^ + +-i ../goblins/goblins.spine -o ../goblins/export -e json.json ^ +-i ../goblins/goblins.spine -o ../goblins/export -e binary.json ^ +-i ../goblins/goblins-mesh.spine -o ../goblins/export -e json.json ^ +-i ../goblins/goblins-mesh.spine -o ../goblins/export -e binary.json ^ +-i ../goblins/images -o ../goblins/export -n goblins -p atlas-1.0.json ^ +-i ../goblins/images -o ../goblins/export -n goblins-pma -p atlas-1.0-pma.json ^ + +-i ../hero/hero.spine -o ../hero/export -e json.json ^ +-i ../hero/hero.spine -o ../hero/export -e binary.json ^ +-i ../hero/hero-mesh.spine -o ../hero/export -e json.json ^ +-i ../hero/hero-mesh.spine -o ../hero/export -e binary.json ^ +-i ../hero/images -o ../hero/export -n hero -p atlas-1.0.json ^ +-i ../hero/images -o ../hero/export -n hero-pma -p atlas-1.0-pma.json ^ + +-i ../powerup/powerup.spine -o ../powerup/export -e json.json ^ +-i ../powerup/powerup.spine -o ../powerup/export -e binary.json ^ +-i ../powerup/images -o ../powerup/export -n powerup -p atlas-1.0.json ^ +-i ../powerup/images -o ../powerup/export -n powerup-pma -p atlas-1.0-pma.json ^ + +-i ../speedy/speedy.spine -o ../speedy/export -e json.json ^ +-i ../speedy/speedy.spine -o ../speedy/export -e binary.json ^ +-i ../speedy/images -o ../speedy/export -n speedy -p atlas-1.0.json ^ +-i ../speedy/images -o ../speedy/export -n speedy-pma -p atlas-1.0-pma.json ^ + +-i ../spineboy/spineboy.spine -o ../spineboy/export -e json.json ^ +-i ../spineboy/spineboy.spine -o ../spineboy/export -e binary.json ^ +-i ../spineboy/spineboy-mesh.spine -o ../spineboy/export -e json.json ^ +-i ../spineboy/spineboy-mesh.spine -o ../spineboy/export -e binary.json ^ +-i ../spineboy/images -o ../spineboy/export -n spineboy -p atlas-1.0.json ^ +-i ../spineboy/images -o ../spineboy/export -n spineboy-pma -p atlas-1.0-pma.json ^ + +-i ../spineboy-old/spineboy-old.spine -o ../spineboy-old/export -e json.json ^ +-i ../spineboy-old/spineboy-old.spine -o ../spineboy-old/export -e binary.json ^ +-i ../spineboy-old/images -o ../spineboy-old/export -n spineboy-old -p atlas-1.0.json ^ +-i ../spineboy-old/images -o ../spineboy-old/export -n spineboy-old-pma -p atlas-1.0-pma.json ^ +-i ../spineboy-old/normal -o ../spineboy-old/export -n spineboy-old-normal -p atlas-1.0.json ^ +-i ../spineboy-old/diffuse -o ../spineboy-old/export -n spineboy-old-diffuse -p atlas-1.0.json ^ + +-i ../spinosaurus/spinosaurus.spine -o ../spinosaurus/export -e json.json ^ +-i ../spinosaurus/spinosaurus.spine -o ../spinosaurus/export -e binary.json ^ + +-i ../stretchyman/stretchyman.spine -o ../stretchyman/export -e json.json ^ +-i ../stretchyman/stretchyman.spine -o ../stretchyman/export -e binary.json ^ +-i ../stretchyman/images -o ../stretchyman/export -n stretchyman -p atlas-1.0.json ^ +-i ../stretchyman/images -o ../stretchyman/export -n stretchyman-pma -p atlas-1.0-pma.json ^ + +-i ../raptor/raptor.spine -o ../raptor/export -e json.json ^ +-i ../raptor/raptor.spine -o ../raptor/export -e binary.json ^ +-i ../raptor/images -o ../raptor/export -n raptor -p atlas-0.5.json ^ +-i ../raptor/images -o ../raptor/export -n raptor-pma -p atlas-0.5-pma.json ^ + +-i ../tank/tank.spine -o ../tank/export -e json.json ^ +-i ../tank/tank.spine -o ../tank/export -e binary.json ^ +-i ../tank/images -o ../tank/export -n tank -p atlas-0.5.json ^ +-i ../tank/images -o ../tank/export -n tank-pma -p atlas-0.5-pma.json ^ + +-i ../vine/vine.spine -o ../vine/export -e json.json ^ +-i ../vine/vine.spine -o ../vine/export -e binary.json ^ +-i ../vine/images -o ../vine/export -n vine -p atlas-1.0.json ^ +-i ../vine/images -o ../vine/export -n vine-pma -p atlas-1.0-pma.json + +del /q ..\spineboy-old\export\*-normal.atlas diff --git a/examples/export/json.json b/examples/export/json.json new file mode 100644 index 000000000..3f52c6c91 --- /dev/null +++ b/examples/export/json.json @@ -0,0 +1,7 @@ +{ +"class": "json", +"extension": ".json", +"format": "JSON", +"nonessential": true, +"prettyPrint": true +} \ No newline at end of file diff --git a/examples/export/runtimes.bat b/examples/export/runtimes.bat new file mode 100644 index 000000000..1577cbcf7 --- /dev/null +++ b/examples/export/runtimes.bat @@ -0,0 +1,26 @@ +@echo off +echo Copying to runtimes... + +echo. +echo. spine-libgdx +del /q ..\..\spine-libgdx\spine-libgdx-tests\assets\goblins\* +copy /Y ..\goblins\export\*.json ..\..\spine-libgdx\spine-libgdx-tests\assets\goblins\ +copy /Y ..\goblins\export\*.skel ..\..\spine-libgdx\spine-libgdx-tests\assets\goblins\ +copy /Y ..\goblins\export\*-pma.* ..\..\spine-libgdx\spine-libgdx-tests\assets\goblins\ + +del /q ..\..\spine-libgdx\spine-libgdx-tests\assets\raptor\* +copy /Y ..\raptor\export\*.json ..\..\spine-libgdx\spine-libgdx-tests\assets\raptor\ +copy /Y ..\raptor\export\*.skel ..\..\spine-libgdx\spine-libgdx-tests\assets\raptor\ +copy /Y ..\raptor\export\*-pma.* ..\..\spine-libgdx\spine-libgdx-tests\assets\raptor\ + +del /q ..\..\spine-libgdx\spine-libgdx-tests\assets\spineboy\* +copy /Y ..\spineboy\export\*.json ..\..\spine-libgdx\spine-libgdx-tests\assets\spineboy\ +copy /Y ..\spineboy\export\*.skel ..\..\spine-libgdx\spine-libgdx-tests\assets\spineboy\ +copy /Y ..\spineboy\export\*-pma.* ..\..\spine-libgdx\spine-libgdx-tests\assets\spineboy\ + +del /q ..\..\spine-libgdx\spine-libgdx-tests\assets\spineboy-old\* +copy /Y ..\spineboy-old\export\*.json ..\..\spine-libgdx\spine-libgdx-tests\assets\spineboy-old\ +copy /Y ..\spineboy-old\export\*.skel ..\..\spine-libgdx\spine-libgdx-tests\assets\spineboy-old\ +copy /Y ..\spineboy-old\export\*-pma.* ..\..\spine-libgdx\spine-libgdx-tests\assets\spineboy-old\ +copy /Y ..\spineboy-old\export\*-diffuse.* ..\..\spine-libgdx\spine-libgdx-tests\assets\spineboy-old\ +copy /Y ..\spineboy-old\export\*-normal.* ..\..\spine-libgdx\spine-libgdx-tests\assets\spineboy-old\ diff --git a/spine-as3/spine-as3-example/src/goblins-mesh.json b/examples/goblins/export/goblins-mesh.json similarity index 69% rename from spine-as3/spine-as3-example/src/goblins-mesh.json rename to examples/goblins/export/goblins-mesh.json index 67a624a36..8911049fc 100644 --- a/spine-as3/spine-as3-example/src/goblins-mesh.json +++ b/examples/goblins/export/goblins-mesh.json @@ -1,26 +1,27 @@ { +"skeleton": { "hash": "3Z6FWT/Kylgd8cbSWBEwAsOcPEM", "spine": "3.4.00", "width": 266.87, "height": 349.55, "images": "./images/" }, "bones": [ { "name": "root" }, { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, - { "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 }, + { "name": "torso", "parent": "hip", "length": 85.82, "rotation": 93.92, "x": -6.42, "y": 1.97 }, + { "name": "neck", "parent": "torso", "length": 18.38, "rotation": -1.51, "x": 81.67, "y": -6.34 }, + { "name": "head", "parent": "neck", "length": 68.28, "rotation": -13.92, "x": 20.93, "y": 11.59 }, + { "name": "left shoulder", "parent": "torso", "length": 35.43, "rotation": -156.96, "x": 74.04, "y": -20.38 }, + { "name": "left arm", "parent": "left shoulder", "length": 35.62, "rotation": 28.16, "x": 37.85, "y": -2.34 }, + { "name": "left upper leg", "parent": "hip", "length": 50.39, "rotation": -89.09, "x": 14.45, "y": 2.81 }, + { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "rotation": -16.65, "x": 56.34, "y": 0.98 }, + { "name": "left foot", "parent": "left lower leg", "length": 46.5, "rotation": 102.43, "x": 58.94, "y": -7.61 }, + { "name": "left hand", "parent": "left arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.07 }, { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, - { "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 }, - { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 }, - { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 }, - { "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 }, - { "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 }, - { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 }, - { "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 }, - { "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 }, - { "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 }, - { "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 }, - { "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 }, - { "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 }, - { "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 }, - { "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 }, - { "name": "spear1", "parent": "left hand", "length": 65.06, "x": 0.48, "y": 17.03, "rotation": 102.43 }, - { "name": "spear2", "parent": "spear1", "length": 61.41, "x": 65.05, "y": 0.04, "rotation": 0.9 }, - { "name": "spear3", "parent": "spear2", "length": 76.79, "x": 61.88, "y": 0.57, "rotation": -0.9 } + { "name": "right shoulder", "parent": "torso", "length": 37.24, "rotation": 133.88, "x": 76.02, "y": 18.14 }, + { "name": "right arm", "parent": "right shoulder", "length": 36.74, "rotation": 36.32, "x": 37.6, "y": 0.31 }, + { "name": "right upper leg", "parent": "hip", "length": 42.45, "rotation": -97.49, "x": -20.07, "y": -6.83 }, + { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "rotation": -14.34, "x": 42.99, "y": -0.61 }, + { "name": "right foot", "parent": "right lower leg", "length": 45.45, "rotation": 110.3, "x": 64.88, "y": 0.04 }, + { "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.35, "x": 36.9, "y": 0.34 }, + { "name": "spear1", "parent": "left hand", "length": 65.06, "rotation": 102.43, "x": 0.48, "y": 17.03 }, + { "name": "spear2", "parent": "spear1", "length": 61.41, "rotation": 0.9, "x": 65.05, "y": 0.04 }, + { "name": "spear3", "parent": "spear2", "length": 76.79, "rotation": -0.9, "x": 61.88, "y": 0.57 } ], "slots": [ { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" }, @@ -52,12 +53,12 @@ "left hand item": { "dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 }, "spear": { - "type": "skinnedmesh", + "type": "mesh", "uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.76608, 0.21781, 0.75642, 0.386, 0.74723, 0.54607, 0.72117, 1, 0.28838, 1, 0.24208, 0.54327, 0.22589, 0.38361, 0.2089, 0.21605, 0.20043, 0.13242, 0, 0.11519, 0.4527, 0, 0.58399, 0 ], - "triangles": [ 4, 7, 3, 6, 7, 4, 5, 6, 4, 10, 11, 12, 1, 13, 0, 12, 13, 1, 10, 12, 1, 9, 10, 1, 2, 9, 1, 8, 9, 2, 3, 8, 2, 7, 8, 3 ], - "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.51, 20, -0.31, -6.16, 0.48, 2, 18, 64.73, -5.03, 0.5, 19, -0.4, -5.06, 0.49, 1, 16, 4.56, 23.91, 1, 1, 16, 41.7, -138.95, 1, 1, 16, 32.42, -141.1, 1, 1, 16, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.5, 19, 0.53, 6.59, 0.49, 2, 19, 62.18, 6.66, 0.51, 20, 0.2, 6.09, 0.48, 1, 20, 30.96, 6.61, 1, 1, 20, 37.26, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], - "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], + "triangles": [ 5, 6, 4, 6, 7, 4, 4, 7, 3, 2, 9, 1, 9, 10, 1, 10, 12, 1, 12, 13, 1, 1, 13, 0, 10, 11, 12, 3, 8, 2, 8, 9, 2, 7, 8, 3 ], + "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.5116, 20, -0.31, -6.16, 0.48839, 2, 18, 64.73, -5.03, 0.50272, 19, -0.4, -5.06, 0.49728, 1, 10, 4.56, 23.91, 1, 1, 10, 41.7, -138.95, 1, 1, 10, 32.41999, -141.1, 1, 1, 10, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.50272, 19, 0.52999, 6.59, 0.49728, 2, 19, 62.18, 6.66, 0.5116, 20, 0.2, 6.09, 0.48839, 1, 20, 30.96, 6.61, 1, 1, 20, 37.25999, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], "hull": 14, + "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], "width": 22, "height": 368 } @@ -66,10 +67,10 @@ "dagger": { "type": "mesh", "uvs": [ 0.78091, 0.38453, 1, 0.38405, 1, 0.44881, 0.73953, 0.4687, 0.74641, 0.81344, 0.34022, 1, 0.15434, 1, 0.11303, 0.78858, 0.23007, 0.47367, 0, 0.45047, 0, 0.38621, 0.22367, 0.38573, 0.24384, 0, 1, 0 ], - "triangles": [ 5, 7, 8, 4, 8, 3, 4, 5, 8, 5, 6, 7, 9, 11, 8, 8, 11, 3, 3, 0, 2, 3, 11, 0, 9, 10, 11, 0, 1, 2, 11, 12, 0, 0, 12, 13 ], + "triangles": [ 0, 12, 13, 11, 12, 0, 0, 1, 2, 9, 10, 11, 3, 11, 0, 3, 0, 2, 8, 11, 3, 9, 11, 8, 5, 6, 7, 4, 5, 8, 4, 8, 3, 5, 7, 8 ], "vertices": [ 15.49, -12.82, 21.13, -13.57, 20.16, -20.49, 13.15, -21.67, 8.13, -58.56, -5.13, -77.04, -9.92, -76.36, -7.79, -53.6, -0.03, -20.36, -5.6, -17.04, -4.63, -10.17, 1.12, -10.93, 7.46, 30.24, 26.93, 27.49 ], - "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], "hull": 14, + "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], "width": 26, "height": 108 } @@ -88,9 +89,9 @@ "type": "mesh", "uvs": [ 0, 0.60494, 0.14172, 0.5145, 0.24218, 0.55229, 0.32667, 0.67806, 0.37969, 0.79352, 0.53505, 0.93014, 0.86056, 1, 0.94071, 0.94169, 0.92098, 0.69923, 0.9888, 0.65497, 0.99003, 0.51643, 0.89632, 0.43561, 0.94487, 0.41916, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80754, 0.16044, 0.66698, 0.01997, 0.4734, 0.01805, 0.29215, 0.19893, 0.25392, 0.31823, 0.09117, 0.324, 0, 0.44331, 0.43271, 0.69153, 0.466, 0.47794, 0.35996, 0.31246, 0.73473, 0.68593, 0.72215, 0.57425, 0.88179, 0.5583, 0.80267, 0.51015 ], "triangles": [ 5, 27, 6, 7, 27, 8, 7, 6, 27, 4, 24, 5, 5, 24, 27, 4, 3, 24, 27, 29, 8, 8, 29, 9, 24, 28, 27, 24, 25, 28, 24, 3, 25, 29, 28, 30, 29, 27, 28, 25, 2, 26, 25, 3, 2, 9, 29, 10, 0, 23, 1, 28, 25, 30, 29, 11, 10, 29, 30, 11, 2, 21, 26, 2, 1, 21, 23, 22, 1, 1, 22, 21, 30, 16, 11, 30, 17, 16, 30, 25, 17, 17, 26, 18, 18, 26, 19, 26, 17, 25, 11, 15, 12, 11, 16, 15, 12, 15, 13, 15, 14, 13, 21, 20, 26, 26, 20, 19 ], - "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.46, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.6, 23.41, 35.89, 40.17, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.8, -24.31, 17.2, -40.65, 20.68, -33.02 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], + "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.45999, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.59999, 23.41, 35.89, 40.16999, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.79999, -24.31, 17.2, -40.65, 20.68, -33.02 ], "hull": 24, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], "width": 103, "height": 66 } @@ -101,9 +102,9 @@ "type": "mesh", "uvs": [ 0.68992, 0.29284, 1, 0.46364, 1, 0.74643, 0.84089, 1, 0.66344, 1, 0.33765, 0.64284, 0, 0.44124, 0, 0, 0.34295, 0 ], "triangles": [ 3, 4, 2, 4, 5, 2, 5, 0, 2, 0, 1, 2, 0, 5, 8, 5, 6, 8, 6, 7, 8 ], - "vertices": [ 18.6, 8.81, 32.19, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], + "vertices": [ 18.6, 8.81, 32.18999, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], "width": 37, "height": 35 } @@ -113,10 +114,10 @@ "name": "goblin/left-foot", "type": "mesh", "uvs": [ 0.15733, 0.31873, 0.08195, 0.78502, 0.15884, 0.99366, 0.41633, 0.96804, 0.68822, 0.97636, 1, 0.96388, 0.99385, 0.73501, 0.85294, 0.51862, 0.61479, 0.31056, 0.46991, 0, 0.48032, 0.75604, 0.75994, 0.77706 ], - "triangles": [ 2, 1, 3, 3, 10, 4, 4, 11, 5, 4, 10, 11, 3, 1, 10, 11, 6, 5, 1, 0, 10, 11, 7, 6, 11, 10, 7, 10, 8, 7, 10, 0, 8, 0, 9, 8 ], + "triangles": [ 0, 9, 8, 10, 0, 8, 10, 8, 7, 11, 10, 7, 11, 7, 6, 1, 0, 10, 11, 6, 5, 3, 1, 10, 4, 10, 11, 4, 11, 5, 3, 10, 4, 2, 1, 3 ], "vertices": [ 2.28, 13.07, -1.76, -1.64, 3.59, -7.8, 20.25, -6.04, 37.91, -5.27, 58.12, -3.71, 57.31, 3.34, 47.78, 9.51, 31.95, 15.05, 21.99, 24.11, 24.03, 0.75, 42.21, 1.16 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], "width": 65, "height": 31 } @@ -126,10 +127,10 @@ "name": "goblin/left-hand", "type": "mesh", "uvs": [ 0.518, 0.12578, 1, 0.16285, 0.99788, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42792, 0.17601, 0, 0.43567, 0 ], - "triangles": [ 2, 3, 0, 4, 5, 0, 3, 4, 0, 0, 7, 8, 6, 7, 0, 0, 5, 6, 2, 0, 1 ], - "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.48, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], - "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], + "triangles": [ 2, 0, 1, 0, 5, 6, 6, 7, 0, 0, 7, 8, 3, 4, 0, 4, 5, 0, 2, 3, 0 ], + "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.47999, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], "hull": 9, + "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], "width": 36, "height": 41 } @@ -139,10 +140,10 @@ "name": "goblin/left-lower-leg", "type": "mesh", "uvs": [ 0.95508, 0.20749, 0.81927, 0.65213, 0.94754, 0.77308, 0.67842, 0.97346, 0.46463, 1, 0.26845, 1, 0.04963, 0.90706, 0.2106, 0.60115, 0.07478, 0.40195, 0.18545, 0, 0.28857, 0 ], - "triangles": [ 1, 3, 4, 7, 4, 5, 5, 6, 7, 3, 1, 2, 1, 4, 7, 0, 1, 10, 7, 8, 10, 1, 7, 10, 10, 8, 9 ], - "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.19, -18.29 ], - "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], + "triangles": [ 10, 8, 9, 1, 7, 10, 7, 8, 10, 0, 1, 10, 1, 4, 7, 3, 1, 2, 5, 6, 7, 7, 4, 5, 1, 3, 4 ], + "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.18999, -18.29 ], "hull": 11, + "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], "width": 33, "height": 70 } @@ -153,9 +154,9 @@ "type": "mesh", "uvs": [ 0.7377, 0.40692, 1, 0.75237, 1, 1, 0.62046, 1, 0.26184, 0.56601, 0, 0.29783, 0, 0, 0.44115, 0 ], "triangles": [ 3, 1, 2, 3, 0, 1, 3, 4, 0, 4, 7, 0, 4, 5, 7, 5, 6, 7 ], - "vertices": [ 15.18, 5.74, 32.17, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.74, -4.66, 6.54 ], - "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], + "vertices": [ 15.18, 5.74, 32.16999, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.73999, -4.66, 6.54 ], "hull": 8, + "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], "width": 29, "height": 44 } @@ -165,10 +166,10 @@ "name": "goblin/left-upper-leg", "type": "mesh", "uvs": [ 1, 0.12167, 1, 0.54873, 0.91067, 0.78907, 0.76567, 1, 0.3087, 0.9579, 0, 0.68777, 0, 0.219, 0.51961, 0, 0.87552, 0 ], - "triangles": [ 3, 4, 2, 2, 4, 1, 1, 4, 7, 4, 5, 7, 0, 1, 7, 5, 6, 7, 7, 8, 0 ], + "triangles": [ 7, 8, 0, 5, 6, 7, 0, 1, 7, 4, 5, 7, 1, 4, 7, 2, 4, 1, 3, 4, 2 ], "vertices": [ 2.33, 13.06, 33.5, 12.57, 51, 9.34, 66.32, 4.31, 63, -10.71, 43.13, -20.58, 8.91, -20.04, -6.79, -2.64, -6.61, 9.1 ], - "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], "hull": 9, + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], "width": 33, "height": 73 } @@ -179,9 +180,9 @@ "type": "mesh", "uvs": [ 0.81967, 0.27365, 0.92101, 0.82048, 0.47134, 1, 0.15679, 0.9354, 0, 0.7556, 0.19268, 0.51833, 0.15468, 0.35706, 0, 0.21989, 0.13568, 0, 0.68878, 0, 0.70145, 0.53872 ], "triangles": [ 3, 5, 2, 2, 10, 1, 2, 5, 10, 3, 4, 5, 10, 0, 1, 0, 10, 6, 10, 5, 6, 7, 8, 6, 6, 9, 0, 6, 8, 9 ], - "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.05, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], - "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], + "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.04999, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], "hull": 10, + "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], "width": 36, "height": 41 } @@ -191,10 +192,10 @@ "name": "goblin/pelvis", "type": "mesh", "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], - "triangles": [ 1, 3, 0, 1, 2, 3 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], "vertices": [ 25.38, -20.73, -36.61, -20.73, -36.61, 22.26, 25.38, 22.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "width": 62, "height": 43 } @@ -205,9 +206,9 @@ "type": "mesh", "uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24384, 1, 0, 0.86558, 0.20822, 0.10919, 0.50903, 0, 0.85342, 0 ], "triangles": [ 1, 2, 6, 6, 2, 5, 1, 6, 0, 4, 5, 3, 2, 3, 5, 6, 7, 0 ], - "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.18 ], - "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], + "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.17999 ], "hull": 8, + "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], "width": 23, "height": 50 } @@ -217,10 +218,10 @@ "name": "goblin/right-foot", "type": "mesh", "uvs": [ 0.40851, 0.0047, 0.59087, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97532, 0.89391, 0.90385, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65984, 0, 0.46577, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71257, 0.715, 0.74681 ], - "triangles": [ 4, 5, 15, 7, 14, 6, 5, 6, 15, 6, 14, 15, 14, 7, 9, 7, 8, 9, 15, 3, 4, 9, 10, 14, 15, 2, 3, 15, 14, 2, 14, 10, 1, 12, 1, 11, 1, 12, 13, 14, 1, 2, 1, 13, 0, 1, 10, 11 ], + "triangles": [ 1, 10, 11, 1, 13, 0, 14, 1, 2, 1, 12, 13, 12, 1, 11, 14, 10, 1, 15, 14, 2, 15, 2, 3, 9, 10, 14, 15, 3, 4, 7, 8, 9, 14, 7, 9, 6, 14, 15, 5, 6, 15, 7, 14, 6, 4, 5, 15 ], "vertices": [ 17.36, 25.99, 29.13, 15.44, 39.89, 10.8, 48.14, 7.24, 53.84, -2.38, 49.43, -6, 34.84, -6.39, 16.84, -6.87, -2.4, -7.38, -7.58, -3.86, -7.78, 3.7, -7.95, 10.1, -2.57, 22.36, 10.84, 25.97, 22.14, 2.75, 37.31, 2.03 ], - "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], "hull": 14, + "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], "width": 63, "height": 33 } @@ -230,10 +231,10 @@ "name": "goblin/right-hand", "type": "mesh", "uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89823, 0.82004, 0.8259, 0.74285, 0.84223, 0.49993, 0.96356, 0.34102, 0.66023, 0 ], - "triangles": [ 4, 7, 5, 5, 7, 6, 4, 3, 7, 3, 2, 8, 7, 3, 8, 8, 1, 10, 8, 2, 1, 0, 10, 1, 8, 10, 9 ], - "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.88, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "triangles": [ 8, 10, 9, 0, 10, 1, 8, 2, 1, 8, 1, 10, 7, 3, 8, 3, 2, 8, 4, 3, 7, 5, 7, 6, 4, 7, 5 ], + "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.87999, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], "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 ], "width": 36, "height": 37 } @@ -243,10 +244,10 @@ "name": "goblin/right-hand", "type": "mesh", "uvs": [ 0.88538, 0.22262, 0.76167, 0.3594, 0.75088, 0.78308, 0.95326, 0.84981, 1, 0.60302 ], - "triangles": [ 3, 2, 4, 2, 1, 4, 1, 0, 4 ], + "triangles": [ 1, 0, 4, 2, 1, 4, 3, 2, 4 ], "vertices": [ -2.82, 15.97, 2.4, 11.71, 18.08, 11.9, 20.27, 19.27, 11.09, 20.62 ], - "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], "hull": 5, + "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], "width": 36, "height": 37 } @@ -256,10 +257,10 @@ "name": "goblin/right-lower-leg", "type": "mesh", "uvs": [ 1, 0.27261, 0.81312, 0.52592, 0.79587, 0.71795, 0.95544, 0.80988, 0.85193, 0.95493, 0.47241, 1, 0.14033, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30325, 0.60611, 0 ], - "triangles": [ 4, 5, 2, 2, 5, 8, 5, 6, 8, 6, 7, 8, 4, 2, 3, 2, 8, 1, 8, 9, 1, 9, 10, 1, 1, 10, 0 ], - "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.1, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.77, -1.03, 58.99, -9.19, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], + "triangles": [ 1, 10, 0, 9, 10, 1, 8, 9, 1, 2, 8, 1, 4, 2, 3, 6, 7, 8, 5, 6, 8, 2, 5, 8, 4, 5, 2 ], + "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.09999, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.76999, -1.03, 58.99, -9.18999, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], "width": 36, "height": 76 } @@ -271,8 +272,8 @@ "uvs": [ 0.62008, 0.03708, 0.92131, 0.09048, 1, 0.38319, 0.72049, 0.6937, 0.31656, 1, 0, 1, 0, 0.75106, 0.28233, 0.49988 ], "triangles": [ 4, 6, 7, 4, 7, 3, 4, 5, 6, 7, 0, 3, 2, 0, 1, 2, 3, 0 ], "vertices": [ -3.17, -11.05, -9, -0.57, -1.01, 10.33, 16.69, 11.17, 37.41, 8.2, 45.45, -1.16, 36.95, -8.46, 21.2, -7.47 ], - "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], "hull": 8, + "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], "width": 39, "height": 45 } @@ -282,10 +283,10 @@ "name": "goblin/right-upper-leg", "type": "mesh", "uvs": [ 0.27018, 0, 0.11618, 0.18177, 0, 0.70688, 0, 0.89577, 0.26668, 1, 0.48718, 1, 0.67618, 0.83532, 1, 0.5161, 1, 0.25543, 0.74618, 0.0571 ], - "triangles": [ 5, 4, 6, 6, 4, 2, 4, 3, 2, 2, 1, 6, 6, 1, 9, 6, 9, 7, 9, 1, 0, 9, 8, 7 ], - "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.51, 10.18, 19.13, 18.47, 2.85, 16.32, -8.4, 6.14 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "triangles": [ 9, 8, 7, 9, 1, 0, 6, 9, 7, 6, 1, 9, 2, 1, 6, 4, 3, 2, 6, 4, 2, 5, 4, 6 ], + "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.50999, 10.18, 19.12999, 18.46999, 2.85, 16.32, -8.39999, 6.14 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], "width": 34, "height": 63 } @@ -296,9 +297,9 @@ "type": "mesh", "uvs": [ 0, 0.33287, 0.15945, 0.46488, 0.15761, 0.60314, 0.15502, 0.79806, 0.32807, 0.93478, 0.6875, 1, 0.80731, 1, 1, 0.77763, 1, 0.66147, 1, 0.56703, 0.93207, 0.4771, 0.86944, 0.39416, 0.83837, 0.226, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78734, 0.86249, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38316, 0.77692, 0.73446, 0.66478, 0.51012 ], "triangles": [ 5, 16, 6, 6, 16, 7, 4, 17, 5, 5, 17, 16, 4, 3, 17, 17, 21, 16, 16, 21, 7, 3, 2, 17, 21, 19, 18, 21, 17, 19, 17, 2, 19, 21, 8, 7, 21, 18, 8, 18, 9, 8, 19, 22, 18, 18, 10, 9, 18, 22, 10, 2, 1, 19, 19, 20, 22, 19, 1, 20, 22, 11, 10, 22, 20, 11, 20, 1, 14, 20, 12, 11, 1, 0, 14, 20, 13, 12, 20, 14, 13, 0, 15, 14 ], - "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.88, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], + "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.87999, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], "hull": 16, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], "width": 68, "height": 96 } @@ -308,10 +309,10 @@ "name": "goblin/undie-straps", "type": "mesh", "uvs": [ 0.36097, 0.44959, 0.66297, 0.60591, 1, 0.19486, 1, 0.57117, 0.75897, 1, 0.38697, 1, 0, 0.26433, 0, 0, 0.12497, 0 ], - "triangles": [ 5, 1, 4, 4, 1, 3, 6, 0, 5, 5, 0, 1, 3, 1, 2, 6, 8, 0, 6, 7, 8 ], - "vertices": [ -10.56, 12.87, 6.53, 9.9, 25.62, 17.71, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], + "triangles": [ 6, 7, 8, 6, 8, 0, 3, 1, 2, 5, 0, 1, 6, 0, 5, 4, 1, 3, 5, 1, 4 ], + "vertices": [ -10.56, 12.87, 6.53, 9.89999, 25.62, 17.70999, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], "width": 55, "height": 19 } @@ -321,10 +322,10 @@ "name": "goblin/undies", "type": "mesh", "uvs": [ 0, 0.32029, 0.14893, 0.59457, 0.22437, 1, 0.35909, 1, 0.50998, 1, 0.79559, 0.58453, 0.9842, 0.28015, 1, 0.00588, 0.46957, 0.17646, 0, 0.03933, 0.48843, 0.59122, 0.48114, 0.43099 ], - "triangles": [ 3, 10, 4, 4, 10, 5, 10, 3, 1, 3, 2, 1, 1, 11, 10, 1, 0, 11, 10, 11, 5, 5, 11, 6, 0, 8, 11, 11, 8, 6, 0, 9, 8, 6, 8, 7 ], - "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.59, 22.22, 6.11, 22.92, 14.05, 3.75, 9.44, -13.08, 13.71, 4.21, -2.59, 4.03, 2.05 ], - "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], + "triangles": [ 6, 8, 7, 0, 9, 8, 11, 8, 6, 0, 8, 11, 5, 11, 6, 10, 11, 5, 1, 0, 11, 1, 11, 10, 3, 2, 1, 10, 3, 1, 4, 10, 5, 3, 10, 4 ], + "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.58999, 22.22, 6.11, 22.92, 14.05, 3.75, 9.43999, -13.08, 13.71, 4.21, -2.58999, 4.03, 2.05 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], "width": 36, "height": 29 } @@ -757,7 +758,7 @@ ] } }, - "ffd": { + "deform": { "default": { "left hand item": { "spear": [ @@ -769,19 +770,19 @@ { "time": 0, "offset": 26, - "vertices": [ 2.34, 0.14 ], + "vertices": [ 2.34754, 0.14469 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.5, "offset": 8, - "vertices": [ -1.19, 4.31, 0.07, 6.41, 1.66, 6.18, 1.75, 3.59 ], + "vertices": [ -1.19415, 4.31531, 0.07279, 6.41351, 1.66048, 6.18882, 1.75232, 3.59555 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1, "offset": 26, - "vertices": [ 2.34, 0.14 ] + "vertices": [ 2.34754, 0.14469 ] } ] } @@ -795,22 +796,22 @@ }, { "time": 0.2, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08, -1.08, 0.08, -1.08, 0.08, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08 ], + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391, -1.08534, 0.08391, -1.08534, 0.08391, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.3666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09, 1.47, 0.09, 1.47, 0.09, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09 ], + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017, 1.47305, 0.09017, 1.47305, 0.09017, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017 ], "curve": [ 0.621, 0, 0.75, 1 ] }, { "time": 0.7, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17, -1.17, -0.17, -1.17, -0.17, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17 ], + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183, -1.1755, -0.17182, -1.1755, -0.17183, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.8666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08, 0.38, 0.08, 0.38, 0.08, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08 ], + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446, 0.38687, 0.08446, 0.38687, 0.08446, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1 } @@ -821,35 +822,35 @@ { "time": 0, "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] }, { "time": 0.1333 }, { "time": 0.2333, "offset": 8, - "vertices": [ -3.96, -2.34, -5.8, -12.47, -2.23, -12.99, 2.02, -9.1, 0, 0, 0, 0, 0, 0, -1.35, -5.28 ] + "vertices": [ -3.96072, -2.34594, -5.80445, -12.47629, -2.23129, -12.99037, 2.02941, -9.1036, 0, 0, 0, 0, 0, 0, -1.35254, -5.2883 ] }, { "time": 0.3666, "offset": 8, - "vertices": [ 0.66, 0.33, 0.33, 2.69, -0.48, 2.54, -1.13, 1.38, 0, 0, 0, 0, 0, 0, -0.11, 0.79 ] + "vertices": [ 0.66504, 0.33548, 0.33902, 2.69014, -0.4817, 2.54524, -1.13592, 1.38562, 0, 0, 0, 0, 0, 0, -0.11907, 0.79273 ] }, { "time": 0.5, "curve": "stepped" }, { "time": 0.6333 }, { "time": 0.7333, "offset": 8, - "vertices": [ -2.97, 9.4, -6.91, 19.92, -10.55, 18.41, -12.37, 12.38, -4.72, 6.3, 0, 0, -1.48, 4.88, -7.06, 10.7 ] + "vertices": [ -2.97737, 9.40254, -6.91661, 19.92794, -10.55287, 18.41085, -12.37161, 12.38473, -4.72606, 6.30798, 0, 0, -1.48902, 4.88944, -7.06773, 10.70101 ] }, { "time": 0.8333, "offset": 6, - "vertices": [ 1.05, 1.56, -2.52, 7.99, -5.52, 17.14, -8.93, 15.79, -10.73, 10.22, -4.23, 5.36, 0, 0, 0, 0, -5.83, 8.55 ] + "vertices": [ 1.05318, 1.56361, -2.52722, 7.9974, -5.5203, 17.14136, -8.93317, 15.79635, -10.73747, 10.22055, -4.23801, 5.36992, 0, 0, 0, 0, -5.83147, 8.55531 ] }, { "time": 1, "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] } ] }, @@ -859,22 +860,22 @@ { "time": 0.1333, "offset": 6, - "vertices": [ -0.68, -4.13 ] + "vertices": [ -0.68989, -4.13283 ] }, { "time": 0.3333, "offset": 6, - "vertices": [ -1.04, -3.1 ] + "vertices": [ -1.04945, -3.10476 ] }, { "time": 0.7, "offset": 6, - "vertices": [ -1.42, -6.3 ] + "vertices": [ -1.4245, -6.30616 ] }, { "time": 0.8666, "offset": 6, - "vertices": [ -1.13, -1.79 ] + "vertices": [ -1.13541, -1.79035 ] }, { "time": 1 } ] @@ -885,38 +886,38 @@ { "time": 0.1333, "offset": 2, - "vertices": [ -2.81, 2.63, -2.35, 3.89, -1.99, 4.86, -0.93, 5.57, -0.48, 5.09, -0.34, 3.42, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31, 1.91, -1.32, 3.65 ] + "vertices": [ -2.81258, 2.63114, -2.35238, 3.89441, -1.99921, 4.8639, -0.93273, 5.57982, -0.48886, 5.09854, -0.34812, 3.42912, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31305, 1.91371, -1.32986, 3.65703 ] }, { "time": 0.2333, "offset": 2, - "vertices": [ -6.39, 6.41, -7.74, 8.27, -7.02, 11.35, -4.03, 13.93, -2.5, 12.62, -1.46, 7.58, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84, 2.61, -4.53, 7.92 ] + "vertices": [ -6.39088, 6.41245, -7.74575, 8.27191, -7.02471, 11.35894, -4.0347, 13.93454, -2.50399, 12.62962, -1.46124, 7.58915, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84765, 2.61215, -4.53955, 7.92357 ] }, { "time": 0.3, "offset": 2, - "vertices": [ -8.27, 6.68, -9.29, 10.13, -8.62, 14.71, -4.58, 18.81, -2.2, 17.1, -0.07, 9.9, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94, 2.38, -4.59, 10.01 ] + "vertices": [ -8.27184, 6.68821, -9.29764, 10.13797, -8.62231, 14.71339, -4.58629, 18.81939, -2.20304, 17.10709, -0.07794, 9.9046, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94624, 2.38007, -4.59398, 10.01888 ] }, { "time": 0.3666, "offset": 2, - "vertices": [ -10.47, 9.44, -13.36, 12.4, -14.32, 16.94, -9.24, 23.55, -5.51, 21.51, -1.19, 11.53, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14, 2.29, -6.63, 11.37 ] + "vertices": [ -10.47683, 9.44175, -13.36882, 12.40982, -14.32568, 16.94392, -9.24462, 23.55674, -5.51711, 21.51377, -1.19581, 11.53192, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14847, 2.29389, -6.63418, 11.37127 ] }, { "time": 0.5, "offset": 2, - "vertices": [ -5.42, 4.36, -10.59, 7.04, -11.64, 11.55, -6.19, 20.12, -1.45, 18.05, 4.86, 6.41, 2.81, 0.27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96, 4.94 ] + "vertices": [ -5.42473, 4.36854, -10.59004, 7.04468, -11.64251, 11.55845, -6.19665, 20.12805, -1.45497, 18.05411, 4.86619, 6.41678, 2.81462, 0.27601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96412, 4.94829 ] }, { "time": 0.6333 }, { "time": 0.7333, "offset": 4, - "vertices": [ 1.31, -6.84, -0.87, -12.54, -5.98, -14.08, -7.15, -11.63, -5.67, -4.83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06, -6.93 ] + "vertices": [ 1.31462, -6.84099, -0.87905, -12.54479, -5.9851, -14.08367, -7.15892, -11.63193, -5.6792, -4.83544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06163, -6.93844 ] }, { "time": 0.8, "offset": 4, - "vertices": [ 0.65, -3.42, -0.43, -6.27, -2.99, -7.04, -3.57, -5.81, -2.83, -2.41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79, -1.28, 0, 0, 0, 0, -1.03, -3.46 ] + "vertices": [ 0.65731, -3.42049, -0.43952, -6.27239, -2.99255, -7.04183, -3.57946, -5.81596, -2.83959, -2.41772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79687, -1.2802, 0, 0, 0, 0, -1.03081, -3.46922 ] }, { "time": 0.8666 } ] @@ -926,13 +927,13 @@ { "time": 0, "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] }, { "time": 0.5 }, { "time": 1, "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] } ] }, @@ -942,7 +943,7 @@ { "time": 0.6, "offset": 6, - "vertices": [ 1.8, -1.56 ] + "vertices": [ 1.80396, -1.56552 ] }, { "time": 1 } ] @@ -951,17 +952,17 @@ "right upper leg": [ { "time": 0, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] }, { "time": 0.3333 }, { "time": 0.8666, "offset": 14, - "vertices": [ 0.13, -2.35, -1.33, -5.99, -1.35, -4.43 ] + "vertices": [ 0.13424, -2.35377, -1.33317, -5.99572, -1.35861, -4.43323 ] }, { "time": 1, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] } ] }, @@ -970,37 +971,37 @@ { "time": 0, "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] }, { "time": 0.1333, "offset": 14, - "vertices": [ 1.31, -0.59, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + "vertices": [ 1.31318, -0.59727, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] }, { "time": 0.3, "offset": 14, - "vertices": [ 6.03, -3.13, 7.55, -1.38, 6.79, 0.31, 4.23, 1.14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07, -5.16, 0, 0, 4, 0.27, 0, 0, 0, 0, 3.43, -3.52 ] + "vertices": [ 6.03761, -3.13561, 7.55475, -1.38111, 6.79747, 0.31171, 4.23503, 1.14012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07575, -5.16824, 0, 0, 4.0041, 0.27245, 0, 0, 0, 0, 3.4376, -3.52286 ] }, { "time": 0.5, "offset": 14, - "vertices": [ 2.25, -0.87, 2.57, -0.56, 3.17, -0.57, 1.48, 0.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22, -4.43, 0, 0, 1.48, 0.01, 0, 0, 0, 0, 0.31, -3.28, -1.53, 0.17 ] + "vertices": [ 2.25942, -0.87202, 2.575, -0.56861, 3.17112, -0.57003, 1.48704, 0.9924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22451, -4.43862, 0, 0, 1.48691, 0.01586, 0, 0, 0, 0, 0.31388, -3.28095, -1.53797, 0.17803 ] }, { "time": 0.6333, "offset": 14, - "vertices": [ 0.75, -1.51, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + "vertices": [ 0.75002, -1.51701, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] }, { "time": 0.8666, "offset": 14, - "vertices": [ 0.62, -1.26, 0.38, -2.2, 3.25, -0.5, 2.41, 2.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.66, -3.1, 0, 0, 2.3, -1.15, 0, 0, 0, 0, -0.07, -3.63, -0.93, 0.1 ] + "vertices": [ 0.62202, -1.26262, 0.38489, -2.20701, 3.25048, -0.50042, 2.41108, 2.39315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6639, -3.10099, 0, 0, 2.30655, -1.15196, 0, 0, 0, 0, -0.07676, -3.63497, -0.9321, 0.1079 ] }, { "time": 1, "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] } ] }, @@ -1009,32 +1010,32 @@ { "time": 0, "offset": 2, - "vertices": [ -1.77, 0.54, -0.96, -1.03, -0.39, -0.24, -1.77, 0.54 ] + "vertices": [ -1.77696, 0.54759, -0.96145, -1.03793, -0.39148, -0.24071, -1.77696, 0.54759 ] }, { "time": 0.1333, "offset": 2, - "vertices": [ -2.25, -1.03, -1.49, -4.23, -0.74, -2.84, -1.9, 0.54 ] + "vertices": [ -2.25683, -1.03177, -1.49719, -4.23861, -0.74469, -2.84906, -1.90072, 0.54477 ] }, { "time": 0.3333, "offset": 2, - "vertices": [ -2.37, -0.05, -0.49, 0.19, -0.9, 1.16, -1.6, 2.7, 0.96, 0.8 ] + "vertices": [ -2.37974, -0.05431, -0.49433, 0.19436, -0.90861, 1.16519, -1.60956, 2.70798, 0.96186, 0.80615 ] }, { "time": 0.7, "offset": 2, - "vertices": [ -0.91, -2.76, -0.62, -3.63, -0.84, -2.26, -2.56, 0.52 ] + "vertices": [ -0.91714, -2.76567, -0.62214, -3.63489, -0.8494, -2.26772, -2.56076, 0.5297 ] }, { "time": 0.8666, "offset": 2, - "vertices": [ -2.56, 0.52, -1.58, 0.32, -1.38, 0.32, -2.56, 0.52 ] + "vertices": [ -2.56076, 0.5297, -1.58064, 0.32031, -1.3847, 0.32476, -2.56076, 0.5297 ] }, { "time": 1, "offset": 2, - "vertices": [ -1.77, 0.54, -0.8, 0.53, -0.8, 0.53, -1.77, 0.54 ] + "vertices": [ -1.77696, 0.54759, -0.80128, 0.53413, -0.80128, 0.53413, -1.77696, 0.54759 ] } ] }, @@ -1042,35 +1043,35 @@ "undies": [ { "time": 0, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] }, { "time": 0.1333, - "vertices": [ 0.72, 0.43, 7.2, -0.16, 1.37, 0, 1.37, 0, 1.37, 0, 1.25, 0.04, -0.99, -2.95, -1.37, -3.07, 1.37, 0, 0.35, -0.29, 2.99, -0.07, 3.9, -0.14 ] + "vertices": [ 0.72659, 0.43319, 7.20416, -0.1638, 1.37759, 0, 1.37759, 0, 1.37759, 0, 1.25279, 0.0464, -0.99861, -2.95085, -1.37542, -3.07404, 1.37759, 0, 0.35279, -0.29279, 2.99218, -0.07019, 3.90478, -0.14039 ] }, { "time": 0.3333, - "vertices": [ 1.16, 0, 2.1, -0.23, 0, 0, 0, 0, 0, 0, 2.24, -0.24, -0.43, 0.6, -1.55, 0.48 ] + "vertices": [ 1.16999, 0, 2.10599, -0.234, 0, 0, 0, 0, 0, 0, 2.24999, -0.24999, -0.4344, 0.60551, -1.55939, 0.48051 ] }, { "time": 0.5333, - "vertices": [ 1.16, 0, -0.23, -0.93, -2.92, 0.35, 0, 0, 0, 0, 0.49, -0.24, -0.64, -2.07, -0.64, -2.07 ] + "vertices": [ 1.16999, 0, -0.234, -0.93599, -2.92499, 0.35099, 0, 0, 0, 0, 0.49999, -0.24999, -0.64078, -2.07914, -0.64078, -2.07914 ] }, { "time": 0.7, - "vertices": [ 1.86, -0.11, 4.66, -0.09, -1.76, 0.21, 0, 0, -0.56, 0.32, -1.13, -1.15, -2.19, -3.47, -1.29, -3.47, 0, 0, 0, 0, 1.58, -0.04, 2.65, 0.16 ] + "vertices": [ 1.8627, -0.11514, 4.66326, -0.09099, -1.76428, 0.21171, 0, 0, -0.56832, 0.32832, -1.13833, -1.1511, -2.19996, -3.47068, -1.29718, -3.47068, 0, 0, 0, 0, 1.58785, -0.04642, 2.65941, 0.16714 ] }, { "time": 0.8333, - "vertices": [ 2.41, -0.2, 8.58, 0.58, -0.83, 0.1, 0, 0, -1.02, 0.59, -2.44, -1.87, -1.62, 0, 0, 0, 0, 0, 0, 0, 2.85, -0.08, 4.78, 0.3 ] + "vertices": [ 2.41687, -0.20725, 8.58108, 0.585, -0.83571, 0.10028, 0, 0, -1.02299, 0.59098, -2.44899, -1.872, -1.62499, 0, 0, 0, 0, 0, 0, 0, 2.85813, -0.08356, 4.78695, 0.30086 ] }, { "time": 0.8666, - "vertices": [ 2.01, -0.02, 8.98, 0.44, -0.2, 0.08, 0.45, 0, -0.35, 0.47, -1.84, -1.44, -0.79, 1.26, 0.53, 1.23, 0.45, 0, 0.11, -0.09, 3.28, -0.09, 5.13, 0.19 ] + "vertices": [ 2.01969, -0.0214, 8.98545, 0.4446, -0.20937, 0.08022, 0.45919, 0, -0.35919, 0.47279, -1.84159, -1.4488, -0.79153, 1.2642, 0.53285, 1.23981, 0.45919, 0, 0.11759, -0.09759, 3.2839, -0.09025, 5.13115, 0.19388 ] }, { "time": 1, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] } ] } diff --git a/examples/goblins/export/goblins-mesh.skel b/examples/goblins/export/goblins-mesh.skel new file mode 100644 index 000000000..98dd16a04 Binary files /dev/null and b/examples/goblins/export/goblins-mesh.skel differ diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.atlas.txt b/examples/goblins/export/goblins-pma.atlas similarity index 99% rename from spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.atlas.txt rename to examples/goblins/export/goblins-pma.atlas index d674db469..92b8922ab 100644 --- a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.atlas.txt +++ b/examples/goblins/export/goblins-pma.atlas @@ -1,5 +1,5 @@ -goblins-mesh.png +goblins-pma.png size: 1024,128 format: RGBA8888 filter: Linear,Linear diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.png b/examples/goblins/export/goblins-pma.png similarity index 100% rename from spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.png rename to examples/goblins/export/goblins-pma.png diff --git a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.atlas b/examples/goblins/export/goblins.atlas similarity index 76% rename from spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.atlas rename to examples/goblins/export/goblins.atlas index 50e501df9..0f57a0f6a 100644 --- a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.atlas +++ b/examples/goblins/export/goblins.atlas @@ -1,5 +1,6 @@ goblins.png +size: 1024,128 format: RGBA8888 filter: Linear,Linear repeat: none @@ -12,112 +13,112 @@ dagger index: -1 goblin/eyes-closed rotate: false - xy: 359, 6 + xy: 2, 7 size: 34, 12 orig: 34, 12 offset: 0, 0 index: -1 goblin/head rotate: false - xy: 107, 38 - size: 103, 64 + xy: 107, 36 + size: 103, 66 orig: 103, 66 offset: 0, 0 index: -1 goblin/left-arm rotate: false - xy: 903, 56 + xy: 901, 56 size: 37, 35 orig: 37, 35 offset: 0, 0 index: -1 goblin/left-foot rotate: false - xy: 729, 58 + xy: 929, 95 size: 65, 31 orig: 65, 31 offset: 0, 0 index: -1 goblin/left-hand - rotate: true - xy: 316, 2 + rotate: false + xy: 452, 2 size: 36, 41 orig: 36, 41 offset: 0, 0 index: -1 goblin/left-lower-leg rotate: true - xy: 172, 2 - size: 30, 70 + xy: 713, 93 + size: 33, 70 orig: 33, 70 - offset: 2, 0 + offset: 0, 0 index: -1 goblin/left-shoulder - rotate: true - xy: 857, 62 + rotate: false + xy: 610, 44 size: 29, 44 orig: 29, 44 offset: 0, 0 index: -1 goblin/left-upper-leg rotate: true - xy: 654, 56 + xy: 638, 93 size: 33, 73 orig: 33, 73 offset: 0, 0 index: -1 goblin/neck - rotate: true - xy: 509, 22 + rotate: false + xy: 490, 2 size: 36, 41 orig: 36, 41 offset: 0, 0 index: -1 goblin/pelvis - rotate: true - xy: 310, 40 + rotate: false + xy: 482, 45 size: 62, 43 orig: 62, 43 offset: 0, 0 index: -1 goblin/right-arm - rotate: false - xy: 552, 8 + rotate: true + xy: 690, 2 size: 23, 50 orig: 23, 50 offset: 0, 0 index: -1 goblin/right-foot rotate: false - xy: 882, 93 + xy: 771, 58 size: 63, 33 orig: 63, 33 offset: 0, 0 index: -1 goblin/right-hand rotate: false - xy: 942, 54 + xy: 940, 56 size: 36, 37 orig: 36, 37 offset: 0, 0 index: -1 goblin/right-lower-leg rotate: true - xy: 654, 91 - size: 35, 76 + xy: 482, 90 + size: 36, 76 orig: 36, 76 - offset: 1, 0 + offset: 0, 0 index: -1 goblin/right-shoulder - rotate: false - xy: 424, 20 - size: 39, 42 + rotate: true + xy: 602, 3 + size: 39, 45 orig: 39, 45 offset: 0, 0 index: -1 goblin/right-upper-leg rotate: true - xy: 107, 2 + xy: 641, 57 size: 34, 63 orig: 34, 63 offset: 0, 0 @@ -131,154 +132,154 @@ goblin/torso index: -1 goblin/undie-straps rotate: false - xy: 2, 2 + xy: 380, 5 size: 55, 19 orig: 55, 19 offset: 0, 0 index: -1 goblin/undies - rotate: true - xy: 768, 20 + rotate: false + xy: 174, 5 size: 36, 29 orig: 36, 29 offset: 0, 0 index: -1 goblingirl/eyes-closed rotate: false - xy: 59, 6 - size: 37, 15 + xy: 269, 11 + size: 37, 21 orig: 37, 21 offset: 0, 0 index: -1 goblingirl/head rotate: false - xy: 2, 23 - size: 103, 79 + xy: 2, 21 + size: 103, 81 orig: 103, 81 - offset: 0, 2 + offset: 0, 0 index: -1 goblingirl/left-arm rotate: true - xy: 980, 56 + xy: 978, 56 size: 37, 35 orig: 37, 35 offset: 0, 0 index: -1 goblingirl/left-foot rotate: false - xy: 947, 95 + xy: 107, 3 size: 65, 31 orig: 65, 31 offset: 0, 0 index: -1 goblingirl/left-hand rotate: false - xy: 577, 14 + xy: 565, 2 size: 35, 40 orig: 35, 40 offset: 0, 0 index: -1 goblingirl/left-lower-leg rotate: true - xy: 244, 2 - size: 30, 70 + xy: 785, 93 + size: 33, 70 orig: 33, 70 - offset: 2, 0 + offset: 0, 0 index: -1 goblingirl/left-shoulder rotate: true - xy: 810, 63 - size: 28, 45 + xy: 690, 27 + size: 28, 46 orig: 28, 46 - offset: 0, 1 + offset: 0, 0 index: -1 goblingirl/left-upper-leg rotate: true - xy: 810, 93 + xy: 857, 93 size: 33, 70 orig: 33, 70 offset: 0, 0 index: -1 goblingirl/neck - rotate: true - xy: 614, 21 - size: 33, 41 + rotate: false + xy: 528, 2 + size: 35, 41 orig: 35, 41 offset: 0, 0 index: -1 goblingirl/pelvis rotate: false - xy: 355, 55 - size: 59, 43 + xy: 546, 45 + size: 62, 43 orig: 62, 43 - offset: 1, 0 + offset: 0, 0 index: -1 goblingirl/right-arm - rotate: true - xy: 657, 11 - size: 22, 50 + rotate: false + xy: 452, 48 + size: 28, 50 orig: 28, 50 - offset: 3, 0 + offset: 0, 0 index: -1 goblingirl/right-foot rotate: false - xy: 359, 20 + xy: 836, 58 size: 63, 33 orig: 63, 33 offset: 0, 0 index: -1 goblingirl/right-hand rotate: true - xy: 729, 21 - size: 35, 37 + xy: 771, 20 + size: 36, 37 orig: 36, 37 - offset: 1, 0 + offset: 0, 0 index: -1 goblingirl/right-lower-leg rotate: true - xy: 732, 91 - size: 35, 76 + xy: 560, 90 + size: 36, 76 orig: 36, 76 - offset: 1, 0 + offset: 0, 0 index: -1 goblingirl/right-shoulder - rotate: true - xy: 465, 19 - size: 39, 42 + rotate: false + xy: 649, 10 + size: 39, 45 orig: 39, 45 offset: 0, 0 index: -1 goblingirl/right-upper-leg rotate: true - xy: 416, 64 + xy: 706, 57 size: 34, 63 orig: 34, 63 offset: 0, 0 index: -1 goblingirl/torso - rotate: true - xy: 482, 60 - size: 66, 96 + rotate: false + xy: 310, 2 + size: 68, 96 orig: 68, 96 offset: 0, 0 index: -1 goblingirl/undie-straps rotate: false - xy: 657, 35 + xy: 212, 13 size: 55, 19 orig: 55, 19 offset: 0, 0 index: -1 goblingirl/undies rotate: false - xy: 799, 32 + xy: 810, 27 size: 36, 29 orig: 36, 29 offset: 0, 0 index: -1 shield - rotate: true - xy: 580, 56 + rotate: false + xy: 380, 26 size: 70, 72 orig: 70, 72 offset: 0, 0 diff --git a/examples/goblins/export/goblins.json b/examples/goblins/export/goblins.json new file mode 100644 index 000000000..1fb70cd0f --- /dev/null +++ b/examples/goblins/export/goblins.json @@ -0,0 +1,504 @@ +{ +"skeleton": { "hash": "XWev9W//Ru9qTfd6z9xOs5YG8F0", "spine": "3.4.00", "width": 234.01, "height": 354.84, "images": "./images/" }, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, + { "name": "torso", "parent": "hip", "length": 85.82, "rotation": 93.92, "x": -6.42, "y": 1.97 }, + { "name": "neck", "parent": "torso", "length": 18.38, "rotation": -1.51, "x": 81.67, "y": -6.34 }, + { "name": "head", "parent": "neck", "length": 68.28, "rotation": -13.92, "x": 20.93, "y": 11.59 }, + { "name": "left shoulder", "parent": "torso", "length": 35.43, "rotation": -156.96, "x": 74.04, "y": -20.38 }, + { "name": "left arm", "parent": "left shoulder", "length": 35.62, "rotation": 28.16, "x": 37.85, "y": -2.34 }, + { "name": "left upper leg", "parent": "hip", "length": 50.39, "rotation": -89.09, "x": 14.45, "y": 2.81 }, + { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "rotation": -16.65, "x": 56.34, "y": 0.98 }, + { "name": "left foot", "parent": "left lower leg", "length": 46.5, "rotation": 102.43, "x": 58.94, "y": -7.61 }, + { "name": "left hand", "parent": "left arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.07 }, + { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, + { "name": "right shoulder", "parent": "torso", "length": 37.24, "rotation": 133.88, "x": 76.02, "y": 18.14 }, + { "name": "right arm", "parent": "right shoulder", "length": 36.74, "rotation": 36.32, "x": 37.6, "y": 0.31 }, + { "name": "right upper leg", "parent": "hip", "length": 42.45, "rotation": -97.49, "x": -20.07, "y": -6.83 }, + { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "rotation": -14.34, "x": 42.99, "y": -0.61 }, + { "name": "right foot", "parent": "right lower leg", "length": 45.45, "rotation": 110.3, "x": 64.88, "y": 0.04 }, + { "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.35, "x": 36.9, "y": 0.34 } +], +"slots": [ + { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" }, + { "name": "left arm", "bone": "left arm", "attachment": "left arm" }, + { "name": "left hand item", "bone": "left hand", "attachment": "spear" }, + { "name": "left hand", "bone": "left hand", "attachment": "left hand" }, + { "name": "left foot", "bone": "left foot", "attachment": "left foot" }, + { "name": "left lower leg", "bone": "left lower leg", "attachment": "left lower leg" }, + { "name": "left upper leg", "bone": "left upper leg", "attachment": "left upper leg" }, + { "name": "neck", "bone": "neck", "attachment": "neck" }, + { "name": "torso", "bone": "torso", "attachment": "torso" }, + { "name": "pelvis", "bone": "pelvis", "attachment": "pelvis" }, + { "name": "right foot", "bone": "right foot", "attachment": "right foot" }, + { "name": "right lower leg", "bone": "right lower leg", "attachment": "right lower leg" }, + { "name": "undie straps", "bone": "pelvis", "attachment": "undie straps" }, + { "name": "undies", "bone": "pelvis", "attachment": "undies" }, + { "name": "right upper leg", "bone": "right upper leg", "attachment": "right upper leg" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "eyes", "bone": "head" }, + { "name": "right shoulder", "bone": "right shoulder", "attachment": "right shoulder" }, + { "name": "right arm", "bone": "right arm", "attachment": "right arm" }, + { "name": "right hand item", "bone": "right hand" }, + { "name": "right hand", "bone": "right hand", "attachment": "right hand" }, + { "name": "right hand item top", "bone": "right hand", "attachment": "shield" } +], +"skins": { + "default": { + "left hand item": { + "dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 }, + "spear": { "x": -4.55, "y": 39.2, "rotation": 13.04, "width": 22, "height": 368 } + }, + "right hand item": { + "dagger": { "x": 6.51, "y": -24.15, "rotation": -8.06, "width": 26, "height": 108 } + }, + "right hand item top": { + "shield": { "rotation": 93.49, "width": 70, "height": 72 } + } + }, + "goblin": { + "eyes": { + "eyes closed": { "name": "goblin/eyes-closed", "x": 32.21, "y": -21.27, "rotation": -88.92, "width": 34, "height": 12 } + }, + "head": { + "head": { "name": "goblin/head", "x": 25.73, "y": 2.33, "rotation": -92.29, "width": 103, "height": 66 } + }, + "left arm": { + "left arm": { + "name": "goblin/left-arm", + "x": 16.7, + "y": -1.69, + "scaleX": 1.057, + "scaleY": 1.057, + "rotation": 33.84, + "width": 37, + "height": 35 + } + }, + "left foot": { + "left foot": { "name": "goblin/left-foot", "x": 24.85, "y": 8.74, "rotation": 3.32, "width": 65, "height": 31 } + }, + "left hand": { + "left hand": { + "name": "goblin/left-hand", + "x": 3.47, + "y": 3.41, + "scaleX": 0.892, + "scaleY": 0.892, + "rotation": 31.14, + "width": 36, + "height": 41 + } + }, + "left lower leg": { + "left lower leg": { "name": "goblin/left-lower-leg", "x": 23.58, "y": -2.06, "rotation": 105.75, "width": 33, "height": 70 } + }, + "left shoulder": { + "left shoulder": { "name": "goblin/left-shoulder", "x": 15.56, "y": -2.26, "rotation": 62.01, "width": 29, "height": 44 } + }, + "left upper leg": { + "left upper leg": { "name": "goblin/left-upper-leg", "x": 29.68, "y": -3.87, "rotation": 89.09, "width": 33, "height": 73 } + }, + "neck": { + "neck": { "name": "goblin/neck", "x": 10.1, "y": 0.42, "rotation": -93.69, "width": 36, "height": 41 } + }, + "pelvis": { + "pelvis": { "name": "goblin/pelvis", "x": -5.61, "y": 0.76, "width": 62, "height": 43 } + }, + "right arm": { + "right arm": { "name": "goblin/right-arm", "x": 16.44, "y": -1.04, "rotation": 94.32, "width": 23, "height": 50 } + }, + "right foot": { + "right foot": { "name": "goblin/right-foot", "x": 23.56, "y": 9.8, "rotation": 1.52, "width": 63, "height": 33 } + }, + "right hand": { + "right hand": { "name": "goblin/right-hand", "x": 7.88, "y": 2.78, "rotation": 91.96, "width": 36, "height": 37 } + }, + "right lower leg": { + "right lower leg": { "name": "goblin/right-lower-leg", "x": 25.68, "y": -3.15, "rotation": 111.83, "width": 36, "height": 76 } + }, + "right shoulder": { + "right shoulder": { "name": "goblin/right-shoulder", "x": 15.68, "y": -1.03, "rotation": 130.65, "width": 39, "height": 45 } + }, + "right upper leg": { + "right upper leg": { "name": "goblin/right-upper-leg", "x": 20.35, "y": 1.47, "rotation": 97.49, "width": 34, "height": 63 } + }, + "torso": { + "torso": { "name": "goblin/torso", "x": 38.09, "y": -3.87, "rotation": -94.95, "width": 68, "height": 96 } + }, + "undie straps": { + "undie straps": { "name": "goblin/undie-straps", "x": -3.87, "y": 13.1, "scaleX": 1.089, "width": 55, "height": 19 } + }, + "undies": { + "undies": { "name": "goblin/undies", "x": 6.3, "y": 0.12, "rotation": 0.91, "width": 36, "height": 29 } + } + }, + "goblingirl": { + "eyes": { + "eyes closed": { "name": "goblingirl/eyes-closed", "x": 28, "y": -25.54, "rotation": -87.04, "width": 37, "height": 21 } + }, + "head": { + "head": { "name": "goblingirl/head", "x": 27.71, "y": -4.32, "rotation": -85.58, "width": 103, "height": 81 } + }, + "left arm": { + "left arm": { "name": "goblingirl/left-arm", "x": 19.64, "y": -2.42, "rotation": 33.05, "width": 37, "height": 35 } + }, + "left foot": { + "left foot": { "name": "goblingirl/left-foot", "x": 25.17, "y": 7.92, "rotation": 3.32, "width": 65, "height": 31 } + }, + "left hand": { + "left hand": { + "name": "goblingirl/left-hand", + "x": 4.34, + "y": 2.39, + "scaleX": 0.896, + "scaleY": 0.896, + "rotation": 30.34, + "width": 35, + "height": 40 + } + }, + "left lower leg": { + "left lower leg": { "name": "goblingirl/left-lower-leg", "x": 25.02, "y": -0.6, "rotation": 105.75, "width": 33, "height": 70 } + }, + "left shoulder": { + "left shoulder": { "name": "goblingirl/left-shoulder", "x": 19.8, "y": -0.42, "rotation": 61.21, "width": 28, "height": 46 } + }, + "left upper leg": { + "left upper leg": { "name": "goblingirl/left-upper-leg", "x": 30.21, "y": -2.95, "rotation": 89.09, "width": 33, "height": 70 } + }, + "neck": { + "neck": { "name": "goblingirl/neck", "x": 6.16, "y": -3.14, "rotation": -98.86, "width": 35, "height": 41 } + }, + "pelvis": { + "pelvis": { "name": "goblingirl/pelvis", "x": -3.87, "y": 3.18, "width": 62, "height": 43 } + }, + "right arm": { + "right arm": { "name": "goblingirl/right-arm", "x": 16.85, "y": -0.66, "rotation": 93.52, "width": 28, "height": 50 } + }, + "right foot": { + "right foot": { "name": "goblingirl/right-foot", "x": 23.46, "y": 9.66, "rotation": 1.52, "width": 63, "height": 33 } + }, + "right hand": { + "right hand": { "name": "goblingirl/right-hand", "x": 7.21, "y": 3.43, "rotation": 91.16, "width": 36, "height": 37 } + }, + "right lower leg": { + "right lower leg": { "name": "goblingirl/right-lower-leg", "x": 26.15, "y": -3.27, "rotation": 111.83, "width": 36, "height": 76 } + }, + "right shoulder": { + "right shoulder": { "name": "goblingirl/right-shoulder", "x": 14.46, "y": 0.45, "rotation": 129.85, "width": 39, "height": 45 } + }, + "right upper leg": { + "right upper leg": { "name": "goblingirl/right-upper-leg", "x": 19.69, "y": 2.13, "rotation": 97.49, "width": 34, "height": 63 } + }, + "torso": { + "torso": { "name": "goblingirl/torso", "x": 36.28, "y": -5.14, "rotation": -95.74, "width": 68, "height": 96 } + }, + "undie straps": { + "undie straps": { "name": "goblingirl/undie-straps", "x": -1.51, "y": 14.18, "width": 55, "height": 19 } + }, + "undies": { + "undies": { "name": "goblingirl/undies", "x": 5.4, "y": 1.7, "width": 36, "height": 29 } + } + } +}, +"animations": { + "walk": { + "slots": { + "eyes": { + "attachment": [ + { "time": 0.7, "name": "eyes closed" }, + { "time": 0.8, "name": null } + ] + } + }, + "bones": { + "left upper leg": { + "rotate": [ + { "time": 0, "angle": -26.55 }, + { "time": 0.1333, "angle": -8.78 }, + { "time": 0.2333, "angle": 9.51 }, + { "time": 0.3666, "angle": 30.74 }, + { "time": 0.5, "angle": 25.33 }, + { "time": 0.6333, "angle": 26.11 }, + { "time": 0.7333, "angle": -7.7 }, + { "time": 0.8666, "angle": -21.19 }, + { "time": 1, "angle": -26.55 } + ], + "translate": [ + { "time": 0, "x": -1.32, "y": 1.7 }, + { "time": 0.3666, "x": -0.06, "y": 2.42 }, + { "time": 1, "x": -1.32, "y": 1.7 } + ] + }, + "right upper leg": { + "rotate": [ + { "time": 0, "angle": 42.45 }, + { "time": 0.1333, "angle": 52.1 }, + { "time": 0.2333, "angle": 8.53 }, + { "time": 0.5, "angle": -16.93 }, + { "time": 0.6333, "angle": 1.89 }, + { + "time": 0.7333, + "angle": 28.06, + "curve": [ 0.462, 0.11, 1, 1 ] + }, + { + "time": 0.8666, + "angle": 58.68, + "curve": [ 0.5, 0.02, 1, 1 ] + }, + { "time": 1, "angle": 42.45 } + ], + "translate": [ + { "time": 0, "x": 6.23, "y": 0 }, + { "time": 0.2333, "x": 2.14, "y": 2.4 }, + { "time": 0.5, "x": 2.44, "y": 4.8 }, + { "time": 1, "x": 6.23, "y": 0 } + ] + }, + "left lower leg": { + "rotate": [ + { "time": 0, "angle": -22.98 }, + { "time": 0.1333, "angle": -63.5 }, + { "time": 0.2333, "angle": -73.76 }, + { "time": 0.5, "angle": 5.11 }, + { "time": 0.6333, "angle": -28.29 }, + { "time": 0.7333, "angle": 4.08 }, + { "time": 0.8666, "angle": 3.53 }, + { "time": 1, "angle": -22.98 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.2333, "x": 2.55, "y": -0.47 }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "left foot": { + "rotate": [ + { "time": 0, "angle": -3.69 }, + { "time": 0.1333, "angle": -10.42 }, + { "time": 0.2333, "angle": -5.01 }, + { "time": 0.3666, "angle": 3.87 }, + { "time": 0.5, "angle": -3.87 }, + { "time": 0.6333, "angle": 2.78 }, + { "time": 0.7333, "angle": 1.68 }, + { "time": 0.8666, "angle": -8.54 }, + { "time": 1, "angle": -3.69 } + ] + }, + "right shoulder": { + "rotate": [ + { + "time": 0, + "angle": 5.29, + "curve": [ 0.264, 0, 0.75, 1 ] + }, + { "time": 0.6333, "angle": 6.65 }, + { "time": 1, "angle": 5.29 } + ] + }, + "right arm": { + "rotate": [ + { + "time": 0, + "angle": -4.02, + "curve": [ 0.267, 0, 0.804, 0.99 ] + }, + { + "time": 0.6333, + "angle": 19.78, + "curve": [ 0.307, 0, 0.787, 0.99 ] + }, + { "time": 1, "angle": -4.02 } + ] + }, + "right hand": { + "rotate": [ + { "time": 0, "angle": 8.98 }, + { "time": 0.6333, "angle": 0.51 }, + { "time": 1, "angle": 8.98 } + ] + }, + "left shoulder": { + "rotate": [ + { + "time": 0, + "angle": 6.25, + "curve": [ 0.339, 0, 0.683, 1 ] + }, + { + "time": 0.5, + "angle": -11.78, + "curve": [ 0.281, 0, 0.686, 0.99 ] + }, + { "time": 1, "angle": 6.25 } + ], + "translate": [ + { "time": 0, "x": 1.15, "y": 0.23 } + ] + }, + "left hand": { + "rotate": [ + { + "time": 0, + "angle": -21.23, + "curve": [ 0.295, 0, 0.755, 0.98 ] + }, + { + "time": 0.5, + "angle": -27.28, + "curve": [ 0.241, 0, 0.75, 0.97 ] + }, + { "time": 1, "angle": -21.23 } + ] + }, + "left arm": { + "rotate": [ + { + "time": 0, + "angle": 28.37, + "curve": [ 0.339, 0, 0.683, 1 ] + }, + { + "time": 0.5, + "angle": 60.09, + "curve": [ 0.281, 0, 0.686, 0.99 ] + }, + { "time": 1, "angle": 28.37 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -10.28 }, + { + "time": 0.1333, + "angle": -15.38, + "curve": [ 0.545, 0, 0.818, 1 ] + }, + { + "time": 0.3666, + "angle": -9.78, + "curve": [ 0.58, 0.17, 0.669, 0.99 ] + }, + { + "time": 0.6333, + "angle": -15.75, + "curve": [ 0.235, 0.01, 0.795, 1 ] + }, + { + "time": 0.8666, + "angle": -7.06, + "curve": [ 0.209, 0, 0.816, 0.98 ] + }, + { "time": 1, "angle": -10.28 } + ], + "translate": [ + { "time": 0, "x": -1.29, "y": 1.68 } + ] + }, + "right foot": { + "rotate": [ + { "time": 0, "angle": -5.25 }, + { "time": 0.2333, "angle": -1.91 }, + { "time": 0.3666, "angle": -6.45 }, + { "time": 0.5, "angle": -5.39 }, + { "time": 0.7333, "angle": -11.68 }, + { "time": 0.8666, "angle": 0.46 }, + { "time": 1, "angle": -5.25 } + ] + }, + "right lower leg": { + "rotate": [ + { + "time": 0, + "angle": -3.39, + "curve": [ 0.316, 0.01, 0.741, 0.98 ] + }, + { + "time": 0.1333, + "angle": -45.53, + "curve": [ 0.229, 0, 0.738, 0.97 ] + }, + { "time": 0.2333, "angle": -4.83 }, + { "time": 0.5, "angle": -19.53 }, + { "time": 0.6333, "angle": -64.8 }, + { + "time": 0.7333, + "angle": -82.56, + "curve": [ 0.557, 0.18, 1, 1 ] + }, + { "time": 1, "angle": -3.39 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0 }, + { "time": 0.6333, "x": 2.18, "y": 0.21 }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -4.16 }, + { + "time": 0.1333, + "x": 0, + "y": -7.05, + "curve": [ 0.359, 0.47, 0.646, 0.74 ] + }, + { "time": 0.3666, "x": 0, "y": 6.78 }, + { "time": 0.5, "x": 0, "y": -6.13 }, + { + "time": 0.6333, + "x": 0, + "y": -7.05, + "curve": [ 0.359, 0.47, 0.646, 0.74 ] + }, + { "time": 0.8666, "x": 0, "y": 6.78 }, + { "time": 1, "x": 0, "y": -4.16 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 3.6 }, + { "time": 0.1333, "angle": 17.49 }, + { "time": 0.2333, "angle": 6.1 }, + { "time": 0.3666, "angle": 3.45 }, + { "time": 0.5, "angle": 5.17 }, + { "time": 0.6333, "angle": 18.36 }, + { "time": 0.7333, "angle": 6.09 }, + { "time": 0.8666, "angle": 2.28 }, + { "time": 1, "angle": 3.6 } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 3.6, + "curve": [ 0, 0, 0.704, 1.17 ] + }, + { "time": 0.1333, "angle": -0.2 }, + { "time": 0.2333, "angle": 6.1 }, + { "time": 0.3666, "angle": 3.45 }, + { + "time": 0.5, + "angle": 5.17, + "curve": [ 0, 0, 0.704, 1.61 ] + }, + { "time": 0.6666, "angle": 1.1 }, + { "time": 0.7333, "angle": 6.09 }, + { "time": 0.8666, "angle": 2.28 }, + { "time": 1, "angle": 3.6 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/examples/goblins/export/goblins.png b/examples/goblins/export/goblins.png new file mode 100644 index 000000000..9d1ae572a Binary files /dev/null and b/examples/goblins/export/goblins.png differ diff --git a/examples/goblins/export/goblins.skel b/examples/goblins/export/goblins.skel new file mode 100644 index 000000000..1909e861a Binary files /dev/null and b/examples/goblins/export/goblins.skel differ diff --git a/examples/goblins/goblins-mesh.spine b/examples/goblins/goblins-mesh.spine new file mode 100644 index 000000000..7d06fcb27 Binary files /dev/null and b/examples/goblins/goblins-mesh.spine differ diff --git a/examples/goblins/goblins.spine b/examples/goblins/goblins.spine new file mode 100644 index 000000000..901f1b4d9 Binary files /dev/null and b/examples/goblins/goblins.spine differ diff --git a/examples/goblins/images/dagger.png b/examples/goblins/images/dagger.png new file mode 100644 index 000000000..ae585cdfa Binary files /dev/null and b/examples/goblins/images/dagger.png differ diff --git a/examples/goblins/images/goblin/eyes-closed.png b/examples/goblins/images/goblin/eyes-closed.png new file mode 100644 index 000000000..1c2ee697d Binary files /dev/null and b/examples/goblins/images/goblin/eyes-closed.png differ diff --git a/examples/goblins/images/goblin/head.png b/examples/goblins/images/goblin/head.png new file mode 100644 index 000000000..b6a9980e5 Binary files /dev/null and b/examples/goblins/images/goblin/head.png differ diff --git a/examples/goblins/images/goblin/left-arm.png b/examples/goblins/images/goblin/left-arm.png new file mode 100644 index 000000000..a2e7ee62b Binary files /dev/null and b/examples/goblins/images/goblin/left-arm.png differ diff --git a/examples/goblins/images/goblin/left-foot.png b/examples/goblins/images/goblin/left-foot.png new file mode 100644 index 000000000..1622ef82a Binary files /dev/null and b/examples/goblins/images/goblin/left-foot.png differ diff --git a/examples/goblins/images/goblin/left-hand.png b/examples/goblins/images/goblin/left-hand.png new file mode 100644 index 000000000..8b32488a1 Binary files /dev/null and b/examples/goblins/images/goblin/left-hand.png differ diff --git a/examples/goblins/images/goblin/left-lower-leg.png b/examples/goblins/images/goblin/left-lower-leg.png new file mode 100644 index 000000000..76c3cf26f Binary files /dev/null and b/examples/goblins/images/goblin/left-lower-leg.png differ diff --git a/examples/goblins/images/goblin/left-shoulder.png b/examples/goblins/images/goblin/left-shoulder.png new file mode 100644 index 000000000..ffba2a950 Binary files /dev/null and b/examples/goblins/images/goblin/left-shoulder.png differ diff --git a/examples/goblins/images/goblin/left-upper-leg.png b/examples/goblins/images/goblin/left-upper-leg.png new file mode 100644 index 000000000..d34575958 Binary files /dev/null and b/examples/goblins/images/goblin/left-upper-leg.png differ diff --git a/examples/goblins/images/goblin/neck.png b/examples/goblins/images/goblin/neck.png new file mode 100644 index 000000000..cdc6d5305 Binary files /dev/null and b/examples/goblins/images/goblin/neck.png differ diff --git a/examples/goblins/images/goblin/pelvis.png b/examples/goblins/images/goblin/pelvis.png new file mode 100644 index 000000000..401e616a6 Binary files /dev/null and b/examples/goblins/images/goblin/pelvis.png differ diff --git a/examples/goblins/images/goblin/right-arm.png b/examples/goblins/images/goblin/right-arm.png new file mode 100644 index 000000000..57a324715 Binary files /dev/null and b/examples/goblins/images/goblin/right-arm.png differ diff --git a/examples/goblins/images/goblin/right-foot.png b/examples/goblins/images/goblin/right-foot.png new file mode 100644 index 000000000..a7f32ae11 Binary files /dev/null and b/examples/goblins/images/goblin/right-foot.png differ diff --git a/examples/goblins/images/goblin/right-hand.png b/examples/goblins/images/goblin/right-hand.png new file mode 100644 index 000000000..300759235 Binary files /dev/null and b/examples/goblins/images/goblin/right-hand.png differ diff --git a/examples/goblins/images/goblin/right-lower-leg.png b/examples/goblins/images/goblin/right-lower-leg.png new file mode 100644 index 000000000..a6fb114cb Binary files /dev/null and b/examples/goblins/images/goblin/right-lower-leg.png differ diff --git a/examples/goblins/images/goblin/right-shoulder.png b/examples/goblins/images/goblin/right-shoulder.png new file mode 100644 index 000000000..b09797d49 Binary files /dev/null and b/examples/goblins/images/goblin/right-shoulder.png differ diff --git a/examples/goblins/images/goblin/right-upper-leg.png b/examples/goblins/images/goblin/right-upper-leg.png new file mode 100644 index 000000000..e9444b96c Binary files /dev/null and b/examples/goblins/images/goblin/right-upper-leg.png differ diff --git a/examples/goblins/images/goblin/torso.png b/examples/goblins/images/goblin/torso.png new file mode 100644 index 000000000..003da3c65 Binary files /dev/null and b/examples/goblins/images/goblin/torso.png differ diff --git a/examples/goblins/images/goblin/undie-straps.png b/examples/goblins/images/goblin/undie-straps.png new file mode 100644 index 000000000..e1baa489b Binary files /dev/null and b/examples/goblins/images/goblin/undie-straps.png differ diff --git a/examples/goblins/images/goblin/undies.png b/examples/goblins/images/goblin/undies.png new file mode 100644 index 000000000..814d1c52a Binary files /dev/null and b/examples/goblins/images/goblin/undies.png differ diff --git a/examples/goblins/images/goblingirl/eyes-closed.png b/examples/goblins/images/goblingirl/eyes-closed.png new file mode 100644 index 000000000..5948c6026 Binary files /dev/null and b/examples/goblins/images/goblingirl/eyes-closed.png differ diff --git a/examples/goblins/images/goblingirl/head.png b/examples/goblins/images/goblingirl/head.png new file mode 100644 index 000000000..22cdad812 Binary files /dev/null and b/examples/goblins/images/goblingirl/head.png differ diff --git a/examples/goblins/images/goblingirl/left-arm.png b/examples/goblins/images/goblingirl/left-arm.png new file mode 100644 index 000000000..332bf9b85 Binary files /dev/null and b/examples/goblins/images/goblingirl/left-arm.png differ diff --git a/examples/goblins/images/goblingirl/left-foot.png b/examples/goblins/images/goblingirl/left-foot.png new file mode 100644 index 000000000..3006f1e85 Binary files /dev/null and b/examples/goblins/images/goblingirl/left-foot.png differ diff --git a/examples/goblins/images/goblingirl/left-hand.png b/examples/goblins/images/goblingirl/left-hand.png new file mode 100644 index 000000000..69e06fd56 Binary files /dev/null and b/examples/goblins/images/goblingirl/left-hand.png differ diff --git a/examples/goblins/images/goblingirl/left-lower-leg.png b/examples/goblins/images/goblingirl/left-lower-leg.png new file mode 100644 index 000000000..b3f4c66c9 Binary files /dev/null and b/examples/goblins/images/goblingirl/left-lower-leg.png differ diff --git a/examples/goblins/images/goblingirl/left-shoulder.png b/examples/goblins/images/goblingirl/left-shoulder.png new file mode 100644 index 000000000..8c71dace3 Binary files /dev/null and b/examples/goblins/images/goblingirl/left-shoulder.png differ diff --git a/examples/goblins/images/goblingirl/left-upper-leg.png b/examples/goblins/images/goblingirl/left-upper-leg.png new file mode 100644 index 000000000..b79968c90 Binary files /dev/null and b/examples/goblins/images/goblingirl/left-upper-leg.png differ diff --git a/examples/goblins/images/goblingirl/neck.png b/examples/goblins/images/goblingirl/neck.png new file mode 100644 index 000000000..f066ce8f0 Binary files /dev/null and b/examples/goblins/images/goblingirl/neck.png differ diff --git a/examples/goblins/images/goblingirl/pelvis.png b/examples/goblins/images/goblingirl/pelvis.png new file mode 100644 index 000000000..6761a0ae6 Binary files /dev/null and b/examples/goblins/images/goblingirl/pelvis.png differ diff --git a/examples/goblins/images/goblingirl/right-arm.png b/examples/goblins/images/goblingirl/right-arm.png new file mode 100644 index 000000000..23495e689 Binary files /dev/null and b/examples/goblins/images/goblingirl/right-arm.png differ diff --git a/examples/goblins/images/goblingirl/right-foot.png b/examples/goblins/images/goblingirl/right-foot.png new file mode 100644 index 000000000..07a0e8518 Binary files /dev/null and b/examples/goblins/images/goblingirl/right-foot.png differ diff --git a/examples/goblins/images/goblingirl/right-hand.png b/examples/goblins/images/goblingirl/right-hand.png new file mode 100644 index 000000000..4c45c38de Binary files /dev/null and b/examples/goblins/images/goblingirl/right-hand.png differ diff --git a/examples/goblins/images/goblingirl/right-lower-leg.png b/examples/goblins/images/goblingirl/right-lower-leg.png new file mode 100644 index 000000000..7755bfaa2 Binary files /dev/null and b/examples/goblins/images/goblingirl/right-lower-leg.png differ diff --git a/examples/goblins/images/goblingirl/right-shoulder.png b/examples/goblins/images/goblingirl/right-shoulder.png new file mode 100644 index 000000000..7863424da Binary files /dev/null and b/examples/goblins/images/goblingirl/right-shoulder.png differ diff --git a/examples/goblins/images/goblingirl/right-upper-leg.png b/examples/goblins/images/goblingirl/right-upper-leg.png new file mode 100644 index 000000000..a7de7c126 Binary files /dev/null and b/examples/goblins/images/goblingirl/right-upper-leg.png differ diff --git a/examples/goblins/images/goblingirl/torso.png b/examples/goblins/images/goblingirl/torso.png new file mode 100644 index 000000000..131b77ff4 Binary files /dev/null and b/examples/goblins/images/goblingirl/torso.png differ diff --git a/examples/goblins/images/goblingirl/undie-straps.png b/examples/goblins/images/goblingirl/undie-straps.png new file mode 100644 index 000000000..79697263e Binary files /dev/null and b/examples/goblins/images/goblingirl/undie-straps.png differ diff --git a/examples/goblins/images/goblingirl/undies.png b/examples/goblins/images/goblingirl/undies.png new file mode 100644 index 000000000..b754efaae Binary files /dev/null and b/examples/goblins/images/goblingirl/undies.png differ diff --git a/examples/goblins/images/pack.json b/examples/goblins/images/pack.json new file mode 100644 index 000000000..cd7cf7f6c --- /dev/null +++ b/examples/goblins/images/pack.json @@ -0,0 +1,3 @@ +{ +"combineSubdirectories": true +} \ No newline at end of file diff --git a/examples/goblins/images/shield.png b/examples/goblins/images/shield.png new file mode 100644 index 000000000..0d0f93df7 Binary files /dev/null and b/examples/goblins/images/shield.png differ diff --git a/examples/goblins/images/spear.png b/examples/goblins/images/spear.png new file mode 100644 index 000000000..d19da6b7c Binary files /dev/null and b/examples/goblins/images/spear.png differ diff --git a/examples/goblins/license.txt b/examples/goblins/license.txt new file mode 100644 index 000000000..cd3e3b481 --- /dev/null +++ b/examples/goblins/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2013, Esoteric Software + +The images in this project may be redistributed as long as they are accompanied +by this license file. The images may not be used for commercial use of any +kind. + +The project file is released into the public domain. It may be used as the basis +for derivative work. \ No newline at end of file diff --git a/examples/hero/export/hero-mesh.json b/examples/hero/export/hero-mesh.json new file mode 100644 index 000000000..fc6f9b693 --- /dev/null +++ b/examples/hero/export/hero-mesh.json @@ -0,0 +1,3958 @@ +{ +"skeleton": { "hash": "9LrmMaI967fC0/XZwO4Ntbo7Ww8", "spine": "3.4.00", "width": 318.71, "height": 333.7, "images": "./images/" }, +"bones": [ + { "name": "root" }, + { "name": "Hip", "parent": "root", "y": 94.88 }, + { "name": "L_Ground", "parent": "root", "x": -31.28, "y": 0.26, "color": "00ff00ff" }, + { "name": "L_Ankle", "parent": "L_Ground", "x": 0.26, "y": 33.05, "color": "ff3f00ff" }, + { "name": "LookTarget", "parent": "root", "x": 112.83, "y": 218.2, "color": "8a009bff" }, + { "name": "LookConstraintGoal", "parent": "LookTarget", "y": -43.82, "color": "ff3f00ff" }, + { "name": "R_Ground", "parent": "root", "x": 28.11, "y": 0.26, "color": "ff0000ff" }, + { "name": "R_Ankle", "parent": "R_Ground", "y": 31.79, "color": "ff3f00ff" }, + { "name": "body", "parent": "Hip", "length": 60.79, "rotation": 96.39, "x": 4.09, "y": 3.17 }, + { "name": "head", "parent": "body", "length": 24.35, "rotation": -92.69, "x": 74.55, "y": -4.84 }, + { "name": "bone2", "parent": "head", "x": 12.91, "y": 110.65 }, + { "name": "mantles", "parent": "body", "rotation": -2.25, "x": 48.47, "y": -9 }, + { "name": "capeRoot", "parent": "mantles", "rotation": -90.45, "x": 19.61, "y": 14.01 }, + { "name": "cape1", "parent": "capeRoot", "length": 29.18, "rotation": -102.96, "x": -2.88, "y": -14.83 }, + { "name": "cape2", "parent": "cape1", "length": 30.14, "rotation": 2.27, "x": 29.18, "y": -0.06 }, + { "name": "cape3", "parent": "cape2", "length": 32.51, "rotation": 1.8, "x": 30.14, "y": 0.22 }, + { "name": "cape4", "parent": "cape3", "length": 33.02, "rotation": 4.95, "x": 32.51, "y": 0.06 }, + { "name": "thigh1", "parent": "Hip", "length": 23.94, "rotation": -107.07, "x": -17.51, "y": -5.22 }, + { "name": "shin1", "parent": "thigh1", "length": 28.23, "rotation": 10.26, "x": 29.76, "y": -0.91 }, + { "name": "foot1", "parent": "shin1", "length": 27.07, "rotation": -90.96, "x": 28.17, "y": -0.48, "inheritRotation": false }, + { "name": "thigh2", "parent": "Hip", "length": 23.65, "rotation": -85.46, "x": 21.85, "y": -5.86 }, + { "name": "shin2", "parent": "thigh2", "length": 25.35, "rotation": -2.25, "x": 31.99, "y": 2.96 }, + { "name": "foot2", "parent": "shin2", "length": 22.28, "rotation": -90.42, "x": 25.54, "y": 0.27, "inheritRotation": false }, + { "name": "upperarm1", "parent": "body", "length": 19.35, "rotation": 130.11, "x": 52.49, "y": 41.84 }, + { "name": "forearm1", "parent": "upperarm1", "length": 22.06, "rotation": 30.56, "x": 23.97, "y": 5.16 }, + { "name": "upperarm2", "parent": "body", "length": 25.98, "rotation": -178.95, "x": 57.94, "y": -38.93 }, + { "name": "forearm2", "parent": "upperarm2", "length": 15.3, "rotation": 6.79, "x": 28.74, "y": -0.9 }, + { "name": "hair01", "parent": "head", "x": 60.52, "y": 86.71 }, + { "name": "hand1", "parent": "forearm1", "length": 28.01, "rotation": 16.24, "x": 27.54, "y": 0.44 }, + { "name": "hand2", "parent": "forearm2", "length": 23.76, "rotation": 1.35, "x": 22.8, "y": -0.21 }, + { "name": "weapon", "parent": "hand2", "length": 157.4, "rotation": 77.9, "x": 15.97, "y": 1.43 } +], +"slots": [ + { "name": "cape", "bone": "capeRoot", "attachment": "cape" }, + { "name": "upperarm2", "bone": "upperarm2", "attachment": "upperarm2" }, + { "name": "sword", "bone": "root" }, + { "name": "hand2", "bone": "hand2", "attachment": "hand2" }, + { "name": "weapon", "bone": "weapon", "attachment": "sword" }, + { "name": "fingers", "bone": "hand2", "attachment": "fingers" }, + { "name": "forearm2", "bone": "forearm2", "attachment": "forearm2" }, + { "name": "thigh2", "bone": "thigh2", "attachment": "thigh2" }, + { "name": "foot2", "bone": "foot2", "attachment": "foot2" }, + { "name": "shin2", "bone": "shin2", "attachment": "shin2" }, + { "name": "thigh1", "bone": "thigh1", "attachment": "thigh1" }, + { "name": "foot1", "bone": "foot1", "attachment": "foot1" }, + { "name": "body", "bone": "body", "attachment": "body" }, + { "name": "shin1", "bone": "shin1", "attachment": "shin1" }, + { "name": "upperarm1", "bone": "upperarm1", "attachment": "upperarm1" }, + { "name": "mantles", "bone": "mantles", "attachment": "mantles" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "mouth", "bone": "head", "attachment": "mouth" }, + { "name": "eyes", "bone": "head", "attachment": "eyes" }, + { "name": "forearm1", "bone": "forearm1", "attachment": "forearm1" }, + { "name": "hand1", "bone": "hand1", "attachment": "hand1" } +], +"ik": [ + { + "name": "L_Leg", + "bones": [ "thigh1", "shin1" ], + "target": "L_Ankle", + "bendPositive": false + }, + { + "name": "LookConstraint", + "bones": [ "head" ], + "target": "LookConstraintGoal", + "mix": 0 + }, + { + "name": "R_Leg", + "bones": [ "thigh2", "shin2" ], + "target": "R_Ankle", + "bendPositive": false + } +], +"skins": { + "default": { + "body": { + "body": { + "type": "mesh", + "uvs": [ 1, 0.11883, 1, 0.46367, 0.9431, 0.58541, 0.89885, 0.70683, 0.94215, 0.82619, 0.75813, 1, 0.59793, 1, 0.15411, 0.85493, 0, 0.8704, 0.06102, 0.65598, 0.03757, 0.48936, 0, 0.32662, 0, 0, 0.23422, 0, 0.72782, 0, 0.90102, 0, 0.68019, 0.75104, 0.74731, 0.56314, 0.23, 0.54172, 0.31432, 0.27356, 0.19509, 0.68582, 0.73752, 0.28039 ], + "triangles": [ 6, 16, 5, 4, 16, 3, 4, 5, 16, 7, 20, 6, 6, 20, 16, 8, 9, 7, 7, 9, 20, 20, 18, 16, 16, 17, 3, 16, 18, 17, 3, 17, 2, 20, 9, 18, 9, 10, 18, 2, 17, 1, 18, 19, 17, 19, 21, 17, 17, 21, 1, 18, 10, 19, 10, 11, 19, 21, 0, 1, 11, 13, 19, 11, 12, 13, 19, 14, 21, 21, 15, 0, 21, 14, 15, 19, 13, 14 ], + "vertices": [ 63.56, -47.37, 30.83, -45.83, 19.54, -39.77, 8.22, -34.93999, -3.29, -38.61, -18.95, -20, -18.21999, -4.48, -2.43, 37.87, -3.2, 52.87, 16.86, 46, 32.78, 47.53, 48.39, 50.44, 79.39, 48.99, 78.32, 26.29, 76.07, -21.53, 75.29, -38.31, 5.02, -13.56, 22.55, -20.9, 26.93, 29.12, 52, 19.75, 13.42, 33.14, 49.42, -21.22 ], + "hull": 16, + "edges": [ 12, 32, 32, 34, 36, 38, 16, 14, 14, 12, 10, 12, 10, 8, 8, 6, 4, 34, 6, 4, 4, 2, 2, 0, 28, 30, 0, 30, 14, 40, 40, 36, 20, 36, 20, 18, 18, 16, 22, 24, 20, 22, 24, 26, 26, 28, 38, 26, 28, 42, 42, 34, 38, 42, 42, 0, 40, 18, 40, 32, 36, 34 ], + "width": 97, + "height": 95 + } + }, + "cape": { + "cape": { + "type": "mesh", + "uvs": [ 0.1298, 0.04145, 0.25, 0, 0.5, 0, 0.75, 0, 1, 0, 0.94074, 0.25, 0.90405, 0.5, 0.90969, 0.75259, 0.82336, 1, 0.55643, 1, 0.28104, 1, 0, 1, 0, 0.75518, 0.02821, 0.5, 0.05926, 0.25, 0.25, 0.25, 0.25, 0.5, 0.25, 0.75, 0.5, 0.25, 0.5, 0.5, 0.5, 0.75, 0.75, 0.25, 0.75, 0.5, 0.75, 0.75 ], + "triangles": [ 9, 23, 8, 8, 23, 7, 10, 20, 9, 9, 20, 23, 11, 17, 10, 10, 17, 20, 11, 12, 17, 12, 13, 17, 23, 6, 7, 20, 22, 23, 17, 19, 20, 13, 16, 17, 23, 22, 6, 20, 19, 22, 17, 16, 19, 19, 21, 22, 16, 18, 19, 13, 14, 16, 14, 15, 16, 5, 6, 21, 6, 22, 21, 19, 18, 21, 16, 15, 18, 18, 3, 21, 15, 2, 18, 14, 0, 15, 0, 1, 15, 4, 5, 3, 5, 21, 3, 18, 2, 3, 15, 1, 2 ], + "vertices": [ 2, 12, -71.4, 10.27, 0.46604, 13, -9.13, -72.39, 0.53394, 2, 12, -47.49, 12.58, 0.68358, 13, -16.73, -49.61, 0.31641, 1, 12, -10.99, 12.58, 1, 1, 12, 25.5, 12.58, 1, 1, 12, 62, 12.58, 1, 5, 12, 62, -27.16, 0.46827, 13, -2.49, 66, 0.34919, 14, -29.04, 67.26, 0.138, 15, -57.05, 68.86, 0.03802, 16, -83.3, 76.26, 0.0065, 5, 12, 62, -66.91, 0.10393, 13, 36.24, 74.89, 0.24994, 14, 10.01, 74.62, 0.32221, 15, -17.77, 74.99, 0.22166, 16, -43.64, 78.98, 0.10223, 5, 12, 62, -106.66, 0.00721, 13, 74.98, 83.79, 0.07037, 14, 49.07, 81.98, 0.23464, 15, 21.49, 81.11, 0.35566, 16, -3.99, 81.69, 0.3321, 4, 13, 121.89, 57.11, 6.8E-4, 14, 94.89, 53.47, 0.03735, 15, 66.39, 51.18, 0.18593, 16, 38.16, 48, 0.77602, 3, 14, 101.65, 17.6, 1.8E-4, 15, 72.01999, 15.11, 0.0066, 16, 40.65, 11.58, 0.9932, 2, 15, 77.64, -20.94, 0.05302, 16, 43.15, -24.82, 0.94697, 3, 14, 115.16, -54.13, 0.00351, 15, 83.26999, -57, 0.13964, 16, 45.65, -61.23, 0.85684, 4, 13, 107.65, -58.5, 0.02404, 14, 76.1, -61.49, 0.08882, 15, 43.99, -63.13, 0.31703, 16, 5.99, -63.95, 0.57009, 5, 12, -83.99, -66.91, 0.00248, 13, 68.91, -67.39, 0.18233, 14, 37.04, -68.85, 0.31987, 15, 4.71999, -69.26, 0.35134, 16, -33.66, -66.67, 0.14396, 5, 12, -80.23, -27.03, 0.05345, 13, 29.2, -72.66, 0.47788, 14, -2.84, -72.54, 0.33484, 15, -35.25999, -71.69, 0.12468, 16, -73.69999, -65.65, 0.00913, 5, 12, -47.49, -27.16, 0.04861, 13, 22, -40.71, 0.52446, 14, -8.77, -40.34, 0.34709, 15, -40.16999, -39.32, 0.07735, 16, -75.81, -32.98, 0.00247, 4, 13, 60.74, -31.82, 0.12714, 14, 30.28, -32.98, 0.45018, 15, -0.9, -33.18999, 0.37754, 16, -36.15, -30.26, 0.04511, 4, 13, 99.48, -22.92, 0.00851, 14, 69.33999, -25.62, 0.04332, 15, 38.37, -27.07, 0.37472, 16, 3.49, -27.54, 0.57342, 1, 13, 13.83, -5.14, 1, 2, 14, 23.52, 2.88, 0.74116, 15, -6.52, 2.86, 0.25883, 3, 14, 62.59, 10.24, 0.01792, 15, 32.74, 8.99, 0.48072, 16, 1, 8.87, 0.50133, 5, 12, 25.5, -27.16, 0.37653, 13, 5.66, 30.42, 0.49807, 14, -22.29, 31.39, 0.10748, 15, -51.42, 32.8, 0.01629, 16, -80.8, 39.84, 0.0016, 5, 12, 25.5, -66.91, 0.05159, 13, 44.41, 39.32, 0.2736, 14, 16.77, 38.75, 0.45121, 15, -12.15, 38.91999, 0.18086, 16, -41.15, 42.56, 0.0427, 5, 12, 25.5, -106.66, 1.7E-4, 13, 83.15, 48.21, 0.01708, 14, 55.83, 46.11, 0.12238, 15, 27.12, 45.05, 0.35747, 16, -1.49, 45.28, 0.50287 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 0, 14, 16 ], + "width": 146, + "height": 159 + } + }, + "eyes": { + "eyes": { + "type": "mesh", + "uvs": [ 1, 1, 0.71849, 1, 0.53549, 1, 0, 1, 0, 0, 0.53549, 0, 0.72749, 0, 1, 0 ], + "triangles": [ 1, 6, 0, 6, 7, 0, 6, 1, 5, 3, 5, 2, 1, 2, 5, 3, 4, 5 ], + "vertices": [ 47.51, 35.33, 24.43, 35.28, 9.42, 35.25, -34.48, 35.16, -34.54, 66.16, 9.35999, 66.25, 25.1, 66.29, 47.45, 66.33 ], + "hull": 8, + "edges": [ 6, 8, 0, 14, 4, 6, 8, 10, 4, 10, 0, 2, 2, 4, 10, 12, 12, 14, 2, 12 ], + "width": 82, + "height": 31 + } + }, + "fingers": { + "fingers": { "x": 16.21, "y": 1.37, "rotation": 82.36, "width": 31, "height": 33 } + }, + "foot1": { + "foot1": { "x": 12.55, "y": 0.12, "rotation": 90.96, "width": 50, "height": 42 } + }, + "foot2": { + "foot2": { "x": 8.83, "y": 2.92, "rotation": 90.42, "width": 53, "height": 38 } + }, + "forearm1": { + "forearm1": { "x": 11.88, "y": -5.04, "rotation": 106.61, "width": 41, "height": 49 } + }, + "forearm2": { + "forearm2": { "x": 13.08, "y": -0.63, "rotation": 83.71, "width": 31, "height": 32 } + }, + "hand1": { + "hand1": { "x": 11.92, "y": -0.7, "rotation": 90.37, "width": 37, "height": 48 } + }, + "hand2": { + "hand2": { "x": 14.23, "y": 1.64, "rotation": 82.36, "width": 31, "height": 37 } + }, + "head": { + "cape": { "type": "linkedmesh", "parent": "head", "width": 146, "height": 159 }, + "head": { + "type": "mesh", + "uvs": [ 0.89191, 0.07464, 1, 0.36671, 0.86524, 0.47125, 0.75952, 0.55326, 0.76614, 0.75424, 0.77423, 1, 0.52641, 1, 0.25139, 1, 0, 0.57054, 0.10296, 0.27407, 0.22999, 0.14511, 0.45598, 0.0454, 0.71272, 0, 0.6472, 0.42961, 0.39447, 0.39904, 0.22598, 0.42696, 0.75608, 0.33283, 0.60098, 0.22733, 0.43093, 0.21786, 0.52274, 0.41456, 0.52466, 0.72063, 0.24463, 0.56616, 0.28184, 0.73041, 0.67863, 0.75066 ], + "triangles": [ 18, 10, 11, 17, 11, 12, 18, 11, 17, 9, 10, 18, 0, 17, 12, 18, 15, 9, 19, 18, 17, 16, 13, 17, 16, 17, 0, 16, 0, 1, 2, 16, 1, 2, 3, 16, 13, 19, 17, 14, 18, 19, 14, 15, 18, 3, 13, 16, 21, 15, 14, 8, 9, 15, 8, 15, 21, 20, 19, 13, 20, 13, 3, 21, 20, 22, 14, 20, 21, 19, 20, 14, 23, 20, 3, 23, 3, 4, 22, 8, 21, 7, 8, 22, 6, 20, 23, 22, 20, 6, 7, 22, 6, 5, 6, 23, 5, 23, 4 ], + "vertices": [ 2, 27, 16.16, 58.77, 0.65472, 10, 63.77, 34.83, 0.34527, 2, 27, 36.03, 1.92, 1.00135, 10, 83.64, -22.01, -0.00135, 2, 9, 72.24, 76.12, 0.00643, 27, 11.72, -10.58, 0.99356, 1, 9, 54.09, 62.63, 1, 1, 9, 55.3, 27.87, 1, 1, 9, 56.78, -14.64, 1, 1, 9, 14.16, -14.73, 1, 1, 9, -33.14, -14.83, 1, 1, 9, -76.53, 59.37, 1, 2, 9, -58.93, 110.69, 0.14022, 10, -71.83999, 0.04, 0.85977, 2, 9, -37.13, 133.05, 0.05322, 10, -50.04, 22.4, 0.94677, 3, 9, 1.69, 150.38, 0, 27, -58.82, 63.67, 0.03085, 10, -11.21, 39.73, 0.96913, 2, 27, -14.68, 71.62, 0.38932, 10, 32.93, 47.68, 0.61066, 1, 9, 34.72, 83.98, 1, 1, 9, -8.75, 89.18, 1, 1, 9, -37.72, 84.29, 1, 3, 9, 53.42, 100.64, 0.00656, 27, -7.1, 13.93, 0.75552, 10, 40.50999, -10, 0.23791, 2, 27, -33.81, 32.21, 0.17777, 10, 13.79, 8.27, 0.82222, 2, 9, -2.54, 120.54, 0.02356, 10, -15.45, 9.89, 0.97643, 1, 9, 13.31, 86.54, 1, 1, 9, 13.75, 33.59, 1, 1, 9, -34.46, 60.21, 1, 1, 9, -28, 31.81, 1, 1, 9, 40.25, 28.45, 1 ], + "hull": 13, + "edges": [ 0, 24, 24, 22, 22, 20, 20, 18, 16, 18, 16, 14, 6, 26, 28, 30, 30, 16, 0, 2, 2, 4, 4, 6, 4, 32, 32, 34, 34, 36, 36, 18, 10, 12, 12, 14, 26, 38, 38, 28, 38, 34, 34, 24, 12, 40, 40, 38, 6, 8, 8, 10 ], + "width": 172, + "height": 173 + } + }, + "mantles": { + "mantles": { + "type": "mesh", + "uvs": [ 1, 1, 0.7369, 1, 0.27505, 0.80975, 0, 0.63797, 0, 0, 0.27235, 0, 0.74584, 0, 1, 0 ], + "triangles": [ 1, 6, 0, 6, 7, 0, 1, 2, 6, 3, 5, 2, 2, 5, 6, 3, 4, 5 ], + "vertices": [ -15.28, -51.1, -15.02, -15.32, -4.08, 47.4, 5.63, 84.74, 40.72, 84.47, 40.43999, 47.44, 39.96, -16.95, 39.7, -51.51 ], + "hull": 8, + "edges": [ 0, 14, 6, 8, 4, 6, 8, 10, 4, 10, 0, 2, 10, 12, 12, 14, 2, 12, 2, 4 ], + "width": 136, + "height": 55 + } + }, + "mouth": { + "mouth": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 42.58, 4.32, -18.41, 4.19, -18.43, 17.19, 42.56, 17.32 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 61, + "height": 13 + } + }, + "shin1": { + "shin1": { "x": 8.95, "y": 0.67, "rotation": 96.8, "width": 53, "height": 57 } + }, + "shin2": { + "shin2": { "x": 2.25, "y": -2.94, "rotation": 87.71, "width": 51, "height": 54 } + }, + "thigh1": { + "thigh1": { "x": 11.98, "y": -1.01, "rotation": 107.07, "width": 60, "height": 63 } + }, + "thigh2": { + "thigh2": { "x": 15.7, "y": -4.61, "rotation": 85.46, "width": 57, "height": 64 } + }, + "upperarm1": { + "upperarm1": { "x": 6.6, "y": 0.05, "rotation": 137.18, "width": 50, "height": 56 } + }, + "upperarm2": { + "upperarm2": { "x": 13.32, "y": -2.21, "rotation": 90.45, "width": 39, "height": 59 } + }, + "weapon": { + "sword": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 179.5, -33.93999, -36.49, -34.64, -36.72, 34.34999, 179.27, 35.05 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 216, + "height": 69 + } + } + } +}, +"events": { + "Footstep": {} +}, +"animations": { + "Attack": { + "bones": { + "root": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -12.6, "y": -11.34 }, + { "time": 0.0666, "x": -20.75, "y": -23.08 }, + { "time": 0.1333, "x": -15.51, "y": -16.91 }, + { "time": 0.2, "x": -5.88, "y": -21.85 }, + { "time": 0.2666, "x": -7.08, "y": -25.29 }, + { "time": 0.4, "x": -12.6, "y": -11.34 } + ] + }, + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 51.94, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 51.94, "y": 0 } + ] + }, + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -67.98, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": -67.98, "y": 0 } + ] + }, + "L_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": 2.2 }, + { "time": 0.0666, "angle": 13.21 }, + { "time": 0.1333, "angle": -9.58 }, + { "time": 0.2, "angle": -23.58 }, + { "time": 0.2666, "angle": -32.14 }, + { "time": 0.4, "angle": 2.2 } + ], + "translate": [ + { "time": 0, "x": -0.76, "y": -1.89 }, + { "time": 0.1333, "x": 4.86, "y": -0.24 }, + { "time": 0.2, "x": 8.05, "y": -2.43 }, + { "time": 0.4, "x": -0.76, "y": -1.89 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 14.5, "y": -3.78, "curve": "stepped" }, + { "time": 0.4, "x": 14.5, "y": -3.78 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -22.57, "y": 1.51 }, + { "time": 0.2, "x": -13.26, "y": -2.4 }, + { "time": 0.4, "x": -22.57, "y": 1.51 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -19.21 }, + { "time": 0.0666, "angle": -19.17 }, + { "time": 0.1333, "angle": 4.76 }, + { "time": 0.2, "angle": 12.46 }, + { "time": 0.2666, "angle": 12.57 }, + { "time": 0.4, "angle": -19.21 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0666, "x": 3.47, "y": 5.7 }, + { "time": 0.2, "x": -4.55, "y": -12.27 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": -8.27 }, + { "time": 0.0666, "angle": 5.32 }, + { "time": 0.1333, "angle": 4.8 }, + { "time": 0.2, "angle": -2.43 }, + { "time": 0.2666, "angle": -12.35 }, + { "time": 0.4, "angle": -8.27 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0666, "x": 5.51, "y": -5.45 }, + { "time": 0.1333, "x": 1.53, "y": -5.87 }, + { "time": 0.2, "x": 0.46, "y": -6.11 }, + { "time": 0.2666, "x": -6.55, "y": -4.72 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "shin1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "shin2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "upperarm1": { + "rotate": [ + { "time": 0, "angle": -4.05 }, + { "time": 0.0666, "angle": 33.65 }, + { "time": 0.1333, "angle": -3.75 }, + { "time": 0.2666, "angle": -49.64 }, + { "time": 0.3333, "angle": -42.31 }, + { "time": 0.4, "angle": -4.05 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.2, "x": -2.5, "y": -6.51 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 324.46 }, + { "time": 0.0666, "angle": 101.05 }, + { "time": 0.1333, "angle": 49.05 }, + { "time": 0.2, "angle": 15.11 }, + { "time": 0.2666, "angle": 313.18 }, + { "time": 0.4, "angle": 324.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1333, "x": -2.1, "y": -8.13 }, + { "time": 0.2, "x": -10.56, "y": 1.25 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "bone2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 15.69 }, + { "time": 0.3333, "angle": -8.11 }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1333, "x": -13.54, "y": 2.05 }, + { "time": 0.3333, "x": 4.32, "y": -12.82 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "capeRoot": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": 8.9, "curve": "stepped" }, + { "time": 0.4, "angle": 8.9 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": -13.11, "curve": "stepped" }, + { "time": 0.4, "angle": -13.11 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "forearm1": { + "rotate": [ + { "time": 0, "angle": 7.93 }, + { "time": 0.0666, "angle": 42.3 }, + { "time": 0.1333, "angle": 21.87 }, + { "time": 0.3333, "angle": 43.27 }, + { "time": 0.4, "angle": 7.93 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 56.31 }, + { "time": 0.0666, "angle": 87.62 }, + { "time": 0.1333, "angle": 6.51 }, + { "time": 0.2, "angle": 1 }, + { "time": 0.2666, "angle": 45.14 }, + { "time": 0.4, "angle": 56.31 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "hair01": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2, "angle": 19.95 }, + { "time": 0.3333, "angle": -8.11 }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.2, "x": -11.67, "y": 11.16 }, + { "time": 0.3333, "x": 3.75, "y": -20.94 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": -8.94 }, + { "time": 0.2666, "angle": -20.79 }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": 17.89 }, + { "time": 0.0666, "angle": -12.89 }, + { "time": 0.1333, "angle": -11.39 }, + { "time": 0.2, "angle": 6.2 }, + { "time": 0.2666, "angle": 18.96 }, + { "time": 0.4, "angle": 17.89 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "weapon": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + } + }, + "deform": { + "default": { + "body": { + "body": [ + { + "time": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.2, + "offset": 12, + "vertices": [ -0.41782, -9.98457, -2.40061, -7.62488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.40061, -7.62488, -0.41782, -9.98457, 0, 0, -0.41782, -9.98457, -0.41782, -9.98457, -2.40061, -7.62488, -2.40061, -7.62488, -2.40061, -7.62488, -0.41782, -9.98457 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4 } + ] + }, + "eyes": { + "eyes": [ + { + "time": 0, + "curve": [ 0.208, 0.78, 0.75, 1 ] + }, + { + "time": 0.2, + "vertices": [ 6.76959, 1.0625, 15.002, 0.58575, 19.83156, 0.77389, 23.31313, -0.40103, 22.66579, -0.49446, 19.83156, 0.77389, 15.002, 0.58575, 6.12215, 0.96937 ], + "curve": [ 0.532, 0, 0.75, 1 ] + }, + { "time": 0.4 } + ] + }, + "head": { + "head": [ + { + "time": 0, + "offset": 18, + "vertices": [ -6.48673, 0.51687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.48673, 0.51687, 0, 0, -4.54435, -0.64837, -4.54435, -0.64837 ], + "curve": [ 0.208, 0.78, 0.75, 1 ] + }, + { + "time": 0.2, + "offset": 12, + "vertices": [ 2.41841, 0.10234, 1.63067, 0.06914, 1.12625, 1.37998, 14.92421, 1.25856, 2.16658, 0.74578, -2.78115, -0.11792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11.70107, 0.2722, 4.49131, 0.19014, 7.32128, 0.18938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13.07989, 0.52394, 20.62552, 0.49707, 6.02913, 0.32602, 6.02913, 0.32602, 9.14706, 1.88179 ], + "curve": [ 0.532, 0, 0.753, 1 ] + }, + { + "time": 0.4, + "offset": 18, + "vertices": [ -6.48673, 0.51687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.48673, 0.51687, 0, 0, -4.54435, -0.64837, -4.54435, -0.64837 ] + } + ] + }, + "mantles": { + "mantles": [ + { + "time": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.2, + "vertices": [ 4.0931, -3.31009, 0.20663, -12.49304, -5.29248, -11.21297, -2.35191, -2.26423, -2.35191, -2.26423, -5.29248, -11.21297, -0.07825, -5.05688, -3.74408, 9.53743 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4 } + ] + }, + "mouth": { + "mouth": [ + { + "time": 0, + "curve": [ 0.208, 0.78, 0.75, 1 ] + }, + { + "time": 0.2, + "vertices": [ 9.24916, -1.34519, 25.71696, -0.4806, 25.58307, -0.49992, 9.1152, -1.36451 ], + "curve": [ 0.532, 0, 0.75, 1 ] + }, + { "time": 0.4 } + ] + }, + "weapon": { + "sword": [ + { "time": 0 }, + { + "time": 0.0666, + "vertices": [ -15.89492, 9.12606, 0, 0, 0, 0, -15.83184, -9.23487 ] + }, + { + "time": 0.2, + "vertices": [ 8.49405, -0.84592, 0, 0, 0, 0, 8.48806, 0.90445 ] + }, + { + "time": 0.2666, + "vertices": [ -17.00197, -7.9945, 0, 0, 0, 0, -17.05646, 7.87807 ] + }, + { "time": 0.4 } + ] + } + } + } + }, + "Crouch": { + "bones": { + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 38.03 }, + { "time": 0.5, "angle": 30.8 }, + { "time": 1, "angle": 38.03 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { + "time": 0, + "angle": -15.51, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "angle": -11.54, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1, "angle": -15.51 } + ], + "translate": [ + { + "time": 0, + "x": -0.41, + "y": -2.32, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": -2.2, + "y": -0.53, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1, "x": -0.41, "y": -2.32 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 8.72 }, + { "time": 0.5, "angle": 3.24 }, + { "time": 1, "angle": 8.72 } + ], + "translate": [ + { + "time": 0, + "x": -4.42, + "y": -2.85, + "curve": [ 0.361, 0.63, 0.697, 1 ] + }, + { + "time": 0.1666, + "x": -4.84, + "y": -3.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "x": -2.35, + "y": -1.86, + "curve": [ 0.36, 0.43, 0.701, 0.8 ] + }, + { "time": 1, "x": -4.42, "y": -2.85 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -11.22, "y": -42.01, "curve": "stepped" }, + { "time": 1, "x": -11.22, "y": -42.01 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": 9.04 }, + { "time": 0.5, "angle": 7.13 }, + { "time": 1, "angle": 9.04 } + ], + "translate": [ + { "time": 0, "x": -0.09, "y": 0, "curve": "stepped" }, + { "time": 1, "x": -0.09, "y": 0 } + ] + }, + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -29.07, "y": 1.18, "curve": "stepped" }, + { "time": 1, "x": -29.07, "y": 1.18 } + ] + }, + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 16.23, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 16.23, "y": 0 } + ] + }, + "upperarm1": { + "rotate": [ + { "time": 0, "angle": -5.42 }, + { "time": 0.5, "angle": -11.1 }, + { "time": 1, "angle": -5.42 } + ], + "translate": [ + { "time": 0, "x": -6.94, "y": 5.85, "curve": "stepped" }, + { "time": 1, "x": -6.94, "y": 5.85 } + ] + }, + "forearm1": { + "rotate": [ + { "time": 0, "angle": 25.38 }, + { "time": 0.5, "angle": 32.07 }, + { "time": 1, "angle": 25.38 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 18.6 }, + { "time": 0.5, "angle": 26.15 }, + { "time": 1, "angle": 18.6 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -2.75, "y": 0, "curve": "stepped" }, + { "time": 1, "x": -2.75, "y": 0 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -0.92, "y": 6.67, "curve": "stepped" }, + { "time": 1, "x": -0.92, "y": 6.67 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": 270.13, "curve": "stepped" }, + { "time": 1, "angle": 270.13 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape4": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "weapon": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": -13.39 }, + { "time": 0.5, "angle": -17.28 }, + { "time": 1, "angle": -13.39 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { "time": 0, "angle": -9.29 }, + { "time": 0.5, "angle": -1.97 }, + { "time": 1, "angle": -9.29 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "capeRoot": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -4.92, "curve": "stepped" }, + { "time": 1, "x": 0, "y": -4.92 } + ] + }, + "L_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -12.22, "curve": "stepped" }, + { "time": 1, "x": 0, "y": -12.22 } + ] + } + }, + "deform": { + "default": { + "body": { + "body": [ + { + "time": 0, + "offset": 12, + "vertices": [ 2.58728, 10.16382, -0.16621, 4.50657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.23097, 5.2839, -0.84591, 9.09544, 0, 0, -0.84591, 9.09544, -0.84591, 9.09544, -0.23097, 5.2839, -0.23097, 5.2839, -0.16621, 4.50657, -0.84591, 9.09544 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "offset": 8, + "vertices": [ -0.16332, -0.55322, 0.56806, -2.69373, 1.7576, 3.93866, -1.93256, 0.76876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.97894, 1.32548, -0.70127, 3.17347, 0, 0, -0.70127, 3.17347, -0.70127, 3.17347, -1.97894, 1.32548, -1.97894, 1.32548, -1.93256, 0.76876, -0.70127, 3.17347 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "offset": 12, + "vertices": [ 2.58728, 10.16382, -0.16621, 4.50657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.23097, 5.2839, -0.84591, 9.09544, 0, 0, -0.84591, 9.09544, -0.84591, 9.09544, -0.23097, 5.2839, -0.23097, 5.2839, -0.16621, 4.50657, -0.84591, 9.09544 ] + } + ] + }, + "eyes": { + "eyes": [ + { + "time": 0, + "vertices": [ 3.86398, 0.60645, 7.61641, 0.3323, 8.69186, 0.43607, 9.7326, -0.23659, 9.36311, -0.28992, 8.69186, 0.43607, 7.61641, 0.3323, 3.49443, 0.5533 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "vertices": [ 6.76959, 1.0625, 13.34377, 0.58218, 15.22793, 0.76399, 17.05128, -0.4145, 16.40394, -0.50793, 15.22793, 0.76399, 13.34377, 0.58218, 6.12215, 0.96937 ], + "curve": [ 0.587, -0.02, 0.75, 1 ] + }, + { + "time": 1, + "vertices": [ 3.86398, 0.60645, 7.61641, 0.3323, 8.69186, 0.43607, 9.7326, -0.23659, 9.36311, -0.28992, 8.69186, 0.43607, 7.61641, 0.3323, 3.49443, 0.5533 ] + } + ] + }, + "head": { + "head": [ + { + "time": 0, + "offset": 12, + "vertices": [ 1.38039, 0.05841, 0.93076, 0.03946, 0.64284, 0.78767, 2.71751, 0.88434, 1.23665, 0.42568, -1.58743, -0.06731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6.67878, 0.15537, 2.56357, 0.10853, 4.17887, 0.10809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6648, 0.46503, 8.75593, 0.22785, 1.49082, -0.0922, 1.49082, -0.0922, 5.221, 1.07409 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "offset": 12, + "vertices": [ 2.41841, 0.10234, 1.63067, 0.06914, 1.12625, 1.37998, 9.63887, 1.16067, 2.16658, 0.74578, -2.78115, -0.11792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11.70107, 0.2722, 4.49131, 0.19014, 7.32128, 0.18938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7.79455, 0.42605, 15.34018, 0.39919, 6.02913, 0.32602, 6.02913, 0.32602, 9.14706, 1.88179 ], + "curve": [ 0.587, -0.02, 0.75, 1 ] + }, + { + "time": 1, + "offset": 12, + "vertices": [ 1.38039, 0.05841, 0.93076, 0.03946, 0.64284, 0.78767, 2.71751, 0.88434, 1.23665, 0.42568, -1.58743, -0.06731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6.67878, 0.15537, 2.56357, 0.10853, 4.17887, 0.10809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6648, 0.46503, 8.75593, 0.22785, 1.49082, -0.0922, 1.49082, -0.0922, 5.221, 1.07409 ] + } + ] + }, + "mantles": { + "mantles": [ + { + "time": 0, + "offset": 2, + "vertices": [ -0.28599, 2.32239, 3.1293, 5.3126, 0.13581, 2.32148, 0.13581, 2.32148, 3.1293, 5.3126, -0.28599, 2.32239 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "vertices": [ 1.3394, -2.09791, 0.11259, -3.18363, 3.04376, 1.23967, -0.0392, 0.77838, -0.0392, 0.77838, 3.04376, 1.23967, -0.01004, -0.95502, -0.04585, 0.86382 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "offset": 2, + "vertices": [ -0.28599, 2.32239, 3.1293, 5.3126, 0.13581, 2.32148, 0.13581, 2.32148, 3.1293, 5.3126, -0.28599, 2.32239 ] + } + ] + }, + "mouth": { + "mouth": [ + { + "time": 0, + "vertices": [ 5.27927, -0.76781, 10.17068, -0.28401, 10.09426, -0.29504, 5.20281, -0.77884 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "vertices": [ 9.24916, -1.34519, 17.81878, -0.49758, 17.68489, -0.5169, 9.1152, -1.36451 ], + "curve": [ 0.587, -0.02, 0.75, 1 ] + }, + { + "time": 1, + "vertices": [ 5.27927, -0.76781, 10.17068, -0.28401, 10.09426, -0.29504, 5.20281, -0.77884 ] + } + ] + } + } + } + }, + "Fall": { + "bones": { + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 13.15, "y": 7.94, "curve": "stepped" }, + { "time": 1, "x": 13.15, "y": 7.94 } + ] + }, + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 35.34, "y": 4.14, "curve": "stepped" }, + { "time": 1, "x": 35.34, "y": 4.14 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": 19.62, "curve": "stepped" }, + { "time": 1, "angle": 19.62 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": 39.16, "curve": "stepped" }, + { "time": 1, "angle": 39.16 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": 14.13, "curve": "stepped" }, + { "time": 1, "angle": 14.13 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -17.81, "curve": "stepped" }, + { "time": 1, "angle": -17.81 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "upperarm1": { + "rotate": [ + { "time": 0, "angle": -25.71, "curve": "stepped" }, + { "time": 1, "angle": -25.71 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "forearm1": { + "rotate": [ + { "time": 0, "angle": 26.18, "curve": "stepped" }, + { "time": 1, "angle": 26.18 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 37.75, "curve": "stepped" }, + { "time": 1, "angle": 37.75 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 12.3, "curve": "stepped" }, + { "time": 1, "angle": 12.3 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "L_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "capeRoot": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "weapon": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape4": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + } + } + }, + "Headturn": { + "bones": { + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 0.46 }, + { "time": 0.5, "angle": 358.79 }, + { "time": 1, "angle": 0.46 }, + { "time": 1.5, "angle": 358.79 }, + { "time": 2, "angle": 0.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.5, "x": -3.12, "y": 8.02 }, + { "time": 1, "x": 0, "y": 0 }, + { "time": 1.5, "x": -3.12, "y": 8.02 }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": 1.66 }, + { "time": 1, "angle": 0 }, + { "time": 1.5, "angle": 1.66 }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": 0, + "y": -3.7, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "x": 0, + "y": -3.7, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -4.18 }, + { "time": 0.5, "angle": -8.25 }, + { "time": 1, "angle": -4.18 }, + { "time": 1.5, "angle": -8.25 }, + { "time": 2, "angle": -4.18 } + ], + "translate": [ + { + "time": 0, + "x": -1.06, + "y": 0, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { + "time": 0.1, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "x": -3.74, + "y": 0, + "curve": [ 0.243, 0, 0.648, 0.6 ] + }, + { + "time": 1, + "x": -1.06, + "y": 0, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { + "time": 1.1, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.6666, + "x": -3.74, + "y": 0, + "curve": [ 0.243, 0, 0.648, 0.6 ] + }, + { "time": 2, "x": -1.06, "y": 0 } + ], + "scale": [ + { "time": 0.1, "x": -1, "y": 1, "curve": "stepped" }, + { "time": 1.1, "x": 1, "y": 1 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0, "curve": "stepped" }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": -2.92, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": -3.18, + "y": -4.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": 0, + "y": -2.92, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "x": -3.18, + "y": -4.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": -2.92 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": 0 }, + { + "time": 0.4333, + "angle": -4.83, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1, "angle": 0 }, + { + "time": 1.4333, + "angle": -4.83, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": -0.09, + "y": 0, + "curve": [ 0.3, 0.21, 0.755, 1 ] + }, + { + "time": 0.4333, + "x": -1.41, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.9333, "x": 0, "y": 0 }, + { + "time": 1, + "x": -0.09, + "y": 0, + "curve": [ 0.3, 0.21, 0.755, 1 ] + }, + { + "time": 1.4333, + "x": -1.41, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.9333, "x": 0, "y": 0 }, + { "time": 2, "x": -0.09, "y": 0 } + ] + }, + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0, "curve": "stepped" }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -7.15, "y": 0, "curve": "stepped" }, + { "time": 1, "x": -7.15, "y": 0, "curve": "stepped" }, + { "time": 2, "x": -7.15, "y": 0 } + ] + }, + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0, "curve": "stepped" }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 5.94, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 5.94, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 5.94, "y": 0 } + ] + }, + "upperarm1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "angle": -15.4, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { + "time": 1, + "angle": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "angle": -15.4, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": 1.84, + "y": -5, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": 0, + "y": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "x": 1.84, + "y": -5, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "forearm1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "angle": 9.63, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { + "time": 1, + "angle": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "angle": 9.63, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": 13.63 }, + { "time": 1, "angle": 0 }, + { "time": 1.5, "angle": 13.63 }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0, "curve": "stepped" }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0, "curve": "stepped" }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0, "curve": "stepped" }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0, "curve": "stepped" }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "cape4": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "weapon": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0, "curve": "stepped" }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "cape2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": -8.65 }, + { "time": 1, "angle": 0 }, + { "time": 1.5, "angle": -8.65 }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "angle": 12.36, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { + "time": 1, + "angle": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "angle": 12.36, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "cape1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "capeRoot": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0, "curve": "stepped" }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "shin2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0, "curve": "stepped" }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "shin1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0, "curve": "stepped" }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0, "curve": "stepped" }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "L_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0, "curve": "stepped" }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "bone2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.3, "angle": 2.36 }, + { "time": 1, "angle": 0 }, + { "time": 1.2333, "angle": 3.15 }, + { "time": 1.6666, "angle": 2.36 }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.267, 0, 0.617, 0.42 ] + }, + { + "time": 0.1, + "x": -9.72, + "y": -17.7, + "curve": [ 0.327, 0.31, 0.694, 0.75 ] + }, + { "time": 0.3, "x": -0.72, "y": -0.78 }, + { + "time": 1, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.1, + "x": -9.72, + "y": -17.7, + "curve": [ 0.327, 0.31, 0.694, 0.75 ] + }, + { "time": 1.2333, "x": -1.23, "y": 2.05 }, + { "time": 1.6666, "x": -0.72, "y": -0.78 }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "hair01": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.3, "angle": 5.81 }, + { "time": 1, "angle": 0 }, + { "time": 1.2333, "angle": 7.75 }, + { "time": 1.6666, "angle": 5.81 }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.267, 0, 0.617, 0.42 ] + }, + { + "time": 0.1, + "x": -8.31, + "y": -9.93, + "curve": [ 0.327, 0.31, 0.694, 0.75 ] + }, + { "time": 0.3, "x": 0.74, "y": -1.41 }, + { + "time": 1, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.1, + "x": -8.31, + "y": -9.93, + "curve": [ 0.327, 0.31, 0.694, 0.75 ] + }, + { "time": 1.2333, "x": -1.23, "y": 2.05 }, + { "time": 1.6666, "x": 0.74, "y": -1.41 }, + { "time": 2, "x": 0, "y": 0 } + ] + } + }, + "deform": { + "default": { + "body": { + "body": [ + { + "time": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "offset": 12, + "vertices": [ -0.75588, -3.68987, -1.01898, -2.97404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.01898, -2.97404, -0.75588, -3.68987, 0, 0, -0.75588, -3.68987, -0.75588, -3.68987, -1.01898, -2.97404, -1.01898, -2.97404, -1.01898, -2.97404, -0.75588, -3.68987 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "offset": 12, + "vertices": [ -0.75588, -3.68987, -1.01898, -2.97404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.01898, -2.97404, -0.75588, -3.68987, 0, 0, -0.75588, -3.68987, -0.75588, -3.68987, -1.01898, -2.97404, -1.01898, -2.97404, -1.01898, -2.97404, -0.75588, -3.68987 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2 } + ] + }, + "eyes": { + "eyes": [ + { + "time": 0, + "vertices": [ 3.86398, 0.60645, 7.61641, 0.3323, 8.69186, 0.43607, 9.7326, -0.23659, 9.36311, -0.28992, 8.69186, 0.43607, 7.61641, 0.3323, 3.49443, 0.5533 ], + "curve": [ 0.12, 0.43, 0.75, 1 ] + }, + { + "time": 0.1, + "vertices": [ -8.40292, -7.08714, -21.63906, -8.70873, -16.35853, -9.80266, -11.15096, -9.57028, -11.74201, -9.65558, -16.35853, -9.80266, -21.63906, -8.70873, -8.99406, -7.17216 ], + "curve": [ 0.103, 0.39, 0.75, 1 ] + }, + { + "time": 0.2666, + "vertices": [ 3.86398, 0.60645, 7.61641, 0.3323, 8.69186, 0.43607, 9.7326, -0.23659, 9.36311, -0.28992, 8.69186, 0.43607, 7.61641, 0.3323, 3.49443, 0.5533 ], + "curve": "stepped" + }, + { + "time": 1, + "vertices": [ 3.86398, 0.60645, 7.61641, 0.3323, 8.69186, 0.43607, 9.7326, -0.23659, 9.36311, -0.28992, 8.69186, 0.43607, 7.61641, 0.3323, 3.49443, 0.5533 ], + "curve": [ 0.12, 0.43, 0.75, 1 ] + }, + { + "time": 1.1, + "vertices": [ -8.40292, -7.08714, -21.63906, -8.70873, -16.35853, -9.80266, -11.15096, -9.57028, -11.74201, -9.65558, -16.35853, -9.80266, -21.63906, -8.70873, -8.99406, -7.17216 ], + "curve": [ 0.103, 0.39, 0.75, 1 ] + }, + { + "time": 1.2666, + "vertices": [ 6.76959, 1.0625, 13.34377, 0.58218, 15.22793, 0.76399, 17.05128, -0.4145, 16.40394, -0.50793, 15.22793, 0.76399, 13.34377, 0.58218, 6.12215, 0.96937 ], + "curve": [ 0.587, -0.02, 0.75, 1 ] + }, + { + "time": 2, + "vertices": [ 3.86398, 0.60645, 7.61641, 0.3323, 8.69186, 0.43607, 9.7326, -0.23659, 9.36311, -0.28992, 8.69186, 0.43607, 7.61641, 0.3323, 3.49443, 0.5533 ] + } + ] + }, + "head": { + "head": [ + { + "time": 0, + "offset": 12, + "vertices": [ 1.38039, 0.05841, 0.93076, 0.03946, 0.64284, 0.78767, 2.71751, 0.88434, 1.23665, 0.42568, -1.58743, -0.06731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6.67878, 0.15537, 2.56357, 0.10853, 4.17887, 0.10809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6648, 0.46503, 8.75593, 0.22785, 1.49082, -0.0922, 1.49082, -0.0922, 5.221, 1.07409 ], + "curve": [ 0.12, 0.43, 0.75, 1 ] + }, + { + "time": 0.1, + "vertices": [ -28.25412, 0.58982, -28.29793, -0.84899, -23.08535, 11.20282, -23.74395, 9.72906, -8.09434, -0.22933, -8.07305, 0.62722, -1.79152, -1.05691, -4.34674, -10.72724, -8.58518, 8.46599, -10.54066, -12.01433, -1.83619, -10.84666, 7.20287, 0.91037, 1.98415, -7.80763, 1.87615, -7.83395, -9.83709, -4.16848, -9.94567, -3.80404, -40.81721, -6.35028, -41.13319, -3.49778, -40.97641, -5.18957, -41.84467, -1.62019, -41.73162, -3.60775, -15.38477, -8.74435, -14.91351, -13.12095, -5.60618, -6.39686, -2.93006, -1.39324, -3.06073, -1.07583, -2.98713, -1.26605, 0, 0, 0, 0, 0, 0, 0, 0, -18.34148, -11.65996, -10.8627, -12.31053, -18.14909, -6.56942, -15.89555, -8.6677, -7.0425, -15.2486 ], + "curve": [ 0.103, 0.39, 0.75, 1 ] + }, + { + "time": 0.2666, + "offset": 12, + "vertices": [ 1.38039, 0.05841, 0.93076, 0.03946, 0.64284, 0.78767, 2.71751, 0.88434, 1.23665, 0.42568, -1.58743, -0.06731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6.67878, 0.15537, 2.56357, 0.10853, 4.17887, 0.10809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6648, 0.46503, 8.75593, 0.22785, 1.49082, -0.0922, 1.49082, -0.0922, 5.221, 1.07409 ], + "curve": "stepped" + }, + { + "time": 1, + "offset": 12, + "vertices": [ 1.38039, 0.05841, 0.93076, 0.03946, 0.64284, 0.78767, 2.71751, 0.88434, 1.23665, 0.42568, -1.58743, -0.06731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6.67878, 0.15537, 2.56357, 0.10853, 4.17887, 0.10809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6648, 0.46503, 8.75593, 0.22785, 1.49082, -0.0922, 1.49082, -0.0922, 5.221, 1.07409 ], + "curve": [ 0.12, 0.43, 0.75, 1 ] + }, + { + "time": 1.1, + "vertices": [ -28.25412, 0.58982, -28.29793, -0.84899, -23.08535, 11.20282, -23.74395, 9.72906, -8.09434, -0.22933, -8.07305, 0.62722, -1.79152, -1.05691, -4.34674, -10.72724, -8.58518, 8.46599, -10.54066, -12.01433, -1.83619, -10.84666, 7.20287, 0.91037, 1.98415, -7.80763, 1.87615, -7.83395, -9.83709, -4.16848, -9.94567, -3.80404, -40.81721, -6.35028, -41.13319, -3.49778, -40.97641, -5.18957, -41.84467, -1.62019, -41.73162, -3.60775, -15.50945, -1.09533, -15.03819, -5.47194, -5.60618, -6.39686, -2.93006, -1.39324, -3.06073, -1.07583, -2.98713, -1.26605, 0, 0, 0, 0, 0, 0, 0, 0, -18.46617, -4.01094, -10.8627, -12.31053, -18.14909, -6.56942, -15.89555, -8.6677, -7.0425, -15.2486 ], + "curve": [ 0.103, 0.39, 0.75, 1 ] + }, + { + "time": 1.2666, + "offset": 12, + "vertices": [ 2.41841, 0.10234, 1.63067, 0.06914, 1.12625, 1.37998, 9.63887, 1.16067, 2.16658, 0.74578, -2.78115, -0.11792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11.70107, 0.2722, 4.49131, 0.19014, 7.32128, 0.18938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7.79455, 0.42605, 15.34018, 0.39919, 6.02913, 0.32602, 6.02913, 0.32602, 9.14706, 1.88179 ], + "curve": [ 0.587, -0.02, 0.75, 1 ] + }, + { + "time": 2, + "offset": 12, + "vertices": [ 1.38039, 0.05841, 0.93076, 0.03946, 0.64284, 0.78767, 2.71751, 0.88434, 1.23665, 0.42568, -1.58743, -0.06731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6.67878, 0.15537, 2.56357, 0.10853, 4.17887, 0.10809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6648, 0.46503, 8.75593, 0.22785, 1.49082, -0.0922, 1.49082, -0.0922, 5.221, 1.07409 ] + } + ] + }, + "mantles": { + "mantles": [ + { + "time": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "vertices": [ -1.38829, 0.54368, 0.15339, -6.90906, -1.2541, -4.50875, -1.22914, -1.35892, -1.22923, -1.35754, -1.25381, -4.47607, -0.06353, -5.18391, -0.43386, 3.45035 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5, + "vertices": [ -1.38829, 0.54368, 0.15339, -6.90906, -1.2541, -4.50875, -1.22914, -1.35892, -1.22923, -1.35754, -1.25381, -4.47607, -0.06353, -5.18391, -0.43386, 3.45035 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2 } + ] + }, + "mouth": { + "mouth": [ + { + "time": 0, + "vertices": [ 5.27927, -0.76781, 10.17068, -0.28401, 10.09426, -0.29504, 5.20281, -0.77884 ], + "curve": [ 0.12, 0.43, 0.75, 1 ] + }, + { + "time": 0.1, + "vertices": [ -19.44883, -10.36464, -11.62435, -9.59073, -11.7466, -9.60837, -19.57114, -10.38228 ], + "curve": [ 0.103, 0.39, 0.75, 1 ] + }, + { + "time": 0.2666, + "vertices": [ 5.27927, -0.76781, 10.17068, -0.28401, 10.09426, -0.29504, 5.20281, -0.77884 ], + "curve": "stepped" + }, + { + "time": 1, + "vertices": [ 5.27927, -0.76781, 10.17068, -0.28401, 10.09426, -0.29504, 5.20281, -0.77884 ], + "curve": [ 0.12, 0.43, 0.75, 1 ] + }, + { + "time": 1.1, + "vertices": [ -19.44883, -10.36464, -11.62435, -9.59073, -11.7466, -9.60837, -19.57114, -10.38228 ], + "curve": [ 0.103, 0.39, 0.75, 1 ] + }, + { + "time": 1.2666, + "vertices": [ 9.24916, -1.34519, 17.81878, -0.49758, 17.68489, -0.5169, 9.1152, -1.36451 ], + "curve": [ 0.587, -0.02, 0.75, 1 ] + }, + { + "time": 2, + "vertices": [ 5.27927, -0.76781, 10.17068, -0.28401, 10.09426, -0.29504, 5.20281, -0.77884 ] + } + ] + } + } + } + }, + "Idle": { + "bones": { + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 0.46 }, + { "time": 0.5, "angle": 358.79 }, + { "time": 1, "angle": 0.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.5, "x": -3.12, "y": 8.02 }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": 1.66 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": 0, + "y": -3.7, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -4.18 }, + { "time": 0.5, "angle": -8.25 }, + { "time": 1, "angle": -4.18 } + ], + "translate": [ + { + "time": 0, + "x": -1.06, + "y": 0, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { + "time": 0.1666, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "x": -3.74, + "y": 0, + "curve": [ 0.243, 0, 0.648, 0.6 ] + }, + { "time": 1, "x": -1.06, "y": 0 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": -2.92, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": -3.18, + "y": -4.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1, "x": 0, "y": -2.92 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": 0 }, + { + "time": 0.4333, + "angle": -4.83, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": -0.09, + "y": 0, + "curve": [ 0.3, 0.21, 0.755, 1 ] + }, + { + "time": 0.4333, + "x": -1.41, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.9333, "x": 0, "y": 0 }, + { "time": 1, "x": -0.09, "y": 0 } + ] + }, + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -7.15, "y": 0, "curve": "stepped" }, + { "time": 1, "x": -7.15, "y": 0 } + ] + }, + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 5.94, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 5.94, "y": 0 } + ] + }, + "upperarm1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "angle": -15.4, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": 1.84, + "y": -5, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "forearm1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "angle": 9.63, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": 13.63 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape4": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ] + }, + "cape3": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ] + }, + "weapon": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape2": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": -8.65 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "angle": 12.36, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape1": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ] + }, + "capeRoot": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "L_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "bone2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4666, "angle": 3.15 }, + { "time": 0.6666, "angle": 2.36 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4666, "x": -1.23, "y": 2.05 }, + { "time": 0.6666, "x": -0.72, "y": -0.78 }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hair01": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4666, "angle": 7.75 }, + { "time": 0.6666, "angle": 5.81 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4666, "x": -1.23, "y": 2.05 }, + { "time": 0.6666, "x": 0.74, "y": -1.41 }, + { "time": 1, "x": 0, "y": 0 } + ] + } + }, + "deform": { + "default": { + "body": { + "body": [ + { + "time": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "offset": 12, + "vertices": [ -0.75588, -3.68987, -1.01898, -2.97404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.01898, -2.97404, -0.75588, -3.68987, 0, 0, -0.75588, -3.68987, -0.75588, -3.68987, -1.01898, -2.97404, -1.01898, -2.97404, -1.01898, -2.97404, -0.75588, -3.68987 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1 } + ] + }, + "eyes": { + "eyes": [ + { + "time": 0, + "vertices": [ 3.86398, 0.60645, 7.61641, 0.3323, 8.69186, 0.43607, 9.7326, -0.23659, 9.36311, -0.28992, 8.69186, 0.43607, 7.61641, 0.3323, 3.49443, 0.5533 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "vertices": [ 6.76959, 1.0625, 13.34377, 0.58218, 15.22793, 0.76399, 17.05128, -0.4145, 16.40394, -0.50793, 15.22793, 0.76399, 13.34377, 0.58218, 6.12215, 0.96937 ], + "curve": [ 0.587, -0.02, 0.75, 1 ] + }, + { + "time": 1, + "vertices": [ 3.86398, 0.60645, 7.61641, 0.3323, 8.69186, 0.43607, 9.7326, -0.23659, 9.36311, -0.28992, 8.69186, 0.43607, 7.61641, 0.3323, 3.49443, 0.5533 ] + } + ] + }, + "head": { + "head": [ + { + "time": 0, + "offset": 12, + "vertices": [ 1.38039, 0.05841, 0.93076, 0.03946, 0.64284, 0.78767, 2.71751, 0.88434, 1.23665, 0.42568, -1.58743, -0.06731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6.67878, 0.15537, 2.56357, 0.10853, 4.17887, 0.10809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6648, 0.46503, 8.75593, 0.22785, 1.49082, -0.0922, 1.49082, -0.0922, 5.221, 1.07409 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "offset": 12, + "vertices": [ 2.41841, 0.10234, 1.63067, 0.06914, 1.12625, 1.37998, 9.63887, 1.16067, 2.16658, 0.74578, -2.78115, -0.11792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11.70107, 0.2722, 4.49131, 0.19014, 7.32128, 0.18938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7.79455, 0.42605, 15.34018, 0.39919, 6.02913, 0.32602, 6.02913, 0.32602, 9.14706, 1.88179 ], + "curve": [ 0.587, -0.02, 0.75, 1 ] + }, + { + "time": 1, + "offset": 12, + "vertices": [ 1.38039, 0.05841, 0.93076, 0.03946, 0.64284, 0.78767, 2.71751, 0.88434, 1.23665, 0.42568, -1.58743, -0.06731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6.67878, 0.15537, 2.56357, 0.10853, 4.17887, 0.10809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6648, 0.46503, 8.75593, 0.22785, 1.49082, -0.0922, 1.49082, -0.0922, 5.221, 1.07409 ] + } + ] + }, + "mantles": { + "mantles": [ + { + "time": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "vertices": [ -1.38829, 0.54368, 0.15339, -6.90906, -1.2541, -4.50875, -1.22914, -1.35892, -1.22923, -1.35754, -1.25381, -4.47607, -0.06353, -5.18391, -0.43386, 3.45035 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1 } + ] + }, + "mouth": { + "mouth": [ + { + "time": 0, + "vertices": [ 5.27927, -0.76781, 10.17068, -0.28401, 10.09426, -0.29504, 5.20281, -0.77884 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "vertices": [ 9.24916, -1.34519, 17.81878, -0.49758, 17.68489, -0.5169, 9.1152, -1.36451 ], + "curve": [ 0.587, -0.02, 0.75, 1 ] + }, + { + "time": 1, + "vertices": [ 5.27927, -0.76781, 10.17068, -0.28401, 10.09426, -0.29504, 5.20281, -0.77884 ] + } + ] + } + } + } + }, + "Jump": { + "bones": { + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -6.83, "y": 12.06, "curve": "stepped" }, + { "time": 1, "x": -6.83, "y": 12.06 } + ] + }, + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 2.41, "y": 1.2, "curve": "stepped" }, + { "time": 1, "x": 2.41, "y": 1.2 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": -32.23, "curve": "stepped" }, + { "time": 1, "angle": -32.23 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": -33.3, "curve": "stepped" }, + { "time": 1, "angle": -33.3 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": -10.4, "curve": "stepped" }, + { "time": 1, "angle": -10.4 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 4.89, "curve": "stepped" }, + { "time": 1, "angle": 4.89 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "upperarm1": { + "rotate": [ + { "time": 0, "angle": 22.69, "curve": "stepped" }, + { "time": 1, "angle": 22.69 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "forearm1": { + "rotate": [ + { "time": 0, "angle": 56.41, "curve": "stepped" }, + { "time": 1, "angle": 56.41 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 23.71, "curve": "stepped" }, + { "time": 1, "angle": 23.71 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 20.06, "curve": "stepped" }, + { "time": 1, "angle": 20.06 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "L_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "capeRoot": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "weapon": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "cape4": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + } + } + }, + "Run": { + "bones": { + "upperarm1": { + "rotate": [ + { "time": 0, "angle": -40.45 }, + { "time": 0.044, "angle": -34.97 }, + { "time": 0.0881, "angle": 1.79 }, + { "time": 0.1322, "angle": 42.58 }, + { "time": 0.3117, "angle": -282.55 }, + { "time": 0.3525, "angle": 48.21 }, + { "time": 0.3966, "angle": 26.17 }, + { "time": 0.4407, "angle": -22.81 }, + { "time": 0.5333, "angle": -40.45 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.044, "x": 1.33, "y": 0.56 }, + { "time": 0.1762, "x": -2.74, "y": -5.58 }, + { "time": 0.3117, "x": -3.1, "y": -2.45 }, + { "time": 0.4407, "x": -0.75, "y": 4.05 }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "forearm1": { + "rotate": [ + { "time": 0, "angle": 27.41 }, + { "time": 0.044, "angle": 21.5 }, + { "time": 0.0881, "angle": 16.71 }, + { "time": 0.1322, "angle": 30.61 }, + { "time": 0.3117, "angle": 38.33 }, + { "time": 0.3525, "angle": 37.81 }, + { "time": 0.3966, "angle": 16.47 }, + { "time": 0.4407, "angle": 17.71 }, + { "time": 0.5333, "angle": 27.41 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { "time": 0, "angle": -20.19 }, + { "time": 0.044, "angle": -24.82 }, + { "time": 0.1762, "angle": -14.29 }, + { "time": 0.3525, "angle": 21.84 }, + { "time": 0.3966, "angle": 9.46 }, + { "time": 0.4407, "angle": 12.08 }, + { "time": 0.5333, "angle": -20.19 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 49.53, "y": 0.28 }, + { "time": 0.044, "x": 39.66, "y": 0.28 }, + { "time": 0.0881, "x": -3.63, "y": 0.28 }, + { "time": 0.1322, "x": -10.76, "y": 0.28 }, + { "time": 0.1762, "x": -16.65, "y": 22.66 }, + { "time": 0.2203, "x": -10, "y": 27.64 }, + { "time": 0.2666, "x": -11.26, "y": 17.21 }, + { "time": 0.3117, "x": 12.41, "y": 8.33 }, + { "time": 0.3525, "x": 37.47, "y": 7.86 }, + { "time": 0.3966, "x": 52.33, "y": 6.09 }, + { "time": 0.4407, "x": 68.69, "y": 20 }, + { "time": 0.4848, "x": 68.69, "y": 8.54 }, + { "time": 0.5333, "x": 49.53, "y": 0.28 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": 20.27 }, + { "time": 0.044, "angle": -0.6 }, + { "time": 0.1322, "angle": -31.14 }, + { "time": 0.1762, "angle": 262.34 }, + { "time": 0.2203, "angle": -71.2 }, + { "time": 0.2666, "angle": -84.95 }, + { "time": 0.3117, "angle": -63.21 }, + { "time": 0.3525, "angle": -8.37 }, + { "time": 0.3966, "angle": -18.33 }, + { "time": 0.4407, "angle": 34.08 }, + { "time": 0.5333, "angle": 20.27 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -58.44, "y": 26.3 }, + { "time": 0.044, "x": -42, "y": 21.37 }, + { "time": 0.0881, "x": -5.28, "y": 9.86 }, + { "time": 0.1322, "x": 11.16, "y": 12.05 }, + { "time": 0.1762, "x": 19.38, "y": 26.85 }, + { "time": 0.2203, "x": 23.89, "y": 17.18 }, + { "time": 0.2666, "x": 21.52, "y": 0.14 }, + { "time": 0.3117, "x": -19.32, "y": 0.14 }, + { "time": 0.3525, "x": -53.26, "y": -0.02 }, + { "time": 0.3966, "x": -65.63, "y": 6.74 }, + { "time": 0.4407, "x": -75.71, "y": 39.77 }, + { "time": 0.5333, "x": -58.44, "y": 26.3 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": 262.95 }, + { "time": 0.0881, "angle": -74.33 }, + { "time": 0.1322, "angle": -4.26 }, + { "time": 0.1762, "angle": 13.38 }, + { "time": 0.2203, "angle": 28.95 }, + { "time": 0.2666, "angle": 35.05 }, + { "time": 0.3117, "angle": 7.53 }, + { "time": 0.3525, "angle": -31.42 }, + { "time": 0.4407, "angle": 260.06 }, + { "time": 0.5333, "angle": 262.95 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "root": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -7.82 }, + { "time": 0.044, "x": 1.64, "y": -12.3 }, + { + "time": 0.0881, + "x": 1.64, + "y": -10.65, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.1762, "x": 1.64, "y": 9.54 }, + { "time": 0.2203, "x": 1.64, "y": -0.52 }, + { "time": 0.2666, "x": 0, "y": -7.82 }, + { "time": 0.3117, "x": 0, "y": -9.59 }, + { + "time": 0.3525, + "x": 0, + "y": -8.91, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4407, "x": 0, "y": 6.35 }, + { "time": 0.4848, "x": 1.64, "y": -0.52 }, + { "time": 0.5333, "x": 0, "y": -7.82 } + ] + }, + "L_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1762, "x": -1.45, "y": 9.68 }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": -11.15 }, + { "time": 0.044, "angle": -16.76 }, + { "time": 0.1762, "angle": -8.61 }, + { "time": 0.3117, "angle": -20.17 }, + { "time": 0.4407, "angle": -8.61 }, + { "time": 0.5333, "angle": -11.15 } + ], + "translate": [ + { "time": 0, "x": 3.36, "y": -2.52 }, + { "time": 0.044, "x": 4.98, "y": 0.87 }, + { "time": 0.1762, "x": 2.6, "y": 4.02 }, + { "time": 0.3117, "x": 5.73, "y": 0.46 }, + { "time": 0.4407, "x": 2.7, "y": 5.1 }, + { "time": 0.5333, "x": 3.36, "y": -2.52 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 6.02, "y": 0 }, + { "time": 0.1322, "x": -3.58, "y": 1.43 }, + { "time": 0.1762, "x": 0.23, "y": 2.72 }, + { "time": 0.2666, "x": 6.13, "y": -0.59 }, + { "time": 0.3305, "x": 8.81, "y": 5.77 }, + { "time": 0.3966, "x": 31, "y": 0.35 }, + { "time": 0.4848, "x": 22.13, "y": 0.17 }, + { "time": 0.5333, "x": 6.02, "y": 0 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -8.31, "y": -2.37 }, + { "time": 0.1322, "x": -3.93, "y": -2.37 }, + { "time": 0.2666, "x": 3.22, "y": -1.52 }, + { "time": 0.3525, "x": -18.12, "y": 0.17 }, + { "time": 0.3966, "x": -28.38, "y": 0.17 }, + { "time": 0.5333, "x": -8.31, "y": -2.37 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 8.08 }, + { + "time": 0.044, + "angle": 1.34, + "curve": [ 0.25, 0, 0.851, 0.81 ] + }, + { "time": 0.1762, "angle": 6.45 }, + { "time": 0.2666, "angle": 10.37 }, + { + "time": 0.3117, + "angle": 3.57, + "curve": [ 0.25, 0, 0.842, 0.77 ] + }, + { "time": 0.4407, "angle": 7.81 }, + { "time": 0.5333, "angle": 8.08 } + ], + "translate": [ + { "time": 0, "x": 2.87, "y": 0.23 }, + { "time": 0.044, "x": -3.5, "y": -1.82 }, + { "time": 0.1762, "x": 4.6, "y": 0.76 }, + { "time": 0.2666, "x": 1.55, "y": -6.16 }, + { "time": 0.3117, "x": -7.07, "y": -8.66 }, + { "time": 0.4407, "x": 7.03, "y": 0.05 }, + { "time": 0.5333, "x": 2.87, "y": 0.23 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.044, "angle": -2.17 }, + { "time": 0.2666, "angle": 2.9 }, + { "time": 0.3117, "angle": -0.95 }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.044, "x": -2.6, "y": -0.65 }, + { "time": 0.2666, "x": 1.39, "y": -0.59 }, + { "time": 0.3117, "x": -2.6, "y": -0.65 }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "shin1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "shin2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 30.8 }, + { "time": 0.044, "angle": 38.3 }, + { "time": 0.1322, "angle": 5.43 }, + { + "time": 0.2203, + "angle": 334.6, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.3117, "angle": 328.38 }, + { "time": 0.4407, "angle": 21.28 }, + { "time": 0.5333, "angle": 30.8 } + ], + "translate": [ + { "time": 0, "x": -5.33, "y": -1.55 }, + { "time": 0.1762, "x": -6.43, "y": 2.12 }, + { "time": 0.5333, "x": -5.33, "y": -1.55 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 35.89 }, + { "time": 0.0881, "angle": 25.71 }, + { "time": 0.1762, "angle": 29.3 }, + { + "time": 0.2203, + "angle": 34.63, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.3117, "angle": 38.94 }, + { "time": 0.4407, "angle": 30.09 }, + { "time": 0.5333, "angle": 35.89 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": 8.06 }, + { "time": 0.044, "angle": 12.45 }, + { "time": 0.1762, "angle": 33.85 }, + { "time": 0.4407, "angle": 22.92 }, + { "time": 0.5333, "angle": 8.06 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "weapon": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "hair01": { + "rotate": [ + { "time": 0, "angle": 44.04 }, + { + "time": 0.044, + "angle": 14.22, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.1322, + "angle": 5.9, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.2203, "angle": 31.54 }, + { "time": 0.2666, "angle": 44.04 }, + { + "time": 0.3117, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.3966, + "angle": 5.9, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4848, "angle": 31.54 }, + { "time": 0.5333, "angle": 44.04 } + ], + "translate": [ + { "time": 0, "x": 2.04, "y": 5.53 }, + { + "time": 0.044, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.0881, "x": 0.4, "y": -10.84 }, + { + "time": 0.1322, + "x": 4.4, + "y": -15.87, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.2203, "x": 5.94, "y": -2.12 }, + { "time": 0.2666, "x": 2.04, "y": 5.53 }, + { + "time": 0.3117, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.3525, "x": 0.4, "y": -10.84 }, + { + "time": 0.3966, + "x": 4.4, + "y": -15.87, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4848, "x": 5.94, "y": -2.12 }, + { "time": 0.5333, "x": 2.04, "y": 5.53 } + ] + }, + "bone2": { + "rotate": [ + { "time": 0, "angle": 16.31 }, + { + "time": 0.044, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.0881, "angle": -10.16 }, + { + "time": 0.1322, + "angle": -14.57, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.2203, "angle": 9.83 }, + { "time": 0.2666, "angle": 16.31 }, + { + "time": 0.3117, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.3525, "angle": -10.16 }, + { + "time": 0.3966, + "angle": -14.57, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4848, "angle": 9.83 }, + { "time": 0.5333, "angle": 16.31 } + ], + "translate": [ + { "time": 0, "x": -13.75, "y": 7.39 }, + { + "time": 0.044, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.0881, "x": 3.58, "y": -1.15 }, + { + "time": 0.1322, + "x": 8.09, + "y": -5.71, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.2203, "x": -8.02, "y": 1.86 }, + { "time": 0.2666, "x": -13.75, "y": 7.39 }, + { + "time": 0.3117, + "x": -9.98, + "y": 3.28, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.3525, "x": 3.58, "y": -1.15 }, + { + "time": 0.3966, + "x": 8.09, + "y": -5.71, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4848, "x": -8.02, "y": 1.86 }, + { "time": 0.5333, "x": -13.75, "y": 7.39 } + ] + } + }, + "deform": { + "default": { + "body": { + "body": [ + { + "time": 0, + "offset": 12, + "vertices": [ 2.58728, 10.16382, -0.16621, 4.50657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.23097, 5.2839, -0.84591, 9.09544, 0, 0, -0.84591, 9.09544, -0.84591, 9.09544, -0.23097, 5.2839, -0.23097, 5.2839, -0.16621, 4.50657, -0.84591, 9.09544 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.2666, + "offset": 8, + "vertices": [ -0.5755, -1.94941, 2.00167, -9.49192, -0.33624, -11.77181, -6.3903, -8.66438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.3903, -8.66438, -0.33624, -11.77181, 0, 0, -0.33624, -11.77181, -0.33624, -11.77181, -6.3903, -8.66438, -6.3903, -8.66438, -6.3903, -8.66438, -0.33624, -11.77181 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5333, + "offset": 12, + "vertices": [ 2.58728, 10.16382, -0.16621, 4.50657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.23097, 5.2839, -0.84591, 9.09544, 0, 0, -0.84591, 9.09544, -0.84591, 9.09544, -0.23097, 5.2839, -0.23097, 5.2839, -0.16621, 4.50657, -0.84591, 9.09544 ] + } + ] + }, + "eyes": { + "eyes": [ + { "time": 0 }, + { + "time": 0.2666, + "vertices": [ 6.76959, 1.0625, 15.002, 0.58575, 19.83156, 0.77389, 23.31313, -0.40103, 22.66579, -0.49446, 19.83156, 0.77389, 15.002, 0.58575, 6.12215, 0.96937 ] + }, + { "time": 0.5333 } + ] + }, + "head": { + "head": [ + { + "time": 0, + "offset": 18, + "vertices": [ -6.48673, 0.51687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.48673, 0.51687, 0, 0, -4.54435, -0.64837, -4.54435, -0.64837 ], + "curve": [ 0.227, 0.34, 0.572, 0.68 ] + }, + { + "time": 0.044, + "offset": 12, + "vertices": [ 0.99863, 0.04226, 0.67335, 0.02855, 3.60092, -3.67205, 5.49033, -3.41875, 0.89464, 0.30795, -1.14841, -0.04869, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.66312, 0.11272, 1.85459, 0.07851, 1.85459, 0.07852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.13307, 0.30453, 5.89205, 0.17003, -0.17825, -0.24601, -0.17825, -0.24601 ], + "curve": [ 0.26, 0.38, 0.621, 0.72 ] + }, + { + "time": 0.1333, + "offset": 12, + "vertices": [ 2.08863, 0.08839, 1.40831, 0.05971, 1.70105, 0.20652, 12.73297, 0.17214, 1.87114, 0.64409, -2.40191, -0.10184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9.87897, -4.35248, 3.87887, 0.16421, 3.87887, 0.16422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6.80191, 0.07277, 12.32319, 0.35562, 4.58732, 0.19315, 4.58732, 0.19315, 3.41206, -0.09185 ], + "curve": [ 0.332, 0.38, 0.671, 0.71 ] + }, + { + "time": 0.1762, + "offset": 12, + "vertices": [ 2.41841, 0.10234, 1.63067, 0.06914, 1.12625, 1.37998, 14.92421, 1.25856, 2.16658, 0.74578, -2.78115, -0.11792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8.87107, 0.27299, 4.49131, 0.19014, 4.49131, 0.19015, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8.90007, 0.00265, 14.26891, 0.41177, 6.02913, 0.32602, 6.02913, 0.32602, 4.44437, -0.11964 ], + "curve": [ 0.39, 0.63, 0.753, 1 ] + }, + { + "time": 0.2666, + "offset": 12, + "vertices": [ 2.79754, 0.11839, 1.8863, 0.07998, 0, 0, 16.97794, -0.22148, 2.50623, 0.8627, -3.21714, -0.13641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9.97683, -2.44119, 5.1954, 0.21995, 5.1954, 0.21997, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11.31223, -0.07795, 16.50582, 0.47633, 7.68671, 0.47877, 10.35957, 0.20314, 8.39172, 0.32814 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.3117, + "offset": 12, + "vertices": [ 0.99863, 0.04226, 0.67335, 0.02855, 3.60092, -3.67205, 5.49033, -3.41875, 0.89464, 0.30795, -1.14841, -0.04869, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.66312, 0.11272, 1.85459, 0.07851, 1.85459, 0.07852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.13307, 0.30453, 7.33679, 0.50061, -0.17825, -0.24601, -0.17825, -0.24601, 4.81586, 1.10192 ], + "curve": [ 0.248, 0.42, 0.642, 0.77 ] + }, + { + "time": 0.5333, + "offset": 18, + "vertices": [ -6.48673, 0.51687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.48673, 0.51687, 0, 0, -4.54435, -0.64837, -4.54435, -0.64837 ] + } + ] + }, + "mantles": { + "mantles": [ + { + "time": 0, + "offset": 2, + "vertices": [ -0.28599, 2.32239, 3.1293, 5.3126, 0.13581, 2.32148, 0.13581, 2.32148, 3.1293, 5.3126, -0.28599, 2.32239 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.2666, + "vertices": [ 4.71967, -7.39242, 1.11851, -17.07923, 2.82788, -9.03922, -0.48089, -3.11594, -0.48089, -3.11594, 2.82788, -9.03922, 0.68636, -9.22625, -0.16158, 3.04387 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5333, + "offset": 2, + "vertices": [ -0.28599, 2.32239, 3.1293, 5.3126, 0.13581, 2.32148, 0.13581, 2.32148, 3.1293, 5.3126, -0.28599, 2.32239 ] + } + ] + }, + "mouth": { + "mouth": [ + { "time": 0 }, + { + "time": 0.2666, + "vertices": [ 9.24916, -1.34519, 25.71696, -0.4806, 25.58307, -0.49992, 9.1152, -1.36451 ] + }, + { "time": 0.5333 } + ] + }, + "weapon": { + "sword": [ + { + "time": 0, + "vertices": [ -7.49269, -16.91794, 6.38517, 0.02189, 6.38517, 0.02189, -7.60862, 16.86521 ] + }, + { + "time": 0.2666, + "vertices": [ 8.41458, 4.30094, 0, 0, 0, 0, 8.4439, -4.24281 ] + }, + { + "time": 0.5333, + "vertices": [ -7.49269, -16.91794, 6.38517, 0.02189, 6.38517, 0.02189, -7.60862, 16.86521 ] + } + ] + } + } + }, + "events": [ + { "time": 0.2666, "name": "Footstep" }, + { "time": 0.5333, "name": "Footstep" } + ] + }, + "Walk": { + "bones": { + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 68.76, "y": 0 }, + { "time": 0.1333, "x": 57.43, "y": 0 }, + { "time": 0.2666, "x": 41.05, "y": 0 }, + { "time": 0.4, "x": 21.33, "y": 0 }, + { "time": 0.5333, "x": 5.89, "y": 0 }, + { "time": 0.6666, "x": 4.91, "y": 0 }, + { "time": 0.8, "x": 5.89, "y": 10.31 }, + { "time": 0.9333, "x": 44.68, "y": 10.8 }, + { "time": 1.0666, "x": 68.76, "y": 0 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 24.92, "y": 0 }, + { "time": 0.2666, "x": 22.2, "y": 0 }, + { "time": 0.4, "x": 21.75, "y": -1.01 }, + { "time": 0.5333, "x": 21.29, "y": 0 }, + { "time": 0.6666, "x": 16.1, "y": 1 }, + { "time": 0.9333, "x": 21.7, "y": -3.92 }, + { "time": 1.0666, "x": 24.92, "y": 0 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -7.39 }, + { "time": 0.1333, "x": 0, "y": -6.32 }, + { "time": 0.2666, "x": 0, "y": -1.44 }, + { "time": 0.3333, "x": 0, "y": 1.49 }, + { "time": 0.4, "x": 0, "y": 0.87 }, + { "time": 0.5333, "x": 0, "y": -9.59 }, + { "time": 0.6666, "x": 0, "y": -8.44 }, + { "time": 0.8, "x": 0, "y": -1.44 }, + { "time": 0.8666, "x": 0, "y": 1.49 }, + { "time": 0.9333, "x": 0, "y": 0.87 }, + { "time": 1.0666, "x": 0, "y": -7.39 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": 17.4 }, + { "time": 0.1333, "angle": -0.28 }, + { "time": 0.4, "angle": -10.63 }, + { "time": 0.5333, "angle": -8.71 }, + { "time": 0.6666, "angle": -24.7 }, + { "time": 0.8, "angle": -43.24 }, + { "time": 0.9333, "angle": -35.2 }, + { "time": 1.0666, "angle": 17.4 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -25.09, "y": 0 }, + { "time": 0.2, "x": -16.15, "y": -4.51 }, + { "time": 0.4, "x": -9.43, "y": -3.48 }, + { "time": 0.5333, "x": -4.25, "y": -1.41 }, + { "time": 0.6666, "x": -6.64, "y": 0.04 }, + { "time": 0.8, "x": -11.55, "y": -2.12 }, + { "time": 0.9333, "x": -22.84, "y": -3.88 }, + { "time": 1.0666, "x": -25.09, "y": 0 } + ] + }, + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -53.9, "y": 0 }, + { "time": 0.1333, "x": -55, "y": 2.56 }, + { "time": 0.2666, "x": -56, "y": 14.27 }, + { "time": 0.4, "x": -9.55, "y": 9.63 }, + { "time": 0.5333, "x": 18.47, "y": -0.26 }, + { "time": 0.6666, "x": 6.23, "y": -0.26 }, + { "time": 0.8, "x": -20.75, "y": -0.26 }, + { "time": 0.9333, "x": -36.46, "y": -3.45 }, + { "time": 1.0666, "x": -53.9, "y": 0 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": -20 }, + { "time": 0.1333, "angle": -36.58 }, + { "time": 0.2666, "angle": -69.51 }, + { "time": 0.4, "angle": -13.92 }, + { "time": 0.5333, "angle": 33.26 }, + { "time": 0.6666, "angle": 0.41 }, + { "time": 0.9333, "angle": -1.16 }, + { "time": 1.0666, "angle": -20 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "upperarm1": { + "rotate": [ + { "time": 0, "angle": 13.97 }, + { "time": 0.1333, "angle": 2.64 }, + { "time": 0.5333, "angle": -293.8 }, + { "time": 0.6666, "angle": -302.37 }, + { "time": 0.8, "angle": 41.55 }, + { "time": 0.9333, "angle": 14.48 }, + { "time": 1.0666, "angle": 13.97 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1333, "x": 4.42, "y": 3.57 }, + { "time": 0.5333, "x": -0.22, "y": -4.77 }, + { "time": 0.6666, "x": 0.24, "y": -2.39 }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "forearm1": { + "rotate": [ + { "time": 0, "angle": -11.7 }, + { "time": 0.1333, "angle": -5.73 }, + { "time": 0.5333, "angle": 24.76 }, + { + "time": 0.6666, + "angle": 33.27, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.8, "angle": 3.08 }, + { "time": 0.9333, "angle": 5.39 }, + { "time": 1.0666, "angle": -11.7 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { "time": 0, "angle": -19.62 }, + { "time": 0.1333, "angle": -25.06 }, + { "time": 0.2666, "angle": -27.67 }, + { "time": 0.4, "angle": -34.31 }, + { "time": 0.5333, "angle": -24.05 }, + { "time": 0.8, "angle": 16.76 }, + { "time": 0.9333, "angle": 7.44 }, + { "time": 1.0666, "angle": -19.62 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": 6.02 }, + { + "time": 0.1333, + "angle": 1.27, + "curve": [ 0.464, 0, 0.75, 1 ] + }, + { "time": 0.3333, "angle": 8.57 }, + { "time": 0.5333, "angle": 4.13 }, + { + "time": 0.6666, + "angle": 1.27, + "curve": [ 0.464, 0, 0.75, 1 ] + }, + { "time": 0.8666, "angle": 7.42 }, + { "time": 1.0666, "angle": 6.02 } + ], + "translate": [ + { "time": 0, "x": 4.41, "y": -1.14 }, + { "time": 0.1333, "x": 10.48, "y": -2.93 }, + { "time": 0.3333, "x": 1.78, "y": 5.09 }, + { "time": 0.5333, "x": 12.04, "y": -2.64 }, + { "time": 0.6666, "x": 10.48, "y": -2.93 }, + { "time": 0.8666, "x": 1.78, "y": 6.43 }, + { "time": 1.0666, "x": 4.41, "y": -0.47 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -11.7 }, + { "time": 0.1333, "angle": -2.87 }, + { "time": 0.3333, "angle": -10.46 }, + { "time": 0.5333, "angle": -6.46 }, + { "time": 0.6666, "angle": -2.85 }, + { "time": 0.8666, "angle": -8.52 }, + { "time": 1.0666, "angle": -11.7 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1333, "x": -2.96, "y": -3.42 }, + { "time": 0.3333, "x": 1.04, "y": 0.33 }, + { "time": 0.5333, "x": 0, "y": 0 }, + { "time": 0.6666, "x": -2.96, "y": -3.42 }, + { "time": 0.8666, "x": 1.04, "y": 0.33 }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 349.66 }, + { "time": 0.1333, "angle": 349.79 }, + { "time": 0.2666, "angle": 343.53 }, + { "time": 0.4, "angle": 334.09 }, + { "time": 0.5333, "angle": 327.79 }, + { "time": 0.8, "angle": 338.53 }, + { "time": 0.9333, "angle": 354.68 }, + { "time": 1.0666, "angle": 349.66 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1333, "x": -0.76, "y": -1.44 }, + { "time": 0.5333, "x": -0.19, "y": 8.7 }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 21.04 }, + { "time": 0.1333, "angle": 24.41 }, + { "time": 0.2666, "angle": -0.81 }, + { "time": 0.4, "angle": 23.68 }, + { "time": 0.5333, "angle": 23.61 }, + { "time": 0.6666, "angle": 25.56 }, + { "time": 0.8, "angle": 12.55 }, + { "time": 0.9333, "angle": -0.27 }, + { "time": 1.0666, "angle": 21.04 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": -12.1 }, + { "time": 0.1333, "angle": -8.87 }, + { "time": 0.2666, "angle": 13.76 }, + { "time": 0.4, "angle": -3.02 }, + { "time": 0.5333, "angle": 11.48 }, + { "time": 0.6666, "angle": 5.24 }, + { "time": 0.8, "angle": 3.93 }, + { "time": 0.9333, "angle": 0.31 }, + { "time": 1.0666, "angle": -12.1 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "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 } + ] + }, + "L_Ankle": { + "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 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -1.35, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": -1.35 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": -3.56 }, + { "time": 0.3333, "angle": -8.55 }, + { "time": 0.5333, "angle": -6.73 }, + { "time": 0.8666, "angle": -8.55 }, + { "time": 1.0666, "angle": -3.56 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1333, "x": -1.9, "y": -1.47 }, + { "time": 0.3333, "x": -0.66, "y": -0.2 }, + { "time": 0.6666, "x": -1.9, "y": -1.47 }, + { "time": 0.8666, "x": -0.66, "y": -0.2 }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "shin1": { + "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 } + ] + }, + "shin2": { + "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 } + ] + }, + "capeRoot": { + "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 } + ] + }, + "weapon": { + "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 } + ] + }, + "LookConstraintGoal": { + "rotate": [ + { "time": 0.9333, "angle": 0 } + ] + }, + "bone2": { + "rotate": [ + { "time": 0, "angle": 1.59 }, + { "time": 0.1333, "angle": 4.43 }, + { "time": 0.2666, "angle": -11.57 }, + { "time": 0.4, "angle": 4.79 }, + { "time": 0.5333, "angle": 1.59 }, + { "time": 0.6666, "angle": 4.43 }, + { "time": 0.8, "angle": -11.57 }, + { "time": 0.9333, "angle": 4.79 }, + { "time": 1.0666, "angle": 1.59 } + ], + "translate": [ + { "time": 0, "x": -1.69, "y": 2.56 }, + { "time": 0.1333, "x": -9.99, "y": 4.3 }, + { "time": 0.2666, "x": -2.46, "y": 3.64 }, + { "time": 0.4, "x": -5.09, "y": 7.68 }, + { "time": 0.5333, "x": -1.69, "y": 2.56 }, + { "time": 0.6666, "x": -9.99, "y": 4.3 }, + { "time": 0.8, "x": -2.46, "y": 3.64 }, + { "time": 0.9333, "x": -5.09, "y": 7.68 }, + { "time": 1.0666, "x": -1.69, "y": 2.56 } + ] + }, + "hair01": { + "rotate": [ + { "time": 0, "angle": 3.12 }, + { "time": 0.1333, "angle": 9.9 }, + { "time": 0.2666, "angle": 1.74 }, + { "time": 0.4, "angle": 9.38 }, + { "time": 0.5333, "angle": 3.12 }, + { "time": 0.6666, "angle": 9.9 }, + { "time": 0.8, "angle": 1.74 }, + { "time": 0.9333, "angle": 9.38 }, + { "time": 1.0666, "angle": 3.12 } + ], + "translate": [ + { "time": 0, "x": -1.38, "y": -0.91 }, + { "time": 0.1333, "x": -0.79, "y": -1.34 }, + { "time": 0.2666, "x": 2.12, "y": -10.12 }, + { "time": 0.4, "x": -4.16, "y": -2.75 }, + { "time": 0.5333, "x": -1.38, "y": -0.91 }, + { "time": 0.6666, "x": -0.79, "y": -1.34 }, + { "time": 0.8, "x": 2.12, "y": -10.12 }, + { "time": 0.9333, "x": -4.16, "y": -2.75 }, + { "time": 1.0666, "x": -1.38, "y": -0.91 } + ] + } + }, + "deform": { + "default": { + "body": { + "body": [ + { + "time": 0, + "offset": 12, + "vertices": [ 2.58728, 10.16382, -0.16621, 4.50657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.23097, 5.2839, -0.84591, 9.09544, 0, 0, -0.84591, 9.09544, -0.84591, 9.09544, -0.23097, 5.2839, -0.23097, 5.2839, -0.16621, 4.50657, -0.84591, 9.09544 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5333, + "offset": 8, + "vertices": [ -0.5755, -1.94941, 2.00167, -9.49192, -0.33624, -11.77181, -6.3903, -8.66438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.3903, -8.66438, -0.33624, -11.77181, 0, 0, -0.33624, -11.77181, -0.33624, -11.77181, -6.3903, -8.66438, -6.3903, -8.66438, -6.3903, -8.66438, -0.33624, -11.77181 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "offset": 12, + "vertices": [ 2.58728, 10.16382, -0.16621, 4.50657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.23097, 5.2839, -0.84591, 9.09544, 0, 0, -0.84591, 9.09544, -0.84591, 9.09544, -0.23097, 5.2839, -0.23097, 5.2839, -0.16621, 4.50657, -0.84591, 9.09544 ] + } + ] + }, + "eyes": { + "eyes": [ + { + "time": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5333, + "vertices": [ 6.76959, 1.0625, 15.002, 0.58575, 19.83156, 0.77389, 23.31313, -0.40103, 22.66579, -0.49446, 19.83156, 0.77389, 15.002, 0.58575, 6.12215, 0.96937 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.0666 } + ] + }, + "head": { + "head": [ + { + "time": 0, + "offset": 18, + "vertices": [ -6.48673, 0.51687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.54038, -0.15547, -4.54038, -0.15547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.48673, 0.51687, 0, 0, -11.14854, -0.87455, -8.67198, -0.78973 ], + "curve": [ 0.227, 0.34, 0.572, 0.68 ] + }, + { + "time": 0.5333, + "offset": 12, + "vertices": [ 2.41841, 0.10234, 1.63067, 0.06914, 1.12625, 1.37998, 15.33712, 1.2489, 2.16658, 0.74578, -2.78115, -0.11792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11.70107, 0.2722, 4.49131, 0.19014, 7.32128, 0.18938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13.07989, 0.52394, 21.03843, 0.48741, 6.02913, 0.32602, 6.02913, 0.32602, 9.14706, 1.88179 ], + "curve": [ 0.39, 0.63, 0.753, 1 ] + }, + { + "time": 1.0666, + "offset": 18, + "vertices": [ -6.48673, 0.51687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.54038, -0.15547, -4.54038, -0.15547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.48673, 0.51687, 0, 0, -11.14854, -0.87455, -8.67198, -0.78973 ] + } + ] + }, + "mantles": { + "mantles": [ + { + "time": 0, + "offset": 2, + "vertices": [ -0.28599, 2.32239, 3.1293, 5.3126, 0.13581, 2.32148, 0.13581, 2.32148, 3.1293, 5.3126, -0.28599, 2.32239 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5333, + "vertices": [ 4.71967, -7.39242, 1.11851, -17.07923, 2.82788, -9.03922, -0.48089, -3.11594, -0.48089, -3.11594, 2.82788, -9.03922, 0.68636, -9.22625, -0.16158, 3.04387 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "offset": 2, + "vertices": [ -0.28599, 2.32239, 3.1293, 5.3126, 0.13581, 2.32148, 0.13581, 2.32148, 3.1293, 5.3126, -0.28599, 2.32239 ] + } + ] + }, + "mouth": { + "mouth": [ + { + "time": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5333, + "vertices": [ 9.24916, -1.34519, 25.71696, -0.4806, 25.58307, -0.49992, 9.1152, -1.36451 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.0666 } + ] + }, + "weapon": { + "sword": [ + { + "time": 0, + "vertices": [ 0.02426, -7.08119, 0, 0, 0, 0, -0.0243, 7.08133 ] + }, + { "time": 0.5333 }, + { + "time": 1.0666, + "vertices": [ 0.02426, -7.08119, 0, 0, 0, 0, -0.0243, 7.08133 ] + } + ] + } + } + }, + "events": [ + { "time": 0.5333, "name": "Footstep" }, + { "time": 1.0666, "name": "Footstep" } + ] + } +} +} \ No newline at end of file diff --git a/examples/hero/export/hero-mesh.skel b/examples/hero/export/hero-mesh.skel new file mode 100644 index 000000000..fc18ee833 Binary files /dev/null and b/examples/hero/export/hero-mesh.skel differ diff --git a/examples/hero/export/hero-pma.atlas b/examples/hero/export/hero-pma.atlas new file mode 100644 index 000000000..5e6074653 --- /dev/null +++ b/examples/hero/export/hero-pma.atlas @@ -0,0 +1,146 @@ + +hero-pma.png +size: 1024,256 +format: RGBA8888 +filter: Linear,Linear +repeat: none +body + rotate: false + xy: 324, 81 + size: 97, 95 + orig: 97, 95 + offset: 0, 0 + index: -1 +cape + rotate: false + xy: 176, 88 + size: 146, 159 + orig: 146, 159 + offset: 0, 0 + index: -1 +eyes + rotate: false + xy: 604, 216 + size: 82, 31 + orig: 82, 31 + offset: 0, 0 + index: -1 +fingers + rotate: true + xy: 643, 183 + size: 31, 33 + orig: 31, 33 + offset: 0, 0 + index: -1 +foot1 + rotate: false + xy: 863, 205 + size: 50, 42 + orig: 50, 42 + offset: 0, 0 + index: -1 +foot2 + rotate: false + xy: 915, 209 + size: 53, 38 + orig: 53, 38 + offset: 0, 0 + index: -1 +forearm1 + rotate: true + xy: 970, 206 + size: 41, 49 + orig: 41, 49 + offset: 0, 0 + index: -1 +forearm2 + rotate: true + xy: 423, 79 + size: 31, 32 + orig: 31, 32 + offset: 0, 0 + index: -1 +hand1 + rotate: false + xy: 140, 24 + size: 37, 48 + orig: 37, 48 + offset: 0, 0 + index: -1 +hand2 + rotate: true + xy: 604, 183 + size: 31, 37 + orig: 31, 37 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 2, 74 + size: 172, 173 + orig: 172, 173 + offset: 0, 0 + index: -1 +mantles + rotate: false + xy: 2, 17 + size: 136, 55 + orig: 136, 55 + offset: 0, 0 + index: -1 +mouth + rotate: false + xy: 2, 2 + size: 61, 13 + orig: 61, 13 + offset: 0, 0 + index: -1 +shin1 + rotate: false + xy: 482, 119 + size: 53, 57 + orig: 53, 57 + offset: 0, 0 + index: -1 +shin2 + rotate: true + xy: 807, 196 + size: 51, 54 + orig: 51, 54 + offset: 0, 0 + index: -1 +sword + rotate: false + xy: 324, 178 + size: 216, 69 + orig: 216, 69 + offset: 0, 0 + index: -1 +thigh1 + rotate: false + xy: 542, 184 + size: 60, 63 + orig: 60, 63 + offset: 0, 0 + index: -1 +thigh2 + rotate: false + xy: 423, 112 + size: 57, 64 + orig: 57, 64 + offset: 0, 0 + index: -1 +upperarm1 + rotate: true + xy: 749, 197 + size: 50, 56 + orig: 50, 56 + offset: 0, 0 + index: -1 +upperarm2 + rotate: true + xy: 688, 208 + size: 39, 59 + orig: 39, 59 + offset: 0, 0 + index: -1 diff --git a/examples/hero/export/hero-pma.png b/examples/hero/export/hero-pma.png new file mode 100644 index 000000000..9e7224fa7 Binary files /dev/null and b/examples/hero/export/hero-pma.png differ diff --git a/examples/hero/export/hero.atlas b/examples/hero/export/hero.atlas new file mode 100644 index 000000000..28324920e --- /dev/null +++ b/examples/hero/export/hero.atlas @@ -0,0 +1,146 @@ + +hero.png +size: 1024,256 +format: RGBA8888 +filter: Linear,Linear +repeat: none +body + rotate: false + xy: 324, 81 + size: 97, 95 + orig: 97, 95 + offset: 0, 0 + index: -1 +cape + rotate: false + xy: 176, 88 + size: 146, 159 + orig: 146, 159 + offset: 0, 0 + index: -1 +eyes + rotate: false + xy: 604, 216 + size: 82, 31 + orig: 82, 31 + offset: 0, 0 + index: -1 +fingers + rotate: true + xy: 643, 183 + size: 31, 33 + orig: 31, 33 + offset: 0, 0 + index: -1 +foot1 + rotate: false + xy: 863, 205 + size: 50, 42 + orig: 50, 42 + offset: 0, 0 + index: -1 +foot2 + rotate: false + xy: 915, 209 + size: 53, 38 + orig: 53, 38 + offset: 0, 0 + index: -1 +forearm1 + rotate: true + xy: 970, 206 + size: 41, 49 + orig: 41, 49 + offset: 0, 0 + index: -1 +forearm2 + rotate: true + xy: 423, 79 + size: 31, 32 + orig: 31, 32 + offset: 0, 0 + index: -1 +hand1 + rotate: false + xy: 140, 24 + size: 37, 48 + orig: 37, 48 + offset: 0, 0 + index: -1 +hand2 + rotate: true + xy: 604, 183 + size: 31, 37 + orig: 31, 37 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 2, 74 + size: 172, 173 + orig: 172, 173 + offset: 0, 0 + index: -1 +mantles + rotate: false + xy: 2, 17 + size: 136, 55 + orig: 136, 55 + offset: 0, 0 + index: -1 +mouth + rotate: false + xy: 2, 2 + size: 61, 13 + orig: 61, 13 + offset: 0, 0 + index: -1 +shin1 + rotate: false + xy: 482, 119 + size: 53, 57 + orig: 53, 57 + offset: 0, 0 + index: -1 +shin2 + rotate: true + xy: 807, 196 + size: 51, 54 + orig: 51, 54 + offset: 0, 0 + index: -1 +sword + rotate: false + xy: 324, 178 + size: 216, 69 + orig: 216, 69 + offset: 0, 0 + index: -1 +thigh1 + rotate: false + xy: 542, 184 + size: 60, 63 + orig: 60, 63 + offset: 0, 0 + index: -1 +thigh2 + rotate: false + xy: 423, 112 + size: 57, 64 + orig: 57, 64 + offset: 0, 0 + index: -1 +upperarm1 + rotate: true + xy: 749, 197 + size: 50, 56 + orig: 50, 56 + offset: 0, 0 + index: -1 +upperarm2 + rotate: true + xy: 688, 208 + size: 39, 59 + orig: 39, 59 + offset: 0, 0 + index: -1 diff --git a/examples/hero/export/hero.json b/examples/hero/export/hero.json new file mode 100644 index 000000000..87ec2fc4c --- /dev/null +++ b/examples/hero/export/hero.json @@ -0,0 +1,2143 @@ +{ +"skeleton": { "hash": "G8Hn+I+pLLpQJV630iP0YYkYAHQ", "spine": "3.4.00", "width": 319.35, "height": 337.01, "images": "./images/" }, +"bones": [ + { "name": "root" }, + { "name": "Hip", "parent": "root", "y": 94.88 }, + { "name": "L_Ground", "parent": "root", "x": -31.28, "y": 0.26, "color": "00ff00ff" }, + { "name": "L_Ankle", "parent": "L_Ground", "x": 0.26, "y": 33.05, "color": "ff3f00ff" }, + { "name": "LookTarget", "parent": "root", "x": 112.83, "y": 218.2, "color": "8a009bff" }, + { "name": "LookConstraintGoal", "parent": "LookTarget", "y": -43.82, "color": "ff3f00ff" }, + { "name": "R_Ground", "parent": "root", "x": 28.11, "y": 0.26, "color": "ff0000ff" }, + { "name": "R_Ankle", "parent": "R_Ground", "y": 31.79, "color": "ff3f00ff" }, + { "name": "body", "parent": "Hip", "length": 60.79, "rotation": 96.39, "x": 4.09, "y": 3.17 }, + { "name": "thigh1", "parent": "Hip", "length": 23.94, "rotation": -107.07, "x": -17.51, "y": -5.22 }, + { "name": "shin1", "parent": "thigh1", "length": 28.23, "rotation": 10.26, "x": 29.76, "y": -0.91 }, + { "name": "foot1", "parent": "shin1", "length": 27.07, "rotation": -90.96, "x": 28.17, "y": -0.48, "inheritRotation": false }, + { "name": "thigh2", "parent": "Hip", "length": 23.65, "rotation": -85.46, "x": 21.85, "y": -5.86 }, + { "name": "shin2", "parent": "thigh2", "length": 25.35, "rotation": -2.25, "x": 31.99, "y": 2.96 }, + { "name": "foot2", "parent": "shin2", "length": 22.28, "rotation": -90.42, "x": 25.54, "y": 0.27, "inheritRotation": false }, + { "name": "upperarm1", "parent": "body", "length": 19.35, "rotation": 130.11, "x": 52.49, "y": 41.84 }, + { "name": "forearm1", "parent": "upperarm1", "length": 22.06, "rotation": 30.56, "x": 23.97, "y": 5.16 }, + { "name": "upperarm2", "parent": "body", "length": 25.98, "rotation": -178.95, "x": 57.94, "y": -38.93 }, + { "name": "forearm2", "parent": "upperarm2", "length": 15.3, "rotation": 6.79, "x": 28.74, "y": -0.9 }, + { "name": "hand1", "parent": "forearm1", "length": 28.01, "rotation": 16.24, "x": 27.54, "y": 0.44 }, + { "name": "hand2", "parent": "forearm2", "length": 23.76, "rotation": 1.35, "x": 22.8, "y": -0.21 }, + { "name": "head", "parent": "body", "length": 24.35, "rotation": -92.69, "x": 74.55, "y": -4.84 }, + { "name": "mantles", "parent": "body", "rotation": -2.25, "x": 48.47, "y": -9 }, + { "name": "weapon", "parent": "hand2", "length": 157.4, "rotation": 77.9, "x": 15.97, "y": 1.43 } +], +"slots": [ + { "name": "upperarm2", "bone": "upperarm2", "attachment": "upperarm2" }, + { "name": "sword", "bone": "root" }, + { "name": "hand2", "bone": "hand2", "attachment": "hand2" }, + { "name": "weapon", "bone": "weapon", "attachment": "sword" }, + { "name": "fingers", "bone": "hand2", "attachment": "fingers" }, + { "name": "forearm2", "bone": "forearm2", "attachment": "forearm2" }, + { "name": "thigh2", "bone": "thigh2", "attachment": "thigh2" }, + { "name": "foot2", "bone": "foot2", "attachment": "foot2" }, + { "name": "shin2", "bone": "shin2", "attachment": "shin2" }, + { "name": "thigh1", "bone": "thigh1", "attachment": "thigh1" }, + { "name": "foot1", "bone": "foot1", "attachment": "foot1" }, + { "name": "body", "bone": "body", "attachment": "body" }, + { "name": "shin1", "bone": "shin1", "attachment": "shin1" }, + { "name": "upperarm1", "bone": "upperarm1", "attachment": "upperarm1" }, + { "name": "mantles", "bone": "mantles", "attachment": "mantles" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "mouth", "bone": "head", "attachment": "mouth" }, + { "name": "eyes", "bone": "head", "attachment": "eyes" }, + { "name": "forearm1", "bone": "forearm1", "attachment": "forearm1" }, + { "name": "hand1", "bone": "hand1", "attachment": "hand1" } +], +"ik": [ + { + "name": "L_Leg", + "bones": [ "thigh1", "shin1" ], + "target": "L_Ankle", + "bendPositive": false + }, + { + "name": "LookConstraint", + "bones": [ "head" ], + "target": "LookConstraintGoal", + "mix": 0 + }, + { + "name": "R_Leg", + "bones": [ "thigh2", "shin2" ], + "target": "R_Ankle", + "bendPositive": false + } +], +"skins": { + "default": { + "body": { + "body": { "x": 33.81, "y": 2.59, "rotation": -92.7, "width": 97, "height": 95 } + }, + "eyes": { + "eyes": { "x": 6.48, "y": 50.75, "rotation": 0.12, "width": 82, "height": 31 } + }, + "fingers": { + "fingers": { "x": 16.21, "y": 1.37, "rotation": 82.36, "width": 31, "height": 33 } + }, + "foot1": { + "foot1": { "x": 12.55, "y": 0.12, "rotation": 90.96, "width": 50, "height": 42 } + }, + "foot2": { + "foot2": { "x": 8.83, "y": 2.92, "rotation": 90.42, "width": 53, "height": 38 } + }, + "forearm1": { + "forearm1": { "x": 11.88, "y": -5.04, "rotation": 106.61, "width": 41, "height": 49 } + }, + "forearm2": { + "forearm2": { "x": 13.08, "y": -0.63, "rotation": 83.71, "width": 31, "height": 32 } + }, + "hand1": { + "hand1": { "x": 11.92, "y": -0.7, "rotation": 90.37, "width": 37, "height": 48 } + }, + "hand2": { + "hand2": { "x": 14.23, "y": 1.64, "rotation": 82.36, "width": 31, "height": 37 } + }, + "head": { + "head": { "x": 7.79, "y": 71.87, "rotation": 0.12, "width": 172, "height": 173 } + }, + "mantles": { + "mantles": { "x": 15.57, "y": 11.76, "rotation": -90.45, "width": 136, "height": 55 } + }, + "mouth": { + "mouth": { "x": 12.07, "y": 10.76, "rotation": 0.12, "width": 61, "height": 13 } + }, + "shin1": { + "shin1": { "x": 8.95, "y": 0.67, "rotation": 96.8, "width": 53, "height": 57 } + }, + "shin2": { + "shin2": { "x": 2.25, "y": -2.94, "rotation": 87.71, "width": 51, "height": 54 } + }, + "thigh1": { + "thigh1": { "x": 11.98, "y": -1.01, "rotation": 107.07, "width": 60, "height": 63 } + }, + "thigh2": { + "thigh2": { "x": 15.7, "y": -4.61, "rotation": 85.46, "width": 57, "height": 64 } + }, + "upperarm1": { + "upperarm1": { "x": 6.6, "y": 0.05, "rotation": 137.18, "width": 50, "height": 56 } + }, + "upperarm2": { + "upperarm2": { "x": 13.32, "y": -2.21, "rotation": 90.45, "width": 39, "height": 59 } + }, + "weapon": { + "sword": { "x": 71.38, "y": 0.2, "rotation": 0.19, "width": 216, "height": 69 } + } + } +}, +"events": { + "Footstep": {} +}, +"animations": { + "Attack": { + "bones": { + "root": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -12.6, "y": -11.34 }, + { "time": 0.0666, "x": -20.75, "y": -23.08 }, + { "time": 0.1333, "x": -15.51, "y": -16.91 }, + { "time": 0.2, "x": -5.88, "y": -21.85 }, + { "time": 0.2666, "x": -7.08, "y": -25.29 }, + { "time": 0.4, "x": -12.6, "y": -11.34 } + ] + }, + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 51.94, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 51.94, "y": 0 } + ] + }, + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -67.98, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": -67.98, "y": 0 } + ] + }, + "L_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": 2.2 }, + { "time": 0.0666, "angle": 13.21 }, + { "time": 0.1333, "angle": -9.58 }, + { "time": 0.2, "angle": -23.58 }, + { "time": 0.2666, "angle": -32.14 }, + { "time": 0.4, "angle": 2.2 } + ], + "translate": [ + { "time": 0, "x": -0.76, "y": -1.89 }, + { "time": 0.1333, "x": 4.86, "y": -0.24 }, + { "time": 0.2, "x": 8.05, "y": -2.43 }, + { "time": 0.4, "x": -0.76, "y": -1.89 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 14.5, "y": -3.78, "curve": "stepped" }, + { "time": 0.4, "x": 14.5, "y": -3.78 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -22.57, "y": 1.51 }, + { "time": 0.2, "x": -13.26, "y": -2.4 }, + { "time": 0.4, "x": -22.57, "y": 1.51 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -19.21 }, + { "time": 0.0666, "angle": -19.17 }, + { "time": 0.1333, "angle": 4.76 }, + { "time": 0.2, "angle": 12.46 }, + { "time": 0.2666, "angle": 12.57 }, + { "time": 0.4, "angle": -19.21 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0666, "x": 3.47, "y": 5.7 }, + { "time": 0.2, "x": -4.55, "y": -12.27 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": -8.27 }, + { "time": 0.0666, "angle": 5.32 }, + { "time": 0.1333, "angle": 4.8 }, + { "time": 0.2, "angle": -2.43 }, + { "time": 0.2666, "angle": -12.35 }, + { "time": 0.4, "angle": -8.27 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0666, "x": 5.51, "y": -5.45 }, + { "time": 0.1333, "x": 1.53, "y": -5.87 }, + { "time": 0.2, "x": 0.46, "y": -6.11 }, + { "time": 0.2666, "x": -6.55, "y": -4.72 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "shin1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "shin2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "upperarm1": { + "rotate": [ + { "time": 0, "angle": -4.05 }, + { "time": 0.0666, "angle": 33.65 }, + { "time": 0.1333, "angle": -3.75 }, + { "time": 0.2666, "angle": -49.64 }, + { "time": 0.3333, "angle": -42.31 }, + { "time": 0.4, "angle": -4.05 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.2, "x": -2.5, "y": -6.51 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 324.46 }, + { "time": 0.0666, "angle": 101.05 }, + { "time": 0.1333, "angle": 49.05 }, + { "time": 0.2, "angle": 15.11 }, + { "time": 0.2666, "angle": 313.18 }, + { "time": 0.4, "angle": 324.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1333, "x": -2.1, "y": -8.13 }, + { "time": 0.2, "x": -10.56, "y": 1.25 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": 8.9, "curve": "stepped" }, + { "time": 0.4, "angle": 8.9 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": -13.11, "curve": "stepped" }, + { "time": 0.4, "angle": -13.11 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "forearm1": { + "rotate": [ + { "time": 0, "angle": 7.93 }, + { "time": 0.0666, "angle": 42.3 }, + { "time": 0.1333, "angle": 21.87 }, + { "time": 0.3333, "angle": 43.27 }, + { "time": 0.4, "angle": 7.93 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 56.31 }, + { "time": 0.0666, "angle": 87.62 }, + { "time": 0.1333, "angle": 6.51 }, + { "time": 0.2, "angle": 1 }, + { "time": 0.2666, "angle": 45.14 }, + { "time": 0.4, "angle": 56.31 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": -8.94 }, + { "time": 0.2666, "angle": -20.79 }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": 17.89 }, + { "time": 0.0666, "angle": -12.89 }, + { "time": 0.1333, "angle": -11.39 }, + { "time": 0.2, "angle": 6.2 }, + { "time": 0.2666, "angle": 18.96 }, + { "time": 0.4, "angle": 17.89 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "weapon": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.4, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0 } + ] + } + } + }, + "Crouch": { + "bones": { + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 38.03 }, + { "time": 0.5, "angle": 30.8 }, + { "time": 1, "angle": 38.03 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { + "time": 0, + "angle": -15.51, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "angle": -11.54, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1, "angle": -15.51 } + ], + "translate": [ + { + "time": 0, + "x": -0.41, + "y": -2.32, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": -2.2, + "y": -0.53, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1, "x": -0.41, "y": -2.32 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 8.72 }, + { "time": 0.5, "angle": 3.24 }, + { "time": 1, "angle": 8.72 } + ], + "translate": [ + { + "time": 0, + "x": -4.42, + "y": -2.85, + "curve": [ 0.361, 0.63, 0.697, 1 ] + }, + { + "time": 0.1666, + "x": -4.84, + "y": -3.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "x": -2.35, + "y": -1.86, + "curve": [ 0.36, 0.43, 0.701, 0.8 ] + }, + { "time": 1, "x": -4.42, "y": -2.85 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -11.22, "y": -42.01, "curve": "stepped" }, + { "time": 1, "x": -11.22, "y": -42.01 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": 9.04 }, + { "time": 0.5, "angle": 7.13 }, + { "time": 1, "angle": 9.04 } + ], + "translate": [ + { "time": 0, "x": -0.09, "y": 0, "curve": "stepped" }, + { "time": 1, "x": -0.09, "y": 0 } + ] + }, + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -29.07, "y": 1.18, "curve": "stepped" }, + { "time": 1, "x": -29.07, "y": 1.18 } + ] + }, + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 16.23, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 16.23, "y": 0 } + ] + }, + "upperarm1": { + "rotate": [ + { "time": 0, "angle": -5.42 }, + { "time": 0.5, "angle": -11.1 }, + { "time": 1, "angle": -5.42 } + ], + "translate": [ + { "time": 0, "x": -6.94, "y": 5.85, "curve": "stepped" }, + { "time": 1, "x": -6.94, "y": 5.85 } + ] + }, + "forearm1": { + "rotate": [ + { "time": 0, "angle": 25.38 }, + { "time": 0.5, "angle": 32.07 }, + { "time": 1, "angle": 25.38 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 18.6 }, + { "time": 0.5, "angle": 26.15 }, + { "time": 1, "angle": 18.6 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -2.75, "y": 0, "curve": "stepped" }, + { "time": 1, "x": -2.75, "y": 0 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -0.92, "y": 6.67, "curve": "stepped" }, + { "time": 1, "x": -0.92, "y": 6.67 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": 270.13, "curve": "stepped" }, + { "time": 1, "angle": 270.13 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "weapon": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": -13.39 }, + { "time": 0.5, "angle": -17.28 }, + { "time": 1, "angle": -13.39 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { "time": 0, "angle": -9.29 }, + { "time": 0.5, "angle": -1.97 }, + { "time": 1, "angle": -9.29 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -4.92, "curve": "stepped" }, + { "time": 1, "x": 0, "y": -4.92 } + ] + }, + "L_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -12.22, "curve": "stepped" }, + { "time": 1, "x": 0, "y": -12.22 } + ] + } + } + }, + "Fall": { + "bones": { + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 13.15, "y": 7.94, "curve": "stepped" }, + { "time": 1, "x": 13.15, "y": 7.94 } + ] + }, + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 35.34, "y": 4.14, "curve": "stepped" }, + { "time": 1, "x": 35.34, "y": 4.14 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": 19.62, "curve": "stepped" }, + { "time": 1, "angle": 19.62 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": 39.16, "curve": "stepped" }, + { "time": 1, "angle": 39.16 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": 14.13, "curve": "stepped" }, + { "time": 1, "angle": 14.13 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -17.81, "curve": "stepped" }, + { "time": 1, "angle": -17.81 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "upperarm1": { + "rotate": [ + { "time": 0, "angle": -25.71, "curve": "stepped" }, + { "time": 1, "angle": -25.71 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "forearm1": { + "rotate": [ + { "time": 0, "angle": 26.18, "curve": "stepped" }, + { "time": 1, "angle": 26.18 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 37.75, "curve": "stepped" }, + { "time": 1, "angle": 37.75 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 12.3, "curve": "stepped" }, + { "time": 1, "angle": 12.3 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "L_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "weapon": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + } + } + }, + "Idle": { + "bones": { + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 0.46 }, + { "time": 0.5, "angle": 358.79 }, + { "time": 1, "angle": 0.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.5, "x": -3.12, "y": 8.02 }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": 1.66 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": 0, + "y": -3.7, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -4.18 }, + { "time": 0.5, "angle": -8.25 }, + { "time": 1, "angle": -4.18 } + ], + "translate": [ + { + "time": 0, + "x": -1.06, + "y": 0, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { + "time": 0.1666, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "x": -3.74, + "y": 0, + "curve": [ 0.243, 0, 0.648, 0.6 ] + }, + { "time": 1, "x": -1.06, "y": 0 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": -2.92, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": -3.18, + "y": -4.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1, "x": 0, "y": -2.92 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": 0 }, + { + "time": 0.4333, + "angle": -4.83, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": -0.09, + "y": 0, + "curve": [ 0.3, 0.21, 0.755, 1 ] + }, + { + "time": 0.4333, + "x": -1.41, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.9333, "x": 0, "y": 0 }, + { "time": 1, "x": -0.09, "y": 0 } + ] + }, + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -7.15, "y": 0, "curve": "stepped" }, + { "time": 1, "x": -7.15, "y": 0 } + ] + }, + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 5.94, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 5.94, "y": 0 } + ] + }, + "upperarm1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "angle": -15.4, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "x": 1.84, + "y": -5, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "forearm1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "angle": 9.63, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": 13.63 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "weapon": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": -8.65 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.404, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "angle": 12.36, + "curve": [ 0.516, 0, 0.75, 1 ] + }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "L_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + } + } + }, + "Jump": { + "bones": { + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -6.83, "y": 12.06, "curve": "stepped" }, + { "time": 1, "x": -6.83, "y": 12.06 } + ] + }, + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 2.41, "y": 1.2, "curve": "stepped" }, + { "time": 1, "x": 2.41, "y": 1.2 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": -32.23, "curve": "stepped" }, + { "time": 1, "angle": -32.23 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": -33.3, "curve": "stepped" }, + { "time": 1, "angle": -33.3 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": -10.4, "curve": "stepped" }, + { "time": 1, "angle": -10.4 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 4.89, "curve": "stepped" }, + { "time": 1, "angle": 4.89 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "upperarm1": { + "rotate": [ + { "time": 0, "angle": 22.69, "curve": "stepped" }, + { "time": 1, "angle": 22.69 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "forearm1": { + "rotate": [ + { "time": 0, "angle": 56.41, "curve": "stepped" }, + { "time": 1, "angle": 56.41 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 23.71, "curve": "stepped" }, + { "time": 1, "angle": 23.71 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 20.06, "curve": "stepped" }, + { "time": 1, "angle": 20.06 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "L_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "shin2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "weapon": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + } + } + }, + "Run": { + "bones": { + "upperarm1": { + "rotate": [ + { "time": 0, "angle": -40.45 }, + { "time": 0.044, "angle": -34.97 }, + { "time": 0.0881, "angle": 1.79 }, + { "time": 0.1322, "angle": 42.58 }, + { "time": 0.3117, "angle": -282.55 }, + { "time": 0.3525, "angle": 48.21 }, + { "time": 0.3966, "angle": 26.17 }, + { "time": 0.4407, "angle": -22.81 }, + { "time": 0.5333, "angle": -40.45 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.044, "x": 1.33, "y": 0.56 }, + { "time": 0.1762, "x": -2.74, "y": -5.58 }, + { "time": 0.3117, "x": -3.1, "y": -2.45 }, + { "time": 0.4407, "x": -0.75, "y": 4.05 }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "forearm1": { + "rotate": [ + { "time": 0, "angle": 27.41 }, + { "time": 0.044, "angle": 21.5 }, + { "time": 0.0881, "angle": 16.71 }, + { "time": 0.1322, "angle": 30.61 }, + { "time": 0.3117, "angle": 38.33 }, + { "time": 0.3525, "angle": 37.81 }, + { "time": 0.3966, "angle": 16.47 }, + { "time": 0.4407, "angle": 17.71 }, + { "time": 0.5333, "angle": 27.41 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { "time": 0, "angle": -20.19 }, + { "time": 0.044, "angle": -24.82 }, + { "time": 0.1762, "angle": -14.29 }, + { "time": 0.3525, "angle": 21.84 }, + { "time": 0.3966, "angle": 9.46 }, + { "time": 0.4407, "angle": 12.08 }, + { "time": 0.5333, "angle": -20.19 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 49.53, "y": -0.29 }, + { "time": 0.044, "x": 39.66, "y": -0.29 }, + { "time": 0.0881, "x": -3.63, "y": -0.29 }, + { "time": 0.1322, "x": -10.76, "y": -0.29 }, + { "time": 0.1762, "x": -16.65, "y": 22.09 }, + { "time": 0.2203, "x": -10, "y": 27.07 }, + { "time": 0.2666, "x": -11.26, "y": 16.63 }, + { "time": 0.3117, "x": 12.41, "y": 7.75 }, + { "time": 0.3525, "x": 37.47, "y": 7.29 }, + { "time": 0.3966, "x": 52.33, "y": 5.52 }, + { "time": 0.4407, "x": 68.69, "y": 19.42 }, + { "time": 0.4848, "x": 68.69, "y": 7.96 }, + { "time": 0.5333, "x": 49.53, "y": -0.29 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": 20.27 }, + { "time": 0.044, "angle": -0.6 }, + { "time": 0.1322, "angle": -31.14 }, + { "time": 0.1762, "angle": 262.34 }, + { "time": 0.2203, "angle": -71.2 }, + { "time": 0.2666, "angle": -84.95 }, + { "time": 0.3117, "angle": -63.21 }, + { "time": 0.3525, "angle": -8.37 }, + { "time": 0.3966, "angle": -18.33 }, + { "time": 0.4407, "angle": 34.08 }, + { "time": 0.5333, "angle": 20.27 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -58.44, "y": 26.01 }, + { "time": 0.044, "x": -42, "y": 21.08 }, + { "time": 0.0881, "x": -5.28, "y": 9.57 }, + { "time": 0.1322, "x": 11.16, "y": 11.76 }, + { "time": 0.1762, "x": 19.38, "y": 26.56 }, + { "time": 0.2203, "x": 23.89, "y": 16.89 }, + { "time": 0.2666, "x": 21.52, "y": -0.14 }, + { "time": 0.3117, "x": -19.32, "y": -0.14 }, + { "time": 0.3525, "x": -53.26, "y": 0.13 }, + { "time": 0.3966, "x": -65.63, "y": 6.46 }, + { "time": 0.4407, "x": -75.71, "y": 39.48 }, + { "time": 0.5333, "x": -58.44, "y": 26.01 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": 262.95 }, + { "time": 0.0881, "angle": -74.33 }, + { "time": 0.1322, "angle": -4.26 }, + { "time": 0.1762, "angle": 13.38 }, + { "time": 0.2203, "angle": 28.95 }, + { "time": 0.2666, "angle": 35.05 }, + { "time": 0.3117, "angle": 7.53 }, + { "time": 0.3525, "angle": -31.42 }, + { "time": 0.4407, "angle": 260.06 }, + { "time": 0.5333, "angle": 262.95 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "root": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -8.39 }, + { "time": 0.044, "x": 1.64, "y": -12.87 }, + { + "time": 0.0881, + "x": 1.64, + "y": -11.23, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.1762, "x": 1.64, "y": 8.97 }, + { "time": 0.2203, "x": 1.64, "y": -1.1 }, + { "time": 0.2666, "x": 0, "y": -8.39 }, + { "time": 0.3117, "x": 0, "y": -10.17 }, + { + "time": 0.3525, + "x": 0, + "y": -9.45, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4407, "x": 0, "y": 5.78 }, + { "time": 0.4848, "x": 1.64, "y": -1.1 }, + { "time": 0.5333, "x": 0, "y": -8.39 } + ] + }, + "L_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1762, "x": -1.45, "y": 9.68 }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": -11.15 }, + { "time": 0.044, "angle": -16.76 }, + { "time": 0.1762, "angle": -8.61 }, + { "time": 0.3117, "angle": -20.17 }, + { "time": 0.4407, "angle": -8.61 }, + { "time": 0.5333, "angle": -11.15 } + ], + "translate": [ + { "time": 0, "x": 3.36, "y": -2.52 }, + { "time": 0.044, "x": 4.98, "y": 0.87 }, + { "time": 0.1762, "x": 2.6, "y": 4.02 }, + { "time": 0.3117, "x": 5.73, "y": 0.46 }, + { "time": 0.4407, "x": 2.7, "y": 5.1 }, + { "time": 0.5333, "x": 3.36, "y": -2.52 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 6.02, "y": 0 }, + { "time": 0.1322, "x": -3.58, "y": 1.43 }, + { "time": 0.1762, "x": 0.23, "y": 2.72 }, + { "time": 0.2666, "x": 6.13, "y": -0.59 }, + { "time": 0.3305, "x": 8.81, "y": 5.77 }, + { "time": 0.3966, "x": 31, "y": 0.35 }, + { "time": 0.4848, "x": 22.13, "y": 0.17 }, + { "time": 0.5333, "x": 6.02, "y": 0 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -8.31, "y": -2.37 }, + { "time": 0.1322, "x": -3.93, "y": -2.37 }, + { "time": 0.2666, "x": 3.22, "y": -1.52 }, + { "time": 0.3525, "x": -18.12, "y": 0.17 }, + { "time": 0.3966, "x": -28.38, "y": 0.17 }, + { "time": 0.5333, "x": -8.31, "y": -2.37 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 8.08 }, + { + "time": 0.044, + "angle": 1.34, + "curve": [ 0.25, 0, 0.851, 0.81 ] + }, + { "time": 0.1762, "angle": 6.45 }, + { "time": 0.2666, "angle": 10.37 }, + { + "time": 0.3117, + "angle": 3.57, + "curve": [ 0.25, 0, 0.842, 0.77 ] + }, + { "time": 0.4407, "angle": 7.81 }, + { "time": 0.5333, "angle": 8.08 } + ], + "translate": [ + { "time": 0, "x": 2.87, "y": 0.23 }, + { "time": 0.044, "x": -3.5, "y": -1.82 }, + { "time": 0.1762, "x": 4.6, "y": 0.76 }, + { "time": 0.2666, "x": 1.55, "y": -6.16 }, + { "time": 0.3117, "x": -7.07, "y": -8.66 }, + { "time": 0.4407, "x": 7.03, "y": 0.05 }, + { "time": 0.5333, "x": 2.87, "y": 0.23 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.044, "angle": -2.17 }, + { "time": 0.2666, "angle": 2.9 }, + { "time": 0.3117, "angle": -0.95 }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.044, "x": -2.6, "y": -0.65 }, + { "time": 0.2666, "x": 1.39, "y": -0.59 }, + { "time": 0.3117, "x": -2.6, "y": -0.65 }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "shin1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "shin2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 30.8 }, + { "time": 0.044, "angle": 38.3 }, + { "time": 0.1322, "angle": 5.43 }, + { + "time": 0.2203, + "angle": 334.6, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.3117, "angle": 328.38 }, + { "time": 0.4407, "angle": 21.28 }, + { "time": 0.5333, "angle": 30.8 } + ], + "translate": [ + { "time": 0, "x": -5.33, "y": -1.55 }, + { "time": 0.1762, "x": -6.43, "y": 2.12 }, + { "time": 0.5333, "x": -5.33, "y": -1.55 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 35.89 }, + { "time": 0.0881, "angle": 25.71 }, + { "time": 0.1762, "angle": 29.3 }, + { + "time": 0.2203, + "angle": 34.63, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.3117, "angle": 38.94 }, + { "time": 0.4407, "angle": 30.09 }, + { "time": 0.5333, "angle": 35.89 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": 8.06 }, + { "time": 0.044, "angle": 12.45 }, + { "time": 0.1762, "angle": 33.85 }, + { "time": 0.4407, "angle": 22.92 }, + { "time": 0.5333, "angle": 8.06 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + }, + "weapon": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5333, "x": 0, "y": 0 } + ] + } + }, + "events": [ + { "time": 0.2666, "name": "Footstep" }, + { "time": 0.5333, "name": "Footstep" } + ] + }, + "Walk": { + "bones": { + "L_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 68.76, "y": 0 }, + { "time": 0.1333, "x": 57.43, "y": 0 }, + { "time": 0.2666, "x": 41.05, "y": 0 }, + { "time": 0.4, "x": 21.33, "y": 0 }, + { "time": 0.5333, "x": 5.89, "y": 0 }, + { "time": 0.6666, "x": 4.91, "y": 0 }, + { "time": 0.8, "x": 5.89, "y": 10.31 }, + { "time": 0.9333, "x": 44.68, "y": 10.8 }, + { "time": 1.0666, "x": 68.76, "y": 0 } + ] + }, + "thigh1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 24.92, "y": 0 }, + { "time": 0.2666, "x": 22.2, "y": 0 }, + { "time": 0.4, "x": 21.75, "y": -1.01 }, + { "time": 0.5333, "x": 21.29, "y": 0 }, + { "time": 0.6666, "x": 16.1, "y": 1 }, + { "time": 0.9333, "x": 21.7, "y": -3.92 }, + { "time": 1.0666, "x": 24.92, "y": 0 } + ] + }, + "Hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -7.39 }, + { "time": 0.1333, "x": 0, "y": -6.32 }, + { "time": 0.2666, "x": 0, "y": -1.44 }, + { "time": 0.3333, "x": 0, "y": 1.49 }, + { "time": 0.4, "x": 0, "y": 0.87 }, + { "time": 0.5333, "x": 0, "y": -9.59 }, + { "time": 0.6666, "x": 0, "y": -8.44 }, + { "time": 0.8, "x": 0, "y": -1.44 }, + { "time": 0.8666, "x": 0, "y": 1.49 }, + { "time": 0.9333, "x": 0, "y": 0.87 }, + { "time": 1.0666, "x": 0, "y": -7.39 } + ] + }, + "foot1": { + "rotate": [ + { "time": 0, "angle": 17.4 }, + { "time": 0.1333, "angle": -0.28 }, + { "time": 0.4, "angle": -10.63 }, + { "time": 0.5333, "angle": -8.71 }, + { "time": 0.6666, "angle": -24.7 }, + { "time": 0.8, "angle": -43.24 }, + { "time": 0.9333, "angle": -35.2 }, + { "time": 1.0666, "angle": 17.4 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "thigh2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -25.09, "y": 0 }, + { "time": 0.2, "x": -16.15, "y": -4.51 }, + { "time": 0.4, "x": -9.43, "y": -3.48 }, + { "time": 0.5333, "x": -4.25, "y": -1.41 }, + { "time": 0.6666, "x": -6.64, "y": 0.04 }, + { "time": 0.8, "x": -11.55, "y": -2.12 }, + { "time": 0.9333, "x": -22.84, "y": -3.88 }, + { "time": 1.0666, "x": -25.09, "y": 0 } + ] + }, + "R_Ground": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -53.9, "y": 0 }, + { "time": 0.1333, "x": -55, "y": 2.56 }, + { "time": 0.2666, "x": -56, "y": 14.27 }, + { "time": 0.4, "x": -9.55, "y": 9.63 }, + { "time": 0.5333, "x": 18.47, "y": -0.26 }, + { "time": 0.6666, "x": 6.23, "y": -0.26 }, + { "time": 0.8, "x": -20.75, "y": -0.26 }, + { "time": 0.9333, "x": -36.46, "y": -3.45 }, + { "time": 1.0666, "x": -53.9, "y": 0 } + ] + }, + "foot2": { + "rotate": [ + { "time": 0, "angle": -20 }, + { "time": 0.1333, "angle": -36.58 }, + { "time": 0.2666, "angle": -69.51 }, + { "time": 0.4, "angle": -13.92 }, + { "time": 0.5333, "angle": 33.26 }, + { "time": 0.6666, "angle": 0.41 }, + { "time": 0.9333, "angle": -1.16 }, + { "time": 1.0666, "angle": -20 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "upperarm1": { + "rotate": [ + { "time": 0, "angle": 13.97 }, + { "time": 0.1333, "angle": 2.64 }, + { "time": 0.5333, "angle": -293.8 }, + { "time": 0.6666, "angle": -302.37 }, + { "time": 0.8, "angle": 41.55 }, + { "time": 0.9333, "angle": 14.48 }, + { "time": 1.0666, "angle": 13.97 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1333, "x": 4.42, "y": 3.57 }, + { "time": 0.5333, "x": -0.22, "y": -4.77 }, + { "time": 0.6666, "x": 0.24, "y": -2.39 }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "forearm1": { + "rotate": [ + { "time": 0, "angle": -11.7 }, + { "time": 0.1333, "angle": -5.73 }, + { "time": 0.5333, "angle": 24.76 }, + { + "time": 0.6666, + "angle": 33.27, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.8, "angle": 3.08 }, + { "time": 0.9333, "angle": 5.39 }, + { "time": 1.0666, "angle": -11.7 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "hand1": { + "rotate": [ + { "time": 0, "angle": -19.62 }, + { "time": 0.1333, "angle": -25.06 }, + { "time": 0.2666, "angle": -27.67 }, + { "time": 0.4, "angle": -34.31 }, + { "time": 0.5333, "angle": -24.05 }, + { "time": 0.8, "angle": 16.76 }, + { "time": 0.9333, "angle": 7.44 }, + { "time": 1.0666, "angle": -19.62 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "body": { + "rotate": [ + { "time": 0, "angle": 2.18 }, + { + "time": 0.1333, + "angle": -2.56, + "curve": [ 0.464, 0, 0.75, 1 ] + }, + { "time": 0.3333, "angle": 4.73 }, + { "time": 0.5333, "angle": 0.29 }, + { + "time": 0.6666, + "angle": -2.56, + "curve": [ 0.464, 0, 0.75, 1 ] + }, + { "time": 0.8666, "angle": 3.59 }, + { "time": 1.0666, "angle": 2.18 } + ], + "translate": [ + { "time": 0, "x": 10.86, "y": -1.14 }, + { "time": 0.1333, "x": 10.48, "y": -2.93 }, + { "time": 0.3333, "x": 1.78, "y": 5.09 }, + { "time": 0.5333, "x": 12.04, "y": -2.64 }, + { "time": 0.6666, "x": 10.48, "y": -2.93 }, + { "time": 0.8666, "x": 1.78, "y": 6.43 }, + { "time": 1.0666, "x": 10.86, "y": -1.14 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -11.7 }, + { "time": 0.1333, "angle": -2.87 }, + { "time": 0.3333, "angle": -10.46 }, + { "time": 0.5333, "angle": -6.46 }, + { "time": 0.6666, "angle": -2.85 }, + { "time": 0.8666, "angle": -8.52 }, + { "time": 1.0666, "angle": -11.7 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1333, "x": -2.96, "y": -3.42 }, + { "time": 0.3333, "x": 1.04, "y": 0.33 }, + { "time": 0.5333, "x": 0, "y": 0 }, + { "time": 0.6666, "x": -2.96, "y": -3.42 }, + { "time": 0.8666, "x": 1.04, "y": 0.33 }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "upperarm2": { + "rotate": [ + { "time": 0, "angle": 349.66 }, + { "time": 0.1333, "angle": 349.79 }, + { "time": 0.2666, "angle": 343.53 }, + { "time": 0.4, "angle": 334.09 }, + { "time": 0.5333, "angle": 327.79 }, + { "time": 0.8, "angle": 338.53 }, + { "time": 0.9333, "angle": 354.68 }, + { "time": 1.0666, "angle": 349.66 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1333, "x": -0.76, "y": -1.44 }, + { "time": 0.5333, "x": -0.19, "y": 8.7 }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "forearm2": { + "rotate": [ + { "time": 0, "angle": 21.04 }, + { "time": 0.1333, "angle": 24.41 }, + { "time": 0.2666, "angle": -0.81 }, + { "time": 0.4, "angle": 23.68 }, + { "time": 0.5333, "angle": 23.61 }, + { "time": 0.6666, "angle": 25.56 }, + { "time": 0.8, "angle": 12.55 }, + { "time": 0.9333, "angle": -0.27 }, + { "time": 1.0666, "angle": 21.04 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "hand2": { + "rotate": [ + { "time": 0, "angle": -12.1 }, + { "time": 0.1333, "angle": -8.87 }, + { "time": 0.2666, "angle": 13.76 }, + { "time": 0.4, "angle": -3.02 }, + { "time": 0.5333, "angle": 11.48 }, + { "time": 0.6666, "angle": 5.24 }, + { "time": 0.8, "angle": 3.93 }, + { "time": 0.9333, "angle": 0.31 }, + { "time": 1.0666, "angle": -12.1 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "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 } + ] + }, + "L_Ankle": { + "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 } + ] + }, + "R_Ankle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -1.35, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": -1.35 } + ] + }, + "mantles": { + "rotate": [ + { "time": 0, "angle": -3.56 }, + { "time": 0.3333, "angle": -8.55 }, + { "time": 0.5333, "angle": -6.73 }, + { "time": 0.8666, "angle": -8.55 }, + { "time": 1.0666, "angle": -3.56 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1333, "x": -1.9, "y": -1.47 }, + { "time": 0.3333, "x": -0.66, "y": -0.2 }, + { "time": 0.6666, "x": -1.9, "y": -1.47 }, + { "time": 0.8666, "x": -0.66, "y": -0.2 }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "shin1": { + "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 } + ] + }, + "shin2": { + "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 } + ] + }, + "weapon": { + "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 } + ] + }, + "LookConstraintGoal": { + "rotate": [ + { "time": 0.9333, "angle": 0 } + ] + } + }, + "events": [ + { "time": 0.5333, "name": "Footstep" }, + { "time": 1.0666, "name": "Footstep" } + ] + } +} +} \ No newline at end of file diff --git a/examples/hero/export/hero.png b/examples/hero/export/hero.png new file mode 100644 index 000000000..ed5fff8ae Binary files /dev/null and b/examples/hero/export/hero.png differ diff --git a/examples/hero/export/hero.skel b/examples/hero/export/hero.skel new file mode 100644 index 000000000..1a75331ae Binary files /dev/null and b/examples/hero/export/hero.skel differ diff --git a/examples/hero/hero-mesh.spine b/examples/hero/hero-mesh.spine new file mode 100644 index 000000000..b9c59517d Binary files /dev/null and b/examples/hero/hero-mesh.spine differ diff --git a/examples/hero/hero.spine b/examples/hero/hero.spine new file mode 100644 index 000000000..b973915ca Binary files /dev/null and b/examples/hero/hero.spine differ diff --git a/examples/hero/images/body.png b/examples/hero/images/body.png new file mode 100644 index 000000000..df1a0db6b Binary files /dev/null and b/examples/hero/images/body.png differ diff --git a/examples/hero/images/cape.png b/examples/hero/images/cape.png new file mode 100644 index 000000000..3d8d1a14b Binary files /dev/null and b/examples/hero/images/cape.png differ diff --git a/examples/hero/images/eyes.png b/examples/hero/images/eyes.png new file mode 100644 index 000000000..a8f1a585d Binary files /dev/null and b/examples/hero/images/eyes.png differ diff --git a/examples/hero/images/fingers.png b/examples/hero/images/fingers.png new file mode 100644 index 000000000..7d42e6647 Binary files /dev/null and b/examples/hero/images/fingers.png differ diff --git a/examples/hero/images/foot1.png b/examples/hero/images/foot1.png new file mode 100644 index 000000000..b1e079c24 Binary files /dev/null and b/examples/hero/images/foot1.png differ diff --git a/examples/hero/images/foot2.png b/examples/hero/images/foot2.png new file mode 100644 index 000000000..48e5914ab Binary files /dev/null and b/examples/hero/images/foot2.png differ diff --git a/examples/hero/images/forearm1.png b/examples/hero/images/forearm1.png new file mode 100644 index 000000000..b57edad32 Binary files /dev/null and b/examples/hero/images/forearm1.png differ diff --git a/examples/hero/images/forearm2.png b/examples/hero/images/forearm2.png new file mode 100644 index 000000000..b410110d4 Binary files /dev/null and b/examples/hero/images/forearm2.png differ diff --git a/examples/hero/images/hand1.png b/examples/hero/images/hand1.png new file mode 100644 index 000000000..8dfee9c4e Binary files /dev/null and b/examples/hero/images/hand1.png differ diff --git a/examples/hero/images/hand2.png b/examples/hero/images/hand2.png new file mode 100644 index 000000000..d75cc192a Binary files /dev/null and b/examples/hero/images/hand2.png differ diff --git a/examples/hero/images/head.png b/examples/hero/images/head.png new file mode 100644 index 000000000..5985ba7af Binary files /dev/null and b/examples/hero/images/head.png differ diff --git a/examples/hero/images/mantles.png b/examples/hero/images/mantles.png new file mode 100644 index 000000000..14ac8064f Binary files /dev/null and b/examples/hero/images/mantles.png differ diff --git a/examples/hero/images/mouth.png b/examples/hero/images/mouth.png new file mode 100644 index 000000000..2f2ea8c0e Binary files /dev/null and b/examples/hero/images/mouth.png differ diff --git a/examples/hero/images/shin1.png b/examples/hero/images/shin1.png new file mode 100644 index 000000000..c9d857922 Binary files /dev/null and b/examples/hero/images/shin1.png differ diff --git a/examples/hero/images/shin2.png b/examples/hero/images/shin2.png new file mode 100644 index 000000000..5cc1a99c0 Binary files /dev/null and b/examples/hero/images/shin2.png differ diff --git a/examples/hero/images/sword.png b/examples/hero/images/sword.png new file mode 100644 index 000000000..d7698ce38 Binary files /dev/null and b/examples/hero/images/sword.png differ diff --git a/examples/hero/images/thigh1.png b/examples/hero/images/thigh1.png new file mode 100644 index 000000000..6ae6304e8 Binary files /dev/null and b/examples/hero/images/thigh1.png differ diff --git a/examples/hero/images/thigh2.png b/examples/hero/images/thigh2.png new file mode 100644 index 000000000..72e39328d Binary files /dev/null and b/examples/hero/images/thigh2.png differ diff --git a/examples/hero/images/upperarm1.png b/examples/hero/images/upperarm1.png new file mode 100644 index 000000000..4855e6c00 Binary files /dev/null and b/examples/hero/images/upperarm1.png differ diff --git a/examples/hero/images/upperarm2.png b/examples/hero/images/upperarm2.png new file mode 100644 index 000000000..d8b9c84e5 Binary files /dev/null and b/examples/hero/images/upperarm2.png differ diff --git a/examples/hero/license.txt b/examples/hero/license.txt new file mode 100644 index 000000000..86fb7fa08 --- /dev/null +++ b/examples/hero/license.txt @@ -0,0 +1,5 @@ +Copyright (c) 2014, XDTech + +The project file and images in this "Hero" project are provided for +demonstration purposes only and may not be redistributed for any reason nor +used as the basis for derivative work. \ No newline at end of file diff --git a/examples/powerup/export/powerup-pma.atlas b/examples/powerup/export/powerup-pma.atlas new file mode 100644 index 000000000..578b1934e --- /dev/null +++ b/examples/powerup/export/powerup-pma.atlas @@ -0,0 +1,27 @@ + +powerup-pma.png +size: 512,256 +format: RGBA8888 +filter: Linear,Linear +repeat: none +star + rotate: false + xy: 2, 2 + size: 76, 72 + orig: 76, 72 + offset: 0, 0 + index: -1 +token + rotate: false + xy: 141, 104 + size: 123, 122 + orig: 123, 122 + offset: 0, 0 + index: -1 +wing + rotate: false + xy: 2, 76 + size: 137, 150 + orig: 137, 150 + offset: 0, 0 + index: -1 diff --git a/examples/powerup/export/powerup-pma.png b/examples/powerup/export/powerup-pma.png new file mode 100644 index 000000000..18940431c Binary files /dev/null and b/examples/powerup/export/powerup-pma.png differ diff --git a/examples/powerup/export/powerup.atlas b/examples/powerup/export/powerup.atlas new file mode 100644 index 000000000..197be463f --- /dev/null +++ b/examples/powerup/export/powerup.atlas @@ -0,0 +1,27 @@ + +powerup.png +size: 512,256 +format: RGBA8888 +filter: Linear,Linear +repeat: none +star + rotate: false + xy: 2, 2 + size: 76, 72 + orig: 76, 72 + offset: 0, 0 + index: -1 +token + rotate: false + xy: 141, 104 + size: 123, 122 + orig: 123, 122 + offset: 0, 0 + index: -1 +wing + rotate: false + xy: 2, 76 + size: 137, 150 + orig: 137, 150 + offset: 0, 0 + index: -1 diff --git a/examples/powerup/export/powerup.json b/examples/powerup/export/powerup.json new file mode 100644 index 000000000..e47d99ea3 --- /dev/null +++ b/examples/powerup/export/powerup.json @@ -0,0 +1,488 @@ +{ +"skeleton": { "hash": "NDIwB/eCc9kyjtXoMAlUrSBw0+Q", "spine": "3.4.00", "width": 413.18, "height": 195.71, "images": "./images/" }, +"bones": [ + { "name": "root" }, + { "name": "powerup", "parent": "root", "x": 1.48, "y": 134.02 }, + { "name": "tokenRoot", "parent": "powerup", "x": -0.47, "y": 56.13 }, + { "name": "left wing", "parent": "tokenRoot", "x": -91.06, "y": 7.8 }, + { "name": "right wing", "parent": "tokenRoot", "x": 86.82, "y": 7.12 }, + { "name": "stars", "parent": "root", "x": 1.22, "y": 191.25 }, + { "name": "star", "parent": "stars", "x": 2.84, "y": 4.76 }, + { "name": "star1", "parent": "stars", "x": -2.19, "y": -2.04 }, + { "name": "star2", "parent": "stars", "x": -1.36, "y": -4.16 }, + { "name": "star3", "parent": "stars", "x": -0.84, "y": -3.78 }, + { "name": "star4", "parent": "stars", "x": 10.08, "y": 14.52 }, + { "name": "star5", "parent": "stars", "x": 11.5, "y": -12.28 }, + { "name": "star6", "parent": "stars", "x": -20.73, "y": -23.44 }, + { "name": "star7", "parent": "stars", "x": -5.85, "y": -35.84 }, + { "name": "star8", "parent": "stars", "x": 8.41, "y": -10.05 }, + { "name": "star9", "parent": "stars", "x": -1.62, "y": -7.34 }, + { "name": "token", "parent": "tokenRoot", "x": -1.18, "y": -1.81, "scaleX": 0.771, "scaleY": 0.771 } +], +"slots": [ + { "name": "right wing", "bone": "right wing", "attachment": "wing" }, + { "name": "left wing", "bone": "left wing", "attachment": "wing" }, + { "name": "star", "bone": "star", "color": "ffffff00", "attachment": "star" }, + { "name": "star1", "bone": "star1", "color": "ffa5a500", "attachment": "star" }, + { "name": "star2", "bone": "star2", "color": "ffffff00", "attachment": "star" }, + { "name": "star3", "bone": "star3", "color": "ffffff00", "attachment": "star" }, + { "name": "star4", "bone": "star4", "color": "ffffff00", "attachment": "star" }, + { "name": "star5", "bone": "star5", "color": "ffffff00", "attachment": "star" }, + { "name": "star6", "bone": "star6", "color": "ffffff00", "attachment": "star" }, + { "name": "star7", "bone": "star7", "color": "ffffff00", "attachment": "star" }, + { "name": "star8", "bone": "star8", "color": "ffffff00", "attachment": "star" }, + { "name": "star9", "bone": "star9", "color": "ffffff00", "attachment": "star" }, + { "name": "token", "bone": "token", "attachment": "token" } +], +"skins": { + "default": { + "left wing": { + "wing": { "x": -48.74, "y": 42.16, "scaleX": -1, "width": 137, "height": 150 } + }, + "right wing": { + "wing": { "x": 49.55, "y": 42.32, "width": 137, "height": 150 } + }, + "star": { + "star": { "width": 76, "height": 72 } + }, + "star1": { + "star": { "width": 76, "height": 72 } + }, + "star2": { + "star": { "width": 76, "height": 72 } + }, + "star3": { + "star": { "width": 76, "height": 72 } + }, + "star4": { + "star": { "width": 76, "height": 72 } + }, + "star5": { + "star": { "width": 76, "height": 72 } + }, + "star6": { + "star": { "width": 76, "height": 72 } + }, + "star7": { + "star": { "width": 76, "height": 72 } + }, + "star8": { + "star": { "width": 76, "height": 72 } + }, + "star9": { + "star": { "width": 76, "height": 72 } + }, + "token": { + "token": { "x": 1.18, "y": 1.81, "width": 123, "height": 122 } + } + } +}, +"animations": { + "animation": { + "slots": { + "star": { + "color": [ + { "time": 0, "color": "ffffff00" }, + { "time": 0.5333, "color": "ffffffff" }, + { "time": 0.6666, "color": "ffffff00" } + ] + }, + "star1": { + "color": [ + { "time": 0.2666, "color": "fff9f600" }, + { "time": 0.8, "color": "ffffffff" }, + { "time": 0.9333, "color": "fff0f200" } + ] + }, + "star2": { + "color": [ + { "time": 0.1333, "color": "ffffff00" }, + { "time": 0.6666, "color": "ffffffff" }, + { "time": 0.8, "color": "ffffff00" } + ] + }, + "star3": { + "color": [ + { "time": 0.4333, "color": "ffffff00" }, + { "time": 0.9666, "color": "ffffffff" }, + { "time": 1.1, "color": "ffffff00" } + ] + }, + "star4": { + "color": [ + { "time": 0.6, "color": "ffffff00" }, + { "time": 1.1333, "color": "ffffffff" }, + { "time": 1.2666, "color": "ffffff00" } + ] + }, + "star5": { + "color": [ + { "time": 0, "color": "ffffff9f" }, + { "time": 0.2, "color": "ffffffff" }, + { "time": 0.3333, "color": "ffffff00", "curve": "stepped" }, + { "time": 1, "color": "ffffff00" }, + { "time": 1.3333, "color": "ffffff9f" } + ] + }, + "star6": { + "color": [ + { "time": 0, "color": "ffffff2f" }, + { "time": 0.4333, "color": "ffffffff" }, + { "time": 0.5666, "color": "ffffff00", "curve": "stepped" }, + { "time": 1.2333, "color": "ffffff00" }, + { "time": 1.3333, "color": "ffffff2f" } + ] + }, + "star7": { + "color": [ + { "time": 0.6333, "color": "ffffff00" }, + { "time": 1.1666, "color": "ffffffff" }, + { "time": 1.3, "color": "ffffff00" } + ] + }, + "star8": { + "color": [ + { "time": 0, "color": "ffffffbf" }, + { "time": 0.1333, "color": "ffffffff" }, + { "time": 0.2666, "color": "ffffff00", "curve": "stepped" }, + { "time": 0.9333, "color": "ffffff00" }, + { "time": 1.3333, "color": "ffffffbf" } + ] + }, + "star9": { + "color": [ + { "time": 0, "color": "ffffffff" }, + { "time": 0.1333, "color": "ffffff00", "curve": "stepped" }, + { "time": 0.8, "color": "ffffff00" }, + { "time": 1.3333, "color": "ffffffff" } + ] + } + }, + "bones": { + "powerup": { + "translate": [ + { + "time": 0, + "x": -18.55, + "y": 0, + "curve": [ 0.385, 0, 0.689, 0.95 ] + }, + { + "time": 0.3333, + "x": 0, + "y": -34.69, + "curve": [ 0.235, 0.66, 1, 1 ] + }, + { "time": 0.6666, "x": 22.04, "y": 0 }, + { + "time": 1, + "x": 0, + "y": -34.69, + "curve": [ 0.235, 0.66, 1, 1 ] + }, + { "time": 1.3333, "x": -18.55, "y": 0 } + ] + }, + "left wing": { + "rotate": [ + { + "time": 0, + "angle": 45.23, + "curve": [ 0.393, 0, 0.629, 1 ] + }, + { + "time": 0.1666, + "angle": -38.74, + "curve": [ 0.163, 0.91, 1, 1 ] + }, + { + "time": 0.3333, + "angle": 45.23, + "curve": [ 0.393, 0, 0.629, 1 ] + }, + { + "time": 0.5, + "angle": -38.74, + "curve": [ 0.163, 0.91, 1, 1 ] + }, + { + "time": 0.6666, + "angle": 45.23, + "curve": [ 0.393, 0, 0.629, 1 ] + }, + { + "time": 0.8333, + "angle": -38.74, + "curve": [ 0.163, 0.91, 1, 1 ] + }, + { + "time": 1, + "angle": 45.23, + "curve": [ 0.393, 0, 0.629, 1 ] + }, + { + "time": 1.1666, + "angle": -38.74, + "curve": [ 0.163, 0.91, 1, 1 ] + }, + { "time": 1.3333, "angle": 45.23 } + ], + "scale": [ + { "time": 0, "x": 1.098, "y": 1 }, + { "time": 0.1666, "x": 1, "y": 0.826 }, + { "time": 0.3333, "x": 1.098, "y": 1 }, + { "time": 0.5, "x": 1, "y": 0.826 }, + { "time": 0.6666, "x": 1.098, "y": 1 }, + { "time": 0.8333, "x": 1, "y": 0.826 }, + { "time": 1, "x": 1.098, "y": 1 }, + { "time": 1.1666, "x": 1, "y": 0.826 }, + { "time": 1.3333, "x": 1.098, "y": 1 } + ] + }, + "right wing": { + "rotate": [ + { + "time": 0, + "angle": -39.45, + "curve": [ 0.327, 0, 0.637, 1 ] + }, + { + "time": 0.1666, + "angle": 37.67, + "curve": [ 0.163, 0.91, 1, 1 ] + }, + { + "time": 0.3333, + "angle": -39.45, + "curve": [ 0.327, 0, 0.637, 1 ] + }, + { + "time": 0.5, + "angle": 37.67, + "curve": [ 0.163, 0.91, 1, 1 ] + }, + { + "time": 0.6666, + "angle": -39.45, + "curve": [ 0.327, 0, 0.637, 1 ] + }, + { + "time": 0.8333, + "angle": 37.67, + "curve": [ 0.163, 0.91, 1, 1 ] + }, + { + "time": 1, + "angle": -39.45, + "curve": [ 0.327, 0, 0.637, 1 ] + }, + { + "time": 1.1666, + "angle": 37.67, + "curve": [ 0.163, 0.91, 1, 1 ] + }, + { "time": 1.3333, "angle": -39.45 } + ], + "scale": [ + { "time": 0, "x": 1.09, "y": 1 }, + { "time": 0.1666, "x": 1, "y": 0.819 }, + { "time": 0.3333, "x": 1.09, "y": 1 }, + { "time": 0.5, "x": 1, "y": 0.819 }, + { "time": 0.6666, "x": 1.09, "y": 1 }, + { "time": 0.8333, "x": 1, "y": 0.819 }, + { "time": 1, "x": 1.09, "y": 1 }, + { "time": 1.1666, "x": 1, "y": 0.819 }, + { "time": 1.3333, "x": 1.09, "y": 1 } + ] + }, + "tokenRoot": { + "rotate": [ + { "time": 0, "angle": 11.29 }, + { "time": 0.3333, "angle": 2.5 }, + { "time": 0.6666, "angle": -12.5 }, + { "time": 1, "angle": 0.63 }, + { "time": 1.3333, "angle": 11.29 } + ] + }, + "token": { + "rotate": [ + { "time": 0, "angle": -0.5 }, + { "time": 0.6666, "angle": 5.86 }, + { "time": 1.3333, "angle": -0.5 } + ], + "scale": [ + { "time": 0, "x": 1.181, "y": 1.181 }, + { "time": 0.3333, "x": 1, "y": 1 }, + { "time": 0.6666, "x": 1.181, "y": 1.181 }, + { "time": 1, "x": 1, "y": 1 }, + { "time": 1.3333, "x": 1.181, "y": 1.181 } + ] + }, + "star": { + "rotate": [ + { "time": 0, "angle": 28.25 }, + { "time": 0.6666, "angle": -42.08 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.6666, "x": 86.68, "y": 68.32 } + ], + "scale": [ + { "time": 0, "x": 0.439, "y": 0.439 }, + { "time": 0.6666, "x": 1, "y": 1 } + ] + }, + "star1": { + "rotate": [ + { "time": 0.2666, "angle": 13.37 }, + { "time": 0.9333, "angle": 89.61 } + ], + "translate": [ + { "time": 0.2666, "x": -12.16, "y": -2.27 }, + { "time": 0.9333, "x": -76.4, "y": 67.76 } + ], + "scale": [ + { "time": 0.2666, "x": 0.391, "y": 0.391 }, + { "time": 0.9333, "x": 0.815, "y": 0.815 } + ] + }, + "star2": { + "rotate": [ + { "time": 0.1333, "angle": -42.67 }, + { "time": 0.8, "angle": 88.41 } + ], + "translate": [ + { "time": 0.1333, "x": -18.32, "y": -18.91 }, + { "time": 0.8, "x": -57.85, "y": -97.4 } + ], + "scale": [ + { "time": 0.1333, "x": 0.211, "y": 0.211 }, + { "time": 0.8, "x": 0.652, "y": 0.652 } + ] + }, + "star3": { + "rotate": [ + { "time": 0.4333, "angle": 57.71 }, + { "time": 1.1, "angle": -105.15 } + ], + "translate": [ + { "time": 0.4333, "x": 36.1, "y": -40.52 }, + { "time": 1.1, "x": 69, "y": -78.3 } + ], + "scale": [ + { "time": 0.4333, "x": 0.24, "y": 0.24 }, + { "time": 1.1, "x": 0.776, "y": 0.776 } + ] + }, + "star4": { + "rotate": [ + { "time": 0.6, "angle": 37.65 }, + { "time": 1.2666, "angle": -102.15 } + ], + "translate": [ + { "time": 0.6, "x": 8.65, "y": -12.98 }, + { "time": 1.2666, "x": -0.99, "y": 82.82 } + ], + "scale": [ + { "time": 0.6, "x": 0.275, "y": 0.275 }, + { "time": 1.2666, "x": 1.081, "y": 1.081 } + ] + }, + "star5": { + "rotate": [ + { "time": 0, "angle": 18.27 }, + { "time": 0.3333, "angle": 83.73, "curve": "stepped" }, + { "time": 1, "angle": -47.17 }, + { "time": 1.3333, "angle": 18.27 } + ], + "translate": [ + { "time": 0, "x": -67.74, "y": -7.78 }, + { "time": 0.3333, "x": -102.83, "y": -22.36, "curve": "stepped" }, + { "time": 1, "x": -32.63, "y": 6.8 }, + { "time": 1.3333, "x": -67.74, "y": -7.78 } + ], + "scale": [ + { "time": 0, "x": 0.565, "y": 0.565 }, + { "time": 0.3333, "x": 0.791, "y": 0.791, "curve": "stepped" }, + { "time": 1, "x": 0.34, "y": 0.34 }, + { "time": 1.3333, "x": 0.565, "y": 0.565 } + ] + }, + "star6": { + "rotate": [ + { "time": 0, "angle": 25.23 }, + { "time": 0.5666, "angle": -73.06, "curve": "stepped" }, + { "time": 1.2333, "angle": 42.58 }, + { "time": 1.3333, "angle": 25.23 } + ], + "translate": [ + { "time": 0, "x": 4.55, "y": -14.21 }, + { "time": 0.5666, "x": 30.36, "y": -94.75, "curve": "stepped" }, + { "time": 1.2333, "x": 0, "y": 0 }, + { "time": 1.3333, "x": 4.55, "y": -14.21 } + ], + "scale": [ + { "time": 0, "x": 0.337, "y": 0.337 }, + { "time": 0.5666, "x": 0.955, "y": 0.955, "curve": "stepped" }, + { "time": 1.2333, "x": 0.227, "y": 0.227 }, + { "time": 1.3333, "x": 0.337, "y": 0.337 } + ] + }, + "star7": { + "rotate": [ + { "time": 0.6333, "angle": 41.11 }, + { "time": 1.3, "angle": -89.84 } + ], + "translate": [ + { "time": 0.6333, "x": 20.27, "y": 32.75 }, + { "time": 1.3, "x": -67.79, "y": -68.56 } + ], + "scale": [ + { "time": 0.6333, "x": 0.258, "y": 0.258 }, + { "time": 1.3, "x": 0.999, "y": 0.999 } + ] + }, + "star9": { + "rotate": [ + { "time": 0, "angle": 49.48 }, + { "time": 0.1333, "angle": 71.89, "curve": "stepped" }, + { "time": 0.8, "angle": -40.17 }, + { "time": 1.3333, "angle": 49.48 } + ], + "translate": [ + { "time": 0, "x": -78.75, "y": 77.18 }, + { "time": 0.1333, "x": -98.44, "y": 96.47, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 }, + { "time": 1.3333, "x": -78.75, "y": 77.18 } + ], + "scale": [ + { "time": 0, "x": 0.772, "y": 0.772 }, + { "time": 0.1333, "x": 0.91, "y": 0.91, "curve": "stepped" }, + { "time": 0.8, "x": 0.221, "y": 0.221 }, + { "time": 1.3333, "x": 0.772, "y": 0.772 } + ] + }, + "star8": { + "rotate": [ + { "time": 0, "angle": -60.17 }, + { "time": 0.2666, "angle": -109.83, "curve": "stepped" }, + { "time": 0.9333, "angle": 14.31 }, + { "time": 1.3333, "angle": -60.17 } + ], + "translate": [ + { "time": 0, "x": 44.63, "y": -41.66 }, + { "time": 0.2666, "x": 74.39, "y": -69.43, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": 0 }, + { "time": 1.3333, "x": 44.63, "y": -41.66 } + ], + "scale": [ + { "time": 0, "x": 0.452, "y": 0.452 }, + { "time": 0.2666, "x": 0.672, "y": 0.672, "curve": "stepped" }, + { "time": 0.9333, "x": 0.123, "y": 0.123 }, + { "time": 1.3333, "x": 0.452, "y": 0.452 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/examples/powerup/export/powerup.png b/examples/powerup/export/powerup.png new file mode 100644 index 000000000..1942d52fe Binary files /dev/null and b/examples/powerup/export/powerup.png differ diff --git a/examples/powerup/export/powerup.skel b/examples/powerup/export/powerup.skel new file mode 100644 index 000000000..3ded71c0c Binary files /dev/null and b/examples/powerup/export/powerup.skel differ diff --git a/examples/powerup/images/star.png b/examples/powerup/images/star.png new file mode 100644 index 000000000..49ad50bc3 Binary files /dev/null and b/examples/powerup/images/star.png differ diff --git a/examples/powerup/images/token.png b/examples/powerup/images/token.png new file mode 100644 index 000000000..39e988667 Binary files /dev/null and b/examples/powerup/images/token.png differ diff --git a/examples/powerup/images/wing.png b/examples/powerup/images/wing.png new file mode 100644 index 000000000..6c0ce3a6a Binary files /dev/null and b/examples/powerup/images/wing.png differ diff --git a/examples/powerup/license.txt b/examples/powerup/license.txt new file mode 100644 index 000000000..cd3e3b481 --- /dev/null +++ b/examples/powerup/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2013, Esoteric Software + +The images in this project may be redistributed as long as they are accompanied +by this license file. The images may not be used for commercial use of any +kind. + +The project file is released into the public domain. It may be used as the basis +for derivative work. \ No newline at end of file diff --git a/examples/powerup/powerup.spine b/examples/powerup/powerup.spine new file mode 100644 index 000000000..065b54419 Binary files /dev/null and b/examples/powerup/powerup.spine differ diff --git a/examples/raptor/export/raptor-pma.atlas b/examples/raptor/export/raptor-pma.atlas new file mode 100644 index 000000000..99c20c88f --- /dev/null +++ b/examples/raptor/export/raptor-pma.atlas @@ -0,0 +1,279 @@ + +raptor-pma.png +size: 1024,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +back_arm + rotate: true + xy: 140, 191 + size: 46, 29 + orig: 46, 29 + offset: 0, 0 + index: -1 +back_bracer + rotate: true + xy: 167, 317 + size: 39, 28 + orig: 39, 28 + offset: 0, 0 + index: -1 +back_hand + rotate: false + xy: 167, 358 + 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: 167, 437 + size: 39, 24 + orig: 39, 24 + offset: 0, 0 + index: -1 +eyes_closed + rotate: true + xy: 2, 2 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +eyes_open + rotate: true + xy: 49, 2 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +eyes_surprised + rotate: true + xy: 96, 2 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +front_arm + rotate: false + xy: 419, 544 + size: 48, 30 + orig: 48, 30 + offset: 0, 0 + index: -1 +front_bracer + rotate: false + xy: 880, 695 + size: 41, 29 + orig: 41, 29 + offset: 0, 0 + index: -1 +front_hand + rotate: true + xy: 167, 394 + size: 41, 38 + orig: 41, 38 + offset: 0, 0 + index: -1 +front_open_hand + rotate: false + xy: 880, 726 + size: 43, 44 + orig: 43, 44 + offset: 0, 0 + index: -1 +front_thigh + rotate: false + xy: 360, 545 + 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_grind + rotate: false + xy: 469, 544 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +mouth_oooo + rotate: true + xy: 894, 772 + size: 105, 30 + orig: 105, 30 + offset: 0, 0 + index: -1 +mouth_smile + rotate: true + xy: 140, 239 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +neck + rotate: true + xy: 538, 577 + 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: true + xy: 140, 145 + size: 44, 35 + orig: 44, 35 + offset: 0, 0 + index: -1 +stirrup_front + rotate: false + xy: 538, 597 + size: 45, 50 + orig: 45, 50 + offset: 0, 0 + index: -1 +stirrup_strap + rotate: false + xy: 350, 497 + 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/examples/raptor/export/raptor-pma.png b/examples/raptor/export/raptor-pma.png new file mode 100644 index 000000000..a5c861843 Binary files /dev/null and b/examples/raptor/export/raptor-pma.png differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.atlas b/examples/raptor/export/raptor.atlas similarity index 84% rename from spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.atlas rename to examples/raptor/export/raptor.atlas index c90da0078..11728a52d 100644 --- a/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.atlas +++ b/examples/raptor/export/raptor.atlas @@ -1,26 +1,26 @@ raptor.png -size: 1022,1022 +size: 1024,1024 format: RGBA8888 filter: Linear,Linear repeat: none back_arm - rotate: false - xy: 410, 545 + rotate: true + xy: 140, 191 size: 46, 29 orig: 46, 29 offset: 0, 0 index: -1 back_bracer - rotate: false - xy: 540, 548 + rotate: true + xy: 167, 317 size: 39, 28 orig: 39, 28 offset: 0, 0 index: -1 back_hand - rotate: true - xy: 504, 538 + rotate: false + xy: 167, 358 size: 36, 34 orig: 36, 34 offset: 0, 0 @@ -34,49 +34,63 @@ back_knee index: -1 back_thigh rotate: true - xy: 140, 247 + xy: 167, 437 size: 39, 24 orig: 39, 24 offset: 0, 0 index: -1 -eyes_open +eyes_closed rotate: true xy: 2, 2 size: 47, 45 orig: 47, 45 offset: 0, 0 index: -1 +eyes_open + rotate: true + xy: 49, 2 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +eyes_surprised + rotate: true + xy: 96, 2 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 front_arm rotate: false - xy: 360, 544 + xy: 419, 544 size: 48, 30 orig: 48, 30 offset: 0, 0 index: -1 front_bracer rotate: false - xy: 538, 578 + xy: 880, 695 size: 41, 29 orig: 41, 29 offset: 0, 0 index: -1 front_hand - rotate: false - xy: 538, 609 + rotate: true + xy: 167, 394 size: 41, 38 orig: 41, 38 offset: 0, 0 index: -1 front_open_hand rotate: false - xy: 894, 782 + xy: 880, 726 size: 43, 44 orig: 43, 44 offset: 0, 0 index: -1 front_thigh rotate: false - xy: 942, 849 + xy: 360, 545 size: 57, 29 orig: 57, 29 offset: 0, 0 @@ -109,16 +123,30 @@ lower_leg orig: 73, 98 offset: 0, 0 index: -1 +mouth_grind + rotate: false + xy: 469, 544 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +mouth_oooo + rotate: true + xy: 894, 772 + size: 105, 30 + orig: 105, 30 + offset: 0, 0 + index: -1 mouth_smile rotate: true - xy: 49, 2 + xy: 140, 239 size: 47, 30 orig: 47, 30 offset: 0, 0 index: -1 neck rotate: true - xy: 1001, 860 + xy: 538, 577 size: 18, 21 orig: 18, 21 offset: 0, 0 @@ -215,22 +243,22 @@ raptor_tongue offset: 0, 0 index: -1 stirrup_back - rotate: false - xy: 458, 539 + rotate: true + xy: 140, 145 size: 44, 35 orig: 44, 35 offset: 0, 0 index: -1 stirrup_front - rotate: true - xy: 81, 4 + rotate: false + xy: 538, 597 size: 45, 50 orig: 45, 50 offset: 0, 0 index: -1 stirrup_strap - rotate: true - xy: 894, 828 + rotate: false + xy: 350, 497 size: 49, 46 orig: 49, 46 offset: 0, 0 diff --git a/examples/raptor/export/raptor.json b/examples/raptor/export/raptor.json new file mode 100644 index 000000000..d2b55b74c --- /dev/null +++ b/examples/raptor/export/raptor.json @@ -0,0 +1,2621 @@ +{ +"skeleton": { "hash": "/7FMTV1eoFH7zhIaaG8BAH+NQOw", "spine": "3.4.00", "width": 1223.72, "height": 1055.62, "images": "./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": "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, + "inheritRotation": false, + "color": "ffffffff" + }, + { "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": "front_arm", + "parent": "spineboy_torso", + "length": 74.51, + "rotation": -118.16, + "x": 101.37, + "y": 9.78, + "color": "ffffffff" + }, + { "name": "torso2", "parent": "torso1", "length": 121.2, "rotation": 39.84, "x": 126.25, "y": -0.37, "color": "eaff00ff" }, + { "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": "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_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_bracer", "parent": "front_arm", "length": 39.85, "rotation": 20.3, "x": 74.52, "y": -0.41, "color": "ffffffff" }, + { "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": -2.15, + "x": 57.78, + "y": -0.02, + "scaleX": 0.73, + "scaleY": 0.823, + "inheritRotation": false, + "color": "15ff00ff" + }, + { + "name": "front_foot3", + "parent": "front_foot2", + "length": 129.88, + "rotation": -2.7, + "x": 49.71, + "y": 20.65, + "scaleX": 1.154, + "color": "15ff00ff" + }, + { "name": "front_foot_goal", "parent": "root", "rotation": -0.94, "x": -45.79, "y": -28.67, "color": "ff0000ff" }, + { "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.9, + "x": 39.98, + "y": -0.89, + "inheritRotation": false, + "color": "ffffffff" + }, + { "name": "front_leg_goal", "parent": "front_foot_goal", "x": -106.06, "y": 115.58, "color": "ff0000ff" }, + { + "name": "front_thigh", + "parent": "spineboy_hip", + "length": 77.79, + "rotation": 163.34, + "x": 15.51, + "y": 17.01, + "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": "horn_rear", "parent": "head", "length": 73.78, "rotation": 44.31, "x": 99.27, "y": -226.79, "color": "e07800ff" }, + { "name": "jaw", "parent": "head", "length": 203.76, "rotation": -140.14, "x": 29.36, "y": -40.15, "color": "ffff00ff" }, + { "name": "lower_leg", "parent": "front_thigh", "length": 111.5, "rotation": -49.62, "x": 77.92, "y": -0.1, "color": "ffffffff" }, + { "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_arm_target", "parent": "horn_rear", "rotation": -133.55, "x": 232.68, "y": 245.84, "color": "e07800ff" }, + { "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, + "inheritRotation": false, + "color": "e07800ff" + }, + { "name": "rear_foot_goal", "parent": "root", "x": 33.43, "y": 30.81, "color": "ff0000ff" }, + { "name": "rear_hand", "parent": "rear_arm2", "length": 45.8, "rotation": -76.28, "x": 85.8, "y": 0.1, "color": "e07800ff" }, + { "name": "rear_leg_goal", "parent": "rear_foot_goal", "x": -127.51, "y": 75.99, "color": "ff0000ff" }, + { + "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": "spineboy_front_arm_goal", "parent": "saddle", "x": -50.7, "y": -96.93, "color": "ff0004ff" }, + { "name": "spineboy_rear_arm_goal", "parent": "saddle", "x": -30.43, "y": -100.08, "color": "ff0001ff" }, + { "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", + "bones": [ "front_arm", "front_bracer" ], + "target": "front_arm_target" + }, + { + "name": "front_foot_goal", + "bones": [ "front_leg3", "front_foot1" ], + "target": "front_foot_goal" + }, + { + "name": "front_leg_goal", + "bones": [ "front_leg1", "front_leg2" ], + "target": "front_leg_goal", + "bendPositive": false + }, + { + "name": "rear_arm_goal", + "bones": [ "back_arm", "back_bracer" ], + "target": "rear_arm_target" + }, + { + "name": "rear_foot_goal", + "bones": [ "rear_leg3", "rear_foot1" ], + "target": "rear_foot_goal" + }, + { + "name": "rear_leg_goal", + "bones": [ "rear_leg1", "rear_leg2" ], + "target": "rear_leg_goal", + "bendPositive": false + }, + { + "name": "spineboy_front_leg_goal", + "bones": [ "front_thigh", "lower_leg" ], + "target": "spineboy_front_arm_goal", + "bendPositive": false + }, + { + "name": "spineboy_rear_leg_goal", + "bones": [ "back_thigh", "back_knee" ], + "target": "spineboy_rear_arm_goal", + "bendPositive": false + }, + { + "name": "stirrup", + "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.48, 50.63, 83.86, 46.32, 142.05, 42.17, 197.91, 3.34, 163.7, -45.86, 86.15, -47.34, 15.9, -48.68, 8.42, -120.68, -69.06, -66.81, -35.32, -20.73, -58.83, -10.35, -44.69, 9.99, -14.55, 53.35, 85.21, 6.43, 20.45, 8.2 ], + "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, 37, 36.95, 33.31, 0.91666, 38, 68.53, 41.05, 0.08333, 2, 37, 66.01999, 20.35, 0.76813, 38, 41.41, 24.39, 0.23186, 2, 37, 74.51, 16.57, 0.64468, 38, 33.49, 19.53, 0.35531, 2, 37, 70.89, 21.97, 0.29071, 38, 39.99, 19.45999, 0.70928, 3, 37, 42.77, 63.89, 0.11483, 38, 90.47, 18.95, 0.60854, 46, -17.2, 9, 0.2766, 2, 38, 101.86, 18.83, 0.45955, 46, -14.38, 20.04, 0.54044, 2, 38, 106.47, 2.08, 0.0625, 46, 2.98, 20.56, 0.9375, 1, 46, 51.32, 21.98, 1, 1, 46, 60.41, 11.1, 1, 1, 46, 72.39, 9.60999, 1, 1, 46, 100.37, -23.87, 1, 1, 46, 104.96, -40.9, 1, 1, 46, 78.37, -25.61, 1, 1, 46, 86.05, -56.84, 1, 1, 46, 52.92, -30.04, 1, 2, 38, 62.24, -43.92, 0.0625, 46, 37.18999, -33.33, 0.9375, 2, 38, 64.89, -28.65, 0.3125, 46, 22.98, -27.14, 0.6875, 2, 38, 57.69, -27.17, 0.30612, 46, 19.83, -33.78, 0.69387, 2, 37, 124.19, 3.83, 0.19395, 38, -5.09, -14.23, 0.80604, 2, 37, 110.77, -19.65, 0.3125, 38, -16.87999, 10.1, 0.6875, 2, 37, 99.14, -19.2, 0.51612, 38, -9.93, 19.44, 0.48386, 2, 37, 43.73, -17.03, 0.9375, 38, 23.17, 63.92, 0.0625, 1, 37, 35.41, -29.77, 1, 1, 37, -15.68, -28.02, 1, 1, 37, -13.87, 24.65, 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, 16, 56, 15, 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, 20, 91, 56, 56, 19, 20, 17, 19, 56, 18, 19, 17, 93, 91, 31, 55, 34, 35, 33, 34, 55, 61, 33, 55, 61, 32, 33, 93, 32, 61, 56, 91, 93, 56, 93, 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, 16, 147.48, -145.48, 1, 1, 16, 89.4, -281.62, 1, 1, 16, -28.24, -285.93, 1, 1, 16, -14.58, -194.68, 1, 4, 12, 238.39, -84.13, 0.20851, 15, 32.09999, -140.85, 0.19336, 16, -61.96, -132.26, 0.42115, 35, 129.57, 6.39, 0.17696, 5, 2, 332.7, 63.71, 0.06905, 12, 199.57, -83.03, 0.29424, 15, 3.69, -114.37, 0.2194, 16, -85.43, -101.32, 0.30859, 35, 127.34, -26.64, 0.1087, 5, 2, 307.08, 43.5, 0.11018, 12, 166.95, -82.12999, 0.37282, 15, -20.18, -92.14, 0.24572, 16, -105.18, -75.33999, 0.21862, 35, 123.08, -64.79, 0.05264, 4, 2, 307.75, 5.7, 0.18627, 12, 143.25, -111.59, 0.58009, 15, -57.43, -98.57, 0.12363, 16, -142.98, -75.33, 0.10999, 2, 2, 308.7, -30.55, 0.25, 12, 120.75, -140.04, 0.75, 2, 2, 213.94, -142.7, 0.75, 12, -23.83, -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, 4, 58, 118.47, 114.74, 0.07383, 59, 17.17, 122.49, 0.17504, 60, -100.71, 132.55, 0.06818, 1, -166.91, -67.94999, 0.68294, 4, 58, 170.4, 123.13, 0.06537, 59, 66.71, 104.77, 0.20999, 60, -53.08, 110.21, 0.12016, 1, -217.69, -61.33, 0.60447, 6, 58, 221.11, 131.31, 0.02179, 59, 115.07, 87.47, 0.23058, 60, -6.58, 88.39, 0.16258, 61, -168.92, 31, 0.02826, 62, -282.82, -90.19, 0.029, 1, -267.66, -55.14, 0.52776, 5, 59, 146.51, 86.08, 0.23635, 60, 26.66, 83.39, 0.19338, 61, -134.99, 41.34, 0.06624, 62, -257.52, -60.65, 0.06962, 1, -298.87, -61.99, 0.43436, 5, 59, 178.73, 86.41, 0.22521, 60, 56.68, 81.29, 0.20997, 61, -107.13, 46.31, 0.11271, 62, -232.44, -51.26, 0.12148, 1, -328.68, -69.24, 0.3306, 5, 59, 203.26, 86.51, 0.21603, 60, 83.06, 77.01999, 0.22457, 61, -79.56, 53.53, 0.13939, 62, -210.89, -28.3, 0.15618, 1, -354.01, -75.41, 0.26379, 5, 59, 238.06, 85.41, 0.20114, 60, 115.65, 74.66, 0.2315, 61, -49.53, 60.58, 0.16455, 62, -185.49, -14.98, 0.19123, 1, -385.33, -83.15, 0.21156, 5, 59, 255.33, 78.85, 0.18224, 60, 133.83, 63.18, 0.23194, 61, -27.04, 56.84, 0.18907, 62, -163.58, -5.26, 0.22658, 1, -406.45, -79.89, 0.17015, 5, 59, 275.48, 71.62, 0.16169, 60, 152.97, 53.58, 0.22885, 61, -5.82, 53.94, 0.21292, 62, -142.85, 0.11, 0.26159, 1, -427.72, -77.47, 0.13493, 5, 59, 313.81, 53.61, 0.14198, 60, 188.04, 35.82, 0.22293, 61, 31.84, 49.3, 0.23478, 62, -106.46, 7.49, 0.29326, 1, -465.96, -72.58999, 0.10702, 5, 59, 345.74, 45.54, 0.12502, 60, 219.6, 19.28, 0.2179, 61, 68.31, 43.02, 0.25622, 62, -70.12999, 18.19, 0.32248, 1, -502.09, -68.19, 0.07835, 4, 59, 390.81, 21.3, 0.11758, 60, 261.62, -3.66, 0.22607, 61, 114.55, 37.83, 0.29087, 62, -26.15, 30.34, 0.36547, 4, 59, 423.87, -11.11, 0.10536, 60, 291.46, -39.06, 0.21954, 61, 154.83, 14.99, 0.30098, 62, 19.91, 25.67, 0.37409, 4, 59, 456.68, -43.27, 0.09949, 60, 321.06, -74.19999, 0.21749, 61, 194.79, -7.66, 0.30788, 62, 65.62, 21.04, 0.37513, 4, 59, 480.34, -100.28, 0.10045, 60, 339.2, -133.2, 0.22026, 61, 232.3, -56.69, 0.31103, 62, 119.7, -8.68999, 0.36824, 4, 59, 424.34, -67.51999, 0.10379, 60, 286.57, -95.27, 0.23087, 61, 169.77, -39.4, 0.30828, 62, 55.51, -18.08, 0.35705, 4, 59, 387.08, -53.84, 0.11505, 60, 250.77, -78.11, 0.2454, 61, 130.24, -35.75, 0.30092, 62, 17.87, -30.67, 0.3386, 4, 59, 346.04, -38.78, 0.13471, 60, 211.34, -59.22, 0.26271, 61, 86.7, -31.72, 0.2888, 62, -23.59, -44.54, 0.31376, 5, 58, 449.17, 125.97, 0.02419, 59, 311.45, -35.25, 0.16384, 60, 175.89, -56.83, 0.2727, 61, 51.53, -43.14, 0.26317, 62, -52.88, -67.87, 0.27607, 5, 58, 418.38, 93.72, 0.05913, 59, 269.72, -40.64, 0.19681, 60, 135.19, -53.82, 0.27688, 61, 13.42, -53.11, 0.23219, 62, -82.03, -93.66, 0.23497, 5, 58, 390.82, 86.58, 0.10638, 59, 241.19, -39.8, 0.2354, 60, 105.59, -52.93, 0.27331, 61, -16.25, -62.16, 0.19459, 62, -108.34, -111.24, 0.19028, 5, 58, 364.8, 62.48, 0.14347, 59, 207.71, -42.14, 0.28099, 60, 73.33, -49.43, 0.26867, 61, -46.11, -70.49, 0.15764, 62, -129.51, -133.56, 0.1492, 5, 58, 345.49, 47.53, 0.18499, 59, 182.34, -50.62, 0.33114, 60, 45.87, -56.62, 0.25881, 61, -71.57, -84.96, 0.1174, 62, -150.85, -153.35, 0.10763, 5, 58, 319.95, 15.15, 0.23755, 59, 145.6, -61.95, 0.39396, 60, 9.60999, -63.26, 0.24619, 61, -101.06, -105.58, 0.06443, 62, -165.65, -187.83, 0.05784, 3, 58, 276.58, -30.61, 0.29942, 59, 85.52, -81.11, 0.46774, 60, -52.01, -76.62, 0.23283, 3, 58, 214.5, -70.36, 0.32855, 59, 11.97, -85.98, 0.48601, 60, -125.69, -74.48, 0.18543, 2, 58, 147.14, -113.5, 0.59565, 59, -67.83999, -91.26, 0.40433, 2, 2, -113.14, 135.84, 0.24192, 58, 91.72, -112.59, 0.75807, 2, 2, -42.12, 116.77, 0.14515, 58, 18.2, -111.17, 0.85484, 1, 2, 44.2, 107.1, 1, 2, 2, 140.09, 96.35, 0.22579, 12, 72.58999, 65.41, 0.7742, 4, 2, 137.69, 169.35, 0.05644, 12, 117.5, 123, 0.24355, 15, 78.3, 94.48, 0.2125, 16, 23.7, 91.74, 0.4875, 2, 15, 171.15, 111.98, 0.25, 16, 118.17, 93.15, 0.75, 1, 16, 158.96, -25.58, 1, 1, 1, -40.63, -86.01, 1, 3, 2, 67.33999, -86.66, 0.33215, 58, -137.02, 59.92, 0.08303, 1, 92.54, -90.61, 0.5848, 2, 2, 170.13, -66.29, 0.75, 12, -8.53, -78.72, 0.25, 2, 2, 231.74, -8.12, 0.4, 12, 76.03, -73.51999, 0.6, 4, 2, 222.04, 70.41, 0.17551, 12, 118.9, -7, 0.55823, 15, -6.58, -3.99, 0.17739, 16, -76.73, 9.18, 0.08884, 1, 16, 50.43, -46.56, 1, 1, 12, -9.88, 20.65, 1, 2, 2, -53.22, 20.53, 0.2, 58, 5.8, -15.09, 0.8, 3, 2, -180.71, 32.22, 0.08564, 58, 132.35, 4.23999, 0.56215, 59, -23.98, 19.01, 0.35219, 3, 58, 246.39, 57.53, 0.30273, 59, 101.61, 10.65, 0.46989, 60, -27.28, 13.2, 0.22737, 5, 58, 346.99, 126.85, 0.13479, 59, 223.17, 22.83, 0.28279, 60, 94.88, 13.77, 0.24481, 61, -47.85, -3.72, 0.17322, 62, -158.02, -73.16, 0.16438, 4, 59, 367.51, -9.96, 0.14656, 60, 235.45, -32.57, 0.23073, 61, 100.06, 1.62, 0.29607, 62, -24.81, -8.63, 0.32661, 4, 59, 440.24, -55.6, 0.10821, 60, 303.52, -84.91, 0.21897, 61, 182.07, -23.8, 0.31097, 62, 60.48, 1.14, 0.36182, 3, 12, 174.99, 22.22, 0.2, 15, 54.82, -19.14, 0.6, 16, -18.79999, -16.2, 0.2, 3, 58, 189.25, 30.83, 0.33253, 59, 38.68, 14.84, 0.48076, 60, -89.52, 23.34, 0.18669, 5, 58, 295.08, 91.08, 0.22891, 59, 160.45, 16.54, 0.38754, 60, 31.85, 13.48, 0.2306, 61, -106.86, -25.89, 0.08042, 62, -203.08, -117.24, 0.0725, 5, 58, 414.43, 146.25, 0.07359, 59, 291.61, 7.27, 0.20198, 60, 161.53, -8.2, 0.23762, 61, 22.27, -1.17999, 0.24024, 62, -94.86, -42.56, 0.24654, 4, 59, 404.01, -32.87, 0.12351, 60, 269.61, -58.84, 0.22261, 61, 141.21, -11.13, 0.30609, 62, 17.98, -3.72, 0.34777, 1, 16, 26.4, -166.06, 1, 1, 16, 87.21, -106.12, 1, 1, 16, 108.19, -49.62, 1, 2, 16, 61.73, -82.12999, 0.50021, 35, 4.42, 52.83, 0.49978, 2, 16, 22.84, -109.4, 0.50021, 35, 51.52, 46.73, 0.49978, 4, 12, 247.12, -50.52, 0.06545, 15, 60.86, -121.4, 0.06069, 16, -30.3, -118, 0.49079, 35, 96.58, 17.21999, 0.38305, 1, 2, 26.73, 14.8, 1, 2, 2, -107.97, 25.67, 0.24192, 58, 60.17, -6.91, 0.75807, 4, 2, 235.53, 102.96, 0.0761, 12, 150.1, 9.35, 0.35533, 15, 27.64, -12.34, 0.41675, 16, -44.43, -4.87, 0.1518, 3, 2, 227.15, 28.49, 0.31015, 12, 95.96, -42.46, 0.60548, 15, -47.23, -15.44, 0.08435, 2, 16, 5.19, -153.1, 0.87618, 35, 90.96, 71.21, 0.12381, 4, 12, 243.13, -60.59, 0.10669, 15, 51.21, -126.33, 0.09893, 16, -40.65, -121.21, 0.47072, 35, 105.71, 17.33, 0.32363, 1, 16, 23.69, -185.21, 1, 1, 16, 79.64, -175.94, 1, 1, 16, 93.96, -187.56, 1, 1, 16, 87.07, -206.55, 1, 1, 16, 64.19999, -216.74, 1, 1, 16, 52.23, -203.68, 1, 1, 16, 59.24, -187.03, 1, 1, 16, 64.26, -223.8, 1, 1, 16, 89.44, -211.41, 1, 1, 16, 102.04, -186.95, 1, 1, 16, 83.1, -166.14, 1, 1, 16, 46.84, -186.41, 1, 1, 16, 50.32, -204.36, 1, 1, 16, 41.7, -206.59, 1, 1, 16, 61.87, -230.97, 1, 5, 58, 374.97, 143.6, 0.10291, 59, 256.29, 17.42, 0.23985, 60, 127.43, 2.07, 0.2431, 61, -13.35, -3.05, 0.20854, 62, -128.14, -55.46, 0.20557, 4, 59, 327.21, 4.42, 0.17789, 60, 196.28, -19.32, 0.24248, 61, 58.71, -1.04999, 0.28055, 62, -62.24, -26.21, 0.29905, 5, 58, 318.32, 113.62, 0.17774, 59, 192.26, 20.14, 0.33383, 60, 64.19, 12.44, 0.24171, 61, -76.55, -13.67, 0.12849, 62, -182.56, -89.31, 0.11821, 2, 16, 56.98, -162.99, 0.89259, 35, 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, 13, 3.06, 31.88, 0.51075, 12, 66.56, -109.48, 0.48924, 1, 13, 35.87, 35.62, 1, 2, 13, 60.94, 27.12, 0.8464, 14, 46.49, 31.12, 0.15358, 2, 13, 74.05, 22.67, 0.3492, 14, 36.5, 21.53, 0.65078, 3, 13, 67, 31.58, 0.10937, 14, 47.66, 23.68, 0.78125, 27, -40.93, -19.44, 0.10937, 2, 14, 86.98, 31.24, 0.65078, 27, -25.75, 17.61, 0.3492, 2, 14, 103.83, 34.49, 0.34375, 27, -19.24, 33.49, 0.65625, 2, 14, 114.04, 19.51, 0.10937, 27, -1.11, 33.84, 0.89062, 1, 27, 53.62, 34.88, 1, 1, 27, 96.03, -19.16, 1, 1, 27, 104.2, -47.31, 1, 1, 27, 71.33999, -23.98, 1, 1, 27, 81.39, -64.61, 1, 1, 27, 76.8, -68.81, 1, 1, 27, 46.65, -34.25, 1, 2, 14, 73.12999, -45.76, 0.10937, 27, 31.14, -36.12, 0.89062, 2, 14, 73.98, -26.9, 0.34375, 27, 15.82, -25.09, 0.65625, 2, 14, 65.1, -26.69, 0.65078, 27, 10.78, -32.41, 0.3492, 3, 13, 133.56, 9.13, 0.10937, 14, -2.94, -25.03, 0.78125, 27, -27.84, -88.47, 0.10937, 2, 13, 123.67, -14.42, 0.3492, 14, -19.29, -5.39, 0.65078, 2, 13, 97.41, -15.43, 0.8464, 14, -8.08, 18.37, 0.15358, 1, 13, 45.46, -17.43, 1, 2, 13, 40.68999, -27.17, 0.45035, 12, -1.69, -93.8, 0.54964, 2, 13, -2.74, -29.63, 0.44352, 12, 18.99, -72.93, 0.55646, 1, 12, 32.11, -48.45, 1, 1, 12, 57.56, -67.43, 1, 1, 12, 84.38, -87.42, 1, 2, 13, 16.44, 5.21, 0.7182, 12, 46.31, -101.86, 0.28178, 2, 13, -4.51, 5.32, 0.48851, 12, 52.82, -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, 41, 42, 44, 43, 9, 10, 42, 43, 10, 41, 43, 42, 10, 13, 42, 11, 13, 10, 13, 11, 12, 13, 44, 42, 14, 15, 13, 45, 8, 9, 45, 40, 8, 16, 40, 45, 17, 40, 16, 16, 45, 15, 15, 45, 44, 45, 41, 44, 15, 44, 13, 45, 9, 43, 45, 43, 41, 19, 21, 38, 20, 21, 19, 39, 38, 6, 39, 6, 7, 40, 39, 7, 40, 7, 8, 18, 19, 38, 18, 38, 39, 17, 39, 40, 18, 39, 17, 47, 25, 48, 24, 25, 47, 35, 48, 34, 47, 48, 35, 51, 24, 47, 23, 24, 51, 3, 34, 2, 35, 34, 3, 36, 51, 47, 36, 47, 35, 4, 35, 3, 36, 35, 4, 37, 22, 23, 21, 22, 37, 36, 37, 23, 36, 23, 51, 5, 37, 36, 5, 36, 4, 6, 37, 5, 38, 21, 37, 38, 37, 6, 29, 30, 46, 32, 31, 0, 46, 31, 32, 28, 29, 46, 46, 27, 28, 32, 50, 46, 50, 27, 46, 33, 32, 0, 33, 0, 1, 49, 50, 32, 33, 49, 32, 26, 27, 50, 26, 50, 49, 25, 26, 49, 48, 49, 33, 25, 49, 48, 34, 33, 1, 48, 33, 34, 34, 1, 2 ], + "vertices": [ 2, 20, 128.03, 88.47, 0.8504, 1, 158.83, -71.91, 0.14959, 2, 20, 219.55, 53.15, 0.77988, 21, -48.04, -38.58, 0.22011, 2, 20, 266.3, 35.09999, 0.53544, 21, -36.73, 10.22, 0.46455, 2, 20, 286.89, 9.79, 0.35166, 21, -14.56, 34.14, 0.64832, 2, 20, 281.54, -41.24, 0.09228, 21, 36.71, 36, 0.90771, 3, 20, 271.53, -136.86, 0.05786, 21, 132.77, 39.48, 0.71425, 22, 34.99, 78.76, 0.22787, 3, 21, 158.21, 55.17, 0.5308, 22, 52.65, 54.63, 0.38143, 23, 7.01, 85.54, 0.08776, 5, 21, 167.14, 99.49, 0.21498, 22, 97.55, 49.25, 0.35357, 23, 28.72, 45.87, 0.14219, 24, -21.26, 49.99, 0.22491, 25, -72.29, 25.96, 0.06431, 5, 21, 154.22, 105.55, 0.07537, 22, 102.57, 62.6, 0.23051, 23, 42.51, 49.55, 0.28379, 24, -7.06, 51.39, 0.27004, 25, -58.17, 28.03, 0.14026, 4, 22, 109.72, 83.39, 0.11607, 23, 64.08999, 55.23, 0.08123, 24, 15.12, 53.51, 0.36961, 25, -36.09, 31.19, 0.43307, 1, 25, 35.8, 41.81, 1, 1, 25, 128.11, 17.93, 1, 1, 25, 188.72, -29.42, 1, 2, 24, 93.29, -7.6, 0.47999, 25, 44.86, -26.17, 0.52, 2, 24, 133.17, -49.83, 0.776, 25, 86.69, -66.47, 0.22399, 2, 24, 78.78, -50.15, 0.76799, 25, 32.38, -69.36, 0.232, 1, 24, -4.91, -33.55, 1, 3, 22, 155.04, -5.13, 0.35917, 23, 17.87999, -32.5, 0.30632, 24, -44.62, -25.61, 0.33449, 4, 21, 254.98, 126.27, 0.10154, 22, 131.21, -36.2, 0.54211, 23, -21.24, -31.17, 0.20873, 24, -83.01999, -17.96999, 0.1476, 3, 21, 240.33, 7.81, 0.25586, 22, 11.94, -30.98, 0.61614, 23, -86.31, 68.9, 0.12797, 2, 21, 239.26, -23.1, 0.45486, 22, -18.95999, -32.37, 0.54513, 3, 20, 187.65, -209.73, 0.09777, 21, 216.66, -33.34999, 0.58892, 22, -30.97, -10.65, 0.3133, 2, 20, 163.85, -128.67, 0.19603, 21, 139.75, -68.26, 0.80396, 2, 20, 165.74, -94.49, 0.31962, 21, 105.59, -71.26, 0.68037, 2, 20, 166.39, -79.07, 0.46225, 21, 90.23, -72.76, 0.53774, 2, 20, 166.49, -74.17, 0.53785, 21, 85.42, -73.28, 0.46213, 2, 20, 141.54, -82.46, 0.73138, 21, 97.13, -96.82, 0.26861, 2, 20, 99.76, -97.08, 0.85324, 21, 117.34, -136.23, 0.14675, 2, 20, 45.01, -114.56, 0.83615, 1, -51.09, -135.29, 0.16384, 2, 20, -16.2, -74.76, 0.62989, 1, -42.95, -58.38, 0.3701, 2, 20, -74.73, -19.33, 0.31468, 1, -52.66, 17.54999, 0.68531, 2, 20, 1.67, 76.75, 0.25576, 1, 70.07, 18.78, 0.74423, 1, 20, 93.54, 4.13, 1, 2, 20, 185.14, -6.66, 0.75461, 21, 15.98, -64.26999, 0.24538, 2, 20, 217.11, -18.75, 0.50844, 21, 23.47, -30.93, 0.49154, 2, 20, 225.63, -32.91999, 0.32527, 21, 36.3, -20.5, 0.67472, 2, 20, 223, -84.73, 0.20192, 21, 87.96, -15.86, 0.79807, 3, 20, 235.61, -168.06, 0.0809, 21, 168.69, 8.29, 0.57147, 22, 6.74, 40.47, 0.34761, 3, 21, 191.79, 35.8, 0.32545, 22, 36, 19.62, 0.57243, 23, -31.14, 78.74, 0.10211, 4, 21, 206.64, 111.53, 0.10808, 22, 112.69, 10.82, 0.52067, 23, 6.25, 11.23, 0.23517, 24, -49.03, 19.43, 0.13606, 3, 22, 130.6, 26.41, 0.35067, 23, 29.35, 5.71, 0.28241, 24, -27.12, 10.25, 0.3669, 2, 24, 67.46, 3.16, 0.384, 25, 18.54999, -16.62999, 0.61599, 1, 25, 19.07, -14.51, 1, 2, 24, 36, 24.95, 0.384, 25, -13.89, 3.64, 0.61599, 2, 24, 86.23, -6.55, 0.48799, 25, 37.75, -25.46, 0.512, 4, 21, 164.9, 153.55, 0.02263, 22, 151.18, 56, 0.23908, 23, 65.44, 5.55, 0.19254, 24, 8.45, 4.27, 0.54574, 2, 20, -9.28, -17.5, 0.59605, 1, 7.72, -30.85, 0.40393, 2, 20, 195.9, -53.81, 0.42368, 21, 61.11, -47.06, 0.5763, 2, 20, 190.1, -48.45, 0.53231, 21, 56.61, -53.56, 0.46768, 2, 20, 161.26, -48.26, 0.79873, 21, 60.44, -82.12999, 0.20126, 2, 20, 120.37, -58.54, 0.85455, 21, 76.31, -121.18, 0.14544, 2, 20, 197.37, -69.23, 0.3355, 21, 76.17, -43.46, 0.66449 ], + "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, 13, 14, 16, 47, 15, 15, 12, 13, 15, 47, 12, 18, 46, 17, 18, 45, 46, 17, 47, 16, 17, 46, 47, 47, 10, 11, 47, 46, 10, 47, 11, 12, 45, 18, 19, 44, 45, 20, 20, 45, 19, 20, 21, 44, 46, 9, 10, 46, 45, 9, 45, 44, 9, 21, 43, 44, 44, 8, 9, 44, 7, 8, 44, 43, 7, 21, 22, 43, 43, 22, 42, 43, 42, 7, 22, 23, 24, 24, 42, 22, 7, 42, 6, 42, 41, 6, 6, 41, 5, 24, 26, 42, 42, 26, 41, 24, 25, 26, 5, 40, 4, 5, 41, 40, 41, 28, 40, 26, 27, 41, 41, 27, 28, 40, 39, 4, 28, 29, 40, 40, 29, 39, 4, 39, 3, 39, 2, 3, 29, 30, 39, 39, 38, 2, 39, 30, 38, 38, 1, 2, 30, 37, 38, 38, 37, 1, 30, 31, 37, 31, 36, 37, 31, 32, 36, 32, 33, 36, 37, 0, 1, 37, 36, 0, 33, 34, 36, 36, 35, 0, 36, 34, 35 ], + "vertices": [ 1, 40, 53.94, 69.15, 1, 1, 40, 126.23, 67.31, 1, 2, 40, 226.42, 31.13, 0.9375, 41, -30.87, -1.11, 0.0625, 2, 40, 240.84, 25.33, 0.7, 41, -25.64, 13.52, 0.3, 2, 40, 246.67, 8.05, 0.3, 41, -8.60999, 20.02, 0.7, 3, 40, 240.81, -115.25, 0.0625, 41, 114.8, 19.01, 0.875, 42, 9.47999, 59.16, 0.0625, 2, 41, 131.07, 29.69, 0.7, 42, 22.11, 44.35, 0.3, 2, 41, 146.06, 39.54, 0.3, 42, 33.75999, 30.71, 0.7, 3, 41, 152.6, 65.01, 0.12566, 42, 59.85, 27.41, 0.75203, 43, 15.85, 48.05, 0.12229, 3, 41, 154.28, 71.58999, 0.05444, 42, 66.58999, 26.56, 0.78401, 43, 16.71999, 41.31, 0.16154, 3, 42, 71.19, 35.75999, 0.64716, 43, 26.78, 39.16999, 0.13169, 44, -67.32, 18.95999, 0.22114, 3, 42, 87.93, 69.21, 0.0625, 43, 63.37, 31.39, 0.675, 44, -30.17, 23.3, 0.26249, 2, 43, 113.82, 35.72, 0.1038, 44, 16.23, 43.56, 0.89619, 1, 44, 128.14, 12.02, 1, 1, 44, 161.85, -15.81, 1, 2, 43, 90.98, -23.36, 0.0138, 44, 13.52, -19.71999, 0.98619, 2, 43, 62.97, -25.81, 0.7, 44, -12.23, -31.02, 0.3, 3, 42, 115.12, -1.33, 0.08333, 43, 1.93, -12.66, 0.83333, 44, -74.26, -38.09999, 0.08333, 2, 42, 106.11, -23.53, 0.3, 43, -21.8, -9.52, 0.7, 2, 42, 97.43, -44.9, 0.7, 43, -44.67, -6.51, 0.3, 2, 42, 84.26, -40.68999, 0.9375, 43, -43.9, 7.29, 0.0625, 1, 42, 49.18, -29.46, 1, 2, 41, 206.75, 5.37, 0.13333, 42, 7.44, -33.77, 0.86666, 2, 41, 219.64, -20.52, 0.36111, 42, -16.64, -49.8, 0.63888, 2, 41, 208.4, -37.82, 0.72083, 42, -35.22, -40.82, 0.27916, 2, 41, 200.49, -50.02, 0.91666, 42, -48.31, -34.48, 0.08333, 1, 41, 161.1, -36.97, 1, 2, 40, 150.1, -116.76, 0.08333, 41, 119.88, -71.55, 0.91666, 2, 40, 154.99, -70.71, 0.42846, 41, 73.68, -68.47, 0.57153, 2, 40, 150.3, -65.26999, 0.35604, 41, 68.42, -73.36, 0.64395, 2, 40, 146.51, -60.87, 0.59147, 41, 64.17, -77.32, 0.40852, 2, 40, 115.12, -75.08, 0.8446, 41, 79.61, -108.13, 0.15538, 1, 40, 63.33, -98.53, 1, 1, 40, 21.78, -94.55, 1, 1, 40, -66.69, -32.04, 1, 1, 40, -6.62, 52.97, 1, 1, 40, 58.14, -6, 1, 1, 40, 121.17, 2.44, 1, 1, 40, 188.87, -12.1, 1, 2, 40, 197.11, -18.42, 0.7, 41, 19.79, -28.44, 0.3, 2, 40, 203.98, -28.61, 0.3, 41, 29.69, -21.17, 0.7, 1, 41, 136.67, -7.42, 1, 2, 41, 164.32, 0.66, 0.7, 42, -2.53, 7.73, 0.3, 2, 41, 177.97, 21.57, 0.25, 42, 19.92, -3.19, 0.75, 1, 42, 71.93, -6.29, 1, 2, 42, 79.66, -3.72, 0.7, 43, -9.28, 21.04, 0.3, 2, 42, 87.98, 7.25, 0.3125, 43, 3.42, 15.76, 0.6875, 3, 42, 114.16, 61.85, 0.04, 43, 62.84, 4.15, 0.7, 44, -21.95, -2.66, 0.26 ], + "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.99999, 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, 35, 28.6, 68.85, 1, 1, 35, 69.65, 38.95, 1, 1, 35, 150.72, 72.87999, 1, 1, 35, 186.16, 74.79, 1, 1, 35, 199.76, 159.69, 1, 1, 35, 213.35, 148.16, 1, 1, 35, 242.43, 74.42, 1, 1, 35, 230.31, -13.08, 1, 1, 35, 189.56, -71.99, 1, 1, 35, 132.76, -105.6, 1, 1, 35, 83.71, -55.39, 1, 2, 16, -18.31, 12.1, 0.67732, 35, -0.04, -70.76, 0.32267, 1, 16, 113.44, 16.95, 1, 1, 16, 116.36, -62.48, 1, 1, 35, 1.86, 5.43, 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": [ 7, 8, 6, 9, 10, 13, 13, 11, 12, 6, 8, 19, 8, 9, 19, 9, 13, 19, 13, 10, 11, 19, 22, 6, 13, 14, 19, 19, 14, 22, 6, 22, 5, 22, 20, 5, 5, 20, 4, 14, 15, 22, 22, 15, 20, 20, 21, 4, 15, 16, 20, 4, 21, 3, 20, 16, 21, 2, 3, 0, 3, 21, 0, 0, 1, 2, 21, 16, 18, 16, 17, 18, 21, 18, 0 ], + "vertices": [ 1, 50, 3.9, -3.27, 1, 1, 50, 4.25, 15.05, 1, 1, 50, 13.24, 20.28, 1, 2, 50, 23.42, 21.2, 0.7, 51, -15.2, 21.22, 0.3, 3, 50, 41.11, 22.87, 0.3, 51, 2.48, 22.89, 0.6375, 52, -33.83, 24.96, 0.0625, 3, 50, 52.07, 21.72, 0.0625, 51, 13.43, 21.74, 0.6375, 52, -22.97, 23.11, 0.3, 2, 51, 18.39, 20.76, 0.25, 52, -18.09, 21.82, 0.75, 1, 52, -18.76, 33.09, 1, 1, 52, 49.92, 31.57, 1, 1, 52, 53.21, 25, 1, 1, 52, 53.11, -27.48, 1, 1, 52, 49.74, -31.27, 1, 1, 52, -20.73, -36.75999, 1, 1, 52, -23.82, -22.28, 1, 3, 50, 53.48, -24.61, 0.0625, 51, 14.84, -24.59, 0.575, 52, -24.51, -23.21, 0.3625, 3, 50, 41.43999, -26.12, 0.3, 51, 2.81, -26.09, 0.6375, 52, -36.62, -23.95, 0.0625, 2, 50, 24.38, -26.12, 0.7, 51, -14.24, -26.1, 0.3, 1, 50, 5.57, -26.12, 1, 1, 50, 3.54, -22.64, 1, 1, 52, -23.08, -0.04, 1, 2, 50, 41.66, -1.72, 0.3125, 51, 3.03, -1.7, 0.6875, 2, 50, 23.85, -2.46, 0.7, 51, -14.77, -2.44, 0.3, 2, 51, 13.95, -1.5, 0.64582, 52, -23.94, -0.11, 0.35416 ], + "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.26, 33.87, 0.3125, 3, 63, 39.09, 19.45, 0.3125, 64, -13.41, 20.86, 0.625, 65, -51.54, 33.37, 0.0625, 3, 63, 71.56, 19.02, 0.0625, 64, 18.58, 15.39, 0.625, 65, -21.56, 20.92, 0.3125, 2, 64, 55.03, 16.85, 0.3125, 65, 14.29, 14.23, 0.6875, 2, 64, 93.34, 18.39, 0.08333, 65, 51.98, 7.21, 0.91666, 1, 65, 56.09, -4.5, 1, 2, 64, 85.06, -1.49, 0.08333, 65, 39.48, -10.33, 0.91666, 2, 64, 54.22, -9.18, 0.3125, 65, 7.71, -10.96, 0.6875, 3, 63, 75.14, -14.72, 0.0625, 64, 16.87, -18.5, 0.625, 65, -30.77, -11.73, 0.3125, 3, 63, 38.8, -25.8, 0.3125, 64, -20.74, -23.8, 0.625, 65, -68.62, -8.53, 0.0625, 2, 63, 2.4, -35.77, 0.6875, 64, -58.25, -27.99, 0.3125, 2, 63, -17.28, -40.62, 0.91666, 64, -78.44999, -29.71, 0.08333, 1, 63, -59.91, 8.18, 1, 2, 63, -26.13, 37.68999, 0.91666, 64, -75.01999, 49.02, 0.08333 ], + "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.71, 8.03, 0.80344, 57, -17.42, 11.02, 0.19655, 2, 56, 37.95, 8.04, 0.59978, 57, -4.36, 8.87, 0.40021, 2, 56, 50.88, 8.04, 0.36895, 57, 8.39, 6.77, 0.63103, 2, 56, 65.92, 12.27, 0.17748, 57, 23.91, 8.47999, 0.82251, 2, 56, 81.72, 16.7, 0.05943, 57, 40.23, 10.28, 0.94056, 2, 56, 98.82, 25.04, 0.01209, 57, 58.46, 15.71, 0.9879, 2, 56, 114.44, 11.57, 0.00191, 57, 71.67, -0.11, 0.99808, 2, 56, 100.47, -4.61, 0.01816, 57, 55.25, -13.81, 0.98182, 2, 56, 78.79, -4.14, 0.07487, 57, 33.93999, -9.81, 0.92512, 2, 56, 65.83, -6.24, 0.2028, 57, 20.81, -9.76, 0.79719, 2, 56, 49.78, -8.83, 0.39971, 57, 4.55, -9.7, 0.60028, 2, 56, 37.93, -10.97, 0.62658, 57, -7.48, -9.88, 0.37341, 2, 56, 25.85, -13.15, 0.82034, 57, -19.75, -10.06, 0.17965, 2, 56, 0.25, -18.03, 0.95288, 57, -45.81, -10.7, 0.04711, 2, 56, -17.83, -2.43, 0.97709, 57, -61.11, 7.63, 0.0229, 2, 56, 1.57, 20.07, 0.94774, 57, -38.29, 26.67, 0.05225, 2, 56, 10.84, -1.23, 0.97709, 57, -32.62, 4.14, 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 } + } + } +}, +"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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.9, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.7, "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.7, "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.7, "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 } + ] + } + } + }, + "empty": {}, + "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 } + ] + } + }, + "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.82 ] + }, + { "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.9, "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.9, "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.9, "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": 36.9 }, + { "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": 27.74 }, + { "time": 1.0666, "angle": 36.9 } + ], + "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.9, "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": -1.65 }, + { "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": 10.93 }, + { "time": 1.0666, "angle": -1.65 } + ], + "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": 314, + "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, -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": 314, + "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, -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": 138, + "vertices": [ -2.23608, 21.95403, 21.54915, -4.7554 ] + }, + { + "time": 0.6, + "offset": 138, + "vertices": [ 7.17962, 15.14358, 15.26523, -6.91741 ] + }, + { + "time": 0.7333, + "offset": 110, + "vertices": [ -0.82485, 0.73406, -0.01284, -1.10443, 0, 0, 0, 0, 1.4866, -2.59426, 0.98071, 2.82342, 2.7366, -10.49935, 6.12506, 8.95282, -2.60873, -2.28384, 3.43417, -0.47045, -2.28305, -4.76037, 5.08892, 1.40078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 ] + }, + { "time": 0.8, "curve": "stepped" }, + { "time": 0.9666, "curve": "stepped" }, + { "time": 1.0666 } + ] + } + } + } + } +} +} \ No newline at end of file diff --git a/examples/raptor/export/raptor.png b/examples/raptor/export/raptor.png new file mode 100644 index 000000000..503d1c446 Binary files /dev/null and b/examples/raptor/export/raptor.png differ diff --git a/examples/raptor/export/raptor.skel b/examples/raptor/export/raptor.skel new file mode 100644 index 000000000..e70312f37 Binary files /dev/null and b/examples/raptor/export/raptor.skel differ diff --git a/examples/raptor/images/back_arm.png b/examples/raptor/images/back_arm.png new file mode 100644 index 000000000..e62af673e Binary files /dev/null and b/examples/raptor/images/back_arm.png differ diff --git a/examples/raptor/images/back_bracer.png b/examples/raptor/images/back_bracer.png new file mode 100644 index 000000000..92e818304 Binary files /dev/null and b/examples/raptor/images/back_bracer.png differ diff --git a/examples/raptor/images/back_hand.png b/examples/raptor/images/back_hand.png new file mode 100644 index 000000000..52a898cff Binary files /dev/null and b/examples/raptor/images/back_hand.png differ diff --git a/examples/raptor/images/back_knee.png b/examples/raptor/images/back_knee.png new file mode 100644 index 000000000..e03e7cb24 Binary files /dev/null and b/examples/raptor/images/back_knee.png differ diff --git a/examples/raptor/images/back_thigh.png b/examples/raptor/images/back_thigh.png new file mode 100644 index 000000000..32a75ce3d Binary files /dev/null and b/examples/raptor/images/back_thigh.png differ diff --git a/examples/raptor/images/eyes_closed.png b/examples/raptor/images/eyes_closed.png new file mode 100644 index 000000000..374aa78af Binary files /dev/null and b/examples/raptor/images/eyes_closed.png differ diff --git a/examples/raptor/images/eyes_open.png b/examples/raptor/images/eyes_open.png new file mode 100644 index 000000000..e79f69b11 Binary files /dev/null and b/examples/raptor/images/eyes_open.png differ diff --git a/examples/raptor/images/eyes_surprised.png b/examples/raptor/images/eyes_surprised.png new file mode 100644 index 000000000..1e6801ca4 Binary files /dev/null and b/examples/raptor/images/eyes_surprised.png differ diff --git a/examples/raptor/images/front_arm.png b/examples/raptor/images/front_arm.png new file mode 100644 index 000000000..87b3b9a56 Binary files /dev/null and b/examples/raptor/images/front_arm.png differ diff --git a/examples/raptor/images/front_bracer.png b/examples/raptor/images/front_bracer.png new file mode 100644 index 000000000..9f163b4be Binary files /dev/null and b/examples/raptor/images/front_bracer.png differ diff --git a/examples/raptor/images/front_hand.png b/examples/raptor/images/front_hand.png new file mode 100644 index 000000000..cf2ee744b Binary files /dev/null and b/examples/raptor/images/front_hand.png differ diff --git a/examples/raptor/images/front_open_hand.png b/examples/raptor/images/front_open_hand.png new file mode 100644 index 000000000..a8e6392ec Binary files /dev/null and b/examples/raptor/images/front_open_hand.png differ diff --git a/examples/raptor/images/front_thigh.png b/examples/raptor/images/front_thigh.png new file mode 100644 index 000000000..4b16406b1 Binary files /dev/null and b/examples/raptor/images/front_thigh.png differ diff --git a/examples/raptor/images/gun.png b/examples/raptor/images/gun.png new file mode 100644 index 000000000..d4c1e30ae Binary files /dev/null and b/examples/raptor/images/gun.png differ diff --git a/examples/raptor/images/gun_nohand.png b/examples/raptor/images/gun_nohand.png new file mode 100644 index 000000000..069237f58 Binary files /dev/null and b/examples/raptor/images/gun_nohand.png differ diff --git a/examples/raptor/images/head.png b/examples/raptor/images/head.png new file mode 100644 index 000000000..73d7a8025 Binary files /dev/null and b/examples/raptor/images/head.png differ diff --git a/examples/raptor/images/lower_leg.png b/examples/raptor/images/lower_leg.png new file mode 100644 index 000000000..0f1706625 Binary files /dev/null and b/examples/raptor/images/lower_leg.png differ diff --git a/examples/raptor/images/mouth_grind.png b/examples/raptor/images/mouth_grind.png new file mode 100644 index 000000000..9166cef86 Binary files /dev/null and b/examples/raptor/images/mouth_grind.png differ diff --git a/examples/raptor/images/mouth_oooo.png b/examples/raptor/images/mouth_oooo.png new file mode 100644 index 000000000..cf9b58bb1 Binary files /dev/null and b/examples/raptor/images/mouth_oooo.png differ diff --git a/examples/raptor/images/mouth_smile.png b/examples/raptor/images/mouth_smile.png new file mode 100644 index 000000000..81e9b2fc2 Binary files /dev/null and b/examples/raptor/images/mouth_smile.png differ diff --git a/examples/raptor/images/neck.png b/examples/raptor/images/neck.png new file mode 100644 index 000000000..44cf17804 Binary files /dev/null and b/examples/raptor/images/neck.png differ diff --git a/examples/raptor/images/raptor_arm_back.png b/examples/raptor/images/raptor_arm_back.png new file mode 100644 index 000000000..e1db47fd7 Binary files /dev/null and b/examples/raptor/images/raptor_arm_back.png differ diff --git a/examples/raptor/images/raptor_body.png b/examples/raptor/images/raptor_body.png new file mode 100644 index 000000000..865fb5add Binary files /dev/null and b/examples/raptor/images/raptor_body.png differ diff --git a/examples/raptor/images/raptor_front_arm.png b/examples/raptor/images/raptor_front_arm.png new file mode 100644 index 000000000..32151b6b9 Binary files /dev/null and b/examples/raptor/images/raptor_front_arm.png differ diff --git a/examples/raptor/images/raptor_front_leg.png b/examples/raptor/images/raptor_front_leg.png new file mode 100644 index 000000000..5059243b8 Binary files /dev/null and b/examples/raptor/images/raptor_front_leg.png differ diff --git a/examples/raptor/images/raptor_hindleg_back.png b/examples/raptor/images/raptor_hindleg_back.png new file mode 100644 index 000000000..2362d1e9a Binary files /dev/null and b/examples/raptor/images/raptor_hindleg_back.png differ diff --git a/examples/raptor/images/raptor_horn.png b/examples/raptor/images/raptor_horn.png new file mode 100644 index 000000000..c44221a1c Binary files /dev/null and b/examples/raptor/images/raptor_horn.png differ diff --git a/examples/raptor/images/raptor_horn_back.png b/examples/raptor/images/raptor_horn_back.png new file mode 100644 index 000000000..36da4c750 Binary files /dev/null and b/examples/raptor/images/raptor_horn_back.png differ diff --git a/examples/raptor/images/raptor_jaw.png b/examples/raptor/images/raptor_jaw.png new file mode 100644 index 000000000..863ff2ec1 Binary files /dev/null and b/examples/raptor/images/raptor_jaw.png differ diff --git a/examples/raptor/images/raptor_saddle_noshadow.png b/examples/raptor/images/raptor_saddle_noshadow.png new file mode 100644 index 000000000..639d5dc85 Binary files /dev/null and b/examples/raptor/images/raptor_saddle_noshadow.png differ diff --git a/examples/raptor/images/raptor_saddle_strap_front.png b/examples/raptor/images/raptor_saddle_strap_front.png new file mode 100644 index 000000000..30a0f1e49 Binary files /dev/null and b/examples/raptor/images/raptor_saddle_strap_front.png differ diff --git a/examples/raptor/images/raptor_saddle_strap_rear.png b/examples/raptor/images/raptor_saddle_strap_rear.png new file mode 100644 index 000000000..d4fa1be86 Binary files /dev/null and b/examples/raptor/images/raptor_saddle_strap_rear.png differ diff --git a/examples/raptor/images/raptor_saddle_w_shadow.png b/examples/raptor/images/raptor_saddle_w_shadow.png new file mode 100644 index 000000000..099050a0d Binary files /dev/null and b/examples/raptor/images/raptor_saddle_w_shadow.png differ diff --git a/examples/raptor/images/raptor_tongue.png b/examples/raptor/images/raptor_tongue.png new file mode 100644 index 000000000..9ff3e96d5 Binary files /dev/null and b/examples/raptor/images/raptor_tongue.png differ diff --git a/examples/raptor/images/stirrup_back.png b/examples/raptor/images/stirrup_back.png new file mode 100644 index 000000000..823770d60 Binary files /dev/null and b/examples/raptor/images/stirrup_back.png differ diff --git a/examples/raptor/images/stirrup_front.png b/examples/raptor/images/stirrup_front.png new file mode 100644 index 000000000..6a798f2bd Binary files /dev/null and b/examples/raptor/images/stirrup_front.png differ diff --git a/examples/raptor/images/stirrup_strap.png b/examples/raptor/images/stirrup_strap.png new file mode 100644 index 000000000..f9f3185c1 Binary files /dev/null and b/examples/raptor/images/stirrup_strap.png differ diff --git a/examples/raptor/images/torso.png b/examples/raptor/images/torso.png new file mode 100644 index 000000000..a34e82d4e Binary files /dev/null and b/examples/raptor/images/torso.png differ diff --git a/examples/raptor/images/visor.png b/examples/raptor/images/visor.png new file mode 100644 index 000000000..3ae356298 Binary files /dev/null and b/examples/raptor/images/visor.png differ diff --git a/examples/raptor/license.txt b/examples/raptor/license.txt new file mode 100644 index 000000000..cd3e3b481 --- /dev/null +++ b/examples/raptor/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2013, Esoteric Software + +The images in this project may be redistributed as long as they are accompanied +by this license file. The images may not be used for commercial use of any +kind. + +The project file is released into the public domain. It may be used as the basis +for derivative work. \ No newline at end of file diff --git a/examples/raptor/raptor.spine b/examples/raptor/raptor.spine new file mode 100644 index 000000000..5bb3c93a7 Binary files /dev/null and b/examples/raptor/raptor.spine differ diff --git a/examples/speedy/export/speedy-pma.atlas b/examples/speedy/export/speedy-pma.atlas new file mode 100644 index 000000000..a1eb9e9ae --- /dev/null +++ b/examples/speedy/export/speedy-pma.atlas @@ -0,0 +1,195 @@ + +speedy-pma.png +size: 1024,128 +format: RGBA8888 +filter: Linear,Linear +repeat: none +belt-ends + rotate: true + xy: 965, 81 + size: 45, 56 + orig: 45, 56 + offset: 0, 0 + index: -1 +hair-1 + rotate: false + xy: 635, 87 + size: 82, 39 + orig: 82, 39 + offset: 0, 0 + index: -1 +hair-2 + rotate: false + xy: 719, 83 + size: 74, 43 + orig: 74, 43 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 2, 2 + size: 116, 124 + orig: 116, 124 + offset: 0, 0 + index: -1 +hood-end1a + rotate: true + xy: 879, 103 + size: 23, 84 + orig: 23, 84 + offset: 0, 0 + index: -1 +hood-end1b + rotate: true + xy: 795, 67 + size: 28, 79 + orig: 28, 79 + offset: 0, 0 + index: -1 +hood-end1c + rotate: true + xy: 636, 24 + size: 31, 70 + orig: 31, 70 + offset: 0, 0 + index: -1 +hood-end1d + rotate: true + xy: 795, 97 + size: 29, 82 + orig: 29, 82 + offset: 0, 0 + index: -1 +hood-end1e + rotate: true + xy: 248, 2 + size: 35, 78 + orig: 35, 78 + offset: 0, 0 + index: -1 +hood-end1f + rotate: true + xy: 509, 42 + size: 39, 71 + orig: 39, 71 + offset: 0, 0 + index: -1 +hood-end2a + rotate: true + xy: 120, 9 + size: 30, 76 + orig: 30, 76 + offset: 0, 0 + index: -1 +hood-end2b + rotate: true + xy: 509, 2 + size: 38, 71 + orig: 38, 71 + offset: 0, 0 + index: -1 +hood-end2c + rotate: false + xy: 337, 18 + size: 42, 64 + orig: 42, 64 + offset: 0, 0 + index: -1 +hood-end2d + rotate: true + xy: 712, 58 + size: 23, 76 + orig: 23, 76 + offset: 0, 0 + index: -1 +hood-end2e + rotate: true + xy: 636, 57 + size: 28, 74 + orig: 28, 74 + offset: 0, 0 + index: -1 +hood-end2f + rotate: true + xy: 879, 70 + size: 31, 70 + orig: 31, 70 + offset: 0, 0 + index: -1 +left-foot + rotate: true + xy: 199, 2 + size: 80, 47 + orig: 80, 47 + offset: 0, 0 + index: -1 +left-foot-bent01 + rotate: false + xy: 248, 39 + size: 87, 43 + orig: 87, 43 + offset: 0, 0 + index: -1 +left-foot-bent02 + rotate: false + xy: 470, 83 + size: 82, 43 + orig: 82, 43 + offset: 0, 0 + index: -1 +left-foot-side + rotate: false + xy: 199, 84 + size: 90, 42 + orig: 90, 42 + offset: 0, 0 + index: -1 +left-hand + rotate: false + xy: 582, 28 + size: 52, 53 + orig: 52, 53 + offset: 0, 0 + index: -1 +right-foot + rotate: false + xy: 381, 25 + size: 66, 56 + orig: 66, 56 + offset: 0, 0 + index: -1 +right-foot-bent01 + rotate: false + xy: 383, 83 + size: 85, 43 + orig: 85, 43 + offset: 0, 0 + index: -1 +right-foot-bent02 + rotate: false + xy: 554, 83 + size: 79, 43 + orig: 79, 43 + offset: 0, 0 + index: -1 +right-foot-side + rotate: false + xy: 291, 84 + size: 90, 42 + orig: 90, 42 + offset: 0, 0 + index: -1 +right-hand + rotate: true + xy: 449, 25 + size: 56, 58 + orig: 56, 58 + offset: 0, 0 + index: -1 +torso + rotate: false + xy: 120, 41 + size: 77, 85 + orig: 77, 85 + offset: 0, 0 + index: -1 diff --git a/examples/speedy/export/speedy-pma.png b/examples/speedy/export/speedy-pma.png new file mode 100644 index 000000000..d301fd067 Binary files /dev/null and b/examples/speedy/export/speedy-pma.png differ diff --git a/examples/speedy/export/speedy.atlas b/examples/speedy/export/speedy.atlas new file mode 100644 index 000000000..d80b13dfa --- /dev/null +++ b/examples/speedy/export/speedy.atlas @@ -0,0 +1,195 @@ + +speedy.png +size: 1024,128 +format: RGBA8888 +filter: Linear,Linear +repeat: none +belt-ends + rotate: true + xy: 965, 81 + size: 45, 56 + orig: 45, 56 + offset: 0, 0 + index: -1 +hair-1 + rotate: false + xy: 635, 87 + size: 82, 39 + orig: 82, 39 + offset: 0, 0 + index: -1 +hair-2 + rotate: false + xy: 719, 83 + size: 74, 43 + orig: 74, 43 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 2, 2 + size: 116, 124 + orig: 116, 124 + offset: 0, 0 + index: -1 +hood-end1a + rotate: true + xy: 879, 103 + size: 23, 84 + orig: 23, 84 + offset: 0, 0 + index: -1 +hood-end1b + rotate: true + xy: 795, 67 + size: 28, 79 + orig: 28, 79 + offset: 0, 0 + index: -1 +hood-end1c + rotate: true + xy: 636, 24 + size: 31, 70 + orig: 31, 70 + offset: 0, 0 + index: -1 +hood-end1d + rotate: true + xy: 795, 97 + size: 29, 82 + orig: 29, 82 + offset: 0, 0 + index: -1 +hood-end1e + rotate: true + xy: 248, 2 + size: 35, 78 + orig: 35, 78 + offset: 0, 0 + index: -1 +hood-end1f + rotate: true + xy: 509, 42 + size: 39, 71 + orig: 39, 71 + offset: 0, 0 + index: -1 +hood-end2a + rotate: true + xy: 120, 9 + size: 30, 76 + orig: 30, 76 + offset: 0, 0 + index: -1 +hood-end2b + rotate: true + xy: 509, 2 + size: 38, 71 + orig: 38, 71 + offset: 0, 0 + index: -1 +hood-end2c + rotate: false + xy: 337, 18 + size: 42, 64 + orig: 42, 64 + offset: 0, 0 + index: -1 +hood-end2d + rotate: true + xy: 712, 58 + size: 23, 76 + orig: 23, 76 + offset: 0, 0 + index: -1 +hood-end2e + rotate: true + xy: 636, 57 + size: 28, 74 + orig: 28, 74 + offset: 0, 0 + index: -1 +hood-end2f + rotate: true + xy: 879, 70 + size: 31, 70 + orig: 31, 70 + offset: 0, 0 + index: -1 +left-foot + rotate: true + xy: 199, 2 + size: 80, 47 + orig: 80, 47 + offset: 0, 0 + index: -1 +left-foot-bent01 + rotate: false + xy: 248, 39 + size: 87, 43 + orig: 87, 43 + offset: 0, 0 + index: -1 +left-foot-bent02 + rotate: false + xy: 470, 83 + size: 82, 43 + orig: 82, 43 + offset: 0, 0 + index: -1 +left-foot-side + rotate: false + xy: 199, 84 + size: 90, 42 + orig: 90, 42 + offset: 0, 0 + index: -1 +left-hand + rotate: false + xy: 582, 28 + size: 52, 53 + orig: 52, 53 + offset: 0, 0 + index: -1 +right-foot + rotate: false + xy: 381, 25 + size: 66, 56 + orig: 66, 56 + offset: 0, 0 + index: -1 +right-foot-bent01 + rotate: false + xy: 383, 83 + size: 85, 43 + orig: 85, 43 + offset: 0, 0 + index: -1 +right-foot-bent02 + rotate: false + xy: 554, 83 + size: 79, 43 + orig: 79, 43 + offset: 0, 0 + index: -1 +right-foot-side + rotate: false + xy: 291, 84 + size: 90, 42 + orig: 90, 42 + offset: 0, 0 + index: -1 +right-hand + rotate: true + xy: 449, 25 + size: 56, 58 + orig: 56, 58 + offset: 0, 0 + index: -1 +torso + rotate: false + xy: 120, 41 + size: 77, 85 + orig: 77, 85 + offset: 0, 0 + index: -1 diff --git a/examples/speedy/export/speedy.json b/examples/speedy/export/speedy.json new file mode 100644 index 000000000..994fcbff3 --- /dev/null +++ b/examples/speedy/export/speedy.json @@ -0,0 +1,1091 @@ +{ +"skeleton": { "hash": "tmPhvJxT1yYlfE25wzds+8X1E44", "spine": "3.4.00", "width": 196.03, "height": 305.44, "images": "./images/" }, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "x": -0.02, "y": 51.91 }, + { "name": "torso", "parent": "hip", "length": 76, "rotation": 89.46, "y": 29.83 }, + { "name": "torso_singleton", "parent": "torso", "x": 29.02, "y": 0.47 }, + { "name": "belt ends", "parent": "torso_singleton", "rotation": -7.18, "x": -26.76, "y": -23.48 }, + { "name": "head", "parent": "torso", "length": 108, "rotation": 2.72, "x": 86.98, "y": 1.38 }, + { "name": "head_singleton", "parent": "head", "x": -0.04, "y": 0.17 }, + { "name": "hair1", "parent": "head_singleton", "rotation": -2.15, "x": 95.03, "y": -24.72 }, + { "name": "hair2", "parent": "head_singleton", "x": 94.44, "y": -33.63 }, + { "name": "hood end1", "parent": "head", "rotation": -1.78, "x": 55.74, "y": 34.37 }, + { "name": "hood end2", "parent": "head", "rotation": -16.6, "x": 61.54, "y": 41.58 }, + { "name": "left foot", "parent": "hip", "length": 61.43, "rotation": -12.11, "x": 2.45, "y": -37.2 }, + { + "name": "left hand", + "parent": "torso", + "length": 37.97, + "rotation": -122.03, + "x": 24.83, + "y": -51.46, + "scaleX": 0.929, + "scaleY": 0.929 + }, + { + "name": "right foot", + "parent": "hip", + "length": 53.85, + "rotation": -13.06, + "x": -40.63, + "y": -36.39, + "scaleX": 1.021, + "scaleY": 1.021 + }, + { + "name": "right hand", + "parent": "torso", + "length": 40.66, + "rotation": 152.53, + "x": 40.06, + "y": 55.49, + "scaleX": 1.015, + "scaleY": 1.015 + } +], +"slots": [ + { "name": "left hand", "bone": "left hand", "attachment": "left-hand" }, + { "name": "hood end2", "bone": "hood end2", "attachment": "hood-end2a" }, + { "name": "hood end1", "bone": "hood end1", "attachment": "hood-end1a" }, + { "name": "torso", "bone": "torso_singleton", "attachment": "torso" }, + { "name": "head", "bone": "head_singleton", "attachment": "head" }, + { "name": "left foot", "bone": "left foot", "attachment": "left-foot" }, + { "name": "right foot", "bone": "right foot", "attachment": "right-foot" }, + { "name": "belt ends", "bone": "belt ends", "attachment": "belt-ends" }, + { "name": "right hand", "bone": "right hand", "attachment": "right-hand" }, + { "name": "hair2", "bone": "hair2", "attachment": "hair-2" }, + { "name": "hair1", "bone": "hair1", "attachment": "hair-1" } +], +"skins": { + "default": { + "belt ends": { + "belt-ends": { "x": -16.39, "y": 1.8, "rotation": -94.04, "width": 45, "height": 56 } + }, + "hair1": { + "hair-1": { "x": -7.34, "y": -30.72, "rotation": -92.19, "width": 82, "height": 39 } + }, + "hair2": { + "hair-2": { "x": -16.6, "y": -22.29, "rotation": -92.19, "width": 74, "height": 43 } + }, + "head": { + "head": { "x": 53.11, "y": -6.82, "rotation": -89.55, "width": 116, "height": 124 } + }, + "hood end1": { + "hood-end1a": { "x": -36.39, "y": 3.08, "rotation": -92.19, "width": 23, "height": 84 }, + "hood-end1b": { "x": -32.65, "y": 7.9, "rotation": -93.38, "width": 28, "height": 79 }, + "hood-end1c": { "x": -29.12, "y": 9.02, "rotation": -92.19, "width": 31, "height": 70 }, + "hood-end1d": { "x": -36.08, "y": -1.16, "rotation": -92.19, "width": 29, "height": 82 }, + "hood-end1e": { "x": -34.25, "y": -4.31, "rotation": -92.19, "width": 35, "height": 78 }, + "hood-end1f": { "x": -30.94, "y": -5.56, "rotation": -92.19, "width": 39, "height": 71 } + }, + "hood end2": { + "hood-end2a": { "x": -34.16, "y": 3.89, "rotation": 281.09, "width": 30, "height": 76 }, + "hood-end2b": { "x": -32.77, "y": 7.69, "rotation": 281.09, "width": 38, "height": 71 }, + "hood-end2c": { "x": -29.83, "y": 10.79, "rotation": 281.09, "width": 42, "height": 64 }, + "hood-end2d": { "x": -33.2, "y": -2.45, "rotation": -78.89, "width": 23, "height": 76 }, + "hood-end2e": { "x": -31.88, "y": -5.65, "rotation": -78.89, "width": 28, "height": 74 }, + "hood-end2f": { "x": -28.62, "y": -6.39, "rotation": -78.89, "width": 31, "height": 70 } + }, + "left foot": { + "left-foot": { "x": 36.95, "y": 10.44, "rotation": 12.11, "width": 80, "height": 47 }, + "left-foot-bent01": { "x": 34.83, "y": 6.78, "rotation": 12.11, "width": 87, "height": 43 }, + "left-foot-bent02": { "x": 33.04, "y": 6.76, "rotation": 12.11, "width": 82, "height": 43 }, + "left-foot-side": { "x": 37.79, "y": 6.08, "rotation": 12.11, "width": 90, "height": 42 } + }, + "left hand": { + "left-hand": { "x": 18.27, "y": 3.7, "rotation": 5.29, "width": 52, "height": 53 } + }, + "right foot": { + "right-foot": { "x": 16.72, "y": -1.85, "rotation": 13.06, "width": 66, "height": 56 }, + "right-foot-bent01": { "x": 29.37, "y": 7.57, "rotation": 13.06, "width": 85, "height": 43 }, + "right-foot-bent02": { "x": 26.23, "y": 7.38, "rotation": 13.06, "width": 79, "height": 43 }, + "right-foot-side": { "x": 31.33, "y": 7.87, "rotation": 13.06, "width": 90, "height": 42 } + }, + "right hand": { + "right-hand": { "x": 26.54, "y": 4.34, "rotation": 111.61, "width": 56, "height": 58 } + }, + "torso": { + "torso": { "x": 8.62, "y": -3.29, "rotation": -95.84, "width": 77, "height": 85 } + } + } +}, +"animations": { + "run": { + "slots": { + "hood end1": { + "attachment": [ + { "time": 0, "name": "hood-end1b" }, + { "time": 0.1, "name": "hood-end1b" }, + { "time": 0.1333, "name": "hood-end1a" }, + { "time": 0.1666, "name": "hood-end1d" }, + { "time": 0.2, "name": "hood-end1e" }, + { "time": 0.2333, "name": "hood-end1f" }, + { "time": 0.3, "name": "hood-end1e" }, + { "time": 0.3666, "name": "hood-end1d" }, + { "time": 0.4, "name": "hood-end1a" }, + { "time": 0.4333, "name": "hood-end1b" }, + { "time": 0.5333, "name": "hood-end1b" }, + { "time": 0.5666, "name": "hood-end1a" }, + { "time": 0.6, "name": "hood-end1d" }, + { "time": 0.6333, "name": "hood-end1e" }, + { "time": 0.6666, "name": "hood-end1f" }, + { "time": 0.7333, "name": "hood-end1e" }, + { "time": 0.7666, "name": "hood-end1e" }, + { "time": 0.8, "name": "hood-end1d" }, + { "time": 0.8333, "name": "hood-end1a" }, + { "time": 0.8666, "name": "hood-end1b" } + ] + }, + "hood end2": { + "attachment": [ + { "time": 0, "name": "hood-end2b" }, + { "time": 0.0333, "name": "hood-end2b" }, + { "time": 0.0666, "name": "hood-end2a" }, + { "time": 0.1, "name": "hood-end2d" }, + { "time": 0.1333, "name": "hood-end2e" }, + { "time": 0.1666, "name": "hood-end2f" }, + { "time": 0.2333, "name": "hood-end2e" }, + { "time": 0.3, "name": "hood-end2d" }, + { "time": 0.3333, "name": "hood-end2a" }, + { "time": 0.3666, "name": "hood-end2b" }, + { "time": 0.4666, "name": "hood-end2b" }, + { "time": 0.5, "name": "hood-end2a" }, + { "time": 0.5333, "name": "hood-end2d" }, + { "time": 0.5666, "name": "hood-end2e" }, + { "time": 0.6, "name": "hood-end2f" }, + { "time": 0.6666, "name": "hood-end2e" }, + { "time": 0.7333, "name": "hood-end2d" }, + { "time": 0.7666, "name": "hood-end2a" }, + { "time": 0.8666, "name": "hood-end2b" } + ] + }, + "left foot": { + "attachment": [ + { "time": 0, "name": "left-foot-side" }, + { "time": 0.6, "name": "left-foot-bent01" }, + { "time": 0.6666, "name": "left-foot-bent02" }, + { "time": 0.7666, "name": "left-foot-bent01" }, + { "time": 0.8666, "name": "left-foot-side" } + ] + }, + "right foot": { + "attachment": [ + { "time": 0, "name": "right-foot-side" }, + { "time": 0.1666, "name": "right-foot-bent01" }, + { "time": 0.2333, "name": "right-foot-bent02" }, + { "time": 0.3, "name": "right-foot-bent01" }, + { "time": 0.4333, "name": "right-foot-side" } + ] + } + }, + "bones": { + "left foot": { + "rotate": [ + { "time": 0, "angle": -146 }, + { "time": 0.1333, "angle": -79.16 }, + { "time": 0.2666, "angle": -33.81 }, + { "time": 0.4333, "angle": 51.9 }, + { "time": 0.5, "angle": 0.96 }, + { "time": 0.5666, "angle": 0.34 }, + { "time": 0.7, "angle": -52.09 }, + { "time": 0.8666, "angle": -146 } + ], + "translate": [ + { "time": 0, "x": -64.33, "y": 66.23 }, + { "time": 0.1333, "x": -34.77, "y": 78.73 }, + { + "time": 0.2666, + "x": 2.22, + "y": 68.77, + "curve": [ 0.35, 0, 0.704, 1 ] + }, + { "time": 0.4333, "x": 43.67, "y": -9.79 }, + { "time": 0.5, "x": 17.35, "y": 0.84 }, + { "time": 0.5666, "x": -15.6, "y": 2.95 }, + { "time": 0.7, "x": -68.64, "y": 42.69 }, + { "time": 0.8666, "x": -64.33, "y": 66.23 } + ] + }, + "right foot": { + "rotate": [ + { "time": 0, "angle": 52.51 }, + { "time": 0.0666, "angle": 3.66 }, + { "time": 0.1333, "angle": 0.63 }, + { "time": 0.2666, "angle": -53.09 }, + { "time": 0.4333, "angle": -140.76 }, + { "time": 0.5666, "angle": -105.72 }, + { "time": 0.7, "angle": -40.18 }, + { "time": 0.8666, "angle": 52.51 } + ], + "translate": [ + { "time": 0, "x": 97.79, "y": -5.51 }, + { "time": 0.1333, "x": 7.79, "y": 3.28 }, + { "time": 0.2666, "x": -38.2, "y": 37.48 }, + { "time": 0.4333, "x": -31.23, "y": 65.13 }, + { "time": 0.5666, "x": 0.36, "y": 69.13 }, + { + "time": 0.7, + "x": 44.36, + "y": 71.35, + "curve": [ 0.35, 0, 0.704, 1 ] + }, + { "time": 0.8666, "x": 97.79, "y": -5.51 } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -34.76, + "curve": [ 0.416, 0, 0.62, 0.99 ] + }, + { + "time": 0.2666, + "angle": -11.11, + "curve": [ 0.77, 0, 0.62, 0.99 ] + }, + { + "time": 0.4333, + "angle": -34.76, + "curve": [ 0.416, 0, 0.62, 0.99 ] + }, + { + "time": 0.7, + "angle": -11.11, + "curve": [ 0.77, 0, 0.62, 0.99 ] + }, + { "time": 0.8666, "angle": -34.76 } + ], + "translate": [ + { + "time": 0, + "x": -0.4, + "y": 10.63, + "curve": [ 0.436, 0, 0.589, 1 ] + }, + { + "time": 0.2666, + "x": -16.04, + "y": 68.2, + "curve": [ 0.531, 0, 0.735, 1 ] + }, + { + "time": 0.4333, + "x": -0.4, + "y": 10.63, + "curve": [ 0.436, 0, 0.589, 1 ] + }, + { + "time": 0.7, + "x": -16.04, + "y": 68.2, + "curve": [ 0.531, 0, 0.735, 1 ] + }, + { "time": 0.8666, "x": -0.4, "y": 10.63 } + ] + }, + "left hand": { + "rotate": [ + { + "time": 0, + "angle": 72.22, + "curve": [ 0.379, 0, 0.658, 1 ] + }, + { + "time": 0.2666, + "angle": 17.86, + "curve": [ 0.379, 0, 0.658, 1 ] + }, + { + "time": 0.4333, + "angle": 72.22, + "curve": [ 0.379, 0, 0.658, 1 ] + }, + { + "time": 0.7, + "angle": 17.86, + "curve": [ 0.379, 0, 0.658, 1 ] + }, + { "time": 0.8666, "angle": 72.22 } + ], + "translate": [ + { + "time": 0, + "x": 51.46, + "y": -4.94, + "curve": [ 0.247, 0, 0.758, 1 ] + }, + { + "time": 0.2666, + "x": 20.22, + "y": -13.82, + "curve": [ 0.247, 0, 0.758, 1 ] + }, + { + "time": 0.4333, + "x": 51.46, + "y": -4.94, + "curve": [ 0.247, 0, 0.758, 1 ] + }, + { + "time": 0.7, + "x": 20.22, + "y": -13.82, + "curve": [ 0.247, 0, 0.758, 1 ] + }, + { "time": 0.8666, "x": 51.46, "y": -4.94 } + ] + }, + "right hand": { + "rotate": [ + { + "time": 0, + "angle": -49.84, + "curve": [ 0.364, 0, 0.663, 1 ] + }, + { + "time": 0.2666, + "angle": -31.28, + "curve": [ 0.364, 0, 0.663, 1 ] + }, + { + "time": 0.4333, + "angle": -49.84, + "curve": [ 0.364, 0, 0.663, 1 ] + }, + { + "time": 0.7, + "angle": -31.28, + "curve": [ 0.364, 0, 0.663, 1 ] + }, + { "time": 0.8666, "angle": -49.84 } + ], + "translate": [ + { + "time": 0, + "x": 7.79, + "y": 12.99, + "curve": [ 0.284, 0, 0.764, 1 ] + }, + { + "time": 0.2666, + "x": 1.27, + "y": 12.47, + "curve": [ 0.284, 0, 0.764, 1 ] + }, + { + "time": 0.4333, + "x": 7.79, + "y": 12.99, + "curve": [ 0.284, 0, 0.764, 1 ] + }, + { + "time": 0.7, + "x": 1.27, + "y": 12.47, + "curve": [ 0.284, 0, 0.764, 1 ] + }, + { "time": 0.8666, "x": 7.79, "y": 12.99 } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 26.87, + "curve": [ 0.261, 0, 0.77, 1 ] + }, + { + "time": 0.0666, + "angle": 15.41, + "curve": [ 0.247, 0, 0.577, 0.99 ] + }, + { + "time": 0.2666, + "angle": -0.38, + "curve": [ 0.583, 0, 0.649, 1.91 ] + }, + { + "time": 0.4333, + "angle": 26.87, + "curve": [ 0.261, 0, 0.77, 1 ] + }, + { + "time": 0.5, + "angle": 17.67, + "curve": [ 0.227, 0, 0.577, 0.99 ] + }, + { + "time": 0.7, + "angle": -0.38, + "curve": [ 0.583, 0, 0.649, 1.91 ] + }, + { "time": 0.8666, "angle": 26.87 } + ], + "translate": [ + { + "time": 0, + "x": -6.24, + "y": -1.04, + "curve": [ 0.316, 0, 0.692, 1 ] + }, + { + "time": 0.1333, + "x": -5.23, + "y": -9.91, + "curve": [ 0.39, 0, 0.689, 1 ] + }, + { + "time": 0.2666, + "x": 4.19, + "y": -3.73, + "curve": [ 0.316, 0, 0.692, 1 ] + }, + { + "time": 0.3666, + "x": 11.32, + "y": 6.51, + "curve": [ 0.29, 0, 0.896, 1 ] + }, + { + "time": 0.4333, + "x": -6.24, + "y": -1.04, + "curve": [ 0.316, 0, 0.692, 1 ] + }, + { + "time": 0.5666, + "x": -5.23, + "y": -9.91, + "curve": [ 0.39, 0, 0.689, 1 ] + }, + { + "time": 0.7, + "x": 4.19, + "y": -3.73, + "curve": [ 0.316, 0, 0.692, 1 ] + }, + { + "time": 0.8, + "x": 11.32, + "y": 6.51, + "curve": [ 0.29, 0, 0.896, 1 ] + }, + { "time": 0.8666, "x": -6.24, "y": -1.04 } + ] + }, + "root": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8666, "angle": 0 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 4.99 }, + { + "time": 0.2666, + "x": 0, + "y": -3.03, + "curve": [ 0.189, -0.01, 0.675, 1 ] + }, + { + "time": 0.3666, + "x": 0, + "y": 17.66, + "curve": [ 0.31, 0, 1, 1 ] + }, + { "time": 0.4333, "x": 0, "y": 4.99 }, + { + "time": 0.7, + "x": 0, + "y": -0.35, + "curve": [ 0.189, -0.01, 0.675, 1 ] + }, + { + "time": 0.8, + "x": 0, + "y": 17.66, + "curve": [ 0.31, 0, 1, 1 ] + }, + { "time": 0.8666, "x": 0, "y": 4.99 } + ] + }, + "belt ends": { + "rotate": [ + { "time": 0, "angle": 15.41 }, + { "time": 0.1333, "angle": 5.94 }, + { "time": 0.2666, "angle": 11.5 }, + { "time": 0.4333, "angle": 15.84 }, + { "time": 0.5666, "angle": 16.03 }, + { "time": 0.7, "angle": 13.7 }, + { "time": 0.8666, "angle": 15.41 } + ], + "translate": [ + { "time": 0, "x": 0.05, "y": 0 }, + { "time": 0.2666, "x": -0.01, "y": 0 }, + { "time": 0.8666, "x": 0.05, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1.076, "y": 1 }, + { "time": 0.2666, "x": 1.009, "y": 1 }, + { "time": 0.8666, "x": 1.076, "y": 1 } + ] + }, + "torso_singleton": { + "translate": [ + { "time": 0, "x": -4.18, "y": 0 }, + { "time": 0.2666, "x": -1.81, "y": 0 }, + { "time": 0.4333, "x": -4.18, "y": 0 }, + { "time": 0.7, "x": -1.81, "y": 0 }, + { "time": 0.8666, "x": -4.18, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 0.898, "y": 1.222 }, + { "time": 0.0333, "x": 0.83, "y": 1.363 }, + { "time": 0.3666, "x": 1.033, "y": 0.94 }, + { "time": 0.4666, "x": 0.83, "y": 1.363 }, + { "time": 0.8, "x": 1.033, "y": 0.94 }, + { "time": 0.8666, "x": 0.898, "y": 1.222 } + ] + }, + "hair2": { + "rotate": [ + { "time": 0, "angle": 10.3 }, + { "time": 0.1, "angle": -12.85 }, + { "time": 0.3666, "angle": 24.65 }, + { "time": 0.4333, "angle": 10.3 }, + { "time": 0.5333, "angle": -12.85 }, + { "time": 0.8, "angle": 24.65 }, + { "time": 0.8666, "angle": 10.3 } + ] + }, + "hair1": { + "rotate": [ + { "time": 0, "angle": 16.2 }, + { "time": 0.1, "angle": -13.95 }, + { "time": 0.3666, "angle": 28.27 }, + { "time": 0.4333, "angle": 16.2 }, + { "time": 0.5333, "angle": -13.95 }, + { "time": 0.8, "angle": 28.27 }, + { "time": 0.8666, "angle": 16.2 } + ] + }, + "head_singleton": { + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.0666, "x": 0.91, "y": 1.13 }, + { "time": 0.1666, "x": 1.09, "y": 1.13 }, + { "time": 0.4333, "x": 1, "y": 1 }, + { "time": 0.5, "x": 0.91, "y": 1.13 }, + { "time": 0.6, "x": 1.09, "y": 1.13 }, + { "time": 0.8666, "x": 1, "y": 1 } + ] + }, + "hood end1": { + "rotate": [ + { + "time": 0, + "angle": -79.04, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.1, + "angle": -33.33, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.2666, + "angle": -39.16, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4333, + "angle": -79.04, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5333, + "angle": -33.33, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7, + "angle": -39.16, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.8666, "angle": -79.04 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1, "x": -1.35, "y": 6.14 }, + { "time": 0.4333, "x": 0, "y": 0 }, + { "time": 0.5333, "x": -1.35, "y": 6.14 }, + { "time": 0.8666, "x": 0, "y": 0 } + ] + }, + "hood end2": { + "rotate": [ + { + "time": 0, + "angle": -89.63, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.1, + "angle": -43.98, + "curve": [ 0.548, 0, 0.75, 1 ] + }, + { + "time": 0.3, + "angle": -51.52, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4333, + "angle": -89.63, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5333, + "angle": -43.98, + "curve": [ 0.548, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -51.52, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.8666, "angle": -89.63 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1, "x": -5.62, "y": 5.2 }, + { "time": 0.4333, "x": 0, "y": 0 }, + { "time": 0.5333, "x": -5.62, "y": 5.2 }, + { "time": 0.8666, "x": 0, "y": 0 } + ] + } + } + }, + "run-linear": { + "slots": { + "left foot": { + "attachment": [ + { "time": 0, "name": "left-foot-side" }, + { "time": 0.6, "name": "left-foot-bent01" }, + { "time": 0.6666, "name": "left-foot-bent02" }, + { "time": 0.7666, "name": "left-foot-bent01" }, + { "time": 0.8666, "name": "left-foot-side" } + ] + }, + "right foot": { + "attachment": [ + { "time": 0, "name": "right-foot-side" }, + { "time": 0.1666, "name": "right-foot-bent01" }, + { "time": 0.2333, "name": "right-foot-bent02" }, + { "time": 0.3, "name": "right-foot-bent01" }, + { "time": 0.4333, "name": "right-foot-side" } + ] + } + }, + "bones": { + "left foot": { + "rotate": [ + { "time": 0, "angle": -127.89 }, + { "time": 0.1333, "angle": -79.16 }, + { "time": 0.2666, "angle": -33.81 }, + { "time": 0.4333, "angle": 51.9 }, + { "time": 0.5, "angle": 2.67 }, + { "time": 0.5666, "angle": 4.71 }, + { "time": 0.8666, "angle": -127.89 } + ], + "translate": [ + { "time": 0, "x": -67.77, "y": 66.23 }, + { "time": 0.1333, "x": -34.77, "y": 70.57 }, + { "time": 0.2666, "x": 2.22, "y": 68.77 }, + { "time": 0.4333, "x": 35.67, "y": -9.79 }, + { "time": 0.5, "x": 17.17, "y": -0.23 }, + { "time": 0.5666, "x": -1.32, "y": 0.2 }, + { "time": 0.7, "x": -45.32, "y": 42.16 }, + { "time": 0.8666, "x": -67.77, "y": 66.23 } + ] + }, + "right foot": { + "rotate": [ + { "time": 0, "angle": 52.51 }, + { "time": 0.0666, "angle": 3.66 }, + { "time": 0.0666, "angle": 0.85 }, + { "time": 0.1333, "angle": 5.41 }, + { "time": 0.4333, "angle": -126.4 }, + { "time": 0.5666, "angle": -105.72 }, + { "time": 0.7, "angle": -40.18 }, + { "time": 0.8666, "angle": 52.51 } + ], + "translate": [ + { "time": 0, "x": 82.79, "y": -5.51 }, + { "time": 0.0666, "x": 58.29, "y": 0.26 }, + { "time": 0.1333, "x": 33.79, "y": 1.48 }, + { "time": 0.2666, "x": -12.2, "y": 37.48 }, + { "time": 0.4333, "x": -31.63, "y": 65.13 }, + { "time": 0.5666, "x": 0.36, "y": 62.13 }, + { "time": 0.7, "x": 44.36, "y": 71.35 }, + { "time": 0.8666, "x": 82.79, "y": -5.51 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -34.76 }, + { "time": 0.2666, "angle": -18.25 }, + { "time": 0.4333, "angle": -34.76 }, + { "time": 0.7, "angle": -18.25 }, + { "time": 0.8666, "angle": -34.76 } + ], + "translate": [ + { "time": 0, "x": -10.12, "y": 0.91 }, + { "time": 0.2666, "x": -10.12, "y": 60.08 }, + { "time": 0.4333, "x": -10.12, "y": 0.91 }, + { "time": 0.7, "x": -10.12, "y": 60.08 }, + { "time": 0.8666, "x": -10.12, "y": 0.91 } + ] + }, + "left hand": { + "rotate": [ + { "time": 0, "angle": 72.22 }, + { "time": 0.2666, "angle": 17.86 }, + { "time": 0.4333, "angle": 72.22 }, + { "time": 0.7, "angle": 17.86 }, + { "time": 0.8666, "angle": 72.22 } + ], + "translate": [ + { "time": 0, "x": 51.46, "y": -4.94 }, + { "time": 0.2666, "x": 20.22, "y": -13.82 }, + { "time": 0.4333, "x": 51.46, "y": -4.94 }, + { "time": 0.7, "x": 20.22, "y": -13.82 }, + { "time": 0.8666, "x": 51.46, "y": -4.94 } + ] + }, + "right hand": { + "rotate": [ + { "time": 0, "angle": -49.84 }, + { "time": 0.2666, "angle": -31.28 }, + { "time": 0.4333, "angle": -49.84 }, + { "time": 0.7, "angle": -31.28 }, + { "time": 0.8666, "angle": -49.84 } + ], + "translate": [ + { "time": 0, "x": 7.79, "y": 12.99 }, + { "time": 0.2666, "x": 1.27, "y": 12.47 }, + { "time": 0.4333, "x": 7.79, "y": 12.99 }, + { "time": 0.7, "x": 1.27, "y": 12.47 }, + { "time": 0.8666, "x": 7.79, "y": 12.99 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 26.87 }, + { "time": 0.0666, "angle": 15.41 }, + { "time": 0.2666, "angle": 16.09 }, + { "time": 0.4333, "angle": 26.87 }, + { "time": 0.5, "angle": 17.67 }, + { "time": 0.7, "angle": 16.09 }, + { "time": 0.8666, "angle": 26.87 } + ], + "translate": [ + { "time": 0, "x": -6.24, "y": -1.04 }, + { "time": 0.1333, "x": -5.23, "y": -9.91 }, + { "time": 0.2666, "x": 4.19, "y": -3.73 }, + { "time": 0.3666, "x": 11.32, "y": 6.51 }, + { "time": 0.4333, "x": -6.24, "y": -1.04 }, + { "time": 0.5666, "x": -5.23, "y": -9.91 }, + { "time": 0.7, "x": 4.19, "y": -3.73 }, + { "time": 0.8, "x": 11.32, "y": 6.51 }, + { "time": 0.8666, "x": -6.24, "y": -1.04 } + ] + }, + "hood end1": { + "rotate": [ + { "time": 0, "angle": -99.92 }, + { "time": 0.3, "angle": -32.52 }, + { "time": 0.4333, "angle": -99.92 }, + { "time": 0.7333, "angle": -32.52 }, + { "time": 0.8666, "angle": -99.92 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8666, "x": 0, "y": 0 } + ] + }, + "root": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8666, "x": 0, "y": 0 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 4.99 }, + { "time": 0.2666, "x": 0, "y": -3.03 }, + { "time": 0.3666, "x": 0, "y": 17.66 }, + { "time": 0.4333, "x": 0, "y": 4.99 }, + { "time": 0.7, "x": 0, "y": -0.35 }, + { "time": 0.8, "x": 0, "y": 17.66 }, + { "time": 0.8666, "x": 0, "y": 4.99 } + ] + }, + "belt ends": { + "rotate": [ + { "time": 0, "angle": 15.41 }, + { "time": 0.1333, "angle": 5.94 }, + { "time": 0.2666, "angle": 11.5 }, + { "time": 0.4333, "angle": 15.84 }, + { "time": 0.5666, "angle": 16.03 }, + { "time": 0.7, "angle": 13.7 }, + { "time": 0.8666, "angle": 15.41 } + ], + "translate": [ + { "time": 0, "x": 0.05, "y": 0 }, + { "time": 0.2666, "x": -0.01, "y": 0 }, + { "time": 0.8666, "x": 0.05, "y": 0 } + ] + }, + "torso_singleton": { + "translate": [ + { "time": 0, "x": -4.18, "y": 0 }, + { "time": 0.2666, "x": -1.81, "y": 0 }, + { "time": 0.4333, "x": -4.18, "y": 0 }, + { "time": 0.7, "x": -1.81, "y": 0 }, + { "time": 0.8666, "x": -4.18, "y": 0 } + ] + }, + "hair2": { + "rotate": [ + { "time": 0, "angle": 10.3 }, + { "time": 0.1, "angle": -12.85 }, + { "time": 0.3666, "angle": 24.65 }, + { "time": 0.4333, "angle": 10.3 }, + { "time": 0.5333, "angle": -12.85 }, + { "time": 0.8, "angle": 24.65 }, + { "time": 0.8666, "angle": 10.3 } + ] + }, + "hair1": { + "rotate": [ + { "time": 0, "angle": 16.2 }, + { "time": 0.1, "angle": -13.95 }, + { "time": 0.3666, "angle": 28.27 }, + { "time": 0.4333, "angle": 16.2 }, + { "time": 0.5333, "angle": -13.95 }, + { "time": 0.8, "angle": 28.27 }, + { "time": 0.8666, "angle": 16.2 } + ] + } + } + }, + "run-rough": { + "slots": { + "left foot": { + "attachment": [ + { "time": 0, "name": "left-foot-side" }, + { "time": 0.6, "name": "left-foot-bent01" }, + { "time": 0.6666, "name": "left-foot-bent02" }, + { "time": 0.7333, "name": "left-foot-bent01" }, + { "time": 0.8, "name": "left-foot-side" } + ] + }, + "right foot": { + "attachment": [ + { "time": 0, "name": "right-foot-side" }, + { "time": 0.2, "name": "right-foot-bent01" }, + { "time": 0.2666, "name": "right-foot-bent02" }, + { "time": 0.3333, "name": "right-foot-bent01" }, + { "time": 0.4, "name": "right-foot-side" }, + { "time": 0.8, "name": "right-foot-side" } + ] + } + }, + "bones": { + "right foot": { + "rotate": [ + { "time": 0, "angle": 36 }, + { "time": 0.1333, "angle": 0.65 }, + { "time": 0.2666, "angle": -55.49 }, + { "time": 0.4, "angle": -138.55 }, + { "time": 0.5333, "angle": -79.47 }, + { "time": 0.6666, "angle": -14.79 }, + { "time": 0.8, "angle": 36 } + ], + "translate": [ + { "time": 0, "x": 105.36, "y": 0 }, + { "time": 0.1333, "x": 42.18, "y": 0 }, + { "time": 0.2, "x": 15.37, "y": 23.95 }, + { "time": 0.2666, "x": -11.43, "y": 38.6 }, + { "time": 0.4, "x": -35.03, "y": 83.65 }, + { "time": 0.5333, "x": 2.14, "y": 71.49 }, + { "time": 0.6666, "x": 71.49, "y": 43.61 }, + { "time": 0.8, "x": 105.36, "y": 0 } + ] + }, + "left foot": { + "rotate": [ + { "time": 0, "angle": -139.76 }, + { "time": 0.1333, "angle": -82.51 }, + { "time": 0.2666, "angle": -8.1 }, + { "time": 0.4, "angle": 36.33 }, + { "time": 0.5333, "angle": -2.1 }, + { "time": 0.6666, "angle": -54.46 }, + { "time": 0.8, "angle": -139.76 } + ], + "translate": [ + { "time": 0, "x": -71.5, "y": 85.79 }, + { "time": 0.1333, "x": -32.89, "y": 71.49 }, + { "time": 0.2666, "x": 27.16, "y": 47.9 }, + { "time": 0.4, "x": 53.16, "y": -0.71 }, + { "time": 0.5333, "x": -17.87, "y": 6.43 }, + { "time": 0.6, "x": -30.38, "y": 28.95 }, + { "time": 0.6666, "x": -42.9, "y": 45.04 }, + { "time": 0.8, "x": -71.5, "y": 85.79 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -37.26 }, + { "time": 0.1333, "angle": -16.26 }, + { "time": 0.2666, "angle": -14.67 }, + { "time": 0.4, "angle": -37.26 }, + { "time": 0.5333, "angle": -16.26 }, + { "time": 0.6666, "angle": -14.67 }, + { "time": 0.8, "angle": -37.26 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 5.71 }, + { "time": 0.0666, "x": 0, "y": 10.36 }, + { "time": 0.1333, "x": 0, "y": 30.74 }, + { "time": 0.2666, "x": 0, "y": 47.2 }, + { "time": 0.4, "x": 0, "y": 5.71 }, + { "time": 0.4666, "x": 0, "y": 10.36 }, + { "time": 0.5333, "x": 0, "y": 30.74 }, + { "time": 0.6666, "x": 0, "y": 38.6 }, + { "time": 0.8, "x": 0, "y": 5.71 } + ] + }, + "torso_singleton": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 28.63 }, + { "time": 0.1333, "angle": 8.65 }, + { "time": 0.2666, "angle": 14.21 }, + { "time": 0.4, "angle": 28.63 }, + { "time": 0.5333, "angle": 8.65 }, + { "time": 0.6666, "angle": 14.21 }, + { "time": 0.8, "angle": 28.63 } + ], + "translate": [ + { "time": 0, "x": -3.26, "y": -5.2 }, + { "time": 0.1333, "x": 3.73, "y": -0.15 }, + { "time": 0.2666, "x": 15.23, "y": 2.34 }, + { "time": 0.4, "x": -3.26, "y": -5.2 }, + { "time": 0.5333, "x": 3.73, "y": -0.15 }, + { "time": 0.6666, "x": 15.23, "y": 2.34 }, + { "time": 0.8, "x": -3.26, "y": -5.2 } + ] + }, + "right hand": { + "rotate": [ + { "time": 0, "angle": -30.81, "curve": "stepped" }, + { "time": 0.8, "angle": -30.81 } + ], + "translate": [ + { "time": 0, "x": 3.14, "y": 12.09, "curve": "stepped" }, + { "time": 0.8, "x": 3.14, "y": 12.09 } + ] + }, + "left hand": { + "rotate": [ + { "time": 0, "angle": 42.99, "curve": "stepped" }, + { "time": 0.8, "angle": 42.99 } + ], + "translate": [ + { "time": 0, "x": 26.59, "y": -4.52, "curve": "stepped" }, + { "time": 0.8, "x": 26.59, "y": -4.52 } + ] + }, + "belt ends": { + "rotate": [ + { "time": 0, "angle": 17.27 }, + { "time": 0.1333, "angle": 11.49 }, + { "time": 0.8, "angle": 17.27 } + ], + "translate": [ + { "time": 0, "x": 0.66, "y": 0.27, "curve": "stepped" }, + { "time": 0.8, "x": 0.66, "y": 0.27 } + ] + }, + "hood end1": { + "rotate": [ + { "time": 0, "angle": -59.04 }, + { "time": 0.2666, "angle": -7.32 }, + { "time": 0.4, "angle": -59.04 }, + { "time": 0.6666, "angle": -7.32 }, + { "time": 0.8, "angle": -59.04 } + ], + "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 } + ] + }, + "hair1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + }, + "hair2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/examples/speedy/export/speedy.png b/examples/speedy/export/speedy.png new file mode 100644 index 000000000..324d61df3 Binary files /dev/null and b/examples/speedy/export/speedy.png differ diff --git a/examples/speedy/export/speedy.skel b/examples/speedy/export/speedy.skel new file mode 100644 index 000000000..1a61a70cd Binary files /dev/null and b/examples/speedy/export/speedy.skel differ diff --git a/examples/speedy/images/belt-ends.png b/examples/speedy/images/belt-ends.png new file mode 100644 index 000000000..4f473ef19 Binary files /dev/null and b/examples/speedy/images/belt-ends.png differ diff --git a/examples/speedy/images/hair-1.png b/examples/speedy/images/hair-1.png new file mode 100644 index 000000000..88cdac27d Binary files /dev/null and b/examples/speedy/images/hair-1.png differ diff --git a/examples/speedy/images/hair-2.png b/examples/speedy/images/hair-2.png new file mode 100644 index 000000000..1743efbff Binary files /dev/null and b/examples/speedy/images/hair-2.png differ diff --git a/examples/speedy/images/head.png b/examples/speedy/images/head.png new file mode 100644 index 000000000..c07bc55dd Binary files /dev/null and b/examples/speedy/images/head.png differ diff --git a/examples/speedy/images/hood-end1a.png b/examples/speedy/images/hood-end1a.png new file mode 100644 index 000000000..5d852137b Binary files /dev/null and b/examples/speedy/images/hood-end1a.png differ diff --git a/examples/speedy/images/hood-end1b.png b/examples/speedy/images/hood-end1b.png new file mode 100644 index 000000000..6571972e5 Binary files /dev/null and b/examples/speedy/images/hood-end1b.png differ diff --git a/examples/speedy/images/hood-end1c.png b/examples/speedy/images/hood-end1c.png new file mode 100644 index 000000000..30fbd0efe Binary files /dev/null and b/examples/speedy/images/hood-end1c.png differ diff --git a/examples/speedy/images/hood-end1d.png b/examples/speedy/images/hood-end1d.png new file mode 100644 index 000000000..45a3e5ac2 Binary files /dev/null and b/examples/speedy/images/hood-end1d.png differ diff --git a/examples/speedy/images/hood-end1e.png b/examples/speedy/images/hood-end1e.png new file mode 100644 index 000000000..8b6d3a7bc Binary files /dev/null and b/examples/speedy/images/hood-end1e.png differ diff --git a/examples/speedy/images/hood-end1f.png b/examples/speedy/images/hood-end1f.png new file mode 100644 index 000000000..c60856ad4 Binary files /dev/null and b/examples/speedy/images/hood-end1f.png differ diff --git a/examples/speedy/images/hood-end2a.png b/examples/speedy/images/hood-end2a.png new file mode 100644 index 000000000..da724d574 Binary files /dev/null and b/examples/speedy/images/hood-end2a.png differ diff --git a/examples/speedy/images/hood-end2b.png b/examples/speedy/images/hood-end2b.png new file mode 100644 index 000000000..a8f9dc86f Binary files /dev/null and b/examples/speedy/images/hood-end2b.png differ diff --git a/examples/speedy/images/hood-end2c.png b/examples/speedy/images/hood-end2c.png new file mode 100644 index 000000000..6e3503c74 Binary files /dev/null and b/examples/speedy/images/hood-end2c.png differ diff --git a/examples/speedy/images/hood-end2d.png b/examples/speedy/images/hood-end2d.png new file mode 100644 index 000000000..bdf637690 Binary files /dev/null and b/examples/speedy/images/hood-end2d.png differ diff --git a/examples/speedy/images/hood-end2e.png b/examples/speedy/images/hood-end2e.png new file mode 100644 index 000000000..1611114a7 Binary files /dev/null and b/examples/speedy/images/hood-end2e.png differ diff --git a/examples/speedy/images/hood-end2f.png b/examples/speedy/images/hood-end2f.png new file mode 100644 index 000000000..c7df72297 Binary files /dev/null and b/examples/speedy/images/hood-end2f.png differ diff --git a/examples/speedy/images/left-foot-bent01.png b/examples/speedy/images/left-foot-bent01.png new file mode 100644 index 000000000..76941610b Binary files /dev/null and b/examples/speedy/images/left-foot-bent01.png differ diff --git a/examples/speedy/images/left-foot-bent02.png b/examples/speedy/images/left-foot-bent02.png new file mode 100644 index 000000000..1d026146c Binary files /dev/null and b/examples/speedy/images/left-foot-bent02.png differ diff --git a/examples/speedy/images/left-foot-side.png b/examples/speedy/images/left-foot-side.png new file mode 100644 index 000000000..3b7711808 Binary files /dev/null and b/examples/speedy/images/left-foot-side.png differ diff --git a/examples/speedy/images/left-foot.png b/examples/speedy/images/left-foot.png new file mode 100644 index 000000000..08ed75cc8 Binary files /dev/null and b/examples/speedy/images/left-foot.png differ diff --git a/examples/speedy/images/left-hand.png b/examples/speedy/images/left-hand.png new file mode 100644 index 000000000..370061df6 Binary files /dev/null and b/examples/speedy/images/left-hand.png differ diff --git a/examples/speedy/images/right-foot-bent01.png b/examples/speedy/images/right-foot-bent01.png new file mode 100644 index 000000000..18d6750e8 Binary files /dev/null and b/examples/speedy/images/right-foot-bent01.png differ diff --git a/examples/speedy/images/right-foot-bent02.png b/examples/speedy/images/right-foot-bent02.png new file mode 100644 index 000000000..512b5326f Binary files /dev/null and b/examples/speedy/images/right-foot-bent02.png differ diff --git a/examples/speedy/images/right-foot-side.png b/examples/speedy/images/right-foot-side.png new file mode 100644 index 000000000..efbb932de Binary files /dev/null and b/examples/speedy/images/right-foot-side.png differ diff --git a/examples/speedy/images/right-foot.png b/examples/speedy/images/right-foot.png new file mode 100644 index 000000000..6919a137a Binary files /dev/null and b/examples/speedy/images/right-foot.png differ diff --git a/examples/speedy/images/right-hand.png b/examples/speedy/images/right-hand.png new file mode 100644 index 000000000..989137639 Binary files /dev/null and b/examples/speedy/images/right-hand.png differ diff --git a/examples/speedy/images/torso.png b/examples/speedy/images/torso.png new file mode 100644 index 000000000..98160ada3 Binary files /dev/null and b/examples/speedy/images/torso.png differ diff --git a/examples/speedy/license.txt b/examples/speedy/license.txt new file mode 100644 index 000000000..cd3e3b481 --- /dev/null +++ b/examples/speedy/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2013, Esoteric Software + +The images in this project may be redistributed as long as they are accompanied +by this license file. The images may not be used for commercial use of any +kind. + +The project file is released into the public domain. It may be used as the basis +for derivative work. \ No newline at end of file diff --git a/examples/speedy/speedy.spine b/examples/speedy/speedy.spine new file mode 100644 index 000000000..ecc49d422 Binary files /dev/null and b/examples/speedy/speedy.spine differ diff --git a/examples/spineboy-old/diffuse/eyes-closed.png b/examples/spineboy-old/diffuse/eyes-closed.png new file mode 100644 index 000000000..eadae1d46 Binary files /dev/null and b/examples/spineboy-old/diffuse/eyes-closed.png differ diff --git a/examples/spineboy-old/diffuse/eyes.png b/examples/spineboy-old/diffuse/eyes.png new file mode 100644 index 000000000..7c47f6b12 Binary files /dev/null and b/examples/spineboy-old/diffuse/eyes.png differ diff --git a/examples/spineboy-old/diffuse/head.png b/examples/spineboy-old/diffuse/head.png new file mode 100644 index 000000000..c2c8e6fe2 Binary files /dev/null and b/examples/spineboy-old/diffuse/head.png differ diff --git a/examples/spineboy-old/diffuse/left-ankle.png b/examples/spineboy-old/diffuse/left-ankle.png new file mode 100644 index 000000000..31e07efb0 Binary files /dev/null and b/examples/spineboy-old/diffuse/left-ankle.png differ diff --git a/examples/spineboy-old/diffuse/left-arm.png b/examples/spineboy-old/diffuse/left-arm.png new file mode 100644 index 000000000..b9ab6f8ba Binary files /dev/null and b/examples/spineboy-old/diffuse/left-arm.png differ diff --git a/examples/spineboy-old/diffuse/left-foot.png b/examples/spineboy-old/diffuse/left-foot.png new file mode 100644 index 000000000..14fff9ede Binary files /dev/null and b/examples/spineboy-old/diffuse/left-foot.png differ diff --git a/examples/spineboy-old/diffuse/left-hand.png b/examples/spineboy-old/diffuse/left-hand.png new file mode 100644 index 000000000..8bbed726f Binary files /dev/null and b/examples/spineboy-old/diffuse/left-hand.png differ diff --git a/examples/spineboy-old/diffuse/left-lower-leg.png b/examples/spineboy-old/diffuse/left-lower-leg.png new file mode 100644 index 000000000..3eec91a6b Binary files /dev/null and b/examples/spineboy-old/diffuse/left-lower-leg.png differ diff --git a/examples/spineboy-old/diffuse/left-pant-bottom.png b/examples/spineboy-old/diffuse/left-pant-bottom.png new file mode 100644 index 000000000..f18eddd55 Binary files /dev/null and b/examples/spineboy-old/diffuse/left-pant-bottom.png differ diff --git a/examples/spineboy-old/diffuse/left-shoulder.png b/examples/spineboy-old/diffuse/left-shoulder.png new file mode 100644 index 000000000..9a8bd73d2 Binary files /dev/null and b/examples/spineboy-old/diffuse/left-shoulder.png differ diff --git a/examples/spineboy-old/diffuse/left-upper-leg.png b/examples/spineboy-old/diffuse/left-upper-leg.png new file mode 100644 index 000000000..efb8f14b1 Binary files /dev/null and b/examples/spineboy-old/diffuse/left-upper-leg.png differ diff --git a/examples/spineboy-old/diffuse/neck.png b/examples/spineboy-old/diffuse/neck.png new file mode 100644 index 000000000..25a0bc57e Binary files /dev/null and b/examples/spineboy-old/diffuse/neck.png differ diff --git a/examples/spineboy-old/diffuse/pelvis.png b/examples/spineboy-old/diffuse/pelvis.png new file mode 100644 index 000000000..1758af3f9 Binary files /dev/null and b/examples/spineboy-old/diffuse/pelvis.png differ diff --git a/examples/spineboy-old/diffuse/right-ankle.png b/examples/spineboy-old/diffuse/right-ankle.png new file mode 100644 index 000000000..25d5de6c9 Binary files /dev/null and b/examples/spineboy-old/diffuse/right-ankle.png differ diff --git a/examples/spineboy-old/diffuse/right-arm.png b/examples/spineboy-old/diffuse/right-arm.png new file mode 100644 index 000000000..f1ceec659 Binary files /dev/null and b/examples/spineboy-old/diffuse/right-arm.png differ diff --git a/examples/spineboy-old/diffuse/right-foot-idle.png b/examples/spineboy-old/diffuse/right-foot-idle.png new file mode 100644 index 000000000..2c89336c9 Binary files /dev/null and b/examples/spineboy-old/diffuse/right-foot-idle.png differ diff --git a/examples/spineboy-old/diffuse/right-foot.png b/examples/spineboy-old/diffuse/right-foot.png new file mode 100644 index 000000000..de09ea0c7 Binary files /dev/null and b/examples/spineboy-old/diffuse/right-foot.png differ diff --git a/examples/spineboy-old/diffuse/right-hand.png b/examples/spineboy-old/diffuse/right-hand.png new file mode 100644 index 000000000..2f03c5495 Binary files /dev/null and b/examples/spineboy-old/diffuse/right-hand.png differ diff --git a/examples/spineboy-old/diffuse/right-lower-leg.png b/examples/spineboy-old/diffuse/right-lower-leg.png new file mode 100644 index 000000000..4929b9fc9 Binary files /dev/null and b/examples/spineboy-old/diffuse/right-lower-leg.png differ diff --git a/examples/spineboy-old/diffuse/right-pant-bottom.png b/examples/spineboy-old/diffuse/right-pant-bottom.png new file mode 100644 index 000000000..ccda23e26 Binary files /dev/null and b/examples/spineboy-old/diffuse/right-pant-bottom.png differ diff --git a/examples/spineboy-old/diffuse/right-shoulder.png b/examples/spineboy-old/diffuse/right-shoulder.png new file mode 100644 index 000000000..c7a4c23fc Binary files /dev/null and b/examples/spineboy-old/diffuse/right-shoulder.png differ diff --git a/examples/spineboy-old/diffuse/right-upper-leg.png b/examples/spineboy-old/diffuse/right-upper-leg.png new file mode 100644 index 000000000..746fc0aff Binary files /dev/null and b/examples/spineboy-old/diffuse/right-upper-leg.png differ diff --git a/examples/spineboy-old/diffuse/torso.png b/examples/spineboy-old/diffuse/torso.png new file mode 100644 index 000000000..d6f4772b5 Binary files /dev/null and b/examples/spineboy-old/diffuse/torso.png differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-diffuse.atlas b/examples/spineboy-old/export/spineboy-old-diffuse.atlas similarity index 79% rename from spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-diffuse.atlas rename to examples/spineboy-old/export/spineboy-old-diffuse.atlas index 36881098d..4efa6dc46 100644 --- a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-diffuse.atlas +++ b/examples/spineboy-old/export/spineboy-old-diffuse.atlas @@ -1,165 +1,166 @@ spineboy-old-diffuse.png +size: 512,128 format: RGBA8888 filter: Linear,Linear repeat: none eyes rotate: false - xy: 380, 193 + xy: 439, 99 size: 34, 27 orig: 34, 27 offset: 0, 0 index: -1 eyes-closed rotate: false - xy: 344, 193 + xy: 439, 70 size: 34, 27 orig: 34, 27 offset: 0, 0 index: -1 head - rotate: false - xy: 2, 120 + rotate: true + xy: 2, 5 size: 121, 132 orig: 121, 132 offset: 0, 0 index: -1 left-ankle - rotate: false - xy: 213, 171 + rotate: true + xy: 475, 71 size: 25, 32 orig: 25, 32 offset: 0, 0 index: -1 left-arm - rotate: false - xy: 72, 17 + rotate: true + xy: 306, 2 size: 35, 29 orig: 35, 29 offset: 0, 0 index: -1 left-foot rotate: false - xy: 365, 222 + xy: 205, 2 size: 65, 30 orig: 65, 30 offset: 0, 0 index: -1 left-hand rotate: false - xy: 176, 135 + xy: 475, 31 size: 30, 38 orig: 30, 38 offset: 0, 0 index: -1 left-lower-leg rotate: false - xy: 125, 122 + xy: 339, 62 size: 49, 64 orig: 49, 64 offset: 0, 0 index: -1 left-pant-bottom rotate: false - xy: 2, 2 + xy: 254, 36 size: 44, 22 orig: 44, 22 offset: 0, 0 index: -1 left-shoulder - rotate: false - xy: 153, 67 + rotate: true + xy: 337, 3 size: 34, 53 orig: 34, 53 offset: 0, 0 index: -1 left-upper-leg rotate: false - xy: 118, 52 + xy: 252, 60 size: 33, 66 orig: 33, 66 offset: 0, 0 index: -1 neck rotate: false - xy: 177, 175 + xy: 475, 98 size: 34, 28 orig: 34, 28 offset: 0, 0 index: -1 pelvis - rotate: false - xy: 177, 205 + rotate: true + xy: 390, 63 size: 63, 47 orig: 63, 47 offset: 0, 0 index: -1 right-ankle - rotate: false - xy: 297, 170 + rotate: true + xy: 475, 4 size: 25, 30 orig: 25, 30 offset: 0, 0 index: -1 right-arm - rotate: false - xy: 274, 154 + rotate: true + xy: 300, 39 size: 21, 45 orig: 21, 45 offset: 0, 0 index: -1 right-foot rotate: false - xy: 296, 222 + xy: 136, 2 size: 67, 30 orig: 67, 30 offset: 0, 0 index: -1 right-foot-idle - rotate: false - xy: 432, 224 + rotate: true + xy: 392, 8 size: 53, 28 orig: 53, 28 offset: 0, 0 index: -1 right-hand rotate: false - xy: 240, 167 + xy: 272, 2 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 right-lower-leg rotate: false - xy: 125, 188 + xy: 287, 62 size: 50, 64 orig: 50, 64 offset: 0, 0 index: -1 right-pant-bottom rotate: false - xy: 296, 202 + xy: 206, 36 size: 46, 18 orig: 46, 18 offset: 0, 0 index: -1 right-shoulder - rotate: false - xy: 242, 201 + rotate: true + xy: 422, 9 size: 52, 51 orig: 52, 51 offset: 0, 0 index: -1 right-upper-leg rotate: false - xy: 72, 48 + xy: 206, 56 size: 44, 70 orig: 44, 70 offset: 0, 0 index: -1 torso rotate: false - xy: 2, 26 + xy: 136, 34 size: 68, 92 orig: 68, 92 offset: 0, 0 diff --git a/examples/spineboy-old/export/spineboy-old-diffuse.png b/examples/spineboy-old/export/spineboy-old-diffuse.png new file mode 100644 index 000000000..46a22db6b Binary files /dev/null and b/examples/spineboy-old/export/spineboy-old-diffuse.png differ diff --git a/examples/spineboy-old/export/spineboy-old-normal.png b/examples/spineboy-old/export/spineboy-old-normal.png new file mode 100644 index 000000000..ff367ac75 Binary files /dev/null and b/examples/spineboy-old/export/spineboy-old-normal.png differ diff --git a/examples/spineboy-old/export/spineboy-old-pma.atlas b/examples/spineboy-old/export/spineboy-old-pma.atlas new file mode 100644 index 000000000..d5096d1ae --- /dev/null +++ b/examples/spineboy-old/export/spineboy-old-pma.atlas @@ -0,0 +1,167 @@ + +spineboy-old-pma.png +size: 1024,128 +format: RGBA8888 +filter: Linear,Linear +repeat: none +eyes + rotate: false + xy: 808, 99 + size: 34, 27 + orig: 34, 27 + offset: 0, 0 + index: -1 +eyes-closed + rotate: false + xy: 844, 99 + size: 34, 27 + orig: 34, 27 + offset: 0, 0 + index: -1 +head + rotate: true + xy: 2, 5 + size: 121, 132 + orig: 121, 132 + offset: 0, 0 + index: -1 +left-ankle + rotate: false + xy: 914, 94 + size: 25, 32 + orig: 25, 32 + offset: 0, 0 + index: -1 +left-arm + rotate: false + xy: 735, 97 + size: 35, 29 + orig: 35, 29 + offset: 0, 0 + index: -1 +left-foot + rotate: false + xy: 205, 2 + size: 65, 30 + orig: 65, 30 + offset: 0, 0 + index: -1 +left-hand + rotate: true + xy: 695, 91 + size: 35, 38 + orig: 35, 38 + offset: 0, 0 + index: -1 +left-lower-leg + rotate: true + xy: 331, 77 + size: 49, 64 + orig: 49, 64 + offset: 0, 0 + index: -1 +left-pant-bottom + rotate: false + xy: 206, 38 + size: 44, 22 + orig: 44, 22 + offset: 0, 0 + index: -1 +left-shoulder + rotate: true + xy: 531, 92 + size: 34, 53 + orig: 34, 53 + offset: 0, 0 + index: -1 +left-upper-leg + rotate: true + xy: 462, 93 + size: 33, 67 + orig: 33, 67 + offset: 0, 0 + index: -1 +neck + rotate: false + xy: 772, 98 + size: 34, 28 + orig: 34, 28 + offset: 0, 0 + index: -1 +pelvis + rotate: false + xy: 397, 79 + size: 63, 47 + orig: 63, 47 + offset: 0, 0 + index: -1 +right-ankle + rotate: false + xy: 941, 96 + size: 25, 30 + orig: 25, 30 + offset: 0, 0 + index: -1 +right-arm + rotate: true + xy: 640, 75 + size: 21, 45 + orig: 21, 45 + offset: 0, 0 + index: -1 +right-foot + rotate: false + xy: 136, 2 + size: 67, 30 + orig: 67, 30 + offset: 0, 0 + index: -1 +right-foot-idle + rotate: false + xy: 640, 98 + size: 53, 28 + orig: 53, 28 + offset: 0, 0 + index: -1 +right-hand + rotate: false + xy: 880, 94 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +right-lower-leg + rotate: false + xy: 206, 62 + size: 51, 64 + orig: 51, 64 + offset: 0, 0 + index: -1 +right-pant-bottom + rotate: false + xy: 259, 62 + size: 46, 18 + orig: 46, 18 + offset: 0, 0 + index: -1 +right-shoulder + rotate: false + xy: 586, 75 + size: 52, 51 + orig: 52, 51 + offset: 0, 0 + index: -1 +right-upper-leg + rotate: true + xy: 259, 82 + size: 44, 70 + orig: 44, 70 + offset: 0, 0 + index: -1 +torso + rotate: false + xy: 136, 34 + size: 68, 92 + orig: 68, 92 + offset: 0, 0 + index: -1 diff --git a/examples/spineboy-old/export/spineboy-old-pma.png b/examples/spineboy-old/export/spineboy-old-pma.png new file mode 100644 index 000000000..7d5bb12dd Binary files /dev/null and b/examples/spineboy-old/export/spineboy-old-pma.png differ diff --git a/examples/spineboy-old/export/spineboy-old.atlas b/examples/spineboy-old/export/spineboy-old.atlas new file mode 100644 index 000000000..3827a60e3 --- /dev/null +++ b/examples/spineboy-old/export/spineboy-old.atlas @@ -0,0 +1,167 @@ + +spineboy-old.png +size: 1024,128 +format: RGBA8888 +filter: Linear,Linear +repeat: none +eyes + rotate: false + xy: 808, 99 + size: 34, 27 + orig: 34, 27 + offset: 0, 0 + index: -1 +eyes-closed + rotate: false + xy: 844, 99 + size: 34, 27 + orig: 34, 27 + offset: 0, 0 + index: -1 +head + rotate: true + xy: 2, 5 + size: 121, 132 + orig: 121, 132 + offset: 0, 0 + index: -1 +left-ankle + rotate: false + xy: 914, 94 + size: 25, 32 + orig: 25, 32 + offset: 0, 0 + index: -1 +left-arm + rotate: false + xy: 735, 97 + size: 35, 29 + orig: 35, 29 + offset: 0, 0 + index: -1 +left-foot + rotate: false + xy: 205, 2 + size: 65, 30 + orig: 65, 30 + offset: 0, 0 + index: -1 +left-hand + rotate: true + xy: 695, 91 + size: 35, 38 + orig: 35, 38 + offset: 0, 0 + index: -1 +left-lower-leg + rotate: true + xy: 331, 77 + size: 49, 64 + orig: 49, 64 + offset: 0, 0 + index: -1 +left-pant-bottom + rotate: false + xy: 206, 38 + size: 44, 22 + orig: 44, 22 + offset: 0, 0 + index: -1 +left-shoulder + rotate: true + xy: 531, 92 + size: 34, 53 + orig: 34, 53 + offset: 0, 0 + index: -1 +left-upper-leg + rotate: true + xy: 462, 93 + size: 33, 67 + orig: 33, 67 + offset: 0, 0 + index: -1 +neck + rotate: false + xy: 772, 98 + size: 34, 28 + orig: 34, 28 + offset: 0, 0 + index: -1 +pelvis + rotate: false + xy: 397, 79 + size: 63, 47 + orig: 63, 47 + offset: 0, 0 + index: -1 +right-ankle + rotate: false + xy: 941, 96 + size: 25, 30 + orig: 25, 30 + offset: 0, 0 + index: -1 +right-arm + rotate: true + xy: 640, 75 + size: 21, 45 + orig: 21, 45 + offset: 0, 0 + index: -1 +right-foot + rotate: false + xy: 136, 2 + size: 67, 30 + orig: 67, 30 + offset: 0, 0 + index: -1 +right-foot-idle + rotate: false + xy: 640, 98 + size: 53, 28 + orig: 53, 28 + offset: 0, 0 + index: -1 +right-hand + rotate: false + xy: 880, 94 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +right-lower-leg + rotate: false + xy: 206, 62 + size: 51, 64 + orig: 51, 64 + offset: 0, 0 + index: -1 +right-pant-bottom + rotate: false + xy: 259, 62 + size: 46, 18 + orig: 46, 18 + offset: 0, 0 + index: -1 +right-shoulder + rotate: false + xy: 586, 75 + size: 52, 51 + orig: 52, 51 + offset: 0, 0 + index: -1 +right-upper-leg + rotate: true + xy: 259, 82 + size: 44, 70 + orig: 44, 70 + offset: 0, 0 + index: -1 +torso + rotate: false + xy: 136, 34 + size: 68, 92 + orig: 68, 92 + offset: 0, 0 + index: -1 diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old.json b/examples/spineboy-old/export/spineboy-old.json similarity index 96% rename from spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old.json rename to examples/spineboy-old/export/spineboy-old.json index a590a871c..ce83de110 100644 --- a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old.json +++ b/examples/spineboy-old/export/spineboy-old.json @@ -1,23 +1,24 @@ { +"skeleton": { "hash": "DIwMYpCxf9hwB7YgCS6TSSPK/5A", "spine": "3.4.00", "width": 161.12, "height": 343.58, "images": "./images/" }, "bones": [ { "name": "root" }, { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, - { "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 }, + { "name": "torso", "parent": "hip", "length": 85.82, "rotation": 99.4, "x": -6.42, "y": 1.97 }, + { "name": "neck", "parent": "torso", "length": 18.38, "rotation": 0.9, "x": 83.64, "y": -1.78 }, + { "name": "head", "parent": "neck", "length": 68.28, "rotation": -8.94, "x": 19.09, "y": 6.97 }, + { "name": "left shoulder", "parent": "torso", "length": 44.19, "rotation": -156.96, "x": 78.96, "y": -15.75 }, + { "name": "left arm", "parent": "left shoulder", "length": 35.62, "rotation": 28.16, "x": 44.19, "y": -0.01 }, + { "name": "left upper leg", "parent": "hip", "length": 50.39, "rotation": -89.09, "x": 14.45, "y": 2.81 }, + { "name": "left lower leg", "parent": "left upper leg", "length": 56.45, "rotation": -16.65, "x": 51.78, "y": 3.46 }, + { "name": "left foot", "parent": "left lower leg", "length": 46.5, "rotation": 102.43, "x": 64.02, "y": -8.67 }, + { "name": "left hand", "parent": "left arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.07 }, { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, - { "name": "right upper leg", "parent": "hip", "length": 45.76, "x": -18.27, "rotation": -101.13 }, - { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 99.4 }, - { "name": "left lower leg", "parent": "left upper leg", "length": 56.45, "x": 51.78, "y": 3.46, "rotation": -16.65 }, - { "name": "left shoulder", "parent": "torso", "length": 44.19, "x": 78.96, "y": -15.75, "rotation": -156.96 }, - { "name": "neck", "parent": "torso", "length": 18.38, "x": 83.64, "y": -1.78, "rotation": 0.9 }, - { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 50.21, "y": 0.6, "rotation": -10.7 }, - { "name": "right shoulder", "parent": "torso", "length": 49.95, "x": 81.9, "y": 6.79, "rotation": 130.6 }, - { "name": "head", "parent": "neck", "length": 68.28, "x": 19.09, "y": 6.97, "rotation": -8.94 }, - { "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 44.19, "y": -0.01, "rotation": 28.16 }, - { "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 64.02, "y": -8.67, "rotation": 102.43 }, - { "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 49.95, "y": -0.12, "rotation": 40.12 }, - { "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 }, - { "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 }, - { "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 } + { "name": "right shoulder", "parent": "torso", "length": 49.95, "rotation": 130.6, "x": 81.9, "y": 6.79 }, + { "name": "right arm", "parent": "right shoulder", "length": 36.74, "rotation": 40.12, "x": 49.95, "y": -0.12 }, + { "name": "right upper leg", "parent": "hip", "length": 45.76, "rotation": -101.13, "x": -18.27 }, + { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "rotation": -10.7, "x": 50.21, "y": 0.6 }, + { "name": "right foot", "parent": "right lower leg", "length": 45.45, "rotation": 110.3, "x": 64.88, "y": 0.04 }, + { "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.35, "x": 36.9, "y": 0.34 } ], "slots": [ { "name": "left shoulder", "bone": "left shoulder", "attachment": "left-shoulder" }, @@ -44,7 +45,8 @@ "bb-head": { "bb-head": { "type": "boundingbox", - "vertices": [ 77.2608, -53.82651, 105.80151, -32.42244, 58.433777, 40.348133, 5.8296814, 37.007954, -7.0167694, -42.236595 ] + "vertexCount": 5, + "vertices": [ 77.26, -53.82, 105.8, -32.41999, 58.43, 40.34, 5.82, 37, -7.01, -42.23 ] } }, "eyes": { @@ -262,7 +264,7 @@ ] } }, - "draworder": [ + "drawOrder": [ { "time": 1.2362, "offsets": [ diff --git a/examples/spineboy-old/export/spineboy-old.png b/examples/spineboy-old/export/spineboy-old.png new file mode 100644 index 000000000..ea3e6245a Binary files /dev/null and b/examples/spineboy-old/export/spineboy-old.png differ diff --git a/examples/spineboy-old/export/spineboy-old.skel b/examples/spineboy-old/export/spineboy-old.skel new file mode 100644 index 000000000..c04665a2a Binary files /dev/null and b/examples/spineboy-old/export/spineboy-old.skel differ diff --git a/examples/spineboy-old/images/eyes-closed.png b/examples/spineboy-old/images/eyes-closed.png new file mode 100644 index 000000000..eadae1d46 Binary files /dev/null and b/examples/spineboy-old/images/eyes-closed.png differ diff --git a/examples/spineboy-old/images/eyes.png b/examples/spineboy-old/images/eyes.png new file mode 100644 index 000000000..7c47f6b12 Binary files /dev/null and b/examples/spineboy-old/images/eyes.png differ diff --git a/examples/spineboy-old/images/head.png b/examples/spineboy-old/images/head.png new file mode 100644 index 000000000..913ff1590 Binary files /dev/null and b/examples/spineboy-old/images/head.png differ diff --git a/examples/spineboy-old/images/left-ankle.png b/examples/spineboy-old/images/left-ankle.png new file mode 100644 index 000000000..31e07efb0 Binary files /dev/null and b/examples/spineboy-old/images/left-ankle.png differ diff --git a/examples/spineboy-old/images/left-arm.png b/examples/spineboy-old/images/left-arm.png new file mode 100644 index 000000000..68eaaa646 Binary files /dev/null and b/examples/spineboy-old/images/left-arm.png differ diff --git a/examples/spineboy-old/images/left-foot.png b/examples/spineboy-old/images/left-foot.png new file mode 100644 index 000000000..5770eb7fa Binary files /dev/null and b/examples/spineboy-old/images/left-foot.png differ diff --git a/examples/spineboy-old/images/left-hand.png b/examples/spineboy-old/images/left-hand.png new file mode 100644 index 000000000..6fca7f7e7 Binary files /dev/null and b/examples/spineboy-old/images/left-hand.png differ diff --git a/examples/spineboy-old/images/left-lower-leg.png b/examples/spineboy-old/images/left-lower-leg.png new file mode 100644 index 000000000..9ebee16bf Binary files /dev/null and b/examples/spineboy-old/images/left-lower-leg.png differ diff --git a/examples/spineboy-old/images/left-pant-bottom.png b/examples/spineboy-old/images/left-pant-bottom.png new file mode 100644 index 000000000..f18eddd55 Binary files /dev/null and b/examples/spineboy-old/images/left-pant-bottom.png differ diff --git a/examples/spineboy-old/images/left-shoulder.png b/examples/spineboy-old/images/left-shoulder.png new file mode 100644 index 000000000..695f77e9b Binary files /dev/null and b/examples/spineboy-old/images/left-shoulder.png differ diff --git a/examples/spineboy-old/images/left-upper-leg.png b/examples/spineboy-old/images/left-upper-leg.png new file mode 100644 index 000000000..30977963d Binary files /dev/null and b/examples/spineboy-old/images/left-upper-leg.png differ diff --git a/examples/spineboy-old/images/neck.png b/examples/spineboy-old/images/neck.png new file mode 100644 index 000000000..b5d6e940f Binary files /dev/null and b/examples/spineboy-old/images/neck.png differ diff --git a/examples/spineboy-old/images/pelvis.png b/examples/spineboy-old/images/pelvis.png new file mode 100644 index 000000000..6ef7b990f Binary files /dev/null and b/examples/spineboy-old/images/pelvis.png differ diff --git a/examples/spineboy-old/images/right-ankle.png b/examples/spineboy-old/images/right-ankle.png new file mode 100644 index 000000000..25d5de6c9 Binary files /dev/null and b/examples/spineboy-old/images/right-ankle.png differ diff --git a/examples/spineboy-old/images/right-arm.png b/examples/spineboy-old/images/right-arm.png new file mode 100644 index 000000000..c27253550 Binary files /dev/null and b/examples/spineboy-old/images/right-arm.png differ diff --git a/examples/spineboy-old/images/right-foot-idle.png b/examples/spineboy-old/images/right-foot-idle.png new file mode 100644 index 000000000..967b81228 Binary files /dev/null and b/examples/spineboy-old/images/right-foot-idle.png differ diff --git a/examples/spineboy-old/images/right-foot.png b/examples/spineboy-old/images/right-foot.png new file mode 100644 index 000000000..46b29a3a9 Binary files /dev/null and b/examples/spineboy-old/images/right-foot.png differ diff --git a/examples/spineboy-old/images/right-hand.png b/examples/spineboy-old/images/right-hand.png new file mode 100644 index 000000000..185aaa199 Binary files /dev/null and b/examples/spineboy-old/images/right-hand.png differ diff --git a/examples/spineboy-old/images/right-lower-leg.png b/examples/spineboy-old/images/right-lower-leg.png new file mode 100644 index 000000000..2bb1b3649 Binary files /dev/null and b/examples/spineboy-old/images/right-lower-leg.png differ diff --git a/examples/spineboy-old/images/right-pant-bottom.png b/examples/spineboy-old/images/right-pant-bottom.png new file mode 100644 index 000000000..727f9af6b Binary files /dev/null and b/examples/spineboy-old/images/right-pant-bottom.png differ diff --git a/examples/spineboy-old/images/right-shoulder.png b/examples/spineboy-old/images/right-shoulder.png new file mode 100644 index 000000000..4947f3fbc Binary files /dev/null and b/examples/spineboy-old/images/right-shoulder.png differ diff --git a/examples/spineboy-old/images/right-upper-leg.png b/examples/spineboy-old/images/right-upper-leg.png new file mode 100644 index 000000000..ab615f084 Binary files /dev/null and b/examples/spineboy-old/images/right-upper-leg.png differ diff --git a/examples/spineboy-old/images/torso.png b/examples/spineboy-old/images/torso.png new file mode 100644 index 000000000..c12f45767 Binary files /dev/null and b/examples/spineboy-old/images/torso.png differ diff --git a/examples/spineboy-old/license.txt b/examples/spineboy-old/license.txt new file mode 100644 index 000000000..cd3e3b481 --- /dev/null +++ b/examples/spineboy-old/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2013, Esoteric Software + +The images in this project may be redistributed as long as they are accompanied +by this license file. The images may not be used for commercial use of any +kind. + +The project file is released into the public domain. It may be used as the basis +for derivative work. \ No newline at end of file diff --git a/examples/spineboy-old/normal/eyes-closed.png b/examples/spineboy-old/normal/eyes-closed.png new file mode 100644 index 000000000..eadae1d46 Binary files /dev/null and b/examples/spineboy-old/normal/eyes-closed.png differ diff --git a/examples/spineboy-old/normal/eyes-normal.png b/examples/spineboy-old/normal/eyes-normal.png new file mode 100644 index 000000000..f8b18316f Binary files /dev/null and b/examples/spineboy-old/normal/eyes-normal.png differ diff --git a/examples/spineboy-old/normal/head-normal.png b/examples/spineboy-old/normal/head-normal.png new file mode 100644 index 000000000..f6f729dcc Binary files /dev/null and b/examples/spineboy-old/normal/head-normal.png differ diff --git a/examples/spineboy-old/normal/left-ankle.png b/examples/spineboy-old/normal/left-ankle.png new file mode 100644 index 000000000..31e07efb0 Binary files /dev/null and b/examples/spineboy-old/normal/left-ankle.png differ diff --git a/examples/spineboy-old/normal/left-arm-normal.png b/examples/spineboy-old/normal/left-arm-normal.png new file mode 100644 index 000000000..2802b0bc6 Binary files /dev/null and b/examples/spineboy-old/normal/left-arm-normal.png differ diff --git a/examples/spineboy-old/normal/left-foot-normal.png b/examples/spineboy-old/normal/left-foot-normal.png new file mode 100644 index 000000000..0d87e2e50 Binary files /dev/null and b/examples/spineboy-old/normal/left-foot-normal.png differ diff --git a/examples/spineboy-old/normal/left-hand-normal.png b/examples/spineboy-old/normal/left-hand-normal.png new file mode 100644 index 000000000..f41d98c7b Binary files /dev/null and b/examples/spineboy-old/normal/left-hand-normal.png differ diff --git a/examples/spineboy-old/normal/left-lower-leg-normal.png b/examples/spineboy-old/normal/left-lower-leg-normal.png new file mode 100644 index 000000000..39617f268 Binary files /dev/null and b/examples/spineboy-old/normal/left-lower-leg-normal.png differ diff --git a/examples/spineboy-old/normal/left-pant-bottom.png b/examples/spineboy-old/normal/left-pant-bottom.png new file mode 100644 index 000000000..f18eddd55 Binary files /dev/null and b/examples/spineboy-old/normal/left-pant-bottom.png differ diff --git a/examples/spineboy-old/normal/left-shoulder-normal.png b/examples/spineboy-old/normal/left-shoulder-normal.png new file mode 100644 index 000000000..6cefd755e Binary files /dev/null and b/examples/spineboy-old/normal/left-shoulder-normal.png differ diff --git a/examples/spineboy-old/normal/left-upper-leg-normal.png b/examples/spineboy-old/normal/left-upper-leg-normal.png new file mode 100644 index 000000000..712d0327c Binary files /dev/null and b/examples/spineboy-old/normal/left-upper-leg-normal.png differ diff --git a/examples/spineboy-old/normal/neck-normal.png b/examples/spineboy-old/normal/neck-normal.png new file mode 100644 index 000000000..ef19db6ba Binary files /dev/null and b/examples/spineboy-old/normal/neck-normal.png differ diff --git a/examples/spineboy-old/normal/pelvis-normal.png b/examples/spineboy-old/normal/pelvis-normal.png new file mode 100644 index 000000000..ed701665a Binary files /dev/null and b/examples/spineboy-old/normal/pelvis-normal.png differ diff --git a/examples/spineboy-old/normal/right-ankle.png b/examples/spineboy-old/normal/right-ankle.png new file mode 100644 index 000000000..7a97fb700 Binary files /dev/null and b/examples/spineboy-old/normal/right-ankle.png differ diff --git a/examples/spineboy-old/normal/right-arm-normal.png b/examples/spineboy-old/normal/right-arm-normal.png new file mode 100644 index 000000000..49eb54ae8 Binary files /dev/null and b/examples/spineboy-old/normal/right-arm-normal.png differ diff --git a/examples/spineboy-old/normal/right-foot-idle.png b/examples/spineboy-old/normal/right-foot-idle.png new file mode 100644 index 000000000..79c84fed9 Binary files /dev/null and b/examples/spineboy-old/normal/right-foot-idle.png differ diff --git a/examples/spineboy-old/normal/right-foot-normal.png b/examples/spineboy-old/normal/right-foot-normal.png new file mode 100644 index 000000000..81fee40db Binary files /dev/null and b/examples/spineboy-old/normal/right-foot-normal.png differ diff --git a/examples/spineboy-old/normal/right-hand-normal.png b/examples/spineboy-old/normal/right-hand-normal.png new file mode 100644 index 000000000..7fb49a102 Binary files /dev/null and b/examples/spineboy-old/normal/right-hand-normal.png differ diff --git a/examples/spineboy-old/normal/right-lower-leg-normal.png b/examples/spineboy-old/normal/right-lower-leg-normal.png new file mode 100644 index 000000000..b09f6eaf7 Binary files /dev/null and b/examples/spineboy-old/normal/right-lower-leg-normal.png differ diff --git a/examples/spineboy-old/normal/right-pant-bottom.png b/examples/spineboy-old/normal/right-pant-bottom.png new file mode 100644 index 000000000..f0a737d60 Binary files /dev/null and b/examples/spineboy-old/normal/right-pant-bottom.png differ diff --git a/examples/spineboy-old/normal/right-shoulder-normal.png b/examples/spineboy-old/normal/right-shoulder-normal.png new file mode 100644 index 000000000..aeaea18e9 Binary files /dev/null and b/examples/spineboy-old/normal/right-shoulder-normal.png differ diff --git a/examples/spineboy-old/normal/right-upper-leg-normal.png b/examples/spineboy-old/normal/right-upper-leg-normal.png new file mode 100644 index 000000000..5a071e7ef Binary files /dev/null and b/examples/spineboy-old/normal/right-upper-leg-normal.png differ diff --git a/examples/spineboy-old/normal/torso-normal.png b/examples/spineboy-old/normal/torso-normal.png new file mode 100644 index 000000000..f57b94803 Binary files /dev/null and b/examples/spineboy-old/normal/torso-normal.png differ diff --git a/examples/spineboy-old/spineboy-old.spine b/examples/spineboy-old/spineboy-old.spine new file mode 100644 index 000000000..9375998d7 Binary files /dev/null and b/examples/spineboy-old/spineboy-old.spine differ diff --git a/examples/spineboy/export/spineboy-hover.json b/examples/spineboy/export/spineboy-hover.json new file mode 100644 index 000000000..97c861981 --- /dev/null +++ b/examples/spineboy/export/spineboy-hover.json @@ -0,0 +1,947 @@ +{ +"skeleton": { "hash": "kLwY39chXP87A04aUX8jh92jUjs", "spine": "3.4.00", "width": 511.47, "height": 739.87, "images": "./images/" }, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "x": -49.89, "y": 290.95 }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "rotation": -72.54, "x": 8.91, "y": -5.62, "color": "ff000dff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.83, "x": 86.1, "y": -1.32, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 51.58, "rotation": 45.77, "x": 121.45, "y": -0.75, "color": "ff000dff" }, + { "name": "back_foot_tip", "parent": "rear_foot", "length": 50.3, "rotation": 46.62, "x": 51.16, "y": 0.23, "color": "ff000dff" }, + { "name": "hoverboard", "parent": "root", "length": 72.32, "x": 9.9, "y": 57.05 }, + { "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.96, "color": "ff3f00ff" }, + { "name": "front_ankle_ik", "parent": "front_foot_ik", "x": -28.39, "y": 29.06, "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.32, "color": "00ff04ff" }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.57, + "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.19, "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.26, "x": 128.75, "y": -0.33, "color": "00ff04ff" }, + { + "name": "front_foot_tip", + "parent": "front_foot", + "length": 56.02, + "rotation": 44.3, + "x": 41.42, + "y": -0.08, + "color": "00ff04ff" + }, + { "name": "front_toe_ik", "parent": "hoverboard", "rotation": -0.97, "x": -44.59, "y": 21.98, "color": "ff3f00ff" }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -153.6, "x": 92.35, "y": -19.21, "color": "ff000dff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "rotation": 43.56, "x": 51.35, "color": "ff000dff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "rotation": 17.61, "x": 34.41, "y": -0.45, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.04, "y": 52.13, "color": "ff000dff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" }, + { "name": "head", "parent": "neck", "length": 131.78, "rotation": 51.9, "x": 27.66, "y": -0.25, "color": "e0da19ff" }, + { "name": "hair1", "parent": "head", "length": 47.22, "rotation": -49.1, "x": 149.82, "y": -59.77, "color": "e0da19ff" }, + { "name": "hair2", "parent": "hair1", "length": 55.56, "rotation": 50.41, "x": 47.22, "y": 0.18, "color": "e0da19ff" }, + { "name": "hair3", "parent": "head", "length": 62.22, "rotation": -32.16, "x": 164.13, "y": 3.68, "color": "e0da19ff" }, + { "name": "hair4", "parent": "hair3", "length": 80.28, "rotation": 83.7, "x": 62.22, "y": -0.03, "color": "e0da19ff" }, + { + "name": "hoverboard_thruster_front", + "parent": "hoverboard", + "rotation": -29.03, + "x": 95.77, + "y": -2.7, + "inheritRotation": false + }, + { + "name": "hoverboard_thruster_rear", + "parent": "hoverboard", + "rotation": -29.03, + "x": -76.46, + "y": -5.11, + "inheritRotation": false + }, + { "name": "hoverglow_front", "parent": "hoverboard_thruster_front", "x": -1.89, "y": -37.78 }, + { "name": "hoverglow_rear", "parent": "hoverboard_thruster_rear", "x": 0.95, "y": -35.66 }, + { "name": "rear_foot_ik", "parent": "hoverboard", "rotation": -0.97, "x": 83.75, "y": 21.71, "color": "ff3f00ff" }, + { "name": "rear_ankle_ik", "parent": "rear_foot_ik", "x": -33.9, "y": 37.33, "color": "ff3f00ff" }, + { "name": "rear_toe_ik", "parent": "hoverboard", "rotation": -0.97, "x": 135.05, "y": 20.47, "color": "ff3f00ff" } +], +"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", + "bones": [ "front_thigh", "front_shin" ], + "target": "front_ankle_ik", + "bendPositive": false + }, + { + "name": "front_foot_ik", + "bones": [ "front_foot" ], + "target": "front_foot_ik" + }, + { + "name": "front_toe_ik", + "bones": [ "front_foot_tip" ], + "target": "front_toe_ik" + }, + { + "name": "rear_ankle_ik", + "bones": [ "rear_thigh", "rear_shin" ], + "target": "rear_ankle_ik", + "bendPositive": false + }, + { + "name": "rear_foot_ik", + "bones": [ "rear_foot" ], + "target": "rear_foot_ik" + }, + { + "name": "rear_toe_ik", + "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.16, -86.8, 28.32, 0.92, 112.27, 30.44, 143.11, -57.28 ], + "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.03, "y": -1.67, "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.23421, 0.62256, 0.30335, 0.65008, 0.37035, 0.67637, 0.38403, 0.72068, 0.40709, 0.76264, 0.42894, 1, 0.70375, 1, 1, 0.65517, 1, 0.3644, 1, 0, 1, 0, 0.39196, 0, 0, 0.17845, 0, 0.49795, 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, 17, 18.17, 41.57, 0.72255, 18, 12.46, 46.04, 0.27744, 2, 17, 24.08, 40.75, 0.57406, 18, 16.12, 41.34, 0.42592, 2, 17, 29.8, 39.97, 0.47663, 18, 19.67, 36.77, 0.52336, 2, 17, 32.8, 41.66, 0.37452, 18, 22.99, 35.89, 0.62547, 2, 17, 37.86, 44.51, 0.24772, 18, 28.6, 34.4, 0.75227, 2, 17, 42.65, 47.21, 0.17783, 18, 33.91, 32.98, 0.82216, 1, 18, 64.15, 14.56, 1, 1, 18, 64.51, -5.87, 1, 1, 18, 21.07, -6.63, 1, 2, 17, 35.38, -16.16, 0.99998, 18, -15.54, -7.28, 1.0E-5, 1, 17, 3.1, -48.81, 1, 1, 17, -26.72, -19.31, 1, 1, 17, -45.95, -0.29, 1, 1, 17, -30.14, 15.69, 1, 2, 17, -1.84, 44.31, 0.91511, 18, 0.05, 61.98, 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.24, "rotation": 45.32, "width": 128, "height": 70 }, + "front_foot_bend2": { "x": 8.16, "y": 19.57, "rotation": 45.32, "width": 108, "height": 93 } + }, + "front_shin": { + "front_shin": { "x": 60.92, "y": -3.9, "rotation": 96.59, "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.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 } + }, + "goggles": { + "goggles": { + "type": "mesh", + "uvs": [ 0.53653, 0.04113, 0.72921, 0.16034, 0.91666, 0.33222, 0.97046, 0.31329, 1, 0.48053, 0.95755, 0.57329, 0.88825, 0.63279, 0.86877, 0.78962, 0.77403, 0.86749, 0.72628, 1, 0.60713, 0.93862, 0.496, 0.88138, 0.41557, 0.75026, 0.32547, 0.70084, 0.2782, 0.58256, 0.17209, 0.63281, 0.17228, 0.75071, 0.1078, 0.79897, 0, 0.32304, 0, 0.12475, 0.07372, 0.07343, 0.15423, 0.10733, 0.23165, 0.13993, 0.30313, 0.02256, 0.34802, 0, 0.42978, 0.69183, 0.39475, 0.51041, 0.39488, 0.31511, 0.45878, 0.23197, 0.56501, 0.28108, 0.6996, 0.39216, 0.82039, 0.54202, 0.85737, 0.62342, 0.91107, 0.51406, 0.72638, 0.32146, 0.58762, 0.19609, 0.48074, 0.11268, 0.37822, 0.05501, 0.32869, 0.17866, 0.31899, 0.30499, 0.36035, 0.53798, 0.40327, 0.70072, 0.30058, 0.55837, 0.21956, 0.2815, 0.09963, 0.28942, 0.56862, 0.4368, 0.4911, 0.37156, 0.51184, 0.52091, 0.67018, 0.59302, 0.7619, 0.68574, 0.73296, 0.43354 ], + "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.81, 170.09, -31.19, 159.41, -86.8, 167.03, -99, 143.39, -115.48, 125.2, -110.14, 109.88, -96.35, 83.64, -100.19, 63.25, -81.15, 38.37, -76.69, 37.66, -43.98, 37, -13.47, 50.57, 13.54, 50.51, 38.45, 64.94, 56.6, 47.89, 79.94, 29.45, 73.42, 16.31, 86.63, 81.5, 139.38, 112.55, 150.28, 126.97, 134.97, 128.63, 113.28, 130.22, 92.43, 154.78, 81.29, 162.21, 71.48, 60.96, 13.26, 86.33, 31.87, 116.92, 42.6, 135.47, 31.44, 136.98, 2.58, 131.23, -36.66, 118.22, -74.65, 108.68, -88.23, 130.45, -95.43, 144.62, -39.36, 152.24, 1.69, 156.05, 32.59, 156.21, 61.01, 132.56, 66.4, 111.94, 61.83, 79.03, 38.83, 57.27, 19.29, 70.67, 52.42, 107.01, 87.61, 95.39, 116.7, 112.91, -6.87, 116.41, 15.8, 94.82, 2.47, 97.23, -40.47, 90.66, -68.16, 127.64, -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.4, "rotation": 60.82, "width": 210, "height": 203 } + }, + "head": { + "head": { + "type": "mesh", + "uvs": [ 0.75918, 0.06107, 0.88392, 0.17892, 0.90174, 0.30856, 0.94223, 0.1966, 1, 0.26584, 1, 0.42199, 0.95863, 0.46992, 0.92118, 0.51333, 0.85957, 0.53469, 0.78388, 0.65605, 0.74384, 0.74838, 0.85115, 0.75151, 0.84828, 0.82563, 0.8178, 0.85367, 0.75598, 0.85906, 0.76236, 0.90467, 0.65875, 1, 0.38336, 1, 0.18579, 0.85403, 0.1274, 0.8109, 0.06024, 0.69209, 0, 0.58551, 0, 0.41021, 0.08529, 0.20691, 0.24243, 0.14504, 0.49999, 0.14208, 0.50322, 0.07433, 0.41738, 0, 0.57612, 0, 0.85059, 0.36086, 0.73431, 0.43206, 0.6848, 0.3127, 0.72164, 0.16717, 0.55931, 0.04153, 0.44763, 0.22894, 0.23925, 0.26559, 0.71271, 0.44035, 0.56992, 0.38299, 0.41678, 0.3351, 0.29299, 0.31496, 0.70801, 0.44501, 0.56676, 0.38976, 0.4152, 0.34416, 0.28753, 0.33017, 0.88988, 0.50176, 0.30388, 0.73462, 0.2646, 0.65674, 0.21414, 0.61583, 0.14612, 0.62193, 0.10315, 0.66636, 0.10357, 0.72556, 0.14505, 0.79163, 0.20263, 0.81355, 0.27872, 0.80158, 0.34946, 0.7376, 0.23073, 0.57072, 0.08878, 0.60706, 0.2946, 0.8129, 0.73005, 0.87883, 0.69804, 0.87348, 0.66165, 0.79681 ], + "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, 29, 41.97, -41.79, 1, 3, 27, 73.46, 27.54, 0.18925, 29, -5.75, -51.7, 0.72418, 28, 112.98, -11.43, 0.08656, 3, 27, 38.23, 10.98, 0.84284, 29, -41.00999, -35.22, 0.09705, 28, 92.72, -44.67, 0.0601, 1, 27, 73.35, 10.89, 1, 1, 27, 58.59, -10.38, 1, 2, 27, 14.35, -24.8, 0.89742, 26, 75.49, -4.55, 0.10257, 2, 27, -2.69, -18.57, 0.58265, 26, 59.82, -13.72, 0.41734, 1, 25, 163.06, -108.68, 1, 1, 25, 151.52, -95.04, 1, 1, 25, 110.6, -87.69, 1, 1, 25, 81.05, -86.58, 1, 1, 25, 89.81, -114.32, 1, 1, 25, 68.72, -120.91, 1, 1, 25, 58.1, -115.89, 1, 1, 25, 51.03, -100.62, 1, 1, 25, 38.78, -106.76, 1, 1, 25, 2.67, -89.69, 1, 1, 25, -22.07, -19.29, 1, 1, 25, 1.19, 45.62, 1, 1, 25, 8.07, 64.81, 1, 1, 25, 35.43, 93.72, 1, 1, 25, 59.98, 119.66, 1, 1, 25, 109.25, 136.98, 1, 1, 25, 174.07, 135.27, 1, 2, 28, -16.79, 104.63, 0.16236, 25, 205.58, 101.22, 0.83763, 2, 29, 58.93, 30.5, 0.60735, 28, 38.37, 61.89, 0.39264, 2, 29, 75.55, 19, 0.94502, 28, 51.62, 77.15, 0.05497, 1, 29, 106.69, 26.9, 1, 1, 29, 83.78, -9.5, 1, 4, 27, 19.12, 19.33, 0.58067, 29, -46.82, -15.19, 0.07453, 28, 72.17, -48.24, 0.14877, 26, 44.52, 27.24, 0.19601, 2, 28, 34.31, -45.24, 0.20796, 26, 7.42, 19.08, 0.79203, 1, 28, 45.94, -9.06, 1, 1, 29, 20.62, -16.35, 1, 1, 29, 75.73, 0.94, 1, 3, 29, 44.58, 56.29, 0.14949, 28, 11.16, 50.46, 0.3683, 25, 200.44, 40.47, 0.4822, 1, 25, 171.41, 90.11, 1, 2, 28, 28.19, -43.54, 0.20796, 26, 1.07, 18.93, 0.79203, 3, 28, 8.54, -6.08, 0.75382, 26, -28.63, 49.03, 0.13133, 25, 168.13, -6.01, 0.11484, 2, 28, -15.06, 30.9, 0.72898, 25, 167.82, 37.86, 0.27101, 1, 25, 162.36, 71.5, 1, 1, 25, 163.1, -47.44, 1, 1, 25, 165.94, -5.87, 1, 1, 25, 165.14, 37.37, 1, 1, 25, 157.6, 71.39, 1, 1, 25, 163.5, -99.53, 1, 1, 25, 45.37, 27.24, 1, 1, 25, 63.73, 44.98, 1, 1, 25, 70.69, 61.92, 1, 1, 25, 62.87, 78.69, 1, 1, 25, 46.52, 85.3, 1, 1, 25, 29.92, 79.33, 1, 1, 25, 15.07, 62.21, 1, 1, 25, 14.09, 45.32, 1, 1, 25, 24.29, 27.05, 1, 1, 25, 48.63, 15.29, 1, 1, 25, 84.87, 62.14, 1, 1, 25, 61.9, 94.83, 1, 1, 25, 22.54, 21.87, 1, 1, 25, 43.14, -95.94, 1, 1, 25, 41.77, -87.23, 1, 1, 25, 60.05, -70.35, 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.14, -70.3, 40.8, -118.07, 257.77, -115.61, 285.16, 57.18, 120.77, 164.95, -5.06, 76.94 ] + } + }, + "hoverboard_board": { + "hoverboard_board": { "x": -11.6, "y": 25.64, "rotation": 0.17, "width": 492, "height": 152 } + }, + "hoverboard_thruster_front": { + "hoverboard_thruster": { "y": -7.08, "width": 60, "height": 64 } + }, + "hoverboard_thruster_rear": { + "hoverboard_thruster": { "x": 1.08, "y": -6.29, "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.39, "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.28, -85.88, -19.56, 1.84, 36.09, 21.41, 66.93, -66.31 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + }, + "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.62, "width": 93, "height": 59 }, + "mouth_smile": { "x": 23.68, "y": -32.23, "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.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": { + "type": "mesh", + "uvs": [ 0.48368, 0.13869, 0.5199, 0.21423, 0.55099, 0.27906, 0.58837, 0.29815, 0.63488, 0.32191, 0.77342, 0.39266, 1, 0.73346, 1, 1, 0.59434, 1, 0.3116, 1, 0, 1, 0, 0.41396, 0.1363, 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, 4, 10.45, 29.41, 0.88824, 5, -6.74, 49.62, 0.11175, 2, 4, 16.54, 29.27, 0.83163, 5, -2.65, 45.08, 0.16836, 2, 4, 21.79, 29.15, 0.78305, 5, 0.85, 41.18999, 0.21694, 2, 4, 25.53, 31.43, 0.67844, 5, 5.07, 40.04, 0.32155, 2, 4, 30.17, 34.27, 0.54832, 5, 10.33, 38.61, 0.45167, 2, 4, 44.01, 42.72, 0.16068, 5, 25.97, 34.36, 0.83929, 1, 5, 51.56, 13.89, 1, 1, 5, 51.54, -2.08, 1, 2, 4, 56.58, 2.98, 0.02959, 5, 5.71, -2.05, 0.9704, 1, 4, 34.63, -20.20999, 0.99999, 1, 4, 10.43, -45.8, 0.99999, 1, 4, -15.1, -21.64, 1, 1, 4, -22.56, 6.61, 0.99999, 2, 4, -0.76, 29.67, 0.99219, 5, -14.25, 57.94, 0.0078 ], + "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.82, "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.08, "rotation": 89.32, "width": 47, "height": 87 } + }, + "torso": { + "torso": { + "type": "mesh", + "uvs": [ 0.62509, 0.12672, 1, 0.2636, 1, 0.2887, 1, 0.66021, 1, 0.68245, 0.92323, 0.69258, 0.95115, 0.84965, 0.77123, 1, 0.49654, 1, 0.27181, 1, 0.13842, 0.77196, 0, 0.45614, 0, 0.19436, 0.14462, 0, 0.27801, 0, 0.72524, 0.27835, 0.76091, 0.46216, 0.84888, 0.67962, 0.68257, 0.63248, 0.53985, 0.38469, 0.25443, 0.32169, 0.30061, 0.55172, 0.39552, 0.79506, 0.26389, 0.17006, 0.52409, 0.18673 ], + "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.62, -10.38, 102.17, -45.07, 97.66, -44.71, 31, -39.45, 27.01, -39.13, 25.78, -31.49, -2.60999, -31.99, -28.2, -12.29, -26.08, 14.54, -24.34, 36.5, 17.59, 46.3, 75.33, 55.34, 122.31, 51.63, 156.07, 34.75, 155.03, 21.72, 101.64, -18.02, 68.37, -18.9, 28.68, -24.41, 38.41, -8.83, 83.99, 1.59, 97.5, 28.58, 55.86, 27.33, 11.47, 21.51, 124.63, 25.51, 119.63, 0.32 ], + "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.7, + "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.7, + "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.7, "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.9, "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.9, "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.9, "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.7, "angle": 20.53 }, + { "time": 0.8666, "angle": 11.84 }, + { "time": 1.0333, "angle": 6.65 }, + { "time": 1.1333, "angle": 8.52 }, + { "time": 1.3, "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.7, + "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.7, + "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/examples/spineboy/export/spineboy-hover.skel b/examples/spineboy/export/spineboy-hover.skel new file mode 100644 index 000000000..bc96d5ca1 Binary files /dev/null and b/examples/spineboy/export/spineboy-hover.skel differ diff --git a/examples/spineboy/export/spineboy-mesh.json b/examples/spineboy/export/spineboy-mesh.json new file mode 100644 index 000000000..77b40ee63 --- /dev/null +++ b/examples/spineboy/export/spineboy-mesh.json @@ -0,0 +1,990 @@ +{ +"skeleton": { "hash": "VINkfhwM1ewwp32eV9+fiLvUsH0", "spine": "3.4.00", "width": 0, "height": 0, "images": "./images/" }, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "y": 247.26 }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "rotation": -72.54, "x": 8.91, "y": -5.62, "color": "ff000dff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.83, "x": 86.1, "y": -1.32, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 51.58, "rotation": 45.77, "x": 121.45, "y": -0.75, "color": "ff000dff" }, + { + "name": "back_foot_tip", + "parent": "rear_foot", + "length": 50.3, + "rotation": -0.85, + "x": 51.16, + "y": 0.23, + "inheritRotation": false, + "color": "ff000dff" + }, + { "name": "front_foot_ik", "parent": "root", "x": -13.52, "y": 0.04, "color": "ff3f00ff" }, + { "name": "front_ankle_ik", "parent": "front_foot_ik", "x": -28.39, "y": 29.06, "color": "ff3f00ff" }, + { "name": "torso", "parent": "hip", "length": 127.55, "rotation": 103.82, "x": -1.61, "y": 4.9, "color": "e0da19ff" }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "rotation": 168.37, "x": 103.75, "y": 19.32, "color": "00ff04ff" }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.57, + "rotation": 18.29, + "x": 68.8, + "y": -0.68, + "color": "00ff04ff" + }, + { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "rotation": 12.43, "x": 40.56, "y": 0.19, "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.76, + "rotation": -2.21, + "x": 78.69, + "y": 1.6, + "inheritScale": false, + "color": "00ff04ff" + }, + { "name": "front_foot", "parent": "front_shin", "length": 41, "rotation": 51.26, "x": 128.75, "y": -0.33, "color": "00ff04ff" }, + { + "name": "front_foot_tip", + "parent": "front_foot", + "length": 56.02, + "rotation": -1.67, + "x": 41.42, + "y": -0.08, + "inheritRotation": false, + "color": "00ff04ff" + }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -169.55, "x": 92.35, "y": -19.22, "color": "ff000dff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "rotation": 23.15, "x": 51.35, "color": "ff000dff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "rotation": 5.34, "x": 34.42, "y": -0.45, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.04, "y": 52.13, "color": "ff000dff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" }, + { "name": "head", "parent": "neck", "length": 131.79, "rotation": 23.18, "x": 27.66, "y": -0.25, "color": "e0da19ff" }, + { "name": "hair1", "parent": "head", "length": 47.22, "rotation": -49.1, "x": 149.82, "y": -59.77, "color": "e0da19ff" }, + { "name": "hair2", "parent": "hair1", "length": 55.56, "rotation": 50.41, "x": 47.22, "y": 0.18, "color": "e0da19ff" }, + { "name": "hair3", "parent": "head", "length": 62.22, "rotation": -32.16, "x": 164.13, "y": 3.68, "color": "e0da19ff" }, + { "name": "hair4", "parent": "hair3", "length": 80.28, "rotation": 83.7, "x": 62.22, "y": -0.03, "color": "e0da19ff" }, + { "name": "rear_foot_ik", "parent": "root", "x": 61.9, "y": 0.42, "color": "ff3f00ff" }, + { "name": "rear_ankle_ik", "parent": "rear_foot_ik", "x": -33.9, "y": 37.33, "color": "ff3f00ff" } +], +"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": "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_grind" }, + { "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" } +], +"ik": [ + { + "name": "front_ankle_ik", + "bones": [ "front_thigh", "front_shin" ], + "target": "front_ankle_ik", + "bendPositive": false + }, + { + "name": "front_foot_ik", + "bones": [ "front_foot" ], + "target": "front_foot_ik" + }, + { + "name": "rear_ankle_ik", + "bones": [ "rear_thigh", "rear_shin" ], + "target": "rear_ankle_ik", + "bendPositive": false + }, + { + "name": "rear_foot_ik", + "bones": [ "rear_foot" ], + "target": "rear_foot_ik" + } +], +"skins": { + "default": { + "eye": { + "eye_indifferent": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 59.16, -86.8, 28.32, 0.92, 112.27, 30.44, 143.11, -57.28 ], + "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.63, "width": 93, "height": 89 } + }, + "front_bracer": { + "front_bracer": { "x": 12.03, "y": -1.67, "rotation": 79.59, "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.59417, 0.23421, 0.62257, 0.30335, 0.65009, 0.37035, 0.67637, 0.38403, 0.72068, 0.40709, 0.76264, 0.42894, 1, 0.70375, 1, 1, 0.65517, 1, 0.3644, 1, 0, 1, 0, 0.39196, 0, 0, 0.17845, 0, 0.49795, 0 ], + "triangles": [ 8, 6, 7, 8, 5, 6, 8, 4, 5, 4, 8, 3, 8, 9, 3, 9, 2, 3, 2, 10, 1, 2, 9, 10, 1, 11, 0, 0, 11, 13, 13, 14, 0, 11, 1, 10, 11, 12, 13 ], + "vertices": [ 2, 14, 18.17, 41.57, 0.72255, 15, 12.46, 46.04, 0.27744, 2, 14, 24.08, 40.75999, 0.57406, 15, 16.12, 41.34, 0.42592, 2, 14, 29.8, 39.97, 0.47663, 15, 19.67, 36.77, 0.52336, 2, 14, 32.8, 41.66, 0.37452, 15, 22.99, 35.89, 0.62547, 2, 14, 37.86, 44.51, 0.24772, 15, 28.6, 34.4, 0.75227, 2, 14, 42.65, 47.21, 0.17783, 15, 33.91, 32.98, 0.82216, 1, 15, 64.15, 14.56, 1, 1, 15, 64.51, -5.87, 1, 1, 15, 21.07, -6.63, 1, 2, 14, 35.38, -16.16, 0.99998, 15, -15.54, -7.28, 1.0E-5, 2, 14, 3.1, -48.81, 1, 15, -61.44, -8.09, 0, 2, 14, -26.72, -19.31, 1, 15, -62.18, 33.84, 0, 2, 14, -45.95, -0.29, 1, 15, -62.66, 60.88, 0, 1, 14, -30.14, 15.69, 1, 2, 14, -1.84, 44.31, 0.91511, 15, 0.05, 61.98, 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.24, "rotation": 45.32, "width": 128, "height": 70 }, + "front_foot_bend2": { "x": 8.16, "y": 19.57, "rotation": 45.32, "width": 108, "height": 93 } + }, + "front_shin": { + "front_shin": { "x": 60.92, "y": -3.9, "rotation": 96.59, "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.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 } + }, + "goggles": { + "goggles": { + "type": "mesh", + "uvs": [ 0.53653, 0.04113, 0.72921, 0.16035, 0.91666, 0.33222, 0.97046, 0.31329, 1, 0.48053, 0.95755, 0.57329, 0.88825, 0.63279, 0.86877, 0.78962, 0.77403, 0.86749, 0.72628, 1, 0.60713, 0.93862, 0.496, 0.88138, 0.41557, 0.75026, 0.32547, 0.70084, 0.2782, 0.58256, 0.17209, 0.63281, 0.17228, 0.75071, 0.1078, 0.79897, 0, 0.32304, 0, 0.12475, 0.07372, 0.07343, 0.15423, 0.10733, 0.23165, 0.13994, 0.30313, 0.02256, 0.34802, 0, 0.42978, 0.69183, 0.39475, 0.51041, 0.39488, 0.31511, 0.45878, 0.23197, 0.56501, 0.28108, 0.6996, 0.39216, 0.82039, 0.54203, 0.85737, 0.62342, 0.91107, 0.51407, 0.72638, 0.32146, 0.58763, 0.19609, 0.48074, 0.11268, 0.37822, 0.05501, 0.32869, 0.17866, 0.31899, 0.30499, 0.36035, 0.53798, 0.40327, 0.70072, 0.30058, 0.55837, 0.21956, 0.2815, 0.09963, 0.28942, 0.56862, 0.4368, 0.4911, 0.37156, 0.51184, 0.52092, 0.67018, 0.59303, 0.7619, 0.68574, 0.73296, 0.43354 ], + "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.81, 170.09, -31.19, 159.41, -86.8, 167.03, -99, 143.4, -115.48, 125.2, -110.14, 109.88, -96.35, 83.64, -100.19, 63.25, -81.15, 38.37, -76.69, 37.66, -43.98, 37.00999, -13.47, 50.57, 13.54, 50.51, 38.45, 64.94, 56.6, 47.89, 79.94999, 29.45, 73.42, 16.31, 86.63, 81.5, 139.38, 112.55, 150.29, 126.97, 134.97, 128.63, 113.28, 130.22, 92.43, 154.79, 81.29, 162.21, 71.48, 60.96, 13.26, 86.33, 31.87, 116.92, 42.6, 135.47, 31.44, 136.98, 2.58, 131.23, -36.66, 118.22, -74.65, 108.68, -88.23, 130.45, -95.43, 144.62, -39.36, 152.24, 1.69, 156.05, 32.59999, 156.21, 61.01, 132.56, 66.4, 111.94, 61.83, 79.03, 38.83, 57.27, 19.29999, 70.67, 52.42, 107.01, 87.61, 95.39, 116.7, 112.91, -6.87, 116.41, 15.8, 94.82, 2.47, 97.23, -40.47, 90.66, -68.16, 127.64, -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.4, "rotation": 60.82, "width": 210, "height": 203 } + }, + "head": { + "head": { + "type": "mesh", + "uvs": [ 0.75918, 0.06107, 0.88392, 0.17892, 0.90174, 0.30856, 0.94223, 0.1966, 1, 0.26584, 1, 0.42199, 0.95863, 0.46992, 0.92118, 0.51333, 0.85957, 0.53469, 0.78388, 0.65605, 0.74384, 0.74838, 0.85115, 0.75151, 0.84828, 0.82563, 0.8178, 0.85367, 0.75598, 0.85906, 0.76236, 0.90467, 0.65875, 1, 0.38336, 1, 0.18579, 0.85403, 0.12741, 0.8109, 0.06024, 0.69209, 0, 0.58551, 0, 0.41021, 0.08529, 0.20691, 0.24243, 0.14504, 0.49999, 0.14209, 0.50323, 0.07433, 0.41738, 0, 0.57613, 0, 0.85059, 0.36086, 0.73431, 0.43206, 0.6848, 0.3127, 0.72164, 0.16717, 0.55931, 0.04153, 0.44763, 0.22894, 0.23925, 0.26559, 0.71271, 0.44035, 0.56992, 0.38299, 0.41678, 0.3351, 0.29299, 0.31496, 0.70801, 0.44501, 0.56676, 0.38976, 0.4152, 0.34416, 0.28753, 0.33017, 0.88988, 0.50176, 0.30388, 0.73462, 0.2646, 0.65674, 0.21414, 0.61583, 0.14612, 0.62193, 0.10315, 0.66636, 0.10357, 0.72556, 0.14505, 0.79163, 0.20263, 0.81355, 0.27872, 0.80158, 0.34946, 0.7376, 0.23073, 0.57073, 0.08878, 0.60706, 0.2946, 0.8129, 0.73005, 0.87883, 0.69804, 0.87348, 0.66165, 0.79681 ], + "triangles": [ 34, 25, 31, 37, 38, 34, 31, 32, 29, 31, 37, 34, 37, 41, 38, 30, 31, 29, 36, 37, 31, 33, 27, 28, 26, 27, 33, 0, 33, 28, 32, 33, 0, 32, 0, 1, 33, 25, 26, 33, 32, 25, 31, 25, 32, 2, 32, 1, 2, 3, 4, 2, 29, 32, 2, 4, 5, 29, 2, 5, 6, 29, 5, 30, 36, 31, 30, 29, 6, 44, 30, 6, 36, 30, 44, 34, 24, 25, 35, 23, 24, 35, 24, 34, 39, 35, 34, 39, 22, 35, 38, 39, 34, 42, 39, 38, 43, 39, 42, 41, 42, 38, 22, 23, 35, 43, 22, 39, 40, 37, 36, 41, 37, 40, 7, 44, 6, 8, 36, 44, 40, 36, 8, 8, 44, 7, 55, 22, 43, 56, 21, 22, 55, 56, 22, 55, 48, 56, 47, 48, 55, 9, 40, 8, 55, 54, 46, 42, 55, 43, 47, 55, 46, 49, 56, 48, 20, 21, 56, 20, 56, 49, 50, 49, 48, 20, 49, 50, 46, 54, 45, 54, 55, 41, 55, 42, 41, 9, 60, 40, 46, 51, 50, 60, 41, 40, 10, 60, 9, 54, 41, 60, 46, 52, 51, 19, 50, 51, 50, 48, 47, 47, 46, 50, 46, 45, 52, 20, 50, 19, 57, 53, 45, 57, 45, 54, 53, 52, 45, 12, 10, 11, 13, 10, 12, 18, 51, 52, 19, 51, 18, 18, 52, 53, 18, 53, 57, 14, 10, 13, 60, 10, 14, 59, 60, 14, 58, 59, 14, 58, 14, 15, 17, 54, 60, 16, 17, 60, 57, 54, 17, 18, 57, 17, 59, 16, 60, 16, 59, 58, 16, 58, 15 ], + "vertices": [ 1, 25, 41.97, -41.79, 1, 3, 23, 73.46, 27.54, 0.18925, 25, -5.75, -51.7, 0.72418, 24, 112.98, -11.43, 0.08656, 3, 23, 38.23, 10.98, 0.84283, 25, -41.00999, -35.22, 0.09705, 24, 92.72, -44.67, 0.0601, 1, 23, 73.35, 10.89, 1, 1, 23, 58.59, -10.38, 1, 2, 22, 75.49, -4.55, 0.10257, 23, 14.35, -24.8, 0.89742, 2, 22, 59.82, -13.72, 0.41734, 23, -2.69, -18.57, 0.58265, 1, 21, 163.06, -108.68, 1, 1, 21, 151.52, -95.04, 1, 1, 21, 110.6, -87.69, 1, 1, 21, 81.05, -86.58, 1, 1, 21, 89.81, -114.32, 1, 1, 21, 68.72, -120.91, 1, 1, 21, 58.1, -115.89, 1, 1, 21, 51.03, -100.62, 1, 1, 21, 38.78, -106.76, 1, 1, 21, 2.67, -89.69, 1, 1, 21, -22.07, -19.29999, 1, 1, 21, 1.19, 45.62, 1, 1, 21, 8.07, 64.81, 1, 1, 21, 35.43, 93.72, 1, 1, 21, 59.98, 119.66, 1, 1, 21, 109.25, 136.98, 1, 1, 21, 174.07, 135.27, 1, 2, 21, 205.58, 101.22, 0.83763, 24, -16.79999, 104.63, 0.16236, 2, 25, 58.93, 30.5, 0.60735, 24, 38.37, 61.89, 0.39264, 2, 25, 75.55, 19, 0.94502, 24, 51.62, 77.15, 0.05497, 1, 25, 106.69, 26.9, 1, 1, 25, 83.78, -9.5, 1, 4, 22, 44.52, 27.24, 0.19601, 23, 19.12, 19.33, 0.58066, 25, -46.82, -15.19, 0.07453, 24, 72.17, -48.24, 0.14877, 2, 22, 7.42, 19.08, 0.79203, 24, 34.31, -45.24, 0.20796, 1, 24, 45.94, -9.06, 1, 1, 25, 20.62, -16.35, 1, 1, 25, 75.73, 0.94, 1, 3, 21, 200.44, 40.47, 0.4822, 25, 44.58, 56.29, 0.14949, 24, 11.16, 50.46, 0.3683, 1, 21, 171.41, 90.11, 1, 2, 22, 1.07, 18.93, 0.79203, 24, 28.19, -43.54, 0.20796, 3, 21, 168.13, -6.01, 0.11484, 22, -28.63, 49.03, 0.13133, 24, 8.54, -6.08, 0.75382, 2, 21, 167.82, 37.86, 0.27101, 24, -15.06, 30.9, 0.72898, 1, 21, 162.36, 71.5, 1, 1, 21, 163.1, -47.44, 1, 1, 21, 165.94, -5.87, 1, 1, 21, 165.14, 37.37, 1, 1, 21, 157.6, 71.39, 1, 1, 21, 163.5, -99.53, 1, 1, 21, 45.37, 27.24, 1, 1, 21, 63.73, 44.98, 1, 1, 21, 70.69999, 61.92, 1, 1, 21, 62.87, 78.69999, 1, 1, 21, 46.52, 85.3, 1, 1, 21, 29.92, 79.33999, 1, 1, 21, 15.07, 62.21, 1, 1, 21, 14.09, 45.32, 1, 1, 21, 24.29, 27.05, 1, 1, 21, 48.63, 15.29, 1, 1, 21, 84.87, 62.14, 1, 1, 21, 61.9, 94.83, 1, 1, 21, 22.54, 21.87, 1, 1, 21, 43.14, -95.94, 1, 1, 21, 41.77, -87.23, 1, 1, 21, 60.05, -70.35, 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.14, -70.3, 40.8, -118.07, 257.77, -115.61, 285.16, 57.18, 120.77, 164.95, -5.06, 76.94 ] + } + }, + "mouth": { + "mouth_grind": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 11.28, -85.88, -19.56, 1.84, 36.09, 21.41, 66.93, -66.31 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + }, + "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth_smile": { "x": 23.68, "y": -32.23, "rotation": -70.63, "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.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": { + "type": "mesh", + "uvs": [ 0.48368, 0.1387, 0.5199, 0.21423, 0.55099, 0.27906, 0.58838, 0.29816, 0.63488, 0.32191, 0.77342, 0.39266, 1, 0.73346, 1, 1, 0.59435, 1, 0.3116, 1, 0, 1, 0, 0.41396, 0.1363, 0, 0.41716, 0 ], + "triangles": [ 8, 6, 7, 6, 8, 5, 5, 8, 4, 4, 8, 3, 8, 9, 3, 9, 2, 3, 2, 10, 1, 2, 9, 10, 1, 11, 0, 0, 11, 12, 12, 13, 0, 11, 1, 10 ], + "vertices": [ 2, 4, 10.45, 29.41, 0.88824, 5, -6.74, 49.62, 0.11175, 2, 4, 16.54999, 29.27, 0.83163, 5, -2.65, 45.08, 0.16836, 2, 4, 21.79, 29.15, 0.78305, 5, 0.85, 41.18999, 0.21694, 2, 4, 25.53, 31.43, 0.67844, 5, 5.07, 40.04, 0.32155, 2, 4, 30.17, 34.27, 0.54832, 5, 10.33, 38.61, 0.45167, 2, 4, 44.01, 42.72, 0.16069, 5, 25.97, 34.36, 0.83929, 1, 5, 51.56, 13.89, 1, 2, 4, 88.08, 36.28, 0, 5, 51.54, -2.08999, 1, 2, 4, 56.58, 2.98, 0.02959, 5, 5.71, -2.05, 0.9704, 2, 4, 34.63, -20.21999, 0.99999, 5, -26.22, -2.03, 0, 2, 4, 10.43, -45.8, 0.99999, 5, -61.43, -2, 0, 2, 4, -15.1, -21.64, 1, 5, -61.4, 33.15, 0, 2, 4, -22.56, 6.61, 0.99999, 5, -45.98, 57.97, 0, 2, 4, -0.76, 29.67, 0.99219, 5, -14.25, 57.94, 0.0078 ], + "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.82, "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.1, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 } + }, + "rear_upper_arm": { + "rear_upper_arm": { "x": 21.12, "y": 4.08, "rotation": 89.32, "width": 47, "height": 87 } + }, + "torso": { + "torso": { + "type": "mesh", + "uvs": [ 0.62509, 0.12672, 1, 0.2636, 1, 0.2887, 1, 0.66021, 1, 0.68245, 0.92323, 0.69258, 0.95115, 0.84965, 0.77123, 1, 0.49654, 1, 0.27181, 1, 0.13842, 0.77196, 0, 0.45614, 0, 0.19436, 0.14462, 0, 0.27801, 0, 0.72524, 0.27835, 0.76091, 0.46216, 0.84888, 0.67962, 0.68257, 0.63249, 0.53985, 0.38469, 0.25443, 0.32169, 0.30062, 0.55173, 0.39552, 0.79506, 0.26389, 0.17006, 0.52409, 0.18673 ], + "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.62, -10.38, 102.17, -45.07, 97.66, -44.71, 31, -39.45, 27.01, -39.13, 25.78, -31.49, -2.60999, -31.99, -28.2, -12.29, -26.08, 14.54, -24.34, 36.5, 17.59, 46.3, 75.33, 55.34, 122.31, 51.63, 156.07, 34.75, 155.04, 21.72, 101.64, -18.02, 68.37999, -18.9, 28.68, -24.41, 38.41999, -8.83, 83.99, 1.59, 97.5, 28.58, 55.86, 27.33, 11.47, 21.51, 124.63, 25.51, 119.63, 0.32 ], + "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": { + "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.195, 0.86, 0.75, 1 ] + }, + { "time": 0.0666, "angle": 46.07 }, + { "time": 0.1333, "angle": -20.28 }, + { "time": 0.2, "angle": -27.23 }, + { "time": 0.2666, "angle": -47.16 }, + { "time": 0.3333, "angle": -39.79 }, + { "time": 0.4, "angle": -25.86 }, + { "time": 0.4666, "angle": 14.35 }, + { "time": 0.5333, "angle": 55.62 }, + { "time": 0.6, "angle": 69.65 }, + { "time": 0.6666, "angle": 86.4 }, + { "time": 0.7333, "angle": 65.87 }, + { "time": 0.8, "angle": 42.05 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0333, "x": -5.79, "y": 11.15 }, + { "time": 0.0666, "x": -5.13, "y": 11.55 }, + { "time": 0.1333, "x": -7.7, "y": 8.98 }, + { "time": 0.5333, "x": -1.26, "y": 3.83 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -39.7 }, + { "time": 0.2, "angle": -57.29 }, + { "time": 0.4, "angle": -39.7 }, + { "time": 0.6, "angle": -57.29 }, + { "time": 0.8, "angle": -39.7 } + ], + "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -56.59 }, + { "time": 0.0666, "angle": -21.57 }, + { "time": 0.1333, "angle": 27.95 }, + { "time": 0.2, "angle": 42.42 }, + { "time": 0.2666, "angle": 62.37 }, + { "time": 0.3333, "angle": 45.42 }, + { "time": 0.4, "angle": 15.67 }, + { "time": 0.4666, "angle": 28.22 }, + { "time": 0.5333, "angle": -38.62 }, + { "time": 0.6, "angle": -53.26 }, + { "time": 0.6666, "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.4666, "x": -13.04, "y": 4.04 }, + { "time": 0.5, "x": -10.24, "y": 7.11 }, + { "time": 0.5333, "x": -9.01, "y": -5.15 }, + { "time": 0.6666, "x": -23.18, "y": -2.57 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": -74 }, + { "time": 0.0666, "angle": -83.38 }, + { "time": 0.1333, "angle": -106.69 }, + { "time": 0.2, "angle": -66.01 }, + { "time": 0.2666, "angle": -55.22 }, + { "time": 0.3333, "angle": -24.8 }, + { + "time": 0.4, + "angle": 18.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4666, "angle": -56.65 }, + { + "time": 0.5333, + "angle": -11.94, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6666, "angle": -41.26 }, + { "time": 0.7333, "angle": -43.6 }, + { "time": 0.8, "angle": -74 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -89.36 }, + { "time": 0.0666, "angle": -95.67 }, + { "time": 0.1333, "angle": -22 }, + { "time": 0.2, "angle": -316.04 }, + { "time": 0.2666, "angle": -274.94 }, + { "time": 0.3333, "angle": -273.74 }, + { "time": 0.4, "angle": -272.09 }, + { "time": 0.4666, "angle": -264.89 }, + { "time": 0.5333, "angle": -320.09 }, + { "time": 0.6, "angle": -50.83 }, + { "time": 0.6666, "angle": -81.72 }, + { "time": 0.7333, "angle": -83.92 }, + { "time": 0.8, "angle": -89.36 } + ], + "translate": [ + { "time": 0, "x": 6.24, "y": 10.05 }, + { "time": 0.2666, "x": 4.95, "y": -13.13 }, + { "time": 0.6, "x": -2.43, "y": 1.94 }, + { "time": 0.8, "x": 6.24, "y": 10.05 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 33.43 }, + { "time": 0.0666, "angle": 20.53 }, + { "time": 0.1333, "angle": 15.26 }, + { "time": 0.2, "angle": 19.28 }, + { "time": 0.2666, "angle": 22.62 }, + { "time": 0.3333, "angle": 37.29 }, + { "time": 0.4, "angle": 41.53 }, + { "time": 0.4666, "angle": 31.73 }, + { "time": 0.5333, "angle": 67.45 }, + { "time": 0.6666, "angle": 39.77 }, + { "time": 0.7333, "angle": 30.95 }, + { "time": 0.8, "angle": 33.43 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -19.75 }, + { "time": 0.0666, "angle": -37.11 }, + { "time": 0.1333, "angle": -50.79 }, + { "time": 0.2666, "angle": -12.69 }, + { "time": 0.3333, "angle": 3.01 }, + { "time": 0.4333, "angle": 12.05 }, + { "time": 0.5333, "angle": 13.25 }, + { "time": 0.8, "angle": -19.75 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 68.68 }, + { "time": 0.0666, "angle": 73.89 }, + { "time": 0.1333, "angle": -9.64 }, + { "time": 0.2, "angle": 284.27 }, + { "time": 0.2666, "angle": 283.29 }, + { "time": 0.3333, "angle": 278.28 }, + { "time": 0.4, "angle": 271.02 }, + { "time": 0.4666, "angle": 263.2 }, + { "time": 0.5333, "angle": 314.25 }, + { "time": 0.6, "angle": 16.83 }, + { "time": 0.6666, "angle": 70.35 }, + { "time": 0.7333, "angle": 73.53 }, + { "time": 0.8, "angle": 68.68 } + ], + "translate": [ + { "time": 0, "x": -2.57, "y": -8.89 }, + { "time": 0.1333, "x": -4.68, "y": 7.2 }, + { "time": 0.2, "x": 21.73, "y": 51.17 }, + { "time": 0.6, "x": 4.33, "y": 2.05 }, + { "time": 0.8, "x": -2.57, "y": -8.89 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 31.04 }, + { "time": 0.0666, "angle": 28.28 }, + { "time": 0.1333, "angle": 49.36 }, + { "time": 0.2, "angle": 59.37 }, + { "time": 0.2666, "angle": 8.56 }, + { "time": 0.3333, "angle": 9.38 }, + { "time": 0.4, "angle": 11.51 }, + { "time": 0.4666, "angle": 7.22 }, + { "time": 0.5333, "angle": -18.44 }, + { "time": 0.6, "angle": 11.44 }, + { "time": 0.6666, "angle": 9.99 }, + { "time": 0.7333, "angle": 8.28 }, + { "time": 0.8, "angle": 31.04 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.2, "angle": 13.58 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.6, "angle": 13.58 }, + { "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.1, "angle": 12.34 }, + { "time": 0.2, "angle": 25.55 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.5, "angle": 12.34 }, + { "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.481, 0.01, 0.75, 1 ] + }, + { "time": 0.0666, "angle": -64.42 }, + { + "time": 0.1333, + "angle": -20.59, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.2666, "angle": -62.51 }, + { "time": 0.3333, "angle": -79.74 }, + { "time": 0.4, "angle": -78.28 }, + { + "time": 0.4666, + "angle": -118.96, + "curve": [ 0.93, 0, 0.952, 0.95 ] + }, + { "time": 0.6, "angle": -88.95 }, + { "time": 0.6666, "angle": -79.09 }, + { "time": 0.7333, "angle": -47.77 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { + "time": 0.0333, + "angle": -21.13, + "curve": [ 0.121, 0.23, 0.75, 1 ] + }, + { "time": 0.0666, "angle": 17.64 }, + { "time": 0.1, "angle": 29.92 }, + { "time": 0.1333, "angle": 16.44 }, + { "time": 0.2, "angle": -29.22 }, + { "time": 0.2666, "angle": -1.61 }, + { "time": 0.3333, "angle": -10.22 }, + { "time": 0.4666, "angle": -15.99 }, + { "time": 0.6, "angle": 9.03 }, + { "time": 0.7333, "angle": 17.32 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0666, "angle": -12.04 }, + { "time": 0.1333, "angle": -0.87 }, + { "time": 0.2, "angle": 25.81 }, + { "time": 0.2666, "angle": 4.71 }, + { + "time": 0.4, + "angle": 18.09, + "curve": [ 0.281, 0.73, 0.75, 1 ] + }, + { "time": 0.4333, "angle": -1.7 }, + { "time": 0.4666, "angle": 27.12 }, + { "time": 0.5, "angle": 38.83 }, + { "time": 0.5333, "angle": 30.76 }, + { "time": 0.5666, "angle": -20.49 }, + { "time": 0.6, "angle": -30.8 }, + { "time": 0.6666, "angle": -1.31 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 24.72 }, + { "time": 0.5, "angle": -11.87 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": -24.88, + "curve": [ 0.3, 0.8, 0.663, 0.91 ] + }, + { + "time": 0.0666, + "x": 0, + "y": -40.28, + "curve": [ 0.456, 0, 0.339, 0.98 ] + }, + { + "time": 0.2666, + "x": 0, + "y": 20.51, + "curve": [ 0.17, 0.52, 0.596, 0.99 ] + }, + { "time": 0.4, "x": 0, "y": -24.88 }, + { "time": 0.4333, "x": 0, "y": -26.36 }, + { + "time": 0.4666, + "x": 0, + "y": -45.06, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6666, "x": 0, "y": 20.51 }, + { "time": 0.8, "x": 0, "y": -24.88 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_foot_ik": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0333, "angle": -41.68 }, + { "time": 0.1333, "angle": -102.41 }, + { "time": 0.2, "angle": -121.43 }, + { "time": 0.2333, "angle": -133.6 }, + { "time": 0.2666, "angle": -139.86 }, + { "time": 0.3333, "angle": -152.39 }, + { "time": 0.3666, "angle": -146.32 }, + { "time": 0.5, "angle": -143.8 }, + { "time": 0.5333, "angle": -114.84 }, + { "time": 0.5666, "angle": -99.08 }, + { "time": 0.6, "angle": -63.03 }, + { "time": 0.6333, "angle": -47.34 }, + { "time": 0.6666, "angle": -31.04 }, + { "time": 0.7, "angle": -25.01 }, + { "time": 0.7666, "angle": -15.95 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 159.31, "y": 38.68 }, + { "time": 0.0333, "x": 115.32, "y": 0.18 }, + { "time": 0.0666, "x": 16.34, "y": 0.18 }, + { "time": 0.1333, "x": -116.47, "y": 0.18 }, + { "time": 0.2, "x": -210.62, "y": 126.29 }, + { "time": 0.2333, "x": -226.11, "y": 203.77 }, + { "time": 0.2666, "x": -223.73, "y": 258 }, + { "time": 0.3333, "x": -208.23, "y": 250.25 }, + { "time": 0.3666, "x": -207.64, "y": 215.69 }, + { "time": 0.4, "x": -205.85, "y": 185.29 }, + { "time": 0.4333, "x": -179.03, "y": 176.95 }, + { "time": 0.4666, "x": -154, "y": 157.28 }, + { "time": 0.5, "x": -128.97, "y": 108.41 }, + { "time": 0.5333, "x": -76.68, "y": 75.29 }, + { "time": 0.5666, "x": -41.24, "y": 67.74 }, + { "time": 0.6, "x": 28.47, "y": 59.02 }, + { "time": 0.6333, "x": 70.89, "y": 78.19 }, + { "time": 0.6666, "x": 110.42, "y": 99 }, + { "time": 0.7, "x": 122.21, "y": 79.58 }, + { "time": 0.7666, "x": 145.33, "y": 44.61 }, + { "time": 0.8, "x": 159.31, "y": 38.68 } + ] + }, + "front_ankle_ik": { + "translate": [ + { "time": 0, "x": -14.25, "y": -25.95 }, + { "time": 0.1333, "x": -13.63, "y": -34.72 }, + { "time": 0.1666, "x": -11.41, "y": -12.61 }, + { "time": 0.5, "x": -14.88, "y": -31.78 }, + { "time": 0.8, "x": -14.25, "y": -25.95 } + ] + }, + "rear_foot_ik": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0666, "angle": 18.55 }, + { "time": 0.1333, "angle": 52.75 }, + { "time": 0.1666, "angle": 87.39 }, + { "time": 0.2333, "angle": 133.94 }, + { "time": 0.3, "angle": 150.92 }, + { "time": 0.3666, "angle": 168.02 }, + { "time": 0.4, "angle": 129.09 }, + { "time": 0.4333, "angle": 125.95 }, + { "time": 0.5, "angle": 114.27 }, + { "time": 0.5333, "angle": 85.36 }, + { "time": 0.5666, "angle": 49.17 }, + { "time": 0.6333, "angle": 9.5 }, + { "time": 0.7, "angle": 4.15 }, + { "time": 0.7666, "angle": -1.36 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -248.9, "y": 230.06 }, + { "time": 0.0666, "x": -228.7, "y": 134.11 }, + { "time": 0.1333, "x": -145.37, "y": 94.22 }, + { "time": 0.1666, "x": -82.75, "y": 54.32 }, + { "time": 0.2333, "x": 37.92, "y": 74.38 }, + { "time": 0.2666, "x": 80.37, "y": 91.82 }, + { "time": 0.3, "x": 93.21, "y": 67.3 }, + { "time": 0.3666, "x": 99.34, "y": 35.47 }, + { "time": 0.4, "x": 68.62, "y": 0.35 }, + { "time": 0.4333, "x": 21.58, "y": -2.63 }, + { "time": 0.5, "x": -92.9, "y": -2.63 }, + { "time": 0.5333, "x": -166.79, "y": -2.63 }, + { "time": 0.5666, "x": -252.51, "y": 57.14 }, + { "time": 0.6333, "x": -304.31, "y": 214.02 }, + { "time": 0.7, "x": -296.91, "y": 281.36 }, + { "time": 0.7666, "x": -269.53, "y": 257.68 }, + { "time": 0.8, "x": -248.9, "y": 230.06 } + ] + }, + "rear_ankle_ik": { + "translate": [ + { "time": 0, "x": 85, "y": -33.59, "curve": "stepped" }, + { "time": 0.8, "x": 85, "y": -33.59 } + ] + }, + "back_foot_tip": { + "rotate": [ + { "time": 0, "angle": -151.51 }, + { "time": 0.1333, "angle": -93.33 }, + { "time": 0.1666, "angle": -70.77 }, + { "time": 0.2333, "angle": 22.43 }, + { "time": 0.3, "angle": 36.85 }, + { "time": 0.3666, "angle": 34.85 }, + { "time": 0.4, "angle": 0.76 }, + { "time": 0.4333, "angle": 0.82, "curve": "stepped" }, + { "time": 0.5333, "angle": 0.82 }, + { "time": 0.5666, "angle": -61.7 }, + { "time": 0.6333, "angle": -139.59 }, + { "time": 0.7, "angle": -146.78 }, + { "time": 0.8, "angle": -151.51 } + ] + }, + "front_foot_tip": { + "rotate": [ + { "time": 0, "angle": 42.19 }, + { "time": 0.0333, "angle": -0.23 }, + { "time": 0.1333, "angle": -0.28 }, + { "time": 0.1666, "angle": -59.58 }, + { "time": 0.2, "angle": -112.55 }, + { "time": 0.2666, "angle": -130.07 }, + { "time": 0.3333, "angle": -146.2 }, + { "time": 0.5, "angle": -86.48 }, + { "time": 0.5333, "angle": -86.98 }, + { "time": 0.5666, "angle": -66.86 }, + { "time": 0.6, "angle": -22.89 }, + { "time": 0.6333, "angle": -12.06 }, + { "time": 0.7, "angle": 35.39 }, + { "time": 0.8, "angle": 42.19 } + ] + }, + "hair1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -10.21 }, + { "time": 0.2666, "angle": 7.16 }, + { "time": 0.3666, "angle": -0.15 }, + { "time": 0.4666, "angle": -10.21 }, + { "time": 0.6333, "angle": 7.16 }, + { "time": 0.7333, "angle": -0.15 }, + { "time": 0.8, "angle": 0 } + ] + }, + "hair2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -10.21 }, + { "time": 0.1666, "angle": -30.13 }, + { "time": 0.2666, "angle": 6.38 }, + { "time": 0.3666, "angle": -13.48 }, + { "time": 0.4666, "angle": -10.21 }, + { "time": 0.5333, "angle": -30.13 }, + { "time": 0.6333, "angle": 6.38 }, + { "time": 0.7333, "angle": -13.48 }, + { "time": 0.8, "angle": 0 } + ] + }, + "hair3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -10.21 }, + { "time": 0.2666, "angle": 7.16 }, + { "time": 0.3666, "angle": -0.15 }, + { "time": 0.4666, "angle": -10.21 }, + { "time": 0.6333, "angle": 7.16 }, + { "time": 0.7333, "angle": -0.15 }, + { "time": 0.8, "angle": 0 } + ] + }, + "hair4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -10.21 }, + { "time": 0.1666, "angle": -30.13 }, + { "time": 0.2666, "angle": 6.38 }, + { "time": 0.3666, "angle": -13.48 }, + { "time": 0.4666, "angle": -10.21 }, + { "time": 0.5333, "angle": -30.13 }, + { "time": 0.6333, "angle": 6.38 }, + { "time": 0.7333, "angle": -13.48 }, + { "time": 0.8, "angle": 0 } + ] + } + }, + "deform": { + "default": { + "eye": { + "eye_indifferent": [ + { + "time": 0, + "vertices": [ -0.15328, 0.70867, -0.15328, 0.70867, -0.15328, 0.70867, -0.15328, 0.70867 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "vertices": [ 3.92968, -18.23848, 3.92968, -18.23848, 3.92968, -18.23848, 3.92968, -18.23848 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "vertices": [ -0.15328, 0.70867, -0.15328, 0.70867, -0.15328, 0.70867, -0.15328, 0.70867 ] + } + ] + }, + "goggles": { + "goggles": [ + { + "time": 0, + "vertices": [ -0.08837, 0.23265, -0.04028, 0.11365, -1.15417, 5.38665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08233, 5.00095, -1.86743, 8.62226, -0.82043, 3.80258, -0.0957, 0.27987, -0.11633, 0.32749, -5.76245, 7.7601, -3.05987, 10.76796, -2.18188, 10.12056, -4.92511, 9.45659, 0, 0, 0, 0, 0.65328, -3.03142, 0.55996, -2.59837, -1.40084, 6.49587, -0.16394, 0.42825, -0.14651, 0.37985, -0.13543, 0.35089, -0.11294, 0.31703, -0.12219, 0.33459, -0.12271, 0.32937, -0.10714, 0.28684, -0.90087, 4.02339, -0.04678, 0.13842, -1.07189, 4.96331, -1.06213, 4.94195, -1.04928, 4.90511, -0.04034, 0.11959, -0.07522, 0.20426, -0.10211, 0.26987, -0.12774, 0.33331, -0.13964, 0.36775, -0.14172, 0.37709, -0.1307, 0.35703, -0.1195, 0.33389, -0.14541, 0.39531, -0.16638, 0.43952, -1.40084, 6.49587, -0.82043, 3.80258, -0.82043, 3.80258, -0.82043, 3.80258, -1.82894, 8.48513, -1.82894, 8.48513, -1.82894, 8.48513 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "vertices": [ 1.73339, -8.03618, 0.70187, -3.25497, 0.39651, -1.84367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.08755, -5.04639, 3.97546, -18.45124, 0.47232, -2.1937, 1.59594, -7.39851, 2.05963, -9.54877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.58685, -11.98995, 2.93106, -13.58876, 2.71148, -12.57045, 2.01113, -9.32378, 2.26412, -10.49626, 2.34347, -10.8643, 2.05169, -9.51168, 1.96224, -9.10095, 0.75805, -3.51469, 0.08056, -0.37484, 0.57971, -2.69226, 0.35055, -1.63069, 0.65036, -3.01589, 1.40933, -6.53389, 1.98852, -9.21901, 4.07943, -18.92243, 3.45761, -16.03435, 3.45532, -16.02368, 2.42819, -11.25721, 2.14263, -9.93373, 2.06396, -9.56589, 2.5906, -12.00682, 0, 0, 0.47232, -2.1937, 0.47232, -2.1937, 0.47232, -2.1937, 0.47232, -2.1937, 0.47232, -2.1937, 0.47232, -2.1937 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "vertices": [ -0.08837, 0.23265, -0.04028, 0.11365, -1.15417, 5.38665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08233, 5.00095, -1.86743, 8.62226, -0.82043, 3.80258, -0.0957, 0.27987, -0.11633, 0.32749, -5.76245, 7.7601, -3.05987, 10.76796, -2.18188, 10.12056, -4.92511, 9.45659, 0, 0, 0, 0, 0.65328, -3.03142, 0.55996, -2.59837, -1.40084, 6.49587, -0.16394, 0.42825, -0.14651, 0.37985, -0.13543, 0.35089, -0.11294, 0.31703, -0.12219, 0.33459, -0.12271, 0.32937, -0.10714, 0.28684, -0.90087, 4.02339, -0.04678, 0.13842, -1.07189, 4.96331, -1.06213, 4.94195, -1.04928, 4.90511, -0.04034, 0.11959, -0.07522, 0.20426, -0.10211, 0.26987, -0.12774, 0.33331, -0.13964, 0.36775, -0.14172, 0.37709, -0.1307, 0.35703, -0.1195, 0.33389, -0.14541, 0.39531, -0.16638, 0.43952, -1.40084, 6.49587, -0.82043, 3.80258, -0.82043, 3.80258, -0.82043, 3.80258, -1.82894, 8.48513, -1.82894, 8.48513, -1.82894, 8.48513 ] + } + ] + }, + "head": { + "head": [ + { + "time": 0, + "offset": 32, + "vertices": [ 2.81555, 0.98518, 1.01535, 8.62647, -2.70272, 4.09555, -4.48742, 7.13697, -4.7698, 3.34321, 0, 0, -2.25769, -4.31037, 0, 0, 0, 0, -0.45578, 2.11444, -0.45578, 2.11444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.14776, 14.58548, -2.8666, 13.27986, -2.55056, 11.81706, -2.1733, 10.06674, -1.96667, 9.10785, -2.01522, 9.33308, -2.29977, 10.65303, -2.6397, 12.23277, -3.05856, 14.17199, 0, 0, 0, 0, 0, 0, 0, 0, -0.59756, 2.77131, -1.96328, 9.10585, -2.16217, 10.02964 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "offset": 34, + "vertices": [ 3.14837, -14.61261, 3.14837, -14.61261, 3.14837, -14.61261, 0.83425, -3.87112, 0, 0, 0, 0, 0, 0, 0, 0, -0.45578, 2.11444, -0.45578, 2.11444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.17175, -0.81675, 0.17175, -0.81675, 0.17175, -0.81675, 0.17175, -0.81675, 0.17175, -0.81675, 0.17175, -0.81675, 0.17175, -0.81675, 0.17175, -0.81675, 0.17175, -0.81675, 0, 0, 0, 0, 0, 0, 0, 0, 0.55618, -2.58074, 0.41714, -1.93557, 1.04281, -4.83889 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "offset": 32, + "vertices": [ 2.81555, 0.98518, 1.01535, 8.62647, -2.70272, 4.09555, -4.48742, 7.13697, -4.7698, 3.34321, 0, 0, -2.25769, -4.31037, 0, 0, 0, 0, -0.45578, 2.11444, -0.45578, 2.11444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.14776, 14.58548, -2.8666, 13.27986, -2.55056, 11.81706, -2.1733, 10.06674, -1.96667, 9.10785, -2.01522, 9.33308, -2.29977, 10.65303, -2.6397, 12.23277, -3.05856, 14.17199, 0, 0, 0, 0, 0, 0, 0, 0, -0.59756, 2.77131, -1.96328, 9.10585, -2.16217, 10.02964 ] + } + ] + }, + "mouth": { + "mouth_grind": [ + { + "time": 0, + "vertices": [ -10.19201, 11.7786, -1.60018, 14.33763, 0.02328, 8.88684, -8.56857, 6.32778 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "vertices": [ -1.87524, -8.97547, 0.00448, -17.7002, 0.00448, -17.7002, -1.87524, -8.97547 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "vertices": [ -10.19201, 11.7786, -1.60018, 14.33763, 0.02328, 8.88684, -8.56857, 6.32778 ] + } + ] + }, + "torso": { + "torso": [ + { + "time": 0, + "offset": 6, + "vertices": [ 6.35966, 1.33517, 6.35966, 1.33517, 0, 0, 0, 0, 0.8206, 5.12242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.8206, 5.12242, 0.8206, 5.12242, -0.9412, 5.14301, 0.8206, 5.12242, 0.8206, 5.12242, 0.24157, 4.36882, 0.24157, 4.36882, 0.24157, 4.36882, 0, 0, 0.8206, 5.12242 ] + }, + { + "time": 0.4, + "offset": 2, + "vertices": [ 1.4615, 2.96601, 0.68634, 3.23445, 2.20619, 0.10388, 0, 0, -0.31028, -2.89859, 0, 0, -0.1851, 0.38208, 0.33795, -3.61551, 0, 0, 0, 0, -0.5516, 4.21406, -0.5516, 4.21406, 0, 0, 0, 0, -0.29403, -8.94627, -0.02416, -9.50223, 0.23017, -9.93909, -4.64135, -8.88913, -2.62136, -9.24012, -1.70074, -5.16261, -1.70074, -5.16261, -1.70074, -5.16261, 0, 0, -7.3706, -10.47316 ] + }, + { + "time": 0.8, + "offset": 6, + "vertices": [ 6.35966, 1.33517, 6.35966, 1.33517, 0, 0, 0, 0, 0.8206, 5.12242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.8206, 5.12242, 0.8206, 5.12242, -0.9412, 5.14301, 0.8206, 5.12242, 0.8206, 5.12242, 0.24157, 4.36882, 0.24157, 4.36882, 0.24157, 4.36882, 0, 0, 0.8206, 5.12242 ] + } + ] + } + } + } + } +} +} \ No newline at end of file diff --git a/examples/spineboy/export/spineboy-mesh.skel b/examples/spineboy/export/spineboy-mesh.skel new file mode 100644 index 000000000..cd94c8948 Binary files /dev/null and b/examples/spineboy/export/spineboy-mesh.skel differ diff --git a/examples/spineboy/export/spineboy-pma.atlas b/examples/spineboy/export/spineboy-pma.atlas new file mode 100644 index 000000000..c2c7c6ec2 --- /dev/null +++ b/examples/spineboy/export/spineboy-pma.atlas @@ -0,0 +1,216 @@ + +spineboy-pma.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/examples/spineboy/export/spineboy-pma.png b/examples/spineboy/export/spineboy-pma.png new file mode 100644 index 000000000..48fa9770d Binary files /dev/null and b/examples/spineboy/export/spineboy-pma.png differ diff --git a/examples/spineboy/export/spineboy.atlas b/examples/spineboy/export/spineboy.atlas new file mode 100644 index 000000000..2454a1f47 --- /dev/null +++ b/examples/spineboy/export/spineboy.atlas @@ -0,0 +1,216 @@ + +spineboy.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/examples/spineboy/export/spineboy.json b/examples/spineboy/export/spineboy.json new file mode 100644 index 000000000..a25f9afdd --- /dev/null +++ b/examples/spineboy/export/spineboy.json @@ -0,0 +1,2412 @@ +{ +"skeleton": { "hash": "rPoYyBLFG6F0CGZ5wsUEBKDJU9U", "spine": "3.4.00", "width": 470.9, "height": 731.49, "images": "./images/" }, +"bones": [ + { "name": "hip", "y": 247.47 }, + { "name": "torso", "parent": "hip", "length": 127.55, "rotation": 103.82, "x": -1.61, "y": 4.9, "color": "e0da19ff" }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "rotation": 168.37, "x": 103.75, "y": 19.32, "color": "00ff04ff" }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.57, + "rotation": 18.29, + "x": 68.8, + "y": -0.68, + "color": "00ff04ff" + }, + { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "rotation": 12.43, "x": 40.56, "y": 0.19, "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.76, "rotation": -2.21, "x": 78.69, "y": 1.6, "color": "00ff04ff" }, + { "name": "front_foot", "parent": "front_shin", "length": 91.34, "rotation": 77.9, "x": 128.75, "y": -0.33, "color": "00ff04ff" }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -169.55, "x": 92.35, "y": -19.22, "color": "ff000dff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "rotation": 23.15, "x": 51.35, "color": "ff000dff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "rotation": 5.34, "x": 34.42, "y": -0.45, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.04, "y": 52.13, "color": "ff000dff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" }, + { "name": "head", "parent": "neck", "length": 263.57, "rotation": 23.18, "x": 27.66, "y": -0.25, "color": "e0da19ff" }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "rotation": -72.54, "x": 8.91, "y": -5.62, "color": "ff000dff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.83, "x": 86.1, "y": -1.32, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "rotation": 69.3, "x": 121.45, "y": -0.75, "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": "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" } +], +"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.67, "rotation": 79.59, "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": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 126, "height": 69 }, + "front_foot_bend1": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 128, "height": 70 }, + "front_foot_bend2": { "x": 16.07, "y": 13.83, "rotation": 18.68, "width": 108, "height": 93 } + }, + "front_shin": { + "front_shin": { "x": 55.11, "y": -3.54, "rotation": 96.59, "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.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 } + }, + "goggles": { + "goggles": { "x": 97.07, "y": 6.54, "rotation": -70.63, "width": 261, "height": 166 } + }, + "gun": { + "gun": { "x": 77.3, "y": 16.4, "rotation": 60.82, "width": 210, "height": 203 } + }, + "head": { + "head": { "x": 128.95, "y": 0.29, "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.61, 285.16, 57.18, 120.77, 164.95, -5.06, 76.94 ] + } + }, + "mouth": { + "mouth_grind": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth_smile": { "x": 23.68, "y": -32.23, "rotation": -70.63, "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.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.57, "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.1, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 } + }, + "rear_upper_arm": { + "rear_upper_arm": { "x": 21.12, "y": 4.08, "rotation": 89.32, "width": 47, "height": 87 } + }, + "torso": { + "torso": { "x": 63.61, "y": 7.12, "rotation": -94.53, "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.4666, "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.82 }, + { "time": 0.1333, "angle": -28.74 }, + { "time": 0.2333, "angle": 11.42 }, + { "time": 0.3333, "angle": -50.24 }, + { "time": 0.4, "angle": -72.66, "curve": "stepped" }, + { "time": 0.4333, "angle": -72.66 }, + { "time": 0.5, "angle": -20.24 }, + { "time": 0.5666, "angle": -85.28, "curve": "stepped" }, + { "time": 0.9333, "angle": -85.28, "curve": "stepped" }, + { "time": 2.2333, "angle": -85.28 }, + { "time": 2.5, "angle": -51.96, "curve": "stepped" }, + { "time": 4.5333, "angle": -51.96 }, + { "time": 4.6666, "angle": -85.28 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": -2.82 }, + { "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.92 }, + { "time": 0.5666, "angle": 47.94, "curve": "stepped" }, + { "time": 2.2333, "angle": 47.94 }, + { "time": 2.5, "angle": 18.5, "curve": "stepped" }, + { "time": 4.5333, "angle": 18.5 }, + { "time": 4.6666, "angle": 47.94 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -8.61 }, + { "time": 0.1333, "angle": 28.19 }, + { "time": 0.2666, "angle": -280.19 }, + { "time": 0.4, "angle": -237.22, "curve": "stepped" }, + { "time": 0.4333, "angle": -237.22 }, + { "time": 0.5, "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 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.2333, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -38.85 }, + { "time": 0.1333, "angle": -299.58 }, + { "time": 0.2666, "angle": -244.74 }, + { "time": 0.4, "angle": -292.35 }, + { "time": 0.4333, "angle": -315.84 }, + { "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.7666, "angle": -285.1 }, + { "time": 4.6666, "angle": -290.68 }, + { "time": 4.8, "angle": 8.61 }, + { "time": 4.8666, "angle": 10.94 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": -44.69 }, + { "time": 0.1333, "angle": 112.26 }, + { "time": 0.2666, "angle": 129.07 }, + { "time": 0.4, "angle": 134.94, "curve": "stepped" }, + { "time": 0.4333, "angle": 134.94 }, + { "time": 0.5666, "angle": 172.6, "curve": "stepped" }, + { "time": 0.9333, "angle": 172.6, "curve": "stepped" }, + { "time": 2.2333, "angle": 172.6 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 21.88 }, + { "time": 0.1333, "angle": 11.48 }, + { "time": 0.2666, "angle": -18.81 }, + { "time": 0.4, "angle": -18.92 }, + { "time": 0.4333, "angle": -18.28 }, + { "time": 0.5, "angle": 60.61 }, + { "time": 0.7, "angle": -18.87, "curve": "stepped" }, + { "time": 2.2333, "angle": -18.87 }, + { "time": 2.7, "angle": -1.95, "curve": "stepped" }, + { "time": 4.6666, "angle": -1.95 }, + { "time": 4.8, "angle": 34.55 }, + { "time": 4.9333, "angle": -18.74 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -2.33 }, + { "time": 0.2666, "angle": 26.34 }, + { "time": 0.7, "angle": -6.07, "curve": "stepped" }, + { "time": 2.2333, "angle": -6.07 }, + { "time": 2.7, "angle": 5.72, "curve": "stepped" }, + { "time": 4.6666, "angle": 5.72 }, + { "time": 4.8666, "angle": -6.52 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 10.36 }, + { "time": 0.1333, "angle": -23.12 }, + { "time": 0.2666, "angle": -23.11 }, + { "time": 0.4, "angle": -23.16, "curve": "stepped" }, + { "time": 0.4333, "angle": -23.16 }, + { "time": 0.5666, "angle": -23.2, "curve": "stepped" }, + { "time": 0.9333, "angle": -23.2, "curve": "stepped" }, + { "time": 2.2333, "angle": -23.2 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": -2.78 }, + { "time": 0.1333, "angle": -24.58 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.9333, "angle": 0, "curve": "stepped" }, + { "time": 2.2333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.2, "x": 50.34, "y": 151.73 }, + { "time": 0.4, "x": 5.16, "y": -119.64, "curve": "stepped" }, + { "time": 0.4333, "x": 5.16, "y": -119.64 }, + { "time": 0.5, "x": 50.34, "y": -205.18, "curve": "stepped" }, + { "time": 0.8, "x": 50.34, "y": -205.18, "curve": "stepped" }, + { "time": 0.9333, "x": 50.34, "y": -205.18, "curve": "stepped" }, + { "time": 2.2333, "x": 50.34, "y": -205.18 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_thigh": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 8.47 }, + { "time": 0.2666, "angle": 115.95 }, + { "time": 0.4, "angle": 180.66, "curve": "stepped" }, + { "time": 0.4333, "angle": 180.66 }, + { "time": 0.5, "angle": 155.22 }, + { "time": 0.6, "angle": 97.73 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": -27.37 }, + { "time": 0.2666, "angle": -35.1 }, + { "time": 0.4, "angle": -37.72, "curve": "stepped" }, + { "time": 0.4333, "angle": -37.72 }, + { "time": 0.5, "angle": -40.06 }, + { "time": 0.6, "angle": 2.76 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 70.45 }, + { "time": 0.2666, "angle": 155.34 }, + { "time": 0.4, "angle": 214.31, "curve": "stepped" }, + { "time": 0.4333, "angle": 214.31 }, + { "time": 0.5, "angle": 169.67 }, + { "time": 0.8, "angle": 83.27 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 18.93 }, + { "time": 0.2666, "angle": -21.04 }, + { "time": 0.4, "angle": -29.93, "curve": "stepped" }, + { "time": 0.4333, "angle": -29.93 }, + { "time": 0.5, "angle": -16.79 }, + { "time": 0.8, "angle": 7.77 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": -11.62 }, + { "time": 0.4, "angle": -45.59, "curve": "stepped" }, + { "time": 0.4333, "angle": -45.59 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4, "angle": -48.75, "curve": "stepped" }, + { "time": 0.4333, "angle": -48.75 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "gunTip": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + } + } + }, + "hit": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0.1666, "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.38 }, + { "time": 0.2333, "angle": 24.94 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 10.21 }, + { "time": 0.3333, "angle": -41.3 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -310.92, + "curve": [ 0.38, 0.53, 0.744, 1 ] + }, + { "time": 0.3333, "angle": -112.59 } + ], + "translate": [ + { "time": 0, "x": 7.23, "y": -13.13 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 36.99 }, + { "time": 0.3333, "angle": -28.64 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": 13.59 }, + { "time": 0.3333, "angle": 7.55 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 271.02, + "curve": [ 0.342, 0.36, 0.68, 0.71 ] + }, + { "time": 0.3333, "angle": -15.84 } + ], + "translate": [ + { "time": 0.3333, "x": -0.09, "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.75 } + ] + }, + "hip": { + "translate": [ + { "time": 0, "x": -75.54, "y": -78.03 }, + { "time": 0.2333, "x": -36.48, "y": 12.42 }, + { "time": 0.3333, "x": -36.48, "y": -2.99 } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 90.94, + "curve": [ 0.227, 0.26, 0.432, 1 ] + }, + { "time": 0.3333, "angle": 32.02 } + ], + "translate": [ + { "time": 0, "x": 7.21, "y": -4 } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 40.51, + "curve": [ 0.295, 0.3, 0.59, 0.99 ] + }, + { "time": 0.3333, "angle": 90.76 } + ], + "translate": [ + { "time": 0, "x": -1.96, "y": -0.32 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": -96.62 }, + { "time": 0.3333, "angle": -15.13 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 7.99 }, + { "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.26 } + ], + "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 } + ] + } + } + }, + "idle": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_open" }, + { "time": 1.6666, "name": "front_fist_open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_smile" }, + { "time": 1.6666, "name": "mouth_smile" } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { + "time": 0, + "angle": -5.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8333, + "angle": -9.65, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -5.61 } + ], + "translate": [ + { "time": 0, "x": -6.49, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -59.85, + "curve": [ 0.492, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -54.31, + "curve": [ 0.324, 0.11, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -59.85 } + ], + "translate": [ + { "time": 0, "x": -7.12, "y": -8.23 }, + { "time": 0.6666, "x": -6.32, "y": -8.3 }, + { "time": 1.6666, "x": -7.12, "y": -8.23 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 62.41, + "curve": [ 0.504, 0.02, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": 43.83, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": 62.41 } + ], + "translate": [ + { "time": 0, "x": -1.83, "y": -16.78 }, + { "time": 0.6666, "x": 0.34, "y": -15.23 }, + { "time": 1.6666, "x": -1.83, "y": -16.78 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.6666, "angle": 2.39 }, + { "time": 1.6666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -1.88, "y": -4.76, "curve": "stepped" }, + { "time": 1.6666, "x": -1.88, "y": -4.76 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0.64, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": -4.34, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": 0.64 } + ], + "translate": [ + { "time": 0, "x": -13.39, "y": 6.69, "curve": "stepped" }, + { "time": 1.6666, "x": -13.39, "y": 6.69 } + ], + "scale": [ + { + "time": 0, + "x": 0.896, + "y": 1, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "x": 0.825, + "y": 1, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "x": 0.896, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": -19.28, "curve": "stepped" }, + { "time": 1.6666, "angle": -19.28 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "x": 0.994, + "y": 1, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 30.5, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": 40.15, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": 30.5 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -23.83, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": -43.77, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": -23.83 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 5.13, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": 10.04, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": 5.13 } + ], + "scale": [ + { "time": 0, "x": 0.755, "y": 1.309, "curve": "stepped" }, + { "time": 1.6666, "x": 0.755, "y": 1.309 } + ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -6.63, + "y": -23.01, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "x": 6.27, + "y": -35, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "x": -6.63, "y": -23.01 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": -7.34, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": 3.85, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": -7.34 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": -17.16, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": 12.52, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -17.16 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": -5.51, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -3.12, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -5.51 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 45.46, + "curve": [ 0.492, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": 41.33, + "curve": [ 0.32, 0.1, 0.736, 0.91 ] + }, + { "time": 1.6666, "angle": 45.46 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -15.59, + "curve": [ 0.732, 0, 0.769, 0.99 ] + }, + { "time": 1.6666, "angle": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -6.84, + "curve": [ 0.492, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -14.63, + "curve": [ 0.324, 0.11, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -6.84 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "x": 0.689, + "y": 1.1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + } + } + }, + "jump": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_open" }, + { "time": 0.2, "name": "front_fist_closed" }, + { "time": 0.6666, "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.763, 1 ] + }, + { + "time": 0.2, + "angle": -35.83, + "curve": [ 0.761, 0, 0.75, 1 ] + }, + { "time": 0.4333, "angle": 127.74 }, + { + "time": 0.7333, + "angle": 48.18, + "curve": [ 0.227, 0.26, 0.432, 1 ] + }, + { "time": 0.8333, "angle": 25.35 }, + { "time": 0.9333, "angle": 45.37 }, + { "time": 1.0333, "angle": 38.12 }, + { "time": 1.1333, "angle": 25.35 }, + { "time": 1.3333, "angle": 91.53 } + ], + "translate": [ + { "time": 0, "x": -2.56, "y": 5.77 }, + { "time": 0.4333, "x": 8.3, "y": 7.98 }, + { "time": 0.7333, "x": 7.21, "y": -4 }, + { "time": 1.3333, "x": -2.56, "y": 5.77 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -42.63 }, + { "time": 0.2, "angle": -5.74 }, + { "time": 0.4333, "angle": -50.76 }, + { "time": 0.7333, "angle": 1.89 }, + { "time": 0.8333, "angle": 11.58 }, + { "time": 0.9666, "angle": -1.89 }, + { "time": 1.1333, "angle": 11.58 }, + { "time": 1.3333, "angle": -42.63 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -26.32 }, + { "time": 0.2, "angle": 121.44 }, + { "time": 0.4333, "angle": 70.54 }, + { + "time": 0.7333, + "angle": 79.89, + "curve": [ 0.295, 0.3, 0.59, 0.99 ] + }, + { "time": 0.8333, "angle": 99.12 }, + { "time": 0.9333, "angle": 74.05 }, + { "time": 1.0333, "angle": 98.04 }, + { "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "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.74 }, + { "time": 0.9333, "angle": -41.12 }, + { "time": 1.0333, "angle": -77.4 }, + { "time": 1.1333, "angle": -80.74 }, + { "time": 1.3333, "angle": -78.69 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.7333, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -22.61 }, + { "time": 0.2, "angle": -246.68 }, + { + "time": 0.6, + "angle": 11.28, + "curve": [ 0.246, 0, 0.633, 0.53 ] + }, + { + "time": 0.7333, + "angle": -57.45, + "curve": [ 0.38, 0.53, 0.744, 1 ] + }, + { "time": 0.8666, "angle": -112.59 }, + { "time": 0.9333, "angle": -102.17 }, + { "time": 1.0333, "angle": -108.61 }, + { "time": 1.1333, "angle": -112.59 }, + { "time": 1.3333, "angle": -22.61 } + ], + "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 66.46 }, + { "time": 0.2, "angle": 42.39 }, + { "time": 0.4333, "angle": 26.06 }, + { "time": 0.7333, "angle": 13.28 }, + { "time": 0.8666, "angle": -28.64 }, + { "time": 0.9333, "angle": -22.31 }, + { "time": 1.0333, "angle": -35.39 }, + { "time": 1.1333, "angle": -28.64 }, + { "time": 1.3333, "angle": 66.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -28.43 }, + { "time": 0.4333, "angle": -45.6 }, + { "time": 0.7333, "angle": -53.66 }, + { "time": 0.8666, "angle": 7.55 }, + { "time": 0.9333, "angle": 31.15 }, + { "time": 1.0333, "angle": -32.58 }, + { "time": 1.1333, "angle": 7.55 }, + { "time": 1.3333, "angle": -28.43 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 39.68 }, + { "time": 0.2, "angle": 276.57 }, + { "time": 0.3, "angle": 17.73 }, + { "time": 0.4333, "angle": 83.38 }, + { + "time": 0.6, + "angle": -4.71, + "curve": [ 0.246, 0, 0.633, 0.53 ] + }, + { + "time": 0.7333, + "angle": -69.63, + "curve": [ 0.342, 0.36, 0.68, 0.71 ] + }, + { + "time": 0.7666, + "angle": 321.47, + "curve": [ 0.333, 0.33, 0.667, 0.66 ] + }, + { + "time": 0.8, + "angle": 33.7, + "curve": [ 0.358, 0.64, 0.693, 1 ] + }, + { "time": 0.8666, "angle": 34.56 }, + { "time": 1.0333, "angle": 71.96 }, + { "time": 1.1333, "angle": 34.56 }, + { "time": 1.3333, "angle": 39.68 } + ], + "translate": [ + { "time": 0, "x": -3.1, "y": -4.86 }, + { "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.86 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 29.66 }, + { "time": 0.2, "angle": 45.06 }, + { "time": 0.4333, "angle": -4.34 }, + { "time": 0.7666, "angle": 61.68 }, + { "time": 0.8, "angle": 82.59 }, + { "time": 0.8666, "angle": 80.06 }, + { "time": 1.0333, "angle": 57.56 }, + { "time": 1.1333, "angle": 80.06 }, + { "time": 1.3333, "angle": 29.66 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 24.9 }, + { "time": 0.2, "angle": 16.31 }, + { "time": 0.4333, "angle": 7.44 }, + { "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.9 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 24.92 }, + { "time": 0.2, "angle": 10.36 }, + { "time": 0.4333, "angle": 28.65 }, + { "time": 0.7333, "angle": -2.65 }, + { "time": 0.8333, "angle": -28.94, "curve": "stepped" }, + { "time": 1.1333, "angle": -28.94 }, + { "time": 1.3333, "angle": 24.92 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": -34.51, + "y": -78.62, + "curve": [ 0.232, 1, 0.75, 1 ] + }, + { + "time": 0.2, + "x": -34.51, + "y": 182.5, + "curve": [ 0.232, 0.48, 0.598, 0.79 ] + }, + { + "time": 0.7666, + "x": -34.51, + "y": 596.22, + "curve": [ 0.329, 0.17, 0.66, 0.21 ] + }, + { "time": 1.1333, "x": -34.51, "y": 2.49 }, + { "time": 1.3333, "x": -34.51, "y": -78.62 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -90.62, + "curve": [ 0.416, 0.54, 0.743, 1 ] + }, + { + "time": 0.2, + "angle": -10.52, + "curve": [ 0.644, 0, 0.75, 1 ] + }, + { "time": 0.4333, "angle": -127.72 }, + { "time": 0.7333, "angle": -19.91 }, + { "time": 0.8333, "angle": -5.16 }, + { "time": 0.9333, "angle": -35.06 }, + { "time": 1.0333, "angle": -43.97 }, + { "time": 1.1333, "angle": -5.16 }, + { "time": 1.3333, "angle": -90.62 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": -0.79 }, + { "time": 0.0333, "angle": 16.27 }, + { "time": 0.0666, "angle": 23.52 }, + { "time": 0.1, "angle": 21.02 }, + { "time": 0.1333, "angle": 10.92 }, + { "time": 0.2, "angle": -38.45 }, + { "time": 0.4333, "angle": 6.62 }, + { "time": 0.7333, "angle": -11.51 }, + { "time": 1.0333, "angle": -22.91 }, + { "time": 1.3333, "angle": -0.79 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": -12.77 }, + { "time": 0.2, "angle": 17.05 }, + { "time": 0.4333, "angle": 19.45 }, + { "time": 0.7333, "angle": 2.67 }, + { "time": 1.0333, "angle": -28.49 }, + { "time": 1.3333, "angle": -12.77 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 6.18 }, + { "time": 0.2, "angle": 30.81 }, + { "time": 0.4333, "angle": 13.25 }, + { "time": 0.7333, "angle": 14.98 }, + { "time": 0.7666, "angle": 25.64 }, + { "time": 0.8, "angle": 20.62 }, + { "time": 0.8666, "angle": 64.52 }, + { "time": 1.0333, "angle": 8.59 }, + { "time": 1.1333, "angle": 64.52 }, + { "time": 1.3333, "angle": 6.18 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "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.195, 0.86, 0.75, 1 ] + }, + { "time": 0.0666, "angle": 46.07 }, + { "time": 0.1333, "angle": -20.28 }, + { "time": 0.2, "angle": -27.23 }, + { "time": 0.2666, "angle": -47.16 }, + { "time": 0.3333, "angle": -39.79 }, + { "time": 0.4, "angle": -25.86 }, + { "time": 0.4666, "angle": 14.35 }, + { "time": 0.5333, "angle": 55.62 }, + { "time": 0.6, "angle": 69.65 }, + { "time": 0.6666, "angle": 86.4 }, + { "time": 0.7333, "angle": 65.87 }, + { "time": 0.8, "angle": 42.05 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0333, "x": -5.79, "y": 11.15 }, + { "time": 0.0666, "x": -5.13, "y": 11.55 }, + { "time": 0.1333, "x": -7.7, "y": 8.98 }, + { "time": 0.5333, "x": -1.26, "y": 3.83 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -39.7 }, + { "time": 0.2, "angle": -57.29 }, + { "time": 0.4, "angle": -39.7 }, + { "time": 0.6, "angle": -57.29 }, + { "time": 0.8, "angle": -39.7 } + ], + "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -56.59 }, + { "time": 0.0666, "angle": -21.57 }, + { "time": 0.1333, "angle": 27.95 }, + { "time": 0.2, "angle": 42.42 }, + { "time": 0.2666, "angle": 62.37 }, + { "time": 0.3333, "angle": 45.42 }, + { "time": 0.4, "angle": 15.67 }, + { "time": 0.4666, "angle": 28.22 }, + { "time": 0.5333, "angle": -38.62 }, + { "time": 0.6, "angle": -53.26 }, + { "time": 0.6666, "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.4666, "x": -13.04, "y": 4.04 }, + { "time": 0.5, "x": -10.24, "y": 7.11 }, + { "time": 0.5333, "x": -9.01, "y": -5.15 }, + { "time": 0.6666, "x": -23.18, "y": -2.57 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": -74 }, + { "time": 0.0666, "angle": -83.38 }, + { "time": 0.1333, "angle": -106.69 }, + { "time": 0.2, "angle": -66.01 }, + { "time": 0.2666, "angle": -55.22 }, + { "time": 0.3333, "angle": -24.8 }, + { + "time": 0.4, + "angle": 18.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4666, "angle": -56.65 }, + { + "time": 0.5333, + "angle": -11.94, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6666, "angle": -41.26 }, + { "time": 0.7333, "angle": -43.6 }, + { "time": 0.8, "angle": -74 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -89.36 }, + { "time": 0.0666, "angle": -95.67 }, + { "time": 0.1333, "angle": -22 }, + { "time": 0.2, "angle": -316.04 }, + { "time": 0.2666, "angle": -274.94 }, + { "time": 0.3333, "angle": -273.74 }, + { "time": 0.4, "angle": -272.09 }, + { "time": 0.4666, "angle": -264.89 }, + { "time": 0.5333, "angle": -320.09 }, + { "time": 0.6, "angle": -50.83 }, + { "time": 0.6666, "angle": -81.72 }, + { "time": 0.7333, "angle": -83.92 }, + { "time": 0.8, "angle": -89.36 } + ], + "translate": [ + { "time": 0, "x": 6.24, "y": 10.05 }, + { "time": 0.2666, "x": 4.95, "y": -13.13 }, + { "time": 0.6, "x": -2.43, "y": 1.94 }, + { "time": 0.8, "x": 6.24, "y": 10.05 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 33.43 }, + { "time": 0.0666, "angle": 20.53 }, + { "time": 0.1333, "angle": 15.26 }, + { "time": 0.2, "angle": 19.28 }, + { "time": 0.2666, "angle": 22.62 }, + { "time": 0.3333, "angle": 37.29 }, + { "time": 0.4, "angle": 41.53 }, + { "time": 0.4666, "angle": 31.73 }, + { "time": 0.5333, "angle": 67.45 }, + { "time": 0.6666, "angle": 39.77 }, + { "time": 0.7333, "angle": 30.95 }, + { "time": 0.8, "angle": 33.43 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -19.75 }, + { "time": 0.0666, "angle": -37.11 }, + { "time": 0.1333, "angle": -50.79 }, + { "time": 0.2666, "angle": -12.69 }, + { "time": 0.3333, "angle": 3.01 }, + { "time": 0.4333, "angle": 12.05 }, + { "time": 0.5333, "angle": 13.25 }, + { "time": 0.8, "angle": -19.75 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 68.68 }, + { "time": 0.0666, "angle": 73.89 }, + { "time": 0.1333, "angle": -9.64 }, + { "time": 0.2, "angle": 284.27 }, + { "time": 0.2666, "angle": 283.29 }, + { "time": 0.3333, "angle": 278.28 }, + { "time": 0.4, "angle": 271.02 }, + { "time": 0.4666, "angle": 263.2 }, + { "time": 0.5333, "angle": 314.25 }, + { "time": 0.6, "angle": 16.83 }, + { "time": 0.6666, "angle": 70.35 }, + { "time": 0.7333, "angle": 73.53 }, + { "time": 0.8, "angle": 68.68 } + ], + "translate": [ + { "time": 0, "x": -2.57, "y": -8.89 }, + { "time": 0.1333, "x": -4.68, "y": 7.2 }, + { "time": 0.2, "x": 21.73, "y": 51.17 }, + { "time": 0.6, "x": 4.33, "y": 2.05 }, + { "time": 0.8, "x": -2.57, "y": -8.89 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 31.04 }, + { "time": 0.0666, "angle": 28.28 }, + { "time": 0.1333, "angle": 49.36 }, + { "time": 0.2, "angle": 59.37 }, + { "time": 0.2666, "angle": 8.56 }, + { "time": 0.3333, "angle": 9.38 }, + { "time": 0.4, "angle": 11.51 }, + { "time": 0.4666, "angle": 7.22 }, + { "time": 0.5333, "angle": -18.44 }, + { "time": 0.6, "angle": 11.44 }, + { "time": 0.6666, "angle": 9.99 }, + { "time": 0.7333, "angle": 8.28 }, + { "time": 0.8, "angle": 31.04 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.2, "angle": 13.58 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.6, "angle": 13.58 }, + { "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.1, "angle": 12.34 }, + { "time": 0.2, "angle": 25.55 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.5, "angle": 12.34 }, + { "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -62.47, "y": -23.1 }, + { + "time": 0.0666, + "x": -62.47, + "y": -38.51, + "curve": [ 0.244, 0.04, 0.75, 1 ] + }, + { + "time": 0.2666, + "x": -62.47, + "y": 22.28, + "curve": [ 0.17, 0.52, 0.75, 1 ] + }, + { "time": 0.4, "x": -62.47, "y": -23.1 }, + { "time": 0.4333, "x": -62.47, "y": -24.59 }, + { + "time": 0.4666, + "x": -62.47, + "y": -43.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6666, "x": -62.47, "y": 22.28 }, + { "time": 0.8, "x": -62.47, "y": -23.1 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.481, 0.01, 0.75, 1 ] + }, + { "time": 0.0666, "angle": -64.42 }, + { + "time": 0.1333, + "angle": -20.59, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.2666, "angle": -62.51 }, + { "time": 0.3333, "angle": -79.74 }, + { "time": 0.4, "angle": -78.28 }, + { + "time": 0.4666, + "angle": -118.96, + "curve": [ 0.93, 0, 0.952, 0.95 ] + }, + { "time": 0.6, "angle": -88.95 }, + { "time": 0.6666, "angle": -79.09 }, + { "time": 0.7333, "angle": -47.77 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { + "time": 0.0333, + "angle": -21.13, + "curve": [ 0.121, 0.23, 0.75, 1 ] + }, + { "time": 0.0666, "angle": 17.64 }, + { "time": 0.1, "angle": 29.92 }, + { "time": 0.1333, "angle": 16.44 }, + { "time": 0.2, "angle": -29.22 }, + { "time": 0.2666, "angle": -1.61 }, + { "time": 0.3333, "angle": -10.22 }, + { "time": 0.4666, "angle": -15.99 }, + { "time": 0.6, "angle": 9.03 }, + { "time": 0.7333, "angle": 17.32 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0666, "angle": -12.04 }, + { "time": 0.1333, "angle": -0.87 }, + { "time": 0.2, "angle": 25.81 }, + { "time": 0.2666, "angle": 4.71 }, + { + "time": 0.4, + "angle": 18.09, + "curve": [ 0.281, 0.73, 0.75, 1 ] + }, + { "time": 0.4333, "angle": -1.7 }, + { "time": 0.4666, "angle": 27.12 }, + { "time": 0.5, "angle": 38.83 }, + { "time": 0.5333, "angle": 30.76 }, + { "time": 0.5666, "angle": -20.49 }, + { "time": 0.6, "angle": -30.8 }, + { "time": 0.6666, "angle": -1.31 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 24.72 }, + { "time": 0.5, "angle": -11.87 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + } + }, + "events": [ + { "time": 0, "name": "footstep" }, + { "time": 0.4, "name": "footstep", "int": 1 } + ] + }, + "shoot": { + "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.118, 0.99, 0.75, 1 ] + }, + { + "time": 0.1666, + "color": "ffffffff", + "curve": [ 0.821, 0, 0.909, 0.89 ] + }, + { "time": 0.2666, "color": "ffffff00" } + ], + "attachment": [ + { "time": 0.1333, "name": "muzzle" }, + { "time": 0.2666, "name": null } + ] + } + }, + "bones": { + "front_fist": { + "scale": [ + { "time": 0.1333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "gunTip": { + "translate": [ + { "time": 0.1333, "x": 0, "y": 0 }, + { "time": 0.2, "x": 20.93, "y": 1.57 } + ], + "scale": [ + { "time": 0.1333, "x": 1, "y": 1 }, + { "time": 0.2, "x": 1.247, "y": 1.516 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 1.9 } + ], + "translate": [ + { + "time": 0, + "x": 7.95, + "y": 5.84, + "curve": [ 0, 0.3, 0.678, 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.678, 1 ] + }, + { "time": 0.3, "x": -5.99, "y": -3.71 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 62.3 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0, 0.3, 0.678, 1 ] + }, + { "time": 0.3, "x": 2.81, "y": 11.41 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + } + } + }, + "test": { + "slots": { + "front_foot": { + "color": [ + { "time": 0.6666, "color": "ffffffff" }, + { "time": 1.3333, "color": "ff0700ff" } + ] + }, + "gun": { + "color": [ + { "time": 0, "color": "ffffffff", "curve": "stepped" }, + { "time": 0.6666, "color": "ffffffff" }, + { "time": 1.3333, "color": "32ff00ff" } + ] + }, + "rear_foot": { + "color": [ + { "time": 0.6666, "color": "ffffffff" }, + { "time": 1.3333, "color": "ff0700ff" } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.3333, "angle": -20.72 }, + { "time": 0.6666, "angle": -32.41 }, + { "time": 1, "angle": -5.3 }, + { "time": 1.3333, "angle": 24.96 }, + { "time": 1.6666, "angle": 15.61 }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.172, 0.37, 0.574, 0.73 ] + }, + { + "time": 0.1666, + "x": 144.19, + "y": -77.59, + "curve": [ 0.372, 0.61, 0.765, 1 ] + }, + { + "time": 0.3333, + "x": 217.61, + "y": -192.63, + "curve": [ 0.282, 0, 0.624, 0.31 ] + }, + { + "time": 0.5, + "x": 181.21, + "y": -365.66, + "curve": [ 0.313, 0.21, 0.654, 0.54 ] + }, + { + "time": 0.6666, + "x": 20.09, + "y": -500.4, + "curve": [ 0.147, 0.27, 0.75, 1 ] + }, + { "time": 0.8333, "x": -194.24, "y": -341.84 }, + { "time": 1, "x": -307.93, "y": -114 }, + { + "time": 1.1666, + "x": -330.38, + "y": 121.42, + "curve": [ 0.25, 0, 0.764, 0.48 ] + }, + { + "time": 1.3333, + "x": -240.42, + "y": 335.66, + "curve": [ 0.229, 0.37, 0.58, 0.73 ] + }, + { + "time": 1.5, + "x": -56.12, + "y": 288.06, + "curve": [ 0.296, 0.6, 0.641, 1 ] + }, + { + "time": 1.6666, + "x": 87.63, + "y": 191.33, + "curve": [ 0.238, 0, 0.626, 0.39 ] + }, + { + "time": 1.8333, + "x": 60.62, + "y": 95.14, + "curve": [ 0.41, 0.26, 0.803, 0.62 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + } + }, + "drawOrder": [ + { + "time": 0.6666, + "offsets": [ + { "slot": "head", "offset": -9 }, + { "slot": "eye", "offset": -9 }, + { "slot": "mouth", "offset": -12 }, + { "slot": "goggles", "offset": -12 } + ] + }, + { "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.39 }, + { "time": 0.2, "angle": -7.94 }, + { "time": 0.3, "angle": -16.94 }, + { "time": 0.4, "angle": -28.62 }, + { "time": 0.5, "angle": -19.3 }, + { "time": 0.6, "angle": -3.08 }, + { "time": 0.7, "angle": 29.51 }, + { "time": 0.8, "angle": 15.79 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.4, "x": -1.18, "y": 0.54 }, + { "time": 0.5, "x": 0.11, "y": 0.41 }, + { "time": 0.6, "x": 9.48, "y": 0.27 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": 5.12 }, + { "time": 0.1, "angle": -20.87 }, + { "time": 0.2, "angle": 13.37 }, + { "time": 0.3, "angle": 15.98 }, + { "time": 0.4, "angle": 5.94 }, + { "time": 0.5, "angle": -26.76 }, + { "time": 0.7, "angle": -55.44 }, + { "time": 0.8, "angle": 5.12 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -34.38 }, + { "time": 0.1, "angle": -30.32 }, + { "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.26 }, + { "time": 0.8, "angle": -34.38 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.4, "x": 4.08, "y": -9.53 }, + { "time": 0.5, "x": 0, "y": 0 }, + { "time": 0.7, "x": -21.14, "y": -9.6 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 14.26 }, + { "time": 0.1, "angle": -17.3 }, + { "time": 0.2, "angle": -12.67 }, + { "time": 0.3, "angle": -58.89 }, + { "time": 0.4, "angle": 15.95 }, + { "time": 0.5, "angle": -9 }, + { "time": 0.6, "angle": 26.06 }, + { "time": 0.7, "angle": 21.85 }, + { "time": 0.8, "angle": 14.26 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1, "x": 0.951, "y": 1 }, + { "time": 0.5, "x": 0.975, "y": 1 }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 10.13 }, + { "time": 0.1, "angle": 12.27 }, + { "time": 0.2, "angle": -2.94 }, + { "time": 0.3, "angle": 6.29 }, + { "time": 0.4, "angle": 13.45 }, + { "time": 0.5, "angle": -3.57 }, + { "time": 0.6, "angle": -0.97 }, + { "time": 0.7, "angle": 2.97 }, + { "time": 0.8, "angle": 10.13 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -23.74 }, + { "time": 0.4, "angle": -320.57 }, + { "time": 0.8, "angle": -23.74 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 11.62 }, + { "time": 0.1, "angle": 19.36 }, + { "time": 0.4, "angle": 345.26 }, + { "time": 0.5, "angle": 343.44 }, + { "time": 0.8, "angle": 11.62 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -12.11 }, + { "time": 0.1666, "angle": -17.16 }, + { "time": 0.4, "angle": -12.11 }, + { "time": 0.5666, "angle": -15.81 }, + { "time": 0.8, "angle": -12.11 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "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 } + ], + "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 6.97 }, + { "time": 0.1666, "angle": 8.02 }, + { "time": 0.2666, "angle": 12.65 }, + { "time": 0.4, "angle": 6.97 }, + { "time": 0.5666, "angle": 8.02 }, + { "time": 0.6666, "angle": 12.65 }, + { "time": 0.8, "angle": 6.97 } + ], + "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": -23.93, + "y": 3.22, + "curve": [ 0.518, 0.03, 0.807, 0.61 ] + }, + { + "time": 0.1, + "x": -23.93, + "y": -9.24, + "curve": [ 0.135, 0.33, 0.601, 0.99 ] + }, + { + "time": 0.2, + "x": -23.93, + "y": 4.35, + "curve": [ 0.204, 0.68, 0.75, 1 ] + }, + { + "time": 0.3, + "x": -23.93, + "y": 2.38, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "x": -23.93, + "y": -2.5, + "curve": [ 0.692, 0.01, 0.75, 1 ] + }, + { + "time": 0.5, + "x": -23.93, + "y": -10.32, + "curve": [ 0.235, 0.77, 0.75, 1 ] + }, + { + "time": 0.6, + "x": -23.93, + "y": 4.35, + "curve": [ 0.287, 0.37, 0.718, 0.76 ] + }, + { + "time": 0.7, + "x": -23.93, + "y": 10.34, + "curve": [ 0.615, 0, 0.75, 1 ] + }, + { "time": 0.8, "x": -23.93, "y": 3.22 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4, "angle": 20.59 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 12.49 }, + { "time": 0.1, "angle": -8.34 }, + { "time": 0.2, "angle": -6.17 }, + { "time": 0.3, "angle": -0.75 }, + { "time": 0.3333, "angle": 3.89 }, + { "time": 0.4, "angle": 10.22 }, + { "time": 0.5, "angle": 11.44 }, + { "time": 0.6, "angle": -0.33 }, + { "time": 0.7, "angle": 0.15 }, + { "time": 0.8, "angle": 12.49 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 3.58 }, + { "time": 0.1, "angle": 5.51 }, + { "time": 0.4, "angle": -22.77 }, + { "time": 0.5, "angle": -9.65 }, + { "time": 0.8, "angle": 3.58 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "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 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": -24.06, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.1, + "angle": -10.94, + "curve": [ 0.381, 0.54, 0.742, 1 ] + }, + { + "time": 0.4, + "angle": 25.34, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -27.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.8, "angle": -24.06 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/examples/spineboy/export/spineboy.png b/examples/spineboy/export/spineboy.png new file mode 100644 index 000000000..2eae82219 Binary files /dev/null and b/examples/spineboy/export/spineboy.png differ diff --git a/examples/spineboy/export/spineboy.skel b/examples/spineboy/export/spineboy.skel new file mode 100644 index 000000000..20f970670 Binary files /dev/null and b/examples/spineboy/export/spineboy.skel differ diff --git a/examples/spineboy/images/eye_indifferent.png b/examples/spineboy/images/eye_indifferent.png new file mode 100644 index 000000000..d55e9af00 Binary files /dev/null and b/examples/spineboy/images/eye_indifferent.png differ diff --git a/examples/spineboy/images/eye_surprised.png b/examples/spineboy/images/eye_surprised.png new file mode 100644 index 000000000..1e6801ca4 Binary files /dev/null and b/examples/spineboy/images/eye_surprised.png differ diff --git a/examples/spineboy/images/front_bracer.png b/examples/spineboy/images/front_bracer.png new file mode 100644 index 000000000..0957aafa9 Binary files /dev/null and b/examples/spineboy/images/front_bracer.png differ diff --git a/examples/spineboy/images/front_fist_closed.png b/examples/spineboy/images/front_fist_closed.png new file mode 100644 index 000000000..36546c4ed Binary files /dev/null and b/examples/spineboy/images/front_fist_closed.png differ diff --git a/examples/spineboy/images/front_fist_open.png b/examples/spineboy/images/front_fist_open.png new file mode 100644 index 000000000..b493a5919 Binary files /dev/null and b/examples/spineboy/images/front_fist_open.png differ diff --git a/examples/spineboy/images/front_foot.png b/examples/spineboy/images/front_foot.png new file mode 100644 index 000000000..fa70184a1 Binary files /dev/null and b/examples/spineboy/images/front_foot.png differ diff --git a/examples/spineboy/images/front_foot_bend1.png b/examples/spineboy/images/front_foot_bend1.png new file mode 100644 index 000000000..141aa369e Binary files /dev/null and b/examples/spineboy/images/front_foot_bend1.png differ diff --git a/examples/spineboy/images/front_foot_bend2.png b/examples/spineboy/images/front_foot_bend2.png new file mode 100644 index 000000000..e4b8c5804 Binary files /dev/null and b/examples/spineboy/images/front_foot_bend2.png differ diff --git a/examples/spineboy/images/front_shin.png b/examples/spineboy/images/front_shin.png new file mode 100644 index 000000000..27eb62f40 Binary files /dev/null and b/examples/spineboy/images/front_shin.png differ diff --git a/examples/spineboy/images/front_thigh.png b/examples/spineboy/images/front_thigh.png new file mode 100644 index 000000000..c4a05e48f Binary files /dev/null and b/examples/spineboy/images/front_thigh.png differ diff --git a/examples/spineboy/images/front_upper_arm.png b/examples/spineboy/images/front_upper_arm.png new file mode 100644 index 000000000..6c92b8b88 Binary files /dev/null and b/examples/spineboy/images/front_upper_arm.png differ diff --git a/examples/spineboy/images/goggles.png b/examples/spineboy/images/goggles.png new file mode 100644 index 000000000..5b2724ce0 Binary files /dev/null and b/examples/spineboy/images/goggles.png differ diff --git a/examples/spineboy/images/gun.png b/examples/spineboy/images/gun.png new file mode 100644 index 000000000..cd10dd7e1 Binary files /dev/null and b/examples/spineboy/images/gun.png differ diff --git a/examples/spineboy/images/head.png b/examples/spineboy/images/head.png new file mode 100644 index 000000000..cfeb4493f Binary files /dev/null and b/examples/spineboy/images/head.png differ diff --git a/examples/spineboy/images/hoverboard_board.png b/examples/spineboy/images/hoverboard_board.png new file mode 100644 index 000000000..dd80dbdd9 Binary files /dev/null and b/examples/spineboy/images/hoverboard_board.png differ diff --git a/examples/spineboy/images/hoverboard_thruster.png b/examples/spineboy/images/hoverboard_thruster.png new file mode 100644 index 000000000..415c5301a Binary files /dev/null and b/examples/spineboy/images/hoverboard_thruster.png differ diff --git a/examples/spineboy/images/hoverglow_small.png b/examples/spineboy/images/hoverglow_small.png new file mode 100644 index 000000000..d3d9f86bc Binary files /dev/null and b/examples/spineboy/images/hoverglow_small.png differ diff --git a/examples/spineboy/images/mouth_grind.png b/examples/spineboy/images/mouth_grind.png new file mode 100644 index 000000000..520432e07 Binary files /dev/null and b/examples/spineboy/images/mouth_grind.png differ diff --git a/examples/spineboy/images/mouth_oooo.png b/examples/spineboy/images/mouth_oooo.png new file mode 100644 index 000000000..338b52ab4 Binary files /dev/null and b/examples/spineboy/images/mouth_oooo.png differ diff --git a/examples/spineboy/images/mouth_smile.png b/examples/spineboy/images/mouth_smile.png new file mode 100644 index 000000000..ddc5855be Binary files /dev/null and b/examples/spineboy/images/mouth_smile.png differ diff --git a/examples/spineboy/images/muzzle.png b/examples/spineboy/images/muzzle.png new file mode 100644 index 000000000..6a399e5f9 Binary files /dev/null and b/examples/spineboy/images/muzzle.png differ diff --git a/examples/spineboy/images/neck.png b/examples/spineboy/images/neck.png new file mode 100644 index 000000000..a12042fbf Binary files /dev/null and b/examples/spineboy/images/neck.png differ diff --git a/examples/spineboy/images/rear_bracer.png b/examples/spineboy/images/rear_bracer.png new file mode 100644 index 000000000..485dbb784 Binary files /dev/null and b/examples/spineboy/images/rear_bracer.png differ diff --git a/examples/spineboy/images/rear_foot.png b/examples/spineboy/images/rear_foot.png new file mode 100644 index 000000000..92a64d906 Binary files /dev/null and b/examples/spineboy/images/rear_foot.png differ diff --git a/examples/spineboy/images/rear_foot_bend1.png b/examples/spineboy/images/rear_foot_bend1.png new file mode 100644 index 000000000..4d785f96f Binary files /dev/null and b/examples/spineboy/images/rear_foot_bend1.png differ diff --git a/examples/spineboy/images/rear_foot_bend2.png b/examples/spineboy/images/rear_foot_bend2.png new file mode 100644 index 000000000..dafacf33d Binary files /dev/null and b/examples/spineboy/images/rear_foot_bend2.png differ diff --git a/examples/spineboy/images/rear_shin.png b/examples/spineboy/images/rear_shin.png new file mode 100644 index 000000000..3b9fd20e9 Binary files /dev/null and b/examples/spineboy/images/rear_shin.png differ diff --git a/examples/spineboy/images/rear_thigh.png b/examples/spineboy/images/rear_thigh.png new file mode 100644 index 000000000..300612a24 Binary files /dev/null and b/examples/spineboy/images/rear_thigh.png differ diff --git a/examples/spineboy/images/rear_upper_arm.png b/examples/spineboy/images/rear_upper_arm.png new file mode 100644 index 000000000..b86c876dc Binary files /dev/null and b/examples/spineboy/images/rear_upper_arm.png differ diff --git a/examples/spineboy/images/torso.png b/examples/spineboy/images/torso.png new file mode 100644 index 000000000..4da4d2033 Binary files /dev/null and b/examples/spineboy/images/torso.png differ diff --git a/examples/spineboy/license.txt b/examples/spineboy/license.txt new file mode 100644 index 000000000..cd3e3b481 --- /dev/null +++ b/examples/spineboy/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2013, Esoteric Software + +The images in this project may be redistributed as long as they are accompanied +by this license file. The images may not be used for commercial use of any +kind. + +The project file is released into the public domain. It may be used as the basis +for derivative work. \ No newline at end of file diff --git a/examples/spineboy/spineboy-mesh.spine b/examples/spineboy/spineboy-mesh.spine new file mode 100644 index 000000000..2fad5c79d Binary files /dev/null and b/examples/spineboy/spineboy-mesh.spine differ diff --git a/examples/spineboy/spineboy.spine b/examples/spineboy/spineboy.spine new file mode 100644 index 000000000..365666d7d Binary files /dev/null and b/examples/spineboy/spineboy.spine differ diff --git a/examples/spinosaurus/export/spinosaurus.json b/examples/spinosaurus/export/spinosaurus.json new file mode 100644 index 000000000..56f84aee0 --- /dev/null +++ b/examples/spinosaurus/export/spinosaurus.json @@ -0,0 +1,278 @@ +{ +"skeleton": { "hash": "+jy97FaQm8tosWwFNGbQGD2+FlY", "spine": "3.4.00", "width": 1680, "height": 1782.27, "images": "./images/" }, +"bones": [ + { "name": "root", "y": -526.31 }, + { "name": "leaves", "parent": "root", "x": -0.16, "y": 1310.1 }, + { "name": "logo", "parent": "root", "y": 1332.02 }, + { "name": "play", "parent": "root", "x": 3.02, "y": -83.61 }, + { "name": "quit", "parent": "root", "x": -2.85, "y": -201.21 }, + { "name": "settings", "parent": "root", "x": 3.02, "y": -144.37 } +], +"slots": [ + { "name": "background", "bone": "root" }, + { "name": "leaves", "bone": "leaves", "attachment": "leaves" }, + { "name": "logo", "bone": "logo", "attachment": "logo" }, + { "name": "play", "bone": "play", "color": "fff99dff", "attachment": "play" }, + { "name": "quit", "bone": "quit", "color": "fff99dff", "attachment": "quit" }, + { "name": "settings", "bone": "settings", "color": "fff99dff", "attachment": "settings" } +], +"skins": { + "default": { + "leaves": { + "leaves": { "y": -28.54, "width": 1042, "height": 522 } + }, + "logo": { + "logo": { "y": -20.39, "width": 917, "height": 323 } + }, + "play": { + "play": { "width": 218, "height": 77 } + }, + "quit": { + "quit": { "width": 216, "height": 77 } + }, + "settings": { + "settings": { "width": 446, "height": 76 } + } + } +}, +"animations": { + "animation": { + "slots": { + "leaves": { + "color": [ + { "time": 0, "color": "ffffff00" }, + { "time": 0.3333, "color": "ffffffff" } + ] + }, + "logo": { + "color": [ + { "time": 0, "color": "ffffff00" }, + { "time": 0.3333, "color": "ffffffff" } + ] + }, + "play": { + "color": [ + { "time": 1.3333, "color": "fff99dff" }, + { "time": 1.5666, "color": "ffffffff", "curve": "stepped" }, + { "time": 1.8333, "color": "ffffffff" }, + { "time": 2.0666, "color": "fff99dff" } + ] + }, + "quit": { + "color": [ + { "time": 2.4, "color": "fff99dff" }, + { "time": 2.6333, "color": "ffffffff" } + ] + }, + "settings": { + "color": [ + { "time": 1.8666, "color": "fff99dff" }, + { "time": 2.1, "color": "ffffffff", "curve": "stepped" }, + { "time": 2.3666, "color": "ffffffff" }, + { "time": 2.6, "color": "fff99dff" } + ] + } + }, + "bones": { + "logo": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 40.8, + "curve": [ 0.043, 0.15, 0.344, 1.26 ] + }, + { + "time": 0.3333, + "x": 0, + "y": -597.71, + "curve": [ 0.425, 0.17, 0.591, 0.99 ] + }, + { + "time": 1, + "x": 0, + "y": -583.71, + "curve": [ 0.402, 0, 0.603, 1 ] + }, + { + "time": 1.6666, + "x": 0, + "y": -592.11, + "curve": [ 0.408, 0.01, 0.655, 0.98 ] + }, + { + "time": 2.3333, + "x": 0, + "y": -583.71, + "curve": [ 0.402, 0, 0.603, 0.99 ] + }, + { + "time": 3, + "x": 0, + "y": -592.11, + "curve": [ 0.408, 0.01, 0.655, 0.98 ] + }, + { "time": 3.6666, "x": 0, "y": -583.71 } + ], + "scale": [ + { + "time": 0, + "x": 0.342, + "y": 0.342, + "curve": [ 0, 0, 0.744, 0.4 ] + }, + { + "time": 0.3333, + "x": 1, + "y": 1, + "curve": [ 0.189, 0.37, 0.658, 0.98 ] + }, + { + "time": 1, + "x": 1.02, + "y": 1.03, + "curve": [ 0.37, 0, 0.66, 0.99 ] + }, + { + "time": 1.6666, + "x": 1, + "y": 1, + "curve": [ 0.387, 0.01, 0.686, 1 ] + }, + { + "time": 2.3333, + "x": 1.02, + "y": 1.03, + "curve": [ 0.37, 0, 0.66, 0.99 ] + }, + { + "time": 3, + "x": 1, + "y": 1, + "curve": [ 0.387, 0.01, 0.686, 1 ] + }, + { "time": 3.6666, "x": 1.02, "y": 1.03 } + ] + }, + "play": { + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { + "time": 0.6666, + "x": 0, + "y": 0, + "curve": [ 0, 0, 0.448, 1.62 ] + }, + { "time": 0.8666, "x": 0, "y": 480.2 } + ], + "scale": [ + { + "time": 1.3333, + "x": 1, + "y": 1, + "curve": [ 0, 0, 0.525, 2.46 ] + }, + { "time": 1.5666, "x": 1.231, "y": 1.231, "curve": "stepped" }, + { + "time": 1.8333, + "x": 1.231, + "y": 1.231, + "curve": [ 0, 0, 0.525, 2.46 ] + }, + { "time": 2.0666, "x": 1, "y": 1 } + ] + }, + "settings": { + "translate": [ + { + "time": 0.8, + "x": 0, + "y": 0, + "curve": [ 0, 0, 0.448, 1.62 ] + }, + { "time": 1, "x": 0, "y": 431.2 } + ], + "scale": [ + { + "time": 1.8666, + "x": 1, + "y": 1, + "curve": [ 0, 0, 0.525, 2.46 ] + }, + { "time": 2.1, "x": 1.23, "y": 1.23, "curve": "stepped" }, + { + "time": 2.3666, + "x": 1.23, + "y": 1.23, + "curve": [ 0, 0, 0.525, 2.46 ] + }, + { "time": 2.6, "x": 1, "y": 1 } + ] + }, + "quit": { + "translate": [ + { + "time": 0.9333, + "x": 0, + "y": 0, + "curve": [ 0, 0, 0.448, 1.62 ] + }, + { "time": 1.1333, "x": 0, "y": 376.32 } + ], + "scale": [ + { + "time": 2.4, + "x": 1, + "y": 1, + "curve": [ 0, 0, 0.525, 2.46 ] + }, + { "time": 2.6333, "x": 1.23, "y": 1.23 } + ] + }, + "leaves": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.043, 0.15, 0.344, 1.26 ] + }, + { + "time": 0.3333, + "x": 0.16, + "y": -601.23, + "curve": [ 0.425, 0.17, 0.591, 0.99 ] + }, + { + "time": 1.3333, + "x": 0.16, + "y": -580.83, + "curve": [ 0.402, 0, 0.603, 1 ] + }, + { "time": 2, "x": 0.16, "y": -595.11 }, + { + "time": 2.6666, + "x": 0.16, + "y": -580.83, + "curve": [ 0.402, 0, 0.603, 1 ] + }, + { "time": 3.3333, "x": 0.16, "y": -595.11 } + ], + "scale": [ + { + "time": 0, + "x": 0.34, + "y": 0.34, + "curve": [ 0, 0, 0.744, 0.4 ] + }, + { "time": 0.3333, "x": 1, "y": 1 }, + { "time": 1.3333, "x": 1.03, "y": 1.02 }, + { "time": 2, "x": 1, "y": 1 }, + { "time": 2.6666, "x": 1.03, "y": 1.02 }, + { "time": 3.3333, "x": 1, "y": 1 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/examples/spinosaurus/export/spinosaurus.skel b/examples/spinosaurus/export/spinosaurus.skel new file mode 100644 index 000000000..b23e8767f Binary files /dev/null and b/examples/spinosaurus/export/spinosaurus.skel differ diff --git a/examples/spinosaurus/images/background.jpg b/examples/spinosaurus/images/background.jpg new file mode 100644 index 000000000..121c2b0c9 Binary files /dev/null and b/examples/spinosaurus/images/background.jpg differ diff --git a/examples/spinosaurus/images/leaves.png b/examples/spinosaurus/images/leaves.png new file mode 100644 index 000000000..e482ba0fd Binary files /dev/null and b/examples/spinosaurus/images/leaves.png differ diff --git a/examples/spinosaurus/images/logo.png b/examples/spinosaurus/images/logo.png new file mode 100644 index 000000000..1f5489e5d Binary files /dev/null and b/examples/spinosaurus/images/logo.png differ diff --git a/examples/spinosaurus/images/play.png b/examples/spinosaurus/images/play.png new file mode 100644 index 000000000..f025c64e2 Binary files /dev/null and b/examples/spinosaurus/images/play.png differ diff --git a/examples/spinosaurus/images/quit.png b/examples/spinosaurus/images/quit.png new file mode 100644 index 000000000..27abbcb20 Binary files /dev/null and b/examples/spinosaurus/images/quit.png differ diff --git a/examples/spinosaurus/images/settings.png b/examples/spinosaurus/images/settings.png new file mode 100644 index 000000000..dbd85b5f0 Binary files /dev/null and b/examples/spinosaurus/images/settings.png differ diff --git a/examples/spinosaurus/license.txt b/examples/spinosaurus/license.txt new file mode 100644 index 000000000..cd3e3b481 --- /dev/null +++ b/examples/spinosaurus/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2013, Esoteric Software + +The images in this project may be redistributed as long as they are accompanied +by this license file. The images may not be used for commercial use of any +kind. + +The project file is released into the public domain. It may be used as the basis +for derivative work. \ No newline at end of file diff --git a/examples/spinosaurus/spinosaurus.spine b/examples/spinosaurus/spinosaurus.spine new file mode 100644 index 000000000..dd65a6470 Binary files /dev/null and b/examples/spinosaurus/spinosaurus.spine differ diff --git a/examples/stretchyman/export/stretchyman-pma.atlas b/examples/stretchyman/export/stretchyman-pma.atlas new file mode 100644 index 000000000..e71f14917 --- /dev/null +++ b/examples/stretchyman/export/stretchyman-pma.atlas @@ -0,0 +1,41 @@ + +stretchyman-pma.png +size: 1024,256 +format: RGBA8888 +filter: Linear,Linear +repeat: none +back arm + rotate: true + xy: 679, 173 + size: 72, 202 + orig: 72, 202 + offset: 0, 0 + index: -1 +back leg + rotate: true + xy: 2, 2 + size: 100, 318 + orig: 100, 318 + offset: 0, 0 + index: -1 +body + rotate: true + xy: 2, 104 + size: 141, 452 + orig: 141, 452 + offset: 0, 0 + index: -1 +front arm + rotate: true + xy: 456, 100 + size: 145, 221 + orig: 145, 221 + offset: 0, 0 + index: -1 +head + rotate: true + xy: 322, 15 + size: 87, 102 + orig: 87, 102 + offset: 0, 0 + index: -1 diff --git a/examples/stretchyman/export/stretchyman-pma.png b/examples/stretchyman/export/stretchyman-pma.png new file mode 100644 index 000000000..f657c50bc Binary files /dev/null and b/examples/stretchyman/export/stretchyman-pma.png differ diff --git a/examples/stretchyman/export/stretchyman.atlas b/examples/stretchyman/export/stretchyman.atlas new file mode 100644 index 000000000..b9072157f --- /dev/null +++ b/examples/stretchyman/export/stretchyman.atlas @@ -0,0 +1,41 @@ + +stretchyman.png +size: 1024,256 +format: RGBA8888 +filter: Linear,Linear +repeat: none +back arm + rotate: true + xy: 679, 173 + size: 72, 202 + orig: 72, 202 + offset: 0, 0 + index: -1 +back leg + rotate: true + xy: 2, 2 + size: 100, 318 + orig: 100, 318 + offset: 0, 0 + index: -1 +body + rotate: true + xy: 2, 104 + size: 141, 452 + orig: 141, 452 + offset: 0, 0 + index: -1 +front arm + rotate: true + xy: 456, 100 + size: 145, 221 + orig: 145, 221 + offset: 0, 0 + index: -1 +head + rotate: true + xy: 322, 15 + size: 87, 102 + orig: 87, 102 + offset: 0, 0 + index: -1 diff --git a/examples/stretchyman/export/stretchyman.json b/examples/stretchyman/export/stretchyman.json new file mode 100644 index 000000000..0d455933f --- /dev/null +++ b/examples/stretchyman/export/stretchyman.json @@ -0,0 +1,762 @@ +{ +"skeleton": { "hash": "b16y3TbyxayN/EF3H+dzWk5RuTI", "spine": "3.4.00", "width": 264.48, "height": 570.1, "images": "./images/" }, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "x": 28.61, "y": 289.9 }, + { "name": "spine 1", "parent": "hip", "length": 34.66, "rotation": 86.68, "x": -4.48, "y": 12.66 }, + { "name": "spine 2", "parent": "spine 1", "length": 41.41, "rotation": 16.47, "x": 34.66 }, + { "name": "spine 3", "parent": "spine 2", "length": 34.44, "rotation": 16.17, "x": 41.41 }, + { "name": "spine 4", "parent": "spine 3", "length": 37.53, "rotation": -13.63, "x": 34.44 }, + { "name": "back arm 1", "parent": "spine 4", "length": 32.43, "rotation": -154.35, "x": 15.99, "y": -4.58, "inheritScale": false }, + { "name": "back arm 2", "parent": "back arm 1", "length": 34.16, "rotation": 3.1, "x": 31.88, "y": 0.02 }, + { "name": "back arm 3", "parent": "back arm 2", "length": 31.26, "rotation": 9.59, "x": 34.16 }, + { "name": "back arm 4", "parent": "back arm 3", "length": 33.3, "rotation": 14.6, "x": 32.03, "y": 0.81 }, + { "name": "back arm 5", "parent": "back arm 4", "length": 37.41, "rotation": 11.3, "x": 33.81, "y": 0.02 }, + { + "name": "back foot 1", + "parent": "hip", + "length": 33.23, + "rotation": -6.55, + "x": -34, + "y": -279.68, + "inheritRotation": false, + "inheritScale": false + }, + { "name": "back foot 2", "parent": "back foot 1", "length": 32.28, "rotation": 4.34, "x": 33.23, "inheritScale": false }, + { "name": "back foot 3", "parent": "back foot 2", "length": 15.87, "rotation": 10.06, "x": 32.28, "inheritScale": false }, + { "name": "back leg 1", "parent": "hip", "length": 41, "rotation": -83.65, "x": 10.4, "y": 1.04, "color": "abe323ff" }, + { "name": "back leg 2", "parent": "back leg 1", "length": 41, "rotation": -4.07, "x": 34.56, "color": "abe323ff" }, + { "name": "back leg 3", "parent": "back leg 1", "length": 41, "rotation": -5.24, "x": 81.78, "y": -2.29, "color": "abe323ff" }, + { "name": "back leg 4", "parent": "back leg 1", "length": 41, "rotation": -16.6, "x": 121.2, "y": -11.27, "color": "abe323ff" }, + { "name": "back leg 5", "parent": "back leg 1", "length": 41, "rotation": -32.35, "x": 160.15, "y": -24.85, "color": "abe323ff" }, + { "name": "back leg 6", "parent": "back leg 1", "length": 41, "rotation": -30.76, "x": 197.04, "y": -39.98, "color": "abe323ff" }, + { "name": "back leg 7", "parent": "back leg 1", "length": 41, "rotation": -30.63, "x": 233.18, "y": -57.32, "color": "abe323ff" }, + { "name": "back leg 8", "parent": "back leg 1", "length": 41, "rotation": -33.78, "x": 267.28, "y": -77.39, "color": "abe323ff" }, + { "name": "back leg IK 1", "parent": "hip", "length": 140.17, "rotation": -88.1, "x": 9.62, "y": -0.38 }, + { "name": "back leg IK 2", "parent": "back leg IK 1", "length": 148.96, "rotation": -21.32, "x": 140.17 }, + { "name": "back leg IK target", "parent": "root", "x": 46.15, "y": 8.68, "color": "ff3f00ff" }, + { "name": "belly", "parent": "spine 1", "x": 35.94, "y": -37.69 }, + { "name": "butt", "parent": "hip", "x": -32.67, "y": -1.87 }, + { "name": "front arm 1", "parent": "spine 4", "length": 38.33, "rotation": 118.58, "x": 27.12, "y": 4.89, "inheritScale": false }, + { "name": "front arm 2", "parent": "front arm 1", "length": 35.66, "rotation": -0.43, "x": 38.33 }, + { "name": "front arm 3", "parent": "front arm 2", "length": 32.65, "rotation": 14.45, "x": 35.66, "y": -0.01 }, + { "name": "front arm 4", "parent": "front arm 3", "length": 29.18, "rotation": 13.89, "x": 32.65 }, + { "name": "front arm 5", "parent": "front arm 4", "length": 46.32, "rotation": 16.09, "x": 29.18, "inheritScale": false }, + { + "name": "front foot 1", + "parent": "hip", + "length": 26.29, + "rotation": -10.97, + "x": -77.04, + "y": -285.03, + "inheritRotation": false, + "inheritScale": false + }, + { "name": "front foot 2", "parent": "front foot 1", "length": 29.11, "rotation": 9.6, "x": 26.29 }, + { "name": "front foot 3", "parent": "front foot 2", "length": 23.48, "rotation": 8.91, "x": 29.11 }, + { "name": "front leg 1", "parent": "hip", "length": 37.2, "rotation": -88.96, "x": -23.56, "y": -1.99, "color": "abe323ff" }, + { "name": "front leg 2", "parent": "front leg 1", "length": 37.2, "rotation": 3.45, "x": 33.74, "color": "abe323ff" }, + { "name": "front leg 3", "parent": "front leg 1", "length": 37.2, "rotation": -6.11, "x": 74.4, "y": -1.07, "color": "abe323ff" }, + { + "name": "front leg 4", + "parent": "front leg 1", + "length": 37.2, + "rotation": -10.01, + "x": 111.39, + "y": -5.27, + "color": "abe323ff" + }, + { + "name": "front leg 5", + "parent": "front leg 1", + "length": 37.2, + "rotation": -28.39, + "x": 147.76, + "y": -14.98, + "color": "abe323ff" + }, + { + "name": "front leg 6", + "parent": "front leg 1", + "length": 37.2, + "rotation": -24.33, + "x": 182.41, + "y": -27.57, + "color": "abe323ff" + }, + { + "name": "front leg 7", + "parent": "front leg 1", + "length": 37.2, + "rotation": -22.99, + "x": 216.43, + "y": -42.55, + "color": "abe323ff" + }, + { "name": "front leg 8", "parent": "front leg 1", "length": 37.2, "rotation": -31.8, "x": 248.6, "y": -61.02, "color": "abe323ff" }, + { "name": "front leg IK 1", "parent": "hip", "length": 140.66, "rotation": -89.23, "x": -23.98, "y": 1.88 }, + { "name": "front leg IK 2", "parent": "front leg IK 1", "length": 155.95, "rotation": -21.49, "x": 140.66, "y": 0.02 }, + { "name": "front leg IK target", "parent": "root", "x": -37.73, "y": 5.03, "color": "ff3f00ff" }, + { "name": "neck 1", "parent": "spine 4", "length": 13.45, "rotation": -30.66, "x": 38.96, "y": -0.83 }, + { "name": "neck 2", "parent": "neck 1", "length": 14.13, "rotation": -11.41, "x": 13.45 }, + { "name": "head", "parent": "neck 2", "length": 89.05, "rotation": 6.98, "x": 15.81, "y": 0.22, "inheritScale": false } +], +"slots": [ + { "name": "back arm", "bone": "root", "attachment": "back arm" }, + { "name": "back leg", "bone": "root", "attachment": "back leg" }, + { "name": "body", "bone": "root", "attachment": "body" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "front arm", "bone": "root", "attachment": "front arm" }, + { "name": "back leg path", "bone": "hip", "attachment": "back leg path" }, + { "name": "front leg path", "bone": "hip", "attachment": "front leg path" } +], +"ik": [ + { + "name": "back leg IK", + "bones": [ "back leg IK 1", "back leg IK 2" ], + "target": "back leg IK target", + "bendPositive": false + }, + { + "name": "front leg IK", + "bones": [ "front leg IK 1", "front leg IK 2" ], + "target": "front leg IK target", + "bendPositive": false + } +], +"transform": [ + { + "name": "back foot position", + "bones": [ "back foot 1" ], + "target": "back leg 8", + "rotation": 108.8, + "x": 41.2, + "y": -0.02, + "scaleX": 4.0E-4, + "scaleY": -3.0E-4, + "shearY": 0.1, + "rotateMix": 0, + "scaleMix": 0 + }, + { + "name": "front foot position", + "bones": [ "front foot 1" ], + "target": "front leg 8", + "rotation": 101.55, + "x": 38.92, + "y": -0.02, + "scaleX": 4.0E-4, + "scaleY": -2.0E-4, + "shearY": 0.1, + "rotateMix": 0, + "scaleMix": 0 + } +], +"path": [ + { + "name": "back leg path", + "bones": [ "back leg 1", "back leg 2", "back leg 3", "back leg 4", "back leg 5", "back leg 6", "back leg 7", "back leg 8" ], + "target": "back leg path", + "spacingMode": "percent", + "rotateMode": "chainScale", + "spacing": 0.125 + }, + { + "name": "front leg path", + "bones": [ "front leg 1", "front leg 2", "front leg 3", "front leg 4", "front leg 5", "front leg 6", "front leg 7", "front leg 8" ], + "target": "front leg path", + "spacingMode": "percent", + "rotateMode": "chainScale", + "spacing": 0.125 + } +], +"skins": { + "default": { + "back arm": { + "back arm": { + "type": "mesh", + "uvs": [ 0.74522, 0.00989, 0.64111, 0.05762, 0.56303, 0.1559, 0.42508, 0.25885, 0.28974, 0.359, 0.22988, 0.49565, 0.21166, 0.60796, 0.21166, 0.69782, 0.16481, 0.78673, 0.14138, 0.84757, 0.02426, 0.88501, 0.05289, 0.9187, 0.37823, 0.98796, 0.60467, 0.98235, 0.6307, 0.9056, 0.73481, 0.87752, 0.6359, 0.81762, 0.55262, 0.74181, 0.38084, 0.69875, 0.37823, 0.60796, 0.39905, 0.50875, 0.51358, 0.38521, 0.66193, 0.2888, 0.85453, 0.18397, 0.97686, 0.0754, 0.9144, 0.00989 ], + "triangles": [ 11, 9, 12, 9, 8, 12, 12, 8, 18, 13, 12, 14, 12, 18, 17, 18, 8, 7, 14, 12, 17, 11, 10, 9, 14, 16, 15, 14, 17, 16, 7, 19, 18, 7, 6, 19, 6, 5, 19, 19, 5, 20, 5, 4, 20, 20, 4, 21, 4, 3, 21, 21, 3, 22, 3, 2, 22, 22, 2, 23, 2, 1, 23, 23, 1, 24, 1, 0, 24, 0, 25, 24 ], + "vertices": [ 1, 6, -7.68, -11.48, 1, 1, 6, 4.08, -13.62, 1, 1, 6, 23.48, -9.35, 1, 1, 7, 13.44, -9.22999, 1, 2, 7, 35.2, -9.62, 0.50649, 8, -0.57, -9.64999, 0.4935, 1, 8, 26.03, -6.38, 1, 1, 9, 14.15, -6.11, 1, 2, 9, 31.53, -5.56, 0.66492, 10, -3.33, -5.03, 0.33507, 1, 10, 13.08, -11.25, 1, 1, 10, 24.41, -14.88, 1, 1, 10, 30.15, -24.51, 1, 1, 10, 36.93, -23.53, 1, 1, 10, 54.07, -2.33, 1, 1, 10, 55.73, 14.14, 1, 1, 10, 41.39, 18.46999, 1, 1, 10, 37.28, 26.87, 1, 1, 10, 24.65, 21.67, 1, 1, 10, 9.17, 18.1, 1, 2, 9, 31.33, 6.77, 0.4788, 10, -1.11, 7.11, 0.52119, 1, 9, 13.77, 6.04, 1, 2, 8, 24.98, 6.17, 0.89217, 9, -5.47, 6.96, 0.10782, 2, 7, 32.59999, 7.28, 0.59842, 8, -0.32, 7.44, 0.40157, 1, 7, 11.07, 8.84, 1, 1, 6, 17.89, 11.87, 1, 1, 6, -4.82, 9.45, 1, 1, 6, -13.68, -0.69, 1 ], + "hull": 26, + "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, 0, 50, 2, 48, 4, 46, 6, 44, 8, 42, 10, 40, 12, 38, 14, 36 ], + "width": 72, + "height": 202 + } + }, + "back leg": { + "back leg": { + "type": "mesh", + "uvs": [ 0.502, 0.01179, 0.36075, 0.06379, 0.40569, 0.15045, 0.44743, 0.23916, 0.47953, 0.3299, 0.51163, 0.42268, 0.52126, 0.50629, 0.48274, 0.58888, 0.41211, 0.66025, 0.3126, 0.74182, 0.21629, 0.81625, 0.1232, 0.89272, 0.00763, 0.97428, 0.29655, 0.98958, 0.47407, 0.99221, 0.64004, 0.99467, 0.80988, 0.9896, 0.91291, 0.98652, 1, 0.95797, 0.83329, 0.94681, 0.71066, 0.9386, 0.57122, 0.9203, 0.41532, 0.89985, 0.3447, 0.89272, 0.36885, 0.87177, 0.42816, 0.82032, 0.502, 0.74793, 0.58225, 0.66942, 0.6593, 0.59092, 0.72992, 0.50527, 0.76524, 0.42166, 0.78129, 0.3248, 0.78771, 0.23406, 0.78771, 0.13924, 0.7235, 0.03728, 0.60152, 0.00567, 0.82116, 0.96897, 0.67872, 0.96396, 0.52111, 0.95739, 0.35935, 0.94213, 0.19388, 0.92921, 0.25375, 0.88158, 0.32792, 0.81839 ], + "triangles": [ 36, 20, 19, 17, 19, 18, 16, 37, 36, 17, 16, 36, 17, 36, 19, 38, 22, 21, 37, 21, 20, 38, 21, 37, 37, 20, 36, 15, 38, 37, 14, 38, 15, 15, 37, 16, 39, 23, 22, 40, 23, 39, 39, 22, 38, 13, 40, 39, 12, 40, 13, 14, 39, 38, 13, 39, 14, 9, 8, 26, 25, 42, 9, 10, 9, 42, 26, 25, 9, 24, 42, 25, 41, 10, 42, 41, 42, 24, 11, 10, 41, 23, 41, 24, 40, 11, 41, 40, 41, 23, 12, 11, 40, 26, 8, 27, 6, 5, 29, 28, 6, 29, 7, 6, 28, 27, 7, 28, 8, 7, 27, 29, 5, 30, 31, 5, 4, 30, 5, 31, 32, 4, 3, 31, 4, 32, 34, 1, 0, 34, 0, 35, 2, 1, 34, 2, 34, 33, 3, 2, 33, 32, 3, 33 ], + "vertices": [ 1, 14, -19.79, -5.66, 1, 2, 14, -5.61, -22.28, 0.83363, 15, -41.06, -23.3, 0.16636, 2, 14, 22.31, -21.98, 0.65187, 15, -13.17, -21.88, 0.34812, 3, 14, 50.83, -22.1, 0.3172, 15, 15.33, -20.86, 0.43086, 16, -19.67, -21.08, 0.25193, 4, 14, 79.83999, -23.28, 0.10791, 15, 44.37, -20.87999, 0.35417, 16, 9.3, -19.19, 0.31919, 17, -25.21, -20.06, 0.21871, 4, 15, 74.05, -20.98, 0.16485, 16, 38.93, -17.34, 0.32776, 17, 4.09, -15.38, 0.2983, 18, -30.1, -17.15, 0.20907, 3, 16, 65.53, -17.61, 0.17522, 17, 30.6, -13.1, 0.39172, 18, -4.11, -11.42, 0.43304, 3, 17, 57.03, -15.71, 0.19717, 18, 22.42, -10.53, 0.5297, 19, -12.96, -9.8, 0.27311, 3, 18, 46.04, -13.46, 0.40991, 19, 10.83, -10.17, 0.34747, 20, -24.93, -10.51, 0.24261, 3, 18, 73.37999, -18.69, 0.19432, 19, 38.58, -12.41, 0.37176, 20, 2.89, -10.98, 0.4339, 3, 19, 64.06, -14.98, 0.16664, 20, 28.48, -11.94, 0.56755, 21, -7.52, -11.48, 0.26578, 3, 20, 54.57, -12.36, 0.52113, 21, 18.54999, -10.93, 0.36167, 11, -3.08, 24.95, 0.11717, 4, 20, 82.97, -14.35, 0.35144, 21, 47, -11.86, 0.29521, 11, -13.06, -1.67, 0.25118, 12, -46.29, 1.83, 0.10216, 1, 11, 16.36, -4.67, 1, 2, 11, 34.31, -4.36, 0.53486, 12, 0.74, -4.42999, 0.46513, 3, 11, 51.09, -4.08, 0.1461, 12, 17.49, -5.42, 0.54314, 13, -15.5, -2.75, 0.31075, 2, 12, 34.66999, -4.01, 0.40714, 13, 1.64, -4.36, 0.59285, 2, 12, 45.08, -3.15, 0.25726, 13, 12.05, -5.34, 0.74273, 2, 12, 53.98, 5.81, 0.25311, 13, 22.38, 1.93, 0.74688, 2, 12, 37.18999, 9.56, 0.4029, 13, 6.5, 8.56, 0.59709, 3, 11, 57.07, 14.16, 0.1335, 12, 24.83, 12.32, 0.54644, 13, -5.17999, 13.44, 0.32003, 4, 20, 47.09, 33.09999, 0.13131, 11, 42.64, 19.07, 0.26349, 12, 10.81, 18.31, 0.49745, 13, -17.93, 21.78, 0.10773, 4, 20, 46.45, 16.09, 0.21158, 21, 9.35999, 17.2, 0.10679, 11, 26.5, 24.56, 0.4495, 12, -4.85, 25, 0.2321, 3, 20, 46.8, 8.62, 0.4011, 21, 9.99, 9.75, 0.24543, 11, 19.24, 26.37, 0.35346, 3, 20, 39.7, 8.6, 0.5825, 21, 2.9, 9.47, 0.30791, 11, 21.25, 33.16999, 0.10958, 3, 19, 59.16, 5.88, 0.21954, 20, 22.27, 8.58, 0.57946, 21, -14.51, 8.79, 0.20099, 3, 18, 71.83, 0.47, 0.21583, 19, 34.96, 6.47, 0.32262, 20, -1.92, 7.62, 0.46154, 3, 18, 45.8, 3.95, 0.40553, 19, 8.7, 7.12, 0.38601, 20, -28.16, 6.61, 0.20844, 3, 17, 56.78, 2.13, 0.25409, 18, 19.83, 7.12, 0.53004, 19, -17.45, 7.46, 0.21584, 3, 16, 66.18, 3.45, 0.22413, 17, 29.22, 7.92, 0.34135, 18, -8.25, 9.24, 0.43451, 4, 15, 76.6, 4.5, 0.19364, 16, 39.78, 8.26, 0.28886, 17, 2.48, 10.18, 0.33579, 18, -35.05, 7.97, 0.1817, 4, 14, 82.87999, 7.08, 0.11658, 15, 46.17, 9.57, 0.35727, 16, 9.08, 11.32, 0.35745, 17, -28.35, 10.29, 0.16869, 3, 14, 54.45, 12.1, 0.35356, 15, 17.57, 13.46, 0.44494, 16, -19.70999, 13.31, 0.20148, 2, 14, 24.65, 16.69, 0.65438, 15, -12.39, 16.85, 0.34561, 2, 14, -8.38, 15.21, 0.8533, 15, -45.34, 14.04, 0.14669, 1, 14, -20.18, 4.56, 1, 2, 12, 35.88, 2.53, 0.40509, 13, 3.98, 1.86, 0.5949, 3, 11, 54.37, 5.91, 0.1392, 12, 21.51, 4.29, 0.54494, 13, -9.85, 6.11, 0.31584, 2, 11, 37.78, 7.63, 0.44938, 12, 5.1, 7.26, 0.55061, 3, 20, 65.37999, 20.69, 0.11857, 11, 20.59, 11.34, 0.75134, 12, -11.76, 12.27, 0.13007, 3, 20, 65.41, 1.81, 0.39679, 21, 24.3, 0.23, 0.28257, 11, 2.06, 14.97, 0.32062, 3, 20, 48, 0.07, 0.55395, 21, 6.93, -0.32, 0.33293, 11, 3.37, 30.47, 0.11311, 3, 19, 65.94999, -2.96, 0.19447, 20, 24.95, -1.57, 0.57382, 21, -15.99, -0.42, 0.2317 ], + "hull": 36, + "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, 34, 36, 44, 46, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 0, 70, 4, 66, 2, 68, 40, 42, 42, 44, 26, 28, 28, 30, 46, 48, 48, 50, 36, 38, 38, 40, 30, 32, 32, 34, 18, 52, 16, 54, 14, 56, 12, 58, 10, 60, 8, 62, 6, 64, 32, 72, 72, 38, 30, 74, 74, 40, 72, 74, 28, 76, 76, 42, 74, 76, 26, 78, 78, 44, 76, 78, 24, 80, 80, 46, 78, 80, 22, 82, 82, 48, 80, 82, 20, 84, 84, 50, 82, 84 ], + "width": 100, + "height": 318 + } + }, + "back leg path": { + "back leg path": { + "type": "path", + "lengths": [ 137.82, 291.73, 641.11 ], + "vertexCount": 9, + "vertices": [ 1, 22, -43.14, 0.61, 1, 1, 22, -1.30999, 0.43, 1, 1, 22, 63.07, -0.18, 1, 2, 22, 72.07, 13.65, 0.5, 23, -69.11, -16.07, 0.5, 2, 22, 135.74, 0.27, 0.5, 23, -3.96, -2.02, 0.5, 2, 22, 202.92, -15.13, 0.5, 23, 65, 14.09, 0.5, 1, 23, 71.08999, -2.03, 1, 1, 23, 149.06, -1.74, 1, 1, 22, 368.47, -1.81, 1 ] + } + }, + "body": { + "body": { + "type": "mesh", + "uvs": [ 0.35966, 0.01351, 0.26863, 0.04108, 0.26204, 0.0954, 0.34119, 0.14478, 0.39791, 0.19457, 0.40451, 0.24271, 0.38076, 0.27893, 0.35969, 0.3004, 0.34119, 0.31925, 0.34988, 0.34325, 0.35834, 0.36658, 0.36551, 0.40163, 0.37233, 0.43498, 0.38396, 0.4944, 0.3956, 0.5597, 0.39883, 0.59858, 0.40141, 0.62955, 0.40215, 0.65661, 0.34609, 0.71563, 0.27077, 0.78175, 0.22009, 0.82127, 0.17617, 0.85552, 0.13115, 0.88832, 0.08238, 0.92385, 0.00341, 0.97959, 0.18836, 0.99126, 0.32172, 0.99284, 0.46265, 0.9945, 0.61643, 0.98608, 0.71617, 0.97182, 0.6185, 0.9582, 0.48967, 0.95042, 0.39458, 0.94083, 0.27771, 0.92903, 0.23407, 0.9232, 0.26691, 0.89774, 0.3068, 0.8668, 0.34202, 0.83414, 0.38369, 0.7955, 0.45642, 0.72873, 0.52707, 0.66845, 0.56032, 0.63344, 0.57541, 0.60108, 0.59357, 0.56214, 0.61643, 0.49731, 0.63513, 0.43962, 0.64344, 0.40462, 0.7708, 0.39011, 0.84584, 0.37024, 0.90982, 0.35331, 0.9674, 0.31914, 0.97301, 0.28585, 0.96448, 0.23351, 0.8952, 0.16809, 0.79345, 0.12642, 0.75178, 0.10878, 0.71799, 0.09448, 0.66816, 0.07236, 0.61342, 0.04807, 0.47867, 0.0141, 0.49845, 0.38826, 0.66315, 0.34728, 0.67333, 0.30664, 0.8188, 0.29655, 0.8097, 0.24505, 0.72828, 0.17901, 0.68147, 0.13901, 0.59191, 0.0971, 0.3904, 0.09012, 0.53695, 0.14981, 0.57562, 0.19616, 0.64483, 0.25076, 0.79855, 0.33476, 0.6175, 0.97166, 0.4773, 0.97061, 0.23795, 0.95673, 0.15271, 0.92355, 0.14158, 0.94886, 0.23861, 0.86092, 0.51732, 0.30353, 0.50695, 0.34527, 0.50634, 0.43735, 0.50334, 0.49589, 0.51085, 0.32558, 0.50355, 0.41057, 0.19542, 0.8924, 0.36492, 0.96409 ], + "triangles": [ 2, 1, 68, 68, 1, 58, 58, 1, 59, 1, 0, 59, 69, 67, 66, 3, 68, 69, 69, 68, 67, 3, 2, 68, 66, 56, 55, 66, 67, 56, 67, 57, 56, 67, 58, 57, 67, 68, 58, 5, 70, 71, 71, 70, 65, 5, 4, 70, 70, 66, 65, 4, 69, 70, 70, 69, 66, 4, 3, 69, 65, 54, 53, 65, 66, 54, 66, 55, 54, 46, 61, 47, 46, 80, 61, 80, 83, 61, 61, 62, 72, 61, 83, 62, 80, 9, 83, 9, 8, 83, 83, 79, 62, 8, 7, 83, 83, 7, 79, 71, 6, 5, 7, 6, 79, 79, 6, 62, 6, 71, 62, 47, 72, 48, 47, 61, 72, 48, 72, 49, 49, 72, 50, 72, 63, 50, 72, 62, 63, 50, 63, 51, 62, 64, 63, 63, 52, 51, 63, 64, 52, 71, 65, 64, 64, 53, 52, 64, 65, 53, 62, 71, 64, 26, 86, 27, 27, 74, 28, 27, 86, 74, 28, 73, 29, 28, 74, 73, 73, 30, 29, 74, 31, 73, 73, 31, 30, 86, 32, 74, 74, 32, 31, 25, 75, 26, 26, 75, 86, 24, 77, 25, 25, 77, 75, 24, 23, 77, 75, 33, 86, 86, 33, 32, 75, 77, 33, 77, 34, 33, 77, 76, 34, 77, 23, 76, 23, 22, 76, 76, 85, 34, 76, 22, 85, 34, 85, 35, 85, 78, 35, 22, 21, 85, 35, 78, 36, 85, 21, 78, 37, 36, 20, 21, 20, 78, 36, 78, 20, 20, 19, 37, 37, 19, 38, 19, 18, 38, 38, 18, 39, 18, 17, 39, 39, 17, 40, 41, 40, 16, 40, 17, 16, 42, 41, 15, 41, 16, 15, 43, 42, 14, 42, 15, 14, 14, 82, 43, 43, 82, 44, 14, 13, 82, 82, 81, 44, 44, 81, 45, 82, 13, 81, 13, 12, 81, 46, 45, 84, 12, 84, 81, 45, 81, 84, 12, 11, 84, 11, 60, 84, 84, 60, 46, 60, 80, 46, 11, 10, 60, 60, 10, 80, 10, 9, 80 ], + "vertices": [ 1, 5, 30.85, 2.44, 1, 2, 4, 60.42, 12.41, 0.24858, 5, 22.32, 18.17, 0.75141, 2, 4, 39.47, 25.24, 0.44331, 5, -1.05999, 25.71, 0.55668, 3, 3, 48.02, 29.46, 0.3743, 4, 14.54, 26.45, 0.47619, 5, -25.57, 21.01, 0.1495, 3, 2, 50.36, 32.58, 0.11242, 3, 24.29, 26.79, 0.64611, 4, -8.99, 30.49, 0.24146, 3, 35, -45.21, -8.8, 0.10611, 2, 28.68, 30.39, 0.49532, 3, 2.88, 30.84, 0.39856, 3, 35, -28.91, -12.44, 0.25801, 2, 12.15, 32.79, 0.60893, 3, -12.28, 37.83, 0.13304, 3, 35, -18.5, -14.05, 0.28713, 2, 2.33999, 35.97, 0.51935, 26, -7.59, 18.95, 0.1935, 4, 35, -10.78, -18.35, 0.28478, 25, -42.03, 75.56, 0.10294, 2, -6.36, 37.31, 0.37493, 26, -10.2, 10.25, 0.23733, 3, 35, 0.92, -16.95, 0.34086, 2, -17.28, 35.45, 0.32139, 26, -8.2, -0.66, 0.33772, 4, 35, 10.64, -16.31, 0.3269, 36, -24.05, -14.89, 0.16082, 2, -27.57, 33.66, 0.14432, 26, -6.36, -11.04, 0.36794, 4, 35, 28.49, -15.62, 0.24236, 36, -9.54, -15.11, 0.27028, 37, -45.5, -19.11, 0.12131, 26, -3.64, -27.87, 0.36603, 4, 35, 41.59, -14.89, 0.2176, 36, 6.92, -15.34, 0.33285, 37, -26.85, -17.48, 0.20377, 26, -1.29999, -43.27, 0.24577, 3, 36, 33.82, -15.8, 0.47178, 37, 0, -15.85, 0.42626, 38, -31.79, -17.82, 0.10194, 3, 36, 63.38, -16.48, 0.2126, 37, 29.52, -14.21, 0.42737, 38, -2.42, -14.38, 0.36002, 3, 37, 49.78, -15.51, 0.30177, 38, 14.85, -13.08, 0.47126, 39, -21.14, -15.63, 0.22694, 3, 37, 61.09, -13.4, 0.15443, 38, 29.03, -11.64, 0.50848, 39, -3.26, -12.45, 0.33708, 2, 38, 41.23, -10.79, 0.28077, 39, 8.39999, -8.79, 0.71921, 2, 39, 36.23, -8.59, 0.56512, 40, -3.02, -8.83, 0.43487, 3, 39, 67.93, -10.06, 0.16322, 40, 28.68, -7.81, 0.53712, 41, -8.10999, -7.69, 0.29965, 3, 40, 47.76, -8.47, 0.402, 41, 10.97, -7.89, 0.4513, 42, -26.34, -6.21, 0.14668, 3, 40, 64.61, -8.06, 0.25016, 41, 27.8, -8.39999, 0.46039, 42, -12.76, -8.81, 0.28943, 4, 40, 79.12, -10.24, 0.11858, 41, 42.33, -8.03, 0.26981, 42, 4.53, -8.37, 0.48104, 32, -1.55, 35.59999, 0.13056, 2, 42, 20.84, -9.18999, 0.72799, 32, -5.37, 19.54999, 0.272, 1, 32, -11.5, -7.29, 1, 4, 42, 43.23, 16.27, 0.2746, 32, 15.1, -7.51, 0.48158, 33, -12.29, -5.54, 0.12942, 34, -41.75999, 0.94, 0.11439, 4, 42, 36.99, 33.93999, 0.18804, 32, 33.7, -4.57, 0.34252, 33, 6.53, -5.75, 0.18296, 34, -23.19, -2.18, 0.28646, 3, 32, 53.35, -1.58, 0.21646, 33, 26.4, -6.08, 0.26516, 34, -3.61, -5.59, 0.51836, 2, 33, 47.99, -1.76, 0.15752, 34, 18.37, -4.66, 0.84247, 1, 34, 33.16, -0.11, 1, 2, 33, 47.97, 10.84, 0.17387, 34, 20.31, 7.79, 0.82612, 4, 42, 9.83, 48.43, 0.17571, 32, 53.28, 18.69, 0.17038, 33, 29.73, 13.92, 0.136, 34, 2.76, 13.66, 0.5179, 4, 42, 11.45, 34.57, 0.26313, 32, 39.25999, 20.54999, 0.23037, 33, 16.20999, 18.09, 0.15679, 34, -9.93999, 19.87999, 0.3497, 4, 42, 12.4, 17.12999, 0.37056, 32, 22.1, 22.5, 0.30409, 33, -0.37, 22.87, 0.18235, 34, -25.59, 27.17, 0.14297, 3, 42, 12.34, 10.43, 0.44639, 32, 15.56, 23.91, 0.2976, 33, -6.59, 25.36, 0.256, 5, 40, 75.94999, 9.06, 0.10562, 41, 38.15, 11.08, 0.25494, 42, 1.65, 10.97, 0.33578, 32, 17.98, 34.75, 0.16322, 33, -2.38, 35.64, 0.14041, 3, 40, 62.61, 10.94, 0.26063, 41, 26.04, 10.62, 0.49791, 42, -15.14, 10.14, 0.24144, 3, 40, 47.27, 9.67, 0.40348, 41, 9.53, 10.18999, 0.4787, 42, -26.59, 11.93, 0.11781, 3, 39, 69.23, 6.97, 0.16043, 40, 28.63, 9.26, 0.53934, 41, -7.94, 9.38, 0.30019, 2, 39, 37.36, 8, 0.57647, 40, -3.21, 7.8, 0.42351, 2, 38, 45.48, 7.1, 0.29349, 39, 8.38, 9.60999, 0.7065, 3, 37, 62.84, 9, 0.15445, 38, 29.4, 10.82, 0.49324, 39, -8.12, 9.49, 0.35229, 3, 37, 52.14, 9.27, 0.30575, 38, 12.84, 11.73, 0.46742, 39, -26.12, 8.77, 0.22682, 3, 36, 66.66, 11.26, 0.21798, 37, 30.61, 13.69, 0.42844, 38, -3.05, 13.53, 0.35357, 3, 36, 37.7, 16.76, 0.48245, 37, 1.30999, 16.92, 0.41751, 38, -32.49, 14.97, 0.10002, 4, 35, 44.34, 22.11, 0.23459, 36, 11.91, 21.43, 0.43853, 37, -24.76, 19.56, 0.20679, 2, -58.28, -7.19, 0.12007, 4, 35, 28.54, 23.57, 0.31079, 36, -3.76, 23.83, 0.19157, 25, -76.76, 29.22, 0.2153, 2, -42.42, -7.45, 0.2823, 3, 35, 22.31, 41.64, 0.18196, 25, -69.83, 12.46, 0.43955, 2, -34.84, -25, 0.37848, 3, 35, 19.77, 51.42, 0.1392, 25, -59.84, 2.52, 0.47895, 2, -23.89, -35.16, 0.38184, 3, 35, 6.03, 61.53, 0.10543, 25, -52.7, -5.88, 0.51007, 2, -17.1, -43.61, 0.38449, 2, 25, -37.16, -13.13, 0.67426, 2, -1.22, -50.82, 0.32573, 1, 25, -22.09, -13.05, 1, 2, 25, 1.45, -10.49, 0.89018, 2, 37.39, -48.18, 0.10981, 3, 25, 30.4, 0.96, 0.43019, 2, 66.35, -36.72, 0.16237, 3, 19.96999, -44.2, 0.40743, 2, 3, 41.58, -34.52, 0.68164, 4, -9.43999, -33.21, 0.31834, 2, 3, 50.68, -30.61, 0.51066, 4, 0.38, -31.99, 0.48933, 3, 3, 58.06, -27.44, 0.26484, 4, 8.35, -31, 0.61474, 5, -18.04, -36.28, 0.12041, 3, 3, 69.4, -22.88, 0.17395, 4, 20.5, -29.77, 0.5644, 5, -6.52, -32.22, 0.26164, 2, 4, 33.86, -28.42, 0.29085, 5, 6.13, -27.76, 0.70914, 2, 4, 56.55, -19.37, 0.1738, 5, 26.05, -13.63, 0.82619, 5, 35, 20.79, 3.26, 0.38867, 36, -12.73, 4.03, 0.17697, 25, -69.83999, 50.18, 0.10105, 2, -36.22, 13.38, 0.1958, 26, 13.97, -19.24, 0.13748, 4, 35, 2.68, 26.81, 0.26409, 25, -50.86, 29.21, 0.2337, 2, -16.39, -8.72999, 0.34628, 26, 35.78, -0.48, 0.15592, 3, 35, -15.65, 28.57, 0.15678, 25, -33.53, 28.78, 0.29159, 2, 2.02, -9.1, 0.55161, 1, 25, -28.17, 8.37, 1, 1, 25, -5.01, 10.99, 1, 3, 25, 24.12, 24.17, 0.12051, 2, 60.06, -13.51, 0.21384, 3, 20.53, -20.16, 0.66563, 2, 3, 39.63, -17.84, 0.59512, 4, -6.67, -16.65, 0.40487, 3, 3, 60.95, -9.85999, 0.26251, 4, 16.02, -14.92, 0.55541, 5, -14.38, -18.84, 0.18206, 2, 4, 32.68, 8.3, 0.58729, 5, -3.66, 7.65, 0.4127, 2, 3, 39.52, 3.1, 0.47136, 4, -0.95, 3.49, 0.52863, 1, 3, 17.87999, 2.56, 1, 2, 2, 27.01, -3.63, 0.67245, 3, -8.35999, -1.30999, 0.32754, 3, 35, -2.63, 46, 0.10032, 25, -45.41, 10.26, 0.52611, 2, -9.64, -27.46, 0.37355, 2, 33, 47.98, 4.75, 0.16597, 34, 19.37, 1.77, 0.83402, 4, 42, 19.54999, 50.48, 0.12624, 32, 53.3, 9.5, 0.16908, 33, 28.21, 4.85, 0.24846, 34, -0.13, 4.94, 0.4562, 4, 42, 26.31, 16.82, 0.32786, 32, 18.95999, 9.25, 0.38307, 33, -5.68, 10.34, 0.15879, 34, -32.77, 15.61, 0.13026, 2, 42, 16.95999, -0.03, 0.66864, 32, 4.23, 21.71, 0.33135, 3, 42, 28.1, 2.85, 0.4826, 32, 4.91, 10.14, 0.31302, 33, -19.37999, 13.57, 0.20437, 3, 40, 63.21, -0.58, 0.21068, 41, 25.96, 0.78, 0.49386, 42, -11.01, 1.48, 0.29543, 3, 35, -14.83, 8.08, 0.24448, 25, -33.34, 51.23, 0.16324, 2, 2.58999, 13.53, 0.59226, 4, 35, 3.37, 4.96, 0.28616, 25, -51.81, 51.13, 0.16476, 2, -15.86, 13.44, 0.31891, 26, 13.85, -0.52, 0.23015, 4, 35, 46.08, 3.58, 0.24089, 36, 9.06, 3.09, 0.41151, 37, -28.46, 0.64, 0.21862, 26, 17.5, -43.07, 0.12896, 3, 36, 37.22, 1.25, 0.47744, 37, -0.08, 1.25, 0.42162, 38, -36.25, -5.25, 0.10092, 4, 35, -5.23, 6.29, 0.25594, 25, -43.1, 51.32, 0.15578, 2, -7.16, 13.62, 0.42092, 26, 14.16, 8.17, 0.16734, 4, 35, 33.03, 3.37, 0.36684, 36, -3.96, 3.6, 0.31093, 2, -45.32, 9.82, 0.17306, 26, 15.75, -30.14, 0.14914, 4, 40, 77.5, -1.16, 0.11479, 41, 40.23, 0.95, 0.26888, 42, 3.05, 0.72, 0.44972, 32, 7.66, 35.32, 0.16659, 4, 42, 22.72, 34.66999, 0.2209, 32, 37.18, 9.38, 0.26955, 33, 12.29, 7.43, 0.20636, 34, -15.46, 9.95, 0.30317 ], + "hull": 60, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 24, 26, 26, 28, 32, 34, 34, 36, 36, 38, 46, 48, 48, 50, 54, 56, 56, 58, 58, 60, 60, 62, 66, 68, 76, 78, 78, 80, 80, 82, 86, 88, 88, 90, 90, 92, 92, 94, 98, 100, 100, 102, 102, 104, 104, 106, 106, 108, 116, 118, 0, 118, 92, 120, 120, 20, 28, 86, 82, 32, 34, 80, 78, 36, 76, 38, 12, 124, 102, 126, 126, 124, 126, 128, 128, 130, 130, 132, 132, 134, 112, 134, 134, 136, 136, 4, 2, 116, 6, 138, 138, 132, 8, 140, 140, 130, 10, 142, 142, 128, 128, 104, 130, 106, 132, 108, 122, 92, 100, 144, 144, 122, 126, 144, 144, 94, 112, 114, 114, 116, 108, 110, 110, 112, 16, 18, 18, 20, 20, 22, 22, 24, 12, 14, 14, 16, 122, 124, 94, 96, 96, 98, 56, 146, 146, 60, 54, 148, 148, 62, 146, 148, 50, 150, 150, 66, 46, 152, 152, 68, 154, 152, 154, 48, 42, 156, 156, 72, 14, 158, 158, 124, 18, 160, 160, 122, 160, 120, 24, 162, 162, 90, 26, 164, 164, 88, 162, 164, 16, 166, 160, 166, 166, 158, 166, 124, 162, 168, 168, 120, 168, 22, 168, 92, 38, 40, 40, 42, 72, 74, 74, 76, 40, 74, 42, 44, 44, 46, 152, 170, 170, 156, 44, 170, 68, 70, 70, 72, 170, 70, 62, 64, 64, 66, 148, 172, 172, 150, 64, 172, 50, 52, 52, 54, 172, 52, 154, 66, 150, 154, 28, 30, 30, 32, 82, 84, 84, 86, 30, 84 ], + "width": 141, + "height": 452 + } + }, + "front arm": { + "front arm": { + "type": "mesh", + "uvs": [ 0.714, 0.00566, 0.67107, 0.08129, 0.60221, 0.15433, 0.53632, 0.21682, 0.44558, 0.28704, 0.34898, 0.35134, 0.29096, 0.3894, 0.25238, 0.41472, 0.22423, 0.4427, 0.19483, 0.47193, 0.15998, 0.50657, 0.09138, 0.59567, 0.05498, 0.70865, 0.02988, 0.81366, 0.01048, 0.94262, 0.10494, 0.98984, 0.25391, 0.9742, 0.31482, 0.88906, 0.28834, 0.82868, 0.13606, 0.74572, 0.14334, 0.71487, 0.18317, 0.62253, 0.25217, 0.5422, 0.29537, 0.50981, 0.33787, 0.47794, 0.38451, 0.45012, 0.43581, 0.41953, 0.5471, 0.36549, 0.68845, 0.29831, 0.74855, 0.35527, 0.85873, 0.38229, 0.99674, 0.37644, 0.95353, 0.33244, 0.91355, 0.29171, 0.87464, 0.25208, 0.83758, 0.21434, 0.78082, 0.12598, 0.78194, 0.06829, 0.63219, 0.23719, 0.66924, 0.15783, 0.75532, 0.20966, 0.7161, 0.11136 ], + "triangles": [ 30, 29, 33, 30, 32, 31, 40, 41, 36, 39, 41, 40, 40, 36, 35, 38, 39, 40, 28, 38, 40, 34, 28, 40, 34, 40, 35, 28, 34, 33, 29, 28, 33, 30, 33, 32, 41, 1, 0, 37, 41, 0, 36, 41, 37, 39, 1, 41, 39, 2, 1, 19, 12, 20, 13, 12, 19, 18, 15, 19, 16, 18, 17, 15, 13, 19, 15, 14, 13, 15, 18, 16, 21, 10, 22, 11, 10, 21, 20, 11, 21, 12, 11, 20, 9, 8, 23, 22, 9, 23, 10, 9, 22, 26, 5, 4, 25, 5, 26, 6, 5, 25, 24, 6, 25, 7, 6, 24, 23, 7, 24, 8, 7, 23, 38, 2, 39, 3, 2, 38, 27, 3, 38, 27, 38, 28, 4, 3, 27, 26, 4, 27 ], + "vertices": [ 1, 47, 21.66, 6.07, 1, 2, 46, 18.12999, 3.37, 0.16553, 47, 3.91, 4.23, 0.83446, 3, 27, -6.12, -15.23, 0.20965, 46, -0.04, 8.85, 0.53629, 5, 43.44, 6.81, 0.25404, 1, 27, 10.35999, -12.02, 1, 2, 27, 30.62, -10.09, 0.88821, 28, -7.63, -10.14999, 0.11178, 2, 27, 50.57, -9.68999, 0.30995, 28, 12.31, -9.60999, 0.69004, 2, 28, 24.21, -9.37, 0.86562, 29, -13.42, -6.2, 0.13437, 2, 28, 32.12, -9.21, 0.73143, 29, -5.72, -8.02, 0.26856, 2, 28, 39.34999, -7.58, 0.54007, 29, 1.68, -8.24, 0.45992, 2, 28, 46.9, -5.88, 0.29036, 29, 9.41, -8.47999, 0.70963, 2, 29, 18.58, -8.76, 0.66539, 30, -15.75, -5.12, 0.3346, 1, 30, 6.03, -8.58, 1, 2, 30, 31.42, -5.97, 0.39256, 31, 0.49, -6.36, 0.60743, 1, 31, 23.79, -9.31, 1, 1, 31, 52.37, -11.28, 1, 1, 31, 62.39, 2.71, 1, 1, 31, 58.29, 24.2, 1, 1, 31, 39.22, 32.48, 1, 1, 31, 25.99, 28.24, 1, 1, 31, 8.33, 5.63, 1, 2, 30, 28.81, 6.64, 0.48313, 31, 1.48, 6.48, 0.51686, 1, 30, 7.61, 5.9, 1, 3, 28, 51.66, 11.07, 0.10767, 29, 18.26, 6.74, 0.55899, 30, -12.34, 10, 0.33333, 2, 28, 42.18, 10.25, 0.31463, 29, 8.87, 8.31, 0.68536, 2, 28, 32.86, 9.43999, 0.59183, 29, -0.35, 9.85999, 0.40816, 2, 28, 23.72, 9.68999, 0.83035, 29, -9.13, 12.38, 0.16964, 2, 27, 52.08, 9.88, 0.2992, 28, 13.67, 9.97, 0.70079, 2, 27, 32.18, 12.59, 0.84686, 28, -6.23, 12.54, 0.15312, 1, 5, 9.42, 3.38, 1, 2, 5, -5.05, -1.59, 0.47199, 4, 29.16, -0.35, 0.528, 1, 4, 16.12999, -11.35, 1, 1, 4, 7.45, -29.43, 1, 2, 5, -8.22999, -31.56, 0.51928, 4, 19, -28.73, 0.4807, 1, 5, 1.99, -28.42, 1, 1, 5, 11.96, -25.36, 1, 1, 5, 21.44, -22.45, 1, 3, 46, 12.69, -14.54, 0.25481, 47, 2.13, -14.4, 0.32231, 5, 42.47, -19.81, 0.42286, 1, 47, 13.63, -8.89, 1, 1, 27, 3.55, 0.9, 1, 2, 46, 1.71, -0.73, 0.5001, 5, 40.06, -2.33, 0.49989, 1, 5, 25.66, -11.24, 1, 3, 46, 13.39, -4.64, 0.33234, 47, 0.86, -4.56, 0.48165, 5, 48.11, -11.65, 0.186 ], + "hull": 38, + "edges": [ 0, 2, 8, 10, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 70, 72, 72, 74, 0, 74, 56, 76, 6, 8, 76, 6, 4, 6, 4, 78, 78, 80, 80, 70, 2, 82, 82, 72, 82, 78, 78, 76, 2, 4, 56, 80, 56, 66, 62, 64, 64, 66, 66, 68, 68, 70, 44, 46, 46, 48, 18, 20, 46, 18, 10, 12, 12, 14, 48, 50, 50, 52, 12, 50, 14, 16, 16, 18 ], + "width": 145, + "height": 221 + } + }, + "front leg path": { + "front leg path": { + "type": "path", + "lengths": [ 140.43, 297.34, 652.04 ], + "vertexCount": 9, + "vertices": [ 1, 43, -40.7, -0.41, 1, 1, 43, 1.48, -0.27, 1, 1, 43, 75.42, 0.33, 1, 2, 43, 82.92, 8.49, 0.5, 44, -58.75, -8.53, 0.5, 2, 43, 141.34, 0.52, 0.5, 44, 0.45, 0.71, 0.5, 2, 43, 208.26, -14.83, 0.5, 44, 68.83, 18.53, 0.5, 1, 44, 73.81, 1.41, 1, 1, 44, 156.57, 0.98, 1, 1, 43, 380.59, 0.76, 1 ] + } + }, + "head": { + "head": { + "type": "mesh", + "uvs": [ 0.49583, 0.01984, 0.3073, 0.05802, 0.14319, 0.17024, 0.0279, 0.36227, 0.04553, 0.57745, 0.16625, 0.73247, 0.18795, 0.84353, 0.30324, 0.96963, 0.42124, 0.91063, 0.58535, 0.94649, 0.76303, 0.93261, 0.8694, 0.78599, 0.96783, 0.65033, 0.93351, 0.55575, 0.91494, 0.50457, 0.93281, 0.4436, 0.96241, 0.34261, 0.84983, 0.16792, 0.70199, 0.06496, 0.71827, 0.40045, 0.55822, 0.46524, 0.67191, 0.56924, 0.61248, 0.74982, 0.29238, 0.552, 0.68707, 0.30096, 0.49719, 0.316, 0.38868, 0.29286, 0.30595, 0.24312, 0.32494, 0.40508, 0.4036, 0.55663, 0.63282, 0.6862, 0.75489, 0.67579, 0.72156, 0.43445, 0.60178, 0.47123, 0.67975, 0.53995, 0.86841, 0.4929 ], + "triangles": [ 7, 6, 8, 10, 9, 22, 9, 8, 22, 10, 22, 11, 22, 8, 23, 23, 8, 5, 8, 6, 5, 11, 22, 31, 22, 30, 31, 11, 31, 12, 23, 29, 22, 22, 29, 30, 5, 4, 23, 29, 20, 30, 30, 21, 31, 30, 20, 21, 31, 13, 12, 31, 14, 13, 31, 21, 14, 4, 3, 23, 21, 35, 14, 21, 34, 35, 20, 33, 21, 21, 33, 34, 23, 28, 29, 20, 29, 28, 20, 28, 25, 25, 28, 26, 23, 3, 28, 27, 3, 2, 3, 27, 28, 34, 32, 35, 34, 33, 32, 14, 35, 15, 15, 35, 19, 32, 33, 19, 33, 20, 19, 20, 24, 19, 20, 25, 24, 16, 15, 19, 19, 35, 32, 28, 27, 26, 19, 24, 16, 24, 17, 16, 18, 24, 25, 25, 26, 0, 24, 18, 17, 18, 25, 0, 27, 1, 26, 26, 1, 0, 27, 2, 1 ], + "vertices": [ 1, 48, 90.83, 8.14, 1, 1, 48, 81.69999, 22.33, 1, 1, 48, 66.16, 32, 1, 1, 48, 44.34, 34.97, 1, 1, 48, 24.14, 26.24, 1, 1, 48, 12.71, 11.09, 1, 1, 47, 17.77, 6.06, 1, 1, 47, 10.7, -8.62, 1, 1, 48, 2.94, -15.85, 1, 1, 48, 4.23, -30.53, 1, 1, 48, 10.7, -44.64, 1, 1, 48, 27.89, -48.41, 1, 1, 48, 43.79, -51.9, 1, 1, 48, 51.91, -45.89, 1, 1, 48, 56.29, -42.63, 1, 1, 48, 62.68, -42.04, 1, 1, 48, 73.26, -41.05, 1, 1, 48, 86.81, -25.91, 1, 1, 48, 92.45, -10.29, 1, 1, 48, 60.63, -22.97, 1, 1, 48, 49.77, -12.03, 1, 1, 48, 43.04, -24.87, 1, 1, 48, 23.94, -26.1, 1, 1, 48, 33.73, 6.84, 1, 1, 48, 69.3, -17.04999, 1, 1, 48, 62.36, -1.97, 1, 1, 48, 61.45, 7.7, 1, 1, 48, 63.85, 16.18, 1, 1, 48, 48.81, 9.14, 1, 1, 48, 36.5, -2.43, 1, 1, 48, 30.66, -25.62, 1, 1, 48, 35.18999, -35.29, 1, 1, 48, 57.45, -24.39, 1, 1, 48, 50.45, -15.81, 1, 1, 48, 46.09, -24.53, 1, 1, 48, 56.07, -38.41999, 1 ], + "hull": 19, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 32, 34, 34, 36, 0, 36, 28, 30, 30, 32, 30, 38, 38, 40, 40, 42, 42, 28, 20, 22, 22, 24, 22, 44, 44, 46, 32, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 24, 26, 26, 28, 62, 26, 64, 66, 66, 40, 66, 68, 68, 70, 70, 64 ], + "width": 87, + "height": 102 + } + } + } +}, +"animations": { + "sneak": { + "bones": { + "hip": { + "rotate": [ + { "time": 0, "angle": 30.27, "curve": "stepped" }, + { "time": 0.1666, "angle": 30.27 }, + { "time": 0.3333, "angle": -31.29 }, + { "time": 0.5333, "angle": -44.75 }, + { "time": 0.7333, "angle": -25.49 }, + { "time": 0.9, "angle": -9.45 }, + { "time": 1.0666, "angle": 30.27 }, + { "time": 1.2333, "angle": -10.1 }, + { "time": 1.6333, "angle": -41.47 }, + { "time": 1.8, "angle": 30.27 } + ], + "translate": [ + { "time": 0, "x": -57.43, "y": -40.92 }, + { + "time": 0.1666, + "x": -16.15, + "y": -96.56, + "curve": [ 0.245, 0, 0.637, 0.55 ] + }, + { + "time": 0.2666, + "x": 85.99, + "y": -143.07, + "curve": [ 0.381, 0.54, 0.742, 1 ] + }, + { "time": 0.3333, "x": 145.44, "y": -159.27 }, + { "time": 0.4333, "x": 344.29, "y": -134.94 }, + { "time": 0.5333, "x": 543.13, "y": -81.1 }, + { "time": 0.7333, "x": 569.68, "y": -62.13 }, + { "time": 0.9, "x": 591.8, "y": -46.32 }, + { + "time": 1.0666, + "x": 653.14, + "y": -96.6, + "curve": [ 0.381, 0.54, 0.742, 1 ] + }, + { "time": 1.1333, "x": 710.16, "y": -143.1 }, + { "time": 1.2333, "x": 795.7, "y": -159.3 }, + { "time": 1.3333, "x": 986.94, "y": -153.35 }, + { "time": 1.4333, "x": 1178.19, "y": -111.88 }, + { "time": 1.6333, "x": 1195.1, "y": -62.1 }, + { "time": 1.8, "x": 1246.53, "y": -40.92 } + ] + }, + "front leg IK target": { + "translate": [ + { "time": 0, "x": -50.42, "y": 44.61 }, + { "time": 0.1666, "x": -50.42, "y": 46.55 }, + { "time": 0.3333, "x": -50.42, "y": 47 }, + { + "time": 0.5333, + "x": -26.42, + "y": 50.21, + "curve": [ 0.532, 0, 0.75, 1 ] + }, + { "time": 0.7333, "x": 566.43, "y": 107.27 }, + { "time": 0.9, "x": 1215.89, "y": 68.21 }, + { "time": 1.0666, "x": 1235.47, "y": 15.8 }, + { "time": 1.2333, "x": 1235.47, "y": 0.97 }, + { "time": 1.5666, "x": 1230.15, "y": 3.76 }, + { "time": 1.7, "x": 1244, "y": 26.76 }, + { "time": 1.8, "x": 1253.53, "y": 44.61 } + ] + }, + "front foot 1": { + "rotate": [ + { "time": 0, "angle": -48.38, "curve": "stepped" }, + { "time": 0.3333, "angle": -48.38 }, + { "time": 0.7, "angle": -121.34 }, + { "time": 0.8, "angle": -80.19 }, + { "time": 0.9, "angle": 45.59 }, + { "time": 1.0666, "angle": 2.1 }, + { "time": 1.2333, "angle": 4.65 }, + { "time": 1.5666, "angle": 5.66 }, + { "time": 1.8, "angle": -48.38 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.6, "x": 1, "y": 1 }, + { "time": 0.6333, "x": 0.954, "y": 1 }, + { "time": 0.7666, "x": 0.82, "y": 1 }, + { "time": 0.9, "x": 1, "y": 1 }, + { "time": 1.0666, "x": 0.851, "y": 1 }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "front foot 3": { + "rotate": [ + { "time": 0, "angle": 36.32 }, + { "time": 0.3333, "angle": 28.46 }, + { "time": 0.5, "angle": 34.84 }, + { "time": 0.5333, "angle": 30.32 }, + { "time": 0.5666, "angle": 61.67 }, + { "time": 0.7, "angle": -19.47 }, + { "time": 0.9, "angle": -0.12 }, + { "time": 1.0666, "angle": -7.21 }, + { "time": 1.2333, "angle": -11.34 }, + { "time": 1.5666, "angle": -11.23 }, + { "time": 1.8, "angle": 36.32 } + ] + }, + "back leg IK target": { + "translate": [ + { "time": 0, "x": 516.79, "y": 86.68 }, + { "time": 0.1666, "x": 523.71, "y": 16.63 }, + { "time": 0.3333, "x": 523.03, "y": -5, "curve": "stepped" }, + { "time": 0.7, "x": 523.03, "y": -5 }, + { "time": 0.9, "x": 551.31, "y": 41.86 }, + { "time": 1.0666, "x": 554.24, "y": 44.45 }, + { "time": 1.1333, "x": 555.44, "y": 44.74 }, + { "time": 1.2, "x": 556.6, "y": 46.19, "curve": "stepped" }, + { "time": 1.4333, "x": 556.6, "y": 46.19 }, + { "time": 1.5, "x": 746.96, "y": 74.82 }, + { "time": 1.6333, "x": 1127.68, "y": 103.61 }, + { "time": 1.8, "x": 1820.75, "y": 86.68 } + ] + }, + "back foot 1": { + "rotate": [ + { "time": 0, "angle": 74.17 }, + { "time": 0.1666, "angle": -17.01 }, + { "time": 0.3333, "angle": 5.05 }, + { "time": 0.7, "angle": 3.74 }, + { "time": 0.9, "angle": -65.56 }, + { "time": 1.6333, "angle": -92.52 }, + { "time": 1.8, "angle": 74.17 } + ], + "scale": [ + { "time": 0, "x": 0.824, "y": 1 }, + { "time": 0.1666, "x": 0.754, "y": 1 }, + { "time": 0.3333, "x": 0.589, "y": 1 }, + { "time": 0.5666, "x": 0.909, "y": 1 }, + { "time": 0.9, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.4, "x": 1, "y": 1 }, + { "time": 1.5, "x": 0.844, "y": 1 }, + { "time": 1.8, "x": 0.824, "y": 1 } + ] + }, + "back foot 2": { + "rotate": [ + { "time": 0, "angle": 8.13 }, + { "time": 0.1666, "angle": -3.21 }, + { "time": 0.7, "angle": -1.14 }, + { "time": 0.9, "angle": 34.12 }, + { "time": 1.4333, "angle": 46.68 }, + { "time": 1.5333, "angle": -15.6 }, + { "time": 1.6333, "angle": -11.91 }, + { "time": 1.8, "angle": 8.13 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1666, "x": 0.835, "y": 1 }, + { "time": 0.3333, "x": 1, "y": 1 } + ] + }, + "front arm 1": { + "rotate": [ + { "time": 0, "angle": -39.71 }, + { "time": 0.1666, "angle": -37.29 }, + { "time": 0.3333, "angle": 30.66 }, + { + "time": 0.9, + "angle": -53.28, + "curve": [ 0.708, 0.01, 0.75, 1 ] + }, + { "time": 1.2333, "angle": 36 }, + { "time": 1.8, "angle": -39.71 } + ] + }, + "neck 1": { + "rotate": [ + { "time": 0, "angle": 21.95, "curve": "stepped" }, + { "time": 0.1666, "angle": 21.95 }, + { "time": 0.2666, "angle": 30.6 }, + { "time": 0.3333, "angle": 36.37 }, + { "time": 0.7333, "angle": 33.6 }, + { "time": 1.1666, "angle": 23.95 }, + { "time": 1.2333, "angle": 36.37 }, + { "time": 1.6333, "angle": 41.16 }, + { "time": 1.8, "angle": 21.95 } + ] + }, + "neck 2": { + "rotate": [ + { "time": 0, "angle": -22.93 }, + { "time": 0.1666, "angle": -23.95 }, + { "time": 0.2666, "angle": 8.84 }, + { "time": 0.3333, "angle": 30.71 }, + { "time": 0.7333, "angle": -3.36 }, + { "time": 0.9, "angle": -17.57 }, + { "time": 1.1666, "angle": 2.19 }, + { "time": 1.2333, "angle": 15.25 }, + { "time": 1.6333, "angle": 4.41 }, + { "time": 1.8, "angle": -22.93 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -22.93 }, + { "time": 0.1666, "angle": -13.03 }, + { "time": 0.2666, "angle": 2.64 }, + { "time": 0.3333, "angle": 13.1 }, + { "time": 0.5, "angle": 13.1 }, + { "time": 0.7333, "angle": -18.9 }, + { "time": 0.9, "angle": -41.77 }, + { "time": 1.1666, "angle": -4 }, + { "time": 1.2333, "angle": -2.35 }, + { "time": 1.6333, "angle": -22.89 }, + { "time": 1.8, "angle": -22.93 } + ] + }, + "back arm 1": { + "rotate": [ + { "time": 0, "angle": -17.23 }, + { "time": 0.1666, "angle": -18.65 }, + { "time": 0.3333, "angle": 324.98 }, + { "time": 0.5666, "angle": -6.41 }, + { "time": 0.9, "angle": -14.83 }, + { "time": 1.0666, "angle": -16.9 }, + { "time": 1.2333, "angle": 1.49 }, + { "time": 1.4, "angle": 2.56 }, + { "time": 1.8, "angle": -17.23 } + ], + "translate": [ + { "time": 0, "x": -14.25, "y": -6.6 } + ] + }, + "back leg IK 1": { + "scale": [ + { "time": 0, "x": 2.186, "y": 1 }, + { "time": 0.1666, "x": 2.228, "y": 1 }, + { "time": 0.3333, "x": 1.532, "y": 1 }, + { "time": 0.4333, "x": 0.946, "y": 1 }, + { "time": 0.5333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 }, + { "time": 1.1333, "x": 0.892, "y": 1 }, + { "time": 1.2333, "x": 0.956, "y": 1 }, + { "time": 1.4333, "x": 2.315, "y": 1 }, + { "time": 1.6333, "x": 0.774, "y": 1 }, + { "time": 1.8, "x": 2.186, "y": 1 } + ] + }, + "front leg 1": { + "scale": [ + { "time": 0, "x": 1, "y": 1.117 } + ] + }, + "back leg 1": { + "scale": [ + { "time": 0, "x": 1, "y": 1.038 } + ] + }, + "front leg IK 1": { + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.2666, "x": 0.858, "y": 1 }, + { "time": 0.3333, "x": 0.972, "y": 1 }, + { + "time": 0.5333, + "x": 2.356, + "y": 1, + "curve": [ 0.532, 0, 0.75, 1 ] + }, + { "time": 0.7, "x": 1, "y": 1 }, + { "time": 0.9, "x": 2.248, "y": 1 }, + { "time": 1.0666, "x": 2.002, "y": 1 }, + { "time": 1.2333, "x": 1.495, "y": 1 }, + { + "time": 1.3, + "x": 1.047, + "y": 1, + "curve": [ 0.339, 0.58, 0.764, 1 ] + }, + { "time": 1.4333, "x": 0.779, "y": 0.762 }, + { "time": 1.8, "x": 1, "y": 1 } + ] + }, + "front leg IK 2": { + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front arm 3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 17.37 }, + { "time": 0.3333, "angle": 31.94 }, + { + "time": 0.9, + "angle": 4.76, + "curve": [ 0.708, 0.01, 0.75, 1 ] + }, + { "time": 1.2333, "angle": 39.96 }, + { "time": 1.8, "angle": 0 } + ] + }, + "spine 2": { + "rotate": [ + { "time": 0, "angle": -3.49 }, + { "time": 0.2666, "angle": -11.57 }, + { "time": 0.3333, "angle": -9.02 }, + { "time": 0.5, "angle": -2.65 }, + { "time": 0.7333, "angle": -5.78 }, + { "time": 1.1666, "angle": -11.57 }, + { "time": 1.2333, "angle": -6.69 }, + { "time": 1.6333, "angle": -2.5 }, + { "time": 1.8, "angle": -3.49 } + ] + }, + "spine 3": { + "rotate": [ + { "time": 0, "angle": -20.41 }, + { "time": 0.2666, "angle": -11.57 }, + { "time": 0.3333, "angle": -9.02 }, + { "time": 0.5, "angle": -2.65 }, + { "time": 0.7333, "angle": -10.53 }, + { "time": 0.9, "angle": -16.16 }, + { "time": 1.1666, "angle": -11.57 }, + { "time": 1.2333, "angle": -9.02 }, + { "time": 1.6333, "angle": -7.26 }, + { "time": 1.8, "angle": -20.41 } + ] + }, + "back arm 3": { + "rotate": [ + { "time": 0, "angle": 26.23 }, + { "time": 0.1666, "angle": 53.14 }, + { "time": 0.3333, "angle": 116.25 }, + { "time": 0.5666, "angle": 35.72 }, + { "time": 0.9, "angle": 39.32 }, + { "time": 1.0666, "angle": 41.19 }, + { "time": 1.2333, "angle": 78.09 }, + { "time": 1.4, "angle": 36.16 }, + { "time": 1.8, "angle": 26.23 } + ] + }, + "back foot 3": { + "rotate": [ + { "time": 0, "angle": 11.35 }, + { "time": 0.7, "angle": -4.24 }, + { "time": 0.9, "angle": 25.48, "curve": "stepped" }, + { "time": 1.4333, "angle": 25.48 }, + { "time": 1.5333, "angle": -30.51 }, + { "time": 1.6333, "angle": -20.54 }, + { "time": 1.8, "angle": 11.35 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1666, "x": 0.835, "y": 1 }, + { "time": 0.3333, "x": 1, "y": 1 } + ] + }, + "spine 1": { + "rotate": [ + { "time": 0, "angle": 10.81 }, + { "time": 0.2666, "angle": -28.69 }, + { "time": 0.3333, "angle": -24.32 }, + { "time": 0.5, "angle": -13.37 }, + { "time": 0.7333, "angle": 21.61 }, + { "time": 0.9, "angle": 46.61 }, + { "time": 1.1666, "angle": -28.69 }, + { "time": 1.2333, "angle": -43.33 }, + { "time": 1.6333, "angle": 24.89 }, + { "time": 1.8, "angle": 10.81 } + ] + }, + "spine 4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2666, "angle": -2.8 }, + { "time": 0.3333, "angle": -0.82 }, + { "time": 0.5, "angle": 4.13 }, + { "time": 0.7333, "angle": -3.74 }, + { "time": 0.9, "angle": -9.37 }, + { "time": 1.1666, "angle": -9.02 }, + { "time": 1.2333, "angle": -0.82 }, + { "time": 1.6333, "angle": 3.81 }, + { "time": 1.8, "angle": 0 } + ] + }, + "front foot 2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2666, "angle": -1.24 }, + { "time": 0.3333, "angle": -0.2 }, + { "time": 0.5, "angle": 22.72 }, + { "time": 0.5333, "angle": 26.87 }, + { "time": 0.7, "angle": -39.25 }, + { "time": 0.9, "angle": 11.26 }, + { "time": 1.0666, "angle": -18.17 }, + { "time": 1.2333, "angle": -2.64 }, + { "time": 1.5666, "angle": -5.84 }, + { "time": 1.8, "angle": 0 } + ] + }, + "belly": { + "translate": [ + { "time": 0, "x": 3.65, "y": -3.77 }, + { "time": 0.2666, "x": 13.82, "y": -3.82 }, + { "time": 0.6333, "x": -4.11, "y": -3.89 }, + { "time": 0.7666, "x": 10.21, "y": -2.91 }, + { "time": 0.8666, "x": 10.3, "y": -7.38 }, + { "time": 1.1, "x": -0.44, "y": -1.45 }, + { "time": 1.2333, "x": 12.37, "y": 2.32 }, + { "time": 1.3666, "x": 11.51, "y": 5.52 }, + { "time": 1.8, "x": 0, "y": 0 } + ] + }, + "butt": { + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.7666, "x": 9.88, "y": -25.41 }, + { "time": 0.8333, "x": 15.89, "y": -41.88 }, + { "time": 1.2333, "x": -12.49, "y": -32.99 }, + { "time": 1.8, "x": 0, "y": 0 } + ] + } + }, + "deform": { + "default": { + "back leg": { + "back leg": [ + { "time": 0.3 }, + { + "time": 0.3333, + "offset": 68, + "vertices": [ -1.72897, 2.75445, -1.52529, 2.94189, 0.0625, 3.6552, 0.01776, 3.65397, 0, 0, 0, 0, 0, 0, 0.0625, 3.6552, 0.01776, 3.65397, 0.90136, 3.54112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.98724, -1.57397, -0.03338, -2.08873, -0.0108, -2.08799, -0.51434, -2.02362, 0.98724, -1.57397, 0.87167, -1.68002, -0.03338, -2.08873, -0.0108, -2.08799 ] + }, + { "time": 0.4666, "curve": "stepped" }, + { "time": 1.3333 }, + { + "time": 1.4333, + "offset": 110, + "vertices": [ 2.52801, 0.00428, -0.03569, -4.90118, -3.71691, -3.19396, -4.88018, -0.43807, 5.17279, -0.0625, 5.1499, -0.47689, -0.07238, -10.06842, -7.6351, -6.56073, 6.64205, -0.09958, 6.61151, -0.62642, -0.09275, -12.93914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.01242, -1.65533, -1.25543, -1.0787, 0.86096, 0.02682, -0.01242, -1.65533, -1.25543, -1.0787 ] + }, + { "time": 1.5 } + ] + }, + "back leg path": { + "back leg path": [ + { "time": 1.4333 }, + { + "time": 1.5, + "vertices": [ 4.67718, -35.44354, 0, 0, -11.37146, 49.53738, -20.9989, -109.72336, 65.45837, -90.53627, -9.56652, -24.74755, 11.45202, -23.93551, -19.0719, 47.32281, -47.53955, 18.58409, 34.69244, -51.5341, 0, 0, 13.30163, -100.17206 ] + }, + { + "time": 1.5666, + "vertices": [ -0.9635, -22.43963, 0, 0, -13.80389, 27.61459, -41.00647, -55.1597, 7.62652, -96.25755, -24.12603, -24.11285, 7.19531, -37.8742, -31.47302, 7.7796, -12.34545, -3.32328, 26.55981, -38.73887, 0, 0, -13.62085, -280.84912 ] + }, + { "time": 1.6666 } + ] + }, + "body": { + "body": [ + { "time": 0 }, + { + "time": 0.3333, + "offset": 164, + "vertices": [ -0.01179, 0.02892, 0.00916, 0.0298, 0, 0, 1.17781, 0.89835, 1.48062, -0.04942, -6.68858, -1.30628, 4.38937, 4.03925, 4.59583, 3.27733, 5.6365, -0.11034, -4.92264, -0.8036, 4.54262, 1.06504, 3.29334, 0.58413, 2.94213, -1.40271, -4.28855, -0.56444, 5.07102, -0.21189, 2.9589, -0.75665, 1.83513, -2.22983, -4.31061, 0.62609, 6.11537, -0.87568, 3.79229, -1.67126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.17403, 0.22007, 0.27403, 0.06015 ] + }, + { + "time": 0.5333, + "offset": 164, + "vertices": [ -0.01886, 0.04627, 0.01467, 0.04768, 0, 0, 1.88449, 1.43737, 2.369, -0.07907, 1.46056, -1.33222, -0.75053, -3.73339, -2.82319, -2.55492, -3.80252, -0.19385, 2.81923, -1.5031, -0.33162, -6.7565, -4.28408, -5.23484, -6.6292, -1.34549, 3.83378, -1.12044, 0.51381, -8.79961, -4.81917, -7.38011, -8.40039, -2.66888, 3.83378, -1.12044, 0.51381, -8.79961, -4.81917, -7.38011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.27845, 0.35211, 0.43846, 0.09625 ] + }, + { + "time": 0.6333, + "offset": 170, + "vertices": [ -2.09907, 0.0496, -1.943, 1.46153, 1.74966, 0.25744, 0.37649, -3.44555, -2.34342, -2.73068, -3.66285, -0.53692, 0, 0, 0, 0, 0, 0, 0, 0, 1.91689, -0.56022, 0.2569, -4.3998, -2.40958, -3.69005, -4.2002, -1.33444, 1.91689, -0.56022, 0.2569, -4.3998, -2.40958, -3.69005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.66468, 1.2535, 0.05176, 1.41789 ] + }, + { "time": 0.7333 }, + { + "time": 0.7666, + "offset": 264, + "vertices": [ -2.27499, -1.60417, -2.23925, -1.6137, -2.2196, -1.74293, -1.80918, 2.86346, -1.11117, 2.36199, -1.14221, 2.359, 2.63101, 1.41101, 2.63215, 1.41741, -0.81469, 8.46568, 9.4562, 1.07873, 9.45622, 1.08001, -1.00012, 6.23983, 6.96737, 1.29986, 6.9674, 1.30218, -0.68823, 4.24005, 4.7344, 0.89532, 4.73448, 0.89593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.05484, 2.78092, 0.01666, 2.78222, 3.10775, -0.05572, 3.10798, -0.05426, -1.17971, 2.87597, -0.99005, 3.55937, 3.97198, 1.27319, 3.97207, 1.27423, -2.74237, 3.14401 ] + }, + { "time": 0.8333, "curve": "stepped" }, + { "time": 1.0666 }, + { + "time": 1.3333, + "offset": 142, + "vertices": [ 4.0227, -1.7984, 0.00683, -4.47886, -0.46118, -4.45536, -0.27441, -4.47041, 4.0227, -1.7984, 0.00683, -4.47886, -0.46118, -4.45536, -0.27441, -4.47041, 0.00683, -4.47886, -0.46118, -4.45536, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.0227, -1.7984, 0.00683, -4.47886, -0.46118, -4.45536, -0.27441, -4.47041, 4.0227, -1.7984, 0.00683, -4.47886, -0.46118, -4.45536, -0.27441, -4.47041, 4.0227, -1.7984, 0.00683, -4.47886, -0.46118, -4.45536, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.0227, -1.7984, 0.00683, -4.47886, -0.46118, -4.45536, -0.27441, -4.47041, 4.0227, -1.7984, 0.00683, -4.47886, -0.46118, -4.45536, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.0227, -1.7984, 0.00683, -4.47886, -0.46118, -4.45536, -0.27441, -4.47041 ] + }, + { "time": 1.4333 } + ] + }, + "front leg path": { + "front leg path": [ + { "time": 0.5666 }, + { + "time": 0.6333, + "vertices": [ 0.16365, -9.90768, 0, 0, -1.90419, 16.99049, 16.55858, -93.6721, 21.4361, -76.03695, -0.72391, -31.37989, 8.21379, -30.29725, -24.90732, 16.177, -28.83566, 5.62575, 82.90021, -63.82897, 0, 0, -39.50021, -13.99932 ] + }, + { + "time": 0.7, + "vertices": [ 0.20397, -12.34891, 0, 0, -2.37338, 21.17691, 20.63858, -116.75269, 26.71791, -94.77228, -0.90228, -39.11182, 10.23765, -37.76242, -31.04443, 20.16297, -35.9407, 7.01193, 22.68159, 24.72715, 0, 0, -292.39255, -342.79443 ] + }, + { "time": 0.8 } + ] + } + } + } + } +} +} \ No newline at end of file diff --git a/examples/stretchyman/export/stretchyman.png b/examples/stretchyman/export/stretchyman.png new file mode 100644 index 000000000..106a42a67 Binary files /dev/null and b/examples/stretchyman/export/stretchyman.png differ diff --git a/examples/stretchyman/export/stretchyman.skel b/examples/stretchyman/export/stretchyman.skel new file mode 100644 index 000000000..237a8f4f1 Binary files /dev/null and b/examples/stretchyman/export/stretchyman.skel differ diff --git a/examples/stretchyman/images/back arm.png b/examples/stretchyman/images/back arm.png new file mode 100644 index 000000000..567bd5fb3 Binary files /dev/null and b/examples/stretchyman/images/back arm.png differ diff --git a/examples/stretchyman/images/back leg.png b/examples/stretchyman/images/back leg.png new file mode 100644 index 000000000..48c7fe1b1 Binary files /dev/null and b/examples/stretchyman/images/back leg.png differ diff --git a/examples/stretchyman/images/body.png b/examples/stretchyman/images/body.png new file mode 100644 index 000000000..070c79ccc Binary files /dev/null and b/examples/stretchyman/images/body.png differ diff --git a/examples/stretchyman/images/front arm.png b/examples/stretchyman/images/front arm.png new file mode 100644 index 000000000..ebbcbc8b5 Binary files /dev/null and b/examples/stretchyman/images/front arm.png differ diff --git a/examples/stretchyman/images/head.png b/examples/stretchyman/images/head.png new file mode 100644 index 000000000..fa0d62ba7 Binary files /dev/null and b/examples/stretchyman/images/head.png differ diff --git a/examples/stretchyman/license.txt b/examples/stretchyman/license.txt new file mode 100644 index 000000000..d24b7af85 --- /dev/null +++ b/examples/stretchyman/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2016, Esoteric Software + +The images in this project may be redistributed as long as they are accompanied +by this license file. The images may not be used for commercial use of any +kind. + +The project file is released into the public domain. It may be used as the basis +for derivative work. \ No newline at end of file diff --git a/examples/stretchyman/stretchyman.spine b/examples/stretchyman/stretchyman.spine new file mode 100644 index 000000000..26e7055f3 Binary files /dev/null and b/examples/stretchyman/stretchyman.spine differ diff --git a/examples/tank/export/tank-pma.atlas b/examples/tank/export/tank-pma.atlas new file mode 100644 index 000000000..cdd26c556 --- /dev/null +++ b/examples/tank/export/tank-pma.atlas @@ -0,0 +1,125 @@ + +tank-pma.png +size: 1024,512 +format: RGBA8888 +filter: Linear,Linear +repeat: none +antenna + rotate: true + xy: 650, 346 + size: 11, 152 + orig: 11, 152 + offset: 0, 0 + index: -1 +cannon + rotate: false + xy: 2, 49 + size: 466, 29 + orig: 466, 29 + offset: 0, 0 + index: -1 +cannonConnector + rotate: true + xy: 843, 231 + size: 56, 68 + orig: 56, 68 + offset: 0, 0 + index: -1 +guntower + rotate: false + xy: 650, 359 + size: 365, 145 + orig: 365, 145 + offset: 0, 0 + index: -1 +machinegun + rotate: false + xy: 2, 18 + size: 166, 29 + orig: 166, 29 + offset: 0, 0 + index: -1 +machinegun-mount + rotate: true + xy: 647, 193 + size: 36, 48 + orig: 36, 48 + offset: 0, 0 + index: -1 +rock + rotate: false + xy: 470, 50 + size: 126, 28 + orig: 126, 28 + offset: 0, 0 + index: -1 +tankBottom + rotate: false + xy: 2, 193 + size: 643, 138 + orig: 643, 138 + offset: 0, 0 + index: -1 +tankBottom-shadow + rotate: false + xy: 2, 333 + size: 646, 171 + orig: 646, 171 + offset: 0, 0 + index: -1 +tankTop + rotate: false + xy: 2, 80 + size: 704, 111 + orig: 704, 111 + offset: 0, 0 + index: -1 +tread + rotate: false + xy: 647, 231 + size: 48, 15 + orig: 48, 15 + offset: 0, 0 + index: -1 +tread-inside + rotate: false + xy: 2, 2 + size: 13, 14 + orig: 13, 14 + offset: 0, 0 + index: -1 +wheel-big + rotate: false + xy: 650, 248 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +wheel-big-overlay + rotate: false + xy: 748, 251 + size: 93, 93 + orig: 93, 93 + offset: 0, 0 + index: -1 +wheel-mid + rotate: false + xy: 843, 289 + size: 68, 68 + orig: 68, 68 + offset: 0, 0 + index: -1 +wheel-mid-overlay + rotate: false + xy: 913, 289 + size: 68, 68 + orig: 68, 68 + offset: 0, 0 + index: -1 +wheel-small + rotate: false + xy: 913, 251 + size: 36, 36 + orig: 36, 36 + offset: 0, 0 + index: -1 diff --git a/examples/tank/export/tank-pma.png b/examples/tank/export/tank-pma.png new file mode 100644 index 000000000..813e2c6b9 Binary files /dev/null and b/examples/tank/export/tank-pma.png differ diff --git a/examples/tank/export/tank.atlas b/examples/tank/export/tank.atlas new file mode 100644 index 000000000..115f09479 --- /dev/null +++ b/examples/tank/export/tank.atlas @@ -0,0 +1,125 @@ + +tank.png +size: 1024,512 +format: RGBA8888 +filter: Linear,Linear +repeat: none +antenna + rotate: true + xy: 650, 346 + size: 11, 152 + orig: 11, 152 + offset: 0, 0 + index: -1 +cannon + rotate: false + xy: 2, 49 + size: 466, 29 + orig: 466, 29 + offset: 0, 0 + index: -1 +cannonConnector + rotate: true + xy: 843, 231 + size: 56, 68 + orig: 56, 68 + offset: 0, 0 + index: -1 +guntower + rotate: false + xy: 650, 359 + size: 365, 145 + orig: 365, 145 + offset: 0, 0 + index: -1 +machinegun + rotate: false + xy: 2, 18 + size: 166, 29 + orig: 166, 29 + offset: 0, 0 + index: -1 +machinegun-mount + rotate: true + xy: 647, 193 + size: 36, 48 + orig: 36, 48 + offset: 0, 0 + index: -1 +rock + rotate: false + xy: 470, 50 + size: 126, 28 + orig: 126, 28 + offset: 0, 0 + index: -1 +tankBottom + rotate: false + xy: 2, 193 + size: 643, 138 + orig: 643, 138 + offset: 0, 0 + index: -1 +tankBottom-shadow + rotate: false + xy: 2, 333 + size: 646, 171 + orig: 646, 171 + offset: 0, 0 + index: -1 +tankTop + rotate: false + xy: 2, 80 + size: 704, 111 + orig: 704, 111 + offset: 0, 0 + index: -1 +tread + rotate: false + xy: 647, 231 + size: 48, 15 + orig: 48, 15 + offset: 0, 0 + index: -1 +tread-inside + rotate: false + xy: 2, 2 + size: 13, 14 + orig: 13, 14 + offset: 0, 0 + index: -1 +wheel-big + rotate: false + xy: 650, 248 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +wheel-big-overlay + rotate: false + xy: 748, 251 + size: 93, 93 + orig: 93, 93 + offset: 0, 0 + index: -1 +wheel-mid + rotate: false + xy: 843, 289 + size: 68, 68 + orig: 68, 68 + offset: 0, 0 + index: -1 +wheel-mid-overlay + rotate: false + xy: 913, 289 + size: 68, 68 + orig: 68, 68 + offset: 0, 0 + index: -1 +wheel-small + rotate: false + xy: 913, 251 + size: 36, 36 + orig: 36, 36 + offset: 0, 0 + index: -1 diff --git a/examples/tank/export/tank.json b/examples/tank/export/tank.json new file mode 100644 index 000000000..9f5b14faa --- /dev/null +++ b/examples/tank/export/tank.json @@ -0,0 +1,1900 @@ +{ +"skeleton": { "hash": "prAbugErg4ObQ7MEDGj8zq4mn74", "spine": "3.4.00", "width": 1914.53, "height": 964.03, "images": "" }, +"bones": [ + { "name": "root" }, + { "name": "tankRoot", "parent": "root", "y": 200 }, + { "name": "tankTreads", "parent": "tankRoot" }, + { "name": "tankBody", "parent": "tankTreads", "y": 10 }, + { "name": "guntower", "parent": "tankBody", "x": -21.72, "y": 245.47 }, + { "name": "antennaRoot", "parent": "guntower", "x": 164.6, "y": 202.52 }, + { "name": "antenna1", "parent": "antennaRoot", "length": 40, "rotation": 90, "y": 39.99, "color": "ffee00ff" }, + { "name": "antenna2", "parent": "antenna1", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna3", "parent": "antenna2", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna4", "parent": "antenna3", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna5", "parent": "antenna4", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna6", "parent": "antenna5", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "cannonConnector", "parent": "guntower", "x": -235.04, "y": 96.07 }, + { "name": "cannon", "parent": "cannonConnector", "length": 946.68, "rotation": 180, "color": "ff4000ff" }, + { "name": "cannonTarget", "parent": "tankRoot", "x": -1486.66, "y": 351.82, "color": "ff3f00ff" }, + { "name": "cannonTip", "parent": "cannon", "x": 946.68, "color": "ff4000ff" }, + { "name": "machineGunTarget", "parent": "tankRoot", "x": -1474, "y": 559.42, "color": "ff3f00ff" }, + { + "name": "machinegun-mount", + "parent": "guntower", + "length": 90.97, + "rotation": 90, + "x": -123.72, + "y": 218.32, + "color": "15ff00ff" + }, + { + "name": "machinegun", + "parent": "machinegun-mount", + "length": 208.94, + "rotation": 90, + "x": 91.52, + "y": -1.03, + "color": "15ff00ff" + }, + { "name": "machinegun-tip", "parent": "machinegun", "x": 210.42, "y": -12.2 }, + { "name": "rock", "parent": "root", "x": -656.45 }, + { + "name": "tread", + "parent": "tankRoot", + "length": 82, + "rotation": 180, + "x": -22.89, + "y": 213.85, + "scaleX": 0.993, + "color": "e64344ff" + }, + { "name": "tread2", "parent": "tread", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread3", "parent": "tread2", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread4", "parent": "tread3", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread5", "parent": "tread4", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread6", "parent": "tread5", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread7", "parent": "tread6", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread8", "parent": "tread7", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread9", "parent": "tread8", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread10", "parent": "tread9", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread11", "parent": "tread10", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread12", "parent": "tread11", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread13", "parent": "tread12", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread14", "parent": "tread13", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread15", "parent": "tread14", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread16", "parent": "tread15", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread17", "parent": "tread16", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread18", "parent": "tread17", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread19", "parent": "tread18", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread20", "parent": "tread19", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread21", "parent": "tread20", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread22", "parent": "tread21", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread23", "parent": "tread22", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread24", "parent": "tread23", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread25", "parent": "tread24", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread26", "parent": "tread25", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread27", "parent": "tread26", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread28", "parent": "tread27", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread29", "parent": "tread28", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread30", "parent": "tread29", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread31", "parent": "tread30", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread32", "parent": "tread31", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread33", "parent": "tread32", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread34", "parent": "tread33", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread35", "parent": "tread34", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread36", "parent": "tread35", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "wheel-midCenter", "parent": "tankRoot", "y": -114.56 }, + { "name": "treadCollider1", "parent": "wheel-midCenter", "x": -329.57, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider2", "parent": "wheel-midCenter", "x": -165.95, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider3", "parent": "wheel-midCenter", "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider4", "parent": "wheel-midCenter", "x": 163.56, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider5", "parent": "wheel-midCenter", "x": 329.12, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadGravity1", "parent": "tankRoot", "rotation": 180, "x": -175.35, "y": 109.99, "color": "ff00fbff" }, + { "name": "treadGravity2", "parent": "tankRoot", "rotation": 180, "x": 177.88, "y": 105.45, "color": "ff00fbff" }, + { "name": "wheel-bigRoot1", "parent": "tankTreads", "x": -549.59, "y": 14.39, "color": "abe323ff" }, + { "name": "wheel-big1", "parent": "wheel-bigRoot1", "x": -0.02, "color": "abe323ff" }, + { "name": "wheel-bigRoot2", "parent": "tankTreads", "x": 547.33, "y": 14.39 }, + { "name": "wheel-big2", "parent": "wheel-bigRoot2" }, + { "name": "wheel-midRoot1", "parent": "wheel-midCenter", "x": -410.57, "color": "abe323ff" }, + { "name": "wheel-mid1", "parent": "wheel-midRoot1", "color": "abe323ff" }, + { "name": "wheel-midRoot2", "parent": "wheel-midCenter", "x": -246.95 }, + { "name": "wheel-mid2", "parent": "wheel-midRoot2" }, + { "name": "wheel-midRoot3", "parent": "wheel-midCenter", "x": -82.72 }, + { "name": "wheel-mid3", "parent": "wheel-midRoot3" }, + { "name": "wheel-midRoot4", "parent": "wheel-midCenter", "x": 80.89 }, + { "name": "wheel-mid4", "parent": "wheel-midRoot4" }, + { "name": "wheel-midRoot5", "parent": "wheel-midCenter", "x": 244.51 }, + { "name": "wheel-mid5", "parent": "wheel-midRoot5" }, + { "name": "wheel-midRoot6", "parent": "wheel-midCenter", "x": 408.73 }, + { "name": "wheel-mid6", "parent": "wheel-midRoot6" }, + { "name": "wheel-smallRoot1", "parent": "tankTreads", "x": -337.38, "y": 109.43 }, + { "name": "wheel-small1", "parent": "wheel-smallRoot1", "color": "abe323ff" }, + { "name": "wheel-smallRoot2", "parent": "tankTreads", "x": 0.08, "y": 109.43 }, + { "name": "wheel-small2", "parent": "wheel-smallRoot2" }, + { "name": "wheel-smallRoot3", "parent": "tankTreads", "x": 334.68, "y": 109.43 }, + { "name": "wheel-small3", "parent": "wheel-smallRoot3" } +], +"slots": [ + { "name": "tankBody-shadow", "bone": "tankBody", "color": "ffffffb9", "attachment": "images/tankBottom-shadow" }, + { "name": "bottom", "bone": "tankBody", "attachment": "images/tankBottom" }, + { "name": "tread-inside1", "bone": "tread", "attachment": "images/tread-inside" }, + { "name": "tread-inside53", "bone": "tread27", "attachment": "images/tread-inside" }, + { "name": "tread-inside27", "bone": "tread14", "attachment": "images/tread-inside" }, + { "name": "tread-inside3", "bone": "tread2", "attachment": "images/tread-inside" }, + { "name": "tread-inside55", "bone": "tread28", "attachment": "images/tread-inside" }, + { "name": "tread-inside29", "bone": "tread15", "attachment": "images/tread-inside" }, + { "name": "tread-inside5", "bone": "tread3", "attachment": "images/tread-inside" }, + { "name": "tread-inside57", "bone": "tread29", "attachment": "images/tread-inside" }, + { "name": "tread-inside31", "bone": "tread16", "attachment": "images/tread-inside" }, + { "name": "tread-inside7", "bone": "tread4", "attachment": "images/tread-inside" }, + { "name": "tread-inside59", "bone": "tread30", "attachment": "images/tread-inside" }, + { "name": "tread-inside33", "bone": "tread17", "attachment": "images/tread-inside" }, + { "name": "tread-inside9", "bone": "tread5", "attachment": "images/tread-inside" }, + { "name": "tread-inside61", "bone": "tread31", "attachment": "images/tread-inside" }, + { "name": "tread-inside35", "bone": "tread18", "attachment": "images/tread-inside" }, + { "name": "tread-inside11", "bone": "tread6", "attachment": "images/tread-inside" }, + { "name": "tread-inside63", "bone": "tread32", "attachment": "images/tread-inside" }, + { "name": "tread-inside37", "bone": "tread19", "attachment": "images/tread-inside" }, + { "name": "tread-inside13", "bone": "tread7", "attachment": "images/tread-inside" }, + { "name": "tread-inside65", "bone": "tread33", "attachment": "images/tread-inside" }, + { "name": "tread-inside39", "bone": "tread20", "attachment": "images/tread-inside" }, + { "name": "tread-inside15", "bone": "tread8", "attachment": "images/tread-inside" }, + { "name": "tread-inside67", "bone": "tread34", "attachment": "images/tread-inside" }, + { "name": "tread-inside69", "bone": "tread35", "attachment": "images/tread-inside" }, + { "name": "tread-inside71", "bone": "tread36", "attachment": "images/tread-inside" }, + { "name": "tread-inside41", "bone": "tread21", "attachment": "images/tread-inside" }, + { "name": "tread-inside17", "bone": "tread9", "attachment": "images/tread-inside" }, + { "name": "tread-inside43", "bone": "tread22", "attachment": "images/tread-inside" }, + { "name": "tread-inside19", "bone": "tread10", "attachment": "images/tread-inside" }, + { "name": "tread-inside45", "bone": "tread23", "attachment": "images/tread-inside" }, + { "name": "tread-inside21", "bone": "tread11", "attachment": "images/tread-inside" }, + { "name": "tread-inside47", "bone": "tread24", "attachment": "images/tread-inside" }, + { "name": "tread-inside23", "bone": "tread12", "attachment": "images/tread-inside" }, + { "name": "tread-inside49", "bone": "tread25", "attachment": "images/tread-inside" }, + { "name": "tread-inside25", "bone": "tread13", "attachment": "images/tread-inside" }, + { "name": "tread-inside51", "bone": "tread26", "attachment": "images/tread-inside" }, + { "name": "tread-inside2", "bone": "tread", "attachment": "images/tread-inside" }, + { "name": "tread-inside54", "bone": "tread27", "attachment": "images/tread-inside" }, + { "name": "tread-inside28", "bone": "tread14", "attachment": "images/tread-inside" }, + { "name": "tread-inside4", "bone": "tread2", "attachment": "images/tread-inside" }, + { "name": "tread-inside56", "bone": "tread28", "attachment": "images/tread-inside" }, + { "name": "tread-inside30", "bone": "tread15", "attachment": "images/tread-inside" }, + { "name": "tread-inside6", "bone": "tread3", "attachment": "images/tread-inside" }, + { "name": "tread-inside58", "bone": "tread29", "attachment": "images/tread-inside" }, + { "name": "tread-inside32", "bone": "tread16", "attachment": "images/tread-inside" }, + { "name": "tread-inside8", "bone": "tread4", "attachment": "images/tread-inside" }, + { "name": "tread-inside60", "bone": "tread30", "attachment": "images/tread-inside" }, + { "name": "tread-inside34", "bone": "tread17", "attachment": "images/tread-inside" }, + { "name": "tread-inside10", "bone": "tread5", "attachment": "images/tread-inside" }, + { "name": "tread-inside62", "bone": "tread31", "attachment": "images/tread-inside" }, + { "name": "tread-inside36", "bone": "tread18", "attachment": "images/tread-inside" }, + { "name": "tread-inside12", "bone": "tread6", "attachment": "images/tread-inside" }, + { "name": "tread-inside64", "bone": "tread32", "attachment": "images/tread-inside" }, + { "name": "tread-inside38", "bone": "tread19", "attachment": "images/tread-inside" }, + { "name": "tread-inside14", "bone": "tread7", "attachment": "images/tread-inside" }, + { "name": "tread-inside66", "bone": "tread33", "attachment": "images/tread-inside" }, + { "name": "tread-inside40", "bone": "tread20", "attachment": "images/tread-inside" }, + { "name": "tread-inside16", "bone": "tread8", "attachment": "images/tread-inside" }, + { "name": "tread-inside68", "bone": "tread34", "attachment": "images/tread-inside" }, + { "name": "tread-inside70", "bone": "tread35", "attachment": "images/tread-inside" }, + { "name": "tread-inside72", "bone": "tread36", "attachment": "images/tread-inside" }, + { "name": "tread-inside42", "bone": "tread21", "attachment": "images/tread-inside" }, + { "name": "tread-inside18", "bone": "tread9", "attachment": "images/tread-inside" }, + { "name": "tread-inside44", "bone": "tread22", "attachment": "images/tread-inside" }, + { "name": "tread-inside20", "bone": "tread10", "attachment": "images/tread-inside" }, + { "name": "tread-inside46", "bone": "tread23", "attachment": "images/tread-inside" }, + { "name": "tread-inside22", "bone": "tread11", "attachment": "images/tread-inside" }, + { "name": "tread-inside48", "bone": "tread24", "attachment": "images/tread-inside" }, + { "name": "tread-inside24", "bone": "tread12", "attachment": "images/tread-inside" }, + { "name": "tread-inside50", "bone": "tread25", "attachment": "images/tread-inside" }, + { "name": "tread-inside26", "bone": "tread13", "attachment": "images/tread-inside" }, + { "name": "tread-inside52", "bone": "tread26", "attachment": "images/tread-inside" }, + { "name": "wheel-big", "bone": "wheel-big1", "color": "dbdbdbff", "attachment": "images/wheel-big" }, + { "name": "wheel-big2", "bone": "wheel-big2", "color": "dbdbdbff", "attachment": "images/wheel-big" }, + { "name": "wheel-mid", "bone": "wheel-mid1", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid2", "bone": "wheel-mid2", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid3", "bone": "wheel-mid3", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid4", "bone": "wheel-mid4", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid5", "bone": "wheel-mid5", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid6", "bone": "wheel-mid6", "attachment": "images/wheel-mid" }, + { "name": "wheel-small", "bone": "wheel-small1", "attachment": "images/wheel-small" }, + { "name": "wheel-small2", "bone": "wheel-small2", "attachment": "images/wheel-small" }, + { "name": "wheel-small3", "bone": "wheel-small3", "attachment": "images/wheel-small" }, + { + "name": "wheel-mid-overlay", + "bone": "wheel-midRoot1", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay2", + "bone": "wheel-midRoot2", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay3", + "bone": "wheel-midRoot3", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay4", + "bone": "wheel-midRoot4", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay5", + "bone": "wheel-midRoot5", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay6", + "bone": "wheel-midRoot6", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-big-overlay1", + "bone": "wheel-bigRoot1", + "color": "ffffffe9", + "attachment": "images/wheel-big-overlay", + "blend": "multiply" + }, + { + "name": "wheel-big-overlay2", + "bone": "wheel-bigRoot2", + "color": "ffffffe9", + "attachment": "images/wheel-big-overlay", + "blend": "multiply" + }, + { "name": "treads", "bone": "tankRoot", "attachment": "treads" }, + { "name": "tread", "bone": "tread", "color": "c0974fff", "attachment": "images/tread" }, + { "name": "tread27", "bone": "tread27", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread14", "bone": "tread14", "attachment": "images/tread" }, + { "name": "tread2", "bone": "tread2", "attachment": "images/tread" }, + { "name": "tread28", "bone": "tread28", "attachment": "images/tread" }, + { "name": "tread15", "bone": "tread15", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread3", "bone": "tread3", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread29", "bone": "tread29", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread16", "bone": "tread16", "attachment": "images/tread" }, + { "name": "tread4", "bone": "tread4", "attachment": "images/tread" }, + { "name": "tread30", "bone": "tread30", "attachment": "images/tread" }, + { "name": "tread17", "bone": "tread17", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread5", "bone": "tread5", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread31", "bone": "tread31", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread18", "bone": "tread18", "attachment": "images/tread" }, + { "name": "tread6", "bone": "tread6", "attachment": "images/tread" }, + { "name": "tread32", "bone": "tread32", "attachment": "images/tread" }, + { "name": "tread19", "bone": "tread19", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread7", "bone": "tread7", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread33", "bone": "tread33", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread20", "bone": "tread20", "attachment": "images/tread" }, + { "name": "tread8", "bone": "tread8", "attachment": "images/tread" }, + { "name": "tread34", "bone": "tread34", "attachment": "images/tread" }, + { "name": "tread35", "bone": "tread35", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread36", "bone": "tread36", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread21", "bone": "tread21", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread9", "bone": "tread9", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread22", "bone": "tread22", "attachment": "images/tread" }, + { "name": "tread10", "bone": "tread10", "attachment": "images/tread" }, + { "name": "tread23", "bone": "tread23", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread11", "bone": "tread11", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread24", "bone": "tread24", "attachment": "images/tread" }, + { "name": "tread12", "bone": "tread12", "attachment": "images/tread" }, + { "name": "tread25", "bone": "tread25", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread13", "bone": "tread13", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread26", "bone": "tread26", "attachment": "images/tread" }, + { "name": "rock", "bone": "rock", "attachment": "images/rock" }, + { "name": "machinegun", "bone": "machinegun", "attachment": "images/machinegun" }, + { "name": "machinegun-mount", "bone": "machinegun-mount", "attachment": "images/machinegun-mount" }, + { "name": "tankTop", "bone": "tankBody", "attachment": "images/tankTop" }, + { "name": "guntower", "bone": "guntower", "attachment": "images/guntower" }, + { "name": "cannon", "bone": "cannon", "attachment": "images/cannon" }, + { "name": "cannonConnector", "bone": "cannonConnector", "attachment": "images/cannonConnector" }, + { "name": "antenna", "bone": "antennaRoot", "attachment": "images/antenna" } +], +"ik": [ + { + "name": "cannonTarget", + "bones": [ "cannon" ], + "target": "cannonTarget" + }, + { + "name": "machineGunTarget", + "bones": [ "machinegun" ], + "target": "machineGunTarget", + "mix": 0 + } +], +"transform": [ + { + "name": "wheel-big", + "bones": [ "wheel-big2" ], + "target": "wheel-big1", + "rotation": 65.6, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid1", + "bones": [ "wheel-mid2", "wheel-mid4" ], + "target": "wheel-mid1", + "rotation": 93, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid2", + "bones": [ "wheel-mid3", "wheel-mid5" ], + "target": "wheel-mid1", + "rotation": -89, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid3", + "bones": [ "wheel-mid6" ], + "target": "wheel-mid1", + "rotation": -152.6, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-small1", + "bones": [ "wheel-small2" ], + "target": "wheel-small1", + "rotation": 87, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-small2", + "bones": [ "wheel-small3" ], + "target": "wheel-small1", + "rotation": 54.9, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + } +], +"path": [ + { + "name": "treads", + "bones": [ + "tread", + "tread2", + "tread3", + "tread4", + "tread5", + "tread6", + "tread7", + "tread8", + "tread9", + "tread10", + "tread11", + "tread12", + "tread13", + "tread14", + "tread15", + "tread16", + "tread17", + "tread18", + "tread19", + "tread20", + "tread21", + "tread22", + "tread23", + "tread24", + "tread25", + "tread26", + "tread27", + "tread28", + "tread29", + "tread30", + "tread31", + "tread32", + "tread33", + "tread34", + "tread35", + "tread36" + ], + "target": "treads", + "rotateMode": "chain" + } +], +"skins": { + "default": { + "antenna": { + "images/antenna": { + "type": "mesh", + "uvs": [ 0.64286, 0.07875, 0.65354, 0.15349, 0.66324, 0.22137, 0.67367, 0.29433, 0.68383, 0.36543, 0.69359, 0.43374, 0.7031, 0.50029, 0.71311, 0.5703, 0.72327, 0.64138, 0.73406, 0.71688, 0.7444, 0.78929, 0.75614, 0.8714, 0.76905, 0.9431, 1, 0.9431, 1, 1, 0, 1, 0, 0.9431, 0.20105, 0.9431, 0.20105, 0.87093, 0.21461, 0.78846, 0.22651, 0.71606, 0.23885, 0.64098, 0.25035, 0.57104, 0.26206, 0.49983, 0.27306, 0.4329, 0.2843, 0.36453, 0.29592, 0.29381, 0.308, 0.22037, 0.319, 0.15345, 0.33141, 0.07795, 0.34423, 0, 0.6316, 0 ], + "triangles": [ 29, 0, 1, 29, 30, 0, 30, 31, 0, 27, 2, 3, 27, 28, 2, 28, 1, 2, 28, 29, 1, 26, 27, 3, 25, 4, 5, 25, 26, 4, 26, 3, 4, 24, 25, 5, 7, 23, 6, 23, 24, 6, 24, 5, 6, 7, 22, 23, 21, 8, 9, 21, 22, 8, 22, 7, 8, 20, 21, 9, 19, 20, 10, 20, 9, 10, 14, 15, 12, 15, 17, 12, 12, 13, 14, 15, 16, 17, 17, 11, 12, 17, 18, 11, 18, 19, 11, 19, 10, 11 ], + "vertices": [ 2, 10, 65.37999, -3.14, 0.3125, 11, 23.38, -3.14, 0.6875, 3, 9, 84.73, -3.37, 0.0625, 10, 42.73, -3.37, 0.625, 11, 0.73, -3.37, 0.3125, 3, 9, 64.16, -3.59, 0.3125, 10, 22.16, -3.59, 0.625, 11, -19.83, -3.59, 0.0625, 3, 8, 84.06, -3.82, 0.0625, 9, 42.06, -3.82, 0.625, 10, 0.06, -3.82, 0.3125, 3, 8, 62.51, -4.04, 0.3125, 9, 20.51, -4.04, 0.625, 10, -21.48, -4.04, 0.0625, 3, 7, 83.81, -4.25, 0.0625, 8, 41.81, -4.25, 0.625, 9, -0.18, -4.25, 0.3125, 3, 7, 63.65, -4.46, 0.3125, 8, 21.65, -4.46, 0.625, 9, -20.34, -4.46, 0.0625, 3, 6, 84.43, -4.67999, 0.0625, 7, 42.43, -4.67999, 0.625, 8, 0.43, -4.67999, 0.3125, 3, 6, 62.9, -4.91, 0.3125, 7, 20.9, -4.91, 0.625, 8, -21.09, -4.91, 0.0625, 3, 5, 5.14, 80.01999, 0.0625, 6, 40.02, -5.14, 0.625, 7, -1.97, -5.14, 0.3125, 3, 5, 5.37, 58.08, 0.375, 6, 18.08, -5.37, 0.5625, 7, -23.91, -5.37, 0.0625, 1, 5, 5.63, 33.2, 1, 1, 5, 5.91, 11.48, 1, 1, 5, 11, 11.48, 1, 1, 5, 10.99, -5.75, 1, 1, 5, -11, -5.75, 1, 1, 5, -10.99, 11.48, 1, 1, 5, -6.57, 11.48, 1, 1, 5, -6.57, 33.34, 1, 3, 5, -6.27, 58.33, 0.375, 6, 18.33, 6.27, 0.5625, 7, -23.66, 6.27, 0.0625, 3, 5, -6.01, 80.26999, 0.0625, 6, 40.27, 6.01, 0.625, 7, -1.72, 6.01, 0.3125, 3, 6, 63.02, 5.74, 0.3125, 7, 21.02, 5.74, 0.625, 8, -20.96999, 5.74, 0.0625, 3, 6, 84.21, 5.49, 0.0625, 7, 42.21, 5.49, 0.625, 8, 0.21, 5.49, 0.3125, 3, 7, 63.79, 5.23, 0.3125, 8, 21.79, 5.23, 0.625, 9, -20.2, 5.23, 0.0625, 3, 7, 84.07, 4.98999, 0.0625, 8, 42.07, 4.98999, 0.625, 9, 0.07, 4.98999, 0.3125, 3, 8, 62.78, 4.73999, 0.3125, 9, 20.78, 4.73999, 0.625, 10, -21.21, 4.73999, 0.0625, 3, 8, 84.21, 4.48, 0.0625, 9, 42.21, 4.48, 0.625, 10, 0.21, 4.48, 0.3125, 3, 9, 64.46, 4.21999, 0.3125, 10, 22.46, 4.21999, 0.625, 11, -19.53, 4.21999, 0.0625, 3, 9, 84.74, 3.98, 0.0625, 10, 42.74, 3.98, 0.625, 11, 0.74, 3.98, 0.3125, 2, 10, 65.62, 3.7, 0.3125, 11, 23.62, 3.7, 0.6875, 1, 11, 47.24, 3.42, 1, 1, 11, 47.24, -2.89, 1 ], + "hull": 32, + "edges": [ 28, 30, 28, 26, 30, 32, 26, 24, 24, 22, 32, 34, 34, 24, 34, 36, 36, 22, 60, 62, 38, 36, 20, 22, 38, 20, 40, 38, 18, 20, 40, 18, 42, 40, 16, 18, 42, 16, 44, 42, 14, 16, 44, 14, 46, 44, 12, 14, 46, 12, 48, 46, 10, 12, 48, 10, 50, 48, 8, 10, 50, 8, 52, 50, 6, 8, 52, 6, 54, 52, 4, 6, 54, 4, 56, 54, 2, 4, 56, 2, 60, 58, 58, 56, 62, 0, 0, 2, 58, 0 ], + "width": 22, + "height": 303 + } + }, + "bottom": { + "images/tankBottom": { "x": -16.66, "y": 9.89, "width": 1285, "height": 276 } + }, + "cannon": { + "images/cannon": { "x": 481.95, "y": -0.02, "rotation": 179.99, "width": 931, "height": 58 } + }, + "cannonConnector": { + "images/cannonConnector": { + "type": "mesh", + "uvs": [ 1, 0.03236, 1, 0.10602, 0.90987, 0.32859, 0.81975, 0.55116, 0.72962, 0.77372, 0.6395, 0.99629, 0.42157, 0.99629, 0.20364, 0.99629, 0, 0.85433, 0, 0.69901, 0.02267, 0.52884, 0, 0.31444, 0.21601, 0.12998, 0.43367, 0, 0.63546, 0.0037, 0.48407, 0.77059, 0.31496, 0.52496, 0.64132, 0.19648, 0.21516, 0.76765, 0.58345, 0.5647, 0.68444, 0.40146, 0.46758, 0.36649, 0.28934, 0.34603 ], + "triangles": [ 7, 18, 6, 6, 18, 15, 7, 8, 18, 8, 9, 18, 18, 16, 15, 15, 16, 19, 9, 10, 18, 18, 10, 16, 16, 21, 19, 19, 21, 20, 10, 22, 16, 10, 11, 22, 16, 22, 21, 21, 17, 20, 21, 12, 13, 17, 13, 14, 17, 21, 13, 11, 12, 22, 21, 22, 12, 6, 15, 5, 5, 15, 4, 15, 19, 4, 4, 19, 3, 19, 20, 3, 3, 20, 2, 20, 17, 2, 2, 17, 1, 17, 14, 1, 14, 0, 1 ], + "vertices": [ 1, 12, 35.91, 69.08, 1, 1, 12, 35.91, 59.13, 1, 1, 12, 25.81, 29.09, 1, 1, 12, 15.72, -0.95, 1, 1, 12, 5.63, -31, 1, 1, 12, -4.46, -61.04, 1, 2, 12, -28.87, -61.04, 0.33333, 13, 28.87, 61.03, 0.66666, 1, 13, 53.27, 61.01, 1, 1, 13, 76.08, 41.83, 1, 1, 13, 71.17, 21.62, 1, 1, 13, 72.83, -1.62, 1, 1, 13, 70.37, -29.12, 1, 1, 13, 50.66, -56.13, 1, 2, 12, -28.43, 74.37, 0.41, 13, 28.43, -74.39, 0.58999, 2, 12, -4.91, 72.94999, 0.52, 13, 4.91, -72.94999, 0.48, 2, 12, -21.87, -30.57, 0.49, 13, 21.87, 30.56, 0.51, 1, 13, 40.81, -2.59999, 1, 2, 12, -4.25, 46.92, 0.49, 13, 4.25, -46.92, 0.51, 1, 13, 51.98, 30.15, 1, 2, 12, -10.74, -2.78, 0.49, 13, 10.74, 2.77, 0.51, 2, 12, 0.56, 19.25, 0.49, 13, -0.56, -19.25, 0.51, 1, 13, 23.71, -23.98, 1, 1, 13, 43.68, -26.76, 1 ], + "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, 28, 0 ], + "width": 112, + "height": 135 + } + }, + "guntower": { + "images/guntower": { "x": 77.22, "y": 122.58, "width": 730, "height": 289 } + }, + "machinegun": { + "images/machinegun": { "x": 44.85, "y": -5.72, "rotation": -180, "width": 331, "height": 57 } + }, + "machinegun-mount": { + "images/machinegun-mount": { "x": 47.42, "y": -1.53, "rotation": -90, "width": 72, "height": 96 } + }, + "rock": { + "images/rock": { "color": "404040ff", "x": 25.23, "y": 27.35, "width": 252, "height": 55 } + }, + "tankBody-shadow": { + "images/tankBottom-shadow": { "x": -11.43, "y": -42.88, "width": 1291, "height": 341 } + }, + "tankTop": { + "images/tankTop": { "x": 6.8, "y": 168.71, "width": 1407, "height": 222 } + }, + "tread": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread-inside1": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside10": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside11": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside12": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside13": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside14": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside15": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside16": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside17": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside18": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside19": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside2": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside20": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside21": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside22": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside23": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside24": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside25": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside26": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside27": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside28": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside29": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside3": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside30": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside31": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside32": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside33": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside34": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside35": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside36": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside37": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside38": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside39": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside4": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside40": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside41": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside42": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside43": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside44": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside45": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside46": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside47": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside48": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside49": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside5": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside50": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside51": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside52": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside53": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside54": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside55": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside56": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside57": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside58": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside59": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside6": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside60": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside61": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside62": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside63": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside64": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside65": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside66": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside67": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside68": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside69": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside7": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside70": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside71": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside72": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside8": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside9": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread10": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread11": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread12": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread13": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread14": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread15": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread16": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread17": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread18": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread19": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread2": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread20": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread21": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread22": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread23": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread24": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread25": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread26": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread27": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread28": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread29": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread3": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread30": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread31": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread32": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread33": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread34": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread35": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread36": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread4": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread5": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread6": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread7": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread8": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread9": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "treads": { + "treads": { + "type": "path", + "closed": true, + "lengths": [ 182.41, 349, 472.77, 602.99, 780.46, 1052.96, 1133.44, 1218.43, 1298.34, 1382.7, 1465.57, 1546.11, 1628.02, 1707.73, 1794.36, 1876.75, 2158.69, 2321.34, 2438.56, 2579.42, 2745.35, 2919.23 ], + "vertexCount": 66, + "vertices": [ 1, 83, 11.23, 41.86, 1, 1, 83, 0.78, 41.93999, 1, 1, 83, -34.72, 42.23, 1, 1, 63, -104.21, 0.41, 1, 1, 63, 0.07, 0.55, 1, 1, 63, 68.8, 0.64, 1, 1, 81, 20.5, 43.47, 1, 1, 81, 1.13, 40.81, 1, 1, 81, -27.38, 36.84, 1, 1, 65, 147.06, 105, 1, 1, 65, 96.21, 96.63, 1, 1, 65, 43.87, 87.71, 1, 1, 65, 16.18, 103.34, 1, 1, 65, -33.66999, 94.2, 1, 1, 65, -99.35, 81.25, 1, 1, 65, -122.04, -1.69, 1, 1, 65, -83.58, -47.92, 1, 1, 65, -33.53, -109.36, 1, 1, 69, -83.56, -66.08999, 1, 1, 69, -2.16, -67.89, 1, 2, 69, 56.68, -41.48, 0.67999, 58, -24.31, -41.49, 0.32, 1, 58, -26.58, 16.69, 1, 1, 58, -2.69, 16.69, 1, 1, 58, 13.51, 16.69, 1, 2, 71, -52.41, -46.51, 0.74399, 58, 30.2, -46.51, 0.256, 1, 71, -0.32, -68.92, 1, 2, 71, 52.09, -44.72, 0.712, 59, -28.9, -44.73, 0.28799, 1, 59, -22.8, 16.24, 1, 1, 59, -1.42, 16.24, 1, 1, 59, 20.46999, 16.24, 1, 2, 73, -47.21, -47.45, 0.744, 59, 36.00999, -47.46, 0.25599, 1, 73, -0.28, -69.65, 1, 2, 73, 45.23, -47.26, 0.736, 60, -37.48, -47.26, 0.26399, 1, 60, -23.76, 15.27, 1, 1, 60, -0.13, 15.27, 1, 1, 60, 24.45, 15.27, 1, 2, 75, -47.36, -48.7, 0.74399, 60, 33.52, -48.7, 0.256, 1, 75, -0.49, -70.39, 1, 2, 75, 49.09, -48.33, 0.744, 61, -33.57, -48.34, 0.25599, 1, 61, -20.89, 15.83, 1, 1, 61, -1.25, 15.83, 1, 1, 61, 15.78, 15.83, 1, 2, 77, -52.49, -48.21, 0.75999, 61, 28.45, -48.21, 0.24, 1, 77, -2.5, -68.92, 1, 2, 77, 55.72, -47.82, 0.752, 62, -28.88, -47.82, 0.248, 1, 62, -21.64, 16.69, 1, 1, 62, -0.48, 16.69, 1, 1, 62, 20.73, 16.69, 1, 2, 79, -53.65, -48.89, 0.76, 62, 25.96, -48.89, 0.23999, 1, 79, 2.27, -69.65, 1, 1, 79, 44.94, -69.74, 1, 1, 65, 1172.98, -85.6, 1, 1, 65, 1190.53, -42.24, 1, 1, 65, 1215.63, 19.75, 1, 1, 65, 1175.55, 76.62, 1, 1, 65, 1134.22, 95.07, 1, 1, 65, 1128.4, 97.66, 1, 1, 65, 1081.79, 87.47, 1, 1, 65, 1017.16, 92.52, 1, 1, 65, 977.9, 95.58, 1, 1, 85, 47.07, 42.29, 1, 1, 85, 0.24, 42.74, 1, 1, 85, -29.63, 43.28, 1, 1, 64, -86.64, 1.35, 1, 1, 64, 0.49, 0.25, 1, 1, 64, 92.42, -0.89, 1 ], + "color": "ff8819ff" + } + }, + "wheel-big": { + "images/wheel-big": { "width": 191, "height": 191 } + }, + "wheel-big-overlay1": { + "images/wheel-big-overlay": { "width": 186, "height": 186 } + }, + "wheel-big-overlay2": { + "images/wheel-big-overlay": { "width": 186, "height": 186 } + }, + "wheel-big2": { + "images/wheel-big": { "width": 191, "height": 191 } + }, + "wheel-mid": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay2": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay3": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay4": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay5": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay6": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid2": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid3": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid4": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid5": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid6": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-small": { + "images/wheel-small": { "width": 71, "height": 71 } + }, + "wheel-small2": { + "images/wheel-small": { "width": 71, "height": 71 } + }, + "wheel-small3": { + "images/wheel-small": { "width": 71, "height": 71 } + } + } +}, +"animations": { + "drive": { + "bones": { + "tankRoot": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.549, 0, 0.907, 0.84 ] + }, + { + "time": 3.0333, + "x": -1426.14, + "y": 0, + "curve": [ 0.211, 0.23, 0.851, 0.92 ] + }, + { + "time": 4.8666, + "x": -2806.98, + "y": 0, + "curve": [ 0.253, 0.27, 0.625, 0.94 ] + }, + { "time": 5.3333, "x": -2903.34, "y": 0 } + ] + }, + "wheel-midRoot1": { + "translate": [ + { "time": 0.7666, "x": 0, "y": 0 }, + { + "time": 1.1666, + "x": 0, + "y": 50.95, + "curve": [ 0.633, 0, 0.907, 0.82 ] + }, + { "time": 1.5666, "x": 0, "y": 0 } + ] + }, + "treadCollider1": { + "rotate": [ + { "time": 1.1, "angle": 0 }, + { "time": 1.2333, "angle": -19.78 }, + { "time": 1.4666, "angle": 0 }, + { "time": 1.6, "angle": 28.87 }, + { "time": 1.8, "angle": 0 } + ], + "translate": [ + { "time": 1.1, "x": 0, "y": 0 }, + { + "time": 1.4666, + "x": 0, + "y": 58.66, + "curve": [ 0.352, 0, 0.828, 0.92 ] + }, + { "time": 1.8, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot2": { + "translate": [ + { "time": 1.2666, "x": 0, "y": 0 }, + { + "time": 1.6333, + "x": 0, + "y": 55.07, + "curve": [ 0.889, 0.01, 0.843, 0.81 ] + }, + { "time": 1.9333, "x": 0, "y": 0 } + ] + }, + "treadCollider2": { + "rotate": [ + { "time": 1.5333, "angle": 0 }, + { "time": 1.6333, "angle": -18.67 }, + { "time": 1.8, "angle": 0 }, + { "time": 1.9, "angle": 29.49 }, + { "time": 2.0666, "angle": 0 } + ], + "translate": [ + { + "time": 1.5333, + "x": 0, + "y": 0, + "curve": [ 0.16, 0.25, 0.813, 0.82 ] + }, + { + "time": 1.8, + "x": 0, + "y": 59.03, + "curve": [ 0.376, 0.26, 0.879, 0.79 ] + }, + { "time": 2.0666, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot3": { + "translate": [ + { "time": 1.6666, "x": 0, "y": 0 }, + { + "time": 1.9333, + "x": 0, + "y": 60.17, + "curve": [ 0.544, 0, 0.838, 0.77 ] + }, + { "time": 2.2, "x": 0, "y": 0 } + ] + }, + "treadCollider3": { + "rotate": [ + { "time": 1.8666, "angle": 0 }, + { "time": 1.9333, "angle": -20.16 }, + { "time": 2.0666, "angle": 0.57 }, + { "time": 2.1666, "angle": 33.66 }, + { "time": 2.3333, "angle": 0 } + ], + "translate": [ + { "time": 1.8666, "x": 0, "y": 0 }, + { + "time": 2.0666, + "x": 0, + "y": 61.53, + "curve": [ 0.582, 0, 0.836, 0.77 ] + }, + { "time": 2.3333, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot4": { + "translate": [ + { "time": 1.9333, "x": 0, "y": 0 }, + { + "time": 2.2, + "x": 0, + "y": 58.89, + "curve": [ 0.48, 0, 0.75, 1 ] + }, + { "time": 2.4666, "x": 0, "y": 0 } + ] + }, + "treadCollider4": { + "rotate": [ + { "time": 2.1333, "angle": 0 }, + { "time": 2.2, "angle": -20.43 }, + { "time": 2.3333, "angle": 4.49 }, + { "time": 2.4333, "angle": 35.87 }, + { "time": 2.5666, "angle": 0 } + ], + "translate": [ + { + "time": 2.1333, + "x": 0, + "y": 0, + "curve": [ 0.191, 0.49, 0.75, 1 ] + }, + { "time": 2.3333, "x": 0, "y": 66.64 }, + { "time": 2.5666, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot5": { + "translate": [ + { "time": 2.2, "x": 0, "y": 0 }, + { "time": 2.4333, "x": 0, "y": 60.26 }, + { "time": 2.7, "x": 0, "y": 0 } + ] + }, + "treadCollider5": { + "rotate": [ + { "time": 2.3333, "angle": 0 }, + { "time": 2.4333, "angle": -23.6 }, + { "time": 2.5666, "angle": 6.49 }, + { "time": 2.6666, "angle": 29.93 }, + { "time": 2.8, "angle": -0.13 } + ], + "translate": [ + { "time": 2.3333, "x": 0, "y": 0 }, + { "time": 2.4333, "x": 0, "y": 36.34 }, + { "time": 2.5, "x": 0, "y": 56.39 }, + { "time": 2.5666, "x": 0, "y": 61.34 }, + { "time": 2.8, "x": 0, "y": 2.04 } + ] + }, + "wheel-midRoot6": { + "translate": [ + { + "time": 2.4333, + "x": 0, + "y": 0, + "curve": [ 0.19, 0.26, 0.804, 0.8 ] + }, + { + "time": 2.6333, + "x": 0, + "y": 51.86, + "curve": [ 0.346, 0, 0.852, 0.7 ] + }, + { "time": 2.8, "x": 0, "y": 0 } + ] + }, + "wheel-mid1": { + "rotate": [ + { + "time": 0, + "angle": 21, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 0.8, "angle": 120 }, + { "time": 1.2333, "angle": 240 }, + { "time": 1.6, "angle": 0 }, + { "time": 1.9, "angle": 120 }, + { "time": 2.1666, "angle": 240 }, + { "time": 2.4, "angle": 0 }, + { "time": 2.5666, "angle": 120 }, + { "time": 2.7333, "angle": 240 }, + { "time": 2.9333, "angle": 0 }, + { "time": 3.1, "angle": 120 }, + { "time": 3.2666, "angle": 240 }, + { "time": 3.4333, "angle": 0 }, + { "time": 3.6333, "angle": 120 }, + { "time": 3.8, "angle": 240 }, + { "time": 3.9666, "angle": 0 }, + { "time": 4.1666, "angle": 120 }, + { "time": 4.3333, "angle": 240 }, + { "time": 4.5, "angle": 0 }, + { "time": 4.7, "angle": 120 }, + { "time": 4.8666, "angle": 240 }, + { "time": 5.2666, "angle": -67.99 } + ] + }, + "tankTreads": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.145, 0.34, 0.75, 1 ] + }, + { "time": 1.1, "angle": -3.9 }, + { "time": 1.3333, "angle": -2.37 }, + { "time": 1.6333, "angle": -3.54 }, + { "time": 2.1666, "angle": 0.27 }, + { + "time": 2.4666, + "angle": 2.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.7, + "angle": 3.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3, "angle": -3.62 }, + { "time": 3.2333, "angle": -1.23, "curve": "stepped" }, + { + "time": 4.8666, + "angle": -1.23, + "curve": [ 0.188, 0.16, 0.75, 1 ] + }, + { + "time": 5.2, + "angle": 4.47, + "curve": [ 0.416, 0.01, 0.75, 1 ] + }, + { + "time": 5.5666, + "angle": -3.08, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 5.8333, "angle": -1.23 } + ] + }, + "wheel-big1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 1.1, "angle": 120 }, + { "time": 1.5333, "angle": 240 }, + { "time": 1.8, "angle": 360 }, + { "time": 2.0333, "angle": 120 }, + { "time": 2.2666, "angle": 240 }, + { "time": 2.4666, "angle": 360 }, + { "time": 2.7, "angle": 120 }, + { "time": 2.9333, "angle": 240 }, + { "time": 3.1333, "angle": 360 }, + { "time": 3.3666, "angle": 120 }, + { "time": 3.5666, "angle": 240 }, + { "time": 3.8, "angle": -24 }, + { "time": 4.0333, "angle": 120 }, + { "time": 4.2333, "angle": 240 }, + { "time": 4.4666, "angle": -24 }, + { "time": 4.7, "angle": 120 }, + { "time": 4.8666, "angle": -143.99 }, + { + "time": 5.0666, + "angle": -131.4, + "curve": [ 0.14, 0.25, 0.75, 1 ] + }, + { "time": 5.6666, "angle": -76.85 }, + { "time": 5.8333, "angle": -72.3 } + ] + }, + "treadGravity1": { + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.4666, "x": 0, "y": 0 }, + { "time": 1.8, "x": 0, "y": 29.44 }, + { "time": 2.3333, "x": 0, "y": -0.52 }, + { "time": 2.5666, "x": 0, "y": 5.2 }, + { "time": 2.6666, "x": 0, "y": -11.05, "curve": "stepped" }, + { "time": 4.8666, "x": 0, "y": -11.05 }, + { "time": 5.0666, "x": 0, "y": -1.91 }, + { "time": 5.5333, "x": 0, "y": -6.9 }, + { "time": 5.7333, "x": 0, "y": -11.05 } + ] + }, + "treadGravity2": { + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.4666, "x": 0, "y": 0 }, + { "time": 1.8, "x": 0, "y": 8.5 }, + { "time": 2.3333, "x": 0, "y": 34.74 }, + { "time": 2.5666, "x": 0, "y": 5.2 }, + { "time": 2.6666, "x": 0, "y": -11.05, "curve": "stepped" }, + { "time": 4.8666, "x": 0, "y": -11.05 }, + { "time": 5.0666, "x": 0, "y": 3.9 }, + { "time": 5.5333, "x": 0, "y": -6.9 }, + { "time": 5.7333, "x": 0, "y": -11.05 } + ] + }, + "wheel-small1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 0.7, "angle": 120 }, + { "time": 1.1, "angle": 240 }, + { "time": 1.4666, "angle": 360 }, + { "time": 1.7666, "angle": 120 }, + { "time": 2.0333, "angle": 240 }, + { "time": 2.2666, "angle": 360 }, + { "time": 2.4333, "angle": 120 }, + { "time": 2.5666, "angle": 240 }, + { "time": 2.7, "angle": 360 }, + { "time": 2.8333, "angle": 120 }, + { "time": 2.9666, "angle": 240 }, + { "time": 3.1, "angle": 360 }, + { "time": 3.2333, "angle": 120 }, + { "time": 3.3666, "angle": 240 }, + { "time": 3.5, "angle": 360 }, + { "time": 3.6333, "angle": 120 }, + { "time": 3.7666, "angle": 240 }, + { "time": 3.9, "angle": 360 }, + { "time": 4.0333, "angle": 120 }, + { "time": 4.1666, "angle": 240 }, + { "time": 4.3, "angle": 360 }, + { "time": 4.4333, "angle": 120 }, + { "time": 4.5666, "angle": 240 }, + { "time": 4.7, "angle": 360 }, + { "time": 4.8333, "angle": 120 }, + { "time": 5, "angle": 240 }, + { + "time": 5.2, + "angle": -25.64, + "curve": [ 0.181, 0.26, 0.75, 1 ] + }, + { "time": 5.5666, "angle": 90 } + ] + }, + "tankBody": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.1666, + "angle": -1.41, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.9333, + "angle": -0.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3, + "angle": 0.84, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -2.33, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.4666, + "angle": -0.45, + "curve": [ 0.329, 0.32, 0.757, 1 ] + }, + { + "time": 4.8666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3333, + "angle": 1.82, + "curve": [ 0.324, 0.01, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -1.15, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.0333, "angle": 0 } + ] + }, + "antenna1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna4": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna5": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna6": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "machinegun": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 2.8333, + "angle": 0, + "curve": [ 0.183, 0.17, 0.75, 1 ] + }, + { + "time": 3, + "angle": -4.43, + "curve": [ 0.156, 0.16, 0.75, 1 ] + }, + { + "time": 3.1666, + "angle": -2.93, + "curve": [ 0.156, 0.16, 0.75, 1 ] + }, + { + "time": 4.8333, + "angle": 0, + "curve": [ 0.183, 0.17, 0.75, 1 ] + }, + { + "time": 5.1666, + "angle": -6.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.4, + "angle": 6.15, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 5.6, "angle": -1.26 } + ] + }, + "cannon": { + "rotate": [ + { "time": 0, "angle": 0 } + ] + }, + "cannonTarget": { + "translate": [ + { + "time": 5, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.3333, "x": -15.38, "y": 99.99 } + ] + } + }, + "ik": { + "cannonTarget": [ + { "time": 0, "mix": 0.809, "curve": "stepped" }, + { "time": 4.7333, "mix": 0.809 }, + { "time": 5.1666, "mix": 0.504 }, + { "time": 5.6666 } + ] + }, + "paths": { + "treads": { + "position": [ + { + "time": 0, + "curve": [ 0.549, 0, 0.907, 0.84 ] + }, + { "time": 3.0333, "position": 0.51 }, + { "time": 4.8666, "position": 0.9794 }, + { + "time": 5.2666, + "position": 1, + "curve": [ 0.226, 0.15, 0.765, 0.96 ] + }, + { + "time": 5.5333, + "position": 1.02, + "curve": [ 0.279, 0.32, 0.694, 0.99 ] + }, + { "time": 5.8333, "position": 1.021 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/examples/tank/export/tank.png b/examples/tank/export/tank.png new file mode 100644 index 000000000..71e402d65 Binary files /dev/null and b/examples/tank/export/tank.png differ diff --git a/examples/tank/export/tank.skel b/examples/tank/export/tank.skel new file mode 100644 index 000000000..b14a91777 Binary files /dev/null and b/examples/tank/export/tank.skel differ diff --git a/examples/tank/images/antenna.png b/examples/tank/images/antenna.png new file mode 100644 index 000000000..ed08e57bf Binary files /dev/null and b/examples/tank/images/antenna.png differ diff --git a/examples/tank/images/cannon.png b/examples/tank/images/cannon.png new file mode 100644 index 000000000..466099bae Binary files /dev/null and b/examples/tank/images/cannon.png differ diff --git a/examples/tank/images/cannonConnector.png b/examples/tank/images/cannonConnector.png new file mode 100644 index 000000000..3c55bca5c Binary files /dev/null and b/examples/tank/images/cannonConnector.png differ diff --git a/examples/tank/images/guntower.png b/examples/tank/images/guntower.png new file mode 100644 index 000000000..1125c30bc Binary files /dev/null and b/examples/tank/images/guntower.png differ diff --git a/examples/tank/images/machinegun-mount.png b/examples/tank/images/machinegun-mount.png new file mode 100644 index 000000000..8f91819ff Binary files /dev/null and b/examples/tank/images/machinegun-mount.png differ diff --git a/examples/tank/images/machinegun.png b/examples/tank/images/machinegun.png new file mode 100644 index 000000000..19fcf4c26 Binary files /dev/null and b/examples/tank/images/machinegun.png differ diff --git a/examples/tank/images/rock.png b/examples/tank/images/rock.png new file mode 100644 index 000000000..61741a3a1 Binary files /dev/null and b/examples/tank/images/rock.png differ diff --git a/examples/tank/images/tankBottom-shadow.png b/examples/tank/images/tankBottom-shadow.png new file mode 100644 index 000000000..613e07372 Binary files /dev/null and b/examples/tank/images/tankBottom-shadow.png differ diff --git a/examples/tank/images/tankBottom.png b/examples/tank/images/tankBottom.png new file mode 100644 index 000000000..b76fc8b71 Binary files /dev/null and b/examples/tank/images/tankBottom.png differ diff --git a/examples/tank/images/tankTop.png b/examples/tank/images/tankTop.png new file mode 100644 index 000000000..550dd7bf1 Binary files /dev/null and b/examples/tank/images/tankTop.png differ diff --git a/examples/tank/images/tread-inside.png b/examples/tank/images/tread-inside.png new file mode 100644 index 000000000..2dc912b04 Binary files /dev/null and b/examples/tank/images/tread-inside.png differ diff --git a/examples/tank/images/tread.png b/examples/tank/images/tread.png new file mode 100644 index 000000000..d0a1cf81b Binary files /dev/null and b/examples/tank/images/tread.png differ diff --git a/examples/tank/images/wheel-big-overlay.png b/examples/tank/images/wheel-big-overlay.png new file mode 100644 index 000000000..34188f7c5 Binary files /dev/null and b/examples/tank/images/wheel-big-overlay.png differ diff --git a/examples/tank/images/wheel-big.png b/examples/tank/images/wheel-big.png new file mode 100644 index 000000000..3c8b366f9 Binary files /dev/null and b/examples/tank/images/wheel-big.png differ diff --git a/examples/tank/images/wheel-mid-overlay.png b/examples/tank/images/wheel-mid-overlay.png new file mode 100644 index 000000000..affaf2a58 Binary files /dev/null and b/examples/tank/images/wheel-mid-overlay.png differ diff --git a/examples/tank/images/wheel-mid.png b/examples/tank/images/wheel-mid.png new file mode 100644 index 000000000..e1987a3bd Binary files /dev/null and b/examples/tank/images/wheel-mid.png differ diff --git a/examples/tank/images/wheel-small.png b/examples/tank/images/wheel-small.png new file mode 100644 index 000000000..d3f531677 Binary files /dev/null and b/examples/tank/images/wheel-small.png differ diff --git a/examples/tank/license.txt b/examples/tank/license.txt new file mode 100644 index 000000000..d24b7af85 --- /dev/null +++ b/examples/tank/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2016, Esoteric Software + +The images in this project may be redistributed as long as they are accompanied +by this license file. The images may not be used for commercial use of any +kind. + +The project file is released into the public domain. It may be used as the basis +for derivative work. \ No newline at end of file diff --git a/examples/tank/tank.spine b/examples/tank/tank.spine new file mode 100644 index 000000000..291f909d7 Binary files /dev/null and b/examples/tank/tank.spine differ diff --git a/examples/vine/export/vine-pma.atlas b/examples/vine/export/vine-pma.atlas new file mode 100644 index 000000000..1e50a2de3 --- /dev/null +++ b/examples/vine/export/vine-pma.atlas @@ -0,0 +1,13 @@ + +vine-pma.png +size: 128,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +vine + rotate: false + xy: 2, 2 + size: 68, 962 + orig: 68, 962 + offset: 0, 0 + index: -1 diff --git a/examples/vine/export/vine-pma.png b/examples/vine/export/vine-pma.png new file mode 100644 index 000000000..79326fe6d Binary files /dev/null and b/examples/vine/export/vine-pma.png differ diff --git a/examples/vine/export/vine.atlas b/examples/vine/export/vine.atlas new file mode 100644 index 000000000..019a92d01 --- /dev/null +++ b/examples/vine/export/vine.atlas @@ -0,0 +1,13 @@ + +vine.png +size: 128,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +vine + rotate: false + xy: 2, 2 + size: 68, 962 + orig: 68, 962 + offset: 0, 0 + index: -1 diff --git a/examples/vine/export/vine.json b/examples/vine/export/vine.json new file mode 100644 index 000000000..a08c20022 --- /dev/null +++ b/examples/vine/export/vine.json @@ -0,0 +1,300 @@ +{ +"skeleton": { "hash": "Ww/IgnvLkO+Bc7+ljr0JS3OTq8Q", "spine": "3.4.00", "width": 227.35, "height": 841.02, "images": "" }, +"bones": [ + { "name": "root" }, + { "name": "vine1", "parent": "root", "length": 74, "rotation": 90, "x": 339.09, "y": -467.15, "color": "f700ffff" }, + { "name": "vine2", "parent": "vine1", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine3", "parent": "vine2", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine4", "parent": "vine3", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine5", "parent": "vine4", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine6", "parent": "vine5", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine7", "parent": "vine6", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine8", "parent": "vine7", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine9", "parent": "vine8", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine10", "parent": "vine9", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine11", "parent": "vine10", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine12", "parent": "vine11", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine13", "parent": "vine12", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine-control1", "parent": "root", "length": 296.68, "rotation": 88.64, "x": -2.5, "y": 2.55, "color": "ff0004ff" }, + { "name": "vine-control2", "parent": "vine-control1", "length": 292.59, "rotation": 0.96, "x": 296.68, "color": "ff0004ff" }, + { "name": "vine-control3", "parent": "vine-control2", "length": 247.5, "rotation": 0.16, "x": 292.59, "color": "ff0004ff" }, + { "name": "vine-control4", "parent": "vine-control3", "length": 212.43, "rotation": 0.5, "x": 247.5, "color": "ff0004ff" } +], +"slots": [ + { "name": "vine-path", "bone": "root", "attachment": "vine-path" }, + { "name": "vine", "bone": "vine1", "attachment": "images/vine" } +], +"path": [ + { + "name": "vine-path", + "bones": [ "vine1", "vine2", "vine3", "vine4", "vine5", "vine6", "vine7", "vine8", "vine9", "vine10", "vine11", "vine12", "vine13" ], + "target": "vine-path", + "rotateMode": "chainScale" + } +], +"skins": { + "default": { + "vine": { + "images/vine": { + "type": "mesh", + "uvs": [ 0, 0, 0.5, 0, 1, 0, 1, 0.03846, 1, 0.07692, 1, 0.11538, 1, 0.15384, 1, 0.1923, 1, 0.23076, 1, 0.26923, 1, 0.30769, 1, 0.34615, 1, 0.38461, 1, 0.42307, 1, 0.46153, 1, 0.5, 1, 0.53846, 1, 0.57692, 1, 0.61538, 1, 0.65384, 1, 0.6923, 1, 0.73076, 1, 0.76923, 1, 0.80769, 1, 0.84615, 1, 0.88461, 1, 0.92307, 1, 0.96153, 1, 1, 0.5, 1, 0, 1, 0, 0.96153, 0, 0.92307, 0, 0.88461, 0, 0.84615, 0, 0.80769, 0, 0.76923, 0, 0.73076, 0, 0.6923, 0, 0.65384, 0, 0.61538, 0, 0.57692, 0, 0.53846, 0, 0.5, 0, 0.46153, 0, 0.42307, 0, 0.38461, 0, 0.34615, 0, 0.30769, 0, 0.26923, 0, 0.23076, 0, 0.1923, 0, 0.15384, 0, 0.11538, 0, 0.07692, 0, 0.03846, 0.5, 0.03846, 0.5, 0.07692, 0.5, 0.11538, 0.5, 0.15384, 0.5, 0.1923, 0.5, 0.23076, 0.5, 0.26923, 0.5, 0.30769, 0.5, 0.34615, 0.5, 0.38461, 0.5, 0.42307, 0.5, 0.46153, 0.5, 0.5, 0.5, 0.53846, 0.5, 0.57692, 0.5, 0.61538, 0.5, 0.65384, 0.5, 0.6923, 0.5, 0.73076, 0.5, 0.76923, 0.5, 0.80769, 0.5, 0.84615, 0.5, 0.88461, 0.5, 0.92307, 0.5, 0.96153 ], + "triangles": [ 57, 56, 3, 54, 55, 56, 56, 2, 3, 55, 1, 56, 56, 1, 2, 55, 0, 1, 54, 56, 57, 59, 58, 5, 52, 53, 58, 58, 4, 5, 53, 57, 58, 58, 57, 4, 53, 54, 57, 57, 3, 4, 61, 60, 7, 50, 51, 60, 60, 6, 7, 51, 59, 60, 60, 59, 6, 51, 52, 59, 59, 5, 6, 52, 58, 59, 63, 62, 9, 48, 49, 62, 62, 8, 9, 49, 61, 62, 62, 61, 8, 49, 50, 61, 61, 7, 8, 50, 60, 61, 65, 64, 11, 46, 47, 64, 64, 10, 11, 47, 63, 64, 64, 63, 10, 47, 48, 63, 63, 9, 10, 48, 62, 63, 67, 66, 13, 44, 45, 66, 66, 12, 13, 45, 65, 66, 66, 65, 12, 45, 46, 65, 65, 11, 12, 46, 64, 65, 69, 68, 15, 42, 43, 68, 68, 14, 15, 43, 67, 68, 68, 67, 14, 43, 44, 67, 67, 13, 14, 44, 66, 67, 71, 70, 17, 40, 41, 70, 70, 16, 17, 41, 69, 70, 70, 69, 16, 41, 42, 69, 69, 15, 16, 42, 68, 69, 73, 72, 19, 38, 39, 72, 72, 18, 19, 39, 71, 72, 72, 71, 18, 39, 40, 71, 71, 17, 18, 40, 70, 71, 75, 74, 21, 36, 37, 74, 74, 20, 21, 37, 73, 74, 74, 73, 20, 37, 38, 73, 73, 19, 20, 38, 72, 73, 77, 76, 23, 34, 35, 76, 76, 22, 23, 35, 75, 76, 76, 75, 22, 35, 36, 75, 75, 21, 22, 36, 74, 75, 78, 77, 24, 33, 34, 77, 32, 78, 79, 79, 78, 25, 32, 33, 78, 78, 24, 25, 33, 77, 78, 77, 23, 24, 34, 76, 77, 79, 25, 26, 29, 27, 28, 30, 80, 29, 29, 80, 27, 30, 31, 80, 80, 26, 27, 31, 79, 80, 80, 79, 26, 31, 32, 79 ], + "vertices": [ 4, 10, 294, 33.89, 3.2E-4, 11, 220, 33.89, 0.01648, 12, 146, 33.89, 0.21526, 13, 72, 33.89, 0.76791, 3, 11, 220, -0.1, 0.00752, 12, 146, -0.1, 0.16869, 13, 72, -0.1, 0.82378, 4, 10, 294, -34.09999, 3.2E-4, 11, 220, -34.09999, 0.01648, 12, 146, -34.09999, 0.21526, 13, 72, -34.09999, 0.76791, 4, 10, 257, -34.09999, 0.00195, 11, 183, -34.09999, 0.04739, 12, 109, -34.09999, 0.33351, 13, 35, -34.09999, 0.61714, 5, 9, 294, -34.09999, 2.4E-4, 10, 220, -34.09999, 0.01163, 11, 146, -34.09999, 0.14109, 12, 72, -34.09999, 0.49171, 13, -1.99, -34.09999, 0.35531, 5, 9, 257, -34.09999, 0.00195, 10, 183, -34.09999, 0.04663, 11, 109, -34.09999, 0.31166, 12, 35, -34.09999, 0.48761, 13, -38.99, -34.09999, 0.15212, 6, 8, 294, -34.09999, 2.4E-4, 9, 220, -34.09999, 0.01163, 10, 146, -34.09999, 0.14101, 11, 72, -34.09999, 0.48685, 12, -1.99, -34.09999, 0.31174, 13, -75.99, -34.09999, 0.0485, 6, 8, 257, -34.09999, 0.00195, 9, 183, -34.09999, 0.04663, 10, 109, -34.09999, 0.31166, 11, 35, -34.09999, 0.48685, 12, -38.99, -34.09999, 0.14101, 13, -112.99, -34.09999, 0.01188, 7, 7, 294, -34.09999, 2.4E-4, 8, 220, -34.09999, 0.01163, 9, 146, -34.09999, 0.14101, 10, 72, -34.09999, 0.48685, 11, -1.99, -34.09999, 0.31166, 12, -75.99, -34.09999, 0.04663, 13, -149.99, -34.09999, 0.00195, 7, 7, 257, -34.09999, 0.00195, 8, 183, -34.09999, 0.04663, 9, 109, -34.09999, 0.31166, 10, 35, -34.09999, 0.48685, 11, -38.99, -34.09999, 0.14101, 12, -112.99, -34.09999, 0.01163, 13, -186.99, -34.09999, 2.4E-4, 7, 6, 294, -34.09999, 2.4E-4, 7, 220, -34.09999, 0.01163, 8, 146, -34.09999, 0.14101, 9, 72, -34.09999, 0.48685, 10, -1.99, -34.09999, 0.31166, 11, -75.99, -34.09999, 0.04663, 12, -149.99, -34.09999, 0.00195, 7, 6, 257, -34.09999, 0.00195, 7, 183, -34.09999, 0.04663, 8, 109, -34.09999, 0.31166, 9, 35, -34.09999, 0.48685, 10, -38.99, -34.09999, 0.14101, 11, -112.99, -34.09999, 0.01163, 12, -186.99, -34.09999, 2.4E-4, 7, 5, 294, -34.09999, 2.4E-4, 6, 220, -34.09999, 0.01163, 7, 146, -34.09999, 0.14101, 8, 72, -34.09999, 0.48685, 9, -1.99, -34.09999, 0.31166, 10, -75.99, -34.09999, 0.04663, 11, -149.99, -34.09999, 0.00195, 7, 5, 257, -34.09999, 0.00195, 6, 183, -34.09999, 0.04663, 7, 109, -34.09999, 0.31166, 8, 35, -34.09999, 0.48685, 9, -38.99, -34.09999, 0.14101, 10, -112.99, -34.09999, 0.01163, 11, -186.99, -34.09999, 2.4E-4, 7, 4, 294, -34.09999, 2.4E-4, 5, 220, -34.09999, 0.01163, 6, 146, -34.09999, 0.14101, 7, 72, -34.09999, 0.48685, 8, -1.99, -34.09999, 0.31166, 9, -75.99, -34.09999, 0.04663, 10, -149.99, -34.09999, 0.00195, 7, 4, 257, -34.09999, 0.00195, 5, 183, -34.09999, 0.04663, 6, 109, -34.09999, 0.31166, 7, 35, -34.09999, 0.48685, 8, -38.99, -34.09999, 0.14101, 9, -112.99, -34.09999, 0.01163, 10, -186.99, -34.09999, 2.4E-4, 7, 3, 294, -34.09999, 2.4E-4, 4, 220, -34.09999, 0.01163, 5, 146, -34.09999, 0.14101, 6, 72, -34.09999, 0.48685, 7, -1.99, -34.09999, 0.31166, 8, -75.99, -34.09999, 0.04663, 9, -149.99, -34.09999, 0.00195, 7, 3, 257, -34.09999, 0.00195, 4, 183, -34.09999, 0.04663, 5, 109, -34.09999, 0.31166, 6, 35, -34.09999, 0.48685, 7, -38.99, -34.09999, 0.14101, 8, -112.99, -34.09999, 0.01163, 9, -186.99, -34.09999, 2.4E-4, 7, 2, 294, -34.09999, 2.4E-4, 3, 220, -34.09999, 0.01163, 4, 146, -34.09999, 0.14101, 5, 72, -34.09999, 0.48685, 6, -1.99, -34.09999, 0.31166, 7, -75.99, -34.09999, 0.04663, 8, -149.99, -34.09999, 0.00195, 7, 2, 257, -34.09999, 0.00195, 3, 183, -34.09999, 0.04663, 4, 109, -34.09999, 0.31166, 5, 35, -34.09999, 0.48685, 6, -38.99, -34.09999, 0.14101, 7, -112.99, -34.09999, 0.01163, 8, -186.99, -34.09999, 2.4E-4, 7, 1, 294, -34.09999, 2.4E-4, 2, 220, -34.09999, 0.01163, 3, 146, -34.09999, 0.14101, 4, 72, -34.09999, 0.48685, 5, -1.99, -34.09999, 0.31166, 6, -75.99, -34.09999, 0.04663, 7, -149.99, -34.09999, 0.00195, 7, 1, 257, -34.09999, 0.0017, 2, 183, -34.09999, 0.04687, 3, 109, -34.09999, 0.31166, 4, 35, -34.09999, 0.48685, 5, -38.99, -34.09999, 0.14101, 6, -112.99, -34.09999, 0.01163, 7, -186.99, -34.09999, 2.4E-4, 6, 1, 220, -34.09999, 0.01033, 2, 146, -34.09999, 0.14256, 3, 72, -34.09999, 0.48685, 4, -1.99, -34.09999, 0.31166, 5, -75.99, -34.09999, 0.04663, 6, -149.99, -34.09999, 0.00195, 6, 1, 183, -34.09999, 0.04058, 2, 109, -34.09999, 0.31966, 3, 35, -34.09999, 0.48685, 4, -38.99, -34.09999, 0.14101, 5, -112.99, -34.09999, 0.01163, 6, -186.99, -34.09999, 2.4E-4, 5, 1, 146, -34.09999, 0.1274, 2, 72, -34.09999, 0.51233, 3, -1.99, -34.09999, 0.31166, 4, -75.99, -34.09999, 0.04663, 5, -149.99, -34.09999, 0.00195, 5, 1, 109, -34.09999, 0.30116, 2, 35, -34.09999, 0.54594, 3, -38.99, -34.09999, 0.14101, 4, -112.99, -34.09999, 0.01163, 5, -186.99, -34.09999, 2.4E-4, 4, 1, 72, -34.09999, 0.55403, 2, -1.99, -34.09999, 0.39738, 3, -75.99, -34.09999, 0.04663, 4, -149.99, -34.09999, 0.00195, 4, 1, 35, -34.09999, 0.77978, 2, -38.99, -34.09999, 0.20825, 3, -112.99, -34.09999, 0.01171, 4, -186.99, -34.09999, 2.4E-4, 3, 1, -1.99, -34.09999, 0.89032, 2, -75.99, -34.09999, 0.10696, 3, -149.99, -34.09999, 0.00271, 3, 1, -1.99, -0.1, 0.9264, 2, -75.99, -0.1, 0.07272, 3, -149.99, -0.1, 8.6E-4, 3, 1, -1.99, 33.89, 0.89032, 2, -75.99, 33.89, 0.10696, 3, -149.99, 33.89, 0.00271, 4, 1, 35, 33.89, 0.77978, 2, -38.99, 33.89, 0.20825, 3, -112.99, 33.89, 0.01171, 4, -186.99, 33.89, 2.4E-4, 4, 1, 72, 33.89, 0.55403, 2, -1.99, 33.89, 0.39738, 3, -75.99, 33.89, 0.04663, 4, -149.99, 33.89, 0.00195, 5, 1, 109, 33.89, 0.30116, 2, 35, 33.89, 0.54594, 3, -38.99, 33.89, 0.14101, 4, -112.99, 33.89, 0.01163, 5, -186.99, 33.89, 2.4E-4, 5, 1, 146, 33.89, 0.1274, 2, 72, 33.89, 0.51233, 3, -1.99, 33.89, 0.31166, 4, -75.99, 33.89, 0.04663, 5, -149.99, 33.89, 0.00195, 6, 1, 183, 33.89, 0.04058, 2, 109, 33.89, 0.31966, 3, 35, 33.89, 0.48685, 4, -38.99, 33.89, 0.14101, 5, -112.99, 33.89, 0.01163, 6, -186.99, 33.89, 2.4E-4, 6, 1, 220, 33.89, 0.01033, 2, 146, 33.89, 0.14256, 3, 72, 33.89, 0.48685, 4, -1.99, 33.89, 0.31166, 5, -75.99, 33.89, 0.04663, 6, -149.99, 33.89, 0.00195, 7, 1, 257, 33.89, 0.0017, 2, 183, 33.89, 0.04687, 3, 109, 33.89, 0.31166, 4, 35, 33.89, 0.48685, 5, -38.99, 33.89, 0.14101, 6, -112.99, 33.89, 0.01163, 7, -186.99, 33.89, 2.4E-4, 7, 1, 294, 33.89, 2.4E-4, 2, 220, 33.89, 0.01163, 3, 146, 33.89, 0.14101, 4, 72, 33.89, 0.48685, 5, -1.99, 33.89, 0.31166, 6, -75.99, 33.89, 0.04663, 7, -149.99, 33.89, 0.00195, 7, 2, 257, 33.89, 0.00195, 3, 183, 33.89, 0.04663, 4, 109, 33.89, 0.31166, 5, 35, 33.89, 0.48685, 6, -38.99, 33.89, 0.14101, 7, -112.99, 33.89, 0.01163, 8, -186.99, 33.89, 2.4E-4, 7, 2, 294, 33.89, 2.4E-4, 3, 220, 33.89, 0.01163, 4, 146, 33.89, 0.14101, 5, 72, 33.89, 0.48685, 6, -1.99, 33.89, 0.31166, 7, -75.99, 33.89, 0.04663, 8, -149.99, 33.89, 0.00195, 7, 3, 257, 33.89, 0.00195, 4, 183, 33.89, 0.04663, 5, 109, 33.89, 0.31166, 6, 35, 33.89, 0.48685, 7, -38.99, 33.89, 0.14101, 8, -112.99, 33.89, 0.01163, 9, -186.99, 33.89, 2.4E-4, 7, 3, 294, 33.89, 2.4E-4, 4, 220, 33.89, 0.01163, 5, 146, 33.89, 0.14101, 6, 72, 33.89, 0.48685, 7, -1.99, 33.89, 0.31166, 8, -75.99, 33.89, 0.04663, 9, -149.99, 33.89, 0.00195, 7, 4, 257, 33.89, 0.00195, 5, 183, 33.89, 0.04663, 6, 109, 33.89, 0.31166, 7, 35, 33.89, 0.48685, 8, -38.99, 33.89, 0.14101, 9, -112.99, 33.89, 0.01163, 10, -186.99, 33.89, 2.4E-4, 7, 4, 294, 33.89, 2.4E-4, 5, 220, 33.89, 0.01163, 6, 146, 33.89, 0.14101, 7, 72, 33.89, 0.48685, 8, -1.99, 33.89, 0.31166, 9, -75.99, 33.89, 0.04663, 10, -149.99, 33.89, 0.00195, 7, 5, 257, 33.89, 0.00195, 6, 183, 33.89, 0.04663, 7, 109, 33.89, 0.31166, 8, 35, 33.89, 0.48685, 9, -38.99, 33.89, 0.14101, 10, -112.99, 33.89, 0.01163, 11, -186.99, 33.89, 2.4E-4, 7, 5, 294, 33.89, 2.4E-4, 6, 220, 33.89, 0.01163, 7, 146, 33.89, 0.14101, 8, 72, 33.89, 0.48685, 9, -1.99, 33.89, 0.31166, 10, -75.99, 33.89, 0.04663, 11, -149.99, 33.89, 0.00195, 7, 6, 257, 33.89, 0.00195, 7, 183, 33.89, 0.04663, 8, 109, 33.89, 0.31166, 9, 35, 33.89, 0.48685, 10, -38.99, 33.89, 0.14101, 11, -112.99, 33.89, 0.01163, 12, -186.99, 33.89, 2.4E-4, 7, 6, 294, 33.89, 2.4E-4, 7, 220, 33.89, 0.01163, 8, 146, 33.89, 0.14101, 9, 72, 33.89, 0.48685, 10, -1.99, 33.89, 0.31166, 11, -75.99, 33.89, 0.04663, 12, -149.99, 33.89, 0.00195, 7, 7, 257, 33.89, 0.00195, 8, 183, 33.89, 0.04663, 9, 109, 33.89, 0.31166, 10, 35, 33.89, 0.48685, 11, -38.99, 33.89, 0.14101, 12, -112.99, 33.89, 0.01163, 13, -186.99, 33.89, 2.4E-4, 7, 7, 294, 33.89, 2.4E-4, 8, 220, 33.89, 0.01163, 9, 146, 33.89, 0.14101, 10, 72, 33.89, 0.48685, 11, -1.99, 33.89, 0.31166, 12, -75.99, 33.89, 0.04663, 13, -149.99, 33.89, 0.00195, 6, 8, 257, 33.89, 0.00195, 9, 183, 33.89, 0.04663, 10, 109, 33.89, 0.31166, 11, 35, 33.89, 0.48685, 12, -38.99, 33.89, 0.14101, 13, -112.99, 33.89, 0.01188, 6, 8, 294, 33.89, 2.4E-4, 9, 220, 33.89, 0.01163, 10, 146, 33.89, 0.14101, 11, 72, 33.89, 0.48685, 12, -1.99, 33.89, 0.31174, 13, -75.99, 33.89, 0.0485, 5, 9, 257, 33.89, 0.00195, 10, 183, 33.89, 0.04663, 11, 109, 33.89, 0.31166, 12, 35, 33.89, 0.48761, 13, -38.99, 33.89, 0.15212, 5, 9, 294, 33.89, 2.4E-4, 10, 220, 33.89, 0.01163, 11, 146, 33.89, 0.14109, 12, 72, 33.89, 0.49171, 13, -1.99, 33.89, 0.35531, 4, 10, 257, 33.89, 0.00195, 11, 183, 33.89, 0.04739, 12, 109, 33.89, 0.33351, 13, 35, 33.89, 0.61714, 4, 10, 257, -0.1, 6.5E-4, 11, 183, -0.1, 0.03067, 12, 109, -0.1, 0.31658, 13, 35, -0.1, 0.65209, 4, 10, 220, -0.1, 0.00542, 11, 146, -0.1, 0.11402, 12, 72, -0.1, 0.5478, 13, -1.99, -0.1, 0.33273, 5, 9, 257, -0.1, 6.5E-4, 10, 183, -0.1, 0.03045, 11, 109, -0.1, 0.30373, 12, 35, -0.1, 0.54592, 13, -38.99, -0.1, 0.11923, 5, 9, 220, -0.1, 0.00542, 10, 146, -0.1, 0.11402, 11, 72, -0.1, 0.5457, 12, -1.99, -0.1, 0.30373, 13, -75.99, -0.1, 0.0311, 6, 8, 257, -0.1, 6.5E-4, 9, 183, -0.1, 0.03045, 10, 109, -0.1, 0.30373, 11, 35, -0.1, 0.5457, 12, -38.99, -0.1, 0.11402, 13, -112.99, -0.1, 0.00542, 6, 8, 220, -0.1, 0.00542, 9, 146, -0.1, 0.11402, 10, 72, -0.1, 0.5457, 11, -1.99, -0.1, 0.30373, 12, -75.99, -0.1, 0.03045, 13, -149.99, -0.1, 6.5E-4, 6, 7, 257, -0.1, 6.5E-4, 8, 183, -0.1, 0.03045, 9, 109, -0.1, 0.30373, 10, 35, -0.1, 0.5457, 11, -38.99, -0.1, 0.11402, 12, -112.99, -0.1, 0.00542, 6, 7, 220, -0.1, 0.00542, 8, 146, -0.1, 0.11402, 9, 72, -0.1, 0.5457, 10, -1.99, -0.1, 0.30373, 11, -75.99, -0.1, 0.03045, 12, -149.99, -0.1, 6.5E-4, 6, 6, 257, -0.1, 6.5E-4, 7, 183, -0.1, 0.03045, 8, 109, -0.1, 0.30373, 9, 35, -0.1, 0.5457, 10, -38.99, -0.1, 0.11402, 11, -112.99, -0.1, 0.00542, 6, 6, 220, -0.1, 0.00542, 7, 146, -0.1, 0.11402, 8, 72, -0.1, 0.5457, 9, -1.99, -0.1, 0.30373, 10, -75.99, -0.1, 0.03045, 11, -149.99, -0.1, 6.5E-4, 6, 5, 257, -0.1, 6.5E-4, 6, 183, -0.1, 0.03045, 7, 109, -0.1, 0.30373, 8, 35, -0.1, 0.5457, 9, -38.99, -0.1, 0.11402, 10, -112.99, -0.1, 0.00542, 6, 5, 220, -0.1, 0.00542, 6, 146, -0.1, 0.11402, 7, 72, -0.1, 0.5457, 8, -1.99, -0.1, 0.30373, 9, -75.99, -0.1, 0.03045, 10, -149.99, -0.1, 6.5E-4, 6, 4, 257, -0.1, 6.5E-4, 5, 183, -0.1, 0.03045, 6, 109, -0.1, 0.30373, 7, 35, -0.1, 0.5457, 8, -38.99, -0.1, 0.11402, 9, -112.99, -0.1, 0.00542, 6, 4, 220, -0.1, 0.00542, 5, 146, -0.1, 0.11402, 6, 72, -0.1, 0.5457, 7, -1.99, -0.1, 0.30373, 8, -75.99, -0.1, 0.03045, 9, -149.99, -0.1, 6.5E-4, 6, 3, 257, -0.1, 6.5E-4, 4, 183, -0.1, 0.03045, 5, 109, -0.1, 0.30373, 6, 35, -0.1, 0.5457, 7, -38.99, -0.1, 0.11402, 8, -112.99, -0.1, 0.00542, 6, 3, 220, -0.1, 0.00542, 4, 146, -0.1, 0.11402, 5, 72, -0.1, 0.5457, 6, -1.99, -0.1, 0.30373, 7, -75.99, -0.1, 0.03045, 8, -149.99, -0.1, 6.5E-4, 6, 2, 257, -0.1, 6.5E-4, 3, 183, -0.1, 0.03045, 4, 109, -0.1, 0.30373, 5, 35, -0.1, 0.5457, 6, -38.99, -0.1, 0.11402, 7, -112.99, -0.1, 0.00542, 6, 2, 220, -0.1, 0.00542, 3, 146, -0.1, 0.11402, 4, 72, -0.1, 0.5457, 5, -1.99, -0.1, 0.30373, 6, -75.99, -0.1, 0.03045, 7, -149.99, -0.1, 6.5E-4, 6, 1, 257, -0.1, 6.5E-4, 2, 183, -0.1, 0.03045, 3, 109, -0.1, 0.30373, 4, 35, -0.1, 0.5457, 5, -38.99, -0.1, 0.11402, 6, -112.99, -0.1, 0.00542, 6, 1, 220, -0.1, 0.00477, 2, 146, -0.1, 0.11467, 3, 72, -0.1, 0.5457, 4, -1.99, -0.1, 0.30373, 5, -75.99, -0.1, 0.03045, 6, -149.99, -0.1, 6.5E-4, 5, 1, 183, -0.1, 0.02676, 2, 109, -0.1, 0.30807, 3, 35, -0.1, 0.5457, 4, -38.99, -0.1, 0.11402, 5, -112.99, -0.1, 0.00542, 5, 1, 146, -0.1, 0.09905, 2, 72, -0.1, 0.5661, 3, -1.99, -0.1, 0.30373, 4, -75.99, -0.1, 0.03045, 5, -149.99, -0.1, 6.5E-4, 4, 1, 109, -0.1, 0.27658, 2, 35, -0.1, 0.60395, 3, -38.99, -0.1, 0.11402, 4, -112.99, -0.1, 0.00542, 4, 1, 72, -0.1, 0.55929, 2, -1.99, -0.1, 0.40959, 3, -75.99, -0.1, 0.03045, 4, -149.99, -0.1, 6.5E-4, 3, 1, 35, -0.1, 0.81845, 2, -38.99, -0.1, 0.17611, 3, -112.99, -0.1, 0.00542 ], + "hull": 56, + "edges": [ 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, 60, 62, 62, 64, 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, 106, 106, 108, 108, 110, 110, 0, 0, 2, 58, 60, 2, 4, 56, 58, 62, 160, 160, 54, 64, 158, 158, 52, 66, 156, 156, 50, 68, 154, 154, 48, 46, 152, 152, 70, 72, 150, 150, 44, 42, 148, 148, 74, 76, 146, 146, 40, 38, 144, 144, 78, 80, 142, 142, 36, 34, 140, 140, 82, 84, 138, 138, 32, 30, 136, 136, 86, 88, 134, 134, 28, 26, 132, 132, 90, 92, 130, 130, 24, 22, 128, 128, 94, 96, 126, 126, 20, 18, 124, 124, 98, 100, 122, 122, 16, 14, 120, 120, 102, 12, 118, 118, 104, 106, 116, 116, 10, 8, 114, 114, 108, 110, 112, 112, 6 ], + "width": 68, + "height": 962 + } + }, + "vine-path": { + "vine-path": { + "type": "path", + "lengths": [ 223.68, 474.79, 780.31, 992.69, 1196.42, 2277.75 ], + "vertexCount": 18, + "vertices": [ 1, 14, -31.64, 22.49, 1, 1, 14, -2.73, -6.56, 1, 1, 14, 56.89, -69, 1, 1, 14, 115.57, 75.01, 1, 1, 14, 198.6, 53.37, 1, 2, 14, 332.76, 19.74, 0.8, 15, 36.41, 19.12999, 0.19999, 2, 14, 276.72, -68.37, 0.232, 15, -21.1, -68.01999, 0.76799, 1, 15, 96.09, -93.88, 1, 2, 15, 229.75, -122.63, 0.664, 16, -63.18, -122.45, 0.33599, 2, 15, 242.53, 29.31, 0.52, 16, -49.97, 29.45, 0.47999, 1, 16, 66.72, 38.65, 1, 2, 16, 183.42, 47.85, 0.80799, 17, -63.65, 48.41, 0.192, 2, 16, 177.29, -41.22, 0.77599, 17, -70.56, -40.61, 0.224, 2, 16, 265.5, -16.18, 0.488, 17, 17.86, -16.34, 0.51199, 2, 16, 343.25, 7.25, 0.21599, 17, 95.81, 6.41, 0.784, 1, 17, 138.78, 45.72, 1, 1, 17, 212.86, 5.44, 1, 1, 14, 1094.34, -1.02, 1 ] + } + } + } +}, +"animations": { + "animation": { + "slots": { + "vine": { + "color": [ + { + "time": 0, + "color": "ffcb73ff", + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 10.3666, "color": "fefaffff" } + ] + } + }, + "bones": { + "vine1": { + "scale": [ + { + "time": 0, + "x": 1, + "y": 0.183, + "curve": [ 0.166, 0.22, 0.598, 0.99 ] + }, + { + "time": 3.6333, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 11.4333, "x": 1, "y": 1.438 } + ] + }, + "vine-control1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 2.86, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.7, + "angle": -0.13, + "curve": [ 0.505, 0, 0.75, 1 ] + }, + { + "time": 6.4333, + "angle": 0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 9.6, "angle": 0.68 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.3333, + "x": 1, + "y": 0.792, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 7.6, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.568, 0.99 ] + }, + { "time": 11.4333, "x": 1, "y": 0.636 } + ] + }, + "vine-control2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 2.86, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.7, + "angle": -0.13, + "curve": [ 0.505, 0, 0.75, 1 ] + }, + { + "time": 6.4333, + "angle": 0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 9.6, "angle": 0.68 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.3333, + "x": 1, + "y": 0.791, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 7.6, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 11.4333, "x": 1, "y": 0.923 } + ] + }, + "vine-control3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 10.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.7, + "angle": -11.18, + "curve": [ 0.505, 0, 0.75, 1 ] + }, + { + "time": 6.4333, + "angle": -0.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 9.6, "angle": -5.23 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.3333, + "x": 1, + "y": 0.791, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 7.6, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 11.4333, "x": 1, "y": 0.923 } + ] + }, + "vine-control4": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 10.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.7, + "angle": -11.18, + "curve": [ 0.505, 0, 0.75, 1 ] + }, + { + "time": 6.4333, + "angle": 7.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 9.6, "angle": 2.71 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.3333, + "x": 1, + "y": 0.791, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 7.6, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 11.4333, "x": 1, "y": 0.923 } + ] + } + }, + "paths": { + "vine-path": { + "position": [ + { "time": 0, "position": -0.1 }, + { "time": 0.3333, "position": -0.025 } + ], + "spacing": [ + { "time": 0, "spacing": -100 }, + { + "time": 0.3333, + "spacing": -71.8, + "curve": [ 0.32, 0.18, 0.624, 0.6 ] + }, + { + "time": 3.1333, + "spacing": -13.199, + "curve": [ 0.251, 0.5, 0.557, 0.98 ] + }, + { "time": 6.7333, "spacing": 20.9 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/examples/vine/export/vine.png b/examples/vine/export/vine.png new file mode 100644 index 000000000..15ad8b736 Binary files /dev/null and b/examples/vine/export/vine.png differ diff --git a/examples/vine/export/vine.skel b/examples/vine/export/vine.skel new file mode 100644 index 000000000..3b1baae0d Binary files /dev/null and b/examples/vine/export/vine.skel differ diff --git a/examples/vine/images/vine.png b/examples/vine/images/vine.png new file mode 100644 index 000000000..73b935148 Binary files /dev/null and b/examples/vine/images/vine.png differ diff --git a/examples/vine/license.txt b/examples/vine/license.txt new file mode 100644 index 000000000..d24b7af85 --- /dev/null +++ b/examples/vine/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2016, Esoteric Software + +The images in this project may be redistributed as long as they are accompanied +by this license file. The images may not be used for commercial use of any +kind. + +The project file is released into the public domain. It may be used as the basis +for derivative work. \ No newline at end of file diff --git a/examples/vine/vine.spine b/examples/vine/vine.spine new file mode 100644 index 000000000..d3f44273d Binary files /dev/null and b/examples/vine/vine.spine differ diff --git a/spine-as3/README.md b/spine-as3/README.md index 33b21559b..7c472452f 100644 --- a/spine-as3/README.md +++ b/spine-as3/README.md @@ -10,18 +10,32 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-as3 works with data exported from Spine 3.1.08. Updating spine-as3 to [v3.2](https://github.com/EsotericSoftware/spine-runtimes/issues/586) and [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. +spine-as3 works with data exported from the latest Spine version. spine-as3 supports all Spine features, including meshes. If using the `spine.flash` classes for rendering, meshes are not supported. spine-as3 does not yet support loading the binary format. -## Setup +## Usage +1. Create a new Flex or Adobe AIR project in your preferred IDE. +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. Add the sources from `spine-as3/spine-as3/src/` to your project -1. Download the Spine Runtimes source using [git](https://help.github.com/articles/set-up-git) or by downloading it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip). -1. Using [FDT](http://fdt.powerflasher.com/), import the spine-as3 project by choosing File -> Import -> Existing projects. For other IDEs you will need to create a new project and import the source. +## Example +The Spine AS3 example works on Windows, Linux and Mac OS X. This guide assumes you are using [FDT Free](http://fdt.powerflasher.com/) as your development environment. -Alternatively, the contents of the `spine-as3/src` directory can be copied into your project. +1. Download [FDT free](http://fdt.powerflasher.com/buy-download/) for your operating system. +3. Download and install Adobe Flash Player 22 with debugging support](https://www.adobe.com/support/flashplayer/debug_downloads.html#fp15) +2. Download the latest [Flex SDK](http://www.adobe.com/devnet/flex/flex-sdk-download.html). We assume it will be installed to some folder on your disk called `flex_sdk`. +3. Download the latest [Adobe AIR SDK](http://www.adobe.com/devnet/air/air-sdk-download.html) +4. Extract the AIR SDK contents, and copy them to your `flex_sdk` folder. This will replace the Adobe AIR version shipped with Flex. +5. Open FDT, go to `Preferences -> FDT -> Installed SDKs` +6. Click `Add` and browse to `flex_sdk` +7. Go to `File -> Import -> General -> Existing Projects into Workspace` +6. Browse to `spine-as3/`. You should see both the `spine-as3` and `spine-as3-example` project in the import dialog. Click `Finish` +8. Right click the `Main.as` file in `spine-as3-example/src/spine` in the FDT explorer and select `Debug As -> FDT SWF Application` + +**Note**: FDT Free does not allow project dependencies. If you modify the sources of `spine-as3`, you will have to compile the project to an `.swc` and place it in `spine-as3-example/libs`. ## Demos diff --git a/spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.core.prefs b/spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.core.prefs index f1f8e07dd..fe086a943 100644 --- a/spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.core.prefs +++ b/spine-as3/spine-as3-example/.settings/com.powerflasher.fdt.core.prefs @@ -3,6 +3,7 @@ com.powerflasher.fdt.core.CompilerArguments=-static-link-runtime-shared-librarie com.powerflasher.fdt.core.CompilerConstants=CONFIG\:\:AUTHOR\!"{user.name}"\nCONFIG\:\:DEBUG\!{debug} com.powerflasher.fdt.core.DefaultOutputFolder=bin com.powerflasher.fdt.core.DefaultPlayer=External_SWF_Viewer +com.powerflasher.fdt.core.IncludeTestResources=false com.powerflasher.fdt.core.Language=AS3 com.powerflasher.fdt.core.Manifests= com.powerflasher.fdt.core.PassClasspath=true @@ -13,7 +14,7 @@ com.powerflasher.fdt.core.PassManifests=true com.powerflasher.fdt.core.PassRsls=false com.powerflasher.fdt.core.PassSwcs=true com.powerflasher.fdt.core.PlatformType=WEB -com.powerflasher.fdt.core.PlayerVersion=11.1 +com.powerflasher.fdt.core.PlayerVersion=22.0 com.powerflasher.fdt.core.ProjectTypeHint=Web com.powerflasher.fdt.core.Runtime=Flash_Player com.powerflasher.fdt.core.SdkName=Flex 4.6.0 diff --git a/spine-as3/spine-as3-example/.settings/launch/spine-as3-example.launch b/spine-as3/spine-as3-example/.settings/launch/spine-as3-example.launch index 0423423fd..ef1cb5c89 100644 --- a/spine-as3/spine-as3-example/.settings/launch/spine-as3-example.launch +++ b/spine-as3/spine-as3-example/.settings/launch/spine-as3-example.launch @@ -13,7 +13,7 @@ - + diff --git a/spine-as3/spine-as3-example/lib/spine-as3.swc b/spine-as3/spine-as3-example/lib/spine-as3.swc index 9e90cbc9d..4b693db1b 100644 Binary files a/spine-as3/spine-as3-example/lib/spine-as3.swc and b/spine-as3/spine-as3-example/lib/spine-as3.swc differ diff --git a/spine-as3/spine-as3-example/src/goblins-mesh.png b/spine-as3/spine-as3-example/src/goblins-mesh.png deleted file mode 100644 index a3daf0010..000000000 Binary files a/spine-as3/spine-as3-example/src/goblins-mesh.png and /dev/null differ diff --git a/spine-as3/spine-as3-example/src/spine/Main.as b/spine-as3/spine-as3-example/src/spine/examples/Main.as similarity index 97% rename from spine-as3/spine-as3-example/src/spine/Main.as rename to spine-as3/spine-as3-example/src/spine/examples/Main.as index ad9edd32c..1ebfb48b5 100644 --- a/spine-as3/spine-as3-example/src/spine/Main.as +++ b/spine-as3/spine-as3-example/src/spine/examples/Main.as @@ -29,10 +29,11 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -package spine { +package spine.examples { import flash.display.Sprite; +import spine.*; import spine.animation.AnimationStateData; import spine.atlas.Atlas; import spine.attachments.AtlasAttachmentLoader; @@ -68,7 +69,7 @@ public class Main extends Sprite { skeleton.y = 560; skeleton.state.onStart.add(function (trackIndex:int) : void { - trace(trackIndex + " start: " + skeleton.state.getCurrent(trackIndex)); + trace(trackIndex + " fuu start: " + skeleton.state.getCurrent(trackIndex)); }); skeleton.state.onEnd.add(function (trackIndex:int) : void { trace(trackIndex + " end: " + skeleton.state.getCurrent(trackIndex)); diff --git a/spine-as3/spine-as3-example/src/spineboy.atlas b/spine-as3/spine-as3-example/src/spineboy.atlas index 19c0934b1..2454a1f47 100644 --- a/spine-as3/spine-as3-example/src/spineboy.atlas +++ b/spine-as3/spine-as3-example/src/spineboy.atlas @@ -1,194 +1,216 @@ spineboy.png +size: 1024,1024 format: RGBA8888 filter: Linear,Linear repeat: none eye_indifferent rotate: true - xy: 389, 5 - size: 56, 53 - orig: 56, 53 + xy: 648, 629 + size: 93, 89 + orig: 93, 89 offset: 0, 0 index: -1 eye_surprised - rotate: false - xy: 580, 34 - size: 56, 53 - orig: 56, 53 + rotate: true + xy: 233, 179 + size: 93, 89 + orig: 93, 89 offset: 0, 0 index: -1 front_bracer rotate: false - xy: 732, 85 - size: 35, 48 - orig: 35, 48 + xy: 245, 2 + size: 58, 80 + orig: 58, 80 offset: 0, 0 index: -1 front_fist_closed rotate: false - xy: 556, 91 - size: 45, 49 - orig: 45, 49 + xy: 168, 45 + size: 75, 82 + orig: 75, 82 offset: 0, 0 index: -1 front_fist_open rotate: false - xy: 668, 32 - size: 52, 52 - orig: 52, 52 + xy: 844, 646 + size: 86, 87 + orig: 86, 87 offset: 0, 0 index: -1 front_foot - rotate: false - xy: 924, 201 - size: 76, 41 - orig: 76, 41 + rotate: true + xy: 310, 326 + size: 126, 69 + orig: 126, 69 offset: 0, 0 index: -1 front_foot_bend1 - rotate: false - xy: 845, 200 - size: 77, 42 - orig: 77, 42 + rotate: true + xy: 951, 894 + size: 128, 70 + orig: 128, 70 offset: 0, 0 index: -1 front_foot_bend2 rotate: false - xy: 778, 186 - size: 65, 56 - orig: 65, 56 + xy: 2, 33 + size: 108, 93 + orig: 108, 93 offset: 0, 0 index: -1 front_shin rotate: true - xy: 444, 91 - size: 49, 110 - orig: 49, 110 + xy: 739, 735 + size: 82, 184 + orig: 82, 184 offset: 0, 0 index: -1 front_thigh - rotate: true - xy: 603, 89 - size: 29, 67 - orig: 29, 67 + rotate: false + xy: 381, 340 + size: 48, 112 + orig: 48, 112 offset: 0, 0 index: -1 front_upper_arm - rotate: true - xy: 672, 86 - size: 32, 58 - orig: 32, 58 + rotate: false + xy: 112, 29 + size: 54, 97 + orig: 54, 97 offset: 0, 0 index: -1 goggles rotate: false - xy: 444, 142 - size: 157, 100 - orig: 157, 100 + xy: 156, 454 + size: 261, 166 + orig: 261, 166 offset: 0, 0 index: -1 gun rotate: false - xy: 603, 120 - size: 126, 122 - orig: 126, 122 + xy: 739, 819 + size: 210, 203 + orig: 210, 203 offset: 0, 0 index: -1 head rotate: false - xy: 279, 63 - size: 163, 179 - orig: 163, 179 + 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: false - xy: 845, 163 - size: 56, 35 - orig: 56, 35 + rotate: true + xy: 951, 799 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 mouth_oooo - rotate: false - xy: 842, 126 - size: 56, 35 - orig: 56, 35 + rotate: true + xy: 245, 84 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 mouth_smile rotate: false - xy: 769, 97 - size: 56, 35 - orig: 56, 35 + xy: 925, 738 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 muzzle rotate: false - xy: 2, 2 - size: 275, 240 - orig: 277, 240 + xy: 2, 622 + size: 462, 400 + orig: 462, 400 offset: 0, 0 index: -1 neck rotate: false - xy: 903, 173 - size: 22, 25 - orig: 22, 25 + xy: 168, 2 + size: 36, 41 + orig: 36, 41 offset: 0, 0 index: -1 rear_bracer rotate: false - xy: 722, 40 - size: 34, 43 - orig: 34, 43 + xy: 932, 664 + size: 56, 72 + orig: 56, 72 offset: 0, 0 index: -1 rear_foot rotate: false - xy: 444, 11 - size: 68, 36 - orig: 68, 36 + xy: 487, 562 + size: 113, 60 + orig: 113, 60 offset: 0, 0 index: -1 rear_foot_bend1 - rotate: false - xy: 444, 49 - size: 70, 40 - orig: 70, 40 + rotate: true + xy: 419, 503 + size: 117, 66 + orig: 117, 66 offset: 0, 0 index: -1 rear_foot_bend2 rotate: false - xy: 778, 134 - size: 62, 50 - orig: 62, 50 + xy: 739, 650 + size: 103, 83 + orig: 103, 83 offset: 0, 0 index: -1 rear_shin rotate: false - xy: 731, 135 - size: 45, 107 - orig: 45, 107 + xy: 233, 274 + size: 75, 178 + orig: 75, 178 offset: 0, 0 index: -1 rear_thigh rotate: true - xy: 516, 50 - size: 39, 62 - orig: 39, 62 + xy: 487, 495 + size: 65, 104 + orig: 65, 104 offset: 0, 0 index: -1 rear_upper_arm - rotate: false - xy: 638, 35 - size: 28, 52 - orig: 28, 52 + rotate: true + xy: 156, 129 + size: 47, 87 + orig: 47, 87 offset: 0, 0 index: -1 torso rotate: true - xy: 279, 2 - size: 59, 108 - orig: 59, 108 + xy: 466, 624 + size: 98, 180 + orig: 98, 180 offset: 0, 0 index: -1 diff --git a/spine-as3/spine-as3-example/src/spineboy.json b/spine-as3/spine-as3-example/src/spineboy.json index 1bd1b64c1..e9e6e761b 100644 --- a/spine-as3/spine-as3-example/src/spineboy.json +++ b/spine-as3/spine-as3-example/src/spineboy.json @@ -1,39 +1,31 @@ { +"skeleton": { "hash": "rPoYyBLFG6F0CGZ5wsUEBKDJU9U", "spine": "3.4.00", "width": 0, "height": 0, "images": "./images/" }, "bones": [ { "name": "hip", "y": 247.47 }, - { "name": "front_thigh", "parent": "hip", "length": 74.8, "x": -17.45, "y": -11.64, "rotation": -95.51, "color": "00ff04ff" }, - { "name": "rear_thigh", "parent": "hip", "length": 85.71, "x": 8.91, "y": -5.62, "rotation": -72.54, "color": "ff000dff" }, - { "name": "torso", "parent": "hip", "length": 127.55, "x": -1.61, "y": 4.9, "rotation": 103.82, "color": "e0da19ff" }, - { - "name": "front_shin", - "parent": "front_thigh", - "length": 128.76, - "x": 78.69, - "y": 1.6, - "rotation": -2.21, - "inheritScale": false, - "color": "00ff04ff" - }, - { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "x": 103.75, "y": 19.32, "rotation": 168.37, "color": "00ff04ff" }, - { "name": "neck", "parent": "torso", "length": 25.45, "x": 127.49, "y": -0.3, "rotation": -31.53, "color": "e0da19ff" }, - { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "x": 86.1, "y": -1.32, "rotation": -19.83, "color": "ff000dff" }, - { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "x": 92.35, "y": -19.22, "rotation": -169.55, "color": "ff000dff" }, + { "name": "torso", "parent": "hip", "length": 127.55, "rotation": 103.82, "x": -1.61, "y": 4.9, "color": "e0da19ff" }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "rotation": 168.37, "x": 103.75, "y": 19.32, "color": "00ff04ff" }, { "name": "front_bracer", "parent": "front_upper_arm", "length": 40.57, + "rotation": 18.29, "x": 68.8, "y": -0.68, - "rotation": 18.29, "color": "00ff04ff" }, - { "name": "front_foot", "parent": "front_shin", "length": 91.34, "x": 128.75, "y": -0.33, "rotation": 77.9, "color": "00ff04ff" }, - { "name": "head", "parent": "neck", "length": 263.57, "x": 27.66, "y": -0.25, "rotation": 23.18, "color": "e0da19ff" }, - { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "x": 51.35, "rotation": 23.15, "color": "ff000dff" }, - { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "x": 121.45, "y": -0.75, "rotation": 69.3, "color": "ff000dff" }, - { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "x": 40.56, "y": 0.19, "rotation": 12.43, "color": "00ff04ff" }, - { "name": "gun", "parent": "rear_bracer", "length": 43.1, "x": 34.42, "y": -0.45, "rotation": 5.34, "color": "ff000dff" }, - { "name": "gunTip", "parent": "gun", "x": 201.04, "y": 52.13, "rotation": 6.83, "color": "ff000dff" } + { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "rotation": 12.43, "x": 40.56, "y": 0.19, "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.76, "rotation": -2.21, "x": 78.69, "y": 1.6, "color": "00ff04ff" }, + { "name": "front_foot", "parent": "front_shin", "length": 91.34, "rotation": 77.9, "x": 128.75, "y": -0.33, "color": "00ff04ff" }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -169.55, "x": 92.35, "y": -19.22, "color": "ff000dff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "rotation": 23.15, "x": 51.35, "color": "ff000dff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "rotation": 5.34, "x": 34.42, "y": -0.45, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.04, "y": 52.13, "color": "ff000dff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" }, + { "name": "head", "parent": "neck", "length": 263.57, "rotation": 23.18, "x": 27.66, "y": -0.25, "color": "e0da19ff" }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "rotation": -72.54, "x": 8.91, "y": -5.62, "color": "ff000dff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.83, "x": 86.1, "y": -1.32, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "rotation": 69.3, "x": 121.45, "y": -0.75, "color": "ff000dff" } ], "slots": [ { "name": "rear_upper_arm", "bone": "rear_upper_arm", "attachment": "rear_upper_arm" }, @@ -96,7 +88,8 @@ "head-bb": { "head": { "type": "boundingbox", - "vertices": [ -19.143097, -70.30209, 40.80313, -118.074234, 257.77155, -115.61827, 285.16193, 57.18005, 120.77191, 164.95125, -5.067627, 76.94907 ] + "vertexCount": 6, + "vertices": [ -19.14, -70.3, 40.8, -118.07, 257.77, -115.61, 285.16, 57.18, 120.77, 164.95, -5.06, 76.94 ] } }, "mouth": { @@ -1832,10 +1825,6 @@ ] }, "muzzle": { - "attachment": [ - { "time": 0.1333, "name": "muzzle" }, - { "time": 0.2666, "name": null } - ], "color": [ { "time": 0.1333, @@ -1848,6 +1837,10 @@ "curve": [ 0.821, 0, 0.909, 0.89 ] }, { "time": 0.2666, "color": "ffffff00" } + ], + "attachment": [ + { "time": 0.1333, "name": "muzzle" }, + { "time": 0.2666, "name": null } ] } }, @@ -2015,7 +2008,7 @@ ] } }, - "draworder": [ + "drawOrder": [ { "time": 0.6666, "offsets": [ diff --git a/spine-as3/spine-as3-example/src/spineboy.png b/spine-as3/spine-as3-example/src/spineboy.png index dce2fe3e2..2eae82219 100644 Binary files a/spine-as3/spine-as3-example/src/spineboy.png and b/spine-as3/spine-as3-example/src/spineboy.png differ diff --git a/spine-as3/spine-as3/.settings/com.powerflasher.fdt.classpath b/spine-as3/spine-as3/.settings/com.powerflasher.fdt.classpath index 7e38cfa95..02f907113 100644 --- a/spine-as3/spine-as3/.settings/com.powerflasher.fdt.classpath +++ b/spine-as3/spine-as3/.settings/com.powerflasher.fdt.classpath @@ -1,5 +1,9 @@ - frameworks/libs/player/{playerVersion}/playerglobal.swc src + frameworks/libs/player/{playerVersion}/playerglobal.swc + frameworks/libs/textLayout.swc + frameworks/libs/osmf.swc + frameworks/libs/authoringsupport.swc + frameworks/libs/core.swc diff --git a/spine-as3/spine-as3/.settings/com.powerflasher.fdt.core.prefs b/spine-as3/spine-as3/.settings/com.powerflasher.fdt.core.prefs index 150a7ff6b..9133446bf 100644 --- a/spine-as3/spine-as3/.settings/com.powerflasher.fdt.core.prefs +++ b/spine-as3/spine-as3/.settings/com.powerflasher.fdt.core.prefs @@ -3,6 +3,7 @@ com.powerflasher.fdt.core.CompilerArguments=-static-link-runtime-shared-librarie com.powerflasher.fdt.core.CompilerConstants=CONFIG\:\:AUTHOR\!"{user.name}"\nCONFIG\:\:DEBUG\!{debug} com.powerflasher.fdt.core.DefaultOutputFolder=bin com.powerflasher.fdt.core.DefaultPlayer=External_SWF_Viewer +com.powerflasher.fdt.core.IncludeTestResources=false com.powerflasher.fdt.core.Language=AS3 com.powerflasher.fdt.core.Manifests= com.powerflasher.fdt.core.PassClasspath=true @@ -13,7 +14,7 @@ com.powerflasher.fdt.core.PassManifests=true com.powerflasher.fdt.core.PassRsls=false com.powerflasher.fdt.core.PassSwcs=true com.powerflasher.fdt.core.PlatformType=WEB -com.powerflasher.fdt.core.PlayerVersion=11.1 +com.powerflasher.fdt.core.PlayerVersion=22.0 com.powerflasher.fdt.core.ProjectTypeHint=Web com.powerflasher.fdt.core.Runtime=Flash_Player com.powerflasher.fdt.core.SdkName=Flex 4.6.0 diff --git a/spine-as3/spine-as3/.settings/com.powerflasher.fdt.exclude b/spine-as3/spine-as3/.settings/com.powerflasher.fdt.exclude new file mode 100644 index 000000000..2391d8c0d --- /dev/null +++ b/spine-as3/spine-as3/.settings/com.powerflasher.fdt.exclude @@ -0,0 +1,13 @@ + + + frameworks/libs/air/aircore.swc + frameworks/libs/air/airglobal.swc + frameworks/libs/air/applicationupdater.swc + frameworks/libs/air/applicationupdater_ui.swc + frameworks/libs/air/servicemonitor.swc + frameworks/libs/authoringsupport.swc + frameworks/libs/core.swc + frameworks/libs/osmf.swc + frameworks/libs/textLayout.swc + + diff --git a/spine-as3/spine-as3/src/spine/Bone.as b/spine-as3/spine-as3/src/spine/Bone.as index 9e70baa93..c5cc50db2 100644 --- a/spine-as3/spine-as3/src/spine/Bone.as +++ b/spine-as3/spine-as3/src/spine/Bone.as @@ -37,14 +37,15 @@ public class Bone implements Updatable { internal var _data:BoneData; internal var _skeleton:Skeleton; internal var _parent:Bone; + internal var _children:Vector. = new Vector.(); public var x:Number; public var y:Number; public var rotation:Number; public var scaleX:Number; public var scaleY:Number; - public var appliedRotation:Number; - public var appliedScaleX:Number; - public var appliedScaleY:Number; + public var shearX:Number; + public var shearY:Number; + public var appliedRotation:Number; internal var _a:Number; internal var _b:Number; @@ -54,6 +55,8 @@ public class Bone implements Updatable { internal var _worldY:Number; internal var _worldSignX:Number; internal var _worldSignY:Number; + + internal var _sorted:Boolean; /** @param parent May be null. */ public function Bone (data:BoneData, skeleton:Skeleton, parent:Bone) { @@ -64,26 +67,25 @@ public class Bone implements Updatable { _parent = parent; setToSetupPose(); } + + /** Same as updateWorldTransform(). This method exists for Bone to implement Updatable. */ + public function update () : void { + updateWorldTransformWith(x, y, rotation, scaleX, scaleY, shearX, shearY); + } /** Computes the world SRT using the parent bone and this bone's local SRT. */ public function updateWorldTransform () : void { - updateWorldTransformWith(x, y, rotation, scaleX, scaleY); - } - - /** Same as updateWorldTransform(). This method exists for Bone to implement Updatable. */ - public function update () : void { - updateWorldTransformWith(x, y, rotation, scaleX, scaleY); + updateWorldTransformWith(x, y, rotation, scaleX, scaleY, shearX, shearY); } /** Computes the world SRT using the parent bone and the specified local SRT. */ - public function updateWorldTransformWith (x:Number, y:Number, rotation:Number, scaleX:Number, scaleY:Number) : void { + public function updateWorldTransformWith (x:Number, y:Number, rotation:Number, scaleX:Number, scaleY:Number, shearX:Number, shearY:Number) : void { appliedRotation = rotation; - appliedScaleX = scaleX; - appliedScaleY = scaleY; - var radians:Number = rotation * MathUtils.degRad; - var cos:Number = Math.cos(radians), sin:Number = Math.sin(radians); - var la:Number = cos * scaleX, lb:Number = -sin * scaleY, lc:Number = sin * scaleX, ld:Number = cos * scaleY; + var rotationY:Number = rotation + 90 + shearY; + var la:Number = MathUtils.cosDeg(rotation + shearX) * scaleX, lb:Number = MathUtils.cosDeg(rotationY) * scaleY; + var lc:Number = MathUtils.sinDeg(rotation + shearX) * scaleX, ld:Number = MathUtils.sinDeg(rotationY) * scaleY; + var parent:Bone = _parent; if (!parent) { // Root bone. var skeleton:Skeleton = _skeleton; @@ -126,15 +128,13 @@ public class Bone implements Updatable { pc = 0; pd = 1; do { - radians = parent.appliedRotation * MathUtils.degRad; - cos = Math.cos(radians); - sin = Math.sin(radians); - var temp1:Number = pa * cos + pb * sin; - pb = pa * -sin + pb * cos; - pa = temp1; - temp1 = pc * cos + pd * sin; - pd = pc * -sin + pd * cos; - pc = temp1; + var cos:Number = MathUtils.cosDeg(parent.appliedRotation), sin:Number = MathUtils.sinDeg(parent.appliedRotation); + var temp:Number = pa * cos + pb * sin; + pb = pb * cos - pa * sin; + pa = temp; + temp = pc * cos + pd * sin; + pd = pd * cos - pc * sin; + pc = temp; if (!parent.data.inheritRotation) break; parent = parent.parent; @@ -149,27 +149,23 @@ public class Bone implements Updatable { pc = 0; pd = 1; do { - radians = parent.rotation * MathUtils.degRad; - cos = Math.cos(radians); - sin = Math.sin(radians); - var psx:Number = parent.appliedScaleX, psy:Number = parent.appliedScaleY; - var za:Number = cos * psx, zb:Number = -sin * psy, zc:Number = sin * psx, zd:Number = cos * psy; - var temp2:Number = pa * za + pb * zc; - pb = pa * zb + pb * zd; - pa = temp2; - temp2 = pc * za + pd * zc; - pd = pc * zb + pd * zd; - pc = temp2; - - if (psx < 0) radians = -radians; - cos = Math.cos(-radians); - sin = Math.sin(-radians); - temp2 = pa * cos + pb * sin; - pb = pa * -sin + pb * cos; - pa = temp2; - temp2 = pc * cos + pd * sin; - pd = pc * -sin + pd * cos; - pc = temp2; + cos = MathUtils.cosDeg(parent.appliedRotation), sin = MathUtils.sinDeg(parent.appliedRotation); + var psx:Number = parent.scaleX, psy:Number = parent.scaleY; + var za:Number = cos * psx, zb:Number = sin * psy, zc:Number = sin * psx, zd:Number = cos * psy; + temp = pa * za + pb * zc; + pb = pb * zd - pa * zb; + pa = temp; + temp = pc * za + pd * zc; + pd = pd * zd - pc * zb; + pc = temp; + + if (psx >= 0) sin = -sin; + temp = pa * cos + pb * sin; + pb = pb * cos - pa * sin; + pa = temp; + temp = pc * cos + pd * sin; + pd = pd * cos - pc * sin; + pc = temp; if (!parent.data.inheritScale) break; parent = parent.parent; @@ -201,18 +197,24 @@ public class Bone implements Updatable { rotation = _data.rotation; scaleX = _data.scaleX; scaleY = _data.scaleY; + shearX = _data.shearX; + shearY = _data.shearY; } public function get data () : BoneData { return _data; } + public function get skeleton () : Skeleton { + return _skeleton; + } + public function get parent () : Bone { return _parent; } - public function get skeleton () : Skeleton { - return _skeleton; + public function get children () : Vector. {; + return _children; } public function get a () : Number { @@ -262,11 +264,81 @@ public class Bone implements Updatable { public function get worldScaleY () : Number { return Math.sqrt(_c * _c + _d * _d) * _worldSignY; } + + public function worldToLocalRotationX () : Number { + var parent:Bone = _parent; + if (parent == null) return rotation; + var pa:Number = parent.a, pb:Number = parent.b, pc:Number = parent.c, pd:Number = parent.d, a:Number = this.a, c:Number = this.c; + return Math.atan2(pa * c - pc * a, pd * a - pb * c) * MathUtils.radDeg; + } + + public function worldToLocalRotationY () : Number { + var parent:Bone = _parent; + if (parent == null) return rotation; + var pa:Number = parent.a, pb:Number = parent.b, pc:Number = parent.c, pd:Number = parent.d, b:Number = this.b, d:Number = this.d; + return Math.atan2(pa * d - pc * b, pd * b - pb * d) * MathUtils.radDeg; + } + + public function rotateWorld (degrees:Number) : void { + var a:Number = this.a, b:Number = this.b, c:Number = this.c, d:Number = this.d; + var cos:Number = MathUtils.cosDeg(degrees), sin:Number = MathUtils.sinDeg(degrees); + this._a = cos * a - sin * c; + this._b = cos * b - sin * d; + this._c = sin * a + cos * c; + this._d = sin * b + cos * d; + } + + /** Computes the local transform from the world transform. This can be useful to perform processing on the local transform + * after the world transform has been modified directly (eg, by a constraint). + *

+ * Some redundant information is lost by the world transform, such as -1,-1 scale versus 180 rotation. The computed local + * transform values may differ from the original values but are functionally the same. */ + public function updateLocalTransform () : void { + var parent:Bone = this.parent; + if (parent == null) { + x = worldX; + y = worldY; + rotation = Math.atan2(c, a) * MathUtils.radDeg; + scaleX = Math.sqrt(a * a + c * c); + scaleY = Math.sqrt(b * b + d * d); + var det:Number = a * d - b * c; + shearX = 0; + shearY = Math.atan2(a * b + c * d, det) * MathUtils.radDeg; + return; + } + var pa:Number = parent.a, pb:Number = parent.b, pc:Number = parent.c, pd:Number = parent.d; + var pid:Number = 1 / (pa * pd - pb * pc); + var dx:Number = worldX - parent.worldX, dy:Number = worldY - parent.worldY; + x = (dx * pd * pid - dy * pb * pid); + y = (dy * pa * pid - dx * pc * pid); + var ia:Number = pid * pd; + var id:Number = pid * pa; + var ib:Number = pid * pb; + var ic:Number = pid * pc; + var ra:Number = ia * a - ib * c; + var rb:Number = ia * b - ib * d; + var rc:Number = id * c - ic * a; + var rd:Number = id * d - ic * b; + shearX = 0; + scaleX = Math.sqrt(ra * ra + rc * rc); + if (scaleX > 0.0001) { + det = ra * rd - rb * rc; + scaleY = det / scaleX; + shearY = Math.atan2(ra * rb + rc * rd, det) * MathUtils.radDeg; + rotation = Math.atan2(rc, ra) * MathUtils.radDeg; + } else { + scaleX = 0; + scaleY = Math.sqrt(rb * rb + rd * rd); + shearY = 0; + rotation = 90 - Math.atan2(rd, rb) * MathUtils.radDeg; + } + appliedRotation = rotation; + } public function worldToLocal (world:Vector.) : void { - var x:Number = world[0] - _worldX, y:Number = world[1] - _worldY; var a:Number = _a, b:Number = _b, c:Number = _c, d:Number = _d; var invDet:Number = 1 / (a * d - b * c); + var x:Number = world[0] - _worldX, y:Number = world[1] - _worldY; world[0] = (x * d * invDet - y * b * invDet); world[1] = (y * a * invDet - x * c * invDet); } diff --git a/spine-as3/spine-as3/src/spine/BoneData.as b/spine-as3/spine-as3/src/spine/BoneData.as index be24ce2e2..fc53fb77a 100644 --- a/spine-as3/spine-as3/src/spine/BoneData.as +++ b/spine-as3/spine-as3/src/spine/BoneData.as @@ -32,6 +32,7 @@ package spine { public class BoneData { + internal var _index:int; internal var _name:String; internal var _parent:BoneData; public var length:Number; @@ -40,15 +41,23 @@ public class BoneData { public var rotation:Number; public var scaleX:Number = 1; public var scaleY:Number = 1; - public var inheritScale:Boolean = true; + public var shearX:Number; + public var shearY:Number; public var inheritRotation:Boolean = true; + public var inheritScale:Boolean = true; /** @param parent May be null. */ - public function BoneData (name:String, parent:BoneData) { + public function BoneData (index:int, name:String, parent:BoneData) { + if (index < 0) throw new ArgumentError("index must be >= 0"); if (name == null) throw new ArgumentError("name cannot be null."); + _index = index; _name = name; _parent = parent; } + + public function get index () : int { + return _index; + } public function get name () : String { return _name; diff --git a/spine-as3/spine-as3/src/spine/IkConstraint.as b/spine-as3/spine-as3/src/spine/IkConstraint.as index 03621ae54..58593e228 100644 --- a/spine-as3/spine-as3/src/spine/IkConstraint.as +++ b/spine-as3/spine-as3/src/spine/IkConstraint.as @@ -35,8 +35,10 @@ public class IkConstraint implements Updatable { internal var _data:IkConstraintData; public var bones:Vector.; public var target:Bone; - public var bendDirection:int; public var mix:Number; + public var bendDirection:int; + + public var level:int; public function IkConstraint (data:IkConstraintData, skeleton:Skeleton) { if (data == null) throw new ArgumentError("data cannot be null."); @@ -77,121 +79,128 @@ public class IkConstraint implements Updatable { /** Adjusts the bone rotation so the tip is as close to the target position as possible. The target is specified in the world * coordinate system. */ static public function apply1 (bone:Bone, targetX:Number, targetY:Number, alpha:Number) : void { - var parentRotation:Number = bone._parent == null ? 0 : bone._parent.worldRotationX; - var rotation:Number = bone.rotation; - var rotationIK:Number = Math.atan2(targetY - bone._worldY, targetX - bone._worldX) * MathUtils.radDeg - parentRotation; - if ((bone._worldSignX != bone._worldSignY) != (bone._skeleton.flipX != (bone._skeleton.flipY != Bone.yDown))) - rotationIK = 360 - rotationIK; - if (rotationIK > 180) rotationIK -= 360; + var pp:Bone = bone.parent; + var id:Number = 1 / (pp.a * pp.d - pp.b * pp.c); + var x:Number = targetX - pp.worldX, y:Number = targetY - pp.worldY; + var tx:Number = (x * pp.d - y * pp.b) * id - bone.x, ty:Number = (y * pp.a - x * pp.c) * id - bone.y; + var rotationIK:Number = Math.atan2(ty, tx) * MathUtils.radDeg - bone.shearX - bone.rotation; + if (bone.scaleX < 0) rotationIK += 180; + if (rotationIK > 180) + rotationIK -= 360; else if (rotationIK < -180) rotationIK += 360; - bone.updateWorldTransformWith(bone.x, bone.y, rotation + (rotationIK - rotation) * alpha, bone.appliedScaleX, bone.appliedScaleY); + bone.updateWorldTransformWith(bone.x, bone.y, bone.rotation + rotationIK * alpha, bone.scaleX, bone.scaleY, bone.shearX, + bone.shearY); } /** Adjusts the parent and child bone rotations so the tip of the child is as close to the target position as possible. The * target is specified in the world coordinate system. * @param child Any descendant bone of the parent. */ static public function apply2 (parent:Bone, child:Bone, targetX:Number, targetY:Number, bendDir:int, alpha:Number) : void { - if (alpha == 0) return; - var px:Number = parent.x, py:Number = parent.y, psx:Number = parent.appliedScaleX, psy:Number = parent.appliedScaleY; - var o1:int, o2:int, s2:int; + if (alpha == 0) { + child.updateWorldTransform(); + return; + } + var px:Number = parent.x, py:Number = parent.y, psx:Number = parent.scaleX, psy:Number = parent.scaleY, csx:Number = child.scaleX;; + var os1:int, os2:int, s2:int; if (psx < 0) { psx = -psx; - o1 = 180; + os1 = 180; s2 = -1; } else { - o1 = 0; + os1 = 0; s2 = 1; } if (psy < 0) { psy = -psy; s2 = -s2; } - var cx:Number = child.x, cy:Number = child.y, csx:Number = child.appliedScaleX; - var u:Boolean = Math.abs(psx - psy) <= 0.0001; - if (!u && cy != 0) { - child._worldX = parent.a * cx + parent.worldX; - child._worldY = parent.c * cx + parent.worldY; - cy = 0; - } if (csx < 0) { csx = -csx; - o2 = 180; + os2 = 180; } else - o2 = 0; - var pp:Bone = parent.parent; - var tx:Number, ty:Number, dx:Number, dy:Number; - if (!pp) { - tx = targetX - px; - ty = targetY - py; - dx = child._worldX - px; - dy = child._worldY - py; + os2 = 0; + var cx:Number = child.x, cy:Number, cwx:Number, cwy:Number, a:Number = parent.a, b:Number = parent.b, c:Number = parent.c, d:Number = parent.d; + var u:Boolean = Math.abs(psx - psy) <= 0.0001; + if (!u) { + cy = 0; + cwx = a * cx + parent.worldX; + cwy = c * cx + parent.worldY; } else { - var ppa:Number = pp.a, ppb:Number = pp.b, ppc:Number = pp.c, ppd:Number = pp.d; - var invDet:Number = 1 / (ppa * ppd - ppb * ppc); - var wx:Number = pp._worldX, wy:Number = pp._worldY, twx:Number = targetX - wx, twy:Number = targetY - wy; - tx = (twx * ppd - twy * ppb) * invDet - px; - ty = (twy * ppa - twx * ppc) * invDet - py; - twx = child._worldX - wx; - twy = child._worldY - wy; - dx = (twx * ppd - twy * ppb) * invDet - px; - dy = (twy * ppa - twx * ppc) * invDet - py; + cy = child.y; + cwx = a * cx + b * cy + parent.worldX; + cwy = c * cx + d * cy + parent.worldY; } + var pp:Bone = parent.parent; + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + var id:Number = 1 / (a * d - b * c), x:Number = targetX - pp.worldX, y:Number = targetY - pp.worldY; + var tx:Number = (x * d - y * b) * id - px, ty:Number = (y * a - x * c) * id - py; + x = cwx - pp.worldX; + y = cwy - pp.worldY; + var dx:Number = (x * d - y * b) * id - px, dy:Number = (y * a - x * c) * id - py; var l1:Number = Math.sqrt(dx * dx + dy * dy), l2:Number = child.data.length * csx, a1:Number, a2:Number; outer: if (u) { l2 *= psx; var cos:Number = (tx * tx + ty * ty - l1 * l1 - l2 * l2) / (2 * l1 * l2); - if (cos < -1) cos = -1; + if (cos < -1) + cos = -1; else if (cos > 1) cos = 1; a2 = Math.acos(cos) * bendDir; - var ad:Number = l1 + l2 * cos, o:Number = l2 * Math.sin(a2); - a1 = Math.atan2(ty * ad - tx * o, tx * ad + ty * o); + a = l1 + l2 * cos; + b = l2 * Math.sin(a2); + a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b); } else { - var a:Number = psx * l2, b:Number = psy * l2, ta:Number = Math.atan2(ty, tx); - var aa:Number = a * a, bb:Number = b * b, ll:Number = l1 * l1, dd:Number = tx * tx + ty * ty; - var c0:Number = bb * ll + aa * dd - aa * bb, c1:Number = -2 * bb * l1, c2:Number = bb - aa; - var d:Number = c1 * c1 - 4 * c2 * c0; + a = psx * l2; + b = psy * l2; + var aa:Number = a * a, bb:Number = b * b, dd:Number = tx * tx + ty * ty, ta:Number = Math.atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + var c1:Number = -2 * bb * l1, c2:Number = bb - aa; + d = c1 * c1 - 4 * c2 * c; if (d >= 0) { var q:Number = Math.sqrt(d); if (c1 < 0) q = -q; q = -(c1 + q) / 2; - var r0:Number = q / c2, r1:Number = c0 / q; + var r0:Number = q / c2, r1:Number = c / q; var r:Number = Math.abs(r0) < Math.abs(r1) ? r0 : r1; if (r * r <= dd) { - var y1:Number = Math.sqrt(dd - r * r) * bendDir; - a1 = ta - Math.atan2(y1, r); - a2 = Math.atan2(y1 / psy, (r - l1) / psx); + y = Math.sqrt(dd - r * r) * bendDir; + a1 = ta - Math.atan2(y, r); + a2 = Math.atan2(y / psy, (r - l1) / psx); break outer; } } var minAngle:Number = 0, minDist:Number = Number.MAX_VALUE, minX:Number = 0, minY:Number = 0; var maxAngle:Number = 0, maxDist:Number = 0, maxX:Number = 0, maxY:Number = 0; - var x:Number = l1 + a, dist:Number = x * x; - if (dist > maxDist) { + x = l1 + a; + d = x * x; + if (d > maxDist) { maxAngle = 0; - maxDist = dist; + maxDist = d; maxX = x; } x = l1 - a; - dist = x * x; - if (dist < minDist) { + d = x * x; + if (d < minDist) { minAngle = Math.PI; - minDist = dist; + minDist = d; minX = x; } var angle:Number = Math.acos(-a * l1 / (aa - bb)); x = a * Math.cos(angle) + l1; - var y:Number = b * Math.sin(angle); - dist = x * x + y * y; - if (dist < minDist) { + y = b * Math.sin(angle); + d = x * x + y * y; + if (d < minDist) { minAngle = angle; - minDist = dist; + minDist = d; minX = x; minY = y; } - if (dist > maxDist) { + if (d > maxDist) { maxAngle = angle; - maxDist = dist; + maxDist = d; maxX = x; maxY = y; } @@ -204,16 +213,18 @@ public class IkConstraint implements Updatable { } } var os:Number = Math.atan2(cy, cx) * s2; - a1 = (a1 - os) * MathUtils.radDeg + o1; - a2 = (a2 + os) * MathUtils.radDeg * s2 + o2; - if (a1 > 180) a1 -= 360; - else if (a1 < -180) a1 += 360; - if (a2 > 180) a2 -= 360; - else if (a2 < -180) a2 += 360; var rotation:Number = parent.rotation; - parent.updateWorldTransformWith(px, py, rotation + (a1 - rotation) * alpha, parent.appliedScaleX, parent.appliedScaleY); + a1 = (a1 - os) * MathUtils.radDeg + os1 - rotation; + if (a1 > 180) + a1 -= 360; + else if (a1 < -180) a1 += 360; + parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, parent.scaleX, parent.scaleY, 0, 0); rotation = child.rotation; - child.updateWorldTransformWith(cx, cy, rotation + (a2 - rotation) * alpha, child.appliedScaleX, child.appliedScaleY); + a2 = ((a2 + os) * MathUtils.radDeg - child.shearX) * s2 + os2 - rotation; + if (a2 > 180) + a2 -= 360; + else if (a2 < -180) a2 += 360; + child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.scaleX, child.scaleY, child.shearX, child.shearY); } } diff --git a/spine-as3/spine-as3/src/spine/MathUtils.as b/spine-as3/spine-as3/src/spine/MathUtils.as index ee0eef7d7..b9ad40cf1 100644 --- a/spine-as3/spine-as3/src/spine/MathUtils.as +++ b/spine-as3/spine-as3/src/spine/MathUtils.as @@ -34,6 +34,20 @@ package spine { public class MathUtils { static public var radDeg:Number = 180 / Math.PI; static public var degRad:Number = Math.PI / 180; + + static public function cosDeg(degrees:Number): Number { + return Math.cos(degrees * degRad); + } + + static public function sinDeg(degrees:Number): Number { + return Math.sin(degrees * degRad); + } + + static public function clamp (value:Number, min:Number, max:Number) : Number { + if (value < min) return min; + if (value > max) return max; + return value; + } } } diff --git a/spine-as3/spine-as3/src/spine/PathConstraint.as b/spine-as3/spine-as3/src/spine/PathConstraint.as new file mode 100644 index 000000000..b31c57235 --- /dev/null +++ b/spine-as3/spine-as3/src/spine/PathConstraint.as @@ -0,0 +1,420 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +package spine { +import spine.attachments.PathAttachment; + +public class PathConstraint implements Updatable { + private static const NONE:int = -1, BEFORE:int = -2, AFTER:int = -3; + + internal var _data:PathConstraintData; + internal var _bones:Vector.; + public var target:Slot; + public var position:Number, spacing:Number, rotateMix:Number, translateMix:Number; + + internal const _spaces:Vector. = new Vector.(); + internal const _positions:Vector. = new Vector.(); + internal const _world:Vector. = new Vector.(); + internal const _curves:Vector. = new Vector.(); + internal const _lengths:Vector. = new Vector.(); + internal const _segments:Vector. = new Vector.(10); + + public function PathConstraint (data:PathConstraintData, skeleton:Skeleton) { + if (data == null) throw new ArgumentError("data cannot be null."); + if (skeleton == null) throw new ArgumentError("skeleton cannot be null."); + _data = data; + _bones = new Vector.(); + for each (var boneData:BoneData in data.bones) + _bones.push(skeleton.findBone(boneData.name)); + target = skeleton.findSlot(data.target.name); + position = data.position; + spacing = data.spacing; + rotateMix = data.rotateMix; + translateMix = data.translateMix; + } + + public function apply () : void { + update(); + } + + public function update () : void { + var attachment:PathAttachment = target.attachment as PathAttachment; + if (attachment == null) return; + + var rotateMix:Number = this.rotateMix, translateMix:Number = this.translateMix; + var translate:Boolean = translateMix > 0, rotate:Boolean = rotateMix > 0; + if (!translate && !rotate) return; + + var data:PathConstraintData = this._data; + var spacingMode:SpacingMode = data.spacingMode; + var lengthSpacing:Boolean = spacingMode == SpacingMode.length; + var rotateMode:RotateMode = data.rotateMode; + var tangents:Boolean = rotateMode == RotateMode.tangent, scale:Boolean = rotateMode == RotateMode.chainScale; + var boneCount:int = this._bones.length, spacesCount:int = tangents ? boneCount : boneCount + 1; + var bones:Vector. = this._bones; + this._spaces.length = spacesCount; + var spaces:Vector. = this._spaces, lengths:Vector. = null; + var spacing:Number = this.spacing; + if (scale || lengthSpacing) { + if (scale) { + this._lengths.length = boneCount; + lengths = this._lengths; + } + for (var i:int = 0, n:int = spacesCount - 1; i < n;) { + var bone:Bone = bones[i]; + var length:Number = bone.data.length, x:Number = length * bone.a, y:Number = length * bone.c; + length = Math.sqrt(x * x + y * y); + if (scale) lengths[i] = length; + spaces[++i] = lengthSpacing ? Math.max(0, length + spacing) : spacing; + } + } else { + for (i = 1; i < spacesCount; i++) + spaces[i] = spacing; + } + + var positions:Vector. = computeWorldPositions(attachment, spacesCount, tangents, + data.positionMode == PositionMode.percent, spacingMode == SpacingMode.percent); + var skeleton:Skeleton = target.skeleton; + var skeletonX:Number = skeleton.x, skeletonY:Number = skeleton.y; + var boneX:Number = positions[0], boneY:Number = positions[1], offsetRotation:Number = data.offsetRotation; + var tip:Boolean = rotateMode == RotateMode.chain && offsetRotation == 0; + var p:Number; + for (i = 0, p = 3; i < boneCount; i++, p += 3) { + bone = bones[i]; + bone._worldX += (boneX - skeletonX - bone.worldX) * translateMix; + bone._worldY += (boneY - skeletonY - bone.worldY) * translateMix; + x = positions[p]; y = positions[p + 1]; var dx:Number = x - boneX, dy:Number = y - boneY; + if (scale) { + length = lengths[i]; + if (length != 0) { + var s:Number = (Math.sqrt(dx * dx + dy * dy) / length - 1) * rotateMix + 1; + bone._a *= s; + bone._c *= s; + } + } + boneX = x; + boneY = y; + if (rotate) { + var a:Number = bone.a, b:Number = bone.b, c:Number = bone.c, d:Number = bone.d, r:Number, cos:Number, sin:Number; + if (tangents) + r = positions[p - 1]; + else if (spaces[i + 1] == 0) + r = positions[p + 2]; + else + r = Math.atan2(dy, dx); + r -= Math.atan2(c, a) - offsetRotation * MathUtils.degRad; + if (tip) { + cos = Math.cos(r); + sin = Math.sin(r); + length = bone.data.length; + boneX += (length * (cos * a - sin * c) - dx) * rotateMix; + boneY += (length * (sin * a + cos * c) - dy) * rotateMix; + } + if (r > Math.PI) + r -= (Math.PI * 2); + else if (r < -Math.PI) // + r += (Math.PI * 2); + r *= rotateMix; + cos = Math.cos(r); + sin = Math.sin(r); + bone._a = cos * a - sin * c; + bone._b = cos * b - sin * d; + bone._c = sin * a + cos * c; + bone._d = sin * b + cos * d; + } + } + } + + protected function computeWorldPositions (path:PathAttachment, spacesCount:int, tangents:Boolean, percentPosition:Boolean, + percentSpacing:Boolean) : Vector. { + var target:Slot = this.target; + var position:Number = this.position; + var spaces:Vector. = this._spaces; + this._positions.length = spacesCount * 3 + 2; + var out:Vector. = this._positions, world:Vector.; + var closed:Boolean = path.closed; + var verticesLength:int = path.worldVerticesLength, curveCount:int = verticesLength / 6, prevCurve:int = NONE; + + if (!path.constantSpeed) { + var lengths:Vector. = path.lengths; + curveCount -= closed ? 1 : 2; + var pathLength:Number = lengths[curveCount]; + if (percentPosition) position *= pathLength; + if (percentSpacing) { + for (var i:int = 0; i < spacesCount; i++) + spaces[i] *= pathLength; + } + this._world.length = 8; + world = this._world; + var o:int, curve:int; + for (i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + var space:Number = spaces[i]; + position += space; + var p:Number = position; + + if (closed) { + p %= pathLength; + if (p < 0) p += pathLength; + curve = 0; + } else if (p < 0) { + if (prevCurve != BEFORE) { + prevCurve = BEFORE; + path.computeWorldVertices2(target, 2, 4, world, 0); + } + addBeforePosition(p, world, 0, out, o); + continue; + } else if (p > pathLength) { + if (prevCurve != AFTER) { + prevCurve = AFTER; + path.computeWorldVertices2(target, verticesLength - 6, 4, world, 0); + } + addAfterPosition(p - pathLength, world, 0, out, o); + continue; + } + + // Determine curve containing position. + for (;; curve++) { + var length:Number = lengths[curve]; + if (p > length) continue; + if (curve == 0) + p /= length; + else { + var prev:Number = lengths[curve - 1]; + p = (p - prev) / (length - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + if (closed && curve == curveCount) { + path.computeWorldVertices2(target, verticesLength - 4, 4, world, 0); + path.computeWorldVertices2(target, 0, 4, world, 4); + } else + path.computeWorldVertices2(target, curve * 6 + 2, 8, world, 0); + } + addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, + tangents || (i > 0 && space == 0)); + } + return out; + } + + // World vertices. + if (closed) { + verticesLength += 2; + this._world.length = verticesLength; + world = this._world; + path.computeWorldVertices2(target, 2, verticesLength - 4, world, 0); + path.computeWorldVertices2(target, 0, 2, world, verticesLength - 4); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } else { + curveCount--; + verticesLength -= 4; + this._world.length = verticesLength; + world = this._world; + path.computeWorldVertices2(target, 2, verticesLength, world, 0); + } + + // Curve lengths. + this._curves.length = curveCount; + var curves:Vector. = this._curves; + pathLength = 0; + var x1:Number = world[0], y1:Number = world[1], cx1:Number = 0, cy1:Number = 0, cx2:Number = 0, cy2:Number = 0, x2:Number = 0, y2:Number = 0; + var tmpx:Number, tmpy:Number, dddfx:Number, dddfy:Number, ddfx:Number, ddfy:Number, dfx:Number, dfy:Number; + var w:int; + for (i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.1875; + tmpy = (y1 - cy1 * 2 + cy2) * 0.1875; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + if (percentPosition) position *= pathLength; + if (percentSpacing) { + for (i = 0; i < spacesCount; i++) + spaces[i] *= pathLength; + } + + var segments:Vector. = this._segments; + var curveLength:Number = 0; + var segment:int; + for (i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + space = spaces[i]; + position += space; + p = position; + + if (closed) { + p %= pathLength; + if (p < 0) p += pathLength; + curve = 0; + } else if (p < 0) { + addBeforePosition(p, world, 0, out, o); + continue; + } else if (p > pathLength) { + addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + continue; + } + + // Determine curve containing position. + for (;; curve++) { + length = curves[curve]; + if (p > length) continue; + if (curve == 0) + p /= length; + else { + prev = curves[curve - 1]; + p = (p - prev) / (length - prev); + } + break; + } + + // Curve segment lengths. + if (curve != prevCurve) { + prevCurve = curve; + var ii:int = curve * 6; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.03; + tmpy = (y1 - cy1 * 2 + cy2) * 0.03; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667; + curveLength = Math.sqrt(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + + // Weight by segment length. + p *= curveLength; + for (;; segment++) { + length = segments[segment]; + if (p > length) continue; + if (segment == 0) + p /= length; + else { + prev = segments[segment - 1]; + p = segment + (p - prev) / (length - prev); + } + break; + } + addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0)); + } + return out; + } + + private function addBeforePosition (p:Number, temp:Vector., i:int, out:Vector., o:int) : void { + var x1:Number = temp[i], y1:Number = temp[i + 1], dx:Number = temp[i + 2] - x1, dy:Number = temp[i + 3] - y1, r:Number = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + } + + private function addAfterPosition (p:Number, temp:Vector., i:int, out:Vector., o:int) : void { + var x1:Number = temp[i + 2], y1:Number = temp[i + 3], dx:Number = x1 - temp[i], dy:Number = y1 - temp[i + 1], r:Number = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + } + + private function addCurvePosition (p:Number, x1:Number, y1:Number, cx1:Number, cy1:Number, cx2:Number, cy2:Number, x2:Number, y2:Number, + out:Vector., o:int, tangents:Boolean) : void { + if (p == 0) p = 0.0001; + var tt:Number = p * p, ttt:Number = tt * p, u:Number = 1 - p, uu:Number = u * u, uuu:Number = uu * u; + var ut:Number = u * p, ut3:Number = ut * 3, uut3:Number = u * ut3, utt3:Number = ut3 * p; + var x:Number = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y:Number = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + out[o] = x; + out[o + 1] = y; + if (tangents) out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); + } + + public function get bones () : Vector. { + return _bones; + } + + public function get data () : PathConstraintData { + return _data; + } + + public function toString () : String { + return _data.name; + } +} + +} diff --git a/spine-as3/spine-as3/src/spine/PathConstraintData.as b/spine-as3/spine-as3/src/spine/PathConstraintData.as new file mode 100644 index 000000000..45863d0c0 --- /dev/null +++ b/spine-as3/spine-as3/src/spine/PathConstraintData.as @@ -0,0 +1,62 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +package spine { + +public dynamic class PathConstraintData { + internal var _name:String; + internal var _bones:Vector. = new Vector.(); + public var target:SlotData; + public var positionMode:PositionMode; + public var spacingMode:SpacingMode; + public var rotateMode:RotateMode; + public var offsetRotation:Number; + public var position:Number, spacing:Number, rotateMix:Number, translateMix:Number; + + public function PathConstraintData (name:String) { + if (name == null) throw new ArgumentError("name cannot be null."); + _name = name; + } + + public function get bones () : Vector. { + return _bones; + } + + public function get name () : String { + return _name; + } + + public function toString () : String { + return name; + } +} + +} \ No newline at end of file diff --git a/spine-as3/spine-as3/src/spine/Polygon.as b/spine-as3/spine-as3/src/spine/Polygon.as index ae459c587..b7acb8ca7 100644 --- a/spine-as3/spine-as3/src/spine/Polygon.as +++ b/spine-as3/spine-as3/src/spine/Polygon.as @@ -34,6 +34,9 @@ package spine { public class Polygon { public var vertices:Vector. = new Vector.(); + public function Polygon () { + } + /** Returns true if the polygon contains the point. */ public function containsPoint (x:Number, y:Number) : Boolean { var nn:int = vertices.length; diff --git a/spine-as3/spine-as3/src/spine/PositionMode.as b/spine-as3/spine-as3/src/spine/PositionMode.as new file mode 100644 index 000000000..ac8dabb00 --- /dev/null +++ b/spine-as3/spine-as3/src/spine/PositionMode.as @@ -0,0 +1,39 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +package spine { + +public class PositionMode { + public static const fixed:PositionMode = new PositionMode(); + public static const percent:PositionMode = new PositionMode(); +} + +} \ No newline at end of file diff --git a/spine-as3/spine-as3/src/spine/RotateMode.as b/spine-as3/spine-as3/src/spine/RotateMode.as new file mode 100644 index 000000000..f869f79b9 --- /dev/null +++ b/spine-as3/spine-as3/src/spine/RotateMode.as @@ -0,0 +1,40 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +package spine { + +public class RotateMode { + public static const tangent:RotateMode = new RotateMode(); + public static const chain:RotateMode = new RotateMode(); + public static const chainScale:RotateMode = new RotateMode(); +} + +} \ No newline at end of file diff --git a/spine-as3/spine-as3/src/spine/Skeleton.as b/spine-as3/spine-as3/src/spine/Skeleton.as index b940566b6..1ff5cb4fb 100644 --- a/spine-as3/spine-as3/src/spine/Skeleton.as +++ b/spine-as3/spine-as3/src/spine/Skeleton.as @@ -30,6 +30,8 @@ *****************************************************************************/ package spine { +import flash.utils.Dictionary; +import spine.attachments.PathAttachment; import spine.attachments.Attachment; public class Skeleton { @@ -37,8 +39,9 @@ public class Skeleton { public var bones:Vector.; public var slots:Vector.; public var drawOrder:Vector.; - public var ikConstraints:Vector.; + public var ikConstraints:Vector., ikConstraintsSorted:Vector.; public var transformConstraints:Vector.; + public var pathConstraints:Vector.; private var _updateCache:Vector. = new Vector.(); private var _skin:Skin; public var r:Number = 1, g:Number = 1, b:Number = 1, a:Number = 1; @@ -53,55 +56,181 @@ public class Skeleton { bones = new Vector.(); for each (var boneData:BoneData in data.bones) { - var parent:Bone = boneData.parent == null ? null : bones[data.bones.indexOf(boneData.parent)]; - bones[bones.length] = new Bone(boneData, this, parent); + var bone:Bone; + if (boneData.parent == null) + bone = new Bone(boneData, this, null); + else { + var parent:Bone = bones[boneData.parent.index]; + bone = new Bone(boneData, this, parent); + parent.children.push(bone); + } + bones.push(bone); } slots = new Vector.(); drawOrder = new Vector.(); for each (var slotData:SlotData in data.slots) { - var bone:Bone = bones[data.bones.indexOf(slotData.boneData)]; + bone = bones[slotData.boneData.index]; var slot:Slot = new Slot(slotData, bone); - slots[slots.length] = slot; + slots.push(slot); drawOrder[drawOrder.length] = slot; } ikConstraints = new Vector.(); + ikConstraintsSorted = new Vector.(); for each (var ikConstraintData:IkConstraintData in data.ikConstraints) - ikConstraints[ikConstraints.length] = new IkConstraint(ikConstraintData, this); + ikConstraints.push(new IkConstraint(ikConstraintData, this)); transformConstraints = new Vector.(); for each (var transformConstraintData:TransformConstraintData in data.transformConstraints) - transformConstraints[transformConstraints.length] = new TransformConstraint(transformConstraintData, this); + transformConstraints.push(new TransformConstraint(transformConstraintData, this)); + + pathConstraints = new Vector.(); + for each (var pathConstraintData:PathConstraintData in data.pathConstraints) + pathConstraints.push(new PathConstraint(pathConstraintData, this)); updateCache(); } - /** Caches information about bones and constraints. Must be called if bones or constraints are added or removed. */ + /** Caches information about bones and constraints. Must be called if bones, constraints, or weighted path attachments are + * added or removed. */ public function updateCache () : void { - var updateCache:Vector. = _updateCache; - var ikConstraints:Vector. = this.ikConstraints; - var transformConstraints:Vector. = this.transformConstraints; - updateCache.length = bones.length + ikConstraints.length; - var i:int = 0; - for each (var bone:Bone in bones) { - updateCache[i++] = bone; - for each (var ikConstraint:IkConstraint in ikConstraints) { - if (bone == ikConstraint.bones[ikConstraint.bones.length - 1]) { - updateCache[i++] = ikConstraint; - break; - } + var updateCache:Vector. = this._updateCache; + updateCache.length = 0; + + var bones:Vector. = this.bones; + for (var i:int = 0, n:int = bones.length; i < n; i++) + bones[i]._sorted = false; + + // IK first, lowest hierarchy depth first. + var ikConstraints:Vector. = this.ikConstraintsSorted; + ikConstraints.length = 0; + for each (var c:IkConstraint in this.ikConstraints) + ikConstraints.push(c); + var ikCount:int = ikConstraints.length; + var level:int; + for (i = 0, n = ikCount; i < n; i++) { + var ik:IkConstraint = ikConstraints[i]; + var bone:Bone = ik.bones[0].parent; + for (level = 0; bone != null; level++) + bone = bone.parent; + ik.level = level; + } + var ii:int; + for (i = 1; i < ikCount; i++) { + ik = ikConstraints[i]; + level = ik.level; + for (ii = i - 1; ii >= 0; ii--) { + var other:IkConstraint = ikConstraints[ii]; + if (other.level < level) break; + ikConstraints[ii + 1] = other; } + ikConstraints[ii + 1] = ik; + } + for (i = 0, n = ikConstraints.length; i < n; i++) { + var ikConstraint:IkConstraint = ikConstraints[i]; + var target:Bone = ikConstraint.target; + sortBone(target); + + var constrained:Vector. = ikConstraint.bones; + var parent:Bone = constrained[0]; + sortBone(parent); + + updateCache.push(ikConstraint); + + sortReset(parent.children); + constrained[constrained.length - 1]._sorted = true; } - for each (var transformConstraint:TransformConstraint in transformConstraints) { - for (i = updateCache.length - 1; i >= 0; i--) { - var updatable:Updatable = updateCache[i]; - if (updatable == transformConstraint.bone || updatable == transformConstraint.target) { - updateCache.splice(i + 1, 0, transformConstraint); - break; - } - } + var pathConstraints:Vector. = this.pathConstraints; + for (i = 0, n = pathConstraints.length; i < n; i++) { + var pathConstraint:PathConstraint = pathConstraints[i]; + + var slot:Slot = pathConstraint.target; + var slotIndex:int = slot.data.index; + var slotBone:Bone = slot.bone; + if (skin != null) sortPathConstraintAttachment(skin, slotIndex, slotBone); + if (_data.defaultSkin != null && _data.defaultSkin != skin) + sortPathConstraintAttachment(_data.defaultSkin, slotIndex, slotBone); + + var nn:int; + for (ii = 0, nn = _data.skins.length; ii < nn; ii++) + sortPathConstraintAttachment(_data.skins[ii], slotIndex, slotBone); + + var attachment:PathAttachment = slot.attachment as PathAttachment; + if (attachment != null) sortPathConstraintAttachment2(attachment, slotBone); + + constrained = pathConstraint.bones; + var boneCount:int = constrained.length; + for (ii = 0; ii < boneCount; ii++) + sortBone(constrained[ii]); + + updateCache.push(pathConstraint); + + for (ii = 0; ii < boneCount; ii++) + sortReset(constrained[ii].children); + for (ii = 0; ii < boneCount; ii++) + constrained[ii]._sorted = true; + } + + var transformConstraints:Vector. = this.transformConstraints; + for (i = 0, n = transformConstraints.length; i < n; i++) { + var transformConstraint:TransformConstraint = transformConstraints[i]; + + sortBone(transformConstraint.target); + + constrained = transformConstraint.bones; + boneCount = constrained.length; + for (ii = 0; ii < boneCount; ii++) + sortBone(constrained[ii]); + + updateCache.push(transformConstraint); + + for (ii = 0; ii < boneCount; ii++) + sortReset(constrained[ii].children); + for (ii = 0; ii < boneCount; ii++) + constrained[ii]._sorted = true; + } + + for (i = 0, n = bones.length; i < n; i++) + sortBone(bones[i]); + } + + private function sortPathConstraintAttachment (skin:Skin, slotIndex:int, slotBone:Bone) : void { + var dict:Dictionary = skin.attachments[slotIndex]; + if (!dict) return; + + for each (var value:Attachment in dict) { + sortPathConstraintAttachment2(value, slotBone); + } + } + + private function sortPathConstraintAttachment2 (attachment:Attachment, slotBone:Bone) : void { + var pathAttachment:PathAttachment = attachment as PathAttachment; + if (!pathAttachment) return; + var pathBones:Vector. = pathAttachment.bones; + if (pathBones == null) + sortBone(slotBone); + else { + var bones:Vector. = this.bones; + for each (var boneIndex:int in pathBones) + sortBone(bones[boneIndex]); + } + } + + private function sortBone (bone:Bone) : void { + if (bone._sorted) return; + var parent:Bone = bone.parent; + if (parent != null) sortBone(parent); + bone._sorted = true; + _updateCache.push(bone); + } + + private function sortReset (bones:Vector.) : void { + for (var i:int = 0, n:int = bones.length; i < n; i++) { + var bone:Bone = bones[i]; + if (bone._sorted) sortReset(bone.children); + bone._sorted = false; } } @@ -128,9 +257,17 @@ public class Skeleton { } for each (var transformConstraint:TransformConstraint in transformConstraints) { + transformConstraint.rotateMix = transformConstraint._data.rotateMix; transformConstraint.translateMix = transformConstraint._data.translateMix; - transformConstraint.x = transformConstraint._data.x; - transformConstraint.y = transformConstraint._data.y; + transformConstraint.scaleMix = transformConstraint._data.scaleMix; + transformConstraint.shearMix = transformConstraint._data.shearMix; + } + + for each (var pathConstraint:PathConstraint in pathConstraints) { + pathConstraint.position = pathConstraint._data.position; + pathConstraint.spacing = pathConstraint._data.spacing; + pathConstraint.rotateMix = pathConstraint._data.rotateMix; + pathConstraint.translateMix = pathConstraint._data.translateMix; } } @@ -145,6 +282,10 @@ public class Skeleton { public function get data () : SkeletonData { return _data; } + + public function get getUpdateCache () : Vector. { + return _updateCache; + } public function get rootBone () : Bone { if (bones.length == 0) return null; @@ -282,6 +423,14 @@ public class Skeleton { if (transformConstraint._data._name == constraintName) return transformConstraint; return null; } + + /** @return May be null. */ + public function findPathConstraint (constraintName:String) : PathConstraint { + if (constraintName == null) throw new ArgumentError("constraintName cannot be null."); + for each (var pathConstraint:PathConstraint in pathConstraints) + if (pathConstraint._data._name == constraintName) return pathConstraint; + return null; + } public function update (delta:Number) : void { time += delta; diff --git a/spine-as3/spine-as3/src/spine/SkeletonBounds.as b/spine-as3/spine-as3/src/spine/SkeletonBounds.as index 9024d12f5..0999131f0 100644 --- a/spine-as3/spine-as3/src/spine/SkeletonBounds.as +++ b/spine-as3/spine-as3/src/spine/SkeletonBounds.as @@ -38,11 +38,13 @@ public class SkeletonBounds { public var boundingBoxes:Vector. = new Vector.(); public var polygons:Vector. = new Vector.(); public var minX:Number, minY:Number, maxX:Number, maxY:Number; + + public function SkeletonBounds () { + } public function update (skeleton:Skeleton, updateAabb:Boolean) : void { var slots:Vector. = skeleton.slots; - var slotCount:int = slots.length; - var x:Number = skeleton.x, y:Number = skeleton.y; + var slotCount:int = slots.length; boundingBoxes.length = 0; for each (var polygon:Polygon in polygons) @@ -63,8 +65,8 @@ public class SkeletonBounds { polygon = new Polygon(); polygons[polygons.length] = polygon; - polygon.vertices.length = boundingBox.vertices.length; - boundingBox.computeWorldVertices(x, y, slot.bone, polygon.vertices); + polygon.vertices.length = boundingBox.worldVerticesLength; + boundingBox.computeWorldVertices(slot, polygon.vertices); } if (updateAabb) aabbCompute(); diff --git a/spine-as3/spine-as3/src/spine/SkeletonData.as b/spine-as3/spine-as3/src/spine/SkeletonData.as index 1a0802ccd..99a9047de 100644 --- a/spine-as3/spine-as3/src/spine/SkeletonData.as +++ b/spine-as3/spine-as3/src/spine/SkeletonData.as @@ -43,8 +43,12 @@ public class SkeletonData { public var animations:Vector. = new Vector.(); public var ikConstraints:Vector. = new Vector.(); public var transformConstraints:Vector. = new Vector.(); + public var pathConstraints:Vector. = new Vector.(); public var width:Number, height:Number; public var version:String, hash:String; + + public function SkeletonData () { + } // --- Bones. @@ -135,6 +139,37 @@ public class SkeletonData { if (transformConstraintData._name == constraintName) return transformConstraintData; return null; } + + /** @return -1 if the transform constraint was not found. */ + public function findTransformConstraintIndex (transformConstraintName:String) : int { + if (transformConstraintName == null) throw new ArgumentError("transformConstraintName cannot be null."); + var transformConstraints:Vector. = this.transformConstraints; + for (var i:int = 0, n:int = transformConstraints.length; i < n; i++) + if (transformConstraints[i].name == transformConstraintName) return i; + return -1; + } + + // --- Path constraints. + + /** @return May be null. */ + public function findPathConstraint (constraintName:String) : PathConstraintData { + if (constraintName == null) throw new ArgumentError("constraintName cannot be null."); + var pathConstraints:Vector. = this.pathConstraints; + for (var i:int = 0, n:int = pathConstraints.length; i < n; i++) { + var constraint:PathConstraintData = pathConstraints[i]; + if (constraint.name == constraintName) return constraint; + } + return null; + } + + /** @return -1 if the path constraint was not found. */ + public function findPathConstraintIndex (pathConstraintName:String) : int { + if (pathConstraintName == null) throw new ArgumentError("pathConstraintName cannot be null."); + var pathConstraints:Vector. = this.pathConstraints; + for (var i:int = 0, n:int = pathConstraints.length; i < n; i++) + if (pathConstraints[i].name == pathConstraintName) return i; + return -1; + } // --- diff --git a/spine-as3/spine-as3/src/spine/SkeletonJson.as b/spine-as3/spine-as3/src/spine/SkeletonJson.as index 24294e038..b67c87742 100644 --- a/spine-as3/spine-as3/src/spine/SkeletonJson.as +++ b/spine-as3/spine-as3/src/spine/SkeletonJson.as @@ -29,6 +29,13 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ package spine { +import spine.animation.PathConstraintMixTimeline; +import spine.animation.PathConstraintSpacingTimeline; +import spine.animation.PathConstraintPositionTimeline; +import spine.animation.TransformConstraintTimeline; +import spine.animation.ShearTimeline; +import spine.attachments.PathAttachment; +import spine.attachments.VertexAttachment; import flash.utils.ByteArray; import spine.animation.Animation; @@ -37,7 +44,7 @@ import spine.animation.ColorTimeline; import spine.animation.CurveTimeline; import spine.animation.DrawOrderTimeline; import spine.animation.EventTimeline; -import spine.animation.FfdTimeline; +import spine.animation.DeformTimeline; import spine.animation.IkConstraintTimeline; import spine.animation.RotateTimeline; import spine.animation.ScaleTimeline; @@ -49,7 +56,6 @@ import spine.attachments.AttachmentType; import spine.attachments.BoundingBoxAttachment; import spine.attachments.MeshAttachment; import spine.attachments.RegionAttachment; -import spine.attachments.WeightedMeshAttachment; public class SkeletonJson { public var attachmentLoader:AttachmentLoader; @@ -83,8 +89,8 @@ public class SkeletonJson { skeletonData.hash = skeletonMap["hash"]; skeletonData.version = skeletonMap["spine"]; skeletonData.width = skeletonMap["width"] || 0; - skeletonData.height = skeletonMap["height"] || 0; - } + skeletonData.height = skeletonMap["height"] || 0; + } // Bones. var boneData:BoneData; @@ -95,60 +101,27 @@ public class SkeletonJson { parent = skeletonData.findBone(parentName); if (!parent) throw new Error("Parent bone not found: " + parentName); } - boneData = new BoneData(boneMap["name"], parent); + boneData = new BoneData(skeletonData.bones.length, boneMap["name"], parent); boneData.length = Number(boneMap["length"] || 0) * scale; boneData.x = Number(boneMap["x"] || 0) * scale; boneData.y = Number(boneMap["y"] || 0) * scale; boneData.rotation = (boneMap["rotation"] || 0); boneData.scaleX = boneMap.hasOwnProperty("scaleX") ? boneMap["scaleX"] : 1; boneData.scaleY = boneMap.hasOwnProperty("scaleY") ? boneMap["scaleY"] : 1; - boneData.inheritScale = boneMap.hasOwnProperty("inheritScale") ? boneMap["inheritScale"] : true; - boneData.inheritRotation = boneMap.hasOwnProperty("inheritRotation") ? boneMap["inheritRotation"] : true; - skeletonData.bones[skeletonData.bones.length] = boneData; + boneData.shearX = Number(boneMap["shearX"] || 0); + boneData.shearY = Number(boneMap["shearY"] || 0); + boneData.inheritRotation = boneMap.hasOwnProperty("inheritRotation") ? Boolean(boneMap["inheritRotation"]) : true; + boneData.inheritScale = boneMap.hasOwnProperty("inheritScale") ? Boolean(boneMap["inheritScale"]) : true; + skeletonData.bones.push(boneData); } - - // IK constraints. - for each (var ikMap:Object in root["ik"]) { - var ikConstraintData:IkConstraintData = new IkConstraintData(ikMap["name"]); - - for each (var boneName:String in ikMap["bones"]) { - var bone:BoneData = skeletonData.findBone(boneName); - if (!bone) throw new Error("IK bone not found: " + boneName); - ikConstraintData.bones[ikConstraintData.bones.length] = bone; - } - - ikConstraintData.target = skeletonData.findBone(ikMap["target"]); - if (!ikConstraintData.target) throw new Error("Target bone not found: " + ikMap["target"]); - - ikConstraintData.bendDirection = (!ikMap.hasOwnProperty("bendPositive") || ikMap["bendPositive"]) ? 1 : -1; - ikConstraintData.mix = ikMap.hasOwnProperty("mix") ? ikMap["mix"] : 1; - - skeletonData.ikConstraints[skeletonData.ikConstraints.length] = ikConstraintData; - } - - // Transform constraints. - for each (var transformMap:Object in root["transform"]) { - var transformConstraintData:TransformConstraintData = new TransformConstraintData(transformMap["name"]); - - transformConstraintData.bone = skeletonData.findBone(transformMap["bone"]); - if (!transformConstraintData.bone) throw new Error("Bone not found: " + transformMap["bone"]); - - transformConstraintData.target = skeletonData.findBone(transformMap["target"]); - if (!transformConstraintData.target) throw new Error("Target bone not found: " + transformMap["target"]); - - transformConstraintData.translateMix = transformMap.hasOwnProperty("translateMix") ? transformMap["translateMix"] : 1; - transformConstraintData.x = Number(boneMap["x"] || 0) * scale; - transformConstraintData.y = Number(boneMap["y"] || 0) * scale; - - skeletonData.transformConstraints[skeletonData.transformConstraints.length] = transformConstraintData; - } - + // Slots. for each (var slotMap:Object in root["slots"]) { - boneName = slotMap["bone"]; + var slotName:String = slotMap["name"]; + var boneName:String = slotMap["bone"]; boneData = skeletonData.findBone(boneName); if (!boneData) throw new Error("Slot bone not found: " + boneName); - var slotData:SlotData = new SlotData(slotMap["name"], boneData); + var slotData:SlotData = new SlotData(skeletonData.slots.length, slotName, boneData); var color:String = slotMap["color"]; if (color) { @@ -160,8 +133,81 @@ public class SkeletonJson { slotData.attachmentName = slotMap["attachment"]; slotData.blendMode = BlendMode[slotMap["blend"] || "normal"]; + skeletonData.slots.push(slotData); + } - skeletonData.slots[skeletonData.slots.length] = slotData; + // IK constraints. + for each (var constraintMap:Object in root["ik"]) { + var ikConstraintData:IkConstraintData = new IkConstraintData(constraintMap["name"]); + + for each (boneName in constraintMap["bones"]) { + var bone:BoneData = skeletonData.findBone(boneName); + if (!bone) throw new Error("IK constraint bone not found: " + boneName); + ikConstraintData.bones.push(bone); + } + + ikConstraintData.target = skeletonData.findBone(constraintMap["target"]); + if (!ikConstraintData.target) throw new Error("Target bone not found: " + constraintMap["target"]); + + ikConstraintData.bendDirection = (!constraintMap.hasOwnProperty("bendPositive") || constraintMap["bendPositive"]) ? 1 : -1; + ikConstraintData.mix = constraintMap.hasOwnProperty("mix") ? constraintMap["mix"] : 1; + + skeletonData.ikConstraints.push(ikConstraintData); + } + + // Transform constraints. + for each (constraintMap in root["transform"]) { + var transformConstraintData:TransformConstraintData = new TransformConstraintData(constraintMap["name"]); + + for each (boneName in constraintMap["bones"]) { + bone = skeletonData.findBone(boneName); + if (!bone) throw new Error("Transform constraint bone not found: " + boneName); + transformConstraintData.bones.push(bone); + } + + transformConstraintData.target = skeletonData.findBone(constraintMap["target"]); + if (!transformConstraintData.target) throw new Error("Target bone not found: " + constraintMap["target"]); + + transformConstraintData.offsetRotation = Number(constraintMap["rotation"] || 0); + transformConstraintData.offsetX = Number(constraintMap["x"] || 0) * scale; + transformConstraintData.offsetY = Number(constraintMap["y"] || 0) * scale; + transformConstraintData.offsetScaleX = Number(constraintMap["scaleX"] || 0); + transformConstraintData.offsetScaleY = Number(constraintMap["scaleY"] || 0); + transformConstraintData.offsetShearY = Number(constraintMap["shearY"] || 0); + + transformConstraintData.rotateMix = constraintMap.hasOwnProperty("rotateMix") ? constraintMap["rotateMix"] : 1; + transformConstraintData.translateMix = constraintMap.hasOwnProperty("translateMix") ? constraintMap["translateMix"] : 1; + transformConstraintData.scaleMix = constraintMap.hasOwnProperty("scaleMix") ? constraintMap["scaleMix"] : 1; + transformConstraintData.shearMix = constraintMap.hasOwnProperty("shearMix") ? constraintMap["shearMix"] : 1; + + skeletonData.transformConstraints.push(transformConstraintData); + } + + // Path constraints. + for each (constraintMap in root["path"]) { + var pathConstraintData:PathConstraintData = new PathConstraintData(constraintMap["name"]); + + for each (boneName in constraintMap["bones"]) { + bone = skeletonData.findBone(boneName); + if (!bone) throw new Error("Path constraint bone not found: " + boneName); + pathConstraintData.bones.push(bone); + } + + pathConstraintData.target = skeletonData.findSlot(constraintMap["target"]); + if (!pathConstraintData.target) throw new Error("Path target slot not found: " + constraintMap["target"]); + + pathConstraintData.positionMode = PositionMode[constraintMap["positionMode"] || "percent"]; + pathConstraintData.spacingMode = SpacingMode[constraintMap["spacingMode"] || "length"]; + pathConstraintData.rotateMode = RotateMode[constraintMap["rotateMode"] || "rotateMode"]; + pathConstraintData.offsetRotation = Number(constraintMap["rotation"] || 0); + pathConstraintData.position = Number(constraintMap["position"] || 0); + if (pathConstraintData.positionMode == PositionMode.fixed) pathConstraintData.position *= scale; + pathConstraintData.spacing = Number(constraintMap["spacing"] || 0); + if (pathConstraintData.spacingMode == SpacingMode.length || pathConstraintData.spacingMode == SpacingMode.fixed) pathConstraintData.spacing *= scale; + pathConstraintData.rotateMix = constraintMap.hasOwnProperty("rotateMix") ? constraintMap["rotateMix"] : 1; + pathConstraintData.translateMix = constraintMap.hasOwnProperty("translateMix") ? constraintMap["translateMix"] : 1; + + skeletonData.pathConstraints.push(pathConstraintData); } // Skins. @@ -169,11 +215,11 @@ public class SkeletonJson { for (var skinName:String in skins) { var skinMap:Object = skins[skinName]; var skin:Skin = new Skin(skinName); - for (var slotName:String in skinMap) { + for (slotName in skinMap) { var slotIndex:int = skeletonData.findSlotIndex(slotName); var slotEntry:Object = skinMap[slotName]; for (var attachmentName:String in slotEntry) { - var attachment:Attachment = readAttachment(skin, slotIndex, attachmentName, slotEntry[attachmentName]); + var attachment:Attachment = readAttachment(slotEntry[attachmentName], skin, slotIndex, attachmentName); if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); } @@ -184,20 +230,14 @@ public class SkeletonJson { } // Linked meshes. + var linkedMeshes:Vector. = this.linkedMeshes; for each (var linkedMesh:LinkedMesh in linkedMeshes) { var parentSkin:Skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); if (!parentSkin) throw new Error("Skin not found: " + linkedMesh.skin); var parentMesh:Attachment = parentSkin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); if (!parentMesh) throw new Error("Parent mesh not found: " + linkedMesh.parent); - if (linkedMesh.mesh is MeshAttachment) { - var mesh:MeshAttachment = MeshAttachment(linkedMesh.mesh); - mesh.parentMesh = MeshAttachment(parentMesh); - mesh.updateUVs(); - } else { - var weightedMesh:WeightedMeshAttachment = WeightedMeshAttachment(linkedMesh.mesh); - weightedMesh.parentMesh = WeightedMeshAttachment(parentMesh); - weightedMesh.updateUVs(); - } + linkedMesh.mesh.parentMesh = MeshAttachment(parentMesh); + linkedMesh.mesh.updateUVs(); } linkedMeshes.length = 0; @@ -210,33 +250,31 @@ public class SkeletonJson { eventData.intValue = eventMap["int"] || 0; eventData.floatValue = eventMap["float"] || 0; eventData.stringValue = eventMap["string"] || null; - skeletonData.events[skeletonData.events.length] = eventData; + skeletonData.events.push(eventData); } } // Animations. var animations:Object = root["animations"]; for (var animationName:String in animations) - readAnimation(animationName, animations[animationName], skeletonData); + readAnimation(animations[animationName], animationName, skeletonData); return skeletonData; } - private function readAttachment (skin:Skin, slotIndex:int, name:String, map:Object) : Attachment { + private function readAttachment (map:Object, skin:Skin, slotIndex:int, name:String) : Attachment { name = map["name"] || name; - var typeName:String = map["type"] || "region"; - if (typeName == "skinnedmesh") typeName = "weightedmesh"; - var type:AttachmentType = AttachmentType[typeName]; - var path:String = map["path"] || name; + var typeName:String = map["type"] || "region"; + var type:AttachmentType = AttachmentType[typeName]; var scale:Number = this.scale; - var color:String, vertices:Vector.; + var color:String; switch (type) { case AttachmentType.region: - var region:RegionAttachment = attachmentLoader.newRegionAttachment(skin, name, path); + var region:RegionAttachment = attachmentLoader.newRegionAttachment(skin, name, map["path"] || name); if (!region) return null; - region.path = path; + region.path = map["path"] || name; region.x = Number(map["x"] || 0) * scale; region.y = Number(map["y"] || 0) * scale; region.scaleX = map.hasOwnProperty("scaleX") ? map["scaleX"] : 1; @@ -255,9 +293,9 @@ public class SkeletonJson { return region; case AttachmentType.mesh: case AttachmentType.linkedmesh: - var mesh:MeshAttachment = attachmentLoader.newMeshAttachment(skin, name, path); + var mesh:MeshAttachment = attachmentLoader.newMeshAttachment(skin, name, map["path"] || name); if (!mesh) return null; - mesh.path = path; + mesh.path = map["path"] || name; color = map["color"]; if (color) { @@ -270,78 +308,79 @@ public class SkeletonJson { mesh.width = Number(map["width"] || 0) * scale; mesh.height = Number(map["height"] || 0) * scale; - if (!map["parent"]) { - mesh.vertices = getFloatArray(map, "vertices", scale); - mesh.triangles = getUintArray(map, "triangles"); - mesh.regionUVs = getFloatArray(map, "uvs", 1); - mesh.updateUVs(); - - mesh.hullLength = int(map["hull"] || 0) * 2; - if (map["edges"]) mesh.edges = getIntArray(map, "edges"); - } else { - mesh.inheritFFD = map.hasOwnProperty("ffd") ? map["ffd"] : true; - linkedMeshes[linkedMeshes.length] = new LinkedMesh(mesh, map["skin"], slotIndex, map["parent"]); + if (map["parent"]) { + mesh.inheritDeform = map.hasOwnProperty("deform") ? Boolean(map["deform"]) : true; + linkedMeshes.push(new LinkedMesh(mesh, map["skin"], slotIndex, map["parent"])); + return mesh; } - return mesh; - case AttachmentType.weightedmesh: - case AttachmentType.weightedlinkedmesh: - var weightedMesh:WeightedMeshAttachment = attachmentLoader.newWeightedMeshAttachment(skin, name, path); - if (!weightedMesh) return null; + + var uvs:Vector. = getFloatArray(map, "uvs", 1); + readVertices(map, mesh, uvs.length); + mesh.triangles = getUintArray(map, "triangles"); + mesh.regionUVs = uvs; + mesh.updateUVs(); - weightedMesh.path = path; - - color = map["color"]; - if (color) { - weightedMesh.r = toColor(color, 0); - weightedMesh.g = toColor(color, 1); - weightedMesh.b = toColor(color, 2); - weightedMesh.a = toColor(color, 3); - } - - weightedMesh.width = Number(map["width"] || 0) * scale; - weightedMesh.height = Number(map["height"] || 0) * scale; - - if (!map["parent"]) { - var uvs:Vector. = getFloatArray(map, "uvs", 1); - vertices = getFloatArray(map, "vertices", 1); - var weights:Vector. = new Vector.(); - var bones:Vector. = new Vector.(); - for (var i:int = 0, n:int = vertices.length; i < n;) { - var boneCount:int = int(vertices[i++]); - bones[bones.length] = boneCount; - for (var nn:int = i + boneCount * 4; i < nn;) { - bones[bones.length] = vertices[i]; - weights[weights.length] = vertices[i + 1] * scale; - weights[weights.length] = vertices[i + 2] * scale; - weights[weights.length] = vertices[i + 3]; - i += 4; - } - } - weightedMesh.bones = bones; - weightedMesh.weights = weights; - weightedMesh.triangles = getUintArray(map, "triangles"); - weightedMesh.regionUVs = uvs; - weightedMesh.updateUVs(); - - weightedMesh.hullLength = int(map["hull"] || 0) * 2; - if (map["edges"]) weightedMesh.edges = getIntArray(map, "edges"); - } else { - weightedMesh.inheritFFD = map.hasOwnProperty("ffd") ? map["ffd"] : true; - linkedMeshes[linkedMeshes.length] = new LinkedMesh(weightedMesh, map["skin"], slotIndex, map["parent"]); - } - return weightedMesh; + mesh.hullLength = int(map["hull"] || 0) * 2; + if (map["edges"]) mesh.edges = getIntArray(map, "edges"); + return mesh; case AttachmentType.boundingbox: var box:BoundingBoxAttachment = attachmentLoader.newBoundingBoxAttachment(skin, name); - vertices = box.vertices; - for each (var point:Number in map["vertices"]) - vertices[vertices.length] = point * scale; + if (!box) return null; + readVertices(map, box, int(map["vertexCount"]) << 1); return box; + case AttachmentType.path: + var path:PathAttachment = attachmentLoader.newPathAttachment(skin, name); + if (!path) return null; + path.closed = map.hasOwnProperty("closed") ? Boolean(map["closed"]) : false; + path.constantSpeed = map.hasOwnProperty("constantSpeed") ? Boolean(map["constantSpeed"]) : true; + + var vertexCount:int = int(map["vertexCount"]); + readVertices(map, path, vertexCount << 1); + + var lengths:Vector. = new Vector.(); + for each (var curves:Object in map["lengths"]) { + lengths.push(Number(curves) * scale); + } + path.lengths = lengths; + return path; } return null; } + + private function readVertices(map:Object, attachment:VertexAttachment, verticesLength:int) : void { + attachment.worldVerticesLength = verticesLength; + var vertices:Vector. = getFloatArray(map, "vertices", 1); + if (verticesLength == vertices.length) { + if (scale != 1) { + for (var i:int = 0, n:int = vertices.length; i < n; i++) { + vertices[i] *= scale; + } + } + attachment.vertices = vertices; + return; + } + + var weights:Vector. = new Vector.(verticesLength * 3 * 3); + weights.length = 0; + var bones:Vector. = new Vector.(verticesLength * 3); + bones.length = 0; + for (i = 0, n = vertices.length; i < n;) { + var boneCount:int = int(vertices[i++]); + bones.push(boneCount); + for (var nn:int = i + boneCount * 4; i < nn; i+=4) { + bones.push(int(vertices[i])); + weights.push(vertices[i + 1] * scale); + weights.push(vertices[i + 2] * scale); + weights.push(vertices[i + 3]); + } + } + attachment.bones = bones; + attachment.vertices = weights; + } - private function readAnimation (name:String, map:Object, skeletonData:SkeletonData) : void { + private function readAnimation (map:Object, name:String, skeletonData:SkeletonData) : void { + var scale:Number = this.scale; var timelines:Vector. = new Vector.(); var duration:Number = 0; @@ -369,11 +408,11 @@ public class SkeletonJson { var b:Number = toColor(color, 2); var a:Number = toColor(color, 3); colorTimeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); - readCurve(colorTimeline, frameIndex, valueMap); + readCurve(valueMap, colorTimeline, frameIndex); frameIndex++; } timelines[timelines.length] = colorTimeline; - duration = Math.max(duration, colorTimeline.frames[colorTimeline.frameCount * 5 - 5]); + duration = Math.max(duration, colorTimeline.frames[(colorTimeline.frameCount - 1) * ColorTimeline.ENTRIES]); } else if (timelineName == "attachment") { var attachmentTimeline:AttachmentTimeline = new AttachmentTimeline(values.length); attachmentTimeline.slotIndex = slotIndex; @@ -403,32 +442,34 @@ public class SkeletonJson { frameIndex = 0; for each (valueMap in values) { rotateTimeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); - readCurve(rotateTimeline, frameIndex, valueMap); + readCurve(valueMap, rotateTimeline, frameIndex); frameIndex++; } timelines[timelines.length] = rotateTimeline; - duration = Math.max(duration, rotateTimeline.frames[rotateTimeline.frameCount * 2 - 2]); - } else if (timelineName == "translate" || timelineName == "scale") { - var timeline:TranslateTimeline; + duration = Math.max(duration, rotateTimeline.frames[(rotateTimeline.frameCount - 1) * RotateTimeline.ENTRIES]); + } else if (timelineName == "translate" || timelineName == "scale" || timelineName == "shear") { + var translateTimeline:TranslateTimeline; var timelineScale:Number = 1; if (timelineName == "scale") - timeline = new ScaleTimeline(values.length); + translateTimeline = new ScaleTimeline(values.length); + else if (timelineName == "shear") + translateTimeline = new ShearTimeline(values.length); else { - timeline = new TranslateTimeline(values.length); + translateTimeline = new TranslateTimeline(values.length); timelineScale = scale; } - timeline.boneIndex = boneIndex; + translateTimeline.boneIndex = boneIndex; frameIndex = 0; for each (valueMap in values) { var x:Number = Number(valueMap["x"] || 0) * timelineScale; var y:Number = Number(valueMap["y"] || 0) * timelineScale; - timeline.setFrame(frameIndex, valueMap["time"], x, y); - readCurve(timeline, frameIndex, valueMap); + translateTimeline.setFrame(frameIndex, valueMap["time"], x, y); + readCurve(valueMap, translateTimeline, frameIndex); frameIndex++; } - timelines[timelines.length] = timeline; - duration = Math.max(duration, timeline.frames[timeline.frameCount * 3 - 3]); + timelines[timelines.length] = translateTimeline; + duration = Math.max(duration, translateTimeline.frames[(translateTimeline.frameCount - 1) * TranslateTimeline.ENTRIES]); } else throw new Error("Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"); } @@ -445,67 +486,133 @@ public class SkeletonJson { var mix:Number = valueMap.hasOwnProperty("mix") ? valueMap["mix"] : 1; var bendDirection:int = (!valueMap.hasOwnProperty("bendPositive") || valueMap["bendPositive"]) ? 1 : -1; ikTimeline.setFrame(frameIndex, valueMap["time"], mix, bendDirection); - readCurve(ikTimeline, frameIndex, valueMap); + readCurve(valueMap, ikTimeline, frameIndex); frameIndex++; } timelines[timelines.length] = ikTimeline; - duration = Math.max(duration, ikTimeline.frames[ikTimeline.frameCount * 3 - 3]); + duration = Math.max(duration, ikTimeline.frames[(ikTimeline.frameCount - 1) * IkConstraintTimeline.ENTRIES]); } - - var ffd:Object = map["ffd"]; - for (var skinName:String in ffd) { + + var transformMap:Object = map["transform"]; + for (var transformName:String in transformMap) { + var transformConstraint:TransformConstraintData = skeletonData.findTransformConstraint(transformName); + values = transformMap[transformName]; + var transformTimeline:TransformConstraintTimeline = new TransformConstraintTimeline(values.length); + transformTimeline.transformConstraintIndex = skeletonData.transformConstraints.indexOf(transformConstraint); + frameIndex = 0; + for each (valueMap in values) { + var rotateMix:Number = valueMap.hasOwnProperty("rotateMix") ? valueMap["rotateMix"] : 1; + var translateMix:Number = valueMap.hasOwnProperty("translateMix") ? valueMap["translateMix"] : 1; + var scaleMix:Number = valueMap.hasOwnProperty("scaleMix") ? valueMap["scaleMix"] : 1; + var shearMix:Number = valueMap.hasOwnProperty("shearMix") ? valueMap["shearMix"] : 1; + transformTimeline.setFrame(frameIndex, valueMap["time"], rotateMix, translateMix, scaleMix, shearMix); + readCurve(valueMap, transformTimeline, frameIndex); + frameIndex++; + } + timelines.push(transformTimeline); + duration = Math.max(duration, transformTimeline.frames[(transformTimeline.frameCount - 1) * TransformConstraintTimeline.ENTRIES]); + } + + // Path constraint timelines. + var paths:Object = map["paths"]; + for (var pathName:String in paths) { + var index:int = skeletonData.findPathConstraintIndex(pathName); + if (index == -1) throw new Error("Path constraint not found: " + pathName); + var data:PathConstraintData = skeletonData.pathConstraints[index]; + + var pathMap:Object = paths[pathName]; + for (timelineName in pathMap) { + values = pathMap[timelineName]; + + if (timelineName == "position" || timelineName == "spacing") { + var pathTimeline:PathConstraintPositionTimeline; + timelineScale = 1; + if (timelineName == "spacing") { + pathTimeline = new PathConstraintSpacingTimeline(values.length); + if (data.spacingMode == SpacingMode.length || data.spacingMode == SpacingMode.fixed) timelineScale = scale; + } else { + pathTimeline = new PathConstraintPositionTimeline(values.length); + if (data.positionMode == PositionMode.fixed) timelineScale = scale; + } + pathTimeline.pathConstraintIndex = index; + frameIndex = 0; + for each (valueMap in values) { + var value:Number = valueMap[timelineName] || 0; + pathTimeline.setFrame(frameIndex, valueMap["time"], value * timelineScale); + readCurve(valueMap, pathTimeline, frameIndex); + frameIndex++; + } + timelines.push(pathTimeline); + duration = Math.max(duration, + pathTimeline.frames[(pathTimeline.frameCount - 1) * PathConstraintPositionTimeline.ENTRIES]); + } else if (timelineName == "mix") { + var pathMixTimeline:PathConstraintMixTimeline = new PathConstraintMixTimeline(values.length); + pathMixTimeline.pathConstraintIndex = index; + frameIndex = 0; + for each (valueMap in values) { + rotateMix = valueMap.hasOwnProperty("rotateMix") ? valueMap["rotateMix"] : 1; + translateMix = valueMap.hasOwnProperty("translateMix") ? valueMap["translateMix"] : 1; + pathMixTimeline.setFrame(frameIndex, valueMap["time"], rotateMix, translateMix); + readCurve(valueMap, pathMixTimeline, frameIndex); + frameIndex++; + } + timelines.push(pathMixTimeline); + duration = Math.max(duration, + pathMixTimeline.frames[(pathMixTimeline.frameCount - 1) * PathConstraintMixTimeline.ENTRIES]); + } + } + } + + var deformMap:Object = map["deform"]; + for (var skinName:String in deformMap) { var skin:Skin = skeletonData.findSkin(skinName); - slotMap = ffd[skinName]; + slotMap = deformMap[skinName]; for (slotName in slotMap) { slotIndex = skeletonData.findSlotIndex(slotName); - var meshMap:Object = slotMap[slotName]; - for (var meshName:String in meshMap) { - values = meshMap[meshName]; - var ffdTimeline:FfdTimeline = new FfdTimeline(values.length); - var attachment:Attachment = skin.getAttachment(slotIndex, meshName); - if (!attachment) throw new Error("FFD attachment not found: " + meshName); - ffdTimeline.slotIndex = slotIndex; - ffdTimeline.attachment = attachment; + var timelineMap:Object = slotMap[slotName]; + for (timelineName in timelineMap) { + values = timelineMap[timelineName]; - var vertexCount:int; - if (attachment is MeshAttachment) - vertexCount = (attachment as MeshAttachment).vertices.length; - else - vertexCount = (attachment as WeightedMeshAttachment).weights.length / 3 * 2; + var attachment:VertexAttachment = skin.getAttachment(slotIndex, timelineName) as VertexAttachment; + if (attachment == null) throw new Error("Deform attachment not found: " + timelineName); + var weighted:Boolean = attachment.bones != null; + var vertices:Vector. = attachment.vertices; + var deformLength:int = weighted ? vertices.length / 3 * 2 : vertices.length; + + var deformTimeline:DeformTimeline = new DeformTimeline(values.length); + deformTimeline.slotIndex = slotIndex; + deformTimeline.attachment = attachment; frameIndex = 0; for each (valueMap in values) { - var vertices:Vector.; - if (!valueMap["vertices"]) { - if (attachment is MeshAttachment) - vertices = (attachment as MeshAttachment).vertices; - else - vertices = new Vector.(vertexCount, true); - } else { - var verticesValue:Array = valueMap["vertices"]; - vertices = new Vector.(vertexCount, true); - var start:int = valueMap["offset"] || 0; - var n:int = verticesValue.length; - if (scale == 1) { - for (i = 0; i < n; i++) - vertices[i + start] = verticesValue[i]; - } else { - for (i = 0; i < n; i++) - vertices[i + start] = verticesValue[i] * scale; + var deform:Vector.; + var verticesValue:Object = valueMap["vertices"]; + if (verticesValue == null) + deform = weighted ? new Vector.(deformLength, true) : vertices; + else { + deform = new Vector.(deformLength, true); + var start:int = Number(valueMap["offset"] || 0); + var temp:Vector. = getFloatArray(valueMap, "vertices", 1); + for (i = 0; i < temp.length; i++) { + deform[start + i] = temp[i]; + } + if (scale != 1) { + var n:int; + for (i = start, n = i + temp.length; i < n; i++) + deform[i] *= scale; } - if (attachment is MeshAttachment) { - var meshVertices:Vector. = (attachment as MeshAttachment).vertices; - for (i = 0; i < vertexCount; i++) - vertices[i] += meshVertices[i]; + if (!weighted) { + for (i = 0; i < deformLength; i++) + deform[i] += vertices[i]; } } - ffdTimeline.setFrame(frameIndex, valueMap["time"], vertices); - readCurve(ffdTimeline, frameIndex, valueMap); + deformTimeline.setFrame(frameIndex, valueMap["time"], deform); + readCurve(valueMap, deformTimeline, frameIndex); frameIndex++; } - timelines[timelines.length] = ffdTimeline; - duration = Math.max(duration, ffdTimeline.frames[ffdTimeline.frameCount - 1]); + timelines[timelines.length] = deformTimeline; + duration = Math.max(duration, deformTimeline.frames[deformTimeline.frameCount - 1]); } } } @@ -567,8 +674,8 @@ public class SkeletonJson { skeletonData.animations[skeletonData.animations.length] = new Animation(name, timelines, duration); } - static private function readCurve (timeline:CurveTimeline, frameIndex:int, valueMap:Object) : void { - var curve:Object = valueMap["curve"]; + static private function readCurve (map:Object, timeline:CurveTimeline, frameIndex:int) : void { + var curve:Object = map["curve"]; if (!curve) return; if (curve == "stepped") timeline.setStepped(frameIndex); @@ -614,14 +721,14 @@ public class SkeletonJson { } -import spine.attachments.Attachment; +import spine.attachments.MeshAttachment; internal class LinkedMesh { internal var parent:String, skin:String; internal var slotIndex:int; - internal var mesh:Attachment; + internal var mesh:MeshAttachment; - public function LinkedMesh (mesh:Attachment, skin:String, slotIndex:int, parent:String) { + public function LinkedMesh (mesh:MeshAttachment, skin:String, slotIndex:int, parent:String) { this.mesh = mesh; this.skin = skin; this.slotIndex = slotIndex; diff --git a/spine-as3/spine-as3/src/spine/Slot.as b/spine-as3/spine-as3/src/spine/Slot.as index 5daf06b27..d178cb720 100644 --- a/spine-as3/spine-as3/src/spine/Slot.as +++ b/spine-as3/spine-as3/src/spine/Slot.as @@ -86,8 +86,7 @@ public class Slot { return _bone._skeleton.time - _attachmentTime; } - public function setToSetupPose () : void { - var slotIndex:int = _bone._skeleton.data.slots.indexOf(data); + public function setToSetupPose () : void { r = _data.r; g = _data.g; b = _data.b; @@ -96,7 +95,7 @@ public class Slot { attachment = null; else { _attachment = null; - attachment = _bone._skeleton.getAttachmentForSlotIndex(slotIndex, data.attachmentName); + attachment = _bone._skeleton.getAttachmentForSlotIndex(data.index, data.attachmentName); } } diff --git a/spine-as3/spine-as3/src/spine/SlotData.as b/spine-as3/spine-as3/src/spine/SlotData.as index 609edabaa..e81f59173 100644 --- a/spine-as3/spine-as3/src/spine/SlotData.as +++ b/spine-as3/spine-as3/src/spine/SlotData.as @@ -32,6 +32,7 @@ package spine { public class SlotData { + internal var _index:int; internal var _name:String; internal var _boneData:BoneData; public var r:Number = 1; @@ -41,12 +42,18 @@ public class SlotData { public var attachmentName:String; public var blendMode:BlendMode; - public function SlotData (name:String, boneData:BoneData) { + public function SlotData (index:int, name:String, boneData:BoneData) { + if (index < 0) throw new ArgumentError("index must be >= 0."); if (name == null) throw new ArgumentError("name cannot be null."); if (boneData == null) throw new ArgumentError("boneData cannot be null."); + _index = index; _name = name; _boneData = boneData; } + + public function get index () : int { + return _index; + } public function get name () : String { return _name; diff --git a/spine-as3/spine-as3/src/spine/SpacingMode.as b/spine-as3/spine-as3/src/spine/SpacingMode.as new file mode 100644 index 000000000..df9317e6f --- /dev/null +++ b/spine-as3/spine-as3/src/spine/SpacingMode.as @@ -0,0 +1,40 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +package spine { + +public class SpacingMode { + public static const length:SpacingMode = new SpacingMode(); + public static const fixed:SpacingMode = new SpacingMode(); + public static const percent:SpacingMode = new SpacingMode(); +} + +} \ No newline at end of file diff --git a/spine-as3/spine-as3/src/spine/TransformConstraint.as b/spine-as3/spine-as3/src/spine/TransformConstraint.as index a6db2bb75..b9c16f8a0 100644 --- a/spine-as3/spine-as3/src/spine/TransformConstraint.as +++ b/spine-as3/spine-as3/src/spine/TransformConstraint.as @@ -33,43 +33,97 @@ package spine { public class TransformConstraint implements Updatable { internal var _data:TransformConstraintData; - public var bone:Bone; + internal var _bones:Vector.; public var target:Bone; + public var rotateMix:Number; public var translateMix:Number; - public var x:Number; - public var y:Number; + public var scaleMix:Number; + public var shearMix:Number; + internal var _temp:Vector. = new Vector.(2); public function TransformConstraint (data:TransformConstraintData, skeleton:Skeleton) { if (data == null) throw new ArgumentError("data cannot be null."); if (skeleton == null) throw new ArgumentError("skeleton cannot be null."); _data = data; + rotateMix = data.rotateMix; translateMix = data.translateMix; - x = data.x; - y = data.y; - - bone = skeleton.findBone(data.bone._name); + scaleMix = data.scaleMix; + shearMix = data.shearMix; + _bones = new Vector.(); + for each (var boneData:BoneData in data.bones) + _bones.push(skeleton.findBone(boneData.name)); target = skeleton.findBone(data.target._name); - } + } public function apply () : void { update(); } public function update () : void { - var translateMix:Number = translateMix; - if (translateMix > 0) { - var local:Vector. = new Vector.(2, true); - local[0] = x; - local[1] = y; - target.localToWorld(local); - bone._worldX += (local[0] - bone._worldX) * translateMix; - bone._worldY += (local[1] - bone._worldY) * translateMix; + var rotateMix:Number = this.rotateMix, translateMix:Number = this.translateMix, scaleMix:Number = this.scaleMix, shearMix:Number = this.shearMix; + var target:Bone = this.target; + var ta:Number = target.a, tb:Number = target.b, tc:Number = target.c, td:Number = target.d; + var bones:Vector. = this._bones; + for (var i:int = 0, n:int = bones.length; i < n; i++) { + var bone:Bone = bones[i]; + + if (rotateMix > 0) { + var a:Number = bone.a, b:Number = bone.b, c:Number = bone.c, d:Number = bone.d; + var r:Number = Math.atan2(tc, ta) - Math.atan2(c, a) + data.offsetRotation * MathUtils.degRad; + if (r > Math.PI) + r -= Math.PI * 2; + else if (r < -Math.PI) r += Math.PI * 2; + r *= rotateMix; + var cos:Number = Math.cos(r), sin:Number = Math.sin(r); + bone._a = cos * a - sin * c; + bone._b = cos * b - sin * d; + bone._c = sin * a + cos * c; + bone._d = sin * b + cos * d; + } + + if (translateMix > 0) { + _temp[0] = data.offsetX; + _temp[1] = data.offsetY; + target.localToWorld(_temp); + bone._worldX += (_temp[0] - bone.worldX) * translateMix; + bone._worldY += (_temp[1] - bone.worldY) * translateMix; + } + + if (scaleMix > 0) { + var bs:Number = Math.sqrt(bone.a * bone.a + bone.c * bone.c); + var ts:Number = Math.sqrt(ta * ta + tc * tc); + var s:Number = bs > 0.00001 ? (bs + (ts - bs + data.offsetScaleX) * scaleMix) / bs : 0; + bone._a *= s; + bone._c *= s; + bs = Math.sqrt(bone.b * bone.b + bone.d * bone.d); + ts = Math.sqrt(tb * tb + td * td); + s = bs > 0.00001 ? (bs + (ts - bs + data.offsetScaleY) * scaleMix) / bs : 0; + bone._b *= s; + bone._d *= s; + } + + if (shearMix > 0) { + b = bone.b, d = bone.d; + var by:Number = Math.atan2(d, b); + r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a)); + if (r > Math.PI) + r -= Math.PI * 2; + else if (r < -Math.PI) r += Math.PI * 2; + r = by + (r + data.offsetShearY * MathUtils.degRad) * shearMix; + s = Math.sqrt(b * b + d * d); + bone._b = Math.cos(r) * s; + bone._d = Math.sin(r) * s; + } } } public function get data () : TransformConstraintData { return _data; } + + public function get bones () : Vector. { + return _bones; + } public function toString () : String { return _data._name; diff --git a/spine-as3/spine-as3/src/spine/TransformConstraintData.as b/spine-as3/spine-as3/src/spine/TransformConstraintData.as index 6e5ee6fef..4fd3b8fa6 100644 --- a/spine-as3/spine-as3/src/spine/TransformConstraintData.as +++ b/spine-as3/spine-as3/src/spine/TransformConstraintData.as @@ -33,16 +33,27 @@ package spine { public class TransformConstraintData { internal var _name:String; - public var bone:BoneData; + internal var _bones:Vector. = new Vector.(); public var target:BoneData; + public var rotateMix:Number; public var translateMix:Number; - public var x:Number; - public var y:Number; + public var scaleMix:Number; + public var shearMix:Number; + public var offsetRotation:Number; + public var offsetX:Number; + public var offsetY:Number; + public var offsetScaleX:Number; + public var offsetScaleY:Number; + public var offsetShearY:Number; public function TransformConstraintData (name:String) { if (name == null) throw new ArgumentError("name cannot be null."); _name = name; } + + public function get bones () : Vector. {; + return _bones; + } public function get name () : String { return _name; diff --git a/spine-as3/spine-as3/src/spine/animation/AttachmentTimeline.as b/spine-as3/spine-as3/src/spine/animation/AttachmentTimeline.as index 85dfc212c..6b1491d2e 100644 --- a/spine-as3/spine-as3/src/spine/animation/AttachmentTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/AttachmentTimeline.as @@ -55,14 +55,13 @@ public class AttachmentTimeline implements Timeline { public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { var frames:Vector. = this.frames; - if (time < frames[0]) { - if (lastTime > time) apply(skeleton, lastTime, int.MAX_VALUE, null, 0); - return; - } else if (lastTime > time) // - lastTime = -1; + if (time < frames[0]) return; // Time is before first frame. - var frameIndex:int = time >= frames[frames.length - 1] ? frames.length - 1 : Animation.binarySearch1(frames, time) - 1; - if (frames[frameIndex] < lastTime) return; + var frameIndex:int; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = Animation.binarySearch(frames, time, 1) - 1; var attachmentName:String = attachmentNames[frameIndex]; skeleton.slots[slotIndex].attachment = attachmentName == null ? null : skeleton.getAttachmentForSlotIndex(slotIndex, attachmentName); diff --git a/spine-as3/spine-as3/src/spine/animation/ColorTimeline.as b/spine-as3/spine-as3/src/spine/animation/ColorTimeline.as index eec6b79b9..bcc182917 100644 --- a/spine-as3/spine-as3/src/spine/animation/ColorTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/ColorTimeline.as @@ -35,11 +35,9 @@ import spine.Skeleton; import spine.Slot; public class ColorTimeline extends CurveTimeline { - static private const PREV_FRAME_TIME:int = -5; - static private const FRAME_R:int = 1; - static private const FRAME_G:int = 2; - static private const FRAME_B:int = 3; - static private const FRAME_A:int = 4; + static public const ENTRIES:int = 5; + static internal const PREV_TIME:int = -5, PREV_R:int = -4, PREV_G:int = -3, PREV_B:int = -2, PREV_A:int = -1; + static internal const R:int = 1, G:int = 2, B:int = 3, A:int = 4; public var slotIndex:int; public var frames:Vector.; // time, r, g, b, a, ... @@ -51,12 +49,12 @@ public class ColorTimeline extends CurveTimeline { /** Sets the time and value of the specified keyframe. */ public function setFrame (frameIndex:int, time:Number, r:Number, g:Number, b:Number, a:Number) : void { - frameIndex *= 5; + frameIndex *= ENTRIES; frames[frameIndex] = time; - frames[int(frameIndex + 1)] = r; - frames[int(frameIndex + 2)] = g; - frames[int(frameIndex + 3)] = b; - frames[int(frameIndex + 4)] = a; + frames[int(frameIndex + R)] = r; + frames[int(frameIndex + G)] = g; + frames[int(frameIndex + B)] = b; + frames[int(frameIndex + A)] = a; } override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { @@ -64,28 +62,28 @@ public class ColorTimeline extends CurveTimeline { return; // Time is before first frame. var r:Number, g:Number, b:Number, a:Number; - if (time >= frames[int(frames.length - 5)]) { + if (time >= frames[int(frames.length - ENTRIES)]) { // Time is after last frame. - var i:int = frames.length - 1; - r = frames[int(i - 3)]; - g = frames[int(i - 2)]; - b = frames[int(i - 1)]; - a = frames[i]; + var i:int = frames.length; + r = frames[int(i + PREV_R)]; + g = frames[int(i + PREV_G)]; + b = frames[int(i + PREV_B)]; + a = frames[int(i + PREV_A)]; } else { // Interpolate between the previous frame and the current frame. - var frameIndex:int = Animation.binarySearch(frames, time, 5); - var prevFrameR:Number = frames[int(frameIndex - 4)]; - var prevFrameG:Number = frames[int(frameIndex - 3)]; - var prevFrameB:Number = frames[int(frameIndex - 2)]; - var prevFrameA:Number = frames[int(frameIndex - 1)]; - var frameTime:Number = frames[frameIndex]; - var percent:Number = 1 - (time - frameTime) / (frames[int(frameIndex + PREV_FRAME_TIME)] - frameTime); - percent = getCurvePercent(frameIndex / 5 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + var frame:int = Animation.binarySearch(frames, time, ENTRIES); + r = frames[int(frame + PREV_R)]; + g = frames[int(frame + PREV_G)]; + b = frames[int(frame + PREV_B)]; + a = frames[int(frame + PREV_A)]; + var frameTime:Number = frames[frame]; + var percent:Number = getCurvePercent(frame / ENTRIES - 1, + 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); - r = prevFrameR + (frames[int(frameIndex + FRAME_R)] - prevFrameR) * percent; - g = prevFrameG + (frames[int(frameIndex + FRAME_G)] - prevFrameG) * percent; - b = prevFrameB + (frames[int(frameIndex + FRAME_B)] - prevFrameB) * percent; - a = prevFrameA + (frames[int(frameIndex + FRAME_A)] - prevFrameA) * percent; + r += (frames[frame + R] - r) * percent; + g += (frames[frame + G] - g) * percent; + b += (frames[frame + B] - b) * percent; + a += (frames[frame + A] - a) * percent; } var slot:Slot = skeleton.slots[slotIndex]; if (alpha < 1) { diff --git a/spine-as3/spine-as3/src/spine/animation/CurveTimeline.as b/spine-as3/spine-as3/src/spine/animation/CurveTimeline.as index d234d2ef8..9a213997f 100644 --- a/spine-as3/spine-as3/src/spine/animation/CurveTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/CurveTimeline.as @@ -30,6 +30,7 @@ *****************************************************************************/ package spine.animation { + import spine.MathUtils; import spine.Event; import spine.Skeleton; @@ -37,9 +38,8 @@ import spine.Skeleton; public class CurveTimeline implements Timeline { static private const LINEAR:Number = 0; static private const STEPPED:Number = 1; - static private const BEZIER:Number = 2; - static private const BEZIER_SEGMENTS:int = 10; - static private const BEZIER_SIZE:int = BEZIER_SEGMENTS * 2 - 1; + static private const BEZIER:Number = 2; + static private const BEZIER_SIZE:int = 10 * 2 - 1; private var curves:Vector.; // type, x, y, ... @@ -66,12 +66,10 @@ public class CurveTimeline implements Timeline { * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of * the difference between the keyframe's values. */ public function setCurve (frameIndex:int, cx1:Number, cy1:Number, cx2:Number, cy2:Number) : void { - var subdiv1:Number = 1 / BEZIER_SEGMENTS, subdiv2:Number = subdiv1 * subdiv1, subdiv3:Number = subdiv2 * subdiv1; - var pre1:Number = 3 * subdiv1, pre2:Number = 3 * subdiv2, pre4:Number = 6 * subdiv2, pre5:Number = 6 * subdiv3; - var tmp1x:Number = -cx1 * 2 + cx2, tmp1y:Number = -cy1 * 2 + cy2, tmp2x:Number = (cx1 - cx2) * 3 + 1, tmp2y:Number = (cy1 - cy2) * 3 + 1; - var dfx:Number = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv3, dfy:Number = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv3; - var ddfx:Number = tmp1x * pre4 + tmp2x * pre5, ddfy:Number = tmp1y * pre4 + tmp2y * pre5; - var dddfx:Number = tmp2x * pre5, dddfy:Number = tmp2y * pre5; + var tmpx:Number = (-cx1 * 2 + cx2) * 0.03, tmpy:Number = (-cy1 * 2 + cy2) * 0.03; + var dddfx:Number = ((cx1 - cx2) * 3 + 1) * 0.006, dddfy:Number = ((cy1 - cy2) * 3 + 1) * 0.006; + var ddfx:Number = tmpx * 2 + dddfx, ddfy:Number = tmpy * 2 + dddfy; + var dfx:Number = cx1 * 0.3 + tmpx + dddfx * 0.16666667, dfy:Number = cy1 * 0.3 + tmpy + dddfy * 0.16666667; var i:int = frameIndex * BEZIER_SIZE; var curves:Vector. = this.curves; @@ -91,6 +89,7 @@ public class CurveTimeline implements Timeline { } public function getCurvePercent (frameIndex:int, percent:Number) : Number { + percent = MathUtils.clamp(percent, 0, 1); var curves:Vector. = this.curves; var i:int = frameIndex * BEZIER_SIZE; var type:Number = curves[i]; diff --git a/spine-as3/spine-as3/src/spine/animation/FfdTimeline.as b/spine-as3/spine-as3/src/spine/animation/DeformTimeline.as similarity index 83% rename from spine-as3/spine-as3/src/spine/animation/FfdTimeline.as rename to spine-as3/spine-as3/src/spine/animation/DeformTimeline.as index 8f87cd07b..f91ec9604 100644 --- a/spine-as3/spine-as3/src/spine/animation/FfdTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/DeformTimeline.as @@ -30,19 +30,18 @@ *****************************************************************************/ package spine.animation { -import spine.attachments.FfdAttachment; +import spine.attachments.VertexAttachment; import spine.Event; import spine.Skeleton; import spine.Slot; -import spine.attachments.Attachment; -public class FfdTimeline extends CurveTimeline { +public class DeformTimeline extends CurveTimeline { public var slotIndex:int; public var frames:Vector.; public var frameVertices:Vector.>; - public var attachment:Attachment; + public var attachment:VertexAttachment; - public function FfdTimeline (frameCount:int) { + public function DeformTimeline (frameCount:int) { super(frameCount); frames = new Vector.(frameCount, true); frameVertices = new Vector.>(frameCount, true); @@ -56,8 +55,8 @@ public class FfdTimeline extends CurveTimeline { override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { var slot:Slot = skeleton.slots[slotIndex]; - var slotAttachment:FfdAttachment = slot.attachment as FfdAttachment; - if (!slotAttachment || !slotAttachment.applyFFD(attachment)) return; + var slotAttachment:VertexAttachment = slot.attachment as VertexAttachment; + if (!slotAttachment || !slotAttachment.applyDeform(attachment)) return; var frames:Vector. = this.frames; if (time < frames[0]) return; // Time is before first frame. @@ -83,13 +82,11 @@ public class FfdTimeline extends CurveTimeline { } // Interpolate between the previous frame and the current frame. - var frameIndex:int = Animation.binarySearch1(frames, time); - var frameTime:Number = frames[frameIndex]; - var percent:Number = 1 - (time - frameTime) / (frames[int(frameIndex - 1)] - frameTime); - percent = getCurvePercent(frameIndex - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - - var prevVertices:Vector. = frameVertices[int(frameIndex - 1)]; - var nextVertices:Vector. = frameVertices[frameIndex]; + var frame:int = Animation.binarySearch1(frames, time); + var prevVertices:Vector. = frameVertices[int(frame - 1)]; + var nextVertices:Vector. = frameVertices[frame]; + var frameTime:Number = frames[frame]; + var percent:Number = getCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime)); var prev:Number; if (alpha < 1) { diff --git a/spine-as3/spine-as3/src/spine/animation/EventTimeline.as b/spine-as3/spine-as3/src/spine/animation/EventTimeline.as index 832d34c74..01e8615f7 100644 --- a/spine-as3/spine-as3/src/spine/animation/EventTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/EventTimeline.as @@ -63,19 +63,19 @@ public class EventTimeline implements Timeline { return; if (time < frames[0]) return; // Time is before first frame. - var frameIndex:int; + var frame:int; if (lastTime < frames[0]) - frameIndex = 0; + frame = 0; else { - frameIndex = Animation.binarySearch1(frames, lastTime); - var frame:Number = frames[frameIndex]; - while (frameIndex > 0) { // Fire multiple events with the same frame. - if (frames[int(frameIndex - 1)] != frame) break; - frameIndex--; + frame = Animation.binarySearch1(frames, lastTime); + var frameTime:Number = frames[frame]; + while (frame > 0) { // Fire multiple events with the same frame. + if (frames[int(frame - 1)] != frameTime) break; + frame--; } } - for (; frameIndex < frameCount && time >= frames[frameIndex]; frameIndex++) - firedEvents[firedEvents.length] = events[frameIndex]; + for (; frame < frameCount && time >= frames[frame]; frame++) + firedEvents[firedEvents.length] = events[frame]; } } diff --git a/spine-as3/spine-as3/src/spine/animation/IkConstraintTimeline.as b/spine-as3/spine-as3/src/spine/animation/IkConstraintTimeline.as index ad6f6014f..444163d7b 100644 --- a/spine-as3/spine-as3/src/spine/animation/IkConstraintTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/IkConstraintTimeline.as @@ -35,48 +35,45 @@ import spine.IkConstraint; import spine.Skeleton; public class IkConstraintTimeline extends CurveTimeline { - static private const PREV_FRAME_TIME:int = -3; - static private const PREV_FRAME_MIX:int = -2; - static private const PREV_FRAME_BEND_DIRECTION:int = -1; - static private const FRAME_MIX:int = 1; + static public const ENTRIES:int = 3; + static internal const PREV_TIME:int = -3, PREV_MIX:int = -2, PREV_BEND_DIRECTION:int = -1; + static internal const MIX:int = 1, BEND_DIRECTION:int = 2; public var ikConstraintIndex:int; public var frames:Vector.; // time, mix, bendDirection, ... public function IkConstraintTimeline (frameCount:int) { super(frameCount); - frames = new Vector.(frameCount * 3, true); + frames = new Vector.(frameCount * ENTRIES, true); } /** Sets the time, mix and bend direction of the specified keyframe. */ public function setFrame (frameIndex:int, time:Number, mix:Number, bendDirection:int) : void { - frameIndex *= 3; + frameIndex *= ENTRIES; frames[frameIndex] = time; - frames[int(frameIndex + 1)] = mix; - frames[int(frameIndex + 2)] = bendDirection; + frames[int(frameIndex + MIX)] = mix; + frames[int(frameIndex + BEND_DIRECTION)] = bendDirection; } override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { if (time < frames[0]) return; // Time is before first frame. - var ikConstraint:IkConstraint = skeleton.ikConstraints[ikConstraintIndex]; + var constraint:IkConstraint = skeleton.ikConstraints[ikConstraintIndex]; - if (time >= frames[int(frames.length - 3)]) { // Time is after last frame. - ikConstraint.mix += (frames[int(frames.length - 2)] - ikConstraint.mix) * alpha; - ikConstraint.bendDirection = int(frames[int(frames.length - 1)]); + if (time >= frames[int(frames.length - ENTRIES)]) { // Time is after last frame. + constraint.mix += (frames[int(frames.length + PREV_MIX)] - constraint.mix) * alpha; + constraint.bendDirection = int(frames[int(frames.length + PREV_BEND_DIRECTION)]); return; } // Interpolate between the previous frame and the current frame. - var frameIndex:int = Animation.binarySearch(frames, time, 3); - var prevFrameMix:Number = frames[int(frameIndex + PREV_FRAME_MIX)]; - var frameTime:Number = frames[frameIndex]; - var percent:Number = 1 - (time - frameTime) / (frames[int(frameIndex + PREV_FRAME_TIME)] - frameTime); - percent = getCurvePercent(frameIndex / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + var frame:int = Animation.binarySearch(frames, time, ENTRIES); + var mix:Number = frames[int(frame + PREV_MIX)]; + var frameTime:Number = frames[frame]; + var percent:Number = getCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); - var mix:Number = prevFrameMix + (frames[int(frameIndex + FRAME_MIX)] - prevFrameMix) * percent; - ikConstraint.mix += (mix - ikConstraint.mix) * alpha; - ikConstraint.bendDirection = int(frames[int(frameIndex + PREV_FRAME_BEND_DIRECTION)]); + constraint.mix += (mix + (frames[frame + MIX] - mix) * percent - constraint.mix) * alpha; + constraint.bendDirection = int(frames[frame + PREV_BEND_DIRECTION]); } } diff --git a/spine-as3/spine-as3/src/spine/animation/Listeners.as b/spine-as3/spine-as3/src/spine/animation/Listeners.as index f517c40e6..f0a246ac2 100644 --- a/spine-as3/spine-as3/src/spine/animation/Listeners.as +++ b/spine-as3/spine-as3/src/spine/animation/Listeners.as @@ -33,6 +33,9 @@ package spine.animation { public class Listeners { private var _listeners:Vector. = new Vector.(); + public function Listeners () { + } + public function get listeners () : Vector. { return _listeners; } @@ -40,13 +43,17 @@ package spine.animation { public function add (listener:Function) : void { if (listener == null) throw new ArgumentError("listener cannot be null."); - _listeners[_listeners.length] = listener; + var indexOf:int = _listeners.indexOf(listener); + if (indexOf == -1) + _listeners[_listeners.length] = listener; } public function remove (listener:Function) : void { if (listener == null) throw new ArgumentError("listener cannot be null."); - _listeners.splice(_listeners.indexOf(listener), 1); + var indexOf:int = _listeners.indexOf(listener); + if (indexOf != -1) + _listeners.splice(_listeners.indexOf(listener), 1); } public function invoke (... args:*) : void { diff --git a/spine-as3/spine-as3/src/spine/animation/PathConstraintMixTimeline.as b/spine-as3/spine-as3/src/spine/animation/PathConstraintMixTimeline.as new file mode 100644 index 000000000..1fb9c0315 --- /dev/null +++ b/spine-as3/spine-as3/src/spine/animation/PathConstraintMixTimeline.as @@ -0,0 +1,83 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +package spine.animation { +import spine.Event; +import spine.Skeleton; +import spine.PathConstraint; + +public class PathConstraintMixTimeline extends CurveTimeline { + static public const ENTRIES:int = 3; + static internal const PREV_TIME:int = -3, PREV_ROTATE:int = -2, PREV_TRANSLATE:int = -1; + static internal const ROTATE:int = 1, TRANSLATE:int = 2; + + public var pathConstraintIndex:int; + + public var frames:Vector.; // time, rotate mix, translate mix, ... + + public function PathConstraintMixTimeline (frameCount:int) { + super(frameCount); + frames = new Vector.(frameCount * ENTRIES, true); + } + + /** Sets the time and mixes of the specified keyframe. */ + public function setFrame (frameIndex:int, time:Number, rotateMix:Number, translateMix:Number) : void { + frameIndex *= ENTRIES; + frames[frameIndex] = time; + frames[frameIndex + ROTATE] = rotateMix; + frames[frameIndex + TRANSLATE] = translateMix; + } + + override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { + if (time < frames[0]) return; // Time is before first frame. + + var constraint:PathConstraint = skeleton.pathConstraints[pathConstraintIndex]; + + if (time >= frames[frames.length - ENTRIES]) { // Time is after last frame. + var i:int = frames.length; + constraint.rotateMix += (frames[i + PREV_ROTATE] - constraint.rotateMix) * alpha; + constraint.translateMix += (frames[i + PREV_TRANSLATE] - constraint.translateMix) * alpha; + return; + } + + // Interpolate between the previous frame and the current frame. + var frame:int = Animation.binarySearch(frames, time, ENTRIES); + var rotate:Number = frames[frame + PREV_ROTATE]; + var translate:Number = frames[frame + PREV_TRANSLATE]; + var frameTime:Number = frames[frame]; + var percent:Number = getCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); + + constraint.rotateMix += (rotate + (frames[frame + ROTATE] - rotate) * percent - constraint.rotateMix) * alpha; + constraint.translateMix += (translate + (frames[frame + TRANSLATE] - translate) * percent - constraint.translateMix) + * alpha; + } +} +} \ No newline at end of file diff --git a/spine-as3/spine-as3/src/spine/animation/PathConstraintPositionTimeline.as b/spine-as3/spine-as3/src/spine/animation/PathConstraintPositionTimeline.as new file mode 100644 index 000000000..ba013f3e6 --- /dev/null +++ b/spine-as3/spine-as3/src/spine/animation/PathConstraintPositionTimeline.as @@ -0,0 +1,78 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +package spine.animation { +import spine.PathConstraint; +import spine.Event; +import spine.Skeleton; + +public class PathConstraintPositionTimeline extends CurveTimeline { + static public const ENTRIES:int = 2; + static internal const PREV_TIME:int = -2, PREV_VALUE:int = -1; + static internal const VALUE:int = 1; + + public var pathConstraintIndex:int; + + public var frames:Vector.; // time, position, ... + + public function PathConstraintPositionTimeline (frameCount:int) { + super(frameCount); + frames = new Vector.(frameCount * ENTRIES, true); + } + + /** Sets the time and value of the specified keyframe. */ + public function setFrame (frameIndex:int, time:Number, value:Number) : void { + frameIndex *= ENTRIES; + frames[frameIndex] = time; + frames[frameIndex + VALUE] = value; + } + + override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { + if (time < frames[0]) return; // Time is before first frame. + + var constraint:PathConstraint = skeleton.pathConstraints[pathConstraintIndex]; + + if (time >= frames[frames.length - ENTRIES]) { // Time is after last frame. + var i:int = frames.length; + constraint.position += (frames[i + PREV_VALUE] - constraint.position) * alpha; + return; + } + + // Interpolate between the previous frame and the current frame. + var frame:int = Animation.binarySearch(frames, time, ENTRIES); + var position:Number = frames[frame + PREV_VALUE]; + var frameTime:Number = frames[frame]; + var percent:Number = getCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); + + constraint.position += (position + (frames[frame + VALUE] - position) * percent - constraint.position) * alpha; + } +} +} \ No newline at end of file diff --git a/spine-as3/spine-as3/src/spine/animation/PathConstraintSpacingTimeline.as b/spine-as3/spine-as3/src/spine/animation/PathConstraintSpacingTimeline.as new file mode 100644 index 000000000..8a2a39e9e --- /dev/null +++ b/spine-as3/spine-as3/src/spine/animation/PathConstraintSpacingTimeline.as @@ -0,0 +1,62 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +package spine.animation { +import spine.Skeleton; +import spine.Event; +import spine.PathConstraint; + +public class PathConstraintSpacingTimeline extends PathConstraintPositionTimeline { + public function PathConstraintSpacingTimeline (frameCount:int) { + super(frameCount); + } + + override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { + if (time < frames[0]) return; // Time is before first frame. + + var constraint:PathConstraint = skeleton.pathConstraints[pathConstraintIndex]; + + if (time >= frames[frames.length - ENTRIES]) { // Time is after last frame. + var i:int = frames.length; + constraint.spacing += (frames[i + PREV_VALUE] - constraint.spacing) * alpha; + return; + } + + // Interpolate between the previous frame and the current frame. + var frame:int = Animation.binarySearch(frames, time, ENTRIES); + var spacing:Number = frames[frame + PREV_VALUE]; + var frameTime:Number = frames[frame]; + var percent:Number = getCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); + + constraint.spacing += (spacing + (frames[frame + VALUE] - spacing) * percent - constraint.spacing) * alpha; + } +} +} \ No newline at end of file diff --git a/spine-as3/spine-as3/src/spine/animation/RotateTimeline.as b/spine-as3/spine-as3/src/spine/animation/RotateTimeline.as index 765fb5a21..524ad946e 100644 --- a/spine-as3/spine-as3/src/spine/animation/RotateTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/RotateTimeline.as @@ -35,8 +35,9 @@ import spine.Event; import spine.Skeleton; public class RotateTimeline extends CurveTimeline { - static private const PREV_FRAME_TIME:int = -2; - static private const FRAME_VALUE:int = 1; + static public const ENTRIES:int = 2; + static private const PREV_TIME:int = -2, PREV_ROTATION:int = -1; + static private const ROTATION:int = 1; public var boneIndex:int; public var frames:Vector.; // time, value, ... @@ -47,10 +48,10 @@ public class RotateTimeline extends CurveTimeline { } /** Sets the time and angle of the specified keyframe. */ - public function setFrame (frameIndex:int, time:Number, angle:Number) : void { - frameIndex *= 2; + public function setFrame (frameIndex:int, time:Number, degrees:Number) : void { + frameIndex <<= 1; frames[frameIndex] = time; - frames[int(frameIndex + 1)] = angle; + frames[int(frameIndex + ROTATION)] = degrees; } override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { @@ -58,10 +59,9 @@ public class RotateTimeline extends CurveTimeline { return; // Time is before first frame. var bone:Bone = skeleton.bones[boneIndex]; - - var amount:Number; + if (time >= frames[int(frames.length - 2)]) { // Time is after last frame. - amount = bone.data.rotation + frames[int(frames.length - 1)] - bone.rotation; + var amount:Number = bone.data.rotation + frames[int(frames.length + PREV_ROTATION)] - bone.rotation; while (amount > 180) amount -= 360; while (amount < -180) @@ -71,18 +71,17 @@ public class RotateTimeline extends CurveTimeline { } // Interpolate between the previous frame and the current frame. - var frameIndex:int = Animation.binarySearch(frames, time, 2); - var prevFrameValue:Number = frames[int(frameIndex - 1)]; - var frameTime:Number = frames[frameIndex]; - var percent:Number = 1 - (time - frameTime) / (frames[int(frameIndex + PREV_FRAME_TIME)] - frameTime); - percent = getCurvePercent(frameIndex / 2 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + var frame:int = Animation.binarySearch(frames, time, ENTRIES); + var prevRotation:Number = frames[int(frame + PREV_ROTATION)]; + var frameTime:Number = frames[frame]; + var percent:Number = getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); - amount = frames[int(frameIndex + FRAME_VALUE)] - prevFrameValue; + amount = frames[int(frame + ROTATION)] - prevRotation; while (amount > 180) amount -= 360; while (amount < -180) amount += 360; - amount = bone.data.rotation + (prevFrameValue + amount * percent) - bone.rotation; + amount = bone.data.rotation + (prevRotation + amount * percent) - bone.rotation; while (amount > 180) amount -= 360; while (amount < -180) diff --git a/spine-as3/spine-as3/src/spine/animation/ScaleTimeline.as b/spine-as3/spine-as3/src/spine/animation/ScaleTimeline.as index 5c3004ae5..ec5dd47f1 100644 --- a/spine-as3/spine-as3/src/spine/animation/ScaleTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/ScaleTimeline.as @@ -44,22 +44,21 @@ public class ScaleTimeline extends TranslateTimeline { return; // Time is before first frame. var bone:Bone = skeleton.bones[boneIndex]; - if (time >= frames[int(frames.length - 3)]) { // Time is after last frame. - bone.scaleX += (bone.data.scaleX * frames[int(frames.length - 2)] - bone.scaleX) * alpha; - bone.scaleY += (bone.data.scaleY * frames[int(frames.length - 1)] - bone.scaleY) * alpha; + if (time >= frames[int(frames.length - ENTRIES)]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX * frames[int(frames.length + PREV_X)] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY * frames[int(frames.length + PREV_Y)] - bone.scaleY) * alpha; return; } // Interpolate between the previous frame and the current frame. - var frameIndex:int = Animation.binarySearch(frames, time, 3); - var prevFrameX:Number = frames[int(frameIndex - 2)]; - var prevFrameY:Number = frames[int(frameIndex - 1)]; - var frameTime:Number = frames[frameIndex]; - var percent:Number = 1 - (time - frameTime) / (frames[int(frameIndex + PREV_FRAME_TIME)] - frameTime); - percent = getCurvePercent(frameIndex / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + var frame:int = Animation.binarySearch(frames, time, ENTRIES); + var prevX:Number = frames[frame + PREV_X]; + var prevY:Number = frames[frame + PREV_Y]; + var frameTime:Number = frames[frame]; + var percent:Number = getCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); - bone.scaleX += (bone.data.scaleX * (prevFrameX + (frames[int(frameIndex + FRAME_X)] - prevFrameX) * percent) - bone.scaleX) * alpha; - bone.scaleY += (bone.data.scaleY * (prevFrameY + (frames[int(frameIndex + FRAME_Y)] - prevFrameY) * percent) - bone.scaleY) * alpha; + bone.scaleX += (bone.data.scaleX * (prevX + (frames[frame + X] - prevX) * percent) - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY * (prevY + (frames[frame + Y] - prevY) * percent) - bone.scaleY) * alpha; } } diff --git a/spine-as3/spine-as3/src/spine/animation/ShearTimeline.as b/spine-as3/spine-as3/src/spine/animation/ShearTimeline.as new file mode 100644 index 000000000..7c9fdf0f3 --- /dev/null +++ b/spine-as3/spine-as3/src/spine/animation/ShearTimeline.as @@ -0,0 +1,34 @@ +package spine.animation { + import spine.Event; + import spine.Skeleton; + import spine.Bone; + +public class ShearTimeline extends TranslateTimeline { + public function ShearTimeline (frameCount:int) { + super(frameCount); + } + + override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { + var frames:Vector. = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone:Bone = skeleton.bones[boneIndex]; + if (time >= frames[frames.length - ENTRIES]) { // Time is after last frame. + bone.shearX += (bone.data.shearX + frames[frames.length + PREV_X] - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + frames[frames.length + PREV_Y] - bone.shearY) * alpha; + return; + } + + // Interpolate between the previous frame and the current frame. + var frame:int = Animation.binarySearch(frames, time, ENTRIES); + var prevX:Number = frames[frame + PREV_X]; + var prevY:Number = frames[frame + PREV_Y]; + var frameTime:Number = frames[frame]; + var percent:Number = getCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); + + bone.shearX += (bone.data.shearX + (prevX + (frames[frame + X] - prevX) * percent) - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + (prevY + (frames[frame + Y] - prevY) * percent) - bone.shearY) * alpha; + } +} + +} \ No newline at end of file diff --git a/spine-as3/spine-as3/src/spine/animation/TrackEntry.as b/spine-as3/spine-as3/src/spine/animation/TrackEntry.as index 4eecb3dc5..8112bba58 100644 --- a/spine-as3/spine-as3/src/spine/animation/TrackEntry.as +++ b/spine-as3/spine-as3/src/spine/animation/TrackEntry.as @@ -40,6 +40,9 @@ public class TrackEntry { internal var mixTime:Number, mixDuration:Number, mix:Number = 1; public var onStart:Function, onEnd:Function, onComplete:Function, onEvent:Function; + public function TrackEntry () { + } + public function toString () : String { return animation == null ? "" : animation.name; } diff --git a/spine-as3/spine-as3/src/spine/animation/TransformConstraintTimeline.as b/spine-as3/spine-as3/src/spine/animation/TransformConstraintTimeline.as new file mode 100644 index 000000000..72de9dff1 --- /dev/null +++ b/spine-as3/spine-as3/src/spine/animation/TransformConstraintTimeline.as @@ -0,0 +1,90 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +package spine.animation { +import spine.Event; +import spine.Skeleton; +import spine.TransformConstraint; + +public class TransformConstraintTimeline extends CurveTimeline { + static public const ENTRIES:int = 5; + static internal const PREV_TIME:int = -5, PREV_ROTATE:int = -4, PREV_TRANSLATE:int = -3, PREV_SCALE:int = -2, PREV_SHEAR:int = -1; + static internal const ROTATE:int = 1, TRANSLATE:int = 2, SCALE:int = 3, SHEAR:int = 4; + + public var transformConstraintIndex:int; + public var frames:Vector.; // time, rotate mix, translate mix, scale mix, shear mix, ... + + public function TransformConstraintTimeline (frameCount:int) { + super(frameCount); + frames = new Vector.(frameCount * ENTRIES, true); + } + + /** Sets the time and mixes of the specified keyframe. */ + public function setFrame (frameIndex:int, time:Number, rotateMix:Number, translateMix:Number, scaleMix:Number, shearMix:Number) : void { + frameIndex *= ENTRIES; + frames[frameIndex] = time; + frames[frameIndex + ROTATE] = rotateMix; + frames[frameIndex + TRANSLATE] = translateMix; + frames[frameIndex + SCALE] = scaleMix; + frames[frameIndex + SHEAR] = shearMix; + } + + override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { + if (time < frames[0]) return; // Time is before first frame. + + var constraint:TransformConstraint = skeleton.transformConstraints[transformConstraintIndex]; + + if (time >= frames[frames.length - ENTRIES]) { // Time is after last frame. + var i:int = frames.length; + constraint.rotateMix += (frames[i + PREV_ROTATE] - constraint.rotateMix) * alpha; + constraint.translateMix += (frames[i + PREV_TRANSLATE] - constraint.translateMix) * alpha; + constraint.scaleMix += (frames[i + PREV_SCALE] - constraint.scaleMix) * alpha; + constraint.shearMix += (frames[i + PREV_SHEAR] - constraint.shearMix) * alpha; + return; + } + + // Interpolate between the previous frame and the current frame. + var frame:int = Animation.binarySearch(frames, time, ENTRIES); + var frameTime:Number = frames[frame]; + var percent:Number = getCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); + + var rotate:Number = frames[frame + PREV_ROTATE]; + var translate:Number = frames[frame + PREV_TRANSLATE]; + var scale:Number = frames[frame + PREV_SCALE]; + var shear:Number = frames[frame + PREV_SHEAR]; + constraint.rotateMix += (rotate + (frames[frame + ROTATE] - rotate) * percent - constraint.rotateMix) * alpha; + constraint.translateMix += (translate + (frames[frame + TRANSLATE] - translate) * percent - constraint.translateMix) + * alpha; + constraint.scaleMix += (scale + (frames[frame + SCALE] - scale) * percent - constraint.scaleMix) * alpha; + constraint.shearMix += (shear + (frames[frame + SHEAR] - shear) * percent - constraint.shearMix) * alpha; + } +} +} \ No newline at end of file diff --git a/spine-as3/spine-as3/src/spine/animation/TranslateTimeline.as b/spine-as3/spine-as3/src/spine/animation/TranslateTimeline.as index 9e49eb923..d9c7dc537 100644 --- a/spine-as3/spine-as3/src/spine/animation/TranslateTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/TranslateTimeline.as @@ -35,24 +35,24 @@ import spine.Event; import spine.Skeleton; public class TranslateTimeline extends CurveTimeline { - static internal const PREV_FRAME_TIME:int = -3; - static internal const FRAME_X:int = 1; - static internal const FRAME_Y:int = 2; + static public const ENTRIES:int = 3; + static internal const PREV_TIME:int = -3, PREV_X:int = -2, PREV_Y:int = -1; + static internal const X:int = 1, Y:int = 2; public var boneIndex:int; public var frames:Vector.; // time, value, value, ... public function TranslateTimeline (frameCount:int) { super(frameCount); - frames = new Vector.(frameCount * 3, true); + frames = new Vector.(frameCount * ENTRIES, true); } /** Sets the time and value of the specified keyframe. */ public function setFrame (frameIndex:int, time:Number, x:Number, y:Number) : void { - frameIndex *= 3; + frameIndex *= ENTRIES; frames[frameIndex] = time; - frames[int(frameIndex + 1)] = x; - frames[int(frameIndex + 2)] = y; + frames[int(frameIndex + X)] = x; + frames[int(frameIndex + Y)] = y; } override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { @@ -61,22 +61,21 @@ public class TranslateTimeline extends CurveTimeline { var bone:Bone = skeleton.bones[boneIndex]; - if (time >= frames[int(frames.length - 3)]) { // Time is after last frame. - bone.x += (bone.data.x + frames[int(frames.length - 2)] - bone.x) * alpha; - bone.y += (bone.data.y + frames[int(frames.length - 1)] - bone.y) * alpha; + if (time >= frames[int(frames.length - ENTRIES)]) { // Time is after last frame. + bone.x += (bone.data.x + frames[int(frames.length + PREV_X)] - bone.x) * alpha; + bone.y += (bone.data.y + frames[int(frames.length + PREV_Y)] - bone.y) * alpha; return; } // Interpolate between the previous frame and the current frame. - var frameIndex:int = Animation.binarySearch(frames, time, 3); - var prevFrameX:Number = frames[int(frameIndex - 2)]; - var prevFrameY:Number = frames[int(frameIndex - 1)]; - var frameTime:Number = frames[frameIndex]; - var percent:Number = 1 - (time - frameTime) / (frames[int(frameIndex + PREV_FRAME_TIME)] - frameTime); - percent = getCurvePercent(frameIndex / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + var frame:int = Animation.binarySearch(frames, time, ENTRIES); + var prevX:Number = frames[frame + PREV_X]; + var prevY:Number = frames[frame + PREV_Y]; + var frameTime:Number = frames[frame]; + var percent:Number = getCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); - bone.x += (bone.data.x + prevFrameX + (frames[int(frameIndex + FRAME_X)] - prevFrameX) * percent - bone.x) * alpha; - bone.y += (bone.data.y + prevFrameY + (frames[int(frameIndex + FRAME_Y)] - prevFrameY) * percent - bone.y) * alpha; + bone.x += (bone.data.x + prevX + (frames[frame + X] - prevX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + prevY + (frames[frame + Y] - prevY) * percent - bone.y) * alpha; } } diff --git a/spine-as3/spine-as3/src/spine/atlas/AtlasPage.as b/spine-as3/spine-as3/src/spine/atlas/AtlasPage.as index e11edacd2..cc0bf3dbb 100644 --- a/spine-as3/spine-as3/src/spine/atlas/AtlasPage.as +++ b/spine-as3/spine-as3/src/spine/atlas/AtlasPage.as @@ -41,6 +41,9 @@ public class AtlasPage { public var rendererObject:Object; public var width:int; public var height:int; + + public function AtlasPage () { + } } } diff --git a/spine-as3/spine-as3/src/spine/atlas/AtlasRegion.as b/spine-as3/spine-as3/src/spine/atlas/AtlasRegion.as index 553d2abfa..7e3e9488e 100644 --- a/spine-as3/spine-as3/src/spine/atlas/AtlasRegion.as +++ b/spine-as3/spine-as3/src/spine/atlas/AtlasRegion.as @@ -51,6 +51,9 @@ public class AtlasRegion { public var splits:Vector.; public var pads:Vector.; public var rendererObject:Object; + + public function AtlasRegion () { + } } } diff --git a/spine-as3/spine-as3/src/spine/attachments/AtlasAttachmentLoader.as b/spine-as3/spine-as3/src/spine/attachments/AtlasAttachmentLoader.as index 82ff1a52a..31e1f225b 100644 --- a/spine-as3/spine-as3/src/spine/attachments/AtlasAttachmentLoader.as +++ b/spine-as3/spine-as3/src/spine/attachments/AtlasAttachmentLoader.as @@ -82,32 +82,14 @@ public class AtlasAttachmentLoader implements AttachmentLoader { attachment.regionOriginalHeight = region.originalHeight; return attachment; } - - public function newWeightedMeshAttachment (skin:Skin, name:String, path:String) : WeightedMeshAttachment { - var region:AtlasRegion = atlas.findRegion(path); - if (region == null) - throw new Error("Region not found in atlas: " + path + " (weighted mesh attachment: " + name + ")"); - var attachment:WeightedMeshAttachment = new WeightedMeshAttachment(name); - attachment.rendererObject = region; - var scaleX:Number = region.page.width / nextPOT(region.page.width); - var scaleY:Number = region.page.height / nextPOT(region.page.height); - attachment.regionU = region.u * scaleX; - attachment.regionV = region.v * scaleY; - attachment.regionU2 = region.u2 * scaleX; - attachment.regionV2 = region.v2 * scaleY; - attachment.regionRotate = region.rotate; - attachment.regionOffsetX = region.offsetX; - attachment.regionOffsetY = region.offsetY; - attachment.regionWidth = region.width; - attachment.regionHeight = region.height; - attachment.regionOriginalWidth = region.originalWidth; - attachment.regionOriginalHeight = region.originalHeight; - return attachment; - } public function newBoundingBoxAttachment (skin:Skin, name:String) : BoundingBoxAttachment { return new BoundingBoxAttachment(name); } + + public function newPathAttachment(skin:Skin, name:String) : PathAttachment { + return new PathAttachment(name); + } static public function nextPOT (value:int) : int { value--; diff --git a/spine-as3/spine-as3/src/spine/attachments/AttachmentLoader.as b/spine-as3/spine-as3/src/spine/attachments/AttachmentLoader.as index c5bec787b..002952f67 100644 --- a/spine-as3/spine-as3/src/spine/attachments/AttachmentLoader.as +++ b/spine-as3/spine-as3/src/spine/attachments/AttachmentLoader.as @@ -39,11 +39,11 @@ public interface AttachmentLoader { /** @return May be null to not load an attachment. */ function newMeshAttachment (skin:Skin, name:String, path:String) : MeshAttachment; - /** @return May be null to not load an attachment. */ - function newWeightedMeshAttachment (skin:Skin, name:String, path:String) : WeightedMeshAttachment; - /** @return May be null to not load an attachment. */ function newBoundingBoxAttachment (skin:Skin, name:String) : BoundingBoxAttachment; + + /** @return May be null to not load an attachment */ + function newPathAttachment(skin:Skin, name:String): PathAttachment; } } diff --git a/spine-as3/spine-as3/src/spine/attachments/AttachmentType.as b/spine-as3/spine-as3/src/spine/attachments/AttachmentType.as index 786afb086..68a301444 100644 --- a/spine-as3/spine-as3/src/spine/attachments/AttachmentType.as +++ b/spine-as3/spine-as3/src/spine/attachments/AttachmentType.as @@ -35,10 +35,9 @@ public class AttachmentType { public static const region:AttachmentType = new AttachmentType(0, "region"); public static const regionsequence:AttachmentType = new AttachmentType(1, "regionsequence"); public static const boundingbox:AttachmentType = new AttachmentType(2, "boundingbox"); - public static const mesh:AttachmentType = new AttachmentType(3, "mesh"); - public static const weightedmesh:AttachmentType = new AttachmentType(4, "weightedmesh"); + public static const mesh:AttachmentType = new AttachmentType(3, "mesh"); public static const linkedmesh:AttachmentType = new AttachmentType(3, "linkedmesh"); - public static const weightedlinkedmesh:AttachmentType = new AttachmentType(4, "weightedlinkedmesh"); + public static const path:AttachmentType = new AttachmentType(4, "path"); public var ordinal:int; public var name:String; diff --git a/spine-as3/spine-as3/src/spine/attachments/BoundingBoxAttachment.as b/spine-as3/spine-as3/src/spine/attachments/BoundingBoxAttachment.as index 916ae9e9c..a27590c8f 100644 --- a/spine-as3/spine-as3/src/spine/attachments/BoundingBoxAttachment.as +++ b/spine-as3/spine-as3/src/spine/attachments/BoundingBoxAttachment.as @@ -30,31 +30,10 @@ *****************************************************************************/ package spine.attachments { -import spine.Bone; - -public dynamic class BoundingBoxAttachment extends Attachment { - public var vertices:Vector. = new Vector.(); +public dynamic class BoundingBoxAttachment extends VertexAttachment { public function BoundingBoxAttachment (name:String) { super(name); - } - - public function computeWorldVertices (x:Number, y:Number, bone:Bone, worldVertices:Vector.) : void { - x += bone.worldX; - y += bone.worldY; - var m00:Number = bone.a; - var m01:Number = bone.b; - var m10:Number = bone.c; - var m11:Number = bone.d; - var vertices:Vector. = this.vertices; - for (var i:int = 0, n:int = vertices.length; i < n; i += 2) { - var ii:int = i + 1; - var px:Number = vertices[i]; - var py:Number = vertices[ii]; - worldVertices[i] = px * m00 + py * m01 + x; - worldVertices[ii] = px * m10 + py * m11 + y; - } - } + } } - } diff --git a/spine-as3/spine-as3/src/spine/attachments/MeshAttachment.as b/spine-as3/spine-as3/src/spine/attachments/MeshAttachment.as index e0f61b199..3f7147265 100644 --- a/spine-as3/spine-as3/src/spine/attachments/MeshAttachment.as +++ b/spine-as3/spine-as3/src/spine/attachments/MeshAttachment.as @@ -30,21 +30,19 @@ *****************************************************************************/ package spine.attachments { -import spine.Slot; -import spine.Bone; -public dynamic class MeshAttachment extends Attachment implements FfdAttachment { - public var vertices:Vector.; +public dynamic class MeshAttachment extends VertexAttachment { + public var worldVertices:Vector.; public var uvs:Vector.; public var regionUVs:Vector.; - public var triangles:Vector.; - public var hullLength:int; + public var triangles:Vector.; public var r:Number = 1; public var g:Number = 1; public var b:Number = 1; public var a:Number = 1; + public var hullLength:int; private var _parentMesh:MeshAttachment; - public var inheritFFD:Boolean; + public var inheritDeform:Boolean; public var path:String; public var rendererObject:Object; @@ -86,27 +84,8 @@ public dynamic class MeshAttachment extends Attachment implements FfdAttachment } } - public function computeWorldVertices (x:Number, y:Number, slot:Slot, worldVertices:Vector.) : void { - var bone:Bone = slot.bone; - x += bone.worldX; - y += bone.worldY; - var m00:Number = bone.a; - var m01:Number = bone.b; - var m10:Number = bone.c; - var m11:Number = bone.d; - var vertices:Vector. = this.vertices; - var verticesCount:int = vertices.length; - if (slot.attachmentVertices.length == verticesCount) vertices = slot.attachmentVertices; - for (var i:int = 0, ii:int = 0; i < verticesCount; i += 2, ii += 2) { - var vx:Number = vertices[i]; - var vy:Number = vertices[int(i + 1)]; - worldVertices[ii] = vx * m00 + vy * m01 + x; - worldVertices[int(ii + 1)] = vx * m10 + vy * m11 + y; - } - } - public function applyFFD (sourceAttachment:Attachment) : Boolean { - return this == sourceAttachment || (inheritFFD && _parentMesh == sourceAttachment); + return this == sourceAttachment || (inheritDeform && _parentMesh == sourceAttachment); } public function get parentMesh () : MeshAttachment { @@ -116,7 +95,9 @@ public dynamic class MeshAttachment extends Attachment implements FfdAttachment public function set parentMesh (parentMesh:MeshAttachment) : void { _parentMesh = parentMesh; if (parentMesh != null) { + bones = parentMesh.bones; vertices = parentMesh.vertices; + worldVerticesLength = parentMesh.worldVerticesLength; regionUVs = parentMesh.regionUVs; triangles = parentMesh.triangles; hullLength = parentMesh.hullLength; diff --git a/spine-starling/spine-starling/src/spine/starling/SkeletonImage.as b/spine-as3/spine-as3/src/spine/attachments/PathAttachment.as similarity index 80% rename from spine-starling/spine-starling/src/spine/starling/SkeletonImage.as rename to spine-as3/spine-as3/src/spine/attachments/PathAttachment.as index dc98c00df..96a0cd817 100644 --- a/spine-starling/spine-starling/src/spine/starling/SkeletonImage.as +++ b/spine-as3/spine-as3/src/spine/attachments/PathAttachment.as @@ -29,27 +29,14 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -package spine.starling { +package spine.attachments { -import starling.display.Image; -import starling.textures.Texture; -import starling.utils.VertexData; +public dynamic class PathAttachment extends VertexAttachment { + public var lengths:Vector.; + public var closed:Boolean, constantSpeed:Boolean; -public class SkeletonImage extends Image { - public function SkeletonImage (texture:Texture) { - super(texture); - } - - public function get vertexData () : VertexData { - return mVertexData; - } - - public function updateVertices () : void { - onVertexDataChanged(); - } - - override public function get tinted () : Boolean { - return true; + public function PathAttachment (name:String) { + super(name); } } diff --git a/spine-as3/spine-as3/src/spine/attachments/VertexAttachment.as b/spine-as3/spine-as3/src/spine/attachments/VertexAttachment.as new file mode 100644 index 000000000..936657ffc --- /dev/null +++ b/spine-as3/spine-as3/src/spine/attachments/VertexAttachment.as @@ -0,0 +1,127 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +package spine.attachments { + import spine.Bone; + import spine.Skeleton; + import spine.Slot; + +public dynamic class VertexAttachment extends Attachment { + public var bones:Vector.; + public var vertices:Vector.; + public var worldVerticesLength:int; + + public function VertexAttachment (name:String) { + super(name); + } + + public function computeWorldVertices (slot:Slot, worldVertices:Vector.): void { + computeWorldVertices2(slot, 0, worldVerticesLength, worldVertices, 0); + } + + /** Transforms local vertices to world coordinates. + * @param start The index of the first local vertex value to transform. Each vertex has 2 values, x and y. + * @param count The number of world vertex values to output. Must be <= {@link #getWorldVerticesLength()} - start. + * @param worldVertices The output world vertices. Must have a length >= offset + count. + * @param offset The worldVertices index to begin writing values. */ + public function computeWorldVertices2 (slot:Slot, start:int, count:int, worldVertices:Vector., offset:int): void { + count += offset; + var skeleton:Skeleton = slot.skeleton; + var x:Number = skeleton.x, y:Number = skeleton.y; + var deformArray:Vector. = slot.attachmentVertices; + var vertices:Vector. = this.vertices; + var bones:Vector. = this.bones; + var deform:Vector.; + + var v:int, w:int, n:int, i:int, skip:int, b:int, f:int; + var vx:Number, vy:Number; + var wx:Number, wy:Number; + var bone:Bone; + + if (bones == null) { + if (deformArray.length > 0) vertices = deformArray; + bone = slot.bone; + x += bone.worldX; + y += bone.worldY; + var a:Number = bone.a, bb:Number = bone.b, c:Number = bone.c, d:Number = bone.d; + for (v = start, w = offset; w < count; v += 2, w += 2) { + vx = vertices[v], vy = vertices[v + 1]; + worldVertices[w] = vx * a + vy * bb + x; + worldVertices[w + 1] = vx * c + vy * d + y; + } + return; + } + v = 0, skip = 0; + for (i = 0; i < start; i += 2) { + n = bones[v]; + v += n + 1; + skip += n; + } + var skeletonBones:Vector. = skeleton.bones; + if (deformArray.length == 0) { + for (w = offset, b = skip * 3; w < count; w += 2) { + wx = x, wy = y; + n = bones[v++]; + n += v; + for (; v < n; v++, b += 3) { + bone = skeletonBones[bones[v]]; + vx = vertices[b]; vy = vertices[b + 1]; var weight:Number = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } else { + deform = deformArray; + for (w = offset, b = skip * 3, f = skip << 1; w < count; w += 2) { + wx = x; wy = y; + n = bones[v++]; + n += v; + for (; v < n; v++, b += 3, f += 2) { + bone = skeletonBones[bones[v]]; + vx = vertices[b] + deform[f]; vy = vertices[b + 1] + deform[f + 1]; weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + } + + /** Returns true if a deform originally applied to the specified attachment should be applied to this attachment. */ + public function applyDeform (sourceAttachment:VertexAttachment): Boolean { + return this == sourceAttachment; + } +} + +} diff --git a/spine-as3/spine-as3/src/spine/attachments/WeightedMeshAttachment.as b/spine-as3/spine-as3/src/spine/attachments/WeightedMeshAttachment.as deleted file mode 100644 index b1862a582..000000000 --- a/spine-as3/spine-as3/src/spine/attachments/WeightedMeshAttachment.as +++ /dev/null @@ -1,156 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the - * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) 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. - *****************************************************************************/ - -package spine.attachments { -import spine.Slot; -import spine.Bone; - -public dynamic class WeightedMeshAttachment extends Attachment implements FfdAttachment { - public var bones:Vector.; - public var weights:Vector.; - public var uvs:Vector.; - public var regionUVs:Vector.; - public var triangles:Vector.; - public var hullLength:int; - public var r:Number = 1; - public var g:Number = 1; - public var b:Number = 1; - public var a:Number = 1; - private var _parentMesh:WeightedMeshAttachment; - public var inheritFFD:Boolean; - - public var path:String; - public var rendererObject:Object; - public var regionU:Number; - public var regionV:Number; - public var regionU2:Number; - public var regionV2:Number; - public var regionRotate:Boolean; - public var regionOffsetX:Number; // Pixels stripped from the bottom left, unrotated. - public var regionOffsetY:Number; - public var regionWidth:Number; // Unrotated, stripped size. - public var regionHeight:Number; - public var regionOriginalWidth:Number; // Unrotated, unstripped size. - public var regionOriginalHeight:Number; - - // Nonessential. - public var edges:Vector.; - public var width:Number; - public var height:Number; - - public function WeightedMeshAttachment (name:String) { - super(name); - } - - public function updateUVs () : void { - var width:Number = regionU2 - regionU, height:Number = regionV2 - regionV; - var i:int, n:int = regionUVs.length; - if (!uvs || uvs.length != n) uvs = new Vector.(n, true); - if (regionRotate) { - for (i = 0; i < n; i += 2) { - uvs[i] = regionU + regionUVs[int(i + 1)] * width; - uvs[int(i + 1)] = regionV + height - regionUVs[i] * height; - } - } else { - for (i = 0; i < n; i += 2) { - uvs[i] = regionU + regionUVs[i] * width; - uvs[int(i + 1)] = regionV + regionUVs[int(i + 1)] * height; - } - } - } - - public function computeWorldVertices (x:Number, y:Number, slot:Slot, worldVertices:Vector.) : void { - var skeletonBones:Vector. = slot.skeleton.bones; - var weights:Vector. = this.weights; - var bones:Vector. = this.bones; - - var w:int = 0, v:int = 0, b:int = 0, f:int = 0, n:int = bones.length, nn:int; - var wx:Number, wy:Number, bone:Bone, vx:Number, vy:Number, weight:Number; - if (slot.attachmentVertices.length == 0) { - for (; v < n; w += 2) { - wx = 0; - wy = 0; - nn = bones[v++] + v; - for (; v < nn; v++, b += 3) { - bone = skeletonBones[bones[v]]; - vx = weights[b]; - vy = weights[int(b + 1)]; - weight = weights[int(b + 2)]; - wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; - wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; - } - worldVertices[w] = wx + x; - worldVertices[int(w + 1)] = wy + y; - } - } else { - var ffd:Vector. = slot.attachmentVertices; - for (; v < n; w += 2) { - wx = 0; - wy = 0; - nn = bones[v++] + v; - for (; v < nn; v++, b += 3, f += 2) { - bone = skeletonBones[bones[v]]; - vx = weights[b] + ffd[f]; - vy = weights[int(b + 1)] + ffd[int(f + 1)]; - weight = weights[int(b + 2)]; - wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; - wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; - } - worldVertices[w] = wx + x; - worldVertices[int(w + 1)] = wy + y; - } - } - } - - public function applyFFD (sourceAttachment:Attachment) : Boolean { - return this == sourceAttachment || (inheritFFD && _parentMesh == sourceAttachment); - } - - public function get parentMesh () : WeightedMeshAttachment { - return _parentMesh; - } - - public function set parentMesh (parentMesh:WeightedMeshAttachment) : void { - _parentMesh = parentMesh; - if (parentMesh != null) { - bones = parentMesh.bones; - weights = parentMesh.weights; - regionUVs = parentMesh.regionUVs; - triangles = parentMesh.triangles; - hullLength = parentMesh.hullLength; - edges = parentMesh.edges; - width = parentMesh.width; - height = parentMesh.height; - } - } -} - -} diff --git a/spine-c/README.md b/spine-c/README.md index c1bcbfb1a..5f8a98751 100644 --- a/spine-c/README.md +++ b/spine-c/README.md @@ -12,7 +12,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-c works with data exported from Spine version 3.2.01. +spine-c works with data exported from the latest version of Spine. spine-c supports all Spine features. @@ -48,4 +48,3 @@ spine-c uses an OOP style of programming where each "class" is made up of a stru - [spine-cocos2d-iphone](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2d-iphone) - [spine-cocos2dx](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx) - [spine-sfml](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-sfml) -- [spine-torque2d](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-torque2d) diff --git a/spine-c/include/spine/Animation.h b/spine-c/include/spine/Animation.h index d70d8f423..03304728e 100644 --- a/spine-c/include/spine/Animation.h +++ b/spine-c/include/spine/Animation.h @@ -64,13 +64,13 @@ void spAnimation_dispose (spAnimation* self); /** Poses the skeleton at the specified time for this animation. * @param lastTime The last time the animation was applied. - * @param events Any triggered events are added. */ + * @param events Any triggered events are added. May be null.*/ void spAnimation_apply (const spAnimation* self, struct spSkeleton* skeleton, float lastTime, float time, int loop, spEvent** events, int* eventsCount); /** Poses the skeleton at the specified time for this animation mixed with the current pose. * @param lastTime The last time the animation was applied. - * @param events Any triggered events are added. + * @param events Any triggered events are added. May be null. * @param alpha The amount of this animation that affects the current pose. */ void spAnimation_mix (const spAnimation* self, struct spSkeleton* skeleton, float lastTime, float time, int loop, spEvent** events, int* eventsCount, float alpha); @@ -94,9 +94,12 @@ typedef enum { SP_TIMELINE_ATTACHMENT, SP_TIMELINE_EVENT, SP_TIMELINE_DRAWORDER, - SP_TIMELINE_FFD, + SP_TIMELINE_DEFORM, SP_TIMELINE_IKCONSTRAINT, - SP_TIMELINE_TRANSFORMCONSTRAINT + SP_TIMELINE_TRANSFORMCONSTRAINT, + SP_TIMELINE_PATHCONSTRAINTPOSITION, + SP_TIMELINE_PATHCONSTRAINTSPACING, + SP_TIMELINE_PATHCONSTRAINTMIX } spTimelineType; struct spTimeline { @@ -179,6 +182,8 @@ typedef struct spBaseTimeline { /**/ +static const int ROTATE_ENTRIES = 2; + typedef struct spBaseTimeline spRotateTimeline; spRotateTimeline* spRotateTimeline_create (int framesCount); @@ -193,6 +198,8 @@ typedef spRotateTimeline RotateTimeline; /**/ +static const int TRANSLATE_ENTRIES = 3; + typedef struct spBaseTimeline spTranslateTimeline; spTranslateTimeline* spTranslateTimeline_create (int framesCount); @@ -235,6 +242,8 @@ typedef spShearTimeline ShearTimeline; /**/ +static const int COLOR_ENTRIES = 5; + typedef struct spColorTimeline { spCurveTimeline super; int const framesCount; @@ -352,7 +361,7 @@ typedef spDrawOrderTimeline DrawOrderTimeline; /**/ -typedef struct spFFDTimeline { +typedef struct spDeformTimeline { spCurveTimeline super; int const framesCount; float* const frames; /* time, ... */ @@ -362,7 +371,7 @@ typedef struct spFFDTimeline { spAttachment* attachment; #ifdef __cplusplus - spFFDTimeline() : + spDeformTimeline() : super(), framesCount(0), frames(0), @@ -371,20 +380,22 @@ typedef struct spFFDTimeline { slotIndex(0) { } #endif -} spFFDTimeline; +} spDeformTimeline; -spFFDTimeline* spFFDTimeline_create (int framesCount, int frameVerticesCount); +spDeformTimeline* spDeformTimeline_create (int framesCount, int frameVerticesCount); -void spFFDTimeline_setFrame (spFFDTimeline* self, int frameIndex, float time, float* vertices); +void spDeformTimeline_setFrame (spDeformTimeline* self, int frameIndex, float time, float* vertices); #ifdef SPINE_SHORT_NAMES -typedef spFFDTimeline FFDTimeline; -#define FFDTimeline_create(...) spFFDTimeline_create(__VA_ARGS__) -#define FFDTimeline_setFrame(...) spFFDTimeline_setFrame(__VA_ARGS__) +typedef spDeformTimeline DeformTimeline; +#define DeformTimeline_create(...) spDeformTimeline_create(__VA_ARGS__) +#define DeformTimeline_setFrame(...) spDeformTimeline_setFrame(__VA_ARGS__) #endif /**/ +static const int IKCONSTRAINT_ENTRIES = 3; + typedef struct spIkConstraintTimeline { spCurveTimeline super; int const framesCount; @@ -413,10 +424,12 @@ typedef spIkConstraintTimeline IkConstraintTimeline; /**/ +static const int TRANSFORMCONSTRAINT_ENTRIES = 5; + typedef struct spTransformConstraintTimeline { spCurveTimeline super; int const framesCount; - float* const frames; /* time, mix, bendDirection, ... */ + float* const frames; /* time, rotate mix, translate mix, scale mix, shear mix, ... */ int transformConstraintIndex; #ifdef __cplusplus @@ -441,6 +454,96 @@ typedef spTransformConstraintTimeline TransformConstraintTimeline; /**/ +static const int PATHCONSTRAINTPOSITION_ENTRIES = 2; + +typedef struct spPathConstraintPositionTimeline { + spCurveTimeline super; + int const framesCount; + float* const frames; /* time, rotate mix, translate mix, scale mix, shear mix, ... */ + int pathConstraintIndex; + +#ifdef __cplusplus + spPathConstraintPositionTimeline() : + super(), + framesCount(0), + frames(0), + pathConstraintIndex(0) { + } +#endif +} spPathConstraintPositionTimeline; + +spPathConstraintPositionTimeline* spPathConstraintPositionTimeline_create (int framesCount); + +void spPathConstraintPositionTimeline_setFrame (spPathConstraintPositionTimeline* self, int frameIndex, float time, float value); + +#ifdef SPINE_SHORT_NAMES +typedef spPathConstraintPositionTimeline PathConstraintPositionTimeline; +#define PathConstraintPositionTimeline_create(...) spPathConstraintPositionTimeline_create(__VA_ARGS__) +#define PathConstraintPositionTimeline_setFrame(...) spPathConstraintPositionTimeline_setFrame(__VA_ARGS__) +#endif + +/**/ + +static const int PATHCONSTRAINTSPACING_ENTRIES = 2; + +typedef struct spPathConstraintSpacingTimeline { + spCurveTimeline super; + int const framesCount; + float* const frames; /* time, rotate mix, translate mix, scale mix, shear mix, ... */ + int pathConstraintIndex; + +#ifdef __cplusplus + spPathConstraintSpacingTimeline() : + super(), + framesCount(0), + frames(0), + pathConstraintIndex(0) { + } +#endif +} spPathConstraintSpacingTimeline; + +spPathConstraintSpacingTimeline* spPathConstraintSpacingTimeline_create (int framesCount); + +void spPathConstraintSpacingTimeline_setFrame (spPathConstraintSpacingTimeline* self, int frameIndex, float time, float value); + +#ifdef SPINE_SHORT_NAMES +typedef spPathConstraintSpacingTimeline PathConstraintSpacingTimeline; +#define PathConstraintSpacingTimeline_create(...) spPathConstraintSpacingTimeline_create(__VA_ARGS__) +#define PathConstraintSpacingTimeline_setFrame(...) spPathConstraintSpacingTimeline_setFrame(__VA_ARGS__) +#endif + +/**/ + +static const int PATHCONSTRAINTMIX_ENTRIES = 3; + +typedef struct spPathConstraintMixTimeline { + spCurveTimeline super; + int const framesCount; + float* const frames; /* time, rotate mix, translate mix, scale mix, shear mix, ... */ + int pathConstraintIndex; + +#ifdef __cplusplus + spPathConstraintMixTimeline() : + super(), + framesCount(0), + frames(0), + pathConstraintIndex(0) { + } +#endif +} spPathConstraintMixTimeline; + +spPathConstraintMixTimeline* spPathConstraintMixTimeline_create (int framesCount); + +void spPathConstraintMixTimeline_setFrame (spPathConstraintMixTimeline* self, int frameIndex, float time, float rotateMix, float translateMix); + +#ifdef SPINE_SHORT_NAMES +typedef spPathConstraintMixTimeline PathConstraintMixTimeline; +#define PathConstraintMixTimeline_create(...) spPathConstraintMixTimeline_create(__VA_ARGS__) +#define PathConstraintMixTimeline_setFrame(...) spPathConstraintMixTimeline_setFrame(__VA_ARGS__) +#endif + +/**/ + #ifdef __cplusplus } #endif diff --git a/spine-c/include/spine/Attachment.h b/spine-c/include/spine/Attachment.h index ca8b889b4..84e9dc0fb 100644 --- a/spine-c/include/spine/Attachment.h +++ b/spine-c/include/spine/Attachment.h @@ -42,9 +42,8 @@ typedef enum { SP_ATTACHMENT_REGION, SP_ATTACHMENT_BOUNDING_BOX, SP_ATTACHMENT_MESH, - SP_ATTACHMENT_WEIGHTED_MESH, SP_ATTACHMENT_LINKED_MESH, - SP_ATTACHMENT_WEIGHTED_LINKED_MESH + SP_ATTACHMENT_PATH } spAttachmentType; typedef struct spAttachment { @@ -69,9 +68,7 @@ typedef spAttachmentType AttachmentType; #define ATTACHMENT_REGION SP_ATTACHMENT_REGION #define ATTACHMENT_BOUNDING_BOX SP_ATTACHMENT_BOUNDING_BOX #define ATTACHMENT_MESH SP_ATTACHMENT_MESH -#define ATTACHMENT_WEIGHTED_MESH SP_ATTACHMENT_WEIGHTED_MESH #define ATTACHMENT_LINKED_MESH SP_ATTACHMENT_LINKED_MESH -#define ATTACHMENT_WEIGHTED_LINKED_MESH SP_ATTACHMENT_WEIGHTED_LINKED_MESH typedef spAttachment Attachment; #define Attachment_dispose(...) spAttachment_dispose(__VA_ARGS__) #endif diff --git a/spine-c/include/spine/Bone.h b/spine-c/include/spine/Bone.h index 1dbc9df0a..5ab5ffcfc 100644 --- a/spine-c/include/spine/Bone.h +++ b/spine-c/include/spine/Bone.h @@ -45,24 +45,31 @@ struct spBone { spBoneData* const data; struct spSkeleton* const skeleton; spBone* const parent; + int childrenCount; + spBone** const children; float x, y, rotation, scaleX, scaleY, shearX, shearY; - float appliedRotation, appliedScaleX, appliedScaleY; + float appliedRotation; float const a, b, worldX; float const c, d, worldY; float const worldSignX, worldSignY; + int/*bool*/ sorted; + #ifdef __cplusplus spBone() : data(0), skeleton(0), parent(0), + childrenCount(0), children(0), x(0), y(0), rotation(0), scaleX(0), scaleY(0), - appliedRotation(0), appliedScaleX(0), appliedScaleY(0), + appliedRotation(0), a(0), b(0), worldX(0), c(0), d(0), worldY(0), - worldSignX(0), worldSignY(0) { + worldSignX(0), worldSignY(0), + + sorted(0) { } #endif }; @@ -84,6 +91,11 @@ float spBone_getWorldRotationY (spBone* self); float spBone_getWorldScaleX (spBone* self); float spBone_getWorldScaleY (spBone* self); +float spBone_worldToLocalRotationX (spBone* self); +float spBone_worldToLocalRotationY (spBone* self); +void spBone_rotateWorld (spBone* self, float degrees); +void spBone_updateLocalTransform (spBone* self); + void spBone_worldToLocal (spBone* self, float worldX, float worldY, float* localX, float* localY); void spBone_localToWorld (spBone* self, float localX, float localY, float* worldX, float* worldY); @@ -100,6 +112,10 @@ typedef spBone Bone; #define Bone_getWorldRotationY(...) spBone_getWorldRotationY(__VA_ARGS__) #define Bone_getWorldScaleX(...) spBone_getWorldScaleX(__VA_ARGS__) #define Bone_getWorldScaleY(...) spBone_getWorldScaleY(__VA_ARGS__) +#define Bone_worldToLocalRotationX(...) spBone_worldToLocalRotationX(__VA_ARGS__) +#define Bone_worldToLocalRotationY(...) spBone_worldToLocalRotationY(__VA_ARGS__) +#define Bone_rotateWorld(...) spBone_rotateWorld(__VA_ARGS__) +#define Bone_updateLocalTransform(...) spBone_updateLocalTransform(__VA_ARGS__) #define Bone_worldToLocal(...) spBone_worldToLocal(__VA_ARGS__) #define Bone_localToWorld(...) spBone_localToWorld(__VA_ARGS__) #endif diff --git a/spine-c/include/spine/BoneData.h b/spine-c/include/spine/BoneData.h index ddf0d157a..9a2451853 100644 --- a/spine-c/include/spine/BoneData.h +++ b/spine-c/include/spine/BoneData.h @@ -38,26 +38,29 @@ extern "C" { typedef struct spBoneData spBoneData; struct spBoneData { + const int index; const char* const name; spBoneData* const parent; float length; float x, y, rotation, scaleX, scaleY, shearX, shearY; - int/*bool*/inheritScale, inheritRotation; + int/*bool*/inheritRotation, inheritScale; #ifdef __cplusplus spBoneData() : + index(0), name(0), parent(0), length(0), x(0), y(0), rotation(0), scaleX(0), scaleY(0), - inheritScale(0), inheritRotation(0) { + shearX(0), shearY(0), + inheritRotation(0), inheritScale(0) { } #endif }; -spBoneData* spBoneData_create (const char* name, spBoneData* parent); +spBoneData* spBoneData_create (int index, const char* name, spBoneData* parent); void spBoneData_dispose (spBoneData* self); #ifdef SPINE_SHORT_NAMES diff --git a/spine-c/include/spine/BoundingBoxAttachment.h b/spine-c/include/spine/BoundingBoxAttachment.h index f8428188c..785d96770 100644 --- a/spine-c/include/spine/BoundingBoxAttachment.h +++ b/spine-c/include/spine/BoundingBoxAttachment.h @@ -33,6 +33,7 @@ #define SPINE_BOUNDINGBOXATTACHMENT_H_ #include +#include #include #include @@ -41,13 +42,11 @@ extern "C" { #endif typedef struct spBoundingBoxAttachment { - spAttachment super; - int verticesCount; - float* vertices; + spVertexAttachment super; } spBoundingBoxAttachment; spBoundingBoxAttachment* spBoundingBoxAttachment_create (const char* name); -void spBoundingBoxAttachment_computeWorldVertices (spBoundingBoxAttachment* self, spBone* bone, float* vertices); +void spBoundingBoxAttachment_computeWorldVertices (spBoundingBoxAttachment* self, spSlot* slot, float* worldVertices); #ifdef SPINE_SHORT_NAMES typedef spBoundingBoxAttachment BoundingBoxAttachment; diff --git a/spine-c/include/spine/IkConstraint.h b/spine-c/include/spine/IkConstraint.h index f30cad388..2ca3b951d 100644 --- a/spine-c/include/spine/IkConstraint.h +++ b/spine-c/include/spine/IkConstraint.h @@ -51,6 +51,8 @@ typedef struct spIkConstraint { int bendDirection; float mix; + int level; + #ifdef __cplusplus spIkConstraint() : data(0), @@ -58,7 +60,8 @@ typedef struct spIkConstraint { bones(0), target(0), bendDirection(0), - mix(0) { + mix(0), + level(0) { } #endif } spIkConstraint; diff --git a/spine-c/include/spine/MeshAttachment.h b/spine-c/include/spine/MeshAttachment.h index d50b45ad0..d232a9680 100644 --- a/spine-c/include/spine/MeshAttachment.h +++ b/spine-c/include/spine/MeshAttachment.h @@ -33,6 +33,7 @@ #define SPINE_MESHATTACHMENT_H_ #include +#include #include #include @@ -42,23 +43,7 @@ extern "C" { typedef struct spMeshAttachment spMeshAttachment; struct spMeshAttachment { - spAttachment super; - const char* path; - - int verticesCount; - float* vertices; - int hullLength; - - float* regionUVs; - float* uvs; - - int trianglesCount; - unsigned short* triangles; - - spMeshAttachment* const parentMesh; - int/*bool*/inheritFFD; - - float r, g, b, a; + spVertexAttachment super; void* rendererObject; int regionOffsetX, regionOffsetY; /* Pixels stripped from the bottom left, unrotated. */ @@ -67,6 +52,21 @@ struct spMeshAttachment { float regionU, regionV, regionU2, regionV2; int/*bool*/regionRotate; + const char* path; + + float* regionUVs; + float* uvs; + + int trianglesCount; + unsigned short* triangles; + + float r, g, b, a; + + int hullLength; + + spMeshAttachment* const parentMesh; + int/*bool*/inheritDeform; + /* Nonessential. */ int edgesCount; int* edges; diff --git a/spine-c/include/spine/PathAttachment.h b/spine-c/include/spine/PathAttachment.h new file mode 100644 index 000000000..ca17f3ad8 --- /dev/null +++ b/spine-c/include/spine/PathAttachment.h @@ -0,0 +1,65 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +#ifndef SPINE_PATHATTACHMENT_H_ +#define SPINE_PATHATTACHMENT_H_ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct spPathAttachment { + spVertexAttachment super; + int lengthsLength; + float* lengths; + int/*bool*/ closed, constantSpeed; +} spPathAttachment; + +spPathAttachment* spPathAttachment_create (const char* name); +void spPathAttachment_computeWorldVertices (spPathAttachment* self, spSlot* slot, float* worldVertices); +void spPathAttachment_computeWorldVertices1 (spPathAttachment* self, spSlot* slot, int start, int count, float* worldVertices, int offset); + +#ifdef SPINE_SHORT_NAMES +typedef spPathAttachment PathAttachment; +#define PathAttachment_create(...) spPathAttachment_create(__VA_ARGS__) +#define PathAttachment_computeWorldVertices(...) spPathAttachment_computeWorldVertices(__VA_ARGS__) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* SPINE_PATHATTACHMENT_H_ */ diff --git a/spine-c/include/spine/WeightedMeshAttachment.h b/spine-c/include/spine/PathConstraint.h similarity index 52% rename from spine-c/include/spine/WeightedMeshAttachment.h rename to spine-c/include/spine/PathConstraint.h index 7f6201cc6..a95679705 100644 --- a/spine-c/include/spine/WeightedMeshAttachment.h +++ b/spine-c/include/spine/PathConstraint.h @@ -1,10 +1,10 @@ /****************************************************************************** * Spine Runtimes Software License * Version 2.3 - * + * * Copyright (c) 2013-2015, 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 (the "Software") and derivative works solely for personal @@ -16,7 +16,7 @@ * 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 @@ -29,68 +29,85 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -#ifndef SPINE_WEIGHTEDMESHATTACHMENT_H_ -#define SPINE_WEIGHTEDMESHATTACHMENT_H_ +#ifndef SPINE_PATHCONSTRAINT_H_ +#define SPINE_PATHCONSTRAINT_H_ -#include +#include +#include #include +#include "PathAttachment.h" #ifdef __cplusplus extern "C" { #endif -typedef struct spWeightedMeshAttachment spWeightedMeshAttachment; -struct spWeightedMeshAttachment { - spAttachment super; - const char* path; +struct spSkeleton; +typedef struct spPathConstraint { + spPathConstraintData* const data; int bonesCount; - int* bones; + spBone** const bones; + spSlot* target; + float position, spacing, rotateMix, translateMix; - int weightsCount; - float* weights; + int spacesCount; + float* spaces; - int trianglesCount; - unsigned short* triangles; + int positionsCount; + float* positions; - int uvsCount; - float* regionUVs; - float* uvs; - int hullLength; + int worldCount; + float* world; - spWeightedMeshAttachment* const parentMesh; - int/*bool*/inheritFFD; + int curvesCount; + float* curves; - float r, g, b, a; + int lengthsCount; + float* lengths; - void* rendererObject; - int regionOffsetX, regionOffsetY; /* Pixels stripped from the bottom left, unrotated. */ - int regionWidth, regionHeight; /* Unrotated, stripped pixel size. */ - int regionOriginalWidth, regionOriginalHeight; /* Unrotated, unstripped pixel size. */ - float regionU, regionV, regionU2, regionV2; - int/*bool*/regionRotate; + float segments[10]; - /* Nonessential. */ - int edgesCount; - int* edges; - float width, height; -}; +#ifdef __cplusplus + spPathConstraint() : + data(0), + bonesCount(0), + bones(0), + target(0), + position(0), + spacing(0), + rotateMix(0), + translateMix(0), + spacesCount(0), + spaces(0), + positionsCount(0), + positions(0), + worldCount(0), + world(0), + curvesCount(0), + curves(0), + lengthsCount(0), + lengths(0) { + } +#endif +} spPathConstraint; -spWeightedMeshAttachment* spWeightedMeshAttachment_create (const char* name); -void spWeightedMeshAttachment_updateUVs (spWeightedMeshAttachment* self); -void spWeightedMeshAttachment_computeWorldVertices (spWeightedMeshAttachment* self, spSlot* slot, float* worldVertices); -void spWeightedMeshAttachment_setParentMesh (spWeightedMeshAttachment* self, spWeightedMeshAttachment* parentMesh); +#define SP_PATHCONSTRAINT_ + +spPathConstraint* spPathConstraint_create (spPathConstraintData* data, const struct spSkeleton* skeleton); +void spPathConstraint_dispose (spPathConstraint* self); + +void spPathConstraint_apply (spPathConstraint* self); +float* spPathConstraint_computeWorldPositions(spPathConstraint* self, spPathAttachment* path, int spacesCount, int/*bool*/ tangents, int/*bool*/percentPosition, int/**/percentSpacing); #ifdef SPINE_SHORT_NAMES -typedef spWeightedMeshAttachment WeightedMeshAttachment; -#define WeightedMeshAttachment_create(...) spWeightedMeshAttachment_create(__VA_ARGS__) -#define WeightedMeshAttachment_updateUVs(...) spWeightedMeshAttachment_updateUVs(__VA_ARGS__) -#define WeightedMeshAttachment_computeWorldVertices(...) spWeightedMeshAttachment_computeWorldVertices(__VA_ARGS__) -#define WeightedMeshAttachment_setParentMesh(...) spWeightedMeshAttachment_setParentMesh(__VA_ARGS__) +typedef spPathConstraint PathConstraint; +#define PathConstraint_create(...) spPathConstraint_create(__VA_ARGS__) +#define PathConstraint_dispose(...) spPathConstraint_dispose(__VA_ARGS__) +#define PathConstraint_apply(...) spPathConstraint_apply(__VA_ARGS__) #endif #ifdef __cplusplus } #endif -#endif /* SPINE_WEIGHTEDMESHATTACHMENT_H_ */ +#endif /* SPINE_PATHCONSTRAINT_H_ */ diff --git a/spine-c/include/spine/PathConstraintData.h b/spine-c/include/spine/PathConstraintData.h new file mode 100644 index 000000000..f60819353 --- /dev/null +++ b/spine-c/include/spine/PathConstraintData.h @@ -0,0 +1,96 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +#ifndef SPINE_PATHCONSTRAINTDATA_H_ +#define SPINE_PATHCONSTRAINTDATA_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + SP_POSITION_MODE_FIXED, SP_POSITION_MODE_PERCENT +} spPositionMode; + +typedef enum { + SP_SPACING_MODE_LENGTH, SP_SPACING_MODE_FIXED, SP_SPACING_MODE_PERCENT +} spSpacingMode; + +typedef enum { + SP_ROTATE_MODE_TANGENT, SP_ROTATE_MODE_CHAIN, SP_ROTATE_MODE_CHAIN_SCALE +} spRotateMode; + +typedef struct spPathConstraintData { + const char* const name; + int bonesCount; + spBoneData** const bones; + spSlotData* target; + spPositionMode positionMode; + spSpacingMode spacingMode; + spRotateMode rotateMode; + float offsetRotation; + float position, spacing, rotateMix, translateMix; + +#ifdef __cplusplus + spPathConstraintData() : + name(0), + bonesCount(0), + bones(0), + target(0), + positionMode(SP_POSITION_MODE_FIXED), + spacingMode(SP_SPACING_MODE_LENGTH), + rotateMode(SP_ROTATE_MODE_TANGENT), + offsetRotation(0), + position(0), + spacing(0), + rotateMix(0), + translateMix(0) { + } +#endif +} spPathConstraintData; + +spPathConstraintData* spPathConstraintData_create (const char* name); +void spPathConstraintData_dispose (spPathConstraintData* self); + +#ifdef SPINE_SHORT_NAMES +typedef spPathConstraintData PathConstraintData; +#define PathConstraintData_create(...) spPathConstraintData_create(__VA_ARGS__) +#define PathConstraintData_dispose(...) spPathConstraintData_dispose(__VA_ARGS__) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* SPINE_PATHCONSTRAINTDATA_H_ */ diff --git a/spine-c/include/spine/Skeleton.h b/spine-c/include/spine/Skeleton.h index 43a63dc9d..db1afdd33 100644 --- a/spine-c/include/spine/Skeleton.h +++ b/spine-c/include/spine/Skeleton.h @@ -37,6 +37,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -55,10 +56,14 @@ typedef struct spSkeleton { int ikConstraintsCount; spIkConstraint** ikConstraints; + spIkConstraint** ikConstraintsSorted; int transformConstraintsCount; spTransformConstraint** transformConstraints; + int pathConstraintsCount; + spPathConstraint** pathConstraints; + spSkin* const skin; float r, g, b, a; float time; @@ -77,6 +82,7 @@ typedef struct spSkeleton { ikConstraintsCount(0), ikConstraints(0), + ikConstraintsSorted(0), transformConstraintsCount(0), transformConstraints(0), @@ -94,8 +100,9 @@ typedef struct spSkeleton { spSkeleton* spSkeleton_create (spSkeletonData* data); void spSkeleton_dispose (spSkeleton* self); -/* Caches information about bones and constraints. Must be called if bones or constraints are added or removed. */ -void spSkeleton_updateCache (const spSkeleton* self); +/* Caches information about bones and constraints. Must be called if bones or constraints, or weighted path attachments + * are added or removed. */ +void spSkeleton_updateCache (spSkeleton* self); void spSkeleton_updateWorldTransform (const spSkeleton* self); /* Sets the bones, constraints, and slots to their setup pose values. */ @@ -137,6 +144,9 @@ spIkConstraint* spSkeleton_findIkConstraint (const spSkeleton* self, const char* /* Returns 0 if the transform constraint was not found. */ spTransformConstraint* spSkeleton_findTransformConstraint (const spSkeleton* self, const char* constraintName); +/* Returns 0 if the path constraint was not found. */ +spPathConstraint* spSkeleton_findPathConstraint (const spSkeleton* self, const char* constraintName); + void spSkeleton_update (spSkeleton* self, float deltaTime); #ifdef SPINE_SHORT_NAMES diff --git a/spine-c/include/spine/SkeletonData.h b/spine-c/include/spine/SkeletonData.h index e73b75fe0..e9f9361da 100644 --- a/spine-c/include/spine/SkeletonData.h +++ b/spine-c/include/spine/SkeletonData.h @@ -39,6 +39,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -70,6 +71,9 @@ typedef struct spSkeletonData { int transformConstraintsCount; spTransformConstraintData** transformConstraints; + + int pathConstraintsCount; + spPathConstraintData** pathConstraints; } spSkeletonData; spSkeletonData* spSkeletonData_create (); @@ -91,6 +95,8 @@ spIkConstraintData* spSkeletonData_findIkConstraint (const spSkeletonData* self, spTransformConstraintData* spSkeletonData_findTransformConstraint (const spSkeletonData* self, const char* constraintName); +spPathConstraintData* spSkeletonData_findPathConstraint (const spSkeletonData* self, const char* constraintName); + #ifdef SPINE_SHORT_NAMES typedef spSkeletonData SkeletonData; #define SkeletonData_create(...) spSkeletonData_create(__VA_ARGS__) diff --git a/spine-c/include/spine/Skin.h b/spine-c/include/spine/Skin.h index 6458d9038..ff9ac2cc0 100644 --- a/spine-c/include/spine/Skin.h +++ b/spine-c/include/spine/Skin.h @@ -50,6 +50,20 @@ typedef struct spSkin { #endif } spSkin; +/* Private structs, needed by Skeleton */ +typedef struct _Entry _Entry; +struct _Entry { + int slotIndex; + const char* name; + spAttachment* attachment; + _Entry* next; +}; + +typedef struct { + spSkin super; + _Entry* entries; +} _spSkin; + spSkin* spSkin_create (const char* name); void spSkin_dispose (spSkin* self); diff --git a/spine-c/include/spine/SlotData.h b/spine-c/include/spine/SlotData.h index 7a7f7c8a7..2673b9df1 100644 --- a/spine-c/include/spine/SlotData.h +++ b/spine-c/include/spine/SlotData.h @@ -43,6 +43,7 @@ typedef enum { } spBlendMode; typedef struct spSlotData { + const int index; const char* const name; const spBoneData* const boneData; const char* attachmentName; @@ -51,6 +52,7 @@ typedef struct spSlotData { #ifdef __cplusplus spSlotData() : + index(0), name(0), boneData(0), attachmentName(0), @@ -60,7 +62,7 @@ typedef struct spSlotData { #endif } spSlotData; -spSlotData* spSlotData_create (const char* name, spBoneData* boneData); +spSlotData* spSlotData_create (const int index, const char* name, spBoneData* boneData); void spSlotData_dispose (spSlotData* self); /* @param attachmentName May be 0 for no setup pose attachment. */ diff --git a/spine-c/include/spine/TransformConstraint.h b/spine-c/include/spine/TransformConstraint.h index c4be652b0..b2b01f8d9 100644 --- a/spine-c/include/spine/TransformConstraint.h +++ b/spine-c/include/spine/TransformConstraint.h @@ -43,26 +43,21 @@ struct spSkeleton; typedef struct spTransformConstraint { spTransformConstraintData* const data; - spBone* bone; + int bonesCount; + spBone** const bones; spBone* target; float rotateMix, translateMix, scaleMix, shearMix; - float offsetRotation, offsetX, offsetY, offsetScaleX, offsetScaleY, offsetShearY; #ifdef __cplusplus spTransformConstraint() : data(0), - bone(0), + bonesCount(0), + bones(0), target(0), rotateMix(0), translateMix(0), scaleMix(0), - shearMix(0), - offsetRotation(0), - offsetX(0), - offsetY(0), - offsetScaleX(0), - offsetScaleY(0), - offsetShearY(0) { + shearMix(0) { } #endif } spTransformConstraint; diff --git a/spine-c/include/spine/TransformConstraintData.h b/spine-c/include/spine/TransformConstraintData.h index bffb4fe80..1c71d0427 100644 --- a/spine-c/include/spine/TransformConstraintData.h +++ b/spine-c/include/spine/TransformConstraintData.h @@ -40,8 +40,8 @@ extern "C" { typedef struct spTransformConstraintData { const char* const name; - - spBoneData* bone; + int bonesCount; + spBoneData** const bones; spBoneData* target; float rotateMix, translateMix, scaleMix, shearMix; float offsetRotation, offsetX, offsetY, offsetScaleX, offsetScaleY, offsetShearY; @@ -49,7 +49,8 @@ typedef struct spTransformConstraintData { #ifdef __cplusplus spTransformConstraintData() : name(0), - bone(0), + bonesCount(0), + bones(0), target(0), rotateMix(0), translateMix(0), diff --git a/spine-c/include/spine/VertexAttachment.h b/spine-c/include/spine/VertexAttachment.h new file mode 100644 index 000000000..6c220eb9e --- /dev/null +++ b/spine-c/include/spine/VertexAttachment.h @@ -0,0 +1,68 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +#ifndef SPINE_VERTEXATTACHMENT_H_ +#define SPINE_VERTEXATTACHMENT_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct spVertexAttachment spVertexAttachment; +struct spVertexAttachment { + spAttachment super; + + int bonesCount; + int* bones; + + int verticesCount; + float* vertices; + + int worldVerticesLength; +}; + +void spVertexAttachment_computeWorldVertices (spVertexAttachment* self, spSlot* slot, float* worldVertices); +void spVertexAttachment_computeWorldVertices1 (spVertexAttachment* self, int start, int count, spSlot* slot, float* worldVertices, int offset); + +#ifdef SPINE_SHORT_NAMES +typedef spVertexAttachment VertexAttachment; +#define VertexAttachment_computeWorldVertices(...) spVertexAttachment_computeWorldVertices(__VA_ARGS__) +#define VertexAttachment_computeWorldVertices1(...) spVertexAttachment_computeWorldVertices1(__VA_ARGS__) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* SPINE_VERTEXATTACHMENT_H_ */ diff --git a/spine-c/include/spine/extension.h b/spine-c/include/spine/extension.h index 63b416f02..1ec88cd80 100644 --- a/spine-c/include/spine/extension.h +++ b/spine-c/include/spine/extension.h @@ -62,8 +62,6 @@ #define DEG_RAD (PI / 180) #define RAD_DEG (180 / PI) -#define SIN_DEG(A) sinf((A) * DEG_RAD) -#define COS_DEG(A) cosf((A) * DEG_RAD) #define ABS(A) ((A) < 0? -(A): (A)) #ifdef __STDC_VERSION__ @@ -82,6 +80,16 @@ #define ACOS(A) (float)acos(A) #endif +#define SIN_DEG(A) SIN((A) * DEG_RAD) +#define COS_DEG(A) COS((A) * DEG_RAD) +#define CLAMP(x, min, max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x))) +#ifndef MIN +#define MIN(x, y) ((x) < (y) ? (x) : (y)) +#endif +#ifndef MAX +#define MAX(x, y) ((x) > (y) ? (x) : (y)) +#endif + #define UNUSED(x) (void)(x) #include @@ -91,10 +99,11 @@ #include #include #include +#include #include #include -#include #include +#include #include #ifdef __cplusplus @@ -178,10 +187,12 @@ void _spAttachmentLoader_setUnknownTypeError (spAttachmentLoader* self, spAttach void _spAttachment_init (spAttachment* self, const char* name, spAttachmentType type, void (*dispose) (spAttachment* self)); void _spAttachment_deinit (spAttachment* self); +void _spVertexAttachment_deinit (spVertexAttachment* self); #ifdef SPINE_SHORT_NAMES #define _Attachment_init(...) _spAttachment_init(__VA_ARGS__) #define _Attachment_deinit(...) _spAttachment_deinit(__VA_ARGS__) +#define _VertexAttachment_deinit(...) _spVertexAttachment_deinit(__VA_ARGS__) #endif /**/ diff --git a/spine-c/include/spine/spine.h b/spine-c/include/spine/spine.h index 0a1063a0a..c5ff57434 100644 --- a/spine-c/include/spine/spine.h +++ b/spine-c/include/spine/spine.h @@ -42,8 +42,8 @@ #include #include #include +#include #include -#include #include #include #include diff --git a/spine-c/src/spine/Animation.c b/spine-c/src/spine/Animation.c index eb3add590..8012d408b 100644 --- a/spine-c/src/spine/Animation.c +++ b/spine-c/src/spine/Animation.c @@ -111,7 +111,7 @@ void spTimeline_apply (const spTimeline* self, spSkeleton* skeleton, float lastT /**/ static const float CURVE_LINEAR = 0, CURVE_STEPPED = 1, CURVE_BEZIER = 2; -static const int BEZIER_SEGMENTS = 10, BEZIER_SIZE = 10 * 2 - 1; +static const int BEZIER_SIZE = 10 * 2 - 1; void _spCurveTimeline_init (spCurveTimeline* self, spTimelineType type, int framesCount, /**/ void (*dispose) (spTimeline* self), /**/ @@ -135,12 +135,10 @@ void spCurveTimeline_setStepped (spCurveTimeline* self, int frameIndex) { } void spCurveTimeline_setCurve (spCurveTimeline* self, int frameIndex, float cx1, float cy1, float cx2, float cy2) { - float subdiv1 = 1.0f / BEZIER_SEGMENTS, subdiv2 = subdiv1 * subdiv1, subdiv3 = subdiv2 * subdiv1; - float pre1 = 3 * subdiv1, pre2 = 3 * subdiv2, pre4 = 6 * subdiv2, pre5 = 6 * subdiv3; - float tmp1x = -cx1 * 2 + cx2, tmp1y = -cy1 * 2 + cy2, tmp2x = (cx1 - cx2) * 3 + 1, tmp2y = (cy1 - cy2) * 3 + 1; - float dfx = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv3, dfy = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv3; - float ddfx = tmp1x * pre4 + tmp2x * pre5, ddfy = tmp1y * pre4 + tmp2y * pre5; - float dddfx = tmp2x * pre5, dddfy = tmp2y * pre5; + float tmpx = (-cx1 * 2 + cx2) * 0.03f, tmpy = (-cy1 * 2 + cy2) * 0.03f; + float dddfx = ((cx1 - cx2) * 3 + 1) * 0.006f, dddfy = ((cy1 - cy2) * 3 + 1) * 0.006f; + float ddfx = tmpx * 2 + dddfx, ddfy = tmpy * 2 + dddfy; + float dfx = cx1 * 0.3f + tmpx + dddfx * 0.16666667f, dfy = cy1 * 0.3f + tmpy + dddfy * 0.16666667f; float x = dfx, y = dfy; int i = frameIndex * BEZIER_SIZE, n = i + BEZIER_SIZE - 1; @@ -162,6 +160,7 @@ float spCurveTimeline_getCurvePercent (const spCurveTimeline* self, int frameInd float x, y; int i = frameIndex * BEZIER_SIZE, start, n; float type = self->curves[i]; + percent = CLAMP(percent, 0, 1); if (type == CURVE_LINEAR) return percent; if (type == CURVE_STEPPED) return 0; i++; @@ -218,15 +217,6 @@ static int binarySearch1 (float *values, int valuesLength, float target) { return 0; } -/*static int linearSearch (float *values, int valuesLength, float target, int step) { - int i, last = valuesLength - step; - for (i = 0; i <= last; i += step) { - if (values[i] <= target) continue; - return i; - } - return -1; - }*/ - /**/ void _spBaseTimeline_dispose (spTimeline* timeline) { @@ -251,14 +241,14 @@ struct spBaseTimeline* _spBaseTimeline_create (int framesCount, spTimelineType t /**/ -static const int ROTATE_PREV_TIME = -2; -static const int ROTATE_FRAME = 1; +static const int ROTATE_PREV_TIME = -2, ROTATE_PREV_ROTATION = -1; +static const int ROTATE_ROTATION = 1; void _spRotateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { spBone *bone; int frame; - float prevFrameValue, frameTime, percent, amount; + float prevRotation, frameTime, percent, amount; spRotateTimeline* self = SUB_CAST(spRotateTimeline, timeline); @@ -266,8 +256,8 @@ void _spRotateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, bone = skeleton->bones[self->boneIndex]; - if (time >= self->frames[self->framesCount - 2]) { /* Time is after last frame. */ - amount = bone->data->rotation + self->frames[self->framesCount - 1] - bone->rotation; + if (time >= self->frames[self->framesCount - ROTATE_ENTRIES]) { /* Time is after last frame. */ + amount = bone->data->rotation + self->frames[self->framesCount + ROTATE_PREV_ROTATION] - bone->rotation; while (amount > 180) amount -= 360; while (amount < -180) @@ -277,18 +267,17 @@ void _spRotateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, } /* Interpolate between the previous frame and the current frame. */ - frame = binarySearch(self->frames, self->framesCount, time, 2); - prevFrameValue = self->frames[frame - 1]; + frame = binarySearch(self->frames, self->framesCount, time, ROTATE_ENTRIES); + prevRotation = self->frames[frame + ROTATE_PREV_ROTATION]; frameTime = self->frames[frame]; - percent = 1 - (time - frameTime) / (self->frames[frame + ROTATE_PREV_TIME] - frameTime); - percent = spCurveTimeline_getCurvePercent(SUPER(self), (frame >> 1) - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + percent = spCurveTimeline_getCurvePercent(SUPER(self), (frame >> 1) - 1, 1 - (time - frameTime) / (self->frames[frame + ROTATE_PREV_TIME] - frameTime)); - amount = self->frames[frame + ROTATE_FRAME] - prevFrameValue; + amount = self->frames[frame + ROTATE_ROTATION] - prevRotation; while (amount > 180) amount -= 360; while (amount < -180) amount += 360; - amount = bone->data->rotation + (prevFrameValue + amount * percent) - bone->rotation; + amount = bone->data->rotation + (prevRotation + amount * percent) - bone->rotation; while (amount > 180) amount -= 360; while (amount < -180) @@ -301,26 +290,25 @@ void _spRotateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, } spRotateTimeline* spRotateTimeline_create (int framesCount) { - return _spBaseTimeline_create(framesCount, SP_TIMELINE_ROTATE, 2, _spRotateTimeline_apply); + return _spBaseTimeline_create(framesCount, SP_TIMELINE_ROTATE, ROTATE_ENTRIES, _spRotateTimeline_apply); } -void spRotateTimeline_setFrame (spRotateTimeline* self, int frameIndex, float time, float angle) { - frameIndex *= 2; +void spRotateTimeline_setFrame (spRotateTimeline* self, int frameIndex, float time, float degrees) { + frameIndex <<= 1; self->frames[frameIndex] = time; - self->frames[frameIndex + 1] = angle; + self->frames[frameIndex + ROTATE_ROTATION] = degrees; } /**/ -static const int TRANSLATE_PREV_TIME = -3; -static const int TRANSLATE_X = 1; -static const int TRANSLATE_Y = 2; +static const int TRANSLATE_PREV_TIME = -3, TRANSLATE_PREV_X = -2, TRANSLATE_PREV_Y = -1; +static const int TRANSLATE_X = 1, TRANSLATE_Y = 2; void _spTranslateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { spBone *bone; int frame; - float prevFrameX, prevFrameY, frameTime, percent; + float prevX, prevY, frameTime, percent; spTranslateTimeline* self = SUB_CAST(spTranslateTimeline, timeline); @@ -328,24 +316,21 @@ void _spTranslateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleto bone = skeleton->bones[self->boneIndex]; - if (time >= self->frames[self->framesCount - 3]) { /* Time is after last frame. */ - bone->x += (bone->data->x + self->frames[self->framesCount - 2] - bone->x) * alpha; - bone->y += (bone->data->y + self->frames[self->framesCount - 1] - bone->y) * alpha; + if (time >= self->frames[self->framesCount - TRANSLATE_ENTRIES]) { /* Time is after last frame. */ + bone->x += (bone->data->x + self->frames[self->framesCount + TRANSLATE_PREV_X] - bone->x) * alpha; + bone->y += (bone->data->y + self->frames[self->framesCount + TRANSLATE_PREV_Y] - bone->y) * alpha; return; } /* Interpolate between the previous frame and the current frame. */ - frame = binarySearch(self->frames, self->framesCount, time, 3); - prevFrameX = self->frames[frame - 2]; - prevFrameY = self->frames[frame - 1]; + frame = binarySearch(self->frames, self->framesCount, time, TRANSLATE_ENTRIES); + prevX = self->frames[frame + TRANSLATE_PREV_X]; + prevY = self->frames[frame + TRANSLATE_PREV_Y]; frameTime = self->frames[frame]; - percent = 1 - (time - frameTime) / (self->frames[frame + TRANSLATE_PREV_TIME] - frameTime); - percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / TRANSLATE_ENTRIES - 1, 1 - (time - frameTime) / (self->frames[frame + TRANSLATE_PREV_TIME] - frameTime)); - bone->x += (bone->data->x + prevFrameX + (self->frames[frame + TRANSLATE_X] - prevFrameX) * percent - bone->x) - * alpha; - bone->y += (bone->data->y + prevFrameY + (self->frames[frame + TRANSLATE_Y] - prevFrameY) * percent - bone->y) - * alpha; + bone->x += (bone->data->x + prevX + (self->frames[frame + TRANSLATE_X] - prevX) * percent - bone->x) * alpha; + bone->y += (bone->data->y + prevY + (self->frames[frame + TRANSLATE_Y] - prevY) * percent - bone->y) * alpha; UNUSED(lastTime); UNUSED(firedEvents); @@ -353,14 +338,14 @@ void _spTranslateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleto } spTranslateTimeline* spTranslateTimeline_create (int framesCount) { - return _spBaseTimeline_create(framesCount, SP_TIMELINE_TRANSLATE, 3, _spTranslateTimeline_apply); + return _spBaseTimeline_create(framesCount, SP_TIMELINE_TRANSLATE, TRANSLATE_ENTRIES, _spTranslateTimeline_apply); } void spTranslateTimeline_setFrame (spTranslateTimeline* self, int frameIndex, float time, float x, float y) { - frameIndex *= 3; + frameIndex *= TRANSLATE_ENTRIES; self->frames[frameIndex] = time; - self->frames[frameIndex + 1] = x; - self->frames[frameIndex + 2] = y; + self->frames[frameIndex + TRANSLATE_X] = x; + self->frames[frameIndex + TRANSLATE_Y] = y; } /**/ @@ -369,31 +354,28 @@ void _spScaleTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, f int* eventsCount, float alpha) { spBone *bone; int frame; - float prevFrameX, prevFrameY, frameTime, percent; + float prevX, prevY, frameTime, percent; spScaleTimeline* self = SUB_CAST(spScaleTimeline, timeline); if (time < self->frames[0]) return; /* Time is before first frame. */ bone = skeleton->bones[self->boneIndex]; - if (time >= self->frames[self->framesCount - 3]) { /* Time is after last frame. */ - bone->scaleX += (bone->data->scaleX * self->frames[self->framesCount - 2] - bone->scaleX) * alpha; - bone->scaleY += (bone->data->scaleY * self->frames[self->framesCount - 1] - bone->scaleY) * alpha; + if (time >= self->frames[self->framesCount - TRANSLATE_ENTRIES]) { /* Time is after last frame. */ + bone->scaleX += (bone->data->scaleX * self->frames[self->framesCount + TRANSLATE_PREV_X] - bone->scaleX) * alpha; + bone->scaleY += (bone->data->scaleY * self->frames[self->framesCount + TRANSLATE_PREV_Y] - bone->scaleY) * alpha; return; } /* Interpolate between the previous frame and the current frame. */ - frame = binarySearch(self->frames, self->framesCount, time, 3); - prevFrameX = self->frames[frame - 2]; - prevFrameY = self->frames[frame - 1]; + frame = binarySearch(self->frames, self->framesCount, time, TRANSLATE_ENTRIES); + prevX = self->frames[frame + TRANSLATE_PREV_X]; + prevY = self->frames[frame + TRANSLATE_PREV_Y]; frameTime = self->frames[frame]; - percent = 1 - (time - frameTime) / (self->frames[frame + TRANSLATE_PREV_TIME] - frameTime); - percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / TRANSLATE_ENTRIES - 1, 1 - (time - frameTime) / (self->frames[frame + TRANSLATE_PREV_TIME] - frameTime)); - bone->scaleX += (bone->data->scaleX * (prevFrameX + (self->frames[frame + TRANSLATE_X] - prevFrameX) * percent) - - bone->scaleX) * alpha; - bone->scaleY += (bone->data->scaleY * (prevFrameY + (self->frames[frame + TRANSLATE_Y] - prevFrameY) * percent) - - bone->scaleY) * alpha; + bone->scaleX += (bone->data->scaleX * (prevX + (self->frames[frame + TRANSLATE_X] - prevX) * percent) - bone->scaleX) * alpha; + bone->scaleY += (bone->data->scaleY * (prevY + (self->frames[frame + TRANSLATE_Y] - prevY) * percent) - bone->scaleY) * alpha; UNUSED(lastTime); UNUSED(firedEvents); @@ -401,7 +383,7 @@ void _spScaleTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, f } spScaleTimeline* spScaleTimeline_create (int framesCount) { - return _spBaseTimeline_create(framesCount, SP_TIMELINE_SCALE, 3, _spScaleTimeline_apply); + return _spBaseTimeline_create(framesCount, SP_TIMELINE_SCALE, TRANSLATE_ENTRIES, _spScaleTimeline_apply); } void spScaleTimeline_setFrame (spScaleTimeline* self, int frameIndex, float time, float x, float y) { @@ -414,31 +396,28 @@ void _spShearTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, f int* eventsCount, float alpha) { spBone *bone; int frame; - float prevFrameX, prevFrameY, frameTime, percent; + float prevX, prevY, frameTime, percent; spShearTimeline* self = SUB_CAST(spShearTimeline, timeline); if (time < self->frames[0]) return; /* Time is before first frame. */ bone = skeleton->bones[self->boneIndex]; - if (time >= self->frames[self->framesCount - 3]) { /* Time is after last frame. */ - bone->shearX += (bone->data->shearX * self->frames[self->framesCount - 2] - bone->shearX) * alpha; - bone->shearY += (bone->data->shearY * self->frames[self->framesCount - 1] - bone->shearY) * alpha; + if (time >= self->frames[self->framesCount - TRANSLATE_ENTRIES]) { /* Time is after last frame. */ + bone->shearX += (bone->data->shearX + self->frames[self->framesCount + TRANSLATE_PREV_X] - bone->shearX) * alpha; + bone->shearY += (bone->data->shearY + self->frames[self->framesCount + TRANSLATE_PREV_Y] - bone->shearY) * alpha; return; } /* Interpolate between the previous frame and the current frame. */ - frame = binarySearch(self->frames, self->framesCount, time, 3); - prevFrameX = self->frames[frame - 2]; - prevFrameY = self->frames[frame - 1]; + frame = binarySearch(self->frames, self->framesCount, time, TRANSLATE_ENTRIES); + prevX = self->frames[frame + TRANSLATE_PREV_X]; + prevY = self->frames[frame + TRANSLATE_PREV_Y]; frameTime = self->frames[frame]; - percent = 1 - (time - frameTime) / (self->frames[frame + TRANSLATE_PREV_TIME] - frameTime); - percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / TRANSLATE_ENTRIES - 1, 1 - (time - frameTime) / (self->frames[frame + TRANSLATE_PREV_TIME] - frameTime)); - bone->shearX += (bone->data->shearX + (prevFrameX + (self->frames[frame + TRANSLATE_X] - prevFrameX) * percent) - - bone->shearX) * alpha; - bone->shearY += (bone->data->shearY + (prevFrameY + (self->frames[frame + TRANSLATE_Y] - prevFrameY) * percent) - - bone->shearY) * alpha; + bone->shearX += (bone->data->shearX + prevX + (self->frames[frame + TRANSLATE_X] - prevX) * percent - bone->shearX) * alpha; + bone->shearY += (bone->data->shearY + prevY + (self->frames[frame + TRANSLATE_Y] - prevY) * percent - bone->shearY) * alpha; UNUSED(lastTime); UNUSED(firedEvents); @@ -455,11 +434,8 @@ void spShearTimeline_setFrame (spShearTimeline* self, int frameIndex, float time /**/ -static const int COLOR_PREV_TIME = -5; -static const int COLOR_R = 1; -static const int COLOR_G = 2; -static const int COLOR_B = 3; -static const int COLOR_A = 4; +static const int COLOR_PREV_TIME = -5, COLOR_PREV_R = -4, COLOR_PREV_G = -3, COLOR_PREV_B = -2, COLOR_PREV_A = -1; +static const int COLOR_R = 1, COLOR_G = 2, COLOR_B = 3, COLOR_A = 4; void _spColorTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { @@ -472,22 +448,23 @@ void _spColorTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, f if (time < self->frames[0]) return; /* Time is before first frame. */ if (time >= self->frames[self->framesCount - 5]) { /* Time is after last frame */ - int i = self->framesCount - 1; - r = self->frames[i - 3]; - g = self->frames[i - 2]; - b = self->frames[i - 1]; - a = self->frames[i]; + int i = self->framesCount; + r = self->frames[i + COLOR_PREV_R]; + g = self->frames[i + COLOR_PREV_G]; + b = self->frames[i + COLOR_PREV_B]; + a = self->frames[i + COLOR_PREV_A]; } else { /* Interpolate between the previous frame and the current frame. */ - frame = binarySearch(self->frames, self->framesCount, time, 5); - frameTime = self->frames[frame]; - percent = 1 - (time - frameTime) / (self->frames[frame + COLOR_PREV_TIME] - frameTime); - percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / 5 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + frame = binarySearch(self->frames, self->framesCount, time, COLOR_ENTRIES); - r = self->frames[frame - 4]; - g = self->frames[frame - 3]; - b = self->frames[frame - 2]; - a = self->frames[frame - 1]; + r = self->frames[frame + COLOR_PREV_R]; + g = self->frames[frame + COLOR_PREV_G]; + b = self->frames[frame + COLOR_PREV_B]; + a = self->frames[frame + COLOR_PREV_A]; + + frameTime = self->frames[frame]; + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / COLOR_ENTRIES - 1, + 1 - (time - frameTime) / (self->frames[frame + COLOR_PREV_TIME] - frameTime)); r += (self->frames[frame + COLOR_R] - r) * percent; g += (self->frames[frame + COLOR_G] - g) * percent; @@ -517,36 +494,34 @@ spColorTimeline* spColorTimeline_create (int framesCount) { } void spColorTimeline_setFrame (spColorTimeline* self, int frameIndex, float time, float r, float g, float b, float a) { - frameIndex *= 5; + frameIndex *= COLOR_ENTRIES; self->frames[frameIndex] = time; - self->frames[frameIndex + 1] = r; - self->frames[frameIndex + 2] = g; - self->frames[frameIndex + 3] = b; - self->frames[frameIndex + 4] = a; + self->frames[frameIndex + COLOR_R] = r; + self->frames[frameIndex + COLOR_G] = g; + self->frames[frameIndex + COLOR_B] = b; + self->frames[frameIndex + COLOR_A] = a; } /**/ void _spAttachmentTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { - int frame; const char* attachmentName; spAttachmentTimeline* self = (spAttachmentTimeline*)timeline; + int frameIndex; - if (time < self->frames[0]) { - if (lastTime > time) _spAttachmentTimeline_apply(timeline, skeleton, lastTime, (float)INT_MAX, 0, 0, 0); - return; - } else if (lastTime > time) /**/ - lastTime = -1; + if (time < self->frames[0]) return; - frame = time >= self->frames[self->framesCount - 1] ? - self->framesCount - 1 : binarySearch1(self->frames, self->framesCount, time) - 1; - if (self->frames[frame] < lastTime) return; + if (time >= self->frames[self->framesCount - 1]) + frameIndex = self->framesCount - 1; + else + frameIndex = binarySearch1(self->frames, self->framesCount, time) - 1; - attachmentName = self->attachmentNames[frame]; + attachmentName = self->attachmentNames[frameIndex]; spSlot_setAttachment(skeleton->slots[self->slotIndex], attachmentName ? spSkeleton_getAttachmentForSlotIndex(skeleton, self->slotIndex, attachmentName) : 0); + UNUSED(lastTime); UNUSED(firedEvents); UNUSED(eventsCount); UNUSED(alpha); @@ -719,13 +694,13 @@ void spDrawOrderTimeline_setFrame (spDrawOrderTimeline* self, int frameIndex, fl /**/ -void _spFFDTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, +void _spDeformTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { int frame, i, vertexCount; float percent, frameTime; const float* prevVertices; const float* nextVertices; - spFFDTimeline* self = (spFFDTimeline*)timeline; + spDeformTimeline* self = (spDeformTimeline*)timeline; spSlot *slot = skeleton->slots[self->slotIndex]; @@ -734,12 +709,7 @@ void _spFFDTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, flo switch (slot->attachment->type) { case SP_ATTACHMENT_MESH: { spMeshAttachment* mesh = SUB_CAST(spMeshAttachment, slot->attachment); - if (!mesh->inheritFFD || mesh->parentMesh != (void*)self->attachment) return; - break; - } - case SP_ATTACHMENT_WEIGHTED_MESH: { - spWeightedMeshAttachment* mesh = SUB_CAST(spWeightedMeshAttachment, slot->attachment); - if (!mesh->inheritFFD || mesh->parentMesh != (void*)self->attachment) return; + if (!mesh->inheritDeform || mesh->parentMesh != (void*)self->attachment) return; break; } default: @@ -774,8 +744,7 @@ void _spFFDTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, flo /* Interpolate between the previous frame and the current frame. */ frame = binarySearch1(self->frames, self->framesCount, time); frameTime = self->frames[frame]; - percent = 1 - (time - frameTime) / (self->frames[frame - 1] - frameTime); - percent = spCurveTimeline_getCurvePercent(SUPER(self), frame - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame - 1, 1 - (time - frameTime) / (self->frames[frame - 1] - frameTime)); prevVertices = self->frameVertices[frame - 1]; nextVertices = self->frameVertices[frame]; @@ -797,8 +766,8 @@ void _spFFDTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, flo UNUSED(eventsCount); } -void _spFFDTimeline_dispose (spTimeline* timeline) { - spFFDTimeline* self = SUB_CAST(spFFDTimeline, timeline); +void _spDeformTimeline_dispose (spTimeline* timeline) { + spDeformTimeline* self = SUB_CAST(spDeformTimeline, timeline); int i; _spCurveTimeline_deinit(SUPER(self)); @@ -810,9 +779,9 @@ void _spFFDTimeline_dispose (spTimeline* timeline) { FREE(self); } -spFFDTimeline* spFFDTimeline_create (int framesCount, int frameVerticesCount) { - spFFDTimeline* self = NEW(spFFDTimeline); - _spCurveTimeline_init(SUPER(self), SP_TIMELINE_FFD, framesCount, _spFFDTimeline_dispose, _spFFDTimeline_apply); +spDeformTimeline* spDeformTimeline_create (int framesCount, int frameVerticesCount) { + spDeformTimeline* self = NEW(spDeformTimeline); + _spCurveTimeline_init(SUPER(self), SP_TIMELINE_DEFORM, framesCount, _spDeformTimeline_dispose, _spDeformTimeline_apply); CONST_CAST(int, self->framesCount) = framesCount; CONST_CAST(float*, self->frames) = CALLOC(float, self->framesCount); CONST_CAST(float**, self->frameVertices) = CALLOC(float*, framesCount); @@ -820,7 +789,7 @@ spFFDTimeline* spFFDTimeline_create (int framesCount, int frameVerticesCount) { return self; } -void spFFDTimeline_setFrame (spFFDTimeline* self, int frameIndex, float time, float* vertices) { +void spDeformTimeline_setFrame (spDeformTimeline* self, int frameIndex, float time, float* vertices) { self->frames[frameIndex] = time; FREE(self->frameVertices[frameIndex]); @@ -835,10 +804,8 @@ void spFFDTimeline_setFrame (spFFDTimeline* self, int frameIndex, float time, fl /**/ -static const int IKCONSTRAINT_PREV_TIME = -3; -static const int IKCONSTRAINT_PREV_MIX = -2; -static const int IKCONSTRAINT_PREV_BEND_DIRECTION = -1; -static const int IKCONSTRAINT_MIX = 1; +static const int IKCONSTRAINT_PREV_TIME = -3, IKCONSTRAINT_PREV_MIX = -2, IKCONSTRAINT_PREV_BEND_DIRECTION = -1; +static const int IKCONSTRAINT_MIX = 1, IKCONSTRAINT_BEND_DIRECTION = 2; void _spIkConstraintTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { @@ -851,19 +818,18 @@ void _spIkConstraintTimeline_apply (const spTimeline* timeline, spSkeleton* skel constraint = skeleton->ikConstraints[self->ikConstraintIndex]; - if (time >= self->frames[self->framesCount - 3]) { /* Time is after last frame. */ + if (time >= self->frames[self->framesCount - IKCONSTRAINT_ENTRIES]) { /* Time is after last frame. */ constraint->mix += (self->frames[self->framesCount + IKCONSTRAINT_PREV_MIX] - constraint->mix) * alpha; constraint->bendDirection = (int)self->frames[self->framesCount + IKCONSTRAINT_PREV_BEND_DIRECTION]; return; } /* Interpolate between the previous frame and the current frame. */ - frame = binarySearch(self->frames, self->framesCount, time, 3); - frameTime = self->frames[frame]; - percent = 1 - (time - frameTime) / (self->frames[frame + IKCONSTRAINT_PREV_TIME] - frameTime); - percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - + frame = binarySearch(self->frames, self->framesCount, time, IKCONSTRAINT_ENTRIES); mix = self->frames[frame + IKCONSTRAINT_PREV_MIX]; + frameTime = self->frames[frame]; + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / IKCONSTRAINT_ENTRIES - 1, 1 - (time - frameTime) / (self->frames[frame + IKCONSTRAINT_PREV_TIME] - frameTime)); + constraint->mix += (mix + (self->frames[frame + IKCONSTRAINT_MIX] - mix) * percent - constraint->mix) * alpha; constraint->bendDirection = (int)self->frames[frame + IKCONSTRAINT_PREV_BEND_DIRECTION]; @@ -873,26 +839,26 @@ void _spIkConstraintTimeline_apply (const spTimeline* timeline, spSkeleton* skel } spIkConstraintTimeline* spIkConstraintTimeline_create (int framesCount) { - return (spIkConstraintTimeline*)_spBaseTimeline_create(framesCount, SP_TIMELINE_IKCONSTRAINT, 3, _spIkConstraintTimeline_apply); + return (spIkConstraintTimeline*)_spBaseTimeline_create(framesCount, SP_TIMELINE_IKCONSTRAINT, IKCONSTRAINT_ENTRIES, _spIkConstraintTimeline_apply); } void spIkConstraintTimeline_setFrame (spIkConstraintTimeline* self, int frameIndex, float time, float mix, int bendDirection) { - frameIndex *= 3; + frameIndex *= IKCONSTRAINT_ENTRIES; self->frames[frameIndex] = time; - self->frames[frameIndex + 1] = mix; - self->frames[frameIndex + 2] = (float)bendDirection; + self->frames[frameIndex + IKCONSTRAINT_MIX] = mix; + self->frames[frameIndex + IKCONSTRAINT_BEND_DIRECTION] = (float)bendDirection; } /**/ static const int TRANSFORMCONSTRAINT_PREV_TIME = -5; -static const int TRANSFORMCONSTRAINT_PREV_ROTATE_MIX = -4; -static const int TRANSFORMCONSTRAINT_PREV_TRANSLATE_MIX = -3; -static const int TRANSFORMCONSTRAINT_PREV_SCALE_MIX = -2; -static const int TRANSFORMCONSTRAINT_PREV_SHEAR_MIX = -1; -static const int TRANSFORMCONSTRAINT_ROTATE_MIX = 1; -static const int TRANSFORMCONSTRAINT_TRANSLATE_MIX = 2; -static const int TRANSFORMCONSTRAINT_SCALE_MIX = 3; -static const int TRANSFORMCONSTRAINT_SHEAR_MIX = 4; +static const int TRANSFORMCONSTRAINT_PREV_ROTATE = -4; +static const int TRANSFORMCONSTRAINT_PREV_TRANSLATE = -3; +static const int TRANSFORMCONSTRAINT_PREV_SCALE = -2; +static const int TRANSFORMCONSTRAINT_PREV_SHEAR = -1; +static const int TRANSFORMCONSTRAINT_ROTATE = 1; +static const int TRANSFORMCONSTRAINT_TRANSLATE = 2; +static const int TRANSFORMCONSTRAINT_SCALE = 3; +static const int TRANSFORMCONSTRAINT_SHEAR = 4; void _spTransformConstraintTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { @@ -905,30 +871,28 @@ void _spTransformConstraintTimeline_apply (const spTimeline* timeline, spSkeleto constraint = skeleton->transformConstraints[self->transformConstraintIndex]; - if (time >= self->frames[self->framesCount - 5]) { /* Time is after last frame. */ + if (time >= self->frames[self->framesCount - TRANSFORMCONSTRAINT_ENTRIES]) { /* Time is after last frame. */ int len = self->framesCount; - constraint->rotateMix += (self->frames[len + TRANSFORMCONSTRAINT_PREV_ROTATE_MIX] - constraint->rotateMix) * alpha; - constraint->translateMix += (self->frames[len + TRANSFORMCONSTRAINT_PREV_TRANSLATE_MIX] - constraint->translateMix) * alpha; - constraint->scaleMix += (self->frames[len + TRANSFORMCONSTRAINT_PREV_SCALE_MIX] - constraint->scaleMix) * alpha; - constraint->shearMix += (self->frames[len + TRANSFORMCONSTRAINT_PREV_SHEAR_MIX] - constraint->shearMix) * alpha; + constraint->rotateMix += (self->frames[len + TRANSFORMCONSTRAINT_PREV_ROTATE] - constraint->rotateMix) * alpha; + constraint->translateMix += (self->frames[len + TRANSFORMCONSTRAINT_PREV_TRANSLATE] - constraint->translateMix) * alpha; + constraint->scaleMix += (self->frames[len + TRANSFORMCONSTRAINT_PREV_SCALE] - constraint->scaleMix) * alpha; + constraint->shearMix += (self->frames[len + TRANSFORMCONSTRAINT_PREV_SHEAR] - constraint->shearMix) * alpha; return; } /* Interpolate between the previous frame and the current frame. */ - frame = binarySearch(self->frames, self->framesCount, time, 5); + frame = binarySearch(self->frames, self->framesCount, time, TRANSFORMCONSTRAINT_ENTRIES); frameTime = self->frames[frame]; - percent = 1 - (time - frameTime) / (self->frames[frame + TRANSFORMCONSTRAINT_PREV_TIME] - frameTime); - percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / 5 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / TRANSFORMCONSTRAINT_ENTRIES - 1, 1 - (time - frameTime) / (self->frames[frame + TRANSFORMCONSTRAINT_PREV_TIME] - frameTime)); - rotate = self->frames[frame + TRANSFORMCONSTRAINT_PREV_ROTATE_MIX]; - translate = self->frames[frame + TRANSFORMCONSTRAINT_PREV_TRANSLATE_MIX]; - scale = self->frames[frame + TRANSFORMCONSTRAINT_PREV_SCALE_MIX]; - shear = self->frames[frame + TRANSFORMCONSTRAINT_PREV_SHEAR_MIX]; - constraint->rotateMix += (rotate + (self->frames[frame + TRANSFORMCONSTRAINT_ROTATE_MIX] - rotate) * percent - constraint->rotateMix) * alpha; - constraint->translateMix += (translate + (self->frames[frame + TRANSFORMCONSTRAINT_TRANSLATE_MIX] - translate) * percent - constraint->translateMix) - * alpha; - constraint->scaleMix += (scale + (self->frames[frame + TRANSFORMCONSTRAINT_SCALE_MIX] - scale) * percent - constraint->scaleMix) * alpha; - constraint->shearMix += (shear + (self->frames[frame + TRANSFORMCONSTRAINT_SHEAR_MIX] - shear) * percent - constraint->shearMix) * alpha; + rotate = self->frames[frame + TRANSFORMCONSTRAINT_PREV_ROTATE]; + translate = self->frames[frame + TRANSFORMCONSTRAINT_PREV_TRANSLATE]; + scale = self->frames[frame + TRANSFORMCONSTRAINT_PREV_SCALE]; + shear = self->frames[frame + TRANSFORMCONSTRAINT_PREV_SHEAR]; + constraint->rotateMix += (rotate + (self->frames[frame + TRANSFORMCONSTRAINT_ROTATE] - rotate) * percent - constraint->rotateMix) * alpha; + constraint->translateMix += (translate + (self->frames[frame + TRANSFORMCONSTRAINT_TRANSLATE] - translate) * percent - constraint->translateMix) * alpha; + constraint->scaleMix += (scale + (self->frames[frame + TRANSFORMCONSTRAINT_SCALE] - scale) * percent - constraint->scaleMix) * alpha; + constraint->shearMix += (shear + (self->frames[frame + TRANSFORMCONSTRAINT_SHEAR] - shear) * percent - constraint->shearMix) * alpha; UNUSED(lastTime); UNUSED(firedEvents); @@ -936,14 +900,157 @@ void _spTransformConstraintTimeline_apply (const spTimeline* timeline, spSkeleto } spTransformConstraintTimeline* spTransformConstraintTimeline_create (int framesCount) { - return (spTransformConstraintTimeline*)_spBaseTimeline_create(framesCount, SP_TIMELINE_TRANSFORMCONSTRAINT, 5, _spTransformConstraintTimeline_apply); + return (spTransformConstraintTimeline*)_spBaseTimeline_create(framesCount, SP_TIMELINE_TRANSFORMCONSTRAINT, TRANSFORMCONSTRAINT_ENTRIES, _spTransformConstraintTimeline_apply); } void spTransformConstraintTimeline_setFrame (spTransformConstraintTimeline* self, int frameIndex, float time, float rotateMix, float translateMix, float scaleMix, float shearMix) { - frameIndex *= 5; + frameIndex *= TRANSFORMCONSTRAINT_ENTRIES; self->frames[frameIndex] = time; - self->frames[frameIndex + 1] = rotateMix; - self->frames[frameIndex + 2] = translateMix; - self->frames[frameIndex + 3] = scaleMix; - self->frames[frameIndex + 4] = shearMix; + self->frames[frameIndex + TRANSFORMCONSTRAINT_ROTATE] = rotateMix; + self->frames[frameIndex + TRANSFORMCONSTRAINT_TRANSLATE] = translateMix; + self->frames[frameIndex + TRANSFORMCONSTRAINT_SCALE] = scaleMix; + self->frames[frameIndex + TRANSFORMCONSTRAINT_SHEAR] = shearMix; +} + +/**/ + +static const int PATHCONSTRAINTPOSITION_PREV_TIME = -2; +static const int PATHCONSTRAINTPOSITION_PREV_VALUE = -1; +static const int PATHCONSTRAINTPOSITION_VALUE = 1; + +void _spPathConstraintPositionTimeline_apply(const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, + spEvent** firedEvents, int* eventsCount, float alpha) { + int frame; + float frameTime, percent, position; + spPathConstraint* constraint; + spPathConstraintPositionTimeline* self = (spPathConstraintPositionTimeline*)timeline; + + if (time < self->frames[0]) return; /* Time is before first frame. */ + + constraint = skeleton->pathConstraints[self->pathConstraintIndex]; + + if (time >= self->frames[self->framesCount - PATHCONSTRAINTPOSITION_ENTRIES]) { /* Time is after last frame. */ + int len = self->framesCount; + constraint->position += (self->frames[len + PATHCONSTRAINTPOSITION_PREV_VALUE] - constraint->position) * alpha; + return; + } + + /* Interpolate between the previous frame and the current frame. */ + frame = binarySearch(self->frames, self->framesCount, time, PATHCONSTRAINTPOSITION_ENTRIES); + position = self->frames[frame + PATHCONSTRAINTPOSITION_PREV_VALUE]; + frameTime = self->frames[frame]; + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / PATHCONSTRAINTPOSITION_ENTRIES - 1, 1 - (time - frameTime) / (self->frames[frame + PATHCONSTRAINTPOSITION_PREV_TIME] - frameTime)); + + constraint->position += (position + (self->frames[frame + PATHCONSTRAINTPOSITION_VALUE] - position) * percent - constraint->position) * alpha; + + UNUSED(lastTime); + UNUSED(firedEvents); + UNUSED(eventsCount); +} + +spPathConstraintPositionTimeline* spPathConstraintPositionTimeline_create (int framesCount) { + return (spPathConstraintPositionTimeline*)_spBaseTimeline_create(framesCount, SP_TIMELINE_PATHCONSTRAINTPOSITION, PATHCONSTRAINTPOSITION_ENTRIES, _spPathConstraintPositionTimeline_apply); +} + +void spPathConstraintPositionTimeline_setFrame (spPathConstraintPositionTimeline* self, int frameIndex, float time, float value) { + frameIndex *= PATHCONSTRAINTPOSITION_ENTRIES; + self->frames[frameIndex] = time; + self->frames[frameIndex + PATHCONSTRAINTPOSITION_VALUE] = value; +} + +/**/ +static const int PATHCONSTRAINTSPACING_PREV_TIME = -2; +static const int PATHCONSTRAINTSPACING_PREV_VALUE = -1; +static const int PATHCONSTRAINTSPACING_VALUE = 1; + +void _spPathConstraintSpacingTimeline_apply(const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, + spEvent** firedEvents, int* eventsCount, float alpha) { + int frame; + float frameTime, percent, spacing; + spPathConstraint* constraint; + spPathConstraintSpacingTimeline* self = (spPathConstraintSpacingTimeline*)timeline; + + if (time < self->frames[0]) return; /* Time is before first frame. */ + + constraint = skeleton->pathConstraints[self->pathConstraintIndex]; + + if (time >= self->frames[self->framesCount - PATHCONSTRAINTSPACING_ENTRIES]) { /* Time is after last frame. */ + int len = self->framesCount; + constraint->spacing += (self->frames[len + PATHCONSTRAINTSPACING_PREV_VALUE] - constraint->spacing) * alpha; + return; + } + + /* Interpolate between the previous frame and the current frame. */ + frame = binarySearch(self->frames, self->framesCount, time, PATHCONSTRAINTSPACING_ENTRIES); + spacing = self->frames[frame + PATHCONSTRAINTSPACING_PREV_VALUE]; + frameTime = self->frames[frame]; + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / PATHCONSTRAINTSPACING_ENTRIES - 1, 1 - (time - frameTime) / (self->frames[frame + PATHCONSTRAINTSPACING_PREV_TIME] - frameTime)); + + constraint->spacing += (spacing + (self->frames[frame + PATHCONSTRAINTSPACING_VALUE] - spacing) * percent - constraint->spacing) * alpha; + + UNUSED(lastTime); + UNUSED(firedEvents); + UNUSED(eventsCount); +} + +spPathConstraintSpacingTimeline* spPathConstraintSpacingTimeline_create (int framesCount) { + return (spPathConstraintSpacingTimeline*)_spBaseTimeline_create(framesCount, SP_TIMELINE_PATHCONSTRAINTSPACING, PATHCONSTRAINTSPACING_ENTRIES, _spPathConstraintSpacingTimeline_apply); +} + +void spPathConstraintSpacingTimeline_setFrame (spPathConstraintSpacingTimeline* self, int frameIndex, float time, float value) { + frameIndex *= PATHCONSTRAINTSPACING_ENTRIES; + self->frames[frameIndex] = time; + self->frames[frameIndex + PATHCONSTRAINTSPACING_VALUE] = value; +} + +/**/ + +static const int PATHCONSTRAINTMIX_PREV_TIME = -3; +static const int PATHCONSTRAINTMIX_PREV_ROTATE = -2; +static const int PATHCONSTRAINTMIX_PREV_TRANSLATE = -1; +static const int PATHCONSTRAINTMIX_ROTATE = 1; +static const int PATHCONSTRAINTMIX_TRANSLATE = 2; + +void _spPathConstraintMixTimeline_apply(const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, + spEvent** firedEvents, int* eventsCount, float alpha) { + int frame; + float frameTime, percent, rotate, translate; + spPathConstraint* constraint; + spPathConstraintMixTimeline* self = (spPathConstraintMixTimeline*)timeline; + + if (time < self->frames[0]) return; /* Time is before first frame. */ + + constraint = skeleton->pathConstraints[self->pathConstraintIndex]; + + if (time >= self->frames[self->framesCount - PATHCONSTRAINTMIX_ENTRIES]) { /* Time is after last frame. */ + int len = self->framesCount; + constraint->rotateMix += (self->frames[len + PATHCONSTRAINTMIX_PREV_ROTATE] - constraint->rotateMix) * alpha; + constraint->translateMix += (self->frames[len + PATHCONSTRAINTMIX_PREV_TRANSLATE] - constraint->translateMix) * alpha; + return; + } + + /* Interpolate between the previous frame and the current frame. */ + frame = binarySearch(self->frames, self->framesCount, time, PATHCONSTRAINTMIX_ENTRIES); + rotate = self->frames[frame + PATHCONSTRAINTMIX_PREV_ROTATE]; + translate = self->frames[frame + PATHCONSTRAINTMIX_PREV_TRANSLATE]; + frameTime = self->frames[frame]; + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / PATHCONSTRAINTMIX_ENTRIES - 1, 1 - (time - frameTime) / (self->frames[frame + PATHCONSTRAINTMIX_PREV_TIME] - frameTime)); + + constraint->rotateMix += (rotate + (self->frames[frame + PATHCONSTRAINTMIX_ROTATE] - rotate) * percent - constraint->rotateMix) * alpha; + constraint->translateMix += (translate + (self->frames[frame + PATHCONSTRAINTMIX_TRANSLATE] - translate) * percent - constraint->translateMix) * alpha; + + UNUSED(lastTime); + UNUSED(firedEvents); + UNUSED(eventsCount); +} + +spPathConstraintMixTimeline* spPathConstraintMixTimeline_create (int framesCount) { + return (spPathConstraintMixTimeline*)_spBaseTimeline_create(framesCount, SP_TIMELINE_PATHCONSTRAINTMIX, PATHCONSTRAINTMIX_ENTRIES, _spPathConstraintMixTimeline_apply); +} + +void spPathConstraintMixTimeline_setFrame (spPathConstraintMixTimeline* self, int frameIndex, float time, float rotateMix, float translateMix) { + frameIndex *= PATHCONSTRAINTMIX_ENTRIES; + self->frames[frameIndex] = time; + self->frames[frameIndex + PATHCONSTRAINTMIX_ROTATE] = rotateMix; + self->frames[frameIndex + PATHCONSTRAINTMIX_TRANSLATE] = translateMix; } diff --git a/spine-c/src/spine/Atlas.c b/spine-c/src/spine/Atlas.c index e5073bf08..8b3eabed9 100644 --- a/spine-c/src/spine/Atlas.c +++ b/spine-c/src/spine/Atlas.c @@ -215,15 +215,19 @@ spAtlas* spAtlas_create (const char* begin, int length, const char* dir, void* r page->magFilter = (spAtlasFilter)indexOf(textureFilterNames, 7, tuple + 1); if (!readValue(&begin, end, &str)) return abortAtlas(self); + + page->uWrap = SP_ATLAS_CLAMPTOEDGE; + page->vWrap = SP_ATLAS_CLAMPTOEDGE; if (!equals(&str, "none")) { - page->uWrap = SP_ATLAS_CLAMPTOEDGE; - page->vWrap = SP_ATLAS_CLAMPTOEDGE; - if (*str.begin == 'x') + if (str.end - str.begin == 1) { + if (*str.begin == 'x') + page->uWrap = SP_ATLAS_REPEAT; + else if (*str.begin == 'y') + page->vWrap = SP_ATLAS_REPEAT; + } else if (equals(&str, "xy")) { page->uWrap = SP_ATLAS_REPEAT; - else if (*str.begin == 'y') page->vWrap = SP_ATLAS_REPEAT; - else - page->uWrap = page->vWrap = SP_ATLAS_REPEAT; + } } _spAtlasPage_createTexture(page, path); diff --git a/spine-c/src/spine/AtlasAttachmentLoader.c b/spine-c/src/spine/AtlasAttachmentLoader.c index 2d6017071..3d240035e 100644 --- a/spine-c/src/spine/AtlasAttachmentLoader.c +++ b/spine-c/src/spine/AtlasAttachmentLoader.c @@ -75,33 +75,12 @@ spAttachment* _spAtlasAttachmentLoader_createAttachment (spAttachmentLoader* loa attachment->regionHeight = region->height; attachment->regionOriginalWidth = region->originalWidth; attachment->regionOriginalHeight = region->originalHeight; - return SUPER(attachment); - } - case SP_ATTACHMENT_WEIGHTED_MESH: - case SP_ATTACHMENT_WEIGHTED_LINKED_MESH: { - spWeightedMeshAttachment* attachment; - spAtlasRegion* region = spAtlas_findRegion(self->atlas, path); - if (!region) { - _spAttachmentLoader_setError(loader, "Region not found: ", path); - return 0; - } - attachment = spWeightedMeshAttachment_create(name); - attachment->rendererObject = region; - attachment->regionU = region->u; - attachment->regionV = region->v; - attachment->regionU2 = region->u2; - attachment->regionV2 = region->v2; - attachment->regionRotate = region->rotate; - attachment->regionOffsetX = region->offsetX; - attachment->regionOffsetY = region->offsetY; - attachment->regionWidth = region->width; - attachment->regionHeight = region->height; - attachment->regionOriginalWidth = region->originalWidth; - attachment->regionOriginalHeight = region->originalHeight; - return SUPER(attachment); + return SUPER(SUPER(attachment)); } case SP_ATTACHMENT_BOUNDING_BOX: - return SUPER(spBoundingBoxAttachment_create(name)); + return SUPER(SUPER(spBoundingBoxAttachment_create(name))); + case SP_ATTACHMENT_PATH: + return SUPER(SUPER(spPathAttachment_create(name))); default: _spAttachmentLoader_setUnknownTypeError(loader, type); return 0; diff --git a/spine-c/src/spine/Bone.c b/spine-c/src/spine/Bone.c index d37a9ad35..da9065250 100644 --- a/spine-c/src/spine/Bone.c +++ b/spine-c/src/spine/Bone.c @@ -1,10 +1,10 @@ /****************************************************************************** * Spine Runtimes Software License * Version 2.3 - * + * * Copyright (c) 2013-2015, 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 (the "Software") and derivative works solely for personal @@ -16,7 +16,7 @@ * 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 @@ -52,6 +52,7 @@ spBone* spBone_create (spBoneData* data, spSkeleton* skeleton, spBone* parent) { } void spBone_dispose (spBone* self) { + FREE(self->children); FREE(self); } @@ -68,8 +69,6 @@ void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rota spBone* parent = self->parent; CONST_CAST(float, self->appliedRotation) = rotation; - CONST_CAST(float, self->appliedScaleX) = scaleX; - CONST_CAST(float, self->appliedScaleY) = scaleY; if (!parent) { /* Root bone. */ if (self->skeleton->flipX) { @@ -117,10 +116,10 @@ void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rota do { cosine = COS_DEG(parent->appliedRotation); sine = SIN_DEG(parent->appliedRotation); temp = pa * cosine + pb * sine; - pb = pa * -sine + pb * cosine; + pb = pb * cosine - pa * sine; pa = temp; temp = pc * cosine + pd * sine; - pd = pc * -sine + pd * cosine; + pd = pd * cosine - pc * sine; pc = temp; if (!parent->data->inheritRotation) break; @@ -137,25 +136,23 @@ void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rota pd = 1; do { float za, zb, zc, zd; - float r = parent->appliedRotation; - float psx = parent->appliedScaleX; float psy = parent->appliedScaleY; - cosine = COS_DEG(r); sine = SIN_DEG(r); - za = cosine * psx; zb = -sine * psy; zc = sine * psx; zd = cosine * psy; + float psx = parent->scaleX, psy = parent->scaleY; + cosine = COS_DEG(parent->appliedRotation); + sine = SIN_DEG(parent->appliedRotation); + za = cosine * psx; zb = sine * psy; zc = sine * psx; zd = cosine * psy; temp = pa * za + pb * zc; - pb = pa * zb + pb * zd; + pb = pb * zd - pa * zb; pa = temp; temp = pc * za + pd * zc; - pd = pc * zb + pd * zd; + pd = pd * zd - pc * zb; pc = temp; - if (psx < 0) r = -r; - cosine = COS_DEG(-r); - sine = SIN_DEG(-r); + if (psx >= 0) sine = -sine; temp = pa * cosine + pb * sine; - pb = pa * -sine + pb * cosine; + pb = pb * cosine - pa * sine; pa = temp; temp = pc * cosine + pd * sine; - pd = pc * -sine + pd * cosine; + pd = pd * cosine - pc * sine; pc = temp; if (!parent->data->inheritScale) break; @@ -208,10 +205,78 @@ float spBone_getWorldScaleY (spBone* self) { return SQRT(self->c * self->c + self->d * self->d) * self->worldSignY; } +float spBone_worldToLocalRotationX (spBone* self) { + spBone* parent = self->parent; + if (!parent) return self->rotation; + return ATAN2(parent->a * self->c - parent->c * self->a, parent->d * self->a - parent->b * self->c) * RAD_DEG; +} + +float spBone_worldToLocalRotationY (spBone* self) { + spBone* parent = self->parent; + if (!parent) return self->rotation; + return ATAN2(parent->a * self->d - parent->c * self->b, parent->d * self->b - parent->b * self->d) * RAD_DEG; +} + +void spBone_rotateWorld (spBone* self, float degrees) { + float a = self->a, b = self->b, c = self->c, d = self->d; + float cosine = COS_DEG(degrees), sine = SIN_DEG(degrees); + CONST_CAST(float, self->a) = cosine * a - sine * c; + CONST_CAST(float, self->b) = cosine * b - sine * d; + CONST_CAST(float, self->c) = sine * a + cosine * c; + CONST_CAST(float, self->d) = sine * b + cosine * d; +} + +/** Computes the local transform from the world transform. This can be useful to perform processing on the local transform + * after the world transform has been modified directly (eg, by a constraint). + *

+ * Some redundant information is lost by the world transform, such as -1,-1 scale versus 180 rotation. The computed local + * transform values may differ from the original values but are functionally the same. */ +void spBone_updateLocalTransform (spBone* self) { + spBone* parent = self->parent; + if (!parent) { + float det = self->a * self->d - self->b * self->c; + self->x = self->worldX; + self->y = self->worldY; + self->rotation = ATAN2(self->c, self->a) * RAD_DEG; + self->scaleX = SQRT(self->a * self->a + self->c * self->c); + self->scaleY = SQRT(self->b * self->b + self->d * self->d); + self->shearX = 0; + self->shearY = ATAN2(self->a * self->b + self->c * self->d, det) * RAD_DEG; + } else { + float pa = parent->a, pb = parent->b, pc = parent->c, pd = parent->d; + float pid = 1 / (pa * pd - pb * pc); + float dx = self->worldX - parent->worldX, dy = self->worldY - parent->worldY; + float ia = pid * pd; + float id = pid * pa; + float ib = pid * pb; + float ic = pid * pc; + float ra = ia * self->a - ib * self->c; + float rb = ia * self->b - ib * self->d; + float rc = id * self->c - ic * self->a; + float rd = id * self->d - ic * self->b; + self->x = (dx * pd * pid - dy * pb * pid); + self->y = (dy * pa * pid - dx * pc * pid); + self->shearX = 0; + self->scaleX = SQRT(ra * ra + rc * rc); + if (self->scaleX > 0.0001f) { + float det = ra * rd - rb * rc; + self->scaleY = det / self->scaleX; + self->shearY = ATAN2(ra * rb + rc * rd, det) * RAD_DEG; + self->rotation = ATAN2(rc, ra) * RAD_DEG; + } else { + self->scaleX = 0; + self->scaleY = SQRT(rb * rb + rd * rd); + self->shearY = 0; + self->rotation = 90 - ATAN2(rd, rb) * RAD_DEG; + } + self->appliedRotation = self->rotation; + } +} + void spBone_worldToLocal (spBone* self, float worldX, float worldY, float* localX, float* localY) { - float x = worldX - self->worldX, y = worldY - self->worldY; float a = self->a, b = self->b, c = self->c, d = self->d; float invDet = 1 / (a * d - b * c); + float x = worldX - self->worldX, y = worldY - self->worldY; *localX = (x * d * invDet - y * b * invDet); *localY = (y * a * invDet - x * c * invDet); } diff --git a/spine-c/src/spine/BoneData.c b/spine-c/src/spine/BoneData.c index 1d102f504..10df35eca 100644 --- a/spine-c/src/spine/BoneData.c +++ b/spine-c/src/spine/BoneData.c @@ -32,14 +32,15 @@ #include #include -spBoneData* spBoneData_create (const char* name, spBoneData* parent) { +spBoneData* spBoneData_create (int index, const char* name, spBoneData* parent) { spBoneData* self = NEW(spBoneData); + CONST_CAST(int, self->index) = index; MALLOC_STR(self->name, name); CONST_CAST(spBoneData*, self->parent) = parent; self->scaleX = 1; self->scaleY = 1; - self->inheritScale = 1; self->inheritRotation = 1; + self->inheritScale = 1; return self; } diff --git a/spine-c/src/spine/BoundingBoxAttachment.c b/spine-c/src/spine/BoundingBoxAttachment.c index 501b8ec1a..24166b349 100644 --- a/spine-c/src/spine/BoundingBoxAttachment.c +++ b/spine-c/src/spine/BoundingBoxAttachment.c @@ -35,27 +35,17 @@ void _spBoundingBoxAttachment_dispose (spAttachment* attachment) { spBoundingBoxAttachment* self = SUB_CAST(spBoundingBoxAttachment, attachment); - _spAttachment_deinit(attachment); + _spVertexAttachment_deinit(SUPER(self)); - FREE(self->vertices); FREE(self); } spBoundingBoxAttachment* spBoundingBoxAttachment_create (const char* name) { spBoundingBoxAttachment* self = NEW(spBoundingBoxAttachment); - _spAttachment_init(SUPER(self), name, SP_ATTACHMENT_BOUNDING_BOX, _spBoundingBoxAttachment_dispose); + _spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_BOUNDING_BOX, _spBoundingBoxAttachment_dispose); return self; } -void spBoundingBoxAttachment_computeWorldVertices (spBoundingBoxAttachment* self, spBone* bone, float* worldVertices) { - int i; - float px, py; - float* vertices = self->vertices; - float x = bone->skeleton->x + bone->worldX, y = bone->skeleton->y + bone->worldY; - for (i = 0; i < self->verticesCount; i += 2) { - px = vertices[i]; - py = vertices[i + 1]; - worldVertices[i] = px * bone->a + py * bone->b + x; - worldVertices[i + 1] = px * bone->c + py * bone->d + y; - } +void spBoundingBoxAttachment_computeWorldVertices (spBoundingBoxAttachment* self, spSlot* slot, float* worldVertices) { + spVertexAttachment_computeWorldVertices(SUPER(self), slot, worldVertices); } diff --git a/spine-c/src/spine/IkConstraint.c b/spine-c/src/spine/IkConstraint.c index 5c533c9a0..1430746ff 100644 --- a/spine-c/src/spine/IkConstraint.c +++ b/spine-c/src/spine/IkConstraint.c @@ -35,186 +35,177 @@ #include spIkConstraint *spIkConstraint_create(spIkConstraintData *data, const spSkeleton *skeleton) { - int i; + int i; - spIkConstraint *self = NEW(spIkConstraint); - CONST_CAST(spIkConstraintData*, self->data) = data; - self->bendDirection = data->bendDirection; - self->mix = data->mix; + spIkConstraint *self = NEW(spIkConstraint); + CONST_CAST(spIkConstraintData*, self->data) = data; + self->bendDirection = data->bendDirection; + self->mix = data->mix; - self->bonesCount = self->data->bonesCount; - self->bones = MALLOC(spBone*, self->bonesCount); - for (i = 0; i < self->bonesCount; ++i) - self->bones[i] = spSkeleton_findBone(skeleton, self->data->bones[i]->name); - self->target = spSkeleton_findBone(skeleton, self->data->target->name); + self->bonesCount = self->data->bonesCount; + self->bones = MALLOC(spBone*, self->bonesCount); + for (i = 0; i < self->bonesCount; ++i) + self->bones[i] = spSkeleton_findBone(skeleton, self->data->bones[i]->name); + self->target = spSkeleton_findBone(skeleton, self->data->target->name); - return self; + return self; } void spIkConstraint_dispose(spIkConstraint *self) { - FREE(self->bones); - FREE(self); + FREE(self->bones); + FREE(self); } void spIkConstraint_apply(spIkConstraint *self) { - switch (self->bonesCount) { - case 1: - spIkConstraint_apply1(self->bones[0], self->target->worldX, self->target->worldY, self->mix); - break; - case 2: - spIkConstraint_apply2(self->bones[0], self->bones[1], self->target->worldX, self->target->worldY, - self->bendDirection, - self->mix); - break; - } + switch (self->bonesCount) { + case 1: + spIkConstraint_apply1(self->bones[0], self->target->worldX, self->target->worldY, self->mix); + break; + case 2: + spIkConstraint_apply2(self->bones[0], self->bones[1], self->target->worldX, self->target->worldY, self->bendDirection, self->mix); + break; + } } -void spIkConstraint_apply1(spBone *bone, float targetX, float targetY, float alpha) { - spBone *pp = bone->parent; - float id = 1 / (pp->a * pp->d - pp->b * pp->c); - float x = targetX - pp->worldX, y = targetY - pp->worldY; - float tx = (x * pp->d - y * pp->b) * id - bone->x, ty = (y * pp->a - x * pp->c) * id - bone->y; - float rotationIK = ATAN2(ty, tx) * RAD_DEG - bone->shearX; - if (bone->scaleX < 0) rotationIK += 180; - if (rotationIK > 180) - rotationIK -= 360; - else if (rotationIK < -180) rotationIK += 360; - spBone_updateWorldTransformWith(bone, bone->x, bone->y, bone->rotation + (rotationIK - bone->rotation) * alpha, - bone->appliedScaleX, - bone->appliedScaleY, bone->shearX, bone->shearY); +void spIkConstraint_apply1 (spBone* bone, float targetX, float targetY, float alpha) { + spBone* pp = bone->parent; + float id = 1 / (pp->a * pp->d - pp->b * pp->c); + float x = targetX - pp->worldX, y = targetY - pp->worldY; + float tx = (x * pp->d - y * pp->b) * id - bone->x, ty = (y * pp->a - x * pp->c) * id - bone->y; + float rotationIK = ATAN2(ty, tx) * RAD_DEG - bone->shearX - bone->rotation; + if (bone->scaleX < 0) rotationIK += 180; + if (rotationIK > 180) rotationIK -= 360; + else if (rotationIK < -180) rotationIK += 360; + spBone_updateWorldTransformWith(bone, bone->x, bone->y, bone->rotation + rotationIK * alpha, bone->scaleX, + bone->scaleY, bone->shearX, bone->shearY); } -void spIkConstraint_apply2(spBone *parent, spBone *child, float targetX, float targetY, int bendDir, float alpha) { - float px = parent->x, py = parent->y, psx = parent->appliedScaleX, psy = parent->appliedScaleY; - int os1, os2, s2; - float cx, cy, csx; - int u; - spBone *pp; - float ppa, ppb, ppc, ppd, id; - float x, y; - float tx, ty; - float dx, dy; - float l1, l2, a1, a2; - float os; - float rotation; - - if (alpha == 0) return; - if (psx < 0) { - psx = -psx; - os1 = 180; - s2 = -1; - } else { - os1 = 0; - s2 = 1; - } - if (psy < 0) { - psy = -psy; - s2 = -s2; - } - cx = child->x; cy = child->y; csx = child->appliedScaleX; - u = ABS(psx - psy) <= 0.0001f; - if (!u && cy != 0) { - CONST_CAST(float, child->worldX) = parent->a * cx + parent->worldX; - CONST_CAST(float, child->worldY) = parent->c * cx + parent->worldY; - cy = 0; - } - if (csx < 0) { - csx = -csx; - os2 = 180; - } else - os2 = 0; - pp = parent->parent; - ppa = pp->a; ppb = pp->b; ppc = pp->c; ppd = pp->d; id = 1 / (ppa * ppd - ppb * ppc); - x = targetX - pp->worldX; y = targetY - pp->worldY; - tx = (x * ppd - y * ppb) * id - px; ty = (y * ppa - x * ppc) * id - py; - x = child->worldX - pp->worldX; - y = child->worldY - pp->worldY; - dx = (x * ppd - y * ppb) * id - px; dy = (y * ppa - x * ppc) * id - py; - l1 = SQRT(dx * dx + dy * dy); l2 = child->data->length * csx; - outer: - if (u) { - float cosine, a, o; - l2 *= psx; - cosine = (tx * tx + ty * ty - l1 * l1 - l2 * l2) / (2 * l1 * l2); - if (cosine < -1) - cosine = -1; - else if (cosine > 1) cosine = 1; - a2 = ACOS(cosine) * bendDir; - a = l1 + l2 * cosine, o = l2 * SIN(a2); - a1 = ATAN2(ty * a - tx * o, tx * a + ty * o); - } else { - float minAngle, minDist, minX, minY, maxAngle, maxDist, maxX, maxY, angle; - float a = psx * l2, b = psy * l2, ta = ATAN2(ty, tx); - float aa = a * a, bb = b * b, ll = l1 * l1, dd = tx * tx + ty * ty; - float c0 = bb * ll + aa * dd - aa * bb, c1 = -2 * bb * l1, c2 = bb - aa; - float d = c1 * c1 - 4 * c2 * c0; - if (d >= 0) { - float q = SQRT(d), r0, r, r1; - if (c1 < 0) q = -q; - q = -(c1 + q) / 2; - r0 = q / c2; r1 = c0 / q; - r = ABS(r0) < ABS(r1) ? r0 : r1; - if (r * r <= dd) { - y = SQRT(dd - r * r) * bendDir; - a1 = ta - ATAN2(y, r); - a2 = ATAN2(y / psy, (r - l1) / psx); - goto outer; - } - } - minAngle = 0; minDist = FLT_MAX; minX = 0; minY = 0; - maxAngle = 0; maxDist = 0; maxX = 0; maxY = 0; - x = l1 + a; - d = x * x; - if (d > maxDist) { - maxAngle = 0; - maxDist = d; - maxX = x; - } - x = l1 - a; - d = x * x; - if (d < minDist) { - minAngle = PI; - minDist = d; - minX = x; - } - angle = ACOS(-a * l1 / (aa - bb)); - x = a * COS(angle) + l1; - y = b * SIN(angle); - d = x * x + y * y; - if (d < minDist) { - minAngle = angle; - minDist = d; - minX = x; - minY = y; - } - if (d > maxDist) { - maxAngle = angle; - maxDist = d; - maxX = x; - maxY = y; - } - if (dd <= (minDist + maxDist) / 2) { - a1 = ta - ATAN2(minY * bendDir, minX); - a2 = minAngle * bendDir; - } else { - a1 = ta - ATAN2(maxY * bendDir, maxX); - a2 = maxAngle * bendDir; - } - } - os = ATAN2(cy, cx) * s2; - a1 = (a1 - os) * RAD_DEG + os1; - a2 = ((a2 + os) * RAD_DEG - child->shearX) * s2 + os2; - if (a1 > 180) - a1 -= 360; - else if (a1 < -180) a1 += 360; - if (a2 > 180) - a2 -= 360; - else if (a2 < -180) a2 += 360; - - rotation = parent->rotation; - spBone_updateWorldTransformWith(parent, px, py, rotation + (a1 - rotation) * alpha, parent->appliedScaleX, - parent->appliedScaleY, 0, 0); - rotation = child->rotation; - spBone_updateWorldTransformWith(child, cx, cy, rotation + (a2 - rotation) * alpha, child->appliedScaleX, - child->appliedScaleY, child->shearX, child->shearY); +void spIkConstraint_apply2 (spBone* parent, spBone* child, float targetX, float targetY, int bendDir, float alpha) { + float px = parent->x, py = parent->y, psx = parent->scaleX, psy = parent->scaleY; + float cx = child->x, cy, csx = child->scaleX, cwx, cwy; + int o1, o2, s2, u; + spBone* pp = parent->parent; + float tx, ty, dx, dy, l1, l2, a1, a2, r; + float id, x, y; + if (alpha == 0) { + spBone_updateWorldTransform(child); + return; + } + if (psx < 0) { + psx = -psx; + o1 = 180; + s2 = -1; + } else { + o1 = 0; + s2 = 1; + } + if (psy < 0) { + psy = -psy; + s2 = -s2; + } + if (csx < 0) { + csx = -csx; + o2 = 180; + } else + o2 = 0; + r = psx - psy; + u = (r < 0 ? -r : r) <= 0.0001f; + if (!u) { + cy = 0; + cwx = parent->a * cx + parent->worldX; + cwy = parent->c * cx + parent->worldY; + } else { + cy = child->y; + cwx = parent->a * cx + parent->b * cy + parent->worldX; + cwy = parent->c * cx + parent->d * cy + parent->worldY; + } + id = 1 / (pp->a * pp->d - pp->b * pp->c); + x = targetX - pp->worldX; + y = targetY - pp->worldY; + tx = (x * pp->d - y * pp->b) * id - px; + ty = (y * pp->a - x * pp->c) * id - py; + x = cwx - pp->worldX; + y = cwy - pp->worldY; + dx = (x * pp->d - y * pp->b) * id - px; + dy = (y * pp->a - x * pp->c) * id - py; + l1 = SQRT(dx * dx + dy * dy); + l2 = child->data->length * csx; + if (u) { + float cosine, a, b; + l2 *= psx; + cosine = (tx * tx + ty * ty - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cosine < -1) cosine = -1; + else if (cosine > 1) cosine = 1; + a2 = ACOS(cosine) * bendDir; + a = l1 + l2 * cosine; + b = l2 * SIN(a2); + a1 = ATAN2(ty * a - tx * b, tx * a + ty * b); + } else { + float a = psx * l2, b = psy * l2; + float aa = a * a, bb = b * b, ll = l1 * l1, dd = tx * tx + ty * ty, ta = ATAN2(ty, tx); + float c0 = bb * ll + aa * dd - aa * bb, c1 = -2 * bb * l1, c2 = bb - aa; + float d = c1 * c1 - 4 * c2 * c0; + float minAngle = 0, minDist = FLT_MAX, minX = 0, minY = 0; + float maxAngle = 0, maxDist = 0, maxX = 0, maxY = 0; + float x = l1 + a, dist = x * x, angle, y; + if (d >= 0) { + float q = SQRT(d), r0, r1; + if (c1 < 0) q = -q; + q = -(c1 + q) / 2; + r0 = q / c2; r1 = c0 / q; + r = ABS(r0) < ABS(r1) ? r0 : r1; + if (r * r <= dd) { + y = SQRT(dd - r * r) * bendDir; + a1 = ta - ATAN2(y, r); + a2 = ATAN2(y / psy, (r - l1) / psx); + goto outer; + } + } + if (dist > maxDist) { + maxAngle = 0; + maxDist = dist; + maxX = x; + } + x = l1 - a; + dist = x * x; + if (dist < minDist) { + minAngle = PI; + minDist = dist; + minX = x; + } + angle = ACOS(-a * l1 / (aa - bb)); + x = a * COS(angle) + l1; + y = b * SIN(angle); + dist = x * x + y * y; + if (dist < minDist) { + minAngle = angle; + minDist = dist; + minX = x; + minY = y; + } + if (dist > maxDist) { + maxAngle = angle; + maxDist = dist; + maxX = x; + maxY = y; + } + if (dd <= (minDist + maxDist) / 2) { + a1 = ta - ATAN2(minY * bendDir, minX); + a2 = minAngle * bendDir; + } else { + a1 = ta - ATAN2(maxY * bendDir, maxX); + a2 = maxAngle * bendDir; + } + } + outer: { + float os = ATAN2(cy, cx) * s2; + a1 = (a1 - os) * RAD_DEG + o1 - parent->rotation; + if (a1 > 180) a1 -= 360; + else if (a1 < -180) a1 += 360; + spBone_updateWorldTransformWith(parent, px, py, parent->rotation + a1 * alpha, parent->scaleX, parent->scaleY, 0, 0); + a2 = ((a2 + os) * RAD_DEG - child->shearX) * s2 + o2 - child->rotation; + if (a2 > 180) a2 -= 360; + else if (a2 < -180) a2 += 360; + spBone_updateWorldTransformWith(child, cx, cy, child->rotation + a2 * alpha, child->scaleX, child->scaleY, child->shearX, child->shearY); + } } diff --git a/spine-c/src/spine/MeshAttachment.c b/spine-c/src/spine/MeshAttachment.c index 32cb6b914..2be48581b 100644 --- a/spine-c/src/spine/MeshAttachment.c +++ b/spine-c/src/spine/MeshAttachment.c @@ -34,15 +34,15 @@ void _spMeshAttachment_dispose (spAttachment* attachment) { spMeshAttachment* self = SUB_CAST(spMeshAttachment, attachment); - _spAttachment_deinit(attachment); FREE(self->path); FREE(self->uvs); if (!self->parentMesh) { - FREE(self->vertices); + _spVertexAttachment_deinit(SUPER(self)); FREE(self->regionUVs); FREE(self->triangles); FREE(self->edges); - } + } else + _spAttachment_deinit(attachment); FREE(self); } @@ -52,22 +52,23 @@ spMeshAttachment* spMeshAttachment_create (const char* name) { self->g = 1; self->b = 1; self->a = 1; - _spAttachment_init(SUPER(self), name, SP_ATTACHMENT_MESH, _spMeshAttachment_dispose); + _spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_MESH, _spMeshAttachment_dispose); return self; } void spMeshAttachment_updateUVs (spMeshAttachment* self) { int i; float width = self->regionU2 - self->regionU, height = self->regionV2 - self->regionV; + int verticesLength = SUPER(self)->worldVerticesLength; FREE(self->uvs); - self->uvs = MALLOC(float, self->verticesCount); + self->uvs = MALLOC(float, verticesLength); if (self->regionRotate) { - for (i = 0; i < self->verticesCount; i += 2) { + for (i = 0; i < verticesLength; i += 2) { self->uvs[i] = self->regionU + self->regionUVs[i + 1] * width; self->uvs[i + 1] = self->regionV + height - self->regionUVs[i] * height; } } else { - for (i = 0; i < self->verticesCount; i += 2) { + for (i = 0; i < verticesLength; i += 2) { self->uvs[i] = self->regionU + self->regionUVs[i] * width; self->uvs[i + 1] = self->regionV + self->regionUVs[i + 1] * height; } @@ -75,24 +76,21 @@ void spMeshAttachment_updateUVs (spMeshAttachment* self) { } void spMeshAttachment_computeWorldVertices (spMeshAttachment* self, spSlot* slot, float* worldVertices) { - int i; - float* vertices = self->vertices; - const spBone* bone = slot->bone; - float x = bone->skeleton->x + bone->worldX, y = bone->skeleton->y + bone->worldY; - if (slot->attachmentVerticesCount == self->verticesCount) vertices = slot->attachmentVertices; - for (i = 0; i < self->verticesCount; i += 2) { - const float vx = vertices[i], vy = vertices[i + 1]; - worldVertices[i] = vx * bone->a + vy * bone->b + x; - worldVertices[i + 1] = vx * bone->c + vy * bone->d + y; - } + spVertexAttachment_computeWorldVertices(SUPER(self), slot, worldVertices); } void spMeshAttachment_setParentMesh (spMeshAttachment* self, spMeshAttachment* parentMesh) { CONST_CAST(spMeshAttachment*, self->parentMesh) = parentMesh; if (parentMesh) { - self->vertices = parentMesh->vertices; + self->super.worldVerticesLength = parentMesh->super.worldVerticesLength; + + self->super.bones = parentMesh->super.bones; + self->super.bonesCount = parentMesh->super.bonesCount; + + self->super.vertices = parentMesh->super.vertices; + self->super.verticesCount = parentMesh->super.verticesCount; + self->regionUVs = parentMesh->regionUVs; - self->verticesCount = parentMesh->verticesCount; self->triangles = parentMesh->triangles; self->trianglesCount = parentMesh->trianglesCount; diff --git a/spine-c/src/spine/PathAttachment.c b/spine-c/src/spine/PathAttachment.c new file mode 100644 index 000000000..d51221789 --- /dev/null +++ b/spine-c/src/spine/PathAttachment.c @@ -0,0 +1,56 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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 +#include + +void _spPathAttachment_dispose (spAttachment* attachment) { + spPathAttachment* self = SUB_CAST(spPathAttachment, attachment); + + _spVertexAttachment_deinit(SUPER(self)); + + FREE(self->lengths); + FREE(self); +} + +spPathAttachment* spPathAttachment_create (const char* name) { + spPathAttachment* self = NEW(spPathAttachment); + _spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_PATH, _spPathAttachment_dispose); + return self; +} + +void spPathAttachment_computeWorldVertices (spPathAttachment* self, spSlot* slot, float* worldVertices) { + spVertexAttachment_computeWorldVertices(SUPER(self), slot, worldVertices); +} + +void spPathAttachment_computeWorldVertices1 (spPathAttachment* self, spSlot* slot, int start, int count, float* worldVertices, int offset) { + spVertexAttachment_computeWorldVertices1(SUPER(self), start, count, slot, worldVertices, offset); +} diff --git a/spine-c/src/spine/PathConstraint.c b/spine-c/src/spine/PathConstraint.c new file mode 100644 index 000000000..f50874bb0 --- /dev/null +++ b/spine-c/src/spine/PathConstraint.c @@ -0,0 +1,453 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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 +#include +#include + +#define PATHCONSTRAINT_NONE -1 +#define PATHCONSTRAINT_BEFORE -2 +#define PATHCONSTRAINT_AFTER -3 + +spPathConstraint* spPathConstraint_create (spPathConstraintData* data, const spSkeleton* skeleton) { + int i; + spPathConstraint *self = NEW(spPathConstraint); + CONST_CAST(spPathConstraintData*, self->data) = data; + self->bonesCount = data->bonesCount; + CONST_CAST(spBone**, self->bones) = MALLOC(spBone*, self->bonesCount); + for (i = 0; i < self->bonesCount; ++i) + self->bones[i] = spSkeleton_findBone(skeleton, self->data->bones[i]->name); + self->target = spSkeleton_findSlot(skeleton, self->data->target->name); + self->position = data->position; + self->spacing = data->spacing; + self->rotateMix = data->rotateMix; + self->translateMix = data->translateMix; + self->spacesCount = 0; + self->spaces = 0; + self->positionsCount = 0; + self->positions = 0; + self->worldCount = 0; + self->world = 0; + self->curvesCount = 0; + self->curves = 0; + self->lengthsCount = 0; + self->lengths = 0; + return self; +} + +void spPathConstraint_dispose (spPathConstraint* self) { + FREE(self->bones); + FREE(self->spaces); + if (self->positions) FREE(self->positions); + if (self->world) FREE(self->world); + if (self->curves) FREE(self->curves); + if (self->lengths) FREE(self->lengths); + FREE(self); +} + +void spPathConstraint_apply (spPathConstraint* self) { + int i, p, n; + float length, x, y, dx, dy, s; + float* spaces, *lengths, *positions; + float spacing; + spSkeleton* skeleton; + float skeletonX, skeletonY, boneX, boneY, offsetRotation; + int/*bool*/tip; + float rotateMix = self->rotateMix, translateMix = self->translateMix; + int/*bool*/ translate = translateMix > 0, rotate = rotateMix > 0; + spPathAttachment* attachment = (spPathAttachment*)self->target->attachment; + spPathConstraintData* data = self->data; + spSpacingMode spacingMode = data->spacingMode; + int lengthSpacing = spacingMode == SP_SPACING_MODE_LENGTH; + spRotateMode rotateMode = data->rotateMode; + int tangents = rotateMode == SP_ROTATE_MODE_TANGENT, scale = rotateMode == SP_ROTATE_MODE_CHAIN_SCALE; + int boneCount = self->bonesCount, spacesCount = tangents ? boneCount : boneCount + 1; + spBone** bones = self->bones; + + if (!translate && !rotate) return; + if ((attachment == 0) || (attachment->super.super.type != SP_ATTACHMENT_PATH)) return; + + if (self->spacesCount != spacesCount) { + if (self->spaces) FREE(self->spaces); + self->spaces = MALLOC(float, spacesCount); + self->spacesCount = spacesCount; + } + spaces = self->spaces; + spaces[0] = 0; + lengths = 0; + spacing = self->spacing; + if (scale || lengthSpacing) { + if (scale) { + if (self->lengthsCount != boneCount) { + if (self->lengths) FREE(self->lengths); + self->lengths = MALLOC(float, boneCount); + self->lengthsCount = boneCount; + } + lengths = self->lengths; + } + for (i = 0, n = spacesCount - 1; i < n;) { + spBone* bone = bones[i]; + length = bone->data->length, x = length * bone->a, y = length * bone->c; + length = SQRT(x * x + y * y); + if (scale) lengths[i] = length; + spaces[++i] = lengthSpacing ? MAX(0, length + spacing) : spacing; + } + } else { + for (i = 1; i < spacesCount; i++) { + spaces[i] = spacing; + } + } + + positions = spPathConstraint_computeWorldPositions(self, attachment, spacesCount, tangents, + data->positionMode == SP_POSITION_MODE_PERCENT, spacingMode == SP_SPACING_MODE_PERCENT); + skeleton = self->target->bone->skeleton; + skeletonX = skeleton->x, skeletonY = skeleton->y; + boneX = positions[0], boneY = positions[1], offsetRotation = self->data->offsetRotation; + tip = rotateMode == SP_ROTATE_MODE_CHAIN_SCALE && offsetRotation == 0; + for (i = 0, p = 3; i < boneCount; i++, p += 3) { + spBone* bone = bones[i]; + CONST_CAST(float, bone->worldX) += (boneX - skeletonX - bone->worldX) * translateMix; + CONST_CAST(float, bone->worldY) += (boneY - skeletonY - bone->worldY) * translateMix; + x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; + if (scale) { + length = lengths[i]; + if (length != 0) { + s = (SQRT(dx * dx + dy * dy) / length - 1) * rotateMix + 1; + CONST_CAST(float, bone->a) *= s; + CONST_CAST(float, bone->c) *= s; + } + } + boneX = x; + boneY = y; + if (rotate) { + float a = bone->a, b = bone->b, c = bone->c, d = bone->d, r, cosine, sine; + if (tangents) + r = positions[p - 1]; + else if (spaces[i + 1] == 0) + r = positions[p + 2]; + else + r = ATAN2(dy, dx); + r -= ATAN2(c, a) - offsetRotation * DEG_RAD; + if (tip) { + cosine = COS(r); + sine = SIN(r); + length = bone->data->length; + boneX += (length * (cosine * a - sine * c) - dx) * rotateMix; + boneY += (length * (sine * a + cosine * c) - dy) * rotateMix; + } + if (r > PI) + r -= PI2; + else if (r < -PI) + r += PI2; + r *= rotateMix; + cosine = COS(r); + sine = SIN(r); + CONST_CAST(float, bone->a) = cosine * a - sine * c; + CONST_CAST(float, bone->b) = cosine * b - sine * d; + CONST_CAST(float, bone->c) = sine * a + cosine * c; + CONST_CAST(float, bone->d) = sine * b + cosine * d; + } + } +} + +static void _addBeforePosition(float p, float* temp, int i, float* out, int o) { + float x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = ATAN2(dy, dx); + out[o] = x1 + p * COS(r); + out[o + 1] = y1 + p * SIN(r); + out[o + 2] = r; +} + +static void _addAfterPosition (float p, float* temp, int i, float* out, int o) { + float x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = ATAN2(dy, dx); + out[o] = x1 + p * COS(r); + out[o + 1] = y1 + p * SIN(r); + out[o + 2] = r; +} + +static void _addCurvePosition (float p, float x1, float y1, float cx1, float cy1, float cx2, float cy2, float x2, float y2, + float* out, int o, int/*bool*/tangents) { + float tt, ttt, u, uu, uuu; + float ut, ut3, uut3, utt3; + float x, y; + if (p == 0) p = 0.0001f; + tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; + ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; + x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + out[o] = x; + out[o + 1] = y; + if (tangents) out[o + 2] = ATAN2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); +} + +float* spPathConstraint_computeWorldPositions(spPathConstraint* self, spPathAttachment* path, int spacesCount, int/*bool*/ tangents, int/*bool*/percentPosition, int/**/percentSpacing) { + int i, o, w, curve, segment, /*bool*/closed, verticesLength, curveCount, prevCurve; + float* out, *curves, *segments; + float tmpx, tmpy, dddfx, dddfy, ddfx, ddfy, dfx, dfy, pathLength, curveLength, p; + float x1, y1, cx1, cy1, cx2, cy2, x2, y2; + spSlot* target = self->target; + float position = self->position; + float* spaces = self->spaces, *world = 0; + if (self->positionsCount != spacesCount * 3 + 2) { + if (self->positions) FREE(self->positions); + self->positions = MALLOC(float, spacesCount * 3 + 2); + self->positionsCount = spacesCount * 3 + 2; + } + out = self->positions; + closed = path->closed; + verticesLength = path->super.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PATHCONSTRAINT_NONE; + + if (!path->constantSpeed) { + float* lengths = path->lengths; + curveCount -= closed ? 1 : 2; + pathLength = lengths[curveCount]; + if (percentPosition) position *= pathLength; + if (percentSpacing) { + for (i = 0; i < spacesCount; i++) + spaces[i] *= pathLength; + } + if (self->worldCount != 8) { + if (self->world) FREE(self->world); + self->world = MALLOC(float, 8); + self->worldCount = 8; + } + world = self->world; + for (i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + float space = spaces[i]; + position += space; + p = position; + + if (closed) { + p = FMOD(p, pathLength); + if (p < 0) p += pathLength; + curve = 0; + } else if (p < 0) { + if (prevCurve != PATHCONSTRAINT_BEFORE) { + prevCurve = PATHCONSTRAINT_BEFORE; + spPathAttachment_computeWorldVertices1(path, target, 2, 4, world, 0); + } + _addBeforePosition(p, world, 0, out, o); + continue; + } else if (p > pathLength) { + if (prevCurve != PATHCONSTRAINT_AFTER) { + prevCurve = PATHCONSTRAINT_AFTER; + spPathAttachment_computeWorldVertices1(path, target, verticesLength - 6, 4, world, 0); + } + _addAfterPosition(p - pathLength, world, 0, out, o); + continue; + } + + /* Determine curve containing position. */ + for (;; curve++) { + float length = lengths[curve]; + if (p > length) continue; + if (curve == 0) + p /= length; + else { + float prev = lengths[curve - 1]; + p = (p - prev) / (length - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + if (closed && curve == curveCount) { + spPathAttachment_computeWorldVertices1(path, target, verticesLength - 4, 4, world, 0); + spPathAttachment_computeWorldVertices1(path, target, 0, 4, world, 4); + } else + spPathAttachment_computeWorldVertices1(path, target, curve * 6 + 2, 8, world, 0); + } + _addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, + tangents || (i > 0 && space == 0)); + } + return out; + } + + /* World vertices. */ + if (closed) { + verticesLength += 2; + if (self->worldCount != verticesLength) { + if (self->world) FREE(self->world); + self->world = MALLOC(float, verticesLength); + self->worldCount = verticesLength; + } + world = self->world; + spPathAttachment_computeWorldVertices1(path, target, 2, verticesLength - 4, world, 0); + spPathAttachment_computeWorldVertices1(path, target, 0, 2, world, verticesLength - 4); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } else { + curveCount--; + verticesLength -= 4; + if (self->worldCount != verticesLength) { + if (self->world) FREE(self->world); + self->world = MALLOC(float, verticesLength); + self->worldCount = verticesLength; + } + world = self->world; + spPathAttachment_computeWorldVertices1(path, target, 2, verticesLength, world, 0); + } + + /* Curve lengths. */ + if (self->curvesCount != curveCount) { + if (self->curves) FREE(self->curves); + self->curves = MALLOC(float, curveCount); + self->curvesCount = curveCount; + } + curves = self->curves; + pathLength = 0; + x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + for (i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.1875f; + tmpy = (y1 - cy1 * 2 + cy2) * 0.1875f; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375f; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375f; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.75f + tmpx + dddfx * 0.16666667f; + dfy = (cy1 - y1) * 0.75f + tmpy + dddfy * 0.16666667f; + pathLength += SQRT(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += SQRT(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += SQRT(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += SQRT(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + if (percentPosition) position *= pathLength; + if (percentSpacing) { + for (i = 0; i < spacesCount; i++) + spaces[i] *= pathLength; + } + + segments = self->segments; + curveLength = 0; + for (i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + float space = spaces[i]; + position += space; + p = position; + + if (closed) { + p = FMOD(p, pathLength); + if (p < 0) p += pathLength; + curve = 0; + } else if (p < 0) { + _addBeforePosition(p, world, 0, out, o); + continue; + } else if (p > pathLength) { + _addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + continue; + } + + /* Determine curve containing position. */ + for (;; curve++) { + float length = curves[curve]; + if (p > length) continue; + if (curve == 0) + p /= length; + else { + float prev = curves[curve - 1]; + p = (p - prev) / (length - prev); + } + break; + } + + /* Curve segment lengths. */ + if (curve != prevCurve) { + int ii; + prevCurve = curve; + ii = curve * 6; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.03f; + tmpy = (y1 - cy1 * 2 + cy2) * 0.03f; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006f; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006f; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.3f + tmpx + dddfx * 0.16666667f; + dfy = (cy1 - y1) * 0.3f + tmpy + dddfy * 0.16666667f; + curveLength = SQRT(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += SQRT(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += SQRT(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += SQRT(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + + /* Weight by segment length. */ + p *= curveLength; + for (;; segment++) { + float length = segments[segment]; + if (p > length) continue; + if (segment == 0) + p /= length; + else { + float prev = segments[segment - 1]; + p = segment + (p - prev) / (length - prev); + } + break; + } + _addCurvePosition(p * 0.1f, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0)); + } + return out; +} diff --git a/spine-c/src/spine/PathConstraintData.c b/spine-c/src/spine/PathConstraintData.c new file mode 100644 index 000000000..ffd816796 --- /dev/null +++ b/spine-c/src/spine/PathConstraintData.c @@ -0,0 +1,45 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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 +#include + +spPathConstraintData* spPathConstraintData_create (const char* name) { + spPathConstraintData* self = NEW(spPathConstraintData); + MALLOC_STR(self->name, name); + return self; +} + +void spPathConstraintData_dispose (spPathConstraintData* self) { + FREE(self->name); + FREE(self->bones); + FREE(self); +} diff --git a/spine-c/src/spine/Skeleton.c b/spine-c/src/spine/Skeleton.c index 2c6807eb0..105b6c1f6 100644 --- a/spine-c/src/spine/Skeleton.c +++ b/spine-c/src/spine/Skeleton.c @@ -30,11 +30,13 @@ *****************************************************************************/ #include +#include #include #include +#include typedef enum { - SP_UPDATE_BONE, SP_UPDATE_IK_CONSTRAINT, SP_UPDATE_TRANSFORM_CONSTRAINT + SP_UPDATE_BONE, SP_UPDATE_IK_CONSTRAINT, SP_UPDATE_PATH_CONSTRAINT, SP_UPDATE_TRANSFORM_CONSTRAINT } _spUpdateType; typedef struct { @@ -46,11 +48,13 @@ typedef struct { spSkeleton super; int updateCacheCount; + int updateCacheCapacity; _spUpdate* updateCache; } _spSkeleton; spSkeleton* spSkeleton_create (spSkeletonData* data) { - int i, ii; + int i; + int* childrenCounts; _spSkeleton* internal = NEW(_spSkeleton); spSkeleton* self = SUPER(internal); @@ -58,49 +62,47 @@ spSkeleton* spSkeleton_create (spSkeletonData* data) { self->bonesCount = self->data->bonesCount; self->bones = MALLOC(spBone*, self->bonesCount); + childrenCounts = CALLOC(int, self->bonesCount); for (i = 0; i < self->bonesCount; ++i) { spBoneData* boneData = self->data->bones[i]; - spBone* parent = 0; - if (boneData->parent) { - /* Find parent bone. */ - for (ii = 0; ii < self->bonesCount; ++ii) { - if (data->bones[ii] == boneData->parent) { - parent = self->bones[ii]; - break; - } - } + spBone* bone; + if (!boneData->parent) + bone = spBone_create(boneData, self, 0); + else { + spBone* parent = self->bones[boneData->parent->index]; + bone = spBone_create(boneData, self, parent); + ++childrenCounts[boneData->parent->index]; } - self->bones[i] = spBone_create(boneData, self, parent); + self->bones[i] = bone; } - CONST_CAST(spBone*, self->root) = self->bones[0]; + for (i = 0; i < self->bonesCount; ++i) { + spBoneData* boneData = self->data->bones[i]; + spBone* bone = self->bones[i]; + CONST_CAST(spBone**, bone->children) = MALLOC(spBone*, childrenCounts[boneData->index]); + } + for (i = 0; i < self->bonesCount; ++i) { + spBone* bone = self->bones[i]; + spBone* parent = bone->parent; + if (parent) + parent->children[parent->childrenCount++] = bone; + } + CONST_CAST(spBone*, self->root) = (self->bonesCount > 0 ? self->bones[0] : NULL); self->slotsCount = data->slotsCount; self->slots = MALLOC(spSlot*, self->slotsCount); for (i = 0; i < self->slotsCount; ++i) { spSlotData *slotData = data->slots[i]; - - /* Find bone for the slotData's boneData. */ - spBone* bone = 0; - for (ii = 0; ii < self->bonesCount; ++ii) { - if (data->bones[ii] == slotData->boneData) { - bone = self->bones[ii]; - break; - } - } + spBone* bone = self->bones[slotData->boneData->index]; self->slots[i] = spSlot_create(slotData, bone); } self->drawOrder = MALLOC(spSlot*, self->slotsCount); memcpy(self->drawOrder, self->slots, sizeof(spSlot*) * self->slotsCount); - self->r = 1; - self->g = 1; - self->b = 1; - self->a = 1; - self->ikConstraintsCount = data->ikConstraintsCount; self->ikConstraints = MALLOC(spIkConstraint*, self->ikConstraintsCount); + self->ikConstraintsSorted = MALLOC(spIkConstraint*, self->ikConstraintsCount); for (i = 0; i < self->data->ikConstraintsCount; ++i) self->ikConstraints[i] = spIkConstraint_create(self->data->ikConstraints[i], self); @@ -109,8 +111,17 @@ spSkeleton* spSkeleton_create (spSkeletonData* data) { for (i = 0; i < self->data->transformConstraintsCount; ++i) self->transformConstraints[i] = spTransformConstraint_create(self->data->transformConstraints[i], self); + self->pathConstraintsCount = data->pathConstraintsCount; + self->pathConstraints = MALLOC(spPathConstraint*, self->pathConstraintsCount); + for (i = 0; i < self->data->pathConstraintsCount; i++) + self->pathConstraints[i] = spPathConstraint_create(self->data->pathConstraints[i], self); + + self->r = 1; self->g = 1; self->b = 1; self->a = 1; + spSkeleton_updateCache(self); + FREE(childrenCounts); + return self; } @@ -131,55 +142,184 @@ void spSkeleton_dispose (spSkeleton* self) { for (i = 0; i < self->ikConstraintsCount; ++i) spIkConstraint_dispose(self->ikConstraints[i]); FREE(self->ikConstraints); + FREE(self->ikConstraintsSorted); for (i = 0; i < self->transformConstraintsCount; ++i) spTransformConstraint_dispose(self->transformConstraints[i]); FREE(self->transformConstraints); + for (i = 0; i < self->pathConstraintsCount; i++) + spPathConstraint_dispose(self->pathConstraints[i]); + FREE(self->pathConstraints); + FREE(self->drawOrder); FREE(self); } -void spSkeleton_updateCache (const spSkeleton* self) { - int i, ii; +static void _addToUpdateCache(_spSkeleton* const internal, _spUpdateType type, void *object) { _spUpdate* update; + if (internal->updateCacheCount == internal->updateCacheCapacity) { + internal->updateCacheCapacity *= 2; + internal->updateCache = realloc(internal->updateCache, sizeof(_spUpdate) * internal->updateCacheCapacity); + } + update = internal->updateCache + internal->updateCacheCount; + update->type = type; + update->object = object; + ++internal->updateCacheCount; +} + +static void _sortBone(_spSkeleton* const internal, spBone* bone) { + if (bone->sorted) return; + if (bone->parent) _sortBone(internal, bone->parent); + bone->sorted = 1; + _addToUpdateCache(internal, SP_UPDATE_BONE, bone); +} + +static void _sortPathConstraintAttachmentBones(_spSkeleton* const internal, spAttachment* attachment, spBone* slotBone) { + spPathAttachment* pathAttachment = (spPathAttachment*)attachment; + int* pathBones; + int pathBonesCount; + if (pathAttachment->super.super.type != SP_ATTACHMENT_PATH) return; + pathBones = pathAttachment->super.bones; + pathBonesCount = pathAttachment->super.bonesCount; + if (pathBones == 0) + _sortBone(internal, slotBone); + else { + spBone** bones = internal->super.bones; + int i; + for (i = 0; i < pathBonesCount; i++) + _sortBone(internal, bones[pathBones[i]]); + } +} + +static void _sortPathConstraintAttachment(_spSkeleton* const internal, spSkin* skin, int slotIndex, spBone* slotBone) { + _Entry* entry = SUB_CAST(_spSkin, skin)->entries; + while (entry) { + if (entry->slotIndex == slotIndex) _sortPathConstraintAttachmentBones(internal, entry->attachment, slotBone); + entry = entry->next; + } +} + +static void _sortReset(spBone** bones, int bonesCount) { + int i; + for (i = 0; i < bonesCount; ++i) { + spBone* bone = bones[i]; + if (bone->sorted) _sortReset(bone->children, bone->childrenCount); + bone->sorted = 0; + } +} + +void spSkeleton_updateCache (spSkeleton* self) { + int i, ii, n, nn, level; + spBone** bones; + spIkConstraint** ikConstraints; + spPathConstraint** pathConstraints; + spTransformConstraint** transformConstraints; _spSkeleton* internal = SUB_CAST(_spSkeleton, self); - int capacity = self->bonesCount + self->transformConstraintsCount + self->ikConstraintsCount; + internal->updateCacheCapacity = self->bonesCount + self->ikConstraintsCount + self->transformConstraintsCount + self->pathConstraintsCount; FREE(internal->updateCache); - internal->updateCache = MALLOC(_spUpdate, capacity); + internal->updateCache = MALLOC(_spUpdate, internal->updateCacheCapacity); internal->updateCacheCount = 0; - for (i = 0; i < self->bonesCount; ++i) { - spBone* bone = self->bones[i]; - update = internal->updateCache + internal->updateCacheCount++; - update->type = SP_UPDATE_BONE; - update->object = bone; - for (ii = 0; ii < self->ikConstraintsCount; ++ii) { - spIkConstraint* ikConstraint = self->ikConstraints[ii]; - if (bone == ikConstraint->bones[ikConstraint->bonesCount - 1]) { - update = internal->updateCache + internal->updateCacheCount++; - update->type = SP_UPDATE_IK_CONSTRAINT; - update->object = ikConstraint; - break; - } + bones = self->bones; + for (i = 0; i < self->bonesCount; ++i) + bones[i]->sorted = 0; + + /* IK first, lowest hierarchy depth first. */ + if (self->ikConstraintsSorted) FREE(self->ikConstraintsSorted); + self->ikConstraintsSorted = MALLOC(spIkConstraint*, self->ikConstraintsCount); + ikConstraints = self->ikConstraintsSorted; + for (i = 0; i < self->ikConstraintsCount; ++i) + ikConstraints[i] = self->ikConstraints[i]; + for (i = 0; i < self->ikConstraintsCount; ++i) { + spIkConstraint* ik = ikConstraints[i]; + spBone* bone = ik->bones[0]->parent; + for (level = 0; bone; ++level) + bone = bone->parent; + ik->level = level; + } + for (i = 1; i < self->ikConstraintsCount; ++i) { + spIkConstraint* ik = ikConstraints[i]; + level = ik->level; + for (ii = i - 1; ii >= 0; --ii) { + spIkConstraint* other = ikConstraints[ii]; + if (other->level < level) break; + ikConstraints[ii + 1] = other; } + ikConstraints[ii + 1] = ik; + } + for (i = 0; i < self->ikConstraintsCount; ++i) { + spBone** constrained; + spBone* parent; + spIkConstraint* constraint = ikConstraints[i]; + spBone* target = constraint->target; + _sortBone(internal, target); + + constrained = constraint->bones; + parent = constrained[0]; + _sortBone(internal, parent); + + _addToUpdateCache(internal, SP_UPDATE_IK_CONSTRAINT, constraint); + + _sortReset(parent->children, parent->childrenCount); + constrained[constraint->bonesCount - 1]->sorted = 1; } - for (i = 0; i < self->transformConstraintsCount; ++i) { - spTransformConstraint* transformConstraint = self->transformConstraints[i]; - for (ii = internal->updateCacheCount - 1; ii >= 0; --ii) { - if (internal->updateCache[ii].object == transformConstraint->bone) { - int insertIndex = ii + 1; - update = internal->updateCache + insertIndex; - memmove(update + 1, update, (internal->updateCacheCount - insertIndex) * sizeof(_spUpdate)); - update->type = SP_UPDATE_TRANSFORM_CONSTRAINT; - update->object = transformConstraint; - internal->updateCacheCount++; - break; - } - } + pathConstraints = self->pathConstraints; + for (i = 0, n = self->pathConstraintsCount; i < n; i++) { + spAttachment* attachment; + spBone** constrained; + int boneCount; + spPathConstraint* constraint = pathConstraints[i]; + + spSlot* slot = constraint->target; + int slotIndex = slot->data->index; + spBone* slotBone = slot->bone; + if (self->skin) _sortPathConstraintAttachment(internal, self->skin, slotIndex, slotBone); + if (self->data->defaultSkin && self->data->defaultSkin != self->skin) + _sortPathConstraintAttachment(internal, self->data->defaultSkin, slotIndex, slotBone); + for (ii = 0, nn = self->data->skinsCount; ii < nn; ii++) + _sortPathConstraintAttachment(internal, self->data->skins[ii], slotIndex, slotBone); + + attachment = slot->attachment; + if (attachment->type == SP_ATTACHMENT_PATH) _sortPathConstraintAttachmentBones(internal, attachment, slotBone); + + constrained = constraint->bones; + boneCount = constraint->bonesCount; + for (ii = 0; ii < boneCount; ii++) + _sortBone(internal, constrained[ii]); + + _addToUpdateCache(internal, SP_UPDATE_PATH_CONSTRAINT, constraint); + + for (ii = 0; ii < boneCount; ii++) + _sortReset(constrained[ii]->children, constrained[ii]->childrenCount); + for (ii = 0; ii < boneCount; ii++) + constrained[ii]->sorted = 1; } + + transformConstraints = self->transformConstraints; + for (i = 0, n = self->transformConstraintsCount; i < n; ++i) { + spTransformConstraint* constraint = transformConstraints[i]; + spBone** constrained = constraint->bones; + + _sortBone(internal, constraint->target); + + for (ii = 0; ii < constraint->bonesCount; ++ii) + _sortBone(internal, constrained[ii]); + + _addToUpdateCache(internal, SP_UPDATE_TRANSFORM_CONSTRAINT, constraint); + + for (ii = 0; ii < constraint->bonesCount; ++ii) { + spBone* bone = constrained[ii]; + _sortReset(bone->children, bone->childrenCount); + } + for (ii = 0; ii < constraint->bonesCount; ++ii) + constrained[ii]->sorted = 1; + } + + for (i = 0; i < self->bonesCount; ++i) + _sortBone(internal, self->bones[i]); } void spSkeleton_updateWorldTransform (const spSkeleton* self) { @@ -198,6 +338,9 @@ void spSkeleton_updateWorldTransform (const spSkeleton* self) { case SP_UPDATE_TRANSFORM_CONSTRAINT: spTransformConstraint_apply((spTransformConstraint*)update->object); break; + case SP_UPDATE_PATH_CONSTRAINT: + spPathConstraint_apply((spPathConstraint*)update->object); + break; } } } @@ -226,6 +369,15 @@ void spSkeleton_setBonesToSetupPose (const spSkeleton* self) { constraint->scaleMix = data->scaleMix; constraint->shearMix = data->shearMix; } + + for (i = 0; i < self->pathConstraintsCount; ++i) { + spPathConstraint* constraint = self->pathConstraints[i]; + spPathConstraintData* data = constraint->data; + constraint->position = data->position; + constraint->spacing = data->spacing; + constraint->rotateMix = data->rotateMix; + constraint->translateMix = data->translateMix; + } } void spSkeleton_setSlotsToSetupPose (const spSkeleton* self) { @@ -344,6 +496,13 @@ spTransformConstraint* spSkeleton_findTransformConstraint (const spSkeleton* sel return 0; } +spPathConstraint* spSkeleton_findPathConstraint (const spSkeleton* self, const char* constraintName) { + int i; + for (i = 0; i < self->pathConstraintsCount; ++i) + if (strcmp(self->pathConstraints[i]->data->name, constraintName) == 0) return self->pathConstraints[i]; + return 0; +} + void spSkeleton_update (spSkeleton* self, float deltaTime) { self->time += deltaTime; } diff --git a/spine-c/src/spine/SkeletonBounds.c b/spine-c/src/spine/SkeletonBounds.c index faae30b92..22ba5f594 100644 --- a/spine-c/src/spine/SkeletonBounds.c +++ b/spine-c/src/spine/SkeletonBounds.c @@ -137,12 +137,12 @@ void spSkeletonBounds_update (spSkeletonBounds* self, spSkeleton* skeleton, int/ self->boundingBoxes[self->count] = boundingBox; polygon = self->polygons[self->count]; - if (!polygon || polygon->capacity < boundingBox->verticesCount) { + if (!polygon || polygon->capacity < boundingBox->super.worldVerticesLength) { if (polygon) spPolygon_dispose(polygon); - self->polygons[self->count] = polygon = spPolygon_create(boundingBox->verticesCount); + self->polygons[self->count] = polygon = spPolygon_create(boundingBox->super.worldVerticesLength); } - polygon->count = boundingBox->verticesCount; - spBoundingBoxAttachment_computeWorldVertices(boundingBox, slot->bone, polygon->vertices); + polygon->count = boundingBox->super.worldVerticesLength; + spBoundingBoxAttachment_computeWorldVertices(boundingBox, slot, polygon->vertices); if (updateAabb) { int ii = 0; diff --git a/spine-c/src/spine/SkeletonData.c b/spine-c/src/spine/SkeletonData.c index b042bafb9..a3e2fc7de 100644 --- a/spine-c/src/spine/SkeletonData.c +++ b/spine-c/src/spine/SkeletonData.c @@ -67,6 +67,10 @@ void spSkeletonData_dispose (spSkeletonData* self) { spTransformConstraintData_dispose(self->transformConstraints[i]); FREE(self->transformConstraints); + for (i = 0; i < self->pathConstraintsCount; i++) + spPathConstraintData_dispose(self->pathConstraints[i]); + FREE(self->pathConstraints); + FREE(self->hash); FREE(self->version); @@ -135,3 +139,10 @@ spTransformConstraintData* spSkeletonData_findTransformConstraint (const spSkele if (strcmp(self->transformConstraints[i]->name, constraintName) == 0) return self->transformConstraints[i]; return 0; } + +spPathConstraintData* spSkeletonData_findPathConstraint (const spSkeletonData* self, const char* constraintName) { + int i; + for (i = 0; i < self->pathConstraintsCount; ++i) + if (strcmp(self->pathConstraints[i]->name, constraintName) == 0) return self->pathConstraints[i]; + return 0; +} diff --git a/spine-c/src/spine/SkeletonJson.c b/spine-c/src/spine/SkeletonJson.c index 2537c66c6..d7bdceaef 100644 --- a/spine-c/src/spine/SkeletonJson.c +++ b/spine-c/src/spine/SkeletonJson.c @@ -35,12 +35,13 @@ #include "Json.h" #include #include +#include typedef struct { const char* parent; const char* skin; int slotIndex; - spAttachment* mesh; + spMeshAttachment* mesh; } _spLinkedMesh; typedef struct { @@ -101,7 +102,7 @@ static float toColor (const char* value, int index) { return color / (float)255; } -static void readCurve (spCurveTimeline* timeline, int frameIndex, Json* frame) { +static void readCurve (Json* frame, spCurveTimeline* timeline, int frameIndex) { Json* curve = Json_getItem(frame, "curve"); if (!curve) return; if (curve->type == Json_String && strcmp(curve->valueString, "stepped") == 0) @@ -116,7 +117,7 @@ static void readCurve (spCurveTimeline* timeline, int frameIndex, Json* frame) { } } -static void _spSkeletonJson_addLinkedMesh (spSkeletonJson* self, spAttachment* mesh, const char* skin, int slotIndex, +static void _spSkeletonJson_addLinkedMesh (spSkeletonJson* self, spMeshAttachment* mesh, const char* skin, int slotIndex, const char* parent) { _spLinkedMesh* linkedMesh; _spSkeletonJson* internal = SUB_CAST(_spSkeletonJson, self); @@ -139,20 +140,20 @@ static void _spSkeletonJson_addLinkedMesh (spSkeletonJson* self, spAttachment* m } static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* root, spSkeletonData *skeletonData) { - int i; + int frameIndex; spAnimation* animation; - Json* frame; - float duration; + Json* valueMap; int timelinesCount = 0; Json* bones = Json_getItem(root, "bones"); Json* slots = Json_getItem(root, "slots"); Json* ik = Json_getItem(root, "ik"); Json* transform = Json_getItem(root, "transform"); - Json* ffd = Json_getItem(root, "ffd"); + Json* paths = Json_getItem(root, "paths"); + Json* deform = Json_getItem(root, "deform"); Json* drawOrder = Json_getItem(root, "drawOrder"); Json* events = Json_getItem(root, "events"); - Json *boneMap, *slotMap, *constraintMap, *ffdMap; + Json *boneMap, *slotMap, *constraintMap; if (!drawOrder) drawOrder = Json_getItem(root, "draworder"); for (boneMap = bones ? bones->child : 0; boneMap; boneMap = boneMap->next) @@ -160,8 +161,11 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r for (slotMap = slots ? slots->child : 0; slotMap; slotMap = slotMap->next) timelinesCount += slotMap->size; timelinesCount += ik ? ik->size : 0; - for (ffdMap = ffd ? ffd->child : 0; ffdMap; ffdMap = ffdMap->next) - for (slotMap = ffdMap->child; slotMap; slotMap = slotMap->next) + timelinesCount += transform ? transform->size : 0; + for (constraintMap = paths ? paths->child : 0; constraintMap; constraintMap = constraintMap->next) + timelinesCount += constraintMap->size; + for (constraintMap = deform ? deform->child : 0; constraintMap; constraintMap = constraintMap->next) + for (slotMap = constraintMap->child; slotMap; slotMap = slotMap->next) timelinesCount += slotMap->size; if (drawOrder) ++timelinesCount; if (events) ++timelinesCount; @@ -171,7 +175,7 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r /* Slot timelines. */ for (slotMap = slots ? slots->child : 0; slotMap; slotMap = slotMap->next) { - Json *timelineArray; + Json *timelineMap; int slotIndex = spSkeletonData_findSlotIndex(skeletonData, slotMap->name); if (slotIndex == -1) { @@ -180,35 +184,35 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r return 0; } - for (timelineArray = slotMap->child; timelineArray; timelineArray = timelineArray->next) { - if (strcmp(timelineArray->name, "color") == 0) { - spColorTimeline *timeline = spColorTimeline_create(timelineArray->size); + for (timelineMap = slotMap->child; timelineMap; timelineMap = timelineMap->next) { + if (strcmp(timelineMap->name, "color") == 0) { + spColorTimeline *timeline = spColorTimeline_create(timelineMap->size); timeline->slotIndex = slotIndex; - for (frame = timelineArray->child, i = 0; frame; frame = frame->next, ++i) { - const char* s = Json_getString(frame, "color", 0); - spColorTimeline_setFrame(timeline, i, Json_getFloat(frame, "time", 0), toColor(s, 0), toColor(s, 1), toColor(s, 2), + + for (valueMap = timelineMap->child, frameIndex = 0; valueMap; valueMap = valueMap->next, ++frameIndex) { + const char* s = Json_getString(valueMap, "color", 0); + spColorTimeline_setFrame(timeline, frameIndex, Json_getFloat(valueMap, "time", 0), toColor(s, 0), toColor(s, 1), toColor(s, 2), toColor(s, 3)); - readCurve(SUPER(timeline), i, frame); + readCurve(valueMap, SUPER(timeline), frameIndex); } animation->timelines[animation->timelinesCount++] = SUPER_CAST(spTimeline, timeline); - duration = timeline->frames[timelineArray->size * 5 - 5]; - if (duration > animation->duration) animation->duration = duration; + animation->duration = MAX(animation->duration, timeline->frames[(timelineMap->size - 1) * COLOR_ENTRIES]); - } else if (strcmp(timelineArray->name, "attachment") == 0) { - spAttachmentTimeline *timeline = spAttachmentTimeline_create(timelineArray->size); + } else if (strcmp(timelineMap->name, "attachment") == 0) { + spAttachmentTimeline *timeline = spAttachmentTimeline_create(timelineMap->size); timeline->slotIndex = slotIndex; - for (frame = timelineArray->child, i = 0; frame; frame = frame->next, ++i) { - Json* name = Json_getItem(frame, "name"); - spAttachmentTimeline_setFrame(timeline, i, Json_getFloat(frame, "time", 0), + + for (valueMap = timelineMap->child, frameIndex = 0; valueMap; valueMap = valueMap->next, ++frameIndex) { + Json* name = Json_getItem(valueMap, "name"); + spAttachmentTimeline_setFrame(timeline, frameIndex, Json_getFloat(valueMap, "time", 0), name->type == Json_NULL ? 0 : name->valueString); } animation->timelines[animation->timelinesCount++] = SUPER_CAST(spTimeline, timeline); - duration = timeline->frames[timelineArray->size - 1]; - if (duration > animation->duration) animation->duration = duration; + animation->duration = MAX(animation->duration, timeline->frames[timelineMap->size - 1]); } else { spAnimation_dispose(animation); - _spSkeletonJson_setError(self, 0, "Invalid timeline type for a slot: ", timelineArray->name); + _spSkeletonJson_setError(self, 0, "Invalid timeline type for a slot: ", timelineMap->name); return 0; } } @@ -216,7 +220,7 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r /* Bone timelines. */ for (boneMap = bones ? bones->child : 0; boneMap; boneMap = boneMap->next) { - Json *timelineArray; + Json *timelineMap; int boneIndex = spSkeletonData_findBoneIndex(skeletonData, boneMap->name); if (boneIndex == -1) { @@ -225,42 +229,41 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r return 0; } - for (timelineArray = boneMap->child; timelineArray; timelineArray = timelineArray->next) { - if (strcmp(timelineArray->name, "rotate") == 0) { - spRotateTimeline *timeline = spRotateTimeline_create(timelineArray->size); + for (timelineMap = boneMap->child; timelineMap; timelineMap = timelineMap->next) { + if (strcmp(timelineMap->name, "rotate") == 0) { + spRotateTimeline *timeline = spRotateTimeline_create(timelineMap->size); timeline->boneIndex = boneIndex; - for (frame = timelineArray->child, i = 0; frame; frame = frame->next, ++i) { - spRotateTimeline_setFrame(timeline, i, Json_getFloat(frame, "time", 0), Json_getFloat(frame, "angle", 0)); - readCurve(SUPER(timeline), i, frame); + + for (valueMap = timelineMap->child, frameIndex = 0; valueMap; valueMap = valueMap->next, ++frameIndex) { + spRotateTimeline_setFrame(timeline, frameIndex, Json_getFloat(valueMap, "time", 0), Json_getFloat(valueMap, "angle", 0)); + readCurve(valueMap, SUPER(timeline), frameIndex); } animation->timelines[animation->timelinesCount++] = SUPER_CAST(spTimeline, timeline); - duration = timeline->frames[timelineArray->size * 2 - 2]; - if (duration > animation->duration) animation->duration = duration; + animation->duration = MAX(animation->duration, timeline->frames[(timelineMap->size - 1) * ROTATE_ENTRIES]); } else { - int isScale = strcmp(timelineArray->name, "scale") == 0; - int isTranslate = strcmp(timelineArray->name, "translate") == 0; - int isShear = strcmp(timelineArray->name, "shear") == 0; + int isScale = strcmp(timelineMap->name, "scale") == 0; + int isTranslate = strcmp(timelineMap->name, "translate") == 0; + int isShear = strcmp(timelineMap->name, "shear") == 0; if (isScale || isTranslate || isShear) { - float scale = isTranslate ? self->scale: 1; + float timelineScale = isTranslate ? self->scale: 1; spTranslateTimeline *timeline = 0; - if (isScale) timeline = spScaleTimeline_create(timelineArray->size); - else if (isTranslate) timeline = spTranslateTimeline_create(timelineArray->size); - else if (isShear) timeline = spShearTimeline_create(timelineArray->size); - + if (isScale) timeline = spScaleTimeline_create(timelineMap->size); + else if (isTranslate) timeline = spTranslateTimeline_create(timelineMap->size); + else if (isShear) timeline = spShearTimeline_create(timelineMap->size); timeline->boneIndex = boneIndex; - for (frame = timelineArray->child, i = 0; frame; frame = frame->next, ++i) { - spTranslateTimeline_setFrame(timeline, i, Json_getFloat(frame, "time", 0), Json_getFloat(frame, "x", 0) * scale, - Json_getFloat(frame, "y", 0) * scale); - readCurve(SUPER(timeline), i, frame); + + for (valueMap = timelineMap->child, frameIndex = 0; valueMap; valueMap = valueMap->next, ++frameIndex) { + spTranslateTimeline_setFrame(timeline, frameIndex, Json_getFloat(valueMap, "time", 0), Json_getFloat(valueMap, "x", 0) * timelineScale, + Json_getFloat(valueMap, "y", 0) * timelineScale); + readCurve(valueMap, SUPER(timeline), frameIndex); } animation->timelines[animation->timelinesCount++] = SUPER_CAST(spTimeline, timeline); - duration = timeline->frames[timelineArray->size * 3 - 3]; - if (duration > animation->duration) animation->duration = duration; + animation->duration = MAX(animation->duration, timeline->frames[(timelineMap->size - 1) * TRANSLATE_ENTRIES]); } else { spAnimation_dispose(animation); - _spSkeletonJson_setError(self, 0, "Invalid timeline type for a bone: ", timelineArray->name); + _spSkeletonJson_setError(self, 0, "Invalid timeline type for a bone: ", timelineMap->name); return 0; } } @@ -271,107 +274,151 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r for (constraintMap = ik ? ik->child : 0; constraintMap; constraintMap = constraintMap->next) { spIkConstraintData* constraint = spSkeletonData_findIkConstraint(skeletonData, constraintMap->name); spIkConstraintTimeline* timeline = spIkConstraintTimeline_create(constraintMap->size); - for (i = 0; i < skeletonData->ikConstraintsCount; ++i) { - if (constraint == skeletonData->ikConstraints[i]) { - timeline->ikConstraintIndex = i; + for (frameIndex = 0; frameIndex < skeletonData->ikConstraintsCount; ++frameIndex) { + if (constraint == skeletonData->ikConstraints[frameIndex]) { + timeline->ikConstraintIndex = frameIndex; break; } } - for (frame = constraintMap->child, i = 0; frame; frame = frame->next, ++i) { - spIkConstraintTimeline_setFrame(timeline, i, Json_getFloat(frame, "time", 0), Json_getFloat(frame, "mix", 1), - Json_getInt(frame, "bendPositive", 1) ? 1 : -1); - readCurve(SUPER(timeline), i, frame); + for (valueMap = constraintMap->child, frameIndex = 0; valueMap; valueMap = valueMap->next, ++frameIndex) { + spIkConstraintTimeline_setFrame(timeline, frameIndex, Json_getFloat(valueMap, "time", 0), Json_getFloat(valueMap, "mix", 1), + Json_getInt(valueMap, "bendPositive", 1) ? 1 : -1); + readCurve(valueMap, SUPER(timeline), frameIndex); } animation->timelines[animation->timelinesCount++] = SUPER_CAST(spTimeline, timeline); - duration = timeline->frames[constraintMap->size * 3 - 3]; - if (duration > animation->duration) animation->duration = duration; + animation->duration = MAX(animation->duration, timeline->frames[(constraintMap->size - 1) * IKCONSTRAINT_ENTRIES]); } /* Transform constraint timelines. */ for (constraintMap = transform ? transform->child : 0; constraintMap; constraintMap = constraintMap->next) { spTransformConstraintData* constraint = spSkeletonData_findTransformConstraint(skeletonData, constraintMap->name); spTransformConstraintTimeline* timeline = spTransformConstraintTimeline_create(constraintMap->size); - for (i = 0; i < skeletonData->transformConstraintsCount; ++i) { - if (constraint == skeletonData->transformConstraints[i]) { - timeline->transformConstraintIndex = i; + for (frameIndex = 0; frameIndex < skeletonData->transformConstraintsCount; ++frameIndex) { + if (constraint == skeletonData->transformConstraints[frameIndex]) { + timeline->transformConstraintIndex = frameIndex; break; } } - for (frame = constraintMap->child, i = 0; frame; frame = frame->next, ++i) { - spTransformConstraintTimeline_setFrame(timeline, i, Json_getFloat(frame, "time", 0), Json_getFloat(frame, "rotateMix", 1), - Json_getFloat(frame, "translateMix", 1), Json_getFloat(frame, "scaleMix", 1), Json_getFloat(frame, "shearMix", 1)); - readCurve(SUPER(timeline), i, frame); + for (valueMap = constraintMap->child, frameIndex = 0; valueMap; valueMap = valueMap->next, ++frameIndex) { + spTransformConstraintTimeline_setFrame(timeline, frameIndex, Json_getFloat(valueMap, "time", 0), Json_getFloat(valueMap, "rotateMix", 1), + Json_getFloat(valueMap, "translateMix", 1), Json_getFloat(valueMap, "scaleMix", 1), Json_getFloat(valueMap, "shearMix", 1)); + readCurve(valueMap, SUPER(timeline), frameIndex); } animation->timelines[animation->timelinesCount++] = SUPER_CAST(spTimeline, timeline); - duration = timeline->frames[constraintMap->size * 5 - 5]; - if (duration > animation->duration) animation->duration = duration; + animation->duration = MAX(animation->duration, timeline->frames[(constraintMap->size - 1) * TRANSFORMCONSTRAINT_ENTRIES]); } - /* FFD timelines. */ - for (ffdMap = ffd ? ffd->child : 0; ffdMap; ffdMap = ffdMap->next) { - spSkin* skin = spSkeletonData_findSkin(skeletonData, ffdMap->name); - for (slotMap = ffdMap->child; slotMap; slotMap = slotMap->next) { - int slotIndex = spSkeletonData_findSlotIndex(skeletonData, slotMap->name); - Json* timelineArray; - for (timelineArray = slotMap->child; timelineArray; timelineArray = timelineArray->next) { - Json* frame; - int verticesCount = 0; - float* tempVertices; - spFFDTimeline *timeline; + /** Path constraint timelines. */ + for(constraintMap = paths ? paths->child : 0; constraintMap; constraintMap = constraintMap->next ) { + int constraintIndex, i; + Json* timelineMap; - spAttachment* attachment = spSkin_getAttachment(skin, slotIndex, timelineArray->name); + spPathConstraintData* data = spSkeletonData_findPathConstraint(skeletonData, constraintMap->name); + if (!data) { + spAnimation_dispose(animation); + _spSkeletonJson_setError(self, root, "Path constraint not found: ", constraintMap->name); + return 0; + } + for (i = 0; i < skeletonData->pathConstraintsCount; i++) { + if (skeletonData->pathConstraints[i] == data) { + constraintIndex = i; + break; + } + } + + for (timelineMap = constraintMap->child; timelineMap; timelineMap = timelineMap->next) { + const char* timelineName = timelineMap->name; + if (strcmp(timelineName, "position") == 0 || strcmp(timelineName, "spacing") == 0) { + spPathConstraintPositionTimeline* timeline; + float timelineScale = 1; + if (strcmp(timelineName, "spacing") == 0) { + timeline = (spPathConstraintPositionTimeline*)spPathConstraintSpacingTimeline_create(timelineMap->size); + if (data->spacingMode == SP_SPACING_MODE_LENGTH || data->spacingMode == SP_SPACING_MODE_FIXED) timelineScale = self->scale; + } else { + timeline = spPathConstraintPositionTimeline_create(timelineMap->size); + if (data->positionMode == SP_POSITION_MODE_FIXED) timelineScale = self->scale; + } + timeline->pathConstraintIndex = constraintIndex; + for (valueMap = timelineMap->child, frameIndex = 0; valueMap; valueMap = valueMap->next, ++frameIndex) { + spPathConstraintPositionTimeline_setFrame(timeline, frameIndex, Json_getFloat(valueMap, "time", 0), Json_getFloat(valueMap, timelineName, 0) * timelineScale); + readCurve(valueMap, SUPER(timeline), frameIndex); + } + animation->timelines[animation->timelinesCount++] = SUPER_CAST(spTimeline, timeline); + animation->duration = MAX(animation->duration, timeline->frames[(timelineMap->size - 1) * PATHCONSTRAINTPOSITION_ENTRIES]); + } else if (strcmp(timelineName, "mix")) { + spPathConstraintMixTimeline* timeline = spPathConstraintMixTimeline_create(timelineMap->size); + timeline->pathConstraintIndex = constraintIndex; + for (valueMap = timelineMap->child, frameIndex = 0; valueMap; valueMap = valueMap->next, ++frameIndex) { + spPathConstraintMixTimeline_setFrame(timeline, frameIndex, Json_getFloat(valueMap, "time", 0), + Json_getFloat(valueMap, "rotateMix", 1), Json_getFloat(valueMap, "translateMix", 1)); + readCurve(valueMap, SUPER(timeline), frameIndex); + } + animation->timelines[animation->timelinesCount++] = SUPER_CAST(spTimeline, timeline); + animation->duration = MAX(animation->duration, timeline->frames[(timelineMap->size - 1) * PATHCONSTRAINTMIX_ENTRIES]); + } + } + } + + /* Deform timelines. */ + for (constraintMap = deform ? deform->child : 0; constraintMap; constraintMap = constraintMap->next) { + spSkin* skin = spSkeletonData_findSkin(skeletonData, constraintMap->name); + for (slotMap = constraintMap->child; slotMap; slotMap = slotMap->next) { + int slotIndex = spSkeletonData_findSlotIndex(skeletonData, slotMap->name); + Json* timelineMap; + for (timelineMap = slotMap->child; timelineMap; timelineMap = timelineMap->next) { + float* tempDeform; + spDeformTimeline *timeline; + int weighted, deformLength; + + spVertexAttachment* attachment = SUB_CAST(spVertexAttachment, spSkin_getAttachment(skin, slotIndex, timelineMap->name)); if (!attachment) { spAnimation_dispose(animation); - _spSkeletonJson_setError(self, 0, "Attachment not found: ", timelineArray->name); + _spSkeletonJson_setError(self, 0, "Attachment not found: ", timelineMap->name); return 0; } - if (attachment->type == SP_ATTACHMENT_MESH) - verticesCount = SUB_CAST(spMeshAttachment, attachment)->verticesCount; - else if (attachment->type == SP_ATTACHMENT_WEIGHTED_MESH) - verticesCount = SUB_CAST(spWeightedMeshAttachment, attachment)->weightsCount / 3 * 2; + weighted = attachment->bones != 0; + deformLength = weighted ? attachment->verticesCount / 3 * 2 : attachment->verticesCount; + tempDeform = MALLOC(float, deformLength); - timeline = spFFDTimeline_create(timelineArray->size, verticesCount); + timeline = spDeformTimeline_create(timelineMap->size, deformLength); timeline->slotIndex = slotIndex; - timeline->attachment = attachment; + timeline->attachment = SUPER(attachment); - tempVertices = MALLOC(float, verticesCount); - for (frame = timelineArray->child, i = 0; frame; frame = frame->next, ++i) { - Json* vertices = Json_getItem(frame, "vertices"); - float* frameVertices; + for (valueMap = timelineMap->child, frameIndex = 0; valueMap; valueMap = valueMap->next, ++frameIndex) { + Json* vertices = Json_getItem(valueMap, "vertices"); + float* deform; if (!vertices) { - if (attachment->type == SP_ATTACHMENT_MESH) - frameVertices = SUB_CAST(spMeshAttachment, attachment)->vertices; - else { - frameVertices = tempVertices; - memset(frameVertices, 0, sizeof(float) * verticesCount); - } + if (weighted) { + deform = tempDeform; + memset(deform, 0, sizeof(float) * deformLength); + } else + deform = attachment->vertices; } else { - int v, start = Json_getInt(frame, "offset", 0); + int v, start = Json_getInt(valueMap, "offset", 0); Json* vertex; - frameVertices = tempVertices; - memset(frameVertices, 0, sizeof(float) * start); + deform = tempDeform; + memset(deform, 0, sizeof(float) * start); if (self->scale == 1) { for (vertex = vertices->child, v = start; vertex; vertex = vertex->next, ++v) - frameVertices[v] = vertex->valueFloat; + deform[v] = vertex->valueFloat; } else { for (vertex = vertices->child, v = start; vertex; vertex = vertex->next, ++v) - frameVertices[v] = vertex->valueFloat * self->scale; + deform[v] = vertex->valueFloat * self->scale; } - memset(frameVertices + v, 0, sizeof(float) * (verticesCount - v)); - if (attachment->type == SP_ATTACHMENT_MESH) { - float* meshVertices = SUB_CAST(spMeshAttachment, attachment)->vertices; - for (v = 0; v < verticesCount; ++v) - frameVertices[v] += meshVertices[v]; + memset(deform + v, 0, sizeof(float) * (deformLength - v)); + if (!weighted) { + float* vertices = attachment->vertices; + for (v = 0; v < deformLength; ++v) + deform[v] += vertices[v]; } } - spFFDTimeline_setFrame(timeline, i, Json_getFloat(frame, "time", 0), frameVertices); - readCurve(SUPER(timeline), i, frame); + spDeformTimeline_setFrame(timeline, frameIndex, Json_getFloat(valueMap, "time", 0), deform); + readCurve(valueMap, SUPER(timeline), frameIndex); } - FREE(tempVertices); + FREE(tempDeform); animation->timelines[animation->timelinesCount++] = SUPER_CAST(spTimeline, timeline); - duration = timeline->frames[timelineArray->size - 1]; - if (duration > animation->duration) animation->duration = duration; + animation->duration = MAX(animation->duration, timeline->frames[timelineMap->size - 1]); } } } @@ -379,10 +426,10 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r /* Draw order timeline. */ if (drawOrder) { spDrawOrderTimeline* timeline = spDrawOrderTimeline_create(drawOrder->size, skeletonData->slotsCount); - for (frame = drawOrder->child, i = 0; frame; frame = frame->next, ++i) { + for (valueMap = drawOrder->child, frameIndex = 0; valueMap; valueMap = valueMap->next, ++frameIndex) { int ii; int* drawOrder = 0; - Json* offsets = Json_getItem(frame, "offsets"); + Json* offsets = Json_getItem(valueMap, "offsets"); if (offsets) { Json* offsetMap; int* unchanged = MALLOC(int, skeletonData->slotsCount - offsets->size); @@ -414,43 +461,90 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r if (drawOrder[ii] == -1) drawOrder[ii] = unchanged[--unchangedIndex]; FREE(unchanged); } - spDrawOrderTimeline_setFrame(timeline, i, Json_getFloat(frame, "time", 0), drawOrder); + spDrawOrderTimeline_setFrame(timeline, frameIndex, Json_getFloat(valueMap, "time", 0), drawOrder); FREE(drawOrder); } animation->timelines[animation->timelinesCount++] = SUPER_CAST(spTimeline, timeline); - duration = timeline->frames[drawOrder->size - 1]; - if (duration > animation->duration) animation->duration = duration; + animation->duration = MAX(animation->duration, timeline->frames[drawOrder->size - 1]); } /* Event timeline. */ if (events) { - Json* frame; - spEventTimeline* timeline = spEventTimeline_create(events->size); - for (frame = events->child, i = 0; frame; frame = frame->next, ++i) { + for (valueMap = events->child, frameIndex = 0; valueMap; valueMap = valueMap->next, ++frameIndex) { spEvent* event; const char* stringValue; - spEventData* eventData = spSkeletonData_findEvent(skeletonData, Json_getString(frame, "name", 0)); + spEventData* eventData = spSkeletonData_findEvent(skeletonData, Json_getString(valueMap, "name", 0)); if (!eventData) { spAnimation_dispose(animation); - _spSkeletonJson_setError(self, 0, "Event not found: ", Json_getString(frame, "name", 0)); + _spSkeletonJson_setError(self, 0, "Event not found: ", Json_getString(valueMap, "name", 0)); return 0; } - event = spEvent_create(Json_getFloat(frame, "time", 0), eventData); - event->intValue = Json_getInt(frame, "int", eventData->intValue); - event->floatValue = Json_getFloat(frame, "float", eventData->floatValue); - stringValue = Json_getString(frame, "string", eventData->stringValue); + event = spEvent_create(Json_getFloat(valueMap, "time", 0), eventData); + event->intValue = Json_getInt(valueMap, "int", eventData->intValue); + event->floatValue = Json_getFloat(valueMap, "float", eventData->floatValue); + stringValue = Json_getString(valueMap, "string", eventData->stringValue); if (stringValue) MALLOC_STR(event->stringValue, stringValue); - spEventTimeline_setFrame(timeline, i, event); + spEventTimeline_setFrame(timeline, frameIndex, event); } animation->timelines[animation->timelinesCount++] = SUPER_CAST(spTimeline, timeline); - duration = timeline->frames[events->size - 1]; - if (duration > animation->duration) animation->duration = duration; + animation->duration = MAX(animation->duration, timeline->frames[events->size - 1]); } return animation; } +static void _readVertices(spSkeletonJson* self, Json* attachmentMap, spVertexAttachment* attachment, int verticesLength) { + Json* entry; + float* vertices; + int i, b, w, nn, entrySize; + + attachment->worldVerticesLength = verticesLength; + + entry = Json_getItem(attachmentMap, "vertices"); + entrySize = entry->size; + vertices = MALLOC(float, entrySize); + for (entry = entry->child, i = 0; entry; entry = entry->next, ++i) + vertices[i] = entry->valueFloat; + + if (verticesLength == entrySize) { + if (self->scale != 1) + for (i = 0; i < entrySize; ++i) + vertices[i] *= self->scale; + attachment->verticesCount = verticesLength; + attachment->vertices = vertices; + + attachment->bonesCount = 0; + attachment->bones = 0; + } else { + attachment->verticesCount = 0; + attachment->bonesCount = 0; + + for (i = 0; i < entrySize;) { + int bonesCount = (int)vertices[i]; + attachment->bonesCount += 1 + bonesCount; + attachment->verticesCount += 3 * bonesCount; + i += 1 + bonesCount * 4; + } + + attachment->vertices = MALLOC(float, attachment->verticesCount); + attachment->bones = MALLOC(int, attachment->bonesCount); + + for (i = 0, b = 0, w = 0; i < entrySize;) { + int bonesCount = (int)vertices[i++]; + attachment->bones[b++] = bonesCount; + for (nn = i + bonesCount * 4; i < nn;) { + attachment->bones[b++] = (int)vertices[i++]; + attachment->vertices[w++] = vertices[i++] * self->scale; + attachment->vertices[w++] = vertices[i++] * self->scale; + attachment->vertices[w++] = vertices[i++]; + } + } + + FREE(vertices); + } +} + spSkeletonData* spSkeletonJson_readSkeletonDataFile (spSkeletonJson* self, const char* path) { int length; spSkeletonData* skeletonData; @@ -467,7 +561,7 @@ spSkeletonData* spSkeletonJson_readSkeletonDataFile (spSkeletonJson* self, const spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const char* json) { int i, ii; spSkeletonData* skeletonData; - Json *root, *skeleton, *bones, *boneMap, *ik, *transform, *slots, *skins, *animations, *events; + Json *root, *skeleton, *bones, *boneMap, *ik, *transform, *path, *slots, *skins, *animations, *events; char* oldLocale; _spSkeletonJson* internal = SUB_CAST(_spSkeletonJson, self); @@ -497,7 +591,7 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha bones = Json_getItem(root, "bones"); skeletonData->bones = MALLOC(spBoneData*, bones->size); for (boneMap = bones->child, i = 0; boneMap; boneMap = boneMap->next, ++i) { - spBoneData* boneData; + spBoneData* data; spBoneData* parent = 0; const char* parentName = Json_getString(boneMap, "parent", 0); @@ -510,101 +604,22 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha } } - boneData = spBoneData_create(Json_getString(boneMap, "name", 0), parent); - boneData->length = Json_getFloat(boneMap, "length", 0) * self->scale; - boneData->x = Json_getFloat(boneMap, "x", 0) * self->scale; - boneData->y = Json_getFloat(boneMap, "y", 0) * self->scale; - boneData->rotation = Json_getFloat(boneMap, "rotation", 0); - boneData->scaleX = Json_getFloat(boneMap, "scaleX", 1); - boneData->scaleY = Json_getFloat(boneMap, "scaleY", 1); - boneData->shearX = Json_getFloat(boneMap, "shearX", 0); - boneData->shearY = Json_getFloat(boneMap, "shearY", 0); - boneData->inheritScale = Json_getInt(boneMap, "inheritScale", 1); - boneData->inheritRotation = Json_getInt(boneMap, "inheritRotation", 1); + data = spBoneData_create(skeletonData->bonesCount, Json_getString(boneMap, "name", 0), parent); + data->length = Json_getFloat(boneMap, "length", 0) * self->scale; + data->x = Json_getFloat(boneMap, "x", 0) * self->scale; + data->y = Json_getFloat(boneMap, "y", 0) * self->scale; + data->rotation = Json_getFloat(boneMap, "rotation", 0); + data->scaleX = Json_getFloat(boneMap, "scaleX", 1); + data->scaleY = Json_getFloat(boneMap, "scaleY", 1); + data->shearX = Json_getFloat(boneMap, "shearX", 0); + data->shearY = Json_getFloat(boneMap, "shearY", 0); + data->inheritRotation = Json_getInt(boneMap, "inheritRotation", 1); + data->inheritScale = Json_getInt(boneMap, "inheritScale", 1); - skeletonData->bones[i] = boneData; + skeletonData->bones[i] = data; skeletonData->bonesCount++; } - /* IK constraints. */ - ik = Json_getItem(root, "ik"); - if (ik) { - Json *ikMap; - skeletonData->ikConstraintsCount = ik->size; - skeletonData->ikConstraints = MALLOC(spIkConstraintData*, ik->size); - for (ikMap = ik->child, i = 0; ikMap; ikMap = ikMap->next, ++i) { - const char* targetName; - - spIkConstraintData* ikConstraintData = spIkConstraintData_create(Json_getString(ikMap, "name", 0)); - boneMap = Json_getItem(ikMap, "bones"); - ikConstraintData->bonesCount = boneMap->size; - ikConstraintData->bones = MALLOC(spBoneData*, boneMap->size); - for (boneMap = boneMap->child, ii = 0; boneMap; boneMap = boneMap->next, ++ii) { - ikConstraintData->bones[ii] = spSkeletonData_findBone(skeletonData, boneMap->valueString); - if (!ikConstraintData->bones[ii]) { - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "IK bone not found: ", boneMap->valueString); - return 0; - } - } - - targetName = Json_getString(ikMap, "target", 0); - ikConstraintData->target = spSkeletonData_findBone(skeletonData, targetName); - if (!ikConstraintData->target) { - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Target bone not found: ", boneMap->name); - return 0; - } - - ikConstraintData->bendDirection = Json_getInt(ikMap, "bendPositive", 1) ? 1 : -1; - ikConstraintData->mix = Json_getFloat(ikMap, "mix", 1); - - skeletonData->ikConstraints[i] = ikConstraintData; - } - } - - /* Transform constraints. */ - transform = Json_getItem(root, "transform"); - if (transform) { - Json *transformMap; - skeletonData->transformConstraintsCount = transform->size; - skeletonData->transformConstraints = MALLOC(spTransformConstraintData*, transform->size); - for (transformMap = transform->child, i = 0; transformMap; transformMap = transformMap->next, ++i) { - const char* name; - - spTransformConstraintData* transformConstraintData = spTransformConstraintData_create(Json_getString(transformMap, "name", 0)); - - name = Json_getString(transformMap, "bone", 0); - transformConstraintData->bone = spSkeletonData_findBone(skeletonData, name); - if (!transformConstraintData->bone) { - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Bone not found: ", boneMap->name); - return 0; - } - - name = Json_getString(transformMap, "target", 0); - transformConstraintData->target = spSkeletonData_findBone(skeletonData, name); - if (!transformConstraintData->target) { - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Target bone not found: ", boneMap->name); - return 0; - } - - transformConstraintData->offsetRotation = Json_getFloat(transformMap, "rotation", 0); - transformConstraintData->offsetX = Json_getFloat(transformMap, "x", 0) * self->scale; - transformConstraintData->offsetY = Json_getFloat(transformMap, "y", 0) * self->scale; - transformConstraintData->offsetScaleX = Json_getFloat(transformMap, "scaleX", 0) * self->scale; - transformConstraintData->offsetScaleY = Json_getFloat(transformMap, "scaleY", 0) * self->scale; - transformConstraintData->offsetShearY = Json_getFloat(transformMap, "shearY", 0) * self->scale; - transformConstraintData->rotateMix = Json_getFloat(transformMap, "rotateMix", 1); - transformConstraintData->translateMix = Json_getFloat(transformMap, "translateMix", 1); - transformConstraintData->scaleMix = Json_getFloat(transformMap, "scaleMix", 1); - transformConstraintData->shearMix = Json_getFloat(transformMap, "shearMix", 1); - - skeletonData->transformConstraints[i] = transformConstraintData; - } - } - /* Slots. */ slots = Json_getItem(root, "slots"); if (slots) { @@ -612,7 +627,7 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha skeletonData->slotsCount = slots->size; skeletonData->slots = MALLOC(spSlotData*, slots->size); for (slotMap = slots->child, i = 0; slotMap; slotMap = slotMap->next, ++i) { - spSlotData* slotData; + spSlotData* data; const char* color; Json *item; @@ -624,46 +639,190 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha return 0; } - slotData = spSlotData_create(Json_getString(slotMap, "name", 0), boneData); + data = spSlotData_create(i, Json_getString(slotMap, "name", 0), boneData); color = Json_getString(slotMap, "color", 0); if (color) { - slotData->r = toColor(color, 0); - slotData->g = toColor(color, 1); - slotData->b = toColor(color, 2); - slotData->a = toColor(color, 3); + data->r = toColor(color, 0); + data->g = toColor(color, 1); + data->b = toColor(color, 2); + data->a = toColor(color, 3); } item = Json_getItem(slotMap, "attachment"); - if (item) spSlotData_setAttachmentName(slotData, item->valueString); + if (item) spSlotData_setAttachmentName(data, item->valueString); item = Json_getItem(slotMap, "blend"); if (item) { if (strcmp(item->valueString, "additive") == 0) - slotData->blendMode = SP_BLEND_MODE_ADDITIVE; + data->blendMode = SP_BLEND_MODE_ADDITIVE; else if (strcmp(item->valueString, "multiply") == 0) - slotData->blendMode = SP_BLEND_MODE_MULTIPLY; + data->blendMode = SP_BLEND_MODE_MULTIPLY; else if (strcmp(item->valueString, "screen") == 0) - slotData->blendMode = SP_BLEND_MODE_SCREEN; + data->blendMode = SP_BLEND_MODE_SCREEN; } - skeletonData->slots[i] = slotData; + skeletonData->slots[i] = data; + } + } + + /* IK constraints. */ + ik = Json_getItem(root, "ik"); + if (ik) { + Json *constraintMap; + skeletonData->ikConstraintsCount = ik->size; + skeletonData->ikConstraints = MALLOC(spIkConstraintData*, ik->size); + for (constraintMap = ik->child, i = 0; constraintMap; constraintMap = constraintMap->next, ++i) { + const char* targetName; + + spIkConstraintData* data = spIkConstraintData_create(Json_getString(constraintMap, "name", 0)); + + boneMap = Json_getItem(constraintMap, "bones"); + data->bonesCount = boneMap->size; + data->bones = MALLOC(spBoneData*, boneMap->size); + for (boneMap = boneMap->child, ii = 0; boneMap; boneMap = boneMap->next, ++ii) { + data->bones[ii] = spSkeletonData_findBone(skeletonData, boneMap->valueString); + if (!data->bones[ii]) { + spSkeletonData_dispose(skeletonData); + _spSkeletonJson_setError(self, root, "IK bone not found: ", boneMap->valueString); + return 0; + } + } + + targetName = Json_getString(constraintMap, "target", 0); + data->target = spSkeletonData_findBone(skeletonData, targetName); + if (!data->target) { + spSkeletonData_dispose(skeletonData); + _spSkeletonJson_setError(self, root, "Target bone not found: ", boneMap->name); + return 0; + } + + data->bendDirection = Json_getInt(constraintMap, "bendPositive", 1) ? 1 : -1; + data->mix = Json_getFloat(constraintMap, "mix", 1); + + skeletonData->ikConstraints[i] = data; + } + } + + /* Transform constraints. */ + transform = Json_getItem(root, "transform"); + if (transform) { + Json *constraintMap; + skeletonData->transformConstraintsCount = transform->size; + skeletonData->transformConstraints = MALLOC(spTransformConstraintData*, transform->size); + for (constraintMap = transform->child, i = 0; constraintMap; constraintMap = constraintMap->next, ++i) { + const char* name; + + spTransformConstraintData* data = spTransformConstraintData_create(Json_getString(constraintMap, "name", 0)); + + boneMap = Json_getItem(constraintMap, "bones"); + data->bonesCount = boneMap->size; + CONST_CAST(spBoneData**, data->bones) = MALLOC(spBoneData*, boneMap->size); + for (boneMap = boneMap->child, ii = 0; boneMap; boneMap = boneMap->next, ++ii) { + data->bones[ii] = spSkeletonData_findBone(skeletonData, boneMap->valueString); + if (!data->bones[ii]) { + spSkeletonData_dispose(skeletonData); + _spSkeletonJson_setError(self, root, "Transform bone not found: ", boneMap->valueString); + return 0; + } + } + + name = Json_getString(constraintMap, "target", 0); + data->target = spSkeletonData_findBone(skeletonData, name); + if (!data->target) { + spSkeletonData_dispose(skeletonData); + _spSkeletonJson_setError(self, root, "Target bone not found: ", boneMap->name); + return 0; + } + + data->offsetRotation = Json_getFloat(constraintMap, "rotation", 0); + data->offsetX = Json_getFloat(constraintMap, "x", 0) * self->scale; + data->offsetY = Json_getFloat(constraintMap, "y", 0) * self->scale; + data->offsetScaleX = Json_getFloat(constraintMap, "scaleX", 0); + data->offsetScaleY = Json_getFloat(constraintMap, "scaleY", 0); + data->offsetShearY = Json_getFloat(constraintMap, "shearY", 0); + + data->rotateMix = Json_getFloat(constraintMap, "rotateMix", 1); + data->translateMix = Json_getFloat(constraintMap, "translateMix", 1); + data->scaleMix = Json_getFloat(constraintMap, "scaleMix", 1); + data->shearMix = Json_getFloat(constraintMap, "shearMix", 1); + + skeletonData->transformConstraints[i] = data; + } + } + + /* Path constraints */ + path = Json_getItem(root, "path"); + if (path) { + Json *constraintMap; + skeletonData->pathConstraintsCount = path->size; + skeletonData->pathConstraints = MALLOC(spPathConstraintData*, path->size); + for (constraintMap = path->child, i = 0; constraintMap; constraintMap = constraintMap->next, ++i) { + const char* name; + const char* item; + + spPathConstraintData* data = spPathConstraintData_create(Json_getString(constraintMap, "name", 0)); + + boneMap = Json_getItem(constraintMap, "bones"); + data->bonesCount = boneMap->size; + CONST_CAST(spBoneData**, data->bones) = MALLOC(spBoneData*, boneMap->size); + for (boneMap = boneMap->child, ii = 0; boneMap; boneMap = boneMap->next, ++ii) { + data->bones[ii] = spSkeletonData_findBone(skeletonData, boneMap->valueString); + if (!data->bones[ii]) { + spSkeletonData_dispose(skeletonData); + _spSkeletonJson_setError(self, root, "Path bone not found: ", boneMap->valueString); + return 0; + } + } + + name = Json_getString(constraintMap, "target", 0); + data->target = spSkeletonData_findSlot(skeletonData, name); + if (!data->target) { + spSkeletonData_dispose(skeletonData); + _spSkeletonJson_setError(self, root, "Target slot not found: ", boneMap->name); + return 0; + } + + item = Json_getString(constraintMap, "positionMode", "percent"); + if (strcmp(item, "fixed") == 0) data->positionMode = SP_POSITION_MODE_FIXED; + else if (strcmp(item, "percent") == 0) data->positionMode = SP_POSITION_MODE_PERCENT; + + item = Json_getString(constraintMap, "spacingMode", "length"); + if (strcmp(item, "length") == 0) data->spacingMode = SP_SPACING_MODE_LENGTH; + else if (strcmp(item, "fixed") == 0) data->spacingMode = SP_SPACING_MODE_FIXED; + else if (strcmp(item, "percent") == 0) data->spacingMode = SP_SPACING_MODE_PERCENT; + + item = Json_getString(constraintMap, "rotateMode", "tangent"); + if (strcmp(item, "tangent") == 0) data->rotateMode = SP_ROTATE_MODE_TANGENT; + else if (strcmp(item, "chain") == 0) data->rotateMode = SP_ROTATE_MODE_CHAIN; + else if (strcmp(item, "chainScale") == 0) data->rotateMode = SP_ROTATE_MODE_CHAIN_SCALE; + + data->offsetRotation = Json_getFloat(constraintMap, "rotation", 0); + data->position = Json_getFloat(constraintMap, "position", 0); + if (data->positionMode == SP_POSITION_MODE_FIXED) data->position *= self->scale; + data->spacing = Json_getFloat(constraintMap, "spacing", 0); + if (data->spacingMode == SP_SPACING_MODE_LENGTH || data->spacingMode == SP_SPACING_MODE_FIXED) data->spacing *= self->scale; + data->rotateMix = Json_getFloat(constraintMap, "rotateMix", 1); + data->translateMix = Json_getFloat(constraintMap, "translateMix", 1); + + skeletonData->pathConstraints[i] = data; } } /* Skins. */ skins = Json_getItem(root, "skins"); if (skins) { - Json *slotMap; + Json *skinMap; skeletonData->skins = MALLOC(spSkin*, skins->size); - for (slotMap = skins->child, i = 0; slotMap; slotMap = slotMap->next, ++i) { + for (skinMap = skins->child, i = 0; skinMap; skinMap = skinMap->next, ++i) { Json *attachmentsMap; - spSkin *skin = spSkin_create(slotMap->name); + Json *curves; + spSkin *skin = spSkin_create(skinMap->name); skeletonData->skins[skeletonData->skinsCount++] = skin; - if (strcmp(slotMap->name, "default") == 0) skeletonData->defaultSkin = skin; + if (strcmp(skinMap->name, "default") == 0) skeletonData->defaultSkin = skin; - for (attachmentsMap = slotMap->child; attachmentsMap; attachmentsMap = attachmentsMap->next) { + for (attachmentsMap = skinMap->child; attachmentsMap; attachmentsMap = attachmentsMap->next) { int slotIndex = spSkeletonData_findSlotIndex(skeletonData, attachmentsMap->name); Json *attachmentMap; @@ -682,14 +841,12 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha type = SP_ATTACHMENT_REGION; else if (strcmp(typeString, "mesh") == 0) type = SP_ATTACHMENT_MESH; - else if (strcmp(typeString, "weightedmesh") == 0 || strcmp(typeString, "skinnedmesh") == 0) - type = SP_ATTACHMENT_WEIGHTED_MESH; else if (strcmp(typeString, "linkedmesh") == 0) type = SP_ATTACHMENT_LINKED_MESH; - else if (strcmp(typeString, "weightedlinkedmesh") == 0) - type = SP_ATTACHMENT_WEIGHTED_LINKED_MESH; else if (strcmp(typeString, "boundingbox") == 0) type = SP_ATTACHMENT_BOUNDING_BOX; + else if (strcmp(typeString, "path") == 0) + type = SP_ATTACHMENT_PATH; else { spSkeletonData_dispose(skeletonData); _spSkeletonJson_setError(self, root, "Unknown attachment type: ", typeString); @@ -750,12 +907,7 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha entry = Json_getItem(attachmentMap, "parent"); if (!entry) { - entry = Json_getItem(attachmentMap, "vertices"); - mesh->verticesCount = entry->size; - mesh->vertices = MALLOC(float, entry->size); - for (entry = entry->child, i = 0; entry; entry = entry->next, ++i) - mesh->vertices[i] = entry->valueFloat * self->scale; - + int verticesLength; entry = Json_getItem(attachmentMap, "triangles"); mesh->trianglesCount = entry->size; mesh->triangles = MALLOC(unsigned short, entry->size); @@ -763,10 +915,13 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha mesh->triangles[i] = (unsigned short)entry->valueInt; entry = Json_getItem(attachmentMap, "uvs"); - mesh->regionUVs = MALLOC(float, entry->size); + verticesLength = entry->size; + mesh->regionUVs = MALLOC(float, verticesLength); for (entry = entry->child, i = 0; entry; entry = entry->next, ++i) mesh->regionUVs[i] = entry->valueFloat; + _readVertices(self, attachmentMap, SUPER(mesh), verticesLength); + spMeshAttachment_updateUVs(mesh); mesh->hullLength = Json_getInt(attachmentMap, "hull", 0); @@ -781,103 +936,35 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha spAttachmentLoader_configureAttachment(self->attachmentLoader, attachment); } else { - mesh->inheritFFD = Json_getInt(attachmentMap, "ffd", 1); - _spSkeletonJson_addLinkedMesh(self, attachment, Json_getString(attachmentMap, "skin", 0), slotIndex, + mesh->inheritDeform = Json_getInt(attachmentMap, "deform", 1); + _spSkeletonJson_addLinkedMesh(self, SUB_CAST(spMeshAttachment, attachment), Json_getString(attachmentMap, "skin", 0), slotIndex, entry->valueString); } break; } - case SP_ATTACHMENT_WEIGHTED_MESH: - case SP_ATTACHMENT_WEIGHTED_LINKED_MESH: { - spWeightedMeshAttachment* mesh = SUB_CAST(spWeightedMeshAttachment, attachment); - int verticesCount, b, w, nn; - float* vertices; - - MALLOC_STR(mesh->path, path); - - color = Json_getString(attachmentMap, "color", 0); - if (color) { - mesh->r = toColor(color, 0); - mesh->g = toColor(color, 1); - mesh->b = toColor(color, 2); - mesh->a = toColor(color, 3); - } - - mesh->width = Json_getFloat(attachmentMap, "width", 32) * self->scale; - mesh->height = Json_getFloat(attachmentMap, "height", 32) * self->scale; - - entry = Json_getItem(attachmentMap, "parent"); - if (!entry) { - entry = Json_getItem(attachmentMap, "uvs"); - mesh->uvsCount = entry->size; - mesh->regionUVs = MALLOC(float, entry->size); - for (entry = entry->child, i = 0; entry; entry = entry->next, ++i) - mesh->regionUVs[i] = entry->valueFloat; - - entry = Json_getItem(attachmentMap, "vertices"); - verticesCount = entry->size; - vertices = MALLOC(float, entry->size); - for (entry = entry->child, i = 0; entry; entry = entry->next, ++i) - vertices[i] = entry->valueFloat; - - for (i = 0; i < verticesCount;) { - int bonesCount = (int)vertices[i]; - mesh->bonesCount += bonesCount + 1; - mesh->weightsCount += bonesCount * 3; - i += 1 + bonesCount * 4; - } - mesh->bones = MALLOC(int, mesh->bonesCount); - mesh->weights = MALLOC(float, mesh->weightsCount); - - for (i = 0, b = 0, w = 0; i < verticesCount;) { - int bonesCount = (int)vertices[i++]; - mesh->bones[b++] = bonesCount; - for (nn = i + bonesCount * 4; i < nn; i += 4, ++b, w += 3) { - mesh->bones[b] = (int)vertices[i]; - mesh->weights[w] = vertices[i + 1] * self->scale; - mesh->weights[w + 1] = vertices[i + 2] * self->scale; - mesh->weights[w + 2] = vertices[i + 3]; - } - } - - FREE(vertices); - - entry = Json_getItem(attachmentMap, "triangles"); - mesh->trianglesCount = entry->size; - mesh->triangles = MALLOC(unsigned short, entry->size); - for (entry = entry->child, i = 0; entry; entry = entry->next, ++i) - mesh->triangles[i] = (unsigned short)entry->valueInt; - - spWeightedMeshAttachment_updateUVs(mesh); - - mesh->hullLength = Json_getInt(attachmentMap, "hull", 0); - - entry = Json_getItem(attachmentMap, "edges"); - if (entry) { - mesh->edgesCount = entry->size; - mesh->edges = MALLOC(int, entry->size); - for (entry = entry->child, i = 0; entry; entry = entry->next, ++i) - mesh->edges[i] = entry->valueInt; - } - - spAttachmentLoader_configureAttachment(self->attachmentLoader, attachment); - } else { - mesh->inheritFFD = Json_getInt(attachmentMap, "ffd", 1); - _spSkeletonJson_addLinkedMesh(self, attachment, Json_getString(attachmentMap, "skin", 0), slotIndex, - entry->valueString); - } - break; - } case SP_ATTACHMENT_BOUNDING_BOX: { spBoundingBoxAttachment* box = SUB_CAST(spBoundingBoxAttachment, attachment); - entry = Json_getItem(attachmentMap, "vertices"); - box->verticesCount = entry->size; - box->vertices = MALLOC(float, entry->size); - for (entry = entry->child, i = 0; entry; entry = entry->next, ++i) - box->vertices[i] = entry->valueFloat * self->scale; + _readVertices(self, attachmentMap, SUPER(box), Json_getInt(attachmentMap, "vertexCount", 0) << 1); spAttachmentLoader_configureAttachment(self->attachmentLoader, attachment); break; } + case SP_ATTACHMENT_PATH: { + spPathAttachment* path = SUB_CAST(spPathAttachment, attachment); + int vertexCount = 0; + path->closed = Json_getInt(attachmentMap, "closed", 0); + path->constantSpeed = Json_getInt(attachmentMap, "constantSpeed", 1); + vertexCount = Json_getInt(attachmentMap, "vertexCount", 0); + _readVertices(self, attachmentMap, SUPER(path), vertexCount << 1); + + path->lengthsLength = vertexCount / 3; + path->lengths = MALLOC(float, path->lengthsLength); + + curves = Json_getItem(attachmentMap, "lengths"); + for (curves = curves->child, i = 0; curves; curves = curves->next, ++i) { + path->lengths[i] = curves->valueFloat * self->scale; + } + break; + } } spSkin_addAttachment(skin, slotIndex, skinAttachmentName, attachment); @@ -897,21 +984,14 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha return 0; } parent = spSkin_getAttachment(skin, linkedMesh->slotIndex, linkedMesh->parent); - if (!skin) { + if (!parent) { spSkeletonData_dispose(skeletonData); _spSkeletonJson_setError(self, 0, "Parent mesh not found: ", linkedMesh->parent); return 0; } - if (linkedMesh->mesh->type == SP_ATTACHMENT_MESH) { - spMeshAttachment* mesh = SUB_CAST(spMeshAttachment, linkedMesh->mesh); - spMeshAttachment_setParentMesh(mesh, SUB_CAST(spMeshAttachment, parent)); - spMeshAttachment_updateUVs(mesh); - } else { - spWeightedMeshAttachment* mesh = SUB_CAST(spWeightedMeshAttachment, linkedMesh->mesh); - spWeightedMeshAttachment_setParentMesh(mesh, SUB_CAST(spWeightedMeshAttachment, parent)); - spWeightedMeshAttachment_updateUVs(mesh); - } - spAttachmentLoader_configureAttachment(self->attachmentLoader, linkedMesh->mesh); + spMeshAttachment_setParentMesh(linkedMesh->mesh, SUB_CAST(spMeshAttachment, parent)); + spMeshAttachment_updateUVs(linkedMesh->mesh); + spAttachmentLoader_configureAttachment(self->attachmentLoader, SUPER(SUPER(linkedMesh->mesh))); } /* Events. */ diff --git a/spine-c/src/spine/Skin.c b/spine-c/src/spine/Skin.c index afbf52c61..2fb361ea4 100644 --- a/spine-c/src/spine/Skin.c +++ b/spine-c/src/spine/Skin.c @@ -32,14 +32,6 @@ #include #include -typedef struct _Entry _Entry; -struct _Entry { - int slotIndex; - const char* name; - spAttachment* attachment; - _Entry* next; -}; - _Entry* _Entry_create (int slotIndex, const char* name, spAttachment* attachment) { _Entry* self = NEW(_Entry); self->slotIndex = slotIndex; @@ -56,11 +48,6 @@ void _Entry_dispose (_Entry* self) { /**/ -typedef struct { - spSkin super; - _Entry* entries; -} _spSkin; - spSkin* spSkin_create (const char* name) { spSkin* self = SUPER(NEW(_spSkin)); MALLOC_STR(self->name, name); diff --git a/spine-c/src/spine/Slot.c b/spine-c/src/spine/Slot.c index 709ae9f98..a0df1c5b4 100644 --- a/spine-c/src/spine/Slot.c +++ b/spine-c/src/spine/Slot.c @@ -66,8 +66,6 @@ float spSlot_getAttachmentTime (const spSlot* self) { } void spSlot_setToSetupPose (spSlot* self) { - spAttachment* attachment = 0; - self->r = self->data->r; self->g = self->data->g; self->b = self->data->b; @@ -76,14 +74,8 @@ void spSlot_setToSetupPose (spSlot* self) { if (!self->data->attachmentName) spSlot_setAttachment(self, 0); else { - /* Find slot index. */ - int i; - for (i = 0; i < self->bone->skeleton->data->slotsCount; ++i) { - if (self->data == self->bone->skeleton->data->slots[i]) { - attachment = spSkeleton_getAttachmentForSlotIndex(self->bone->skeleton, i, self->data->attachmentName); - break; - } - } + spAttachment* attachment = spSkeleton_getAttachmentForSlotIndex( + self->bone->skeleton, self->data->index, self->data->attachmentName); CONST_CAST(spAttachment*, self->attachment) = 0; spSlot_setAttachment(self, attachment); } diff --git a/spine-c/src/spine/SlotData.c b/spine-c/src/spine/SlotData.c index 7d575bc81..833a03788 100644 --- a/spine-c/src/spine/SlotData.c +++ b/spine-c/src/spine/SlotData.c @@ -32,8 +32,9 @@ #include #include -spSlotData* spSlotData_create (const char* name, spBoneData* boneData) { +spSlotData* spSlotData_create (const int index, const char* name, spBoneData* boneData) { spSlotData* self = NEW(spSlotData); + CONST_CAST(int, self->index) = index; MALLOC_STR(self->name, name); CONST_CAST(spBoneData*, self->boneData) = boneData; self->r = 1; diff --git a/spine-c/src/spine/TransformConstraint.c b/spine-c/src/spine/TransformConstraint.c index 9cf88271d..8cdc97442 100644 --- a/spine-c/src/spine/TransformConstraint.c +++ b/spine-c/src/spine/TransformConstraint.c @@ -34,73 +34,79 @@ #include spTransformConstraint* spTransformConstraint_create (spTransformConstraintData* data, const spSkeleton* skeleton) { + int i; spTransformConstraint* self = NEW(spTransformConstraint); CONST_CAST(spTransformConstraintData*, self->data) = data; - self->translateMix = data->translateMix; self->rotateMix = data->rotateMix; + self->translateMix = data->translateMix; self->scaleMix = data->scaleMix; self->shearMix = data->shearMix; - self->offsetX = data->offsetX; - self->offsetY = data->offsetY; - self->bone = spSkeleton_findBone(skeleton, self->data->bone->name); + self->bonesCount = data->bonesCount; + CONST_CAST(spBone**, self->bones) = MALLOC(spBone*, self->bonesCount); + for (i = 0; i < self->bonesCount; ++i) + self->bones[i] = spSkeleton_findBone(skeleton, self->data->bones[i]->name); self->target = spSkeleton_findBone(skeleton, self->data->target->name); return self; } void spTransformConstraint_dispose (spTransformConstraint* self) { + FREE(self->bones); FREE(self); } void spTransformConstraint_apply (spTransformConstraint* self) { - spBone* bone = self->bone; + float rotateMix = self->rotateMix, translateMix = self->translateMix, scaleMix = self->scaleMix, shearMix = self->shearMix; spBone* target = self->target; + float ta = target->a, tb = target->b, tc = target->c, td = target->d; + int i; + for (i = 0; i < self->bonesCount; ++i) { + spBone* bone = self->bones[i]; - if (self->rotateMix > 0) { - float cosine, sine; - float a = bone->a, b = bone->b, c = bone->c, d = bone->d; - float r = atan2(target->c, target->a) - atan2(c, a) + self->offsetRotation * DEG_RAD; - if (r > PI) - r -= PI2; - else if (r < -PI) r += PI2; - r *= self->rotateMix; - cosine = COS(r); sine = SIN(r); - CONST_CAST(float, bone->a) = cosine * a - sine * c; - CONST_CAST(float, bone->b) = cosine * b - sine * d; - CONST_CAST(float, bone->c) = sine * a + cosine * c; - CONST_CAST(float, bone->d) = sine * b + cosine * d; - } + if (rotateMix > 0) { + float a = bone->a, b = bone->b, c = bone->c, d = bone->d; + float r = ATAN2(tc, ta) - ATAN2(c, a) + self->data->offsetRotation * DEG_RAD; + float cosine, sine; + if (r > PI) r -= PI2; + else if (r < -PI) r += PI2; + r *= rotateMix; + cosine = COS(r); + sine = SIN(r); + CONST_CAST(float, bone->a) = cosine * a - sine * c; + CONST_CAST(float, bone->b) = cosine * b - sine * d; + CONST_CAST(float, bone->c) = sine * a + cosine * c; + CONST_CAST(float, bone->d) = sine * b + cosine * d; + } - if (self->scaleMix > 0) { - float bs = (float)SQRT(bone->a * bone->a + bone->c * bone->c); - float ts = (float)SQRT(target->a * target->a + target->c * target->c); - float s = bs > 0.00001f ? (bs + (ts - bs + self->offsetScaleX) * self->scaleMix) / bs : 0; - CONST_CAST(float, bone->a) *= s; - CONST_CAST(float, bone->c) *= s; - bs = (float)SQRT(bone->b * bone->b + bone->d * bone->d); - ts = (float)SQRT(target->b * target->b + target->d * target->d); - s = bs > 0.00001f ? (bs + (ts - bs + self->offsetScaleY) * self->scaleMix) / bs : 0; - CONST_CAST(float, bone->b) *= s; - CONST_CAST(float, bone->d) *= s; - } + if (translateMix > 0) { + float x, y; + spBone_localToWorld(target, self->data->offsetX, self->data->offsetY, &x, &y); + CONST_CAST(float, bone->worldX) += (x - bone->worldX) * translateMix; + CONST_CAST(float, bone->worldY) += (y - bone->worldY) * translateMix; + } - if (self->shearMix > 0) { - float b = bone->b, d = bone->d; - float by = atan2(d, b); - float r = atan2(target->d, target->b) - atan2(target->c, target->a) - (by - atan2(bone->c, bone->a)); - float s; - if (r > PI) - r -= PI2; - else if (r < -PI) r += PI2; - r = by + (r + self->offsetShearY * DEG_RAD) * self->shearMix; - s = (float)SQRT(b * b + d * d); - CONST_CAST(float, bone->b) = COS(r) * s; - CONST_CAST(float, bone->d) = SIN(r) * s; - } + if (scaleMix > 0) { + float bs = SQRT(bone->a * bone->a + bone->c * bone->c); + float ts = SQRT(ta * ta + tc * tc); + float s = bs > 0.00001f ? (bs + (ts - bs + self->data->offsetScaleX) * scaleMix) / bs : 0; + CONST_CAST(float, bone->a) *= s; + CONST_CAST(float, bone->c) *= s; + bs = SQRT(bone->b * bone->b + bone->d * bone->d); + ts = SQRT(tb * tb + td * td); + s = bs > 0.00001f ? (bs + (ts - bs + self->data->offsetScaleY) * scaleMix) / bs : 0; + CONST_CAST(float, bone->b) *= s; + CONST_CAST(float, bone->d) *= s; + } - if (self->translateMix > 0) { - float tx, ty; - spBone_localToWorld(self->target, self->offsetX, self->offsetY, &tx, &ty); - CONST_CAST(float, self->bone->worldX) += (tx - self->bone->worldX) * self->translateMix; - CONST_CAST(float, self->bone->worldY) += (ty - self->bone->worldY) * self->translateMix; + if (shearMix > 0) { + float b = bone->b, d = bone->d; + float by = ATAN2(d, b); + float r = ATAN2(td, tb) - ATAN2(tc, ta) - (by - ATAN2(bone->c, bone->a)); + float s = SQRT(b * b + d * d); + if (r > PI) r -= PI2; + else if (r < -PI) r += PI2; + r = by + (r + self->data->offsetShearY * DEG_RAD) * shearMix; + CONST_CAST(float, bone->b) = COS(r) * s; + CONST_CAST(float, bone->d) = SIN(r) * s; + } } } diff --git a/spine-c/src/spine/TransformConstraintData.c b/spine-c/src/spine/TransformConstraintData.c index 8d685e7a0..bc93d4e93 100644 --- a/spine-c/src/spine/TransformConstraintData.c +++ b/spine-c/src/spine/TransformConstraintData.c @@ -40,5 +40,6 @@ spTransformConstraintData* spTransformConstraintData_create (const char* name) { void spTransformConstraintData_dispose (spTransformConstraintData* self) { FREE(self->name); + FREE(self->bones); FREE(self); } diff --git a/spine-c/src/spine/VertexAttachment.c b/spine-c/src/spine/VertexAttachment.c new file mode 100644 index 000000000..bf034820d --- /dev/null +++ b/spine-c/src/spine/VertexAttachment.c @@ -0,0 +1,114 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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 +#include + +void _spVertexAttachment_deinit (spVertexAttachment* attachment) { + _spAttachment_deinit(SUPER(attachment)); + FREE(attachment->bones); + FREE(attachment->vertices); +} + +void spVertexAttachment_computeWorldVertices (spVertexAttachment* self, spSlot* slot, float* worldVertices) { + spVertexAttachment_computeWorldVertices1(self, 0, self->worldVerticesLength, slot, worldVertices, 0); +} + +void spVertexAttachment_computeWorldVertices1 (spVertexAttachment* self, int start, int count, spSlot* slot, float* worldVertices, int offset) { + spSkeleton* skeleton; + float x, y; + int deformLength; + float* deform; + float* vertices; + int* bones; + + count += offset; + skeleton = slot->bone->skeleton; + x = skeleton->x; + y = skeleton->y; + deformLength = slot->attachmentVerticesCount; + deform = slot->attachmentVertices; + vertices = self->vertices; + bones = self->bones; + if (!bones) { + spBone* bone; + int v, w; + if (deformLength > 0) vertices = deform; + bone = slot->bone; + x += bone->worldX; + y += bone->worldY; + for (v = start, w = offset; w < count; v += 2, w += 2) { + float vx = vertices[v], vy = vertices[v + 1]; + worldVertices[w] = vx * bone->a + vy * bone->b + x; + worldVertices[w + 1] = vx * bone->c + vy * bone->d + y; + } + } else { + int v = 0, skip = 0, i; + spBone** skeletonBones; + for (i = 0; i < start; i += 2) { + int n = bones[v]; + v += n + 1; + skip += n; + } + skeletonBones = skeleton->bones; + if (deformLength == 0) { + int w, b; + for (w = offset, b = skip * 3; w < count; w += 2) { + float wx = x, wy = y; + int n = bones[v++]; + n += v; + for (; v < n; v++, b += 3) { + spBone* bone = skeletonBones[bones[v]]; + float vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; + wx += (vx * bone->a + vy * bone->b + bone->worldX) * weight; + wy += (vx * bone->c + vy * bone->d + bone->worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } else { + int w, b, f; + for (w = offset, b = skip * 3, f = skip << 1; w < count; w += 2) { + float wx = x, wy = y; + int n = bones[v++]; + n += v; + for (; v < n; v++, b += 3, f += 2) { + spBone* bone = skeletonBones[bones[v]]; + float vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; + wx += (vx * bone->a + vy * bone->b + bone->worldX) * weight; + wy += (vx * bone->c + vy * bone->d + bone->worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + } +} diff --git a/spine-c/src/spine/WeightedMeshAttachment.c b/spine-c/src/spine/WeightedMeshAttachment.c deleted file mode 100644 index c88ddd89e..000000000 --- a/spine-c/src/spine/WeightedMeshAttachment.c +++ /dev/null @@ -1,137 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the - * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) 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 -#include - -void _spWeightedMeshAttachment_dispose (spAttachment* attachment) { - spWeightedMeshAttachment* self = SUB_CAST(spWeightedMeshAttachment, attachment); - _spAttachment_deinit(attachment); - FREE(self->path); - FREE(self->uvs); - if (!self->parentMesh) { - FREE(self->regionUVs); - FREE(self->bones); - FREE(self->weights); - FREE(self->triangles); - FREE(self->edges); - } - FREE(self); -} - -spWeightedMeshAttachment* spWeightedMeshAttachment_create (const char* name) { - spWeightedMeshAttachment* self = NEW(spWeightedMeshAttachment); - self->r = 1; - self->g = 1; - self->b = 1; - self->a = 1; - _spAttachment_init(SUPER(self), name, SP_ATTACHMENT_WEIGHTED_MESH, _spWeightedMeshAttachment_dispose); - return self; -} - -void spWeightedMeshAttachment_updateUVs (spWeightedMeshAttachment* self) { - int i; - float width = self->regionU2 - self->regionU, height = self->regionV2 - self->regionV; - FREE(self->uvs); - self->uvs = MALLOC(float, self->uvsCount); - if (self->regionRotate) { - for (i = 0; i < self->uvsCount; i += 2) { - self->uvs[i] = self->regionU + self->regionUVs[i + 1] * width; - self->uvs[i + 1] = self->regionV + height - self->regionUVs[i] * height; - } - } else { - for (i = 0; i < self->uvsCount; i += 2) { - self->uvs[i] = self->regionU + self->regionUVs[i] * width; - self->uvs[i + 1] = self->regionV + self->regionUVs[i + 1] * height; - } - } -} - -void spWeightedMeshAttachment_computeWorldVertices (spWeightedMeshAttachment* self, spSlot* slot, float* worldVertices) { - int w = 0, v = 0, b = 0, f = 0; - float x = slot->bone->skeleton->x, y = slot->bone->skeleton->y; - spBone** skeletonBones = slot->bone->skeleton->bones; - if (slot->attachmentVerticesCount == 0) { - for (; v < self->bonesCount; w += 2) { - float wx = 0, wy = 0; - const int nn = self->bones[v] + v; - v++; - for (; v <= nn; v++, b += 3) { - const spBone* bone = skeletonBones[self->bones[v]]; - const float vx = self->weights[b], vy = self->weights[b + 1], weight = self->weights[b + 2]; - wx += (vx * bone->a + vy * bone->b + bone->worldX) * weight; - wy += (vx * bone->c + vy * bone->d + bone->worldY) * weight; - } - worldVertices[w] = wx + x; - worldVertices[w + 1] = wy + y; - } - } else { - const float* ffd = slot->attachmentVertices; - for (; v < self->bonesCount; w += 2) { - float wx = 0, wy = 0; - const int nn = self->bones[v] + v; - v++; - for (; v <= nn; v++, b += 3, f += 2) { - const spBone* bone = skeletonBones[self->bones[v]]; - const float vx = self->weights[b] + ffd[f], vy = self->weights[b + 1] + ffd[f + 1], weight = self->weights[b + 2]; - wx += (vx * bone->a + vy * bone->b + bone->worldX) * weight; - wy += (vx * bone->c + vy * bone->d + bone->worldY) * weight; - } - worldVertices[w] = wx + x; - worldVertices[w + 1] = wy + y; - } - } -} - -void spWeightedMeshAttachment_setParentMesh (spWeightedMeshAttachment* self, spWeightedMeshAttachment* parentMesh) { - CONST_CAST(spWeightedMeshAttachment*, self->parentMesh) = parentMesh; - if (parentMesh) { - self->bones = parentMesh->bones; - self->bonesCount = parentMesh->bonesCount; - - self->weights = parentMesh->weights; - self->weightsCount = parentMesh->weightsCount; - - self->regionUVs = parentMesh->regionUVs; - self->uvsCount = parentMesh->uvsCount; - - self->triangles = parentMesh->triangles; - self->trianglesCount = parentMesh->trianglesCount; - - self->hullLength = parentMesh->hullLength; - - self->edges = parentMesh->edges; - self->edgesCount = parentMesh->edgesCount; - - self->width = parentMesh->width; - self->height = parentMesh->height; - } -} diff --git a/spine-cocos2d-objc/README.md b/spine-cocos2d-objc/README.md index 167a2d66a..15a7811cd 100644 --- a/spine-cocos2d-objc/README.md +++ b/spine-cocos2d-objc/README.md @@ -10,7 +10,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-cocos2d-objc works with data exported from Spine version 3.2.01. +spine-cocos2d-objc works with data exported from from the latest version of Spine. spine-cocos2d-objc supports all Spine features. diff --git a/spine-cocos2d-objc/Resources/goblins-mesh.atlas b/spine-cocos2d-objc/Resources/goblins-mesh.atlas index d0ddb80c6..2652027f9 100644 --- a/spine-cocos2d-objc/Resources/goblins-mesh.atlas +++ b/spine-cocos2d-objc/Resources/goblins-mesh.atlas @@ -1,291 +1,292 @@ goblins-mesh.png +size: 512,512 format: RGBA8888 filter: Linear,Linear repeat: none dagger - rotate: true - xy: 372, 100 + rotate: false + xy: 26, 147 size: 26, 108 orig: 26, 108 offset: 0, 0 index: -1 goblin/eyes-closed rotate: false - xy: 2, 7 + xy: 329, 334 size: 34, 12 orig: 34, 12 offset: 0, 0 index: -1 goblin/head rotate: false - xy: 107, 36 + xy: 26, 355 size: 103, 66 orig: 103, 66 offset: 0, 0 index: -1 goblin/left-arm rotate: false - xy: 901, 56 + xy: 54, 142 size: 37, 35 orig: 37, 35 offset: 0, 0 index: -1 goblin/left-foot - rotate: false - xy: 929, 95 + rotate: true + xy: 2, 69 size: 65, 31 orig: 65, 31 offset: 0, 0 index: -1 goblin/left-hand rotate: false - xy: 452, 2 + xy: 266, 332 size: 36, 41 orig: 36, 41 offset: 0, 0 index: -1 goblin/left-lower-leg rotate: true - xy: 713, 93 + xy: 273, 433 size: 33, 70 orig: 33, 70 offset: 0, 0 index: -1 goblin/left-shoulder rotate: false - xy: 610, 44 + xy: 305, 288 size: 29, 44 orig: 29, 44 offset: 0, 0 index: -1 goblin/left-upper-leg - rotate: true - xy: 638, 93 + rotate: false + xy: 96, 280 size: 33, 73 orig: 33, 73 offset: 0, 0 index: -1 goblin/neck rotate: false - xy: 490, 2 + xy: 267, 289 size: 36, 41 orig: 36, 41 offset: 0, 0 index: -1 goblin/pelvis rotate: false - xy: 482, 45 + xy: 131, 363 size: 62, 43 orig: 62, 43 offset: 0, 0 index: -1 goblin/right-arm - rotate: true - xy: 690, 2 + rotate: false + xy: 304, 334 size: 23, 50 orig: 23, 50 offset: 0, 0 index: -1 goblin/right-foot rotate: false - xy: 771, 58 + xy: 201, 397 size: 63, 33 orig: 63, 33 offset: 0, 0 index: -1 goblin/right-hand rotate: false - xy: 940, 56 + xy: 336, 295 size: 36, 37 orig: 36, 37 offset: 0, 0 index: -1 goblin/right-lower-leg rotate: true - xy: 482, 90 + xy: 273, 468 size: 36, 76 orig: 36, 76 offset: 0, 0 index: -1 goblin/right-shoulder - rotate: true - xy: 602, 3 + rotate: false + xy: 196, 285 size: 39, 45 orig: 39, 45 offset: 0, 0 index: -1 goblin/right-upper-leg rotate: true - xy: 641, 57 + xy: 131, 282 size: 34, 63 orig: 34, 63 offset: 0, 0 index: -1 goblin/torso - rotate: true - xy: 212, 34 + rotate: false + xy: 131, 408 size: 68, 96 orig: 68, 96 offset: 0, 0 index: -1 goblin/undie-straps - rotate: false - xy: 380, 5 + rotate: true + xy: 266, 375 size: 55, 19 orig: 55, 19 offset: 0, 0 index: -1 goblin/undies rotate: false - xy: 174, 5 + xy: 429, 440 size: 36, 29 orig: 36, 29 offset: 0, 0 index: -1 goblingirl/eyes-closed rotate: false - xy: 269, 11 + xy: 96, 257 size: 37, 21 orig: 37, 21 offset: 0, 0 index: -1 goblingirl/head rotate: false - xy: 2, 21 + xy: 26, 423 size: 103, 81 orig: 103, 81 offset: 0, 0 index: -1 goblingirl/left-arm - rotate: true - xy: 978, 56 + rotate: false + xy: 390, 434 size: 37, 35 orig: 37, 35 offset: 0, 0 index: -1 goblingirl/left-foot - rotate: false - xy: 107, 3 + rotate: true + xy: 2, 2 size: 65, 31 orig: 65, 31 offset: 0, 0 index: -1 goblingirl/left-hand rotate: false - xy: 565, 2 + xy: 329, 348 size: 35, 40 orig: 35, 40 offset: 0, 0 index: -1 goblingirl/left-lower-leg rotate: true - xy: 785, 93 + xy: 351, 471 size: 33, 70 orig: 33, 70 offset: 0, 0 index: -1 goblingirl/left-shoulder - rotate: true - xy: 690, 27 + rotate: false + xy: 237, 284 size: 28, 46 orig: 28, 46 offset: 0, 0 index: -1 goblingirl/left-upper-leg rotate: true - xy: 857, 93 + xy: 423, 471 size: 33, 70 orig: 33, 70 offset: 0, 0 index: -1 goblingirl/neck rotate: false - xy: 528, 2 + xy: 328, 390 size: 35, 41 orig: 35, 41 offset: 0, 0 index: -1 goblingirl/pelvis rotate: false - xy: 546, 45 + xy: 131, 318 size: 62, 43 orig: 62, 43 offset: 0, 0 index: -1 goblingirl/right-arm - rotate: false - xy: 452, 48 + rotate: true + xy: 135, 252 size: 28, 50 orig: 28, 50 offset: 0, 0 index: -1 goblingirl/right-foot - rotate: false - xy: 836, 58 + rotate: true + xy: 231, 332 size: 63, 33 orig: 63, 33 offset: 0, 0 index: -1 goblingirl/right-hand rotate: true - xy: 771, 20 + xy: 351, 433 size: 36, 37 orig: 36, 37 offset: 0, 0 index: -1 goblingirl/right-lower-leg - rotate: true - xy: 560, 90 + rotate: false + xy: 54, 179 size: 36, 76 orig: 36, 76 offset: 0, 0 index: -1 goblingirl/right-shoulder rotate: false - xy: 649, 10 + xy: 287, 386 size: 39, 45 orig: 39, 45 offset: 0, 0 index: -1 goblingirl/right-upper-leg - rotate: true - xy: 706, 57 + rotate: false + xy: 195, 332 size: 34, 63 orig: 34, 63 offset: 0, 0 index: -1 goblingirl/torso rotate: false - xy: 310, 2 + xy: 26, 257 size: 68, 96 orig: 68, 96 offset: 0, 0 index: -1 goblingirl/undie-straps - rotate: false - xy: 212, 13 + rotate: true + xy: 92, 200 size: 55, 19 orig: 55, 19 offset: 0, 0 index: -1 goblingirl/undies - rotate: false - xy: 810, 27 + rotate: true + xy: 365, 395 size: 36, 29 orig: 36, 29 offset: 0, 0 index: -1 shield rotate: false - xy: 380, 26 + xy: 201, 432 size: 70, 72 orig: 70, 72 offset: 0, 0 index: -1 spear - rotate: true - xy: 2, 104 + rotate: false + xy: 2, 136 size: 22, 368 orig: 22, 368 offset: 0, 0 diff --git a/spine-cocos2d-objc/Resources/goblins-mesh.json b/spine-cocos2d-objc/Resources/goblins-mesh.json index b35360ad1..8443eee97 100644 --- a/spine-cocos2d-objc/Resources/goblins-mesh.json +++ b/spine-cocos2d-objc/Resources/goblins-mesh.json @@ -1,26 +1,27 @@ { +"skeleton": { "hash": "P7CQ4ImK+tcAICATgSttlZ5HOSM", "spine": "3.3.07", "width": 266.93, "height": 349.6, "images": "./images/" }, "bones": [ { "name": "root" }, { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, - { "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 }, + { "name": "torso", "parent": "hip", "length": 85.82, "rotation": 93.92, "x": -6.42, "y": 1.97 }, + { "name": "neck", "parent": "torso", "length": 18.38, "rotation": -1.51, "x": 81.67, "y": -6.34 }, + { "name": "head", "parent": "neck", "length": 68.28, "rotation": -13.92, "x": 20.93, "y": 11.59 }, + { "name": "left shoulder", "parent": "torso", "length": 35.43, "rotation": -156.96, "x": 74.04, "y": -20.38 }, + { "name": "left arm", "parent": "left shoulder", "length": 35.62, "rotation": 28.16, "x": 37.85, "y": -2.34 }, + { "name": "left upper leg", "parent": "hip", "length": 50.39, "rotation": -89.09, "x": 14.45, "y": 2.81 }, + { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "rotation": -16.65, "x": 56.34, "y": 0.98 }, + { "name": "left foot", "parent": "left lower leg", "length": 46.5, "rotation": 102.43, "x": 58.94, "y": -7.61 }, + { "name": "left hand", "parent": "left arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.07 }, { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, - { "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 }, - { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 }, - { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 }, - { "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 }, - { "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 }, - { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 }, - { "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 }, - { "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 }, - { "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 }, - { "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 }, - { "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 }, - { "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 }, - { "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 }, - { "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 }, - { "name": "spear1", "parent": "left hand", "length": 65.06, "x": 0.48, "y": 17.03, "rotation": 102.43 }, - { "name": "spear2", "parent": "spear1", "length": 61.41, "x": 65.05, "y": 0.04, "rotation": 0.9 }, - { "name": "spear3", "parent": "spear2", "length": 76.79, "x": 61.88, "y": 0.57, "rotation": -0.9 } + { "name": "right shoulder", "parent": "torso", "length": 37.24, "rotation": 133.88, "x": 76.02, "y": 18.14 }, + { "name": "right arm", "parent": "right shoulder", "length": 36.74, "rotation": 36.32, "x": 37.6, "y": 0.31 }, + { "name": "right upper leg", "parent": "hip", "length": 42.45, "rotation": -97.49, "x": -20.07, "y": -6.83 }, + { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "rotation": -14.34, "x": 42.99, "y": -0.61 }, + { "name": "right foot", "parent": "right lower leg", "length": 45.45, "rotation": 110.3, "x": 64.88, "y": 0.04 }, + { "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.35, "x": 36.9, "y": 0.34 }, + { "name": "spear1", "parent": "left hand", "length": 65.06, "rotation": 102.43, "x": 0.48, "y": 17.03 }, + { "name": "spear2", "parent": "spear1", "length": 61.41, "rotation": 0.9, "x": 65.05, "y": 0.04 }, + { "name": "spear3", "parent": "spear2", "length": 76.79, "rotation": -0.9, "x": 61.88, "y": 0.57 } ], "slots": [ { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" }, @@ -52,12 +53,12 @@ "left hand item": { "dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 }, "spear": { - "type": "skinnedmesh", + "type": "mesh", "uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.76608, 0.21781, 0.75642, 0.386, 0.74723, 0.54607, 0.72117, 1, 0.28838, 1, 0.24208, 0.54327, 0.22589, 0.38361, 0.2089, 0.21605, 0.20043, 0.13242, 0, 0.11519, 0.4527, 0, 0.58399, 0 ], - "triangles": [ 5, 6, 4, 6, 7, 4, 4, 7, 3, 2, 9, 1, 9, 10, 1, 10, 12, 1, 12, 13, 1, 1, 13, 0, 10, 11, 12, 3, 8, 2, 8, 9, 2, 7, 8, 3 ], - "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.51, 20, -0.31, -6.16, 0.48, 2, 18, 64.73, -5.03, 0.5, 19, -0.4, -5.06, 0.49, 1, 16, 4.56, 23.91, 1, 1, 16, 41.7, -138.95, 1, 1, 16, 32.42, -141.1, 1, 1, 16, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.5, 19, 0.53, 6.59, 0.49, 2, 19, 62.18, 6.66, 0.51, 20, 0.2, 6.09, 0.48, 1, 20, 30.96, 6.61, 1, 1, 20, 37.26, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], - "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], + "triangles": [ 4, 7, 3, 6, 7, 4, 5, 6, 4, 10, 11, 12, 1, 13, 0, 12, 13, 1, 10, 12, 1, 9, 10, 1, 2, 9, 1, 8, 9, 2, 3, 8, 2, 7, 8, 3 ], + "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.5116, 20, -0.31, -6.16, 0.48839, 2, 18, 64.73, -5.03, 0.50272, 19, -0.4, -5.06, 0.49728, 1, 10, 4.56, 23.91, 1, 1, 10, 41.7, -138.95, 1, 1, 10, 32.41999, -141.1, 1, 1, 10, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.50272, 19, 0.52999, 6.59, 0.49728, 2, 19, 62.18, 6.66, 0.5116, 20, 0.2, 6.09, 0.48839, 1, 20, 30.96, 6.61, 1, 1, 20, 37.25999, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], "hull": 14, + "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], "width": 22, "height": 368 } @@ -68,8 +69,8 @@ "uvs": [ 0.78091, 0.38453, 1, 0.38405, 1, 0.44881, 0.73953, 0.4687, 0.74641, 0.81344, 0.34022, 1, 0.15434, 1, 0.11303, 0.78858, 0.23007, 0.47367, 0, 0.45047, 0, 0.38621, 0.22367, 0.38573, 0.24384, 0, 1, 0 ], "triangles": [ 0, 12, 13, 11, 12, 0, 0, 1, 2, 9, 10, 11, 3, 11, 0, 3, 0, 2, 8, 11, 3, 9, 11, 8, 5, 6, 7, 4, 5, 8, 4, 8, 3, 5, 7, 8 ], "vertices": [ 15.49, -12.82, 21.13, -13.57, 20.16, -20.49, 13.15, -21.67, 8.13, -58.56, -5.13, -77.04, -9.92, -76.36, -7.79, -53.6, -0.03, -20.36, -5.6, -17.04, -4.63, -10.17, 1.12, -10.93, 7.46, 30.24, 26.93, 27.49 ], - "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], "hull": 14, + "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], "width": 26, "height": 108 } @@ -87,10 +88,10 @@ "name": "goblin/head", "type": "mesh", "uvs": [ 0, 0.60494, 0.14172, 0.5145, 0.24218, 0.55229, 0.32667, 0.67806, 0.37969, 0.79352, 0.53505, 0.93014, 0.86056, 1, 0.94071, 0.94169, 0.92098, 0.69923, 0.9888, 0.65497, 0.99003, 0.51643, 0.89632, 0.43561, 0.94487, 0.41916, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80754, 0.16044, 0.66698, 0.01997, 0.4734, 0.01805, 0.29215, 0.19893, 0.25392, 0.31823, 0.09117, 0.324, 0, 0.44331, 0.43271, 0.69153, 0.466, 0.47794, 0.35996, 0.31246, 0.73473, 0.68593, 0.72215, 0.57425, 0.88179, 0.5583, 0.80267, 0.51015 ], - "triangles": [ 26, 20, 19, 21, 20, 26, 15, 14, 13, 12, 15, 13, 11, 16, 15, 11, 15, 12, 26, 17, 25, 18, 26, 19, 17, 26, 18, 30, 25, 17, 30, 17, 16, 30, 16, 11, 1, 22, 21, 23, 22, 1, 2, 1, 21, 2, 21, 26, 29, 30, 11, 29, 11, 10, 28, 25, 30, 0, 23, 1, 9, 29, 10, 25, 3, 2, 25, 2, 26, 29, 27, 28, 29, 28, 30, 24, 3, 25, 24, 25, 28, 24, 28, 27, 8, 29, 9, 27, 29, 8, 4, 3, 24, 5, 24, 27, 4, 24, 5, 7, 6, 27, 7, 27, 8, 5, 27, 6 ], - "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.46, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.6, 23.41, 35.89, 40.17, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.8, -24.31, 17.2, -40.65, 20.68, -33.02 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], + "triangles": [ 5, 27, 6, 7, 27, 8, 7, 6, 27, 4, 24, 5, 5, 24, 27, 4, 3, 24, 27, 29, 8, 8, 29, 9, 24, 28, 27, 24, 25, 28, 24, 3, 25, 29, 28, 30, 29, 27, 28, 25, 2, 26, 25, 3, 2, 9, 29, 10, 0, 23, 1, 28, 25, 30, 29, 11, 10, 29, 30, 11, 2, 21, 26, 2, 1, 21, 23, 22, 1, 1, 22, 21, 30, 16, 11, 30, 17, 16, 30, 25, 17, 17, 26, 18, 18, 26, 19, 26, 17, 25, 11, 15, 12, 11, 16, 15, 12, 15, 13, 15, 14, 13, 21, 20, 26, 26, 20, 19 ], + "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.45999, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.59999, 23.41, 35.89, 40.16999, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.79999, -24.31, 17.2, -40.65, 20.68, -33.02 ], "hull": 24, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], "width": 103, "height": 66 } @@ -100,10 +101,10 @@ "name": "goblin/left-arm", "type": "mesh", "uvs": [ 0.68992, 0.29284, 1, 0.46364, 1, 0.74643, 0.84089, 1, 0.66344, 1, 0.33765, 0.64284, 0, 0.44124, 0, 0, 0.34295, 0 ], - "triangles": [ 6, 7, 8, 5, 6, 8, 0, 5, 8, 0, 1, 2, 5, 0, 2, 4, 5, 2, 3, 4, 2 ], - "vertices": [ 18.6, 8.81, 32.19, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], + "triangles": [ 3, 4, 2, 4, 5, 2, 5, 0, 2, 0, 1, 2, 0, 5, 8, 5, 6, 8, 6, 7, 8 ], + "vertices": [ 18.6, 8.81, 32.18999, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], "width": 37, "height": 35 } @@ -115,8 +116,8 @@ "uvs": [ 0.15733, 0.31873, 0.08195, 0.78502, 0.15884, 0.99366, 0.41633, 0.96804, 0.68822, 0.97636, 1, 0.96388, 0.99385, 0.73501, 0.85294, 0.51862, 0.61479, 0.31056, 0.46991, 0, 0.48032, 0.75604, 0.75994, 0.77706 ], "triangles": [ 0, 9, 8, 10, 0, 8, 10, 8, 7, 11, 10, 7, 11, 7, 6, 1, 0, 10, 11, 6, 5, 3, 1, 10, 4, 10, 11, 4, 11, 5, 3, 10, 4, 2, 1, 3 ], "vertices": [ 2.28, 13.07, -1.76, -1.64, 3.59, -7.8, 20.25, -6.04, 37.91, -5.27, 58.12, -3.71, 57.31, 3.34, 47.78, 9.51, 31.95, 15.05, 21.99, 24.11, 24.03, 0.75, 42.21, 1.16 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], "width": 65, "height": 31 } @@ -127,9 +128,9 @@ "type": "mesh", "uvs": [ 0.518, 0.12578, 1, 0.16285, 0.99788, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42792, 0.17601, 0, 0.43567, 0 ], "triangles": [ 2, 0, 1, 0, 5, 6, 6, 7, 0, 0, 7, 8, 3, 4, 0, 4, 5, 0, 2, 3, 0 ], - "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.48, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], - "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], + "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.47999, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], "hull": 9, + "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], "width": 36, "height": 41 } @@ -140,9 +141,9 @@ "type": "mesh", "uvs": [ 0.95508, 0.20749, 0.81927, 0.65213, 0.94754, 0.77308, 0.67842, 0.97346, 0.46463, 1, 0.26845, 1, 0.04963, 0.90706, 0.2106, 0.60115, 0.07478, 0.40195, 0.18545, 0, 0.28857, 0 ], "triangles": [ 10, 8, 9, 1, 7, 10, 7, 8, 10, 0, 1, 10, 1, 4, 7, 3, 1, 2, 5, 6, 7, 7, 4, 5, 1, 3, 4 ], - "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.19, -18.29 ], - "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], + "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.18999, -18.29 ], "hull": 11, + "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], "width": 33, "height": 70 } @@ -152,10 +153,10 @@ "name": "goblin/left-shoulder", "type": "mesh", "uvs": [ 0.7377, 0.40692, 1, 0.75237, 1, 1, 0.62046, 1, 0.26184, 0.56601, 0, 0.29783, 0, 0, 0.44115, 0 ], - "triangles": [ 5, 6, 7, 4, 5, 7, 4, 7, 0, 3, 4, 0, 3, 0, 1, 3, 1, 2 ], - "vertices": [ 15.18, 5.74, 32.17, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.74, -4.66, 6.54 ], - "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], + "triangles": [ 3, 1, 2, 3, 0, 1, 3, 4, 0, 4, 7, 0, 4, 5, 7, 5, 6, 7 ], + "vertices": [ 15.18, 5.74, 32.16999, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.73999, -4.66, 6.54 ], "hull": 8, + "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], "width": 29, "height": 44 } @@ -167,8 +168,8 @@ "uvs": [ 1, 0.12167, 1, 0.54873, 0.91067, 0.78907, 0.76567, 1, 0.3087, 0.9579, 0, 0.68777, 0, 0.219, 0.51961, 0, 0.87552, 0 ], "triangles": [ 7, 8, 0, 5, 6, 7, 0, 1, 7, 4, 5, 7, 1, 4, 7, 2, 4, 1, 3, 4, 2 ], "vertices": [ 2.33, 13.06, 33.5, 12.57, 51, 9.34, 66.32, 4.31, 63, -10.71, 43.13, -20.58, 8.91, -20.04, -6.79, -2.64, -6.61, 9.1 ], - "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], "hull": 9, + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], "width": 33, "height": 73 } @@ -178,10 +179,10 @@ "name": "goblin/neck", "type": "mesh", "uvs": [ 0.81967, 0.27365, 0.92101, 0.82048, 0.47134, 1, 0.15679, 0.9354, 0, 0.7556, 0.19268, 0.51833, 0.15468, 0.35706, 0, 0.21989, 0.13568, 0, 0.68878, 0, 0.70145, 0.53872 ], - "triangles": [ 6, 8, 9, 6, 9, 0, 7, 8, 6, 10, 5, 6, 0, 10, 6, 10, 0, 1, 3, 4, 5, 2, 5, 10, 2, 10, 1, 3, 5, 2 ], - "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.05, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], - "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], + "triangles": [ 3, 5, 2, 2, 10, 1, 2, 5, 10, 3, 4, 5, 10, 0, 1, 0, 10, 6, 10, 5, 6, 7, 8, 6, 6, 9, 0, 6, 8, 9 ], + "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.04999, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], "hull": 10, + "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], "width": 36, "height": 41 } @@ -193,8 +194,8 @@ "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], "triangles": [ 1, 2, 3, 1, 3, 0 ], "vertices": [ 25.38, -20.73, -36.61, -20.73, -36.61, 22.26, 25.38, 22.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "width": 62, "height": 43 } @@ -204,10 +205,10 @@ "name": "goblin/right-arm", "type": "mesh", "uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24384, 1, 0, 0.86558, 0.20822, 0.10919, 0.50903, 0, 0.85342, 0 ], - "triangles": [ 6, 7, 0, 2, 3, 5, 4, 5, 3, 1, 6, 0, 6, 2, 5, 1, 2, 6 ], - "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.18 ], - "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], + "triangles": [ 1, 2, 6, 6, 2, 5, 1, 6, 0, 4, 5, 3, 2, 3, 5, 6, 7, 0 ], + "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.17999 ], "hull": 8, + "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], "width": 23, "height": 50 } @@ -219,8 +220,8 @@ "uvs": [ 0.40851, 0.0047, 0.59087, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97532, 0.89391, 0.90385, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65984, 0, 0.46577, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71257, 0.715, 0.74681 ], "triangles": [ 1, 10, 11, 1, 13, 0, 14, 1, 2, 1, 12, 13, 12, 1, 11, 14, 10, 1, 15, 14, 2, 15, 2, 3, 9, 10, 14, 15, 3, 4, 7, 8, 9, 14, 7, 9, 6, 14, 15, 5, 6, 15, 7, 14, 6, 4, 5, 15 ], "vertices": [ 17.36, 25.99, 29.13, 15.44, 39.89, 10.8, 48.14, 7.24, 53.84, -2.38, 49.43, -6, 34.84, -6.39, 16.84, -6.87, -2.4, -7.38, -7.58, -3.86, -7.78, 3.7, -7.95, 10.1, -2.57, 22.36, 10.84, 25.97, 22.14, 2.75, 37.31, 2.03 ], - "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], "hull": 14, + "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], "width": 63, "height": 33 } @@ -231,9 +232,9 @@ "type": "mesh", "uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89823, 0.82004, 0.8259, 0.74285, 0.84223, 0.49993, 0.96356, 0.34102, 0.66023, 0 ], "triangles": [ 8, 10, 9, 0, 10, 1, 8, 2, 1, 8, 1, 10, 7, 3, 8, 3, 2, 8, 4, 3, 7, 5, 7, 6, 4, 7, 5 ], - "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.88, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.87999, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], "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 ], "width": 36, "height": 37 } @@ -245,8 +246,8 @@ "uvs": [ 0.88538, 0.22262, 0.76167, 0.3594, 0.75088, 0.78308, 0.95326, 0.84981, 1, 0.60302 ], "triangles": [ 1, 0, 4, 2, 1, 4, 3, 2, 4 ], "vertices": [ -2.82, 15.97, 2.4, 11.71, 18.08, 11.9, 20.27, 19.27, 11.09, 20.62 ], - "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], "hull": 5, + "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], "width": 36, "height": 37 } @@ -257,9 +258,9 @@ "type": "mesh", "uvs": [ 1, 0.27261, 0.81312, 0.52592, 0.79587, 0.71795, 0.95544, 0.80988, 0.85193, 0.95493, 0.47241, 1, 0.14033, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30325, 0.60611, 0 ], "triangles": [ 1, 10, 0, 9, 10, 1, 8, 9, 1, 2, 8, 1, 4, 2, 3, 6, 7, 8, 5, 6, 8, 2, 5, 8, 4, 5, 2 ], - "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.1, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.77, -1.03, 58.99, -9.19, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], + "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.09999, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.76999, -1.03, 58.99, -9.18999, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], "width": 36, "height": 76 } @@ -269,10 +270,10 @@ "name": "goblin/right-shoulder", "type": "mesh", "uvs": [ 0.62008, 0.03708, 0.92131, 0.09048, 1, 0.38319, 0.72049, 0.6937, 0.31656, 1, 0, 1, 0, 0.75106, 0.28233, 0.49988 ], - "triangles": [ 2, 3, 0, 2, 0, 1, 7, 0, 3, 4, 5, 6, 4, 7, 3, 4, 6, 7 ], + "triangles": [ 4, 6, 7, 4, 7, 3, 4, 5, 6, 7, 0, 3, 2, 0, 1, 2, 3, 0 ], "vertices": [ -3.17, -11.05, -9, -0.57, -1.01, 10.33, 16.69, 11.17, 37.41, 8.2, 45.45, -1.16, 36.95, -8.46, 21.2, -7.47 ], - "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], "hull": 8, + "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], "width": 39, "height": 45 } @@ -283,9 +284,9 @@ "type": "mesh", "uvs": [ 0.27018, 0, 0.11618, 0.18177, 0, 0.70688, 0, 0.89577, 0.26668, 1, 0.48718, 1, 0.67618, 0.83532, 1, 0.5161, 1, 0.25543, 0.74618, 0.0571 ], "triangles": [ 9, 8, 7, 9, 1, 0, 6, 9, 7, 6, 1, 9, 2, 1, 6, 4, 3, 2, 6, 4, 2, 5, 4, 6 ], - "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.51, 10.18, 19.13, 18.47, 2.85, 16.32, -8.4, 6.14 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.50999, 10.18, 19.12999, 18.46999, 2.85, 16.32, -8.39999, 6.14 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], "width": 34, "height": 63 } @@ -295,10 +296,10 @@ "name": "goblin/torso", "type": "mesh", "uvs": [ 0, 0.33287, 0.15945, 0.46488, 0.15761, 0.60314, 0.15502, 0.79806, 0.32807, 0.93478, 0.6875, 1, 0.80731, 1, 1, 0.77763, 1, 0.66147, 1, 0.56703, 0.93207, 0.4771, 0.86944, 0.39416, 0.83837, 0.226, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78734, 0.86249, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38316, 0.77692, 0.73446, 0.66478, 0.51012 ], - "triangles": [ 0, 15, 14, 20, 14, 13, 20, 13, 12, 1, 0, 14, 20, 12, 11, 20, 1, 14, 22, 20, 11, 22, 11, 10, 19, 1, 20, 19, 20, 22, 2, 1, 19, 18, 22, 10, 18, 10, 9, 19, 22, 18, 18, 9, 8, 21, 18, 8, 21, 8, 7, 17, 2, 19, 21, 17, 19, 21, 19, 18, 3, 2, 17, 16, 21, 7, 17, 21, 16, 4, 3, 17, 5, 17, 16, 4, 17, 5, 6, 16, 7, 5, 16, 6 ], - "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.88, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], + "triangles": [ 5, 16, 6, 6, 16, 7, 4, 17, 5, 5, 17, 16, 4, 3, 17, 17, 21, 16, 16, 21, 7, 3, 2, 17, 21, 19, 18, 21, 17, 19, 17, 2, 19, 21, 8, 7, 21, 18, 8, 18, 9, 8, 19, 22, 18, 18, 10, 9, 18, 22, 10, 2, 1, 19, 19, 20, 22, 19, 1, 20, 22, 11, 10, 22, 20, 11, 20, 1, 14, 20, 12, 11, 1, 0, 14, 20, 13, 12, 20, 14, 13, 0, 15, 14 ], + "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.87999, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], "hull": 16, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], "width": 68, "height": 96 } @@ -309,9 +310,9 @@ "type": "mesh", "uvs": [ 0.36097, 0.44959, 0.66297, 0.60591, 1, 0.19486, 1, 0.57117, 0.75897, 1, 0.38697, 1, 0, 0.26433, 0, 0, 0.12497, 0 ], "triangles": [ 6, 7, 8, 6, 8, 0, 3, 1, 2, 5, 0, 1, 6, 0, 5, 4, 1, 3, 5, 1, 4 ], - "vertices": [ -10.56, 12.87, 6.53, 9.9, 25.62, 17.71, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], + "vertices": [ -10.56, 12.87, 6.53, 9.89999, 25.62, 17.70999, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], "width": 55, "height": 19 } @@ -322,9 +323,9 @@ "type": "mesh", "uvs": [ 0, 0.32029, 0.14893, 0.59457, 0.22437, 1, 0.35909, 1, 0.50998, 1, 0.79559, 0.58453, 0.9842, 0.28015, 1, 0.00588, 0.46957, 0.17646, 0, 0.03933, 0.48843, 0.59122, 0.48114, 0.43099 ], "triangles": [ 6, 8, 7, 0, 9, 8, 11, 8, 6, 0, 8, 11, 5, 11, 6, 10, 11, 5, 1, 0, 11, 1, 11, 10, 3, 2, 1, 10, 3, 1, 4, 10, 5, 3, 10, 4 ], - "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.59, 22.22, 6.11, 22.92, 14.05, 3.75, 9.44, -13.08, 13.71, 4.21, -2.59, 4.03, 2.05 ], - "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], + "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.58999, 22.22, 6.11, 22.92, 14.05, 3.75, 9.43999, -13.08, 13.71, 4.21, -2.58999, 4.03, 2.05 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], "width": 36, "height": 29 } @@ -757,7 +758,7 @@ ] } }, - "ffd": { + "deform": { "default": { "left hand item": { "spear": [ @@ -769,19 +770,19 @@ { "time": 0, "offset": 26, - "vertices": [ 2.34, 0.14 ], + "vertices": [ 2.34754, 0.14469 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.5, "offset": 8, - "vertices": [ -1.19, 4.31, 0.07, 6.41, 1.66, 6.18, 1.75, 3.59 ], + "vertices": [ -1.19415, 4.31531, 0.07279, 6.41351, 1.66048, 6.18882, 1.75232, 3.59555 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1, "offset": 26, - "vertices": [ 2.34, 0.14 ] + "vertices": [ 2.34754, 0.14469 ] } ] } @@ -795,22 +796,22 @@ }, { "time": 0.2, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08, -1.08, 0.08, -1.08, 0.08, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08 ], + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391, -1.08534, 0.08391, -1.08534, 0.08391, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.3666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09, 1.47, 0.09, 1.47, 0.09, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09 ], + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017, 1.47305, 0.09017, 1.47305, 0.09017, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017 ], "curve": [ 0.621, 0, 0.75, 1 ] }, { "time": 0.7, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17, -1.17, -0.17, -1.17, -0.17, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17 ], + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183, -1.1755, -0.17182, -1.1755, -0.17183, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.8666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08, 0.38, 0.08, 0.38, 0.08, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08 ], + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446, 0.38687, 0.08446, 0.38687, 0.08446, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1 } @@ -821,35 +822,35 @@ { "time": 0, "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] }, { "time": 0.1333 }, { "time": 0.2333, "offset": 8, - "vertices": [ -3.96, -2.34, -5.8, -12.47, -2.23, -12.99, 2.02, -9.1, 0, 0, 0, 0, 0, 0, -1.35, -5.28 ] + "vertices": [ -3.96072, -2.34594, -5.80445, -12.47629, -2.23129, -12.99037, 2.02941, -9.1036, 0, 0, 0, 0, 0, 0, -1.35254, -5.2883 ] }, { "time": 0.3666, "offset": 8, - "vertices": [ 0.66, 0.33, 0.33, 2.69, -0.48, 2.54, -1.13, 1.38, 0, 0, 0, 0, 0, 0, -0.11, 0.79 ] + "vertices": [ 0.66504, 0.33548, 0.33902, 2.69014, -0.4817, 2.54524, -1.13592, 1.38562, 0, 0, 0, 0, 0, 0, -0.11907, 0.79273 ] }, { "time": 0.5, "curve": "stepped" }, { "time": 0.6333 }, { "time": 0.7333, "offset": 8, - "vertices": [ -2.97, 9.4, -6.91, 19.92, -10.55, 18.41, -12.37, 12.38, -4.72, 6.3, 0, 0, -1.48, 4.88, -7.06, 10.7 ] + "vertices": [ -2.97737, 9.40254, -6.91661, 19.92794, -10.55287, 18.41085, -12.37161, 12.38473, -4.72606, 6.30798, 0, 0, -1.48902, 4.88944, -7.06773, 10.70101 ] }, { "time": 0.8333, "offset": 6, - "vertices": [ 1.05, 1.56, -2.52, 7.99, -5.52, 17.14, -8.93, 15.79, -10.73, 10.22, -4.23, 5.36, 0, 0, 0, 0, -5.83, 8.55 ] + "vertices": [ 1.05318, 1.56361, -2.52722, 7.9974, -5.5203, 17.14136, -8.93317, 15.79635, -10.73747, 10.22055, -4.23801, 5.36992, 0, 0, 0, 0, -5.83147, 8.55531 ] }, { "time": 1, "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] } ] }, @@ -859,22 +860,22 @@ { "time": 0.1333, "offset": 6, - "vertices": [ -0.68, -4.13 ] + "vertices": [ -0.68989, -4.13283 ] }, { "time": 0.3333, "offset": 6, - "vertices": [ -1.04, -3.1 ] + "vertices": [ -1.04945, -3.10476 ] }, { "time": 0.7, "offset": 6, - "vertices": [ -1.42, -6.3 ] + "vertices": [ -1.4245, -6.30616 ] }, { "time": 0.8666, "offset": 6, - "vertices": [ -1.13, -1.79 ] + "vertices": [ -1.13541, -1.79035 ] }, { "time": 1 } ] @@ -885,38 +886,38 @@ { "time": 0.1333, "offset": 2, - "vertices": [ -2.81, 2.63, -2.35, 3.89, -1.99, 4.86, -0.93, 5.57, -0.48, 5.09, -0.34, 3.42, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31, 1.91, -1.32, 3.65 ] + "vertices": [ -2.81258, 2.63114, -2.35238, 3.89441, -1.99921, 4.8639, -0.93273, 5.57982, -0.48886, 5.09854, -0.34812, 3.42912, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31305, 1.91371, -1.32986, 3.65703 ] }, { "time": 0.2333, "offset": 2, - "vertices": [ -6.39, 6.41, -7.74, 8.27, -7.02, 11.35, -4.03, 13.93, -2.5, 12.62, -1.46, 7.58, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84, 2.61, -4.53, 7.92 ] + "vertices": [ -6.39088, 6.41245, -7.74575, 8.27191, -7.02471, 11.35894, -4.0347, 13.93454, -2.50399, 12.62962, -1.46124, 7.58915, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84765, 2.61215, -4.53955, 7.92357 ] }, { "time": 0.3, "offset": 2, - "vertices": [ -8.27, 6.68, -9.29, 10.13, -8.62, 14.71, -4.58, 18.81, -2.2, 17.1, -0.07, 9.9, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94, 2.38, -4.59, 10.01 ] + "vertices": [ -8.27184, 6.68821, -9.29764, 10.13797, -8.62231, 14.71339, -4.58629, 18.81939, -2.20304, 17.10709, -0.07794, 9.9046, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94624, 2.38007, -4.59398, 10.01888 ] }, { "time": 0.3666, "offset": 2, - "vertices": [ -10.47, 9.44, -13.36, 12.4, -14.32, 16.94, -9.24, 23.55, -5.51, 21.51, -1.19, 11.53, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14, 2.29, -6.63, 11.37 ] + "vertices": [ -10.47683, 9.44175, -13.36882, 12.40982, -14.32568, 16.94392, -9.24462, 23.55674, -5.51711, 21.51377, -1.19581, 11.53192, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14847, 2.29389, -6.63418, 11.37127 ] }, { "time": 0.5, "offset": 2, - "vertices": [ -5.42, 4.36, -10.59, 7.04, -11.64, 11.55, -6.19, 20.12, -1.45, 18.05, 4.86, 6.41, 2.81, 0.27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96, 4.94 ] + "vertices": [ -5.42473, 4.36854, -10.59004, 7.04468, -11.64251, 11.55845, -6.19665, 20.12805, -1.45497, 18.05411, 4.86619, 6.41678, 2.81462, 0.27601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96412, 4.94829 ] }, { "time": 0.6333 }, { "time": 0.7333, "offset": 4, - "vertices": [ 1.31, -6.84, -0.87, -12.54, -5.98, -14.08, -7.15, -11.63, -5.67, -4.83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06, -6.93 ] + "vertices": [ 1.31462, -6.84099, -0.87905, -12.54479, -5.9851, -14.08367, -7.15892, -11.63193, -5.6792, -4.83544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06163, -6.93844 ] }, { "time": 0.8, "offset": 4, - "vertices": [ 0.65, -3.42, -0.43, -6.27, -2.99, -7.04, -3.57, -5.81, -2.83, -2.41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79, -1.28, 0, 0, 0, 0, -1.03, -3.46 ] + "vertices": [ 0.65731, -3.42049, -0.43952, -6.27239, -2.99255, -7.04183, -3.57946, -5.81596, -2.83959, -2.41772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79687, -1.2802, 0, 0, 0, 0, -1.03081, -3.46922 ] }, { "time": 0.8666 } ] @@ -926,13 +927,13 @@ { "time": 0, "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] }, { "time": 0.5 }, { "time": 1, "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] } ] }, @@ -942,7 +943,7 @@ { "time": 0.6, "offset": 6, - "vertices": [ 1.8, -1.56 ] + "vertices": [ 1.80396, -1.56552 ] }, { "time": 1 } ] @@ -951,17 +952,17 @@ "right upper leg": [ { "time": 0, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] }, { "time": 0.3333 }, { "time": 0.8666, "offset": 14, - "vertices": [ 0.13, -2.35, -1.33, -5.99, -1.35, -4.43 ] + "vertices": [ 0.13424, -2.35377, -1.33317, -5.99572, -1.35861, -4.43323 ] }, { "time": 1, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] } ] }, @@ -970,37 +971,37 @@ { "time": 0, "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] }, { "time": 0.1333, "offset": 14, - "vertices": [ 1.31, -0.59, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + "vertices": [ 1.31318, -0.59727, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] }, { "time": 0.3, "offset": 14, - "vertices": [ 6.03, -3.13, 7.55, -1.38, 6.79, 0.31, 4.23, 1.14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07, -5.16, 0, 0, 4, 0.27, 0, 0, 0, 0, 3.43, -3.52 ] + "vertices": [ 6.03761, -3.13561, 7.55475, -1.38111, 6.79747, 0.31171, 4.23503, 1.14012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07575, -5.16824, 0, 0, 4.0041, 0.27245, 0, 0, 0, 0, 3.4376, -3.52286 ] }, { "time": 0.5, "offset": 14, - "vertices": [ 2.25, -0.87, 2.57, -0.56, 3.17, -0.57, 1.48, 0.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22, -4.43, 0, 0, 1.48, 0.01, 0, 0, 0, 0, 0.31, -3.28, -1.53, 0.17 ] + "vertices": [ 2.25942, -0.87202, 2.575, -0.56861, 3.17112, -0.57003, 1.48704, 0.9924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22451, -4.43862, 0, 0, 1.48691, 0.01586, 0, 0, 0, 0, 0.31388, -3.28095, -1.53797, 0.17803 ] }, { "time": 0.6333, "offset": 14, - "vertices": [ 0.75, -1.51, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + "vertices": [ 0.75002, -1.51701, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] }, { "time": 0.8666, "offset": 14, - "vertices": [ 0.62, -1.26, 0.38, -2.2, 3.25, -0.5, 2.41, 2.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.66, -3.1, 0, 0, 2.3, -1.15, 0, 0, 0, 0, -0.07, -3.63, -0.93, 0.1 ] + "vertices": [ 0.62202, -1.26262, 0.38489, -2.20701, 3.25048, -0.50042, 2.41108, 2.39315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6639, -3.10099, 0, 0, 2.30655, -1.15196, 0, 0, 0, 0, -0.07676, -3.63497, -0.9321, 0.1079 ] }, { "time": 1, "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] } ] }, @@ -1009,32 +1010,32 @@ { "time": 0, "offset": 2, - "vertices": [ -1.77, 0.54, -0.96, -1.03, -0.39, -0.24, -1.77, 0.54 ] + "vertices": [ -1.77696, 0.54759, -0.96145, -1.03793, -0.39148, -0.24071, -1.77696, 0.54759 ] }, { "time": 0.1333, "offset": 2, - "vertices": [ -2.25, -1.03, -1.49, -4.23, -0.74, -2.84, -1.9, 0.54 ] + "vertices": [ -2.25683, -1.03177, -1.49719, -4.23861, -0.74469, -2.84906, -1.90072, 0.54477 ] }, { "time": 0.3333, "offset": 2, - "vertices": [ -2.37, -0.05, -0.49, 0.19, -0.9, 1.16, -1.6, 2.7, 0.96, 0.8 ] + "vertices": [ -2.37974, -0.05431, -0.49433, 0.19436, -0.90861, 1.16519, -1.60956, 2.70798, 0.96186, 0.80615 ] }, { "time": 0.7, "offset": 2, - "vertices": [ -0.91, -2.76, -0.62, -3.63, -0.84, -2.26, -2.56, 0.52 ] + "vertices": [ -0.91714, -2.76567, -0.62214, -3.63489, -0.8494, -2.26772, -2.56076, 0.5297 ] }, { "time": 0.8666, "offset": 2, - "vertices": [ -2.56, 0.52, -1.58, 0.32, -1.38, 0.32, -2.56, 0.52 ] + "vertices": [ -2.56076, 0.5297, -1.58064, 0.32031, -1.3847, 0.32476, -2.56076, 0.5297 ] }, { "time": 1, "offset": 2, - "vertices": [ -1.77, 0.54, -0.8, 0.53, -0.8, 0.53, -1.77, 0.54 ] + "vertices": [ -1.77696, 0.54759, -0.80128, 0.53413, -0.80128, 0.53413, -1.77696, 0.54759 ] } ] }, @@ -1042,35 +1043,35 @@ "undies": [ { "time": 0, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] }, { "time": 0.1333, - "vertices": [ 0.72, 0.43, 7.2, -0.16, 1.37, 0, 1.37, 0, 1.37, 0, 1.25, 0.04, -0.99, -2.95, -1.37, -3.07, 1.37, 0, 0.35, -0.29, 2.99, -0.07, 3.9, -0.14 ] + "vertices": [ 0.72659, 0.43319, 7.20416, -0.1638, 1.37759, 0, 1.37759, 0, 1.37759, 0, 1.25279, 0.0464, -0.99861, -2.95085, -1.37542, -3.07404, 1.37759, 0, 0.35279, -0.29279, 2.99218, -0.07019, 3.90478, -0.14039 ] }, { "time": 0.3333, - "vertices": [ 1.16, 0, 2.1, -0.23, 0, 0, 0, 0, 0, 0, 2.24, -0.24, -0.43, 0.6, -1.55, 0.48 ] + "vertices": [ 1.16999, 0, 2.10599, -0.234, 0, 0, 0, 0, 0, 0, 2.24999, -0.24999, -0.4344, 0.60551, -1.55939, 0.48051 ] }, { "time": 0.5333, - "vertices": [ 1.16, 0, -0.23, -0.93, -2.92, 0.35, 0, 0, 0, 0, 0.49, -0.24, -0.64, -2.07, -0.64, -2.07 ] + "vertices": [ 1.16999, 0, -0.234, -0.93599, -2.92499, 0.35099, 0, 0, 0, 0, 0.49999, -0.24999, -0.64078, -2.07914, -0.64078, -2.07914 ] }, { "time": 0.7, - "vertices": [ 1.86, -0.11, 4.66, -0.09, -1.76, 0.21, 0, 0, -0.56, 0.32, -1.13, -1.15, -2.19, -3.47, -1.29, -3.47, 0, 0, 0, 0, 1.58, -0.04, 2.65, 0.16 ] + "vertices": [ 1.8627, -0.11514, 4.66326, -0.09099, -1.76428, 0.21171, 0, 0, -0.56832, 0.32832, -1.13833, -1.1511, -2.19996, -3.47068, -1.29718, -3.47068, 0, 0, 0, 0, 1.58785, -0.04642, 2.65941, 0.16714 ] }, { "time": 0.8333, - "vertices": [ 2.41, -0.2, 8.58, 0.58, -0.83, 0.1, 0, 0, -1.02, 0.59, -2.44, -1.87, -1.62, 0, 0, 0, 0, 0, 0, 0, 2.85, -0.08, 4.78, 0.3 ] + "vertices": [ 2.41687, -0.20725, 8.58108, 0.585, -0.83571, 0.10028, 0, 0, -1.02299, 0.59098, -2.44899, -1.872, -1.62499, 0, 0, 0, 0, 0, 0, 0, 2.85813, -0.08356, 4.78695, 0.30086 ] }, { "time": 0.8666, - "vertices": [ 2.01, -0.02, 8.98, 0.44, -0.2, 0.08, 0.45, 0, -0.35, 0.47, -1.84, -1.44, -0.79, 1.26, 0.53, 1.23, 0.45, 0, 0.11, -0.09, 3.28, -0.09, 5.13, 0.19 ] + "vertices": [ 2.01969, -0.0214, 8.98545, 0.4446, -0.20937, 0.08022, 0.45919, 0, -0.35919, 0.47279, -1.84159, -1.4488, -0.79153, 1.2642, 0.53285, 1.23981, 0.45919, 0, 0.11759, -0.09759, 3.2839, -0.09025, 5.13115, 0.19388 ] }, { "time": 1, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] } ] } diff --git a/spine-cocos2d-objc/Resources/goblins-mesh.png b/spine-cocos2d-objc/Resources/goblins-mesh.png index a3daf0010..6eaf853b1 100644 Binary files a/spine-cocos2d-objc/Resources/goblins-mesh.png and b/spine-cocos2d-objc/Resources/goblins-mesh.png differ diff --git a/spine-cocos2d-objc/Resources/raptor.atlas b/spine-cocos2d-objc/Resources/raptor.atlas new file mode 100644 index 000000000..b59a1747c --- /dev/null +++ b/spine-cocos2d-objc/Resources/raptor.atlas @@ -0,0 +1,251 @@ + +raptor.png +size: 2048,2048 +format: RGBA8888 +filter: Linear,Linear +repeat: none +back_arm + rotate: false + xy: 830, 1093 + size: 91, 57 + orig: 91, 57 + offset: 0, 0 + index: -1 +back_bracer + rotate: true + xy: 217, 113 + size: 77, 55 + orig: 77, 55 + offset: 0, 0 + index: -1 +back_hand + rotate: true + xy: 275, 501 + size: 72, 68 + orig: 72, 68 + offset: 0, 0 + index: -1 +back_knee + rotate: false + xy: 583, 955 + size: 97, 134 + orig: 97, 134 + offset: 0, 0 + index: -1 +back_thigh + rotate: true + xy: 440, 689 + size: 78, 47 + orig: 78, 47 + offset: 0, 0 + index: -1 +eyes_open + rotate: true + xy: 495, 848 + size: 93, 89 + orig: 93, 89 + offset: 0, 0 + index: -1 +front_arm + rotate: false + xy: 2, 5 + size: 96, 60 + orig: 96, 60 + offset: 0, 0 + index: -1 +front_bracer + rotate: true + xy: 217, 192 + size: 81, 58 + orig: 81, 58 + offset: 0, 0 + index: -1 +front_hand + rotate: false + xy: 586, 878 + size: 82, 75 + orig: 82, 75 + offset: 0, 0 + index: -1 +front_open_hand + rotate: true + xy: 495, 760 + size: 86, 87 + orig: 86, 87 + offset: 0, 0 + index: -1 +front_thigh + rotate: false + xy: 714, 1092 + size: 114, 58 + orig: 114, 58 + offset: 0, 0 + index: -1 +gun + rotate: false + xy: 2, 67 + size: 213, 206 + orig: 213, 206 + offset: 0, 0 + index: -1 +gun_nohand + rotate: false + xy: 1563, 1547 + size: 210, 203 + orig: 210, 203 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 2, 275 + size: 271, 298 + orig: 271, 298 + offset: 0, 0 + index: -1 +lower_leg + rotate: true + xy: 386, 943 + size: 146, 195 + orig: 146, 195 + offset: 0, 0 + index: -1 +mouth_smile + rotate: false + xy: 100, 6 + size: 93, 59 + orig: 93, 59 + offset: 0, 0 + index: -1 +neck + rotate: false + xy: 1012, 1109 + size: 36, 41 + orig: 36, 41 + offset: 0, 0 + index: -1 +raptor_arm_back + rotate: false + xy: 330, 769 + size: 163, 172 + orig: 163, 172 + offset: 0, 0 + index: -1 +raptor_body + rotate: false + xy: 2, 1468 + size: 1219, 570 + orig: 1219, 570 + offset: 0, 0 + index: -1 +raptor_front_arm + rotate: true + xy: 1223, 1445 + size: 162, 203 + orig: 162, 203 + offset: 0, 0 + index: -1 +raptor_front_leg + rotate: false + xy: 2, 952 + size: 382, 514 + orig: 382, 514 + offset: 0, 0 + index: -1 +raptor_hindleg_back + rotate: false + xy: 1223, 1609 + size: 338, 429 + orig: 338, 429 + offset: 0, 0 + index: -1 +raptor_horn + rotate: false + xy: 714, 1307 + size: 363, 159 + orig: 363, 159 + offset: 0, 0 + index: -1 +raptor_horn_back + rotate: false + xy: 714, 1152 + size: 351, 153 + orig: 351, 153 + offset: 0, 0 + index: -1 +raptor_jaw + rotate: false + xy: 1563, 1752 + size: 305, 286 + orig: 305, 286 + offset: 0, 0 + index: -1 +raptor_saddle_noshadow + rotate: false + xy: 2, 575 + size: 326, 375 + orig: 326, 375 + offset: 0, 0 + index: -1 +raptor_saddle_strap_front + rotate: true + xy: 1558, 1431 + size: 114, 189 + orig: 114, 189 + offset: 0, 0 + index: -1 +raptor_saddle_strap_rear + rotate: false + xy: 1079, 1318 + size: 108, 148 + orig: 108, 148 + offset: 0, 0 + index: -1 +raptor_saddle_w_shadow + rotate: false + xy: 386, 1091 + size: 326, 375 + orig: 326, 375 + offset: 0, 0 + index: -1 +raptor_tongue + rotate: true + xy: 1428, 1436 + size: 171, 128 + orig: 171, 128 + offset: 0, 0 + index: -1 +stirrup_back + rotate: false + xy: 923, 1081 + size: 87, 69 + orig: 87, 69 + offset: 0, 0 + index: -1 +stirrup_front + rotate: false + xy: 1775, 1650 + size: 89, 100 + orig: 89, 100 + offset: 0, 0 + index: -1 +stirrup_strap + rotate: true + xy: 1775, 1551 + size: 97, 91 + orig: 97, 91 + offset: 0, 0 + index: -1 +torso + rotate: false + xy: 330, 585 + size: 108, 182 + orig: 108, 182 + offset: 0, 0 + index: -1 +visor + rotate: true + xy: 1870, 1777 + size: 261, 168 + orig: 261, 168 + offset: 0, 0 + index: -1 diff --git a/spine-cocos2d-objc/Resources/raptor.json b/spine-cocos2d-objc/Resources/raptor.json new file mode 100644 index 000000000..24504ac67 --- /dev/null +++ b/spine-cocos2d-objc/Resources/raptor.json @@ -0,0 +1,2620 @@ +{ +"skeleton": { "hash": "tzTkzbBrpNYAwwMjxvin8GH1NPg", "spine": "3.3.07", "width": 1223.72, "height": 1055.5, "images": "./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, + "inheritRotation": false, + "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": -2.15, + "x": 57.78, + "y": -0.02, + "scaleX": 0.73, + "scaleY": 0.823, + "inheritRotation": false, + "color": "15ff00ff" + }, + { + "name": "front_foot3", + "parent": "front_foot2", + "length": 129.88, + "rotation": -2.7, + "x": 49.71, + "y": 20.65, + "scaleX": 1.154, + "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.9, + "x": 39.98, + "y": -0.89, + "inheritRotation": false, + "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, "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, + "inheritRotation": false, + "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", + "bones": [ "front_arm", "front_bracer" ], + "target": "front_arm_target" + }, + { + "name": "front_foot_goal", + "bones": [ "front_leg3", "front_foot1" ], + "target": "front_foot_goal" + }, + { + "name": "front_leg_goal", + "bones": [ "front_leg1", "front_leg2" ], + "target": "front_leg_goal", + "bendPositive": false + }, + { + "name": "rear_arm_goal", + "bones": [ "back_arm", "back_bracer" ], + "target": "rear_arm_target" + }, + { + "name": "rear_foot_goal", + "bones": [ "rear_leg3", "rear_foot1" ], + "target": "rear_foot_goal" + }, + { + "name": "rear_leg_goal", + "bones": [ "rear_leg1", "rear_leg2" ], + "target": "rear_leg_goal", + "bendPositive": false + }, + { + "name": "spineboy_front_leg_goal", + "bones": [ "front_thigh", "lower_leg" ], + "target": "spineboy_front_arm_goal", + "bendPositive": false + }, + { + "name": "spineboy_rear_leg_goal", + "bones": [ "back_thigh", "back_knee" ], + "target": "spineboy_rear_arm_goal", + "bendPositive": false + }, + { + "name": "stirrup", + "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.48, 50.63, 83.86, 46.32, 142.05, 42.17, 197.91, 3.34, 163.7, -45.86, 86.15, -47.34, 15.9, -48.68, 8.42, -120.68, -69.06, -66.81, -35.32, -20.73, -58.83, -10.35, -44.69, 9.99, -14.55, 53.35, 85.21, 6.43, 20.45, 8.2 ], + "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.53, 41.05, 0.08333, 2, 40, 66.01999, 20.35, 0.76813, 41, 41.41, 24.39, 0.23186, 2, 40, 74.51, 16.57, 0.64468, 41, 33.49, 19.53, 0.35531, 2, 40, 70.89, 21.97, 0.29071, 41, 39.99, 19.45999, 0.70928, 3, 40, 42.77, 63.89, 0.11483, 41, 90.47, 18.95, 0.60854, 49, -17.2, 9, 0.2766, 2, 41, 101.86, 18.83, 0.45955, 49, -14.38, 20.04, 0.54044, 2, 41, 106.47, 2.08, 0.0625, 49, 2.98, 20.56, 0.9375, 1, 49, 51.32, 21.98, 1, 1, 49, 60.41, 11.1, 1, 1, 49, 72.39, 9.60999, 1, 1, 49, 100.37, -23.87, 1, 1, 49, 104.96, -40.9, 1, 1, 49, 78.37, -25.61, 1, 1, 49, 86.05, -56.84, 1, 1, 49, 52.92, -30.04, 1, 2, 41, 62.24, -43.92, 0.0625, 49, 37.18999, -33.33, 0.9375, 2, 41, 64.89, -28.65, 0.3125, 49, 22.98, -27.14, 0.6875, 2, 41, 57.69, -27.17, 0.30612, 49, 19.83, -33.78, 0.69387, 2, 40, 124.19, 3.83, 0.19395, 41, -5.09, -14.23, 0.80604, 2, 40, 110.77, -19.65, 0.3125, 41, -16.87999, 10.1, 0.6875, 2, 40, 99.14, -19.2, 0.51612, 41, -9.93, 19.44, 0.48386, 2, 40, 43.73, -17.03, 0.9375, 41, 23.17, 63.92, 0.0625, 1, 40, 35.41, -29.77, 1, 1, 40, -15.68, -28.02, 1, 1, 40, -13.87, 24.65, 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, 16, 56, 15, 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, 20, 91, 56, 56, 19, 20, 17, 19, 56, 18, 19, 17, 93, 91, 31, 55, 34, 35, 33, 34, 55, 61, 33, 55, 61, 32, 33, 93, 32, 61, 56, 91, 93, 56, 93, 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.24, -285.93, 1, 1, 8, -14.58, -194.68, 1, 4, 6, 238.39, -84.13, 0.20851, 7, 32.09999, -140.85, 0.19336, 8, -61.96, -132.26, 0.42115, 39, 129.57, 6.39, 0.17696, 5, 2, 332.7, 63.71, 0.06905, 6, 199.57, -83.03, 0.29424, 7, 3.69, -114.37, 0.2194, 8, -85.43, -101.32, 0.30859, 39, 127.34, -26.64, 0.1087, 5, 2, 307.08, 43.5, 0.11018, 6, 166.95, -82.12999, 0.37282, 7, -20.18, -92.14, 0.24572, 8, -105.18, -75.33999, 0.21862, 39, 123.08, -64.79, 0.05264, 4, 2, 307.75, 5.7, 0.18627, 6, 143.25, -111.59, 0.58009, 7, -57.43, -98.57, 0.12363, 8, -142.98, -75.33, 0.10999, 2, 2, 308.7, -30.55, 0.25, 6, 120.75, -140.04, 0.75, 2, 2, 213.94, -142.7, 0.75, 6, -23.83, -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, 4, 58, 118.47, 114.74, 0.07383, 59, 17.17, 122.49, 0.17504, 60, -100.71, 132.55, 0.06818, 1, -166.91, -67.94999, 0.68294, 4, 58, 170.4, 123.13, 0.06537, 59, 66.71, 104.77, 0.20999, 60, -53.08, 110.21, 0.12016, 1, -217.69, -61.33, 0.60447, 6, 58, 221.11, 131.31, 0.02179, 59, 115.07, 87.47, 0.23058, 60, -6.58, 88.39, 0.16258, 61, -168.92, 31, 0.02826, 62, -282.82, -90.19, 0.029, 1, -267.66, -55.14, 0.52776, 5, 59, 146.51, 86.08, 0.23635, 60, 26.66, 83.39, 0.19338, 61, -134.99, 41.34, 0.06624, 62, -257.52, -60.65, 0.06962, 1, -298.87, -61.99, 0.43436, 5, 59, 178.73, 86.41, 0.22521, 60, 56.68, 81.29, 0.20997, 61, -107.13, 46.31, 0.11271, 62, -232.44, -51.26, 0.12148, 1, -328.68, -69.24, 0.3306, 5, 59, 203.26, 86.51, 0.21603, 60, 83.06, 77.01999, 0.22457, 61, -79.56, 53.53, 0.13939, 62, -210.89, -28.3, 0.15618, 1, -354.01, -75.41, 0.26379, 5, 59, 238.06, 85.41, 0.20114, 60, 115.65, 74.66, 0.2315, 61, -49.53, 60.58, 0.16455, 62, -185.49, -14.98, 0.19123, 1, -385.33, -83.15, 0.21156, 5, 59, 255.33, 78.85, 0.18224, 60, 133.83, 63.18, 0.23194, 61, -27.04, 56.84, 0.18907, 62, -163.58, -5.26, 0.22658, 1, -406.45, -79.89, 0.17015, 5, 59, 275.48, 71.62, 0.16169, 60, 152.97, 53.58, 0.22885, 61, -5.82, 53.94, 0.21292, 62, -142.85, 0.11, 0.26159, 1, -427.72, -77.47, 0.13493, 5, 59, 313.81, 53.61, 0.14198, 60, 188.04, 35.82, 0.22293, 61, 31.84, 49.3, 0.23478, 62, -106.46, 7.49, 0.29326, 1, -465.96, -72.58999, 0.10702, 5, 59, 345.74, 45.54, 0.12502, 60, 219.6, 19.28, 0.2179, 61, 68.31, 43.02, 0.25622, 62, -70.12999, 18.19, 0.32248, 1, -502.09, -68.19, 0.07835, 4, 59, 390.81, 21.3, 0.11758, 60, 261.62, -3.66, 0.22607, 61, 114.55, 37.83, 0.29087, 62, -26.15, 30.34, 0.36547, 4, 59, 423.87, -11.11, 0.10536, 60, 291.46, -39.06, 0.21954, 61, 154.83, 14.99, 0.30098, 62, 19.91, 25.67, 0.37409, 4, 59, 456.68, -43.27, 0.09949, 60, 321.06, -74.19999, 0.21749, 61, 194.79, -7.66, 0.30788, 62, 65.62, 21.04, 0.37513, 4, 59, 480.34, -100.28, 0.10045, 60, 339.2, -133.2, 0.22026, 61, 232.3, -56.69, 0.31103, 62, 119.7, -8.68999, 0.36824, 4, 59, 424.34, -67.51999, 0.10379, 60, 286.57, -95.27, 0.23087, 61, 169.77, -39.4, 0.30828, 62, 55.51, -18.08, 0.35705, 4, 59, 387.08, -53.84, 0.11505, 60, 250.77, -78.11, 0.2454, 61, 130.24, -35.75, 0.30092, 62, 17.87, -30.67, 0.3386, 4, 59, 346.04, -38.78, 0.13471, 60, 211.34, -59.22, 0.26271, 61, 86.7, -31.72, 0.2888, 62, -23.59, -44.54, 0.31376, 5, 58, 449.17, 125.97, 0.02419, 59, 311.45, -35.25, 0.16384, 60, 175.89, -56.83, 0.2727, 61, 51.53, -43.14, 0.26317, 62, -52.88, -67.87, 0.27607, 5, 58, 418.38, 93.72, 0.05913, 59, 269.72, -40.64, 0.19681, 60, 135.19, -53.82, 0.27688, 61, 13.42, -53.11, 0.23219, 62, -82.03, -93.66, 0.23497, 5, 58, 390.82, 86.58, 0.10638, 59, 241.19, -39.8, 0.2354, 60, 105.59, -52.93, 0.27331, 61, -16.25, -62.16, 0.19459, 62, -108.34, -111.24, 0.19028, 5, 58, 364.8, 62.48, 0.14347, 59, 207.71, -42.14, 0.28099, 60, 73.33, -49.43, 0.26867, 61, -46.11, -70.49, 0.15764, 62, -129.51, -133.56, 0.1492, 5, 58, 345.49, 47.53, 0.18499, 59, 182.34, -50.62, 0.33114, 60, 45.87, -56.62, 0.25881, 61, -71.57, -84.96, 0.1174, 62, -150.85, -153.35, 0.10763, 5, 58, 319.95, 15.15, 0.23755, 59, 145.6, -61.95, 0.39396, 60, 9.60999, -63.26, 0.24619, 61, -101.06, -105.58, 0.06443, 62, -165.65, -187.83, 0.05784, 3, 58, 276.58, -30.61, 0.29942, 59, 85.52, -81.11, 0.46774, 60, -52.01, -76.62, 0.23283, 3, 58, 214.5, -70.36, 0.32855, 59, 11.97, -85.98, 0.48601, 60, -125.69, -74.48, 0.18543, 2, 58, 147.14, -113.5, 0.59565, 59, -67.83999, -91.26, 0.40433, 2, 2, -113.14, 135.84, 0.24192, 58, 91.72, -112.59, 0.75807, 2, 2, -42.12, 116.77, 0.14515, 58, 18.2, -111.17, 0.85484, 1, 2, 44.2, 107.1, 1, 2, 2, 140.09, 96.35, 0.22579, 6, 72.58999, 65.41, 0.7742, 4, 2, 137.69, 169.35, 0.05644, 6, 117.5, 123, 0.24355, 7, 78.3, 94.48, 0.2125, 8, 23.7, 91.74, 0.4875, 2, 7, 171.15, 111.98, 0.25, 8, 118.17, 93.15, 0.75, 1, 8, 158.96, -25.58, 1, 1, 1, -40.63, -86.01, 1, 3, 2, 67.33999, -86.66, 0.33215, 58, -137.02, 59.92, 0.08303, 1, 92.54, -90.61, 0.5848, 2, 2, 170.13, -66.29, 0.75, 6, -8.53, -78.72, 0.25, 2, 2, 231.74, -8.12, 0.4, 6, 76.03, -73.51999, 0.6, 4, 2, 222.04, 70.41, 0.17551, 6, 118.9, -7, 0.55823, 7, -6.58, -3.99, 0.17739, 8, -76.73, 9.18, 0.08884, 1, 8, 50.43, -46.56, 1, 1, 6, -9.88, 20.65, 1, 2, 2, -53.22, 20.53, 0.2, 58, 5.8, -15.09, 0.8, 3, 2, -180.71, 32.22, 0.08564, 58, 132.35, 4.23999, 0.56215, 59, -23.98, 19.01, 0.35219, 3, 58, 246.39, 57.53, 0.30273, 59, 101.61, 10.65, 0.46989, 60, -27.28, 13.2, 0.22737, 5, 58, 346.99, 126.85, 0.13479, 59, 223.17, 22.83, 0.28279, 60, 94.88, 13.77, 0.24481, 61, -47.85, -3.72, 0.17322, 62, -158.02, -73.16, 0.16438, 4, 59, 367.51, -9.96, 0.14656, 60, 235.45, -32.57, 0.23073, 61, 100.06, 1.62, 0.29607, 62, -24.81, -8.63, 0.32661, 4, 59, 440.24, -55.6, 0.10821, 60, 303.52, -84.91, 0.21897, 61, 182.07, -23.8, 0.31097, 62, 60.48, 1.14, 0.36182, 3, 6, 174.99, 22.22, 0.2, 7, 54.82, -19.14, 0.6, 8, -18.79999, -16.2, 0.2, 3, 58, 189.25, 30.83, 0.33253, 59, 38.68, 14.84, 0.48076, 60, -89.52, 23.34, 0.18669, 5, 58, 295.08, 91.08, 0.22891, 59, 160.45, 16.54, 0.38754, 60, 31.85, 13.48, 0.2306, 61, -106.86, -25.89, 0.08042, 62, -203.08, -117.24, 0.0725, 5, 58, 414.43, 146.25, 0.07359, 59, 291.61, 7.27, 0.20198, 60, 161.53, -8.2, 0.23762, 61, 22.27, -1.17999, 0.24024, 62, -94.86, -42.56, 0.24654, 4, 59, 404.01, -32.87, 0.12351, 60, 269.61, -58.84, 0.22261, 61, 141.21, -11.13, 0.30609, 62, 17.98, -3.72, 0.34777, 1, 8, 26.4, -166.06, 1, 1, 8, 87.21, -106.12, 1, 1, 8, 108.19, -49.62, 1, 2, 8, 61.73, -82.12999, 0.50021, 39, 4.42, 52.83, 0.49978, 2, 8, 22.84, -109.4, 0.50021, 39, 51.52, 46.73, 0.49978, 4, 6, 247.12, -50.52, 0.06545, 7, 60.86, -121.4, 0.06069, 8, -30.3, -118, 0.49079, 39, 96.58, 17.21999, 0.38305, 1, 2, 26.73, 14.8, 1, 2, 2, -107.97, 25.67, 0.24192, 58, 60.17, -6.91, 0.75807, 4, 2, 235.53, 102.96, 0.0761, 6, 150.1, 9.35, 0.35533, 7, 27.64, -12.34, 0.41675, 8, -44.43, -4.87, 0.1518, 3, 2, 227.15, 28.49, 0.31015, 6, 95.96, -42.46, 0.60548, 7, -47.23, -15.44, 0.08435, 2, 8, 5.19, -153.1, 0.87618, 39, 90.96, 71.21, 0.12381, 4, 6, 243.13, -60.59, 0.10669, 7, 51.21, -126.33, 0.09893, 8, -40.65, -121.21, 0.47072, 39, 105.71, 17.33, 0.32363, 1, 8, 23.69, -185.21, 1, 1, 8, 79.64, -175.94, 1, 1, 8, 93.96, -187.56, 1, 1, 8, 87.07, -206.55, 1, 1, 8, 64.19999, -216.74, 1, 1, 8, 52.23, -203.68, 1, 1, 8, 59.24, -187.03, 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.1, -166.14, 1, 1, 8, 46.84, -186.41, 1, 1, 8, 50.32, -204.36, 1, 1, 8, 41.7, -206.59, 1, 1, 8, 61.87, -230.97, 1, 5, 58, 374.97, 143.6, 0.10291, 59, 256.29, 17.42, 0.23985, 60, 127.43, 2.07, 0.2431, 61, -13.35, -3.05, 0.20854, 62, -128.14, -55.46, 0.20557, 4, 59, 327.21, 4.42, 0.17789, 60, 196.28, -19.32, 0.24248, 61, 58.71, -1.04999, 0.28055, 62, -62.24, -26.21, 0.29905, 5, 58, 318.32, 113.62, 0.17774, 59, 192.26, 20.14, 0.33383, 60, 64.19, 12.44, 0.24171, 61, -76.55, -13.67, 0.12849, 62, -182.56, -89.31, 0.11821, 2, 8, 56.98, -162.99, 0.89259, 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.06, 31.88, 0.51075, 6, 66.56, -109.48, 0.48924, 1, 21, 35.87, 35.62, 1, 2, 21, 60.94, 27.12, 0.8464, 22, 46.49, 31.12, 0.15358, 2, 21, 74.05, 22.67, 0.3492, 22, 36.5, 21.53, 0.65078, 3, 21, 67, 31.58, 0.10937, 22, 47.66, 23.68, 0.78125, 31, -40.93, -19.44, 0.10937, 2, 22, 86.98, 31.24, 0.65078, 31, -25.75, 17.61, 0.3492, 2, 22, 103.83, 34.49, 0.34375, 31, -19.24, 33.49, 0.65625, 2, 22, 114.04, 19.51, 0.10937, 31, -1.11, 33.84, 0.89062, 1, 31, 53.62, 34.88, 1, 1, 31, 96.03, -19.16, 1, 1, 31, 104.2, -47.31, 1, 1, 31, 71.33999, -23.98, 1, 1, 31, 81.39, -64.61, 1, 1, 31, 76.8, -68.81, 1, 1, 31, 46.65, -34.25, 1, 2, 22, 73.12999, -45.76, 0.10937, 31, 31.14, -36.12, 0.89062, 2, 22, 73.98, -26.9, 0.34375, 31, 15.82, -25.09, 0.65625, 2, 22, 65.1, -26.69, 0.65078, 31, 10.78, -32.41, 0.3492, 3, 21, 133.56, 9.13, 0.10937, 22, -2.94, -25.03, 0.78125, 31, -27.84, -88.47, 0.10937, 2, 21, 123.67, -14.42, 0.3492, 22, -19.29, -5.39, 0.65078, 2, 21, 97.41, -15.43, 0.8464, 22, -8.08, 18.37, 0.15358, 1, 21, 45.46, -17.43, 1, 2, 21, 40.68999, -27.17, 0.45035, 6, -1.69, -93.8, 0.54964, 2, 21, -2.74, -29.63, 0.44352, 6, 18.99, -72.93, 0.55646, 1, 6, 32.11, -48.45, 1, 1, 6, 57.56, -67.43, 1, 1, 6, 84.38, -87.42, 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.82, -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, 41, 42, 44, 43, 9, 10, 42, 43, 10, 41, 43, 42, 10, 13, 42, 11, 13, 10, 13, 11, 12, 13, 44, 42, 14, 15, 13, 45, 8, 9, 45, 40, 8, 16, 40, 45, 17, 40, 16, 16, 45, 15, 15, 45, 44, 45, 41, 44, 15, 44, 13, 45, 9, 43, 45, 43, 41, 19, 21, 38, 20, 21, 19, 39, 38, 6, 39, 6, 7, 40, 39, 7, 40, 7, 8, 18, 19, 38, 18, 38, 39, 17, 39, 40, 18, 39, 17, 47, 25, 48, 24, 25, 47, 35, 48, 34, 47, 48, 35, 51, 24, 47, 23, 24, 51, 3, 34, 2, 35, 34, 3, 36, 51, 47, 36, 47, 35, 4, 35, 3, 36, 35, 4, 37, 22, 23, 21, 22, 37, 36, 37, 23, 36, 23, 51, 5, 37, 36, 5, 36, 4, 6, 37, 5, 38, 21, 37, 38, 37, 6, 29, 30, 46, 32, 31, 0, 46, 31, 32, 28, 29, 46, 46, 27, 28, 32, 50, 46, 50, 27, 46, 33, 32, 0, 33, 0, 1, 49, 50, 32, 33, 49, 32, 26, 27, 50, 26, 50, 49, 25, 26, 49, 48, 49, 33, 25, 49, 48, 34, 33, 1, 48, 33, 34, 34, 1, 2 ], + "vertices": [ 2, 25, 128.03, 88.47, 0.8504, 1, 158.83, -71.91, 0.14959, 2, 25, 219.55, 53.15, 0.77988, 26, -48.04, -38.58, 0.22011, 2, 25, 266.3, 35.09999, 0.53544, 26, -36.73, 10.22, 0.46455, 2, 25, 286.89, 9.79, 0.35166, 26, -14.56, 34.14, 0.64832, 2, 25, 281.54, -41.24, 0.09228, 26, 36.71, 36, 0.90771, 3, 25, 271.53, -136.86, 0.05786, 26, 132.77, 39.48, 0.71425, 27, 34.99, 78.76, 0.22787, 3, 26, 158.21, 55.17, 0.5308, 27, 52.65, 54.63, 0.38143, 28, 7.01, 85.54, 0.08776, 5, 26, 167.14, 99.49, 0.21498, 27, 97.55, 49.25, 0.35357, 28, 28.72, 45.87, 0.14219, 29, -21.26, 49.99, 0.22491, 30, -72.29, 25.96, 0.06431, 5, 26, 154.22, 105.55, 0.07537, 27, 102.57, 62.6, 0.23051, 28, 42.51, 49.55, 0.28379, 29, -7.06, 51.39, 0.27004, 30, -58.17, 28.03, 0.14026, 4, 27, 109.72, 83.39, 0.11607, 28, 64.08999, 55.23, 0.08123, 29, 15.12, 53.51, 0.36961, 30, -36.09, 31.19, 0.43307, 1, 30, 35.8, 41.81, 1, 1, 30, 128.11, 17.93, 1, 1, 30, 188.72, -29.42, 1, 2, 29, 93.29, -7.6, 0.47999, 30, 44.86, -26.17, 0.52, 2, 29, 133.17, -49.83, 0.776, 30, 86.69, -66.47, 0.22399, 2, 29, 78.78, -50.15, 0.76799, 30, 32.38, -69.36, 0.232, 1, 29, -4.91, -33.55, 1, 3, 27, 155.04, -5.13, 0.35917, 28, 17.87999, -32.5, 0.30632, 29, -44.62, -25.61, 0.33449, 4, 26, 254.98, 126.27, 0.10154, 27, 131.21, -36.2, 0.54211, 28, -21.24, -31.17, 0.20873, 29, -83.01999, -17.96999, 0.1476, 3, 26, 240.33, 7.81, 0.25586, 27, 11.94, -30.98, 0.61614, 28, -86.31, 68.9, 0.12797, 2, 26, 239.26, -23.1, 0.45486, 27, -18.95999, -32.37, 0.54513, 3, 25, 187.65, -209.73, 0.09777, 26, 216.66, -33.34999, 0.58892, 27, -30.97, -10.65, 0.3133, 2, 25, 163.85, -128.67, 0.19603, 26, 139.75, -68.26, 0.80396, 2, 25, 165.74, -94.49, 0.31962, 26, 105.59, -71.26, 0.68037, 2, 25, 166.39, -79.07, 0.46225, 26, 90.23, -72.76, 0.53774, 2, 25, 166.49, -74.17, 0.53785, 26, 85.42, -73.28, 0.46213, 2, 25, 141.54, -82.46, 0.73138, 26, 97.13, -96.82, 0.26861, 2, 25, 99.76, -97.08, 0.85324, 26, 117.34, -136.23, 0.14675, 2, 25, 45.01, -114.56, 0.83615, 1, -51.09, -135.29, 0.16384, 2, 25, -16.2, -74.76, 0.62989, 1, -42.95, -58.38, 0.3701, 2, 25, -74.73, -19.33, 0.31468, 1, -52.66, 17.54999, 0.68531, 2, 25, 1.67, 76.75, 0.25576, 1, 70.07, 18.78, 0.74423, 1, 25, 93.54, 4.13, 1, 2, 25, 185.14, -6.66, 0.75461, 26, 15.98, -64.26999, 0.24538, 2, 25, 217.11, -18.75, 0.50844, 26, 23.47, -30.93, 0.49154, 2, 25, 225.63, -32.91999, 0.32527, 26, 36.3, -20.5, 0.67472, 2, 25, 223, -84.73, 0.20192, 26, 87.96, -15.86, 0.79807, 3, 25, 235.61, -168.06, 0.0809, 26, 168.69, 8.29, 0.57147, 27, 6.74, 40.47, 0.34761, 3, 26, 191.79, 35.8, 0.32545, 27, 36, 19.62, 0.57243, 28, -31.14, 78.74, 0.10211, 4, 26, 206.64, 111.53, 0.10808, 27, 112.69, 10.82, 0.52067, 28, 6.25, 11.23, 0.23517, 29, -49.03, 19.43, 0.13606, 3, 27, 130.6, 26.41, 0.35067, 28, 29.35, 5.71, 0.28241, 29, -27.12, 10.25, 0.3669, 2, 29, 67.46, 3.16, 0.384, 30, 18.54999, -16.62999, 0.61599, 1, 30, 19.07, -14.51, 1, 2, 29, 36, 24.95, 0.384, 30, -13.89, 3.64, 0.61599, 2, 29, 86.23, -6.55, 0.48799, 30, 37.75, -25.46, 0.512, 4, 26, 164.9, 153.55, 0.02263, 27, 151.18, 56, 0.23908, 28, 65.44, 5.55, 0.19254, 29, 8.45, 4.27, 0.54574, 2, 25, -9.28, -17.5, 0.59605, 1, 7.72, -30.85, 0.40393, 2, 25, 195.9, -53.81, 0.42368, 26, 61.11, -47.06, 0.5763, 2, 25, 190.1, -48.45, 0.53231, 26, 56.61, -53.56, 0.46768, 2, 25, 161.26, -48.26, 0.79873, 26, 60.44, -82.12999, 0.20126, 2, 25, 120.37, -58.54, 0.85455, 26, 76.31, -121.18, 0.14544, 2, 25, 197.37, -69.23, 0.3355, 26, 76.17, -43.46, 0.66449 ], + "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, 13, 14, 16, 47, 15, 15, 12, 13, 15, 47, 12, 18, 46, 17, 18, 45, 46, 17, 47, 16, 17, 46, 47, 47, 10, 11, 47, 46, 10, 47, 11, 12, 45, 18, 19, 44, 45, 20, 20, 45, 19, 20, 21, 44, 46, 9, 10, 46, 45, 9, 45, 44, 9, 21, 43, 44, 44, 8, 9, 44, 7, 8, 44, 43, 7, 21, 22, 43, 43, 22, 42, 43, 42, 7, 22, 23, 24, 24, 42, 22, 7, 42, 6, 42, 41, 6, 6, 41, 5, 24, 26, 42, 42, 26, 41, 24, 25, 26, 5, 40, 4, 5, 41, 40, 41, 28, 40, 26, 27, 41, 41, 27, 28, 40, 39, 4, 28, 29, 40, 40, 29, 39, 4, 39, 3, 39, 2, 3, 29, 30, 39, 39, 38, 2, 39, 30, 38, 38, 1, 2, 30, 37, 38, 38, 37, 1, 30, 31, 37, 31, 36, 37, 31, 32, 36, 32, 33, 36, 37, 0, 1, 37, 36, 0, 33, 34, 36, 36, 35, 0, 36, 34, 35 ], + "vertices": [ 1, 44, 53.94, 69.15, 1, 1, 44, 126.23, 67.31, 1, 2, 44, 226.42, 31.13, 0.9375, 45, -30.87, -1.11, 0.0625, 2, 44, 240.84, 25.33, 0.7, 45, -25.64, 13.52, 0.3, 2, 44, 246.67, 8.05, 0.3, 45, -8.60999, 20.02, 0.7, 3, 44, 240.81, -115.25, 0.0625, 45, 114.8, 19.01, 0.875, 46, 9.47999, 59.16, 0.0625, 2, 45, 131.07, 29.69, 0.7, 46, 22.11, 44.35, 0.3, 2, 45, 146.06, 39.54, 0.3, 46, 33.75999, 30.71, 0.7, 3, 45, 152.6, 65.01, 0.12566, 46, 59.85, 27.41, 0.75203, 47, 15.85, 48.05, 0.12229, 3, 45, 154.28, 71.58999, 0.05444, 46, 66.58999, 26.56, 0.78401, 47, 16.71999, 41.31, 0.16154, 3, 46, 71.19, 35.75999, 0.64716, 47, 26.78, 39.16999, 0.13169, 48, -67.32, 18.95999, 0.22114, 3, 46, 87.93, 69.21, 0.0625, 47, 63.37, 31.39, 0.675, 48, -30.17, 23.3, 0.26249, 2, 47, 113.82, 35.72, 0.1038, 48, 16.23, 43.56, 0.89619, 1, 48, 128.14, 12.02, 1, 1, 48, 161.85, -15.81, 1, 2, 47, 90.98, -23.36, 0.0138, 48, 13.52, -19.71999, 0.98619, 2, 47, 62.97, -25.81, 0.7, 48, -12.23, -31.02, 0.3, 3, 46, 115.12, -1.33, 0.08333, 47, 1.93, -12.66, 0.83333, 48, -74.26, -38.09999, 0.08333, 2, 46, 106.11, -23.53, 0.3, 47, -21.8, -9.52, 0.7, 2, 46, 97.43, -44.9, 0.7, 47, -44.67, -6.51, 0.3, 2, 46, 84.26, -40.68999, 0.9375, 47, -43.9, 7.29, 0.0625, 1, 46, 49.18, -29.46, 1, 2, 45, 206.75, 5.37, 0.13333, 46, 7.44, -33.77, 0.86666, 2, 45, 219.64, -20.52, 0.36111, 46, -16.64, -49.8, 0.63888, 2, 45, 208.4, -37.82, 0.72083, 46, -35.22, -40.82, 0.27916, 2, 45, 200.49, -50.02, 0.91666, 46, -48.31, -34.48, 0.08333, 1, 45, 161.1, -36.97, 1, 2, 44, 150.1, -116.76, 0.08333, 45, 119.88, -71.55, 0.91666, 2, 44, 154.99, -70.71, 0.42846, 45, 73.68, -68.47, 0.57153, 2, 44, 150.3, -65.26999, 0.35604, 45, 68.42, -73.36, 0.64395, 2, 44, 146.51, -60.87, 0.59147, 45, 64.17, -77.32, 0.40852, 2, 44, 115.12, -75.08, 0.8446, 45, 79.61, -108.13, 0.15538, 1, 44, 63.33, -98.53, 1, 1, 44, 21.78, -94.55, 1, 1, 44, -66.69, -32.04, 1, 1, 44, -6.62, 52.97, 1, 1, 44, 58.14, -6, 1, 1, 44, 121.17, 2.44, 1, 1, 44, 188.87, -12.1, 1, 2, 44, 197.11, -18.42, 0.7, 45, 19.79, -28.44, 0.3, 2, 44, 203.98, -28.61, 0.3, 45, 29.69, -21.17, 0.7, 1, 45, 136.67, -7.42, 1, 2, 45, 164.32, 0.66, 0.7, 46, -2.53, 7.73, 0.3, 2, 45, 177.97, 21.57, 0.25, 46, 19.92, -3.19, 0.75, 1, 46, 71.93, -6.29, 1, 2, 46, 79.66, -3.72, 0.7, 47, -9.28, 21.04, 0.3, 2, 46, 87.98, 7.25, 0.3125, 47, 3.42, 15.76, 0.6875, 3, 46, 114.16, 61.85, 0.04, 47, 62.84, 4.15, 0.7, 48, -21.95, -2.66, 0.26 ], + "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.99999, 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.85, 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.42, 1, 1, 39, 230.31, -13.08, 1, 1, 39, 189.56, -71.99, 1, 1, 39, 132.76, -105.6, 1, 1, 39, 83.71, -55.39, 1, 2, 8, -18.31, 12.1, 0.67732, 39, -0.04, -70.76, 0.32267, 1, 8, 113.44, 16.95, 1, 1, 8, 116.36, -62.48, 1, 1, 39, 1.86, 5.43, 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": [ 7, 8, 6, 9, 10, 13, 13, 11, 12, 6, 8, 19, 8, 9, 19, 9, 13, 19, 13, 10, 11, 19, 22, 6, 13, 14, 19, 19, 14, 22, 6, 22, 5, 22, 20, 5, 5, 20, 4, 14, 15, 22, 22, 15, 20, 20, 21, 4, 15, 16, 20, 4, 21, 3, 20, 16, 21, 2, 3, 0, 3, 21, 0, 0, 1, 2, 21, 16, 18, 16, 17, 18, 21, 18, 0 ], + "vertices": [ 1, 52, 3.9, -3.27, 1, 1, 52, 4.25, 15.05, 1, 1, 52, 13.24, 20.28, 1, 2, 52, 23.42, 21.2, 0.7, 53, -15.2, 21.22, 0.3, 3, 52, 41.11, 22.87, 0.3, 53, 2.48, 22.89, 0.6375, 54, -33.83, 24.96, 0.0625, 3, 52, 52.07, 21.72, 0.0625, 53, 13.43, 21.74, 0.6375, 54, -22.97, 23.11, 0.3, 2, 53, 18.39, 20.76, 0.25, 54, -18.09, 21.82, 0.75, 1, 54, -18.76, 33.09, 1, 1, 54, 49.92, 31.57, 1, 1, 54, 53.21, 25, 1, 1, 54, 53.11, -27.48, 1, 1, 54, 49.74, -31.27, 1, 1, 54, -20.73, -36.75999, 1, 1, 54, -23.82, -22.28, 1, 3, 52, 53.48, -24.61, 0.0625, 53, 14.84, -24.59, 0.575, 54, -24.51, -23.21, 0.3625, 3, 52, 41.43999, -26.12, 0.3, 53, 2.81, -26.09, 0.6375, 54, -36.62, -23.95, 0.0625, 2, 52, 24.38, -26.12, 0.7, 53, -14.24, -26.1, 0.3, 1, 52, 5.57, -26.12, 1, 1, 52, 3.54, -22.64, 1, 1, 54, -23.08, -0.04, 1, 2, 52, 41.66, -1.72, 0.3125, 53, 3.03, -1.7, 0.6875, 2, 52, 23.85, -2.46, 0.7, 53, -14.77, -2.44, 0.3, 2, 53, 13.95, -1.5, 0.64582, 54, -23.94, -0.11, 0.35416 ], + "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.26, 33.87, 0.3125, 3, 63, 39.09, 19.45, 0.3125, 64, -13.41, 20.86, 0.625, 65, -51.54, 33.37, 0.0625, 3, 63, 71.56, 19.02, 0.0625, 64, 18.58, 15.39, 0.625, 65, -21.56, 20.92, 0.3125, 2, 64, 55.03, 16.85, 0.3125, 65, 14.29, 14.23, 0.6875, 2, 64, 93.34, 18.39, 0.08333, 65, 51.98, 7.21, 0.91666, 1, 65, 56.09, -4.5, 1, 2, 64, 85.06, -1.49, 0.08333, 65, 39.48, -10.33, 0.91666, 2, 64, 54.22, -9.18, 0.3125, 65, 7.71, -10.96, 0.6875, 3, 63, 75.14, -14.72, 0.0625, 64, 16.87, -18.5, 0.625, 65, -30.77, -11.73, 0.3125, 3, 63, 38.8, -25.8, 0.3125, 64, -20.74, -23.8, 0.625, 65, -68.62, -8.53, 0.0625, 2, 63, 2.4, -35.77, 0.6875, 64, -58.25, -27.99, 0.3125, 2, 63, -17.28, -40.62, 0.91666, 64, -78.44999, -29.71, 0.08333, 1, 63, -59.91, 8.18, 1, 2, 63, -26.13, 37.68999, 0.91666, 64, -75.01999, 49.02, 0.08333 ], + "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.71, 8.03, 0.80344, 57, -17.42, 11.02, 0.19655, 2, 56, 37.95, 8.04, 0.59978, 57, -4.36, 8.87, 0.40021, 2, 56, 50.88, 8.04, 0.36895, 57, 8.39, 6.77, 0.63103, 2, 56, 65.92, 12.27, 0.17748, 57, 23.91, 8.47999, 0.82251, 2, 56, 81.72, 16.7, 0.05943, 57, 40.23, 10.28, 0.94056, 2, 56, 98.82, 25.04, 0.01209, 57, 58.46, 15.71, 0.9879, 2, 56, 114.44, 11.57, 0.00191, 57, 71.67, -0.11, 0.99808, 2, 56, 100.47, -4.61, 0.01816, 57, 55.25, -13.81, 0.98182, 2, 56, 78.79, -4.14, 0.07487, 57, 33.93999, -9.81, 0.92512, 2, 56, 65.83, -6.24, 0.2028, 57, 20.81, -9.76, 0.79719, 2, 56, 49.78, -8.83, 0.39971, 57, 4.55, -9.7, 0.60028, 2, 56, 37.93, -10.97, 0.62658, 57, -7.48, -9.88, 0.37341, 2, 56, 25.85, -13.15, 0.82034, 57, -19.75, -10.06, 0.17965, 2, 56, 0.25, -18.03, 0.95288, 57, -45.81, -10.7, 0.04711, 2, 56, -17.83, -2.43, 0.97709, 57, -61.11, 7.63, 0.0229, 2, 56, 1.57, 20.07, 0.94774, 57, -38.29, 26.67, 0.05225, 2, 56, 10.84, -1.23, 0.97709, 57, -32.62, 4.14, 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 } + } + } +}, +"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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.9, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.7, "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.7, "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.7, "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 } + ] + } + } + }, + "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 } + ] + } + }, + "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.82 ] + }, + { "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.9, "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.9, "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.9, "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": 36.9 }, + { "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": 27.74 }, + { "time": 1.0666, "angle": 36.9 } + ], + "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.9, "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": -1.65 }, + { "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": 10.93 }, + { "time": 1.0666, "angle": -1.65 } + ], + "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": 314, + "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, -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": 314, + "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, -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": 138, + "vertices": [ -2.23608, 21.95403, 21.54915, -4.7554 ] + }, + { + "time": 0.6, + "offset": 138, + "vertices": [ 7.17962, 15.14358, 15.26523, -6.91741 ] + }, + { + "time": 0.7333, + "offset": 110, + "vertices": [ -0.82485, 0.73406, -0.01284, -1.10443, 0, 0, 0, 0, 1.4866, -2.59426, 0.98071, 2.82342, 2.7366, -10.49935, 6.12506, 8.95282, -2.60873, -2.28384, 3.43417, -0.47045, -2.28305, -4.76037, 5.08892, 1.40078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 ] + }, + { "time": 0.8, "curve": "stepped" }, + { "time": 0.9666, "curve": "stepped" }, + { "time": 1.0666 } + ] + } + } + } + } +} +} \ No newline at end of file diff --git a/spine-cocos2d-objc/Resources/raptor.png b/spine-cocos2d-objc/Resources/raptor.png new file mode 100644 index 000000000..625072a67 Binary files /dev/null and b/spine-cocos2d-objc/Resources/raptor.png differ diff --git a/spine-cocos2d-objc/Resources/spineboy.atlas b/spine-cocos2d-objc/Resources/spineboy.atlas index 19c0934b1..e9500cc4a 100644 --- a/spine-cocos2d-objc/Resources/spineboy.atlas +++ b/spine-cocos2d-objc/Resources/spineboy.atlas @@ -1,194 +1,195 @@ spineboy.png +size: 1024,1024 format: RGBA8888 filter: Linear,Linear repeat: none eye_indifferent - rotate: true - xy: 389, 5 - size: 56, 53 - orig: 56, 53 + rotate: false + xy: 550, 694 + size: 93, 89 + orig: 93, 89 offset: 0, 0 index: -1 eye_surprised rotate: false - xy: 580, 34 - size: 56, 53 - orig: 56, 53 + xy: 834, 856 + size: 93, 89 + orig: 93, 89 offset: 0, 0 index: -1 front_bracer rotate: false - xy: 732, 85 - size: 35, 48 - orig: 35, 48 + xy: 678, 774 + size: 58, 80 + orig: 58, 80 offset: 0, 0 index: -1 front_fist_closed - rotate: false - xy: 556, 91 - size: 45, 49 - orig: 45, 49 + rotate: true + xy: 466, 593 + size: 75, 82 + orig: 75, 82 offset: 0, 0 index: -1 front_fist_open rotate: false - xy: 668, 32 - size: 52, 52 - orig: 52, 52 + xy: 550, 605 + size: 86, 87 + orig: 86, 87 offset: 0, 0 index: -1 front_foot rotate: false - xy: 924, 201 - size: 76, 41 - orig: 76, 41 + xy: 550, 785 + size: 126, 69 + orig: 126, 69 offset: 0, 0 index: -1 front_foot_bend1 - rotate: false - xy: 845, 200 - size: 77, 42 - orig: 77, 42 + rotate: true + xy: 375, 492 + size: 128, 70 + orig: 128, 70 offset: 0, 0 index: -1 front_foot_bend2 - rotate: false - xy: 778, 186 - size: 65, 56 - orig: 65, 56 + rotate: true + xy: 275, 330 + size: 108, 93 + orig: 108, 93 offset: 0, 0 index: -1 front_shin - rotate: true - xy: 444, 91 - size: 49, 110 - orig: 49, 110 + rotate: false + xy: 466, 670 + size: 82, 184 + orig: 82, 184 offset: 0, 0 index: -1 front_thigh - rotate: true - xy: 603, 89 - size: 29, 67 - orig: 29, 67 + rotate: false + xy: 214, 208 + size: 48, 112 + orig: 48, 112 offset: 0, 0 index: -1 front_upper_arm - rotate: true - xy: 672, 86 - size: 32, 58 - orig: 32, 58 + rotate: false + xy: 214, 109 + size: 54, 97 + orig: 54, 97 offset: 0, 0 index: -1 goggles rotate: false - xy: 444, 142 - size: 157, 100 - orig: 157, 100 + xy: 466, 856 + size: 261, 166 + orig: 261, 166 offset: 0, 0 index: -1 gun rotate: false - xy: 603, 120 - size: 126, 122 - orig: 126, 122 + xy: 2, 117 + size: 210, 203 + orig: 210, 203 offset: 0, 0 index: -1 head rotate: false - xy: 279, 63 - size: 163, 179 - orig: 163, 179 + xy: 2, 322 + size: 271, 298 + orig: 271, 298 offset: 0, 0 index: -1 mouth_grind rotate: false - xy: 845, 163 - size: 56, 35 - orig: 56, 35 + xy: 929, 896 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 mouth_oooo rotate: false - xy: 842, 126 - size: 56, 35 - orig: 56, 35 + xy: 929, 835 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 mouth_smile rotate: false - xy: 769, 97 - size: 56, 35 - orig: 56, 35 + xy: 447, 532 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 muzzle rotate: false - xy: 2, 2 - size: 275, 240 - orig: 277, 240 + xy: 2, 622 + size: 462, 400 + orig: 462, 400 offset: 0, 0 index: -1 neck rotate: false - xy: 903, 173 - size: 22, 25 - orig: 22, 25 + xy: 796, 819 + size: 36, 41 + orig: 36, 41 offset: 0, 0 index: -1 rear_bracer rotate: false - xy: 722, 40 - size: 34, 43 - orig: 34, 43 + xy: 738, 788 + size: 56, 72 + orig: 56, 72 offset: 0, 0 index: -1 rear_foot - rotate: false - xy: 444, 11 - size: 68, 36 - orig: 68, 36 + rotate: true + xy: 2, 2 + size: 113, 60 + orig: 113, 60 offset: 0, 0 index: -1 rear_foot_bend1 rotate: false - xy: 444, 49 - size: 70, 40 - orig: 70, 40 + xy: 64, 49 + size: 117, 66 + orig: 117, 66 offset: 0, 0 index: -1 rear_foot_bend2 rotate: false - xy: 778, 134 - size: 62, 50 - orig: 62, 50 + xy: 729, 862 + size: 103, 83 + orig: 103, 83 offset: 0, 0 index: -1 rear_shin - rotate: false - xy: 731, 135 - size: 45, 107 - orig: 45, 107 + rotate: true + xy: 729, 947 + size: 75, 178 + orig: 75, 178 offset: 0, 0 index: -1 rear_thigh rotate: true - xy: 516, 50 - size: 39, 62 - orig: 39, 62 + xy: 909, 957 + size: 65, 104 + orig: 65, 104 offset: 0, 0 index: -1 rear_upper_arm - rotate: false - xy: 638, 35 - size: 28, 52 - orig: 28, 52 + rotate: true + xy: 447, 483 + size: 47, 87 + orig: 47, 87 offset: 0, 0 index: -1 torso - rotate: true - xy: 279, 2 - size: 59, 108 - orig: 59, 108 + rotate: false + xy: 275, 440 + size: 98, 180 + orig: 98, 180 offset: 0, 0 index: -1 diff --git a/spine-cocos2d-objc/Resources/spineboy.json b/spine-cocos2d-objc/Resources/spineboy.json index 1ffa7aad5..88bafe6a7 100644 --- a/spine-cocos2d-objc/Resources/spineboy.json +++ b/spine-cocos2d-objc/Resources/spineboy.json @@ -1,39 +1,31 @@ { +"skeleton": { "hash": "rPoYyBLFG6F0CGZ5wsUEBKDJU9U", "spine": "3.3.07", "width": 470.71, "height": 731.57, "images": "./images/" }, "bones": [ { "name": "hip", "y": 247.47 }, - { "name": "front_thigh", "parent": "hip", "length": 74.8, "x": -17.45, "y": -11.64, "rotation": -95.51, "color": "00ff04ff" }, - { "name": "rear_thigh", "parent": "hip", "length": 85.71, "x": 8.91, "y": -5.62, "rotation": -72.54, "color": "ff000dff" }, - { "name": "torso", "parent": "hip", "length": 127.55, "x": -1.61, "y": 4.9, "rotation": 103.82, "color": "e0da19ff" }, - { - "name": "front_shin", - "parent": "front_thigh", - "length": 128.76, - "x": 78.69, - "y": 1.6, - "rotation": -2.21, - "inheritScale": false, - "color": "00ff04ff" - }, - { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "x": 103.75, "y": 19.32, "rotation": 168.37, "color": "00ff04ff" }, - { "name": "neck", "parent": "torso", "length": 25.45, "x": 127.49, "y": -0.3, "rotation": -31.53, "color": "e0da19ff" }, - { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "x": 86.1, "y": -1.32, "rotation": -19.83, "color": "ff000dff" }, - { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "x": 92.35, "y": -19.22, "rotation": -169.55, "color": "ff000dff" }, + { "name": "torso", "parent": "hip", "length": 127.55, "rotation": 103.82, "x": -1.61, "y": 4.9, "color": "e0da19ff" }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "rotation": 168.37, "x": 103.75, "y": 19.32, "color": "00ff04ff" }, { "name": "front_bracer", "parent": "front_upper_arm", "length": 40.57, + "rotation": 18.29, "x": 68.8, "y": -0.68, - "rotation": 18.29, "color": "00ff04ff" }, - { "name": "front_foot", "parent": "front_shin", "length": 91.34, "x": 128.75, "y": -0.33, "rotation": 77.9, "color": "00ff04ff" }, - { "name": "head", "parent": "neck", "length": 263.57, "x": 27.66, "y": -0.25, "rotation": 23.18, "color": "e0da19ff" }, - { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "x": 51.35, "rotation": 23.15, "color": "ff000dff" }, - { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "x": 121.45, "y": -0.75, "rotation": 69.3, "color": "ff000dff" }, - { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "x": 40.56, "y": 0.19, "rotation": 12.43, "color": "00ff04ff" }, - { "name": "gun", "parent": "rear_bracer", "length": 43.1, "x": 34.42, "y": -0.45, "rotation": 5.34, "color": "ff000dff" }, - { "name": "gunTip", "parent": "gun", "x": 201.04, "y": 52.13, "rotation": 6.83, "color": "ff000dff" } + { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "rotation": 12.43, "x": 40.56, "y": 0.19, "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.76, "rotation": -2.21, "x": 78.69, "y": 1.6, "color": "00ff04ff" }, + { "name": "front_foot", "parent": "front_shin", "length": 91.34, "rotation": 77.9, "x": 128.75, "y": -0.33, "color": "00ff04ff" }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -169.55, "x": 92.35, "y": -19.22, "color": "ff000dff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "rotation": 23.15, "x": 51.35, "color": "ff000dff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "rotation": 5.34, "x": 34.42, "y": -0.45, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.04, "y": 52.13, "color": "ff000dff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" }, + { "name": "head", "parent": "neck", "length": 263.57, "rotation": 23.18, "x": 27.66, "y": -0.25, "color": "e0da19ff" }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "rotation": -72.54, "x": 8.91, "y": -5.62, "color": "ff000dff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.83, "x": 86.1, "y": -1.32, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "rotation": 69.3, "x": 121.45, "y": -0.75, "color": "ff000dff" } ], "slots": [ { "name": "rear_upper_arm", "bone": "rear_upper_arm", "attachment": "rear_upper_arm" }, @@ -54,7 +46,8 @@ { "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", "additive": true } + { "name": "muzzle", "bone": "gunTip", "blend": "additive" }, + { "name": "head-bb", "bone": "head" } ], "skins": { "default": { @@ -92,6 +85,13 @@ "head": { "head": { "x": 128.95, "y": 0.29, "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.61, 285.16, 57.18, 120.77, 164.95, -5.06, 76.94 ] + } + }, "mouth": { "mouth_grind": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, @@ -1825,10 +1825,6 @@ ] }, "muzzle": { - "attachment": [ - { "time": 0.1333, "name": "muzzle" }, - { "time": 0.2666, "name": null } - ], "color": [ { "time": 0.1333, @@ -1841,6 +1837,10 @@ "curve": [ 0.821, 0, 0.909, 0.89 ] }, { "time": 0.2666, "color": "ffffff00" } + ], + "attachment": [ + { "time": 0.1333, "name": "muzzle" }, + { "time": 0.2666, "name": null } ] } }, @@ -2008,7 +2008,7 @@ ] } }, - "draworder": [ + "drawOrder": [ { "time": 0.6666, "offsets": [ diff --git a/spine-cocos2d-objc/Resources/spineboy.png b/spine-cocos2d-objc/Resources/spineboy.png index dce2fe3e2..c336b66f6 100644 Binary files a/spine-cocos2d-objc/Resources/spineboy.png and b/spine-cocos2d-objc/Resources/spineboy.png differ diff --git a/spine-cocos2d-objc/Resources/tank.atlas b/spine-cocos2d-objc/Resources/tank.atlas new file mode 100644 index 000000000..b925bb065 --- /dev/null +++ b/spine-cocos2d-objc/Resources/tank.atlas @@ -0,0 +1,125 @@ + +tank.png +size: 2048,2048 +format: RGBA8888 +filter: Linear,Linear +repeat: none +images/antenna + rotate: true + xy: 1295, 1730 + size: 22, 303 + orig: 22, 303 + offset: 0, 0 + index: -1 +images/cannon + rotate: true + xy: 504, 769 + size: 931, 58 + orig: 931, 58 + offset: 0, 0 + index: -1 +images/cannonConnector + rotate: false + xy: 564, 1239 + size: 112, 135 + orig: 112, 135 + offset: 0, 0 + index: -1 +images/guntower + rotate: false + xy: 1295, 1754 + size: 730, 289 + orig: 730, 289 + offset: 0, 0 + index: -1 +images/machinegun + rotate: true + xy: 504, 436 + size: 331, 57 + orig: 331, 57 + offset: 0, 0 + index: -1 +images/machinegun-mount + rotate: false + xy: 2, 2 + size: 72, 96 + orig: 72, 96 + offset: 0, 0 + index: -1 +images/rock + rotate: false + xy: 226, 358 + size: 252, 55 + orig: 252, 55 + offset: 0, 0 + index: -1 +images/tankBottom + rotate: true + xy: 226, 415 + size: 1285, 276 + orig: 1285, 276 + offset: 0, 0 + index: -1 +images/tankBottom-shadow + rotate: false + xy: 2, 1702 + size: 1291, 341 + orig: 1291, 341 + offset: 0, 0 + index: -1 +images/tankTop + rotate: true + xy: 2, 293 + size: 1407, 222 + orig: 1407, 222 + offset: 0, 0 + index: -1 +images/tread + rotate: false + xy: 226, 326 + size: 96, 30 + orig: 96, 30 + offset: 0, 0 + index: -1 +images/tread-inside + rotate: false + xy: 195, 263 + size: 25, 28 + orig: 25, 28 + offset: 0, 0 + index: -1 +images/wheel-big + rotate: false + xy: 2, 100 + size: 191, 191 + orig: 191, 191 + offset: 0, 0 + index: -1 +images/wheel-big-overlay + rotate: false + xy: 564, 1514 + size: 186, 186 + orig: 186, 186 + offset: 0, 0 + index: -1 +images/wheel-mid + rotate: false + xy: 564, 1376 + size: 136, 136 + orig: 136, 136 + offset: 0, 0 + index: -1 +images/wheel-mid-overlay + rotate: false + xy: 752, 1564 + size: 136, 136 + orig: 136, 136 + offset: 0, 0 + index: -1 +images/wheel-small + rotate: false + xy: 890, 1629 + size: 71, 71 + orig: 71, 71 + offset: 0, 0 + index: -1 diff --git a/spine-cocos2d-objc/Resources/tank.json b/spine-cocos2d-objc/Resources/tank.json new file mode 100644 index 000000000..c26ccbe47 --- /dev/null +++ b/spine-cocos2d-objc/Resources/tank.json @@ -0,0 +1,1899 @@ +{ +"skeleton": { "hash": "kgtyty1lpfv5JU2lygtFi2u3oQQ", "spine": "3.3.07", "width": 1914.53, "height": 964.05, "images": "" }, +"bones": [ + { "name": "root" }, + { "name": "tankRoot", "parent": "root", "y": 200 }, + { "name": "tankTreads", "parent": "tankRoot" }, + { "name": "tankBody", "parent": "tankTreads", "y": 10 }, + { "name": "guntower", "parent": "tankBody", "x": -21.72, "y": 245.47 }, + { "name": "antennaRoot", "parent": "guntower", "x": 164.6, "y": 202.52 }, + { "name": "antenna1", "parent": "antennaRoot", "length": 40, "rotation": 90, "y": 39.99, "color": "ffee00ff" }, + { "name": "antenna2", "parent": "antenna1", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna3", "parent": "antenna2", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna4", "parent": "antenna3", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna5", "parent": "antenna4", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna6", "parent": "antenna5", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "cannonConnector", "parent": "guntower", "x": -235.04, "y": 96.07 }, + { "name": "cannonTarget", "parent": "tankRoot", "x": -1486.66, "y": 351.82, "color": "ff3f00ff" }, + { "name": "cannon", "parent": "cannonConnector", "length": 946.68, "rotation": 180, "color": "ff4000ff" }, + { "name": "cannonTip", "parent": "cannon", "x": 946.68, "color": "ff4000ff" }, + { "name": "machineGunTarget", "parent": "tankRoot", "x": -1474, "y": 559.42, "color": "ff3f00ff" }, + { + "name": "machinegun-mount", + "parent": "guntower", + "length": 90.97, + "rotation": 90, + "x": -123.72, + "y": 218.32, + "color": "15ff00ff" + }, + { + "name": "machinegun", + "parent": "machinegun-mount", + "length": 208.94, + "rotation": 90, + "x": 91.52, + "y": -1.03, + "color": "15ff00ff" + }, + { "name": "machinegun-tip", "parent": "machinegun", "x": 210.42, "y": -12.2 }, + { "name": "rock", "parent": "root", "x": -656.45 }, + { + "name": "tread", + "parent": "tankRoot", + "length": 82, + "rotation": 180, + "x": -22.89, + "y": 213.85, + "scaleX": 0.993, + "color": "e64344ff" + }, + { "name": "tread2", "parent": "tread", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread3", "parent": "tread2", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread4", "parent": "tread3", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread5", "parent": "tread4", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread6", "parent": "tread5", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread7", "parent": "tread6", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread8", "parent": "tread7", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread9", "parent": "tread8", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread10", "parent": "tread9", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread11", "parent": "tread10", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread12", "parent": "tread11", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread13", "parent": "tread12", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread14", "parent": "tread13", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread15", "parent": "tread14", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread16", "parent": "tread15", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread17", "parent": "tread16", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread18", "parent": "tread17", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread19", "parent": "tread18", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread20", "parent": "tread19", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread21", "parent": "tread20", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread22", "parent": "tread21", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread23", "parent": "tread22", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread24", "parent": "tread23", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread25", "parent": "tread24", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread26", "parent": "tread25", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread27", "parent": "tread26", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread28", "parent": "tread27", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread29", "parent": "tread28", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread30", "parent": "tread29", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread31", "parent": "tread30", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread32", "parent": "tread31", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread33", "parent": "tread32", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread34", "parent": "tread33", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread35", "parent": "tread34", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread36", "parent": "tread35", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "wheel-midCenter", "parent": "tankRoot", "y": -114.56 }, + { "name": "treadCollider1", "parent": "wheel-midCenter", "x": -329.57, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider2", "parent": "wheel-midCenter", "x": -165.95, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider3", "parent": "wheel-midCenter", "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider4", "parent": "wheel-midCenter", "x": 163.56, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider5", "parent": "wheel-midCenter", "x": 329.12, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadGravity1", "parent": "tankRoot", "rotation": 180, "x": -175.35, "y": 109.99, "color": "ff00fbff" }, + { "name": "treadGravity2", "parent": "tankRoot", "rotation": 180, "x": 177.88, "y": 105.45, "color": "ff00fbff" }, + { "name": "wheel-bigRoot1", "parent": "tankTreads", "x": -549.59, "y": 14.39, "color": "abe323ff" }, + { "name": "wheel-big1", "parent": "wheel-bigRoot1", "x": -0.02, "color": "abe323ff" }, + { "name": "wheel-bigRoot2", "parent": "tankTreads", "x": 547.33, "y": 14.39 }, + { "name": "wheel-big2", "parent": "wheel-bigRoot2" }, + { "name": "wheel-midRoot1", "parent": "wheel-midCenter", "x": -410.57, "color": "abe323ff" }, + { "name": "wheel-mid1", "parent": "wheel-midRoot1", "color": "abe323ff" }, + { "name": "wheel-midRoot2", "parent": "wheel-midCenter", "x": -246.95 }, + { "name": "wheel-mid2", "parent": "wheel-midRoot2" }, + { "name": "wheel-midRoot3", "parent": "wheel-midCenter", "x": -82.72 }, + { "name": "wheel-mid3", "parent": "wheel-midRoot3" }, + { "name": "wheel-midRoot4", "parent": "wheel-midCenter", "x": 80.89 }, + { "name": "wheel-mid4", "parent": "wheel-midRoot4" }, + { "name": "wheel-midRoot5", "parent": "wheel-midCenter", "x": 244.51 }, + { "name": "wheel-mid5", "parent": "wheel-midRoot5" }, + { "name": "wheel-midRoot6", "parent": "wheel-midCenter", "x": 408.73 }, + { "name": "wheel-mid6", "parent": "wheel-midRoot6" }, + { "name": "wheel-smallRoot1", "parent": "tankTreads", "x": -337.38, "y": 109.43 }, + { "name": "wheel-small1", "parent": "wheel-smallRoot1", "color": "abe323ff" }, + { "name": "wheel-smallRoot2", "parent": "tankTreads", "x": 0.08, "y": 109.43 }, + { "name": "wheel-small2", "parent": "wheel-smallRoot2" }, + { "name": "wheel-smallRoot3", "parent": "tankTreads", "x": 334.68, "y": 109.43 }, + { "name": "wheel-small3", "parent": "wheel-smallRoot3" } +], +"slots": [ + { "name": "tankBody-shadow", "bone": "tankBody", "color": "ffffffb9", "attachment": "images/tankBottom-shadow" }, + { "name": "bottom", "bone": "tankBody", "attachment": "images/tankBottom" }, + { "name": "tread-inside1", "bone": "tread", "attachment": "images/tread-inside" }, + { "name": "tread-inside53", "bone": "tread27", "attachment": "images/tread-inside" }, + { "name": "tread-inside27", "bone": "tread14", "attachment": "images/tread-inside" }, + { "name": "tread-inside3", "bone": "tread2", "attachment": "images/tread-inside" }, + { "name": "tread-inside55", "bone": "tread28", "attachment": "images/tread-inside" }, + { "name": "tread-inside29", "bone": "tread15", "attachment": "images/tread-inside" }, + { "name": "tread-inside5", "bone": "tread3", "attachment": "images/tread-inside" }, + { "name": "tread-inside57", "bone": "tread29", "attachment": "images/tread-inside" }, + { "name": "tread-inside31", "bone": "tread16", "attachment": "images/tread-inside" }, + { "name": "tread-inside7", "bone": "tread4", "attachment": "images/tread-inside" }, + { "name": "tread-inside59", "bone": "tread30", "attachment": "images/tread-inside" }, + { "name": "tread-inside33", "bone": "tread17", "attachment": "images/tread-inside" }, + { "name": "tread-inside9", "bone": "tread5", "attachment": "images/tread-inside" }, + { "name": "tread-inside61", "bone": "tread31", "attachment": "images/tread-inside" }, + { "name": "tread-inside35", "bone": "tread18", "attachment": "images/tread-inside" }, + { "name": "tread-inside11", "bone": "tread6", "attachment": "images/tread-inside" }, + { "name": "tread-inside63", "bone": "tread32", "attachment": "images/tread-inside" }, + { "name": "tread-inside37", "bone": "tread19", "attachment": "images/tread-inside" }, + { "name": "tread-inside13", "bone": "tread7", "attachment": "images/tread-inside" }, + { "name": "tread-inside65", "bone": "tread33", "attachment": "images/tread-inside" }, + { "name": "tread-inside39", "bone": "tread20", "attachment": "images/tread-inside" }, + { "name": "tread-inside15", "bone": "tread8", "attachment": "images/tread-inside" }, + { "name": "tread-inside67", "bone": "tread34", "attachment": "images/tread-inside" }, + { "name": "tread-inside69", "bone": "tread35", "attachment": "images/tread-inside" }, + { "name": "tread-inside71", "bone": "tread36", "attachment": "images/tread-inside" }, + { "name": "tread-inside41", "bone": "tread21", "attachment": "images/tread-inside" }, + { "name": "tread-inside17", "bone": "tread9", "attachment": "images/tread-inside" }, + { "name": "tread-inside43", "bone": "tread22", "attachment": "images/tread-inside" }, + { "name": "tread-inside19", "bone": "tread10", "attachment": "images/tread-inside" }, + { "name": "tread-inside45", "bone": "tread23", "attachment": "images/tread-inside" }, + { "name": "tread-inside21", "bone": "tread11", "attachment": "images/tread-inside" }, + { "name": "tread-inside47", "bone": "tread24", "attachment": "images/tread-inside" }, + { "name": "tread-inside23", "bone": "tread12", "attachment": "images/tread-inside" }, + { "name": "tread-inside49", "bone": "tread25", "attachment": "images/tread-inside" }, + { "name": "tread-inside25", "bone": "tread13", "attachment": "images/tread-inside" }, + { "name": "tread-inside51", "bone": "tread26", "attachment": "images/tread-inside" }, + { "name": "tread-inside2", "bone": "tread", "attachment": "images/tread-inside" }, + { "name": "tread-inside54", "bone": "tread27", "attachment": "images/tread-inside" }, + { "name": "tread-inside28", "bone": "tread14", "attachment": "images/tread-inside" }, + { "name": "tread-inside4", "bone": "tread2", "attachment": "images/tread-inside" }, + { "name": "tread-inside56", "bone": "tread28", "attachment": "images/tread-inside" }, + { "name": "tread-inside30", "bone": "tread15", "attachment": "images/tread-inside" }, + { "name": "tread-inside6", "bone": "tread3", "attachment": "images/tread-inside" }, + { "name": "tread-inside58", "bone": "tread29", "attachment": "images/tread-inside" }, + { "name": "tread-inside32", "bone": "tread16", "attachment": "images/tread-inside" }, + { "name": "tread-inside8", "bone": "tread4", "attachment": "images/tread-inside" }, + { "name": "tread-inside60", "bone": "tread30", "attachment": "images/tread-inside" }, + { "name": "tread-inside34", "bone": "tread17", "attachment": "images/tread-inside" }, + { "name": "tread-inside10", "bone": "tread5", "attachment": "images/tread-inside" }, + { "name": "tread-inside62", "bone": "tread31", "attachment": "images/tread-inside" }, + { "name": "tread-inside36", "bone": "tread18", "attachment": "images/tread-inside" }, + { "name": "tread-inside12", "bone": "tread6", "attachment": "images/tread-inside" }, + { "name": "tread-inside64", "bone": "tread32", "attachment": "images/tread-inside" }, + { "name": "tread-inside38", "bone": "tread19", "attachment": "images/tread-inside" }, + { "name": "tread-inside14", "bone": "tread7", "attachment": "images/tread-inside" }, + { "name": "tread-inside66", "bone": "tread33", "attachment": "images/tread-inside" }, + { "name": "tread-inside40", "bone": "tread20", "attachment": "images/tread-inside" }, + { "name": "tread-inside16", "bone": "tread8", "attachment": "images/tread-inside" }, + { "name": "tread-inside68", "bone": "tread34", "attachment": "images/tread-inside" }, + { "name": "tread-inside70", "bone": "tread35", "attachment": "images/tread-inside" }, + { "name": "tread-inside72", "bone": "tread36", "attachment": "images/tread-inside" }, + { "name": "tread-inside42", "bone": "tread21", "attachment": "images/tread-inside" }, + { "name": "tread-inside18", "bone": "tread9", "attachment": "images/tread-inside" }, + { "name": "tread-inside44", "bone": "tread22", "attachment": "images/tread-inside" }, + { "name": "tread-inside20", "bone": "tread10", "attachment": "images/tread-inside" }, + { "name": "tread-inside46", "bone": "tread23", "attachment": "images/tread-inside" }, + { "name": "tread-inside22", "bone": "tread11", "attachment": "images/tread-inside" }, + { "name": "tread-inside48", "bone": "tread24", "attachment": "images/tread-inside" }, + { "name": "tread-inside24", "bone": "tread12", "attachment": "images/tread-inside" }, + { "name": "tread-inside50", "bone": "tread25", "attachment": "images/tread-inside" }, + { "name": "tread-inside26", "bone": "tread13", "attachment": "images/tread-inside" }, + { "name": "tread-inside52", "bone": "tread26", "attachment": "images/tread-inside" }, + { "name": "wheel-big", "bone": "wheel-big1", "color": "dbdbdbff", "attachment": "images/wheel-big" }, + { "name": "wheel-big2", "bone": "wheel-big2", "color": "dbdbdbff", "attachment": "images/wheel-big" }, + { "name": "wheel-mid", "bone": "wheel-mid1", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid2", "bone": "wheel-mid2", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid3", "bone": "wheel-mid3", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid4", "bone": "wheel-mid4", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid5", "bone": "wheel-mid5", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid6", "bone": "wheel-mid6", "attachment": "images/wheel-mid" }, + { "name": "wheel-small", "bone": "wheel-small1", "attachment": "images/wheel-small" }, + { "name": "wheel-small2", "bone": "wheel-small2", "attachment": "images/wheel-small" }, + { "name": "wheel-small3", "bone": "wheel-small3", "attachment": "images/wheel-small" }, + { + "name": "wheel-mid-overlay", + "bone": "wheel-midRoot1", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay2", + "bone": "wheel-midRoot2", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay3", + "bone": "wheel-midRoot3", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay4", + "bone": "wheel-midRoot4", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay5", + "bone": "wheel-midRoot5", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay6", + "bone": "wheel-midRoot6", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-big-overlay1", + "bone": "wheel-bigRoot1", + "color": "ffffffe9", + "attachment": "images/wheel-big-overlay", + "blend": "multiply" + }, + { + "name": "wheel-big-overlay2", + "bone": "wheel-bigRoot2", + "color": "ffffffe9", + "attachment": "images/wheel-big-overlay", + "blend": "multiply" + }, + { "name": "treads", "bone": "tankRoot", "attachment": "treads" }, + { "name": "tread", "bone": "tread", "color": "c0974fff", "attachment": "images/tread" }, + { "name": "tread27", "bone": "tread27", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread14", "bone": "tread14", "attachment": "images/tread" }, + { "name": "tread2", "bone": "tread2", "attachment": "images/tread" }, + { "name": "tread28", "bone": "tread28", "attachment": "images/tread" }, + { "name": "tread15", "bone": "tread15", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread3", "bone": "tread3", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread29", "bone": "tread29", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread16", "bone": "tread16", "attachment": "images/tread" }, + { "name": "tread4", "bone": "tread4", "attachment": "images/tread" }, + { "name": "tread30", "bone": "tread30", "attachment": "images/tread" }, + { "name": "tread17", "bone": "tread17", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread5", "bone": "tread5", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread31", "bone": "tread31", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread18", "bone": "tread18", "attachment": "images/tread" }, + { "name": "tread6", "bone": "tread6", "attachment": "images/tread" }, + { "name": "tread32", "bone": "tread32", "attachment": "images/tread" }, + { "name": "tread19", "bone": "tread19", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread7", "bone": "tread7", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread33", "bone": "tread33", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread20", "bone": "tread20", "attachment": "images/tread" }, + { "name": "tread8", "bone": "tread8", "attachment": "images/tread" }, + { "name": "tread34", "bone": "tread34", "attachment": "images/tread" }, + { "name": "tread35", "bone": "tread35", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread36", "bone": "tread36", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread21", "bone": "tread21", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread9", "bone": "tread9", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread22", "bone": "tread22", "attachment": "images/tread" }, + { "name": "tread10", "bone": "tread10", "attachment": "images/tread" }, + { "name": "tread23", "bone": "tread23", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread11", "bone": "tread11", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread24", "bone": "tread24", "attachment": "images/tread" }, + { "name": "tread12", "bone": "tread12", "attachment": "images/tread" }, + { "name": "tread25", "bone": "tread25", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread13", "bone": "tread13", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread26", "bone": "tread26", "attachment": "images/tread" }, + { "name": "rock", "bone": "rock", "attachment": "images/rock" }, + { "name": "machinegun", "bone": "machinegun", "attachment": "images/machinegun" }, + { "name": "machinegun-mount", "bone": "machinegun-mount", "attachment": "images/machinegun-mount" }, + { "name": "tankTop", "bone": "tankBody", "attachment": "images/tankTop" }, + { "name": "guntower", "bone": "guntower", "attachment": "images/guntower" }, + { "name": "cannon", "bone": "cannon", "attachment": "images/cannon" }, + { "name": "cannonConnector", "bone": "cannonConnector", "attachment": "images/cannonConnector" }, + { "name": "antenna", "bone": "antennaRoot", "attachment": "images/antenna" } +], +"ik": [ + { + "name": "cannonTarget", + "bones": [ "cannon" ], + "target": "cannonTarget" + }, + { + "name": "machineGunTarget", + "bones": [ "machinegun" ], + "target": "machineGunTarget", + "mix": 0 + } +], +"transform": [ + { + "name": "wheel-big", + "bones": [ "wheel-big2" ], + "target": "wheel-big1", + "rotation": 65.6, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid1", + "bones": [ "wheel-mid2", "wheel-mid4" ], + "target": "wheel-mid1", + "rotation": 93, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid2", + "bones": [ "wheel-mid3", "wheel-mid5" ], + "target": "wheel-mid1", + "rotation": -89, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid3", + "bones": [ "wheel-mid6" ], + "target": "wheel-mid1", + "rotation": -152.6, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-small1", + "bones": [ "wheel-small2" ], + "target": "wheel-small1", + "rotation": 87, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-small2", + "bones": [ "wheel-small3" ], + "target": "wheel-small1", + "rotation": 54.9, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + } +], +"path": [ + { + "name": "treads", + "bones": [ + "tread", + "tread2", + "tread3", + "tread4", + "tread5", + "tread6", + "tread7", + "tread8", + "tread9", + "tread10", + "tread11", + "tread12", + "tread13", + "tread14", + "tread15", + "tread16", + "tread17", + "tread18", + "tread19", + "tread20", + "tread21", + "tread22", + "tread23", + "tread24", + "tread25", + "tread26", + "tread27", + "tread28", + "tread29", + "tread30", + "tread31", + "tread32", + "tread33", + "tread34", + "tread35", + "tread36" + ], + "target": "treads", + "rotateMode": "chain" + } +], +"skins": { + "default": { + "antenna": { + "images/antenna": { + "type": "mesh", + "uvs": [ 0.64286, 0.07875, 0.65354, 0.15349, 0.66324, 0.22137, 0.67367, 0.29433, 0.68383, 0.36543, 0.69359, 0.43374, 0.7031, 0.50029, 0.71311, 0.5703, 0.72327, 0.64138, 0.73406, 0.71688, 0.7444, 0.78929, 0.75614, 0.8714, 0.76905, 0.9431, 1, 0.9431, 1, 1, 0, 1, 0, 0.9431, 0.20105, 0.9431, 0.20105, 0.87093, 0.21461, 0.78846, 0.22651, 0.71606, 0.23885, 0.64098, 0.25035, 0.57104, 0.26206, 0.49983, 0.27306, 0.4329, 0.2843, 0.36453, 0.29592, 0.29381, 0.308, 0.22037, 0.319, 0.15345, 0.33141, 0.07795, 0.34423, 0, 0.6316, 0 ], + "triangles": [ 30, 31, 0, 29, 30, 0, 29, 0, 1, 28, 29, 1, 28, 1, 2, 27, 28, 2, 27, 2, 3, 26, 3, 4, 25, 26, 4, 25, 4, 5, 26, 27, 3, 24, 5, 6, 23, 24, 6, 7, 23, 6, 24, 25, 5, 22, 7, 8, 21, 22, 8, 21, 8, 9, 7, 22, 23, 20, 9, 10, 19, 20, 10, 20, 21, 9, 19, 10, 11, 18, 19, 11, 17, 18, 11, 17, 11, 12, 15, 16, 17, 12, 13, 14, 15, 17, 12, 14, 15, 12 ], + "vertices": [ 2, 10, 65.37999, -3.14, 0.3125, 11, 23.38, -3.14, 0.6875, 3, 9, 84.73, -3.37, 0.0625, 10, 42.73, -3.37, 0.625, 11, 0.73, -3.37, 0.3125, 3, 9, 64.16, -3.59, 0.3125, 10, 22.16, -3.59, 0.625, 11, -19.83, -3.59, 0.0625, 3, 8, 84.06, -3.82, 0.0625, 9, 42.06, -3.82, 0.625, 10, 0.06, -3.82, 0.3125, 3, 8, 62.51, -4.04, 0.3125, 9, 20.51, -4.04, 0.625, 10, -21.48, -4.04, 0.0625, 3, 7, 83.81, -4.25, 0.0625, 8, 41.81, -4.25, 0.625, 9, -0.18, -4.25, 0.3125, 3, 7, 63.65, -4.46, 0.3125, 8, 21.65, -4.46, 0.625, 9, -20.34, -4.46, 0.0625, 3, 6, 84.43, -4.67999, 0.0625, 7, 42.43, -4.67999, 0.625, 8, 0.43, -4.67999, 0.3125, 3, 6, 62.9, -4.91, 0.3125, 7, 20.9, -4.91, 0.625, 8, -21.09, -4.91, 0.0625, 3, 5, 5.14, 80.01999, 0.0625, 6, 40.02, -5.14, 0.625, 7, -1.97, -5.14, 0.3125, 3, 5, 5.37, 58.08, 0.375, 6, 18.08, -5.37, 0.5625, 7, -23.91, -5.37, 0.0625, 1, 5, 5.63, 33.2, 1, 1, 5, 5.91, 11.48, 1, 1, 5, 11, 11.48, 1, 1, 5, 10.99, -5.75, 1, 1, 5, -11, -5.75, 1, 1, 5, -10.99, 11.48, 1, 1, 5, -6.57, 11.48, 1, 1, 5, -6.57, 33.34, 1, 3, 5, -6.27, 58.33, 0.375, 6, 18.33, 6.27, 0.5625, 7, -23.66, 6.27, 0.0625, 3, 5, -6.01, 80.26999, 0.0625, 6, 40.27, 6.01, 0.625, 7, -1.72, 6.01, 0.3125, 3, 6, 63.02, 5.74, 0.3125, 7, 21.02, 5.74, 0.625, 8, -20.96999, 5.74, 0.0625, 3, 6, 84.21, 5.49, 0.0625, 7, 42.21, 5.49, 0.625, 8, 0.21, 5.49, 0.3125, 3, 7, 63.79, 5.23, 0.3125, 8, 21.79, 5.23, 0.625, 9, -20.2, 5.23, 0.0625, 3, 7, 84.07, 4.98999, 0.0625, 8, 42.07, 4.98999, 0.625, 9, 0.07, 4.98999, 0.3125, 3, 8, 62.78, 4.73999, 0.3125, 9, 20.78, 4.73999, 0.625, 10, -21.21, 4.73999, 0.0625, 3, 8, 84.21, 4.48, 0.0625, 9, 42.21, 4.48, 0.625, 10, 0.21, 4.48, 0.3125, 3, 9, 64.46, 4.21999, 0.3125, 10, 22.46, 4.21999, 0.625, 11, -19.53, 4.21999, 0.0625, 3, 9, 84.74, 3.98, 0.0625, 10, 42.74, 3.98, 0.625, 11, 0.74, 3.98, 0.3125, 2, 10, 65.62, 3.7, 0.3125, 11, 23.62, 3.7, 0.6875, 1, 11, 47.24, 3.42, 1, 1, 11, 47.24, -2.89, 1 ], + "hull": 32, + "edges": [ 28, 30, 28, 26, 30, 32, 26, 24, 24, 22, 32, 34, 34, 24, 34, 36, 36, 22, 60, 62, 38, 36, 20, 22, 38, 20, 40, 38, 18, 20, 40, 18, 42, 40, 16, 18, 42, 16, 44, 42, 14, 16, 44, 14, 46, 44, 12, 14, 46, 12, 48, 46, 10, 12, 48, 10, 50, 48, 8, 10, 50, 8, 52, 50, 6, 8, 52, 6, 54, 52, 4, 6, 54, 4, 56, 54, 2, 4, 56, 2, 60, 58, 58, 56, 62, 0, 0, 2, 58, 0 ], + "width": 22, + "height": 303 + } + }, + "bottom": { + "images/tankBottom": { "x": -16.66, "y": 9.89, "width": 1285, "height": 276 } + }, + "cannon": { + "images/cannon": { "x": 481.95, "y": -0.02, "rotation": 179.99, "width": 931, "height": 58 } + }, + "cannonConnector": { + "images/cannonConnector": { + "type": "mesh", + "uvs": [ 1, 0.03236, 1, 0.10602, 0.90987, 0.32859, 0.81975, 0.55116, 0.72962, 0.77372, 0.6395, 0.99629, 0.42157, 0.99629, 0.20364, 0.99629, 0, 0.85433, 0, 0.69901, 0.02267, 0.52884, 0, 0.31444, 0.21601, 0.12998, 0.43367, 0, 0.63546, 0.0037, 0.48407, 0.77059, 0.31496, 0.52496, 0.64132, 0.19648, 0.21516, 0.76765, 0.58345, 0.5647, 0.68444, 0.40146, 0.46758, 0.36649, 0.28934, 0.34603 ], + "triangles": [ 21, 22, 12, 11, 12, 22, 17, 21, 13, 17, 13, 14, 21, 12, 13, 21, 17, 20, 16, 22, 21, 10, 11, 22, 10, 22, 16, 19, 21, 20, 16, 21, 19, 18, 10, 16, 9, 10, 18, 15, 16, 19, 18, 16, 15, 8, 9, 18, 7, 8, 18, 6, 18, 15, 7, 18, 6, 14, 0, 1, 17, 14, 1, 2, 17, 1, 20, 17, 2, 3, 20, 2, 19, 20, 3, 4, 19, 3, 15, 19, 4, 5, 15, 4, 6, 15, 5 ], + "vertices": [ 1, 12, 35.91, 69.08, 1, 1, 12, 35.91, 59.13, 1, 1, 12, 25.81, 29.09, 1, 1, 12, 15.72, -0.95, 1, 1, 12, 5.63, -31, 1, 1, 12, -4.46, -61.04, 1, 2, 12, -28.87, -61.04, 0.33333, 14, 28.87, 61.03, 0.66666, 1, 14, 53.27, 61.01, 1, 1, 14, 76.08, 41.83, 1, 1, 14, 71.17, 21.62, 1, 1, 14, 72.83, -1.62, 1, 1, 14, 70.37, -29.12, 1, 1, 14, 50.66, -56.13, 1, 2, 12, -28.43, 74.37, 0.41, 14, 28.43, -74.39, 0.58999, 2, 12, -4.91, 72.94999, 0.52, 14, 4.91, -72.94999, 0.48, 2, 12, -21.87, -30.57, 0.49, 14, 21.87, 30.56, 0.51, 1, 14, 40.81, -2.59999, 1, 2, 12, -4.25, 46.92, 0.49, 14, 4.25, -46.92, 0.51, 1, 14, 51.98, 30.15, 1, 2, 12, -10.74, -2.78, 0.49, 14, 10.74, 2.77, 0.51, 2, 12, 0.56, 19.25, 0.49, 14, -0.56, -19.25, 0.51, 1, 14, 23.71, -23.98, 1, 1, 14, 43.68, -26.76, 1 ], + "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, 28, 0 ], + "width": 112, + "height": 135 + } + }, + "guntower": { + "images/guntower": { "x": 77.22, "y": 122.58, "width": 730, "height": 289 } + }, + "machinegun": { + "images/machinegun": { "x": 44.85, "y": -5.72, "rotation": -180, "width": 331, "height": 57 } + }, + "machinegun-mount": { + "images/machinegun-mount": { "x": 47.42, "y": -1.53, "rotation": -90, "width": 72, "height": 96 } + }, + "rock": { + "images/rock": { "color": "404040ff", "x": 25.23, "y": 27.35, "width": 252, "height": 55 } + }, + "tankBody-shadow": { + "images/tankBottom-shadow": { "x": -11.43, "y": -42.88, "width": 1291, "height": 341 } + }, + "tankTop": { + "images/tankTop": { "x": 6.8, "y": 168.71, "width": 1407, "height": 222 } + }, + "tread": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread-inside1": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside10": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside11": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside12": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside13": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside14": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside15": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside16": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside17": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside18": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside19": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside2": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside20": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside21": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside22": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside23": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside24": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside25": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside26": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside27": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside28": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside29": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside3": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside30": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside31": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside32": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside33": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside34": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside35": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside36": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside37": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside38": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside39": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside4": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside40": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside41": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside42": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside43": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside44": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside45": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside46": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside47": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside48": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside49": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside5": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside50": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside51": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside52": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside53": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside54": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside55": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside56": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside57": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside58": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside59": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside6": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside60": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside61": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside62": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside63": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside64": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside65": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside66": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside67": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside68": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside69": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside7": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside70": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside71": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside72": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside8": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside9": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread10": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread11": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread12": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread13": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread14": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread15": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread16": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread17": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread18": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread19": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread2": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread20": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread21": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread22": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread23": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread24": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread25": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread26": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread27": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread28": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread29": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread3": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread30": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread31": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread32": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread33": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread34": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread35": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread36": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread4": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread5": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread6": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread7": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread8": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread9": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "treads": { + "treads": { + "type": "path", + "closed": true, + "lengths": [ 182.41, 349, 472.77, 602.99, 780.46, 1052.96, 1133.44, 1218.43, 1298.34, 1382.7, 1465.57, 1546.11, 1628.02, 1707.73, 1794.36, 1876.75, 2158.69, 2321.34, 2438.56, 2579.42, 2745.35, 2919.23 ], + "vertexCount": 66, + "vertices": [ 1, 83, 11.23, 41.86, 1, 1, 83, 0.78, 41.93999, 1, 1, 83, -34.72, 42.23, 1, 1, 63, -104.21, 0.41, 1, 1, 63, 0.07, 0.55, 1, 1, 63, 68.8, 0.64, 1, 1, 81, 20.5, 43.47, 1, 1, 81, 1.13, 40.81, 1, 1, 81, -27.38, 36.84, 1, 1, 65, 147.06, 105, 1, 1, 65, 96.21, 96.63, 1, 1, 65, 43.87, 87.71, 1, 1, 65, 16.18, 103.34, 1, 1, 65, -33.66999, 94.2, 1, 1, 65, -99.35, 81.25, 1, 1, 65, -122.04, -1.69, 1, 1, 65, -83.58, -47.92, 1, 1, 65, -33.53, -109.36, 1, 1, 69, -83.56, -66.08999, 1, 1, 69, -2.16, -67.89, 1, 2, 69, 56.68, -41.48, 0.67999, 58, -24.31, -41.49, 0.32, 1, 58, -26.58, 16.69, 1, 1, 58, -2.69, 16.69, 1, 1, 58, 13.51, 16.69, 1, 2, 71, -52.41, -46.51, 0.74399, 58, 30.2, -46.51, 0.256, 1, 71, -0.32, -68.92, 1, 2, 71, 52.09, -44.72, 0.712, 59, -28.9, -44.73, 0.28799, 1, 59, -22.8, 16.24, 1, 1, 59, -1.42, 16.24, 1, 1, 59, 20.46999, 16.24, 1, 2, 73, -47.21, -47.45, 0.744, 59, 36.00999, -47.46, 0.25599, 1, 73, -0.28, -69.65, 1, 2, 73, 45.23, -47.26, 0.736, 60, -37.48, -47.26, 0.26399, 1, 60, -23.76, 15.27, 1, 1, 60, -0.13, 15.27, 1, 1, 60, 24.45, 15.27, 1, 2, 75, -47.36, -48.7, 0.74399, 60, 33.52, -48.7, 0.256, 1, 75, -0.49, -70.39, 1, 2, 75, 49.09, -48.33, 0.744, 61, -33.57, -48.34, 0.25599, 1, 61, -20.89, 15.83, 1, 1, 61, -1.25, 15.83, 1, 1, 61, 15.78, 15.83, 1, 2, 77, -52.49, -48.21, 0.75999, 61, 28.45, -48.21, 0.24, 1, 77, -2.5, -68.92, 1, 2, 77, 55.72, -47.82, 0.752, 62, -28.88, -47.82, 0.248, 1, 62, -21.64, 16.69, 1, 1, 62, -0.48, 16.69, 1, 1, 62, 20.73, 16.69, 1, 2, 79, -53.65, -48.89, 0.76, 62, 25.96, -48.89, 0.23999, 1, 79, 2.27, -69.65, 1, 1, 79, 44.94, -69.74, 1, 1, 65, 1172.98, -85.6, 1, 1, 65, 1190.53, -42.24, 1, 1, 65, 1215.63, 19.75, 1, 1, 65, 1175.55, 76.62, 1, 1, 65, 1134.22, 95.07, 1, 1, 65, 1128.4, 97.66, 1, 1, 65, 1081.79, 87.47, 1, 1, 65, 1017.16, 92.52, 1, 1, 65, 977.9, 95.58, 1, 1, 85, 47.07, 42.29, 1, 1, 85, 0.24, 42.74, 1, 1, 85, -29.63, 43.28, 1, 1, 64, -86.64, 1.35, 1, 1, 64, 0.49, 0.25, 1, 1, 64, 92.42, -0.89, 1 ] + } + }, + "wheel-big": { + "images/wheel-big": { "width": 191, "height": 191 } + }, + "wheel-big-overlay1": { + "images/wheel-big-overlay": { "width": 186, "height": 186 } + }, + "wheel-big-overlay2": { + "images/wheel-big-overlay": { "width": 186, "height": 186 } + }, + "wheel-big2": { + "images/wheel-big": { "width": 191, "height": 191 } + }, + "wheel-mid": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay2": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay3": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay4": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay5": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay6": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid2": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid3": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid4": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid5": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid6": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-small": { + "images/wheel-small": { "width": 71, "height": 71 } + }, + "wheel-small2": { + "images/wheel-small": { "width": 71, "height": 71 } + }, + "wheel-small3": { + "images/wheel-small": { "width": 71, "height": 71 } + } + } +}, +"animations": { + "drive": { + "bones": { + "tankRoot": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.549, 0, 0.907, 0.84 ] + }, + { + "time": 3.0333, + "x": -1426.14, + "y": 0, + "curve": [ 0.211, 0.23, 0.851, 0.92 ] + }, + { + "time": 4.8666, + "x": -2806.98, + "y": 0, + "curve": [ 0.253, 0.27, 0.625, 0.94 ] + }, + { "time": 5.3333, "x": -2903.34, "y": 0 } + ] + }, + "wheel-midRoot1": { + "translate": [ + { "time": 0.7666, "x": 0, "y": 0 }, + { + "time": 1.1666, + "x": 0, + "y": 50.95, + "curve": [ 0.633, 0, 0.907, 0.82 ] + }, + { "time": 1.5666, "x": 0, "y": 0 } + ] + }, + "treadCollider1": { + "rotate": [ + { "time": 1.1, "angle": 0 }, + { "time": 1.2333, "angle": -19.78 }, + { "time": 1.4666, "angle": 0 }, + { "time": 1.6, "angle": 28.87 }, + { "time": 1.8, "angle": 0 } + ], + "translate": [ + { "time": 1.1, "x": 0, "y": 0 }, + { + "time": 1.4666, + "x": 0, + "y": 58.66, + "curve": [ 0.352, 0, 0.828, 0.92 ] + }, + { "time": 1.8, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot2": { + "translate": [ + { "time": 1.2666, "x": 0, "y": 0 }, + { + "time": 1.6333, + "x": 0, + "y": 55.07, + "curve": [ 0.889, 0.01, 0.843, 0.81 ] + }, + { "time": 1.9333, "x": 0, "y": 0 } + ] + }, + "treadCollider2": { + "rotate": [ + { "time": 1.5333, "angle": 0 }, + { "time": 1.6333, "angle": -18.67 }, + { "time": 1.8, "angle": 0 }, + { "time": 1.9, "angle": 29.49 }, + { "time": 2.0666, "angle": 0 } + ], + "translate": [ + { + "time": 1.5333, + "x": 0, + "y": 0, + "curve": [ 0.16, 0.25, 0.813, 0.82 ] + }, + { + "time": 1.8, + "x": 0, + "y": 59.03, + "curve": [ 0.376, 0.26, 0.879, 0.79 ] + }, + { "time": 2.0666, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot3": { + "translate": [ + { "time": 1.6666, "x": 0, "y": 0 }, + { + "time": 1.9333, + "x": 0, + "y": 60.17, + "curve": [ 0.544, 0, 0.838, 0.77 ] + }, + { "time": 2.2, "x": 0, "y": 0 } + ] + }, + "treadCollider3": { + "rotate": [ + { "time": 1.8666, "angle": 0 }, + { "time": 1.9333, "angle": -20.16 }, + { "time": 2.0666, "angle": 0.57 }, + { "time": 2.1666, "angle": 33.66 }, + { "time": 2.3333, "angle": 0 } + ], + "translate": [ + { "time": 1.8666, "x": 0, "y": 0 }, + { + "time": 2.0666, + "x": 0, + "y": 61.53, + "curve": [ 0.582, 0, 0.836, 0.77 ] + }, + { "time": 2.3333, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot4": { + "translate": [ + { "time": 1.9333, "x": 0, "y": 0 }, + { + "time": 2.2, + "x": 0, + "y": 58.89, + "curve": [ 0.48, 0, 0.75, 1 ] + }, + { "time": 2.4666, "x": 0, "y": 0 } + ] + }, + "treadCollider4": { + "rotate": [ + { "time": 2.1333, "angle": 0 }, + { "time": 2.2, "angle": -20.43 }, + { "time": 2.3333, "angle": 4.49 }, + { "time": 2.4333, "angle": 35.87 }, + { "time": 2.5666, "angle": 0 } + ], + "translate": [ + { + "time": 2.1333, + "x": 0, + "y": 0, + "curve": [ 0.191, 0.49, 0.75, 1 ] + }, + { "time": 2.3333, "x": 0, "y": 66.64 }, + { "time": 2.5666, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot5": { + "translate": [ + { "time": 2.2, "x": 0, "y": 0 }, + { "time": 2.4333, "x": 0, "y": 60.26 }, + { "time": 2.7, "x": 0, "y": 0 } + ] + }, + "treadCollider5": { + "rotate": [ + { "time": 2.3333, "angle": 0 }, + { "time": 2.4333, "angle": -23.6 }, + { "time": 2.5666, "angle": 6.49 }, + { "time": 2.6666, "angle": 29.93 }, + { "time": 2.8, "angle": -0.13 } + ], + "translate": [ + { "time": 2.3333, "x": 0, "y": 0 }, + { "time": 2.4333, "x": 0, "y": 36.34 }, + { "time": 2.5, "x": 0, "y": 56.39 }, + { "time": 2.5666, "x": 0, "y": 61.34 }, + { "time": 2.8, "x": 0, "y": 2.04 } + ] + }, + "wheel-midRoot6": { + "translate": [ + { + "time": 2.4333, + "x": 0, + "y": 0, + "curve": [ 0.19, 0.26, 0.804, 0.8 ] + }, + { + "time": 2.6333, + "x": 0, + "y": 51.86, + "curve": [ 0.346, 0, 0.852, 0.7 ] + }, + { "time": 2.8, "x": 0, "y": 0 } + ] + }, + "wheel-mid1": { + "rotate": [ + { + "time": 0, + "angle": 21, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 0.8, "angle": 120 }, + { "time": 1.2333, "angle": 240 }, + { "time": 1.6, "angle": 0 }, + { "time": 1.9, "angle": 120 }, + { "time": 2.1666, "angle": 240 }, + { "time": 2.4, "angle": 0 }, + { "time": 2.5666, "angle": 120 }, + { "time": 2.7333, "angle": 240 }, + { "time": 2.9333, "angle": 0 }, + { "time": 3.1, "angle": 120 }, + { "time": 3.2666, "angle": 240 }, + { "time": 3.4333, "angle": 0 }, + { "time": 3.6333, "angle": 120 }, + { "time": 3.8, "angle": 240 }, + { "time": 3.9666, "angle": 0 }, + { "time": 4.1666, "angle": 120 }, + { "time": 4.3333, "angle": 240 }, + { "time": 4.5, "angle": 0 }, + { "time": 4.7, "angle": 120 }, + { "time": 4.8666, "angle": 240 }, + { "time": 5.2666, "angle": -67.99 } + ] + }, + "tankTreads": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.145, 0.34, 0.75, 1 ] + }, + { "time": 1.1, "angle": -3.9 }, + { "time": 1.3333, "angle": -2.37 }, + { "time": 1.6333, "angle": -3.54 }, + { "time": 2.1666, "angle": 0.27 }, + { + "time": 2.4666, + "angle": 2.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.7, + "angle": 3.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3, "angle": -3.62 }, + { "time": 3.2333, "angle": -1.23, "curve": "stepped" }, + { + "time": 4.8666, + "angle": -1.23, + "curve": [ 0.188, 0.16, 0.75, 1 ] + }, + { + "time": 5.2, + "angle": 4.47, + "curve": [ 0.416, 0.01, 0.75, 1 ] + }, + { + "time": 5.5666, + "angle": -3.08, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 5.8333, "angle": -1.23 } + ] + }, + "wheel-big1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 1.1, "angle": 120 }, + { "time": 1.5333, "angle": 240 }, + { "time": 1.8, "angle": 360 }, + { "time": 2.0333, "angle": 120 }, + { "time": 2.2666, "angle": 240 }, + { "time": 2.4666, "angle": 360 }, + { "time": 2.7, "angle": 120 }, + { "time": 2.9333, "angle": 240 }, + { "time": 3.1333, "angle": 360 }, + { "time": 3.3666, "angle": 120 }, + { "time": 3.5666, "angle": 240 }, + { "time": 3.8, "angle": -24 }, + { "time": 4.0333, "angle": 120 }, + { "time": 4.2333, "angle": 240 }, + { "time": 4.4666, "angle": -24 }, + { "time": 4.7, "angle": 120 }, + { "time": 4.8666, "angle": -143.99 }, + { + "time": 5.0666, + "angle": -131.4, + "curve": [ 0.14, 0.25, 0.75, 1 ] + }, + { "time": 5.6666, "angle": -76.85 }, + { "time": 5.8333, "angle": -72.3 } + ] + }, + "treadGravity1": { + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.4666, "x": 0, "y": 0 }, + { "time": 1.8, "x": 0, "y": 29.44 }, + { "time": 2.3333, "x": 0, "y": -0.52 }, + { "time": 2.5666, "x": 0, "y": 5.2 }, + { "time": 2.6666, "x": 0, "y": -11.05, "curve": "stepped" }, + { "time": 4.8666, "x": 0, "y": -11.05 }, + { "time": 5.0666, "x": 0, "y": -1.91 }, + { "time": 5.5333, "x": 0, "y": -6.9 }, + { "time": 5.7333, "x": 0, "y": -11.05 } + ] + }, + "treadGravity2": { + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.4666, "x": 0, "y": 0 }, + { "time": 1.8, "x": 0, "y": 8.5 }, + { "time": 2.3333, "x": 0, "y": 34.74 }, + { "time": 2.5666, "x": 0, "y": 5.2 }, + { "time": 2.6666, "x": 0, "y": -11.05, "curve": "stepped" }, + { "time": 4.8666, "x": 0, "y": -11.05 }, + { "time": 5.0666, "x": 0, "y": 3.9 }, + { "time": 5.5333, "x": 0, "y": -6.9 }, + { "time": 5.7333, "x": 0, "y": -11.05 } + ] + }, + "wheel-small1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 0.7, "angle": 120 }, + { "time": 1.1, "angle": 240 }, + { "time": 1.4666, "angle": 360 }, + { "time": 1.7666, "angle": 120 }, + { "time": 2.0333, "angle": 240 }, + { "time": 2.2666, "angle": 360 }, + { "time": 2.4333, "angle": 120 }, + { "time": 2.5666, "angle": 240 }, + { "time": 2.7, "angle": 360 }, + { "time": 2.8333, "angle": 120 }, + { "time": 2.9666, "angle": 240 }, + { "time": 3.1, "angle": 360 }, + { "time": 3.2333, "angle": 120 }, + { "time": 3.3666, "angle": 240 }, + { "time": 3.5, "angle": 360 }, + { "time": 3.6333, "angle": 120 }, + { "time": 3.7666, "angle": 240 }, + { "time": 3.9, "angle": 360 }, + { "time": 4.0333, "angle": 120 }, + { "time": 4.1666, "angle": 240 }, + { "time": 4.3, "angle": 360 }, + { "time": 4.4333, "angle": 120 }, + { "time": 4.5666, "angle": 240 }, + { "time": 4.7, "angle": 360 }, + { "time": 4.8333, "angle": 120 }, + { "time": 5, "angle": 240 }, + { + "time": 5.2, + "angle": -25.64, + "curve": [ 0.181, 0.26, 0.75, 1 ] + }, + { "time": 5.5666, "angle": 90 } + ] + }, + "tankBody": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.1666, + "angle": -1.41, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.9333, + "angle": -0.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3, + "angle": 0.84, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -2.33, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.4666, + "angle": -0.45, + "curve": [ 0.329, 0.32, 0.757, 1 ] + }, + { + "time": 4.8666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3333, + "angle": 1.82, + "curve": [ 0.324, 0.01, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -1.15, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.0333, "angle": 0 } + ] + }, + "antenna1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna4": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna5": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna6": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "machinegun": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 2.8333, + "angle": 0, + "curve": [ 0.183, 0.17, 0.75, 1 ] + }, + { + "time": 3, + "angle": -4.43, + "curve": [ 0.156, 0.16, 0.75, 1 ] + }, + { + "time": 3.1666, + "angle": -2.93, + "curve": [ 0.156, 0.16, 0.75, 1 ] + }, + { + "time": 4.8333, + "angle": 0, + "curve": [ 0.183, 0.17, 0.75, 1 ] + }, + { + "time": 5.1666, + "angle": -6.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.4, + "angle": 6.15, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 5.6, "angle": -1.26 } + ] + }, + "cannon": { + "rotate": [ + { "time": 0, "angle": 0 } + ] + }, + "cannonTarget": { + "translate": [ + { + "time": 5, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.3333, "x": -15.38, "y": 99.99 } + ] + } + }, + "ik": { + "cannonTarget": [ + { "time": 0, "mix": 0.809, "curve": "stepped" }, + { "time": 4.7333, "mix": 0.809 }, + { "time": 5.1666, "mix": 0.504 }, + { "time": 5.6666 } + ] + }, + "paths": { + "treads": { + "position": [ + { + "time": 0, + "curve": [ 0.549, 0, 0.907, 0.84 ] + }, + { "time": 3.0333, "position": 0.51 }, + { "time": 4.8666, "position": 0.9794 }, + { + "time": 5.2666, + "position": 1, + "curve": [ 0.226, 0.15, 0.765, 0.96 ] + }, + { + "time": 5.5333, + "position": 1.02, + "curve": [ 0.279, 0.32, 0.694, 0.99 ] + }, + { "time": 5.8333, "position": 1.021 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-cocos2d-objc/Resources/tank.png b/spine-cocos2d-objc/Resources/tank.png new file mode 100644 index 000000000..9811ee418 Binary files /dev/null and b/spine-cocos2d-objc/Resources/tank.png differ diff --git a/spine-cocos2d-objc/example/GoblinsExample.m b/spine-cocos2d-objc/example/GoblinsExample.m index 58735c55a..a2e9a1e84 100644 --- a/spine-cocos2d-objc/example/GoblinsExample.m +++ b/spine-cocos2d-objc/example/GoblinsExample.m @@ -30,7 +30,7 @@ *****************************************************************************/ #import "GoblinsExample.h" -#import "SpineboyExample.h" +#import "RaptorExample.h" @implementation GoblinsExample @@ -65,7 +65,7 @@ else if (skeletonNode.timeScale == 1) skeletonNode.timeScale = 0.3f; else - [[CCDirector sharedDirector] replaceScene:[SpineboyExample scene]]; + [[CCDirector sharedDirector] replaceScene:[RaptorExample scene]]; } #endif diff --git a/spine-csharp/src/Attachments/IFfdAttachment.cs b/spine-cocos2d-objc/example/RaptorExample.h similarity index 88% rename from spine-csharp/src/Attachments/IFfdAttachment.cs rename to spine-cocos2d-objc/example/RaptorExample.h index bdc87f7de..1951c6e8c 100644 --- a/spine-csharp/src/Attachments/IFfdAttachment.cs +++ b/spine-cocos2d-objc/example/RaptorExample.h @@ -1,4 +1,4 @@ -/****************************************************************************** +/****************************************************************************** * Spine Runtimes Software License * Version 2.3 * @@ -29,8 +29,13 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -namespace Spine { - public interface IFfdAttachment { - bool ApplyFFD (Attachment sourceAttachment); - } -} \ No newline at end of file +#import "cocos2d.h" +#import + +@interface RaptorExample : CCNode { + SkeletonAnimation* skeletonNode; +} + ++ (CCScene*) scene; + +@end diff --git a/spine-cocos2d-objc/example/RaptorExample.m b/spine-cocos2d-objc/example/RaptorExample.m new file mode 100644 index 000000000..983f4982f --- /dev/null +++ b/spine-cocos2d-objc/example/RaptorExample.m @@ -0,0 +1,71 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +#import "RaptorExample.h" +#import "TankExample.h" + +@implementation RaptorExample + ++ (CCScene*) scene { + CCScene *scene = [CCScene node]; + [scene addChild:[RaptorExample node]]; + return scene; +} + +-(id) init { + self = [super init]; + if (!self) return nil; + + skeletonNode = [SkeletonAnimation skeletonWithFile:@"raptor.json" atlasFile:@"raptor.atlas" scale:0.3f]; + [skeletonNode setAnimationForTrack:0 name:@"walk" loop:YES]; + + CGSize windowSize = [[CCDirector sharedDirector] viewSize]; + [skeletonNode setPosition:ccp(windowSize.width / 2, 20)]; + [self addChild:skeletonNode]; + + self.userInteractionEnabled = YES; + self.contentSize = windowSize; + + return self; +} + +#if ( TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR ) +- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event { + if (!skeletonNode.debugBones) + skeletonNode.debugBones = true; + else if (skeletonNode.timeScale == 1) + skeletonNode.timeScale = 0.3f; + else + [[CCDirector sharedDirector] replaceScene:[TankExample scene]]; +} +#endif + +@end diff --git a/spine-as3/spine-as3/src/spine/attachments/FfdAttachment.as b/spine-cocos2d-objc/example/TankExample.h similarity index 92% rename from spine-as3/spine-as3/src/spine/attachments/FfdAttachment.as rename to spine-cocos2d-objc/example/TankExample.h index 5edab5adf..ad0fbb0ff 100644 --- a/spine-as3/spine-as3/src/spine/attachments/FfdAttachment.as +++ b/spine-cocos2d-objc/example/TankExample.h @@ -29,10 +29,13 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -package spine.attachments { +#import "cocos2d.h" +#import -public interface FfdAttachment { - function applyFFD (sourceAttachment:Attachment) : Boolean; +@interface TankExample : CCNode { + SkeletonAnimation* skeletonNode; } -} ++ (CCScene*) scene; + +@end diff --git a/spine-cocos2d-objc/example/TankExample.m b/spine-cocos2d-objc/example/TankExample.m new file mode 100644 index 000000000..1c28908b4 --- /dev/null +++ b/spine-cocos2d-objc/example/TankExample.m @@ -0,0 +1,71 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +#import "TankExample.h" +#import "SpineboyExample.h" + +@implementation TankExample + ++ (CCScene*) scene { + CCScene *scene = [CCScene node]; + [scene addChild:[TankExample node]]; + return scene; +} + +-(id) init { + self = [super init]; + if (!self) return nil; + + skeletonNode = [SkeletonAnimation skeletonWithFile:@"tank.json" atlasFile:@"tank.atlas" scale:0.2f]; + [skeletonNode setAnimationForTrack:0 name:@"drive" loop:YES]; + + CGSize windowSize = [[CCDirector sharedDirector] viewSize]; + [skeletonNode setPosition:ccp(windowSize.width / 2, 20)]; + [self addChild:skeletonNode]; + + self.userInteractionEnabled = YES; + self.contentSize = windowSize; + + return self; +} + +#if ( TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR ) +- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event { + if (!skeletonNode.debugBones) + skeletonNode.debugBones = true; + else if (skeletonNode.timeScale == 1) + skeletonNode.timeScale = 0.3f; + else + [[CCDirector sharedDirector] replaceScene:[SpineboyExample scene]]; +} +#endif + +@end diff --git a/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.pbxproj b/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.pbxproj index f7615215e..25f04a239 100644 --- a/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.pbxproj +++ b/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.pbxproj @@ -7,11 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 431FF7F31C735D8D00D52DF2 /* TransformConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 431FF7F01C735D8D00D52DF2 /* TransformConstraint.c */; }; - 431FF7F41C735D8D00D52DF2 /* TransformConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 431FF7F11C735D8D00D52DF2 /* TransformConstraintData.c */; }; - 431FF7F51C735D8D00D52DF2 /* WeightedMeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 431FF7F21C735D8D00D52DF2 /* WeightedMeshAttachment.c */; }; - 43B7CC0919DC4ACD0031321C /* IkConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 43B7CC0719DC4ACD0031321C /* IkConstraint.c */; }; - 43B7CC0A19DC4ACD0031321C /* IkConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43B7CC0819DC4ACD0031321C /* IkConstraintData.c */; }; 43C3282F170B0C19004A9460 /* spine-cocos2d-objc.m in Sources */ = {isa = PBXBuildFile; fileRef = 43C3282D170B0C19004A9460 /* spine-cocos2d-objc.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 43C3286C170B0DA6004A9460 /* spineboy.json in Resources */ = {isa = PBXBuildFile; fileRef = 43C32868170B0DA6004A9460 /* spineboy.json */; }; 43C3286E170B0DA6004A9460 /* spineboy.atlas in Resources */ = {isa = PBXBuildFile; fileRef = 43C3286A170B0DA6004A9460 /* spineboy.atlas */; }; @@ -33,34 +28,50 @@ 43F7010F1927FBC700CA4038 /* goblins-mesh.atlas in Resources */ = {isa = PBXBuildFile; fileRef = 43F7010C1927FBC700CA4038 /* goblins-mesh.atlas */; }; 43F701101927FBC700CA4038 /* goblins-mesh.json in Resources */ = {isa = PBXBuildFile; fileRef = 43F7010D1927FBC700CA4038 /* goblins-mesh.json */; }; 43F701111927FBC700CA4038 /* goblins-mesh.png in Resources */ = {isa = PBXBuildFile; fileRef = 43F7010E1927FBC700CA4038 /* goblins-mesh.png */; }; - 43F7FF511927F91900CA4038 /* Animation.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF381927F91900CA4038 /* Animation.c */; }; - 43F7FF521927F91900CA4038 /* AnimationState.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF391927F91900CA4038 /* AnimationState.c */; }; - 43F7FF531927F91900CA4038 /* AnimationStateData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF3A1927F91900CA4038 /* AnimationStateData.c */; }; - 43F7FF541927F91900CA4038 /* Atlas.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF3B1927F91900CA4038 /* Atlas.c */; }; - 43F7FF551927F91900CA4038 /* AtlasAttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF3C1927F91900CA4038 /* AtlasAttachmentLoader.c */; }; - 43F7FF561927F91900CA4038 /* Attachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF3D1927F91900CA4038 /* Attachment.c */; }; - 43F7FF571927F91900CA4038 /* AttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF3E1927F91900CA4038 /* AttachmentLoader.c */; }; - 43F7FF581927F91900CA4038 /* Bone.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF3F1927F91900CA4038 /* Bone.c */; }; - 43F7FF591927F91900CA4038 /* BoneData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF401927F91900CA4038 /* BoneData.c */; }; - 43F7FF5A1927F91900CA4038 /* BoundingBoxAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF411927F91900CA4038 /* BoundingBoxAttachment.c */; }; - 43F7FF5B1927F91900CA4038 /* Event.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF421927F91900CA4038 /* Event.c */; }; - 43F7FF5C1927F91900CA4038 /* EventData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF431927F91900CA4038 /* EventData.c */; }; - 43F7FF5D1927F91900CA4038 /* extension.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF441927F91900CA4038 /* extension.c */; }; - 43F7FF5E1927F91900CA4038 /* Json.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF451927F91900CA4038 /* Json.c */; }; - 43F7FF5F1927F91900CA4038 /* MeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF471927F91900CA4038 /* MeshAttachment.c */; }; - 43F7FF601927F91900CA4038 /* RegionAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF481927F91900CA4038 /* RegionAttachment.c */; }; - 43F7FF611927F91900CA4038 /* Skeleton.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF491927F91900CA4038 /* Skeleton.c */; }; - 43F7FF621927F91900CA4038 /* SkeletonBounds.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF4A1927F91900CA4038 /* SkeletonBounds.c */; }; - 43F7FF631927F91900CA4038 /* SkeletonData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF4B1927F91900CA4038 /* SkeletonData.c */; }; - 43F7FF641927F91900CA4038 /* SkeletonJson.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF4C1927F91900CA4038 /* SkeletonJson.c */; }; - 43F7FF651927F91900CA4038 /* Skin.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF4D1927F91900CA4038 /* Skin.c */; }; - 43F7FF671927F91900CA4038 /* Slot.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF4F1927F91900CA4038 /* Slot.c */; }; - 43F7FF681927F91900CA4038 /* SlotData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF501927F91900CA4038 /* SlotData.c */; }; 43F7FF881927F94800CA4038 /* SkeletonAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF841927F94800CA4038 /* SkeletonAnimation.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 43F7FF891927F94800CA4038 /* SkeletonRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF861927F94800CA4038 /* SkeletonRenderer.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 43F7FF8E1927F96700CA4038 /* GoblinsExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF8B1927F96700CA4038 /* GoblinsExample.m */; }; 43F7FF8F1927F96700CA4038 /* SpineboyExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF8D1927F96700CA4038 /* SpineboyExample.m */; }; 652107961895250000B1FF07 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 652107951895250000B1FF07 /* CoreText.framework */; }; + 76F5BD7D1D2BDCB5005917E5 /* Animation.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD5D1D2BDCB5005917E5 /* Animation.c */; }; + 76F5BD7E1D2BDCB5005917E5 /* AnimationState.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD5E1D2BDCB5005917E5 /* AnimationState.c */; }; + 76F5BD7F1D2BDCB5005917E5 /* AnimationStateData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD5F1D2BDCB5005917E5 /* AnimationStateData.c */; }; + 76F5BD801D2BDCB5005917E5 /* Atlas.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD601D2BDCB5005917E5 /* Atlas.c */; }; + 76F5BD811D2BDCB5005917E5 /* AtlasAttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD611D2BDCB5005917E5 /* AtlasAttachmentLoader.c */; }; + 76F5BD821D2BDCB5005917E5 /* Attachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD621D2BDCB5005917E5 /* Attachment.c */; }; + 76F5BD831D2BDCB5005917E5 /* AttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD631D2BDCB5005917E5 /* AttachmentLoader.c */; }; + 76F5BD841D2BDCB5005917E5 /* Bone.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD641D2BDCB5005917E5 /* Bone.c */; }; + 76F5BD851D2BDCB5005917E5 /* BoneData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD651D2BDCB5005917E5 /* BoneData.c */; }; + 76F5BD861D2BDCB5005917E5 /* BoundingBoxAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD661D2BDCB5005917E5 /* BoundingBoxAttachment.c */; }; + 76F5BD871D2BDCB5005917E5 /* Event.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD671D2BDCB5005917E5 /* Event.c */; }; + 76F5BD881D2BDCB5005917E5 /* EventData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD681D2BDCB5005917E5 /* EventData.c */; }; + 76F5BD891D2BDCB5005917E5 /* extension.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD691D2BDCB5005917E5 /* extension.c */; }; + 76F5BD8A1D2BDCB5005917E5 /* IkConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD6A1D2BDCB5005917E5 /* IkConstraint.c */; }; + 76F5BD8B1D2BDCB5005917E5 /* IkConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD6B1D2BDCB5005917E5 /* IkConstraintData.c */; }; + 76F5BD8C1D2BDCB5005917E5 /* Json.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD6C1D2BDCB5005917E5 /* Json.c */; }; + 76F5BD8D1D2BDCB5005917E5 /* MeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD6E1D2BDCB5005917E5 /* MeshAttachment.c */; }; + 76F5BD8E1D2BDCB5005917E5 /* PathAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD6F1D2BDCB5005917E5 /* PathAttachment.c */; }; + 76F5BD8F1D2BDCB5005917E5 /* PathConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD701D2BDCB5005917E5 /* PathConstraint.c */; }; + 76F5BD901D2BDCB5005917E5 /* PathConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD711D2BDCB5005917E5 /* PathConstraintData.c */; }; + 76F5BD911D2BDCB5005917E5 /* RegionAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD721D2BDCB5005917E5 /* RegionAttachment.c */; }; + 76F5BD921D2BDCB5005917E5 /* Skeleton.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD731D2BDCB5005917E5 /* Skeleton.c */; }; + 76F5BD931D2BDCB5005917E5 /* SkeletonBounds.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD741D2BDCB5005917E5 /* SkeletonBounds.c */; }; + 76F5BD941D2BDCB5005917E5 /* SkeletonData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD751D2BDCB5005917E5 /* SkeletonData.c */; }; + 76F5BD951D2BDCB5005917E5 /* SkeletonJson.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD761D2BDCB5005917E5 /* SkeletonJson.c */; }; + 76F5BD961D2BDCB5005917E5 /* Skin.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD771D2BDCB5005917E5 /* Skin.c */; }; + 76F5BD971D2BDCB5005917E5 /* Slot.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD781D2BDCB5005917E5 /* Slot.c */; }; + 76F5BD981D2BDCB5005917E5 /* SlotData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD791D2BDCB5005917E5 /* SlotData.c */; }; + 76F5BD991D2BDCB5005917E5 /* TransformConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD7A1D2BDCB5005917E5 /* TransformConstraint.c */; }; + 76F5BD9A1D2BDCB5005917E5 /* TransformConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD7B1D2BDCB5005917E5 /* TransformConstraintData.c */; }; + 76F5BD9B1D2BDCB5005917E5 /* VertexAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD7C1D2BDCB5005917E5 /* VertexAttachment.c */; }; + 76F5BDA21D2BDE1C005917E5 /* raptor.atlas in Resources */ = {isa = PBXBuildFile; fileRef = 76F5BD9C1D2BDE1C005917E5 /* raptor.atlas */; }; + 76F5BDA31D2BDE1C005917E5 /* raptor.json in Resources */ = {isa = PBXBuildFile; fileRef = 76F5BD9D1D2BDE1C005917E5 /* raptor.json */; }; + 76F5BDA41D2BDE1C005917E5 /* raptor.png in Resources */ = {isa = PBXBuildFile; fileRef = 76F5BD9E1D2BDE1C005917E5 /* raptor.png */; }; + 76F5BDA51D2BDE1C005917E5 /* tank.atlas in Resources */ = {isa = PBXBuildFile; fileRef = 76F5BD9F1D2BDE1C005917E5 /* tank.atlas */; }; + 76F5BDA61D2BDE1C005917E5 /* tank.json in Resources */ = {isa = PBXBuildFile; fileRef = 76F5BDA01D2BDE1C005917E5 /* tank.json */; }; + 76F5BDA71D2BDE1C005917E5 /* tank.png in Resources */ = {isa = PBXBuildFile; fileRef = 76F5BDA11D2BDE1C005917E5 /* tank.png */; }; + 76F5BDAA1D2BDE67005917E5 /* RaptorExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BDA91D2BDE67005917E5 /* RaptorExample.m */; }; + 76F5BDAD1D2BDFA2005917E5 /* TankExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BDAC1D2BDFA2005917E5 /* TankExample.m */; }; 83F1A0EF1986955A001F6B44 /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83F1A0EE1986955A001F6B44 /* GLKit.framework */; }; 9A5D2499170A94DA0030D4DD /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5D2498170A94DA0030D4DD /* QuartzCore.framework */; }; 9A5D249B170A94DA0030D4DD /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5D249A170A94DA0030D4DD /* OpenGLES.framework */; }; @@ -112,16 +123,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 431FF7ED1C735D7A00D52DF2 /* TransformConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformConstraint.h; path = "../spine-c/include/spine/TransformConstraint.h"; sourceTree = ""; }; - 431FF7EE1C735D7A00D52DF2 /* TransformConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformConstraintData.h; path = "../spine-c/include/spine/TransformConstraintData.h"; sourceTree = ""; }; - 431FF7EF1C735D7A00D52DF2 /* WeightedMeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WeightedMeshAttachment.h; path = "../spine-c/include/spine/WeightedMeshAttachment.h"; sourceTree = ""; }; - 431FF7F01C735D8D00D52DF2 /* TransformConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraint.c; path = "../spine-c/src/spine/TransformConstraint.c"; sourceTree = ""; }; - 431FF7F11C735D8D00D52DF2 /* TransformConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraintData.c; path = "../spine-c/src/spine/TransformConstraintData.c"; sourceTree = ""; }; - 431FF7F21C735D8D00D52DF2 /* WeightedMeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = WeightedMeshAttachment.c; path = "../spine-c/src/spine/WeightedMeshAttachment.c"; sourceTree = ""; }; - 43B7CC0719DC4ACD0031321C /* IkConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraint.c; path = "../spine-c/src/spine/IkConstraint.c"; sourceTree = ""; }; - 43B7CC0819DC4ACD0031321C /* IkConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraintData.c; path = "../spine-c/src/spine/IkConstraintData.c"; sourceTree = ""; }; - 43B7CC0D19DC4AE30031321C /* IkConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IkConstraint.h; path = "../spine-c/include/spine/IkConstraint.h"; sourceTree = ""; }; - 43B7CC0E19DC4AE30031321C /* IkConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IkConstraintData.h; path = "../spine-c/include/spine/IkConstraintData.h"; sourceTree = ""; }; 43C3282D170B0C19004A9460 /* spine-cocos2d-objc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "spine-cocos2d-objc.m"; path = "src/spine/spine-cocos2d-objc.m"; sourceTree = ""; }; 43C3282E170B0C19004A9460 /* spine-cocos2d-objc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "spine-cocos2d-objc.h"; path = "src/spine/spine-cocos2d-objc.h"; sourceTree = ""; }; 43C32868170B0DA6004A9460 /* spineboy.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = spineboy.json; path = Resources/spineboy.json; sourceTree = ""; }; @@ -146,53 +147,6 @@ 43F7010C1927FBC700CA4038 /* goblins-mesh.atlas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "goblins-mesh.atlas"; path = "Resources/goblins-mesh.atlas"; sourceTree = ""; }; 43F7010D1927FBC700CA4038 /* goblins-mesh.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = "goblins-mesh.json"; path = "Resources/goblins-mesh.json"; sourceTree = ""; }; 43F7010E1927FBC700CA4038 /* goblins-mesh.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "goblins-mesh.png"; path = "Resources/goblins-mesh.png"; sourceTree = ""; }; - 43F7FF381927F91900CA4038 /* Animation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Animation.c; path = "../spine-c/src/spine/Animation.c"; sourceTree = ""; }; - 43F7FF391927F91900CA4038 /* AnimationState.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationState.c; path = "../spine-c/src/spine/AnimationState.c"; sourceTree = ""; }; - 43F7FF3A1927F91900CA4038 /* AnimationStateData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationStateData.c; path = "../spine-c/src/spine/AnimationStateData.c"; sourceTree = ""; }; - 43F7FF3B1927F91900CA4038 /* Atlas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Atlas.c; path = "../spine-c/src/spine/Atlas.c"; sourceTree = ""; }; - 43F7FF3C1927F91900CA4038 /* AtlasAttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AtlasAttachmentLoader.c; path = "../spine-c/src/spine/AtlasAttachmentLoader.c"; sourceTree = ""; }; - 43F7FF3D1927F91900CA4038 /* Attachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Attachment.c; path = "../spine-c/src/spine/Attachment.c"; sourceTree = ""; }; - 43F7FF3E1927F91900CA4038 /* AttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AttachmentLoader.c; path = "../spine-c/src/spine/AttachmentLoader.c"; sourceTree = ""; }; - 43F7FF3F1927F91900CA4038 /* Bone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Bone.c; path = "../spine-c/src/spine/Bone.c"; sourceTree = ""; }; - 43F7FF401927F91900CA4038 /* BoneData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoneData.c; path = "../spine-c/src/spine/BoneData.c"; sourceTree = ""; }; - 43F7FF411927F91900CA4038 /* BoundingBoxAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoundingBoxAttachment.c; path = "../spine-c/src/spine/BoundingBoxAttachment.c"; sourceTree = ""; }; - 43F7FF421927F91900CA4038 /* Event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Event.c; path = "../spine-c/src/spine/Event.c"; sourceTree = ""; }; - 43F7FF431927F91900CA4038 /* EventData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EventData.c; path = "../spine-c/src/spine/EventData.c"; sourceTree = ""; }; - 43F7FF441927F91900CA4038 /* extension.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = extension.c; path = "../spine-c/src/spine/extension.c"; sourceTree = ""; }; - 43F7FF451927F91900CA4038 /* Json.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Json.c; path = "../spine-c/src/spine/Json.c"; sourceTree = ""; }; - 43F7FF461927F91900CA4038 /* Json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Json.h; path = "../spine-c/src/spine/Json.h"; sourceTree = ""; }; - 43F7FF471927F91900CA4038 /* MeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MeshAttachment.c; path = "../spine-c/src/spine/MeshAttachment.c"; sourceTree = ""; }; - 43F7FF481927F91900CA4038 /* RegionAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = RegionAttachment.c; path = "../spine-c/src/spine/RegionAttachment.c"; sourceTree = ""; }; - 43F7FF491927F91900CA4038 /* Skeleton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skeleton.c; path = "../spine-c/src/spine/Skeleton.c"; sourceTree = ""; }; - 43F7FF4A1927F91900CA4038 /* SkeletonBounds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonBounds.c; path = "../spine-c/src/spine/SkeletonBounds.c"; sourceTree = ""; }; - 43F7FF4B1927F91900CA4038 /* SkeletonData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonData.c; path = "../spine-c/src/spine/SkeletonData.c"; sourceTree = ""; }; - 43F7FF4C1927F91900CA4038 /* SkeletonJson.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonJson.c; path = "../spine-c/src/spine/SkeletonJson.c"; sourceTree = ""; }; - 43F7FF4D1927F91900CA4038 /* Skin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skin.c; path = "../spine-c/src/spine/Skin.c"; sourceTree = ""; }; - 43F7FF4F1927F91900CA4038 /* Slot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Slot.c; path = "../spine-c/src/spine/Slot.c"; sourceTree = ""; }; - 43F7FF501927F91900CA4038 /* SlotData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SlotData.c; path = "../spine-c/src/spine/SlotData.c"; sourceTree = ""; }; - 43F7FF691927F92500CA4038 /* Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Animation.h; path = "../spine-c/include/spine/Animation.h"; sourceTree = ""; }; - 43F7FF6A1927F92500CA4038 /* AnimationState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationState.h; path = "../spine-c/include/spine/AnimationState.h"; sourceTree = ""; }; - 43F7FF6B1927F92500CA4038 /* AnimationStateData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationStateData.h; path = "../spine-c/include/spine/AnimationStateData.h"; sourceTree = ""; }; - 43F7FF6C1927F92500CA4038 /* Atlas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Atlas.h; path = "../spine-c/include/spine/Atlas.h"; sourceTree = ""; }; - 43F7FF6D1927F92500CA4038 /* AtlasAttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AtlasAttachmentLoader.h; path = "../spine-c/include/spine/AtlasAttachmentLoader.h"; sourceTree = ""; }; - 43F7FF6E1927F92500CA4038 /* Attachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Attachment.h; path = "../spine-c/include/spine/Attachment.h"; sourceTree = ""; }; - 43F7FF6F1927F92500CA4038 /* AttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AttachmentLoader.h; path = "../spine-c/include/spine/AttachmentLoader.h"; sourceTree = ""; }; - 43F7FF701927F92500CA4038 /* Bone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Bone.h; path = "../spine-c/include/spine/Bone.h"; sourceTree = ""; }; - 43F7FF711927F92500CA4038 /* BoneData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoneData.h; path = "../spine-c/include/spine/BoneData.h"; sourceTree = ""; }; - 43F7FF721927F92500CA4038 /* BoundingBoxAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoundingBoxAttachment.h; path = "../spine-c/include/spine/BoundingBoxAttachment.h"; sourceTree = ""; }; - 43F7FF731927F92500CA4038 /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Event.h; path = "../spine-c/include/spine/Event.h"; sourceTree = ""; }; - 43F7FF741927F92500CA4038 /* EventData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EventData.h; path = "../spine-c/include/spine/EventData.h"; sourceTree = ""; }; - 43F7FF751927F92500CA4038 /* extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = extension.h; path = "../spine-c/include/spine/extension.h"; sourceTree = ""; }; - 43F7FF761927F92500CA4038 /* MeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshAttachment.h; path = "../spine-c/include/spine/MeshAttachment.h"; sourceTree = ""; }; - 43F7FF771927F92500CA4038 /* RegionAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegionAttachment.h; path = "../spine-c/include/spine/RegionAttachment.h"; sourceTree = ""; }; - 43F7FF781927F92500CA4038 /* Skeleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Skeleton.h; path = "../spine-c/include/spine/Skeleton.h"; sourceTree = ""; }; - 43F7FF791927F92500CA4038 /* SkeletonBounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonBounds.h; path = "../spine-c/include/spine/SkeletonBounds.h"; sourceTree = ""; }; - 43F7FF7A1927F92500CA4038 /* SkeletonData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonData.h; path = "../spine-c/include/spine/SkeletonData.h"; sourceTree = ""; }; - 43F7FF7B1927F92500CA4038 /* SkeletonJson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonJson.h; path = "../spine-c/include/spine/SkeletonJson.h"; sourceTree = ""; }; - 43F7FF7C1927F92500CA4038 /* Skin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Skin.h; path = "../spine-c/include/spine/Skin.h"; sourceTree = ""; }; - 43F7FF7E1927F92500CA4038 /* Slot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Slot.h; path = "../spine-c/include/spine/Slot.h"; sourceTree = ""; }; - 43F7FF7F1927F92500CA4038 /* SlotData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SlotData.h; path = "../spine-c/include/spine/SlotData.h"; sourceTree = ""; }; - 43F7FF801927F92500CA4038 /* spine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spine.h; path = "../spine-c/include/spine/spine.h"; sourceTree = ""; }; 43F7FF831927F94800CA4038 /* SkeletonAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonAnimation.h; path = src/spine/SkeletonAnimation.h; sourceTree = ""; }; 43F7FF841927F94800CA4038 /* SkeletonAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SkeletonAnimation.m; path = src/spine/SkeletonAnimation.m; sourceTree = ""; }; 43F7FF851927F94800CA4038 /* SkeletonRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonRenderer.h; path = src/spine/SkeletonRenderer.h; sourceTree = ""; }; @@ -202,6 +156,48 @@ 43F7FF8C1927F96700CA4038 /* SpineboyExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpineboyExample.h; path = example/SpineboyExample.h; sourceTree = ""; }; 43F7FF8D1927F96700CA4038 /* SpineboyExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpineboyExample.m; path = example/SpineboyExample.m; sourceTree = ""; }; 652107951895250000B1FF07 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; + 76F5BD5D1D2BDCB5005917E5 /* Animation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Animation.c; path = "../spine-c/src/spine/Animation.c"; sourceTree = ""; }; + 76F5BD5E1D2BDCB5005917E5 /* AnimationState.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationState.c; path = "../spine-c/src/spine/AnimationState.c"; sourceTree = ""; }; + 76F5BD5F1D2BDCB5005917E5 /* AnimationStateData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationStateData.c; path = "../spine-c/src/spine/AnimationStateData.c"; sourceTree = ""; }; + 76F5BD601D2BDCB5005917E5 /* Atlas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Atlas.c; path = "../spine-c/src/spine/Atlas.c"; sourceTree = ""; }; + 76F5BD611D2BDCB5005917E5 /* AtlasAttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AtlasAttachmentLoader.c; path = "../spine-c/src/spine/AtlasAttachmentLoader.c"; sourceTree = ""; }; + 76F5BD621D2BDCB5005917E5 /* Attachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Attachment.c; path = "../spine-c/src/spine/Attachment.c"; sourceTree = ""; }; + 76F5BD631D2BDCB5005917E5 /* AttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AttachmentLoader.c; path = "../spine-c/src/spine/AttachmentLoader.c"; sourceTree = ""; }; + 76F5BD641D2BDCB5005917E5 /* Bone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Bone.c; path = "../spine-c/src/spine/Bone.c"; sourceTree = ""; }; + 76F5BD651D2BDCB5005917E5 /* BoneData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoneData.c; path = "../spine-c/src/spine/BoneData.c"; sourceTree = ""; }; + 76F5BD661D2BDCB5005917E5 /* BoundingBoxAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoundingBoxAttachment.c; path = "../spine-c/src/spine/BoundingBoxAttachment.c"; sourceTree = ""; }; + 76F5BD671D2BDCB5005917E5 /* Event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Event.c; path = "../spine-c/src/spine/Event.c"; sourceTree = ""; }; + 76F5BD681D2BDCB5005917E5 /* EventData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EventData.c; path = "../spine-c/src/spine/EventData.c"; sourceTree = ""; }; + 76F5BD691D2BDCB5005917E5 /* extension.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = extension.c; path = "../spine-c/src/spine/extension.c"; sourceTree = ""; }; + 76F5BD6A1D2BDCB5005917E5 /* IkConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraint.c; path = "../spine-c/src/spine/IkConstraint.c"; sourceTree = ""; }; + 76F5BD6B1D2BDCB5005917E5 /* IkConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraintData.c; path = "../spine-c/src/spine/IkConstraintData.c"; sourceTree = ""; }; + 76F5BD6C1D2BDCB5005917E5 /* Json.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Json.c; path = "../spine-c/src/spine/Json.c"; sourceTree = ""; }; + 76F5BD6D1D2BDCB5005917E5 /* Json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Json.h; path = "../spine-c/src/spine/Json.h"; sourceTree = ""; }; + 76F5BD6E1D2BDCB5005917E5 /* MeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MeshAttachment.c; path = "../spine-c/src/spine/MeshAttachment.c"; sourceTree = ""; }; + 76F5BD6F1D2BDCB5005917E5 /* PathAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = PathAttachment.c; path = "../spine-c/src/spine/PathAttachment.c"; sourceTree = ""; }; + 76F5BD701D2BDCB5005917E5 /* PathConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = PathConstraint.c; path = "../spine-c/src/spine/PathConstraint.c"; sourceTree = ""; }; + 76F5BD711D2BDCB5005917E5 /* PathConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = PathConstraintData.c; path = "../spine-c/src/spine/PathConstraintData.c"; sourceTree = ""; }; + 76F5BD721D2BDCB5005917E5 /* RegionAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = RegionAttachment.c; path = "../spine-c/src/spine/RegionAttachment.c"; sourceTree = ""; }; + 76F5BD731D2BDCB5005917E5 /* Skeleton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skeleton.c; path = "../spine-c/src/spine/Skeleton.c"; sourceTree = ""; }; + 76F5BD741D2BDCB5005917E5 /* SkeletonBounds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonBounds.c; path = "../spine-c/src/spine/SkeletonBounds.c"; sourceTree = ""; }; + 76F5BD751D2BDCB5005917E5 /* SkeletonData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonData.c; path = "../spine-c/src/spine/SkeletonData.c"; sourceTree = ""; }; + 76F5BD761D2BDCB5005917E5 /* SkeletonJson.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonJson.c; path = "../spine-c/src/spine/SkeletonJson.c"; sourceTree = ""; }; + 76F5BD771D2BDCB5005917E5 /* Skin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skin.c; path = "../spine-c/src/spine/Skin.c"; sourceTree = ""; }; + 76F5BD781D2BDCB5005917E5 /* Slot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Slot.c; path = "../spine-c/src/spine/Slot.c"; sourceTree = ""; }; + 76F5BD791D2BDCB5005917E5 /* SlotData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SlotData.c; path = "../spine-c/src/spine/SlotData.c"; sourceTree = ""; }; + 76F5BD7A1D2BDCB5005917E5 /* TransformConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraint.c; path = "../spine-c/src/spine/TransformConstraint.c"; sourceTree = ""; }; + 76F5BD7B1D2BDCB5005917E5 /* TransformConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraintData.c; path = "../spine-c/src/spine/TransformConstraintData.c"; sourceTree = ""; }; + 76F5BD7C1D2BDCB5005917E5 /* VertexAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = VertexAttachment.c; path = "../spine-c/src/spine/VertexAttachment.c"; sourceTree = ""; }; + 76F5BD9C1D2BDE1C005917E5 /* raptor.atlas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = raptor.atlas; path = Resources/raptor.atlas; sourceTree = ""; }; + 76F5BD9D1D2BDE1C005917E5 /* raptor.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = raptor.json; path = Resources/raptor.json; sourceTree = ""; }; + 76F5BD9E1D2BDE1C005917E5 /* raptor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = raptor.png; path = Resources/raptor.png; sourceTree = ""; }; + 76F5BD9F1D2BDE1C005917E5 /* tank.atlas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tank.atlas; path = Resources/tank.atlas; sourceTree = ""; }; + 76F5BDA01D2BDE1C005917E5 /* tank.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = tank.json; path = Resources/tank.json; sourceTree = ""; }; + 76F5BDA11D2BDE1C005917E5 /* tank.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tank.png; path = Resources/tank.png; sourceTree = ""; }; + 76F5BDA81D2BDE67005917E5 /* RaptorExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RaptorExample.h; path = example/RaptorExample.h; sourceTree = ""; }; + 76F5BDA91D2BDE67005917E5 /* RaptorExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RaptorExample.m; path = example/RaptorExample.m; sourceTree = ""; }; + 76F5BDAB1D2BDFA2005917E5 /* TankExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TankExample.h; path = example/TankExample.h; sourceTree = ""; }; + 76F5BDAC1D2BDFA2005917E5 /* TankExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TankExample.m; path = example/TankExample.m; sourceTree = ""; }; 83F1A0EE1986955A001F6B44 /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; }; 9A5D2495170A94DA0030D4DD /* SpineExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SpineExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 9A5D2498170A94DA0030D4DD /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; @@ -259,6 +255,10 @@ 43F7FF8D1927F96700CA4038 /* SpineboyExample.m */, 43F7FF8A1927F96700CA4038 /* GoblinsExample.h */, 43F7FF8B1927F96700CA4038 /* GoblinsExample.m */, + 76F5BDA81D2BDE67005917E5 /* RaptorExample.h */, + 76F5BDA91D2BDE67005917E5 /* RaptorExample.m */, + 76F5BDAB1D2BDFA2005917E5 /* TankExample.h */, + 76F5BDAC1D2BDFA2005917E5 /* TankExample.m */, 43C32A07170B10FF004A9460 /* AppDelegate.h */, 43C32A08170B10FF004A9460 /* AppDelegate.m */, 43C32A05170B0F93004A9460 /* main.m */, @@ -270,63 +270,38 @@ 43C32822170B0BC2004A9460 /* spine-c */ = { isa = PBXGroup; children = ( - 43F7FF381927F91900CA4038 /* Animation.c */, - 43F7FF691927F92500CA4038 /* Animation.h */, - 43F7FF391927F91900CA4038 /* AnimationState.c */, - 43F7FF6A1927F92500CA4038 /* AnimationState.h */, - 43F7FF3A1927F91900CA4038 /* AnimationStateData.c */, - 43F7FF6B1927F92500CA4038 /* AnimationStateData.h */, - 43F7FF3B1927F91900CA4038 /* Atlas.c */, - 43F7FF6C1927F92500CA4038 /* Atlas.h */, - 43F7FF3C1927F91900CA4038 /* AtlasAttachmentLoader.c */, - 43F7FF6D1927F92500CA4038 /* AtlasAttachmentLoader.h */, - 43F7FF3D1927F91900CA4038 /* Attachment.c */, - 43F7FF6E1927F92500CA4038 /* Attachment.h */, - 43F7FF3E1927F91900CA4038 /* AttachmentLoader.c */, - 43F7FF6F1927F92500CA4038 /* AttachmentLoader.h */, - 43F7FF3F1927F91900CA4038 /* Bone.c */, - 43F7FF701927F92500CA4038 /* Bone.h */, - 43F7FF401927F91900CA4038 /* BoneData.c */, - 43F7FF711927F92500CA4038 /* BoneData.h */, - 43F7FF411927F91900CA4038 /* BoundingBoxAttachment.c */, - 43F7FF721927F92500CA4038 /* BoundingBoxAttachment.h */, - 43F7FF421927F91900CA4038 /* Event.c */, - 43F7FF731927F92500CA4038 /* Event.h */, - 43F7FF431927F91900CA4038 /* EventData.c */, - 43F7FF741927F92500CA4038 /* EventData.h */, - 43F7FF441927F91900CA4038 /* extension.c */, - 43F7FF751927F92500CA4038 /* extension.h */, - 43B7CC0719DC4ACD0031321C /* IkConstraint.c */, - 43B7CC0D19DC4AE30031321C /* IkConstraint.h */, - 43B7CC0819DC4ACD0031321C /* IkConstraintData.c */, - 43B7CC0E19DC4AE30031321C /* IkConstraintData.h */, - 43F7FF451927F91900CA4038 /* Json.c */, - 43F7FF461927F91900CA4038 /* Json.h */, - 43F7FF471927F91900CA4038 /* MeshAttachment.c */, - 43F7FF761927F92500CA4038 /* MeshAttachment.h */, - 43F7FF481927F91900CA4038 /* RegionAttachment.c */, - 43F7FF771927F92500CA4038 /* RegionAttachment.h */, - 43F7FF491927F91900CA4038 /* Skeleton.c */, - 43F7FF781927F92500CA4038 /* Skeleton.h */, - 43F7FF4A1927F91900CA4038 /* SkeletonBounds.c */, - 43F7FF791927F92500CA4038 /* SkeletonBounds.h */, - 43F7FF4B1927F91900CA4038 /* SkeletonData.c */, - 43F7FF7A1927F92500CA4038 /* SkeletonData.h */, - 43F7FF4C1927F91900CA4038 /* SkeletonJson.c */, - 43F7FF7B1927F92500CA4038 /* SkeletonJson.h */, - 43F7FF4D1927F91900CA4038 /* Skin.c */, - 43F7FF7C1927F92500CA4038 /* Skin.h */, - 43F7FF4F1927F91900CA4038 /* Slot.c */, - 43F7FF7E1927F92500CA4038 /* Slot.h */, - 43F7FF501927F91900CA4038 /* SlotData.c */, - 43F7FF7F1927F92500CA4038 /* SlotData.h */, - 43F7FF801927F92500CA4038 /* spine.h */, - 431FF7F01C735D8D00D52DF2 /* TransformConstraint.c */, - 431FF7ED1C735D7A00D52DF2 /* TransformConstraint.h */, - 431FF7F11C735D8D00D52DF2 /* TransformConstraintData.c */, - 431FF7EE1C735D7A00D52DF2 /* TransformConstraintData.h */, - 431FF7F21C735D8D00D52DF2 /* WeightedMeshAttachment.c */, - 431FF7EF1C735D7A00D52DF2 /* WeightedMeshAttachment.h */, + 76F5BD5D1D2BDCB5005917E5 /* Animation.c */, + 76F5BD5E1D2BDCB5005917E5 /* AnimationState.c */, + 76F5BD5F1D2BDCB5005917E5 /* AnimationStateData.c */, + 76F5BD601D2BDCB5005917E5 /* Atlas.c */, + 76F5BD611D2BDCB5005917E5 /* AtlasAttachmentLoader.c */, + 76F5BD621D2BDCB5005917E5 /* Attachment.c */, + 76F5BD631D2BDCB5005917E5 /* AttachmentLoader.c */, + 76F5BD641D2BDCB5005917E5 /* Bone.c */, + 76F5BD651D2BDCB5005917E5 /* BoneData.c */, + 76F5BD661D2BDCB5005917E5 /* BoundingBoxAttachment.c */, + 76F5BD671D2BDCB5005917E5 /* Event.c */, + 76F5BD681D2BDCB5005917E5 /* EventData.c */, + 76F5BD691D2BDCB5005917E5 /* extension.c */, + 76F5BD6A1D2BDCB5005917E5 /* IkConstraint.c */, + 76F5BD6B1D2BDCB5005917E5 /* IkConstraintData.c */, + 76F5BD6C1D2BDCB5005917E5 /* Json.c */, + 76F5BD6D1D2BDCB5005917E5 /* Json.h */, + 76F5BD6E1D2BDCB5005917E5 /* MeshAttachment.c */, + 76F5BD6F1D2BDCB5005917E5 /* PathAttachment.c */, + 76F5BD701D2BDCB5005917E5 /* PathConstraint.c */, + 76F5BD711D2BDCB5005917E5 /* PathConstraintData.c */, + 76F5BD721D2BDCB5005917E5 /* RegionAttachment.c */, + 76F5BD731D2BDCB5005917E5 /* Skeleton.c */, + 76F5BD741D2BDCB5005917E5 /* SkeletonBounds.c */, + 76F5BD751D2BDCB5005917E5 /* SkeletonData.c */, + 76F5BD761D2BDCB5005917E5 /* SkeletonJson.c */, + 76F5BD771D2BDCB5005917E5 /* Skin.c */, + 76F5BD781D2BDCB5005917E5 /* Slot.c */, + 76F5BD791D2BDCB5005917E5 /* SlotData.c */, + 76F5BD7A1D2BDCB5005917E5 /* TransformConstraint.c */, + 76F5BD7B1D2BDCB5005917E5 /* TransformConstraintData.c */, + 76F5BD7C1D2BDCB5005917E5 /* VertexAttachment.c */, ); name = "spine-c"; sourceTree = ""; @@ -347,6 +322,12 @@ 43C32867170B0C7F004A9460 /* Resources */ = { isa = PBXGroup; children = ( + 76F5BD9C1D2BDE1C005917E5 /* raptor.atlas */, + 76F5BD9D1D2BDE1C005917E5 /* raptor.json */, + 76F5BD9E1D2BDE1C005917E5 /* raptor.png */, + 76F5BD9F1D2BDE1C005917E5 /* tank.atlas */, + 76F5BDA01D2BDE1C005917E5 /* tank.json */, + 76F5BDA11D2BDE1C005917E5 /* tank.png */, 43F7010C1927FBC700CA4038 /* goblins-mesh.atlas */, 43F7010D1927FBC700CA4038 /* goblins-mesh.json */, 43F7010E1927FBC700CA4038 /* goblins-mesh.png */, @@ -512,19 +493,25 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 76F5BDA51D2BDE1C005917E5 /* tank.atlas in Resources */, 43C3286C170B0DA6004A9460 /* spineboy.json in Resources */, 43C3286E170B0DA6004A9460 /* spineboy.atlas in Resources */, 43C3286F170B0DA6004A9460 /* spineboy.png in Resources */, 43C3287D170B0DBE004A9460 /* Default-568h@2x.png in Resources */, 43C3287E170B0DBE004A9460 /* Default-Landscape~ipad.png in Resources */, 43C3287F170B0DBE004A9460 /* Default.png in Resources */, + 76F5BDA31D2BDE1C005917E5 /* raptor.json in Resources */, 43C32880170B0DBE004A9460 /* Default@2x.png in Resources */, 43C32881170B0DBE004A9460 /* Icon-72.png in Resources */, + 76F5BDA41D2BDE1C005917E5 /* raptor.png in Resources */, 43C32882170B0DBE004A9460 /* Icon-Small-50.png in Resources */, + 76F5BDA21D2BDE1C005917E5 /* raptor.atlas in Resources */, 43C32883170B0DBE004A9460 /* Icon-Small.png in Resources */, 43C32884170B0DBE004A9460 /* Icon-Small@2x.png in Resources */, 43C32885170B0DBE004A9460 /* Icon.png in Resources */, + 76F5BDA71D2BDE1C005917E5 /* tank.png in Resources */, 43C32886170B0DBE004A9460 /* Icon@2x.png in Resources */, + 76F5BDA61D2BDE1C005917E5 /* tank.json in Resources */, 43C32888170B0DBE004A9460 /* iTunesArtwork in Resources */, 43F7010F1927FBC700CA4038 /* goblins-mesh.atlas in Resources */, 43F701101927FBC700CA4038 /* goblins-mesh.json in Resources */, @@ -539,41 +526,46 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 76F5BDAA1D2BDE67005917E5 /* RaptorExample.m in Sources */, + 76F5BD8E1D2BDCB5005917E5 /* PathAttachment.c in Sources */, + 76F5BDAD1D2BDFA2005917E5 /* TankExample.m in Sources */, + 76F5BD931D2BDCB5005917E5 /* SkeletonBounds.c in Sources */, + 76F5BD871D2BDCB5005917E5 /* Event.c in Sources */, + 76F5BD8C1D2BDCB5005917E5 /* Json.c in Sources */, + 76F5BD891D2BDCB5005917E5 /* extension.c in Sources */, + 76F5BD881D2BDCB5005917E5 /* EventData.c in Sources */, + 76F5BD7F1D2BDCB5005917E5 /* AnimationStateData.c in Sources */, + 76F5BD8B1D2BDCB5005917E5 /* IkConstraintData.c in Sources */, + 76F5BD831D2BDCB5005917E5 /* AttachmentLoader.c in Sources */, + 76F5BD9A1D2BDCB5005917E5 /* TransformConstraintData.c in Sources */, + 76F5BD971D2BDCB5005917E5 /* Slot.c in Sources */, + 76F5BD861D2BDCB5005917E5 /* BoundingBoxAttachment.c in Sources */, + 76F5BD9B1D2BDCB5005917E5 /* VertexAttachment.c in Sources */, 43C3282F170B0C19004A9460 /* spine-cocos2d-objc.m in Sources */, + 76F5BD821D2BDCB5005917E5 /* Attachment.c in Sources */, + 76F5BD801D2BDCB5005917E5 /* Atlas.c in Sources */, + 76F5BD911D2BDCB5005917E5 /* RegionAttachment.c in Sources */, 43C32A06170B0F93004A9460 /* main.m in Sources */, + 76F5BD8F1D2BDCB5005917E5 /* PathConstraint.c in Sources */, 43C32A09170B10FF004A9460 /* AppDelegate.m in Sources */, - 43F7FF511927F91900CA4038 /* Animation.c in Sources */, - 43F7FF521927F91900CA4038 /* AnimationState.c in Sources */, - 43F7FF531927F91900CA4038 /* AnimationStateData.c in Sources */, - 43F7FF541927F91900CA4038 /* Atlas.c in Sources */, - 43F7FF551927F91900CA4038 /* AtlasAttachmentLoader.c in Sources */, - 43F7FF561927F91900CA4038 /* Attachment.c in Sources */, - 43F7FF571927F91900CA4038 /* AttachmentLoader.c in Sources */, - 43F7FF581927F91900CA4038 /* Bone.c in Sources */, - 43F7FF591927F91900CA4038 /* BoneData.c in Sources */, - 43F7FF5A1927F91900CA4038 /* BoundingBoxAttachment.c in Sources */, - 43F7FF5B1927F91900CA4038 /* Event.c in Sources */, - 43F7FF5C1927F91900CA4038 /* EventData.c in Sources */, - 43B7CC0A19DC4ACD0031321C /* IkConstraintData.c in Sources */, - 43F7FF5D1927F91900CA4038 /* extension.c in Sources */, - 43F7FF5E1927F91900CA4038 /* Json.c in Sources */, - 43F7FF5F1927F91900CA4038 /* MeshAttachment.c in Sources */, - 43F7FF601927F91900CA4038 /* RegionAttachment.c in Sources */, - 431FF7F51C735D8D00D52DF2 /* WeightedMeshAttachment.c in Sources */, - 43F7FF611927F91900CA4038 /* Skeleton.c in Sources */, - 43F7FF621927F91900CA4038 /* SkeletonBounds.c in Sources */, - 43F7FF631927F91900CA4038 /* SkeletonData.c in Sources */, - 43F7FF641927F91900CA4038 /* SkeletonJson.c in Sources */, - 43F7FF651927F91900CA4038 /* Skin.c in Sources */, - 43B7CC0919DC4ACD0031321C /* IkConstraint.c in Sources */, - 43F7FF671927F91900CA4038 /* Slot.c in Sources */, - 43F7FF681927F91900CA4038 /* SlotData.c in Sources */, + 76F5BD981D2BDCB5005917E5 /* SlotData.c in Sources */, + 76F5BD7E1D2BDCB5005917E5 /* AnimationState.c in Sources */, 43F7FF881927F94800CA4038 /* SkeletonAnimation.m in Sources */, + 76F5BD851D2BDCB5005917E5 /* BoneData.c in Sources */, + 76F5BD7D1D2BDCB5005917E5 /* Animation.c in Sources */, + 76F5BD841D2BDCB5005917E5 /* Bone.c in Sources */, + 76F5BD901D2BDCB5005917E5 /* PathConstraintData.c in Sources */, 43F7FF891927F94800CA4038 /* SkeletonRenderer.m in Sources */, + 76F5BD921D2BDCB5005917E5 /* Skeleton.c in Sources */, + 76F5BD811D2BDCB5005917E5 /* AtlasAttachmentLoader.c in Sources */, + 76F5BD961D2BDCB5005917E5 /* Skin.c in Sources */, 43F7FF8E1927F96700CA4038 /* GoblinsExample.m in Sources */, - 431FF7F41C735D8D00D52DF2 /* TransformConstraintData.c in Sources */, + 76F5BD941D2BDCB5005917E5 /* SkeletonData.c in Sources */, + 76F5BD8A1D2BDCB5005917E5 /* IkConstraint.c in Sources */, 43F7FF8F1927F96700CA4038 /* SpineboyExample.m in Sources */, - 431FF7F31C735D8D00D52DF2 /* TransformConstraint.c in Sources */, + 76F5BD951D2BDCB5005917E5 /* SkeletonJson.c in Sources */, + 76F5BD8D1D2BDCB5005917E5 /* MeshAttachment.c in Sources */, + 76F5BD991D2BDCB5005917E5 /* TransformConstraint.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/spine-cocos2d-objc/src/spine/SkeletonRenderer.h b/spine-cocos2d-objc/src/spine/SkeletonRenderer.h index 05c58deb5..f35e94cae 100644 --- a/spine-cocos2d-objc/src/spine/SkeletonRenderer.h +++ b/spine-cocos2d-objc/src/spine/SkeletonRenderer.h @@ -39,6 +39,7 @@ bool _debugSlots; bool _debugBones; bool _premultipliedAlpha; + bool _skipVisibilityCheck; ccBlendFunc _blendFunc; CCDrawNode* _drawNode; bool _ownsSkeletonData; @@ -57,7 +58,6 @@ - (CCTexture*) getTextureForRegion:(spRegionAttachment*)attachment; - (CCTexture*) getTextureForMesh:(spMeshAttachment*)attachment; -- (CCTexture*) getTextureForWeightedMesh:(spWeightedMeshAttachment*)attachment; // --- Convenience methods for common Skeleton_* functions. - (void) updateWorldTransform; @@ -86,6 +86,7 @@ @property (nonatomic, readonly) spSkeleton* skeleton; @property (nonatomic) bool debugSlots; @property (nonatomic) bool debugBones; +@property (nonatomic) bool skipVisibilityCheck; @property (nonatomic) spBone* rootBone; @end diff --git a/spine-cocos2d-objc/src/spine/SkeletonRenderer.m b/spine-cocos2d-objc/src/spine/SkeletonRenderer.m index 9341af324..5d9f279f4 100644 --- a/spine-cocos2d-objc/src/spine/SkeletonRenderer.m +++ b/spine-cocos2d-objc/src/spine/SkeletonRenderer.m @@ -99,7 +99,11 @@ static const unsigned short quadTriangles[6] = {0, 1, 2, 2, 3, 0}; spSkeletonJson* json = spSkeletonJson_create(atlas); json->scale = scale; - spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, [skeletonDataFile UTF8String]); + spSkeletonData* skeletonData = nil; + + @synchronized(self.class) { + spSkeletonJson_readSkeletonDataFile(json, [skeletonDataFile UTF8String]); + } NSAssert(skeletonData, ([NSString stringWithFormat:@"Error reading skeleton data file: %@\nError: %s", skeletonDataFile, json->error])); spSkeletonJson_dispose(json); if (!skeletonData) return 0; @@ -113,13 +117,19 @@ static const unsigned short quadTriangles[6] = {0, 1, 2, 2, 3, 0}; self = [super init]; if (!self) return nil; - _atlas = spAtlas_createFromFile([atlasFile UTF8String], 0); + @synchronized(self.class) { + _atlas = spAtlas_createFromFile([atlasFile UTF8String], 0); + } NSAssert(_atlas, ([NSString stringWithFormat:@"Error reading atlas file: %@", atlasFile])); if (!_atlas) return 0; spSkeletonJson* json = spSkeletonJson_create(_atlas); json->scale = scale; - spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, [skeletonDataFile UTF8String]); + spSkeletonData* skeletonData; + + @synchronized(self.class) { + skeletonData = spSkeletonJson_readSkeletonDataFile(json, [skeletonDataFile UTF8String]); + } NSAssert(skeletonData, ([NSString stringWithFormat:@"Error reading skeleton data file: %@\nError: %s", skeletonDataFile, json->error])); spSkeletonJson_dispose(json); if (!skeletonData) return 0; @@ -174,21 +184,7 @@ static const unsigned short quadTriangles[6] = {0, 1, 2, 2, 3, 0}; spMeshAttachment_computeWorldVertices(attachment, slot, _worldVertices); texture = [self getTextureForMesh:attachment]; uvs = attachment->uvs; - verticesCount = attachment->verticesCount; - triangles = attachment->triangles; - trianglesCount = attachment->trianglesCount; - r = attachment->r; - g = attachment->g; - b = attachment->b; - a = attachment->a; - break; - } - case SP_ATTACHMENT_WEIGHTED_MESH: { - spWeightedMeshAttachment* attachment = (spWeightedMeshAttachment*)slot->attachment; - spWeightedMeshAttachment_computeWorldVertices(attachment, slot, _worldVertices); - texture = [self getTextureForWeightedMesh:attachment]; - uvs = attachment->uvs; - verticesCount = attachment->uvsCount; + verticesCount = attachment->super.worldVerticesLength; triangles = attachment->triangles; trianglesCount = attachment->trianglesCount; r = attachment->r; @@ -231,7 +227,7 @@ static const unsigned short quadTriangles[6] = {0, 1, 2, 2, 3, 0}; CGSize size = texture.contentSize; GLKVector2 center = GLKVector2Make(size.width / 2.0, size.height / 2.0); GLKVector2 extents = GLKVector2Make(size.width / 2.0, size.height / 2.0); - if (CCRenderCheckVisbility(transform, center, extents)) { + if (_skipVisibilityCheck || CCRenderCheckVisbility(transform, center, extents)) { CCRenderBuffer buffer = [renderer enqueueTriangles:(trianglesCount / 3) andVertexes:verticesCount withState:self.renderState globalSortOrder:0]; for (int i = 0; i * 2 < verticesCount; ++i) { CCVertex vertex; @@ -288,10 +284,6 @@ static const unsigned short quadTriangles[6] = {0, 1, 2, 2, 3, 0}; return (CCTexture*)((spAtlasRegion*)attachment->rendererObject)->page->rendererObject; } -- (CCTexture*) getTextureForWeightedMesh:(spWeightedMeshAttachment*)attachment { - return (CCTexture*)((spAtlasRegion*)attachment->rendererObject)->page->rendererObject; -} - - (CGRect) boundingBox { float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN; float scaleX = self.scaleX, scaleY = self.scaleY; @@ -306,11 +298,7 @@ static const unsigned short quadTriangles[6] = {0, 1, 2, 2, 3, 0}; } else if (slot->attachment->type == SP_ATTACHMENT_MESH) { spMeshAttachment* mesh = (spMeshAttachment*)slot->attachment; spMeshAttachment_computeWorldVertices(mesh, slot, _worldVertices); - verticesCount = mesh->verticesCount; - } else if (slot->attachment->type == SP_ATTACHMENT_WEIGHTED_MESH) { - spWeightedMeshAttachment* mesh = (spWeightedMeshAttachment*)slot->attachment; - spWeightedMeshAttachment_computeWorldVertices(mesh, slot, _worldVertices); - verticesCount = mesh->uvsCount; + verticesCount = mesh->super.worldVerticesLength; } else continue; for (int ii = 0; ii < verticesCount; ii += 2) { diff --git a/spine-cocos2dx/CMakeLists.txt b/spine-cocos2dx/CMakeLists.txt index f491a0380..01390f2e5 100644 --- a/spine-cocos2dx/CMakeLists.txt +++ b/spine-cocos2dx/CMakeLists.txt @@ -1,14 +1,15 @@ +cmake_minimum_required(VERSION 2.8) set(EXAMPLE_DIR "${CMAKE_CURRENT_LIST_DIR}/example") if (NOT EXISTS ${EXAMPLE_DIR}/cocos2d) message("Downloading cocos2dx, this may take some time!") - file(DOWNLOAD "http://www.cocos2d-x.org/filedown/start/334" "${EXAMPLE_DIR}/cocos2dx.zip") + file(DOWNLOAD "http://www.cocos2d-x.org/filedown/start/339" "${EXAMPLE_DIR}/cocos2dx.zip") execute_process( COMMAND ${CMAKE_COMMAND} -E tar x ${EXAMPLE_DIR}/cocos2dx.zip WORKING_DIRECTORY ${EXAMPLE_DIR} ) execute_process( COMMAND ${CMAKE_COMMAND} -E rename - "${EXAMPLE_DIR}/cocos2d-x-3.11.1" "${EXAMPLE_DIR}/cocos2d" + "${EXAMPLE_DIR}/cocos2d-x-3.12" "${EXAMPLE_DIR}/cocos2d" ) execute_process( COMMAND ${CMAKE_COMMAND} -E remove_directory "${EXAMPLE_DIR}/cocos2d/cocos/editor-support/spine" diff --git a/spine-cocos2dx/README.md b/spine-cocos2dx/README.md index a032a783a..d46d9356c 100644 --- a/spine-cocos2dx/README.md +++ b/spine-cocos2dx/README.md @@ -10,7 +10,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-cocos2dx works with data exported from Spine version 3.2.01. +spine-cocos2dx works with data exported from from the latest version of Spine. spine-cocos2dx supports all Spine features. @@ -40,6 +40,7 @@ The Spine cocos2d-x example works on Windows and Mac OS X. 7. Click `Configure`. This will download the cocos2d-x dependency and wire it up with the example source code in `spine-runtimes/spine-cocos2dx/example`. The download is 400mb, so get yourself a cup of tea. 8. Open the `spine-runtimes/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.sln` file in Visual Studio 2015. Visual Studio may ask you to install the Windows XP/7 SDK, which you should install. 9. Expand the cocos2d_libs sub project and delete the `editor-support/spine` group. This will remove the outdated Spine cocos2d-x runtime shipped by cocos2d-x from your build. +9. Expand `References` of the cocos2d_libs sub project, and remove the entry for `libSpine`, which should be marked with an error. 9. Right click the `spine-cocos2d-x` project in the solution explorer and select `Set as Startup Project` from the context menu 10. Click `Local Windows Debugger` to run the example @@ -51,7 +52,7 @@ The Spine cocos2d-x example works on Windows and Mac OS X. 4. Open a terminal, and `cd` into the `spine-runtimes/spine-cocos2dx` folder 5. Type `mkdir build && cd build && cmake ../..`. This will download the cocos2d-x dependency and wire it up with the example source code in `spine-runtimes/spine-cocos2dx/example`. The download is 400mb, so get yourself a cup of tea. 6. Open the Xcode project in `spine-runtimes/spine-cocos2dx/example/proj.ios_mac` -7. Expand the `cocos2d_libs.xcodeproj` sub project, delete the group `editor-support/spine`. This will remove the +7. Expand the `cocos2d_libs.xcodeproj` sub project, delete the group `editor-support/spine`. This will remove the outdated Spine cocos2d-x runtime shipped by cocos2d-x. 8. Click the `Run` button or type `CMD+R` to run the example ## Notes @@ -60,6 +61,7 @@ The Spine cocos2d-x example works on Windows and Mac OS X. ## Examples -- [Raptor](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx/3/example/Classes/RaptorExample.cpp) -- [Spineboy](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx/3/example/Classes/SpineboyExample.cpp) -- [Golbins](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx/3/example/Classes/GoblinsExample.cpp) +- [Raptor](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx/example/Classes/RaptorExample.cpp) +- [Spineboy](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx/example/Classes/SpineboyExample.cpp) +- [Golbins](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx/example/Classes/GoblinsExample.cpp) + diff --git a/spine-cocos2dx/example/Classes/AppDelegate.h b/spine-cocos2dx/example/Classes/AppDelegate.h index 9b0cd0516..2bc788a6f 100644 --- a/spine-cocos2dx/example/Classes/AppDelegate.h +++ b/spine-cocos2dx/example/Classes/AppDelegate.h @@ -41,7 +41,7 @@ public: virtual bool applicationDidFinishLaunching (); virtual void applicationDidEnterBackground (); - virtual void applicationWillEnterForeground (); + virtual void applicationWillEnterForeground (); }; #endif // _APPDELEGATE_H_ diff --git a/spine-cocos2dx/example/Classes/RaptorExample.cpp b/spine-cocos2dx/example/Classes/RaptorExample.cpp index 30b5bae5b..7a62bad09 100644 --- a/spine-cocos2dx/example/Classes/RaptorExample.cpp +++ b/spine-cocos2dx/example/Classes/RaptorExample.cpp @@ -30,7 +30,7 @@ *****************************************************************************/ #include "RaptorExample.h" -#include "BatchingExample.h" +#include "TankExample.h" USING_NS_CC; using namespace spine; @@ -61,7 +61,7 @@ bool RaptorExample::init () { else if (skeletonNode->getTimeScale() == 1) skeletonNode->setTimeScale(0.3f); else - Director::getInstance()->replaceScene(BatchingExample::scene()); + Director::getInstance()->replaceScene(TankExample::scene()); return true; }; _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this); diff --git a/spine-cocos2dx/example/Classes/TankExample.cpp b/spine-cocos2dx/example/Classes/TankExample.cpp new file mode 100644 index 000000000..d1f318d74 --- /dev/null +++ b/spine-cocos2dx/example/Classes/TankExample.cpp @@ -0,0 +1,68 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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 "TankExample.h" +#include "BatchingExample.h" + +USING_NS_CC; +using namespace spine; + +Scene* TankExample::scene () { + Scene *scene = Scene::create(); + scene->addChild(TankExample::create()); + return scene; +} + +bool TankExample::init () { + if (!LayerColor::initWithColor(Color4B(128, 128, 128, 255))) return false; + + skeletonNode = SkeletonAnimation::createWithFile("tank.json", "tank.atlas", 0.5f); + skeletonNode->setAnimation(0, "drive", true); + + skeletonNode->setPosition(Vec2(_contentSize.width / 2 + 400, 20)); + addChild(skeletonNode); + + scheduleUpdate(); + + EventListenerTouchOneByOne* listener = EventListenerTouchOneByOne::create(); + listener->onTouchBegan = [this] (Touch* touch, Event* event) -> bool { + if (!skeletonNode->getDebugBonesEnabled()) + skeletonNode->setDebugBonesEnabled(true); + else if (skeletonNode->getTimeScale() == 1) + skeletonNode->setTimeScale(0.3f); + else + Director::getInstance()->replaceScene(BatchingExample::scene()); + return true; + }; + _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this); + + return true; +} diff --git a/spine-cocos2dx/example/Classes/TankExample.h b/spine-cocos2dx/example/Classes/TankExample.h new file mode 100644 index 000000000..eccbb413d --- /dev/null +++ b/spine-cocos2dx/example/Classes/TankExample.h @@ -0,0 +1,50 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +#ifndef _TANKEXAMPLE_H_ +#define _TANKEXAMPLE_H_ + +#include "cocos2d.h" +#include + +class TankExample : public cocos2d::LayerColor { +public: + static cocos2d::Scene* scene (); + + CREATE_FUNC(TankExample); + + virtual bool init (); + +private: + spine::SkeletonAnimation* skeletonNode; +}; + +#endif // _TANKEXAMPLE_H_ diff --git a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.atlas b/spine-cocos2dx/example/Resources/common/goblins-mesh.atlas similarity index 81% rename from spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.atlas rename to spine-cocos2dx/example/Resources/common/goblins-mesh.atlas index b928522f8..2652027f9 100644 --- a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.atlas +++ b/spine-cocos2dx/example/Resources/common/goblins-mesh.atlas @@ -1,291 +1,292 @@ goblins-mesh.png +size: 512,512 format: RGBA8888 filter: Linear,Linear repeat: none dagger rotate: false - xy: 2, 28 + xy: 26, 147 size: 26, 108 orig: 26, 108 offset: 0, 0 index: -1 goblin/eyes-closed rotate: false - xy: 137, 29 + xy: 329, 334 size: 34, 12 orig: 34, 12 offset: 0, 0 index: -1 goblin/head rotate: false - xy: 26, 357 + xy: 26, 355 size: 103, 66 orig: 103, 66 offset: 0, 0 index: -1 goblin/left-arm rotate: false - xy: 30, 28 + xy: 54, 142 size: 37, 35 orig: 37, 35 offset: 0, 0 index: -1 goblin/left-foot - rotate: false - xy: 134, 260 + rotate: true + xy: 2, 69 size: 65, 31 orig: 65, 31 offset: 0, 0 index: -1 goblin/left-hand rotate: false - xy: 69, 25 + xy: 266, 332 size: 36, 41 orig: 36, 41 offset: 0, 0 index: -1 goblin/left-lower-leg - rotate: false - xy: 134, 293 + rotate: true + xy: 273, 433 size: 33, 70 orig: 33, 70 offset: 0, 0 index: -1 goblin/left-shoulder rotate: false - xy: 137, 43 + xy: 305, 288 size: 29, 44 orig: 29, 44 offset: 0, 0 index: -1 goblin/left-upper-leg rotate: false - xy: 30, 65 + xy: 96, 280 size: 33, 73 orig: 33, 73 offset: 0, 0 index: -1 goblin/neck rotate: false - xy: 201, 387 + xy: 267, 289 size: 36, 41 orig: 36, 41 offset: 0, 0 index: -1 goblin/pelvis rotate: false - xy: 26, 140 + xy: 131, 363 size: 62, 43 orig: 62, 43 offset: 0, 0 index: -1 goblin/right-arm rotate: false - xy: 171, 84 + xy: 304, 334 size: 23, 50 orig: 23, 50 offset: 0, 0 index: -1 goblin/right-foot rotate: false - xy: 134, 225 + xy: 201, 397 size: 63, 33 orig: 63, 33 offset: 0, 0 index: -1 goblin/right-hand rotate: false - xy: 204, 258 + xy: 336, 295 size: 36, 37 orig: 36, 37 offset: 0, 0 index: -1 goblin/right-lower-leg - rotate: false - xy: 201, 430 + rotate: true + xy: 273, 468 size: 36, 76 orig: 36, 76 offset: 0, 0 index: -1 goblin/right-shoulder rotate: false - xy: 130, 89 + xy: 196, 285 size: 39, 45 orig: 39, 45 offset: 0, 0 index: -1 goblin/right-upper-leg - rotate: false - xy: 98, 214 + rotate: true + xy: 131, 282 size: 34, 63 orig: 34, 63 offset: 0, 0 index: -1 goblin/torso rotate: false - xy: 131, 410 + xy: 131, 408 size: 68, 96 orig: 68, 96 offset: 0, 0 index: -1 goblin/undie-straps - rotate: false - xy: 2, 7 + rotate: true + xy: 266, 375 size: 55, 19 orig: 55, 19 offset: 0, 0 index: -1 goblin/undies rotate: false - xy: 199, 227 + xy: 429, 440 size: 36, 29 orig: 36, 29 offset: 0, 0 index: -1 goblingirl/eyes-closed rotate: false - xy: 59, 2 + xy: 96, 257 size: 37, 21 orig: 37, 21 offset: 0, 0 index: -1 goblingirl/head rotate: false - xy: 26, 425 + xy: 26, 423 size: 103, 81 orig: 103, 81 offset: 0, 0 index: -1 goblingirl/left-arm rotate: false - xy: 201, 190 + xy: 390, 434 size: 37, 35 orig: 37, 35 offset: 0, 0 index: -1 goblingirl/left-foot - rotate: false - xy: 134, 192 + rotate: true + xy: 2, 2 size: 65, 31 orig: 65, 31 offset: 0, 0 index: -1 goblingirl/left-hand rotate: false - xy: 196, 109 + xy: 329, 348 size: 35, 40 orig: 35, 40 offset: 0, 0 index: -1 goblingirl/left-lower-leg - rotate: false - xy: 169, 293 + rotate: true + xy: 351, 471 size: 33, 70 orig: 33, 70 offset: 0, 0 index: -1 goblingirl/left-shoulder rotate: false - xy: 107, 30 + xy: 237, 284 size: 28, 46 orig: 28, 46 offset: 0, 0 index: -1 goblingirl/left-upper-leg - rotate: false - xy: 65, 68 + rotate: true + xy: 423, 471 size: 33, 70 orig: 33, 70 offset: 0, 0 index: -1 goblingirl/neck rotate: false - xy: 204, 297 + xy: 328, 390 size: 35, 41 orig: 35, 41 offset: 0, 0 index: -1 goblingirl/pelvis rotate: false - xy: 131, 365 + xy: 131, 318 size: 62, 43 orig: 62, 43 offset: 0, 0 index: -1 goblingirl/right-arm - rotate: false - xy: 100, 97 + rotate: true + xy: 135, 252 size: 28, 50 orig: 28, 50 offset: 0, 0 index: -1 goblingirl/right-foot - rotate: false - xy: 134, 157 + rotate: true + xy: 231, 332 size: 63, 33 orig: 63, 33 offset: 0, 0 index: -1 goblingirl/right-hand - rotate: false - xy: 199, 151 + rotate: true + xy: 351, 433 size: 36, 37 orig: 36, 37 offset: 0, 0 index: -1 goblingirl/right-lower-leg rotate: false - xy: 96, 279 + xy: 54, 179 size: 36, 76 orig: 36, 76 offset: 0, 0 index: -1 goblingirl/right-shoulder rotate: false - xy: 204, 340 + xy: 287, 386 size: 39, 45 orig: 39, 45 offset: 0, 0 index: -1 goblingirl/right-upper-leg rotate: false - xy: 98, 149 + xy: 195, 332 size: 34, 63 orig: 34, 63 offset: 0, 0 index: -1 goblingirl/torso rotate: false - xy: 26, 259 + xy: 26, 257 size: 68, 96 orig: 68, 96 offset: 0, 0 index: -1 goblingirl/undie-straps - rotate: false - xy: 134, 136 + rotate: true + xy: 92, 200 size: 55, 19 orig: 55, 19 offset: 0, 0 index: -1 goblingirl/undies - rotate: false - xy: 196, 78 + rotate: true + xy: 365, 395 size: 36, 29 orig: 36, 29 offset: 0, 0 index: -1 shield rotate: false - xy: 26, 185 + xy: 201, 432 size: 70, 72 orig: 70, 72 offset: 0, 0 index: -1 spear rotate: false - xy: 2, 138 + xy: 2, 136 size: 22, 368 orig: 22, 368 offset: 0, 0 diff --git a/spine-cocos2dx/example/Resources/common/goblins-mesh.json b/spine-cocos2dx/example/Resources/common/goblins-mesh.json index b35360ad1..8443eee97 100644 --- a/spine-cocos2dx/example/Resources/common/goblins-mesh.json +++ b/spine-cocos2dx/example/Resources/common/goblins-mesh.json @@ -1,26 +1,27 @@ { +"skeleton": { "hash": "P7CQ4ImK+tcAICATgSttlZ5HOSM", "spine": "3.3.07", "width": 266.93, "height": 349.6, "images": "./images/" }, "bones": [ { "name": "root" }, { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, - { "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 }, + { "name": "torso", "parent": "hip", "length": 85.82, "rotation": 93.92, "x": -6.42, "y": 1.97 }, + { "name": "neck", "parent": "torso", "length": 18.38, "rotation": -1.51, "x": 81.67, "y": -6.34 }, + { "name": "head", "parent": "neck", "length": 68.28, "rotation": -13.92, "x": 20.93, "y": 11.59 }, + { "name": "left shoulder", "parent": "torso", "length": 35.43, "rotation": -156.96, "x": 74.04, "y": -20.38 }, + { "name": "left arm", "parent": "left shoulder", "length": 35.62, "rotation": 28.16, "x": 37.85, "y": -2.34 }, + { "name": "left upper leg", "parent": "hip", "length": 50.39, "rotation": -89.09, "x": 14.45, "y": 2.81 }, + { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "rotation": -16.65, "x": 56.34, "y": 0.98 }, + { "name": "left foot", "parent": "left lower leg", "length": 46.5, "rotation": 102.43, "x": 58.94, "y": -7.61 }, + { "name": "left hand", "parent": "left arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.07 }, { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, - { "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 }, - { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 }, - { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 }, - { "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 }, - { "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 }, - { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 }, - { "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 }, - { "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 }, - { "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 }, - { "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 }, - { "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 }, - { "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 }, - { "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 }, - { "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 }, - { "name": "spear1", "parent": "left hand", "length": 65.06, "x": 0.48, "y": 17.03, "rotation": 102.43 }, - { "name": "spear2", "parent": "spear1", "length": 61.41, "x": 65.05, "y": 0.04, "rotation": 0.9 }, - { "name": "spear3", "parent": "spear2", "length": 76.79, "x": 61.88, "y": 0.57, "rotation": -0.9 } + { "name": "right shoulder", "parent": "torso", "length": 37.24, "rotation": 133.88, "x": 76.02, "y": 18.14 }, + { "name": "right arm", "parent": "right shoulder", "length": 36.74, "rotation": 36.32, "x": 37.6, "y": 0.31 }, + { "name": "right upper leg", "parent": "hip", "length": 42.45, "rotation": -97.49, "x": -20.07, "y": -6.83 }, + { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "rotation": -14.34, "x": 42.99, "y": -0.61 }, + { "name": "right foot", "parent": "right lower leg", "length": 45.45, "rotation": 110.3, "x": 64.88, "y": 0.04 }, + { "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.35, "x": 36.9, "y": 0.34 }, + { "name": "spear1", "parent": "left hand", "length": 65.06, "rotation": 102.43, "x": 0.48, "y": 17.03 }, + { "name": "spear2", "parent": "spear1", "length": 61.41, "rotation": 0.9, "x": 65.05, "y": 0.04 }, + { "name": "spear3", "parent": "spear2", "length": 76.79, "rotation": -0.9, "x": 61.88, "y": 0.57 } ], "slots": [ { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" }, @@ -52,12 +53,12 @@ "left hand item": { "dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 }, "spear": { - "type": "skinnedmesh", + "type": "mesh", "uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.76608, 0.21781, 0.75642, 0.386, 0.74723, 0.54607, 0.72117, 1, 0.28838, 1, 0.24208, 0.54327, 0.22589, 0.38361, 0.2089, 0.21605, 0.20043, 0.13242, 0, 0.11519, 0.4527, 0, 0.58399, 0 ], - "triangles": [ 5, 6, 4, 6, 7, 4, 4, 7, 3, 2, 9, 1, 9, 10, 1, 10, 12, 1, 12, 13, 1, 1, 13, 0, 10, 11, 12, 3, 8, 2, 8, 9, 2, 7, 8, 3 ], - "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.51, 20, -0.31, -6.16, 0.48, 2, 18, 64.73, -5.03, 0.5, 19, -0.4, -5.06, 0.49, 1, 16, 4.56, 23.91, 1, 1, 16, 41.7, -138.95, 1, 1, 16, 32.42, -141.1, 1, 1, 16, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.5, 19, 0.53, 6.59, 0.49, 2, 19, 62.18, 6.66, 0.51, 20, 0.2, 6.09, 0.48, 1, 20, 30.96, 6.61, 1, 1, 20, 37.26, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], - "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], + "triangles": [ 4, 7, 3, 6, 7, 4, 5, 6, 4, 10, 11, 12, 1, 13, 0, 12, 13, 1, 10, 12, 1, 9, 10, 1, 2, 9, 1, 8, 9, 2, 3, 8, 2, 7, 8, 3 ], + "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.5116, 20, -0.31, -6.16, 0.48839, 2, 18, 64.73, -5.03, 0.50272, 19, -0.4, -5.06, 0.49728, 1, 10, 4.56, 23.91, 1, 1, 10, 41.7, -138.95, 1, 1, 10, 32.41999, -141.1, 1, 1, 10, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.50272, 19, 0.52999, 6.59, 0.49728, 2, 19, 62.18, 6.66, 0.5116, 20, 0.2, 6.09, 0.48839, 1, 20, 30.96, 6.61, 1, 1, 20, 37.25999, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], "hull": 14, + "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], "width": 22, "height": 368 } @@ -68,8 +69,8 @@ "uvs": [ 0.78091, 0.38453, 1, 0.38405, 1, 0.44881, 0.73953, 0.4687, 0.74641, 0.81344, 0.34022, 1, 0.15434, 1, 0.11303, 0.78858, 0.23007, 0.47367, 0, 0.45047, 0, 0.38621, 0.22367, 0.38573, 0.24384, 0, 1, 0 ], "triangles": [ 0, 12, 13, 11, 12, 0, 0, 1, 2, 9, 10, 11, 3, 11, 0, 3, 0, 2, 8, 11, 3, 9, 11, 8, 5, 6, 7, 4, 5, 8, 4, 8, 3, 5, 7, 8 ], "vertices": [ 15.49, -12.82, 21.13, -13.57, 20.16, -20.49, 13.15, -21.67, 8.13, -58.56, -5.13, -77.04, -9.92, -76.36, -7.79, -53.6, -0.03, -20.36, -5.6, -17.04, -4.63, -10.17, 1.12, -10.93, 7.46, 30.24, 26.93, 27.49 ], - "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], "hull": 14, + "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], "width": 26, "height": 108 } @@ -87,10 +88,10 @@ "name": "goblin/head", "type": "mesh", "uvs": [ 0, 0.60494, 0.14172, 0.5145, 0.24218, 0.55229, 0.32667, 0.67806, 0.37969, 0.79352, 0.53505, 0.93014, 0.86056, 1, 0.94071, 0.94169, 0.92098, 0.69923, 0.9888, 0.65497, 0.99003, 0.51643, 0.89632, 0.43561, 0.94487, 0.41916, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80754, 0.16044, 0.66698, 0.01997, 0.4734, 0.01805, 0.29215, 0.19893, 0.25392, 0.31823, 0.09117, 0.324, 0, 0.44331, 0.43271, 0.69153, 0.466, 0.47794, 0.35996, 0.31246, 0.73473, 0.68593, 0.72215, 0.57425, 0.88179, 0.5583, 0.80267, 0.51015 ], - "triangles": [ 26, 20, 19, 21, 20, 26, 15, 14, 13, 12, 15, 13, 11, 16, 15, 11, 15, 12, 26, 17, 25, 18, 26, 19, 17, 26, 18, 30, 25, 17, 30, 17, 16, 30, 16, 11, 1, 22, 21, 23, 22, 1, 2, 1, 21, 2, 21, 26, 29, 30, 11, 29, 11, 10, 28, 25, 30, 0, 23, 1, 9, 29, 10, 25, 3, 2, 25, 2, 26, 29, 27, 28, 29, 28, 30, 24, 3, 25, 24, 25, 28, 24, 28, 27, 8, 29, 9, 27, 29, 8, 4, 3, 24, 5, 24, 27, 4, 24, 5, 7, 6, 27, 7, 27, 8, 5, 27, 6 ], - "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.46, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.6, 23.41, 35.89, 40.17, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.8, -24.31, 17.2, -40.65, 20.68, -33.02 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], + "triangles": [ 5, 27, 6, 7, 27, 8, 7, 6, 27, 4, 24, 5, 5, 24, 27, 4, 3, 24, 27, 29, 8, 8, 29, 9, 24, 28, 27, 24, 25, 28, 24, 3, 25, 29, 28, 30, 29, 27, 28, 25, 2, 26, 25, 3, 2, 9, 29, 10, 0, 23, 1, 28, 25, 30, 29, 11, 10, 29, 30, 11, 2, 21, 26, 2, 1, 21, 23, 22, 1, 1, 22, 21, 30, 16, 11, 30, 17, 16, 30, 25, 17, 17, 26, 18, 18, 26, 19, 26, 17, 25, 11, 15, 12, 11, 16, 15, 12, 15, 13, 15, 14, 13, 21, 20, 26, 26, 20, 19 ], + "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.45999, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.59999, 23.41, 35.89, 40.16999, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.79999, -24.31, 17.2, -40.65, 20.68, -33.02 ], "hull": 24, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], "width": 103, "height": 66 } @@ -100,10 +101,10 @@ "name": "goblin/left-arm", "type": "mesh", "uvs": [ 0.68992, 0.29284, 1, 0.46364, 1, 0.74643, 0.84089, 1, 0.66344, 1, 0.33765, 0.64284, 0, 0.44124, 0, 0, 0.34295, 0 ], - "triangles": [ 6, 7, 8, 5, 6, 8, 0, 5, 8, 0, 1, 2, 5, 0, 2, 4, 5, 2, 3, 4, 2 ], - "vertices": [ 18.6, 8.81, 32.19, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], + "triangles": [ 3, 4, 2, 4, 5, 2, 5, 0, 2, 0, 1, 2, 0, 5, 8, 5, 6, 8, 6, 7, 8 ], + "vertices": [ 18.6, 8.81, 32.18999, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], "width": 37, "height": 35 } @@ -115,8 +116,8 @@ "uvs": [ 0.15733, 0.31873, 0.08195, 0.78502, 0.15884, 0.99366, 0.41633, 0.96804, 0.68822, 0.97636, 1, 0.96388, 0.99385, 0.73501, 0.85294, 0.51862, 0.61479, 0.31056, 0.46991, 0, 0.48032, 0.75604, 0.75994, 0.77706 ], "triangles": [ 0, 9, 8, 10, 0, 8, 10, 8, 7, 11, 10, 7, 11, 7, 6, 1, 0, 10, 11, 6, 5, 3, 1, 10, 4, 10, 11, 4, 11, 5, 3, 10, 4, 2, 1, 3 ], "vertices": [ 2.28, 13.07, -1.76, -1.64, 3.59, -7.8, 20.25, -6.04, 37.91, -5.27, 58.12, -3.71, 57.31, 3.34, 47.78, 9.51, 31.95, 15.05, 21.99, 24.11, 24.03, 0.75, 42.21, 1.16 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], "width": 65, "height": 31 } @@ -127,9 +128,9 @@ "type": "mesh", "uvs": [ 0.518, 0.12578, 1, 0.16285, 0.99788, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42792, 0.17601, 0, 0.43567, 0 ], "triangles": [ 2, 0, 1, 0, 5, 6, 6, 7, 0, 0, 7, 8, 3, 4, 0, 4, 5, 0, 2, 3, 0 ], - "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.48, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], - "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], + "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.47999, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], "hull": 9, + "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], "width": 36, "height": 41 } @@ -140,9 +141,9 @@ "type": "mesh", "uvs": [ 0.95508, 0.20749, 0.81927, 0.65213, 0.94754, 0.77308, 0.67842, 0.97346, 0.46463, 1, 0.26845, 1, 0.04963, 0.90706, 0.2106, 0.60115, 0.07478, 0.40195, 0.18545, 0, 0.28857, 0 ], "triangles": [ 10, 8, 9, 1, 7, 10, 7, 8, 10, 0, 1, 10, 1, 4, 7, 3, 1, 2, 5, 6, 7, 7, 4, 5, 1, 3, 4 ], - "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.19, -18.29 ], - "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], + "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.18999, -18.29 ], "hull": 11, + "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], "width": 33, "height": 70 } @@ -152,10 +153,10 @@ "name": "goblin/left-shoulder", "type": "mesh", "uvs": [ 0.7377, 0.40692, 1, 0.75237, 1, 1, 0.62046, 1, 0.26184, 0.56601, 0, 0.29783, 0, 0, 0.44115, 0 ], - "triangles": [ 5, 6, 7, 4, 5, 7, 4, 7, 0, 3, 4, 0, 3, 0, 1, 3, 1, 2 ], - "vertices": [ 15.18, 5.74, 32.17, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.74, -4.66, 6.54 ], - "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], + "triangles": [ 3, 1, 2, 3, 0, 1, 3, 4, 0, 4, 7, 0, 4, 5, 7, 5, 6, 7 ], + "vertices": [ 15.18, 5.74, 32.16999, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.73999, -4.66, 6.54 ], "hull": 8, + "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], "width": 29, "height": 44 } @@ -167,8 +168,8 @@ "uvs": [ 1, 0.12167, 1, 0.54873, 0.91067, 0.78907, 0.76567, 1, 0.3087, 0.9579, 0, 0.68777, 0, 0.219, 0.51961, 0, 0.87552, 0 ], "triangles": [ 7, 8, 0, 5, 6, 7, 0, 1, 7, 4, 5, 7, 1, 4, 7, 2, 4, 1, 3, 4, 2 ], "vertices": [ 2.33, 13.06, 33.5, 12.57, 51, 9.34, 66.32, 4.31, 63, -10.71, 43.13, -20.58, 8.91, -20.04, -6.79, -2.64, -6.61, 9.1 ], - "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], "hull": 9, + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], "width": 33, "height": 73 } @@ -178,10 +179,10 @@ "name": "goblin/neck", "type": "mesh", "uvs": [ 0.81967, 0.27365, 0.92101, 0.82048, 0.47134, 1, 0.15679, 0.9354, 0, 0.7556, 0.19268, 0.51833, 0.15468, 0.35706, 0, 0.21989, 0.13568, 0, 0.68878, 0, 0.70145, 0.53872 ], - "triangles": [ 6, 8, 9, 6, 9, 0, 7, 8, 6, 10, 5, 6, 0, 10, 6, 10, 0, 1, 3, 4, 5, 2, 5, 10, 2, 10, 1, 3, 5, 2 ], - "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.05, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], - "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], + "triangles": [ 3, 5, 2, 2, 10, 1, 2, 5, 10, 3, 4, 5, 10, 0, 1, 0, 10, 6, 10, 5, 6, 7, 8, 6, 6, 9, 0, 6, 8, 9 ], + "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.04999, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], "hull": 10, + "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], "width": 36, "height": 41 } @@ -193,8 +194,8 @@ "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], "triangles": [ 1, 2, 3, 1, 3, 0 ], "vertices": [ 25.38, -20.73, -36.61, -20.73, -36.61, 22.26, 25.38, 22.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "width": 62, "height": 43 } @@ -204,10 +205,10 @@ "name": "goblin/right-arm", "type": "mesh", "uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24384, 1, 0, 0.86558, 0.20822, 0.10919, 0.50903, 0, 0.85342, 0 ], - "triangles": [ 6, 7, 0, 2, 3, 5, 4, 5, 3, 1, 6, 0, 6, 2, 5, 1, 2, 6 ], - "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.18 ], - "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], + "triangles": [ 1, 2, 6, 6, 2, 5, 1, 6, 0, 4, 5, 3, 2, 3, 5, 6, 7, 0 ], + "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.17999 ], "hull": 8, + "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], "width": 23, "height": 50 } @@ -219,8 +220,8 @@ "uvs": [ 0.40851, 0.0047, 0.59087, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97532, 0.89391, 0.90385, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65984, 0, 0.46577, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71257, 0.715, 0.74681 ], "triangles": [ 1, 10, 11, 1, 13, 0, 14, 1, 2, 1, 12, 13, 12, 1, 11, 14, 10, 1, 15, 14, 2, 15, 2, 3, 9, 10, 14, 15, 3, 4, 7, 8, 9, 14, 7, 9, 6, 14, 15, 5, 6, 15, 7, 14, 6, 4, 5, 15 ], "vertices": [ 17.36, 25.99, 29.13, 15.44, 39.89, 10.8, 48.14, 7.24, 53.84, -2.38, 49.43, -6, 34.84, -6.39, 16.84, -6.87, -2.4, -7.38, -7.58, -3.86, -7.78, 3.7, -7.95, 10.1, -2.57, 22.36, 10.84, 25.97, 22.14, 2.75, 37.31, 2.03 ], - "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], "hull": 14, + "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], "width": 63, "height": 33 } @@ -231,9 +232,9 @@ "type": "mesh", "uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89823, 0.82004, 0.8259, 0.74285, 0.84223, 0.49993, 0.96356, 0.34102, 0.66023, 0 ], "triangles": [ 8, 10, 9, 0, 10, 1, 8, 2, 1, 8, 1, 10, 7, 3, 8, 3, 2, 8, 4, 3, 7, 5, 7, 6, 4, 7, 5 ], - "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.88, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.87999, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], "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 ], "width": 36, "height": 37 } @@ -245,8 +246,8 @@ "uvs": [ 0.88538, 0.22262, 0.76167, 0.3594, 0.75088, 0.78308, 0.95326, 0.84981, 1, 0.60302 ], "triangles": [ 1, 0, 4, 2, 1, 4, 3, 2, 4 ], "vertices": [ -2.82, 15.97, 2.4, 11.71, 18.08, 11.9, 20.27, 19.27, 11.09, 20.62 ], - "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], "hull": 5, + "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], "width": 36, "height": 37 } @@ -257,9 +258,9 @@ "type": "mesh", "uvs": [ 1, 0.27261, 0.81312, 0.52592, 0.79587, 0.71795, 0.95544, 0.80988, 0.85193, 0.95493, 0.47241, 1, 0.14033, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30325, 0.60611, 0 ], "triangles": [ 1, 10, 0, 9, 10, 1, 8, 9, 1, 2, 8, 1, 4, 2, 3, 6, 7, 8, 5, 6, 8, 2, 5, 8, 4, 5, 2 ], - "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.1, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.77, -1.03, 58.99, -9.19, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], + "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.09999, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.76999, -1.03, 58.99, -9.18999, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], "width": 36, "height": 76 } @@ -269,10 +270,10 @@ "name": "goblin/right-shoulder", "type": "mesh", "uvs": [ 0.62008, 0.03708, 0.92131, 0.09048, 1, 0.38319, 0.72049, 0.6937, 0.31656, 1, 0, 1, 0, 0.75106, 0.28233, 0.49988 ], - "triangles": [ 2, 3, 0, 2, 0, 1, 7, 0, 3, 4, 5, 6, 4, 7, 3, 4, 6, 7 ], + "triangles": [ 4, 6, 7, 4, 7, 3, 4, 5, 6, 7, 0, 3, 2, 0, 1, 2, 3, 0 ], "vertices": [ -3.17, -11.05, -9, -0.57, -1.01, 10.33, 16.69, 11.17, 37.41, 8.2, 45.45, -1.16, 36.95, -8.46, 21.2, -7.47 ], - "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], "hull": 8, + "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], "width": 39, "height": 45 } @@ -283,9 +284,9 @@ "type": "mesh", "uvs": [ 0.27018, 0, 0.11618, 0.18177, 0, 0.70688, 0, 0.89577, 0.26668, 1, 0.48718, 1, 0.67618, 0.83532, 1, 0.5161, 1, 0.25543, 0.74618, 0.0571 ], "triangles": [ 9, 8, 7, 9, 1, 0, 6, 9, 7, 6, 1, 9, 2, 1, 6, 4, 3, 2, 6, 4, 2, 5, 4, 6 ], - "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.51, 10.18, 19.13, 18.47, 2.85, 16.32, -8.4, 6.14 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.50999, 10.18, 19.12999, 18.46999, 2.85, 16.32, -8.39999, 6.14 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], "width": 34, "height": 63 } @@ -295,10 +296,10 @@ "name": "goblin/torso", "type": "mesh", "uvs": [ 0, 0.33287, 0.15945, 0.46488, 0.15761, 0.60314, 0.15502, 0.79806, 0.32807, 0.93478, 0.6875, 1, 0.80731, 1, 1, 0.77763, 1, 0.66147, 1, 0.56703, 0.93207, 0.4771, 0.86944, 0.39416, 0.83837, 0.226, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78734, 0.86249, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38316, 0.77692, 0.73446, 0.66478, 0.51012 ], - "triangles": [ 0, 15, 14, 20, 14, 13, 20, 13, 12, 1, 0, 14, 20, 12, 11, 20, 1, 14, 22, 20, 11, 22, 11, 10, 19, 1, 20, 19, 20, 22, 2, 1, 19, 18, 22, 10, 18, 10, 9, 19, 22, 18, 18, 9, 8, 21, 18, 8, 21, 8, 7, 17, 2, 19, 21, 17, 19, 21, 19, 18, 3, 2, 17, 16, 21, 7, 17, 21, 16, 4, 3, 17, 5, 17, 16, 4, 17, 5, 6, 16, 7, 5, 16, 6 ], - "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.88, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], + "triangles": [ 5, 16, 6, 6, 16, 7, 4, 17, 5, 5, 17, 16, 4, 3, 17, 17, 21, 16, 16, 21, 7, 3, 2, 17, 21, 19, 18, 21, 17, 19, 17, 2, 19, 21, 8, 7, 21, 18, 8, 18, 9, 8, 19, 22, 18, 18, 10, 9, 18, 22, 10, 2, 1, 19, 19, 20, 22, 19, 1, 20, 22, 11, 10, 22, 20, 11, 20, 1, 14, 20, 12, 11, 1, 0, 14, 20, 13, 12, 20, 14, 13, 0, 15, 14 ], + "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.87999, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], "hull": 16, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], "width": 68, "height": 96 } @@ -309,9 +310,9 @@ "type": "mesh", "uvs": [ 0.36097, 0.44959, 0.66297, 0.60591, 1, 0.19486, 1, 0.57117, 0.75897, 1, 0.38697, 1, 0, 0.26433, 0, 0, 0.12497, 0 ], "triangles": [ 6, 7, 8, 6, 8, 0, 3, 1, 2, 5, 0, 1, 6, 0, 5, 4, 1, 3, 5, 1, 4 ], - "vertices": [ -10.56, 12.87, 6.53, 9.9, 25.62, 17.71, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], + "vertices": [ -10.56, 12.87, 6.53, 9.89999, 25.62, 17.70999, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], "width": 55, "height": 19 } @@ -322,9 +323,9 @@ "type": "mesh", "uvs": [ 0, 0.32029, 0.14893, 0.59457, 0.22437, 1, 0.35909, 1, 0.50998, 1, 0.79559, 0.58453, 0.9842, 0.28015, 1, 0.00588, 0.46957, 0.17646, 0, 0.03933, 0.48843, 0.59122, 0.48114, 0.43099 ], "triangles": [ 6, 8, 7, 0, 9, 8, 11, 8, 6, 0, 8, 11, 5, 11, 6, 10, 11, 5, 1, 0, 11, 1, 11, 10, 3, 2, 1, 10, 3, 1, 4, 10, 5, 3, 10, 4 ], - "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.59, 22.22, 6.11, 22.92, 14.05, 3.75, 9.44, -13.08, 13.71, 4.21, -2.59, 4.03, 2.05 ], - "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], + "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.58999, 22.22, 6.11, 22.92, 14.05, 3.75, 9.43999, -13.08, 13.71, 4.21, -2.58999, 4.03, 2.05 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], "width": 36, "height": 29 } @@ -757,7 +758,7 @@ ] } }, - "ffd": { + "deform": { "default": { "left hand item": { "spear": [ @@ -769,19 +770,19 @@ { "time": 0, "offset": 26, - "vertices": [ 2.34, 0.14 ], + "vertices": [ 2.34754, 0.14469 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.5, "offset": 8, - "vertices": [ -1.19, 4.31, 0.07, 6.41, 1.66, 6.18, 1.75, 3.59 ], + "vertices": [ -1.19415, 4.31531, 0.07279, 6.41351, 1.66048, 6.18882, 1.75232, 3.59555 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1, "offset": 26, - "vertices": [ 2.34, 0.14 ] + "vertices": [ 2.34754, 0.14469 ] } ] } @@ -795,22 +796,22 @@ }, { "time": 0.2, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08, -1.08, 0.08, -1.08, 0.08, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08 ], + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391, -1.08534, 0.08391, -1.08534, 0.08391, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.3666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09, 1.47, 0.09, 1.47, 0.09, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09 ], + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017, 1.47305, 0.09017, 1.47305, 0.09017, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017 ], "curve": [ 0.621, 0, 0.75, 1 ] }, { "time": 0.7, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17, -1.17, -0.17, -1.17, -0.17, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17 ], + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183, -1.1755, -0.17182, -1.1755, -0.17183, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.8666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08, 0.38, 0.08, 0.38, 0.08, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08 ], + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446, 0.38687, 0.08446, 0.38687, 0.08446, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1 } @@ -821,35 +822,35 @@ { "time": 0, "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] }, { "time": 0.1333 }, { "time": 0.2333, "offset": 8, - "vertices": [ -3.96, -2.34, -5.8, -12.47, -2.23, -12.99, 2.02, -9.1, 0, 0, 0, 0, 0, 0, -1.35, -5.28 ] + "vertices": [ -3.96072, -2.34594, -5.80445, -12.47629, -2.23129, -12.99037, 2.02941, -9.1036, 0, 0, 0, 0, 0, 0, -1.35254, -5.2883 ] }, { "time": 0.3666, "offset": 8, - "vertices": [ 0.66, 0.33, 0.33, 2.69, -0.48, 2.54, -1.13, 1.38, 0, 0, 0, 0, 0, 0, -0.11, 0.79 ] + "vertices": [ 0.66504, 0.33548, 0.33902, 2.69014, -0.4817, 2.54524, -1.13592, 1.38562, 0, 0, 0, 0, 0, 0, -0.11907, 0.79273 ] }, { "time": 0.5, "curve": "stepped" }, { "time": 0.6333 }, { "time": 0.7333, "offset": 8, - "vertices": [ -2.97, 9.4, -6.91, 19.92, -10.55, 18.41, -12.37, 12.38, -4.72, 6.3, 0, 0, -1.48, 4.88, -7.06, 10.7 ] + "vertices": [ -2.97737, 9.40254, -6.91661, 19.92794, -10.55287, 18.41085, -12.37161, 12.38473, -4.72606, 6.30798, 0, 0, -1.48902, 4.88944, -7.06773, 10.70101 ] }, { "time": 0.8333, "offset": 6, - "vertices": [ 1.05, 1.56, -2.52, 7.99, -5.52, 17.14, -8.93, 15.79, -10.73, 10.22, -4.23, 5.36, 0, 0, 0, 0, -5.83, 8.55 ] + "vertices": [ 1.05318, 1.56361, -2.52722, 7.9974, -5.5203, 17.14136, -8.93317, 15.79635, -10.73747, 10.22055, -4.23801, 5.36992, 0, 0, 0, 0, -5.83147, 8.55531 ] }, { "time": 1, "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] } ] }, @@ -859,22 +860,22 @@ { "time": 0.1333, "offset": 6, - "vertices": [ -0.68, -4.13 ] + "vertices": [ -0.68989, -4.13283 ] }, { "time": 0.3333, "offset": 6, - "vertices": [ -1.04, -3.1 ] + "vertices": [ -1.04945, -3.10476 ] }, { "time": 0.7, "offset": 6, - "vertices": [ -1.42, -6.3 ] + "vertices": [ -1.4245, -6.30616 ] }, { "time": 0.8666, "offset": 6, - "vertices": [ -1.13, -1.79 ] + "vertices": [ -1.13541, -1.79035 ] }, { "time": 1 } ] @@ -885,38 +886,38 @@ { "time": 0.1333, "offset": 2, - "vertices": [ -2.81, 2.63, -2.35, 3.89, -1.99, 4.86, -0.93, 5.57, -0.48, 5.09, -0.34, 3.42, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31, 1.91, -1.32, 3.65 ] + "vertices": [ -2.81258, 2.63114, -2.35238, 3.89441, -1.99921, 4.8639, -0.93273, 5.57982, -0.48886, 5.09854, -0.34812, 3.42912, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31305, 1.91371, -1.32986, 3.65703 ] }, { "time": 0.2333, "offset": 2, - "vertices": [ -6.39, 6.41, -7.74, 8.27, -7.02, 11.35, -4.03, 13.93, -2.5, 12.62, -1.46, 7.58, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84, 2.61, -4.53, 7.92 ] + "vertices": [ -6.39088, 6.41245, -7.74575, 8.27191, -7.02471, 11.35894, -4.0347, 13.93454, -2.50399, 12.62962, -1.46124, 7.58915, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84765, 2.61215, -4.53955, 7.92357 ] }, { "time": 0.3, "offset": 2, - "vertices": [ -8.27, 6.68, -9.29, 10.13, -8.62, 14.71, -4.58, 18.81, -2.2, 17.1, -0.07, 9.9, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94, 2.38, -4.59, 10.01 ] + "vertices": [ -8.27184, 6.68821, -9.29764, 10.13797, -8.62231, 14.71339, -4.58629, 18.81939, -2.20304, 17.10709, -0.07794, 9.9046, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94624, 2.38007, -4.59398, 10.01888 ] }, { "time": 0.3666, "offset": 2, - "vertices": [ -10.47, 9.44, -13.36, 12.4, -14.32, 16.94, -9.24, 23.55, -5.51, 21.51, -1.19, 11.53, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14, 2.29, -6.63, 11.37 ] + "vertices": [ -10.47683, 9.44175, -13.36882, 12.40982, -14.32568, 16.94392, -9.24462, 23.55674, -5.51711, 21.51377, -1.19581, 11.53192, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14847, 2.29389, -6.63418, 11.37127 ] }, { "time": 0.5, "offset": 2, - "vertices": [ -5.42, 4.36, -10.59, 7.04, -11.64, 11.55, -6.19, 20.12, -1.45, 18.05, 4.86, 6.41, 2.81, 0.27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96, 4.94 ] + "vertices": [ -5.42473, 4.36854, -10.59004, 7.04468, -11.64251, 11.55845, -6.19665, 20.12805, -1.45497, 18.05411, 4.86619, 6.41678, 2.81462, 0.27601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96412, 4.94829 ] }, { "time": 0.6333 }, { "time": 0.7333, "offset": 4, - "vertices": [ 1.31, -6.84, -0.87, -12.54, -5.98, -14.08, -7.15, -11.63, -5.67, -4.83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06, -6.93 ] + "vertices": [ 1.31462, -6.84099, -0.87905, -12.54479, -5.9851, -14.08367, -7.15892, -11.63193, -5.6792, -4.83544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06163, -6.93844 ] }, { "time": 0.8, "offset": 4, - "vertices": [ 0.65, -3.42, -0.43, -6.27, -2.99, -7.04, -3.57, -5.81, -2.83, -2.41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79, -1.28, 0, 0, 0, 0, -1.03, -3.46 ] + "vertices": [ 0.65731, -3.42049, -0.43952, -6.27239, -2.99255, -7.04183, -3.57946, -5.81596, -2.83959, -2.41772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79687, -1.2802, 0, 0, 0, 0, -1.03081, -3.46922 ] }, { "time": 0.8666 } ] @@ -926,13 +927,13 @@ { "time": 0, "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] }, { "time": 0.5 }, { "time": 1, "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] } ] }, @@ -942,7 +943,7 @@ { "time": 0.6, "offset": 6, - "vertices": [ 1.8, -1.56 ] + "vertices": [ 1.80396, -1.56552 ] }, { "time": 1 } ] @@ -951,17 +952,17 @@ "right upper leg": [ { "time": 0, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] }, { "time": 0.3333 }, { "time": 0.8666, "offset": 14, - "vertices": [ 0.13, -2.35, -1.33, -5.99, -1.35, -4.43 ] + "vertices": [ 0.13424, -2.35377, -1.33317, -5.99572, -1.35861, -4.43323 ] }, { "time": 1, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] } ] }, @@ -970,37 +971,37 @@ { "time": 0, "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] }, { "time": 0.1333, "offset": 14, - "vertices": [ 1.31, -0.59, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + "vertices": [ 1.31318, -0.59727, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] }, { "time": 0.3, "offset": 14, - "vertices": [ 6.03, -3.13, 7.55, -1.38, 6.79, 0.31, 4.23, 1.14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07, -5.16, 0, 0, 4, 0.27, 0, 0, 0, 0, 3.43, -3.52 ] + "vertices": [ 6.03761, -3.13561, 7.55475, -1.38111, 6.79747, 0.31171, 4.23503, 1.14012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07575, -5.16824, 0, 0, 4.0041, 0.27245, 0, 0, 0, 0, 3.4376, -3.52286 ] }, { "time": 0.5, "offset": 14, - "vertices": [ 2.25, -0.87, 2.57, -0.56, 3.17, -0.57, 1.48, 0.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22, -4.43, 0, 0, 1.48, 0.01, 0, 0, 0, 0, 0.31, -3.28, -1.53, 0.17 ] + "vertices": [ 2.25942, -0.87202, 2.575, -0.56861, 3.17112, -0.57003, 1.48704, 0.9924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22451, -4.43862, 0, 0, 1.48691, 0.01586, 0, 0, 0, 0, 0.31388, -3.28095, -1.53797, 0.17803 ] }, { "time": 0.6333, "offset": 14, - "vertices": [ 0.75, -1.51, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + "vertices": [ 0.75002, -1.51701, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] }, { "time": 0.8666, "offset": 14, - "vertices": [ 0.62, -1.26, 0.38, -2.2, 3.25, -0.5, 2.41, 2.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.66, -3.1, 0, 0, 2.3, -1.15, 0, 0, 0, 0, -0.07, -3.63, -0.93, 0.1 ] + "vertices": [ 0.62202, -1.26262, 0.38489, -2.20701, 3.25048, -0.50042, 2.41108, 2.39315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6639, -3.10099, 0, 0, 2.30655, -1.15196, 0, 0, 0, 0, -0.07676, -3.63497, -0.9321, 0.1079 ] }, { "time": 1, "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] } ] }, @@ -1009,32 +1010,32 @@ { "time": 0, "offset": 2, - "vertices": [ -1.77, 0.54, -0.96, -1.03, -0.39, -0.24, -1.77, 0.54 ] + "vertices": [ -1.77696, 0.54759, -0.96145, -1.03793, -0.39148, -0.24071, -1.77696, 0.54759 ] }, { "time": 0.1333, "offset": 2, - "vertices": [ -2.25, -1.03, -1.49, -4.23, -0.74, -2.84, -1.9, 0.54 ] + "vertices": [ -2.25683, -1.03177, -1.49719, -4.23861, -0.74469, -2.84906, -1.90072, 0.54477 ] }, { "time": 0.3333, "offset": 2, - "vertices": [ -2.37, -0.05, -0.49, 0.19, -0.9, 1.16, -1.6, 2.7, 0.96, 0.8 ] + "vertices": [ -2.37974, -0.05431, -0.49433, 0.19436, -0.90861, 1.16519, -1.60956, 2.70798, 0.96186, 0.80615 ] }, { "time": 0.7, "offset": 2, - "vertices": [ -0.91, -2.76, -0.62, -3.63, -0.84, -2.26, -2.56, 0.52 ] + "vertices": [ -0.91714, -2.76567, -0.62214, -3.63489, -0.8494, -2.26772, -2.56076, 0.5297 ] }, { "time": 0.8666, "offset": 2, - "vertices": [ -2.56, 0.52, -1.58, 0.32, -1.38, 0.32, -2.56, 0.52 ] + "vertices": [ -2.56076, 0.5297, -1.58064, 0.32031, -1.3847, 0.32476, -2.56076, 0.5297 ] }, { "time": 1, "offset": 2, - "vertices": [ -1.77, 0.54, -0.8, 0.53, -0.8, 0.53, -1.77, 0.54 ] + "vertices": [ -1.77696, 0.54759, -0.80128, 0.53413, -0.80128, 0.53413, -1.77696, 0.54759 ] } ] }, @@ -1042,35 +1043,35 @@ "undies": [ { "time": 0, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] }, { "time": 0.1333, - "vertices": [ 0.72, 0.43, 7.2, -0.16, 1.37, 0, 1.37, 0, 1.37, 0, 1.25, 0.04, -0.99, -2.95, -1.37, -3.07, 1.37, 0, 0.35, -0.29, 2.99, -0.07, 3.9, -0.14 ] + "vertices": [ 0.72659, 0.43319, 7.20416, -0.1638, 1.37759, 0, 1.37759, 0, 1.37759, 0, 1.25279, 0.0464, -0.99861, -2.95085, -1.37542, -3.07404, 1.37759, 0, 0.35279, -0.29279, 2.99218, -0.07019, 3.90478, -0.14039 ] }, { "time": 0.3333, - "vertices": [ 1.16, 0, 2.1, -0.23, 0, 0, 0, 0, 0, 0, 2.24, -0.24, -0.43, 0.6, -1.55, 0.48 ] + "vertices": [ 1.16999, 0, 2.10599, -0.234, 0, 0, 0, 0, 0, 0, 2.24999, -0.24999, -0.4344, 0.60551, -1.55939, 0.48051 ] }, { "time": 0.5333, - "vertices": [ 1.16, 0, -0.23, -0.93, -2.92, 0.35, 0, 0, 0, 0, 0.49, -0.24, -0.64, -2.07, -0.64, -2.07 ] + "vertices": [ 1.16999, 0, -0.234, -0.93599, -2.92499, 0.35099, 0, 0, 0, 0, 0.49999, -0.24999, -0.64078, -2.07914, -0.64078, -2.07914 ] }, { "time": 0.7, - "vertices": [ 1.86, -0.11, 4.66, -0.09, -1.76, 0.21, 0, 0, -0.56, 0.32, -1.13, -1.15, -2.19, -3.47, -1.29, -3.47, 0, 0, 0, 0, 1.58, -0.04, 2.65, 0.16 ] + "vertices": [ 1.8627, -0.11514, 4.66326, -0.09099, -1.76428, 0.21171, 0, 0, -0.56832, 0.32832, -1.13833, -1.1511, -2.19996, -3.47068, -1.29718, -3.47068, 0, 0, 0, 0, 1.58785, -0.04642, 2.65941, 0.16714 ] }, { "time": 0.8333, - "vertices": [ 2.41, -0.2, 8.58, 0.58, -0.83, 0.1, 0, 0, -1.02, 0.59, -2.44, -1.87, -1.62, 0, 0, 0, 0, 0, 0, 0, 2.85, -0.08, 4.78, 0.3 ] + "vertices": [ 2.41687, -0.20725, 8.58108, 0.585, -0.83571, 0.10028, 0, 0, -1.02299, 0.59098, -2.44899, -1.872, -1.62499, 0, 0, 0, 0, 0, 0, 0, 2.85813, -0.08356, 4.78695, 0.30086 ] }, { "time": 0.8666, - "vertices": [ 2.01, -0.02, 8.98, 0.44, -0.2, 0.08, 0.45, 0, -0.35, 0.47, -1.84, -1.44, -0.79, 1.26, 0.53, 1.23, 0.45, 0, 0.11, -0.09, 3.28, -0.09, 5.13, 0.19 ] + "vertices": [ 2.01969, -0.0214, 8.98545, 0.4446, -0.20937, 0.08022, 0.45919, 0, -0.35919, 0.47279, -1.84159, -1.4488, -0.79153, 1.2642, 0.53285, 1.23981, 0.45919, 0, 0.11759, -0.09759, 3.2839, -0.09025, 5.13115, 0.19388 ] }, { "time": 1, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] } ] } diff --git a/spine-cocos2dx/example/Resources/common/goblins-mesh.png b/spine-cocos2dx/example/Resources/common/goblins-mesh.png new file mode 100644 index 000000000..6eaf853b1 Binary files /dev/null and b/spine-cocos2dx/example/Resources/common/goblins-mesh.png differ diff --git a/spine-cocos2dx/example/Resources/common/raptor.atlas b/spine-cocos2dx/example/Resources/common/raptor.atlas index c90da0078..b59a1747c 100644 --- a/spine-cocos2dx/example/Resources/common/raptor.atlas +++ b/spine-cocos2dx/example/Resources/common/raptor.atlas @@ -1,251 +1,251 @@ raptor.png -size: 1022,1022 +size: 2048,2048 format: RGBA8888 filter: Linear,Linear repeat: none back_arm rotate: false - xy: 410, 545 - size: 46, 29 - orig: 46, 29 + xy: 830, 1093 + size: 91, 57 + orig: 91, 57 offset: 0, 0 index: -1 back_bracer - rotate: false - xy: 540, 548 - size: 39, 28 - orig: 39, 28 + rotate: true + xy: 217, 113 + size: 77, 55 + orig: 77, 55 offset: 0, 0 index: -1 back_hand rotate: true - xy: 504, 538 - size: 36, 34 - orig: 36, 34 + xy: 275, 501 + size: 72, 68 + orig: 72, 68 offset: 0, 0 index: -1 back_knee rotate: false - xy: 299, 478 - size: 49, 67 - orig: 49, 67 + xy: 583, 955 + size: 97, 134 + orig: 97, 134 offset: 0, 0 index: -1 back_thigh rotate: true - xy: 140, 247 - size: 39, 24 - orig: 39, 24 + xy: 440, 689 + size: 78, 47 + orig: 78, 47 offset: 0, 0 index: -1 eyes_open rotate: true - xy: 2, 2 - size: 47, 45 - orig: 47, 45 + xy: 495, 848 + size: 93, 89 + orig: 93, 89 offset: 0, 0 index: -1 front_arm rotate: false - xy: 360, 544 - size: 48, 30 - orig: 48, 30 + xy: 2, 5 + size: 96, 60 + orig: 96, 60 offset: 0, 0 index: -1 front_bracer - rotate: false - xy: 538, 578 - size: 41, 29 - orig: 41, 29 + rotate: true + xy: 217, 192 + size: 81, 58 + orig: 81, 58 offset: 0, 0 index: -1 front_hand rotate: false - xy: 538, 609 - size: 41, 38 - orig: 41, 38 + xy: 586, 878 + size: 82, 75 + orig: 82, 75 offset: 0, 0 index: -1 front_open_hand - rotate: false - xy: 894, 782 - size: 43, 44 - orig: 43, 44 + rotate: true + xy: 495, 760 + size: 86, 87 + orig: 86, 87 offset: 0, 0 index: -1 front_thigh rotate: false - xy: 942, 849 - size: 57, 29 - orig: 57, 29 + xy: 714, 1092 + size: 114, 58 + orig: 114, 58 offset: 0, 0 index: -1 gun rotate: false - xy: 785, 774 - size: 107, 103 - orig: 107, 103 + xy: 2, 67 + size: 213, 206 + orig: 213, 206 offset: 0, 0 index: -1 gun_nohand rotate: false - xy: 614, 703 - size: 105, 102 - orig: 105, 102 + xy: 1563, 1547 + size: 210, 203 + orig: 210, 203 offset: 0, 0 index: -1 head rotate: false - xy: 2, 137 - size: 136, 149 - orig: 136, 149 + xy: 2, 275 + size: 271, 298 + orig: 271, 298 offset: 0, 0 index: -1 lower_leg rotate: true - xy: 780, 699 - size: 73, 98 - orig: 73, 98 + xy: 386, 943 + size: 146, 195 + orig: 146, 195 offset: 0, 0 index: -1 mouth_smile - rotate: true - xy: 49, 2 - size: 47, 30 - orig: 47, 30 + rotate: false + xy: 100, 6 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 neck - rotate: true - xy: 1001, 860 - size: 18, 21 - orig: 18, 21 + rotate: false + xy: 1012, 1109 + size: 36, 41 + orig: 36, 41 offset: 0, 0 index: -1 raptor_arm_back rotate: false - xy: 940, 936 - size: 82, 86 - orig: 82, 86 + xy: 330, 769 + size: 163, 172 + orig: 163, 172 offset: 0, 0 index: -1 raptor_body rotate: false - xy: 2, 737 - size: 610, 285 - orig: 610, 285 + xy: 2, 1468 + size: 1219, 570 + orig: 1219, 570 offset: 0, 0 index: -1 raptor_front_arm rotate: true - xy: 195, 464 - size: 81, 102 - orig: 81, 102 + xy: 1223, 1445 + size: 162, 203 + orig: 162, 203 offset: 0, 0 index: -1 raptor_front_leg rotate: false - xy: 2, 478 - size: 191, 257 - orig: 191, 257 + xy: 2, 952 + size: 382, 514 + orig: 382, 514 offset: 0, 0 index: -1 raptor_hindleg_back rotate: false - xy: 614, 807 - size: 169, 215 - orig: 169, 215 + xy: 1223, 1609 + size: 338, 429 + orig: 338, 429 offset: 0, 0 index: -1 raptor_horn rotate: false - xy: 360, 655 - size: 182, 80 - orig: 182, 80 + xy: 714, 1307 + size: 363, 159 + orig: 363, 159 offset: 0, 0 index: -1 raptor_horn_back rotate: false - xy: 360, 576 - size: 176, 77 - orig: 176, 77 + xy: 714, 1152 + size: 351, 153 + orig: 351, 153 offset: 0, 0 index: -1 raptor_jaw rotate: false - xy: 785, 879 - size: 153, 143 - orig: 153, 143 + xy: 1563, 1752 + size: 305, 286 + orig: 305, 286 offset: 0, 0 index: -1 raptor_saddle_noshadow rotate: false - xy: 2, 288 - size: 163, 188 - orig: 163, 188 + xy: 2, 575 + size: 326, 375 + orig: 326, 375 offset: 0, 0 index: -1 raptor_saddle_strap_front - rotate: false - xy: 721, 710 - size: 57, 95 - orig: 57, 95 + rotate: true + xy: 1558, 1431 + size: 114, 189 + orig: 114, 189 offset: 0, 0 index: -1 raptor_saddle_strap_rear - rotate: true - xy: 940, 880 - size: 54, 74 - orig: 54, 74 + rotate: false + xy: 1079, 1318 + size: 108, 148 + orig: 108, 148 offset: 0, 0 index: -1 raptor_saddle_w_shadow rotate: false - xy: 195, 547 - size: 163, 188 - orig: 163, 188 + xy: 386, 1091 + size: 326, 375 + orig: 326, 375 offset: 0, 0 index: -1 raptor_tongue rotate: true - xy: 544, 649 - size: 86, 64 - orig: 86, 64 + xy: 1428, 1436 + size: 171, 128 + orig: 171, 128 offset: 0, 0 index: -1 stirrup_back rotate: false - xy: 458, 539 - size: 44, 35 - orig: 44, 35 + xy: 923, 1081 + size: 87, 69 + orig: 87, 69 offset: 0, 0 index: -1 stirrup_front - rotate: true - xy: 81, 4 - size: 45, 50 - orig: 45, 50 + rotate: false + xy: 1775, 1650 + size: 89, 100 + orig: 89, 100 offset: 0, 0 index: -1 stirrup_strap rotate: true - xy: 894, 828 - size: 49, 46 - orig: 49, 46 + xy: 1775, 1551 + size: 97, 91 + orig: 97, 91 offset: 0, 0 index: -1 torso - rotate: true - xy: 610, 647 - size: 54, 91 - orig: 54, 91 + rotate: false + xy: 330, 585 + size: 108, 182 + orig: 108, 182 offset: 0, 0 index: -1 visor - rotate: false - xy: 2, 51 - size: 131, 84 - orig: 131, 84 + rotate: true + xy: 1870, 1777 + size: 261, 168 + orig: 261, 168 offset: 0, 0 index: -1 diff --git a/spine-cocos2dx/example/Resources/common/raptor.json b/spine-cocos2dx/example/Resources/common/raptor.json index df9892de6..24504ac67 100644 --- a/spine-cocos2dx/example/Resources/common/raptor.json +++ b/spine-cocos2dx/example/Resources/common/raptor.json @@ -1,167 +1,202 @@ { -"skeleton": { "hash": "r3IJRaLbaxgEoW1YBAOrYT69jB4", "spine": "Dev", "width": 1224.2, "height": 1052.38 }, +"skeleton": { "hash": "tzTkzbBrpNYAwwMjxvin8GH1NPg", "spine": "3.3.07", "width": 1223.72, "height": 1055.5, "images": "./images/" }, "bones": [ { "name": "root" }, - { "name": "front_foot_goal", "parent": "root", "x": -45.79, "y": -28.67, "rotation": -0.94 }, - { "name": "hip", "parent": "root", "x": -136.78, "y": 415.47, "rotation": 3.15 }, - { "name": "rear_foot_goal", "parent": "root", "x": 33.43, "y": 30.81 }, - { "name": "front_leg1", "parent": "hip", "length": 251.74, "x": 27.36, "y": -28.27, "rotation": -51.5 }, - { "name": "front_leg_goal", "parent": "front_foot_goal", "x": -106.06, "y": 115.58 }, - { "name": "rear_leg1", "parent": "hip", "length": 226.27, "x": 55.19, "y": -71.25, "rotation": -54.76 }, - { "name": "rear_leg_goal", "parent": "rear_foot_goal", "x": -127.51, "y": 75.99 }, - { "name": "tail1", "parent": "hip", "length": 162.53, "x": -20.86, "y": 6.87, "rotation": 162.92 }, - { "name": "torso1", "parent": "hip", "length": 126.25, "x": 30.03, "y": -0.4, "rotation": -4.97 }, - { "name": "front_leg2", "parent": "front_leg1", "length": 208.54, "x": 251.03, "y": 0.16, "rotation": 261.93 }, - { "name": "rear_leg2", "parent": "rear_leg1", "length": 172.58, "x": 226.32, "y": 0.23, "rotation": -92.25 }, - { "name": "saddle", "parent": "torso1", "length": 50.91, "x": 4.56, "y": 71.86, "rotation": 91.8 }, - { "name": "tail2", "parent": "tail1", "length": 130.02, "x": 162.53, "y": -0.82, "rotation": 30.3 }, - { "name": "torso2", "parent": "torso1", "length": 121.2, "x": 126.25, "y": -0.37, "rotation": 39.84 }, - { "name": "front_arm1", "parent": "torso2", "length": 109.99, "x": 46.37, "y": -84.61, "rotation": 224.54 }, - { "name": "front_leg3", "parent": "front_leg2", "length": 118.18, "x": 208.5, "y": -1.63, "rotation": 85.46 }, - { "name": "neck", "parent": "torso2", "length": 70.59, "x": 121.19, "y": 0.34, "rotation": 41.37 }, - { "name": "rear_arm1", "parent": "torso2", "length": 109.56, "x": 57.05, "y": -95.38, "rotation": -124.71 }, - { "name": "rear_leg3", "parent": "rear_leg2", "length": 103.05, "x": 172.31, "y": 2.21, "rotation": 82.81 }, - { "name": "saddle_strap_front1", "parent": "saddle", "length": 97.27, "x": -27.36, "y": -73.38, "rotation": -148.11 }, - { "name": "saddle_strap_rear1", "parent": "saddle", "length": 38.62, "x": -33.34, "y": 87.32, "rotation": 151.13 }, - { "name": "spineboy_front_arm_goal", "parent": "saddle", "x": -50.7, "y": -96.93 }, - { "name": "spineboy_hip", "parent": "saddle", "length": 0.52, "x": 81.88, "y": 2.68, "rotation": 90.01 }, - { "name": "spineboy_rear_arm_goal", "parent": "saddle", "x": -30.43, "y": -100.08 }, - { "name": "stirrup", "parent": "saddle", "length": 78.17, "x": -81.94, "y": -103.38, "rotation": -68.85 }, - { "name": "stirrup_strap1", "parent": "saddle", "length": 43.69, "x": -20.38, "y": -29.37, "rotation": -135 }, - { "name": "tail3", "parent": "tail2", "length": 141.06, "x": 130.02, "y": 0.1, "rotation": 6.88 }, - { "name": "back_thigh", "parent": "spineboy_hip", "length": 71.15, "x": -9.57, "y": 2.31, "rotation": 160.75 }, - { "name": "front_arm2", "parent": "front_arm1", "length": 86.33, "x": 109.99, "y": 0.2, "rotation": 105.23 }, - { "name": "front_foot1", "parent": "front_leg3", "length": 57.79, "x": 118.19, "y": -0.79, "scaleX": 1.126, "rotation": 54.46 }, - { "name": "front_thigh", "parent": "spineboy_hip", "length": 77.79, "x": 15.51, "y": 17.01, "rotation": 163.34 }, + { "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": "gun", + "name": "spineboy_torso", "parent": "spineboy_hip", - "length": 181.35, - "x": 16.86, - "y": -7.89, - "scaleX": 0.816, - "scaleY": 0.816, - "rotation": 107.11 + "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, + "inheritRotation": false, + "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": "head", "parent": "neck", "length": 105.5, "x": 70.59, "y": 0.03, "rotation": 9.82 }, - { "name": "rear_arm2", "parent": "rear_arm1", "length": 85.8, "x": 109.56, "rotation": 123.56 }, - { "name": "rear_foot1", "parent": "rear_leg3", "length": 84.51, "x": 102.37, "y": -0.02, "rotation": 75.43 }, - { "name": "saddle_strap_front2", "parent": "saddle_strap_front1", "length": 102.74, "x": 97.29, "y": 0.3, "rotation": -11.13 }, - { "name": "saddle_strap_rear2", "parent": "saddle_strap_rear1", "length": 54.36, "x": 38.63, "y": -0.02 }, - { "name": "spineboy_torso", "parent": "spineboy_hip", "length": 122.45, "x": 1.05, "y": -2.1, "rotation": -75.85 }, - { "name": "stirrup_strap2", "parent": "stirrup_strap1", "length": 51.62, "x": 43.7, "rotation": 9.38 }, - { "name": "tail4", "parent": "tail3", "length": 126.25, "x": 141.05, "y": 0.64, "rotation": -18.86 }, - { "name": "back_arm", "parent": "spineboy_torso", "length": 67.21, "x": 96.33, "y": -38.46, "rotation": -120.89 }, - { "name": "back_knee", "parent": "back_thigh", "length": 97.17, "x": 71.15, "y": -0.28, "rotation": -54.97 }, - { "name": "front_arm", "parent": "spineboy_torso", "length": 74.51, "x": 101.37, "y": 9.78, "rotation": -118.16 }, { "name": "front_foot2", "parent": "front_foot1", "length": 56.19, + "rotation": -2.15, "x": 57.78, "y": -0.02, "scaleX": 0.73, "scaleY": 0.823, - "rotation": -0.46, - "inheritRotation": false + "inheritRotation": false, + "color": "15ff00ff" }, - { "name": "front_hand", "parent": "front_arm2", "length": 47.55, "x": 86.33, "y": 0.06, "rotation": -56.83 }, - { "name": "horn_front", "parent": "head", "length": 87.48, "x": 82.09, "y": -221.36, "rotation": 49.36 }, - { "name": "horn_rear", "parent": "head", "length": 73.78, "x": 99.27, "y": -226.79, "rotation": 44.31 }, - { "name": "jaw", "parent": "head", "length": 203.76, "x": 29.36, "y": -40.15, "rotation": -140.14, "inheritScale": false }, - { "name": "lower_leg", "parent": "front_thigh", "length": 111.5, "x": 77.92, "y": -0.1, "rotation": -49.62 }, - { "name": "neck2", "parent": "spineboy_torso", "length": 32.04, "x": 113.44, "y": -15.21, "rotation": -45.22 }, - { - "name": "rear_foot2", - "parent": "rear_foot1", - "length": 102.31, - "x": 84.49, - "y": -0.34, - "rotation": -6.13, - "inheritRotation": false - }, - { "name": "rear_hand", "parent": "rear_arm2", "length": 45.8, "x": 85.8, "y": 0.1, "rotation": -76.28 }, - { "name": "saddle_strap_rear3", "parent": "saddle_strap_rear2", "length": 44.04, "x": 54.86, "y": 0.19, "rotation": 3.63 }, - { "name": "tail5", "parent": "tail4", "length": 91.06, "x": 126.25, "y": -0.47, "rotation": -22.34 }, - { "name": "tongue1", "parent": "head", "length": 55.11, "x": 20.81, "y": -104.75, "rotation": -129.04 }, - { "name": "back_bracer", "parent": "back_arm", "length": 43.68, "x": 67.21, "y": -0.31, "rotation": 17.48 }, - { "name": "bone", "parent": "horn_front", "x": 294.58, "y": 234.17, "rotation": -138.59 }, - { "name": "bone2", "parent": "horn_rear", "x": 232.68, "y": 245.84, "rotation": -133.55 }, - { "name": "front_bracer", "parent": "front_arm", "length": 39.85, "x": 74.52, "y": -0.41, "rotation": 20.3 }, { "name": "front_foot3", "parent": "front_foot2", "length": 129.88, + "rotation": -2.7, "x": 49.71, "y": 20.65, "scaleX": 1.154, - "rotation": -3.16, - "inheritRotation": false + "color": "15ff00ff" }, - { "name": "head2", "parent": "neck2", "length": 249.64, "x": 23.01, "y": 3.47, "rotation": 11.65 }, - { "name": "tongue2", "parent": "tongue1", "length": 44.66, "x": 55.59, "y": 0.93, "rotation": 8.93 }, - { "name": "back_hand", "parent": "back_bracer", "length": 41.97, "x": 43.68, "y": 0.06, "rotation": 9.2, "inheritRotation": false }, + { "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.9, "x": 39.98, "y": -0.89, - "rotation": 13.9, - "inheritRotation": false + "inheritRotation": false, + "color": "ffffffff" }, - { "name": "tongue3", "parent": "tongue2", "length": 43.64, "x": 44.26, "y": -0.2, "rotation": 12.86 } -], -"ik": [ + { "name": "spineboy_front_arm_goal", "parent": "saddle", "x": -50.7, "y": -96.93, "color": "ff0004ff" }, { - "name": "front_leg_goal", - "bones": [ "front_leg1", "front_leg2" ], - "target": "front_leg_goal", - "bendPositive": false + "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, "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, + "inheritRotation": false, + "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": "rear_leg_goal", - "bones": [ "rear_leg1", "rear_leg2" ], - "target": "rear_leg_goal", - "bendPositive": false + "name": "saddle_strap_front2", + "parent": "saddle_strap_front1", + "length": 102.74, + "rotation": -11.13, + "x": 97.29, + "y": 0.3, + "color": "ff7300ff" }, { - "name": "front_foot_goal", - "bones": [ "front_leg3", "front_foot1" ], - "target": "front_foot_goal" + "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": "rear_foot_goal", - "bones": [ "rear_leg3", "rear_foot1" ], - "target": "rear_foot_goal" + "name": "saddle_strap_rear3", + "parent": "saddle_strap_rear2", + "length": 44.04, + "rotation": 3.63, + "x": 54.86, + "y": 0.19, + "color": "ff7300ff" }, - { - "name": "stirrup", - "bones": [ "stirrup_strap1", "stirrup_strap2" ], - "target": "stirrup" - }, - { - "name": "spineboy_rear_leg_goal", - "bones": [ "back_thigh", "back_knee" ], - "target": "spineboy_rear_arm_goal", - "bendPositive": false - }, - { - "name": "spineboy_front_leg_goal", - "bones": [ "front_thigh", "lower_leg" ], - "target": "spineboy_front_arm_goal", - "bendPositive": false - }, - { - "name": "rear_arm_goal", - "bones": [ "back_arm", "back_bracer" ], - "target": "bone2" - }, - { - "name": "front_arm_goal", - "bones": [ "front_arm", "front_bracer" ], - "target": "bone" - } + { "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" }, @@ -198,6 +233,57 @@ { "name": "front_bracer", "bone": "front_bracer", "attachment": "front_bracer" }, { "name": "front_hand", "bone": "front_hand2", "attachment": "front_hand" } ], +"ik": [ + { + "name": "front_arm_goal", + "bones": [ "front_arm", "front_bracer" ], + "target": "front_arm_target" + }, + { + "name": "front_foot_goal", + "bones": [ "front_leg3", "front_foot1" ], + "target": "front_foot_goal" + }, + { + "name": "front_leg_goal", + "bones": [ "front_leg1", "front_leg2" ], + "target": "front_leg_goal", + "bendPositive": false + }, + { + "name": "rear_arm_goal", + "bones": [ "back_arm", "back_bracer" ], + "target": "rear_arm_target" + }, + { + "name": "rear_foot_goal", + "bones": [ "rear_leg3", "rear_foot1" ], + "target": "rear_foot_goal" + }, + { + "name": "rear_leg_goal", + "bones": [ "rear_leg1", "rear_leg2" ], + "target": "rear_leg_goal", + "bendPositive": false + }, + { + "name": "spineboy_front_leg_goal", + "bones": [ "front_thigh", "lower_leg" ], + "target": "spineboy_front_arm_goal", + "bendPositive": false + }, + { + "name": "spineboy_rear_leg_goal", + "bones": [ "back_thigh", "back_knee" ], + "target": "spineboy_rear_arm_goal", + "bendPositive": false + }, + { + "name": "stirrup", + "bones": [ "stirrup_strap1", "stirrup_strap2" ], + "target": "stirrup" + } +], "skins": { "default": { "back_arm": { @@ -236,9 +322,12 @@ "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": [ 9, 10, 11, 14, 11, 12, 14, 12, 0, 9, 11, 14, 6, 9, 14, 14, 0, 1, 13, 14, 1, 6, 7, 8, 6, 8, 9, 13, 1, 2, 13, 5, 6, 13, 6, 14, 3, 4, 13, 5, 13, 4, 3, 13, 2 ], + "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.48, 50.63, 83.86, 46.32, 142.05, 42.17, 197.91, 3.34, 163.7, -45.86, 86.15, -47.34, 15.9, -48.68, 8.42, -120.68, -69.06, -66.81, -35.32, -20.73, -58.83, -10.35, -44.69, 9.99, -14.55, 53.35, 85.21, 6.43, 20.45, 8.2 ], - "hull": 13 + "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": { @@ -255,47 +344,62 @@ }, "raptor_arm_back": { "raptor_arm_back": { - "type": "skinnedmesh", - "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, 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, 0.94947, 0.60129 ], - "triangles": [ 6, 14, 15, 5, 6, 15, 5, 15, 4, 6, 7, 14, 24, 7, 8, 24, 14, 7, 13, 14, 24, 11, 13, 24, 11, 24, 8, 11, 8, 9, 10, 11, 9, 12, 13, 11, 15, 16, 4, 18, 19, 2, 16, 3, 4, 17, 18, 2, 17, 2, 3, 17, 3, 16, 20, 21, 22, 23, 20, 22, 0, 20, 23, 1, 20, 0, 1, 19, 20, 2, 19, 1 ], - "vertices": [ 2, 18, 36.95, 33.31, 0.91666, 34, 68.53, 41.05, 0.08333, 2, 18, 66.02, 20.35, 0.76813, 34, 41.41, 24.39, 0.23186, 2, 18, 74.51, 16.57, 0.64468, 34, 33.49, 19.53, 0.35531, 3, 18, 70.89, 21.97, 0.27669, 34, 39.99, 19.46, 0.67508, 52, -29.67, -39.91, 0.04822, 3, 18, 42.77, 63.89, 0.11483, 34, 90.47, 18.95, 0.60854, 52, -17.2, 9, 0.27661, 2, 34, 101.86, 18.83, 0.45955, 52, -14.38, 20.04, 0.54044, 2, 34, 106.47, 2.08, 0.0625, 52, 2.98, 20.56, 0.9375, 1, 52, 51.32, 21.98, 1, 1, 52, 72.39, 9.61, 1, 1, 52, 100.37, -23.87, 1, 1, 52, 104.96, -40.9, 1, 1, 52, 78.37, -25.61, 1, 1, 52, 86.05, -56.84, 1, 1, 52, 52.92, -30.04, 1, 2, 34, 62.24, -43.92, 0.0625, 52, 37.19, -33.33, 0.9375, 2, 34, 64.89, -28.65, 0.3125, 52, 22.98, -27.14, 0.6875, 2, 34, 57.69, -27.17, 0.30612, 52, 19.83, -33.78, 0.69387, 2, 18, 124.19, 3.83, 0.19395, 34, -5.09, -14.23, 0.80604, 2, 18, 110.77, -19.65, 0.3125, 34, -16.88, 10.1, 0.6875, 2, 18, 99.14, -19.2, 0.51613, 34, -9.93, 19.44, 0.48386, 2, 18, 43.73, -17.03, 0.9375, 34, 23.17, 63.92, 0.0625, 1, 18, 35.41, -29.77, 1, 1, 18, -15.68, -28.02, 1, 1, 18, -13.87, 24.65, 1, 1, 52, 60.41, 11.1, 1 ], - "hull": 24 + "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.53, 41.05, 0.08333, 2, 40, 66.01999, 20.35, 0.76813, 41, 41.41, 24.39, 0.23186, 2, 40, 74.51, 16.57, 0.64468, 41, 33.49, 19.53, 0.35531, 2, 40, 70.89, 21.97, 0.29071, 41, 39.99, 19.45999, 0.70928, 3, 40, 42.77, 63.89, 0.11483, 41, 90.47, 18.95, 0.60854, 49, -17.2, 9, 0.2766, 2, 41, 101.86, 18.83, 0.45955, 49, -14.38, 20.04, 0.54044, 2, 41, 106.47, 2.08, 0.0625, 49, 2.98, 20.56, 0.9375, 1, 49, 51.32, 21.98, 1, 1, 49, 60.41, 11.1, 1, 1, 49, 72.39, 9.60999, 1, 1, 49, 100.37, -23.87, 1, 1, 49, 104.96, -40.9, 1, 1, 49, 78.37, -25.61, 1, 1, 49, 86.05, -56.84, 1, 1, 49, 52.92, -30.04, 1, 2, 41, 62.24, -43.92, 0.0625, 49, 37.18999, -33.33, 0.9375, 2, 41, 64.89, -28.65, 0.3125, 49, 22.98, -27.14, 0.6875, 2, 41, 57.69, -27.17, 0.30612, 49, 19.83, -33.78, 0.69387, 2, 40, 124.19, 3.83, 0.19395, 41, -5.09, -14.23, 0.80604, 2, 40, 110.77, -19.65, 0.3125, 41, -16.87999, 10.1, 0.6875, 2, 40, 99.14, -19.2, 0.51612, 41, -9.93, 19.44, 0.48386, 2, 40, 43.73, -17.03, 0.9375, 41, 23.17, 63.92, 0.0625, 1, 40, 35.41, -29.77, 1, 1, 40, -15.68, -28.02, 1, 1, 40, -13.87, 24.65, 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": "skinnedmesh", - "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.27515, 0.71028, 0.25301, 0.71948, 0.22568, 0.73082, 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 ], - "triangles": [ 10, 11, 45, 45, 11, 44, 11, 12, 44, 44, 68, 45, 12, 69, 44, 12, 58, 52, 21, 22, 55, 22, 61, 55, 22, 23, 61, 55, 61, 27, 23, 56, 61, 23, 24, 56, 61, 56, 26, 61, 26, 27, 26, 56, 25, 56, 24, 25, 19, 60, 89, 19, 20, 60, 60, 20, 90, 20, 21, 90, 90, 21, 55, 89, 60, 29, 90, 28, 60, 60, 28, 29, 55, 27, 90, 90, 27, 28, 16, 17, 54, 91, 15, 16, 18, 54, 17, 54, 18, 89, 16, 54, 91, 18, 19, 89, 15, 91, 59, 31, 91, 54, 89, 30, 54, 89, 29, 30, 32, 59, 91, 30, 31, 54, 32, 91, 31, 33, 59, 32, 14, 15, 59, 33, 53, 59, 13, 58, 12, 58, 13, 53, 59, 53, 14, 13, 14, 53, 34, 58, 53, 35, 52, 58, 34, 53, 33, 58, 34, 35, 44, 69, 51, 12, 52, 69, 51, 38, 39, 51, 69, 38, 38, 69, 37, 69, 52, 37, 36, 52, 35, 36, 37, 52, 4, 5, 70, 4, 57, 73, 73, 57, 67, 4, 73, 3, 3, 73, 72, 3, 74, 2, 74, 87, 2, 87, 88, 2, 88, 1, 2, 73, 67, 72, 72, 67, 66, 67, 57, 66, 57, 49, 66, 57, 41, 49, 3, 72, 74, 72, 62, 74, 72, 66, 62, 74, 85, 87, 85, 74, 84, 49, 65, 66, 66, 65, 62, 84, 74, 62, 63, 62, 65, 84, 62, 63, 41, 42, 49, 85, 86, 87, 88, 86, 81, 88, 87, 86, 85, 84, 80, 85, 80, 79, 80, 84, 75, 79, 80, 78, 49, 64, 65, 64, 49, 43, 1, 88, 82, 80, 75, 78, 82, 88, 81, 75, 77, 78, 82, 81, 77, 81, 78, 77, 65, 64, 63, 75, 76, 77, 75, 84, 76, 76, 84, 83, 76, 83, 82, 83, 0, 1, 0, 83, 84, 63, 0, 84, 63, 64, 0, 1, 82, 83, 49, 42, 43, 64, 43, 0, 57, 4, 70, 45, 50, 46, 46, 47, 8, 46, 50, 47, 8, 47, 7, 50, 71, 47, 47, 71, 7, 7, 71, 6, 71, 50, 48, 48, 50, 40, 50, 68, 40, 71, 48, 6, 6, 48, 5, 5, 48, 70, 48, 40, 70, 70, 40, 57, 57, 40, 41, 10, 45, 9, 45, 46, 9, 9, 46, 8, 45, 68, 50, 44, 51, 68, 68, 39, 40, 68, 51, 39 ], - "vertices": [ 1, 33, 147.48, -145.48, 1, 1, 33, 89.4, -281.62, 1, 1, 33, -28.24, -285.93, 1, 1, 33, -14.58, -194.68, 1, 5, 9, 363.21, 87.73, 0.02179, 14, 238.39, -84.13, 0.20397, 17, 32.1, -140.85, 0.18915, 33, -61.96, -132.26, 0.41197, 48, 129.57, 6.39, 0.1731, 5, 9, 332.7, 63.71, 0.06905, 14, 199.57, -83.03, 0.29424, 17, 3.69, -114.37, 0.2194, 33, -85.43, -101.32, 0.30859, 48, 127.34, -26.64, 0.1087, 5, 9, 307.08, 43.5, 0.11018, 14, 166.95, -82.13, 0.37282, 17, -20.18, -92.14, 0.24572, 33, -105.18, -75.34, 0.21862, 48, 123.08, -64.79, 0.05264, 5, 9, 307.75, 5.7, 0.18146, 14, 143.25, -111.59, 0.56512, 17, -57.43, -98.57, 0.12044, 33, -142.98, -75.33, 0.10715, 48, 154.85, -83.49, 0.0258, 2, 9, 308.7, -30.55, 0.25, 14, 120.75, -140.04, 0.75, 2, 9, 213.94, -142.7, 0.75, 14, -23.83, -165.45, 0.25, 3, 9, 64.45, -187.34, 0.31139, 8, -158.45, 158.33, 0.10379, 2, 84.16, -190.98, 0.5848, 1, 2, -61.47, -178.84, 1, 1, 2, -166.91, -67.95, 1, 6, 9, -246.26, -74, 0.04136, 8, 170.4, 123.13, 0.2858, 13, 66.71, 104.77, 0.57052, 27, -53.08, 110.21, 0.10163, 40, -220.11, 35.3, 5.1E-4, 54, -331.4, -106.89, 1.5E-4, 6, 9, -297.45, -69.74, 0.01855, 8, 221.11, 131.31, 0.14592, 13, 115.07, 87.47, 0.47026, 27, -6.58, 88.39, 0.30085, 40, -168.92, 31, 0.06162, 54, -282.82, -90.19, 0.00276, 6, 9, -359.24, -85.1, 0.00915, 8, 277.38, 161.09, 0.07914, 13, 178.73, 86.41, 0.35008, 27, 56.68, 81.29, 0.38638, 40, -107.13, 46.31, 0.15555, 54, -232.44, -51.26, 0.01966, 6, 9, -376.16, -107.83, 0.0043, 8, 294.31, 176.47, 0.03904, 13, 203.26, 86.51, 0.25323, 27, 83.06, 77.02, 0.42283, 40, -79.56, 53.53, 0.23684, 54, -210.89, -28.3, 0.04374, 6, 9, -416.83, -99.41, 0.00211, 8, 329.83, 188.85, 0.0196, 13, 238.06, 85.41, 0.18217, 27, 115.65, 74.66, 0.41374, 40, -49.53, 60.58, 0.30031, 54, -185.49, -14.98, 0.08205, 6, 9, -449.42, -116.23, 0.00122, 8, 364.17, 200.07, 0.01106, 13, 275.48, 71.62, 0.13243, 27, 152.97, 53.58, 0.37336, 40, -5.82, 53.94, 0.34144, 54, -142.85, 0.11, 0.14047, 6, 9, -498.22, -88.19, 7.8E-4, 8, 411.52, 197.55, 0.00669, 13, 313.81, 53.61, 0.09623, 27, 188.04, 35.82, 0.32105, 40, 31.84, 49.3, 0.36432, 54, -106.46, 7.49, 0.21089, 6, 9, -524.31, -113.4, 5.8E-4, 8, 437.98, 213.03, 0.00423, 13, 345.74, 45.54, 0.06864, 27, 219.6, 19.28, 0.26387, 40, 68.31, 43.02, 0.36996, 54, -70.13, 18.19, 0.2927, 6, 9, -580.94, -76.79, 4.7E-4, 8, 494.56, 206.4, 0.00237, 13, 390.81, 21.3, 0.0452, 27, 261.62, -3.66, 0.20066, 40, 114.55, 37.83, 0.35931, 54, -26.15, 30.34, 0.39196, 6, 9, -621.23, -53.98, 4.4E-4, 8, 539.16, 193.96, 0.00115, 13, 423.87, -11.11, 0.02629, 27, 291.46, -39.06, 0.13478, 40, 154.83, 14.99, 0.33453, 54, 19.91, 25.67, 0.50278, 6, 9, -661.22, -31.34, 4.6E-4, 8, 583.41, 181.62, 5.6E-4, 13, 456.68, -43.27, 0.01512, 27, 321.06, -74.2, 0.08778, 40, 194.79, -7.66, 0.31014, 54, 65.62, 21.04, 0.58591, 6, 9, -698.76, 17.64, 4.7E-4, 8, 631.64, 143.1, 4.0E-4, 13, 480.34, -100.28, 0.01183, 27, 339.2, -133.2, 0.07247, 40, 232.3, -56.69, 0.30126, 54, 119.7, -8.69, 0.61353, 6, 9, -636.21, 0.4, 4.5E-4, 8, 566.79, 144.78, 5.5E-4, 13, 424.34, -67.52, 0.01513, 27, 286.57, -95.27, 0.08778, 40, 169.77, -39.4, 0.31045, 54, 55.51, -18.08, 0.5856, 6, 9, -596.68, -3.21, 4.2E-4, 8, 527.55, 138.78, 0.00111, 13, 387.08, -53.84, 0.02607, 27, 250.77, -78.11, 0.13421, 40, 130.24, -35.75, 0.33502, 54, 17.87, -30.67, 0.50314, 6, 9, -553.14, -7.2, 4.2E-4, 8, 484.33, 132.17, 0.00229, 13, 346.04, -38.78, 0.04477, 27, 211.34, -59.22, 0.19954, 40, 86.7, -31.72, 0.3598, 54, -23.59, -44.54, 0.39316, 6, 9, -516.96, -25.93, 4.7E-4, 8, 449.17, 125.97, 0.00408, 13, 311.45, -35.25, 0.06808, 27, 175.89, -56.83, 0.26228, 40, 51.53, -43.14, 0.37032, 54, -52.88, -67.87, 0.29473, 6, 9, -479.88, 14.24, 6.0E-4, 8, 418.38, 93.72, 0.00651, 13, 269.72, -40.64, 0.09608, 27, 135.19, -53.82, 0.32015, 40, 13.42, -53.11, 0.36453, 54, -82.03, -93.66, 0.21211, 6, 9, -451.64, 0.32, 8.3E-4, 8, 390.82, 86.58, 0.01046, 13, 241.19, -39.8, 0.13162, 27, 105.59, -52.93, 0.37317, 40, -16.25, -62.16, 0.34265, 54, -108.34, -111.24, 0.14123, 6, 9, -420.35, 31.66, 0.00137, 8, 364.8, 62.48, 0.01849, 13, 207.71, -42.14, 0.18078, 27, 73.33, -49.43, 0.41415, 40, -46.11, -70.49, 0.30264, 54, -129.51, -133.56, 0.08254, 6, 9, -399.11, 28.98, 0.00258, 8, 345.49, 47.53, 0.03705, 13, 182.34, -50.62, 0.25183, 27, 45.87, -56.62, 0.4234, 40, -71.57, -84.96, 0.24035, 54, -150.85, -153.35, 0.04477, 6, 9, -365.43, 66.79, 0.00485, 8, 319.95, 15.15, 0.07594, 13, 145.6, -61.95, 0.35325, 27, 9.61, -63.26, 0.38742, 40, -101.06, -105.58, 0.15807, 54, -165.65, -187.83, 0.02044, 6, 9, -312.31, 100.78, 0.00731, 8, 276.58, -30.61, 0.13928, 13, 85.52, -81.11, 0.48508, 27, -52.01, -76.62, 0.30338, 40, -154.2, -139.52, 0.06214, 54, -200.6, -240.31, 0.00279, 6, 9, -242.48, 124.41, 0.00974, 8, 214.5, -70.36, 0.27055, 13, 11.97, -85.98, 0.61489, 27, -125.69, -74.48, 0.10409, 40, -224.04, -163.1, 5.4E-4, 54, -255.01, -290.05, 1.5E-4, 6, 9, -166.71, 150.07, 0.02469, 8, 147.14, -113.5, 0.57033, 13, -67.84, -91.26, 0.38714, 27, -205.65, -72.16, 0.01755, 40, -299.83, -188.7, 2.0E-4, 54, -314.05, -344.03, 5.0E-5, 2, 9, -113.14, 135.84, 0.24192, 8, 91.72, -112.59, 0.75807, 2, 9, -42.12, 116.77, 0.14515, 8, 18.2, -111.17, 0.85484, 1, 9, 44.2, 107.1, 1, 2, 9, 140.09, 96.35, 0.22579, 14, 72.59, 65.41, 0.7742, 4, 9, 137.69, 169.35, 0.05644, 14, 117.5, 123, 0.24355, 17, 78.3, 94.48, 0.2125, 33, 23.7, 91.74, 0.4875, 2, 17, 171.15, 111.98, 0.25, 33, 118.17, 93.15, 0.75, 1, 33, 158.96, -25.58, 1, 1, 2, -40.63, -86.01, 1, 3, 9, 67.34, -86.66, 0.33215, 8, -137.02, 59.92, 0.08303, 2, 92.54, -90.61, 0.5848, 2, 9, 170.13, -66.29, 0.75, 14, -8.53, -78.72, 0.25, 2, 9, 231.74, -8.12, 0.4, 14, 76.03, -73.52, 0.6, 5, 9, 222.04, 70.41, 0.16894, 14, 118.9, -7, 0.5373, 17, -6.58, -3.99, 0.17075, 33, -76.73, 9.18, 0.08551, 48, 45.05, -108.02, 0.03748, 1, 33, 50.43, -46.56, 1, 1, 14, -9.88, 20.65, 1, 2, 9, -53.22, 20.53, 0.2, 8, 5.8, -15.09, 0.8, 6, 9, -180.71, 32.22, 0.0849, 8, 132.35, 4.24, 0.55723, 13, -23.98, 19.01, 0.34911, 27, -151.51, 33.44, 0.0085, 40, -285.75, -70.86, 1.8E-4, 54, -348.66, -230.51, 5.0E-5, 6, 9, -304.22, 7.95, 0.01243, 8, 246.39, 57.53, 0.13635, 13, 101.61, 10.65, 0.48532, 27, -27.28, 13.2, 0.30559, 40, -162.22, -46.69, 0.05823, 54, -245.36, -158.59, 0.00205, 6, 9, -418.56, -35.1, 0.00168, 8, 346.99, 126.85, 0.01839, 13, 223.17, 22.83, 0.18014, 27, 94.88, 13.77, 0.41602, 40, -47.85, -3.72, 0.30281, 54, -158.02, -73.16, 0.08093, 6, 9, -566.47, -40.57, 4.4E-4, 8, 489.24, 167.77, 0.00225, 13, 367.51, -9.96, 0.04446, 27, 235.45, -32.57, 0.20024, 40, 100.06, 1.62, 0.36103, 54, -24.81, -8.63, 0.39156, 6, 9, -648.5, -15.19, 4.5E-4, 8, 574.96, 162.88, 5.5E-4, 13, 440.24, -55.6, 0.01566, 27, 303.52, -84.91, 0.09149, 40, 182.07, -23.8, 0.3135, 54, 60.48, 1.14, 0.57832, 3, 14, 174.99, 22.22, 0.2, 17, 54.82, -19.14, 0.6, 33, -18.8, -16.2, 0.2, 6, 9, -242.34, 20.11, 0.02478, 8, 189.25, 30.83, 0.26443, 13, 38.68, 14.84, 0.61556, 27, -89.52, 23.34, 0.09454, 40, -224.1, -58.8, 5.1E-4, 54, -297.11, -194.62, 1.4E-4, 6, 9, -359.57, -12.88, 0.00674, 8, 295.08, 91.08, 0.07453, 13, 160.45, 16.54, 0.35139, 27, 31.85, 13.48, 0.39116, 40, -106.86, -25.89, 0.15674, 54, -203.08, -117.24, 0.01941, 6, 9, -488.69, -37.69, 6.7E-4, 8, 414.43, 146.25, 0.00642, 13, 291.61, 7.27, 0.09534, 27, 161.53, -8.2, 0.32068, 40, 22.27, -1.18, 0.36568, 54, -94.86, -42.56, 0.21117, 6, 9, -607.64, -27.83, 4.3E-4, 8, 532.26, 165.32, 0.00108, 13, 404.01, -32.87, 0.02584, 27, 269.61, -58.84, 0.13469, 40, 141.21, -11.13, 0.33582, 54, 17.98, -3.72, 0.50211, 1, 33, 26.4, -166.06, 1, 1, 33, 87.21, -106.12, 1, 1, 33, 108.19, -49.62, 1, 2, 33, 61.73, -82.13, 0.50021, 48, 4.42, 52.83, 0.49978, 2, 33, 22.84, -109.4, 0.50021, 48, 51.52, 46.73, 0.49978, 5, 9, 348.39, 119.13, 0.00694, 14, 247.12, -50.52, 0.065, 17, 60.86, -121.4, 0.06027, 33, -30.3, -118, 0.48738, 48, 96.58, 17.22, 0.38039, 1, 9, 26.73, 14.8, 1, 2, 9, -107.97, 25.67, 0.24192, 8, 60.17, -6.91, 0.75807, 5, 9, 235.53, 102.96, 0.07484, 14, 150.1, 9.35, 0.34943, 17, 27.64, -12.34, 0.40983, 33, -44.43, -4.87, 0.14928, 48, 34.03, -74.39, 0.0166, 5, 9, 227.15, 28.49, 0.29239, 14, 95.96, -42.46, 0.5708, 17, -47.23, -15.44, 0.07952, 33, -118.74, 4.84, 0.03982, 48, 84.85, -129.5, 0.01745, 2, 33, 5.19, -153.1, 0.87618, 48, 90.96, 71.21, 0.12381, 5, 9, 351.78, 108.85, 0.01127, 14, 243.13, -60.59, 0.10548, 17, 51.21, -126.33, 0.09782, 33, -40.65, -121.21, 0.46541, 48, 105.71, 17.33, 0.32, 1, 33, 23.69, -185.21, 1, 1, 33, 79.64, -175.94, 1, 1, 33, 93.96, -187.56, 1, 1, 33, 87.07, -206.55, 1, 1, 33, 64.2, -216.74, 1, 1, 33, 52.23, -203.68, 1, 1, 33, 59.24, -187.03, 1, 1, 33, 64.26, -223.8, 1, 1, 33, 89.44, -211.41, 1, 1, 33, 102.04, -186.95, 1, 1, 33, 83.1, -166.14, 1, 1, 33, 46.84, -186.41, 1, 1, 33, 50.32, -204.36, 1, 1, 33, 41.7, -206.59, 1, 1, 33, 61.87, -230.97, 1, 6, 9, -448.12, -58.75, 9.7E-4, 8, 374.97, 143.6, 0.01016, 13, 256.29, 17.42, 0.13074, 27, 127.43, 2.07, 0.37548, 40, -13.35, -3.05, 0.34387, 54, -128.14, -55.46, 0.13875, 6, 9, -519.55, -68.54, 5.1E-4, 8, 442.75, 168.18, 0.00402, 13, 327.21, 4.42, 0.06791, 27, 196.28, -19.32, 0.26429, 40, 58.71, -1.05, 0.3719, 54, -62.24, -26.21, 0.29134, 6, 9, -386.43, -41.35, 0.00321, 8, 318.32, 113.62, 0.03567, 13, 192.26, 20.14, 0.25008, 27, 64.19, 12.44, 0.42824, 40, -76.55, -13.67, 0.24036, 54, -182.56, -89.31, 0.0424 ], - "hull": 44 + "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, 16, 56, 15, 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, 20, 91, 56, 56, 19, 20, 17, 19, 56, 18, 19, 17, 93, 91, 31, 55, 34, 35, 33, 34, 55, 61, 33, 55, 61, 32, 33, 93, 32, 61, 56, 91, 93, 56, 93, 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.24, -285.93, 1, 1, 8, -14.58, -194.68, 1, 4, 6, 238.39, -84.13, 0.20851, 7, 32.09999, -140.85, 0.19336, 8, -61.96, -132.26, 0.42115, 39, 129.57, 6.39, 0.17696, 5, 2, 332.7, 63.71, 0.06905, 6, 199.57, -83.03, 0.29424, 7, 3.69, -114.37, 0.2194, 8, -85.43, -101.32, 0.30859, 39, 127.34, -26.64, 0.1087, 5, 2, 307.08, 43.5, 0.11018, 6, 166.95, -82.12999, 0.37282, 7, -20.18, -92.14, 0.24572, 8, -105.18, -75.33999, 0.21862, 39, 123.08, -64.79, 0.05264, 4, 2, 307.75, 5.7, 0.18627, 6, 143.25, -111.59, 0.58009, 7, -57.43, -98.57, 0.12363, 8, -142.98, -75.33, 0.10999, 2, 2, 308.7, -30.55, 0.25, 6, 120.75, -140.04, 0.75, 2, 2, 213.94, -142.7, 0.75, 6, -23.83, -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, 4, 58, 118.47, 114.74, 0.07383, 59, 17.17, 122.49, 0.17504, 60, -100.71, 132.55, 0.06818, 1, -166.91, -67.94999, 0.68294, 4, 58, 170.4, 123.13, 0.06537, 59, 66.71, 104.77, 0.20999, 60, -53.08, 110.21, 0.12016, 1, -217.69, -61.33, 0.60447, 6, 58, 221.11, 131.31, 0.02179, 59, 115.07, 87.47, 0.23058, 60, -6.58, 88.39, 0.16258, 61, -168.92, 31, 0.02826, 62, -282.82, -90.19, 0.029, 1, -267.66, -55.14, 0.52776, 5, 59, 146.51, 86.08, 0.23635, 60, 26.66, 83.39, 0.19338, 61, -134.99, 41.34, 0.06624, 62, -257.52, -60.65, 0.06962, 1, -298.87, -61.99, 0.43436, 5, 59, 178.73, 86.41, 0.22521, 60, 56.68, 81.29, 0.20997, 61, -107.13, 46.31, 0.11271, 62, -232.44, -51.26, 0.12148, 1, -328.68, -69.24, 0.3306, 5, 59, 203.26, 86.51, 0.21603, 60, 83.06, 77.01999, 0.22457, 61, -79.56, 53.53, 0.13939, 62, -210.89, -28.3, 0.15618, 1, -354.01, -75.41, 0.26379, 5, 59, 238.06, 85.41, 0.20114, 60, 115.65, 74.66, 0.2315, 61, -49.53, 60.58, 0.16455, 62, -185.49, -14.98, 0.19123, 1, -385.33, -83.15, 0.21156, 5, 59, 255.33, 78.85, 0.18224, 60, 133.83, 63.18, 0.23194, 61, -27.04, 56.84, 0.18907, 62, -163.58, -5.26, 0.22658, 1, -406.45, -79.89, 0.17015, 5, 59, 275.48, 71.62, 0.16169, 60, 152.97, 53.58, 0.22885, 61, -5.82, 53.94, 0.21292, 62, -142.85, 0.11, 0.26159, 1, -427.72, -77.47, 0.13493, 5, 59, 313.81, 53.61, 0.14198, 60, 188.04, 35.82, 0.22293, 61, 31.84, 49.3, 0.23478, 62, -106.46, 7.49, 0.29326, 1, -465.96, -72.58999, 0.10702, 5, 59, 345.74, 45.54, 0.12502, 60, 219.6, 19.28, 0.2179, 61, 68.31, 43.02, 0.25622, 62, -70.12999, 18.19, 0.32248, 1, -502.09, -68.19, 0.07835, 4, 59, 390.81, 21.3, 0.11758, 60, 261.62, -3.66, 0.22607, 61, 114.55, 37.83, 0.29087, 62, -26.15, 30.34, 0.36547, 4, 59, 423.87, -11.11, 0.10536, 60, 291.46, -39.06, 0.21954, 61, 154.83, 14.99, 0.30098, 62, 19.91, 25.67, 0.37409, 4, 59, 456.68, -43.27, 0.09949, 60, 321.06, -74.19999, 0.21749, 61, 194.79, -7.66, 0.30788, 62, 65.62, 21.04, 0.37513, 4, 59, 480.34, -100.28, 0.10045, 60, 339.2, -133.2, 0.22026, 61, 232.3, -56.69, 0.31103, 62, 119.7, -8.68999, 0.36824, 4, 59, 424.34, -67.51999, 0.10379, 60, 286.57, -95.27, 0.23087, 61, 169.77, -39.4, 0.30828, 62, 55.51, -18.08, 0.35705, 4, 59, 387.08, -53.84, 0.11505, 60, 250.77, -78.11, 0.2454, 61, 130.24, -35.75, 0.30092, 62, 17.87, -30.67, 0.3386, 4, 59, 346.04, -38.78, 0.13471, 60, 211.34, -59.22, 0.26271, 61, 86.7, -31.72, 0.2888, 62, -23.59, -44.54, 0.31376, 5, 58, 449.17, 125.97, 0.02419, 59, 311.45, -35.25, 0.16384, 60, 175.89, -56.83, 0.2727, 61, 51.53, -43.14, 0.26317, 62, -52.88, -67.87, 0.27607, 5, 58, 418.38, 93.72, 0.05913, 59, 269.72, -40.64, 0.19681, 60, 135.19, -53.82, 0.27688, 61, 13.42, -53.11, 0.23219, 62, -82.03, -93.66, 0.23497, 5, 58, 390.82, 86.58, 0.10638, 59, 241.19, -39.8, 0.2354, 60, 105.59, -52.93, 0.27331, 61, -16.25, -62.16, 0.19459, 62, -108.34, -111.24, 0.19028, 5, 58, 364.8, 62.48, 0.14347, 59, 207.71, -42.14, 0.28099, 60, 73.33, -49.43, 0.26867, 61, -46.11, -70.49, 0.15764, 62, -129.51, -133.56, 0.1492, 5, 58, 345.49, 47.53, 0.18499, 59, 182.34, -50.62, 0.33114, 60, 45.87, -56.62, 0.25881, 61, -71.57, -84.96, 0.1174, 62, -150.85, -153.35, 0.10763, 5, 58, 319.95, 15.15, 0.23755, 59, 145.6, -61.95, 0.39396, 60, 9.60999, -63.26, 0.24619, 61, -101.06, -105.58, 0.06443, 62, -165.65, -187.83, 0.05784, 3, 58, 276.58, -30.61, 0.29942, 59, 85.52, -81.11, 0.46774, 60, -52.01, -76.62, 0.23283, 3, 58, 214.5, -70.36, 0.32855, 59, 11.97, -85.98, 0.48601, 60, -125.69, -74.48, 0.18543, 2, 58, 147.14, -113.5, 0.59565, 59, -67.83999, -91.26, 0.40433, 2, 2, -113.14, 135.84, 0.24192, 58, 91.72, -112.59, 0.75807, 2, 2, -42.12, 116.77, 0.14515, 58, 18.2, -111.17, 0.85484, 1, 2, 44.2, 107.1, 1, 2, 2, 140.09, 96.35, 0.22579, 6, 72.58999, 65.41, 0.7742, 4, 2, 137.69, 169.35, 0.05644, 6, 117.5, 123, 0.24355, 7, 78.3, 94.48, 0.2125, 8, 23.7, 91.74, 0.4875, 2, 7, 171.15, 111.98, 0.25, 8, 118.17, 93.15, 0.75, 1, 8, 158.96, -25.58, 1, 1, 1, -40.63, -86.01, 1, 3, 2, 67.33999, -86.66, 0.33215, 58, -137.02, 59.92, 0.08303, 1, 92.54, -90.61, 0.5848, 2, 2, 170.13, -66.29, 0.75, 6, -8.53, -78.72, 0.25, 2, 2, 231.74, -8.12, 0.4, 6, 76.03, -73.51999, 0.6, 4, 2, 222.04, 70.41, 0.17551, 6, 118.9, -7, 0.55823, 7, -6.58, -3.99, 0.17739, 8, -76.73, 9.18, 0.08884, 1, 8, 50.43, -46.56, 1, 1, 6, -9.88, 20.65, 1, 2, 2, -53.22, 20.53, 0.2, 58, 5.8, -15.09, 0.8, 3, 2, -180.71, 32.22, 0.08564, 58, 132.35, 4.23999, 0.56215, 59, -23.98, 19.01, 0.35219, 3, 58, 246.39, 57.53, 0.30273, 59, 101.61, 10.65, 0.46989, 60, -27.28, 13.2, 0.22737, 5, 58, 346.99, 126.85, 0.13479, 59, 223.17, 22.83, 0.28279, 60, 94.88, 13.77, 0.24481, 61, -47.85, -3.72, 0.17322, 62, -158.02, -73.16, 0.16438, 4, 59, 367.51, -9.96, 0.14656, 60, 235.45, -32.57, 0.23073, 61, 100.06, 1.62, 0.29607, 62, -24.81, -8.63, 0.32661, 4, 59, 440.24, -55.6, 0.10821, 60, 303.52, -84.91, 0.21897, 61, 182.07, -23.8, 0.31097, 62, 60.48, 1.14, 0.36182, 3, 6, 174.99, 22.22, 0.2, 7, 54.82, -19.14, 0.6, 8, -18.79999, -16.2, 0.2, 3, 58, 189.25, 30.83, 0.33253, 59, 38.68, 14.84, 0.48076, 60, -89.52, 23.34, 0.18669, 5, 58, 295.08, 91.08, 0.22891, 59, 160.45, 16.54, 0.38754, 60, 31.85, 13.48, 0.2306, 61, -106.86, -25.89, 0.08042, 62, -203.08, -117.24, 0.0725, 5, 58, 414.43, 146.25, 0.07359, 59, 291.61, 7.27, 0.20198, 60, 161.53, -8.2, 0.23762, 61, 22.27, -1.17999, 0.24024, 62, -94.86, -42.56, 0.24654, 4, 59, 404.01, -32.87, 0.12351, 60, 269.61, -58.84, 0.22261, 61, 141.21, -11.13, 0.30609, 62, 17.98, -3.72, 0.34777, 1, 8, 26.4, -166.06, 1, 1, 8, 87.21, -106.12, 1, 1, 8, 108.19, -49.62, 1, 2, 8, 61.73, -82.12999, 0.50021, 39, 4.42, 52.83, 0.49978, 2, 8, 22.84, -109.4, 0.50021, 39, 51.52, 46.73, 0.49978, 4, 6, 247.12, -50.52, 0.06545, 7, 60.86, -121.4, 0.06069, 8, -30.3, -118, 0.49079, 39, 96.58, 17.21999, 0.38305, 1, 2, 26.73, 14.8, 1, 2, 2, -107.97, 25.67, 0.24192, 58, 60.17, -6.91, 0.75807, 4, 2, 235.53, 102.96, 0.0761, 6, 150.1, 9.35, 0.35533, 7, 27.64, -12.34, 0.41675, 8, -44.43, -4.87, 0.1518, 3, 2, 227.15, 28.49, 0.31015, 6, 95.96, -42.46, 0.60548, 7, -47.23, -15.44, 0.08435, 2, 8, 5.19, -153.1, 0.87618, 39, 90.96, 71.21, 0.12381, 4, 6, 243.13, -60.59, 0.10669, 7, 51.21, -126.33, 0.09893, 8, -40.65, -121.21, 0.47072, 39, 105.71, 17.33, 0.32363, 1, 8, 23.69, -185.21, 1, 1, 8, 79.64, -175.94, 1, 1, 8, 93.96, -187.56, 1, 1, 8, 87.07, -206.55, 1, 1, 8, 64.19999, -216.74, 1, 1, 8, 52.23, -203.68, 1, 1, 8, 59.24, -187.03, 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.1, -166.14, 1, 1, 8, 46.84, -186.41, 1, 1, 8, 50.32, -204.36, 1, 1, 8, 41.7, -206.59, 1, 1, 8, 61.87, -230.97, 1, 5, 58, 374.97, 143.6, 0.10291, 59, 256.29, 17.42, 0.23985, 60, 127.43, 2.07, 0.2431, 61, -13.35, -3.05, 0.20854, 62, -128.14, -55.46, 0.20557, 4, 59, 327.21, 4.42, 0.17789, 60, 196.28, -19.32, 0.24248, 61, 58.71, -1.04999, 0.28055, 62, -62.24, -26.21, 0.29905, 5, 58, 318.32, 113.62, 0.17774, 59, 192.26, 20.14, 0.33383, 60, 64.19, 12.44, 0.24171, 61, -76.55, -13.67, 0.12849, 62, -182.56, -89.31, 0.11821, 2, 8, 56.98, -162.99, 0.89259, 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": "skinnedmesh", + "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, 15, 3.06, 31.88, 0.51075, 14, 66.56, -109.48, 0.48924, 1, 15, 35.87, 35.62, 1, 2, 15, 60.94, 27.12, 0.8464, 29, 46.49, 31.12, 0.15359, 3, 15, 74.05, 22.67, 0.34375, 29, 36.5, 21.53, 0.64062, 45, -45.25, -29.96, 0.01562, 3, 15, 67, 31.58, 0.10937, 29, 47.66, 23.68, 0.78125, 45, -40.93, -19.44, 0.10937, 3, 15, 42.17, 62.99, 0.01562, 29, 86.98, 31.24, 0.64062, 45, -25.75, 17.61, 0.34375, 2, 29, 103.83, 34.49, 0.34375, 45, -19.24, 33.49, 0.65625, 2, 29, 114.04, 19.51, 0.10937, 45, -1.11, 33.84, 0.89062, 2, 29, 144.85, -25.73, 0.02083, 45, 53.62, 34.88, 0.97916, 1, 45, 96.03, -19.16, 1, 1, 45, 104.2, -47.31, 1, 1, 45, 71.34, -23.98, 1, 1, 45, 81.39, -64.61, 1, 1, 45, 76.8, -68.81, 1, 2, 29, 83.18, -57.72, 0.02083, 45, 46.65, -34.25, 0.97916, 2, 29, 73.13, -45.76, 0.10937, 45, 31.14, -36.12, 0.89062, 2, 29, 73.98, -26.9, 0.34375, 45, 15.82, -25.09, 0.65625, 3, 15, 103.67, 70.28, 0.01562, 29, 65.1, -26.69, 0.64062, 45, 10.78, -32.41, 0.34375, 3, 15, 133.56, 9.13, 0.10937, 29, -2.94, -25.03, 0.78125, 45, -27.84, -88.47, 0.10937, 3, 15, 123.67, -14.42, 0.34375, 29, -19.29, -5.39, 0.64062, 45, -53.23, -91.41, 0.01562, 2, 15, 97.41, -15.43, 0.8464, 29, -8.08, 18.37, 0.15359, 1, 15, 45.46, -17.43, 1, 2, 15, 40.69, -27.17, 0.45035, 14, -1.69, -93.8, 0.54964, 2, 15, -2.74, -29.63, 0.44352, 14, 18.99, -72.93, 0.55647, 1, 14, 32.11, -48.45, 1, 1, 14, 57.56, -67.43, 1, 1, 14, 84.38, -87.42, 1, 2, 15, 16.44, 5.21, 0.7182, 14, 46.31, -101.86, 0.28179, 2, 15, -4.51, 5.32, 0.48851, 14, 52.82, -81.94, 0.51148 ], - "hull": 27 + "vertices": [ 2, 21, 3.06, 31.88, 0.51075, 6, 66.56, -109.48, 0.48924, 1, 21, 35.87, 35.62, 1, 2, 21, 60.94, 27.12, 0.8464, 22, 46.49, 31.12, 0.15358, 2, 21, 74.05, 22.67, 0.3492, 22, 36.5, 21.53, 0.65078, 3, 21, 67, 31.58, 0.10937, 22, 47.66, 23.68, 0.78125, 31, -40.93, -19.44, 0.10937, 2, 22, 86.98, 31.24, 0.65078, 31, -25.75, 17.61, 0.3492, 2, 22, 103.83, 34.49, 0.34375, 31, -19.24, 33.49, 0.65625, 2, 22, 114.04, 19.51, 0.10937, 31, -1.11, 33.84, 0.89062, 1, 31, 53.62, 34.88, 1, 1, 31, 96.03, -19.16, 1, 1, 31, 104.2, -47.31, 1, 1, 31, 71.33999, -23.98, 1, 1, 31, 81.39, -64.61, 1, 1, 31, 76.8, -68.81, 1, 1, 31, 46.65, -34.25, 1, 2, 22, 73.12999, -45.76, 0.10937, 31, 31.14, -36.12, 0.89062, 2, 22, 73.98, -26.9, 0.34375, 31, 15.82, -25.09, 0.65625, 2, 22, 65.1, -26.69, 0.65078, 31, 10.78, -32.41, 0.3492, 3, 21, 133.56, 9.13, 0.10937, 22, -2.94, -25.03, 0.78125, 31, -27.84, -88.47, 0.10937, 2, 21, 123.67, -14.42, 0.3492, 22, -19.29, -5.39, 0.65078, 2, 21, 97.41, -15.43, 0.8464, 22, -8.08, 18.37, 0.15358, 1, 21, 45.46, -17.43, 1, 2, 21, 40.68999, -27.17, 0.45035, 6, -1.69, -93.8, 0.54964, 2, 21, -2.74, -29.63, 0.44352, 6, 18.99, -72.93, 0.55646, 1, 6, 32.11, -48.45, 1, 1, 6, 57.56, -67.43, 1, 1, 6, 84.38, -87.42, 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.82, -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": "skinnedmesh", + "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, 43, 9, 10, 42, 43, 10, 41, 43, 42, 13, 44, 42, 10, 13, 42, 11, 13, 10, 13, 11, 12, 45, 8, 9, 45, 9, 43, 40, 8, 45, 41, 42, 44, 45, 43, 41, 45, 41, 44, 16, 40, 45, 17, 40, 16, 15, 45, 44, 16, 45, 15, 14, 15, 44, 13, 14, 44, 19, 21, 38, 20, 21, 19, 39, 38, 6, 39, 6, 7, 40, 39, 7, 40, 7, 8, 18, 19, 38, 18, 38, 39, 17, 39, 40, 18, 39, 17, 47, 25, 48, 24, 25, 47, 35, 48, 34, 47, 48, 35, 51, 24, 47, 23, 24, 51, 3, 34, 2, 35, 34, 3, 36, 51, 47, 23, 51, 36, 22, 23, 36, 36, 47, 35, 4, 35, 3, 36, 35, 4, 37, 22, 36, 21, 22, 37, 5, 37, 36, 5, 36, 4, 6, 37, 5, 38, 21, 37, 38, 37, 6, 29, 30, 46, 32, 31, 0, 46, 31, 32, 28, 29, 46, 28, 46, 32, 32, 27, 28, 50, 27, 32, 33, 32, 0, 33, 0, 1, 49, 50, 32, 33, 49, 32, 26, 27, 50, 26, 50, 49, 25, 26, 49, 48, 49, 33, 25, 49, 48, 34, 33, 1, 48, 33, 34, 34, 1, 2 ], - "vertices": [ 3, 4, 128.03, 88.47, 0.83908, 10, -70.2, -134.13, 0.01331, 2, 158.83, -71.91, 0.1476, 2, 4, 219.55, 53.15, 0.77988, 10, -48.04, -38.58, 0.22011, 3, 4, 266.3, 35.1, 0.53531, 10, -36.73, 10.22, 0.46443, 30, 127.25, 245.46, 2.4E-4, 4, 4, 286.89, 9.79, 0.35076, 10, -14.56, 34.14, 0.64667, 30, 125.69, 212.88, 0.0023, 44, 101.39, 199.13, 2.5E-4, 4, 4, 281.54, -41.24, 0.09169, 10, 36.71, 36, 0.90196, 30, 87.64, 178.44, 0.00513, 44, 58.29, 171.29, 0.00119, 5, 4, 271.53, -136.86, 0.05608, 10, 132.77, 39.48, 0.69232, 16, 34.99, 78.76, 0.22087, 30, 16.38, 113.93, 0.0224, 44, -22.45, 119.13, 0.0083, 5, 4, 283.51, -164.25, 0.01987, 10, 158.21, 55.17, 0.50334, 16, 52.65, 54.63, 0.3617, 30, 7.01, 85.54, 0.08322, 44, -36.28, 92.63, 0.03184, 6, 4, 326.15, -179.3, 0.00798, 10, 167.14, 99.49, 0.21327, 16, 97.55, 49.25, 0.35075, 30, 28.72, 45.87, 0.14107, 44, -21.26, 49.99, 0.22311, 60, -72.29, 25.96, 0.0638, 6, 4, 333.96, -167.35, 0.00242, 10, 154.22, 105.55, 0.07519, 16, 102.57, 62.6, 0.22995, 30, 42.51, 49.55, 0.2831, 44, -7.06, 51.39, 0.2694, 60, -58.17, 28.03, 0.13992, 6, 4, 344.19, -149.68, 4.9E-4, 10, 134.24, 114.44, 0.0176, 16, 109.72, 83.39, 0.11397, 30, 64.09, 55.23, 0.07976, 44, 15.12, 53.51, 0.36292, 60, -36.09, 31.19, 0.42523, 1, 60, 35.8, 41.81, 1, 1, 60, 128.11, 17.93, 1, 1, 60, 188.72, -29.42, 1, 1, 60, 44.86, -26.17, 1, 1, 44, 133.17, -49.83, 1, 1, 44, 78.78, -50.15, 1, 5, 4, 399.32, -220.02, 2.2E-4, 10, 195.56, 179.43, 0.01703, 16, 179.46, 27.52, 0.2372, 30, 58.34, -33.93, 0.2023, 44, -4.91, -33.55, 0.54324, 5, 4, 370.41, -244.91, 3.2E-4, 10, 225.9, 152.49, 0.02513, 16, 155.04, -5.13, 0.35003, 30, 17.88, -32.5, 0.29852, 44, -44.62, -25.61, 0.32598, 5, 4, 340.37, -270.04, 0.00251, 10, 254.98, 126.27, 0.10129, 16, 131.21, -36.2, 0.54075, 30, -21.24, -31.17, 0.2082, 44, -83.02, -17.97, 0.14723, 5, 4, 225.1, -238.94, 0.01529, 10, 240.33, 7.81, 0.24036, 16, 11.94, -30.98, 0.57881, 30, -86.31, 68.9, 0.12023, 44, -131.06, 91.29, 0.04528, 5, 4, 194.64, -233.55, 0.04819, 10, 239.26, -23.1, 0.40427, 16, -18.96, -32.37, 0.48451, 30, -105.4, 93.25, 0.04604, 44, -145.97, 118.4, 0.01697, 5, 4, 187.65, -209.73, 0.09565, 10, 216.66, -33.35, 0.57617, 16, -30.97, -10.65, 0.30651, 30, -94.71, 115.65, 0.01788, 44, -131.8, 138.78, 0.00376, 4, 4, 163.85, -128.67, 0.19533, 10, 139.75, -68.26, 0.8011, 30, -58.32, 191.88, 0.00327, 44, -83.58, 208.13, 2.9E-4, 4, 4, 165.74, -94.49, 0.31921, 10, 105.59, -71.26, 0.6795, 30, -5.04, 220.72, 0.00117, 44, -56.32, 275.96, 1.0E-4, 4, 4, 166.39, -79.07, 0.46205, 10, 90.23, -72.76, 0.53752, 30, 5.55, 230.48, 3.9E-4, 44, -40.61, 286.16, 2.0E-5, 3, 4, 166.49, -74.17, 0.53779, 10, 85.42, -73.28, 0.46208, 30, -19.99, 230.7, 1.2E-4, 2, 4, 141.54, -82.46, 0.73138, 10, 97.13, -96.82, 0.26861, 3, 4, 99.76, -97.08, 0.81379, 10, 117.34, -136.23, 0.13997, 2, -2.56, -164.19, 0.04623, 3, 4, 45.01, -114.56, 0.8186, 10, 142.41, -187.89, 0.02098, 2, -51.09, -135.29, 0.1604, 3, 4, -16.2, -74.76, 0.62389, 10, 113.82, -253.08, 0.00952, 2, -42.95, -58.38, 0.36658, 2, 4, -74.73, -19.33, 0.31468, 2, -52.66, 17.55, 0.68531, 2, 4, 1.67, 76.75, 0.25576, 2, 70.07, 18.78, 0.74423, 1, 4, 93.54, 4.13, 1, 2, 4, 185.14, -6.66, 0.75461, 10, 15.98, -64.27, 0.24538, 2, 4, 217.11, -18.75, 0.50845, 10, 23.47, -30.93, 0.49154, 3, 4, 225.63, -32.92, 0.32512, 10, 36.3, -20.5, 0.6744, 30, 51.57, 221.95, 4.7E-4, 4, 4, 223, -84.73, 0.20061, 10, 87.96, -15.86, 0.79287, 30, 15.03, 185.13, 0.00581, 44, -12.28, 189.61, 6.9E-4, 5, 4, 235.61, -168.06, 0.07777, 10, 168.69, 8.29, 0.54931, 16, 6.74, 40.47, 0.33413, 30, -31.18, 114.66, 0.0321, 44, -69.27, 127.55, 0.00667, 5, 4, 259.63, -194.79, 0.01921, 10, 191.79, 35.8, 0.30498, 16, 36, 19.62, 0.53642, 30, -31.14, 78.74, 0.09568, 44, -75.03, 92.09, 0.04369, 5, 4, 332.55, -220.1, 0.00292, 10, 206.64, 111.53, 0.10776, 16, 112.69, 10.82, 0.51915, 30, 6.25, 11.23, 0.23449, 44, -49.03, 19.43, 0.13566, 4, 10, 192.51, 130.62, 0.03213, 16, 130.6, 26.41, 0.33941, 30, 29.35, 5.71, 0.27333, 44, -27.12, 10.25, 0.35511, 1, 44, 67.46, 3.16, 1, 1, 60, 19.07, -14.51, 1, 6, 4, 381.55, -150.4, 3.0E-4, 10, 130.71, 150.34, 0.00811, 16, 145.36, 89.53, 0.04102, 30, 89.29, 30.41, 0.02558, 44, 36, 24.95, 0.37636, 60, -13.89, 3.64, 0.54861, 1, 44, 86.23, -6.55, 1, 4, 10, 164.9, 153.55, 0.02263, 16, 151.18, 56, 0.23908, 30, 65.44, 5.55, 0.19254, 44, 8.45, 4.27, 0.54574, 2, 4, -9.28, -17.5, 0.59606, 2, 7.72, -30.85, 0.40393, 3, 4, 195.9, -53.81, 0.42356, 10, 61.11, -47.06, 0.57613, 30, 39.7, 225.21, 2.9E-4, 3, 4, 190.1, -48.45, 0.53227, 10, 56.61, -53.56, 0.46765, 30, 39.83, 233.12, 6.0E-5, 2, 4, 161.26, -48.26, 0.79873, 10, 60.44, -82.13, 0.20126, 3, 4, 120.37, -58.54, 0.8485, 10, 76.31, -121.18, 0.14441, 2, 41.04, -161.4, 0.00707, 4, 4, 197.37, -69.23, 0.33487, 10, 76.17, -43.46, 0.66324, 30, 30.34, 213.88, 0.0017, 44, -9.09, 262.42, 1.8E-4 ], - "hull": 32 + "triangles": [ 46, 30, 31, 41, 42, 44, 43, 9, 10, 42, 43, 10, 41, 43, 42, 10, 13, 42, 11, 13, 10, 13, 11, 12, 13, 44, 42, 14, 15, 13, 45, 8, 9, 45, 40, 8, 16, 40, 45, 17, 40, 16, 16, 45, 15, 15, 45, 44, 45, 41, 44, 15, 44, 13, 45, 9, 43, 45, 43, 41, 19, 21, 38, 20, 21, 19, 39, 38, 6, 39, 6, 7, 40, 39, 7, 40, 7, 8, 18, 19, 38, 18, 38, 39, 17, 39, 40, 18, 39, 17, 47, 25, 48, 24, 25, 47, 35, 48, 34, 47, 48, 35, 51, 24, 47, 23, 24, 51, 3, 34, 2, 35, 34, 3, 36, 51, 47, 36, 47, 35, 4, 35, 3, 36, 35, 4, 37, 22, 23, 21, 22, 37, 36, 37, 23, 36, 23, 51, 5, 37, 36, 5, 36, 4, 6, 37, 5, 38, 21, 37, 38, 37, 6, 29, 30, 46, 32, 31, 0, 46, 31, 32, 28, 29, 46, 46, 27, 28, 32, 50, 46, 50, 27, 46, 33, 32, 0, 33, 0, 1, 49, 50, 32, 33, 49, 32, 26, 27, 50, 26, 50, 49, 25, 26, 49, 48, 49, 33, 25, 49, 48, 34, 33, 1, 48, 33, 34, 34, 1, 2 ], + "vertices": [ 2, 25, 128.03, 88.47, 0.8504, 1, 158.83, -71.91, 0.14959, 2, 25, 219.55, 53.15, 0.77988, 26, -48.04, -38.58, 0.22011, 2, 25, 266.3, 35.09999, 0.53544, 26, -36.73, 10.22, 0.46455, 2, 25, 286.89, 9.79, 0.35166, 26, -14.56, 34.14, 0.64832, 2, 25, 281.54, -41.24, 0.09228, 26, 36.71, 36, 0.90771, 3, 25, 271.53, -136.86, 0.05786, 26, 132.77, 39.48, 0.71425, 27, 34.99, 78.76, 0.22787, 3, 26, 158.21, 55.17, 0.5308, 27, 52.65, 54.63, 0.38143, 28, 7.01, 85.54, 0.08776, 5, 26, 167.14, 99.49, 0.21498, 27, 97.55, 49.25, 0.35357, 28, 28.72, 45.87, 0.14219, 29, -21.26, 49.99, 0.22491, 30, -72.29, 25.96, 0.06431, 5, 26, 154.22, 105.55, 0.07537, 27, 102.57, 62.6, 0.23051, 28, 42.51, 49.55, 0.28379, 29, -7.06, 51.39, 0.27004, 30, -58.17, 28.03, 0.14026, 4, 27, 109.72, 83.39, 0.11607, 28, 64.08999, 55.23, 0.08123, 29, 15.12, 53.51, 0.36961, 30, -36.09, 31.19, 0.43307, 1, 30, 35.8, 41.81, 1, 1, 30, 128.11, 17.93, 1, 1, 30, 188.72, -29.42, 1, 2, 29, 93.29, -7.6, 0.47999, 30, 44.86, -26.17, 0.52, 2, 29, 133.17, -49.83, 0.776, 30, 86.69, -66.47, 0.22399, 2, 29, 78.78, -50.15, 0.76799, 30, 32.38, -69.36, 0.232, 1, 29, -4.91, -33.55, 1, 3, 27, 155.04, -5.13, 0.35917, 28, 17.87999, -32.5, 0.30632, 29, -44.62, -25.61, 0.33449, 4, 26, 254.98, 126.27, 0.10154, 27, 131.21, -36.2, 0.54211, 28, -21.24, -31.17, 0.20873, 29, -83.01999, -17.96999, 0.1476, 3, 26, 240.33, 7.81, 0.25586, 27, 11.94, -30.98, 0.61614, 28, -86.31, 68.9, 0.12797, 2, 26, 239.26, -23.1, 0.45486, 27, -18.95999, -32.37, 0.54513, 3, 25, 187.65, -209.73, 0.09777, 26, 216.66, -33.34999, 0.58892, 27, -30.97, -10.65, 0.3133, 2, 25, 163.85, -128.67, 0.19603, 26, 139.75, -68.26, 0.80396, 2, 25, 165.74, -94.49, 0.31962, 26, 105.59, -71.26, 0.68037, 2, 25, 166.39, -79.07, 0.46225, 26, 90.23, -72.76, 0.53774, 2, 25, 166.49, -74.17, 0.53785, 26, 85.42, -73.28, 0.46213, 2, 25, 141.54, -82.46, 0.73138, 26, 97.13, -96.82, 0.26861, 2, 25, 99.76, -97.08, 0.85324, 26, 117.34, -136.23, 0.14675, 2, 25, 45.01, -114.56, 0.83615, 1, -51.09, -135.29, 0.16384, 2, 25, -16.2, -74.76, 0.62989, 1, -42.95, -58.38, 0.3701, 2, 25, -74.73, -19.33, 0.31468, 1, -52.66, 17.54999, 0.68531, 2, 25, 1.67, 76.75, 0.25576, 1, 70.07, 18.78, 0.74423, 1, 25, 93.54, 4.13, 1, 2, 25, 185.14, -6.66, 0.75461, 26, 15.98, -64.26999, 0.24538, 2, 25, 217.11, -18.75, 0.50844, 26, 23.47, -30.93, 0.49154, 2, 25, 225.63, -32.91999, 0.32527, 26, 36.3, -20.5, 0.67472, 2, 25, 223, -84.73, 0.20192, 26, 87.96, -15.86, 0.79807, 3, 25, 235.61, -168.06, 0.0809, 26, 168.69, 8.29, 0.57147, 27, 6.74, 40.47, 0.34761, 3, 26, 191.79, 35.8, 0.32545, 27, 36, 19.62, 0.57243, 28, -31.14, 78.74, 0.10211, 4, 26, 206.64, 111.53, 0.10808, 27, 112.69, 10.82, 0.52067, 28, 6.25, 11.23, 0.23517, 29, -49.03, 19.43, 0.13606, 3, 27, 130.6, 26.41, 0.35067, 28, 29.35, 5.71, 0.28241, 29, -27.12, 10.25, 0.3669, 2, 29, 67.46, 3.16, 0.384, 30, 18.54999, -16.62999, 0.61599, 1, 30, 19.07, -14.51, 1, 2, 29, 36, 24.95, 0.384, 30, -13.89, 3.64, 0.61599, 2, 29, 86.23, -6.55, 0.48799, 30, 37.75, -25.46, 0.512, 4, 26, 164.9, 153.55, 0.02263, 27, 151.18, 56, 0.23908, 28, 65.44, 5.55, 0.19254, 29, 8.45, 4.27, 0.54574, 2, 25, -9.28, -17.5, 0.59605, 1, 7.72, -30.85, 0.40393, 2, 25, 195.9, -53.81, 0.42368, 26, 61.11, -47.06, 0.5763, 2, 25, 190.1, -48.45, 0.53231, 26, 56.61, -53.56, 0.46768, 2, 25, 161.26, -48.26, 0.79873, 26, 60.44, -82.12999, 0.20126, 2, 25, 120.37, -58.54, 0.85455, 26, 76.31, -121.18, 0.14544, 2, 25, 197.37, -69.23, 0.3355, 26, 76.17, -43.46, 0.66449 ], + "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": "skinnedmesh", + "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": [ 16, 47, 15, 15, 12, 13, 15, 13, 14, 15, 47, 12, 47, 10, 11, 17, 46, 47, 47, 46, 10, 18, 46, 17, 17, 47, 16, 18, 45, 46, 47, 11, 12, 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, 20, 21, 44, 20, 45, 19, 44, 45, 20, 45, 18, 19, 46, 9, 10, 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, 28, 29, 40, 40, 39, 4, 7, 42, 6, 24, 42, 22, 40, 29, 39, 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, 6, 53.94, 69.15, 1, 1, 6, 126.23, 67.31, 1, 2, 6, 226.42, 31.13, 0.9375, 11, -30.87, -1.11, 0.0625, 2, 6, 240.84, 25.33, 0.7, 11, -25.64, 13.52, 0.3, 2, 6, 246.67, 8.05, 0.3, 11, -8.61, 20.02, 0.7, 3, 6, 240.81, -115.25, 0.0625, 11, 114.8, 19.01, 0.875, 19, 9.48, 59.16, 0.0625, 2, 11, 131.07, 29.69, 0.7, 19, 22.11, 44.35, 0.3, 2, 11, 146.06, 39.54, 0.3, 19, 33.76, 30.71, 0.7, 4, 11, 152.6, 65.01, 0.12438, 19, 59.85, 27.41, 0.74434, 35, 15.85, 48.05, 0.12104, 51, -80.52, 23.87, 0.01022, 4, 11, 154.28, 71.59, 0.0519, 19, 66.59, 26.56, 0.74749, 35, 16.72, 41.31, 0.15401, 51, -77.54, 17.76, 0.04658, 4, 11, 145.73, 77.3, 0.02193, 19, 71.19, 35.76, 0.63296, 35, 26.78, 39.17, 0.1288, 51, -67.32, 18.96, 0.21628, 3, 19, 87.93, 69.21, 0.0625, 35, 63.37, 31.39, 0.675, 51, -30.17, 23.3, 0.26249, 2, 35, 113.82, 35.72, 0.1038, 51, 16.23, 43.56, 0.89619, 1, 51, 128.14, 12.02, 1, 1, 51, 161.85, -15.81, 1, 2, 35, 90.98, -23.36, 0.0138, 51, 13.52, -19.72, 0.98619, 2, 35, 62.97, -25.81, 0.7, 51, -12.23, -31.02, 0.3, 3, 19, 115.12, -1.33, 0.08333, 35, 1.93, -12.66, 0.83333, 51, -74.26, -38.1, 0.08333, 2, 19, 106.11, -23.53, 0.3, 35, -21.8, -9.52, 0.7, 2, 19, 97.43, -44.9, 0.7, 35, -44.67, -6.51, 0.3, 2, 19, 84.26, -40.69, 0.9375, 35, -43.9, 7.29, 0.0625, 1, 19, 49.18, -29.46, 1, 2, 11, 206.75, 5.37, 0.13333, 19, 7.44, -33.77, 0.86666, 2, 11, 219.64, -20.52, 0.36111, 19, -16.64, -49.8, 0.63888, 2, 11, 208.4, -37.82, 0.72083, 19, -35.22, -40.82, 0.27916, 2, 11, 200.49, -50.02, 0.91666, 19, -48.31, -34.48, 0.08333, 1, 11, 161.1, -36.97, 1, 2, 6, 150.1, -116.76, 0.08333, 11, 119.88, -71.55, 0.91666, 2, 6, 154.99, -70.71, 0.42846, 11, 73.68, -68.47, 0.57153, 2, 6, 150.3, -65.27, 0.35604, 11, 68.42, -73.36, 0.64395, 2, 6, 146.51, -60.87, 0.59147, 11, 64.17, -77.32, 0.40852, 2, 6, 115.12, -75.08, 0.8446, 11, 79.61, -108.13, 0.15539, 1, 6, 63.33, -98.53, 1, 1, 6, 21.78, -94.55, 1, 1, 6, -66.69, -32.04, 1, 1, 6, -6.62, 52.97, 1, 1, 6, 58.14, -6, 1, 1, 6, 121.17, 2.44, 1, 2, 6, 188.87, -12.1, 0.96, 11, 13.79, -36.92, 0.04, 2, 6, 197.11, -18.42, 0.7, 11, 19.79, -28.44, 0.3, 2, 6, 203.98, -28.61, 0.3, 11, 29.69, -21.17, 0.7, 3, 6, 213.53, -136.06, 0.04, 11, 136.67, -7.42, 0.91999, 19, -14.02, 34.16, 0.04, 2, 11, 164.32, 0.66, 0.7, 19, -2.53, 7.73, 0.3, 2, 11, 177.97, 21.57, 0.25, 19, 19.92, -3.19, 0.75, 3, 11, 187.55, 72.78, 0.04, 19, 71.93, -6.29, 0.91999, 35, -13.72, 27.87, 0.04, 2, 19, 79.66, -3.72, 0.7, 35, -9.28, 21.04, 0.3, 3, 19, 87.98, 7.25, 0.3, 35, 3.42, 15.76, 0.66, 51, -81.96, -10.7, 0.04, 3, 19, 114.16, 61.85, 0.04, 35, 62.84, 4.15, 0.7, 51, -21.95, -2.66, 0.26 ], - "hull": 36 + "triangles": [ 15, 13, 14, 16, 47, 15, 15, 12, 13, 15, 47, 12, 18, 46, 17, 18, 45, 46, 17, 47, 16, 17, 46, 47, 47, 10, 11, 47, 46, 10, 47, 11, 12, 45, 18, 19, 44, 45, 20, 20, 45, 19, 20, 21, 44, 46, 9, 10, 46, 45, 9, 45, 44, 9, 21, 43, 44, 44, 8, 9, 44, 7, 8, 44, 43, 7, 21, 22, 43, 43, 22, 42, 43, 42, 7, 22, 23, 24, 24, 42, 22, 7, 42, 6, 42, 41, 6, 6, 41, 5, 24, 26, 42, 42, 26, 41, 24, 25, 26, 5, 40, 4, 5, 41, 40, 41, 28, 40, 26, 27, 41, 41, 27, 28, 40, 39, 4, 28, 29, 40, 40, 29, 39, 4, 39, 3, 39, 2, 3, 29, 30, 39, 39, 38, 2, 39, 30, 38, 38, 1, 2, 30, 37, 38, 38, 37, 1, 30, 31, 37, 31, 36, 37, 31, 32, 36, 32, 33, 36, 37, 0, 1, 37, 36, 0, 33, 34, 36, 36, 35, 0, 36, 34, 35 ], + "vertices": [ 1, 44, 53.94, 69.15, 1, 1, 44, 126.23, 67.31, 1, 2, 44, 226.42, 31.13, 0.9375, 45, -30.87, -1.11, 0.0625, 2, 44, 240.84, 25.33, 0.7, 45, -25.64, 13.52, 0.3, 2, 44, 246.67, 8.05, 0.3, 45, -8.60999, 20.02, 0.7, 3, 44, 240.81, -115.25, 0.0625, 45, 114.8, 19.01, 0.875, 46, 9.47999, 59.16, 0.0625, 2, 45, 131.07, 29.69, 0.7, 46, 22.11, 44.35, 0.3, 2, 45, 146.06, 39.54, 0.3, 46, 33.75999, 30.71, 0.7, 3, 45, 152.6, 65.01, 0.12566, 46, 59.85, 27.41, 0.75203, 47, 15.85, 48.05, 0.12229, 3, 45, 154.28, 71.58999, 0.05444, 46, 66.58999, 26.56, 0.78401, 47, 16.71999, 41.31, 0.16154, 3, 46, 71.19, 35.75999, 0.64716, 47, 26.78, 39.16999, 0.13169, 48, -67.32, 18.95999, 0.22114, 3, 46, 87.93, 69.21, 0.0625, 47, 63.37, 31.39, 0.675, 48, -30.17, 23.3, 0.26249, 2, 47, 113.82, 35.72, 0.1038, 48, 16.23, 43.56, 0.89619, 1, 48, 128.14, 12.02, 1, 1, 48, 161.85, -15.81, 1, 2, 47, 90.98, -23.36, 0.0138, 48, 13.52, -19.71999, 0.98619, 2, 47, 62.97, -25.81, 0.7, 48, -12.23, -31.02, 0.3, 3, 46, 115.12, -1.33, 0.08333, 47, 1.93, -12.66, 0.83333, 48, -74.26, -38.09999, 0.08333, 2, 46, 106.11, -23.53, 0.3, 47, -21.8, -9.52, 0.7, 2, 46, 97.43, -44.9, 0.7, 47, -44.67, -6.51, 0.3, 2, 46, 84.26, -40.68999, 0.9375, 47, -43.9, 7.29, 0.0625, 1, 46, 49.18, -29.46, 1, 2, 45, 206.75, 5.37, 0.13333, 46, 7.44, -33.77, 0.86666, 2, 45, 219.64, -20.52, 0.36111, 46, -16.64, -49.8, 0.63888, 2, 45, 208.4, -37.82, 0.72083, 46, -35.22, -40.82, 0.27916, 2, 45, 200.49, -50.02, 0.91666, 46, -48.31, -34.48, 0.08333, 1, 45, 161.1, -36.97, 1, 2, 44, 150.1, -116.76, 0.08333, 45, 119.88, -71.55, 0.91666, 2, 44, 154.99, -70.71, 0.42846, 45, 73.68, -68.47, 0.57153, 2, 44, 150.3, -65.26999, 0.35604, 45, 68.42, -73.36, 0.64395, 2, 44, 146.51, -60.87, 0.59147, 45, 64.17, -77.32, 0.40852, 2, 44, 115.12, -75.08, 0.8446, 45, 79.61, -108.13, 0.15538, 1, 44, 63.33, -98.53, 1, 1, 44, 21.78, -94.55, 1, 1, 44, -66.69, -32.04, 1, 1, 44, -6.62, 52.97, 1, 1, 44, 58.14, -6, 1, 1, 44, 121.17, 2.44, 1, 1, 44, 188.87, -12.1, 1, 2, 44, 197.11, -18.42, 0.7, 45, 19.79, -28.44, 0.3, 2, 44, 203.98, -28.61, 0.3, 45, 29.69, -21.17, 0.7, 1, 45, 136.67, -7.42, 1, 2, 45, 164.32, 0.66, 0.7, 46, -2.53, 7.73, 0.3, 2, 45, 177.97, 21.57, 0.25, 46, 19.92, -3.19, 0.75, 1, 46, 71.93, -6.29, 1, 2, 46, 79.66, -3.72, 0.7, 47, -9.28, 21.04, 0.3, 2, 46, 87.98, 7.25, 0.3125, 47, 3.42, 15.76, 0.6875, 3, 46, 114.16, 61.85, 0.04, 47, 62.84, 4.15, 0.7, 48, -21.95, -2.66, 0.26 ], + "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": { @@ -306,11 +410,14 @@ }, "raptor_jaw": { "raptor_jaw": { - "type": "skinnedmesh", - "uvs": [ 0.40984, 0.22169, 0.42214, 0.3988, 0.67894, 0.53819, 0.7589, 0.62838, 0.99999, 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, 0.31758, 0.50047 ], - "triangles": [ 14, 13, 0, 10, 11, 15, 15, 14, 1, 2, 7, 8, 8, 9, 10, 15, 2, 8, 15, 8, 10, 7, 3, 6, 7, 2, 3, 2, 15, 1, 6, 3, 5, 5, 3, 4, 14, 0, 1, 11, 14, 15, 11, 12, 14, 14, 12, 13 ], - "vertices": [ 1, 48, 28.6, 68.85, 1, 1, 48, 69.65, 38.95, 1, 1, 48, 150.72, 72.88, 1, 1, 48, 186.16, 74.79, 1, 1, 48, 199.76, 159.69, 1, 1, 48, 213.35, 148.16, 1, 1, 48, 242.43, 74.42, 1, 1, 48, 230.31, -13.08, 1, 1, 48, 189.56, -71.99, 1, 1, 48, 132.76, -105.6, 1, 1, 48, 83.71, -55.39, 1, 2, 33, -18.31, 12.1, 0.67732, 48, -0.04, -70.76, 0.32267, 1, 33, 113.44, 16.95, 1, 1, 33, 116.36, -62.48, 1, 1, 48, 1.86, 5.43, 1, 1, 48, 71.19, -4.17, 1 ], - "hull": 14 + "type": "mesh", + "uvs": [ 0.40984, 0.22169, 0.42214, 0.3988, 0.67894, 0.53819, 0.7589, 0.62838, 0.99999, 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.85, 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.42, 1, 1, 39, 230.31, -13.08, 1, 1, 39, 189.56, -71.99, 1, 1, 39, 132.76, -105.6, 1, 1, 39, 83.71, -55.39, 1, 2, 8, -18.31, 12.1, 0.67732, 39, -0.04, -70.76, 0.32267, 1, 8, 113.44, 16.95, 1, 1, 8, 116.36, -62.48, 1, 1, 39, 1.86, 5.43, 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": { @@ -321,11 +428,14 @@ }, "raptor_saddle_strap_rear": { "raptor_saddle_strap_rear": { - "type": "skinnedmesh", + "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, 22, 15, 20, 14, 15, 22, 5, 20, 4, 22, 20, 5, 15, 16, 20, 20, 21, 4, 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, 21, 3.9, -3.27, 1, 1, 21, 4.25, 15.05, 1, 1, 21, 13.24, 20.28, 1, 2, 21, 23.42, 21.2, 0.7, 37, -15.2, 21.22, 0.3, 3, 21, 41.11, 22.87, 0.3, 37, 2.48, 22.89, 0.6375, 53, -33.83, 24.96, 0.0625, 3, 21, 52.07, 21.72, 0.0625, 37, 13.43, 21.74, 0.6375, 53, -22.97, 23.11, 0.3, 2, 37, 18.39, 20.76, 0.25, 53, -18.09, 21.82, 0.75, 1, 53, -18.76, 33.09, 1, 1, 53, 49.92, 31.57, 1, 1, 53, 53.21, 25, 1, 1, 53, 53.11, -27.48, 1, 1, 53, 49.74, -31.27, 1, 1, 53, -20.73, -36.76, 1, 1, 53, -23.82, -22.28, 1, 3, 21, 53.48, -24.61, 0.0625, 37, 14.84, -24.59, 0.575, 53, -24.51, -23.21, 0.3625, 3, 21, 41.44, -26.12, 0.3, 37, 2.81, -26.09, 0.6375, 53, -36.62, -23.95, 0.0625, 2, 21, 24.38, -26.12, 0.7, 37, -14.24, -26.1, 0.3, 1, 21, 5.57, -26.12, 1, 1, 21, 3.54, -22.64, 1, 1, 53, -23.08, -0.04, 1, 3, 21, 41.66, -1.72, 0.3, 37, 3.03, -1.7, 0.66, 53, -34.85, 0.38, 0.04, 2, 21, 23.85, -2.46, 0.7, 37, -14.77, -2.44, 0.3, 3, 21, 52.58, -1.52, 0.04, 37, 13.95, -1.5, 0.62, 53, -23.94, -0.11, 0.34 ], - "hull": 19 + "triangles": [ 7, 8, 6, 9, 10, 13, 13, 11, 12, 6, 8, 19, 8, 9, 19, 9, 13, 19, 13, 10, 11, 19, 22, 6, 13, 14, 19, 19, 14, 22, 6, 22, 5, 22, 20, 5, 5, 20, 4, 14, 15, 22, 22, 15, 20, 20, 21, 4, 15, 16, 20, 4, 21, 3, 20, 16, 21, 2, 3, 0, 3, 21, 0, 0, 1, 2, 21, 16, 18, 16, 17, 18, 21, 18, 0 ], + "vertices": [ 1, 52, 3.9, -3.27, 1, 1, 52, 4.25, 15.05, 1, 1, 52, 13.24, 20.28, 1, 2, 52, 23.42, 21.2, 0.7, 53, -15.2, 21.22, 0.3, 3, 52, 41.11, 22.87, 0.3, 53, 2.48, 22.89, 0.6375, 54, -33.83, 24.96, 0.0625, 3, 52, 52.07, 21.72, 0.0625, 53, 13.43, 21.74, 0.6375, 54, -22.97, 23.11, 0.3, 2, 53, 18.39, 20.76, 0.25, 54, -18.09, 21.82, 0.75, 1, 54, -18.76, 33.09, 1, 1, 54, 49.92, 31.57, 1, 1, 54, 53.21, 25, 1, 1, 54, 53.11, -27.48, 1, 1, 54, 49.74, -31.27, 1, 1, 54, -20.73, -36.75999, 1, 1, 54, -23.82, -22.28, 1, 3, 52, 53.48, -24.61, 0.0625, 53, 14.84, -24.59, 0.575, 54, -24.51, -23.21, 0.3625, 3, 52, 41.43999, -26.12, 0.3, 53, 2.81, -26.09, 0.6375, 54, -36.62, -23.95, 0.0625, 2, 52, 24.38, -26.12, 0.7, 53, -14.24, -26.1, 0.3, 1, 52, 5.57, -26.12, 1, 1, 52, 3.54, -22.64, 1, 1, 54, -23.08, -0.04, 1, 2, 52, 41.66, -1.72, 0.3125, 53, 3.03, -1.7, 0.6875, 2, 52, 23.85, -2.46, 0.7, 53, -14.77, -2.44, 0.3, 2, 53, 13.95, -1.5, 0.64582, 54, -23.94, -0.11, 0.35416 ], + "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": { @@ -333,11 +443,14 @@ }, "raptor_tongue": { "raptor_tongue": { - "type": "skinnedmesh", + "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, 55, 3.63, 27.04, 0.6875, 62, -47.26, 33.87, 0.3125, 3, 55, 39.09, 19.45, 0.3125, 62, -13.41, 20.86, 0.625, 65, -51.54, 33.37, 0.0625, 3, 55, 71.56, 19.02, 0.0625, 62, 18.58, 15.39, 0.625, 65, -21.56, 20.92, 0.3125, 2, 62, 55.03, 16.85, 0.3125, 65, 14.29, 14.23, 0.6875, 2, 62, 93.34, 18.39, 0.08333, 65, 51.98, 7.21, 0.91666, 1, 65, 56.09, -4.5, 1, 2, 62, 85.06, -1.49, 0.08333, 65, 39.48, -10.33, 0.91666, 2, 62, 54.22, -9.18, 0.3125, 65, 7.71, -10.96, 0.6875, 3, 55, 75.14, -14.72, 0.0625, 62, 16.87, -18.5, 0.625, 65, -30.77, -11.73, 0.3125, 3, 55, 38.8, -25.8, 0.3125, 62, -20.74, -23.8, 0.625, 65, -68.62, -8.53, 0.0625, 2, 55, 2.4, -35.77, 0.6875, 62, -58.25, -27.99, 0.3125, 2, 55, -17.28, -40.62, 0.91666, 62, -78.45, -29.71, 0.08333, 1, 55, -59.91, 8.18, 1, 2, 55, -26.13, 37.69, 0.91666, 62, -75.02, 49.02, 0.08333 ], - "hull": 14 + "vertices": [ 2, 63, 3.63, 27.04, 0.6875, 64, -47.26, 33.87, 0.3125, 3, 63, 39.09, 19.45, 0.3125, 64, -13.41, 20.86, 0.625, 65, -51.54, 33.37, 0.0625, 3, 63, 71.56, 19.02, 0.0625, 64, 18.58, 15.39, 0.625, 65, -21.56, 20.92, 0.3125, 2, 64, 55.03, 16.85, 0.3125, 65, 14.29, 14.23, 0.6875, 2, 64, 93.34, 18.39, 0.08333, 65, 51.98, 7.21, 0.91666, 1, 65, 56.09, -4.5, 1, 2, 64, 85.06, -1.49, 0.08333, 65, 39.48, -10.33, 0.91666, 2, 64, 54.22, -9.18, 0.3125, 65, 7.71, -10.96, 0.6875, 3, 63, 75.14, -14.72, 0.0625, 64, 16.87, -18.5, 0.625, 65, -30.77, -11.73, 0.3125, 3, 63, 38.8, -25.8, 0.3125, 64, -20.74, -23.8, 0.625, 65, -68.62, -8.53, 0.0625, 2, 63, 2.4, -35.77, 0.6875, 64, -58.25, -27.99, 0.3125, 2, 63, -17.28, -40.62, 0.91666, 64, -78.44999, -29.71, 0.08333, 1, 63, -59.91, 8.18, 1, 2, 63, -26.13, 37.68999, 0.91666, 64, -75.01999, 49.02, 0.08333 ], + "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": { @@ -351,11 +464,14 @@ }, "stirrup_strap": { "stirrup_strap": { - "type": "skinnedmesh", + "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, 26, 24.71, 8.03, 0.80344, 39, -17.42, 11.02, 0.19655, 2, 26, 37.95, 8.04, 0.59978, 39, -4.36, 8.87, 0.40021, 2, 26, 50.88, 8.04, 0.36895, 39, 8.39, 6.77, 0.63104, 2, 26, 65.92, 12.27, 0.17748, 39, 23.91, 8.48, 0.82251, 2, 26, 81.72, 16.7, 0.05943, 39, 40.23, 10.28, 0.94056, 2, 26, 98.82, 25.04, 0.01209, 39, 58.46, 15.71, 0.9879, 2, 26, 114.44, 11.57, 0.00191, 39, 71.67, -0.11, 0.99808, 2, 26, 100.47, -4.61, 0.01817, 39, 55.25, -13.81, 0.98182, 2, 26, 78.79, -4.14, 0.07487, 39, 33.94, -9.81, 0.92512, 2, 26, 65.83, -6.24, 0.2028, 39, 20.81, -9.76, 0.79719, 2, 26, 49.78, -8.83, 0.39971, 39, 4.55, -9.7, 0.60028, 2, 26, 37.93, -10.97, 0.62658, 39, -7.48, -9.88, 0.37341, 2, 26, 25.85, -13.15, 0.82034, 39, -19.75, -10.06, 0.17965, 2, 26, 0.25, -18.03, 0.95288, 39, -45.81, -10.7, 0.04711, 2, 26, -17.83, -2.43, 0.97709, 39, -61.11, 7.63, 0.0229, 2, 26, 1.57, 20.07, 0.94774, 39, -38.29, 26.67, 0.05225, 2, 26, 10.84, -1.23, 0.97709, 39, -32.62, 4.14, 0.0229 ], - "hull": 16 + "vertices": [ 2, 56, 24.71, 8.03, 0.80344, 57, -17.42, 11.02, 0.19655, 2, 56, 37.95, 8.04, 0.59978, 57, -4.36, 8.87, 0.40021, 2, 56, 50.88, 8.04, 0.36895, 57, 8.39, 6.77, 0.63103, 2, 56, 65.92, 12.27, 0.17748, 57, 23.91, 8.47999, 0.82251, 2, 56, 81.72, 16.7, 0.05943, 57, 40.23, 10.28, 0.94056, 2, 56, 98.82, 25.04, 0.01209, 57, 58.46, 15.71, 0.9879, 2, 56, 114.44, 11.57, 0.00191, 57, 71.67, -0.11, 0.99808, 2, 56, 100.47, -4.61, 0.01816, 57, 55.25, -13.81, 0.98182, 2, 56, 78.79, -4.14, 0.07487, 57, 33.93999, -9.81, 0.92512, 2, 56, 65.83, -6.24, 0.2028, 57, 20.81, -9.76, 0.79719, 2, 56, 49.78, -8.83, 0.39971, 57, 4.55, -9.7, 0.60028, 2, 56, 37.93, -10.97, 0.62658, 57, -7.48, -9.88, 0.37341, 2, 56, 25.85, -13.15, 0.82034, 57, -19.75, -10.06, 0.17965, 2, 56, 0.25, -18.03, 0.95288, 57, -45.81, -10.7, 0.04711, 2, 56, -17.83, -2.43, 0.97709, 57, -61.11, 7.63, 0.0229, 2, 56, 1.57, 20.07, 0.94774, 57, -38.29, 26.67, 0.05225, 2, 56, 10.84, -1.23, 0.97709, 57, -32.62, 4.14, 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": { @@ -364,7 +480,1179 @@ } }, "animations": { - "empty": {}, + "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.9, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.7, "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.7, "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.7, "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 } + ] + } + } + }, "gungrab": { "slots": { "front_hand": { @@ -439,13 +1727,7 @@ }, "ik": { "front_arm_goal": [ - { - "time": 0, - "mix": 1, - "bendPositive": true, - "curve": [ 0.317, 0.13, 0.781, 0.56 ] - }, - { "time": 0.1333, "mix": 0, "bendPositive": true } + { "time": 0, "mix": 0 } ] } }, @@ -552,9 +1834,6 @@ "front_leg1": { "rotate": [ { "time": 0, "angle": 27.07 }, - { "time": 0.5333, "angle": -41.93 }, - { "time": 0.6333, "angle": -16.71 }, - { "time": 0.7333, "angle": 16.92 }, { "time": 1.0666, "angle": 31.39 } ], "translate": [ @@ -583,9 +1862,6 @@ "rear_leg1": { "rotate": [ { "time": 0, "angle": -64.85 }, - { "time": 0.1, "angle": -45.79 }, - { "time": 0.1666, "angle": -19.95 }, - { "time": 0.4, "angle": 35.36 }, { "time": 1.0666, "angle": -45.71 } ], "translate": [ @@ -639,9 +1915,6 @@ "front_leg2": { "rotate": [ { "time": 0, "angle": -347.28 }, - { "time": 0.5333, "angle": -346.78 }, - { "time": 0.6333, "angle": -398.52 }, - { "time": 0.7333, "angle": -393.21 }, { "time": 1.0666, "angle": -362.06 } ], "translate": [ @@ -652,11 +1925,6 @@ "rear_leg2": { "rotate": [ { "time": 0, "angle": 27.05 }, - { "time": 0.0666, "angle": -14.99 }, - { "time": 0.1, "angle": -28.87 }, - { "time": 0.1666, "angle": -49.87 }, - { "time": 0.4, "angle": -14.45 }, - { "time": 0.4666, "angle": 11.42 }, { "time": 1.0666, "angle": 9.92 } ], "translate": [ @@ -705,25 +1973,22 @@ }, "tail2": { "rotate": [ - { "time": 0, "angle": -6.57 }, - { "time": 0.0666, "angle": -1.96 }, - { "time": 0.3333, "angle": -18.09 }, - { "time": 0.6333, "angle": -1.96 }, - { "time": 0.9, "angle": -18.09 }, - { "time": 1.0666, "angle": -6.57 } + { "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 1.024, "y": 1 }, - { "time": 0.0666, "x": 1.072, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 0.6333, "x": 1.072, "y": 1 }, - { "time": 0.9, "x": 0.903, "y": 1 }, - { "time": 1.0666, "x": 1.024, "y": 1 } + { "time": 0, "x": 0.8, "y": 1 }, + { "time": 0.2333, "x": 0.9, "y": 1 }, + { "time": 0.5, "x": 0.8, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 0.8, "y": 1 } ] }, "torso2": { @@ -841,23 +2106,22 @@ }, "tail3": { "rotate": [ - { "time": 0, "angle": -14.83 }, - { "time": 0.0666, "angle": -24.31 }, - { "time": 0.3333, "angle": 8.86 }, - { "time": 0.6333, "angle": -24.31 }, - { "time": 0.9, "angle": 8.86 }, - { "time": 1.0666, "angle": -14.83 } + { "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "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": { @@ -969,36 +2233,43 @@ }, "tail4": { "rotate": [ - { "time": 0, "angle": 16.99 }, - { "time": 0.0666, "angle": 7.36 }, - { "time": 0.3333, "angle": 41.06 }, - { "time": 0.6333, "angle": 7.36 }, - { "time": 0.9, "angle": 41.06 }, - { "time": 1.0666, "angle": 16.99 } + { "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "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, "angle": 36.9 }, { "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 } + { "time": 1, "angle": 27.74 }, + { "time": 1.0666, "angle": 36.9 } ], "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, @@ -1098,23 +2369,39 @@ }, "tail5": { "rotate": [ - { "time": 0, "angle": -15.7 }, - { "time": 0.0666, "angle": -38.39 }, - { "time": 0.3333, "angle": 41.03 }, - { "time": 0.6333, "angle": -38.39 }, - { "time": 0.9, "angle": 41.03 }, - { "time": 1.0666, "angle": -15.7 } + { + "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "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": { @@ -1132,7 +2419,7 @@ }, "front_foot3": { "rotate": [ - { "time": 0, "angle": 27.59 }, + { "time": 0, "angle": -1.65 }, { "time": 0.0666, "angle": -5.29 }, { "time": 0.1333, "angle": -3.94 }, { "time": 0.2666, "angle": -3.81 }, @@ -1141,8 +2428,8 @@ { "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 } + { "time": 1, "angle": 10.93 }, + { "time": 1.0666, "angle": -1.65 } ], "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, @@ -1283,21 +2570,21 @@ ] } }, - "ffd": { + "deform": { "default": { "raptor_body": { "raptor_body": [ { "time": 0 }, { "time": 0.2666, - "offset": 368, - "vertices": [ -16.78, 15.47, -0.63, 22.82, 18.11, 13.89, 19.32, 12.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, 0, 0, 0, 0, 0, 0, -3.24, 0.81, 0, 0, -3.24, 0.81 ] + "offset": 314, + "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, -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": 368, - "vertices": [ -16.78, 15.47, -0.63, 22.82, 18.11, 13.89, 19.32, 12.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, 0, 0, 0, 0, 0, 0, -3.24, 0.81, 0, 0, -3.24, 0.81 ] + "offset": 314, + "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, -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 } ] @@ -1308,18 +2595,18 @@ { "time": 0.2666 }, { "time": 0.5333, - "offset": 216, - "vertices": [ -2.23, 21.95, 21.54, -4.75 ] + "offset": 138, + "vertices": [ -2.23608, 21.95403, 21.54915, -4.7554 ] }, { "time": 0.6, - "offset": 216, - "vertices": [ 7.17, 15.14, 15.26, -6.91 ] + "offset": 138, + "vertices": [ 7.17962, 15.14358, 15.26523, -6.91741 ] }, { "time": 0.7333, - "offset": 176, - "vertices": [ -0.82, 0.73, -0.01, -1.1, -0.27, 1.06, -1.28, 0.39, 0, 0, 0, 0, 0, 0, 1.48, -2.59, 0.98, 2.82, 2.73, -10.49, 6.12, 8.95, -3.72, -10.18, -2.6, -2.28, 3.43, -0.47, -3.44, -0.39, -2.28, -4.76, 5.08, 1.4, -4.58, -2.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.37, -1.75, 2.22, 0.1, -1.86, -0.75, -2.86, -0.77, 2.45, -1.65 ] + "offset": 110, + "vertices": [ -0.82485, 0.73406, -0.01284, -1.10443, 0, 0, 0, 0, 1.4866, -2.59426, 0.98071, 2.82342, 2.7366, -10.49935, 6.12506, 8.95282, -2.60873, -2.28384, 3.43417, -0.47045, -2.28305, -4.76037, 5.08892, 1.40078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 ] }, { "time": 0.8, "curve": "stepped" }, { "time": 0.9666, "curve": "stepped" }, diff --git a/spine-cocos2dx/example/Resources/common/raptor.png b/spine-cocos2dx/example/Resources/common/raptor.png index 861dbce1a..625072a67 100644 Binary files a/spine-cocos2dx/example/Resources/common/raptor.png and b/spine-cocos2dx/example/Resources/common/raptor.png differ diff --git a/spine-cocos2dx/example/Resources/common/spineboy.atlas b/spine-cocos2dx/example/Resources/common/spineboy.atlas new file mode 100644 index 000000000..e9500cc4a --- /dev/null +++ b/spine-cocos2dx/example/Resources/common/spineboy.atlas @@ -0,0 +1,195 @@ + +spineboy.png +size: 1024,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +eye_indifferent + rotate: false + xy: 550, 694 + size: 93, 89 + orig: 93, 89 + offset: 0, 0 + index: -1 +eye_surprised + rotate: false + xy: 834, 856 + size: 93, 89 + orig: 93, 89 + offset: 0, 0 + index: -1 +front_bracer + rotate: false + xy: 678, 774 + 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: 550, 605 + size: 86, 87 + orig: 86, 87 + offset: 0, 0 + index: -1 +front_foot + rotate: false + xy: 550, 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: 82, 184 + orig: 82, 184 + offset: 0, 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: false + xy: 447, 532 + 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: 796, 819 + size: 36, 41 + orig: 36, 41 + offset: 0, 0 + index: -1 +rear_bracer + rotate: false + xy: 738, 788 + size: 56, 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, 862 + size: 103, 83 + orig: 103, 83 + offset: 0, 0 + index: -1 +rear_shin + rotate: true + xy: 729, 947 + size: 75, 178 + orig: 75, 178 + offset: 0, 0 + index: -1 +rear_thigh + rotate: true + xy: 909, 957 + size: 65, 104 + orig: 65, 104 + offset: 0, 0 + index: -1 +rear_upper_arm + rotate: true + xy: 447, 483 + 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-cocos2dx/example/Resources/common/spineboy.json b/spine-cocos2dx/example/Resources/common/spineboy.json index 1ffa7aad5..88bafe6a7 100644 --- a/spine-cocos2dx/example/Resources/common/spineboy.json +++ b/spine-cocos2dx/example/Resources/common/spineboy.json @@ -1,39 +1,31 @@ { +"skeleton": { "hash": "rPoYyBLFG6F0CGZ5wsUEBKDJU9U", "spine": "3.3.07", "width": 470.71, "height": 731.57, "images": "./images/" }, "bones": [ { "name": "hip", "y": 247.47 }, - { "name": "front_thigh", "parent": "hip", "length": 74.8, "x": -17.45, "y": -11.64, "rotation": -95.51, "color": "00ff04ff" }, - { "name": "rear_thigh", "parent": "hip", "length": 85.71, "x": 8.91, "y": -5.62, "rotation": -72.54, "color": "ff000dff" }, - { "name": "torso", "parent": "hip", "length": 127.55, "x": -1.61, "y": 4.9, "rotation": 103.82, "color": "e0da19ff" }, - { - "name": "front_shin", - "parent": "front_thigh", - "length": 128.76, - "x": 78.69, - "y": 1.6, - "rotation": -2.21, - "inheritScale": false, - "color": "00ff04ff" - }, - { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "x": 103.75, "y": 19.32, "rotation": 168.37, "color": "00ff04ff" }, - { "name": "neck", "parent": "torso", "length": 25.45, "x": 127.49, "y": -0.3, "rotation": -31.53, "color": "e0da19ff" }, - { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "x": 86.1, "y": -1.32, "rotation": -19.83, "color": "ff000dff" }, - { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "x": 92.35, "y": -19.22, "rotation": -169.55, "color": "ff000dff" }, + { "name": "torso", "parent": "hip", "length": 127.55, "rotation": 103.82, "x": -1.61, "y": 4.9, "color": "e0da19ff" }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "rotation": 168.37, "x": 103.75, "y": 19.32, "color": "00ff04ff" }, { "name": "front_bracer", "parent": "front_upper_arm", "length": 40.57, + "rotation": 18.29, "x": 68.8, "y": -0.68, - "rotation": 18.29, "color": "00ff04ff" }, - { "name": "front_foot", "parent": "front_shin", "length": 91.34, "x": 128.75, "y": -0.33, "rotation": 77.9, "color": "00ff04ff" }, - { "name": "head", "parent": "neck", "length": 263.57, "x": 27.66, "y": -0.25, "rotation": 23.18, "color": "e0da19ff" }, - { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "x": 51.35, "rotation": 23.15, "color": "ff000dff" }, - { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "x": 121.45, "y": -0.75, "rotation": 69.3, "color": "ff000dff" }, - { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "x": 40.56, "y": 0.19, "rotation": 12.43, "color": "00ff04ff" }, - { "name": "gun", "parent": "rear_bracer", "length": 43.1, "x": 34.42, "y": -0.45, "rotation": 5.34, "color": "ff000dff" }, - { "name": "gunTip", "parent": "gun", "x": 201.04, "y": 52.13, "rotation": 6.83, "color": "ff000dff" } + { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "rotation": 12.43, "x": 40.56, "y": 0.19, "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.76, "rotation": -2.21, "x": 78.69, "y": 1.6, "color": "00ff04ff" }, + { "name": "front_foot", "parent": "front_shin", "length": 91.34, "rotation": 77.9, "x": 128.75, "y": -0.33, "color": "00ff04ff" }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -169.55, "x": 92.35, "y": -19.22, "color": "ff000dff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "rotation": 23.15, "x": 51.35, "color": "ff000dff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "rotation": 5.34, "x": 34.42, "y": -0.45, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.04, "y": 52.13, "color": "ff000dff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" }, + { "name": "head", "parent": "neck", "length": 263.57, "rotation": 23.18, "x": 27.66, "y": -0.25, "color": "e0da19ff" }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "rotation": -72.54, "x": 8.91, "y": -5.62, "color": "ff000dff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.83, "x": 86.1, "y": -1.32, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "rotation": 69.3, "x": 121.45, "y": -0.75, "color": "ff000dff" } ], "slots": [ { "name": "rear_upper_arm", "bone": "rear_upper_arm", "attachment": "rear_upper_arm" }, @@ -54,7 +46,8 @@ { "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", "additive": true } + { "name": "muzzle", "bone": "gunTip", "blend": "additive" }, + { "name": "head-bb", "bone": "head" } ], "skins": { "default": { @@ -92,6 +85,13 @@ "head": { "head": { "x": 128.95, "y": 0.29, "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.61, 285.16, 57.18, 120.77, 164.95, -5.06, 76.94 ] + } + }, "mouth": { "mouth_grind": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, @@ -1825,10 +1825,6 @@ ] }, "muzzle": { - "attachment": [ - { "time": 0.1333, "name": "muzzle" }, - { "time": 0.2666, "name": null } - ], "color": [ { "time": 0.1333, @@ -1841,6 +1837,10 @@ "curve": [ 0.821, 0, 0.909, 0.89 ] }, { "time": 0.2666, "color": "ffffff00" } + ], + "attachment": [ + { "time": 0.1333, "name": "muzzle" }, + { "time": 0.2666, "name": null } ] } }, @@ -2008,7 +2008,7 @@ ] } }, - "draworder": [ + "drawOrder": [ { "time": 0.6666, "offsets": [ diff --git a/spine-cocos2dx/example/Resources/common/spineboy.png b/spine-cocos2dx/example/Resources/common/spineboy.png new file mode 100644 index 000000000..c336b66f6 Binary files /dev/null and b/spine-cocos2dx/example/Resources/common/spineboy.png differ diff --git a/spine-cocos2dx/example/Resources/common/tank.atlas b/spine-cocos2dx/example/Resources/common/tank.atlas new file mode 100644 index 000000000..b925bb065 --- /dev/null +++ b/spine-cocos2dx/example/Resources/common/tank.atlas @@ -0,0 +1,125 @@ + +tank.png +size: 2048,2048 +format: RGBA8888 +filter: Linear,Linear +repeat: none +images/antenna + rotate: true + xy: 1295, 1730 + size: 22, 303 + orig: 22, 303 + offset: 0, 0 + index: -1 +images/cannon + rotate: true + xy: 504, 769 + size: 931, 58 + orig: 931, 58 + offset: 0, 0 + index: -1 +images/cannonConnector + rotate: false + xy: 564, 1239 + size: 112, 135 + orig: 112, 135 + offset: 0, 0 + index: -1 +images/guntower + rotate: false + xy: 1295, 1754 + size: 730, 289 + orig: 730, 289 + offset: 0, 0 + index: -1 +images/machinegun + rotate: true + xy: 504, 436 + size: 331, 57 + orig: 331, 57 + offset: 0, 0 + index: -1 +images/machinegun-mount + rotate: false + xy: 2, 2 + size: 72, 96 + orig: 72, 96 + offset: 0, 0 + index: -1 +images/rock + rotate: false + xy: 226, 358 + size: 252, 55 + orig: 252, 55 + offset: 0, 0 + index: -1 +images/tankBottom + rotate: true + xy: 226, 415 + size: 1285, 276 + orig: 1285, 276 + offset: 0, 0 + index: -1 +images/tankBottom-shadow + rotate: false + xy: 2, 1702 + size: 1291, 341 + orig: 1291, 341 + offset: 0, 0 + index: -1 +images/tankTop + rotate: true + xy: 2, 293 + size: 1407, 222 + orig: 1407, 222 + offset: 0, 0 + index: -1 +images/tread + rotate: false + xy: 226, 326 + size: 96, 30 + orig: 96, 30 + offset: 0, 0 + index: -1 +images/tread-inside + rotate: false + xy: 195, 263 + size: 25, 28 + orig: 25, 28 + offset: 0, 0 + index: -1 +images/wheel-big + rotate: false + xy: 2, 100 + size: 191, 191 + orig: 191, 191 + offset: 0, 0 + index: -1 +images/wheel-big-overlay + rotate: false + xy: 564, 1514 + size: 186, 186 + orig: 186, 186 + offset: 0, 0 + index: -1 +images/wheel-mid + rotate: false + xy: 564, 1376 + size: 136, 136 + orig: 136, 136 + offset: 0, 0 + index: -1 +images/wheel-mid-overlay + rotate: false + xy: 752, 1564 + size: 136, 136 + orig: 136, 136 + offset: 0, 0 + index: -1 +images/wheel-small + rotate: false + xy: 890, 1629 + size: 71, 71 + orig: 71, 71 + offset: 0, 0 + index: -1 diff --git a/spine-cocos2dx/example/Resources/common/tank.json b/spine-cocos2dx/example/Resources/common/tank.json new file mode 100644 index 000000000..c26ccbe47 --- /dev/null +++ b/spine-cocos2dx/example/Resources/common/tank.json @@ -0,0 +1,1899 @@ +{ +"skeleton": { "hash": "kgtyty1lpfv5JU2lygtFi2u3oQQ", "spine": "3.3.07", "width": 1914.53, "height": 964.05, "images": "" }, +"bones": [ + { "name": "root" }, + { "name": "tankRoot", "parent": "root", "y": 200 }, + { "name": "tankTreads", "parent": "tankRoot" }, + { "name": "tankBody", "parent": "tankTreads", "y": 10 }, + { "name": "guntower", "parent": "tankBody", "x": -21.72, "y": 245.47 }, + { "name": "antennaRoot", "parent": "guntower", "x": 164.6, "y": 202.52 }, + { "name": "antenna1", "parent": "antennaRoot", "length": 40, "rotation": 90, "y": 39.99, "color": "ffee00ff" }, + { "name": "antenna2", "parent": "antenna1", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna3", "parent": "antenna2", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna4", "parent": "antenna3", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna5", "parent": "antenna4", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna6", "parent": "antenna5", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "cannonConnector", "parent": "guntower", "x": -235.04, "y": 96.07 }, + { "name": "cannonTarget", "parent": "tankRoot", "x": -1486.66, "y": 351.82, "color": "ff3f00ff" }, + { "name": "cannon", "parent": "cannonConnector", "length": 946.68, "rotation": 180, "color": "ff4000ff" }, + { "name": "cannonTip", "parent": "cannon", "x": 946.68, "color": "ff4000ff" }, + { "name": "machineGunTarget", "parent": "tankRoot", "x": -1474, "y": 559.42, "color": "ff3f00ff" }, + { + "name": "machinegun-mount", + "parent": "guntower", + "length": 90.97, + "rotation": 90, + "x": -123.72, + "y": 218.32, + "color": "15ff00ff" + }, + { + "name": "machinegun", + "parent": "machinegun-mount", + "length": 208.94, + "rotation": 90, + "x": 91.52, + "y": -1.03, + "color": "15ff00ff" + }, + { "name": "machinegun-tip", "parent": "machinegun", "x": 210.42, "y": -12.2 }, + { "name": "rock", "parent": "root", "x": -656.45 }, + { + "name": "tread", + "parent": "tankRoot", + "length": 82, + "rotation": 180, + "x": -22.89, + "y": 213.85, + "scaleX": 0.993, + "color": "e64344ff" + }, + { "name": "tread2", "parent": "tread", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread3", "parent": "tread2", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread4", "parent": "tread3", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread5", "parent": "tread4", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread6", "parent": "tread5", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread7", "parent": "tread6", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread8", "parent": "tread7", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread9", "parent": "tread8", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread10", "parent": "tread9", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread11", "parent": "tread10", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread12", "parent": "tread11", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread13", "parent": "tread12", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread14", "parent": "tread13", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread15", "parent": "tread14", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread16", "parent": "tread15", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread17", "parent": "tread16", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread18", "parent": "tread17", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread19", "parent": "tread18", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread20", "parent": "tread19", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread21", "parent": "tread20", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread22", "parent": "tread21", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread23", "parent": "tread22", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread24", "parent": "tread23", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread25", "parent": "tread24", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread26", "parent": "tread25", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread27", "parent": "tread26", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread28", "parent": "tread27", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread29", "parent": "tread28", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread30", "parent": "tread29", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread31", "parent": "tread30", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread32", "parent": "tread31", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread33", "parent": "tread32", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread34", "parent": "tread33", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread35", "parent": "tread34", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread36", "parent": "tread35", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "wheel-midCenter", "parent": "tankRoot", "y": -114.56 }, + { "name": "treadCollider1", "parent": "wheel-midCenter", "x": -329.57, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider2", "parent": "wheel-midCenter", "x": -165.95, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider3", "parent": "wheel-midCenter", "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider4", "parent": "wheel-midCenter", "x": 163.56, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider5", "parent": "wheel-midCenter", "x": 329.12, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadGravity1", "parent": "tankRoot", "rotation": 180, "x": -175.35, "y": 109.99, "color": "ff00fbff" }, + { "name": "treadGravity2", "parent": "tankRoot", "rotation": 180, "x": 177.88, "y": 105.45, "color": "ff00fbff" }, + { "name": "wheel-bigRoot1", "parent": "tankTreads", "x": -549.59, "y": 14.39, "color": "abe323ff" }, + { "name": "wheel-big1", "parent": "wheel-bigRoot1", "x": -0.02, "color": "abe323ff" }, + { "name": "wheel-bigRoot2", "parent": "tankTreads", "x": 547.33, "y": 14.39 }, + { "name": "wheel-big2", "parent": "wheel-bigRoot2" }, + { "name": "wheel-midRoot1", "parent": "wheel-midCenter", "x": -410.57, "color": "abe323ff" }, + { "name": "wheel-mid1", "parent": "wheel-midRoot1", "color": "abe323ff" }, + { "name": "wheel-midRoot2", "parent": "wheel-midCenter", "x": -246.95 }, + { "name": "wheel-mid2", "parent": "wheel-midRoot2" }, + { "name": "wheel-midRoot3", "parent": "wheel-midCenter", "x": -82.72 }, + { "name": "wheel-mid3", "parent": "wheel-midRoot3" }, + { "name": "wheel-midRoot4", "parent": "wheel-midCenter", "x": 80.89 }, + { "name": "wheel-mid4", "parent": "wheel-midRoot4" }, + { "name": "wheel-midRoot5", "parent": "wheel-midCenter", "x": 244.51 }, + { "name": "wheel-mid5", "parent": "wheel-midRoot5" }, + { "name": "wheel-midRoot6", "parent": "wheel-midCenter", "x": 408.73 }, + { "name": "wheel-mid6", "parent": "wheel-midRoot6" }, + { "name": "wheel-smallRoot1", "parent": "tankTreads", "x": -337.38, "y": 109.43 }, + { "name": "wheel-small1", "parent": "wheel-smallRoot1", "color": "abe323ff" }, + { "name": "wheel-smallRoot2", "parent": "tankTreads", "x": 0.08, "y": 109.43 }, + { "name": "wheel-small2", "parent": "wheel-smallRoot2" }, + { "name": "wheel-smallRoot3", "parent": "tankTreads", "x": 334.68, "y": 109.43 }, + { "name": "wheel-small3", "parent": "wheel-smallRoot3" } +], +"slots": [ + { "name": "tankBody-shadow", "bone": "tankBody", "color": "ffffffb9", "attachment": "images/tankBottom-shadow" }, + { "name": "bottom", "bone": "tankBody", "attachment": "images/tankBottom" }, + { "name": "tread-inside1", "bone": "tread", "attachment": "images/tread-inside" }, + { "name": "tread-inside53", "bone": "tread27", "attachment": "images/tread-inside" }, + { "name": "tread-inside27", "bone": "tread14", "attachment": "images/tread-inside" }, + { "name": "tread-inside3", "bone": "tread2", "attachment": "images/tread-inside" }, + { "name": "tread-inside55", "bone": "tread28", "attachment": "images/tread-inside" }, + { "name": "tread-inside29", "bone": "tread15", "attachment": "images/tread-inside" }, + { "name": "tread-inside5", "bone": "tread3", "attachment": "images/tread-inside" }, + { "name": "tread-inside57", "bone": "tread29", "attachment": "images/tread-inside" }, + { "name": "tread-inside31", "bone": "tread16", "attachment": "images/tread-inside" }, + { "name": "tread-inside7", "bone": "tread4", "attachment": "images/tread-inside" }, + { "name": "tread-inside59", "bone": "tread30", "attachment": "images/tread-inside" }, + { "name": "tread-inside33", "bone": "tread17", "attachment": "images/tread-inside" }, + { "name": "tread-inside9", "bone": "tread5", "attachment": "images/tread-inside" }, + { "name": "tread-inside61", "bone": "tread31", "attachment": "images/tread-inside" }, + { "name": "tread-inside35", "bone": "tread18", "attachment": "images/tread-inside" }, + { "name": "tread-inside11", "bone": "tread6", "attachment": "images/tread-inside" }, + { "name": "tread-inside63", "bone": "tread32", "attachment": "images/tread-inside" }, + { "name": "tread-inside37", "bone": "tread19", "attachment": "images/tread-inside" }, + { "name": "tread-inside13", "bone": "tread7", "attachment": "images/tread-inside" }, + { "name": "tread-inside65", "bone": "tread33", "attachment": "images/tread-inside" }, + { "name": "tread-inside39", "bone": "tread20", "attachment": "images/tread-inside" }, + { "name": "tread-inside15", "bone": "tread8", "attachment": "images/tread-inside" }, + { "name": "tread-inside67", "bone": "tread34", "attachment": "images/tread-inside" }, + { "name": "tread-inside69", "bone": "tread35", "attachment": "images/tread-inside" }, + { "name": "tread-inside71", "bone": "tread36", "attachment": "images/tread-inside" }, + { "name": "tread-inside41", "bone": "tread21", "attachment": "images/tread-inside" }, + { "name": "tread-inside17", "bone": "tread9", "attachment": "images/tread-inside" }, + { "name": "tread-inside43", "bone": "tread22", "attachment": "images/tread-inside" }, + { "name": "tread-inside19", "bone": "tread10", "attachment": "images/tread-inside" }, + { "name": "tread-inside45", "bone": "tread23", "attachment": "images/tread-inside" }, + { "name": "tread-inside21", "bone": "tread11", "attachment": "images/tread-inside" }, + { "name": "tread-inside47", "bone": "tread24", "attachment": "images/tread-inside" }, + { "name": "tread-inside23", "bone": "tread12", "attachment": "images/tread-inside" }, + { "name": "tread-inside49", "bone": "tread25", "attachment": "images/tread-inside" }, + { "name": "tread-inside25", "bone": "tread13", "attachment": "images/tread-inside" }, + { "name": "tread-inside51", "bone": "tread26", "attachment": "images/tread-inside" }, + { "name": "tread-inside2", "bone": "tread", "attachment": "images/tread-inside" }, + { "name": "tread-inside54", "bone": "tread27", "attachment": "images/tread-inside" }, + { "name": "tread-inside28", "bone": "tread14", "attachment": "images/tread-inside" }, + { "name": "tread-inside4", "bone": "tread2", "attachment": "images/tread-inside" }, + { "name": "tread-inside56", "bone": "tread28", "attachment": "images/tread-inside" }, + { "name": "tread-inside30", "bone": "tread15", "attachment": "images/tread-inside" }, + { "name": "tread-inside6", "bone": "tread3", "attachment": "images/tread-inside" }, + { "name": "tread-inside58", "bone": "tread29", "attachment": "images/tread-inside" }, + { "name": "tread-inside32", "bone": "tread16", "attachment": "images/tread-inside" }, + { "name": "tread-inside8", "bone": "tread4", "attachment": "images/tread-inside" }, + { "name": "tread-inside60", "bone": "tread30", "attachment": "images/tread-inside" }, + { "name": "tread-inside34", "bone": "tread17", "attachment": "images/tread-inside" }, + { "name": "tread-inside10", "bone": "tread5", "attachment": "images/tread-inside" }, + { "name": "tread-inside62", "bone": "tread31", "attachment": "images/tread-inside" }, + { "name": "tread-inside36", "bone": "tread18", "attachment": "images/tread-inside" }, + { "name": "tread-inside12", "bone": "tread6", "attachment": "images/tread-inside" }, + { "name": "tread-inside64", "bone": "tread32", "attachment": "images/tread-inside" }, + { "name": "tread-inside38", "bone": "tread19", "attachment": "images/tread-inside" }, + { "name": "tread-inside14", "bone": "tread7", "attachment": "images/tread-inside" }, + { "name": "tread-inside66", "bone": "tread33", "attachment": "images/tread-inside" }, + { "name": "tread-inside40", "bone": "tread20", "attachment": "images/tread-inside" }, + { "name": "tread-inside16", "bone": "tread8", "attachment": "images/tread-inside" }, + { "name": "tread-inside68", "bone": "tread34", "attachment": "images/tread-inside" }, + { "name": "tread-inside70", "bone": "tread35", "attachment": "images/tread-inside" }, + { "name": "tread-inside72", "bone": "tread36", "attachment": "images/tread-inside" }, + { "name": "tread-inside42", "bone": "tread21", "attachment": "images/tread-inside" }, + { "name": "tread-inside18", "bone": "tread9", "attachment": "images/tread-inside" }, + { "name": "tread-inside44", "bone": "tread22", "attachment": "images/tread-inside" }, + { "name": "tread-inside20", "bone": "tread10", "attachment": "images/tread-inside" }, + { "name": "tread-inside46", "bone": "tread23", "attachment": "images/tread-inside" }, + { "name": "tread-inside22", "bone": "tread11", "attachment": "images/tread-inside" }, + { "name": "tread-inside48", "bone": "tread24", "attachment": "images/tread-inside" }, + { "name": "tread-inside24", "bone": "tread12", "attachment": "images/tread-inside" }, + { "name": "tread-inside50", "bone": "tread25", "attachment": "images/tread-inside" }, + { "name": "tread-inside26", "bone": "tread13", "attachment": "images/tread-inside" }, + { "name": "tread-inside52", "bone": "tread26", "attachment": "images/tread-inside" }, + { "name": "wheel-big", "bone": "wheel-big1", "color": "dbdbdbff", "attachment": "images/wheel-big" }, + { "name": "wheel-big2", "bone": "wheel-big2", "color": "dbdbdbff", "attachment": "images/wheel-big" }, + { "name": "wheel-mid", "bone": "wheel-mid1", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid2", "bone": "wheel-mid2", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid3", "bone": "wheel-mid3", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid4", "bone": "wheel-mid4", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid5", "bone": "wheel-mid5", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid6", "bone": "wheel-mid6", "attachment": "images/wheel-mid" }, + { "name": "wheel-small", "bone": "wheel-small1", "attachment": "images/wheel-small" }, + { "name": "wheel-small2", "bone": "wheel-small2", "attachment": "images/wheel-small" }, + { "name": "wheel-small3", "bone": "wheel-small3", "attachment": "images/wheel-small" }, + { + "name": "wheel-mid-overlay", + "bone": "wheel-midRoot1", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay2", + "bone": "wheel-midRoot2", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay3", + "bone": "wheel-midRoot3", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay4", + "bone": "wheel-midRoot4", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay5", + "bone": "wheel-midRoot5", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay6", + "bone": "wheel-midRoot6", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-big-overlay1", + "bone": "wheel-bigRoot1", + "color": "ffffffe9", + "attachment": "images/wheel-big-overlay", + "blend": "multiply" + }, + { + "name": "wheel-big-overlay2", + "bone": "wheel-bigRoot2", + "color": "ffffffe9", + "attachment": "images/wheel-big-overlay", + "blend": "multiply" + }, + { "name": "treads", "bone": "tankRoot", "attachment": "treads" }, + { "name": "tread", "bone": "tread", "color": "c0974fff", "attachment": "images/tread" }, + { "name": "tread27", "bone": "tread27", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread14", "bone": "tread14", "attachment": "images/tread" }, + { "name": "tread2", "bone": "tread2", "attachment": "images/tread" }, + { "name": "tread28", "bone": "tread28", "attachment": "images/tread" }, + { "name": "tread15", "bone": "tread15", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread3", "bone": "tread3", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread29", "bone": "tread29", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread16", "bone": "tread16", "attachment": "images/tread" }, + { "name": "tread4", "bone": "tread4", "attachment": "images/tread" }, + { "name": "tread30", "bone": "tread30", "attachment": "images/tread" }, + { "name": "tread17", "bone": "tread17", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread5", "bone": "tread5", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread31", "bone": "tread31", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread18", "bone": "tread18", "attachment": "images/tread" }, + { "name": "tread6", "bone": "tread6", "attachment": "images/tread" }, + { "name": "tread32", "bone": "tread32", "attachment": "images/tread" }, + { "name": "tread19", "bone": "tread19", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread7", "bone": "tread7", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread33", "bone": "tread33", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread20", "bone": "tread20", "attachment": "images/tread" }, + { "name": "tread8", "bone": "tread8", "attachment": "images/tread" }, + { "name": "tread34", "bone": "tread34", "attachment": "images/tread" }, + { "name": "tread35", "bone": "tread35", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread36", "bone": "tread36", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread21", "bone": "tread21", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread9", "bone": "tread9", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread22", "bone": "tread22", "attachment": "images/tread" }, + { "name": "tread10", "bone": "tread10", "attachment": "images/tread" }, + { "name": "tread23", "bone": "tread23", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread11", "bone": "tread11", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread24", "bone": "tread24", "attachment": "images/tread" }, + { "name": "tread12", "bone": "tread12", "attachment": "images/tread" }, + { "name": "tread25", "bone": "tread25", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread13", "bone": "tread13", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread26", "bone": "tread26", "attachment": "images/tread" }, + { "name": "rock", "bone": "rock", "attachment": "images/rock" }, + { "name": "machinegun", "bone": "machinegun", "attachment": "images/machinegun" }, + { "name": "machinegun-mount", "bone": "machinegun-mount", "attachment": "images/machinegun-mount" }, + { "name": "tankTop", "bone": "tankBody", "attachment": "images/tankTop" }, + { "name": "guntower", "bone": "guntower", "attachment": "images/guntower" }, + { "name": "cannon", "bone": "cannon", "attachment": "images/cannon" }, + { "name": "cannonConnector", "bone": "cannonConnector", "attachment": "images/cannonConnector" }, + { "name": "antenna", "bone": "antennaRoot", "attachment": "images/antenna" } +], +"ik": [ + { + "name": "cannonTarget", + "bones": [ "cannon" ], + "target": "cannonTarget" + }, + { + "name": "machineGunTarget", + "bones": [ "machinegun" ], + "target": "machineGunTarget", + "mix": 0 + } +], +"transform": [ + { + "name": "wheel-big", + "bones": [ "wheel-big2" ], + "target": "wheel-big1", + "rotation": 65.6, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid1", + "bones": [ "wheel-mid2", "wheel-mid4" ], + "target": "wheel-mid1", + "rotation": 93, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid2", + "bones": [ "wheel-mid3", "wheel-mid5" ], + "target": "wheel-mid1", + "rotation": -89, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid3", + "bones": [ "wheel-mid6" ], + "target": "wheel-mid1", + "rotation": -152.6, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-small1", + "bones": [ "wheel-small2" ], + "target": "wheel-small1", + "rotation": 87, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-small2", + "bones": [ "wheel-small3" ], + "target": "wheel-small1", + "rotation": 54.9, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + } +], +"path": [ + { + "name": "treads", + "bones": [ + "tread", + "tread2", + "tread3", + "tread4", + "tread5", + "tread6", + "tread7", + "tread8", + "tread9", + "tread10", + "tread11", + "tread12", + "tread13", + "tread14", + "tread15", + "tread16", + "tread17", + "tread18", + "tread19", + "tread20", + "tread21", + "tread22", + "tread23", + "tread24", + "tread25", + "tread26", + "tread27", + "tread28", + "tread29", + "tread30", + "tread31", + "tread32", + "tread33", + "tread34", + "tread35", + "tread36" + ], + "target": "treads", + "rotateMode": "chain" + } +], +"skins": { + "default": { + "antenna": { + "images/antenna": { + "type": "mesh", + "uvs": [ 0.64286, 0.07875, 0.65354, 0.15349, 0.66324, 0.22137, 0.67367, 0.29433, 0.68383, 0.36543, 0.69359, 0.43374, 0.7031, 0.50029, 0.71311, 0.5703, 0.72327, 0.64138, 0.73406, 0.71688, 0.7444, 0.78929, 0.75614, 0.8714, 0.76905, 0.9431, 1, 0.9431, 1, 1, 0, 1, 0, 0.9431, 0.20105, 0.9431, 0.20105, 0.87093, 0.21461, 0.78846, 0.22651, 0.71606, 0.23885, 0.64098, 0.25035, 0.57104, 0.26206, 0.49983, 0.27306, 0.4329, 0.2843, 0.36453, 0.29592, 0.29381, 0.308, 0.22037, 0.319, 0.15345, 0.33141, 0.07795, 0.34423, 0, 0.6316, 0 ], + "triangles": [ 30, 31, 0, 29, 30, 0, 29, 0, 1, 28, 29, 1, 28, 1, 2, 27, 28, 2, 27, 2, 3, 26, 3, 4, 25, 26, 4, 25, 4, 5, 26, 27, 3, 24, 5, 6, 23, 24, 6, 7, 23, 6, 24, 25, 5, 22, 7, 8, 21, 22, 8, 21, 8, 9, 7, 22, 23, 20, 9, 10, 19, 20, 10, 20, 21, 9, 19, 10, 11, 18, 19, 11, 17, 18, 11, 17, 11, 12, 15, 16, 17, 12, 13, 14, 15, 17, 12, 14, 15, 12 ], + "vertices": [ 2, 10, 65.37999, -3.14, 0.3125, 11, 23.38, -3.14, 0.6875, 3, 9, 84.73, -3.37, 0.0625, 10, 42.73, -3.37, 0.625, 11, 0.73, -3.37, 0.3125, 3, 9, 64.16, -3.59, 0.3125, 10, 22.16, -3.59, 0.625, 11, -19.83, -3.59, 0.0625, 3, 8, 84.06, -3.82, 0.0625, 9, 42.06, -3.82, 0.625, 10, 0.06, -3.82, 0.3125, 3, 8, 62.51, -4.04, 0.3125, 9, 20.51, -4.04, 0.625, 10, -21.48, -4.04, 0.0625, 3, 7, 83.81, -4.25, 0.0625, 8, 41.81, -4.25, 0.625, 9, -0.18, -4.25, 0.3125, 3, 7, 63.65, -4.46, 0.3125, 8, 21.65, -4.46, 0.625, 9, -20.34, -4.46, 0.0625, 3, 6, 84.43, -4.67999, 0.0625, 7, 42.43, -4.67999, 0.625, 8, 0.43, -4.67999, 0.3125, 3, 6, 62.9, -4.91, 0.3125, 7, 20.9, -4.91, 0.625, 8, -21.09, -4.91, 0.0625, 3, 5, 5.14, 80.01999, 0.0625, 6, 40.02, -5.14, 0.625, 7, -1.97, -5.14, 0.3125, 3, 5, 5.37, 58.08, 0.375, 6, 18.08, -5.37, 0.5625, 7, -23.91, -5.37, 0.0625, 1, 5, 5.63, 33.2, 1, 1, 5, 5.91, 11.48, 1, 1, 5, 11, 11.48, 1, 1, 5, 10.99, -5.75, 1, 1, 5, -11, -5.75, 1, 1, 5, -10.99, 11.48, 1, 1, 5, -6.57, 11.48, 1, 1, 5, -6.57, 33.34, 1, 3, 5, -6.27, 58.33, 0.375, 6, 18.33, 6.27, 0.5625, 7, -23.66, 6.27, 0.0625, 3, 5, -6.01, 80.26999, 0.0625, 6, 40.27, 6.01, 0.625, 7, -1.72, 6.01, 0.3125, 3, 6, 63.02, 5.74, 0.3125, 7, 21.02, 5.74, 0.625, 8, -20.96999, 5.74, 0.0625, 3, 6, 84.21, 5.49, 0.0625, 7, 42.21, 5.49, 0.625, 8, 0.21, 5.49, 0.3125, 3, 7, 63.79, 5.23, 0.3125, 8, 21.79, 5.23, 0.625, 9, -20.2, 5.23, 0.0625, 3, 7, 84.07, 4.98999, 0.0625, 8, 42.07, 4.98999, 0.625, 9, 0.07, 4.98999, 0.3125, 3, 8, 62.78, 4.73999, 0.3125, 9, 20.78, 4.73999, 0.625, 10, -21.21, 4.73999, 0.0625, 3, 8, 84.21, 4.48, 0.0625, 9, 42.21, 4.48, 0.625, 10, 0.21, 4.48, 0.3125, 3, 9, 64.46, 4.21999, 0.3125, 10, 22.46, 4.21999, 0.625, 11, -19.53, 4.21999, 0.0625, 3, 9, 84.74, 3.98, 0.0625, 10, 42.74, 3.98, 0.625, 11, 0.74, 3.98, 0.3125, 2, 10, 65.62, 3.7, 0.3125, 11, 23.62, 3.7, 0.6875, 1, 11, 47.24, 3.42, 1, 1, 11, 47.24, -2.89, 1 ], + "hull": 32, + "edges": [ 28, 30, 28, 26, 30, 32, 26, 24, 24, 22, 32, 34, 34, 24, 34, 36, 36, 22, 60, 62, 38, 36, 20, 22, 38, 20, 40, 38, 18, 20, 40, 18, 42, 40, 16, 18, 42, 16, 44, 42, 14, 16, 44, 14, 46, 44, 12, 14, 46, 12, 48, 46, 10, 12, 48, 10, 50, 48, 8, 10, 50, 8, 52, 50, 6, 8, 52, 6, 54, 52, 4, 6, 54, 4, 56, 54, 2, 4, 56, 2, 60, 58, 58, 56, 62, 0, 0, 2, 58, 0 ], + "width": 22, + "height": 303 + } + }, + "bottom": { + "images/tankBottom": { "x": -16.66, "y": 9.89, "width": 1285, "height": 276 } + }, + "cannon": { + "images/cannon": { "x": 481.95, "y": -0.02, "rotation": 179.99, "width": 931, "height": 58 } + }, + "cannonConnector": { + "images/cannonConnector": { + "type": "mesh", + "uvs": [ 1, 0.03236, 1, 0.10602, 0.90987, 0.32859, 0.81975, 0.55116, 0.72962, 0.77372, 0.6395, 0.99629, 0.42157, 0.99629, 0.20364, 0.99629, 0, 0.85433, 0, 0.69901, 0.02267, 0.52884, 0, 0.31444, 0.21601, 0.12998, 0.43367, 0, 0.63546, 0.0037, 0.48407, 0.77059, 0.31496, 0.52496, 0.64132, 0.19648, 0.21516, 0.76765, 0.58345, 0.5647, 0.68444, 0.40146, 0.46758, 0.36649, 0.28934, 0.34603 ], + "triangles": [ 21, 22, 12, 11, 12, 22, 17, 21, 13, 17, 13, 14, 21, 12, 13, 21, 17, 20, 16, 22, 21, 10, 11, 22, 10, 22, 16, 19, 21, 20, 16, 21, 19, 18, 10, 16, 9, 10, 18, 15, 16, 19, 18, 16, 15, 8, 9, 18, 7, 8, 18, 6, 18, 15, 7, 18, 6, 14, 0, 1, 17, 14, 1, 2, 17, 1, 20, 17, 2, 3, 20, 2, 19, 20, 3, 4, 19, 3, 15, 19, 4, 5, 15, 4, 6, 15, 5 ], + "vertices": [ 1, 12, 35.91, 69.08, 1, 1, 12, 35.91, 59.13, 1, 1, 12, 25.81, 29.09, 1, 1, 12, 15.72, -0.95, 1, 1, 12, 5.63, -31, 1, 1, 12, -4.46, -61.04, 1, 2, 12, -28.87, -61.04, 0.33333, 14, 28.87, 61.03, 0.66666, 1, 14, 53.27, 61.01, 1, 1, 14, 76.08, 41.83, 1, 1, 14, 71.17, 21.62, 1, 1, 14, 72.83, -1.62, 1, 1, 14, 70.37, -29.12, 1, 1, 14, 50.66, -56.13, 1, 2, 12, -28.43, 74.37, 0.41, 14, 28.43, -74.39, 0.58999, 2, 12, -4.91, 72.94999, 0.52, 14, 4.91, -72.94999, 0.48, 2, 12, -21.87, -30.57, 0.49, 14, 21.87, 30.56, 0.51, 1, 14, 40.81, -2.59999, 1, 2, 12, -4.25, 46.92, 0.49, 14, 4.25, -46.92, 0.51, 1, 14, 51.98, 30.15, 1, 2, 12, -10.74, -2.78, 0.49, 14, 10.74, 2.77, 0.51, 2, 12, 0.56, 19.25, 0.49, 14, -0.56, -19.25, 0.51, 1, 14, 23.71, -23.98, 1, 1, 14, 43.68, -26.76, 1 ], + "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, 28, 0 ], + "width": 112, + "height": 135 + } + }, + "guntower": { + "images/guntower": { "x": 77.22, "y": 122.58, "width": 730, "height": 289 } + }, + "machinegun": { + "images/machinegun": { "x": 44.85, "y": -5.72, "rotation": -180, "width": 331, "height": 57 } + }, + "machinegun-mount": { + "images/machinegun-mount": { "x": 47.42, "y": -1.53, "rotation": -90, "width": 72, "height": 96 } + }, + "rock": { + "images/rock": { "color": "404040ff", "x": 25.23, "y": 27.35, "width": 252, "height": 55 } + }, + "tankBody-shadow": { + "images/tankBottom-shadow": { "x": -11.43, "y": -42.88, "width": 1291, "height": 341 } + }, + "tankTop": { + "images/tankTop": { "x": 6.8, "y": 168.71, "width": 1407, "height": 222 } + }, + "tread": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread-inside1": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside10": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside11": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside12": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside13": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside14": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside15": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside16": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside17": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside18": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside19": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside2": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside20": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside21": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside22": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside23": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside24": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside25": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside26": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside27": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside28": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside29": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside3": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside30": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside31": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside32": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside33": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside34": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside35": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside36": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside37": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside38": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside39": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside4": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside40": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside41": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside42": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside43": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside44": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside45": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside46": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside47": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside48": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside49": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside5": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside50": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside51": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside52": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside53": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside54": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside55": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside56": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside57": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside58": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside59": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside6": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside60": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside61": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside62": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside63": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside64": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside65": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside66": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside67": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside68": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside69": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside7": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside70": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside71": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside72": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside8": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside9": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread10": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread11": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread12": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread13": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread14": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread15": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread16": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread17": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread18": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread19": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread2": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread20": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread21": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread22": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread23": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread24": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread25": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread26": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread27": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread28": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread29": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread3": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread30": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread31": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread32": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread33": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread34": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread35": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread36": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread4": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread5": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread6": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread7": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread8": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread9": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "treads": { + "treads": { + "type": "path", + "closed": true, + "lengths": [ 182.41, 349, 472.77, 602.99, 780.46, 1052.96, 1133.44, 1218.43, 1298.34, 1382.7, 1465.57, 1546.11, 1628.02, 1707.73, 1794.36, 1876.75, 2158.69, 2321.34, 2438.56, 2579.42, 2745.35, 2919.23 ], + "vertexCount": 66, + "vertices": [ 1, 83, 11.23, 41.86, 1, 1, 83, 0.78, 41.93999, 1, 1, 83, -34.72, 42.23, 1, 1, 63, -104.21, 0.41, 1, 1, 63, 0.07, 0.55, 1, 1, 63, 68.8, 0.64, 1, 1, 81, 20.5, 43.47, 1, 1, 81, 1.13, 40.81, 1, 1, 81, -27.38, 36.84, 1, 1, 65, 147.06, 105, 1, 1, 65, 96.21, 96.63, 1, 1, 65, 43.87, 87.71, 1, 1, 65, 16.18, 103.34, 1, 1, 65, -33.66999, 94.2, 1, 1, 65, -99.35, 81.25, 1, 1, 65, -122.04, -1.69, 1, 1, 65, -83.58, -47.92, 1, 1, 65, -33.53, -109.36, 1, 1, 69, -83.56, -66.08999, 1, 1, 69, -2.16, -67.89, 1, 2, 69, 56.68, -41.48, 0.67999, 58, -24.31, -41.49, 0.32, 1, 58, -26.58, 16.69, 1, 1, 58, -2.69, 16.69, 1, 1, 58, 13.51, 16.69, 1, 2, 71, -52.41, -46.51, 0.74399, 58, 30.2, -46.51, 0.256, 1, 71, -0.32, -68.92, 1, 2, 71, 52.09, -44.72, 0.712, 59, -28.9, -44.73, 0.28799, 1, 59, -22.8, 16.24, 1, 1, 59, -1.42, 16.24, 1, 1, 59, 20.46999, 16.24, 1, 2, 73, -47.21, -47.45, 0.744, 59, 36.00999, -47.46, 0.25599, 1, 73, -0.28, -69.65, 1, 2, 73, 45.23, -47.26, 0.736, 60, -37.48, -47.26, 0.26399, 1, 60, -23.76, 15.27, 1, 1, 60, -0.13, 15.27, 1, 1, 60, 24.45, 15.27, 1, 2, 75, -47.36, -48.7, 0.74399, 60, 33.52, -48.7, 0.256, 1, 75, -0.49, -70.39, 1, 2, 75, 49.09, -48.33, 0.744, 61, -33.57, -48.34, 0.25599, 1, 61, -20.89, 15.83, 1, 1, 61, -1.25, 15.83, 1, 1, 61, 15.78, 15.83, 1, 2, 77, -52.49, -48.21, 0.75999, 61, 28.45, -48.21, 0.24, 1, 77, -2.5, -68.92, 1, 2, 77, 55.72, -47.82, 0.752, 62, -28.88, -47.82, 0.248, 1, 62, -21.64, 16.69, 1, 1, 62, -0.48, 16.69, 1, 1, 62, 20.73, 16.69, 1, 2, 79, -53.65, -48.89, 0.76, 62, 25.96, -48.89, 0.23999, 1, 79, 2.27, -69.65, 1, 1, 79, 44.94, -69.74, 1, 1, 65, 1172.98, -85.6, 1, 1, 65, 1190.53, -42.24, 1, 1, 65, 1215.63, 19.75, 1, 1, 65, 1175.55, 76.62, 1, 1, 65, 1134.22, 95.07, 1, 1, 65, 1128.4, 97.66, 1, 1, 65, 1081.79, 87.47, 1, 1, 65, 1017.16, 92.52, 1, 1, 65, 977.9, 95.58, 1, 1, 85, 47.07, 42.29, 1, 1, 85, 0.24, 42.74, 1, 1, 85, -29.63, 43.28, 1, 1, 64, -86.64, 1.35, 1, 1, 64, 0.49, 0.25, 1, 1, 64, 92.42, -0.89, 1 ] + } + }, + "wheel-big": { + "images/wheel-big": { "width": 191, "height": 191 } + }, + "wheel-big-overlay1": { + "images/wheel-big-overlay": { "width": 186, "height": 186 } + }, + "wheel-big-overlay2": { + "images/wheel-big-overlay": { "width": 186, "height": 186 } + }, + "wheel-big2": { + "images/wheel-big": { "width": 191, "height": 191 } + }, + "wheel-mid": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay2": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay3": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay4": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay5": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay6": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid2": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid3": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid4": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid5": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid6": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-small": { + "images/wheel-small": { "width": 71, "height": 71 } + }, + "wheel-small2": { + "images/wheel-small": { "width": 71, "height": 71 } + }, + "wheel-small3": { + "images/wheel-small": { "width": 71, "height": 71 } + } + } +}, +"animations": { + "drive": { + "bones": { + "tankRoot": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.549, 0, 0.907, 0.84 ] + }, + { + "time": 3.0333, + "x": -1426.14, + "y": 0, + "curve": [ 0.211, 0.23, 0.851, 0.92 ] + }, + { + "time": 4.8666, + "x": -2806.98, + "y": 0, + "curve": [ 0.253, 0.27, 0.625, 0.94 ] + }, + { "time": 5.3333, "x": -2903.34, "y": 0 } + ] + }, + "wheel-midRoot1": { + "translate": [ + { "time": 0.7666, "x": 0, "y": 0 }, + { + "time": 1.1666, + "x": 0, + "y": 50.95, + "curve": [ 0.633, 0, 0.907, 0.82 ] + }, + { "time": 1.5666, "x": 0, "y": 0 } + ] + }, + "treadCollider1": { + "rotate": [ + { "time": 1.1, "angle": 0 }, + { "time": 1.2333, "angle": -19.78 }, + { "time": 1.4666, "angle": 0 }, + { "time": 1.6, "angle": 28.87 }, + { "time": 1.8, "angle": 0 } + ], + "translate": [ + { "time": 1.1, "x": 0, "y": 0 }, + { + "time": 1.4666, + "x": 0, + "y": 58.66, + "curve": [ 0.352, 0, 0.828, 0.92 ] + }, + { "time": 1.8, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot2": { + "translate": [ + { "time": 1.2666, "x": 0, "y": 0 }, + { + "time": 1.6333, + "x": 0, + "y": 55.07, + "curve": [ 0.889, 0.01, 0.843, 0.81 ] + }, + { "time": 1.9333, "x": 0, "y": 0 } + ] + }, + "treadCollider2": { + "rotate": [ + { "time": 1.5333, "angle": 0 }, + { "time": 1.6333, "angle": -18.67 }, + { "time": 1.8, "angle": 0 }, + { "time": 1.9, "angle": 29.49 }, + { "time": 2.0666, "angle": 0 } + ], + "translate": [ + { + "time": 1.5333, + "x": 0, + "y": 0, + "curve": [ 0.16, 0.25, 0.813, 0.82 ] + }, + { + "time": 1.8, + "x": 0, + "y": 59.03, + "curve": [ 0.376, 0.26, 0.879, 0.79 ] + }, + { "time": 2.0666, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot3": { + "translate": [ + { "time": 1.6666, "x": 0, "y": 0 }, + { + "time": 1.9333, + "x": 0, + "y": 60.17, + "curve": [ 0.544, 0, 0.838, 0.77 ] + }, + { "time": 2.2, "x": 0, "y": 0 } + ] + }, + "treadCollider3": { + "rotate": [ + { "time": 1.8666, "angle": 0 }, + { "time": 1.9333, "angle": -20.16 }, + { "time": 2.0666, "angle": 0.57 }, + { "time": 2.1666, "angle": 33.66 }, + { "time": 2.3333, "angle": 0 } + ], + "translate": [ + { "time": 1.8666, "x": 0, "y": 0 }, + { + "time": 2.0666, + "x": 0, + "y": 61.53, + "curve": [ 0.582, 0, 0.836, 0.77 ] + }, + { "time": 2.3333, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot4": { + "translate": [ + { "time": 1.9333, "x": 0, "y": 0 }, + { + "time": 2.2, + "x": 0, + "y": 58.89, + "curve": [ 0.48, 0, 0.75, 1 ] + }, + { "time": 2.4666, "x": 0, "y": 0 } + ] + }, + "treadCollider4": { + "rotate": [ + { "time": 2.1333, "angle": 0 }, + { "time": 2.2, "angle": -20.43 }, + { "time": 2.3333, "angle": 4.49 }, + { "time": 2.4333, "angle": 35.87 }, + { "time": 2.5666, "angle": 0 } + ], + "translate": [ + { + "time": 2.1333, + "x": 0, + "y": 0, + "curve": [ 0.191, 0.49, 0.75, 1 ] + }, + { "time": 2.3333, "x": 0, "y": 66.64 }, + { "time": 2.5666, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot5": { + "translate": [ + { "time": 2.2, "x": 0, "y": 0 }, + { "time": 2.4333, "x": 0, "y": 60.26 }, + { "time": 2.7, "x": 0, "y": 0 } + ] + }, + "treadCollider5": { + "rotate": [ + { "time": 2.3333, "angle": 0 }, + { "time": 2.4333, "angle": -23.6 }, + { "time": 2.5666, "angle": 6.49 }, + { "time": 2.6666, "angle": 29.93 }, + { "time": 2.8, "angle": -0.13 } + ], + "translate": [ + { "time": 2.3333, "x": 0, "y": 0 }, + { "time": 2.4333, "x": 0, "y": 36.34 }, + { "time": 2.5, "x": 0, "y": 56.39 }, + { "time": 2.5666, "x": 0, "y": 61.34 }, + { "time": 2.8, "x": 0, "y": 2.04 } + ] + }, + "wheel-midRoot6": { + "translate": [ + { + "time": 2.4333, + "x": 0, + "y": 0, + "curve": [ 0.19, 0.26, 0.804, 0.8 ] + }, + { + "time": 2.6333, + "x": 0, + "y": 51.86, + "curve": [ 0.346, 0, 0.852, 0.7 ] + }, + { "time": 2.8, "x": 0, "y": 0 } + ] + }, + "wheel-mid1": { + "rotate": [ + { + "time": 0, + "angle": 21, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 0.8, "angle": 120 }, + { "time": 1.2333, "angle": 240 }, + { "time": 1.6, "angle": 0 }, + { "time": 1.9, "angle": 120 }, + { "time": 2.1666, "angle": 240 }, + { "time": 2.4, "angle": 0 }, + { "time": 2.5666, "angle": 120 }, + { "time": 2.7333, "angle": 240 }, + { "time": 2.9333, "angle": 0 }, + { "time": 3.1, "angle": 120 }, + { "time": 3.2666, "angle": 240 }, + { "time": 3.4333, "angle": 0 }, + { "time": 3.6333, "angle": 120 }, + { "time": 3.8, "angle": 240 }, + { "time": 3.9666, "angle": 0 }, + { "time": 4.1666, "angle": 120 }, + { "time": 4.3333, "angle": 240 }, + { "time": 4.5, "angle": 0 }, + { "time": 4.7, "angle": 120 }, + { "time": 4.8666, "angle": 240 }, + { "time": 5.2666, "angle": -67.99 } + ] + }, + "tankTreads": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.145, 0.34, 0.75, 1 ] + }, + { "time": 1.1, "angle": -3.9 }, + { "time": 1.3333, "angle": -2.37 }, + { "time": 1.6333, "angle": -3.54 }, + { "time": 2.1666, "angle": 0.27 }, + { + "time": 2.4666, + "angle": 2.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.7, + "angle": 3.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3, "angle": -3.62 }, + { "time": 3.2333, "angle": -1.23, "curve": "stepped" }, + { + "time": 4.8666, + "angle": -1.23, + "curve": [ 0.188, 0.16, 0.75, 1 ] + }, + { + "time": 5.2, + "angle": 4.47, + "curve": [ 0.416, 0.01, 0.75, 1 ] + }, + { + "time": 5.5666, + "angle": -3.08, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 5.8333, "angle": -1.23 } + ] + }, + "wheel-big1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 1.1, "angle": 120 }, + { "time": 1.5333, "angle": 240 }, + { "time": 1.8, "angle": 360 }, + { "time": 2.0333, "angle": 120 }, + { "time": 2.2666, "angle": 240 }, + { "time": 2.4666, "angle": 360 }, + { "time": 2.7, "angle": 120 }, + { "time": 2.9333, "angle": 240 }, + { "time": 3.1333, "angle": 360 }, + { "time": 3.3666, "angle": 120 }, + { "time": 3.5666, "angle": 240 }, + { "time": 3.8, "angle": -24 }, + { "time": 4.0333, "angle": 120 }, + { "time": 4.2333, "angle": 240 }, + { "time": 4.4666, "angle": -24 }, + { "time": 4.7, "angle": 120 }, + { "time": 4.8666, "angle": -143.99 }, + { + "time": 5.0666, + "angle": -131.4, + "curve": [ 0.14, 0.25, 0.75, 1 ] + }, + { "time": 5.6666, "angle": -76.85 }, + { "time": 5.8333, "angle": -72.3 } + ] + }, + "treadGravity1": { + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.4666, "x": 0, "y": 0 }, + { "time": 1.8, "x": 0, "y": 29.44 }, + { "time": 2.3333, "x": 0, "y": -0.52 }, + { "time": 2.5666, "x": 0, "y": 5.2 }, + { "time": 2.6666, "x": 0, "y": -11.05, "curve": "stepped" }, + { "time": 4.8666, "x": 0, "y": -11.05 }, + { "time": 5.0666, "x": 0, "y": -1.91 }, + { "time": 5.5333, "x": 0, "y": -6.9 }, + { "time": 5.7333, "x": 0, "y": -11.05 } + ] + }, + "treadGravity2": { + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.4666, "x": 0, "y": 0 }, + { "time": 1.8, "x": 0, "y": 8.5 }, + { "time": 2.3333, "x": 0, "y": 34.74 }, + { "time": 2.5666, "x": 0, "y": 5.2 }, + { "time": 2.6666, "x": 0, "y": -11.05, "curve": "stepped" }, + { "time": 4.8666, "x": 0, "y": -11.05 }, + { "time": 5.0666, "x": 0, "y": 3.9 }, + { "time": 5.5333, "x": 0, "y": -6.9 }, + { "time": 5.7333, "x": 0, "y": -11.05 } + ] + }, + "wheel-small1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 0.7, "angle": 120 }, + { "time": 1.1, "angle": 240 }, + { "time": 1.4666, "angle": 360 }, + { "time": 1.7666, "angle": 120 }, + { "time": 2.0333, "angle": 240 }, + { "time": 2.2666, "angle": 360 }, + { "time": 2.4333, "angle": 120 }, + { "time": 2.5666, "angle": 240 }, + { "time": 2.7, "angle": 360 }, + { "time": 2.8333, "angle": 120 }, + { "time": 2.9666, "angle": 240 }, + { "time": 3.1, "angle": 360 }, + { "time": 3.2333, "angle": 120 }, + { "time": 3.3666, "angle": 240 }, + { "time": 3.5, "angle": 360 }, + { "time": 3.6333, "angle": 120 }, + { "time": 3.7666, "angle": 240 }, + { "time": 3.9, "angle": 360 }, + { "time": 4.0333, "angle": 120 }, + { "time": 4.1666, "angle": 240 }, + { "time": 4.3, "angle": 360 }, + { "time": 4.4333, "angle": 120 }, + { "time": 4.5666, "angle": 240 }, + { "time": 4.7, "angle": 360 }, + { "time": 4.8333, "angle": 120 }, + { "time": 5, "angle": 240 }, + { + "time": 5.2, + "angle": -25.64, + "curve": [ 0.181, 0.26, 0.75, 1 ] + }, + { "time": 5.5666, "angle": 90 } + ] + }, + "tankBody": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.1666, + "angle": -1.41, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.9333, + "angle": -0.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3, + "angle": 0.84, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -2.33, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.4666, + "angle": -0.45, + "curve": [ 0.329, 0.32, 0.757, 1 ] + }, + { + "time": 4.8666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3333, + "angle": 1.82, + "curve": [ 0.324, 0.01, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -1.15, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.0333, "angle": 0 } + ] + }, + "antenna1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna4": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna5": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna6": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "machinegun": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 2.8333, + "angle": 0, + "curve": [ 0.183, 0.17, 0.75, 1 ] + }, + { + "time": 3, + "angle": -4.43, + "curve": [ 0.156, 0.16, 0.75, 1 ] + }, + { + "time": 3.1666, + "angle": -2.93, + "curve": [ 0.156, 0.16, 0.75, 1 ] + }, + { + "time": 4.8333, + "angle": 0, + "curve": [ 0.183, 0.17, 0.75, 1 ] + }, + { + "time": 5.1666, + "angle": -6.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.4, + "angle": 6.15, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 5.6, "angle": -1.26 } + ] + }, + "cannon": { + "rotate": [ + { "time": 0, "angle": 0 } + ] + }, + "cannonTarget": { + "translate": [ + { + "time": 5, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.3333, "x": -15.38, "y": 99.99 } + ] + } + }, + "ik": { + "cannonTarget": [ + { "time": 0, "mix": 0.809, "curve": "stepped" }, + { "time": 4.7333, "mix": 0.809 }, + { "time": 5.1666, "mix": 0.504 }, + { "time": 5.6666 } + ] + }, + "paths": { + "treads": { + "position": [ + { + "time": 0, + "curve": [ 0.549, 0, 0.907, 0.84 ] + }, + { "time": 3.0333, "position": 0.51 }, + { "time": 4.8666, "position": 0.9794 }, + { + "time": 5.2666, + "position": 1, + "curve": [ 0.226, 0.15, 0.765, 0.96 ] + }, + { + "time": 5.5333, + "position": 1.02, + "curve": [ 0.279, 0.32, 0.694, 0.99 ] + }, + { "time": 5.8333, "position": 1.021 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-cocos2dx/example/Resources/common/tank.png b/spine-cocos2dx/example/Resources/common/tank.png new file mode 100644 index 000000000..9811ee418 Binary files /dev/null and b/spine-cocos2dx/example/Resources/common/tank.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/AppController.mm b/spine-cocos2dx/example/proj.ios_mac/ios/AppController.mm index 4bb313aa6..c7ce58f60 100644 --- a/spine-cocos2dx/example/proj.ios_mac/ios/AppController.mm +++ b/spine-cocos2dx/example/proj.ios_mac/ios/AppController.mm @@ -39,7 +39,7 @@ static AppDelegate s_sharedApplication; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { cocos2d::Application *app = cocos2d::Application::getInstance(); - app->initGLContextAttrs(); + app->initGLContextAttrs(); cocos2d::GLViewImpl::convertAttrs(); // Override point for customization after application launch. diff --git a/spine-cocos2dx/example/proj.ios_mac/spine-cocos2d-x.xcodeproj/project.pbxproj b/spine-cocos2dx/example/proj.ios_mac/spine-cocos2d-x.xcodeproj/project.pbxproj index 5f2d46ca1..f34466c64 100644 --- a/spine-cocos2dx/example/proj.ios_mac/spine-cocos2d-x.xcodeproj/project.pbxproj +++ b/spine-cocos2dx/example/proj.ios_mac/spine-cocos2d-x.xcodeproj/project.pbxproj @@ -51,34 +51,6 @@ 76AAA3C31D180F7C00C54FCB /* RaptorExample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3BA1D180F7C00C54FCB /* RaptorExample.cpp */; }; 76AAA3C41D180F7C00C54FCB /* SimpleCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3BC1D180F7C00C54FCB /* SimpleCommand.cpp */; }; 76AAA3C51D180F7C00C54FCB /* SpineboyExample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3BE1D180F7C00C54FCB /* SpineboyExample.cpp */; }; - 76AAA3E31D180FA800C54FCB /* Animation.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C61D180FA800C54FCB /* Animation.c */; }; - 76AAA3E41D180FA800C54FCB /* AnimationState.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C71D180FA800C54FCB /* AnimationState.c */; }; - 76AAA3E51D180FA800C54FCB /* AnimationStateData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C81D180FA800C54FCB /* AnimationStateData.c */; }; - 76AAA3E61D180FA800C54FCB /* Atlas.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C91D180FA800C54FCB /* Atlas.c */; }; - 76AAA3E71D180FA800C54FCB /* AtlasAttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CA1D180FA800C54FCB /* AtlasAttachmentLoader.c */; }; - 76AAA3E81D180FA800C54FCB /* Attachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CB1D180FA800C54FCB /* Attachment.c */; }; - 76AAA3E91D180FA800C54FCB /* AttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CC1D180FA800C54FCB /* AttachmentLoader.c */; }; - 76AAA3EA1D180FA800C54FCB /* Bone.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CD1D180FA800C54FCB /* Bone.c */; }; - 76AAA3EB1D180FA800C54FCB /* BoneData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CE1D180FA800C54FCB /* BoneData.c */; }; - 76AAA3EC1D180FA800C54FCB /* BoundingBoxAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CF1D180FA800C54FCB /* BoundingBoxAttachment.c */; }; - 76AAA3ED1D180FA800C54FCB /* Event.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D01D180FA800C54FCB /* Event.c */; }; - 76AAA3EE1D180FA800C54FCB /* EventData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D11D180FA800C54FCB /* EventData.c */; }; - 76AAA3EF1D180FA800C54FCB /* extension.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D21D180FA800C54FCB /* extension.c */; }; - 76AAA3F01D180FA800C54FCB /* IkConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D31D180FA800C54FCB /* IkConstraint.c */; }; - 76AAA3F11D180FA800C54FCB /* IkConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D41D180FA800C54FCB /* IkConstraintData.c */; }; - 76AAA3F21D180FA800C54FCB /* Json.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D51D180FA800C54FCB /* Json.c */; }; - 76AAA3F31D180FA800C54FCB /* MeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D71D180FA800C54FCB /* MeshAttachment.c */; }; - 76AAA3F41D180FA800C54FCB /* RegionAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D81D180FA800C54FCB /* RegionAttachment.c */; }; - 76AAA3F51D180FA800C54FCB /* Skeleton.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D91D180FA800C54FCB /* Skeleton.c */; }; - 76AAA3F61D180FA800C54FCB /* SkeletonBounds.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DA1D180FA800C54FCB /* SkeletonBounds.c */; }; - 76AAA3F71D180FA800C54FCB /* SkeletonData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DB1D180FA800C54FCB /* SkeletonData.c */; }; - 76AAA3F81D180FA800C54FCB /* SkeletonJson.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DC1D180FA800C54FCB /* SkeletonJson.c */; }; - 76AAA3F91D180FA800C54FCB /* Skin.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DD1D180FA800C54FCB /* Skin.c */; }; - 76AAA3FA1D180FA800C54FCB /* Slot.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DE1D180FA800C54FCB /* Slot.c */; }; - 76AAA3FB1D180FA800C54FCB /* SlotData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DF1D180FA800C54FCB /* SlotData.c */; }; - 76AAA3FC1D180FA800C54FCB /* TransformConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3E01D180FA800C54FCB /* TransformConstraint.c */; }; - 76AAA3FD1D180FA800C54FCB /* TransformConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3E11D180FA800C54FCB /* TransformConstraintData.c */; }; - 76AAA3FE1D180FA800C54FCB /* WeightedMeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3E21D180FA800C54FCB /* WeightedMeshAttachment.c */; }; 76AAA40C1D18106000C54FCB /* AttachmentVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4001D18106000C54FCB /* AttachmentVertices.cpp */; }; 76AAA40D1D18106000C54FCB /* Cocos2dAttachmentLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4021D18106000C54FCB /* Cocos2dAttachmentLoader.cpp */; }; 76AAA40E1D18106000C54FCB /* SkeletonAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4041D18106000C54FCB /* SkeletonAnimation.cpp */; }; @@ -97,35 +69,6 @@ 76AAA41B1D18119F00C54FCB /* SkeletonRenderer.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4091D18106000C54FCB /* SkeletonRenderer.h */; }; 76AAA41C1D18119F00C54FCB /* spine-cocos2dx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA40A1D18106000C54FCB /* spine-cocos2dx.cpp */; }; 76AAA41D1D18119F00C54FCB /* spine-cocos2dx.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA40B1D18106000C54FCB /* spine-cocos2dx.h */; }; - 76AAA41E1D1811A700C54FCB /* Animation.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C61D180FA800C54FCB /* Animation.c */; }; - 76AAA41F1D1811A700C54FCB /* AnimationState.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C71D180FA800C54FCB /* AnimationState.c */; }; - 76AAA4201D1811A700C54FCB /* AnimationStateData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C81D180FA800C54FCB /* AnimationStateData.c */; }; - 76AAA4211D1811A700C54FCB /* Atlas.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C91D180FA800C54FCB /* Atlas.c */; }; - 76AAA4221D1811A700C54FCB /* AtlasAttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CA1D180FA800C54FCB /* AtlasAttachmentLoader.c */; }; - 76AAA4231D1811A700C54FCB /* Attachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CB1D180FA800C54FCB /* Attachment.c */; }; - 76AAA4241D1811A700C54FCB /* AttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CC1D180FA800C54FCB /* AttachmentLoader.c */; }; - 76AAA4251D1811A700C54FCB /* Bone.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CD1D180FA800C54FCB /* Bone.c */; }; - 76AAA4261D1811A700C54FCB /* BoneData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CE1D180FA800C54FCB /* BoneData.c */; }; - 76AAA4271D1811A700C54FCB /* BoundingBoxAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CF1D180FA800C54FCB /* BoundingBoxAttachment.c */; }; - 76AAA4281D1811A700C54FCB /* Event.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D01D180FA800C54FCB /* Event.c */; }; - 76AAA4291D1811A700C54FCB /* EventData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D11D180FA800C54FCB /* EventData.c */; }; - 76AAA42A1D1811A700C54FCB /* extension.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D21D180FA800C54FCB /* extension.c */; }; - 76AAA42B1D1811A700C54FCB /* IkConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D31D180FA800C54FCB /* IkConstraint.c */; }; - 76AAA42C1D1811A700C54FCB /* IkConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D41D180FA800C54FCB /* IkConstraintData.c */; }; - 76AAA42D1D1811A700C54FCB /* Json.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D51D180FA800C54FCB /* Json.c */; }; - 76AAA42E1D1811A700C54FCB /* Json.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D61D180FA800C54FCB /* Json.h */; }; - 76AAA42F1D1811A700C54FCB /* MeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D71D180FA800C54FCB /* MeshAttachment.c */; }; - 76AAA4301D1811A700C54FCB /* RegionAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D81D180FA800C54FCB /* RegionAttachment.c */; }; - 76AAA4311D1811A700C54FCB /* Skeleton.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D91D180FA800C54FCB /* Skeleton.c */; }; - 76AAA4321D1811A700C54FCB /* SkeletonBounds.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DA1D180FA800C54FCB /* SkeletonBounds.c */; }; - 76AAA4331D1811A700C54FCB /* SkeletonData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DB1D180FA800C54FCB /* SkeletonData.c */; }; - 76AAA4341D1811A700C54FCB /* SkeletonJson.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DC1D180FA800C54FCB /* SkeletonJson.c */; }; - 76AAA4351D1811A700C54FCB /* Skin.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DD1D180FA800C54FCB /* Skin.c */; }; - 76AAA4361D1811A700C54FCB /* Slot.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DE1D180FA800C54FCB /* Slot.c */; }; - 76AAA4371D1811A700C54FCB /* SlotData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DF1D180FA800C54FCB /* SlotData.c */; }; - 76AAA4381D1811A700C54FCB /* TransformConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3E01D180FA800C54FCB /* TransformConstraint.c */; }; - 76AAA4391D1811A700C54FCB /* TransformConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3E11D180FA800C54FCB /* TransformConstraintData.c */; }; - 76AAA43A1D1811A700C54FCB /* WeightedMeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3E21D180FA800C54FCB /* WeightedMeshAttachment.c */; }; 76AAA43B1D1811B000C54FCB /* AppDelegate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3B31D180F7C00C54FCB /* AppDelegate.cpp */; }; 76AAA43C1D1811B000C54FCB /* AppDelegate.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3B41D180F7C00C54FCB /* AppDelegate.h */; }; 76AAA43D1D1811B000C54FCB /* AppMacros.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3B51D180F7C00C54FCB /* AppMacros.h */; }; @@ -149,6 +92,72 @@ 76AAA45E1D18132D00C54FCB /* iphone in Resources */ = {isa = PBXBuildFile; fileRef = 76AAA4551D18132D00C54FCB /* iphone */; }; 76AAA45F1D18132D00C54FCB /* iphone-retina in Resources */ = {isa = PBXBuildFile; fileRef = 76AAA4561D18132D00C54FCB /* iphone-retina */; }; 76AAA4601D18132D00C54FCB /* iphone-retina in Resources */ = {isa = PBXBuildFile; fileRef = 76AAA4561D18132D00C54FCB /* iphone-retina */; }; + 76F5BD141D2BB57F005917E5 /* Animation.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCF41D2BB57F005917E5 /* Animation.c */; }; + 76F5BD151D2BB57F005917E5 /* AnimationState.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCF51D2BB57F005917E5 /* AnimationState.c */; }; + 76F5BD161D2BB57F005917E5 /* AnimationStateData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCF61D2BB57F005917E5 /* AnimationStateData.c */; }; + 76F5BD171D2BB57F005917E5 /* Atlas.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCF71D2BB57F005917E5 /* Atlas.c */; }; + 76F5BD181D2BB57F005917E5 /* AtlasAttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCF81D2BB57F005917E5 /* AtlasAttachmentLoader.c */; }; + 76F5BD191D2BB57F005917E5 /* Attachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCF91D2BB57F005917E5 /* Attachment.c */; }; + 76F5BD1A1D2BB57F005917E5 /* AttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCFA1D2BB57F005917E5 /* AttachmentLoader.c */; }; + 76F5BD1B1D2BB57F005917E5 /* Bone.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCFB1D2BB57F005917E5 /* Bone.c */; }; + 76F5BD1C1D2BB57F005917E5 /* BoneData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCFC1D2BB57F005917E5 /* BoneData.c */; }; + 76F5BD1D1D2BB57F005917E5 /* BoundingBoxAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCFD1D2BB57F005917E5 /* BoundingBoxAttachment.c */; }; + 76F5BD1E1D2BB57F005917E5 /* Event.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCFE1D2BB57F005917E5 /* Event.c */; }; + 76F5BD1F1D2BB57F005917E5 /* EventData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCFF1D2BB57F005917E5 /* EventData.c */; }; + 76F5BD201D2BB57F005917E5 /* extension.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD001D2BB57F005917E5 /* extension.c */; }; + 76F5BD211D2BB57F005917E5 /* IkConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD011D2BB57F005917E5 /* IkConstraint.c */; }; + 76F5BD221D2BB57F005917E5 /* IkConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD021D2BB57F005917E5 /* IkConstraintData.c */; }; + 76F5BD231D2BB57F005917E5 /* Json.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD031D2BB57F005917E5 /* Json.c */; }; + 76F5BD241D2BB57F005917E5 /* MeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD051D2BB57F005917E5 /* MeshAttachment.c */; }; + 76F5BD251D2BB57F005917E5 /* PathAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD061D2BB57F005917E5 /* PathAttachment.c */; }; + 76F5BD261D2BB57F005917E5 /* PathConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD071D2BB57F005917E5 /* PathConstraint.c */; }; + 76F5BD271D2BB57F005917E5 /* PathConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD081D2BB57F005917E5 /* PathConstraintData.c */; }; + 76F5BD281D2BB57F005917E5 /* RegionAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD091D2BB57F005917E5 /* RegionAttachment.c */; }; + 76F5BD291D2BB57F005917E5 /* Skeleton.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD0A1D2BB57F005917E5 /* Skeleton.c */; }; + 76F5BD2A1D2BB57F005917E5 /* SkeletonBounds.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD0B1D2BB57F005917E5 /* SkeletonBounds.c */; }; + 76F5BD2B1D2BB57F005917E5 /* SkeletonData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD0C1D2BB57F005917E5 /* SkeletonData.c */; }; + 76F5BD2C1D2BB57F005917E5 /* SkeletonJson.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD0D1D2BB57F005917E5 /* SkeletonJson.c */; }; + 76F5BD2D1D2BB57F005917E5 /* Skin.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD0E1D2BB57F005917E5 /* Skin.c */; }; + 76F5BD2E1D2BB57F005917E5 /* Slot.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD0F1D2BB57F005917E5 /* Slot.c */; }; + 76F5BD2F1D2BB57F005917E5 /* SlotData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD101D2BB57F005917E5 /* SlotData.c */; }; + 76F5BD301D2BB57F005917E5 /* TransformConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD111D2BB57F005917E5 /* TransformConstraint.c */; }; + 76F5BD311D2BB57F005917E5 /* TransformConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD121D2BB57F005917E5 /* TransformConstraintData.c */; }; + 76F5BD321D2BB57F005917E5 /* VertexAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD131D2BB57F005917E5 /* VertexAttachment.c */; }; + 76F5BD331D2BD4A9005917E5 /* Animation.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCF41D2BB57F005917E5 /* Animation.c */; }; + 76F5BD341D2BD4A9005917E5 /* AnimationState.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCF51D2BB57F005917E5 /* AnimationState.c */; }; + 76F5BD351D2BD4A9005917E5 /* AnimationStateData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCF61D2BB57F005917E5 /* AnimationStateData.c */; }; + 76F5BD361D2BD4A9005917E5 /* Atlas.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCF71D2BB57F005917E5 /* Atlas.c */; }; + 76F5BD371D2BD4A9005917E5 /* AtlasAttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCF81D2BB57F005917E5 /* AtlasAttachmentLoader.c */; }; + 76F5BD381D2BD4A9005917E5 /* Attachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCF91D2BB57F005917E5 /* Attachment.c */; }; + 76F5BD391D2BD4A9005917E5 /* AttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCFA1D2BB57F005917E5 /* AttachmentLoader.c */; }; + 76F5BD3A1D2BD4A9005917E5 /* Bone.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCFB1D2BB57F005917E5 /* Bone.c */; }; + 76F5BD3B1D2BD4A9005917E5 /* BoneData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCFC1D2BB57F005917E5 /* BoneData.c */; }; + 76F5BD3C1D2BD4A9005917E5 /* BoundingBoxAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCFD1D2BB57F005917E5 /* BoundingBoxAttachment.c */; }; + 76F5BD3D1D2BD4A9005917E5 /* Event.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCFE1D2BB57F005917E5 /* Event.c */; }; + 76F5BD3E1D2BD4A9005917E5 /* EventData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BCFF1D2BB57F005917E5 /* EventData.c */; }; + 76F5BD3F1D2BD4A9005917E5 /* extension.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD001D2BB57F005917E5 /* extension.c */; }; + 76F5BD401D2BD4A9005917E5 /* IkConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD011D2BB57F005917E5 /* IkConstraint.c */; }; + 76F5BD411D2BD4A9005917E5 /* IkConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD021D2BB57F005917E5 /* IkConstraintData.c */; }; + 76F5BD421D2BD4A9005917E5 /* Json.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD031D2BB57F005917E5 /* Json.c */; }; + 76F5BD431D2BD4A9005917E5 /* Json.h in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD041D2BB57F005917E5 /* Json.h */; }; + 76F5BD441D2BD4A9005917E5 /* MeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD051D2BB57F005917E5 /* MeshAttachment.c */; }; + 76F5BD451D2BD4A9005917E5 /* PathAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD061D2BB57F005917E5 /* PathAttachment.c */; }; + 76F5BD461D2BD4A9005917E5 /* PathConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD071D2BB57F005917E5 /* PathConstraint.c */; }; + 76F5BD471D2BD4A9005917E5 /* PathConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD081D2BB57F005917E5 /* PathConstraintData.c */; }; + 76F5BD481D2BD4A9005917E5 /* RegionAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD091D2BB57F005917E5 /* RegionAttachment.c */; }; + 76F5BD491D2BD4A9005917E5 /* Skeleton.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD0A1D2BB57F005917E5 /* Skeleton.c */; }; + 76F5BD4A1D2BD4A9005917E5 /* SkeletonBounds.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD0B1D2BB57F005917E5 /* SkeletonBounds.c */; }; + 76F5BD4B1D2BD4A9005917E5 /* SkeletonData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD0C1D2BB57F005917E5 /* SkeletonData.c */; }; + 76F5BD4C1D2BD4A9005917E5 /* SkeletonJson.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD0D1D2BB57F005917E5 /* SkeletonJson.c */; }; + 76F5BD4D1D2BD4A9005917E5 /* Skin.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD0E1D2BB57F005917E5 /* Skin.c */; }; + 76F5BD4E1D2BD4A9005917E5 /* Slot.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD0F1D2BB57F005917E5 /* Slot.c */; }; + 76F5BD4F1D2BD4A9005917E5 /* SlotData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD101D2BB57F005917E5 /* SlotData.c */; }; + 76F5BD501D2BD4A9005917E5 /* TransformConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD111D2BB57F005917E5 /* TransformConstraint.c */; }; + 76F5BD511D2BD4A9005917E5 /* TransformConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD121D2BB57F005917E5 /* TransformConstraintData.c */; }; + 76F5BD521D2BD4A9005917E5 /* VertexAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD131D2BB57F005917E5 /* VertexAttachment.c */; }; + 76F5BD551D2BD7D3005917E5 /* TankExample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD531D2BD7D3005917E5 /* TankExample.cpp */; }; + 76F5BD561D2BD7EF005917E5 /* TankExample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD531D2BD7D3005917E5 /* TankExample.cpp */; }; + 76F5BD571D2BD7EF005917E5 /* TankExample.h in Sources */ = {isa = PBXBuildFile; fileRef = 76F5BD541D2BD7D3005917E5 /* TankExample.h */; }; 8262943E1AAF051F00CB7CF7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8262943D1AAF051F00CB7CF7 /* Security.framework */; }; BF171245129291EC00B8313A /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF170DB012928DE900B8313A /* OpenGLES.framework */; }; BF1712471292920000B8313A /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = BF170DB412928DE900B8313A /* libz.dylib */; }; @@ -254,35 +263,6 @@ 76AAA3BD1D180F7C00C54FCB /* SimpleCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleCommand.h; sourceTree = ""; }; 76AAA3BE1D180F7C00C54FCB /* SpineboyExample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpineboyExample.cpp; sourceTree = ""; }; 76AAA3BF1D180F7C00C54FCB /* SpineboyExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpineboyExample.h; sourceTree = ""; }; - 76AAA3C61D180FA800C54FCB /* Animation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Animation.c; path = "../../../spine-c/src/spine/Animation.c"; sourceTree = ""; }; - 76AAA3C71D180FA800C54FCB /* AnimationState.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationState.c; path = "../../../spine-c/src/spine/AnimationState.c"; sourceTree = ""; }; - 76AAA3C81D180FA800C54FCB /* AnimationStateData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationStateData.c; path = "../../../spine-c/src/spine/AnimationStateData.c"; sourceTree = ""; }; - 76AAA3C91D180FA800C54FCB /* Atlas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Atlas.c; path = "../../../spine-c/src/spine/Atlas.c"; sourceTree = ""; }; - 76AAA3CA1D180FA800C54FCB /* AtlasAttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AtlasAttachmentLoader.c; path = "../../../spine-c/src/spine/AtlasAttachmentLoader.c"; sourceTree = ""; }; - 76AAA3CB1D180FA800C54FCB /* Attachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Attachment.c; path = "../../../spine-c/src/spine/Attachment.c"; sourceTree = ""; }; - 76AAA3CC1D180FA800C54FCB /* AttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AttachmentLoader.c; path = "../../../spine-c/src/spine/AttachmentLoader.c"; sourceTree = ""; }; - 76AAA3CD1D180FA800C54FCB /* Bone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Bone.c; path = "../../../spine-c/src/spine/Bone.c"; sourceTree = ""; }; - 76AAA3CE1D180FA800C54FCB /* BoneData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoneData.c; path = "../../../spine-c/src/spine/BoneData.c"; sourceTree = ""; }; - 76AAA3CF1D180FA800C54FCB /* BoundingBoxAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoundingBoxAttachment.c; path = "../../../spine-c/src/spine/BoundingBoxAttachment.c"; sourceTree = ""; }; - 76AAA3D01D180FA800C54FCB /* Event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Event.c; path = "../../../spine-c/src/spine/Event.c"; sourceTree = ""; }; - 76AAA3D11D180FA800C54FCB /* EventData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EventData.c; path = "../../../spine-c/src/spine/EventData.c"; sourceTree = ""; }; - 76AAA3D21D180FA800C54FCB /* extension.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = extension.c; path = "../../../spine-c/src/spine/extension.c"; sourceTree = ""; }; - 76AAA3D31D180FA800C54FCB /* IkConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraint.c; path = "../../../spine-c/src/spine/IkConstraint.c"; sourceTree = ""; }; - 76AAA3D41D180FA800C54FCB /* IkConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraintData.c; path = "../../../spine-c/src/spine/IkConstraintData.c"; sourceTree = ""; }; - 76AAA3D51D180FA800C54FCB /* Json.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Json.c; path = "../../../spine-c/src/spine/Json.c"; sourceTree = ""; }; - 76AAA3D61D180FA800C54FCB /* Json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Json.h; path = "../../../spine-c/src/spine/Json.h"; sourceTree = ""; }; - 76AAA3D71D180FA800C54FCB /* MeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MeshAttachment.c; path = "../../../spine-c/src/spine/MeshAttachment.c"; sourceTree = ""; }; - 76AAA3D81D180FA800C54FCB /* RegionAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = RegionAttachment.c; path = "../../../spine-c/src/spine/RegionAttachment.c"; sourceTree = ""; }; - 76AAA3D91D180FA800C54FCB /* Skeleton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skeleton.c; path = "../../../spine-c/src/spine/Skeleton.c"; sourceTree = ""; }; - 76AAA3DA1D180FA800C54FCB /* SkeletonBounds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonBounds.c; path = "../../../spine-c/src/spine/SkeletonBounds.c"; sourceTree = ""; }; - 76AAA3DB1D180FA800C54FCB /* SkeletonData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonData.c; path = "../../../spine-c/src/spine/SkeletonData.c"; sourceTree = ""; }; - 76AAA3DC1D180FA800C54FCB /* SkeletonJson.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonJson.c; path = "../../../spine-c/src/spine/SkeletonJson.c"; sourceTree = ""; }; - 76AAA3DD1D180FA800C54FCB /* Skin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skin.c; path = "../../../spine-c/src/spine/Skin.c"; sourceTree = ""; }; - 76AAA3DE1D180FA800C54FCB /* Slot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Slot.c; path = "../../../spine-c/src/spine/Slot.c"; sourceTree = ""; }; - 76AAA3DF1D180FA800C54FCB /* SlotData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SlotData.c; path = "../../../spine-c/src/spine/SlotData.c"; sourceTree = ""; }; - 76AAA3E01D180FA800C54FCB /* TransformConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraint.c; path = "../../../spine-c/src/spine/TransformConstraint.c"; sourceTree = ""; }; - 76AAA3E11D180FA800C54FCB /* TransformConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraintData.c; path = "../../../spine-c/src/spine/TransformConstraintData.c"; sourceTree = ""; }; - 76AAA3E21D180FA800C54FCB /* WeightedMeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = WeightedMeshAttachment.c; path = "../../../spine-c/src/spine/WeightedMeshAttachment.c"; sourceTree = ""; }; 76AAA4001D18106000C54FCB /* AttachmentVertices.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AttachmentVertices.cpp; path = ../../src/spine/AttachmentVertices.cpp; sourceTree = ""; }; 76AAA4011D18106000C54FCB /* AttachmentVertices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AttachmentVertices.h; path = ../../src/spine/AttachmentVertices.h; sourceTree = ""; }; 76AAA4021D18106000C54FCB /* Cocos2dAttachmentLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Cocos2dAttachmentLoader.cpp; path = ../../src/spine/Cocos2dAttachmentLoader.cpp; sourceTree = ""; }; @@ -300,6 +280,40 @@ 76AAA4541D18132D00C54FCB /* ipad-retina */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "ipad-retina"; sourceTree = ""; }; 76AAA4551D18132D00C54FCB /* iphone */ = {isa = PBXFileReference; lastKnownFileType = folder; path = iphone; sourceTree = ""; }; 76AAA4561D18132D00C54FCB /* iphone-retina */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "iphone-retina"; sourceTree = ""; }; + 76F5BCF41D2BB57F005917E5 /* Animation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Animation.c; path = "../../../spine-c/src/spine/Animation.c"; sourceTree = ""; }; + 76F5BCF51D2BB57F005917E5 /* AnimationState.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationState.c; path = "../../../spine-c/src/spine/AnimationState.c"; sourceTree = ""; }; + 76F5BCF61D2BB57F005917E5 /* AnimationStateData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationStateData.c; path = "../../../spine-c/src/spine/AnimationStateData.c"; sourceTree = ""; }; + 76F5BCF71D2BB57F005917E5 /* Atlas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Atlas.c; path = "../../../spine-c/src/spine/Atlas.c"; sourceTree = ""; }; + 76F5BCF81D2BB57F005917E5 /* AtlasAttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AtlasAttachmentLoader.c; path = "../../../spine-c/src/spine/AtlasAttachmentLoader.c"; sourceTree = ""; }; + 76F5BCF91D2BB57F005917E5 /* Attachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Attachment.c; path = "../../../spine-c/src/spine/Attachment.c"; sourceTree = ""; }; + 76F5BCFA1D2BB57F005917E5 /* AttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AttachmentLoader.c; path = "../../../spine-c/src/spine/AttachmentLoader.c"; sourceTree = ""; }; + 76F5BCFB1D2BB57F005917E5 /* Bone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Bone.c; path = "../../../spine-c/src/spine/Bone.c"; sourceTree = ""; }; + 76F5BCFC1D2BB57F005917E5 /* BoneData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoneData.c; path = "../../../spine-c/src/spine/BoneData.c"; sourceTree = ""; }; + 76F5BCFD1D2BB57F005917E5 /* BoundingBoxAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoundingBoxAttachment.c; path = "../../../spine-c/src/spine/BoundingBoxAttachment.c"; sourceTree = ""; }; + 76F5BCFE1D2BB57F005917E5 /* Event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Event.c; path = "../../../spine-c/src/spine/Event.c"; sourceTree = ""; }; + 76F5BCFF1D2BB57F005917E5 /* EventData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EventData.c; path = "../../../spine-c/src/spine/EventData.c"; sourceTree = ""; }; + 76F5BD001D2BB57F005917E5 /* extension.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = extension.c; path = "../../../spine-c/src/spine/extension.c"; sourceTree = ""; }; + 76F5BD011D2BB57F005917E5 /* IkConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraint.c; path = "../../../spine-c/src/spine/IkConstraint.c"; sourceTree = ""; }; + 76F5BD021D2BB57F005917E5 /* IkConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraintData.c; path = "../../../spine-c/src/spine/IkConstraintData.c"; sourceTree = ""; }; + 76F5BD031D2BB57F005917E5 /* Json.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Json.c; path = "../../../spine-c/src/spine/Json.c"; sourceTree = ""; }; + 76F5BD041D2BB57F005917E5 /* Json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Json.h; path = "../../../spine-c/src/spine/Json.h"; sourceTree = ""; }; + 76F5BD051D2BB57F005917E5 /* MeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MeshAttachment.c; path = "../../../spine-c/src/spine/MeshAttachment.c"; sourceTree = ""; }; + 76F5BD061D2BB57F005917E5 /* PathAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = PathAttachment.c; path = "../../../spine-c/src/spine/PathAttachment.c"; sourceTree = ""; }; + 76F5BD071D2BB57F005917E5 /* PathConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = PathConstraint.c; path = "../../../spine-c/src/spine/PathConstraint.c"; sourceTree = ""; }; + 76F5BD081D2BB57F005917E5 /* PathConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = PathConstraintData.c; path = "../../../spine-c/src/spine/PathConstraintData.c"; sourceTree = ""; }; + 76F5BD091D2BB57F005917E5 /* RegionAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = RegionAttachment.c; path = "../../../spine-c/src/spine/RegionAttachment.c"; sourceTree = ""; }; + 76F5BD0A1D2BB57F005917E5 /* Skeleton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skeleton.c; path = "../../../spine-c/src/spine/Skeleton.c"; sourceTree = ""; }; + 76F5BD0B1D2BB57F005917E5 /* SkeletonBounds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonBounds.c; path = "../../../spine-c/src/spine/SkeletonBounds.c"; sourceTree = ""; }; + 76F5BD0C1D2BB57F005917E5 /* SkeletonData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonData.c; path = "../../../spine-c/src/spine/SkeletonData.c"; sourceTree = ""; }; + 76F5BD0D1D2BB57F005917E5 /* SkeletonJson.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonJson.c; path = "../../../spine-c/src/spine/SkeletonJson.c"; sourceTree = ""; }; + 76F5BD0E1D2BB57F005917E5 /* Skin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skin.c; path = "../../../spine-c/src/spine/Skin.c"; sourceTree = ""; }; + 76F5BD0F1D2BB57F005917E5 /* Slot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Slot.c; path = "../../../spine-c/src/spine/Slot.c"; sourceTree = ""; }; + 76F5BD101D2BB57F005917E5 /* SlotData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SlotData.c; path = "../../../spine-c/src/spine/SlotData.c"; sourceTree = ""; }; + 76F5BD111D2BB57F005917E5 /* TransformConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraint.c; path = "../../../spine-c/src/spine/TransformConstraint.c"; sourceTree = ""; }; + 76F5BD121D2BB57F005917E5 /* TransformConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraintData.c; path = "../../../spine-c/src/spine/TransformConstraintData.c"; sourceTree = ""; }; + 76F5BD131D2BB57F005917E5 /* VertexAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = VertexAttachment.c; path = "../../../spine-c/src/spine/VertexAttachment.c"; sourceTree = ""; }; + 76F5BD531D2BD7D3005917E5 /* TankExample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TankExample.cpp; sourceTree = ""; }; + 76F5BD541D2BD7D3005917E5 /* TankExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TankExample.h; sourceTree = ""; }; 8262943D1AAF051F00CB7CF7 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; BF170DB012928DE900B8313A /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; BF170DB412928DE900B8313A /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; @@ -447,6 +461,8 @@ 46880B8319C43A87006E1F66 /* Classes */ = { isa = PBXGroup; children = ( + 76F5BD531D2BD7D3005917E5 /* TankExample.cpp */, + 76F5BD541D2BD7D3005917E5 /* TankExample.h */, 76AAA3B31D180F7C00C54FCB /* AppDelegate.cpp */, 76AAA3B41D180F7C00C54FCB /* AppDelegate.h */, 76AAA3B51D180F7C00C54FCB /* AppMacros.h */, @@ -515,35 +531,38 @@ 76AAA3B21D180F7300C54FCB /* spine */ = { isa = PBXGroup; children = ( - 76AAA3C61D180FA800C54FCB /* Animation.c */, - 76AAA3C71D180FA800C54FCB /* AnimationState.c */, - 76AAA3C81D180FA800C54FCB /* AnimationStateData.c */, - 76AAA3C91D180FA800C54FCB /* Atlas.c */, - 76AAA3CA1D180FA800C54FCB /* AtlasAttachmentLoader.c */, - 76AAA3CB1D180FA800C54FCB /* Attachment.c */, - 76AAA3CC1D180FA800C54FCB /* AttachmentLoader.c */, - 76AAA3CD1D180FA800C54FCB /* Bone.c */, - 76AAA3CE1D180FA800C54FCB /* BoneData.c */, - 76AAA3CF1D180FA800C54FCB /* BoundingBoxAttachment.c */, - 76AAA3D01D180FA800C54FCB /* Event.c */, - 76AAA3D11D180FA800C54FCB /* EventData.c */, - 76AAA3D21D180FA800C54FCB /* extension.c */, - 76AAA3D31D180FA800C54FCB /* IkConstraint.c */, - 76AAA3D41D180FA800C54FCB /* IkConstraintData.c */, - 76AAA3D51D180FA800C54FCB /* Json.c */, - 76AAA3D61D180FA800C54FCB /* Json.h */, - 76AAA3D71D180FA800C54FCB /* MeshAttachment.c */, - 76AAA3D81D180FA800C54FCB /* RegionAttachment.c */, - 76AAA3D91D180FA800C54FCB /* Skeleton.c */, - 76AAA3DA1D180FA800C54FCB /* SkeletonBounds.c */, - 76AAA3DB1D180FA800C54FCB /* SkeletonData.c */, - 76AAA3DC1D180FA800C54FCB /* SkeletonJson.c */, - 76AAA3DD1D180FA800C54FCB /* Skin.c */, - 76AAA3DE1D180FA800C54FCB /* Slot.c */, - 76AAA3DF1D180FA800C54FCB /* SlotData.c */, - 76AAA3E01D180FA800C54FCB /* TransformConstraint.c */, - 76AAA3E11D180FA800C54FCB /* TransformConstraintData.c */, - 76AAA3E21D180FA800C54FCB /* WeightedMeshAttachment.c */, + 76F5BCF41D2BB57F005917E5 /* Animation.c */, + 76F5BCF51D2BB57F005917E5 /* AnimationState.c */, + 76F5BCF61D2BB57F005917E5 /* AnimationStateData.c */, + 76F5BCF71D2BB57F005917E5 /* Atlas.c */, + 76F5BCF81D2BB57F005917E5 /* AtlasAttachmentLoader.c */, + 76F5BCF91D2BB57F005917E5 /* Attachment.c */, + 76F5BCFA1D2BB57F005917E5 /* AttachmentLoader.c */, + 76F5BCFB1D2BB57F005917E5 /* Bone.c */, + 76F5BCFC1D2BB57F005917E5 /* BoneData.c */, + 76F5BCFD1D2BB57F005917E5 /* BoundingBoxAttachment.c */, + 76F5BCFE1D2BB57F005917E5 /* Event.c */, + 76F5BCFF1D2BB57F005917E5 /* EventData.c */, + 76F5BD001D2BB57F005917E5 /* extension.c */, + 76F5BD011D2BB57F005917E5 /* IkConstraint.c */, + 76F5BD021D2BB57F005917E5 /* IkConstraintData.c */, + 76F5BD031D2BB57F005917E5 /* Json.c */, + 76F5BD041D2BB57F005917E5 /* Json.h */, + 76F5BD051D2BB57F005917E5 /* MeshAttachment.c */, + 76F5BD061D2BB57F005917E5 /* PathAttachment.c */, + 76F5BD071D2BB57F005917E5 /* PathConstraint.c */, + 76F5BD081D2BB57F005917E5 /* PathConstraintData.c */, + 76F5BD091D2BB57F005917E5 /* RegionAttachment.c */, + 76F5BD0A1D2BB57F005917E5 /* Skeleton.c */, + 76F5BD0B1D2BB57F005917E5 /* SkeletonBounds.c */, + 76F5BD0C1D2BB57F005917E5 /* SkeletonData.c */, + 76F5BD0D1D2BB57F005917E5 /* SkeletonJson.c */, + 76F5BD0E1D2BB57F005917E5 /* Skin.c */, + 76F5BD0F1D2BB57F005917E5 /* Slot.c */, + 76F5BD101D2BB57F005917E5 /* SlotData.c */, + 76F5BD111D2BB57F005917E5 /* TransformConstraint.c */, + 76F5BD121D2BB57F005917E5 /* TransformConstraintData.c */, + 76F5BD131D2BB57F005917E5 /* VertexAttachment.c */, ); name = spine; sourceTree = ""; @@ -715,49 +734,53 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 76AAA3E61D180FA800C54FCB /* Atlas.c in Sources */, + 76F5BD221D2BB57F005917E5 /* IkConstraintData.c in Sources */, + 76F5BD1E1D2BB57F005917E5 /* Event.c in Sources */, + 76F5BD311D2BB57F005917E5 /* TransformConstraintData.c in Sources */, + 76F5BD1B1D2BB57F005917E5 /* Bone.c in Sources */, + 76F5BD171D2BB57F005917E5 /* Atlas.c in Sources */, 76AAA40C1D18106000C54FCB /* AttachmentVertices.cpp in Sources */, - 76AAA3EA1D180FA800C54FCB /* Bone.c in Sources */, - 76AAA3ED1D180FA800C54FCB /* Event.c in Sources */, - 76AAA3E31D180FA800C54FCB /* Animation.c in Sources */, - 76AAA3F81D180FA800C54FCB /* SkeletonJson.c in Sources */, + 76F5BD551D2BD7D3005917E5 /* TankExample.cpp in Sources */, + 76F5BD321D2BB57F005917E5 /* VertexAttachment.c in Sources */, 76AAA3C51D180F7C00C54FCB /* SpineboyExample.cpp in Sources */, - 76AAA3F21D180FA800C54FCB /* Json.c in Sources */, - 76AAA3F71D180FA800C54FCB /* SkeletonData.c in Sources */, - 76AAA3E91D180FA800C54FCB /* AttachmentLoader.c in Sources */, - 76AAA3F11D180FA800C54FCB /* IkConstraintData.c in Sources */, - 76AAA3F51D180FA800C54FCB /* Skeleton.c in Sources */, - 76AAA3FE1D180FA800C54FCB /* WeightedMeshAttachment.c in Sources */, - 76AAA3EB1D180FA800C54FCB /* BoneData.c in Sources */, - 76AAA3F91D180FA800C54FCB /* Skin.c in Sources */, + 76F5BD2C1D2BB57F005917E5 /* SkeletonJson.c in Sources */, + 76F5BD2E1D2BB57F005917E5 /* Slot.c in Sources */, + 76F5BD251D2BB57F005917E5 /* PathAttachment.c in Sources */, + 76F5BD1D1D2BB57F005917E5 /* BoundingBoxAttachment.c in Sources */, + 76F5BD161D2BB57F005917E5 /* AnimationStateData.c in Sources */, 76AAA3C11D180F7C00C54FCB /* BatchingExample.cpp in Sources */, + 76F5BD2D1D2BB57F005917E5 /* Skin.c in Sources */, 76AAA40D1D18106000C54FCB /* Cocos2dAttachmentLoader.cpp in Sources */, - 76AAA3E41D180FA800C54FCB /* AnimationState.c in Sources */, - 76AAA3EF1D180FA800C54FCB /* extension.c in Sources */, - 76AAA3FA1D180FA800C54FCB /* Slot.c in Sources */, - 76AAA3FC1D180FA800C54FCB /* TransformConstraint.c in Sources */, 76AAA40F1D18106000C54FCB /* SkeletonBatch.cpp in Sources */, - 76AAA3F01D180FA800C54FCB /* IkConstraint.c in Sources */, + 76F5BD211D2BB57F005917E5 /* IkConstraint.c in Sources */, + 76F5BD1F1D2BB57F005917E5 /* EventData.c in Sources */, + 76F5BD1A1D2BB57F005917E5 /* AttachmentLoader.c in Sources */, 76AAA3C31D180F7C00C54FCB /* RaptorExample.cpp in Sources */, - 76AAA3F61D180FA800C54FCB /* SkeletonBounds.c in Sources */, - 76AAA3EC1D180FA800C54FCB /* BoundingBoxAttachment.c in Sources */, + 76F5BD281D2BB57F005917E5 /* RegionAttachment.c in Sources */, + 76F5BD2A1D2BB57F005917E5 /* SkeletonBounds.c in Sources */, + 76F5BD201D2BB57F005917E5 /* extension.c in Sources */, 76AAA3C01D180F7C00C54FCB /* AppDelegate.cpp in Sources */, 76AAA3C41D180F7C00C54FCB /* SimpleCommand.cpp in Sources */, + 76F5BD261D2BB57F005917E5 /* PathConstraint.c in Sources */, 503AE10017EB989F00D1A890 /* AppController.mm in Sources */, - 76AAA3E81D180FA800C54FCB /* Attachment.c in Sources */, - 76AAA3F31D180FA800C54FCB /* MeshAttachment.c in Sources */, - 76AAA3E71D180FA800C54FCB /* AtlasAttachmentLoader.c in Sources */, - 76AAA3FB1D180FA800C54FCB /* SlotData.c in Sources */, - 76AAA3FD1D180FA800C54FCB /* TransformConstraintData.c in Sources */, - 76AAA3EE1D180FA800C54FCB /* EventData.c in Sources */, - 76AAA3E51D180FA800C54FCB /* AnimationStateData.c in Sources */, 76AAA40E1D18106000C54FCB /* SkeletonAnimation.cpp in Sources */, 76AAA4111D18106000C54FCB /* spine-cocos2dx.cpp in Sources */, + 76F5BD181D2BB57F005917E5 /* AtlasAttachmentLoader.c in Sources */, + 76F5BD151D2BB57F005917E5 /* AnimationState.c in Sources */, + 76F5BD2F1D2BB57F005917E5 /* SlotData.c in Sources */, + 76F5BD271D2BB57F005917E5 /* PathConstraintData.c in Sources */, + 76F5BD291D2BB57F005917E5 /* Skeleton.c in Sources */, + 76F5BD241D2BB57F005917E5 /* MeshAttachment.c in Sources */, + 76F5BD1C1D2BB57F005917E5 /* BoneData.c in Sources */, 76AAA3C21D180F7C00C54FCB /* GoblinsExample.cpp in Sources */, + 76F5BD141D2BB57F005917E5 /* Animation.c in Sources */, + 76F5BD2B1D2BB57F005917E5 /* SkeletonData.c in Sources */, 503AE10217EB989F00D1A890 /* RootViewController.mm in Sources */, - 76AAA3F41D180FA800C54FCB /* RegionAttachment.c in Sources */, + 76F5BD191D2BB57F005917E5 /* Attachment.c in Sources */, + 76F5BD231D2BB57F005917E5 /* Json.c in Sources */, 503AE10117EB989F00D1A890 /* main.m in Sources */, 76AAA4101D18106000C54FCB /* SkeletonRenderer.cpp in Sources */, + 76F5BD301D2BB57F005917E5 /* TransformConstraint.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -765,6 +788,40 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 76F5BD561D2BD7EF005917E5 /* TankExample.cpp in Sources */, + 76F5BD571D2BD7EF005917E5 /* TankExample.h in Sources */, + 76F5BD331D2BD4A9005917E5 /* Animation.c in Sources */, + 76F5BD341D2BD4A9005917E5 /* AnimationState.c in Sources */, + 76F5BD351D2BD4A9005917E5 /* AnimationStateData.c in Sources */, + 76F5BD361D2BD4A9005917E5 /* Atlas.c in Sources */, + 76F5BD371D2BD4A9005917E5 /* AtlasAttachmentLoader.c in Sources */, + 76F5BD381D2BD4A9005917E5 /* Attachment.c in Sources */, + 76F5BD391D2BD4A9005917E5 /* AttachmentLoader.c in Sources */, + 76F5BD3A1D2BD4A9005917E5 /* Bone.c in Sources */, + 76F5BD3B1D2BD4A9005917E5 /* BoneData.c in Sources */, + 76F5BD3C1D2BD4A9005917E5 /* BoundingBoxAttachment.c in Sources */, + 76F5BD3D1D2BD4A9005917E5 /* Event.c in Sources */, + 76F5BD3E1D2BD4A9005917E5 /* EventData.c in Sources */, + 76F5BD3F1D2BD4A9005917E5 /* extension.c in Sources */, + 76F5BD401D2BD4A9005917E5 /* IkConstraint.c in Sources */, + 76F5BD411D2BD4A9005917E5 /* IkConstraintData.c in Sources */, + 76F5BD421D2BD4A9005917E5 /* Json.c in Sources */, + 76F5BD431D2BD4A9005917E5 /* Json.h in Sources */, + 76F5BD441D2BD4A9005917E5 /* MeshAttachment.c in Sources */, + 76F5BD451D2BD4A9005917E5 /* PathAttachment.c in Sources */, + 76F5BD461D2BD4A9005917E5 /* PathConstraint.c in Sources */, + 76F5BD471D2BD4A9005917E5 /* PathConstraintData.c in Sources */, + 76F5BD481D2BD4A9005917E5 /* RegionAttachment.c in Sources */, + 76F5BD491D2BD4A9005917E5 /* Skeleton.c in Sources */, + 76F5BD4A1D2BD4A9005917E5 /* SkeletonBounds.c in Sources */, + 76F5BD4B1D2BD4A9005917E5 /* SkeletonData.c in Sources */, + 76F5BD4C1D2BD4A9005917E5 /* SkeletonJson.c in Sources */, + 76F5BD4D1D2BD4A9005917E5 /* Skin.c in Sources */, + 76F5BD4E1D2BD4A9005917E5 /* Slot.c in Sources */, + 76F5BD4F1D2BD4A9005917E5 /* SlotData.c in Sources */, + 76F5BD501D2BD4A9005917E5 /* TransformConstraint.c in Sources */, + 76F5BD511D2BD4A9005917E5 /* TransformConstraintData.c in Sources */, + 76F5BD521D2BD4A9005917E5 /* VertexAttachment.c in Sources */, 76AAA43B1D1811B000C54FCB /* AppDelegate.cpp in Sources */, 76AAA43C1D1811B000C54FCB /* AppDelegate.h in Sources */, 76AAA43D1D1811B000C54FCB /* AppMacros.h in Sources */, @@ -778,35 +835,6 @@ 76AAA4451D1811B000C54FCB /* SimpleCommand.h in Sources */, 76AAA4461D1811B000C54FCB /* SpineboyExample.cpp in Sources */, 76AAA4471D1811B000C54FCB /* SpineboyExample.h in Sources */, - 76AAA41E1D1811A700C54FCB /* Animation.c in Sources */, - 76AAA41F1D1811A700C54FCB /* AnimationState.c in Sources */, - 76AAA4201D1811A700C54FCB /* AnimationStateData.c in Sources */, - 76AAA4211D1811A700C54FCB /* Atlas.c in Sources */, - 76AAA4221D1811A700C54FCB /* AtlasAttachmentLoader.c in Sources */, - 76AAA4231D1811A700C54FCB /* Attachment.c in Sources */, - 76AAA4241D1811A700C54FCB /* AttachmentLoader.c in Sources */, - 76AAA4251D1811A700C54FCB /* Bone.c in Sources */, - 76AAA4261D1811A700C54FCB /* BoneData.c in Sources */, - 76AAA4271D1811A700C54FCB /* BoundingBoxAttachment.c in Sources */, - 76AAA4281D1811A700C54FCB /* Event.c in Sources */, - 76AAA4291D1811A700C54FCB /* EventData.c in Sources */, - 76AAA42A1D1811A700C54FCB /* extension.c in Sources */, - 76AAA42B1D1811A700C54FCB /* IkConstraint.c in Sources */, - 76AAA42C1D1811A700C54FCB /* IkConstraintData.c in Sources */, - 76AAA42D1D1811A700C54FCB /* Json.c in Sources */, - 76AAA42E1D1811A700C54FCB /* Json.h in Sources */, - 76AAA42F1D1811A700C54FCB /* MeshAttachment.c in Sources */, - 76AAA4301D1811A700C54FCB /* RegionAttachment.c in Sources */, - 76AAA4311D1811A700C54FCB /* Skeleton.c in Sources */, - 76AAA4321D1811A700C54FCB /* SkeletonBounds.c in Sources */, - 76AAA4331D1811A700C54FCB /* SkeletonData.c in Sources */, - 76AAA4341D1811A700C54FCB /* SkeletonJson.c in Sources */, - 76AAA4351D1811A700C54FCB /* Skin.c in Sources */, - 76AAA4361D1811A700C54FCB /* Slot.c in Sources */, - 76AAA4371D1811A700C54FCB /* SlotData.c in Sources */, - 76AAA4381D1811A700C54FCB /* TransformConstraint.c in Sources */, - 76AAA4391D1811A700C54FCB /* TransformConstraintData.c in Sources */, - 76AAA43A1D1811A700C54FCB /* WeightedMeshAttachment.c in Sources */, 76AAA4121D18119F00C54FCB /* AttachmentVertices.cpp in Sources */, 76AAA4131D18119F00C54FCB /* AttachmentVertices.h in Sources */, 76AAA4141D18119F00C54FCB /* Cocos2dAttachmentLoader.cpp in Sources */, diff --git a/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.vcxproj b/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.vcxproj index 9c9618356..95dfbbf27 100644 --- a/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.vcxproj +++ b/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.vcxproj @@ -162,6 +162,9 @@ xcopy "$(ProjectDir)..\Resources" "$(OutDir)" /D /E /I /F /Y + + + @@ -172,7 +175,7 @@ xcopy "$(ProjectDir)..\Resources" "$(OutDir)" /D /E /I /F /Y - + @@ -185,6 +188,7 @@ xcopy "$(ProjectDir)..\Resources" "$(OutDir)" /D /E /I /F /Y + @@ -204,6 +208,9 @@ xcopy "$(ProjectDir)..\Resources" "$(OutDir)" /D /E /I /F /Y + + + @@ -215,7 +222,7 @@ xcopy "$(ProjectDir)..\Resources" "$(OutDir)" /D /E /I /F /Y - + @@ -230,6 +237,7 @@ xcopy "$(ProjectDir)..\Resources" "$(OutDir)" /D /E /I /F /Y + diff --git a/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.vcxproj.filters b/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.vcxproj.filters index 1332e7ae7..406bf581a 100644 --- a/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.vcxproj.filters +++ b/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.vcxproj.filters @@ -108,6 +108,15 @@ spine + + spine + + + spine + + + spine + spine @@ -138,9 +147,12 @@ spine - + spine + + src + @@ -185,7 +197,7 @@ spine-cocos2dx - + spine @@ -206,9 +218,6 @@ spine - - spine - spine @@ -236,6 +245,15 @@ spine + + spine + + + spine + + + spine + spine @@ -269,9 +287,15 @@ spine - + spine + + spine + + + src + diff --git a/spine-cocos2dx/src/spine/Cocos2dAttachmentLoader.cpp b/spine-cocos2dx/src/spine/Cocos2dAttachmentLoader.cpp index 3b3dbde2b..fe719d669 100644 --- a/spine-cocos2dx/src/spine/Cocos2dAttachmentLoader.cpp +++ b/spine-cocos2dx/src/spine/Cocos2dAttachmentLoader.cpp @@ -64,22 +64,9 @@ void _Cocos2dAttachmentLoader_configureAttachment (spAttachmentLoader* loader, s spMeshAttachment* meshAttachment = SUB_CAST(spMeshAttachment, attachment); spAtlasRegion* region = (spAtlasRegion*)meshAttachment->rendererObject; AttachmentVertices* attachmentVertices = new AttachmentVertices((Texture2D*)region->page->rendererObject, - meshAttachment->verticesCount >> 1, meshAttachment->triangles, meshAttachment->trianglesCount); + meshAttachment->super.worldVerticesLength >> 1, meshAttachment->triangles, meshAttachment->trianglesCount); V3F_C4B_T2F* vertices = attachmentVertices->_triangles->verts; - for (int i = 0, ii = 0, nn = meshAttachment->verticesCount; ii < nn; ++i, ii += 2) { - vertices[i].texCoords.u = meshAttachment->uvs[ii]; - vertices[i].texCoords.v = meshAttachment->uvs[ii + 1]; - } - meshAttachment->rendererObject = attachmentVertices; - break; - } - case SP_ATTACHMENT_WEIGHTED_MESH: { - spWeightedMeshAttachment* meshAttachment = SUB_CAST(spWeightedMeshAttachment, attachment); - spAtlasRegion* region = (spAtlasRegion*)meshAttachment->rendererObject; - AttachmentVertices* attachmentVertices = new AttachmentVertices((Texture2D*)region->page->rendererObject, - meshAttachment->uvsCount >> 1, meshAttachment->triangles, meshAttachment->trianglesCount); - V3F_C4B_T2F* vertices = attachmentVertices->_triangles->verts; - for (int i = 0, ii = 0, nn = meshAttachment->uvsCount; ii < nn; ++i, ii += 2) { + for (int i = 0, ii = 0, nn = meshAttachment->super.worldVerticesLength; ii < nn; ++i, ii += 2) { vertices[i].texCoords.u = meshAttachment->uvs[ii]; vertices[i].texCoords.v = meshAttachment->uvs[ii + 1]; } @@ -102,11 +89,6 @@ void _Cocos2dAttachmentLoader_disposeAttachment (spAttachmentLoader* loader, spA delete (AttachmentVertices*)meshAttachment->rendererObject; break; } - case SP_ATTACHMENT_WEIGHTED_MESH: { - spWeightedMeshAttachment* meshAttachment = SUB_CAST(spWeightedMeshAttachment, attachment); - delete (AttachmentVertices*)meshAttachment->rendererObject; - break; - } default: ; } } diff --git a/spine-cocos2dx/src/spine/SkeletonAnimation.cpp b/spine-cocos2dx/src/spine/SkeletonAnimation.cpp index ef289feec..7c77559e1 100644 --- a/spine-cocos2dx/src/spine/SkeletonAnimation.cpp +++ b/spine-cocos2dx/src/spine/SkeletonAnimation.cpp @@ -165,6 +165,10 @@ spTrackEntry* SkeletonAnimation::addAnimation (int trackIndex, const std::string } return spAnimationState_addAnimation(_state, trackIndex, animation, loop, delay); } + +spAnimation* SkeletonAnimation::findAnimation(const std::string& name) const { + return spSkeletonData_findAnimation(_skeleton->data, name.c_str()); +} spTrackEntry* SkeletonAnimation::getCurrent (int trackIndex) { return spAnimationState_getCurrent(_state, trackIndex); diff --git a/spine-cocos2dx/src/spine/SkeletonAnimation.h b/spine-cocos2dx/src/spine/SkeletonAnimation.h index ba80c4455..9f1e6ab6c 100644 --- a/spine-cocos2dx/src/spine/SkeletonAnimation.h +++ b/spine-cocos2dx/src/spine/SkeletonAnimation.h @@ -59,6 +59,7 @@ public: spTrackEntry* setAnimation (int trackIndex, const std::string& name, bool loop); spTrackEntry* addAnimation (int trackIndex, const std::string& name, bool loop, float delay = 0); + spAnimation* findAnimation(const std::string& name) const; spTrackEntry* getCurrent (int trackIndex = 0); void clearTracks (); void clearTrack (int trackIndex = 0); diff --git a/spine-cocos2dx/src/spine/SkeletonBatch.cpp b/spine-cocos2dx/src/spine/SkeletonBatch.cpp index d5e5ddcc0..1237f0d74 100644 --- a/spine-cocos2dx/src/spine/SkeletonBatch.cpp +++ b/spine-cocos2dx/src/spine/SkeletonBatch.cpp @@ -34,6 +34,7 @@ #include USING_NS_CC; +#define EVENT_AFTER_DRAW_RESET_POSITION "director_after_draw" using std::max; namespace spine { @@ -49,6 +50,13 @@ SkeletonBatch* SkeletonBatch::getInstance () { if (!instance) instance = new SkeletonBatch(8192); return instance; } + +void SkeletonBatch::destroyInstance () { + if (instance) { + delete instance; + instance = nullptr; + } +} SkeletonBatch::SkeletonBatch (int capacity) : _capacity(capacity), _position(0) @@ -57,11 +65,13 @@ SkeletonBatch::SkeletonBatch (int capacity) : _firstCommand = new Command(); _command = _firstCommand; - Director::getInstance()->getScheduler()->scheduleUpdate(this, -1, false); + Director::getInstance()->getEventDispatcher()->addCustomEventListener(EVENT_AFTER_DRAW_RESET_POSITION, [this](EventCustom* eventCustom){ + this->update(0); + });; } SkeletonBatch::~SkeletonBatch () { - Director::getInstance()->getScheduler()->unscheduleUpdate(this); + Director::getInstance()->getEventDispatcher()->removeCustomEventListeners(EVENT_AFTER_DRAW_RESET_POSITION); Command* command = _firstCommand; while (command) { diff --git a/spine-cocos2dx/src/spine/SkeletonBatch.h b/spine-cocos2dx/src/spine/SkeletonBatch.h index b0bc1370d..98419bef1 100644 --- a/spine-cocos2dx/src/spine/SkeletonBatch.h +++ b/spine-cocos2dx/src/spine/SkeletonBatch.h @@ -45,6 +45,8 @@ public: static void setBufferSize (int vertexCount); static SkeletonBatch* getInstance (); + + static void destroyInstance (); void update (float delta); diff --git a/spine-cocos2dx/src/spine/SkeletonRenderer.cpp b/spine-cocos2dx/src/spine/SkeletonRenderer.cpp index 572b200ea..8864b9733 100644 --- a/spine-cocos2dx/src/spine/SkeletonRenderer.cpp +++ b/spine-cocos2dx/src/spine/SkeletonRenderer.cpp @@ -108,6 +108,7 @@ void SkeletonRenderer::initWithData (spSkeletonData* skeletonData, bool ownsSkel } void SkeletonRenderer::initWithFile (const std::string& skeletonDataFile, spAtlas* atlas, float scale) { + _atlas = atlas; _attachmentLoader = SUPER(Cocos2dAttachmentLoader_create(_atlas)); spSkeletonJson* json = spSkeletonJson_createWithLoader(_attachmentLoader); @@ -151,9 +152,8 @@ void SkeletonRenderer::draw (Renderer* renderer, const Mat4& transform, uint32_t _skeleton->g = nodeColor.g / (float)255; _skeleton->b = nodeColor.b / (float)255; _skeleton->a = getDisplayedOpacity() / (float)255; - - Color4B color; - int vertexCount = 0; + + Color4F color; AttachmentVertices* attachmentVertices = nullptr; for (int i = 0, n = _skeleton->slotsCount; i < n; ++i) { spSlot* slot = _skeleton->drawOrder[i]; @@ -164,7 +164,7 @@ void SkeletonRenderer::draw (Renderer* renderer, const Mat4& transform, uint32_t spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment; spRegionAttachment_computeWorldVertices(attachment, slot->bone, _worldVertices); attachmentVertices = getAttachmentVertices(attachment); - color.r = attachment->r; + color.r = attachment->r; color.g = attachment->g; color.b = attachment->b; color.a = attachment->a; @@ -174,20 +174,10 @@ void SkeletonRenderer::draw (Renderer* renderer, const Mat4& transform, uint32_t spMeshAttachment* attachment = (spMeshAttachment*)slot->attachment; spMeshAttachment_computeWorldVertices(attachment, slot, _worldVertices); attachmentVertices = getAttachmentVertices(attachment); - color.r = attachment->r; - color.g = attachment->g; - color.b = attachment->b; - color.a = attachment->a; - break; - } - case SP_ATTACHMENT_WEIGHTED_MESH: { - spWeightedMeshAttachment* attachment = (spWeightedMeshAttachment*)slot->attachment; - spWeightedMeshAttachment_computeWorldVertices(attachment, slot, _worldVertices); - attachmentVertices = getAttachmentVertices(attachment); - color.r = attachment->r; - color.g = attachment->g; - color.b = attachment->b; - color.a = attachment->a; + color.r = attachment->r; + color.g = attachment->g; + color.b = attachment->b; + color.a = attachment->a; break; } default: @@ -199,12 +189,17 @@ void SkeletonRenderer::draw (Renderer* renderer, const Mat4& transform, uint32_t color.r *= _skeleton->r * slot->r * multiplier; color.g *= _skeleton->g * slot->g * multiplier; color.b *= _skeleton->b * slot->b * multiplier; - + + + for (int v = 0, w = 0, vn = attachmentVertices->_triangles->vertCount; v < vn; ++v, w += 2) { V3F_C4B_T2F* vertex = attachmentVertices->_triangles->verts + v; vertex->vertices.x = _worldVertices[w]; vertex->vertices.y = _worldVertices[w + 1]; - vertex->colors = color; + vertex->colors.r = (GLubyte)color.r; + vertex->colors.g = (GLubyte)color.g; + vertex->colors.b = (GLubyte)color.b; + vertex->colors.a = (GLubyte)color.a; } BlendFunc blendFunc; @@ -231,57 +226,56 @@ void SkeletonRenderer::draw (Renderer* renderer, const Mat4& transform, uint32_t } if (_debugSlots || _debugBones) { - _debugCommand.init(_globalZOrder); - _debugCommand.func = CC_CALLBACK_0(SkeletonRenderer::drawDebug, this, transform, transformFlags); - renderer->addCommand(&_debugCommand); + drawDebug(renderer, transform, transformFlags); } } -void SkeletonRenderer::drawDebug (const Mat4 &transform, uint32_t transformFlags) { - getGLProgramState()->apply(transform); +void SkeletonRenderer::drawDebug (Renderer* renderer, const Mat4 &transform, uint32_t transformFlags) { - Director* director = Director::getInstance(); - director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); - director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, transform); - - if (_debugSlots) { - // Slots. - DrawPrimitives::setDrawColor4B(0, 0, 255, 255); - glLineWidth(1); - Vec2 points[4]; - V3F_C4B_T2F_Quad quad; - for (int i = 0, n = _skeleton->slotsCount; i < n; ++i) { - spSlot* slot = _skeleton->drawOrder[i]; - if (!slot->attachment || slot->attachment->type != SP_ATTACHMENT_REGION) continue; - spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment; - spRegionAttachment_computeWorldVertices(attachment, slot->bone, _worldVertices); - points[0] = Vec2(_worldVertices[0], _worldVertices[1]); - points[1] = Vec2(_worldVertices[2], _worldVertices[3]); - points[2] = Vec2(_worldVertices[4], _worldVertices[5]); - points[3] = Vec2(_worldVertices[6], _worldVertices[7]); - DrawPrimitives::drawPoly(points, 4, true); - } - } - if (_debugBones) { - // Bone lengths. - glLineWidth(2); - DrawPrimitives::setDrawColor4B(255, 0, 0, 255); - for (int i = 0, n = _skeleton->bonesCount; i < n; ++i) { - spBone *bone = _skeleton->bones[i]; - float x = bone->data->length * bone->a + bone->worldX; - float y = bone->data->length * bone->c + bone->worldY; - DrawPrimitives::drawLine(Vec2(bone->worldX, bone->worldY), Vec2(x, y)); - } - // Bone origins. - DrawPrimitives::setPointSize(4); - DrawPrimitives::setDrawColor4B(0, 0, 255, 255); // Root bone is blue. - for (int i = 0, n = _skeleton->bonesCount; i < n; ++i) { - spBone *bone = _skeleton->bones[i]; - DrawPrimitives::drawPoint(Vec2(bone->worldX, bone->worldY)); - if (i == 0) DrawPrimitives::setDrawColor4B(0, 255, 0, 255); - } - } - director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); + Director* director = Director::getInstance(); + director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); + director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, transform); + + DrawNode* drawNode = DrawNode::create(); + + if (_debugSlots) { + // Slots. + // DrawPrimitives::setDrawColor4B(0, 0, 255, 255); + glLineWidth(1); + Vec2 points[4]; + V3F_C4B_T2F_Quad quad; + for (int i = 0, n = _skeleton->slotsCount; i < n; i++) { + spSlot* slot = _skeleton->drawOrder[i]; + if (!slot->attachment || slot->attachment->type != SP_ATTACHMENT_REGION) continue; + spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment; + spRegionAttachment_computeWorldVertices(attachment, slot->bone, _worldVertices); + points[0] = Vec2(_worldVertices[0], _worldVertices[1]); + points[1] = Vec2(_worldVertices[2], _worldVertices[3]); + points[2] = Vec2(_worldVertices[4], _worldVertices[5]); + points[3] = Vec2(_worldVertices[6], _worldVertices[7]); + drawNode->drawPoly(points, 4, true, Color4F::BLUE); + } + } + if (_debugBones) { + // Bone lengths. + glLineWidth(2); + for (int i = 0, n = _skeleton->bonesCount; i < n; i++) { + spBone *bone = _skeleton->bones[i]; + float x = bone->data->length * bone->a + bone->worldX; + float y = bone->data->length * bone->c + bone->worldY; + drawNode->drawLine(Vec2(bone->worldX, bone->worldY), Vec2(x, y), Color4F::RED); + } + // Bone origins. + auto color = Color4F::BLUE; // Root bone is blue. + for (int i = 0, n = _skeleton->bonesCount; i < n; i++) { + spBone *bone = _skeleton->bones[i]; + drawNode->drawPoint(Vec2(bone->worldX, bone->worldY), 4, color); + if (i == 0) color = Color4F::GREEN; + } + } + + drawNode->draw(renderer, transform, transformFlags); + director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); } AttachmentVertices* SkeletonRenderer::getAttachmentVertices (spRegionAttachment* attachment) const { @@ -292,10 +286,6 @@ AttachmentVertices* SkeletonRenderer::getAttachmentVertices (spMeshAttachment* a return (AttachmentVertices*)attachment->rendererObject; } -AttachmentVertices* SkeletonRenderer::getAttachmentVertices (spWeightedMeshAttachment* attachment) const { - return (AttachmentVertices*)attachment->rendererObject; -} - Rect SkeletonRenderer::getBoundingBox () const { float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN; float scaleX = getScaleX(), scaleY = getScaleY(); @@ -310,11 +300,7 @@ Rect SkeletonRenderer::getBoundingBox () const { } else if (slot->attachment->type == SP_ATTACHMENT_MESH) { spMeshAttachment* mesh = (spMeshAttachment*)slot->attachment; spMeshAttachment_computeWorldVertices(mesh, slot, _worldVertices); - verticesCount = mesh->verticesCount; - } else if (slot->attachment->type == SP_ATTACHMENT_WEIGHTED_MESH) { - spWeightedMeshAttachment* mesh = (spWeightedMeshAttachment*)slot->attachment; - spWeightedMeshAttachment_computeWorldVertices(mesh, slot, _worldVertices); - verticesCount = mesh->uvsCount; + verticesCount = mesh->super.worldVerticesLength; } else continue; for (int ii = 0; ii < verticesCount; ii += 2) { @@ -326,6 +312,7 @@ Rect SkeletonRenderer::getBoundingBox () const { } } Vec2 position = getPosition(); + if (minX == FLT_MAX) minX = minY = maxX = maxY = 0; return Rect(position.x + minX, position.y + minY, maxX - minX, maxY - minY); } diff --git a/spine-cocos2dx/src/spine/SkeletonRenderer.h b/spine-cocos2dx/src/spine/SkeletonRenderer.h index 05f0b5534..50cbed388 100644 --- a/spine-cocos2dx/src/spine/SkeletonRenderer.h +++ b/spine-cocos2dx/src/spine/SkeletonRenderer.h @@ -49,7 +49,7 @@ public: virtual void update (float deltaTime) override; virtual void draw (cocos2d::Renderer* renderer, const cocos2d::Mat4& transform, uint32_t transformFlags) override; - virtual void drawDebug (const cocos2d::Mat4& transform, uint32_t transformFlags); + virtual void drawDebug (cocos2d::Renderer* renderer, const cocos2d::Mat4& transform, uint32_t transformFlags); virtual cocos2d::Rect getBoundingBox () const override; virtual void onEnter () override; virtual void onExit () override; @@ -117,7 +117,6 @@ protected: void setSkeletonData (spSkeletonData* skeletonData, bool ownsSkeletonData); virtual AttachmentVertices* getAttachmentVertices (spRegionAttachment* attachment) const; virtual AttachmentVertices* getAttachmentVertices (spMeshAttachment* attachment) const; - virtual AttachmentVertices* getAttachmentVertices (spWeightedMeshAttachment* attachment) const; bool _ownsSkeletonData; spAtlas* _atlas; diff --git a/spine-cocos2dx/src/spine/spine-cocos2dx.cpp b/spine-cocos2dx/src/spine/spine-cocos2dx.cpp index 6d00b46ac..8d5e1551b 100644 --- a/spine-cocos2dx/src/spine/spine-cocos2dx.cpp +++ b/spine-cocos2dx/src/spine/spine-cocos2dx.cpp @@ -40,6 +40,8 @@ GLuint wrap (spAtlasWrap wrap) { GLuint filter (spAtlasFilter filter) { switch (filter) { + case SP_ATLAS_UNKNOWN_FILTER: + break; case SP_ATLAS_NEAREST: return GL_NEAREST; case SP_ATLAS_LINEAR: @@ -75,10 +77,11 @@ void _spAtlasPage_disposeTexture (spAtlasPage* self) { } char* _spUtil_readFile (const char* path, int* length) { - Data data = FileUtils::getInstance()->getDataFromFile( - FileUtils::getInstance()->fullPathForFilename(path).c_str()); - *length = data.getSize(); - char* bytes = MALLOC(char, *length); - memcpy(bytes, data.getBytes(), *length); - return bytes; + Data data = FileUtils::getInstance()->getDataFromFile( + FileUtils::getInstance()->fullPathForFilename(path)); + if (data.isNull()) return 0; + *length = static_cast(data.getSize()); + char* bytes = MALLOC(char, *length); + memcpy(bytes, data.getBytes(), *length); + return bytes; } diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.atlas b/spine-corona/examples/spineboy-atlas/spineboy.atlas similarity index 100% rename from spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.atlas rename to spine-corona/examples/spineboy-atlas/spineboy.atlas diff --git a/spine-corona/examples/spineboy-atlas/spineboy.json b/spine-corona/examples/spineboy-atlas/spineboy.json new file mode 100644 index 000000000..2e422677a --- /dev/null +++ b/spine-corona/examples/spineboy-atlas/spineboy.json @@ -0,0 +1,2419 @@ +{ +"bones": [ + { "name": "hip", "y": 247.47 }, + { "name": "front_thigh", "parent": "hip", "length": 74.8, "x": -17.45, "y": -11.64, "rotation": -95.51, "color": "00ff04ff" }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "x": 8.91, "y": -5.62, "rotation": -72.54, "color": "ff000dff" }, + { "name": "torso", "parent": "hip", "length": 127.55, "x": -1.61, "y": 4.9, "rotation": 103.82, "color": "e0da19ff" }, + { + "name": "front_shin", + "parent": "front_thigh", + "length": 128.76, + "x": 78.69, + "y": 1.6, + "rotation": -2.21, + "inheritScale": false, + "color": "00ff04ff" + }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "x": 103.75, "y": 19.32, "rotation": 168.37, "color": "00ff04ff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "x": 127.49, "y": -0.3, "rotation": -31.53, "color": "e0da19ff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "x": 86.1, "y": -1.32, "rotation": -19.83, "color": "ff000dff" }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "x": 92.35, "y": -19.22, "rotation": -169.55, "color": "ff000dff" }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.57, + "x": 68.8, + "y": -0.68, + "rotation": 18.29, + "color": "00ff04ff" + }, + { "name": "front_foot", "parent": "front_shin", "length": 91.34, "x": 128.75, "y": -0.33, "rotation": 77.9, "color": "00ff04ff" }, + { "name": "head", "parent": "neck", "length": 263.57, "x": 27.66, "y": -0.25, "rotation": 23.18, "color": "e0da19ff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "x": 51.35, "rotation": 23.15, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "x": 121.45, "y": -0.75, "rotation": 69.3, "color": "ff000dff" }, + { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "x": 40.56, "y": 0.19, "rotation": 12.43, "color": "00ff04ff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "x": 34.42, "y": -0.45, "rotation": 5.34, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "x": 201.04, "y": 52.13, "rotation": 6.83, "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": "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", "additive": true }, + { "name": "head-bb", "bone": "head", "attachment": "head" } +], +"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.67, "rotation": 79.59, "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": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 126, "height": 69 }, + "front_foot_bend1": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 128, "height": 70 }, + "front_foot_bend2": { "x": 16.07, "y": 13.83, "rotation": 18.68, "width": 108, "height": 93 } + }, + "front_shin": { + "front_shin": { "x": 55.11, "y": -3.54, "rotation": 96.59, "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.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 } + }, + "goggles": { + "goggles": { "x": 97.07, "y": 6.54, "rotation": -70.63, "width": 261, "height": 166 } + }, + "gun": { + "gun": { "x": 77.3, "y": 16.4, "rotation": 60.82, "width": 210, "height": 203 } + }, + "head": { + "head": { "x": 128.95, "y": 0.29, "rotation": -70.63, "width": 271, "height": 298 } + }, + "head-bb": { + "head": { + "type": "boundingbox", + "vertices": [ -19.143097, -70.30209, 40.80313, -118.074234, 257.77155, -115.61827, 285.16193, 57.18005, 120.77191, 164.95125, -5.067627, 76.94907 ] + } + }, + "mouth": { + "mouth_grind": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth_smile": { "x": 23.68, "y": -32.23, "rotation": -70.63, "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.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.57, "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.1, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 } + }, + "rear_upper_arm": { + "rear_upper_arm": { "x": 21.12, "y": 4.08, "rotation": 89.32, "width": 47, "height": 87 } + }, + "torso": { + "torso": { "x": 63.61, "y": 7.12, "rotation": -94.53, "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.4666, "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.82 }, + { "time": 0.1333, "angle": -28.74 }, + { "time": 0.2333, "angle": 11.42 }, + { "time": 0.3333, "angle": -50.24 }, + { "time": 0.4, "angle": -72.66, "curve": "stepped" }, + { "time": 0.4333, "angle": -72.66 }, + { "time": 0.5, "angle": -20.24 }, + { "time": 0.5666, "angle": -85.28, "curve": "stepped" }, + { "time": 0.9333, "angle": -85.28, "curve": "stepped" }, + { "time": 2.2333, "angle": -85.28 }, + { "time": 2.5, "angle": -51.96, "curve": "stepped" }, + { "time": 4.5333, "angle": -51.96 }, + { "time": 4.6666, "angle": -85.28 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": -2.82 }, + { "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.92 }, + { "time": 0.5666, "angle": 47.94, "curve": "stepped" }, + { "time": 2.2333, "angle": 47.94 }, + { "time": 2.5, "angle": 18.5, "curve": "stepped" }, + { "time": 4.5333, "angle": 18.5 }, + { "time": 4.6666, "angle": 47.94 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -8.61 }, + { "time": 0.1333, "angle": 28.19 }, + { "time": 0.2666, "angle": -280.19 }, + { "time": 0.4, "angle": -237.22, "curve": "stepped" }, + { "time": 0.4333, "angle": -237.22 }, + { "time": 0.5, "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 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.2333, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -38.85 }, + { "time": 0.1333, "angle": -299.58 }, + { "time": 0.2666, "angle": -244.74 }, + { "time": 0.4, "angle": -292.35 }, + { "time": 0.4333, "angle": -315.84 }, + { "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.7666, "angle": -285.1 }, + { "time": 4.6666, "angle": -290.68 }, + { "time": 4.8, "angle": 8.61 }, + { "time": 4.8666, "angle": 10.94 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": -44.69 }, + { "time": 0.1333, "angle": 112.26 }, + { "time": 0.2666, "angle": 129.07 }, + { "time": 0.4, "angle": 134.94, "curve": "stepped" }, + { "time": 0.4333, "angle": 134.94 }, + { "time": 0.5666, "angle": 172.6, "curve": "stepped" }, + { "time": 0.9333, "angle": 172.6, "curve": "stepped" }, + { "time": 2.2333, "angle": 172.6 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 21.88 }, + { "time": 0.1333, "angle": 11.48 }, + { "time": 0.2666, "angle": -18.81 }, + { "time": 0.4, "angle": -18.92 }, + { "time": 0.4333, "angle": -18.28 }, + { "time": 0.5, "angle": 60.61 }, + { "time": 0.7, "angle": -18.87, "curve": "stepped" }, + { "time": 2.2333, "angle": -18.87 }, + { "time": 2.7, "angle": -1.95, "curve": "stepped" }, + { "time": 4.6666, "angle": -1.95 }, + { "time": 4.8, "angle": 34.55 }, + { "time": 4.9333, "angle": -18.74 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -2.33 }, + { "time": 0.2666, "angle": 26.34 }, + { "time": 0.7, "angle": -6.07, "curve": "stepped" }, + { "time": 2.2333, "angle": -6.07 }, + { "time": 2.7, "angle": 5.72, "curve": "stepped" }, + { "time": 4.6666, "angle": 5.72 }, + { "time": 4.8666, "angle": -6.52 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 10.36 }, + { "time": 0.1333, "angle": -23.12 }, + { "time": 0.2666, "angle": -23.11 }, + { "time": 0.4, "angle": -23.16, "curve": "stepped" }, + { "time": 0.4333, "angle": -23.16 }, + { "time": 0.5666, "angle": -23.2, "curve": "stepped" }, + { "time": 0.9333, "angle": -23.2, "curve": "stepped" }, + { "time": 2.2333, "angle": -23.2 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": -2.78 }, + { "time": 0.1333, "angle": -24.58 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.9333, "angle": 0, "curve": "stepped" }, + { "time": 2.2333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.2, "x": 50.34, "y": 151.73 }, + { "time": 0.4, "x": 5.16, "y": -119.64, "curve": "stepped" }, + { "time": 0.4333, "x": 5.16, "y": -119.64 }, + { "time": 0.5, "x": 50.34, "y": -205.18, "curve": "stepped" }, + { "time": 0.8, "x": 50.34, "y": -205.18, "curve": "stepped" }, + { "time": 0.9333, "x": 50.34, "y": -205.18, "curve": "stepped" }, + { "time": 2.2333, "x": 50.34, "y": -205.18 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_thigh": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 8.47 }, + { "time": 0.2666, "angle": 115.95 }, + { "time": 0.4, "angle": 180.66, "curve": "stepped" }, + { "time": 0.4333, "angle": 180.66 }, + { "time": 0.5, "angle": 155.22 }, + { "time": 0.6, "angle": 97.73 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": -27.37 }, + { "time": 0.2666, "angle": -35.1 }, + { "time": 0.4, "angle": -37.72, "curve": "stepped" }, + { "time": 0.4333, "angle": -37.72 }, + { "time": 0.5, "angle": -40.06 }, + { "time": 0.6, "angle": 2.76 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 70.45 }, + { "time": 0.2666, "angle": 155.34 }, + { "time": 0.4, "angle": 214.31, "curve": "stepped" }, + { "time": 0.4333, "angle": 214.31 }, + { "time": 0.5, "angle": 169.67 }, + { "time": 0.8, "angle": 83.27 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 18.93 }, + { "time": 0.2666, "angle": -21.04 }, + { "time": 0.4, "angle": -29.93, "curve": "stepped" }, + { "time": 0.4333, "angle": -29.93 }, + { "time": 0.5, "angle": -16.79 }, + { "time": 0.8, "angle": 7.77 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": -11.62 }, + { "time": 0.4, "angle": -45.59, "curve": "stepped" }, + { "time": 0.4333, "angle": -45.59 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4, "angle": -48.75, "curve": "stepped" }, + { "time": 0.4333, "angle": -48.75 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "gunTip": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + } + } + }, + "hit": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0.1666, "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.38 }, + { "time": 0.2333, "angle": 24.94 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 10.21 }, + { "time": 0.3333, "angle": -41.3 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -310.92, + "curve": [ 0.38, 0.53, 0.744, 1 ] + }, + { "time": 0.3333, "angle": -112.59 } + ], + "translate": [ + { "time": 0, "x": 7.23, "y": -13.13 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 36.99 }, + { "time": 0.3333, "angle": -28.64 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": 13.59 }, + { "time": 0.3333, "angle": 7.55 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 271.02, + "curve": [ 0.342, 0.36, 0.68, 0.71 ] + }, + { "time": 0.3333, "angle": -15.84 } + ], + "translate": [ + { "time": 0.3333, "x": -0.09, "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.75 } + ] + }, + "hip": { + "translate": [ + { "time": 0, "x": -75.54, "y": -78.03 }, + { "time": 0.2333, "x": -36.48, "y": 12.42 }, + { "time": 0.3333, "x": -36.48, "y": -2.99 } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 90.94, + "curve": [ 0.227, 0.26, 0.432, 1 ] + }, + { "time": 0.3333, "angle": 32.02 } + ], + "translate": [ + { "time": 0, "x": 7.21, "y": -4 } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 40.51, + "curve": [ 0.295, 0.3, 0.59, 0.99 ] + }, + { "time": 0.3333, "angle": 90.76 } + ], + "translate": [ + { "time": 0, "x": -1.96, "y": -0.32 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": -96.62 }, + { "time": 0.3333, "angle": -15.13 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 7.99 }, + { "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.26 } + ], + "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 } + ] + } + } + }, + "idle": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_open" }, + { "time": 1.6666, "name": "front_fist_open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_smile" }, + { "time": 1.6666, "name": "mouth_smile" } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { + "time": 0, + "angle": -5.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8333, + "angle": -9.65, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -5.61 } + ], + "translate": [ + { "time": 0, "x": -6.49, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -59.85, + "curve": [ 0.492, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -54.31, + "curve": [ 0.324, 0.11, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -59.85 } + ], + "translate": [ + { "time": 0, "x": -7.12, "y": -8.23 }, + { "time": 0.6666, "x": -6.32, "y": -8.3 }, + { "time": 1.6666, "x": -7.12, "y": -8.23 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 62.41, + "curve": [ 0.504, 0.02, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": 43.83, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": 62.41 } + ], + "translate": [ + { "time": 0, "x": -1.83, "y": -16.78 }, + { "time": 0.6666, "x": 0.34, "y": -15.23 }, + { "time": 1.6666, "x": -1.83, "y": -16.78 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.6666, "angle": 2.39 }, + { "time": 1.6666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -1.88, "y": -4.76, "curve": "stepped" }, + { "time": 1.6666, "x": -1.88, "y": -4.76 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0.64, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": -4.34, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": 0.64 } + ], + "translate": [ + { "time": 0, "x": -13.39, "y": 6.69, "curve": "stepped" }, + { "time": 1.6666, "x": -13.39, "y": 6.69 } + ], + "scale": [ + { + "time": 0, + "x": 0.896, + "y": 1, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "x": 0.825, + "y": 1, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "x": 0.896, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": -19.28, "curve": "stepped" }, + { "time": 1.6666, "angle": -19.28 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "x": 0.994, + "y": 1, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 30.5, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": 40.15, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": 30.5 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -23.83, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": -43.77, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": -23.83 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 5.13, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": 10.04, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": 5.13 } + ], + "scale": [ + { "time": 0, "x": 0.755, "y": 1.309, "curve": "stepped" }, + { "time": 1.6666, "x": 0.755, "y": 1.309 } + ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -6.63, + "y": -23.01, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "x": 6.27, + "y": -35, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "x": -6.63, "y": -23.01 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": -7.34, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": 3.85, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": -7.34 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": -17.16, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": 12.52, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -17.16 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": -5.51, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -3.12, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -5.51 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 45.46, + "curve": [ 0.492, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": 41.33, + "curve": [ 0.32, 0.1, 0.736, 0.91 ] + }, + { "time": 1.6666, "angle": 45.46 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -15.59, + "curve": [ 0.732, 0, 0.769, 0.99 ] + }, + { "time": 1.6666, "angle": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -6.84, + "curve": [ 0.492, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -14.63, + "curve": [ 0.324, 0.11, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -6.84 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "x": 0.689, + "y": 1.1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + } + } + }, + "jump": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_open" }, + { "time": 0.2, "name": "front_fist_closed" }, + { "time": 0.6666, "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.763, 1 ] + }, + { + "time": 0.2, + "angle": -35.83, + "curve": [ 0.761, 0, 0.75, 1 ] + }, + { "time": 0.4333, "angle": 127.74 }, + { + "time": 0.7333, + "angle": 48.18, + "curve": [ 0.227, 0.26, 0.432, 1 ] + }, + { "time": 0.8333, "angle": 25.35 }, + { "time": 0.9333, "angle": 45.37 }, + { "time": 1.0333, "angle": 38.12 }, + { "time": 1.1333, "angle": 25.35 }, + { "time": 1.3333, "angle": 91.53 } + ], + "translate": [ + { "time": 0, "x": -2.56, "y": 5.77 }, + { "time": 0.4333, "x": 8.3, "y": 7.98 }, + { "time": 0.7333, "x": 7.21, "y": -4 }, + { "time": 1.3333, "x": -2.56, "y": 5.77 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -42.63 }, + { "time": 0.2, "angle": -5.74 }, + { "time": 0.4333, "angle": -50.76 }, + { "time": 0.7333, "angle": 1.89 }, + { "time": 0.8333, "angle": 11.58 }, + { "time": 0.9666, "angle": -1.89 }, + { "time": 1.1333, "angle": 11.58 }, + { "time": 1.3333, "angle": -42.63 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -26.32 }, + { "time": 0.2, "angle": 121.44 }, + { "time": 0.4333, "angle": 70.54 }, + { + "time": 0.7333, + "angle": 79.89, + "curve": [ 0.295, 0.3, 0.59, 0.99 ] + }, + { "time": 0.8333, "angle": 99.12 }, + { "time": 0.9333, "angle": 74.05 }, + { "time": 1.0333, "angle": 98.04 }, + { "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "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.74 }, + { "time": 0.9333, "angle": -41.12 }, + { "time": 1.0333, "angle": -77.4 }, + { "time": 1.1333, "angle": -80.74 }, + { "time": 1.3333, "angle": -78.69 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.7333, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -22.61 }, + { "time": 0.2, "angle": -246.68 }, + { + "time": 0.6, + "angle": 11.28, + "curve": [ 0.246, 0, 0.633, 0.53 ] + }, + { + "time": 0.7333, + "angle": -57.45, + "curve": [ 0.38, 0.53, 0.744, 1 ] + }, + { "time": 0.8666, "angle": -112.59 }, + { "time": 0.9333, "angle": -102.17 }, + { "time": 1.0333, "angle": -108.61 }, + { "time": 1.1333, "angle": -112.59 }, + { "time": 1.3333, "angle": -22.61 } + ], + "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 66.46 }, + { "time": 0.2, "angle": 42.39 }, + { "time": 0.4333, "angle": 26.06 }, + { "time": 0.7333, "angle": 13.28 }, + { "time": 0.8666, "angle": -28.64 }, + { "time": 0.9333, "angle": -22.31 }, + { "time": 1.0333, "angle": -35.39 }, + { "time": 1.1333, "angle": -28.64 }, + { "time": 1.3333, "angle": 66.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -28.43 }, + { "time": 0.4333, "angle": -45.6 }, + { "time": 0.7333, "angle": -53.66 }, + { "time": 0.8666, "angle": 7.55 }, + { "time": 0.9333, "angle": 31.15 }, + { "time": 1.0333, "angle": -32.58 }, + { "time": 1.1333, "angle": 7.55 }, + { "time": 1.3333, "angle": -28.43 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 39.68 }, + { "time": 0.2, "angle": 276.57 }, + { "time": 0.3, "angle": 17.73 }, + { "time": 0.4333, "angle": 83.38 }, + { + "time": 0.6, + "angle": -4.71, + "curve": [ 0.246, 0, 0.633, 0.53 ] + }, + { + "time": 0.7333, + "angle": -69.63, + "curve": [ 0.342, 0.36, 0.68, 0.71 ] + }, + { + "time": 0.7666, + "angle": 321.47, + "curve": [ 0.333, 0.33, 0.667, 0.66 ] + }, + { + "time": 0.8, + "angle": 33.7, + "curve": [ 0.358, 0.64, 0.693, 1 ] + }, + { "time": 0.8666, "angle": 34.56 }, + { "time": 1.0333, "angle": 71.96 }, + { "time": 1.1333, "angle": 34.56 }, + { "time": 1.3333, "angle": 39.68 } + ], + "translate": [ + { "time": 0, "x": -3.1, "y": -4.86 }, + { "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.86 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 29.66 }, + { "time": 0.2, "angle": 45.06 }, + { "time": 0.4333, "angle": -4.34 }, + { "time": 0.7666, "angle": 61.68 }, + { "time": 0.8, "angle": 82.59 }, + { "time": 0.8666, "angle": 80.06 }, + { "time": 1.0333, "angle": 57.56 }, + { "time": 1.1333, "angle": 80.06 }, + { "time": 1.3333, "angle": 29.66 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 24.9 }, + { "time": 0.2, "angle": 16.31 }, + { "time": 0.4333, "angle": 7.44 }, + { "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.9 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 24.92 }, + { "time": 0.2, "angle": 10.36 }, + { "time": 0.4333, "angle": 28.65 }, + { "time": 0.7333, "angle": -2.65 }, + { "time": 0.8333, "angle": -28.94, "curve": "stepped" }, + { "time": 1.1333, "angle": -28.94 }, + { "time": 1.3333, "angle": 24.92 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": -34.51, + "y": -78.62, + "curve": [ 0.232, 1, 0.75, 1 ] + }, + { + "time": 0.2, + "x": -34.51, + "y": 182.5, + "curve": [ 0.232, 0.48, 0.598, 0.79 ] + }, + { + "time": 0.7666, + "x": -34.51, + "y": 596.22, + "curve": [ 0.329, 0.17, 0.66, 0.21 ] + }, + { "time": 1.1333, "x": -34.51, "y": 2.49 }, + { "time": 1.3333, "x": -34.51, "y": -78.62 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -90.62, + "curve": [ 0.416, 0.54, 0.743, 1 ] + }, + { + "time": 0.2, + "angle": -10.52, + "curve": [ 0.644, 0, 0.75, 1 ] + }, + { "time": 0.4333, "angle": -127.72 }, + { "time": 0.7333, "angle": -19.91 }, + { "time": 0.8333, "angle": -5.16 }, + { "time": 0.9333, "angle": -35.06 }, + { "time": 1.0333, "angle": -43.97 }, + { "time": 1.1333, "angle": -5.16 }, + { "time": 1.3333, "angle": -90.62 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": -0.79 }, + { "time": 0.0333, "angle": 16.27 }, + { "time": 0.0666, "angle": 23.52 }, + { "time": 0.1, "angle": 21.02 }, + { "time": 0.1333, "angle": 10.92 }, + { "time": 0.2, "angle": -38.45 }, + { "time": 0.4333, "angle": 6.62 }, + { "time": 0.7333, "angle": -11.51 }, + { "time": 1.0333, "angle": -22.91 }, + { "time": 1.3333, "angle": -0.79 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": -12.77 }, + { "time": 0.2, "angle": 17.05 }, + { "time": 0.4333, "angle": 19.45 }, + { "time": 0.7333, "angle": 2.67 }, + { "time": 1.0333, "angle": -28.49 }, + { "time": 1.3333, "angle": -12.77 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 6.18 }, + { "time": 0.2, "angle": 30.81 }, + { "time": 0.4333, "angle": 13.25 }, + { "time": 0.7333, "angle": 14.98 }, + { "time": 0.7666, "angle": 25.64 }, + { "time": 0.8, "angle": 20.62 }, + { "time": 0.8666, "angle": 64.52 }, + { "time": 1.0333, "angle": 8.59 }, + { "time": 1.1333, "angle": 64.52 }, + { "time": 1.3333, "angle": 6.18 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "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.195, 0.86, 0.75, 1 ] + }, + { "time": 0.0666, "angle": 46.07 }, + { "time": 0.1333, "angle": -20.28 }, + { "time": 0.2, "angle": -27.23 }, + { "time": 0.2666, "angle": -47.16 }, + { "time": 0.3333, "angle": -39.79 }, + { "time": 0.4, "angle": -25.86 }, + { "time": 0.4666, "angle": 14.35 }, + { "time": 0.5333, "angle": 55.62 }, + { "time": 0.6, "angle": 69.65 }, + { "time": 0.6666, "angle": 86.4 }, + { "time": 0.7333, "angle": 65.87 }, + { "time": 0.8, "angle": 42.05 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0333, "x": -5.79, "y": 11.15 }, + { "time": 0.0666, "x": -5.13, "y": 11.55 }, + { "time": 0.1333, "x": -7.7, "y": 8.98 }, + { "time": 0.5333, "x": -1.26, "y": 3.83 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -39.7 }, + { "time": 0.2, "angle": -57.29 }, + { "time": 0.4, "angle": -39.7 }, + { "time": 0.6, "angle": -57.29 }, + { "time": 0.8, "angle": -39.7 } + ], + "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -56.59 }, + { "time": 0.0666, "angle": -21.57 }, + { "time": 0.1333, "angle": 27.95 }, + { "time": 0.2, "angle": 42.42 }, + { "time": 0.2666, "angle": 62.37 }, + { "time": 0.3333, "angle": 45.42 }, + { "time": 0.4, "angle": 15.67 }, + { "time": 0.4666, "angle": 28.22 }, + { "time": 0.5333, "angle": -38.62 }, + { "time": 0.6, "angle": -53.26 }, + { "time": 0.6666, "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.4666, "x": -13.04, "y": 4.04 }, + { "time": 0.5, "x": -10.24, "y": 7.11 }, + { "time": 0.5333, "x": -9.01, "y": -5.15 }, + { "time": 0.6666, "x": -23.18, "y": -2.57 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": -74 }, + { "time": 0.0666, "angle": -83.38 }, + { "time": 0.1333, "angle": -106.69 }, + { "time": 0.2, "angle": -66.01 }, + { "time": 0.2666, "angle": -55.22 }, + { "time": 0.3333, "angle": -24.8 }, + { + "time": 0.4, + "angle": 18.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4666, "angle": -56.65 }, + { + "time": 0.5333, + "angle": -11.94, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6666, "angle": -41.26 }, + { "time": 0.7333, "angle": -43.6 }, + { "time": 0.8, "angle": -74 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -89.36 }, + { "time": 0.0666, "angle": -95.67 }, + { "time": 0.1333, "angle": -22 }, + { "time": 0.2, "angle": -316.04 }, + { "time": 0.2666, "angle": -274.94 }, + { "time": 0.3333, "angle": -273.74 }, + { "time": 0.4, "angle": -272.09 }, + { "time": 0.4666, "angle": -264.89 }, + { "time": 0.5333, "angle": -320.09 }, + { "time": 0.6, "angle": -50.83 }, + { "time": 0.6666, "angle": -81.72 }, + { "time": 0.7333, "angle": -83.92 }, + { "time": 0.8, "angle": -89.36 } + ], + "translate": [ + { "time": 0, "x": 6.24, "y": 10.05 }, + { "time": 0.2666, "x": 4.95, "y": -13.13 }, + { "time": 0.6, "x": -2.43, "y": 1.94 }, + { "time": 0.8, "x": 6.24, "y": 10.05 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 33.43 }, + { "time": 0.0666, "angle": 20.53 }, + { "time": 0.1333, "angle": 15.26 }, + { "time": 0.2, "angle": 19.28 }, + { "time": 0.2666, "angle": 22.62 }, + { "time": 0.3333, "angle": 37.29 }, + { "time": 0.4, "angle": 41.53 }, + { "time": 0.4666, "angle": 31.73 }, + { "time": 0.5333, "angle": 67.45 }, + { "time": 0.6666, "angle": 39.77 }, + { "time": 0.7333, "angle": 30.95 }, + { "time": 0.8, "angle": 33.43 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -19.75 }, + { "time": 0.0666, "angle": -37.11 }, + { "time": 0.1333, "angle": -50.79 }, + { "time": 0.2666, "angle": -12.69 }, + { "time": 0.3333, "angle": 3.01 }, + { "time": 0.4333, "angle": 12.05 }, + { "time": 0.5333, "angle": 13.25 }, + { "time": 0.8, "angle": -19.75 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 68.68 }, + { "time": 0.0666, "angle": 73.89 }, + { "time": 0.1333, "angle": -9.64 }, + { "time": 0.2, "angle": 284.27 }, + { "time": 0.2666, "angle": 283.29 }, + { "time": 0.3333, "angle": 278.28 }, + { "time": 0.4, "angle": 271.02 }, + { "time": 0.4666, "angle": 263.2 }, + { "time": 0.5333, "angle": 314.25 }, + { "time": 0.6, "angle": 16.83 }, + { "time": 0.6666, "angle": 70.35 }, + { "time": 0.7333, "angle": 73.53 }, + { "time": 0.8, "angle": 68.68 } + ], + "translate": [ + { "time": 0, "x": -2.57, "y": -8.89 }, + { "time": 0.1333, "x": -4.68, "y": 7.2 }, + { "time": 0.2, "x": 21.73, "y": 51.17 }, + { "time": 0.6, "x": 4.33, "y": 2.05 }, + { "time": 0.8, "x": -2.57, "y": -8.89 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 31.04 }, + { "time": 0.0666, "angle": 28.28 }, + { "time": 0.1333, "angle": 49.36 }, + { "time": 0.2, "angle": 59.37 }, + { "time": 0.2666, "angle": 8.56 }, + { "time": 0.3333, "angle": 9.38 }, + { "time": 0.4, "angle": 11.51 }, + { "time": 0.4666, "angle": 7.22 }, + { "time": 0.5333, "angle": -18.44 }, + { "time": 0.6, "angle": 11.44 }, + { "time": 0.6666, "angle": 9.99 }, + { "time": 0.7333, "angle": 8.28 }, + { "time": 0.8, "angle": 31.04 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.2, "angle": 13.58 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.6, "angle": 13.58 }, + { "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.1, "angle": 12.34 }, + { "time": 0.2, "angle": 25.55 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.5, "angle": 12.34 }, + { "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -62.47, "y": -23.1 }, + { + "time": 0.0666, + "x": -62.47, + "y": -38.51, + "curve": [ 0.244, 0.04, 0.75, 1 ] + }, + { + "time": 0.2666, + "x": -62.47, + "y": 22.28, + "curve": [ 0.17, 0.52, 0.75, 1 ] + }, + { "time": 0.4, "x": -62.47, "y": -23.1 }, + { "time": 0.4333, "x": -62.47, "y": -24.59 }, + { + "time": 0.4666, + "x": -62.47, + "y": -43.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6666, "x": -62.47, "y": 22.28 }, + { "time": 0.8, "x": -62.47, "y": -23.1 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.481, 0.01, 0.75, 1 ] + }, + { "time": 0.0666, "angle": -64.42 }, + { + "time": 0.1333, + "angle": -20.59, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.2666, "angle": -62.51 }, + { "time": 0.3333, "angle": -79.74 }, + { "time": 0.4, "angle": -78.28 }, + { + "time": 0.4666, + "angle": -118.96, + "curve": [ 0.93, 0, 0.952, 0.95 ] + }, + { "time": 0.6, "angle": -88.95 }, + { "time": 0.6666, "angle": -79.09 }, + { "time": 0.7333, "angle": -47.77 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { + "time": 0.0333, + "angle": -21.13, + "curve": [ 0.121, 0.23, 0.75, 1 ] + }, + { "time": 0.0666, "angle": 17.64 }, + { "time": 0.1, "angle": 29.92 }, + { "time": 0.1333, "angle": 16.44 }, + { "time": 0.2, "angle": -29.22 }, + { "time": 0.2666, "angle": -1.61 }, + { "time": 0.3333, "angle": -10.22 }, + { "time": 0.4666, "angle": -15.99 }, + { "time": 0.6, "angle": 9.03 }, + { "time": 0.7333, "angle": 17.32 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0666, "angle": -12.04 }, + { "time": 0.1333, "angle": -0.87 }, + { "time": 0.2, "angle": 25.81 }, + { "time": 0.2666, "angle": 4.71 }, + { + "time": 0.4, + "angle": 18.09, + "curve": [ 0.281, 0.73, 0.75, 1 ] + }, + { "time": 0.4333, "angle": -1.7 }, + { "time": 0.4666, "angle": 27.12 }, + { "time": 0.5, "angle": 38.83 }, + { "time": 0.5333, "angle": 30.76 }, + { "time": 0.5666, "angle": -20.49 }, + { "time": 0.6, "angle": -30.8 }, + { "time": 0.6666, "angle": -1.31 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 24.72 }, + { "time": 0.5, "angle": -11.87 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + } + }, + "events": [ + { "time": 0, "name": "footstep" }, + { "time": 0.4, "name": "footstep", "int": 1 } + ] + }, + "shoot": { + "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": { + "attachment": [ + { "time": 0.1333, "name": "muzzle" }, + { "time": 0.2666, "name": null } + ], + "color": [ + { + "time": 0.1333, + "color": "ffffff00", + "curve": [ 0.118, 0.99, 0.75, 1 ] + }, + { + "time": 0.1666, + "color": "ffffffff", + "curve": [ 0.821, 0, 0.909, 0.89 ] + }, + { "time": 0.2666, "color": "ffffff00" } + ] + } + }, + "bones": { + "front_fist": { + "scale": [ + { "time": 0.1333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "gunTip": { + "translate": [ + { "time": 0.1333, "x": 0, "y": 0 }, + { "time": 0.2, "x": 20.93, "y": 1.57 } + ], + "scale": [ + { "time": 0.1333, "x": 1, "y": 1 }, + { "time": 0.2, "x": 1.247, "y": 1.516 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 1.9 } + ], + "translate": [ + { + "time": 0, + "x": 7.95, + "y": 5.84, + "curve": [ 0, 0.3, 0.678, 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.678, 1 ] + }, + { "time": 0.3, "x": -5.99, "y": -3.71 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 62.3 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0, 0.3, 0.678, 1 ] + }, + { "time": 0.3, "x": 2.81, "y": 11.41 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + } + } + }, + "test": { + "slots": { + "front_foot": { + "color": [ + { "time": 0.6666, "color": "ffffffff" }, + { "time": 1.3333, "color": "ff0700ff" } + ] + }, + "gun": { + "color": [ + { "time": 0, "color": "ffffffff", "curve": "stepped" }, + { "time": 0.6666, "color": "ffffffff" }, + { "time": 1.3333, "color": "32ff00ff" } + ] + }, + "rear_foot": { + "color": [ + { "time": 0.6666, "color": "ffffffff" }, + { "time": 1.3333, "color": "ff0700ff" } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.3333, "angle": -20.72 }, + { "time": 0.6666, "angle": -32.41 }, + { "time": 1, "angle": -5.3 }, + { "time": 1.3333, "angle": 24.96 }, + { "time": 1.6666, "angle": 15.61 }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.172, 0.37, 0.574, 0.73 ] + }, + { + "time": 0.1666, + "x": 144.19, + "y": -77.59, + "curve": [ 0.372, 0.61, 0.765, 1 ] + }, + { + "time": 0.3333, + "x": 217.61, + "y": -192.63, + "curve": [ 0.282, 0, 0.624, 0.31 ] + }, + { + "time": 0.5, + "x": 181.21, + "y": -365.66, + "curve": [ 0.313, 0.21, 0.654, 0.54 ] + }, + { + "time": 0.6666, + "x": 20.09, + "y": -500.4, + "curve": [ 0.147, 0.27, 0.75, 1 ] + }, + { "time": 0.8333, "x": -194.24, "y": -341.84 }, + { "time": 1, "x": -307.93, "y": -114 }, + { + "time": 1.1666, + "x": -330.38, + "y": 121.42, + "curve": [ 0.25, 0, 0.764, 0.48 ] + }, + { + "time": 1.3333, + "x": -240.42, + "y": 335.66, + "curve": [ 0.229, 0.37, 0.58, 0.73 ] + }, + { + "time": 1.5, + "x": -56.12, + "y": 288.06, + "curve": [ 0.296, 0.6, 0.641, 1 ] + }, + { + "time": 1.6666, + "x": 87.63, + "y": 191.33, + "curve": [ 0.238, 0, 0.626, 0.39 ] + }, + { + "time": 1.8333, + "x": 60.62, + "y": 95.14, + "curve": [ 0.41, 0.26, 0.803, 0.62 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + } + }, + "draworder": [ + { + "time": 0.6666, + "offsets": [ + { "slot": "head", "offset": -9 }, + { "slot": "eye", "offset": -9 }, + { "slot": "mouth", "offset": -12 }, + { "slot": "goggles", "offset": -12 } + ] + }, + { "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.39 }, + { "time": 0.2, "angle": -7.94 }, + { "time": 0.3, "angle": -16.94 }, + { "time": 0.4, "angle": -28.62 }, + { "time": 0.5, "angle": -19.3 }, + { "time": 0.6, "angle": -3.08 }, + { "time": 0.7, "angle": 29.51 }, + { "time": 0.8, "angle": 15.79 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.4, "x": -1.18, "y": 0.54 }, + { "time": 0.5, "x": 0.11, "y": 0.41 }, + { "time": 0.6, "x": 9.48, "y": 0.27 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": 5.12 }, + { "time": 0.1, "angle": -20.87 }, + { "time": 0.2, "angle": 13.37 }, + { "time": 0.3, "angle": 15.98 }, + { "time": 0.4, "angle": 5.94 }, + { "time": 0.5, "angle": -26.76 }, + { "time": 0.7, "angle": -55.44 }, + { "time": 0.8, "angle": 5.12 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -34.38 }, + { "time": 0.1, "angle": -30.32 }, + { "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.26 }, + { "time": 0.8, "angle": -34.38 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.4, "x": 4.08, "y": -9.53 }, + { "time": 0.5, "x": 0, "y": 0 }, + { "time": 0.7, "x": -21.14, "y": -9.6 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 14.26 }, + { "time": 0.1, "angle": -17.3 }, + { "time": 0.2, "angle": -12.67 }, + { "time": 0.3, "angle": -58.89 }, + { "time": 0.4, "angle": 15.95 }, + { "time": 0.5, "angle": -9 }, + { "time": 0.6, "angle": 26.06 }, + { "time": 0.7, "angle": 21.85 }, + { "time": 0.8, "angle": 14.26 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1, "x": 0.951, "y": 1 }, + { "time": 0.5, "x": 0.975, "y": 1 }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 10.13 }, + { "time": 0.1, "angle": 12.27 }, + { "time": 0.2, "angle": -2.94 }, + { "time": 0.3, "angle": 6.29 }, + { "time": 0.4, "angle": 13.45 }, + { "time": 0.5, "angle": -3.57 }, + { "time": 0.6, "angle": -0.97 }, + { "time": 0.7, "angle": 2.97 }, + { "time": 0.8, "angle": 10.13 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -23.74 }, + { "time": 0.4, "angle": -320.57 }, + { "time": 0.8, "angle": -23.74 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 11.62 }, + { "time": 0.1, "angle": 19.36 }, + { "time": 0.4, "angle": 345.26 }, + { "time": 0.5, "angle": 343.44 }, + { "time": 0.8, "angle": 11.62 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -12.11 }, + { "time": 0.1666, "angle": -17.16 }, + { "time": 0.4, "angle": -12.11 }, + { "time": 0.5666, "angle": -15.81 }, + { "time": 0.8, "angle": -12.11 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "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 } + ], + "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 6.97 }, + { "time": 0.1666, "angle": 8.02 }, + { "time": 0.2666, "angle": 12.65 }, + { "time": 0.4, "angle": 6.97 }, + { "time": 0.5666, "angle": 8.02 }, + { "time": 0.6666, "angle": 12.65 }, + { "time": 0.8, "angle": 6.97 } + ], + "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": -23.93, + "y": 3.22, + "curve": [ 0.518, 0.03, 0.807, 0.61 ] + }, + { + "time": 0.1, + "x": -23.93, + "y": -9.24, + "curve": [ 0.135, 0.33, 0.601, 0.99 ] + }, + { + "time": 0.2, + "x": -23.93, + "y": 4.35, + "curve": [ 0.204, 0.68, 0.75, 1 ] + }, + { + "time": 0.3, + "x": -23.93, + "y": 2.38, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "x": -23.93, + "y": -2.5, + "curve": [ 0.692, 0.01, 0.75, 1 ] + }, + { + "time": 0.5, + "x": -23.93, + "y": -10.32, + "curve": [ 0.235, 0.77, 0.75, 1 ] + }, + { + "time": 0.6, + "x": -23.93, + "y": 4.35, + "curve": [ 0.287, 0.37, 0.718, 0.76 ] + }, + { + "time": 0.7, + "x": -23.93, + "y": 10.34, + "curve": [ 0.615, 0, 0.75, 1 ] + }, + { "time": 0.8, "x": -23.93, "y": 3.22 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4, "angle": 20.59 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 12.49 }, + { "time": 0.1, "angle": -8.34 }, + { "time": 0.2, "angle": -6.17 }, + { "time": 0.3, "angle": -0.75 }, + { "time": 0.3333, "angle": 3.89 }, + { "time": 0.4, "angle": 10.22 }, + { "time": 0.5, "angle": 11.44 }, + { "time": 0.6, "angle": -0.33 }, + { "time": 0.7, "angle": 0.15 }, + { "time": 0.8, "angle": 12.49 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 3.58 }, + { "time": 0.1, "angle": 5.51 }, + { "time": 0.4, "angle": -22.77 }, + { "time": 0.5, "angle": -9.65 }, + { "time": 0.8, "angle": 3.58 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "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 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": -24.06, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.1, + "angle": -10.94, + "curve": [ 0.381, 0.54, 0.742, 1 ] + }, + { + "time": 0.4, + "angle": 25.34, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -27.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.8, "angle": -24.06 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-corona/examples/spineboy-atlas/spineboy.lua b/spine-corona/examples/spineboy-atlas/spineboy.lua new file mode 100644 index 000000000..db1abbdf8 --- /dev/null +++ b/spine-corona/examples/spineboy-atlas/spineboy.lua @@ -0,0 +1,87 @@ + +-- This example shows simple usage of displaying a skeleton with queued animations. + +local spine = require "spine-corona.spine" + + + +local json = spine.SkeletonJson.new() +json.scale = 0.6 +local skeletonData = json:readSkeletonDataFile("examples/spineboy-atlas/spineboy.json") + +local skeleton = spine.Skeleton.new(skeletonData) + +local sprites = spine.GetAtlasSprites( "examples/spineboy-atlas/spineboy.atlas" ) +sprites.ATLAS_HELPER_setup(skeleton) + +skeleton.group.x = display.contentWidth * 0.75 +skeleton.group.y = display.contentHeight * 0.9 +skeleton.flipX = false +skeleton.flipY = false +skeleton.debug = true -- Omit or set to false to not draw debug lines on top of the images. +skeleton.debugAabb = true +skeleton:setToSetupPose() + +local bounds = spine.SkeletonBounds.new() + +-- AnimationStateData defines crossfade durations between animations. +local stateData = spine.AnimationStateData.new(skeletonData) +stateData:setMix("walk", "jump", 0.2) +stateData:setMix("jump", "run", 0.2) + +-- AnimationState has a queue of animations and can apply them with crossfading. +local state = spine.AnimationState.new(stateData) +-- state:setAnimationByName(0, "test") +state:setAnimationByName(0, "walk", true) +state:addAnimationByName(0, "jump", false, 3) +state:addAnimationByName(0, "run", true, 0) + +state.onStart = function (trackIndex) + -- print(trackIndex.." start: "..state:getCurrent(trackIndex).animation.name) +end +state.onEnd = function (trackIndex) + -- print(trackIndex.." end: "..state:getCurrent(trackIndex).animation.name) +end +state.onComplete = function (trackIndex, loopCount) + -- print(trackIndex.." complete: "..state:getCurrent(trackIndex).animation.name..", "..loopCount) +end +state.onEvent = function (trackIndex, event) + -- print(trackIndex.." event: "..state:getCurrent(trackIndex).animation.name..", "..event.data.name..", "..event.intValue..", "..event.floatValue..", '"..(event.stringValue or "").."'") +end + +local lastTime = 0 +local touchX = 999999 +local touchY = 999999 +local headSlot = skeleton:findSlot("head") +Runtime:addEventListener("enterFrame", function (event) + -- Compute time in seconds since last frame. + local currentTime = event.time / 1000 + local delta = currentTime - lastTime + lastTime = currentTime + + -- Bounding box hit detection. + bounds:update(skeleton, true) + if bounds:containsPoint(touchX, touchY) then + headSlot.g = 0; + headSlot.b = 0; + else + headSlot.g = 1; + headSlot.b = 1; + end + + -- Update the state with the delta time, apply it, and update the world transforms. + state:update(delta) + state:apply(skeleton) + skeleton:updateWorldTransform() +end) + +Runtime:addEventListener("touch", function (event) + if event.phase ~= "ended" and event.phase ~= "cancelled" then + -- Make the coordinates relative to the skeleton's group. + touchX = event.x - skeleton.group.x + touchY = skeleton.group.y - event.y + else + touchX = 999999 + touchY = 999999 + end +end) diff --git a/spine-corona/examples/spineboy-atlas/spineboy.png b/spine-corona/examples/spineboy-atlas/spineboy.png new file mode 100644 index 000000000..dce2fe3e2 Binary files /dev/null and b/spine-corona/examples/spineboy-atlas/spineboy.png differ diff --git a/spine-corona/main.lua b/spine-corona/main.lua index abc21fe60..3964c676b 100644 --- a/spine-corona/main.lua +++ b/spine-corona/main.lua @@ -1,4 +1,5 @@ require "examples.spineboy.spineboy" +-- require "examples.spineboy-atlas.spineboy" -- require "examples.spineboy.spineboy-mesh" -- require "examples.goblins.goblins" -- require "examples.dragon.dragon" diff --git a/spine-corona/spine-corona/spine.lua b/spine-corona/spine-corona/spine.lua index fe4bed0d7..ee68aa40d 100755 --- a/spine-corona/spine-corona/spine.lua +++ b/spine-corona/spine-corona/spine.lua @@ -54,6 +54,7 @@ spine.EventData = require "spine-lua.EventData" spine.Event = require "spine-lua.Event" spine.SkeletonBounds = require "spine-lua.SkeletonBounds" spine.BlendMode = require "spine-lua.BlendMode" +spine.Atlas = require "spine-lua.Atlas" spine.utils.readFile = function (fileName, base) if not base then base = system.ResourceDirectory end @@ -327,4 +328,91 @@ function spine.Skeleton.new (skeletonData, group) return self end + +function spine.GetAtlasSprites ( name, location ) + + local dir = name + if dir:match(".-/.-") then + dir = string.gsub(dir, "(.*/)(.*)", "%1") + end + + if string.sub(dir, -1) ~= "/" then + dir = dir .. "/" + end + + local pages = spine.Atlas.parse( name, location ) + + local sprites = {} + + for _,page in ipairs(pages) do + local options = { frames={} } + if page.size then + options.sheetContentWidth, options.sheetContentHeight = unpack( page.size ) + end + for i,region in ipairs(page.regions) do + sprites[region.name] = { frame=i, region=region, page=page } + local frame = { } + frame.x, frame.y = unpack(region.xy) + frame.width, frame.height = unpack(region.size) + if region.rotate then + frame.width, frame.height = frame.height, frame.width + end + if region.offset[1] ~= 0 or region.offset[2] ~= 0 or region.size[1] ~= region.orig[1] or region.size[2] ~= region.orig[2] then + print("WARNING: Corona currently does not srtipping whitespaces in Spine atlases (atlas: " .. name .. ", sprite: " .. region.name .. ")") + end + table.insert( options.frames, frame ) + end + + local oldMag, oldMin = display.getDefault( "magTextureFilter" ), display.getDefault( "minTextureFilter" ) + local newMag, newMin = "linear", "linear" + if string.find("Nearest", page.filter[1]) then + newMin = "nearest" + end + if string.find("Nearest", page.filter[2]) then + newMag = "nearest" + end + display.setDefault( "magTextureFilter", newMag ) + display.setDefault( "minTextureFilter", newMin ) + page.sheet = graphics.newImageSheet( dir..page.name, options ) + display.setDefault( "magTextureFilter", oldMag ) + display.setDefault( "minTextureFilter", oldMin ) + end + + function sprites.ATLAS_HELPER_createImage(_, attachment) + local sprite = sprites[attachment.name] + local obj = display.newRect( 0, 0, 100, 100 ) + if sprite then + obj.fill = { type="image", sheet=sprite.page.sheet, frame=sprite.frame} + if sprite.region.rotate then + local fill = obj.fill + if fill then + fill.rotation = 90 + end + end + end + return obj + end + function sprites.ATLAS_HELPER_createMesh(_, attachment, meshParameters) + local sprite = sprites[attachment.name] + local obj = display.newMesh(meshParameters) + if sprite then + obj.fill = { type="image", sheet=sprite.page.sheet, frame=sprite.frame} + if sprite.region.rotate then + local fill = obj.fill + if fill then + fill.rotation = 90 + end + end + end + return obj + end + + function sprites.ATLAS_HELPER_setup(skeleton) + skeleton.createImage = sprites.ATLAS_HELPER_createImage + skeleton.createMesh = sprites.ATLAS_HELPER_createMesh + end + + return sprites +end + return spine diff --git a/spine-corona/spineboy-atlas/spineboy.atlas b/spine-corona/spineboy-atlas/spineboy.atlas new file mode 100644 index 000000000..19c0934b1 --- /dev/null +++ b/spine-corona/spineboy-atlas/spineboy.atlas @@ -0,0 +1,194 @@ + +spineboy.png +format: RGBA8888 +filter: Linear,Linear +repeat: none +eye_indifferent + rotate: true + xy: 389, 5 + size: 56, 53 + orig: 56, 53 + offset: 0, 0 + index: -1 +eye_surprised + rotate: false + xy: 580, 34 + size: 56, 53 + orig: 56, 53 + offset: 0, 0 + index: -1 +front_bracer + rotate: false + xy: 732, 85 + size: 35, 48 + orig: 35, 48 + offset: 0, 0 + index: -1 +front_fist_closed + rotate: false + xy: 556, 91 + size: 45, 49 + orig: 45, 49 + offset: 0, 0 + index: -1 +front_fist_open + rotate: false + xy: 668, 32 + size: 52, 52 + orig: 52, 52 + offset: 0, 0 + index: -1 +front_foot + rotate: false + xy: 924, 201 + size: 76, 41 + orig: 76, 41 + offset: 0, 0 + index: -1 +front_foot_bend1 + rotate: false + xy: 845, 200 + size: 77, 42 + orig: 77, 42 + offset: 0, 0 + index: -1 +front_foot_bend2 + rotate: false + xy: 778, 186 + size: 65, 56 + orig: 65, 56 + offset: 0, 0 + index: -1 +front_shin + rotate: true + xy: 444, 91 + size: 49, 110 + orig: 49, 110 + offset: 0, 0 + index: -1 +front_thigh + rotate: true + xy: 603, 89 + size: 29, 67 + orig: 29, 67 + offset: 0, 0 + index: -1 +front_upper_arm + rotate: true + xy: 672, 86 + size: 32, 58 + orig: 32, 58 + offset: 0, 0 + index: -1 +goggles + rotate: false + xy: 444, 142 + size: 157, 100 + orig: 157, 100 + offset: 0, 0 + index: -1 +gun + rotate: false + xy: 603, 120 + size: 126, 122 + orig: 126, 122 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 279, 63 + size: 163, 179 + orig: 163, 179 + offset: 0, 0 + index: -1 +mouth_grind + rotate: false + xy: 845, 163 + size: 56, 35 + orig: 56, 35 + offset: 0, 0 + index: -1 +mouth_oooo + rotate: false + xy: 842, 126 + size: 56, 35 + orig: 56, 35 + offset: 0, 0 + index: -1 +mouth_smile + rotate: false + xy: 769, 97 + size: 56, 35 + orig: 56, 35 + offset: 0, 0 + index: -1 +muzzle + rotate: false + xy: 2, 2 + size: 275, 240 + orig: 277, 240 + offset: 0, 0 + index: -1 +neck + rotate: false + xy: 903, 173 + size: 22, 25 + orig: 22, 25 + offset: 0, 0 + index: -1 +rear_bracer + rotate: false + xy: 722, 40 + size: 34, 43 + orig: 34, 43 + offset: 0, 0 + index: -1 +rear_foot + rotate: false + xy: 444, 11 + size: 68, 36 + orig: 68, 36 + offset: 0, 0 + index: -1 +rear_foot_bend1 + rotate: false + xy: 444, 49 + size: 70, 40 + orig: 70, 40 + offset: 0, 0 + index: -1 +rear_foot_bend2 + rotate: false + xy: 778, 134 + size: 62, 50 + orig: 62, 50 + offset: 0, 0 + index: -1 +rear_shin + rotate: false + xy: 731, 135 + size: 45, 107 + orig: 45, 107 + offset: 0, 0 + index: -1 +rear_thigh + rotate: true + xy: 516, 50 + size: 39, 62 + orig: 39, 62 + offset: 0, 0 + index: -1 +rear_upper_arm + rotate: false + xy: 638, 35 + size: 28, 52 + orig: 28, 52 + offset: 0, 0 + index: -1 +torso + rotate: true + xy: 279, 2 + size: 59, 108 + orig: 59, 108 + offset: 0, 0 + index: -1 diff --git a/spine-corona/spineboy-atlas/spineboy.json b/spine-corona/spineboy-atlas/spineboy.json new file mode 100644 index 000000000..2e422677a --- /dev/null +++ b/spine-corona/spineboy-atlas/spineboy.json @@ -0,0 +1,2419 @@ +{ +"bones": [ + { "name": "hip", "y": 247.47 }, + { "name": "front_thigh", "parent": "hip", "length": 74.8, "x": -17.45, "y": -11.64, "rotation": -95.51, "color": "00ff04ff" }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "x": 8.91, "y": -5.62, "rotation": -72.54, "color": "ff000dff" }, + { "name": "torso", "parent": "hip", "length": 127.55, "x": -1.61, "y": 4.9, "rotation": 103.82, "color": "e0da19ff" }, + { + "name": "front_shin", + "parent": "front_thigh", + "length": 128.76, + "x": 78.69, + "y": 1.6, + "rotation": -2.21, + "inheritScale": false, + "color": "00ff04ff" + }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "x": 103.75, "y": 19.32, "rotation": 168.37, "color": "00ff04ff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "x": 127.49, "y": -0.3, "rotation": -31.53, "color": "e0da19ff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "x": 86.1, "y": -1.32, "rotation": -19.83, "color": "ff000dff" }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "x": 92.35, "y": -19.22, "rotation": -169.55, "color": "ff000dff" }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.57, + "x": 68.8, + "y": -0.68, + "rotation": 18.29, + "color": "00ff04ff" + }, + { "name": "front_foot", "parent": "front_shin", "length": 91.34, "x": 128.75, "y": -0.33, "rotation": 77.9, "color": "00ff04ff" }, + { "name": "head", "parent": "neck", "length": 263.57, "x": 27.66, "y": -0.25, "rotation": 23.18, "color": "e0da19ff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "x": 51.35, "rotation": 23.15, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "x": 121.45, "y": -0.75, "rotation": 69.3, "color": "ff000dff" }, + { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "x": 40.56, "y": 0.19, "rotation": 12.43, "color": "00ff04ff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "x": 34.42, "y": -0.45, "rotation": 5.34, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "x": 201.04, "y": 52.13, "rotation": 6.83, "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": "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", "additive": true }, + { "name": "head-bb", "bone": "head", "attachment": "head" } +], +"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.67, "rotation": 79.59, "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": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 126, "height": 69 }, + "front_foot_bend1": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 128, "height": 70 }, + "front_foot_bend2": { "x": 16.07, "y": 13.83, "rotation": 18.68, "width": 108, "height": 93 } + }, + "front_shin": { + "front_shin": { "x": 55.11, "y": -3.54, "rotation": 96.59, "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.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 } + }, + "goggles": { + "goggles": { "x": 97.07, "y": 6.54, "rotation": -70.63, "width": 261, "height": 166 } + }, + "gun": { + "gun": { "x": 77.3, "y": 16.4, "rotation": 60.82, "width": 210, "height": 203 } + }, + "head": { + "head": { "x": 128.95, "y": 0.29, "rotation": -70.63, "width": 271, "height": 298 } + }, + "head-bb": { + "head": { + "type": "boundingbox", + "vertices": [ -19.143097, -70.30209, 40.80313, -118.074234, 257.77155, -115.61827, 285.16193, 57.18005, 120.77191, 164.95125, -5.067627, 76.94907 ] + } + }, + "mouth": { + "mouth_grind": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth_smile": { "x": 23.68, "y": -32.23, "rotation": -70.63, "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.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.57, "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.1, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 } + }, + "rear_upper_arm": { + "rear_upper_arm": { "x": 21.12, "y": 4.08, "rotation": 89.32, "width": 47, "height": 87 } + }, + "torso": { + "torso": { "x": 63.61, "y": 7.12, "rotation": -94.53, "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.4666, "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.82 }, + { "time": 0.1333, "angle": -28.74 }, + { "time": 0.2333, "angle": 11.42 }, + { "time": 0.3333, "angle": -50.24 }, + { "time": 0.4, "angle": -72.66, "curve": "stepped" }, + { "time": 0.4333, "angle": -72.66 }, + { "time": 0.5, "angle": -20.24 }, + { "time": 0.5666, "angle": -85.28, "curve": "stepped" }, + { "time": 0.9333, "angle": -85.28, "curve": "stepped" }, + { "time": 2.2333, "angle": -85.28 }, + { "time": 2.5, "angle": -51.96, "curve": "stepped" }, + { "time": 4.5333, "angle": -51.96 }, + { "time": 4.6666, "angle": -85.28 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": -2.82 }, + { "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.92 }, + { "time": 0.5666, "angle": 47.94, "curve": "stepped" }, + { "time": 2.2333, "angle": 47.94 }, + { "time": 2.5, "angle": 18.5, "curve": "stepped" }, + { "time": 4.5333, "angle": 18.5 }, + { "time": 4.6666, "angle": 47.94 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -8.61 }, + { "time": 0.1333, "angle": 28.19 }, + { "time": 0.2666, "angle": -280.19 }, + { "time": 0.4, "angle": -237.22, "curve": "stepped" }, + { "time": 0.4333, "angle": -237.22 }, + { "time": 0.5, "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 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.2333, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -38.85 }, + { "time": 0.1333, "angle": -299.58 }, + { "time": 0.2666, "angle": -244.74 }, + { "time": 0.4, "angle": -292.35 }, + { "time": 0.4333, "angle": -315.84 }, + { "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.7666, "angle": -285.1 }, + { "time": 4.6666, "angle": -290.68 }, + { "time": 4.8, "angle": 8.61 }, + { "time": 4.8666, "angle": 10.94 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": -44.69 }, + { "time": 0.1333, "angle": 112.26 }, + { "time": 0.2666, "angle": 129.07 }, + { "time": 0.4, "angle": 134.94, "curve": "stepped" }, + { "time": 0.4333, "angle": 134.94 }, + { "time": 0.5666, "angle": 172.6, "curve": "stepped" }, + { "time": 0.9333, "angle": 172.6, "curve": "stepped" }, + { "time": 2.2333, "angle": 172.6 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 21.88 }, + { "time": 0.1333, "angle": 11.48 }, + { "time": 0.2666, "angle": -18.81 }, + { "time": 0.4, "angle": -18.92 }, + { "time": 0.4333, "angle": -18.28 }, + { "time": 0.5, "angle": 60.61 }, + { "time": 0.7, "angle": -18.87, "curve": "stepped" }, + { "time": 2.2333, "angle": -18.87 }, + { "time": 2.7, "angle": -1.95, "curve": "stepped" }, + { "time": 4.6666, "angle": -1.95 }, + { "time": 4.8, "angle": 34.55 }, + { "time": 4.9333, "angle": -18.74 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -2.33 }, + { "time": 0.2666, "angle": 26.34 }, + { "time": 0.7, "angle": -6.07, "curve": "stepped" }, + { "time": 2.2333, "angle": -6.07 }, + { "time": 2.7, "angle": 5.72, "curve": "stepped" }, + { "time": 4.6666, "angle": 5.72 }, + { "time": 4.8666, "angle": -6.52 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 10.36 }, + { "time": 0.1333, "angle": -23.12 }, + { "time": 0.2666, "angle": -23.11 }, + { "time": 0.4, "angle": -23.16, "curve": "stepped" }, + { "time": 0.4333, "angle": -23.16 }, + { "time": 0.5666, "angle": -23.2, "curve": "stepped" }, + { "time": 0.9333, "angle": -23.2, "curve": "stepped" }, + { "time": 2.2333, "angle": -23.2 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": -2.78 }, + { "time": 0.1333, "angle": -24.58 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.9333, "angle": 0, "curve": "stepped" }, + { "time": 2.2333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.2, "x": 50.34, "y": 151.73 }, + { "time": 0.4, "x": 5.16, "y": -119.64, "curve": "stepped" }, + { "time": 0.4333, "x": 5.16, "y": -119.64 }, + { "time": 0.5, "x": 50.34, "y": -205.18, "curve": "stepped" }, + { "time": 0.8, "x": 50.34, "y": -205.18, "curve": "stepped" }, + { "time": 0.9333, "x": 50.34, "y": -205.18, "curve": "stepped" }, + { "time": 2.2333, "x": 50.34, "y": -205.18 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_thigh": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 8.47 }, + { "time": 0.2666, "angle": 115.95 }, + { "time": 0.4, "angle": 180.66, "curve": "stepped" }, + { "time": 0.4333, "angle": 180.66 }, + { "time": 0.5, "angle": 155.22 }, + { "time": 0.6, "angle": 97.73 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": -27.37 }, + { "time": 0.2666, "angle": -35.1 }, + { "time": 0.4, "angle": -37.72, "curve": "stepped" }, + { "time": 0.4333, "angle": -37.72 }, + { "time": 0.5, "angle": -40.06 }, + { "time": 0.6, "angle": 2.76 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 70.45 }, + { "time": 0.2666, "angle": 155.34 }, + { "time": 0.4, "angle": 214.31, "curve": "stepped" }, + { "time": 0.4333, "angle": 214.31 }, + { "time": 0.5, "angle": 169.67 }, + { "time": 0.8, "angle": 83.27 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 18.93 }, + { "time": 0.2666, "angle": -21.04 }, + { "time": 0.4, "angle": -29.93, "curve": "stepped" }, + { "time": 0.4333, "angle": -29.93 }, + { "time": 0.5, "angle": -16.79 }, + { "time": 0.8, "angle": 7.77 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": -11.62 }, + { "time": 0.4, "angle": -45.59, "curve": "stepped" }, + { "time": 0.4333, "angle": -45.59 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4, "angle": -48.75, "curve": "stepped" }, + { "time": 0.4333, "angle": -48.75 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "gunTip": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + } + } + }, + "hit": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0.1666, "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.38 }, + { "time": 0.2333, "angle": 24.94 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 10.21 }, + { "time": 0.3333, "angle": -41.3 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -310.92, + "curve": [ 0.38, 0.53, 0.744, 1 ] + }, + { "time": 0.3333, "angle": -112.59 } + ], + "translate": [ + { "time": 0, "x": 7.23, "y": -13.13 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 36.99 }, + { "time": 0.3333, "angle": -28.64 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": 13.59 }, + { "time": 0.3333, "angle": 7.55 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 271.02, + "curve": [ 0.342, 0.36, 0.68, 0.71 ] + }, + { "time": 0.3333, "angle": -15.84 } + ], + "translate": [ + { "time": 0.3333, "x": -0.09, "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.75 } + ] + }, + "hip": { + "translate": [ + { "time": 0, "x": -75.54, "y": -78.03 }, + { "time": 0.2333, "x": -36.48, "y": 12.42 }, + { "time": 0.3333, "x": -36.48, "y": -2.99 } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 90.94, + "curve": [ 0.227, 0.26, 0.432, 1 ] + }, + { "time": 0.3333, "angle": 32.02 } + ], + "translate": [ + { "time": 0, "x": 7.21, "y": -4 } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 40.51, + "curve": [ 0.295, 0.3, 0.59, 0.99 ] + }, + { "time": 0.3333, "angle": 90.76 } + ], + "translate": [ + { "time": 0, "x": -1.96, "y": -0.32 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": -96.62 }, + { "time": 0.3333, "angle": -15.13 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 7.99 }, + { "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.26 } + ], + "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 } + ] + } + } + }, + "idle": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_open" }, + { "time": 1.6666, "name": "front_fist_open" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_smile" }, + { "time": 1.6666, "name": "mouth_smile" } + ] + } + }, + "bones": { + "torso": { + "rotate": [ + { + "time": 0, + "angle": -5.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8333, + "angle": -9.65, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -5.61 } + ], + "translate": [ + { "time": 0, "x": -6.49, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -59.85, + "curve": [ 0.492, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -54.31, + "curve": [ 0.324, 0.11, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -59.85 } + ], + "translate": [ + { "time": 0, "x": -7.12, "y": -8.23 }, + { "time": 0.6666, "x": -6.32, "y": -8.3 }, + { "time": 1.6666, "x": -7.12, "y": -8.23 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 62.41, + "curve": [ 0.504, 0.02, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": 43.83, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": 62.41 } + ], + "translate": [ + { "time": 0, "x": -1.83, "y": -16.78 }, + { "time": 0.6666, "x": 0.34, "y": -15.23 }, + { "time": 1.6666, "x": -1.83, "y": -16.78 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.6666, "angle": 2.39 }, + { "time": 1.6666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -1.88, "y": -4.76, "curve": "stepped" }, + { "time": 1.6666, "x": -1.88, "y": -4.76 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 0.64, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": -4.34, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": 0.64 } + ], + "translate": [ + { "time": 0, "x": -13.39, "y": 6.69, "curve": "stepped" }, + { "time": 1.6666, "x": -13.39, "y": 6.69 } + ], + "scale": [ + { + "time": 0, + "x": 0.896, + "y": 1, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "x": 0.825, + "y": 1, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "x": 0.896, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": -19.28, "curve": "stepped" }, + { "time": 1.6666, "angle": -19.28 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "x": 0.994, + "y": 1, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 30.5, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": 40.15, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": 30.5 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { + "time": 0, + "angle": -23.83, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": -43.77, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": -23.83 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { + "time": 0, + "angle": 5.13, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": 10.04, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": 5.13 } + ], + "scale": [ + { "time": 0, "x": 0.755, "y": 1.309, "curve": "stepped" }, + { "time": 1.6666, "x": 0.755, "y": 1.309 } + ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -6.63, + "y": -23.01, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "x": 6.27, + "y": -35, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "x": -6.63, "y": -23.01 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { + "time": 0, + "angle": -7.34, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "angle": 3.85, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "angle": -7.34 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { + "time": 0, + "angle": -17.16, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": 12.52, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -17.16 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": -5.51, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -3.12, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -5.51 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { + "time": 0, + "angle": 45.46, + "curve": [ 0.492, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": 41.33, + "curve": [ 0.32, 0.1, 0.736, 0.91 ] + }, + { "time": 1.6666, "angle": 45.46 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -15.59, + "curve": [ 0.732, 0, 0.769, 0.99 ] + }, + { "time": 1.6666, "angle": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -6.84, + "curve": [ 0.492, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -14.63, + "curve": [ 0.324, 0.11, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -6.84 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "x": 0.689, + "y": 1.1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "x": 1, "y": 1 } + ] + } + } + }, + "jump": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_open" }, + { "time": 0.2, "name": "front_fist_closed" }, + { "time": 0.6666, "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.763, 1 ] + }, + { + "time": 0.2, + "angle": -35.83, + "curve": [ 0.761, 0, 0.75, 1 ] + }, + { "time": 0.4333, "angle": 127.74 }, + { + "time": 0.7333, + "angle": 48.18, + "curve": [ 0.227, 0.26, 0.432, 1 ] + }, + { "time": 0.8333, "angle": 25.35 }, + { "time": 0.9333, "angle": 45.37 }, + { "time": 1.0333, "angle": 38.12 }, + { "time": 1.1333, "angle": 25.35 }, + { "time": 1.3333, "angle": 91.53 } + ], + "translate": [ + { "time": 0, "x": -2.56, "y": 5.77 }, + { "time": 0.4333, "x": 8.3, "y": 7.98 }, + { "time": 0.7333, "x": 7.21, "y": -4 }, + { "time": 1.3333, "x": -2.56, "y": 5.77 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -42.63 }, + { "time": 0.2, "angle": -5.74 }, + { "time": 0.4333, "angle": -50.76 }, + { "time": 0.7333, "angle": 1.89 }, + { "time": 0.8333, "angle": 11.58 }, + { "time": 0.9666, "angle": -1.89 }, + { "time": 1.1333, "angle": 11.58 }, + { "time": 1.3333, "angle": -42.63 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -26.32 }, + { "time": 0.2, "angle": 121.44 }, + { "time": 0.4333, "angle": 70.54 }, + { + "time": 0.7333, + "angle": 79.89, + "curve": [ 0.295, 0.3, 0.59, 0.99 ] + }, + { "time": 0.8333, "angle": 99.12 }, + { "time": 0.9333, "angle": 74.05 }, + { "time": 1.0333, "angle": 98.04 }, + { "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "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.74 }, + { "time": 0.9333, "angle": -41.12 }, + { "time": 1.0333, "angle": -77.4 }, + { "time": 1.1333, "angle": -80.74 }, + { "time": 1.3333, "angle": -78.69 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.7333, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -22.61 }, + { "time": 0.2, "angle": -246.68 }, + { + "time": 0.6, + "angle": 11.28, + "curve": [ 0.246, 0, 0.633, 0.53 ] + }, + { + "time": 0.7333, + "angle": -57.45, + "curve": [ 0.38, 0.53, 0.744, 1 ] + }, + { "time": 0.8666, "angle": -112.59 }, + { "time": 0.9333, "angle": -102.17 }, + { "time": 1.0333, "angle": -108.61 }, + { "time": 1.1333, "angle": -112.59 }, + { "time": 1.3333, "angle": -22.61 } + ], + "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 66.46 }, + { "time": 0.2, "angle": 42.39 }, + { "time": 0.4333, "angle": 26.06 }, + { "time": 0.7333, "angle": 13.28 }, + { "time": 0.8666, "angle": -28.64 }, + { "time": 0.9333, "angle": -22.31 }, + { "time": 1.0333, "angle": -35.39 }, + { "time": 1.1333, "angle": -28.64 }, + { "time": 1.3333, "angle": 66.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -28.43 }, + { "time": 0.4333, "angle": -45.6 }, + { "time": 0.7333, "angle": -53.66 }, + { "time": 0.8666, "angle": 7.55 }, + { "time": 0.9333, "angle": 31.15 }, + { "time": 1.0333, "angle": -32.58 }, + { "time": 1.1333, "angle": 7.55 }, + { "time": 1.3333, "angle": -28.43 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 39.68 }, + { "time": 0.2, "angle": 276.57 }, + { "time": 0.3, "angle": 17.73 }, + { "time": 0.4333, "angle": 83.38 }, + { + "time": 0.6, + "angle": -4.71, + "curve": [ 0.246, 0, 0.633, 0.53 ] + }, + { + "time": 0.7333, + "angle": -69.63, + "curve": [ 0.342, 0.36, 0.68, 0.71 ] + }, + { + "time": 0.7666, + "angle": 321.47, + "curve": [ 0.333, 0.33, 0.667, 0.66 ] + }, + { + "time": 0.8, + "angle": 33.7, + "curve": [ 0.358, 0.64, 0.693, 1 ] + }, + { "time": 0.8666, "angle": 34.56 }, + { "time": 1.0333, "angle": 71.96 }, + { "time": 1.1333, "angle": 34.56 }, + { "time": 1.3333, "angle": 39.68 } + ], + "translate": [ + { "time": 0, "x": -3.1, "y": -4.86 }, + { "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.86 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 29.66 }, + { "time": 0.2, "angle": 45.06 }, + { "time": 0.4333, "angle": -4.34 }, + { "time": 0.7666, "angle": 61.68 }, + { "time": 0.8, "angle": 82.59 }, + { "time": 0.8666, "angle": 80.06 }, + { "time": 1.0333, "angle": 57.56 }, + { "time": 1.1333, "angle": 80.06 }, + { "time": 1.3333, "angle": 29.66 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 24.9 }, + { "time": 0.2, "angle": 16.31 }, + { "time": 0.4333, "angle": 7.44 }, + { "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.9 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 24.92 }, + { "time": 0.2, "angle": 10.36 }, + { "time": 0.4333, "angle": 28.65 }, + { "time": 0.7333, "angle": -2.65 }, + { "time": 0.8333, "angle": -28.94, "curve": "stepped" }, + { "time": 1.1333, "angle": -28.94 }, + { "time": 1.3333, "angle": 24.92 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": -34.51, + "y": -78.62, + "curve": [ 0.232, 1, 0.75, 1 ] + }, + { + "time": 0.2, + "x": -34.51, + "y": 182.5, + "curve": [ 0.232, 0.48, 0.598, 0.79 ] + }, + { + "time": 0.7666, + "x": -34.51, + "y": 596.22, + "curve": [ 0.329, 0.17, 0.66, 0.21 ] + }, + { "time": 1.1333, "x": -34.51, "y": 2.49 }, + { "time": 1.3333, "x": -34.51, "y": -78.62 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -90.62, + "curve": [ 0.416, 0.54, 0.743, 1 ] + }, + { + "time": 0.2, + "angle": -10.52, + "curve": [ 0.644, 0, 0.75, 1 ] + }, + { "time": 0.4333, "angle": -127.72 }, + { "time": 0.7333, "angle": -19.91 }, + { "time": 0.8333, "angle": -5.16 }, + { "time": 0.9333, "angle": -35.06 }, + { "time": 1.0333, "angle": -43.97 }, + { "time": 1.1333, "angle": -5.16 }, + { "time": 1.3333, "angle": -90.62 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": -0.79 }, + { "time": 0.0333, "angle": 16.27 }, + { "time": 0.0666, "angle": 23.52 }, + { "time": 0.1, "angle": 21.02 }, + { "time": 0.1333, "angle": 10.92 }, + { "time": 0.2, "angle": -38.45 }, + { "time": 0.4333, "angle": 6.62 }, + { "time": 0.7333, "angle": -11.51 }, + { "time": 1.0333, "angle": -22.91 }, + { "time": 1.3333, "angle": -0.79 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": -12.77 }, + { "time": 0.2, "angle": 17.05 }, + { "time": 0.4333, "angle": 19.45 }, + { "time": 0.7333, "angle": 2.67 }, + { "time": 1.0333, "angle": -28.49 }, + { "time": 1.3333, "angle": -12.77 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 6.18 }, + { "time": 0.2, "angle": 30.81 }, + { "time": 0.4333, "angle": 13.25 }, + { "time": 0.7333, "angle": 14.98 }, + { "time": 0.7666, "angle": 25.64 }, + { "time": 0.8, "angle": 20.62 }, + { "time": 0.8666, "angle": 64.52 }, + { "time": 1.0333, "angle": 8.59 }, + { "time": 1.1333, "angle": 64.52 }, + { "time": 1.3333, "angle": 6.18 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "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.195, 0.86, 0.75, 1 ] + }, + { "time": 0.0666, "angle": 46.07 }, + { "time": 0.1333, "angle": -20.28 }, + { "time": 0.2, "angle": -27.23 }, + { "time": 0.2666, "angle": -47.16 }, + { "time": 0.3333, "angle": -39.79 }, + { "time": 0.4, "angle": -25.86 }, + { "time": 0.4666, "angle": 14.35 }, + { "time": 0.5333, "angle": 55.62 }, + { "time": 0.6, "angle": 69.65 }, + { "time": 0.6666, "angle": 86.4 }, + { "time": 0.7333, "angle": 65.87 }, + { "time": 0.8, "angle": 42.05 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0333, "x": -5.79, "y": 11.15 }, + { "time": 0.0666, "x": -5.13, "y": 11.55 }, + { "time": 0.1333, "x": -7.7, "y": 8.98 }, + { "time": 0.5333, "x": -1.26, "y": 3.83 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -39.7 }, + { "time": 0.2, "angle": -57.29 }, + { "time": 0.4, "angle": -39.7 }, + { "time": 0.6, "angle": -57.29 }, + { "time": 0.8, "angle": -39.7 } + ], + "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -56.59 }, + { "time": 0.0666, "angle": -21.57 }, + { "time": 0.1333, "angle": 27.95 }, + { "time": 0.2, "angle": 42.42 }, + { "time": 0.2666, "angle": 62.37 }, + { "time": 0.3333, "angle": 45.42 }, + { "time": 0.4, "angle": 15.67 }, + { "time": 0.4666, "angle": 28.22 }, + { "time": 0.5333, "angle": -38.62 }, + { "time": 0.6, "angle": -53.26 }, + { "time": 0.6666, "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.4666, "x": -13.04, "y": 4.04 }, + { "time": 0.5, "x": -10.24, "y": 7.11 }, + { "time": 0.5333, "x": -9.01, "y": -5.15 }, + { "time": 0.6666, "x": -23.18, "y": -2.57 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": -74 }, + { "time": 0.0666, "angle": -83.38 }, + { "time": 0.1333, "angle": -106.69 }, + { "time": 0.2, "angle": -66.01 }, + { "time": 0.2666, "angle": -55.22 }, + { "time": 0.3333, "angle": -24.8 }, + { + "time": 0.4, + "angle": 18.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4666, "angle": -56.65 }, + { + "time": 0.5333, + "angle": -11.94, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6666, "angle": -41.26 }, + { "time": 0.7333, "angle": -43.6 }, + { "time": 0.8, "angle": -74 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -89.36 }, + { "time": 0.0666, "angle": -95.67 }, + { "time": 0.1333, "angle": -22 }, + { "time": 0.2, "angle": -316.04 }, + { "time": 0.2666, "angle": -274.94 }, + { "time": 0.3333, "angle": -273.74 }, + { "time": 0.4, "angle": -272.09 }, + { "time": 0.4666, "angle": -264.89 }, + { "time": 0.5333, "angle": -320.09 }, + { "time": 0.6, "angle": -50.83 }, + { "time": 0.6666, "angle": -81.72 }, + { "time": 0.7333, "angle": -83.92 }, + { "time": 0.8, "angle": -89.36 } + ], + "translate": [ + { "time": 0, "x": 6.24, "y": 10.05 }, + { "time": 0.2666, "x": 4.95, "y": -13.13 }, + { "time": 0.6, "x": -2.43, "y": 1.94 }, + { "time": 0.8, "x": 6.24, "y": 10.05 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 33.43 }, + { "time": 0.0666, "angle": 20.53 }, + { "time": 0.1333, "angle": 15.26 }, + { "time": 0.2, "angle": 19.28 }, + { "time": 0.2666, "angle": 22.62 }, + { "time": 0.3333, "angle": 37.29 }, + { "time": 0.4, "angle": 41.53 }, + { "time": 0.4666, "angle": 31.73 }, + { "time": 0.5333, "angle": 67.45 }, + { "time": 0.6666, "angle": 39.77 }, + { "time": 0.7333, "angle": 30.95 }, + { "time": 0.8, "angle": 33.43 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -19.75 }, + { "time": 0.0666, "angle": -37.11 }, + { "time": 0.1333, "angle": -50.79 }, + { "time": 0.2666, "angle": -12.69 }, + { "time": 0.3333, "angle": 3.01 }, + { "time": 0.4333, "angle": 12.05 }, + { "time": 0.5333, "angle": 13.25 }, + { "time": 0.8, "angle": -19.75 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 68.68 }, + { "time": 0.0666, "angle": 73.89 }, + { "time": 0.1333, "angle": -9.64 }, + { "time": 0.2, "angle": 284.27 }, + { "time": 0.2666, "angle": 283.29 }, + { "time": 0.3333, "angle": 278.28 }, + { "time": 0.4, "angle": 271.02 }, + { "time": 0.4666, "angle": 263.2 }, + { "time": 0.5333, "angle": 314.25 }, + { "time": 0.6, "angle": 16.83 }, + { "time": 0.6666, "angle": 70.35 }, + { "time": 0.7333, "angle": 73.53 }, + { "time": 0.8, "angle": 68.68 } + ], + "translate": [ + { "time": 0, "x": -2.57, "y": -8.89 }, + { "time": 0.1333, "x": -4.68, "y": 7.2 }, + { "time": 0.2, "x": 21.73, "y": 51.17 }, + { "time": 0.6, "x": 4.33, "y": 2.05 }, + { "time": 0.8, "x": -2.57, "y": -8.89 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 31.04 }, + { "time": 0.0666, "angle": 28.28 }, + { "time": 0.1333, "angle": 49.36 }, + { "time": 0.2, "angle": 59.37 }, + { "time": 0.2666, "angle": 8.56 }, + { "time": 0.3333, "angle": 9.38 }, + { "time": 0.4, "angle": 11.51 }, + { "time": 0.4666, "angle": 7.22 }, + { "time": 0.5333, "angle": -18.44 }, + { "time": 0.6, "angle": 11.44 }, + { "time": 0.6666, "angle": 9.99 }, + { "time": 0.7333, "angle": 8.28 }, + { "time": 0.8, "angle": 31.04 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.2, "angle": 13.58 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.6, "angle": 13.58 }, + { "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.1, "angle": 12.34 }, + { "time": 0.2, "angle": 25.55 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.5, "angle": 12.34 }, + { "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -62.47, "y": -23.1 }, + { + "time": 0.0666, + "x": -62.47, + "y": -38.51, + "curve": [ 0.244, 0.04, 0.75, 1 ] + }, + { + "time": 0.2666, + "x": -62.47, + "y": 22.28, + "curve": [ 0.17, 0.52, 0.75, 1 ] + }, + { "time": 0.4, "x": -62.47, "y": -23.1 }, + { "time": 0.4333, "x": -62.47, "y": -24.59 }, + { + "time": 0.4666, + "x": -62.47, + "y": -43.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6666, "x": -62.47, "y": 22.28 }, + { "time": 0.8, "x": -62.47, "y": -23.1 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.481, 0.01, 0.75, 1 ] + }, + { "time": 0.0666, "angle": -64.42 }, + { + "time": 0.1333, + "angle": -20.59, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.2666, "angle": -62.51 }, + { "time": 0.3333, "angle": -79.74 }, + { "time": 0.4, "angle": -78.28 }, + { + "time": 0.4666, + "angle": -118.96, + "curve": [ 0.93, 0, 0.952, 0.95 ] + }, + { "time": 0.6, "angle": -88.95 }, + { "time": 0.6666, "angle": -79.09 }, + { "time": 0.7333, "angle": -47.77 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { + "time": 0.0333, + "angle": -21.13, + "curve": [ 0.121, 0.23, 0.75, 1 ] + }, + { "time": 0.0666, "angle": 17.64 }, + { "time": 0.1, "angle": 29.92 }, + { "time": 0.1333, "angle": 16.44 }, + { "time": 0.2, "angle": -29.22 }, + { "time": 0.2666, "angle": -1.61 }, + { "time": 0.3333, "angle": -10.22 }, + { "time": 0.4666, "angle": -15.99 }, + { "time": 0.6, "angle": 9.03 }, + { "time": 0.7333, "angle": 17.32 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0666, "angle": -12.04 }, + { "time": 0.1333, "angle": -0.87 }, + { "time": 0.2, "angle": 25.81 }, + { "time": 0.2666, "angle": 4.71 }, + { + "time": 0.4, + "angle": 18.09, + "curve": [ 0.281, 0.73, 0.75, 1 ] + }, + { "time": 0.4333, "angle": -1.7 }, + { "time": 0.4666, "angle": 27.12 }, + { "time": 0.5, "angle": 38.83 }, + { "time": 0.5333, "angle": 30.76 }, + { "time": 0.5666, "angle": -20.49 }, + { "time": 0.6, "angle": -30.8 }, + { "time": 0.6666, "angle": -1.31 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 24.72 }, + { "time": 0.5, "angle": -11.87 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + } + }, + "events": [ + { "time": 0, "name": "footstep" }, + { "time": 0.4, "name": "footstep", "int": 1 } + ] + }, + "shoot": { + "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": { + "attachment": [ + { "time": 0.1333, "name": "muzzle" }, + { "time": 0.2666, "name": null } + ], + "color": [ + { + "time": 0.1333, + "color": "ffffff00", + "curve": [ 0.118, 0.99, 0.75, 1 ] + }, + { + "time": 0.1666, + "color": "ffffffff", + "curve": [ 0.821, 0, 0.909, 0.89 ] + }, + { "time": 0.2666, "color": "ffffff00" } + ] + } + }, + "bones": { + "front_fist": { + "scale": [ + { "time": 0.1333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1 } + ] + }, + "gunTip": { + "translate": [ + { "time": 0.1333, "x": 0, "y": 0 }, + { "time": 0.2, "x": 20.93, "y": 1.57 } + ], + "scale": [ + { "time": 0.1333, "x": 1, "y": 1 }, + { "time": 0.2, "x": 1.247, "y": 1.516 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 1.9 } + ], + "translate": [ + { + "time": 0, + "x": 7.95, + "y": 5.84, + "curve": [ 0, 0.3, 0.678, 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.678, 1 ] + }, + { "time": 0.3, "x": -5.99, "y": -3.71 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 62.3 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0, 0.3, 0.678, 1 ] + }, + { "time": 0.3, "x": 2.81, "y": 11.41 }, + { "time": 0.4, "x": 0, "y": 0 } + ] + } + } + }, + "test": { + "slots": { + "front_foot": { + "color": [ + { "time": 0.6666, "color": "ffffffff" }, + { "time": 1.3333, "color": "ff0700ff" } + ] + }, + "gun": { + "color": [ + { "time": 0, "color": "ffffffff", "curve": "stepped" }, + { "time": 0.6666, "color": "ffffffff" }, + { "time": 1.3333, "color": "32ff00ff" } + ] + }, + "rear_foot": { + "color": [ + { "time": 0.6666, "color": "ffffffff" }, + { "time": 1.3333, "color": "ff0700ff" } + ] + } + }, + "bones": { + "head": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.3333, "angle": -20.72 }, + { "time": 0.6666, "angle": -32.41 }, + { "time": 1, "angle": -5.3 }, + { "time": 1.3333, "angle": 24.96 }, + { "time": 1.6666, "angle": 15.61 }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.172, 0.37, 0.574, 0.73 ] + }, + { + "time": 0.1666, + "x": 144.19, + "y": -77.59, + "curve": [ 0.372, 0.61, 0.765, 1 ] + }, + { + "time": 0.3333, + "x": 217.61, + "y": -192.63, + "curve": [ 0.282, 0, 0.624, 0.31 ] + }, + { + "time": 0.5, + "x": 181.21, + "y": -365.66, + "curve": [ 0.313, 0.21, 0.654, 0.54 ] + }, + { + "time": 0.6666, + "x": 20.09, + "y": -500.4, + "curve": [ 0.147, 0.27, 0.75, 1 ] + }, + { "time": 0.8333, "x": -194.24, "y": -341.84 }, + { "time": 1, "x": -307.93, "y": -114 }, + { + "time": 1.1666, + "x": -330.38, + "y": 121.42, + "curve": [ 0.25, 0, 0.764, 0.48 ] + }, + { + "time": 1.3333, + "x": -240.42, + "y": 335.66, + "curve": [ 0.229, 0.37, 0.58, 0.73 ] + }, + { + "time": 1.5, + "x": -56.12, + "y": 288.06, + "curve": [ 0.296, 0.6, 0.641, 1 ] + }, + { + "time": 1.6666, + "x": 87.63, + "y": 191.33, + "curve": [ 0.238, 0, 0.626, 0.39 ] + }, + { + "time": 1.8333, + "x": 60.62, + "y": 95.14, + "curve": [ 0.41, 0.26, 0.803, 0.62 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + } + }, + "draworder": [ + { + "time": 0.6666, + "offsets": [ + { "slot": "head", "offset": -9 }, + { "slot": "eye", "offset": -9 }, + { "slot": "mouth", "offset": -12 }, + { "slot": "goggles", "offset": -12 } + ] + }, + { "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.39 }, + { "time": 0.2, "angle": -7.94 }, + { "time": 0.3, "angle": -16.94 }, + { "time": 0.4, "angle": -28.62 }, + { "time": 0.5, "angle": -19.3 }, + { "time": 0.6, "angle": -3.08 }, + { "time": 0.7, "angle": 29.51 }, + { "time": 0.8, "angle": 15.79 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.4, "x": -1.18, "y": 0.54 }, + { "time": 0.5, "x": 0.11, "y": 0.41 }, + { "time": 0.6, "x": 9.48, "y": 0.27 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.4, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": 5.12 }, + { "time": 0.1, "angle": -20.87 }, + { "time": 0.2, "angle": 13.37 }, + { "time": 0.3, "angle": 15.98 }, + { "time": 0.4, "angle": 5.94 }, + { "time": 0.5, "angle": -26.76 }, + { "time": 0.7, "angle": -55.44 }, + { "time": 0.8, "angle": 5.12 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -34.38 }, + { "time": 0.1, "angle": -30.32 }, + { "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.26 }, + { "time": 0.8, "angle": -34.38 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.4, "x": 4.08, "y": -9.53 }, + { "time": 0.5, "x": 0, "y": 0 }, + { "time": 0.7, "x": -21.14, "y": -9.6 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 14.26 }, + { "time": 0.1, "angle": -17.3 }, + { "time": 0.2, "angle": -12.67 }, + { "time": 0.3, "angle": -58.89 }, + { "time": 0.4, "angle": 15.95 }, + { "time": 0.5, "angle": -9 }, + { "time": 0.6, "angle": 26.06 }, + { "time": 0.7, "angle": 21.85 }, + { "time": 0.8, "angle": 14.26 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1, "x": 0.951, "y": 1 }, + { "time": 0.5, "x": 0.975, "y": 1 }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 10.13 }, + { "time": 0.1, "angle": 12.27 }, + { "time": 0.2, "angle": -2.94 }, + { "time": 0.3, "angle": 6.29 }, + { "time": 0.4, "angle": 13.45 }, + { "time": 0.5, "angle": -3.57 }, + { "time": 0.6, "angle": -0.97 }, + { "time": 0.7, "angle": 2.97 }, + { "time": 0.8, "angle": 10.13 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -23.74 }, + { "time": 0.4, "angle": -320.57 }, + { "time": 0.8, "angle": -23.74 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 11.62 }, + { "time": 0.1, "angle": 19.36 }, + { "time": 0.4, "angle": 345.26 }, + { "time": 0.5, "angle": 343.44 }, + { "time": 0.8, "angle": 11.62 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -12.11 }, + { "time": 0.1666, "angle": -17.16 }, + { "time": 0.4, "angle": -12.11 }, + { "time": 0.5666, "angle": -15.81 }, + { "time": 0.8, "angle": -12.11 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "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 } + ], + "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 6.97 }, + { "time": 0.1666, "angle": 8.02 }, + { "time": 0.2666, "angle": 12.65 }, + { "time": 0.4, "angle": 6.97 }, + { "time": 0.5666, "angle": 8.02 }, + { "time": 0.6666, "angle": 12.65 }, + { "time": 0.8, "angle": 6.97 } + ], + "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": -23.93, + "y": 3.22, + "curve": [ 0.518, 0.03, 0.807, 0.61 ] + }, + { + "time": 0.1, + "x": -23.93, + "y": -9.24, + "curve": [ 0.135, 0.33, 0.601, 0.99 ] + }, + { + "time": 0.2, + "x": -23.93, + "y": 4.35, + "curve": [ 0.204, 0.68, 0.75, 1 ] + }, + { + "time": 0.3, + "x": -23.93, + "y": 2.38, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "x": -23.93, + "y": -2.5, + "curve": [ 0.692, 0.01, 0.75, 1 ] + }, + { + "time": 0.5, + "x": -23.93, + "y": -10.32, + "curve": [ 0.235, 0.77, 0.75, 1 ] + }, + { + "time": 0.6, + "x": -23.93, + "y": 4.35, + "curve": [ 0.287, 0.37, 0.718, 0.76 ] + }, + { + "time": 0.7, + "x": -23.93, + "y": 10.34, + "curve": [ 0.615, 0, 0.75, 1 ] + }, + { "time": 0.8, "x": -23.93, "y": 3.22 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4, "angle": 20.59 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 12.49 }, + { "time": 0.1, "angle": -8.34 }, + { "time": 0.2, "angle": -6.17 }, + { "time": 0.3, "angle": -0.75 }, + { "time": 0.3333, "angle": 3.89 }, + { "time": 0.4, "angle": 10.22 }, + { "time": 0.5, "angle": 11.44 }, + { "time": 0.6, "angle": -0.33 }, + { "time": 0.7, "angle": 0.15 }, + { "time": 0.8, "angle": 12.49 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 3.58 }, + { "time": 0.1, "angle": 5.51 }, + { "time": 0.4, "angle": -22.77 }, + { "time": 0.5, "angle": -9.65 }, + { "time": 0.8, "angle": 3.58 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "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 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { + "time": 0, + "angle": -24.06, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.1, + "angle": -10.94, + "curve": [ 0.381, 0.54, 0.742, 1 ] + }, + { + "time": 0.4, + "angle": 25.34, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -27.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.8, "angle": -24.06 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-corona/spineboy-atlas/spineboy.lua b/spine-corona/spineboy-atlas/spineboy.lua new file mode 100644 index 000000000..869336b1c --- /dev/null +++ b/spine-corona/spineboy-atlas/spineboy.lua @@ -0,0 +1,87 @@ + +-- This example shows simple usage of displaying a skeleton with queued animations. + +local spine = require "spine-corona.spine" + +local atlasLoader = require "spine-atlas-loader" + +local sprites = atlasLoader.load( "spineboy.atlas", "examples/spineboy-atlas/" ) + +local json = spine.SkeletonJson.new() +json.scale = 0.6 +local skeletonData = json:readSkeletonDataFile("examples/spineboy-atlas/spineboy.json") + +local skeleton = spine.Skeleton.new(skeletonData) +sprites.setupImageFunctions(skeleton) + +skeleton.group.x = display.contentWidth * 0.75 +skeleton.group.y = display.contentHeight * 0.9 +skeleton.flipX = false +skeleton.flipY = false +skeleton.debug = true -- Omit or set to false to not draw debug lines on top of the images. +skeleton.debugAabb = true +skeleton:setToSetupPose() + +local bounds = spine.SkeletonBounds.new() + +-- AnimationStateData defines crossfade durations between animations. +local stateData = spine.AnimationStateData.new(skeletonData) +stateData:setMix("walk", "jump", 0.2) +stateData:setMix("jump", "run", 0.2) + +-- AnimationState has a queue of animations and can apply them with crossfading. +local state = spine.AnimationState.new(stateData) +-- state:setAnimationByName(0, "test") +state:setAnimationByName(0, "walk", true) +state:addAnimationByName(0, "jump", false, 3) +state:addAnimationByName(0, "run", true, 0) + +state.onStart = function (trackIndex) + print(trackIndex.." start: "..state:getCurrent(trackIndex).animation.name) +end +state.onEnd = function (trackIndex) + print(trackIndex.." end: "..state:getCurrent(trackIndex).animation.name) +end +state.onComplete = function (trackIndex, loopCount) + print(trackIndex.." complete: "..state:getCurrent(trackIndex).animation.name..", "..loopCount) +end +state.onEvent = function (trackIndex, event) + print(trackIndex.." event: "..state:getCurrent(trackIndex).animation.name..", "..event.data.name..", "..event.intValue..", "..event.floatValue..", '"..(event.stringValue or "").."'") +end + +local lastTime = 0 +local touchX = 999999 +local touchY = 999999 +local headSlot = skeleton:findSlot("head") +Runtime:addEventListener("enterFrame", function (event) + -- Compute time in seconds since last frame. + local currentTime = as * event.time / 1000 + local delta = currentTime - lastTime + lastTime = currentTime + + -- Bounding box hit detection. + bounds:update(skeleton, true) + if bounds:containsPoint(touchX, touchY) then + headSlot.g = 0; + headSlot.b = 0; + else + headSlot.g = 1; + headSlot.b = 1; + end + + -- Update the state with the delta time, apply it, and update the world transforms. + state:update(delta) + state:apply(skeleton) + skeleton:updateWorldTransform() +end) + +Runtime:addEventListener("touch", function (event) + if event.phase ~= "ended" and event.phase ~= "cancelled" then + -- Make the coordinates relative to the skeleton's group. + touchX = event.x - skeleton.group.x + touchY = skeleton.group.y - event.y + else + touchX = 999999 + touchY = 999999 + end +end) diff --git a/spine-corona/spineboy-atlas/spineboy.png b/spine-corona/spineboy-atlas/spineboy.png new file mode 100644 index 000000000..dce2fe3e2 Binary files /dev/null and b/spine-corona/spineboy-atlas/spineboy.png differ diff --git a/spine-csharp/Properties/AssemblyInfo.cs b/spine-csharp/Properties/AssemblyInfo.cs index 871268e17..7d6ed8df0 100644 --- a/spine-csharp/Properties/AssemblyInfo.cs +++ b/spine-csharp/Properties/AssemblyInfo.cs @@ -8,8 +8,8 @@ using System.Runtime.InteropServices; [assembly: AssemblyTitle("spine-csharp")] [assembly: AssemblyProduct("spine-csharp")] [assembly: AssemblyDescription("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2013")] +[assembly: AssemblyCompany("Esoteric Software")] +[assembly: AssemblyCopyright("Copyright © Esoteric Software 2013-2016")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/spine-csharp/README.md b/spine-csharp/README.md index 5176e7000..a9bdc97b2 100644 --- a/spine-csharp/README.md +++ b/spine-csharp/README.md @@ -10,14 +10,14 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-csharp works with data exported from Spine 3.2.01. Updating spine-csharp to [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. +spine-csharp works with data exported from the latest version of Spine. spine-csharp supports all Spine features. ## Setup 1. Download the Spine Runtimes source using [git](https://help.github.com/articles/set-up-git) or by downloading it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip). -1. Open the `spine-csharp.sln` Visual C# 2010 Express project file. +1. Open the `spine-csharp.sln` Visual Studio 2015 Community project file. Alternatively, the contents of the `spine-csharp/src` directory can be copied into your project. diff --git a/spine-csharp/spine-csharp.csproj b/spine-csharp/spine-csharp.csproj index 8491dd148..b4916ee9b 100644 --- a/spine-csharp/spine-csharp.csproj +++ b/spine-csharp/spine-csharp.csproj @@ -70,10 +70,10 @@ - + - + Code @@ -105,6 +105,8 @@ Code + + Code diff --git a/spine-csharp/src/Animation.cs b/spine-csharp/src/Animation.cs index 09a1f72ad..e56e4ae33 100644 --- a/spine-csharp/src/Animation.cs +++ b/spine-csharp/src/Animation.cs @@ -43,8 +43,8 @@ namespace Spine { public float Duration { get { return duration; } set { duration = value; } } public Animation (String name, ExposedList timelines, float duration) { - if (name == null) throw new ArgumentNullException("name cannot be null."); - if (timelines == null) throw new ArgumentNullException("timelines cannot be null."); + if (name == null) throw new ArgumentNullException("name", "name cannot be null."); + if (timelines == null) throw new ArgumentNullException("timelines", "timelines cannot be null."); this.name = name; this.timelines = timelines; this.duration = duration; @@ -52,9 +52,9 @@ namespace Spine { ///

Poses the skeleton at the specified time for this animation. /// The last time the animation was applied. - /// Any triggered events are added. + /// Any triggered events are added. May be null. public void Apply (Skeleton skeleton, float lastTime, float time, bool loop, ExposedList events) { - if (skeleton == null) throw new ArgumentNullException("skeleton cannot be null."); + if (skeleton == null) throw new ArgumentNullException("skeleton", "skeleton cannot be null."); if (loop && duration != 0) { time %= duration; @@ -68,10 +68,10 @@ namespace Spine { /// Poses the skeleton at the specified time for this animation mixed with the current pose. /// The last time the animation was applied. - /// Any triggered events are added. + /// Any triggered events are added. May be null. /// The amount of this animation that affects the current pose. public void Mix (Skeleton skeleton, float lastTime, float time, bool loop, ExposedList events, float alpha) { - if (skeleton == null) throw new ArgumentNullException("skeleton cannot be null."); + if (skeleton == null) throw new ArgumentNullException("skeleton", "skeleton cannot be null."); if (loop && duration != 0) { time %= duration; @@ -131,12 +131,13 @@ namespace Spine { /// Base class for frames that use an interpolation bezier curve. abstract public class CurveTimeline : Timeline { protected const float LINEAR = 0, STEPPED = 1, BEZIER = 2; - protected const int BEZIER_SEGMENTS = 10, BEZIER_SIZE = BEZIER_SEGMENTS * 2 - 1; + protected const int BEZIER_SIZE = 10 * 2 - 1; private float[] curves; // type, x, y, ... public int FrameCount { get { return curves.Length / BEZIER_SIZE + 1; } } public CurveTimeline (int frameCount) { + if (frameCount <= 0) throw new ArgumentException("frameCount must be > 0: " + frameCount, "frameCount"); curves = new float[(frameCount - 1) * BEZIER_SIZE]; } @@ -154,12 +155,10 @@ namespace Spine { /// cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of /// the difference between the keyframe's values. public void SetCurve (int frameIndex, float cx1, float cy1, float cx2, float cy2) { - float subdiv1 = 1f / BEZIER_SEGMENTS, subdiv2 = subdiv1 * subdiv1, subdiv3 = subdiv2 * subdiv1; - float pre1 = 3 * subdiv1, pre2 = 3 * subdiv2, pre4 = 6 * subdiv2, pre5 = 6 * subdiv3; - float tmp1x = -cx1 * 2 + cx2, tmp1y = -cy1 * 2 + cy2, tmp2x = (cx1 - cx2) * 3 + 1, tmp2y = (cy1 - cy2) * 3 + 1; - float dfx = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv3, dfy = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv3; - float ddfx = tmp1x * pre4 + tmp2x * pre5, ddfy = tmp1y * pre4 + tmp2y * pre5; - float dddfx = tmp2x * pre5, dddfy = tmp2y * pre5; + float tmpx = (-cx1 * 2 + cx2) * 0.03f, tmpy = (-cy1 * 2 + cy2) * 0.03f; + float dddfx = ((cx1 - cx2) * 3 + 1) * 0.006f, dddfy = ((cy1 - cy2) * 3 + 1) * 0.006f; + float ddfx = tmpx * 2 + dddfx, ddfy = tmpy * 2 + dddfy; + float dfx = cx1 * 0.3f + tmpx + dddfx * 0.16666667f, dfy = cy1 * 0.3f + tmpy + dddfy * 0.16666667f; int i = frameIndex * BEZIER_SIZE; float[] curves = this.curves; @@ -179,6 +178,7 @@ namespace Spine { } public float GetCurvePercent (int frameIndex, float percent) { + percent = MathUtils.Clamp (percent, 0, 1); float[] curves = this.curves; int i = frameIndex * BEZIER_SIZE; float type = curves[i]; @@ -209,8 +209,9 @@ namespace Spine { } public class RotateTimeline : CurveTimeline { - internal const int PREV_TIME = -2; - internal const int VALUE = 1; + public const int ENTRIES = 2; + internal const int PREV_TIME = -2, PREV_ROTATION = -1; + internal const int ROTATION = 1; internal int boneIndex; internal float[] frames; @@ -224,10 +225,10 @@ namespace Spine { } /// Sets the time and value of the specified keyframe. - public void SetFrame (int frameIndex, float time, float angle) { - frameIndex *= 2; + public void SetFrame (int frameIndex, float time, float degrees) { + frameIndex <<= 1; frames[frameIndex] = time; - frames[frameIndex + 1] = angle; + frames[frameIndex + ROTATION] = degrees; } override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList firedEvents, float alpha) { @@ -238,8 +239,8 @@ namespace Spine { float amount; - if (time >= frames[frames.Length - 2]) { // Time is after last frame. - amount = bone.data.rotation + frames[frames.Length - 1] - bone.rotation; + if (time >= frames[frames.Length - ENTRIES]) { // Time is after last frame. + amount = bone.data.rotation + frames[frames.Length + PREV_ROTATION] - bone.rotation; while (amount > 180) amount -= 360; while (amount < -180) @@ -249,18 +250,17 @@ namespace Spine { } // Interpolate between the previous frame and the current frame. - int frame = Animation.binarySearch(frames, time, 2); - float prevFrameValue = frames[frame - 1]; + int frame = Animation.binarySearch(frames, time, ENTRIES); + float prevRotation = frames[frame + PREV_ROTATION]; float frameTime = frames[frame]; - float percent = 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime); - percent = GetCurvePercent((frame >> 1) - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + float percent = GetCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); - amount = frames[frame + VALUE] - prevFrameValue; + amount = frames[frame + ROTATION] - prevRotation; while (amount > 180) amount -= 360; while (amount < -180) amount += 360; - amount = bone.data.rotation + (prevFrameValue + amount * percent) - bone.rotation; + amount = bone.data.rotation + (prevRotation + amount * percent) - bone.rotation; while (amount > 180) amount -= 360; while (amount < -180) @@ -270,9 +270,9 @@ namespace Spine { } public class TranslateTimeline : CurveTimeline { - protected const int PREV_TIME = -3; - protected const int X = 1; - protected const int Y = 2; + public const int ENTRIES = 3; + protected const int PREV_TIME = -3, PREV_X = -2, PREV_Y = -1; + protected const int X = 1, Y = 2; internal int boneIndex; internal float[] frames; @@ -282,15 +282,15 @@ namespace Spine { public TranslateTimeline (int frameCount) : base(frameCount) { - frames = new float[frameCount * 3]; + frames = new float[frameCount * ENTRIES]; } /// Sets the time and value of the specified keyframe. public void SetFrame (int frameIndex, float time, float x, float y) { - frameIndex *= 3; + frameIndex *= ENTRIES; frames[frameIndex] = time; - frames[frameIndex + 1] = x; - frames[frameIndex + 2] = y; + frames[frameIndex + X] = x; + frames[frameIndex + Y] = y; } override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList firedEvents, float alpha) { @@ -299,22 +299,21 @@ namespace Spine { Bone bone = skeleton.bones.Items[boneIndex]; - if (time >= frames[frames.Length - 3]) { // Time is after last frame. - bone.x += (bone.data.x + frames[frames.Length - 2] - bone.x) * alpha; - bone.y += (bone.data.y + frames[frames.Length - 1] - bone.y) * alpha; + if (time >= frames[frames.Length - ENTRIES]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.Length + PREV_X] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.Length + PREV_Y] - bone.y) * alpha; return; } // Interpolate between the previous frame and the current frame. - int frame = Animation.binarySearch(frames, time, 3); - float prevFrameX = frames[frame - 2]; - float prevFrameY = frames[frame - 1]; + int frame = Animation.binarySearch(frames, time, ENTRIES); + float prevX = frames[frame + PREV_X]; + float prevY = frames[frame + PREV_Y]; float frameTime = frames[frame]; - float percent = 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime); - percent = GetCurvePercent(frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + float percent = GetCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); - bone.x += (bone.data.x + prevFrameX + (frames[frame + X] - prevFrameX) * percent - bone.x) * alpha; - bone.y += (bone.data.y + prevFrameY + (frames[frame + Y] - prevFrameY) * percent - bone.y) * alpha; + bone.x += (bone.data.x + prevX + (frames[frame + X] - prevX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + prevY + (frames[frame + Y] - prevY) * percent - bone.y) * alpha; } } @@ -328,28 +327,27 @@ namespace Spine { if (time < frames[0]) return; // Time is before first frame. Bone bone = skeleton.bones.Items[boneIndex]; - if (time >= frames[frames.Length - 3]) { // Time is after last frame. - bone.scaleX += (bone.data.scaleX * frames[frames.Length - 2] - bone.scaleX) * alpha; - bone.scaleY += (bone.data.scaleY * frames[frames.Length - 1] - bone.scaleY) * alpha; + if (time >= frames[frames.Length - ENTRIES]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX * frames[frames.Length + PREV_X] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY * frames[frames.Length + PREV_Y] - bone.scaleY) * alpha; return; } // Interpolate between the previous frame and the current frame. - int frame = Animation.binarySearch(frames, time, 3); - float prevFrameX = frames[frame - 2]; - float prevFrameY = frames[frame - 1]; + int frame = Animation.binarySearch(frames, time, ENTRIES); + float prevX = frames[frame + PREV_X]; + float prevY = frames[frame + PREV_Y]; float frameTime = frames[frame]; - float percent = 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime); - percent = GetCurvePercent(frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + float percent = GetCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); - bone.scaleX += (bone.data.scaleX * (prevFrameX + (frames[frame + X] - prevFrameX) * percent) - bone.scaleX) * alpha; - bone.scaleY += (bone.data.scaleY * (prevFrameY + (frames[frame + Y] - prevFrameY) * percent) - bone.scaleY) * alpha; + bone.scaleX += (bone.data.scaleX * (prevX + (frames[frame + X] - prevX) * percent) - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY * (prevY + (frames[frame + Y] - prevY) * percent) - bone.scaleY) * alpha; } } public class ShearTimeline : TranslateTimeline { public ShearTimeline (int frameCount) - : base (frameCount) { + : base(frameCount) { } override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList firedEvents, float alpha) { @@ -357,31 +355,28 @@ namespace Spine { if (time < frames[0]) return; // Time is before first frame. Bone bone = skeleton.bones.Items[boneIndex]; - if (time >= frames[frames.Length - 3]) { // Time is after last frame. - bone.shearX += (bone.data.shearX + frames[frames.Length - 2] - bone.shearX) * alpha; - bone.shearY += (bone.data.shearY + frames[frames.Length - 1] - bone.shearY) * alpha; + if (time >= frames[frames.Length - ENTRIES]) { // Time is after last frame. + bone.shearX += (bone.data.shearX + frames[frames.Length + PREV_X] - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + frames[frames.Length + PREV_Y] - bone.shearY) * alpha; return; } // Interpolate between the previous frame and the current frame. - int frame = Animation.binarySearch(frames, time, 3); - float prevFrameX = frames[frame - 2]; - float prevFrameY = frames[frame - 1]; + int frame = Animation.binarySearch(frames, time, ENTRIES); + float prevX = frames[frame + PREV_X]; + float prevY = frames[frame + PREV_Y]; float frameTime = frames[frame]; - float percent = 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime); - percent = GetCurvePercent(frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + float percent = GetCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); - bone.shearX += (bone.data.shearX + (prevFrameX + (frames[frame + X] - prevFrameX) * percent) - bone.shearX) * alpha; - bone.shearY += (bone.data.shearY + (prevFrameY + (frames[frame + Y] - prevFrameY) * percent) - bone.shearY) * alpha; + bone.shearX += (bone.data.shearX + (prevX + (frames[frame + X] - prevX) * percent) - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + (prevY + (frames[frame + Y] - prevY) * percent) - bone.shearY) * alpha; } } public class ColorTimeline : CurveTimeline { - protected const int PREV_TIME = -5; - protected const int R = 1; - protected const int G = 2; - protected const int B = 3; - protected const int A = 4; + public const int ENTRIES = 5; + protected const int PREV_TIME = -5, PREV_R = -4, PREV_G = -3, PREV_B = -2, PREV_A = -1; + protected const int R = 1, G = 2, B = 3, A = 4; internal int slotIndex; internal float[] frames; @@ -391,17 +386,17 @@ namespace Spine { public ColorTimeline (int frameCount) : base(frameCount) { - frames = new float[frameCount * 5]; + frames = new float[frameCount * ENTRIES]; } /// Sets the time and value of the specified keyframe. public void SetFrame (int frameIndex, float time, float r, float g, float b, float a) { - frameIndex *= 5; + frameIndex *= ENTRIES; frames[frameIndex] = time; - frames[frameIndex + 1] = r; - frames[frameIndex + 2] = g; - frames[frameIndex + 3] = b; - frames[frameIndex + 4] = a; + frames[frameIndex + R] = r; + frames[frameIndex + G] = g; + frames[frameIndex + B] = b; + frames[frameIndex + A] = a; } override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList firedEvents, float alpha) { @@ -409,23 +404,23 @@ namespace Spine { if (time < frames[0]) return; // Time is before first frame. float r, g, b, a; - if (time >= frames[frames.Length - 5]) { // Time is after last frame. - int i = frames.Length - 1; - r = frames[i - 3]; - g = frames[i - 2]; - b = frames[i - 1]; - a = frames[i]; + if (time >= frames[frames.Length - ENTRIES]) { // Time is after last frame. + int i = frames.Length; + r = frames[i + PREV_R]; + g = frames[i + PREV_G]; + b = frames[i + PREV_B]; + a = frames[i + PREV_A]; } else { // Interpolate between the previous frame and the current frame. - int frame = Animation.binarySearch(frames, time, 5); + int frame = Animation.binarySearch(frames, time, ENTRIES); + r = frames[frame + PREV_R]; + g = frames[frame + PREV_G]; + b = frames[frame + PREV_B]; + a = frames[frame + PREV_A]; float frameTime = frames[frame]; - float percent = 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime); - percent = GetCurvePercent(frame / 5 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + float percent = GetCurvePercent(frame / ENTRIES - 1, + 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); - r = frames[frame - 4]; - g = frames[frame - 3]; - b = frames[frame - 2]; - a = frames[frame - 1]; r += (frames[frame + R] - r) * percent; g += (frames[frame + G] - g) * percent; b += (frames[frame + B] - b) * percent; @@ -469,18 +464,17 @@ namespace Spine { public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList firedEvents, float alpha) { float[] frames = this.frames; - if (time < frames[0]) { - if (lastTime > time) Apply(skeleton, lastTime, int.MaxValue, null, 0); - return; - } else if (lastTime > time) // - lastTime = -1; + if (time < frames[0]) return; // Time is before first frame. - int frameIndex = (time >= frames[frames.Length - 1] ? frames.Length : Animation.binarySearch(frames, time)) - 1; - if (frames[frameIndex] < lastTime) return; + int frameIndex; + if (time >= frames[frames.Length - 1]) // Time is after last frame. + frameIndex = frames.Length - 1; + else + frameIndex = Animation.binarySearch(frames, time, 1) - 1; String attachmentName = attachmentNames[frameIndex]; - skeleton.slots.Items[slotIndex].Attachment = - attachmentName == null ? null : skeleton.GetAttachment(slotIndex, attachmentName); + skeleton.slots.Items[slotIndex] + .Attachment = attachmentName == null ? null : skeleton.GetAttachment(slotIndex, attachmentName); } } @@ -503,7 +497,7 @@ namespace Spine { events[frameIndex] = e; } - /// Fires events for frames > lastTime and <= time. + /// Fires events for frames > lastTime and <= time. public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList firedEvents, float alpha) { if (firedEvents == null) return; float[] frames = this.frames; @@ -570,24 +564,26 @@ namespace Spine { for (int i = 0, n = slots.Count; i < n; i++) drawOrder.Add(slots.Items[i]); } else { + var drawOrderItems = drawOrder.Items; + var slotsItems = slots.Items; for (int i = 0, n = drawOrderToSetupIndex.Length; i < n; i++) - drawOrder.Items[i] = slots.Items[drawOrderToSetupIndex[i]]; + drawOrderItems[i] = slotsItems[drawOrderToSetupIndex[i]]; } } } - public class FfdTimeline : CurveTimeline { + public class DeformTimeline : CurveTimeline { internal int slotIndex; internal float[] frames; private float[][] frameVertices; - internal Attachment attachment; + internal VertexAttachment attachment; public int SlotIndex { get { return slotIndex; } set { slotIndex = value; } } public float[] Frames { get { return frames; } set { frames = value; } } // time, ... public float[][] Vertices { get { return frameVertices; } set { frameVertices = value; } } - public Attachment Attachment { get { return attachment; } set { attachment = value; } } + public VertexAttachment Attachment { get { return attachment; } set { attachment = value; } } - public FfdTimeline (int frameCount) + public DeformTimeline (int frameCount) : base(frameCount) { frames = new float[frameCount]; frameVertices = new float[frameCount][]; @@ -601,8 +597,8 @@ namespace Spine { override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList firedEvents, float alpha) { Slot slot = skeleton.slots.Items[slotIndex]; - IFfdAttachment ffdAttachment = slot.attachment as IFfdAttachment; - if (ffdAttachment == null || !ffdAttachment.ApplyFFD(attachment)) return; + VertexAttachment slotAttachment = slot.attachment as VertexAttachment; + if (slotAttachment == null || !slotAttachment.ApplyDeform(attachment)) return; float[] frames = this.frames; if (time < frames[0]) return; // Time is before first frame. @@ -610,15 +606,12 @@ namespace Spine { float[][] frameVertices = this.frameVertices; int vertexCount = frameVertices[0].Length; - float[] vertices = slot.attachmentVertices; - if (slot.attachmentVerticesCount != vertexCount) alpha = 1; // Don't mix from uninitialized slot vertices. - - // Ensure capacity - if (vertices.Length < vertexCount) { - vertices = new float[vertexCount]; - slot.attachmentVertices = vertices; - } - slot.attachmentVerticesCount = vertexCount; + var verticesArray = slot.attachmentVertices; + if (verticesArray.Count != vertexCount) alpha = 1; // Don't mix from uninitialized slot vertices. + // verticesArray.SetSize(vertexCount) // Ensure size and preemptively set count. + if (verticesArray.Capacity < vertexCount) verticesArray.Capacity = vertexCount; + verticesArray.Count = vertexCount; + float[] vertices = verticesArray.Items; if (time >= frames[frames.Length - 1]) { // Time is after last frame. float[] lastVertices = frameVertices[frames.Length - 1]; @@ -634,12 +627,10 @@ namespace Spine { // Interpolate between the previous frame and the current frame. int frame = Animation.binarySearch(frames, time); - float frameTime = frames[frame]; - float percent = 1 - (time - frameTime) / (frames[frame - 1] - frameTime); - percent = GetCurvePercent(frame - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - float[] prevVertices = frameVertices[frame - 1]; float[] nextVertices = frameVertices[frame]; + float frameTime = frames[frame]; + float percent = GetCurvePercent(frame - 1, 1 - (time - frameTime) / (frames[frame - 1] - frameTime)); if (alpha < 1) { for (int i = 0; i < vertexCount; i++) { @@ -657,10 +648,9 @@ namespace Spine { } public class IkConstraintTimeline : CurveTimeline { - private const int PREV_TIME = -3; - private const int PREV_MIX = -2; - private const int PREV_BEND_DIRECTION = -1; - private const int MIX = 1; + public const int ENTRIES = 3; + private const int PREV_TIME = -3, PREV_MIX = -2, PREV_BEND_DIRECTION = -1; + private const int MIX = 1, BEND_DIRECTION = 2; internal int ikConstraintIndex; internal float[] frames; @@ -670,15 +660,15 @@ namespace Spine { public IkConstraintTimeline (int frameCount) : base(frameCount) { - frames = new float[frameCount * 3]; + frames = new float[frameCount * ENTRIES]; } /// Sets the time, mix and bend direction of the specified keyframe. public void SetFrame (int frameIndex, float time, float mix, int bendDirection) { - frameIndex *= 3; + frameIndex *= ENTRIES; frames[frameIndex] = time; - frames[frameIndex + 1] = mix; - frames[frameIndex + 2] = bendDirection; + frames[frameIndex + MIX] = mix; + frames[frameIndex + BEND_DIRECTION] = bendDirection; } override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList firedEvents, float alpha) { @@ -687,34 +677,27 @@ namespace Spine { IkConstraint constraint = skeleton.ikConstraints.Items[ikConstraintIndex]; - if (time >= frames[frames.Length - 3]) { // Time is after last frame. + if (time >= frames[frames.Length - ENTRIES]) { // Time is after last frame. constraint.mix += (frames[frames.Length + PREV_MIX] - constraint.mix) * alpha; constraint.bendDirection = (int)frames[frames.Length + PREV_BEND_DIRECTION]; return; } // Interpolate between the previous frame and the current frame. - int frame = Animation.binarySearch(frames, time, 3); - float frameTime = frames[frame]; - float percent = 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime); - percent = GetCurvePercent(frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - + int frame = Animation.binarySearch(frames, time, ENTRIES); float mix = frames[frame + PREV_MIX]; + float frameTime = frames[frame]; + float percent = GetCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); + constraint.mix += (mix + (frames[frame + MIX] - mix) * percent - constraint.mix) * alpha; constraint.bendDirection = (int)frames[frame + PREV_BEND_DIRECTION]; } } public class TransformConstraintTimeline : CurveTimeline { - private const int PREV_TIME = -5; - private const int PREV_ROTATE_MIX = -4; - private const int PREV_TRANSLATE_MIX = -3; - private const int PREV_SCALE_MIX = -2; - private const int PREV_SHEAR_MIX = -1; - private const int ROTATE_MIX = 1; - private const int TRANSLATE_MIX = 2; - private const int SCALE_MIX = 3; - private const int SHEAR_MIX = 4; + public const int ENTRIES = 5; + private const int PREV_TIME = -5, PREV_ROTATE = -4, PREV_TRANSLATE = -3, PREV_SCALE = -2, PREV_SHEAR = -1; + private const int ROTATE = 1, TRANSLATE = 2, SCALE = 3, SHEAR = 4; internal int transformConstraintIndex; internal float[] frames; @@ -724,16 +707,16 @@ namespace Spine { public TransformConstraintTimeline (int frameCount) : base(frameCount) { - frames = new float[frameCount * 5]; + frames = new float[frameCount * ENTRIES]; } - + public void SetFrame (int frameIndex, float time, float rotateMix, float translateMix, float scaleMix, float shearMix) { - frameIndex *= 5; + frameIndex *= ENTRIES; frames[frameIndex] = time; - frames[frameIndex + 1] = rotateMix; - frames[frameIndex + 2] = translateMix; - frames[frameIndex + 3] = scaleMix; - frames[frameIndex + 4] = shearMix; + frames[frameIndex + ROTATE] = rotateMix; + frames[frameIndex + TRANSLATE] = translateMix; + frames[frameIndex + SCALE] = scaleMix; + frames[frameIndex + SHEAR] = shearMix; } override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList firedEvents, float alpha) { @@ -742,29 +725,151 @@ namespace Spine { TransformConstraint constraint = skeleton.transformConstraints.Items[transformConstraintIndex]; - if (time >= frames[frames.Length - 5]) { // Time is after last frame. - int i = frames.Length - 1; - constraint.rotateMix += (frames[i - 3] - constraint.rotateMix) * alpha; - constraint.translateMix += (frames[i - 2] - constraint.translateMix) * alpha; - constraint.scaleMix += (frames[i - 1] - constraint.scaleMix) * alpha; - constraint.shearMix += (frames[i] - constraint.shearMix) * alpha; + if (time >= frames[frames.Length - ENTRIES]) { // Time is after last frame. + int i = frames.Length; + constraint.rotateMix += (frames[i + PREV_ROTATE] - constraint.rotateMix) * alpha; + constraint.translateMix += (frames[i + PREV_TRANSLATE] - constraint.translateMix) * alpha; + constraint.scaleMix += (frames[i + PREV_SCALE] - constraint.scaleMix) * alpha; + constraint.shearMix += (frames[i + PREV_SHEAR] - constraint.shearMix) * alpha; return; } // Interpolate between the previous frame and the current frame. - int frame = Animation.binarySearch(frames, time, 5); + int frame = Animation.binarySearch(frames, time, ENTRIES); float frameTime = frames[frame]; - float percent = 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime); - percent = GetCurvePercent(frame / 5 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + float percent = GetCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); - float rotate = frames[frame + PREV_ROTATE_MIX]; - float translate = frames[frame + PREV_TRANSLATE_MIX]; - float scale = frames[frame + PREV_SCALE_MIX]; - float shear = frames[frame + PREV_SHEAR_MIX]; - constraint.rotateMix += (rotate + (frames[frame + ROTATE_MIX] - rotate) * percent - constraint.rotateMix) * alpha; - constraint.translateMix += (translate + (frames[frame + TRANSLATE_MIX] - translate) * percent - constraint.translateMix) * alpha; - constraint.scaleMix += (scale + (frames[frame + SCALE_MIX] - scale) * percent - constraint.scaleMix) * alpha; - constraint.shearMix += (shear + (frames[frame + SHEAR_MIX] - shear) * percent - constraint.shearMix) * alpha; + float rotate = frames[frame + PREV_ROTATE]; + float translate = frames[frame + PREV_TRANSLATE]; + float scale = frames[frame + PREV_SCALE]; + float shear = frames[frame + PREV_SHEAR]; + constraint.rotateMix += (rotate + (frames[frame + ROTATE] - rotate) * percent - constraint.rotateMix) * alpha; + constraint.translateMix += (translate + (frames[frame + TRANSLATE] - translate) * percent - constraint.translateMix) + * alpha; + constraint.scaleMix += (scale + (frames[frame + SCALE] - scale) * percent - constraint.scaleMix) * alpha; + constraint.shearMix += (shear + (frames[frame + SHEAR] - shear) * percent - constraint.shearMix) * alpha; + } + } + + public class PathConstraintPositionTimeline : CurveTimeline { + public const int ENTRIES = 2; + protected const int PREV_TIME = -2, PREV_VALUE = -1; + protected const int VALUE = 1; + + internal int pathConstraintIndex; + internal float[] frames; + + public PathConstraintPositionTimeline (int frameCount) + : base(frameCount) { + frames = new float[frameCount * ENTRIES]; + } + + public int PathConstraintIndex { get { return pathConstraintIndex; } set { pathConstraintIndex = value; } } + public float[] Frames { get { return frames; } set { frames = value; } } // time, position, ... + + /// Sets the time and value of the specified keyframe. + public void SetFrame (int frameIndex, float time, float value) { + frameIndex *= ENTRIES; + frames[frameIndex] = time; + frames[frameIndex + VALUE] = value; + } + + override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList events, float alpha) { + float[] frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + PathConstraint constraint = skeleton.pathConstraints.Items[pathConstraintIndex]; + + if (time >= frames[frames.Length - ENTRIES]) { // Time is after last frame. + int i = frames.Length; + constraint.position += (frames[i + PREV_VALUE] - constraint.position) * alpha; + return; + } + + // Interpolate between the previous frame and the current frame. + int frame = Animation.binarySearch(frames, time, ENTRIES); + float position = frames[frame + PREV_VALUE]; + float frameTime = frames[frame]; + float percent = GetCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); + + constraint.position += (position + (frames[frame + VALUE] - position) * percent - constraint.position) * alpha; + } + } + + public class PathConstraintSpacingTimeline : PathConstraintPositionTimeline { + public PathConstraintSpacingTimeline (int frameCount) + : base(frameCount) { + } + + override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList events, float alpha) { + float[] frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + PathConstraint constraint = skeleton.pathConstraints.Items[pathConstraintIndex]; + + if (time >= frames[frames.Length - ENTRIES]) { // Time is after last frame. + int i = frames.Length; + constraint.spacing += (frames[i + PREV_VALUE] - constraint.spacing) * alpha; + return; + } + + // Interpolate between the previous frame and the current frame. + int frame = Animation.binarySearch(frames, time, ENTRIES); + float spacing = frames[frame + PREV_VALUE]; + float frameTime = frames[frame]; + float percent = GetCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); + + constraint.spacing += (spacing + (frames[frame + VALUE] - spacing) * percent - constraint.spacing) * alpha; + } + } + + public class PathConstraintMixTimeline : CurveTimeline { + public const int ENTRIES = 3; + private const int PREV_TIME = -3, PREV_ROTATE = -2, PREV_TRANSLATE = -1; + private const int ROTATE = 1, TRANSLATE = 2; + + internal int pathConstraintIndex; + internal float[] frames; + + public int PathConstraintIndex { get { return pathConstraintIndex; } set { pathConstraintIndex = value; } } + public float[] Frames { get { return frames; } set { frames = value; } } // time, rotate mix, translate mix, ... + + public PathConstraintMixTimeline (int frameCount) + : base(frameCount) { + frames = new float[frameCount * ENTRIES]; + } + + /** Sets the time and mixes of the specified keyframe. */ + public void SetFrame (int frameIndex, float time, float rotateMix, float translateMix) { + frameIndex *= ENTRIES; + frames[frameIndex] = time; + frames[frameIndex + ROTATE] = rotateMix; + frames[frameIndex + TRANSLATE] = translateMix; + } + + override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList events, float alpha) { + float[] frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + PathConstraint constraint = skeleton.pathConstraints.Items[pathConstraintIndex]; + + if (time >= frames[frames.Length - ENTRIES]) { // Time is after last frame. + int i = frames.Length; + constraint.rotateMix += (frames[i + PREV_ROTATE] - constraint.rotateMix) * alpha; + constraint.translateMix += (frames[i + PREV_TRANSLATE] - constraint.translateMix) * alpha; + return; + } + + // Interpolate between the previous frame and the current frame. + int frame = Animation.binarySearch(frames, time, ENTRIES); + float rotate = frames[frame + PREV_ROTATE]; + float translate = frames[frame + PREV_TRANSLATE]; + float frameTime = frames[frame]; + float percent = GetCurvePercent(frame / ENTRIES - 1, 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime)); + + constraint.rotateMix += (rotate + (frames[frame + ROTATE] - rotate) * percent - constraint.rotateMix) * alpha; + constraint.translateMix += (translate + (frames[frame + TRANSLATE] - translate) * percent - constraint.translateMix) + * alpha; } } } diff --git a/spine-csharp/src/AnimationState.cs b/spine-csharp/src/AnimationState.cs index 00e2c36e6..1d438efde 100644 --- a/spine-csharp/src/AnimationState.cs +++ b/spine-csharp/src/AnimationState.cs @@ -41,6 +41,8 @@ namespace Spine { private float timeScale = 1; public AnimationStateData Data { get { return data; } } + /// A list of tracks that have animations, which may contain nulls. + public ExposedList Tracks { get { return tracks; } } public float TimeScale { get { return timeScale; } set { timeScale = value; } } public delegate void StartEndDelegate (AnimationState state, int trackIndex); @@ -54,7 +56,7 @@ namespace Spine { public event CompleteDelegate Complete; public AnimationState (AnimationStateData data) { - if (data == null) throw new ArgumentNullException("data cannot be null."); + if (data == null) throw new ArgumentNullException("data", "data cannot be null."); this.data = data; } @@ -187,15 +189,16 @@ namespace Spine { if (Start != null) Start(this, index); } + /// public TrackEntry SetAnimation (int trackIndex, String animationName, bool loop) { Animation animation = data.skeletonData.FindAnimation(animationName); - if (animation == null) throw new ArgumentException("Animation not found: " + animationName); + if (animation == null) throw new ArgumentException("Animation not found: " + animationName, "animationName"); return SetAnimation(trackIndex, animation, loop); } /// Set the current animation. Any queued animations are cleared. public TrackEntry SetAnimation (int trackIndex, Animation animation, bool loop) { - if (animation == null) throw new ArgumentException("animation cannot be null."); + if (animation == null) throw new ArgumentNullException("animation", "animation cannot be null."); TrackEntry entry = new TrackEntry(); entry.animation = animation; entry.loop = loop; @@ -205,16 +208,17 @@ namespace Spine { return entry; } + /// public TrackEntry AddAnimation (int trackIndex, String animationName, bool loop, float delay) { Animation animation = data.skeletonData.FindAnimation(animationName); - if (animation == null) throw new ArgumentException("Animation not found: " + animationName); + if (animation == null) throw new ArgumentException("Animation not found: " + animationName, "animationName"); return AddAnimation(trackIndex, animation, loop, delay); } /// Adds an animation to be played delay seconds after the current or last queued animation. - /// May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. + /// May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. public TrackEntry AddAnimation (int trackIndex, Animation animation, bool loop, float delay) { - if (animation == null) throw new ArgumentException("animation cannot be null."); + if (animation == null) throw new ArgumentNullException("animation", "animation cannot be null."); TrackEntry entry = new TrackEntry(); entry.animation = animation; entry.loop = loop; diff --git a/spine-csharp/src/AnimationStateData.cs b/spine-csharp/src/AnimationStateData.cs index bf36b2c55..408cdfabf 100644 --- a/spine-csharp/src/AnimationStateData.cs +++ b/spine-csharp/src/AnimationStateData.cs @@ -42,6 +42,7 @@ namespace Spine { public float DefaultMix { get { return defaultMix; } set { defaultMix = value; } } public AnimationStateData (SkeletonData skeletonData) { + if (skeletonData == null) throw new ArgumentException ("skeletonData cannot be null."); this.skeletonData = skeletonData; } @@ -54,8 +55,8 @@ namespace Spine { } public void SetMix (Animation from, Animation to, float duration) { - if (from == null) throw new ArgumentNullException("from cannot be null."); - if (to == null) throw new ArgumentNullException("to cannot be null."); + if (from == null) throw new ArgumentNullException("from", "from cannot be null."); + if (to == null) throw new ArgumentNullException("to", "to cannot be null."); AnimationPair key = new AnimationPair(from, to); animationToMixTime.Remove(key); animationToMixTime.Add(key, duration); diff --git a/spine-csharp/src/Attachments/AtlasAttachmentLoader.cs b/spine-csharp/src/Attachments/AtlasAttachmentLoader.cs index f05de4b67..b3d133c2f 100644 --- a/spine-csharp/src/Attachments/AtlasAttachmentLoader.cs +++ b/spine-csharp/src/Attachments/AtlasAttachmentLoader.cs @@ -72,31 +72,16 @@ namespace Spine { attachment.regionOriginalWidth = region.originalWidth; attachment.regionOriginalHeight = region.originalHeight; return attachment; - } - - public WeightedMeshAttachment NewWeightedMeshAttachment (Skin skin, String name, String path) { - AtlasRegion region = FindRegion(path); - if (region == null) throw new Exception("Region not found in atlas: " + path + " (weighted mesh attachment: " + name + ")"); - WeightedMeshAttachment attachment = new WeightedMeshAttachment(name); - attachment.RendererObject = region; - attachment.RegionU = region.u; - attachment.RegionV = region.v; - attachment.RegionU2 = region.u2; - attachment.RegionV2 = region.v2; - attachment.RegionRotate = region.rotate; - attachment.regionOffsetX = region.offsetX; - attachment.regionOffsetY = region.offsetY; - attachment.regionWidth = region.width; - attachment.regionHeight = region.height; - attachment.regionOriginalWidth = region.originalWidth; - attachment.regionOriginalHeight = region.originalHeight; - return attachment; - } + } public BoundingBoxAttachment NewBoundingBoxAttachment (Skin skin, String name) { return new BoundingBoxAttachment(name); } + public PathAttachment NewPathAttachment (Skin skin, String name) { + return new PathAttachment (name); + } + public AtlasRegion FindRegion (string name) { AtlasRegion region; diff --git a/spine-csharp/src/Attachments/Attachment.cs b/spine-csharp/src/Attachments/Attachment.cs index 551785b69..44d8bc2a3 100644 --- a/spine-csharp/src/Attachments/Attachment.cs +++ b/spine-csharp/src/Attachments/Attachment.cs @@ -36,7 +36,7 @@ namespace Spine { public String Name { get; private set; } public Attachment (String name) { - if (name == null) throw new ArgumentNullException("name cannot be null."); + if (name == null) throw new ArgumentNullException("name", "name cannot be null"); Name = name; } diff --git a/spine-csharp/src/Attachments/AttachmentLoader.cs b/spine-csharp/src/Attachments/AttachmentLoader.cs index 5574e3210..801b8a778 100644 --- a/spine-csharp/src/Attachments/AttachmentLoader.cs +++ b/spine-csharp/src/Attachments/AttachmentLoader.cs @@ -39,10 +39,10 @@ namespace Spine { /// May be null to not load any attachment. MeshAttachment NewMeshAttachment (Skin skin, String name, String path); - /// May be null to not load any attachment. - WeightedMeshAttachment NewWeightedMeshAttachment (Skin skin, String name, String path); - /// May be null to not load any attachment. BoundingBoxAttachment NewBoundingBoxAttachment (Skin skin, String name); + + /// May be null to not load any attachment + PathAttachment NewPathAttachment (Skin skin, String name); } } diff --git a/spine-csharp/src/Attachments/AttachmentType.cs b/spine-csharp/src/Attachments/AttachmentType.cs index 80543490f..81b55a99a 100644 --- a/spine-csharp/src/Attachments/AttachmentType.cs +++ b/spine-csharp/src/Attachments/AttachmentType.cs @@ -31,6 +31,6 @@ namespace Spine { public enum AttachmentType { - region, boundingbox, mesh, weightedmesh, linkedmesh, weightedlinkedmesh + Region, Boundingbox, Mesh, Linkedmesh, Path } } diff --git a/spine-csharp/src/Attachments/BoundingBoxAttachment.cs b/spine-csharp/src/Attachments/BoundingBoxAttachment.cs index ccf179edd..41b42c236 100644 --- a/spine-csharp/src/Attachments/BoundingBoxAttachment.cs +++ b/spine-csharp/src/Attachments/BoundingBoxAttachment.cs @@ -33,29 +33,9 @@ using System; namespace Spine { /// Attachment that has a polygon for bounds checking. - public class BoundingBoxAttachment : Attachment { - internal float[] vertices; - - public float[] Vertices { get { return vertices; } set { vertices = value; } } - + public class BoundingBoxAttachment : VertexAttachment { public BoundingBoxAttachment (string name) : base(name) { } - - /// Must have at least the same length as this attachment's vertices. - public void ComputeWorldVertices (Bone bone, float[] worldVertices) { - float x = bone.skeleton.x + bone.worldX, y = bone.skeleton.y + bone.worldY; - float m00 = bone.a; - float m01 = bone.b; - float m10 = bone.c; - float m11 = bone.d; - float[] vertices = this.vertices; - for (int i = 0, n = vertices.Length; i < n; i += 2) { - float px = vertices[i]; - float py = vertices[i + 1]; - worldVertices[i] = px * m00 + py * m01 + x; - worldVertices[i + 1] = px * m10 + py * m11 + y; - } - } } } diff --git a/spine-csharp/src/Attachments/MeshAttachment.cs b/spine-csharp/src/Attachments/MeshAttachment.cs index eae83f0cb..e9e4912cf 100644 --- a/spine-csharp/src/Attachments/MeshAttachment.cs +++ b/spine-csharp/src/Attachments/MeshAttachment.cs @@ -33,16 +33,16 @@ using System; namespace Spine { /// Attachment that displays a texture region using a mesh. - public class MeshAttachment : Attachment, IFfdAttachment { - internal float[] vertices, uvs, regionUVs; - internal int[] triangles; + public class MeshAttachment : VertexAttachment { internal float regionOffsetX, regionOffsetY, regionWidth, regionHeight, regionOriginalWidth, regionOriginalHeight; + internal float[] uvs, regionUVs; + internal int[] triangles; internal float r = 1, g = 1, b = 1, a = 1; + internal int hulllength; internal MeshAttachment parentMesh; - internal bool inheritFFD; + internal bool inheritDeform; - public int HullLength { get; set; } - public float[] Vertices { get { return vertices; } set { vertices = value; } } + public int HullLength { get { return hulllength; } set { hulllength = value; } } public float[] RegionUVs { get { return regionUVs; } set { regionUVs = value; } } public float[] UVs { get { return uvs; } set { uvs = value; } } public int[] Triangles { get { return triangles; } set { triangles = value; } } @@ -66,14 +66,16 @@ namespace Spine { public float RegionOriginalWidth { get { return regionOriginalWidth; } set { regionOriginalWidth = value; } } public float RegionOriginalHeight { get { return regionOriginalHeight; } set { regionOriginalHeight = value; } } // Unrotated, unstripped size. - public bool InheritFFD { get { return inheritFFD; } set { inheritFFD = value; } } + public bool InheritDeform { get { return inheritDeform; } set { inheritDeform = value; } } public MeshAttachment ParentMesh { get { return parentMesh; } set { parentMesh = value; if (value != null) { + bones = value.bones; vertices = value.vertices; + worldVerticesLength = value.worldVerticesLength; regionUVs = value.regionUVs; triangles = value.triangles; HullLength = value.HullLength; @@ -111,23 +113,8 @@ namespace Spine { } } - public void ComputeWorldVertices (Slot slot, float[] worldVertices) { - Bone bone = slot.bone; - float x = bone.skeleton.x + bone.worldX, y = bone.skeleton.y + bone.worldY; - float m00 = bone.a, m01 = bone.b, m10 = bone.c, m11 = bone.d; - float[] vertices = this.vertices; - int verticesCount = vertices.Length; - if (slot.attachmentVerticesCount == verticesCount) vertices = slot.AttachmentVertices; - for (int i = 0; i < verticesCount; i += 2) { - float vx = vertices[i]; - float vy = vertices[i + 1]; - worldVertices[i] = vx * m00 + vy * m01 + x; - worldVertices[i + 1] = vx * m10 + vy * m11 + y; - } - } - - public bool ApplyFFD (Attachment sourceAttachment) { - return this == sourceAttachment || (inheritFFD && parentMesh == sourceAttachment); + override public bool ApplyDeform (VertexAttachment sourceAttachment) { + return this == sourceAttachment || (inheritDeform && parentMesh == sourceAttachment); } } } diff --git a/spine-csharp/src/Attachments/PathAttachment.cs b/spine-csharp/src/Attachments/PathAttachment.cs new file mode 100644 index 000000000..fb36a1a67 --- /dev/null +++ b/spine-csharp/src/Attachments/PathAttachment.cs @@ -0,0 +1,49 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +using System; +using System.Collections.Generic; + +namespace Spine { + public class PathAttachment : VertexAttachment { + internal float[] lengths; + internal bool closed, constantSpeed; + + /// The length in the setup pose from the start of the path to the end of each curve. + public float[] Lengths { get { return lengths; } set { lengths = value; } } + public bool Closed { get { return closed; } set { closed = value; } } + public bool ConstantSpeed { get { return constantSpeed; } set { constantSpeed = value; } } + + public PathAttachment (String name) + : base(name) { + } + } +} diff --git a/spine-csharp/src/Attachments/RegionAttachment.cs b/spine-csharp/src/Attachments/RegionAttachment.cs index dad5e1cc8..99199397a 100644 --- a/spine-csharp/src/Attachments/RegionAttachment.cs +++ b/spine-csharp/src/Attachments/RegionAttachment.cs @@ -111,9 +111,9 @@ namespace Spine { float localY = -height / 2 * scaleY + regionOffsetY * regionScaleY; float localX2 = localX + regionWidth * regionScaleX; float localY2 = localY + regionHeight * regionScaleY; - float radians = rotation * (float)Math.PI / 180; - float cos = (float)Math.Cos(radians); - float sin = (float)Math.Sin(radians); + float rotation = this.rotation; + float cos = MathUtils.CosDeg(rotation); + float sin = MathUtils.SinDeg(rotation); float x = this.x; float y = this.y; float localXCos = localX * cos + x; @@ -136,17 +136,18 @@ namespace Spine { } public void ComputeWorldVertices (Bone bone, float[] worldVertices) { - float x = bone.skeleton.x + bone.worldX, y = bone.skeleton.y + bone.worldY; - float m00 = bone.a, m01 = bone.b, m10 = bone.c, m11 = bone.d; + Skeleton skeleton = bone.skeleton; + float x = skeleton.x + bone.worldX, y = skeleton.y + bone.worldY; + float a = bone.a, b = bone.b, c = bone.c, d = bone.d; float[] offset = this.offset; - worldVertices[X1] = offset[X1] * m00 + offset[Y1] * m01 + x; - worldVertices[Y1] = offset[X1] * m10 + offset[Y1] * m11 + y; - worldVertices[X2] = offset[X2] * m00 + offset[Y2] * m01 + x; - worldVertices[Y2] = offset[X2] * m10 + offset[Y2] * m11 + y; - worldVertices[X3] = offset[X3] * m00 + offset[Y3] * m01 + x; - worldVertices[Y3] = offset[X3] * m10 + offset[Y3] * m11 + y; - worldVertices[X4] = offset[X4] * m00 + offset[Y4] * m01 + x; - worldVertices[Y4] = offset[X4] * m10 + offset[Y4] * m11 + y; + worldVertices[X1] = offset[X1] * a + offset[Y1] * b + x; + worldVertices[Y1] = offset[X1] * c + offset[Y1] * d + y; + worldVertices[X2] = offset[X2] * a + offset[Y2] * b + x; + worldVertices[Y2] = offset[X2] * c + offset[Y2] * d + y; + worldVertices[X3] = offset[X3] * a + offset[Y3] * b + x; + worldVertices[Y3] = offset[X3] * c + offset[Y3] * d + y; + worldVertices[X4] = offset[X4] * a + offset[Y4] * b + x; + worldVertices[Y4] = offset[X4] * c + offset[Y4] * d + y; } } } diff --git a/spine-csharp/src/Attachments/VertexAttachment.cs b/spine-csharp/src/Attachments/VertexAttachment.cs new file mode 100644 index 000000000..417752890 --- /dev/null +++ b/spine-csharp/src/Attachments/VertexAttachment.cs @@ -0,0 +1,118 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +using System; +using System.Collections.Generic; + +namespace Spine { + /// >An attachment with vertices that are transformed by one or more bones and can be deformed by a slot's vertices. + public class VertexAttachment : Attachment { + internal int[] bones; + internal float[] vertices; + internal int worldVerticesLength; + + public int[] Bones { get { return bones; } set { bones = value; } } + public float[] Vertices { get { return vertices; } set { vertices = value; } } + public int WorldVerticesLength { get { return worldVerticesLength; } set { worldVerticesLength = value; } } + + public VertexAttachment (String name) + : base(name) { + } + + public void ComputeWorldVertices (Slot slot, float[] worldVertices) { + ComputeWorldVertices(slot, 0, worldVerticesLength, worldVertices, 0); + } + + public void ComputeWorldVertices (Slot slot, int start, int count, float[] worldVertices, int offset) { + count += offset; + Skeleton skeleton = slot.Skeleton; + float x = skeleton.x, y = skeleton.y; + var deformArray = slot.attachmentVertices; + float[] vertices = this.vertices; + int[] bones = this.bones; + if (bones == null) { + if (deformArray.Count > 0) vertices = deformArray.Items; + Bone bone = slot.bone; + x += bone.worldX; + y += bone.worldY; + float a = bone.a, b = bone.b, c = bone.c, d = bone.d; + for (int vv = start, w = offset; w < count; vv += 2, w += 2) { + float vx = vertices[vv], vy = vertices[vv + 1]; + worldVertices[w] = vx * a + vy * b + x; + worldVertices[w + 1] = vx * c + vy * d + y; + } + return; + } + int v = 0, skip = 0; + for (int i = 0; i < start; i += 2) { + int n = bones[v]; + v += n + 1; + skip += n; + } + Bone[] skeletonBones = skeleton.Bones.Items; + if (deformArray.Count == 0) { + for (int w = offset, b = skip * 3; w < count; w += 2) { + float wx = x, wy = y; + int n = bones[v++]; + n += v; + for (; v < n; v++, b += 3) { + Bone bone = skeletonBones[bones[v]]; + float vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } else { + float[] deform = deformArray.Items; + for (int w = offset, b = skip * 3, f = skip << 1; w < count; w += 2) { + float wx = x, wy = y; + int n = bones[v++]; + n += v; + for (; v < n; v++, b += 3, f += 2) { + Bone bone = skeletonBones[bones[v]]; + float vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + } + + /// Returns true if a deform originally applied to the specified attachment should be applied to this attachment. + virtual public bool ApplyDeform (VertexAttachment sourceAttachment) { + return this == sourceAttachment; + } + } +} diff --git a/spine-csharp/src/Attachments/WeightedMeshAttachment.cs b/spine-csharp/src/Attachments/WeightedMeshAttachment.cs deleted file mode 100644 index a4b15b7ca..000000000 --- a/spine-csharp/src/Attachments/WeightedMeshAttachment.cs +++ /dev/null @@ -1,158 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the - * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) 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. - *****************************************************************************/ - -using System; -using System.Collections.Generic; - -namespace Spine { - /// Attachment that displays a texture region using a mesh which can be deformed by bones. - public class WeightedMeshAttachment : Attachment, IFfdAttachment { - internal int[] bones; - internal float[] weights, uvs, regionUVs; - internal int[] triangles; - internal float regionOffsetX, regionOffsetY, regionWidth, regionHeight, regionOriginalWidth, regionOriginalHeight; - internal float r = 1, g = 1, b = 1, a = 1; - internal WeightedMeshAttachment parentMesh; - internal bool inheritFFD; - - public int HullLength { get; set; } - public int[] Bones { get { return bones; } set { bones = value; } } - public float[] Weights { get { return weights; } set { weights = value; } } - public float[] RegionUVs { get { return regionUVs; } set { regionUVs = value; } } - public float[] UVs { get { return uvs; } set { uvs = value; } } - public int[] Triangles { get { return triangles; } set { triangles = value; } } - - public float R { get { return r; } set { r = value; } } - public float G { get { return g; } set { g = value; } } - public float B { get { return b; } set { b = value; } } - public float A { get { return a; } set { a = value; } } - - public String Path { get; set; } - public Object RendererObject { get; set; } - public float RegionU { get; set; } - public float RegionV { get; set; } - public float RegionU2 { get; set; } - public float RegionV2 { get; set; } - public bool RegionRotate { get; set; } - public float RegionOffsetX { get { return regionOffsetX; } set { regionOffsetX = value; } } - public float RegionOffsetY { get { return regionOffsetY; } set { regionOffsetY = value; } } // Pixels stripped from the bottom left, unrotated. - public float RegionWidth { get { return regionWidth; } set { regionWidth = value; } } - public float RegionHeight { get { return regionHeight; } set { regionHeight = value; } } // Unrotated, stripped size. - public float RegionOriginalWidth { get { return regionOriginalWidth; } set { regionOriginalWidth = value; } } - public float RegionOriginalHeight { get { return regionOriginalHeight; } set { regionOriginalHeight = value; } } // Unrotated, unstripped size. - - public bool InheritFFD { get { return inheritFFD; } set { inheritFFD = value; } } - - public WeightedMeshAttachment ParentMesh { - get { return parentMesh; } - set { - parentMesh = value; - if (value != null) { - bones = value.bones; - weights = value.weights; - regionUVs = value.regionUVs; - triangles = value.triangles; - HullLength = value.HullLength; - Edges = value.Edges; - Width = value.Width; - Height = value.Height; - } - } - } - - // Nonessential. - public int[] Edges { get; set; } - public float Width { get; set; } - public float Height { get; set; } - - public WeightedMeshAttachment (string name) - : base(name) { - } - - public void UpdateUVs () { - float u = RegionU, v = RegionV, width = RegionU2 - RegionU, height = RegionV2 - RegionV; - float[] regionUVs = this.regionUVs; - if (this.uvs == null || this.uvs.Length != regionUVs.Length) this.uvs = new float[regionUVs.Length]; - float[] uvs = this.uvs; - if (RegionRotate) { - for (int i = 0, n = uvs.Length; i < n; i += 2) { - uvs[i] = u + regionUVs[i + 1] * width; - uvs[i + 1] = v + height - regionUVs[i] * height; - } - } else { - for (int i = 0, n = uvs.Length; i < n; i += 2) { - uvs[i] = u + regionUVs[i] * width; - uvs[i + 1] = v + regionUVs[i + 1] * height; - } - } - } - - public void ComputeWorldVertices (Slot slot, float[] worldVertices) { - Skeleton skeleton = slot.bone.skeleton; - ExposedList skeletonBones = skeleton.bones; - float x = skeleton.x, y = skeleton.y; - float[] weights = this.weights; - int[] bones = this.bones; - if (slot.attachmentVerticesCount == 0) { - for (int w = 0, v = 0, b = 0, n = bones.Length; v < n; w += 2) { - float wx = 0, wy = 0; - int nn = bones[v++] + v; - for (; v < nn; v++, b += 3) { - Bone bone = skeletonBones.Items[bones[v]]; - float vx = weights[b], vy = weights[b + 1], weight = weights[b + 2]; - wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; - wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; - } - worldVertices[w] = wx + x; - worldVertices[w + 1] = wy + y; - } - } else { - float[] ffd = slot.attachmentVertices; - for (int w = 0, v = 0, b = 0, f = 0, n = bones.Length; v < n; w += 2) { - float wx = 0, wy = 0; - int nn = bones[v++] + v; - for (; v < nn; v++, b += 3, f += 2) { - Bone bone = skeletonBones.Items[bones[v]]; - float vx = weights[b] + ffd[f], vy = weights[b + 1] + ffd[f + 1], weight = weights[b + 2]; - wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; - wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; - } - worldVertices[w] = wx + x; - worldVertices[w + 1] = wy + y; - } - } - } - - public bool ApplyFFD (Attachment sourceAttachment) { - return this == sourceAttachment || (inheritFFD && parentMesh == sourceAttachment); - } - } -} diff --git a/spine-csharp/src/Bone.cs b/spine-csharp/src/Bone.cs index 01f1efbcb..1c28e9cfb 100644 --- a/spine-csharp/src/Bone.cs +++ b/spine-csharp/src/Bone.cs @@ -30,7 +30,6 @@ *****************************************************************************/ using System; -using System.Collections.Generic; namespace Spine { public class Bone : IUpdatable { @@ -41,12 +40,14 @@ namespace Spine { internal Bone parent; internal ExposedList children = new ExposedList(); internal float x, y, rotation, scaleX, scaleY, shearX, shearY; - internal float appliedRotation, appliedScaleX, appliedScaleY; + internal float appliedRotation; internal float a, b, worldX; internal float c, d, worldY; internal float worldSignX, worldSignY; + internal bool sorted; + public BoneData Data { get { return data; } } public Skeleton Skeleton { get { return skeleton; } } public Bone Parent { get { return parent; } } @@ -56,10 +57,6 @@ namespace Spine { public float Rotation { get { return rotation; } set { rotation = value; } } /// The rotation, as calculated by any constraints. public float AppliedRotation { get { return appliedRotation; } set { appliedRotation = value; } } - /// The scale X, as calculated by any constraints. - public float AppliedScaleX { get { return appliedScaleX; } set { appliedScaleX = value; } } - /// The scale Y, as calculated by any constraints. - public float AppliedScaleY { get { return appliedScaleY; } set { appliedScaleY = value; } } public float ScaleX { get { return scaleX; } set { scaleX = value; } } public float ScaleY { get { return scaleY; } set { scaleY = value; } } public float ShearX { get { return shearX; } set { shearX = value; } } @@ -80,29 +77,27 @@ namespace Spine { /// May be null. public Bone (BoneData data, Skeleton skeleton, Bone parent) { - if (data == null) throw new ArgumentNullException("data cannot be null."); - if (skeleton == null) throw new ArgumentNullException("skeleton cannot be null."); + if (data == null) throw new ArgumentNullException("data", "data cannot be null."); + if (skeleton == null) throw new ArgumentNullException("skeleton", "skeleton cannot be null."); this.data = data; this.skeleton = skeleton; this.parent = parent; SetToSetupPose(); } - /// Same as {@link #updateWorldTransform()}. This method exists for Bone to implement {@link Updatable}. + /// Same as . This method exists for Bone to implement . public void Update () { UpdateWorldTransform(x, y, rotation, scaleX, scaleY, shearX, shearY); } - /// Computes the world SRT using the parent bone and this bone's local SRT. + /// Computes the world transform using the parent bone and this bone's local transform. public void UpdateWorldTransform () { UpdateWorldTransform(x, y, rotation, scaleX, scaleY, shearX, shearY); } - /// Computes the world SRT using the parent bone and the specified local SRT. + /// Computes the world transform using the parent bone and the specified local transform. public void UpdateWorldTransform (float x, float y, float rotation, float scaleX, float scaleY, float shearX, float shearY) { appliedRotation = rotation; - appliedScaleX = scaleX; - appliedScaleY = scaleY; float rotationY = rotation + 90 + shearY; float la = MathUtils.CosDeg(rotation + shearX) * scaleX, lb = MathUtils.CosDeg(rotationY) * scaleY; @@ -152,10 +147,10 @@ namespace Spine { do { float cos = MathUtils.CosDeg(parent.appliedRotation), sin = MathUtils.SinDeg(parent.appliedRotation); float temp = pa * cos + pb * sin; - pb = pa * -sin + pb * cos; + pb = pb * cos - pa * sin; pa = temp; temp = pc * cos + pd * sin; - pd = pc * -sin + pd * cos; + pd = pd * cos - pc * sin; pc = temp; if (!parent.data.inheritRotation) break; @@ -171,24 +166,22 @@ namespace Spine { pc = 0; pd = 1; do { - float r = parent.appliedRotation, cos = MathUtils.CosDeg(r), sin = MathUtils.SinDeg(r); - float psx = parent.appliedScaleX, psy = parent.appliedScaleY; - float za = cos * psx, zb = -sin * psy, zc = sin * psx, zd = cos * psy; + float cos = MathUtils.CosDeg(parent.appliedRotation), sin = MathUtils.SinDeg(parent.appliedRotation); + float psx = parent.scaleX, psy = parent.scaleY; + float za = cos * psx, zb = sin * psy, zc = sin * psx, zd = cos * psy; float temp = pa * za + pb * zc; - pb = pa * zb + pb * zd; + pb = pb * zd - pa * zb; pa = temp; temp = pc * za + pd * zc; - pd = pc * zb + pd * zd; + pd = pd * zd - pc * zb; pc = temp; - if (psx < 0) r = -r; - cos = MathUtils.CosDeg(-r); - sin = MathUtils.SinDeg(-r); + if (psx >= 0) sin = -sin; temp = pa * cos + pb * sin; - pb = pa * -sin + pb * cos; + pb = pb * cos - pa * sin; pa = temp; temp = pc * cos + pd * sin; - pd = pc * -sin + pd * cos; + pd = pd * cos - pc * sin; pc = temp; if (!parent.data.inheritScale) break; @@ -226,10 +219,86 @@ namespace Spine { shearY = data.shearY; } - public void WorldToLocal (float worldX, float worldY, out float localX, out float localY) { - float x = worldX - this.worldX, y = worldY - this.worldY; + public float WorldToLocalRotationX { + get { + Bone parent = this.parent; + if (parent == null) return rotation; + float pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d, a = this.a, c = this.c; + return MathUtils.Atan2(pa * c - pc * a, pd * a - pb * c) * MathUtils.radDeg; + } + } + + public float WorldToLocalRotationY { + get { + Bone parent = this.parent; + if (parent == null) return rotation; + float pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d, b = this.b, d = this.d; + return MathUtils.Atan2(pa * d - pc * b, pd * b - pb * d) * MathUtils.radDeg; + } + } + + public void RotateWorld (float degrees) { + float a = this.a, b = this.b, c = this.c, d = this.d; + float cos = MathUtils.CosDeg(degrees), sin = MathUtils.SinDeg(degrees); + this.a = cos * a - sin * c; + this.b = cos * b - sin * d; + this.c = sin * a + cos * c; + this.d = sin * b + cos * d; + } + + /// + /// Computes the local transform from the world transform. This can be useful to perform processing on the local transform + /// after the world transform has been modified directly (eg, by a constraint). + /// + /// Some redundant information is lost by the world transform, such as -1,-1 scale versus 180 rotation. The computed local + /// transform values may differ from the original values but are functionally the same. + /// + public void UpdateLocalTransform () { + Bone parent = this.parent; + if (parent == null) { + x = worldX; + y = worldY; + rotation = MathUtils.Atan2(c, a) * MathUtils.radDeg; + scaleX = (float)Math.Sqrt(a * a + c * c); + scaleY = (float)Math.Sqrt(b * b + d * d); + float det = a * d - b * c; + shearX = 0; + shearY = MathUtils.Atan2(a * b + c * d, det) * MathUtils.radDeg; + return; + } + float pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + float pid = 1 / (pa * pd - pb * pc); + float dx = worldX - parent.worldX, dy = worldY - parent.worldY; + x = (dx * pd * pid - dy * pb * pid); + y = (dy * pa * pid - dx * pc * pid); + float ia = pid * pd; + float id = pid * pa; + float ib = pid * pb; + float ic = pid * pc; + float ra = ia * a - ib * c; + float rb = ia * b - ib * d; + float rc = id * c - ic * a; + float rd = id * d - ic * b; + shearX = 0; + scaleX = (float)Math.Sqrt(ra * ra + rc * rc); + if (scaleX > 0.0001f) { + float det = ra * rd - rb * rc; + scaleY = det / scaleX; + shearY = MathUtils.Atan2(ra * rb + rc * rd, det) * MathUtils.radDeg; + rotation = MathUtils.Atan2(rc, ra) * MathUtils.radDeg; + } else { + scaleX = 0; + scaleY = (float)Math.Sqrt(rb * rb + rd * rd); + shearY = 0; + rotation = 90 - MathUtils.Atan2(rd, rb) * MathUtils.radDeg; + } + appliedRotation = rotation; + } + + public void WorldToLocal (float worldX, float worldY, out float localX, out float localY) { float a = this.a, b = this.b, c = this.c, d = this.d; float invDet = 1 / (a * d - b * c); + float x = worldX - this.worldX, y = worldY - this.worldY; localX = (x * d * invDet - y * b * invDet); localY = (y * a * invDet - x * c * invDet); } diff --git a/spine-csharp/src/BoneData.cs b/spine-csharp/src/BoneData.cs index 21b1ed555..db51b6738 100644 --- a/spine-csharp/src/BoneData.cs +++ b/spine-csharp/src/BoneData.cs @@ -33,14 +33,17 @@ using System; namespace Spine { public class BoneData { - internal BoneData parent; + internal int index; internal String name; - internal float length, x, y, rotation, scaleX = 1, scaleY = 1, shearX, shearY; - internal bool inheritScale = true, inheritRotation = true; + internal BoneData parent; + internal float length; + internal float x, y, rotation, scaleX = 1, scaleY = 1, shearX, shearY; + internal bool inheritRotation = true, inheritScale = true; /// May be null. - public BoneData Parent { get { return parent; } } + public int Index { get { return index; } } public String Name { get { return name; } } + public BoneData Parent { get { return parent; } } public float Length { get { return length; } set { length = value; } } public float X { get { return x; } set { x = value; } } public float Y { get { return y; } set { y = value; } } @@ -49,12 +52,14 @@ namespace Spine { public float ScaleY { get { return scaleY; } set { scaleY = value; } } public float ShearX { get { return shearX; } set { shearX = value; } } public float ShearY { get { return shearY; } set { shearY = value; } } - public bool InheritScale { get { return inheritScale; } set { inheritScale = value; } } public bool InheritRotation { get { return inheritRotation; } set { inheritRotation = value; } } + public bool InheritScale { get { return inheritScale; } set { inheritScale = value; } } /// May be null. - public BoneData (String name, BoneData parent) { - if (name == null) throw new ArgumentNullException("name cannot be null."); + public BoneData (int index, String name, BoneData parent) { + if (index < 0) throw new ArgumentException("index must be >= 0", "index"); + if (name == null) throw new ArgumentNullException("name", "name cannot be null."); + this.index = index; this.name = name; this.parent = parent; } diff --git a/spine-csharp/src/Event.cs b/spine-csharp/src/Event.cs index bbb2ad350..134a98026 100644 --- a/spine-csharp/src/Event.cs +++ b/spine-csharp/src/Event.cs @@ -40,6 +40,7 @@ namespace Spine { public float Time { get; private set; } public Event (float time, EventData data) { + if (data == null) throw new ArgumentNullException("data", "data cannot be null."); Time = time; Data = data; } diff --git a/spine-csharp/src/EventData.cs b/spine-csharp/src/EventData.cs index 187bb8219..3dc647bf5 100644 --- a/spine-csharp/src/EventData.cs +++ b/spine-csharp/src/EventData.cs @@ -41,7 +41,7 @@ namespace Spine { public String String { get; set; } public EventData (String name) { - if (name == null) throw new ArgumentNullException("name cannot be null."); + if (name == null) throw new ArgumentNullException("name", "name cannot be null."); this.name = name; } diff --git a/spine-csharp/src/ExposedList.cs b/spine-csharp/src/ExposedList.cs index 45287c0d7..a24db4a93 100644 --- a/spine-csharp/src/ExposedList.cs +++ b/spine-csharp/src/ExposedList.cs @@ -89,6 +89,12 @@ namespace Spine { Capacity = Math.Max(Math.Max(Capacity * 2, DefaultCapacity), minimumSize); } + public ExposedList Resize (int newSize) { + if (newSize > Items.Length) Array.Resize(ref Items, newSize); + Count = newSize; + return this; + } + private void CheckRange (int idx, int count) { if (idx < 0) throw new ArgumentOutOfRangeException("index"); @@ -580,4 +586,4 @@ namespace Spine { } } } -} \ No newline at end of file +} diff --git a/spine-csharp/src/IkConstraint.cs b/spine-csharp/src/IkConstraint.cs index 3b4530135..c15627f72 100644 --- a/spine-csharp/src/IkConstraint.cs +++ b/spine-csharp/src/IkConstraint.cs @@ -30,15 +30,16 @@ *****************************************************************************/ using System; -using System.Collections.Generic; namespace Spine { public class IkConstraint : IUpdatable { internal IkConstraintData data; internal ExposedList bones = new ExposedList(); internal Bone target; - internal int bendDirection; internal float mix; + internal int bendDirection; + + internal int level; public IkConstraintData Data { get { return data; } } public ExposedList Bones { get { return bones; } } @@ -47,8 +48,8 @@ namespace Spine { public float Mix { get { return mix; } set { mix = value; } } public IkConstraint (IkConstraintData data, Skeleton skeleton) { - if (data == null) throw new ArgumentNullException("data cannot be null."); - if (skeleton == null) throw new ArgumentNullException("skeleton cannot be null."); + if (data == null) throw new ArgumentNullException("data", "data cannot be null."); + if (skeleton == null) throw new ArgumentNullException("skeleton", "skeleton cannot be null."); this.data = data; mix = data.mix; bendDirection = data.bendDirection; @@ -87,21 +88,24 @@ namespace Spine { float id = 1 / (pp.a * pp.d - pp.b * pp.c); float x = targetX - pp.worldX, y = targetY - pp.worldY; float tx = (x * pp.d - y * pp.b) * id - bone.x, ty = (y * pp.a - x * pp.c) * id - bone.y; - float rotationIK = MathUtils.Atan2(ty, tx) * MathUtils.radDeg - bone.shearX; + float rotationIK = MathUtils.Atan2(ty, tx) * MathUtils.radDeg - bone.shearX - bone.rotation; if (bone.scaleX < 0) rotationIK += 180; if (rotationIK > 180) rotationIK -= 360; else if (rotationIK < -180) rotationIK += 360; - bone.UpdateWorldTransform(bone.x, bone.y, bone.rotation + (rotationIK - bone.rotation) * alpha, bone.appliedScaleX, - bone.appliedScaleY, bone.shearX, bone.shearY); + bone.UpdateWorldTransform(bone.x, bone.y, bone.rotation + rotationIK * alpha, bone.scaleX, bone.scaleY, + bone.shearX, bone.shearY); } /// Adjusts the parent and child bone rotations so the tip of the child is as close to the target position as /// possible. The target is specified in the world coordinate system. /// A direct descendant of the parent bone. static public void Apply (Bone parent, Bone child, float targetX, float targetY, int bendDir, float alpha) { - if (alpha == 0) return; - float px = parent.x, py = parent.y, psx = parent.appliedScaleX, psy = parent.appliedScaleY; + if (alpha == 0) { + child.UpdateWorldTransform (); + return; + } + float px = parent.x, py = parent.y, psx = parent.scaleX, psy = parent.scaleY, csx = child.scaleX; int os1, os2, s2; if (psx < 0) { psx = -psx; @@ -115,44 +119,55 @@ namespace Spine { psy = -psy; s2 = -s2; } - float cx = child.x, cy = child.y, csx = child.appliedScaleX; - bool u = Math.Abs(psx - psy) <= 0.0001f; - if (!u && cy != 0) { - child.worldX = parent.a * cx + parent.worldX; - child.worldY = parent.c * cx + parent.worldY; - cy = 0; - } if (csx < 0) { csx = -csx; os2 = 180; } else os2 = 0; + float cx = child.x, cy, cwx, cwy, a = parent.a, b = parent.b, c = parent.c, d = parent.d; + bool u = Math.Abs(psx - psy) <= 0.0001f; + if (!u) { + cy = 0; + cwx = a * cx + parent.worldX; + cwy = c * cx + parent.worldY; + } else { + cy = child.y; + cwx = a * cx + b * cy + parent.worldX; + cwy = c * cx + d * cy + parent.worldY; + } Bone pp = parent.parent; - float ppa = pp.a, ppb = pp.b, ppc = pp.c, ppd = pp.d, id = 1 / (ppa * ppd - ppb * ppc); - float x = targetX - pp.worldX, y = targetY - pp.worldY; - float tx = (x * ppd - y * ppb) * id - px, ty = (y * ppa - x * ppc) * id - py; - x = child.worldX - pp.worldX; - y = child.worldY - pp.worldY; - float dx = (x * ppd - y * ppb) * id - px, dy = (y * ppa - x * ppc) * id - py; + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + float id = 1 / (a * d - b * c), x = targetX - pp.worldX, y = targetY - pp.worldY; + float tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + x = cwx - pp.worldX; + y = cwy - pp.worldY; + float dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; float l1 = (float)Math.Sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; if (u) { l2 *= psx; float cos = (tx * tx + ty * ty - l1 * l1 - l2 * l2) / (2 * l1 * l2); - if (cos < -1) cos = -1; + if (cos < -1) + cos = -1; else if (cos > 1) cos = 1; a2 = (float)Math.Acos(cos) * bendDir; - float a = l1 + l2 * cos, o = l2 * MathUtils.Sin(a2); - a1 = MathUtils.Atan2(ty * a - tx * o, tx * a + ty * o); + a = l1 + l2 * cos; + b = l2 * MathUtils.Sin(a2); + a1 = MathUtils.Atan2(ty * a - tx * b, tx * a + ty * b); } else { - float a = psx * l2, b = psy * l2, ta = MathUtils.Atan2(ty, tx); - float aa = a * a, bb = b * b, ll = l1 * l1, dd = tx * tx + ty * ty; - float c0 = bb * ll + aa * dd - aa * bb, c1 = -2 * bb * l1, c2 = bb - aa; - float d = c1 * c1 - 4 * c2 * c0; + a = psx * l2; + b = psy * l2; + float aa = a * a, bb = b * b, dd = tx * tx + ty * ty, ta = MathUtils.Atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + float c1 = -2 * bb * l1, c2 = bb - aa; + d = c1 * c1 - 4 * c2 * c; if (d >= 0) { float q = (float)Math.Sqrt(d); if (c1 < 0) q = -q; q = -(c1 + q) / 2; - float r0 = q / c2, r1 = c0 / q; + float r0 = q / c2, r1 = c / q; float r = Math.Abs(r0) < Math.Abs(r1) ? r0 : r1; if (r * r <= dd) { y = (float)Math.Sqrt(dd - r * r) * bendDir; @@ -201,18 +216,20 @@ namespace Spine { a2 = maxAngle * bendDir; } } - outer: + outer: float os = MathUtils.Atan2(cy, cx) * s2; - a1 = (a1 - os) * MathUtils.radDeg + os1; - a2 = ((a2 + os) * MathUtils.radDeg - child.shearX) * s2 + os2; - if (a1 > 180) a1 -= 360; - else if (a1 < -180) a1 += 360; - if (a2 > 180) a2 -= 360; - else if (a2 < -180) a2 += 360; float rotation = parent.rotation; - parent.UpdateWorldTransform(px, py, rotation + (a1 - rotation) * alpha, parent.appliedScaleX, parent.appliedScaleY, 0, 0); + a1 = (a1 - os) * MathUtils.radDeg + os1 - rotation; + if (a1 > 180) + a1 -= 360; + else if (a1 < -180) a1 += 360; + parent.UpdateWorldTransform(px, py, rotation + a1 * alpha, parent.scaleX, parent.scaleY, 0, 0); rotation = child.rotation; - child.UpdateWorldTransform(cx, cy, rotation + (a2 - rotation) * alpha, child.appliedScaleX, child.appliedScaleY, child.shearX, child.shearY); + a2 = ((a2 + os) * MathUtils.radDeg - child.shearX) * s2 + os2 - rotation; + if (a2 > 180) + a2 -= 360; + else if (a2 < -180) a2 += 360; + child.UpdateWorldTransform(cx, cy, rotation + a2 * alpha, child.scaleX, child.scaleY, child.shearX, child.shearY); } } } diff --git a/spine-csharp/src/IkConstraintData.cs b/spine-csharp/src/IkConstraintData.cs index 6bb9c752d..2b0723b93 100644 --- a/spine-csharp/src/IkConstraintData.cs +++ b/spine-csharp/src/IkConstraintData.cs @@ -47,7 +47,7 @@ namespace Spine { public float Mix { get { return mix; } set { mix = value; } } public IkConstraintData (String name) { - if (name == null) throw new ArgumentNullException("name cannot be null."); + if (name == null) throw new ArgumentNullException("name", "name cannot be null."); this.name = name; } diff --git a/spine-csharp/src/MathUtils.cs b/spine-csharp/src/MathUtils.cs index 665cf8f06..e8a8f86df 100644 --- a/spine-csharp/src/MathUtils.cs +++ b/spine-csharp/src/MathUtils.cs @@ -54,22 +54,22 @@ namespace Spine { sin[(int)(i * degToIndex) & SIN_MASK] = (float)Math.Sin(i * degRad); } - /** Returns the sine in radians from a lookup table. */ + /// Returns the sine in radians from a lookup table. static public float Sin (float radians) { return sin[(int)(radians * radToIndex) & SIN_MASK]; } - /** Returns the cosine in radians from a lookup table. */ + /// Returns the cosine in radians from a lookup table. static public float Cos (float radians) { return sin[(int)((radians + PI / 2) * radToIndex) & SIN_MASK]; } - - /** Returns the sine in radians from a lookup table. */ + + /// Returns the sine in radians from a lookup table. static public float SinDeg (float degrees) { return sin[(int)(degrees * degToIndex) & SIN_MASK]; } - - /** Returns the cosine in radians from a lookup table. */ + + /// Returns the cosine in radians from a lookup table. static public float CosDeg (float degrees) { return sin[(int)((degrees + 90) * degToIndex) & SIN_MASK]; } @@ -91,5 +91,11 @@ namespace Spine { atan = PI / 2 - z / (z * z + 0.28f); return y < 0f ? atan - PI : atan; } + + static public float Clamp (float value, float min, float max) { + if (value < min) return min; + if (value > max) return max; + return value; + } } } diff --git a/spine-csharp/src/PathConstraint.cs b/spine-csharp/src/PathConstraint.cs new file mode 100644 index 000000000..eddada80d --- /dev/null +++ b/spine-csharp/src/PathConstraint.cs @@ -0,0 +1,400 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +using System; + +namespace Spine { + public class PathConstraint : IUpdatable { + private const int NONE = -1, BEFORE = -2, AFTER = -3; + + internal PathConstraintData data; + internal ExposedList bones; + internal Slot target; + internal float position, spacing, rotateMix, translateMix; + + internal ExposedList spaces = new ExposedList(), positions = new ExposedList(); + internal ExposedList world = new ExposedList(), curves = new ExposedList(), lengths = new ExposedList(); + internal float[] segments = new float[10]; + + public float Position { get { return position; } set { position = value; } } + public float Spacing { get { return spacing; } set { spacing = value; } } + public float RotateMix { get { return rotateMix; } set { rotateMix = value; } } + public float TranslateMix { get { return translateMix; } set { translateMix = value; } } + public ExposedList Bones { get { return bones; } } + public Slot Target { get { return target; } set { target = value; } } + public PathConstraintData Data { get { return data; } } + + public PathConstraint (PathConstraintData data, Skeleton skeleton) { + if (data == null) throw new ArgumentNullException("data", "data cannot be null."); + if (skeleton == null) throw new ArgumentNullException("skeleton", "skeleton cannot be null."); + this.data = data; + bones = new ExposedList(data.Bones.Count); + foreach (BoneData boneData in data.bones) + bones.Add(skeleton.FindBone(boneData.name)); + target = skeleton.FindSlot(data.target.name); + position = data.position; + spacing = data.spacing; + rotateMix = data.rotateMix; + translateMix = data.translateMix; + } + + public void Apply () { + Update(); + } + + public void Update () { + PathAttachment attachment = target.Attachment as PathAttachment; + if (attachment == null) return; + + float rotateMix = this.rotateMix, translateMix = this.translateMix; + bool translate = translateMix > 0, rotate = rotateMix > 0; + if (!translate && !rotate) return; + + PathConstraintData data = this.data; + SpacingMode spacingMode = data.spacingMode; + bool lengthSpacing = spacingMode == SpacingMode.Length; + RotateMode rotateMode = data.rotateMode; + bool tangents = rotateMode == RotateMode.Tangent, scale = rotateMode == RotateMode.ChainScale; + int boneCount = this.bones.Count, spacesCount = tangents ? boneCount : boneCount + 1; + Bone[] bones = this.bones.Items; + ExposedList spaces = this.spaces.Resize(spacesCount), lengths = null; + float spacing = this.spacing; + if (scale || lengthSpacing) { + if (scale) lengths = this.lengths.Resize(boneCount); + for (int i = 0, n = spacesCount - 1; i < n;) { + Bone bone = bones[i]; + float length = bone.data.length, x = length * bone.a, y = length * bone.c; + length = (float)Math.Sqrt(x * x + y * y); + if (scale) lengths.Items[i] = length; + spaces.Items[++i] = lengthSpacing ? Math.Max(0, length + spacing) : spacing; + } + } else { + for (int i = 1; i < spacesCount; i++) + spaces.Items[i] = spacing; + } + + float[] positions = ComputeWorldPositions(attachment, spacesCount, tangents, + data.positionMode == PositionMode.Percent, spacingMode == SpacingMode.Percent); + Skeleton skeleton = target.Skeleton; + float skeletonX = skeleton.x, skeletonY = skeleton.y; + float boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; + bool tip = rotateMode == RotateMode.Chain && offsetRotation == 0; + for (int i = 0, p = 3; i < boneCount; i++, p += 3) { + Bone bone = (Bone)bones[i]; + bone.worldX += (boneX - skeletonX - bone.worldX) * translateMix; + bone.worldY += (boneY - skeletonY - bone.worldY) * translateMix; + float x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; + if (scale) { + float length = lengths.Items[i]; + if (length != 0) { + float s = ((float)Math.Sqrt(dx * dx + dy * dy) / length - 1) * rotateMix + 1; + bone.a *= s; + bone.c *= s; + } + } + boneX = x; + boneY = y; + if (rotate) { + float a = bone.a, b = bone.b, c = bone.c, d = bone.d, r, cos, sin; + if (tangents) + r = positions[p - 1]; + else if (spaces.Items[i + 1] == 0) + r = positions[p + 2]; + else + r = MathUtils.Atan2(dy, dx); + r -= MathUtils.Atan2(c, a) - offsetRotation * MathUtils.degRad; + if (tip) { + cos = MathUtils.Cos(r); + sin = MathUtils.Sin(r); + float length = bone.data.length; + boneX += (length * (cos * a - sin * c) - dx) * rotateMix; + boneY += (length * (sin * a + cos * c) - dy) * rotateMix; + } + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) // + r += MathUtils.PI2; + r *= rotateMix; + cos = MathUtils.Cos(r); + sin = MathUtils.Sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + } + } + + float[] ComputeWorldPositions (PathAttachment path, int spacesCount, bool tangents, bool percentPosition, + bool percentSpacing) { + + Slot target = this.target; + float position = this.position; + float[] spaces = this.spaces.Items, output = this.positions.Resize(spacesCount * 3 + 2).Items, world; + bool closed = path.Closed; + int verticesLength = path.WorldVerticesLength, curveCount = verticesLength / 6, prevCurve = NONE; + + float pathLength; + if (!path.ConstantSpeed) { + float[] lengths = path.Lengths; + curveCount -= closed ? 1 : 2; + pathLength = lengths[curveCount]; + if (percentPosition) position *= pathLength; + if (percentSpacing) { + for (int i = 0; i < spacesCount; i++) + spaces[i] *= pathLength; + } + world = this.world.Resize(8).Items; + for (int i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + float space = spaces[i]; + position += space; + float p = position; + + if (closed) { + p %= pathLength; + if (p < 0) p += pathLength; + curve = 0; + } else if (p < 0) { + if (prevCurve != BEFORE) { + prevCurve = BEFORE; + path.ComputeWorldVertices(target, 2, 4, world, 0); + } + AddBeforePosition(p, world, 0, output, o); + continue; + } else if (p > pathLength) { + if (prevCurve != AFTER) { + prevCurve = AFTER; + path.ComputeWorldVertices(target, verticesLength - 6, 4, world, 0); + } + AddAfterPosition(p - pathLength, world, 0, output, o); + continue; + } + + // Determine curve containing position. + for (;; curve++) { + float length = lengths[curve]; + if (p > length) continue; + if (curve == 0) + p /= length; + else { + float prev = lengths[curve - 1]; + p = (p - prev) / (length - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + if (closed && curve == curveCount) { + path.ComputeWorldVertices(target, verticesLength - 4, 4, world, 0); + path.ComputeWorldVertices(target, 0, 4, world, 4); + } else + path.ComputeWorldVertices(target, curve * 6 + 2, 8, world, 0); + } + AddCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], output, o, + tangents || (i > 0 && space == 0)); + } + return output; + } + + // World vertices. + if (closed) { + verticesLength += 2; + world = this.world.Resize(verticesLength).Items; + path.ComputeWorldVertices(target, 2, verticesLength - 4, world, 0); + path.ComputeWorldVertices(target, 0, 2, world, verticesLength - 4); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } else { + curveCount--; + verticesLength -= 4; + world = this.world.Resize(verticesLength).Items; + path.ComputeWorldVertices(target, 2, verticesLength, world, 0); + } + + // Curve lengths. + float[] curves = this.curves.Resize(curveCount).Items; + pathLength = 0; + float x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + float tmpx, tmpy, dddfx, dddfy, ddfx, ddfy, dfx, dfy; + for (int i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.1875f; + tmpy = (y1 - cy1 * 2 + cy2) * 0.1875f; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375f; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375f; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.75f + tmpx + dddfx * 0.16666667f; + dfy = (cy1 - y1) * 0.75f + tmpy + dddfy * 0.16666667f; + pathLength += (float)Math.Sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += (float)Math.Sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += (float)Math.Sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += (float)Math.Sqrt(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + if (percentPosition) position *= pathLength; + if (percentSpacing) { + for (int i = 0; i < spacesCount; i++) + spaces[i] *= pathLength; + } + + float[] segments = this.segments; + float curveLength = 0; + for (int i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + float space = spaces[i]; + position += space; + float p = position; + + if (closed) { + p %= pathLength; + if (p < 0) p += pathLength; + curve = 0; + } else if (p < 0) { + AddBeforePosition(p, world, 0, output, o); + continue; + } else if (p > pathLength) { + AddAfterPosition(p - pathLength, world, verticesLength - 4, output, o); + continue; + } + + // Determine curve containing position. + for (;; curve++) { + float length = curves[curve]; + if (p > length) continue; + if (curve == 0) + p /= length; + else { + float prev = curves[curve - 1]; + p = (p - prev) / (length - prev); + } + break; + } + + // Curve segment lengths. + if (curve != prevCurve) { + prevCurve = curve; + int ii = curve * 6; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.03f; + tmpy = (y1 - cy1 * 2 + cy2) * 0.03f; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006f; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006f; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.3f + tmpx + dddfx * 0.16666667f; + dfy = (cy1 - y1) * 0.3f + tmpy + dddfy * 0.16666667f; + curveLength = (float)Math.Sqrt(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += (float)Math.Sqrt(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += (float)Math.Sqrt(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += (float)Math.Sqrt(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + + // Weight by segment length. + p *= curveLength; + for (;; segment++) { + float length = segments[segment]; + if (p > length) continue; + if (segment == 0) + p /= length; + else { + float prev = segments[segment - 1]; + p = segment + (p - prev) / (length - prev); + } + break; + } + AddCurvePosition(p * 0.1f, x1, y1, cx1, cy1, cx2, cy2, x2, y2, output, o, tangents || (i > 0 && space == 0)); + } + return output; + } + + private void AddBeforePosition (float p, float[] temp, int i, float[] output, int o) { + float x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = MathUtils.Atan2(dy, dx); + output[o] = x1 + p * MathUtils.Cos(r); + output[o + 1] = y1 + p * MathUtils.Sin(r); + output[o + 2] = r; + } + + private void AddAfterPosition (float p, float[] temp, int i, float[] output, int o) { + float x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = MathUtils.Atan2(dy, dx); + output[o] = x1 + p * MathUtils.Cos(r); + output[o + 1] = y1 + p * MathUtils.Sin(r); + output[o + 2] = r; + } + + private void AddCurvePosition (float p, float x1, float y1, float cx1, float cy1, float cx2, float cy2, float x2, float y2, + float[] output, int o, bool tangents) { + if (p == 0) p = 0.0001f; + float tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; + float ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; + float x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + output[o] = x; + output[o + 1] = y; + if (tangents) output[o + 2] = (float)Math.Atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); + } + } +} diff --git a/spine-csharp/src/PathConstraintData.cs b/spine-csharp/src/PathConstraintData.cs new file mode 100644 index 000000000..ed2cda3e0 --- /dev/null +++ b/spine-csharp/src/PathConstraintData.cs @@ -0,0 +1,74 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +using System; + +namespace Spine { + public class PathConstraintData { + internal String name; + internal ExposedList bones = new ExposedList(); + internal SlotData target; + internal PositionMode positionMode; + internal SpacingMode spacingMode; + internal RotateMode rotateMode; + internal float offsetRotation; + internal float position, spacing, rotateMix, translateMix; + + public ExposedList Bones { get { return bones; } } + public SlotData Target { get { return target; } set { target = value; } } + public PositionMode PositionMode { get { return positionMode; } set { positionMode = value; } } + public SpacingMode SpacingMode { get { return spacingMode; } set { spacingMode = value; } } + public RotateMode RotateMode { get { return rotateMode; } set { rotateMode = value; } } + public float OffsetRotation { get { return offsetRotation; } set { offsetRotation = value; } } + public float Position { get { return position; } set { position = value; } } + public float Spacing { get { return spacing; } set { spacing = value; } } + public float RotateMix { get { return rotateMix; } set { rotateMix = value; } } + public float TranslateMix { get { return translateMix; } set { translateMix = value; } } + public String Name { get { return name; } } + + public PathConstraintData (String name) { + if (name == null) throw new ArgumentNullException("name", "name cannot be null."); + this.name = name; + } + } + + public enum PositionMode { + Fixed, Percent + } + + public enum SpacingMode { + Length, Fixed, Percent + } + + public enum RotateMode { + Tangent, Chain, ChainScale + } +} diff --git a/spine-csharp/src/Skeleton.cs b/spine-csharp/src/Skeleton.cs index ea88ecd76..37def244a 100644 --- a/spine-csharp/src/Skeleton.cs +++ b/spine-csharp/src/Skeleton.cs @@ -38,9 +38,10 @@ namespace Spine { internal ExposedList bones; internal ExposedList slots; internal ExposedList drawOrder; - internal ExposedList ikConstraints; + internal ExposedList ikConstraints, ikConstraintsSorted; internal ExposedList transformConstraints; - private ExposedList updateCache = new ExposedList(); + internal ExposedList pathConstraints; + internal ExposedList updateCache = new ExposedList(); internal Skin skin; internal float r = 1, g = 1, b = 1, a = 1; internal float time; @@ -49,9 +50,12 @@ namespace Spine { public SkeletonData Data { get { return data; } } public ExposedList Bones { get { return bones; } } + public ExposedList UpdateCacheList { get { return updateCache; } } public ExposedList Slots { get { return slots; } } public ExposedList DrawOrder { get { return drawOrder; } } - public ExposedList IkConstraints { get { return ikConstraints; } set { ikConstraints = value; } } + public ExposedList IkConstraints { get { return ikConstraints; } } + public ExposedList PathConstraints { get { return pathConstraints; } } + public ExposedList TransformConstraints { get { return transformConstraints; } } public Skin Skin { get { return skin; } set { skin = value; } } public float R { get { return r; } set { r = value; } } public float G { get { return g; } set { g = value; } } @@ -64,33 +68,37 @@ namespace Spine { public bool FlipY { get { return flipY; } set { flipY = value; } } public Bone RootBone { - get { - return bones.Count == 0 ? null : bones.Items[0]; - } + get { return bones.Count == 0 ? null : bones.Items[0]; } } public Skeleton (SkeletonData data) { - if (data == null) throw new ArgumentNullException("data cannot be null."); + if (data == null) throw new ArgumentNullException("data", "data cannot be null."); this.data = data; bones = new ExposedList(data.bones.Count); foreach (BoneData boneData in data.bones) { - Bone parent = boneData.parent == null ? null : bones.Items[data.bones.IndexOf(boneData.parent)]; - Bone bone = new Bone(boneData, this, parent); - if (parent != null) parent.children.Add(bone); + Bone bone; + if (boneData.parent == null) { + bone = new Bone(boneData, this, null); + } else { + Bone parent = bones.Items[boneData.parent.index]; + bone = new Bone(boneData, this, parent); + parent.children.Add(bone); + } bones.Add(bone); } slots = new ExposedList(data.slots.Count); drawOrder = new ExposedList(data.slots.Count); foreach (SlotData slotData in data.slots) { - Bone bone = bones.Items[data.bones.IndexOf(slotData.boneData)]; + Bone bone = bones.Items[slotData.boneData.index]; Slot slot = new Slot(slotData, bone); slots.Add(slot); drawOrder.Add(slot); } ikConstraints = new ExposedList(data.ikConstraints.Count); + ikConstraintsSorted = new ExposedList(data.ikConstraints.Count); foreach (IkConstraintData ikConstraintData in data.ikConstraints) ikConstraints.Add(new IkConstraint(ikConstraintData, this)); @@ -98,48 +106,152 @@ namespace Spine { foreach (TransformConstraintData transformConstraintData in data.transformConstraints) transformConstraints.Add(new TransformConstraint(transformConstraintData, this)); + pathConstraints = new ExposedList (data.pathConstraints.Count); + foreach (PathConstraintData pathConstraintData in data.pathConstraints) + pathConstraints.Add(new PathConstraint(pathConstraintData, this)); + UpdateCache(); UpdateWorldTransform(); } - /// Caches information about bones and constraints. Must be called if bones or constraints are added + /// Caches information about bones and constraints. Must be called if bones, constraints or weighted path attachments are added /// or removed. public void UpdateCache () { - ExposedList bones = this.bones; ExposedList updateCache = this.updateCache; - ExposedList ikConstraints = this.ikConstraints; - ExposedList transformConstraints = this.transformConstraints; - int ikConstraintsCount = ikConstraints.Count; - int transformConstraintsCount = transformConstraints.Count; updateCache.Clear(); - for (int i = 0, n = bones.Count; i < n; i++) { - Bone bone = bones.Items[i]; - updateCache.Add(bone); - for (int ii = 0; ii < ikConstraintsCount; ii++) { - IkConstraint ikConstraint = ikConstraints.Items[ii]; - if (bone == ikConstraint.bones.Items[ikConstraint.bones.Count - 1]) { - updateCache.Add(ikConstraint); - break; - } + + ExposedList bones = this.bones; + for (int i = 0, n = bones.Count; i < n; i++) + bones.Items[i].sorted = false; + + ExposedList ikConstraints = this.ikConstraintsSorted; + ikConstraints.Clear(); + ikConstraints.AddRange(this.ikConstraints); + int ikCount = ikConstraints.Count; + for (int i = 0, level, n = ikCount; i < n; i++) { + IkConstraint ik = ikConstraints.Items[i]; + Bone bone = ik.bones.Items[0].parent; + for (level = 0; bone != null; level++) + bone = bone.parent; + ik.level = level; + } + for (int i = 1, ii; i < ikCount; i++) { + IkConstraint ik = ikConstraints.Items[i]; + int level = ik.level; + for (ii = i - 1; ii >= 0; ii--) { + IkConstraint other = ikConstraints.Items[ii]; + if (other.level < level) break; + ikConstraints.Items[ii + 1] = other; } + ikConstraints.Items[ii + 1] = ik; + } + for (int i = 0, n = ikConstraints.Count; i < n; i++) { + IkConstraint constraint = ikConstraints.Items[i]; + Bone target = constraint.target; + SortBone(target); + + ExposedList constrained = constraint.bones; + Bone parent = constrained.Items[0]; + SortBone(parent); + + updateCache.Add(constraint); + + SortReset(parent.children); + constrained.Items[constrained.Count - 1].sorted = true; } - for (int i = 0; i < transformConstraintsCount; i++) { - TransformConstraint transformConstraint = transformConstraints.Items[i]; - for (int ii = updateCache.Count - 1; i >= 0; ii--) { - if (updateCache.Items[ii] == transformConstraint.bone) { - updateCache.Insert(ii + 1, transformConstraint); - break; - } - } + ExposedList pathConstraints = this.pathConstraints; + for (int i = 0, n = pathConstraints.Count; i < n; i++) { + PathConstraint constraint = pathConstraints.Items[i]; + + Slot slot = constraint.target; + int slotIndex = slot.data.index; + Bone slotBone = slot.bone; + if (skin != null) SortPathConstraintAttachment(skin, slotIndex, slotBone); + if (data.defaultSkin != null && data.defaultSkin != skin) + SortPathConstraintAttachment(data.defaultSkin, slotIndex, slotBone); + for (int ii = 0, nn = data.skins.Count; ii < nn; ii++) + SortPathConstraintAttachment(data.skins.Items[ii], slotIndex, slotBone); + + PathAttachment attachment = slot.Attachment as PathAttachment; + if (attachment != null) SortPathConstraintAttachment(attachment, slotBone); + + ExposedList constrained = constraint.bones; + int boneCount = constrained.Count; + for (int ii = 0; ii < boneCount; ii++) + SortBone(constrained.Items[ii]); + + updateCache.Add(constraint); + + for (int ii = 0; ii < boneCount; ii++) + SortReset(constrained.Items[ii].children); + for (int ii = 0; ii < boneCount; ii++) + constrained.Items[ii].sorted = true; + } + + ExposedList transformConstraints = this.transformConstraints; + for (int i = 0, n = transformConstraints.Count; i < n; i++) { + TransformConstraint constraint = transformConstraints.Items[i]; + + SortBone(constraint.target); + + ExposedList constrained = constraint.bones; + int boneCount = constrained.Count; + for (int ii = 0; ii < boneCount; ii++) + SortBone(constrained.Items[ii]); + + updateCache.Add(constraint); + + for (int ii = 0; ii < boneCount; ii++) + SortReset(constrained.Items[ii].children); + for (int ii = 0; ii < boneCount; ii++) + constrained.Items[ii].sorted = true; + } + + for (int i = 0, n = bones.Count; i < n; i++) + SortBone(bones.Items[i]); + } + + private void SortPathConstraintAttachment (Skin skin, int slotIndex, Bone slotBone) { + foreach (var entry in skin.Attachments) + if (entry.Key.slotIndex == slotIndex) SortPathConstraintAttachment(entry.Value, slotBone); + } + + private void SortPathConstraintAttachment (Attachment attachment, Bone slotBone) { + var pathAttachment = attachment as PathAttachment; + if (pathAttachment == null) return; + int[] pathBones = pathAttachment.bones; + if (pathBones == null) + SortBone(slotBone); + else { + var bones = this.bones; + for (int i = 0, n = pathBones.Length; i < n; i++) + SortBone(bones.Items[pathBones[i]]); + } + } + + private void SortBone (Bone bone) { + if (bone.sorted) return; + Bone parent = bone.parent; + if (parent != null) SortBone(parent); + bone.sorted = true; + updateCache.Add(bone); + } + + private void SortReset (ExposedList bones) { + var bonesItems = bones.Items; + for (int i = 0, n = bones.Count; i < n; i++) { + Bone bone = bonesItems[i]; + if (bone.sorted) SortReset(bone.children); + bone.sorted = false; } } /// Updates the world transform for each bone and applies constraints. public void UpdateWorldTransform () { - ExposedList updateCache = this.updateCache; + var updateItems = this.updateCache.Items; for (int i = 0, n = updateCache.Count; i < n; i++) - updateCache.Items[i].Update(); + updateItems[i].Update(); } /// Sets the bones, constraints, and slots to their setup pose values. @@ -150,44 +262,56 @@ namespace Spine { /// Sets the bones and constraints to their setup pose values. public void SetBonesToSetupPose () { - ExposedList bones = this.bones; + var bonesItems = this.bones.Items; for (int i = 0, n = bones.Count; i < n; i++) - bones.Items[i].SetToSetupPose(); + bonesItems[i].SetToSetupPose(); - ExposedList ikConstraints = this.ikConstraints; + var ikConstraintsItems = this.ikConstraints.Items; for (int i = 0, n = ikConstraints.Count; i < n; i++) { - IkConstraint constraint = ikConstraints.Items[i]; + IkConstraint constraint = ikConstraintsItems[i]; constraint.bendDirection = constraint.data.bendDirection; constraint.mix = constraint.data.mix; } - ExposedList transformConstraints = this.transformConstraints; + var transformConstraintsItems = this.transformConstraints.Items; for (int i = 0, n = transformConstraints.Count; i < n; i++) { - TransformConstraint constraint = transformConstraints.Items[i]; + TransformConstraint constraint = transformConstraintsItems[i]; TransformConstraintData data = constraint.data; constraint.rotateMix = data.rotateMix; constraint.translateMix = data.translateMix; constraint.scaleMix = data.scaleMix; constraint.shearMix = data.shearMix; } + + var pathConstraintItems = this.pathConstraints.Items; + for (int i = 0, n = pathConstraints.Count; i < n; i++) { + PathConstraint constraint = pathConstraintItems[i]; + PathConstraintData data = constraint.data; + constraint.position = data.position; + constraint.spacing = data.spacing; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + } } public void SetSlotsToSetupPose () { - ExposedList slots = this.slots; + var slots = this.slots; + var slotsItems = slots.Items; drawOrder.Clear(); for (int i = 0, n = slots.Count; i < n; i++) - drawOrder.Add(slots.Items[i]); + drawOrder.Add(slotsItems[i]); for (int i = 0, n = slots.Count; i < n; i++) - slots.Items[i].SetToSetupPose(i); + slotsItems[i].SetToSetupPose(); } /// May be null. public Bone FindBone (String boneName) { - if (boneName == null) throw new ArgumentNullException("boneName cannot be null."); - ExposedList bones = this.bones; + if (boneName == null) throw new ArgumentNullException("boneName", "boneName cannot be null."); + var bones = this.bones; + var bonesItems = bones.Items; for (int i = 0, n = bones.Count; i < n; i++) { - Bone bone = bones.Items[i]; + Bone bone = bonesItems[i]; if (bone.data.name == boneName) return bone; } return null; @@ -195,19 +319,21 @@ namespace Spine { /// -1 if the bone was not found. public int FindBoneIndex (String boneName) { - if (boneName == null) throw new ArgumentNullException("boneName cannot be null."); - ExposedList bones = this.bones; + if (boneName == null) throw new ArgumentNullException("boneName", "boneName cannot be null."); + var bones = this.bones; + var bonesItems = bones.Items; for (int i = 0, n = bones.Count; i < n; i++) - if (bones.Items[i].data.name == boneName) return i; + if (bonesItems[i].data.name == boneName) return i; return -1; } /// May be null. public Slot FindSlot (String slotName) { - if (slotName == null) throw new ArgumentNullException("slotName cannot be null."); - ExposedList slots = this.slots; + if (slotName == null) throw new ArgumentNullException("slotName", "slotName cannot be null."); + var slots = this.slots; + var slotsItems = slots.Items; for (int i = 0, n = slots.Count; i < n; i++) { - Slot slot = slots.Items[i]; + Slot slot = slotsItems[i]; if (slot.data.name == slotName) return slot; } return null; @@ -215,17 +341,18 @@ namespace Spine { /// -1 if the bone was not found. public int FindSlotIndex (String slotName) { - if (slotName == null) throw new ArgumentNullException("slotName cannot be null."); - ExposedList slots = this.slots; + if (slotName == null) throw new ArgumentNullException("slotName", "slotName cannot be null."); + var slots = this.slots; + var slotsItems = slots.Items; for (int i = 0, n = slots.Count; i < n; i++) - if (slots.Items[i].data.name.Equals(slotName)) return i; + if (slotsItems[i].data.name.Equals(slotName)) return i; return -1; } /// Sets a skin by name (see SetSkin). public void SetSkin (String skinName) { Skin skin = data.FindSkin(skinName); - if (skin == null) throw new ArgumentException("Skin not found: " + skinName); + if (skin == null) throw new ArgumentException("Skin not found: " + skinName, "skinName"); SetSkin(skin); } @@ -259,7 +386,7 @@ namespace Spine { /// May be null. public Attachment GetAttachment (int slotIndex, String attachmentName) { - if (attachmentName == null) throw new ArgumentNullException("attachmentName cannot be null."); + if (attachmentName == null) throw new ArgumentNullException("attachmentName", "attachmentName cannot be null."); if (skin != null) { Attachment attachment = skin.GetAttachment(slotIndex, attachmentName); if (attachment != null) return attachment; @@ -270,7 +397,7 @@ namespace Spine { /// May be null. public void SetAttachment (String slotName, String attachmentName) { - if (slotName == null) throw new ArgumentNullException("slotName cannot be null."); + if (slotName == null) throw new ArgumentNullException("slotName", "slotName cannot be null."); ExposedList slots = this.slots; for (int i = 0, n = slots.Count; i < n; i++) { Slot slot = slots.Items[i]; @@ -286,10 +413,10 @@ namespace Spine { } throw new Exception("Slot not found: " + slotName); } - - /** @return May be null. */ + + /// May be null. public IkConstraint FindIkConstraint (String constraintName) { - if (constraintName == null) throw new ArgumentNullException("constraintName cannot be null."); + if (constraintName == null) throw new ArgumentNullException("constraintName", "constraintName cannot be null."); ExposedList ikConstraints = this.ikConstraints; for (int i = 0, n = ikConstraints.Count; i < n; i++) { IkConstraint ikConstraint = ikConstraints.Items[i]; @@ -298,9 +425,9 @@ namespace Spine { return null; } - /** @return May be null. */ + /// May be null. public TransformConstraint FindTransformConstraint (String constraintName) { - if (constraintName == null) throw new ArgumentNullException("constraintName cannot be null."); + if (constraintName == null) throw new ArgumentNullException("constraintName", "constraintName cannot be null."); ExposedList transformConstraints = this.transformConstraints; for (int i = 0, n = transformConstraints.Count; i < n; i++) { TransformConstraint transformConstraint = transformConstraints.Items[i]; @@ -309,6 +436,17 @@ namespace Spine { return null; } + /// May be null. + public PathConstraint FindPathConstraint (String constraintName) { + if (constraintName == null) throw new ArgumentNullException("constraintName", "constraintName cannot be null."); + ExposedList pathConstraints = this.pathConstraints; + for (int i = 0, n = pathConstraints.Count; i < n; i++) { + PathConstraint constraint = pathConstraints.Items[i]; + if (constraint.data.name.Equals(constraintName)) return constraint; + } + return null; + } + public void Update (float delta) { time += delta; } diff --git a/spine-csharp/src/SkeletonBinary.cs b/spine-csharp/src/SkeletonBinary.cs index d5228f43e..e564952ea 100644 --- a/spine-csharp/src/SkeletonBinary.cs +++ b/spine-csharp/src/SkeletonBinary.cs @@ -44,12 +44,17 @@ using Windows.Storage; namespace Spine { public class SkeletonBinary { - public const int TIMELINE_ROTATE = 0; - public const int TIMELINE_TRANSLATE = 1; - public const int TIMELINE_SCALE = 2; - public const int TIMELINE_SHEAR = 3; - public const int TIMELINE_ATTACHMENT = 4; - public const int TIMELINE_COLOR = 5; + public const int BONE_ROTATE = 0; + public const int BONE_TRANSLATE = 1; + public const int BONE_SCALE = 2; + public const int BONE_SHEAR = 3; + + public const int SLOT_ATTACHMENT = 0; + public const int SLOT_COLOR = 1; + + public const int PATH_POSITION = 0; + public const int PATH_SPACING = 1; + public const int PATH_MIX = 2; public const int CURVE_LINEAR = 0; public const int CURVE_STEPPED = 1; @@ -122,55 +127,26 @@ namespace Spine { for (int i = 0, n = ReadVarint(input, true); i < n; i++) { String name = ReadString(input); BoneData parent = i == 0 ? null : skeletonData.bones.Items[ReadVarint(input, true)]; - BoneData boneData = new BoneData(name, parent); - boneData.rotation = ReadFloat(input); - boneData.x = ReadFloat(input) * scale; - boneData.y = ReadFloat(input) * scale; - boneData.scaleX = ReadFloat(input); - boneData.scaleY = ReadFloat(input); - boneData.shearX = ReadFloat(input); - boneData.shearY = ReadFloat(input); - boneData.length = ReadFloat(input) * scale; - boneData.inheritRotation = ReadBoolean(input); - boneData.inheritScale = ReadBoolean(input); + BoneData data = new BoneData(i, name, parent); + data.rotation = ReadFloat(input); + data.x = ReadFloat(input) * scale; + data.y = ReadFloat(input) * scale; + data.scaleX = ReadFloat(input); + data.scaleY = ReadFloat(input); + data.shearX = ReadFloat(input); + data.shearY = ReadFloat(input); + data.length = ReadFloat(input) * scale; + data.inheritRotation = ReadBoolean(input); + data.inheritScale = ReadBoolean(input); if (nonessential) ReadInt(input); // Skip bone color. - skeletonData.bones.Add(boneData); - } - - // IK constraints. - for (int i = 0, n = ReadVarint(input, true); i < n; i++) { - IkConstraintData ikConstraintData = new IkConstraintData(ReadString(input)); - for (int ii = 0, nn = ReadVarint(input, true); ii < nn; ii++) - ikConstraintData.bones.Add(skeletonData.bones.Items[ReadVarint(input, true)]); - ikConstraintData.target = skeletonData.bones.Items[ReadVarint(input, true)]; - ikConstraintData.mix = ReadFloat(input); - ikConstraintData.bendDirection = ReadSByte(input); - skeletonData.ikConstraints.Add(ikConstraintData); - } - - // Transform constraints. - for (int i = 0, n = ReadVarint(input, true); i < n; i++) { - TransformConstraintData transformConstraintData = new TransformConstraintData(ReadString(input)); - transformConstraintData.bone = skeletonData.bones.Items[ReadVarint(input, true)]; - transformConstraintData.target = skeletonData.bones.Items[ReadVarint(input, true)]; - transformConstraintData.offsetRotation = ReadFloat(input); - transformConstraintData.offsetX = ReadFloat(input) * scale; - transformConstraintData.offsetY = ReadFloat(input) * scale; - transformConstraintData.offsetScaleX = ReadFloat(input); - transformConstraintData.offsetScaleY = ReadFloat(input); - transformConstraintData.offsetShearY = ReadFloat(input); - transformConstraintData.rotateMix = ReadFloat(input); - transformConstraintData.translateMix = ReadFloat(input); - transformConstraintData.scaleMix = ReadFloat(input); - transformConstraintData.shearMix = ReadFloat(input); - skeletonData.transformConstraints.Add(transformConstraintData); + skeletonData.bones.Add(data); } // Slots. for (int i = 0, n = ReadVarint(input, true); i < n; i++) { String slotName = ReadString(input); BoneData boneData = skeletonData.bones.Items[ReadVarint(input, true)]; - SlotData slotData = new SlotData(slotName, boneData); + SlotData slotData = new SlotData(i, slotName, boneData); int color = ReadInt(input); slotData.r = ((color & 0xff000000) >> 24) / 255f; slotData.g = ((color & 0x00ff0000) >> 16) / 255f; @@ -181,6 +157,55 @@ namespace Spine { skeletonData.slots.Add(slotData); } + // IK constraints. + for (int i = 0, n = ReadVarint(input, true); i < n; i++) { + IkConstraintData data = new IkConstraintData(ReadString(input)); + for (int ii = 0, nn = ReadVarint(input, true); ii < nn; ii++) + data.bones.Add(skeletonData.bones.Items[ReadVarint(input, true)]); + data.target = skeletonData.bones.Items[ReadVarint(input, true)]; + data.mix = ReadFloat(input); + data.bendDirection = ReadSByte(input); + skeletonData.ikConstraints.Add(data); + } + + // Transform constraints. + for (int i = 0, n = ReadVarint(input, true); i < n; i++) { + TransformConstraintData data = new TransformConstraintData(ReadString(input)); + for (int ii = 0, nn = ReadVarint(input, true); ii < nn; ii++) + data.bones.Add(skeletonData.bones.Items[ReadVarint(input, true)]); + data.target = skeletonData.bones.Items[ReadVarint(input, true)]; + data.offsetRotation = ReadFloat(input); + data.offsetX = ReadFloat(input) * scale; + data.offsetY = ReadFloat(input) * scale; + data.offsetScaleX = ReadFloat(input); + data.offsetScaleY = ReadFloat(input); + data.offsetShearY = ReadFloat(input); + data.rotateMix = ReadFloat(input); + data.translateMix = ReadFloat(input); + data.scaleMix = ReadFloat(input); + data.shearMix = ReadFloat(input); + skeletonData.transformConstraints.Add(data); + } + + // Path constraints + for (int i = 0, n = ReadVarint(input, true); i < n; i++) { + PathConstraintData data = new PathConstraintData(ReadString(input)); + for (int ii = 0, nn = ReadVarint(input, true); ii < nn; ii++) + data.bones.Add(skeletonData.bones.Items[ReadVarint(input, true)]); + data.target = skeletonData.slots.Items[ReadVarint(input, true)]; + data.positionMode = (PositionMode)Enum.GetValues(typeof(PositionMode)).GetValue(ReadVarint(input, true)); + data.spacingMode = (SpacingMode)Enum.GetValues(typeof(SpacingMode)).GetValue(ReadVarint(input, true)); + data.rotateMode = (RotateMode)Enum.GetValues(typeof(RotateMode)).GetValue(ReadVarint(input, true)); + data.offsetRotation = ReadFloat(input); + data.position = ReadFloat(input); + if (data.positionMode == PositionMode.Fixed) data.position *= scale; + data.spacing = ReadFloat(input); + if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed) data.spacing *= scale; + data.rotateMix = ReadFloat(input); + data.translateMix = ReadFloat(input); + skeletonData.pathConstraints.Add(data); + } + // Default skin. Skin defaultSkin = ReadSkin(input, "default", nonessential); if (defaultSkin != null) { @@ -199,25 +224,18 @@ namespace Spine { if (skin == null) throw new Exception("Skin not found: " + linkedMesh.skin); Attachment parent = skin.GetAttachment(linkedMesh.slotIndex, linkedMesh.parent); if (parent == null) throw new Exception("Parent mesh not found: " + linkedMesh.parent); - if (linkedMesh.mesh is MeshAttachment) { - MeshAttachment mesh = (MeshAttachment)linkedMesh.mesh; - mesh.ParentMesh = (MeshAttachment)parent; - mesh.UpdateUVs(); - } else { - WeightedMeshAttachment mesh = (WeightedMeshAttachment)linkedMesh.mesh; - mesh.ParentMesh = (WeightedMeshAttachment)parent; - mesh.UpdateUVs(); - } + linkedMesh.mesh.ParentMesh = (MeshAttachment)parent; + linkedMesh.mesh.UpdateUVs(); } linkedMeshes.Clear(); // Events. for (int i = 0, n = ReadVarint(input, true); i < n; i++) { - EventData eventData = new EventData(ReadString(input)); - eventData.Int = ReadVarint(input, false); - eventData.Float = ReadFloat(input); - eventData.String = ReadString(input); - skeletonData.events.Add(eventData); + EventData data = new EventData(ReadString(input)); + data.Int = ReadVarint(input, false); + data.Float = ReadFloat(input); + data.String = ReadString(input); + skeletonData.events.Add(data); } // Animations. @@ -230,10 +248,12 @@ namespace Spine { skeletonData.events.TrimExcess(); skeletonData.animations.TrimExcess(); skeletonData.ikConstraints.TrimExcess(); + skeletonData.pathConstraints.TrimExcess(); return skeletonData; } - /** @return May be null. */ + + /// May be null. private Skin ReadSkin (Stream input, String skinName, bool nonessential) { int slotCount = ReadVarint(input, true); if (slotCount == 0) return null; @@ -256,7 +276,7 @@ namespace Spine { AttachmentType type = (AttachmentType)input.ReadByte(); switch (type) { - case AttachmentType.region: { + case AttachmentType.Region: { String path = ReadString(input); float rotation = ReadFloat(input); float x = ReadFloat(input); @@ -285,96 +305,25 @@ namespace Spine { region.UpdateOffset(); return region; } - case AttachmentType.boundingbox: { - float[] vertices = ReadFloatArray(input, ReadVarint(input, true) * 2, scale); + case AttachmentType.Boundingbox: { + int vertexCount = ReadVarint(input, true); + Vertices vertices = ReadVertices(input, vertexCount); + if (nonessential) ReadInt(input); //int color = nonessential ? ReadInt(input) : 0; // Avoid unused local warning. + BoundingBoxAttachment box = attachmentLoader.NewBoundingBoxAttachment(skin, name); if (box == null) return null; - box.vertices = vertices; + box.worldVerticesLength = vertexCount << 1; + box.vertices = vertices.vertices; + box.bones = vertices.bones; return box; } - case AttachmentType.mesh: { + case AttachmentType.Mesh: { String path = ReadString(input); int color = ReadInt(input); - int hullLength = 0; - int verticesLength = ReadVarint(input, true) * 2; - float[] uvs = ReadFloatArray(input, verticesLength, 1); + int vertexCount = ReadVarint(input, true); + float[] uvs = ReadFloatArray(input, vertexCount << 1, 1); int[] triangles = ReadShortArray(input); - float[] vertices = ReadFloatArray(input, verticesLength, scale); - hullLength = ReadVarint(input, true); - int[] edges = null; - float width = 0, height = 0; - if (nonessential) { - edges = ReadShortArray(input); - width = ReadFloat(input); - height = ReadFloat(input); - } - - if (path == null) path = name; - MeshAttachment mesh = attachmentLoader.NewMeshAttachment(skin, name, path); - if (mesh == null) return null; - mesh.Path = path; - mesh.r = ((color & 0xff000000) >> 24) / 255f; - mesh.g = ((color & 0x00ff0000) >> 16) / 255f; - mesh.b = ((color & 0x0000ff00) >> 8) / 255f; - mesh.a = ((color & 0x000000ff)) / 255f; - mesh.vertices = vertices; - mesh.triangles = triangles; - mesh.regionUVs = uvs; - mesh.UpdateUVs(); - mesh.HullLength = hullLength; - if (nonessential) { - mesh.Edges = edges; - mesh.Width = width * scale; - mesh.Height = height * scale; - } - return mesh; - } - case AttachmentType.linkedmesh: { - String path = ReadString(input); - int color = ReadInt(input); - String skinName = ReadString(input); - String parent = ReadString(input); - bool inheritFFD = ReadBoolean(input); - float width = 0, height = 0; - if (nonessential) { - width = ReadFloat(input); - height = ReadFloat(input); - } - - if (path == null) path = name; - MeshAttachment mesh = attachmentLoader.NewMeshAttachment(skin, name, path); - if (mesh == null) return null; - mesh.Path = path; - mesh.r = ((color & 0xff000000) >> 24) / 255f; - mesh.g = ((color & 0x00ff0000) >> 16) / 255f; - mesh.b = ((color & 0x0000ff00) >> 8) / 255f; - mesh.a = ((color & 0x000000ff)) / 255f; - mesh.inheritFFD = inheritFFD; - if (nonessential) { - mesh.Width = width * scale; - mesh.Height = height * scale; - } - linkedMeshes.Add(new SkeletonJson.LinkedMesh(mesh, skinName, slotIndex, parent)); - return mesh; - } - case AttachmentType.weightedmesh: { - String path = ReadString(input); - int color = ReadInt(input); - int vertexCount = ReadVarint(input, true); - float[] uvs = ReadFloatArray(input, vertexCount * 2, 1); - int[] triangles = ReadShortArray(input); - var weights = new List(uvs.Length * 3 * 3); - var bones = new List(uvs.Length * 3); - for (int i = 0; i < vertexCount; i++) { - int boneCount = (int)ReadFloat(input); - bones.Add(boneCount); - for (int ii = 0; ii < boneCount; ii++) { - bones.Add((int)ReadFloat(input)); - weights.Add(ReadFloat(input) * scale); - weights.Add(ReadFloat(input) * scale); - weights.Add(ReadFloat(input)); - } - } + Vertices vertices = ReadVertices(input, vertexCount); int hullLength = ReadVarint(input, true); int[] edges = null; float width = 0, height = 0; @@ -385,33 +334,33 @@ namespace Spine { } if (path == null) path = name; - WeightedMeshAttachment mesh = attachmentLoader.NewWeightedMeshAttachment(skin, name, path); + MeshAttachment mesh = attachmentLoader.NewMeshAttachment(skin, name, path); if (mesh == null) return null; mesh.Path = path; mesh.r = ((color & 0xff000000) >> 24) / 255f; mesh.g = ((color & 0x00ff0000) >> 16) / 255f; mesh.b = ((color & 0x0000ff00) >> 8) / 255f; mesh.a = ((color & 0x000000ff)) / 255f; - mesh.bones = bones.ToArray(); - mesh.weights = weights.ToArray(); + mesh.bones = vertices.bones; + mesh.vertices = vertices.vertices; + mesh.WorldVerticesLength = vertexCount << 1; mesh.triangles = triangles; mesh.regionUVs = uvs; mesh.UpdateUVs(); - mesh.HullLength = hullLength * 2; + mesh.HullLength = hullLength << 1; if (nonessential) { mesh.Edges = edges; mesh.Width = width * scale; mesh.Height = height * scale; } - // return mesh; } - case AttachmentType.weightedlinkedmesh: { + case AttachmentType.Linkedmesh: { String path = ReadString(input); int color = ReadInt(input); String skinName = ReadString(input); String parent = ReadString(input); - bool inheritFFD = ReadBoolean(input); + bool inheritDeform = ReadBoolean(input); float width = 0, height = 0; if (nonessential) { width = ReadFloat(input); @@ -419,14 +368,14 @@ namespace Spine { } if (path == null) path = name; - WeightedMeshAttachment mesh = attachmentLoader.NewWeightedMeshAttachment(skin, name, path); + MeshAttachment mesh = attachmentLoader.NewMeshAttachment(skin, name, path); if (mesh == null) return null; mesh.Path = path; mesh.r = ((color & 0xff000000) >> 24) / 255f; mesh.g = ((color & 0x00ff0000) >> 16) / 255f; mesh.b = ((color & 0x0000ff00) >> 8) / 255f; mesh.a = ((color & 0x000000ff)) / 255f; - mesh.inheritFFD = inheritFFD; + mesh.inheritDeform = inheritDeform; if (nonessential) { mesh.Width = width * scale; mesh.Height = height * scale; @@ -434,10 +383,56 @@ namespace Spine { linkedMeshes.Add(new SkeletonJson.LinkedMesh(mesh, skinName, slotIndex, parent)); return mesh; } + case AttachmentType.Path: { + bool closed = ReadBoolean(input); + bool constantSpeed = ReadBoolean(input); + int vertexCount = ReadVarint(input, true); + Vertices vertices = ReadVertices(input, vertexCount); + float[] lengths = new float[vertexCount / 3]; + for (int i = 0, n = lengths.Length; i < n; i++) + lengths[i] = ReadFloat(input) * scale; + if (nonessential) ReadInt(input); //int color = nonessential ? ReadInt(input) : 0; // Avoid unused local warning. + + PathAttachment path = attachmentLoader.NewPathAttachment(skin, name); + if (path == null) return null; + path.closed = closed; + path.constantSpeed = constantSpeed; + path.worldVerticesLength = vertexCount << 1; + path.vertices = vertices.vertices; + path.bones = vertices.bones; + path.lengths = lengths; + return path; + } } return null; } + private Vertices ReadVertices (Stream input, int vertexCount) { + float scale = Scale; + int verticesLength = vertexCount << 1; + Vertices vertices = new Vertices(); + if(!ReadBoolean(input)) { + vertices.vertices = ReadFloatArray(input, verticesLength, scale); + return vertices; + } + var weights = new ExposedList(verticesLength * 3 * 3); + var bonesArray = new ExposedList(verticesLength * 3); + for (int i = 0; i < vertexCount; i++) { + int boneCount = ReadVarint(input, true); + bonesArray.Add(boneCount); + for (int ii = 0; ii < boneCount; ii++) { + bonesArray.Add(ReadVarint(input, true)); + weights.Add(ReadFloat(input) * scale); + weights.Add(ReadFloat(input) * scale); + weights.Add(ReadFloat(input)); + } + } + + vertices.vertices = weights.ToArray(); + vertices.bones = bonesArray.ToArray(); + return vertices; + } + private float[] ReadFloatArray (Stream input, int n, float scale) { float[] array = new float[n]; if (scale == 1) { @@ -470,7 +465,7 @@ namespace Spine { int timelineType = input.ReadByte(); int frameCount = ReadVarint(input, true); switch (timelineType) { - case TIMELINE_COLOR: { + case SLOT_COLOR: { ColorTimeline timeline = new ColorTimeline(frameCount); timeline.slotIndex = slotIndex; for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { @@ -484,10 +479,10 @@ namespace Spine { if (frameIndex < frameCount - 1) ReadCurve(input, frameIndex, timeline); } timelines.Add(timeline); - duration = Math.Max(duration, timeline.frames[frameCount * 5 - 5]); + duration = Math.Max(duration, timeline.frames[(timeline.FrameCount - 1) * ColorTimeline.ENTRIES]); break; } - case TIMELINE_ATTACHMENT: { + case SLOT_ATTACHMENT: { AttachmentTimeline timeline = new AttachmentTimeline(frameCount); timeline.slotIndex = slotIndex; for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) @@ -507,7 +502,7 @@ namespace Spine { int timelineType = input.ReadByte(); int frameCount = ReadVarint(input, true); switch (timelineType) { - case TIMELINE_ROTATE: { + case BONE_ROTATE: { RotateTimeline timeline = new RotateTimeline(frameCount); timeline.boneIndex = boneIndex; for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { @@ -515,17 +510,17 @@ namespace Spine { if (frameIndex < frameCount - 1) ReadCurve(input, frameIndex, timeline); } timelines.Add(timeline); - duration = Math.Max(duration, timeline.frames[frameCount * 2 - 2]); + duration = Math.Max(duration, timeline.frames[(frameCount - 1) * RotateTimeline.ENTRIES]); break; } - case TIMELINE_TRANSLATE: - case TIMELINE_SCALE: - case TIMELINE_SHEAR: { + case BONE_TRANSLATE: + case BONE_SCALE: + case BONE_SHEAR: { TranslateTimeline timeline; float timelineScale = 1; - if (timelineType == TIMELINE_SCALE) + if (timelineType == BONE_SCALE) timeline = new ScaleTimeline(frameCount); - else if (timelineType == TIMELINE_SHEAR) + else if (timelineType == BONE_SHEAR) timeline = new ShearTimeline(frameCount); else { timeline = new TranslateTimeline(frameCount); @@ -538,7 +533,7 @@ namespace Spine { if (frameIndex < frameCount - 1) ReadCurve(input, frameIndex, timeline); } timelines.Add(timeline); - duration = Math.Max(duration, timeline.frames[frameCount * 3 - 3]); + duration = Math.Max(duration, timeline.frames[(frameCount - 1) * TranslateTimeline.ENTRIES]); break; } } @@ -546,81 +541,118 @@ namespace Spine { } // IK timelines. - for (int i = 0, n = ReadVarint(input, true); i < n; i++) { - IkConstraintData constraint = skeletonData.ikConstraints.Items[ReadVarint(input, true)]; + for (int i = 0, n = ReadVarint(input, true); i < n; i++) { + int index = ReadVarint(input, true); int frameCount = ReadVarint(input, true); IkConstraintTimeline timeline = new IkConstraintTimeline(frameCount); - timeline.ikConstraintIndex = skeletonData.ikConstraints.IndexOf(constraint); + timeline.ikConstraintIndex = index; for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { timeline.SetFrame(frameIndex, ReadFloat(input), ReadFloat(input), ReadSByte(input)); if (frameIndex < frameCount - 1) ReadCurve(input, frameIndex, timeline); } timelines.Add(timeline); - duration = Math.Max(duration, timeline.frames[frameCount * 3 - 3]); + duration = Math.Max(duration, timeline.frames[(frameCount - 1) * IkConstraintTimeline.ENTRIES]); } // Transform constraint timelines. for (int i = 0, n = ReadVarint(input, true); i < n; i++) { - TransformConstraintData constraint = skeletonData.transformConstraints.Items[ReadVarint(input, true)]; + int index = ReadVarint(input, true); int frameCount = ReadVarint(input, true); TransformConstraintTimeline timeline = new TransformConstraintTimeline(frameCount); - timeline.transformConstraintIndex = skeletonData.transformConstraints.IndexOf(constraint); + timeline.transformConstraintIndex = index; for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { timeline.SetFrame(frameIndex, ReadFloat(input), ReadFloat(input), ReadFloat(input), ReadFloat(input), ReadFloat(input)); if (frameIndex < frameCount - 1) ReadCurve(input, frameIndex, timeline); } timelines.Add(timeline); - duration = Math.Max(duration, timeline.frames[frameCount * 5 - 5]); + duration = Math.Max(duration, timeline.frames[(frameCount - 1) * TransformConstraintTimeline.ENTRIES]); } - // FFD timelines. + // Path constraint timelines. + for (int i = 0, n = ReadVarint(input, true); i < n; i++) { + int index = ReadVarint(input, true); + PathConstraintData data = skeletonData.pathConstraints.Items[index]; + for (int ii = 0, nn = ReadVarint(input, true); ii < nn; ii++) { + int timelineType = ReadSByte(input); + int frameCount = ReadVarint(input, true); + switch(timelineType) { + case PATH_POSITION: + case PATH_SPACING: { + PathConstraintPositionTimeline timeline; + float timelineScale = 1; + if (timelineType == PATH_SPACING) { + timeline = new PathConstraintSpacingTimeline(frameCount); + if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed) timelineScale = scale; + } else { + timeline = new PathConstraintPositionTimeline(frameCount); + if (data.positionMode == PositionMode.Fixed) timelineScale = scale; + } + timeline.pathConstraintIndex = index; + for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.SetFrame(frameIndex, ReadFloat(input), ReadFloat(input) * timelineScale); + if (frameIndex < frameCount - 1) ReadCurve(input, frameIndex, timeline); + } + timelines.Add(timeline); + duration = Math.Max(duration, timeline.frames[(frameCount - 1) * PathConstraintPositionTimeline.ENTRIES]); + break; + } + case PATH_MIX: { + PathConstraintMixTimeline timeline = new PathConstraintMixTimeline(frameCount); + timeline.pathConstraintIndex = index; + for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.SetFrame(frameIndex, ReadFloat(input), ReadFloat(input), ReadFloat(input)); + if (frameIndex < frameCount - 1) ReadCurve(input, frameIndex, timeline); + } + timelines.Add(timeline); + duration = Math.Max(duration, timeline.frames[(frameCount - 1) * PathConstraintMixTimeline.ENTRIES]); + break; + } + } + } + } + + // Deform timelines. for (int i = 0, n = ReadVarint(input, true); i < n; i++) { Skin skin = skeletonData.skins.Items[ReadVarint(input, true)]; for (int ii = 0, nn = ReadVarint(input, true); ii < nn; ii++) { int slotIndex = ReadVarint(input, true); for (int iii = 0, nnn = ReadVarint(input, true); iii < nnn; iii++) { - Attachment attachment = skin.GetAttachment(slotIndex, ReadString(input)); + VertexAttachment attachment = (VertexAttachment)skin.GetAttachment(slotIndex, ReadString(input)); + bool weighted = attachment.bones != null; + float[] vertices = attachment.vertices; + int deformLength = weighted ? vertices.Length / 3 * 2 : vertices.Length; + int frameCount = ReadVarint(input, true); - FfdTimeline timeline = new FfdTimeline(frameCount); + DeformTimeline timeline = new DeformTimeline(frameCount); timeline.slotIndex = slotIndex; timeline.attachment = attachment; + for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { float time = ReadFloat(input); - - float[] vertices; - int vertexCount; - if (attachment is MeshAttachment) - vertexCount = ((MeshAttachment)attachment).vertices.Length; - else - vertexCount = ((WeightedMeshAttachment)attachment).weights.Length / 3 * 2; - + float[] deform; int end = ReadVarint(input, true); - if (end == 0) { - if (attachment is MeshAttachment) - vertices = ((MeshAttachment)attachment).vertices; - else - vertices = new float[vertexCount]; - } else { - vertices = new float[vertexCount]; + if (end == 0) + deform = weighted ? new float[deformLength] : vertices; + else { + deform = new float[deformLength]; int start = ReadVarint(input, true); end += start; if (scale == 1) { for (int v = start; v < end; v++) - vertices[v] = ReadFloat(input); + deform[v] = ReadFloat(input); } else { for (int v = start; v < end; v++) - vertices[v] = ReadFloat(input) * scale; + deform[v] = ReadFloat(input) * scale; } - if (attachment is MeshAttachment) { - float[] meshVertices = ((MeshAttachment)attachment).vertices; - for (int v = 0, vn = vertices.Length; v < vn; v++) - vertices[v] += meshVertices[v]; + if (!weighted) { + for (int v = 0, vn = deform.Length; v < vn; v++) + deform[v] += vertices[v]; } } - timeline.SetFrame(frameIndex, time, vertices); + timeline.SetFrame(frameIndex, time, deform); if (frameIndex < frameCount - 1) ReadCurve(input, frameIndex, timeline); - } + } timelines.Add(timeline); duration = Math.Max(duration, timeline.frames[frameCount - 1]); } @@ -756,5 +788,10 @@ namespace Spine { length -= count; } } + + internal class Vertices { + public int[] bones; + public float[] vertices; + } } } diff --git a/spine-csharp/src/SkeletonBounds.cs b/spine-csharp/src/SkeletonBounds.cs index 11d875a68..e694e596e 100644 --- a/spine-csharp/src/SkeletonBounds.cs +++ b/spine-csharp/src/SkeletonBounds.cs @@ -30,7 +30,6 @@ *****************************************************************************/ using System; -using System.Collections.Generic; namespace Spine { public class SkeletonBounds { @@ -80,7 +79,7 @@ namespace Spine { int count = boundingBox.Vertices.Length; polygon.Count = count; if (polygon.Vertices.Length < count) polygon.Vertices = new float[count]; - boundingBox.ComputeWorldVertices(slot.bone, polygon.Vertices); + boundingBox.ComputeWorldVertices(slot, polygon.Vertices); } if (updateAabb) aabbCompute(); diff --git a/spine-csharp/src/SkeletonData.cs b/spine-csharp/src/SkeletonData.cs index b6ff7edb5..dd3dcdbab 100644 --- a/spine-csharp/src/SkeletonData.cs +++ b/spine-csharp/src/SkeletonData.cs @@ -30,7 +30,6 @@ *****************************************************************************/ using System; -using System.Collections.Generic; namespace Spine { public class SkeletonData { @@ -43,6 +42,7 @@ namespace Spine { internal ExposedList animations = new ExposedList(); internal ExposedList ikConstraints = new ExposedList(); internal ExposedList transformConstraints = new ExposedList(); + internal ExposedList pathConstraints = new ExposedList(); internal float width, height; internal String version, hash, imagesPath; @@ -55,6 +55,8 @@ namespace Spine { public ExposedList Events { get { return events; } set { events = value; } } public ExposedList Animations { get { return animations; } set { animations = value; } } public ExposedList IkConstraints { get { return ikConstraints; } set { ikConstraints = value; } } + public ExposedList TransformConstraints { get { return transformConstraints; } set { transformConstraints = value; } } + public ExposedList PathConstraints { get { return pathConstraints; } set { pathConstraints = value; } } public float Width { get { return width; } set { width = value; } } public float Height { get { return height; } set { height = value; } } /// The Spine version used to export this data. @@ -65,7 +67,7 @@ namespace Spine { /// May be null. public BoneData FindBone (String boneName) { - if (boneName == null) throw new ArgumentNullException("boneName cannot be null."); + if (boneName == null) throw new ArgumentNullException("boneName", "boneName cannot be null."); ExposedList bones = this.bones; for (int i = 0, n = bones.Count; i < n; i++) { BoneData bone = bones.Items[i]; @@ -76,7 +78,7 @@ namespace Spine { /// -1 if the bone was not found. public int FindBoneIndex (String boneName) { - if (boneName == null) throw new ArgumentNullException("boneName cannot be null."); + if (boneName == null) throw new ArgumentNullException("boneName", "boneName cannot be null."); ExposedList bones = this.bones; for (int i = 0, n = bones.Count; i < n; i++) if (bones.Items[i].name == boneName) return i; @@ -87,7 +89,7 @@ namespace Spine { /// May be null. public SlotData FindSlot (String slotName) { - if (slotName == null) throw new ArgumentNullException("slotName cannot be null."); + if (slotName == null) throw new ArgumentNullException("slotName", "slotName cannot be null."); ExposedList slots = this.slots; for (int i = 0, n = slots.Count; i < n; i++) { SlotData slot = slots.Items[i]; @@ -96,9 +98,9 @@ namespace Spine { return null; } - /// -1 if the bone was not found. + /// -1 if the slot was not found. public int FindSlotIndex (String slotName) { - if (slotName == null) throw new ArgumentNullException("slotName cannot be null."); + if (slotName == null) throw new ArgumentNullException("slotName", "slotName cannot be null."); ExposedList slots = this.slots; for (int i = 0, n = slots.Count; i < n; i++) if (slots.Items[i].name == slotName) return i; @@ -109,7 +111,7 @@ namespace Spine { /// May be null. public Skin FindSkin (String skinName) { - if (skinName == null) throw new ArgumentNullException("skinName cannot be null."); + if (skinName == null) throw new ArgumentNullException("skinName", "skinName cannot be null."); foreach (Skin skin in skins) if (skin.name == skinName) return skin; return null; @@ -119,7 +121,7 @@ namespace Spine { /// May be null. public EventData FindEvent (String eventDataName) { - if (eventDataName == null) throw new ArgumentNullException("eventDataName cannot be null."); + if (eventDataName == null) throw new ArgumentNullException("eventDataName", "eventDataName cannot be null."); foreach (EventData eventData in events) if (eventData.name == eventDataName) return eventData; return null; @@ -129,7 +131,7 @@ namespace Spine { /// May be null. public Animation FindAnimation (String animationName) { - if (animationName == null) throw new ArgumentNullException("animationName cannot be null."); + if (animationName == null) throw new ArgumentNullException("animationName", "animationName cannot be null."); ExposedList animations = this.animations; for (int i = 0, n = animations.Count; i < n; i++) { Animation animation = animations.Items[i]; @@ -142,7 +144,7 @@ namespace Spine { /// May be null. public IkConstraintData FindIkConstraint (String constraintName) { - if (constraintName == null) throw new ArgumentNullException("constraintName cannot be null."); + if (constraintName == null) throw new ArgumentNullException("constraintName", "constraintName cannot be null."); ExposedList ikConstraints = this.ikConstraints; for (int i = 0, n = ikConstraints.Count; i < n; i++) { IkConstraintData ikConstraint = ikConstraints.Items[i]; @@ -155,7 +157,7 @@ namespace Spine { /// May be null. public TransformConstraintData FindTransformConstraint (String constraintName) { - if (constraintName == null) throw new ArgumentNullException("constraintName cannot be null."); + if (constraintName == null) throw new ArgumentNullException("constraintName", "constraintName cannot be null."); ExposedList transformConstraints = this.transformConstraints; for (int i = 0, n = transformConstraints.Count; i < n; i++) { TransformConstraintData transformConstraint = transformConstraints.Items[i]; @@ -164,6 +166,28 @@ namespace Spine { return null; } + // --- Path constraints. + + /// May be null. + public PathConstraintData FindPathConstraint (String constraintName) { + if (constraintName == null) throw new ArgumentNullException("constraintName", "constraintName cannot be null."); + ExposedList pathConstraints = this.pathConstraints; + for (int i = 0, n = pathConstraints.Count; i < n; i++) { + PathConstraintData constraint = pathConstraints.Items[i]; + if (constraint.name.Equals(constraintName)) return constraint; + } + return null; + } + + /// -1 if the path constraint was not found. + public int FindPathConstraintIndex (String pathConstraintName) { + if (pathConstraintName == null) throw new ArgumentNullException("pathConstraintName", "pathConstraintName cannot be null."); + ExposedList pathConstraints = this.pathConstraints; + for (int i = 0, n = pathConstraints.Count; i < n; i++) + if (pathConstraints.Items[i].name.Equals(pathConstraintName)) return i; + return -1; + } + // --- override public String ToString () { diff --git a/spine-csharp/src/SkeletonJson.cs b/spine-csharp/src/SkeletonJson.cs index 5ae9f1238..bcecaeb85 100644 --- a/spine-csharp/src/SkeletonJson.cs +++ b/spine-csharp/src/SkeletonJson.cs @@ -54,7 +54,7 @@ namespace Spine { } public SkeletonJson (AttachmentLoader attachmentLoader) { - if (attachmentLoader == null) throw new ArgumentNullException("attachmentLoader cannot be null."); + if (attachmentLoader == null) throw new ArgumentNullException("attachmentLoader", "attachmentLoader cannot be null."); this.attachmentLoader = attachmentLoader; Scale = 1; } @@ -79,7 +79,7 @@ namespace Spine { Stream stream = Microsoft.Xna.Framework.TitleContainer.OpenStream(path); using (StreamReader reader = new StreamReader(stream)) { #else - using (StreamReader reader = new StreamReader(path)) { + using (var reader = new StreamReader(path)) { #endif // WINDOWS_PHONE SkeletonData skeletonData = ReadSkeletonData(reader); skeletonData.name = Path.GetFileNameWithoutExtension(path); @@ -89,7 +89,7 @@ namespace Spine { #endif // WINDOWS_STOREAPP public SkeletonData ReadSkeletonData (TextReader reader) { - if (reader == null) throw new ArgumentNullException("reader cannot be null."); + if (reader == null) throw new ArgumentNullException("reader", "reader cannot be null."); var scale = this.Scale; var skeletonData = new SkeletonData(); @@ -114,69 +114,19 @@ namespace Spine { if (parent == null) throw new Exception("Parent bone not found: " + boneMap["parent"]); } - var boneData = new BoneData((String)boneMap["name"], parent); - boneData.length = GetFloat(boneMap, "length", 0) * scale; - boneData.x = GetFloat(boneMap, "x", 0) * scale; - boneData.y = GetFloat(boneMap, "y", 0) * scale; - boneData.rotation = GetFloat(boneMap, "rotation", 0); - boneData.scaleX = GetFloat(boneMap, "scaleX", 1); - boneData.scaleY = GetFloat(boneMap, "scaleY", 1); - boneData.shearX = GetFloat(boneMap, "shearX", 0); - boneData.shearY = GetFloat(boneMap, "shearY", 0); - boneData.inheritScale = GetBoolean(boneMap, "inheritScale", true); - boneData.inheritRotation = GetBoolean(boneMap, "inheritRotation", true); - skeletonData.bones.Add(boneData); - } + var data = new BoneData(skeletonData.Bones.Count, (String)boneMap["name"], parent); + data.length = GetFloat(boneMap, "length", 0) * scale; + data.x = GetFloat(boneMap, "x", 0) * scale; + data.y = GetFloat(boneMap, "y", 0) * scale; + data.rotation = GetFloat(boneMap, "rotation", 0); + data.scaleX = GetFloat(boneMap, "scaleX", 1); + data.scaleY = GetFloat(boneMap, "scaleY", 1); + data.shearX = GetFloat(boneMap, "shearX", 0); + data.shearY = GetFloat(boneMap, "shearY", 0); + data.inheritRotation = GetBoolean(boneMap, "inheritRotation", true); + data.inheritScale = GetBoolean(boneMap, "inheritScale", true); - // IK constraints. - if (root.ContainsKey("ik")) { - foreach (Dictionary ikMap in (List)root["ik"]) { - IkConstraintData ikConstraintData = new IkConstraintData((String)ikMap["name"]); - - foreach (String boneName in (List)ikMap["bones"]) { - BoneData bone = skeletonData.FindBone(boneName); - if (bone == null) throw new Exception("IK bone not found: " + boneName); - ikConstraintData.bones.Add(bone); - } - - String targetName = (String)ikMap["target"]; - ikConstraintData.target = skeletonData.FindBone(targetName); - if (ikConstraintData.target == null) throw new Exception("Target bone not found: " + targetName); - - ikConstraintData.bendDirection = GetBoolean(ikMap, "bendPositive", true) ? 1 : -1; - ikConstraintData.mix = GetFloat(ikMap, "mix", 1); - - skeletonData.ikConstraints.Add(ikConstraintData); - } - } - - // Transform constraints. - if (root.ContainsKey("transform")) { - foreach (Dictionary transformMap in (List)root["transform"]) { - TransformConstraintData transformConstraintData = new TransformConstraintData((String)transformMap["name"]); - - String boneName = (String)transformMap["bone"]; - transformConstraintData.bone = skeletonData.FindBone(boneName); - if (transformConstraintData.bone == null) throw new Exception("Bone not found: " + boneName); - - String targetName = (String)transformMap["target"]; - transformConstraintData.target = skeletonData.FindBone(targetName); - if (transformConstraintData.target == null) throw new Exception("Target bone not found: " + targetName); - - transformConstraintData.offsetRotation = GetFloat(transformMap, "rotation", 0); - transformConstraintData.offsetX = GetFloat(transformMap, "x", 0) * scale; - transformConstraintData.offsetY = GetFloat(transformMap, "y", 0) * scale; - transformConstraintData.offsetScaleX = GetFloat(transformMap, "scaleX", 0); - transformConstraintData.offsetScaleY = GetFloat(transformMap, "scaleY", 0); - transformConstraintData.offsetShearY = GetFloat(transformMap, "shearY", 0); - - transformConstraintData.rotateMix = GetFloat(transformMap, "rotateMix", 1); - transformConstraintData.translateMix = GetFloat(transformMap, "translateMix", 1); - transformConstraintData.scaleMix = GetFloat(transformMap, "scaleMix", 1); - transformConstraintData.shearMix = GetFloat(transformMap, "shearMix", 1); - - skeletonData.transformConstraints.Add(transformConstraintData); - } + skeletonData.bones.Add(data); } // Slots. @@ -185,44 +135,126 @@ namespace Spine { var slotName = (String)slotMap["name"]; var boneName = (String)slotMap["bone"]; BoneData boneData = skeletonData.FindBone(boneName); - if (boneData == null) - throw new Exception("Slot bone not found: " + boneName); - var slotData = new SlotData(slotName, boneData); + if (boneData == null) throw new Exception("Slot bone not found: " + boneName); + var data = new SlotData(skeletonData.Slots.Count, slotName, boneData); if (slotMap.ContainsKey("color")) { var color = (String)slotMap["color"]; - slotData.r = ToColor(color, 0); - slotData.g = ToColor(color, 1); - slotData.b = ToColor(color, 2); - slotData.a = ToColor(color, 3); + data.r = ToColor(color, 0); + data.g = ToColor(color, 1); + data.b = ToColor(color, 2); + data.a = ToColor(color, 3); + } + + data.attachmentName = GetString(slotMap, "attachment", null); + if (slotMap.ContainsKey("blend")) + data.blendMode = (BlendMode)Enum.Parse(typeof(BlendMode), (String)slotMap["blend"], false); + else + data.blendMode = BlendMode.normal; + skeletonData.slots.Add(data); + } + } + + // IK constraints. + if (root.ContainsKey("ik")) { + foreach (Dictionary constraintMap in (List)root["ik"]) { + IkConstraintData data = new IkConstraintData((String)constraintMap["name"]); + + foreach (String boneName in (List)constraintMap["bones"]) { + BoneData bone = skeletonData.FindBone(boneName); + if (bone == null) throw new Exception("IK constraint bone not found: " + boneName); + data.bones.Add(bone); + } + + String targetName = (String)constraintMap["target"]; + data.target = skeletonData.FindBone(targetName); + if (data.target == null) throw new Exception("Target bone not found: " + targetName); + + data.bendDirection = GetBoolean(constraintMap, "bendPositive", true) ? 1 : -1; + data.mix = GetFloat(constraintMap, "mix", 1); + + skeletonData.ikConstraints.Add(data); + } + } + + // Transform constraints. + if (root.ContainsKey("transform")) { + foreach (Dictionary constraintMap in (List)root["transform"]) { + TransformConstraintData data = new TransformConstraintData((String)constraintMap["name"]); + + foreach (String boneName in (List)constraintMap["bones"]) { + BoneData bone = skeletonData.FindBone(boneName); + if (bone == null) throw new Exception("Transform constraint bone not found: " + boneName); + data.bones.Add(bone); } - if (slotMap.ContainsKey("attachment")) - slotData.attachmentName = (String)slotMap["attachment"]; + String targetName = (String)constraintMap["target"]; + data.target = skeletonData.FindBone(targetName); + if (data.target == null) throw new Exception("Target bone not found: " + targetName); - if (slotMap.ContainsKey("blend")) - slotData.blendMode = (BlendMode)Enum.Parse(typeof(BlendMode), (String)slotMap["blend"], false); - else - slotData.blendMode = BlendMode.normal; + data.offsetRotation = GetFloat(constraintMap, "rotation", 0); + data.offsetX = GetFloat(constraintMap, "x", 0) * scale; + data.offsetY = GetFloat(constraintMap, "y", 0) * scale; + data.offsetScaleX = GetFloat(constraintMap, "scaleX", 0); + data.offsetScaleY = GetFloat(constraintMap, "scaleY", 0); + data.offsetShearY = GetFloat(constraintMap, "shearY", 0); - skeletonData.slots.Add(slotData); + data.rotateMix = GetFloat(constraintMap, "rotateMix", 1); + data.translateMix = GetFloat(constraintMap, "translateMix", 1); + data.scaleMix = GetFloat(constraintMap, "scaleMix", 1); + data.shearMix = GetFloat(constraintMap, "shearMix", 1); + + skeletonData.transformConstraints.Add(data); + } + } + + // Path constraints. + if(root.ContainsKey("path")) { + foreach (Dictionary constraintMap in (List)root["path"]) { + PathConstraintData data = new PathConstraintData((String)constraintMap["name"]); + + foreach (String boneName in (List)constraintMap["bones"]) { + BoneData bone = skeletonData.FindBone(boneName); + if (bone == null) throw new Exception("Path bone not found: " + boneName); + data.bones.Add(bone); + } + + String targetName = (String)constraintMap["target"]; + data.target = skeletonData.FindSlot(targetName); + if (data.target == null) throw new Exception("Target slot not found: " + targetName); + + data.positionMode = (PositionMode)Enum.Parse(typeof(PositionMode), GetString(constraintMap, "positionMode", "percent"), true); + data.spacingMode = (SpacingMode)Enum.Parse(typeof(SpacingMode), GetString(constraintMap, "spacingMode", "length"), true); + data.rotateMode = (RotateMode)Enum.Parse(typeof(RotateMode), GetString(constraintMap, "rotateMode", "tangent"), true); + data.offsetRotation = GetFloat(constraintMap, "rotation", 0); + data.position = GetFloat(constraintMap, "position", 0); + if (data.positionMode == PositionMode.Fixed) data.position *= scale; + data.spacing = GetFloat(constraintMap, "spacing", 0); + if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed) data.spacing *= scale; + data.rotateMix = GetFloat(constraintMap, "rotateMix", 1); + data.translateMix = GetFloat(constraintMap, "translateMix", 1); + + skeletonData.pathConstraints.Add(data); } } // Skins. if (root.ContainsKey("skins")) { - foreach (KeyValuePair entry in (Dictionary)root["skins"]) { - var skin = new Skin(entry.Key); - foreach (KeyValuePair slotEntry in (Dictionary)entry.Value) { + foreach (KeyValuePair skinMap in (Dictionary)root["skins"]) { + var skin = new Skin(skinMap.Key); + foreach (KeyValuePair slotEntry in (Dictionary)skinMap.Value) { int slotIndex = skeletonData.FindSlotIndex(slotEntry.Key); - foreach (KeyValuePair attachmentEntry in ((Dictionary)slotEntry.Value)) { - Attachment attachment = ReadAttachment(skin, slotIndex, attachmentEntry.Key, (Dictionary)attachmentEntry.Value); - if (attachment != null) skin.AddAttachment(slotIndex, attachmentEntry.Key, attachment); - } + foreach (KeyValuePair entry in ((Dictionary)slotEntry.Value)) { + try { + Attachment attachment = ReadAttachment((Dictionary)entry.Value, skin, slotIndex, entry.Key); + if (attachment != null) skin.AddAttachment(slotIndex, entry.Key, attachment); + } catch (Exception e) { + throw new Exception("Error reading attachment: " + entry.Key + ", skin: " + skin, e); + } + } } skeletonData.skins.Add(skin); - if (skin.name == "default") - skeletonData.defaultSkin = skin; + if (skin.name == "default") skeletonData.defaultSkin = skin; } } @@ -233,15 +265,8 @@ namespace Spine { if (skin == null) throw new Exception("Slot not found: " + linkedMesh.skin); Attachment parent = skin.GetAttachment(linkedMesh.slotIndex, linkedMesh.parent); if (parent == null) throw new Exception("Parent mesh not found: " + linkedMesh.parent); - if (linkedMesh.mesh is MeshAttachment) { - MeshAttachment mesh = (MeshAttachment)linkedMesh.mesh; - mesh.ParentMesh = (MeshAttachment)parent; - mesh.UpdateUVs(); - } else { - WeightedMeshAttachment mesh = (WeightedMeshAttachment)linkedMesh.mesh; - mesh.ParentMesh = (WeightedMeshAttachment)parent; - mesh.UpdateUVs(); - } + linkedMesh.mesh.ParentMesh = (MeshAttachment)parent; + linkedMesh.mesh.UpdateUVs(); } linkedMeshes.Clear(); @@ -249,18 +274,23 @@ namespace Spine { if (root.ContainsKey("events")) { foreach (KeyValuePair entry in (Dictionary)root["events"]) { var entryMap = (Dictionary)entry.Value; - var eventData = new EventData(entry.Key); - eventData.Int = GetInt(entryMap, "int", 0); - eventData.Float = GetFloat(entryMap, "float", 0); - eventData.String = GetString(entryMap, "string", null); - skeletonData.events.Add(eventData); + var data = new EventData(entry.Key); + data.Int = GetInt(entryMap, "int", 0); + data.Float = GetFloat(entryMap, "float", 0); + data.String = GetString(entryMap, "string", null); + skeletonData.events.Add(data); } } // Animations. if (root.ContainsKey("animations")) { - foreach (KeyValuePair entry in (Dictionary)root["animations"]) - ReadAnimation(entry.Key, (Dictionary)entry.Value, skeletonData); + foreach (KeyValuePair entry in (Dictionary)root["animations"]) { + try { + ReadAnimation((Dictionary)entry.Value, entry.Key, skeletonData); + } catch (Exception e) { + throw new Exception("Error reading animation: " + entry.Key, e); + } + } } skeletonData.bones.TrimExcess(); @@ -272,25 +302,20 @@ namespace Spine { return skeletonData; } - private Attachment ReadAttachment (Skin skin, int slotIndex, String name, Dictionary map) { - if (map.ContainsKey("name")) - name = (String)map["name"]; - + private Attachment ReadAttachment (Dictionary map, Skin skin, int slotIndex, String name) { var scale = this.Scale; + name = GetString(map, "name", name); - var type = AttachmentType.region; - if (map.ContainsKey("type")) { - var typeName = (String)map["type"]; - if (typeName == "skinnedmesh") typeName = "weightedmesh"; - type = (AttachmentType)Enum.Parse(typeof(AttachmentType), typeName , false); - } + var typeName = GetString(map, "type", "region"); + if (typeName == "skinnedmesh") typeName = "weightedmesh"; + if (typeName == "weightedmesh") typeName = "mesh"; + if (typeName == "weightedlinkedmesh") typeName = "linkedmesh"; + var type = (AttachmentType)Enum.Parse(typeof(AttachmentType), typeName, true); - String path = name; - if (map.ContainsKey("path")) - path = (String)map["path"]; + String path = GetString(map, "path", name); switch (type) { - case AttachmentType.region: + case AttachmentType.Region: RegionAttachment region = attachmentLoader.NewRegionAttachment(skin, name, path); if (region == null) return null; region.Path = path; @@ -311,9 +336,15 @@ namespace Spine { region.a = ToColor(color, 3); } + region.UpdateOffset(); return region; - case AttachmentType.mesh: - case AttachmentType.linkedmesh: { + case AttachmentType.Boundingbox: + BoundingBoxAttachment box = attachmentLoader.NewBoundingBoxAttachment(skin, name); + if (box == null) return null; + ReadVertices(map, box, GetInt(map, "vertexCount", 0) << 1); + return box; + case AttachmentType.Mesh: + case AttachmentType.Linkedmesh: { MeshAttachment mesh = attachmentLoader.NewMeshAttachment(skin, name, path); if (mesh == null) return null; mesh.Path = path; @@ -326,145 +357,83 @@ namespace Spine { mesh.a = ToColor(color, 3); } - mesh.Width = GetInt(map, "width", 0) * scale; - mesh.Height = GetInt(map, "height", 0) * scale; + mesh.Width = GetFloat(map, "width", 0) * scale; + mesh.Height = GetFloat(map, "height", 0) * scale; String parent = GetString(map, "parent", null); - if (parent == null) { - mesh.vertices = GetFloatArray(map, "vertices", scale); - mesh.triangles = GetIntArray(map, "triangles"); - mesh.regionUVs = GetFloatArray(map, "uvs", 1); - mesh.UpdateUVs(); - - mesh.HullLength = GetInt(map, "hull", 0) * 2; - if (map.ContainsKey("edges")) mesh.Edges = GetIntArray(map, "edges"); - } else { - mesh.InheritFFD = GetBoolean(map, "ffd", true); + if (parent != null) { + mesh.InheritDeform = GetBoolean(map, "deform", true); linkedMeshes.Add(new LinkedMesh(mesh, GetString(map, "skin", null), slotIndex, parent)); + return mesh; } + float[] uvs = GetFloatArray(map, "uvs", 1); + ReadVertices(map, mesh, uvs.Length); + mesh.triangles = GetIntArray(map, "triangles"); + mesh.regionUVs = uvs; + mesh.UpdateUVs(); + + if (map.ContainsKey("hull")) mesh.HullLength = GetInt(map, "hull", 0) * 2; + if (map.ContainsKey("edges")) mesh.Edges = GetIntArray(map, "edges"); return mesh; } - case AttachmentType.weightedmesh: - case AttachmentType.weightedlinkedmesh: { - WeightedMeshAttachment mesh = attachmentLoader.NewWeightedMeshAttachment(skin, name, path); - if (mesh == null) return null; + case AttachmentType.Path: { + PathAttachment pathAttachment = attachmentLoader.NewPathAttachment(skin, name); + if (pathAttachment == null) return null; + pathAttachment.closed = GetBoolean(map, "closed", false); + pathAttachment.constantSpeed = GetBoolean(map, "constantSpeed", true); - mesh.Path = path; + int vertexCount = GetInt(map, "vertexCount", 0); + ReadVertices(map, pathAttachment, vertexCount << 1); - if (map.ContainsKey("color")) { - var color = (String)map["color"]; - mesh.r = ToColor(color, 0); - mesh.g = ToColor(color, 1); - mesh.b = ToColor(color, 2); - mesh.a = ToColor(color, 3); - } - - mesh.Width = GetInt(map, "width", 0) * scale; - mesh.Height = GetInt(map, "height", 0) * scale; - - String parent = GetString(map, "parent", null); - if (parent == null) { - float[] uvs = GetFloatArray(map, "uvs", 1); - float[] vertices = GetFloatArray(map, "vertices", 1); - var weights = new List(uvs.Length * 3 * 3); - var bones = new List(uvs.Length * 3); - for (int i = 0, n = vertices.Length; i < n;) { - int boneCount = (int)vertices[i++]; - bones.Add(boneCount); - for (int nn = i + boneCount * 4; i < nn; i += 4) { - bones.Add((int)vertices[i]); - weights.Add(vertices[i + 1] * scale); - weights.Add(vertices[i + 2] * scale); - weights.Add(vertices[i + 3]); - } - } - mesh.bones = bones.ToArray(); - mesh.weights = weights.ToArray(); - mesh.triangles = GetIntArray(map, "triangles"); - mesh.regionUVs = uvs; - mesh.UpdateUVs(); - - mesh.HullLength = GetInt(map, "hull", 0) * 2; - if (map.ContainsKey("edges")) mesh.Edges = GetIntArray(map, "edges"); - } else { - mesh.InheritFFD = GetBoolean(map, "ffd", true); - linkedMeshes.Add(new LinkedMesh(mesh, GetString(map, "skin", null), slotIndex, parent)); - } - - return mesh; + // potential BOZO see Java impl + pathAttachment.lengths = GetFloatArray(map, "lengths", scale); + return pathAttachment; } - case AttachmentType.boundingbox: - BoundingBoxAttachment box = attachmentLoader.NewBoundingBoxAttachment(skin, name); - if (box == null) return null; - box.vertices = GetFloatArray(map, "vertices", scale); - return box; } return null; } - private float[] GetFloatArray (Dictionary map, String name, float scale) { - var list = (List)map[name]; - var values = new float[list.Count]; - if (scale == 1) { - for (int i = 0, n = list.Count; i < n; i++) - values[i] = (float)list[i]; - } else { - for (int i = 0, n = list.Count; i < n; i++) - values[i] = (float)list[i] * scale; + private void ReadVertices (Dictionary map, VertexAttachment attachment, int verticesLength) { + attachment.WorldVerticesLength = verticesLength; + float[] vertices = GetFloatArray(map, "vertices", 1); + float scale = Scale; + if (verticesLength == vertices.Length) { + if (scale != 1) { + for (int i = 0; i < vertices.Length; i++) { + vertices[i] *= scale; + } + } + attachment.vertices = vertices; + return; } - return values; + ExposedList weights = new ExposedList(verticesLength * 3 * 3); + ExposedList bones = new ExposedList(verticesLength * 3); + for (int i = 0, n = vertices.Length; i < n;) { + int boneCount = (int)vertices[i++]; + bones.Add(boneCount); + for (int nn = i + boneCount * 4; i < nn; i += 4) { + bones.Add((int)vertices[i]); + weights.Add(vertices[i + 1] * this.Scale); + weights.Add(vertices[i + 2] * this.Scale); + weights.Add(vertices[i + 3]); + } + } + attachment.bones = bones.ToArray(); + attachment.vertices = weights.ToArray(); } - private int[] GetIntArray (Dictionary map, String name) { - var list = (List)map[name]; - var values = new int[list.Count]; - for (int i = 0, n = list.Count; i < n; i++) - values[i] = (int)(float)list[i]; - return values; - } - - private float GetFloat (Dictionary map, String name, float defaultValue) { - if (!map.ContainsKey(name)) - return defaultValue; - return (float)map[name]; - } - - private int GetInt (Dictionary map, String name, int defaultValue) { - if (!map.ContainsKey(name)) - return defaultValue; - return (int)(float)map[name]; - } - - private bool GetBoolean (Dictionary map, String name, bool defaultValue) { - if (!map.ContainsKey(name)) - return defaultValue; - return (bool)map[name]; - } - - private String GetString (Dictionary map, String name, String defaultValue) { - if (!map.ContainsKey(name)) - return defaultValue; - return (String)map[name]; - } - - private float ToColor (String hexString, int colorIndex) { - if (hexString.Length != 8) - throw new ArgumentException("Color hexidecimal length must be 8, recieved: " + hexString); - return Convert.ToInt32(hexString.Substring(colorIndex * 2, 2), 16) / (float)255; - } - - private void ReadAnimation (String name, Dictionary map, SkeletonData skeletonData) { + private void ReadAnimation (Dictionary map, String name, SkeletonData skeletonData) { + var scale = this.Scale; var timelines = new ExposedList(); float duration = 0; - var scale = this.Scale; + // Slot timelines. if (map.ContainsKey("slots")) { foreach (KeyValuePair entry in (Dictionary)map["slots"]) { String slotName = entry.Key; int slotIndex = skeletonData.FindSlotIndex(slotName); var timelineMap = (Dictionary)entry.Value; - foreach (KeyValuePair timelineEntry in timelineMap) { var values = (List)timelineEntry.Value; var timelineName = (String)timelineEntry.Key; @@ -477,11 +446,11 @@ namespace Spine { float time = (float)valueMap["time"]; String c = (String)valueMap["color"]; timeline.SetFrame(frameIndex, time, ToColor(c, 0), ToColor(c, 1), ToColor(c, 2), ToColor(c, 3)); - ReadCurve(timeline, frameIndex, valueMap); + ReadCurve(valueMap, timeline, frameIndex); frameIndex++; } timelines.Add(timeline); - duration = Math.Max(duration, timeline.frames[timeline.FrameCount * 5 - 5]); + duration = Math.Max(duration, timeline.frames[(timeline.FrameCount - 1) * ColorTimeline.ENTRIES]); } else if (timelineName == "attachment") { var timeline = new AttachmentTimeline(values.Count); @@ -501,13 +470,12 @@ namespace Spine { } } + // Bone timelines. if (map.ContainsKey("bones")) { foreach (KeyValuePair entry in (Dictionary)map["bones"]) { String boneName = entry.Key; int boneIndex = skeletonData.FindBoneIndex(boneName); - if (boneIndex == -1) - throw new Exception("Bone not found: " + boneName); - + if (boneIndex == -1) throw new Exception("Bone not found: " + boneName); var timelineMap = (Dictionary)entry.Value; foreach (KeyValuePair timelineEntry in timelineMap) { var values = (List)timelineEntry.Value; @@ -518,13 +486,12 @@ namespace Spine { int frameIndex = 0; foreach (Dictionary valueMap in values) { - float time = (float)valueMap["time"]; - timeline.SetFrame(frameIndex, time, (float)valueMap["angle"]); - ReadCurve(timeline, frameIndex, valueMap); + timeline.SetFrame(frameIndex, (float)valueMap["time"], (float)valueMap["angle"]); + ReadCurve(valueMap, timeline, frameIndex); frameIndex++; } timelines.Add(timeline); - duration = Math.Max(duration, timeline.frames[timeline.FrameCount * 2 - 2]); + duration = Math.Max(duration, timeline.frames[(timeline.FrameCount - 1) * RotateTimeline.ENTRIES]); } else if (timelineName == "translate" || timelineName == "scale" || timelineName == "shear") { TranslateTimeline timeline; @@ -544,12 +511,12 @@ namespace Spine { float time = (float)valueMap["time"]; float x = GetFloat(valueMap, "x", 0); float y = GetFloat(valueMap, "y", 0); - timeline.SetFrame(frameIndex, time, (float)x * timelineScale, (float)y * timelineScale); - ReadCurve(timeline, frameIndex, valueMap); + timeline.SetFrame(frameIndex, time, x * timelineScale, y * timelineScale); + ReadCurve(valueMap, timeline, frameIndex); frameIndex++; } timelines.Add(timeline); - duration = Math.Max(duration, timeline.frames[timeline.FrameCount * 3 - 3]); + duration = Math.Max(duration, timeline.frames[(timeline.FrameCount - 1) * TranslateTimeline.ENTRIES]); } else throw new Exception("Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"); @@ -557,7 +524,7 @@ namespace Spine { } } - // IK timelines. + // IK constraint timelines. if (map.ContainsKey("ik")) { foreach (KeyValuePair constraintMap in (Dictionary)map["ik"]) { IkConstraintData constraint = skeletonData.FindIkConstraint(constraintMap.Key); @@ -570,11 +537,11 @@ namespace Spine { float mix = GetFloat(valueMap, "mix", 1); bool bendPositive = GetBoolean(valueMap, "bendPositive", true); timeline.SetFrame(frameIndex, time, mix, bendPositive ? 1 : -1); - ReadCurve(timeline, frameIndex, valueMap); + ReadCurve(valueMap, timeline, frameIndex); frameIndex++; } timelines.Add(timeline); - duration = Math.Max(duration, timeline.frames[timeline.FrameCount * 3 - 3]); + duration = Math.Max(duration, timeline.frames[(timeline.FrameCount - 1) * IkConstraintTimeline.ENTRIES]); } } @@ -593,62 +560,103 @@ namespace Spine { float scaleMix = GetFloat(valueMap, "scaleMix", 1); float shearMix = GetFloat(valueMap, "shearMix", 1); timeline.SetFrame(frameIndex, time, rotateMix, translateMix, scaleMix, shearMix); - ReadCurve(timeline, frameIndex, valueMap); + ReadCurve(valueMap, timeline, frameIndex); frameIndex++; } timelines.Add(timeline); - duration = Math.Max(duration, timeline.frames[timeline.FrameCount * 5 - 5]); + duration = Math.Max(duration, timeline.frames[(timeline.FrameCount - 1) * TransformConstraintTimeline.ENTRIES]); } } - // FFD timelines. - if (map.ContainsKey("ffd")) { - foreach (KeyValuePair ffdMap in (Dictionary)map["ffd"]) { - Skin skin = skeletonData.FindSkin(ffdMap.Key); - foreach (KeyValuePair slotMap in (Dictionary)ffdMap.Value) { - int slotIndex = skeletonData.FindSlotIndex(slotMap.Key); - foreach (KeyValuePair meshMap in (Dictionary)slotMap.Value) { - var values = (List)meshMap.Value; - var timeline = new FfdTimeline(values.Count); - Attachment attachment = skin.GetAttachment(slotIndex, meshMap.Key); - if (attachment == null) throw new Exception("FFD attachment not found: " + meshMap.Key); - timeline.slotIndex = slotIndex; - timeline.attachment = attachment; - - int vertexCount; - if (attachment is MeshAttachment) - vertexCount = ((MeshAttachment)attachment).vertices.Length; - else - vertexCount = ((WeightedMeshAttachment)attachment).Weights.Length / 3 * 2; - + // Path constraint timelines. + if (map.ContainsKey("paths")) { + foreach (KeyValuePair constraintMap in (Dictionary)map["paths"]) { + int index = skeletonData.FindPathConstraintIndex(constraintMap.Key); + if (index == -1) throw new Exception("Path constraint not found: " + constraintMap.Key); + PathConstraintData data = skeletonData.pathConstraints.Items[index]; + var timelineMap = (Dictionary)constraintMap.Value; + foreach (KeyValuePair timelineEntry in timelineMap) { + var values = (List)timelineEntry.Value; + var timelineName = (String)timelineEntry.Key; + if (timelineName == "position" || timelineName == "spacing") { + PathConstraintPositionTimeline timeline; + float timelineScale = 1; + if (timelineName == "spacing") { + timeline = new PathConstraintSpacingTimeline(values.Count); + if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed) timelineScale = scale; + } + else { + timeline = new PathConstraintPositionTimeline(values.Count); + if (data.positionMode == PositionMode.Fixed) timelineScale = scale; + } + timeline.pathConstraintIndex = index; int frameIndex = 0; foreach (Dictionary valueMap in values) { - float[] vertices; + timeline.SetFrame(frameIndex, (float)valueMap["time"], GetFloat(valueMap, timelineName, 0) * timelineScale); + ReadCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.Add(timeline); + duration = Math.Max(duration, timeline.frames[(timeline.FrameCount - 1) * PathConstraintPositionTimeline.ENTRIES]); + } + else if (timelineName == "mix") { + PathConstraintMixTimeline timeline = new PathConstraintMixTimeline(values.Count); + timeline.pathConstraintIndex = index; + int frameIndex = 0; + foreach (Dictionary valueMap in values) { + timeline.SetFrame(frameIndex, (float)valueMap["time"], GetFloat(valueMap, "rotateMix", 1), GetFloat(valueMap, "translateMix", 1)); + ReadCurve(valueMap, timeline, frameIndex); + frameIndex++; + } + timelines.Add(timeline); + duration = Math.Max(duration, timeline.frames[(timeline.FrameCount - 1) * PathConstraintMixTimeline.ENTRIES]); + } + } + } + } + + // Deform timelines. + if (map.ContainsKey("deform")) { + foreach (KeyValuePair deformMap in (Dictionary)map["deform"]) { + Skin skin = skeletonData.FindSkin(deformMap.Key); + foreach (KeyValuePair slotMap in (Dictionary)deformMap.Value) { + int slotIndex = skeletonData.FindSlotIndex(slotMap.Key); + if (slotIndex == -1) throw new Exception("Slot not found: " + slotMap.Key); + foreach (KeyValuePair timelineMap in (Dictionary)slotMap.Value) { + var values = (List)timelineMap.Value; + VertexAttachment attachment = (VertexAttachment)skin.GetAttachment(slotIndex, timelineMap.Key); + if (attachment == null) throw new Exception("Deform attachment not found: " + timelineMap.Key); + bool weighted = attachment.bones != null; + float[] vertices = attachment.vertices; + int deformLength = weighted ? vertices.Length / 3 * 2 : vertices.Length; + + var timeline = new DeformTimeline(values.Count); + timeline.slotIndex = slotIndex; + timeline.attachment = attachment; + + int frameIndex = 0; + foreach (Dictionary valueMap in values) { + float[] deform; if (!valueMap.ContainsKey("vertices")) { - if (attachment is MeshAttachment) - vertices = ((MeshAttachment)attachment).vertices; - else - vertices = new float[vertexCount]; + deform = weighted ? new float[deformLength] : vertices; } else { - var verticesValue = (List)valueMap["vertices"]; - vertices = new float[vertexCount]; + deform = new float[deformLength]; int start = GetInt(valueMap, "offset", 0); - if (scale == 1) { - for (int i = 0, n = verticesValue.Count; i < n; i++) - vertices[i + start] = (float)verticesValue[i]; - } else { - for (int i = 0, n = verticesValue.Count; i < n; i++) - vertices[i + start] = (float)verticesValue[i] * scale; + float[] verticesValue = GetFloatArray(valueMap, "vertices", 1); + Array.Copy(verticesValue, 0, deform, start, verticesValue.Length); + if (scale != 1) { + for (int i = start, n = i + verticesValue.Length; i < n; i++) + deform[i] *= scale; } - if (attachment is MeshAttachment) { - float[] meshVertices = ((MeshAttachment)attachment).vertices; - for (int i = 0; i < vertexCount; i++) - vertices[i] += meshVertices[i]; + + if (!weighted) { + for (int i = 0; i < deformLength; i++) + deform[i] += vertices[i]; } } - timeline.SetFrame(frameIndex, (float)valueMap["time"], vertices); - ReadCurve(timeline, frameIndex, valueMap); + timeline.SetFrame(frameIndex, (float)valueMap["time"], deform); + ReadCurve(valueMap, timeline, frameIndex); frameIndex++; } timelines.Add(timeline); @@ -658,6 +666,7 @@ namespace Spine { } } + // Draw order timeline. if (map.ContainsKey("drawOrder") || map.ContainsKey("draworder")) { var values = (List)map[map.ContainsKey("drawOrder") ? "drawOrder" : "draworder"]; var timeline = new DrawOrderTimeline(values.Count); @@ -695,6 +704,7 @@ namespace Spine { duration = Math.Max(duration, timeline.frames[timeline.FrameCount - 1]); } + // Event timeline. if (map.ContainsKey("events")) { var eventsMap = (List)map["events"]; var timeline = new EventTimeline(eventsMap.Count); @@ -716,29 +726,81 @@ namespace Spine { skeletonData.animations.Add(new Animation(name, timelines, duration)); } - private void ReadCurve (CurveTimeline timeline, int frameIndex, Dictionary valueMap) { + static void ReadCurve (Dictionary valueMap, CurveTimeline timeline, int frameIndex) { if (!valueMap.ContainsKey("curve")) return; Object curveObject = valueMap["curve"]; if (curveObject.Equals("stepped")) timeline.SetStepped(frameIndex); - else if (curveObject is List) { - var curve = (List)curveObject; - timeline.SetCurve(frameIndex, (float)curve[0], (float)curve[1], (float)curve[2], (float)curve[3]); + else { + var curve = curveObject as List; + if (curve != null) + timeline.SetCurve(frameIndex, (float)curve[0], (float)curve[1], (float)curve[2], (float)curve[3]); } } internal class LinkedMesh { internal String parent, skin; internal int slotIndex; - internal Attachment mesh; + internal MeshAttachment mesh; - public LinkedMesh (Attachment mesh, String skin, int slotIndex, String parent) { + public LinkedMesh (MeshAttachment mesh, String skin, int slotIndex, String parent) { this.mesh = mesh; this.skin = skin; this.slotIndex = slotIndex; this.parent = parent; } } + + static float[] GetFloatArray(Dictionary map, String name, float scale) { + var list = (List)map[name]; + var values = new float[list.Count]; + if (scale == 1) { + for (int i = 0, n = list.Count; i < n; i++) + values[i] = (float)list[i]; + } else { + for (int i = 0, n = list.Count; i < n; i++) + values[i] = (float)list[i] * scale; + } + return values; + } + + static int[] GetIntArray(Dictionary map, String name) { + var list = (List)map[name]; + var values = new int[list.Count]; + for (int i = 0, n = list.Count; i < n; i++) + values[i] = (int)(float)list[i]; + return values; + } + + static float GetFloat(Dictionary map, String name, float defaultValue) { + if (!map.ContainsKey(name)) + return defaultValue; + return (float)map[name]; + } + + static int GetInt(Dictionary map, String name, int defaultValue) { + if (!map.ContainsKey(name)) + return defaultValue; + return (int)(float)map[name]; + } + + static bool GetBoolean(Dictionary map, String name, bool defaultValue) { + if (!map.ContainsKey(name)) + return defaultValue; + return (bool)map[name]; + } + + static String GetString(Dictionary map, String name, String defaultValue) { + if (!map.ContainsKey(name)) + return defaultValue; + return (String)map[name]; + } + + static float ToColor(String hexString, int colorIndex) { + if (hexString.Length != 8) + throw new ArgumentException("Color hexidecimal length must be 8, recieved: " + hexString, "hexString"); + return Convert.ToInt32(hexString.Substring(colorIndex * 2, 2), 16) / (float)255; + } } } diff --git a/spine-csharp/src/Skin.cs b/spine-csharp/src/Skin.cs index 2f6b86019..c3fdd4e40 100644 --- a/spine-csharp/src/Skin.cs +++ b/spine-csharp/src/Skin.cs @@ -40,14 +40,15 @@ namespace Spine { new Dictionary(AttachmentKeyTupleComparer.Instance); public String Name { get { return name; } } + public Dictionary Attachments { get { return attachments; } } public Skin (String name) { - if (name == null) throw new ArgumentNullException("name cannot be null."); + if (name == null) throw new ArgumentNullException("name", "name cannot be null."); this.name = name; } public void AddAttachment (int slotIndex, String name, Attachment attachment) { - if (attachment == null) throw new ArgumentNullException("attachment cannot be null."); + if (attachment == null) throw new ArgumentNullException("attachment", "attachment cannot be null."); attachments[new AttachmentKeyTuple(slotIndex, name)] = attachment; } @@ -59,13 +60,13 @@ namespace Spine { } public void FindNamesForSlot (int slotIndex, List names) { - if (names == null) throw new ArgumentNullException("names cannot be null."); + if (names == null) throw new ArgumentNullException("names", "names cannot be null."); foreach (AttachmentKeyTuple key in attachments.Keys) if (key.slotIndex == slotIndex) names.Add(key.name); } public void FindAttachmentsForSlot (int slotIndex, List attachments) { - if (attachments == null) throw new ArgumentNullException("attachments cannot be null."); + if (attachments == null) throw new ArgumentNullException("attachments", "attachments cannot be null."); foreach (KeyValuePair entry in this.attachments) if (entry.Key.slotIndex == slotIndex) attachments.Add(entry.Value); } @@ -86,7 +87,7 @@ namespace Spine { } } - struct AttachmentKeyTuple { + public struct AttachmentKeyTuple { public readonly int slotIndex; public readonly string name; internal readonly int nameHashCode; diff --git a/spine-csharp/src/Slot.cs b/spine-csharp/src/Slot.cs index cce0fd869..552264083 100644 --- a/spine-csharp/src/Slot.cs +++ b/spine-csharp/src/Slot.cs @@ -38,8 +38,7 @@ namespace Spine { internal float r, g, b, a; internal Attachment attachment; internal float attachmentTime; - internal float[] attachmentVertices = new float[0]; - internal int attachmentVerticesCount; + internal ExposedList attachmentVertices = new ExposedList(); public SlotData Data { get { return data; } } public Bone Bone { get { return bone; } } @@ -51,38 +50,31 @@ namespace Spine { /// May be null. public Attachment Attachment { - get { - return attachment; - } + get { return attachment; } set { if (attachment == value) return; attachment = value; attachmentTime = bone.skeleton.time; - attachmentVerticesCount = 0; + attachmentVertices.Clear(false); } } public float AttachmentTime { - get { - return bone.skeleton.time - attachmentTime; - } - set { - attachmentTime = bone.skeleton.time - value; - } + get { return bone.skeleton.time - attachmentTime; } + set { attachmentTime = bone.skeleton.time - value; } } - public float[] AttachmentVertices { get { return attachmentVertices; } set { attachmentVertices = value; } } - public int AttachmentVerticesCount { get { return attachmentVerticesCount; } set { attachmentVerticesCount = value; } } + public ExposedList AttachmentVertices { get { return attachmentVertices; } set { attachmentVertices = value; } } public Slot (SlotData data, Bone bone) { - if (data == null) throw new ArgumentNullException("data cannot be null."); - if (bone == null) throw new ArgumentNullException("bone cannot be null."); + if (data == null) throw new ArgumentNullException("data", "data cannot be null."); + if (bone == null) throw new ArgumentNullException("bone", "bone cannot be null."); this.data = data; this.bone = bone; SetToSetupPose(); } - internal void SetToSetupPose (int slotIndex) { + public void SetToSetupPose () { r = data.r; g = data.g; b = data.b; @@ -91,14 +83,10 @@ namespace Spine { Attachment = null; else { attachment = null; - Attachment = bone.skeleton.GetAttachment(slotIndex, data.attachmentName); + Attachment = bone.skeleton.GetAttachment(data.index, data.attachmentName); } } - public void SetToSetupPose () { - SetToSetupPose(bone.skeleton.data.slots.IndexOf(data)); - } - override public String ToString () { return data.name; } diff --git a/spine-csharp/src/SlotData.cs b/spine-csharp/src/SlotData.cs index 1a0e072b6..0ba5631b8 100644 --- a/spine-csharp/src/SlotData.cs +++ b/spine-csharp/src/SlotData.cs @@ -33,12 +33,14 @@ using System; namespace Spine { public class SlotData { + internal int index; internal String name; internal BoneData boneData; internal float r = 1, g = 1, b = 1, a = 1; internal String attachmentName; internal BlendMode blendMode; + public int Index { get { return index; } } public String Name { get { return name; } } public BoneData BoneData { get { return boneData; } } public float R { get { return r; } set { r = value; } } @@ -49,9 +51,11 @@ namespace Spine { public String AttachmentName { get { return attachmentName; } set { attachmentName = value; } } public BlendMode BlendMode { get { return blendMode; } set { blendMode = value; } } - public SlotData (String name, BoneData boneData) { - if (name == null) throw new ArgumentNullException("name cannot be null."); - if (boneData == null) throw new ArgumentNullException("boneData cannot be null."); + public SlotData (int index, String name, BoneData boneData) { + if (index < 0) throw new ArgumentException ("index must be >= 0.", "index"); + if (name == null) throw new ArgumentNullException("name", "name cannot be null."); + if (boneData == null) throw new ArgumentNullException("boneData", "boneData cannot be null."); + this.index = index; this.name = name; this.boneData = boneData; } diff --git a/spine-csharp/src/TransformConstraint.cs b/spine-csharp/src/TransformConstraint.cs index 4239781a7..df83b9d08 100644 --- a/spine-csharp/src/TransformConstraint.cs +++ b/spine-csharp/src/TransformConstraint.cs @@ -30,46 +30,35 @@ *****************************************************************************/ using System; -using System.Collections.Generic; namespace Spine { public class TransformConstraint : IUpdatable { internal TransformConstraintData data; - internal Bone bone, target; + internal ExposedList bones; + internal Bone target; internal float rotateMix, translateMix, scaleMix, shearMix; - internal float offsetRotation, offsetX, offsetY, offsetScaleX, offsetScaleY, offsetShearY; public TransformConstraintData Data { get { return data; } } - public Bone Bone { get { return bone; } set { bone = value; } } + public ExposedList Bones { get { return bones; } } public Bone Target { get { return target; } set { target = value; } } public float RotateMix { get { return rotateMix; } set { rotateMix = value; } } public float TranslateMix { get { return translateMix; } set { translateMix = value; } } public float ScaleMix { get { return scaleMix; } set { scaleMix = value; } } public float ShearMix { get { return shearMix; } set { shearMix = value; } } - public float OffsetRotation { get { return offsetRotation; } set { offsetRotation = value; } } - public float OffsetX { get { return offsetX; } set { offsetX = value; } } - public float OffsetY { get { return offsetY; } set { offsetY = value; } } - public float OffsetScaleX { get { return offsetScaleX; } set { offsetScaleX = value; } } - public float OffsetScaleY { get { return offsetScaleY; } set { offsetScaleY = value; } } - public float OffsetShearY { get { return offsetShearY; } set { offsetShearY = value; } } - public TransformConstraint (TransformConstraintData data, Skeleton skeleton) { - if (data == null) throw new ArgumentNullException("data cannot be null."); - if (skeleton == null) throw new ArgumentNullException("skeleton cannot be null."); + if (data == null) throw new ArgumentNullException("data", "data cannot be null."); + if (skeleton == null) throw new ArgumentNullException("skeleton", "skeleton cannot be null."); this.data = data; - translateMix = data.translateMix; rotateMix = data.rotateMix; + translateMix = data.translateMix; scaleMix = data.scaleMix; shearMix = data.shearMix; - offsetRotation = data.offsetRotation; - offsetX = data.offsetX; - offsetY = data.offsetY; - offsetScaleX = data.offsetScaleX; - offsetScaleY = data.offsetScaleY; - offsetShearY = data.offsetShearY; - bone = skeleton.FindBone(data.bone.name); + bones = new ExposedList(); + foreach (BoneData boneData in data.bones) + bones.Add (skeleton.FindBone (boneData.name)); + target = skeleton.FindBone(data.target.name); } @@ -78,55 +67,59 @@ namespace Spine { } public void Update () { - Bone bone = this.bone; + float rotateMix = this.rotateMix, translateMix = this.translateMix, scaleMix = this.scaleMix, shearMix = this.shearMix; Bone target = this.target; + float ta = target.a, tb = target.b, tc = target.c, td = target.d; + ExposedList bones = this.bones; + for (int i = 0, n = bones.Count; i < n; i++) { + Bone bone = bones.Items[i]; - if (rotateMix > 0) { - float a = bone.a, b = bone.b, c = bone.c, d = bone.d; - float r = MathUtils.Atan2(target.c, target.a) - MathUtils.Atan2(c, a) + offsetRotation * MathUtils.degRad; - if (r > MathUtils.PI) - r -= MathUtils.PI2; - else if (r < -MathUtils.PI) r += MathUtils.PI2; - r *= rotateMix; - float cos = MathUtils.Cos(r), sin = MathUtils.Sin(r); - bone.a = cos * a - sin * c; - bone.b = cos * b - sin * d; - bone.c = sin * a + cos * c; - bone.d = sin * b + cos * d; - } + if (rotateMix > 0) { + float a = bone.a, b = bone.b, c = bone.c, d = bone.d; + float r = (float)Math.Atan2(tc, ta) - (float)Math.Atan2(c, a) + data.offsetRotation * MathUtils.degRad; + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) r += MathUtils.PI2; + r *= rotateMix; + float cos = MathUtils.Cos(r), sin = MathUtils.Sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } - if (scaleMix > 0) { - float bs = (float)Math.Sqrt(bone.a * bone.a + bone.c * bone.c); - float ts = (float)Math.Sqrt(target.a * target.a + target.c * target.c); - float s = bs > 0.00001f ? (bs + (ts - bs + offsetScaleX) * scaleMix) / bs : 0; - bone.a *= s; - bone.c *= s; - bs = (float)Math.Sqrt(bone.b * bone.b + bone.d * bone.d); - ts = (float)Math.Sqrt(target.b * target.b + target.d * target.d); - s = bs > 0.00001f ? (bs + (ts - bs + offsetScaleY) * scaleMix) / bs : 0; - bone.b *= s; - bone.d *= s; - } + if (translateMix > 0) { + float tempx, tempy; + target.LocalToWorld(data.offsetX, data.offsetY, out tempx, out tempy); + bone.worldX += (tempx - bone.worldX) * translateMix; + bone.worldY += (tempy - bone.worldY) * translateMix; + } - if (shearMix > 0) { - float b = bone.b, d = bone.d; - float by = MathUtils.Atan2(d, b); - float r = MathUtils.Atan2(target.d, target.b) - MathUtils.Atan2(target.c, target.a) - (by - MathUtils.Atan2(bone.c, bone.a)); - if (r > MathUtils.PI) - r -= MathUtils.PI2; - else if (r < -MathUtils.PI) r += MathUtils.PI2; - r = by + (r + offsetShearY * MathUtils.degRad) * shearMix; - float s = (float)Math.Sqrt(b * b + d * d); - bone.b = MathUtils.Cos(r) * s; - bone.d = MathUtils.Sin(r) * s; - } + if (scaleMix > 0) { + float bs = (float)Math.Sqrt(bone.a * bone.a + bone.c * bone.c); + float ts = (float)Math.Sqrt(ta * ta + tc * tc); + float s = bs > 0.00001f ? (bs + (ts - bs + data.offsetScaleX) * scaleMix) / bs : 0; + bone.a *= s; + bone.c *= s; + bs = (float)Math.Sqrt(bone.b * bone.b + bone.d * bone.d); + ts = (float)Math.Sqrt(tb * tb + td * td); + s = bs > 0.00001f ? (bs + (ts - bs + data.offsetScaleY) * scaleMix) / bs : 0; + bone.b *= s; + bone.d *= s; + } - float translateMix = this.translateMix; - if (translateMix > 0) { - float tx, ty; - target.LocalToWorld(offsetX, offsetY, out tx, out ty); - bone.worldX += (tx - bone.worldX) * translateMix; - bone.worldY += (ty - bone.worldY) * translateMix; + if (shearMix > 0) { + float b = bone.b, d = bone.d; + float by = MathUtils.Atan2(d, b); + float r = MathUtils.Atan2(td, tb) - MathUtils.Atan2(tc, ta) - (by - MathUtils.Atan2(bone.c, bone.a)); + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) r += MathUtils.PI2; + r = by + (r + data.offsetShearY * MathUtils.degRad) * shearMix; + float s = (float)Math.Sqrt(b * b + d * d); + bone.b = MathUtils.Cos(r) * s; + bone.d = MathUtils.Sin(r) * s; + } } } diff --git a/spine-csharp/src/TransformConstraintData.cs b/spine-csharp/src/TransformConstraintData.cs index eeee5d21e..b4bba36dd 100644 --- a/spine-csharp/src/TransformConstraintData.cs +++ b/spine-csharp/src/TransformConstraintData.cs @@ -30,17 +30,17 @@ *****************************************************************************/ using System; -using System.Collections.Generic; namespace Spine { public class TransformConstraintData { internal String name; - internal BoneData bone, target; + internal ExposedList bones = new ExposedList(); + internal BoneData target; internal float rotateMix, translateMix, scaleMix, shearMix; internal float offsetRotation, offsetX, offsetY, offsetScaleX, offsetScaleY, offsetShearY; public String Name { get { return name; } } - public BoneData Bone { get { return bone; } set { bone = value; } } + public ExposedList Bones { get { return bones; } } public BoneData Target { get { return target; } set { target = value; } } public float RotateMix { get { return rotateMix; } set { rotateMix = value; } } public float TranslateMix { get { return translateMix; } set { translateMix = value; } } @@ -55,7 +55,7 @@ namespace Spine { public float OffsetShearY { get { return offsetShearY; } set { offsetShearY = value; } } public TransformConstraintData (String name) { - if (name == null) throw new ArgumentNullException("name cannot be null."); + if (name == null) throw new ArgumentNullException("name", "name cannot be null."); this.name = name; } diff --git a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.json b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.json index 4394ee276..8911049fc 100644 --- a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.json +++ b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.json @@ -1,26 +1,27 @@ { +"skeleton": { "hash": "3Z6FWT/Kylgd8cbSWBEwAsOcPEM", "spine": "3.4.00", "width": 266.87, "height": 349.55, "images": "./images/" }, "bones": [ { "name": "root" }, { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, - { "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 }, + { "name": "torso", "parent": "hip", "length": 85.82, "rotation": 93.92, "x": -6.42, "y": 1.97 }, + { "name": "neck", "parent": "torso", "length": 18.38, "rotation": -1.51, "x": 81.67, "y": -6.34 }, + { "name": "head", "parent": "neck", "length": 68.28, "rotation": -13.92, "x": 20.93, "y": 11.59 }, + { "name": "left shoulder", "parent": "torso", "length": 35.43, "rotation": -156.96, "x": 74.04, "y": -20.38 }, + { "name": "left arm", "parent": "left shoulder", "length": 35.62, "rotation": 28.16, "x": 37.85, "y": -2.34 }, + { "name": "left upper leg", "parent": "hip", "length": 50.39, "rotation": -89.09, "x": 14.45, "y": 2.81 }, + { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "rotation": -16.65, "x": 56.34, "y": 0.98 }, + { "name": "left foot", "parent": "left lower leg", "length": 46.5, "rotation": 102.43, "x": 58.94, "y": -7.61 }, + { "name": "left hand", "parent": "left arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.07 }, { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, - { "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 }, - { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 }, - { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 }, - { "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 }, - { "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 }, - { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 }, - { "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 }, - { "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 }, - { "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 }, - { "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 }, - { "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 }, - { "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 }, - { "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 }, - { "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 }, - { "name": "spear1", "parent": "left hand", "length": 65.06, "x": 0.48, "y": 17.03, "rotation": 102.43 }, - { "name": "spear2", "parent": "spear1", "length": 61.41, "x": 65.05, "y": 0.04, "rotation": 0.9 }, - { "name": "spear3", "parent": "spear2", "length": 76.79, "x": 61.88, "y": 0.57, "rotation": -0.9 } + { "name": "right shoulder", "parent": "torso", "length": 37.24, "rotation": 133.88, "x": 76.02, "y": 18.14 }, + { "name": "right arm", "parent": "right shoulder", "length": 36.74, "rotation": 36.32, "x": 37.6, "y": 0.31 }, + { "name": "right upper leg", "parent": "hip", "length": 42.45, "rotation": -97.49, "x": -20.07, "y": -6.83 }, + { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "rotation": -14.34, "x": 42.99, "y": -0.61 }, + { "name": "right foot", "parent": "right lower leg", "length": 45.45, "rotation": 110.3, "x": 64.88, "y": 0.04 }, + { "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.35, "x": 36.9, "y": 0.34 }, + { "name": "spear1", "parent": "left hand", "length": 65.06, "rotation": 102.43, "x": 0.48, "y": 17.03 }, + { "name": "spear2", "parent": "spear1", "length": 61.41, "rotation": 0.9, "x": 65.05, "y": 0.04 }, + { "name": "spear3", "parent": "spear2", "length": 76.79, "rotation": -0.9, "x": 61.88, "y": 0.57 } ], "slots": [ { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" }, @@ -52,12 +53,12 @@ "left hand item": { "dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 }, "spear": { - "type": "skinnedmesh", + "type": "mesh", "uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.76608, 0.21781, 0.75642, 0.386, 0.74723, 0.54607, 0.72117, 1, 0.28838, 1, 0.24208, 0.54327, 0.22589, 0.38361, 0.2089, 0.21605, 0.20043, 0.13242, 0, 0.11519, 0.4527, 0, 0.58399, 0 ], "triangles": [ 5, 6, 4, 6, 7, 4, 4, 7, 3, 2, 9, 1, 9, 10, 1, 10, 12, 1, 12, 13, 1, 1, 13, 0, 10, 11, 12, 3, 8, 2, 8, 9, 2, 7, 8, 3 ], - "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.51, 20, -0.31, -6.16, 0.48, 2, 18, 64.73, -5.03, 0.5, 19, -0.4, -5.06, 0.49, 1, 16, 4.56, 23.91, 1, 1, 16, 41.7, -138.95, 1, 1, 16, 32.42, -141.1, 1, 1, 16, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.5, 19, 0.53, 6.59, 0.49, 2, 19, 62.18, 6.66, 0.51, 20, 0.2, 6.09, 0.48, 1, 20, 30.96, 6.61, 1, 1, 20, 37.26, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], - "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], + "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.5116, 20, -0.31, -6.16, 0.48839, 2, 18, 64.73, -5.03, 0.50272, 19, -0.4, -5.06, 0.49728, 1, 10, 4.56, 23.91, 1, 1, 10, 41.7, -138.95, 1, 1, 10, 32.41999, -141.1, 1, 1, 10, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.50272, 19, 0.52999, 6.59, 0.49728, 2, 19, 62.18, 6.66, 0.5116, 20, 0.2, 6.09, 0.48839, 1, 20, 30.96, 6.61, 1, 1, 20, 37.25999, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], "hull": 14, + "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], "width": 22, "height": 368 } @@ -68,8 +69,8 @@ "uvs": [ 0.78091, 0.38453, 1, 0.38405, 1, 0.44881, 0.73953, 0.4687, 0.74641, 0.81344, 0.34022, 1, 0.15434, 1, 0.11303, 0.78858, 0.23007, 0.47367, 0, 0.45047, 0, 0.38621, 0.22367, 0.38573, 0.24384, 0, 1, 0 ], "triangles": [ 0, 12, 13, 11, 12, 0, 0, 1, 2, 9, 10, 11, 3, 11, 0, 3, 0, 2, 8, 11, 3, 9, 11, 8, 5, 6, 7, 4, 5, 8, 4, 8, 3, 5, 7, 8 ], "vertices": [ 15.49, -12.82, 21.13, -13.57, 20.16, -20.49, 13.15, -21.67, 8.13, -58.56, -5.13, -77.04, -9.92, -76.36, -7.79, -53.6, -0.03, -20.36, -5.6, -17.04, -4.63, -10.17, 1.12, -10.93, 7.46, 30.24, 26.93, 27.49 ], - "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], "hull": 14, + "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], "width": 26, "height": 108 } @@ -87,10 +88,10 @@ "name": "goblin/head", "type": "mesh", "uvs": [ 0, 0.60494, 0.14172, 0.5145, 0.24218, 0.55229, 0.32667, 0.67806, 0.37969, 0.79352, 0.53505, 0.93014, 0.86056, 1, 0.94071, 0.94169, 0.92098, 0.69923, 0.9888, 0.65497, 0.99003, 0.51643, 0.89632, 0.43561, 0.94487, 0.41916, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80754, 0.16044, 0.66698, 0.01997, 0.4734, 0.01805, 0.29215, 0.19893, 0.25392, 0.31823, 0.09117, 0.324, 0, 0.44331, 0.43271, 0.69153, 0.466, 0.47794, 0.35996, 0.31246, 0.73473, 0.68593, 0.72215, 0.57425, 0.88179, 0.5583, 0.80267, 0.51015 ], - "triangles": [ 26, 20, 19, 21, 20, 26, 15, 14, 13, 12, 15, 13, 11, 16, 15, 11, 15, 12, 26, 17, 25, 18, 26, 19, 17, 26, 18, 30, 25, 17, 30, 17, 16, 30, 16, 11, 1, 22, 21, 23, 22, 1, 2, 1, 21, 2, 21, 26, 29, 30, 11, 29, 11, 10, 28, 25, 30, 0, 23, 1, 9, 29, 10, 25, 3, 2, 25, 2, 26, 29, 27, 28, 29, 28, 30, 24, 3, 25, 24, 25, 28, 24, 28, 27, 8, 29, 9, 27, 29, 8, 4, 3, 24, 5, 24, 27, 4, 24, 5, 7, 6, 27, 7, 27, 8, 5, 27, 6 ], - "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.46, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.6, 23.41, 35.89, 40.17, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.8, -24.31, 17.2, -40.65, 20.68, -33.02 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], + "triangles": [ 5, 27, 6, 7, 27, 8, 7, 6, 27, 4, 24, 5, 5, 24, 27, 4, 3, 24, 27, 29, 8, 8, 29, 9, 24, 28, 27, 24, 25, 28, 24, 3, 25, 29, 28, 30, 29, 27, 28, 25, 2, 26, 25, 3, 2, 9, 29, 10, 0, 23, 1, 28, 25, 30, 29, 11, 10, 29, 30, 11, 2, 21, 26, 2, 1, 21, 23, 22, 1, 1, 22, 21, 30, 16, 11, 30, 17, 16, 30, 25, 17, 17, 26, 18, 18, 26, 19, 26, 17, 25, 11, 15, 12, 11, 16, 15, 12, 15, 13, 15, 14, 13, 21, 20, 26, 26, 20, 19 ], + "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.45999, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.59999, 23.41, 35.89, 40.16999, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.79999, -24.31, 17.2, -40.65, 20.68, -33.02 ], "hull": 24, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], "width": 103, "height": 66 } @@ -100,10 +101,10 @@ "name": "goblin/left-arm", "type": "mesh", "uvs": [ 0.68992, 0.29284, 1, 0.46364, 1, 0.74643, 0.84089, 1, 0.66344, 1, 0.33765, 0.64284, 0, 0.44124, 0, 0, 0.34295, 0 ], - "triangles": [ 6, 7, 8, 5, 6, 8, 0, 5, 8, 0, 1, 2, 5, 0, 2, 4, 5, 2, 3, 4, 2 ], - "vertices": [ 18.6, 8.81, 32.19, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], + "triangles": [ 3, 4, 2, 4, 5, 2, 5, 0, 2, 0, 1, 2, 0, 5, 8, 5, 6, 8, 6, 7, 8 ], + "vertices": [ 18.6, 8.81, 32.18999, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], "width": 37, "height": 35 } @@ -115,8 +116,8 @@ "uvs": [ 0.15733, 0.31873, 0.08195, 0.78502, 0.15884, 0.99366, 0.41633, 0.96804, 0.68822, 0.97636, 1, 0.96388, 0.99385, 0.73501, 0.85294, 0.51862, 0.61479, 0.31056, 0.46991, 0, 0.48032, 0.75604, 0.75994, 0.77706 ], "triangles": [ 0, 9, 8, 10, 0, 8, 10, 8, 7, 11, 10, 7, 11, 7, 6, 1, 0, 10, 11, 6, 5, 3, 1, 10, 4, 10, 11, 4, 11, 5, 3, 10, 4, 2, 1, 3 ], "vertices": [ 2.28, 13.07, -1.76, -1.64, 3.59, -7.8, 20.25, -6.04, 37.91, -5.27, 58.12, -3.71, 57.31, 3.34, 47.78, 9.51, 31.95, 15.05, 21.99, 24.11, 24.03, 0.75, 42.21, 1.16 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], "width": 65, "height": 31 } @@ -127,9 +128,9 @@ "type": "mesh", "uvs": [ 0.518, 0.12578, 1, 0.16285, 0.99788, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42792, 0.17601, 0, 0.43567, 0 ], "triangles": [ 2, 0, 1, 0, 5, 6, 6, 7, 0, 0, 7, 8, 3, 4, 0, 4, 5, 0, 2, 3, 0 ], - "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.48, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], - "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], + "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.47999, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], "hull": 9, + "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], "width": 36, "height": 41 } @@ -140,9 +141,9 @@ "type": "mesh", "uvs": [ 0.95508, 0.20749, 0.81927, 0.65213, 0.94754, 0.77308, 0.67842, 0.97346, 0.46463, 1, 0.26845, 1, 0.04963, 0.90706, 0.2106, 0.60115, 0.07478, 0.40195, 0.18545, 0, 0.28857, 0 ], "triangles": [ 10, 8, 9, 1, 7, 10, 7, 8, 10, 0, 1, 10, 1, 4, 7, 3, 1, 2, 5, 6, 7, 7, 4, 5, 1, 3, 4 ], - "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.19, -18.29 ], - "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], + "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.18999, -18.29 ], "hull": 11, + "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], "width": 33, "height": 70 } @@ -152,10 +153,10 @@ "name": "goblin/left-shoulder", "type": "mesh", "uvs": [ 0.7377, 0.40692, 1, 0.75237, 1, 1, 0.62046, 1, 0.26184, 0.56601, 0, 0.29783, 0, 0, 0.44115, 0 ], - "triangles": [ 5, 6, 7, 4, 5, 7, 4, 7, 0, 3, 4, 0, 3, 0, 1, 3, 1, 2 ], - "vertices": [ 15.18, 5.74, 32.17, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.74, -4.66, 6.54 ], - "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], + "triangles": [ 3, 1, 2, 3, 0, 1, 3, 4, 0, 4, 7, 0, 4, 5, 7, 5, 6, 7 ], + "vertices": [ 15.18, 5.74, 32.16999, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.73999, -4.66, 6.54 ], "hull": 8, + "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], "width": 29, "height": 44 } @@ -167,8 +168,8 @@ "uvs": [ 1, 0.12167, 1, 0.54873, 0.91067, 0.78907, 0.76567, 1, 0.3087, 0.9579, 0, 0.68777, 0, 0.219, 0.51961, 0, 0.87552, 0 ], "triangles": [ 7, 8, 0, 5, 6, 7, 0, 1, 7, 4, 5, 7, 1, 4, 7, 2, 4, 1, 3, 4, 2 ], "vertices": [ 2.33, 13.06, 33.5, 12.57, 51, 9.34, 66.32, 4.31, 63, -10.71, 43.13, -20.58, 8.91, -20.04, -6.79, -2.64, -6.61, 9.1 ], - "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], "hull": 9, + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], "width": 33, "height": 73 } @@ -178,10 +179,10 @@ "name": "goblin/neck", "type": "mesh", "uvs": [ 0.81967, 0.27365, 0.92101, 0.82048, 0.47134, 1, 0.15679, 0.9354, 0, 0.7556, 0.19268, 0.51833, 0.15468, 0.35706, 0, 0.21989, 0.13568, 0, 0.68878, 0, 0.70145, 0.53872 ], - "triangles": [ 6, 8, 9, 6, 9, 0, 7, 8, 6, 10, 5, 6, 0, 10, 6, 10, 0, 1, 3, 4, 5, 2, 5, 10, 2, 10, 1, 3, 5, 2 ], - "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.05, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], - "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], + "triangles": [ 3, 5, 2, 2, 10, 1, 2, 5, 10, 3, 4, 5, 10, 0, 1, 0, 10, 6, 10, 5, 6, 7, 8, 6, 6, 9, 0, 6, 8, 9 ], + "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.04999, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], "hull": 10, + "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], "width": 36, "height": 41 } @@ -193,8 +194,8 @@ "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], "triangles": [ 1, 2, 3, 1, 3, 0 ], "vertices": [ 25.38, -20.73, -36.61, -20.73, -36.61, 22.26, 25.38, 22.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "width": 62, "height": 43 } @@ -204,10 +205,10 @@ "name": "goblin/right-arm", "type": "mesh", "uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24384, 1, 0, 0.86558, 0.20822, 0.10919, 0.50903, 0, 0.85342, 0 ], - "triangles": [ 6, 7, 0, 2, 3, 5, 4, 5, 3, 1, 6, 0, 6, 2, 5, 1, 2, 6 ], - "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.18 ], - "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], + "triangles": [ 1, 2, 6, 6, 2, 5, 1, 6, 0, 4, 5, 3, 2, 3, 5, 6, 7, 0 ], + "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.17999 ], "hull": 8, + "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], "width": 23, "height": 50 } @@ -219,8 +220,8 @@ "uvs": [ 0.40851, 0.0047, 0.59087, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97532, 0.89391, 0.90385, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65984, 0, 0.46577, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71257, 0.715, 0.74681 ], "triangles": [ 1, 10, 11, 1, 13, 0, 14, 1, 2, 1, 12, 13, 12, 1, 11, 14, 10, 1, 15, 14, 2, 15, 2, 3, 9, 10, 14, 15, 3, 4, 7, 8, 9, 14, 7, 9, 6, 14, 15, 5, 6, 15, 7, 14, 6, 4, 5, 15 ], "vertices": [ 17.36, 25.99, 29.13, 15.44, 39.89, 10.8, 48.14, 7.24, 53.84, -2.38, 49.43, -6, 34.84, -6.39, 16.84, -6.87, -2.4, -7.38, -7.58, -3.86, -7.78, 3.7, -7.95, 10.1, -2.57, 22.36, 10.84, 25.97, 22.14, 2.75, 37.31, 2.03 ], - "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], "hull": 14, + "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], "width": 63, "height": 33 } @@ -231,9 +232,9 @@ "type": "mesh", "uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89823, 0.82004, 0.8259, 0.74285, 0.84223, 0.49993, 0.96356, 0.34102, 0.66023, 0 ], "triangles": [ 8, 10, 9, 0, 10, 1, 8, 2, 1, 8, 1, 10, 7, 3, 8, 3, 2, 8, 4, 3, 7, 5, 7, 6, 4, 7, 5 ], - "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.88, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.87999, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], "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 ], "width": 36, "height": 37 } @@ -245,8 +246,8 @@ "uvs": [ 0.88538, 0.22262, 0.76167, 0.3594, 0.75088, 0.78308, 0.95326, 0.84981, 1, 0.60302 ], "triangles": [ 1, 0, 4, 2, 1, 4, 3, 2, 4 ], "vertices": [ -2.82, 15.97, 2.4, 11.71, 18.08, 11.9, 20.27, 19.27, 11.09, 20.62 ], - "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], "hull": 5, + "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], "width": 36, "height": 37 } @@ -257,9 +258,9 @@ "type": "mesh", "uvs": [ 1, 0.27261, 0.81312, 0.52592, 0.79587, 0.71795, 0.95544, 0.80988, 0.85193, 0.95493, 0.47241, 1, 0.14033, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30325, 0.60611, 0 ], "triangles": [ 1, 10, 0, 9, 10, 1, 8, 9, 1, 2, 8, 1, 4, 2, 3, 6, 7, 8, 5, 6, 8, 2, 5, 8, 4, 5, 2 ], - "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.1, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.77, -1.03, 58.99, -9.19, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], + "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.09999, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.76999, -1.03, 58.99, -9.18999, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], "width": 36, "height": 76 } @@ -269,10 +270,10 @@ "name": "goblin/right-shoulder", "type": "mesh", "uvs": [ 0.62008, 0.03708, 0.92131, 0.09048, 1, 0.38319, 0.72049, 0.6937, 0.31656, 1, 0, 1, 0, 0.75106, 0.28233, 0.49988 ], - "triangles": [ 2, 3, 0, 2, 0, 1, 7, 0, 3, 4, 5, 6, 4, 7, 3, 4, 6, 7 ], + "triangles": [ 4, 6, 7, 4, 7, 3, 4, 5, 6, 7, 0, 3, 2, 0, 1, 2, 3, 0 ], "vertices": [ -3.17, -11.05, -9, -0.57, -1.01, 10.33, 16.69, 11.17, 37.41, 8.2, 45.45, -1.16, 36.95, -8.46, 21.2, -7.47 ], - "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], "hull": 8, + "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], "width": 39, "height": 45 } @@ -283,9 +284,9 @@ "type": "mesh", "uvs": [ 0.27018, 0, 0.11618, 0.18177, 0, 0.70688, 0, 0.89577, 0.26668, 1, 0.48718, 1, 0.67618, 0.83532, 1, 0.5161, 1, 0.25543, 0.74618, 0.0571 ], "triangles": [ 9, 8, 7, 9, 1, 0, 6, 9, 7, 6, 1, 9, 2, 1, 6, 4, 3, 2, 6, 4, 2, 5, 4, 6 ], - "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.51, 10.18, 19.13, 18.47, 2.85, 16.32, -8.4, 6.14 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.50999, 10.18, 19.12999, 18.46999, 2.85, 16.32, -8.39999, 6.14 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], "width": 34, "height": 63 } @@ -295,10 +296,10 @@ "name": "goblin/torso", "type": "mesh", "uvs": [ 0, 0.33287, 0.15945, 0.46488, 0.15761, 0.60314, 0.15502, 0.79806, 0.32807, 0.93478, 0.6875, 1, 0.80731, 1, 1, 0.77763, 1, 0.66147, 1, 0.56703, 0.93207, 0.4771, 0.86944, 0.39416, 0.83837, 0.226, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78734, 0.86249, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38316, 0.77692, 0.73446, 0.66478, 0.51012 ], - "triangles": [ 0, 15, 14, 20, 14, 13, 20, 13, 12, 1, 0, 14, 20, 12, 11, 20, 1, 14, 22, 20, 11, 22, 11, 10, 19, 1, 20, 19, 20, 22, 2, 1, 19, 18, 22, 10, 18, 10, 9, 19, 22, 18, 18, 9, 8, 21, 18, 8, 21, 8, 7, 17, 2, 19, 21, 17, 19, 21, 19, 18, 3, 2, 17, 16, 21, 7, 17, 21, 16, 4, 3, 17, 5, 17, 16, 4, 17, 5, 6, 16, 7, 5, 16, 6 ], - "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.88, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], + "triangles": [ 5, 16, 6, 6, 16, 7, 4, 17, 5, 5, 17, 16, 4, 3, 17, 17, 21, 16, 16, 21, 7, 3, 2, 17, 21, 19, 18, 21, 17, 19, 17, 2, 19, 21, 8, 7, 21, 18, 8, 18, 9, 8, 19, 22, 18, 18, 10, 9, 18, 22, 10, 2, 1, 19, 19, 20, 22, 19, 1, 20, 22, 11, 10, 22, 20, 11, 20, 1, 14, 20, 12, 11, 1, 0, 14, 20, 13, 12, 20, 14, 13, 0, 15, 14 ], + "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.87999, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], "hull": 16, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], "width": 68, "height": 96 } @@ -309,9 +310,9 @@ "type": "mesh", "uvs": [ 0.36097, 0.44959, 0.66297, 0.60591, 1, 0.19486, 1, 0.57117, 0.75897, 1, 0.38697, 1, 0, 0.26433, 0, 0, 0.12497, 0 ], "triangles": [ 6, 7, 8, 6, 8, 0, 3, 1, 2, 5, 0, 1, 6, 0, 5, 4, 1, 3, 5, 1, 4 ], - "vertices": [ -10.56, 12.87, 6.53, 9.9, 25.62, 17.71, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], + "vertices": [ -10.56, 12.87, 6.53, 9.89999, 25.62, 17.70999, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], "width": 55, "height": 19 } @@ -322,9 +323,9 @@ "type": "mesh", "uvs": [ 0, 0.32029, 0.14893, 0.59457, 0.22437, 1, 0.35909, 1, 0.50998, 1, 0.79559, 0.58453, 0.9842, 0.28015, 1, 0.00588, 0.46957, 0.17646, 0, 0.03933, 0.48843, 0.59122, 0.48114, 0.43099 ], "triangles": [ 6, 8, 7, 0, 9, 8, 11, 8, 6, 0, 8, 11, 5, 11, 6, 10, 11, 5, 1, 0, 11, 1, 11, 10, 3, 2, 1, 10, 3, 1, 4, 10, 5, 3, 10, 4 ], - "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.59, 22.22, 6.11, 22.92, 14.05, 3.75, 9.44, -13.08, 13.71, 4.21, -2.59, 4.03, 2.05 ], - "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], + "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.58999, 22.22, 6.11, 22.92, 14.05, 3.75, 9.43999, -13.08, 13.71, 4.21, -2.58999, 4.03, 2.05 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], "width": 36, "height": 29 } @@ -757,26 +758,31 @@ ] } }, - "ffd": { + "deform": { "default": { + "left hand item": { + "spear": [ + { "time": 0 } + ] + }, "right hand item": { "dagger": [ { "time": 0, "offset": 26, - "vertices": [ 2.34, 0.14 ], + "vertices": [ 2.34754, 0.14469 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.5, "offset": 8, - "vertices": [ -1.19, 4.31, 0.07, 6.41, 1.66, 6.18, 1.75, 3.59 ], + "vertices": [ -1.19415, 4.31531, 0.07279, 6.41351, 1.66048, 6.18882, 1.75232, 3.59555 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1, "offset": 26, - "vertices": [ 2.34, 0.14 ] + "vertices": [ 2.34754, 0.14469 ] } ] } @@ -790,22 +796,22 @@ }, { "time": 0.2, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08, -1.08, 0.08, -1.08, 0.08, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08 ], + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391, -1.08534, 0.08391, -1.08534, 0.08391, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.3666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09, 1.47, 0.09, 1.47, 0.09, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09 ], + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017, 1.47305, 0.09017, 1.47305, 0.09017, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017 ], "curve": [ 0.621, 0, 0.75, 1 ] }, { "time": 0.7, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17, -1.17, -0.17, -1.17, -0.17, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17 ], + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183, -1.1755, -0.17182, -1.1755, -0.17183, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.8666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08, 0.38, 0.08, 0.38, 0.08, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08 ], + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446, 0.38687, 0.08446, 0.38687, 0.08446, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1 } @@ -816,35 +822,35 @@ { "time": 0, "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] }, { "time": 0.1333 }, { "time": 0.2333, "offset": 8, - "vertices": [ -3.96, -2.34, -5.8, -12.47, -2.23, -12.99, 2.02, -9.1, 0, 0, 0, 0, 0, 0, -1.35, -5.28 ] + "vertices": [ -3.96072, -2.34594, -5.80445, -12.47629, -2.23129, -12.99037, 2.02941, -9.1036, 0, 0, 0, 0, 0, 0, -1.35254, -5.2883 ] }, { "time": 0.3666, "offset": 8, - "vertices": [ 0.66, 0.33, 0.33, 2.69, -0.48, 2.54, -1.13, 1.38, 0, 0, 0, 0, 0, 0, -0.11, 0.79 ] + "vertices": [ 0.66504, 0.33548, 0.33902, 2.69014, -0.4817, 2.54524, -1.13592, 1.38562, 0, 0, 0, 0, 0, 0, -0.11907, 0.79273 ] }, { "time": 0.5, "curve": "stepped" }, { "time": 0.6333 }, { "time": 0.7333, "offset": 8, - "vertices": [ -2.97, 9.4, -6.91, 19.92, -10.55, 18.41, -12.37, 12.38, -4.72, 6.3, 0, 0, -1.48, 4.88, -7.06, 10.7 ] + "vertices": [ -2.97737, 9.40254, -6.91661, 19.92794, -10.55287, 18.41085, -12.37161, 12.38473, -4.72606, 6.30798, 0, 0, -1.48902, 4.88944, -7.06773, 10.70101 ] }, { "time": 0.8333, "offset": 6, - "vertices": [ 1.05, 1.56, -2.52, 7.99, -5.52, 17.14, -8.93, 15.79, -10.73, 10.22, -4.23, 5.36, 0, 0, 0, 0, -5.83, 8.55 ] + "vertices": [ 1.05318, 1.56361, -2.52722, 7.9974, -5.5203, 17.14136, -8.93317, 15.79635, -10.73747, 10.22055, -4.23801, 5.36992, 0, 0, 0, 0, -5.83147, 8.55531 ] }, { "time": 1, "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] } ] }, @@ -854,22 +860,22 @@ { "time": 0.1333, "offset": 6, - "vertices": [ -0.68, -4.13 ] + "vertices": [ -0.68989, -4.13283 ] }, { "time": 0.3333, "offset": 6, - "vertices": [ -1.04, -3.1 ] + "vertices": [ -1.04945, -3.10476 ] }, { "time": 0.7, "offset": 6, - "vertices": [ -1.42, -6.3 ] + "vertices": [ -1.4245, -6.30616 ] }, { "time": 0.8666, "offset": 6, - "vertices": [ -1.13, -1.79 ] + "vertices": [ -1.13541, -1.79035 ] }, { "time": 1 } ] @@ -880,38 +886,38 @@ { "time": 0.1333, "offset": 2, - "vertices": [ -2.81, 2.63, -2.35, 3.89, -1.99, 4.86, -0.93, 5.57, -0.48, 5.09, -0.34, 3.42, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31, 1.91, -1.32, 3.65 ] + "vertices": [ -2.81258, 2.63114, -2.35238, 3.89441, -1.99921, 4.8639, -0.93273, 5.57982, -0.48886, 5.09854, -0.34812, 3.42912, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31305, 1.91371, -1.32986, 3.65703 ] }, { "time": 0.2333, "offset": 2, - "vertices": [ -6.39, 6.41, -7.74, 8.27, -7.02, 11.35, -4.03, 13.93, -2.5, 12.62, -1.46, 7.58, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84, 2.61, -4.53, 7.92 ] + "vertices": [ -6.39088, 6.41245, -7.74575, 8.27191, -7.02471, 11.35894, -4.0347, 13.93454, -2.50399, 12.62962, -1.46124, 7.58915, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84765, 2.61215, -4.53955, 7.92357 ] }, { "time": 0.3, "offset": 2, - "vertices": [ -8.27, 6.68, -9.29, 10.13, -8.62, 14.71, -4.58, 18.81, -2.2, 17.1, -0.07, 9.9, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94, 2.38, -4.59, 10.01 ] + "vertices": [ -8.27184, 6.68821, -9.29764, 10.13797, -8.62231, 14.71339, -4.58629, 18.81939, -2.20304, 17.10709, -0.07794, 9.9046, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94624, 2.38007, -4.59398, 10.01888 ] }, { "time": 0.3666, "offset": 2, - "vertices": [ -10.47, 9.44, -13.36, 12.4, -14.32, 16.94, -9.24, 23.55, -5.51, 21.51, -1.19, 11.53, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14, 2.29, -6.63, 11.37 ] + "vertices": [ -10.47683, 9.44175, -13.36882, 12.40982, -14.32568, 16.94392, -9.24462, 23.55674, -5.51711, 21.51377, -1.19581, 11.53192, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14847, 2.29389, -6.63418, 11.37127 ] }, { "time": 0.5, "offset": 2, - "vertices": [ -5.42, 4.36, -10.59, 7.04, -11.64, 11.55, -6.19, 20.12, -1.45, 18.05, 4.86, 6.41, 2.81, 0.27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96, 4.94 ] + "vertices": [ -5.42473, 4.36854, -10.59004, 7.04468, -11.64251, 11.55845, -6.19665, 20.12805, -1.45497, 18.05411, 4.86619, 6.41678, 2.81462, 0.27601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96412, 4.94829 ] }, { "time": 0.6333 }, { "time": 0.7333, "offset": 4, - "vertices": [ 1.31, -6.84, -0.87, -12.54, -5.98, -14.08, -7.15, -11.63, -5.67, -4.83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06, -6.93 ] + "vertices": [ 1.31462, -6.84099, -0.87905, -12.54479, -5.9851, -14.08367, -7.15892, -11.63193, -5.6792, -4.83544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06163, -6.93844 ] }, { "time": 0.8, "offset": 4, - "vertices": [ 0.65, -3.42, -0.43, -6.27, -2.99, -7.04, -3.57, -5.81, -2.83, -2.41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79, -1.28, 0, 0, 0, 0, -1.03, -3.46 ] + "vertices": [ 0.65731, -3.42049, -0.43952, -6.27239, -2.99255, -7.04183, -3.57946, -5.81596, -2.83959, -2.41772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79687, -1.2802, 0, 0, 0, 0, -1.03081, -3.46922 ] }, { "time": 0.8666 } ] @@ -921,13 +927,13 @@ { "time": 0, "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] }, { "time": 0.5 }, { "time": 1, "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] } ] }, @@ -937,7 +943,7 @@ { "time": 0.6, "offset": 6, - "vertices": [ 1.8, -1.56 ] + "vertices": [ 1.80396, -1.56552 ] }, { "time": 1 } ] @@ -946,17 +952,17 @@ "right upper leg": [ { "time": 0, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] }, { "time": 0.3333 }, { "time": 0.8666, "offset": 14, - "vertices": [ 0.13, -2.35, -1.33, -5.99, -1.35, -4.43 ] + "vertices": [ 0.13424, -2.35377, -1.33317, -5.99572, -1.35861, -4.43323 ] }, { "time": 1, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] } ] }, @@ -965,37 +971,37 @@ { "time": 0, "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] }, { "time": 0.1333, "offset": 14, - "vertices": [ 1.31, -0.59, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + "vertices": [ 1.31318, -0.59727, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] }, { "time": 0.3, "offset": 14, - "vertices": [ 6.03, -3.13, 7.55, -1.38, 6.79, 0.31, 4.23, 1.14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07, -5.16, 0, 0, 4, 0.27, 0, 0, 0, 0, 3.43, -3.52 ] + "vertices": [ 6.03761, -3.13561, 7.55475, -1.38111, 6.79747, 0.31171, 4.23503, 1.14012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07575, -5.16824, 0, 0, 4.0041, 0.27245, 0, 0, 0, 0, 3.4376, -3.52286 ] }, { "time": 0.5, "offset": 14, - "vertices": [ 2.25, -0.87, 2.57, -0.56, 3.17, -0.57, 1.48, 0.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22, -4.43, 0, 0, 1.48, 0.01, 0, 0, 0, 0, 0.31, -3.28, -1.53, 0.17 ] + "vertices": [ 2.25942, -0.87202, 2.575, -0.56861, 3.17112, -0.57003, 1.48704, 0.9924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22451, -4.43862, 0, 0, 1.48691, 0.01586, 0, 0, 0, 0, 0.31388, -3.28095, -1.53797, 0.17803 ] }, { "time": 0.6333, "offset": 14, - "vertices": [ 0.75, -1.51, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + "vertices": [ 0.75002, -1.51701, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] }, { "time": 0.8666, "offset": 14, - "vertices": [ 0.62, -1.26, 0.38, -2.2, 3.25, -0.5, 2.41, 2.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.66, -3.1, 0, 0, 2.3, -1.15, 0, 0, 0, 0, -0.07, -3.63, -0.93, 0.1 ] + "vertices": [ 0.62202, -1.26262, 0.38489, -2.20701, 3.25048, -0.50042, 2.41108, 2.39315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6639, -3.10099, 0, 0, 2.30655, -1.15196, 0, 0, 0, 0, -0.07676, -3.63497, -0.9321, 0.1079 ] }, { "time": 1, "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] } ] }, @@ -1004,32 +1010,32 @@ { "time": 0, "offset": 2, - "vertices": [ -1.77, 0.54, -0.96, -1.03, -0.39, -0.24, -1.77, 0.54 ] + "vertices": [ -1.77696, 0.54759, -0.96145, -1.03793, -0.39148, -0.24071, -1.77696, 0.54759 ] }, { "time": 0.1333, "offset": 2, - "vertices": [ -2.25, -1.03, -1.49, -4.23, -0.74, -2.84, -1.9, 0.54 ] + "vertices": [ -2.25683, -1.03177, -1.49719, -4.23861, -0.74469, -2.84906, -1.90072, 0.54477 ] }, { "time": 0.3333, "offset": 2, - "vertices": [ -2.37, -0.05, -0.49, 0.19, -0.9, 1.16, -1.6, 2.7, 0.96, 0.8 ] + "vertices": [ -2.37974, -0.05431, -0.49433, 0.19436, -0.90861, 1.16519, -1.60956, 2.70798, 0.96186, 0.80615 ] }, { "time": 0.7, "offset": 2, - "vertices": [ -0.91, -2.76, -0.62, -3.63, -0.84, -2.26, -2.56, 0.52 ] + "vertices": [ -0.91714, -2.76567, -0.62214, -3.63489, -0.8494, -2.26772, -2.56076, 0.5297 ] }, { "time": 0.8666, "offset": 2, - "vertices": [ -2.56, 0.52, -1.58, 0.32, -1.38, 0.32, -2.56, 0.52 ] + "vertices": [ -2.56076, 0.5297, -1.58064, 0.32031, -1.3847, 0.32476, -2.56076, 0.5297 ] }, { "time": 1, "offset": 2, - "vertices": [ -1.77, 0.54, -0.8, 0.53, -0.8, 0.53, -1.77, 0.54 ] + "vertices": [ -1.77696, 0.54759, -0.80128, 0.53413, -0.80128, 0.53413, -1.77696, 0.54759 ] } ] }, @@ -1037,35 +1043,35 @@ "undies": [ { "time": 0, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] }, { "time": 0.1333, - "vertices": [ 0.72, 0.43, 7.2, -0.16, 1.37, 0, 1.37, 0, 1.37, 0, 1.25, 0.04, -0.99, -2.95, -1.37, -3.07, 1.37, 0, 0.35, -0.29, 2.99, -0.07, 3.9, -0.14 ] + "vertices": [ 0.72659, 0.43319, 7.20416, -0.1638, 1.37759, 0, 1.37759, 0, 1.37759, 0, 1.25279, 0.0464, -0.99861, -2.95085, -1.37542, -3.07404, 1.37759, 0, 0.35279, -0.29279, 2.99218, -0.07019, 3.90478, -0.14039 ] }, { "time": 0.3333, - "vertices": [ 1.16, 0, 2.1, -0.23, 0, 0, 0, 0, 0, 0, 2.24, -0.24, -0.43, 0.6, -1.55, 0.48 ] + "vertices": [ 1.16999, 0, 2.10599, -0.234, 0, 0, 0, 0, 0, 0, 2.24999, -0.24999, -0.4344, 0.60551, -1.55939, 0.48051 ] }, { "time": 0.5333, - "vertices": [ 1.16, 0, -0.23, -0.93, -2.92, 0.35, 0, 0, 0, 0, 0.49, -0.24, -0.64, -2.07, -0.64, -2.07 ] + "vertices": [ 1.16999, 0, -0.234, -0.93599, -2.92499, 0.35099, 0, 0, 0, 0, 0.49999, -0.24999, -0.64078, -2.07914, -0.64078, -2.07914 ] }, { "time": 0.7, - "vertices": [ 1.86, -0.11, 4.66, -0.09, -1.76, 0.21, 0, 0, -0.56, 0.32, -1.13, -1.15, -2.19, -3.47, -1.29, -3.47, 0, 0, 0, 0, 1.58, -0.04, 2.65, 0.16 ] + "vertices": [ 1.8627, -0.11514, 4.66326, -0.09099, -1.76428, 0.21171, 0, 0, -0.56832, 0.32832, -1.13833, -1.1511, -2.19996, -3.47068, -1.29718, -3.47068, 0, 0, 0, 0, 1.58785, -0.04642, 2.65941, 0.16714 ] }, { "time": 0.8333, - "vertices": [ 2.41, -0.2, 8.58, 0.58, -0.83, 0.1, 0, 0, -1.02, 0.59, -2.44, -1.87, -1.62, 0, 0, 0, 0, 0, 0, 0, 2.85, -0.08, 4.78, 0.3 ] + "vertices": [ 2.41687, -0.20725, 8.58108, 0.585, -0.83571, 0.10028, 0, 0, -1.02299, 0.59098, -2.44899, -1.872, -1.62499, 0, 0, 0, 0, 0, 0, 0, 2.85813, -0.08356, 4.78695, 0.30086 ] }, { "time": 0.8666, - "vertices": [ 2.01, -0.02, 8.98, 0.44, -0.2, 0.08, 0.45, 0, -0.35, 0.47, -1.84, -1.44, -0.79, 1.26, 0.53, 1.23, 0.45, 0, 0.11, -0.09, 3.28, -0.09, 5.13, 0.19 ] + "vertices": [ 2.01969, -0.0214, 8.98545, 0.4446, -0.20937, 0.08022, 0.45919, 0, -0.35919, 0.47279, -1.84159, -1.4488, -0.79153, 1.2642, 0.53285, 1.23981, 0.45919, 0, 0.11759, -0.09759, 3.2839, -0.09025, 5.13115, 0.19388 ] }, { "time": 1, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] } ] } diff --git a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.png b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.png deleted file mode 100644 index f172361f2..000000000 Binary files a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.png and /dev/null differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.skel b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.skel index df5b3f39e..98dd16a04 100644 Binary files a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.skel and b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-mesh.skel differ diff --git a/spine-as3/spine-as3-example/src/goblins-mesh.atlas b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-pma.atlas similarity index 99% rename from spine-as3/spine-as3-example/src/goblins-mesh.atlas rename to spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-pma.atlas index d0ddb80c6..92b8922ab 100644 --- a/spine-as3/spine-as3-example/src/goblins-mesh.atlas +++ b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-pma.atlas @@ -1,5 +1,6 @@ -goblins-mesh.png +goblins-pma.png +size: 1024,128 format: RGBA8888 filter: Linear,Linear repeat: none diff --git a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-pma.png b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-pma.png new file mode 100644 index 000000000..fc524c564 Binary files /dev/null and b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins-pma.png differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.json b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.json index e0283cc7f..1fb70cd0f 100644 --- a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.json +++ b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.json @@ -1,23 +1,24 @@ { +"skeleton": { "hash": "XWev9W//Ru9qTfd6z9xOs5YG8F0", "spine": "3.4.00", "width": 234.01, "height": 354.84, "images": "./images/" }, "bones": [ { "name": "root" }, { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, - { "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 }, + { "name": "torso", "parent": "hip", "length": 85.82, "rotation": 93.92, "x": -6.42, "y": 1.97 }, + { "name": "neck", "parent": "torso", "length": 18.38, "rotation": -1.51, "x": 81.67, "y": -6.34 }, + { "name": "head", "parent": "neck", "length": 68.28, "rotation": -13.92, "x": 20.93, "y": 11.59 }, + { "name": "left shoulder", "parent": "torso", "length": 35.43, "rotation": -156.96, "x": 74.04, "y": -20.38 }, + { "name": "left arm", "parent": "left shoulder", "length": 35.62, "rotation": 28.16, "x": 37.85, "y": -2.34 }, + { "name": "left upper leg", "parent": "hip", "length": 50.39, "rotation": -89.09, "x": 14.45, "y": 2.81 }, + { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "rotation": -16.65, "x": 56.34, "y": 0.98 }, + { "name": "left foot", "parent": "left lower leg", "length": 46.5, "rotation": 102.43, "x": 58.94, "y": -7.61 }, + { "name": "left hand", "parent": "left arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.07 }, { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, - { "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 }, - { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 }, - { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 }, - { "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 }, - { "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 }, - { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 }, - { "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 }, - { "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 }, - { "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 }, - { "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 }, - { "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 }, - { "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 }, - { "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 }, - { "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 } + { "name": "right shoulder", "parent": "torso", "length": 37.24, "rotation": 133.88, "x": 76.02, "y": 18.14 }, + { "name": "right arm", "parent": "right shoulder", "length": 36.74, "rotation": 36.32, "x": 37.6, "y": 0.31 }, + { "name": "right upper leg", "parent": "hip", "length": 42.45, "rotation": -97.49, "x": -20.07, "y": -6.83 }, + { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "rotation": -14.34, "x": 42.99, "y": -0.61 }, + { "name": "right foot", "parent": "right lower leg", "length": 45.45, "rotation": 110.3, "x": 64.88, "y": 0.04 }, + { "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.35, "x": 36.9, "y": 0.34 } ], "slots": [ { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" }, diff --git a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.png b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.png deleted file mode 100644 index 0cd4a165a..000000000 Binary files a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.png and /dev/null differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.skel b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.skel index 46ba7db51..1909e861a 100644 Binary files a/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.skel and b/spine-libgdx/spine-libgdx-tests/assets/goblins/goblins.skel differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor-pma.atlas b/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor-pma.atlas new file mode 100644 index 000000000..99c20c88f --- /dev/null +++ b/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor-pma.atlas @@ -0,0 +1,279 @@ + +raptor-pma.png +size: 1024,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +back_arm + rotate: true + xy: 140, 191 + size: 46, 29 + orig: 46, 29 + offset: 0, 0 + index: -1 +back_bracer + rotate: true + xy: 167, 317 + size: 39, 28 + orig: 39, 28 + offset: 0, 0 + index: -1 +back_hand + rotate: false + xy: 167, 358 + 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: 167, 437 + size: 39, 24 + orig: 39, 24 + offset: 0, 0 + index: -1 +eyes_closed + rotate: true + xy: 2, 2 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +eyes_open + rotate: true + xy: 49, 2 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +eyes_surprised + rotate: true + xy: 96, 2 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +front_arm + rotate: false + xy: 419, 544 + size: 48, 30 + orig: 48, 30 + offset: 0, 0 + index: -1 +front_bracer + rotate: false + xy: 880, 695 + size: 41, 29 + orig: 41, 29 + offset: 0, 0 + index: -1 +front_hand + rotate: true + xy: 167, 394 + size: 41, 38 + orig: 41, 38 + offset: 0, 0 + index: -1 +front_open_hand + rotate: false + xy: 880, 726 + size: 43, 44 + orig: 43, 44 + offset: 0, 0 + index: -1 +front_thigh + rotate: false + xy: 360, 545 + 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_grind + rotate: false + xy: 469, 544 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +mouth_oooo + rotate: true + xy: 894, 772 + size: 105, 30 + orig: 105, 30 + offset: 0, 0 + index: -1 +mouth_smile + rotate: true + xy: 140, 239 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +neck + rotate: true + xy: 538, 577 + 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: true + xy: 140, 145 + size: 44, 35 + orig: 44, 35 + offset: 0, 0 + index: -1 +stirrup_front + rotate: false + xy: 538, 597 + size: 45, 50 + orig: 45, 50 + offset: 0, 0 + index: -1 +stirrup_strap + rotate: false + xy: 350, 497 + 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-libgdx/spine-libgdx-tests/assets/raptor/raptor-pma.png b/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor-pma.png new file mode 100644 index 000000000..a5c861843 Binary files /dev/null and b/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor-pma.png differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.json b/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.json index df9892de6..d2b55b74c 100644 --- a/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.json +++ b/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.json @@ -1,167 +1,202 @@ { -"skeleton": { "hash": "r3IJRaLbaxgEoW1YBAOrYT69jB4", "spine": "Dev", "width": 1224.2, "height": 1052.38 }, +"skeleton": { "hash": "/7FMTV1eoFH7zhIaaG8BAH+NQOw", "spine": "3.4.00", "width": 1223.72, "height": 1055.62, "images": "./images/" }, "bones": [ { "name": "root" }, - { "name": "front_foot_goal", "parent": "root", "x": -45.79, "y": -28.67, "rotation": -0.94 }, - { "name": "hip", "parent": "root", "x": -136.78, "y": 415.47, "rotation": 3.15 }, - { "name": "rear_foot_goal", "parent": "root", "x": 33.43, "y": 30.81 }, - { "name": "front_leg1", "parent": "hip", "length": 251.74, "x": 27.36, "y": -28.27, "rotation": -51.5 }, - { "name": "front_leg_goal", "parent": "front_foot_goal", "x": -106.06, "y": 115.58 }, - { "name": "rear_leg1", "parent": "hip", "length": 226.27, "x": 55.19, "y": -71.25, "rotation": -54.76 }, - { "name": "rear_leg_goal", "parent": "rear_foot_goal", "x": -127.51, "y": 75.99 }, - { "name": "tail1", "parent": "hip", "length": 162.53, "x": -20.86, "y": 6.87, "rotation": 162.92 }, - { "name": "torso1", "parent": "hip", "length": 126.25, "x": 30.03, "y": -0.4, "rotation": -4.97 }, - { "name": "front_leg2", "parent": "front_leg1", "length": 208.54, "x": 251.03, "y": 0.16, "rotation": 261.93 }, - { "name": "rear_leg2", "parent": "rear_leg1", "length": 172.58, "x": 226.32, "y": 0.23, "rotation": -92.25 }, - { "name": "saddle", "parent": "torso1", "length": 50.91, "x": 4.56, "y": 71.86, "rotation": 91.8 }, - { "name": "tail2", "parent": "tail1", "length": 130.02, "x": 162.53, "y": -0.82, "rotation": 30.3 }, - { "name": "torso2", "parent": "torso1", "length": 121.2, "x": 126.25, "y": -0.37, "rotation": 39.84 }, - { "name": "front_arm1", "parent": "torso2", "length": 109.99, "x": 46.37, "y": -84.61, "rotation": 224.54 }, - { "name": "front_leg3", "parent": "front_leg2", "length": 118.18, "x": 208.5, "y": -1.63, "rotation": 85.46 }, - { "name": "neck", "parent": "torso2", "length": 70.59, "x": 121.19, "y": 0.34, "rotation": 41.37 }, - { "name": "rear_arm1", "parent": "torso2", "length": 109.56, "x": 57.05, "y": -95.38, "rotation": -124.71 }, - { "name": "rear_leg3", "parent": "rear_leg2", "length": 103.05, "x": 172.31, "y": 2.21, "rotation": 82.81 }, - { "name": "saddle_strap_front1", "parent": "saddle", "length": 97.27, "x": -27.36, "y": -73.38, "rotation": -148.11 }, - { "name": "saddle_strap_rear1", "parent": "saddle", "length": 38.62, "x": -33.34, "y": 87.32, "rotation": 151.13 }, - { "name": "spineboy_front_arm_goal", "parent": "saddle", "x": -50.7, "y": -96.93 }, - { "name": "spineboy_hip", "parent": "saddle", "length": 0.52, "x": 81.88, "y": 2.68, "rotation": 90.01 }, - { "name": "spineboy_rear_arm_goal", "parent": "saddle", "x": -30.43, "y": -100.08 }, - { "name": "stirrup", "parent": "saddle", "length": 78.17, "x": -81.94, "y": -103.38, "rotation": -68.85 }, - { "name": "stirrup_strap1", "parent": "saddle", "length": 43.69, "x": -20.38, "y": -29.37, "rotation": -135 }, - { "name": "tail3", "parent": "tail2", "length": 141.06, "x": 130.02, "y": 0.1, "rotation": 6.88 }, - { "name": "back_thigh", "parent": "spineboy_hip", "length": 71.15, "x": -9.57, "y": 2.31, "rotation": 160.75 }, - { "name": "front_arm2", "parent": "front_arm1", "length": 86.33, "x": 109.99, "y": 0.2, "rotation": 105.23 }, - { "name": "front_foot1", "parent": "front_leg3", "length": 57.79, "x": 118.19, "y": -0.79, "scaleX": 1.126, "rotation": 54.46 }, - { "name": "front_thigh", "parent": "spineboy_hip", "length": 77.79, "x": 15.51, "y": 17.01, "rotation": 163.34 }, + { "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": "gun", + "name": "spineboy_torso", "parent": "spineboy_hip", - "length": 181.35, - "x": 16.86, - "y": -7.89, - "scaleX": 0.816, - "scaleY": 0.816, - "rotation": 107.11 + "length": 122.45, + "rotation": -75.85, + "x": 1.05, + "y": -2.1, + "color": "ffffffff" + }, + { + "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, + "inheritRotation": false, + "color": "ffffffff" + }, + { "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": "front_arm", + "parent": "spineboy_torso", + "length": 74.51, + "rotation": -118.16, + "x": 101.37, + "y": 9.78, + "color": "ffffffff" + }, + { "name": "torso2", "parent": "torso1", "length": 121.2, "rotation": 39.84, "x": 126.25, "y": -0.37, "color": "eaff00ff" }, + { "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": "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_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_bracer", "parent": "front_arm", "length": 39.85, "rotation": 20.3, "x": 74.52, "y": -0.41, "color": "ffffffff" }, + { "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": "head", "parent": "neck", "length": 105.5, "x": 70.59, "y": 0.03, "rotation": 9.82 }, - { "name": "rear_arm2", "parent": "rear_arm1", "length": 85.8, "x": 109.56, "rotation": 123.56 }, - { "name": "rear_foot1", "parent": "rear_leg3", "length": 84.51, "x": 102.37, "y": -0.02, "rotation": 75.43 }, - { "name": "saddle_strap_front2", "parent": "saddle_strap_front1", "length": 102.74, "x": 97.29, "y": 0.3, "rotation": -11.13 }, - { "name": "saddle_strap_rear2", "parent": "saddle_strap_rear1", "length": 54.36, "x": 38.63, "y": -0.02 }, - { "name": "spineboy_torso", "parent": "spineboy_hip", "length": 122.45, "x": 1.05, "y": -2.1, "rotation": -75.85 }, - { "name": "stirrup_strap2", "parent": "stirrup_strap1", "length": 51.62, "x": 43.7, "rotation": 9.38 }, - { "name": "tail4", "parent": "tail3", "length": 126.25, "x": 141.05, "y": 0.64, "rotation": -18.86 }, - { "name": "back_arm", "parent": "spineboy_torso", "length": 67.21, "x": 96.33, "y": -38.46, "rotation": -120.89 }, - { "name": "back_knee", "parent": "back_thigh", "length": 97.17, "x": 71.15, "y": -0.28, "rotation": -54.97 }, - { "name": "front_arm", "parent": "spineboy_torso", "length": 74.51, "x": 101.37, "y": 9.78, "rotation": -118.16 }, { "name": "front_foot2", "parent": "front_foot1", "length": 56.19, + "rotation": -2.15, "x": 57.78, "y": -0.02, "scaleX": 0.73, "scaleY": 0.823, - "rotation": -0.46, - "inheritRotation": false + "inheritRotation": false, + "color": "15ff00ff" }, - { "name": "front_hand", "parent": "front_arm2", "length": 47.55, "x": 86.33, "y": 0.06, "rotation": -56.83 }, - { "name": "horn_front", "parent": "head", "length": 87.48, "x": 82.09, "y": -221.36, "rotation": 49.36 }, - { "name": "horn_rear", "parent": "head", "length": 73.78, "x": 99.27, "y": -226.79, "rotation": 44.31 }, - { "name": "jaw", "parent": "head", "length": 203.76, "x": 29.36, "y": -40.15, "rotation": -140.14, "inheritScale": false }, - { "name": "lower_leg", "parent": "front_thigh", "length": 111.5, "x": 77.92, "y": -0.1, "rotation": -49.62 }, - { "name": "neck2", "parent": "spineboy_torso", "length": 32.04, "x": 113.44, "y": -15.21, "rotation": -45.22 }, - { - "name": "rear_foot2", - "parent": "rear_foot1", - "length": 102.31, - "x": 84.49, - "y": -0.34, - "rotation": -6.13, - "inheritRotation": false - }, - { "name": "rear_hand", "parent": "rear_arm2", "length": 45.8, "x": 85.8, "y": 0.1, "rotation": -76.28 }, - { "name": "saddle_strap_rear3", "parent": "saddle_strap_rear2", "length": 44.04, "x": 54.86, "y": 0.19, "rotation": 3.63 }, - { "name": "tail5", "parent": "tail4", "length": 91.06, "x": 126.25, "y": -0.47, "rotation": -22.34 }, - { "name": "tongue1", "parent": "head", "length": 55.11, "x": 20.81, "y": -104.75, "rotation": -129.04 }, - { "name": "back_bracer", "parent": "back_arm", "length": 43.68, "x": 67.21, "y": -0.31, "rotation": 17.48 }, - { "name": "bone", "parent": "horn_front", "x": 294.58, "y": 234.17, "rotation": -138.59 }, - { "name": "bone2", "parent": "horn_rear", "x": 232.68, "y": 245.84, "rotation": -133.55 }, - { "name": "front_bracer", "parent": "front_arm", "length": 39.85, "x": 74.52, "y": -0.41, "rotation": 20.3 }, { "name": "front_foot3", "parent": "front_foot2", "length": 129.88, + "rotation": -2.7, "x": 49.71, "y": 20.65, "scaleX": 1.154, - "rotation": -3.16, - "inheritRotation": false + "color": "15ff00ff" }, - { "name": "head2", "parent": "neck2", "length": 249.64, "x": 23.01, "y": 3.47, "rotation": 11.65 }, - { "name": "tongue2", "parent": "tongue1", "length": 44.66, "x": 55.59, "y": 0.93, "rotation": 8.93 }, - { "name": "back_hand", "parent": "back_bracer", "length": 41.97, "x": 43.68, "y": 0.06, "rotation": 9.2, "inheritRotation": false }, + { "name": "front_foot_goal", "parent": "root", "rotation": -0.94, "x": -45.79, "y": -28.67, "color": "ff0000ff" }, + { "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.9, "x": 39.98, "y": -0.89, - "rotation": 13.9, - "inheritRotation": false + "inheritRotation": false, + "color": "ffffffff" }, - { "name": "tongue3", "parent": "tongue2", "length": 43.64, "x": 44.26, "y": -0.2, "rotation": 12.86 } -], -"ik": [ + { "name": "front_leg_goal", "parent": "front_foot_goal", "x": -106.06, "y": 115.58, "color": "ff0000ff" }, { - "name": "front_leg_goal", - "bones": [ "front_leg1", "front_leg2" ], - "target": "front_leg_goal", - "bendPositive": false + "name": "front_thigh", + "parent": "spineboy_hip", + "length": 77.79, + "rotation": 163.34, + "x": 15.51, + "y": 17.01, + "color": "ffffffff" }, { - "name": "rear_leg_goal", - "bones": [ "rear_leg1", "rear_leg2" ], - "target": "rear_leg_goal", - "bendPositive": false + "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": "horn_rear", "parent": "head", "length": 73.78, "rotation": 44.31, "x": 99.27, "y": -226.79, "color": "e07800ff" }, + { "name": "jaw", "parent": "head", "length": 203.76, "rotation": -140.14, "x": 29.36, "y": -40.15, "color": "ffff00ff" }, + { "name": "lower_leg", "parent": "front_thigh", "length": 111.5, "rotation": -49.62, "x": 77.92, "y": -0.1, "color": "ffffffff" }, + { "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_arm_target", "parent": "horn_rear", "rotation": -133.55, "x": 232.68, "y": 245.84, "color": "e07800ff" }, + { "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, + "inheritRotation": false, + "color": "e07800ff" + }, + { "name": "rear_foot_goal", "parent": "root", "x": 33.43, "y": 30.81, "color": "ff0000ff" }, + { "name": "rear_hand", "parent": "rear_arm2", "length": 45.8, "rotation": -76.28, "x": 85.8, "y": 0.1, "color": "e07800ff" }, + { "name": "rear_leg_goal", "parent": "rear_foot_goal", "x": -127.51, "y": 75.99, "color": "ff0000ff" }, + { + "name": "saddle_strap_front1", + "parent": "saddle", + "length": 97.27, + "rotation": -148.11, + "x": -27.36, + "y": -73.38, + "color": "ff7300ff" }, { - "name": "front_foot_goal", - "bones": [ "front_leg3", "front_foot1" ], - "target": "front_foot_goal" + "name": "saddle_strap_front2", + "parent": "saddle_strap_front1", + "length": 102.74, + "rotation": -11.13, + "x": 97.29, + "y": 0.3, + "color": "ff7300ff" }, { - "name": "rear_foot_goal", - "bones": [ "rear_leg3", "rear_foot1" ], - "target": "rear_foot_goal" + "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": "stirrup", - "bones": [ "stirrup_strap1", "stirrup_strap2" ], - "target": "stirrup" + "name": "saddle_strap_rear3", + "parent": "saddle_strap_rear2", + "length": 44.04, + "rotation": 3.63, + "x": 54.86, + "y": 0.19, + "color": "ff7300ff" }, - { - "name": "spineboy_rear_leg_goal", - "bones": [ "back_thigh", "back_knee" ], - "target": "spineboy_rear_arm_goal", - "bendPositive": false - }, - { - "name": "spineboy_front_leg_goal", - "bones": [ "front_thigh", "lower_leg" ], - "target": "spineboy_front_arm_goal", - "bendPositive": false - }, - { - "name": "rear_arm_goal", - "bones": [ "back_arm", "back_bracer" ], - "target": "bone2" - }, - { - "name": "front_arm_goal", - "bones": [ "front_arm", "front_bracer" ], - "target": "bone" - } + { "name": "spineboy_front_arm_goal", "parent": "saddle", "x": -50.7, "y": -96.93, "color": "ff0004ff" }, + { "name": "spineboy_rear_arm_goal", "parent": "saddle", "x": -30.43, "y": -100.08, "color": "ff0001ff" }, + { "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" }, @@ -198,6 +233,57 @@ { "name": "front_bracer", "bone": "front_bracer", "attachment": "front_bracer" }, { "name": "front_hand", "bone": "front_hand2", "attachment": "front_hand" } ], +"ik": [ + { + "name": "front_arm_goal", + "bones": [ "front_arm", "front_bracer" ], + "target": "front_arm_target" + }, + { + "name": "front_foot_goal", + "bones": [ "front_leg3", "front_foot1" ], + "target": "front_foot_goal" + }, + { + "name": "front_leg_goal", + "bones": [ "front_leg1", "front_leg2" ], + "target": "front_leg_goal", + "bendPositive": false + }, + { + "name": "rear_arm_goal", + "bones": [ "back_arm", "back_bracer" ], + "target": "rear_arm_target" + }, + { + "name": "rear_foot_goal", + "bones": [ "rear_leg3", "rear_foot1" ], + "target": "rear_foot_goal" + }, + { + "name": "rear_leg_goal", + "bones": [ "rear_leg1", "rear_leg2" ], + "target": "rear_leg_goal", + "bendPositive": false + }, + { + "name": "spineboy_front_leg_goal", + "bones": [ "front_thigh", "lower_leg" ], + "target": "spineboy_front_arm_goal", + "bendPositive": false + }, + { + "name": "spineboy_rear_leg_goal", + "bones": [ "back_thigh", "back_knee" ], + "target": "spineboy_rear_arm_goal", + "bendPositive": false + }, + { + "name": "stirrup", + "bones": [ "stirrup_strap1", "stirrup_strap2" ], + "target": "stirrup" + } +], "skins": { "default": { "back_arm": { @@ -236,9 +322,12 @@ "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": [ 9, 10, 11, 14, 11, 12, 14, 12, 0, 9, 11, 14, 6, 9, 14, 14, 0, 1, 13, 14, 1, 6, 7, 8, 6, 8, 9, 13, 1, 2, 13, 5, 6, 13, 6, 14, 3, 4, 13, 5, 13, 4, 3, 13, 2 ], + "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.48, 50.63, 83.86, 46.32, 142.05, 42.17, 197.91, 3.34, 163.7, -45.86, 86.15, -47.34, 15.9, -48.68, 8.42, -120.68, -69.06, -66.81, -35.32, -20.73, -58.83, -10.35, -44.69, 9.99, -14.55, 53.35, 85.21, 6.43, 20.45, 8.2 ], - "hull": 13 + "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": { @@ -255,47 +344,62 @@ }, "raptor_arm_back": { "raptor_arm_back": { - "type": "skinnedmesh", - "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, 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, 0.94947, 0.60129 ], - "triangles": [ 6, 14, 15, 5, 6, 15, 5, 15, 4, 6, 7, 14, 24, 7, 8, 24, 14, 7, 13, 14, 24, 11, 13, 24, 11, 24, 8, 11, 8, 9, 10, 11, 9, 12, 13, 11, 15, 16, 4, 18, 19, 2, 16, 3, 4, 17, 18, 2, 17, 2, 3, 17, 3, 16, 20, 21, 22, 23, 20, 22, 0, 20, 23, 1, 20, 0, 1, 19, 20, 2, 19, 1 ], - "vertices": [ 2, 18, 36.95, 33.31, 0.91666, 34, 68.53, 41.05, 0.08333, 2, 18, 66.02, 20.35, 0.76813, 34, 41.41, 24.39, 0.23186, 2, 18, 74.51, 16.57, 0.64468, 34, 33.49, 19.53, 0.35531, 3, 18, 70.89, 21.97, 0.27669, 34, 39.99, 19.46, 0.67508, 52, -29.67, -39.91, 0.04822, 3, 18, 42.77, 63.89, 0.11483, 34, 90.47, 18.95, 0.60854, 52, -17.2, 9, 0.27661, 2, 34, 101.86, 18.83, 0.45955, 52, -14.38, 20.04, 0.54044, 2, 34, 106.47, 2.08, 0.0625, 52, 2.98, 20.56, 0.9375, 1, 52, 51.32, 21.98, 1, 1, 52, 72.39, 9.61, 1, 1, 52, 100.37, -23.87, 1, 1, 52, 104.96, -40.9, 1, 1, 52, 78.37, -25.61, 1, 1, 52, 86.05, -56.84, 1, 1, 52, 52.92, -30.04, 1, 2, 34, 62.24, -43.92, 0.0625, 52, 37.19, -33.33, 0.9375, 2, 34, 64.89, -28.65, 0.3125, 52, 22.98, -27.14, 0.6875, 2, 34, 57.69, -27.17, 0.30612, 52, 19.83, -33.78, 0.69387, 2, 18, 124.19, 3.83, 0.19395, 34, -5.09, -14.23, 0.80604, 2, 18, 110.77, -19.65, 0.3125, 34, -16.88, 10.1, 0.6875, 2, 18, 99.14, -19.2, 0.51613, 34, -9.93, 19.44, 0.48386, 2, 18, 43.73, -17.03, 0.9375, 34, 23.17, 63.92, 0.0625, 1, 18, 35.41, -29.77, 1, 1, 18, -15.68, -28.02, 1, 1, 18, -13.87, 24.65, 1, 1, 52, 60.41, 11.1, 1 ], - "hull": 24 + "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, 37, 36.95, 33.31, 0.91666, 38, 68.53, 41.05, 0.08333, 2, 37, 66.01999, 20.35, 0.76813, 38, 41.41, 24.39, 0.23186, 2, 37, 74.51, 16.57, 0.64468, 38, 33.49, 19.53, 0.35531, 2, 37, 70.89, 21.97, 0.29071, 38, 39.99, 19.45999, 0.70928, 3, 37, 42.77, 63.89, 0.11483, 38, 90.47, 18.95, 0.60854, 46, -17.2, 9, 0.2766, 2, 38, 101.86, 18.83, 0.45955, 46, -14.38, 20.04, 0.54044, 2, 38, 106.47, 2.08, 0.0625, 46, 2.98, 20.56, 0.9375, 1, 46, 51.32, 21.98, 1, 1, 46, 60.41, 11.1, 1, 1, 46, 72.39, 9.60999, 1, 1, 46, 100.37, -23.87, 1, 1, 46, 104.96, -40.9, 1, 1, 46, 78.37, -25.61, 1, 1, 46, 86.05, -56.84, 1, 1, 46, 52.92, -30.04, 1, 2, 38, 62.24, -43.92, 0.0625, 46, 37.18999, -33.33, 0.9375, 2, 38, 64.89, -28.65, 0.3125, 46, 22.98, -27.14, 0.6875, 2, 38, 57.69, -27.17, 0.30612, 46, 19.83, -33.78, 0.69387, 2, 37, 124.19, 3.83, 0.19395, 38, -5.09, -14.23, 0.80604, 2, 37, 110.77, -19.65, 0.3125, 38, -16.87999, 10.1, 0.6875, 2, 37, 99.14, -19.2, 0.51612, 38, -9.93, 19.44, 0.48386, 2, 37, 43.73, -17.03, 0.9375, 38, 23.17, 63.92, 0.0625, 1, 37, 35.41, -29.77, 1, 1, 37, -15.68, -28.02, 1, 1, 37, -13.87, 24.65, 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": "skinnedmesh", - "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.27515, 0.71028, 0.25301, 0.71948, 0.22568, 0.73082, 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 ], - "triangles": [ 10, 11, 45, 45, 11, 44, 11, 12, 44, 44, 68, 45, 12, 69, 44, 12, 58, 52, 21, 22, 55, 22, 61, 55, 22, 23, 61, 55, 61, 27, 23, 56, 61, 23, 24, 56, 61, 56, 26, 61, 26, 27, 26, 56, 25, 56, 24, 25, 19, 60, 89, 19, 20, 60, 60, 20, 90, 20, 21, 90, 90, 21, 55, 89, 60, 29, 90, 28, 60, 60, 28, 29, 55, 27, 90, 90, 27, 28, 16, 17, 54, 91, 15, 16, 18, 54, 17, 54, 18, 89, 16, 54, 91, 18, 19, 89, 15, 91, 59, 31, 91, 54, 89, 30, 54, 89, 29, 30, 32, 59, 91, 30, 31, 54, 32, 91, 31, 33, 59, 32, 14, 15, 59, 33, 53, 59, 13, 58, 12, 58, 13, 53, 59, 53, 14, 13, 14, 53, 34, 58, 53, 35, 52, 58, 34, 53, 33, 58, 34, 35, 44, 69, 51, 12, 52, 69, 51, 38, 39, 51, 69, 38, 38, 69, 37, 69, 52, 37, 36, 52, 35, 36, 37, 52, 4, 5, 70, 4, 57, 73, 73, 57, 67, 4, 73, 3, 3, 73, 72, 3, 74, 2, 74, 87, 2, 87, 88, 2, 88, 1, 2, 73, 67, 72, 72, 67, 66, 67, 57, 66, 57, 49, 66, 57, 41, 49, 3, 72, 74, 72, 62, 74, 72, 66, 62, 74, 85, 87, 85, 74, 84, 49, 65, 66, 66, 65, 62, 84, 74, 62, 63, 62, 65, 84, 62, 63, 41, 42, 49, 85, 86, 87, 88, 86, 81, 88, 87, 86, 85, 84, 80, 85, 80, 79, 80, 84, 75, 79, 80, 78, 49, 64, 65, 64, 49, 43, 1, 88, 82, 80, 75, 78, 82, 88, 81, 75, 77, 78, 82, 81, 77, 81, 78, 77, 65, 64, 63, 75, 76, 77, 75, 84, 76, 76, 84, 83, 76, 83, 82, 83, 0, 1, 0, 83, 84, 63, 0, 84, 63, 64, 0, 1, 82, 83, 49, 42, 43, 64, 43, 0, 57, 4, 70, 45, 50, 46, 46, 47, 8, 46, 50, 47, 8, 47, 7, 50, 71, 47, 47, 71, 7, 7, 71, 6, 71, 50, 48, 48, 50, 40, 50, 68, 40, 71, 48, 6, 6, 48, 5, 5, 48, 70, 48, 40, 70, 70, 40, 57, 57, 40, 41, 10, 45, 9, 45, 46, 9, 9, 46, 8, 45, 68, 50, 44, 51, 68, 68, 39, 40, 68, 51, 39 ], - "vertices": [ 1, 33, 147.48, -145.48, 1, 1, 33, 89.4, -281.62, 1, 1, 33, -28.24, -285.93, 1, 1, 33, -14.58, -194.68, 1, 5, 9, 363.21, 87.73, 0.02179, 14, 238.39, -84.13, 0.20397, 17, 32.1, -140.85, 0.18915, 33, -61.96, -132.26, 0.41197, 48, 129.57, 6.39, 0.1731, 5, 9, 332.7, 63.71, 0.06905, 14, 199.57, -83.03, 0.29424, 17, 3.69, -114.37, 0.2194, 33, -85.43, -101.32, 0.30859, 48, 127.34, -26.64, 0.1087, 5, 9, 307.08, 43.5, 0.11018, 14, 166.95, -82.13, 0.37282, 17, -20.18, -92.14, 0.24572, 33, -105.18, -75.34, 0.21862, 48, 123.08, -64.79, 0.05264, 5, 9, 307.75, 5.7, 0.18146, 14, 143.25, -111.59, 0.56512, 17, -57.43, -98.57, 0.12044, 33, -142.98, -75.33, 0.10715, 48, 154.85, -83.49, 0.0258, 2, 9, 308.7, -30.55, 0.25, 14, 120.75, -140.04, 0.75, 2, 9, 213.94, -142.7, 0.75, 14, -23.83, -165.45, 0.25, 3, 9, 64.45, -187.34, 0.31139, 8, -158.45, 158.33, 0.10379, 2, 84.16, -190.98, 0.5848, 1, 2, -61.47, -178.84, 1, 1, 2, -166.91, -67.95, 1, 6, 9, -246.26, -74, 0.04136, 8, 170.4, 123.13, 0.2858, 13, 66.71, 104.77, 0.57052, 27, -53.08, 110.21, 0.10163, 40, -220.11, 35.3, 5.1E-4, 54, -331.4, -106.89, 1.5E-4, 6, 9, -297.45, -69.74, 0.01855, 8, 221.11, 131.31, 0.14592, 13, 115.07, 87.47, 0.47026, 27, -6.58, 88.39, 0.30085, 40, -168.92, 31, 0.06162, 54, -282.82, -90.19, 0.00276, 6, 9, -359.24, -85.1, 0.00915, 8, 277.38, 161.09, 0.07914, 13, 178.73, 86.41, 0.35008, 27, 56.68, 81.29, 0.38638, 40, -107.13, 46.31, 0.15555, 54, -232.44, -51.26, 0.01966, 6, 9, -376.16, -107.83, 0.0043, 8, 294.31, 176.47, 0.03904, 13, 203.26, 86.51, 0.25323, 27, 83.06, 77.02, 0.42283, 40, -79.56, 53.53, 0.23684, 54, -210.89, -28.3, 0.04374, 6, 9, -416.83, -99.41, 0.00211, 8, 329.83, 188.85, 0.0196, 13, 238.06, 85.41, 0.18217, 27, 115.65, 74.66, 0.41374, 40, -49.53, 60.58, 0.30031, 54, -185.49, -14.98, 0.08205, 6, 9, -449.42, -116.23, 0.00122, 8, 364.17, 200.07, 0.01106, 13, 275.48, 71.62, 0.13243, 27, 152.97, 53.58, 0.37336, 40, -5.82, 53.94, 0.34144, 54, -142.85, 0.11, 0.14047, 6, 9, -498.22, -88.19, 7.8E-4, 8, 411.52, 197.55, 0.00669, 13, 313.81, 53.61, 0.09623, 27, 188.04, 35.82, 0.32105, 40, 31.84, 49.3, 0.36432, 54, -106.46, 7.49, 0.21089, 6, 9, -524.31, -113.4, 5.8E-4, 8, 437.98, 213.03, 0.00423, 13, 345.74, 45.54, 0.06864, 27, 219.6, 19.28, 0.26387, 40, 68.31, 43.02, 0.36996, 54, -70.13, 18.19, 0.2927, 6, 9, -580.94, -76.79, 4.7E-4, 8, 494.56, 206.4, 0.00237, 13, 390.81, 21.3, 0.0452, 27, 261.62, -3.66, 0.20066, 40, 114.55, 37.83, 0.35931, 54, -26.15, 30.34, 0.39196, 6, 9, -621.23, -53.98, 4.4E-4, 8, 539.16, 193.96, 0.00115, 13, 423.87, -11.11, 0.02629, 27, 291.46, -39.06, 0.13478, 40, 154.83, 14.99, 0.33453, 54, 19.91, 25.67, 0.50278, 6, 9, -661.22, -31.34, 4.6E-4, 8, 583.41, 181.62, 5.6E-4, 13, 456.68, -43.27, 0.01512, 27, 321.06, -74.2, 0.08778, 40, 194.79, -7.66, 0.31014, 54, 65.62, 21.04, 0.58591, 6, 9, -698.76, 17.64, 4.7E-4, 8, 631.64, 143.1, 4.0E-4, 13, 480.34, -100.28, 0.01183, 27, 339.2, -133.2, 0.07247, 40, 232.3, -56.69, 0.30126, 54, 119.7, -8.69, 0.61353, 6, 9, -636.21, 0.4, 4.5E-4, 8, 566.79, 144.78, 5.5E-4, 13, 424.34, -67.52, 0.01513, 27, 286.57, -95.27, 0.08778, 40, 169.77, -39.4, 0.31045, 54, 55.51, -18.08, 0.5856, 6, 9, -596.68, -3.21, 4.2E-4, 8, 527.55, 138.78, 0.00111, 13, 387.08, -53.84, 0.02607, 27, 250.77, -78.11, 0.13421, 40, 130.24, -35.75, 0.33502, 54, 17.87, -30.67, 0.50314, 6, 9, -553.14, -7.2, 4.2E-4, 8, 484.33, 132.17, 0.00229, 13, 346.04, -38.78, 0.04477, 27, 211.34, -59.22, 0.19954, 40, 86.7, -31.72, 0.3598, 54, -23.59, -44.54, 0.39316, 6, 9, -516.96, -25.93, 4.7E-4, 8, 449.17, 125.97, 0.00408, 13, 311.45, -35.25, 0.06808, 27, 175.89, -56.83, 0.26228, 40, 51.53, -43.14, 0.37032, 54, -52.88, -67.87, 0.29473, 6, 9, -479.88, 14.24, 6.0E-4, 8, 418.38, 93.72, 0.00651, 13, 269.72, -40.64, 0.09608, 27, 135.19, -53.82, 0.32015, 40, 13.42, -53.11, 0.36453, 54, -82.03, -93.66, 0.21211, 6, 9, -451.64, 0.32, 8.3E-4, 8, 390.82, 86.58, 0.01046, 13, 241.19, -39.8, 0.13162, 27, 105.59, -52.93, 0.37317, 40, -16.25, -62.16, 0.34265, 54, -108.34, -111.24, 0.14123, 6, 9, -420.35, 31.66, 0.00137, 8, 364.8, 62.48, 0.01849, 13, 207.71, -42.14, 0.18078, 27, 73.33, -49.43, 0.41415, 40, -46.11, -70.49, 0.30264, 54, -129.51, -133.56, 0.08254, 6, 9, -399.11, 28.98, 0.00258, 8, 345.49, 47.53, 0.03705, 13, 182.34, -50.62, 0.25183, 27, 45.87, -56.62, 0.4234, 40, -71.57, -84.96, 0.24035, 54, -150.85, -153.35, 0.04477, 6, 9, -365.43, 66.79, 0.00485, 8, 319.95, 15.15, 0.07594, 13, 145.6, -61.95, 0.35325, 27, 9.61, -63.26, 0.38742, 40, -101.06, -105.58, 0.15807, 54, -165.65, -187.83, 0.02044, 6, 9, -312.31, 100.78, 0.00731, 8, 276.58, -30.61, 0.13928, 13, 85.52, -81.11, 0.48508, 27, -52.01, -76.62, 0.30338, 40, -154.2, -139.52, 0.06214, 54, -200.6, -240.31, 0.00279, 6, 9, -242.48, 124.41, 0.00974, 8, 214.5, -70.36, 0.27055, 13, 11.97, -85.98, 0.61489, 27, -125.69, -74.48, 0.10409, 40, -224.04, -163.1, 5.4E-4, 54, -255.01, -290.05, 1.5E-4, 6, 9, -166.71, 150.07, 0.02469, 8, 147.14, -113.5, 0.57033, 13, -67.84, -91.26, 0.38714, 27, -205.65, -72.16, 0.01755, 40, -299.83, -188.7, 2.0E-4, 54, -314.05, -344.03, 5.0E-5, 2, 9, -113.14, 135.84, 0.24192, 8, 91.72, -112.59, 0.75807, 2, 9, -42.12, 116.77, 0.14515, 8, 18.2, -111.17, 0.85484, 1, 9, 44.2, 107.1, 1, 2, 9, 140.09, 96.35, 0.22579, 14, 72.59, 65.41, 0.7742, 4, 9, 137.69, 169.35, 0.05644, 14, 117.5, 123, 0.24355, 17, 78.3, 94.48, 0.2125, 33, 23.7, 91.74, 0.4875, 2, 17, 171.15, 111.98, 0.25, 33, 118.17, 93.15, 0.75, 1, 33, 158.96, -25.58, 1, 1, 2, -40.63, -86.01, 1, 3, 9, 67.34, -86.66, 0.33215, 8, -137.02, 59.92, 0.08303, 2, 92.54, -90.61, 0.5848, 2, 9, 170.13, -66.29, 0.75, 14, -8.53, -78.72, 0.25, 2, 9, 231.74, -8.12, 0.4, 14, 76.03, -73.52, 0.6, 5, 9, 222.04, 70.41, 0.16894, 14, 118.9, -7, 0.5373, 17, -6.58, -3.99, 0.17075, 33, -76.73, 9.18, 0.08551, 48, 45.05, -108.02, 0.03748, 1, 33, 50.43, -46.56, 1, 1, 14, -9.88, 20.65, 1, 2, 9, -53.22, 20.53, 0.2, 8, 5.8, -15.09, 0.8, 6, 9, -180.71, 32.22, 0.0849, 8, 132.35, 4.24, 0.55723, 13, -23.98, 19.01, 0.34911, 27, -151.51, 33.44, 0.0085, 40, -285.75, -70.86, 1.8E-4, 54, -348.66, -230.51, 5.0E-5, 6, 9, -304.22, 7.95, 0.01243, 8, 246.39, 57.53, 0.13635, 13, 101.61, 10.65, 0.48532, 27, -27.28, 13.2, 0.30559, 40, -162.22, -46.69, 0.05823, 54, -245.36, -158.59, 0.00205, 6, 9, -418.56, -35.1, 0.00168, 8, 346.99, 126.85, 0.01839, 13, 223.17, 22.83, 0.18014, 27, 94.88, 13.77, 0.41602, 40, -47.85, -3.72, 0.30281, 54, -158.02, -73.16, 0.08093, 6, 9, -566.47, -40.57, 4.4E-4, 8, 489.24, 167.77, 0.00225, 13, 367.51, -9.96, 0.04446, 27, 235.45, -32.57, 0.20024, 40, 100.06, 1.62, 0.36103, 54, -24.81, -8.63, 0.39156, 6, 9, -648.5, -15.19, 4.5E-4, 8, 574.96, 162.88, 5.5E-4, 13, 440.24, -55.6, 0.01566, 27, 303.52, -84.91, 0.09149, 40, 182.07, -23.8, 0.3135, 54, 60.48, 1.14, 0.57832, 3, 14, 174.99, 22.22, 0.2, 17, 54.82, -19.14, 0.6, 33, -18.8, -16.2, 0.2, 6, 9, -242.34, 20.11, 0.02478, 8, 189.25, 30.83, 0.26443, 13, 38.68, 14.84, 0.61556, 27, -89.52, 23.34, 0.09454, 40, -224.1, -58.8, 5.1E-4, 54, -297.11, -194.62, 1.4E-4, 6, 9, -359.57, -12.88, 0.00674, 8, 295.08, 91.08, 0.07453, 13, 160.45, 16.54, 0.35139, 27, 31.85, 13.48, 0.39116, 40, -106.86, -25.89, 0.15674, 54, -203.08, -117.24, 0.01941, 6, 9, -488.69, -37.69, 6.7E-4, 8, 414.43, 146.25, 0.00642, 13, 291.61, 7.27, 0.09534, 27, 161.53, -8.2, 0.32068, 40, 22.27, -1.18, 0.36568, 54, -94.86, -42.56, 0.21117, 6, 9, -607.64, -27.83, 4.3E-4, 8, 532.26, 165.32, 0.00108, 13, 404.01, -32.87, 0.02584, 27, 269.61, -58.84, 0.13469, 40, 141.21, -11.13, 0.33582, 54, 17.98, -3.72, 0.50211, 1, 33, 26.4, -166.06, 1, 1, 33, 87.21, -106.12, 1, 1, 33, 108.19, -49.62, 1, 2, 33, 61.73, -82.13, 0.50021, 48, 4.42, 52.83, 0.49978, 2, 33, 22.84, -109.4, 0.50021, 48, 51.52, 46.73, 0.49978, 5, 9, 348.39, 119.13, 0.00694, 14, 247.12, -50.52, 0.065, 17, 60.86, -121.4, 0.06027, 33, -30.3, -118, 0.48738, 48, 96.58, 17.22, 0.38039, 1, 9, 26.73, 14.8, 1, 2, 9, -107.97, 25.67, 0.24192, 8, 60.17, -6.91, 0.75807, 5, 9, 235.53, 102.96, 0.07484, 14, 150.1, 9.35, 0.34943, 17, 27.64, -12.34, 0.40983, 33, -44.43, -4.87, 0.14928, 48, 34.03, -74.39, 0.0166, 5, 9, 227.15, 28.49, 0.29239, 14, 95.96, -42.46, 0.5708, 17, -47.23, -15.44, 0.07952, 33, -118.74, 4.84, 0.03982, 48, 84.85, -129.5, 0.01745, 2, 33, 5.19, -153.1, 0.87618, 48, 90.96, 71.21, 0.12381, 5, 9, 351.78, 108.85, 0.01127, 14, 243.13, -60.59, 0.10548, 17, 51.21, -126.33, 0.09782, 33, -40.65, -121.21, 0.46541, 48, 105.71, 17.33, 0.32, 1, 33, 23.69, -185.21, 1, 1, 33, 79.64, -175.94, 1, 1, 33, 93.96, -187.56, 1, 1, 33, 87.07, -206.55, 1, 1, 33, 64.2, -216.74, 1, 1, 33, 52.23, -203.68, 1, 1, 33, 59.24, -187.03, 1, 1, 33, 64.26, -223.8, 1, 1, 33, 89.44, -211.41, 1, 1, 33, 102.04, -186.95, 1, 1, 33, 83.1, -166.14, 1, 1, 33, 46.84, -186.41, 1, 1, 33, 50.32, -204.36, 1, 1, 33, 41.7, -206.59, 1, 1, 33, 61.87, -230.97, 1, 6, 9, -448.12, -58.75, 9.7E-4, 8, 374.97, 143.6, 0.01016, 13, 256.29, 17.42, 0.13074, 27, 127.43, 2.07, 0.37548, 40, -13.35, -3.05, 0.34387, 54, -128.14, -55.46, 0.13875, 6, 9, -519.55, -68.54, 5.1E-4, 8, 442.75, 168.18, 0.00402, 13, 327.21, 4.42, 0.06791, 27, 196.28, -19.32, 0.26429, 40, 58.71, -1.05, 0.3719, 54, -62.24, -26.21, 0.29134, 6, 9, -386.43, -41.35, 0.00321, 8, 318.32, 113.62, 0.03567, 13, 192.26, 20.14, 0.25008, 27, 64.19, 12.44, 0.42824, 40, -76.55, -13.67, 0.24036, 54, -182.56, -89.31, 0.0424 ], - "hull": 44 + "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, 16, 56, 15, 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, 20, 91, 56, 56, 19, 20, 17, 19, 56, 18, 19, 17, 93, 91, 31, 55, 34, 35, 33, 34, 55, 61, 33, 55, 61, 32, 33, 93, 32, 61, 56, 91, 93, 56, 93, 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, 16, 147.48, -145.48, 1, 1, 16, 89.4, -281.62, 1, 1, 16, -28.24, -285.93, 1, 1, 16, -14.58, -194.68, 1, 4, 12, 238.39, -84.13, 0.20851, 15, 32.09999, -140.85, 0.19336, 16, -61.96, -132.26, 0.42115, 35, 129.57, 6.39, 0.17696, 5, 2, 332.7, 63.71, 0.06905, 12, 199.57, -83.03, 0.29424, 15, 3.69, -114.37, 0.2194, 16, -85.43, -101.32, 0.30859, 35, 127.34, -26.64, 0.1087, 5, 2, 307.08, 43.5, 0.11018, 12, 166.95, -82.12999, 0.37282, 15, -20.18, -92.14, 0.24572, 16, -105.18, -75.33999, 0.21862, 35, 123.08, -64.79, 0.05264, 4, 2, 307.75, 5.7, 0.18627, 12, 143.25, -111.59, 0.58009, 15, -57.43, -98.57, 0.12363, 16, -142.98, -75.33, 0.10999, 2, 2, 308.7, -30.55, 0.25, 12, 120.75, -140.04, 0.75, 2, 2, 213.94, -142.7, 0.75, 12, -23.83, -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, 4, 58, 118.47, 114.74, 0.07383, 59, 17.17, 122.49, 0.17504, 60, -100.71, 132.55, 0.06818, 1, -166.91, -67.94999, 0.68294, 4, 58, 170.4, 123.13, 0.06537, 59, 66.71, 104.77, 0.20999, 60, -53.08, 110.21, 0.12016, 1, -217.69, -61.33, 0.60447, 6, 58, 221.11, 131.31, 0.02179, 59, 115.07, 87.47, 0.23058, 60, -6.58, 88.39, 0.16258, 61, -168.92, 31, 0.02826, 62, -282.82, -90.19, 0.029, 1, -267.66, -55.14, 0.52776, 5, 59, 146.51, 86.08, 0.23635, 60, 26.66, 83.39, 0.19338, 61, -134.99, 41.34, 0.06624, 62, -257.52, -60.65, 0.06962, 1, -298.87, -61.99, 0.43436, 5, 59, 178.73, 86.41, 0.22521, 60, 56.68, 81.29, 0.20997, 61, -107.13, 46.31, 0.11271, 62, -232.44, -51.26, 0.12148, 1, -328.68, -69.24, 0.3306, 5, 59, 203.26, 86.51, 0.21603, 60, 83.06, 77.01999, 0.22457, 61, -79.56, 53.53, 0.13939, 62, -210.89, -28.3, 0.15618, 1, -354.01, -75.41, 0.26379, 5, 59, 238.06, 85.41, 0.20114, 60, 115.65, 74.66, 0.2315, 61, -49.53, 60.58, 0.16455, 62, -185.49, -14.98, 0.19123, 1, -385.33, -83.15, 0.21156, 5, 59, 255.33, 78.85, 0.18224, 60, 133.83, 63.18, 0.23194, 61, -27.04, 56.84, 0.18907, 62, -163.58, -5.26, 0.22658, 1, -406.45, -79.89, 0.17015, 5, 59, 275.48, 71.62, 0.16169, 60, 152.97, 53.58, 0.22885, 61, -5.82, 53.94, 0.21292, 62, -142.85, 0.11, 0.26159, 1, -427.72, -77.47, 0.13493, 5, 59, 313.81, 53.61, 0.14198, 60, 188.04, 35.82, 0.22293, 61, 31.84, 49.3, 0.23478, 62, -106.46, 7.49, 0.29326, 1, -465.96, -72.58999, 0.10702, 5, 59, 345.74, 45.54, 0.12502, 60, 219.6, 19.28, 0.2179, 61, 68.31, 43.02, 0.25622, 62, -70.12999, 18.19, 0.32248, 1, -502.09, -68.19, 0.07835, 4, 59, 390.81, 21.3, 0.11758, 60, 261.62, -3.66, 0.22607, 61, 114.55, 37.83, 0.29087, 62, -26.15, 30.34, 0.36547, 4, 59, 423.87, -11.11, 0.10536, 60, 291.46, -39.06, 0.21954, 61, 154.83, 14.99, 0.30098, 62, 19.91, 25.67, 0.37409, 4, 59, 456.68, -43.27, 0.09949, 60, 321.06, -74.19999, 0.21749, 61, 194.79, -7.66, 0.30788, 62, 65.62, 21.04, 0.37513, 4, 59, 480.34, -100.28, 0.10045, 60, 339.2, -133.2, 0.22026, 61, 232.3, -56.69, 0.31103, 62, 119.7, -8.68999, 0.36824, 4, 59, 424.34, -67.51999, 0.10379, 60, 286.57, -95.27, 0.23087, 61, 169.77, -39.4, 0.30828, 62, 55.51, -18.08, 0.35705, 4, 59, 387.08, -53.84, 0.11505, 60, 250.77, -78.11, 0.2454, 61, 130.24, -35.75, 0.30092, 62, 17.87, -30.67, 0.3386, 4, 59, 346.04, -38.78, 0.13471, 60, 211.34, -59.22, 0.26271, 61, 86.7, -31.72, 0.2888, 62, -23.59, -44.54, 0.31376, 5, 58, 449.17, 125.97, 0.02419, 59, 311.45, -35.25, 0.16384, 60, 175.89, -56.83, 0.2727, 61, 51.53, -43.14, 0.26317, 62, -52.88, -67.87, 0.27607, 5, 58, 418.38, 93.72, 0.05913, 59, 269.72, -40.64, 0.19681, 60, 135.19, -53.82, 0.27688, 61, 13.42, -53.11, 0.23219, 62, -82.03, -93.66, 0.23497, 5, 58, 390.82, 86.58, 0.10638, 59, 241.19, -39.8, 0.2354, 60, 105.59, -52.93, 0.27331, 61, -16.25, -62.16, 0.19459, 62, -108.34, -111.24, 0.19028, 5, 58, 364.8, 62.48, 0.14347, 59, 207.71, -42.14, 0.28099, 60, 73.33, -49.43, 0.26867, 61, -46.11, -70.49, 0.15764, 62, -129.51, -133.56, 0.1492, 5, 58, 345.49, 47.53, 0.18499, 59, 182.34, -50.62, 0.33114, 60, 45.87, -56.62, 0.25881, 61, -71.57, -84.96, 0.1174, 62, -150.85, -153.35, 0.10763, 5, 58, 319.95, 15.15, 0.23755, 59, 145.6, -61.95, 0.39396, 60, 9.60999, -63.26, 0.24619, 61, -101.06, -105.58, 0.06443, 62, -165.65, -187.83, 0.05784, 3, 58, 276.58, -30.61, 0.29942, 59, 85.52, -81.11, 0.46774, 60, -52.01, -76.62, 0.23283, 3, 58, 214.5, -70.36, 0.32855, 59, 11.97, -85.98, 0.48601, 60, -125.69, -74.48, 0.18543, 2, 58, 147.14, -113.5, 0.59565, 59, -67.83999, -91.26, 0.40433, 2, 2, -113.14, 135.84, 0.24192, 58, 91.72, -112.59, 0.75807, 2, 2, -42.12, 116.77, 0.14515, 58, 18.2, -111.17, 0.85484, 1, 2, 44.2, 107.1, 1, 2, 2, 140.09, 96.35, 0.22579, 12, 72.58999, 65.41, 0.7742, 4, 2, 137.69, 169.35, 0.05644, 12, 117.5, 123, 0.24355, 15, 78.3, 94.48, 0.2125, 16, 23.7, 91.74, 0.4875, 2, 15, 171.15, 111.98, 0.25, 16, 118.17, 93.15, 0.75, 1, 16, 158.96, -25.58, 1, 1, 1, -40.63, -86.01, 1, 3, 2, 67.33999, -86.66, 0.33215, 58, -137.02, 59.92, 0.08303, 1, 92.54, -90.61, 0.5848, 2, 2, 170.13, -66.29, 0.75, 12, -8.53, -78.72, 0.25, 2, 2, 231.74, -8.12, 0.4, 12, 76.03, -73.51999, 0.6, 4, 2, 222.04, 70.41, 0.17551, 12, 118.9, -7, 0.55823, 15, -6.58, -3.99, 0.17739, 16, -76.73, 9.18, 0.08884, 1, 16, 50.43, -46.56, 1, 1, 12, -9.88, 20.65, 1, 2, 2, -53.22, 20.53, 0.2, 58, 5.8, -15.09, 0.8, 3, 2, -180.71, 32.22, 0.08564, 58, 132.35, 4.23999, 0.56215, 59, -23.98, 19.01, 0.35219, 3, 58, 246.39, 57.53, 0.30273, 59, 101.61, 10.65, 0.46989, 60, -27.28, 13.2, 0.22737, 5, 58, 346.99, 126.85, 0.13479, 59, 223.17, 22.83, 0.28279, 60, 94.88, 13.77, 0.24481, 61, -47.85, -3.72, 0.17322, 62, -158.02, -73.16, 0.16438, 4, 59, 367.51, -9.96, 0.14656, 60, 235.45, -32.57, 0.23073, 61, 100.06, 1.62, 0.29607, 62, -24.81, -8.63, 0.32661, 4, 59, 440.24, -55.6, 0.10821, 60, 303.52, -84.91, 0.21897, 61, 182.07, -23.8, 0.31097, 62, 60.48, 1.14, 0.36182, 3, 12, 174.99, 22.22, 0.2, 15, 54.82, -19.14, 0.6, 16, -18.79999, -16.2, 0.2, 3, 58, 189.25, 30.83, 0.33253, 59, 38.68, 14.84, 0.48076, 60, -89.52, 23.34, 0.18669, 5, 58, 295.08, 91.08, 0.22891, 59, 160.45, 16.54, 0.38754, 60, 31.85, 13.48, 0.2306, 61, -106.86, -25.89, 0.08042, 62, -203.08, -117.24, 0.0725, 5, 58, 414.43, 146.25, 0.07359, 59, 291.61, 7.27, 0.20198, 60, 161.53, -8.2, 0.23762, 61, 22.27, -1.17999, 0.24024, 62, -94.86, -42.56, 0.24654, 4, 59, 404.01, -32.87, 0.12351, 60, 269.61, -58.84, 0.22261, 61, 141.21, -11.13, 0.30609, 62, 17.98, -3.72, 0.34777, 1, 16, 26.4, -166.06, 1, 1, 16, 87.21, -106.12, 1, 1, 16, 108.19, -49.62, 1, 2, 16, 61.73, -82.12999, 0.50021, 35, 4.42, 52.83, 0.49978, 2, 16, 22.84, -109.4, 0.50021, 35, 51.52, 46.73, 0.49978, 4, 12, 247.12, -50.52, 0.06545, 15, 60.86, -121.4, 0.06069, 16, -30.3, -118, 0.49079, 35, 96.58, 17.21999, 0.38305, 1, 2, 26.73, 14.8, 1, 2, 2, -107.97, 25.67, 0.24192, 58, 60.17, -6.91, 0.75807, 4, 2, 235.53, 102.96, 0.0761, 12, 150.1, 9.35, 0.35533, 15, 27.64, -12.34, 0.41675, 16, -44.43, -4.87, 0.1518, 3, 2, 227.15, 28.49, 0.31015, 12, 95.96, -42.46, 0.60548, 15, -47.23, -15.44, 0.08435, 2, 16, 5.19, -153.1, 0.87618, 35, 90.96, 71.21, 0.12381, 4, 12, 243.13, -60.59, 0.10669, 15, 51.21, -126.33, 0.09893, 16, -40.65, -121.21, 0.47072, 35, 105.71, 17.33, 0.32363, 1, 16, 23.69, -185.21, 1, 1, 16, 79.64, -175.94, 1, 1, 16, 93.96, -187.56, 1, 1, 16, 87.07, -206.55, 1, 1, 16, 64.19999, -216.74, 1, 1, 16, 52.23, -203.68, 1, 1, 16, 59.24, -187.03, 1, 1, 16, 64.26, -223.8, 1, 1, 16, 89.44, -211.41, 1, 1, 16, 102.04, -186.95, 1, 1, 16, 83.1, -166.14, 1, 1, 16, 46.84, -186.41, 1, 1, 16, 50.32, -204.36, 1, 1, 16, 41.7, -206.59, 1, 1, 16, 61.87, -230.97, 1, 5, 58, 374.97, 143.6, 0.10291, 59, 256.29, 17.42, 0.23985, 60, 127.43, 2.07, 0.2431, 61, -13.35, -3.05, 0.20854, 62, -128.14, -55.46, 0.20557, 4, 59, 327.21, 4.42, 0.17789, 60, 196.28, -19.32, 0.24248, 61, 58.71, -1.04999, 0.28055, 62, -62.24, -26.21, 0.29905, 5, 58, 318.32, 113.62, 0.17774, 59, 192.26, 20.14, 0.33383, 60, 64.19, 12.44, 0.24171, 61, -76.55, -13.67, 0.12849, 62, -182.56, -89.31, 0.11821, 2, 16, 56.98, -162.99, 0.89259, 35, 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": "skinnedmesh", + "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, 15, 3.06, 31.88, 0.51075, 14, 66.56, -109.48, 0.48924, 1, 15, 35.87, 35.62, 1, 2, 15, 60.94, 27.12, 0.8464, 29, 46.49, 31.12, 0.15359, 3, 15, 74.05, 22.67, 0.34375, 29, 36.5, 21.53, 0.64062, 45, -45.25, -29.96, 0.01562, 3, 15, 67, 31.58, 0.10937, 29, 47.66, 23.68, 0.78125, 45, -40.93, -19.44, 0.10937, 3, 15, 42.17, 62.99, 0.01562, 29, 86.98, 31.24, 0.64062, 45, -25.75, 17.61, 0.34375, 2, 29, 103.83, 34.49, 0.34375, 45, -19.24, 33.49, 0.65625, 2, 29, 114.04, 19.51, 0.10937, 45, -1.11, 33.84, 0.89062, 2, 29, 144.85, -25.73, 0.02083, 45, 53.62, 34.88, 0.97916, 1, 45, 96.03, -19.16, 1, 1, 45, 104.2, -47.31, 1, 1, 45, 71.34, -23.98, 1, 1, 45, 81.39, -64.61, 1, 1, 45, 76.8, -68.81, 1, 2, 29, 83.18, -57.72, 0.02083, 45, 46.65, -34.25, 0.97916, 2, 29, 73.13, -45.76, 0.10937, 45, 31.14, -36.12, 0.89062, 2, 29, 73.98, -26.9, 0.34375, 45, 15.82, -25.09, 0.65625, 3, 15, 103.67, 70.28, 0.01562, 29, 65.1, -26.69, 0.64062, 45, 10.78, -32.41, 0.34375, 3, 15, 133.56, 9.13, 0.10937, 29, -2.94, -25.03, 0.78125, 45, -27.84, -88.47, 0.10937, 3, 15, 123.67, -14.42, 0.34375, 29, -19.29, -5.39, 0.64062, 45, -53.23, -91.41, 0.01562, 2, 15, 97.41, -15.43, 0.8464, 29, -8.08, 18.37, 0.15359, 1, 15, 45.46, -17.43, 1, 2, 15, 40.69, -27.17, 0.45035, 14, -1.69, -93.8, 0.54964, 2, 15, -2.74, -29.63, 0.44352, 14, 18.99, -72.93, 0.55647, 1, 14, 32.11, -48.45, 1, 1, 14, 57.56, -67.43, 1, 1, 14, 84.38, -87.42, 1, 2, 15, 16.44, 5.21, 0.7182, 14, 46.31, -101.86, 0.28179, 2, 15, -4.51, 5.32, 0.48851, 14, 52.82, -81.94, 0.51148 ], - "hull": 27 + "vertices": [ 2, 13, 3.06, 31.88, 0.51075, 12, 66.56, -109.48, 0.48924, 1, 13, 35.87, 35.62, 1, 2, 13, 60.94, 27.12, 0.8464, 14, 46.49, 31.12, 0.15358, 2, 13, 74.05, 22.67, 0.3492, 14, 36.5, 21.53, 0.65078, 3, 13, 67, 31.58, 0.10937, 14, 47.66, 23.68, 0.78125, 27, -40.93, -19.44, 0.10937, 2, 14, 86.98, 31.24, 0.65078, 27, -25.75, 17.61, 0.3492, 2, 14, 103.83, 34.49, 0.34375, 27, -19.24, 33.49, 0.65625, 2, 14, 114.04, 19.51, 0.10937, 27, -1.11, 33.84, 0.89062, 1, 27, 53.62, 34.88, 1, 1, 27, 96.03, -19.16, 1, 1, 27, 104.2, -47.31, 1, 1, 27, 71.33999, -23.98, 1, 1, 27, 81.39, -64.61, 1, 1, 27, 76.8, -68.81, 1, 1, 27, 46.65, -34.25, 1, 2, 14, 73.12999, -45.76, 0.10937, 27, 31.14, -36.12, 0.89062, 2, 14, 73.98, -26.9, 0.34375, 27, 15.82, -25.09, 0.65625, 2, 14, 65.1, -26.69, 0.65078, 27, 10.78, -32.41, 0.3492, 3, 13, 133.56, 9.13, 0.10937, 14, -2.94, -25.03, 0.78125, 27, -27.84, -88.47, 0.10937, 2, 13, 123.67, -14.42, 0.3492, 14, -19.29, -5.39, 0.65078, 2, 13, 97.41, -15.43, 0.8464, 14, -8.08, 18.37, 0.15358, 1, 13, 45.46, -17.43, 1, 2, 13, 40.68999, -27.17, 0.45035, 12, -1.69, -93.8, 0.54964, 2, 13, -2.74, -29.63, 0.44352, 12, 18.99, -72.93, 0.55646, 1, 12, 32.11, -48.45, 1, 1, 12, 57.56, -67.43, 1, 1, 12, 84.38, -87.42, 1, 2, 13, 16.44, 5.21, 0.7182, 12, 46.31, -101.86, 0.28178, 2, 13, -4.51, 5.32, 0.48851, 12, 52.82, -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": "skinnedmesh", + "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, 43, 9, 10, 42, 43, 10, 41, 43, 42, 13, 44, 42, 10, 13, 42, 11, 13, 10, 13, 11, 12, 45, 8, 9, 45, 9, 43, 40, 8, 45, 41, 42, 44, 45, 43, 41, 45, 41, 44, 16, 40, 45, 17, 40, 16, 15, 45, 44, 16, 45, 15, 14, 15, 44, 13, 14, 44, 19, 21, 38, 20, 21, 19, 39, 38, 6, 39, 6, 7, 40, 39, 7, 40, 7, 8, 18, 19, 38, 18, 38, 39, 17, 39, 40, 18, 39, 17, 47, 25, 48, 24, 25, 47, 35, 48, 34, 47, 48, 35, 51, 24, 47, 23, 24, 51, 3, 34, 2, 35, 34, 3, 36, 51, 47, 23, 51, 36, 22, 23, 36, 36, 47, 35, 4, 35, 3, 36, 35, 4, 37, 22, 36, 21, 22, 37, 5, 37, 36, 5, 36, 4, 6, 37, 5, 38, 21, 37, 38, 37, 6, 29, 30, 46, 32, 31, 0, 46, 31, 32, 28, 29, 46, 28, 46, 32, 32, 27, 28, 50, 27, 32, 33, 32, 0, 33, 0, 1, 49, 50, 32, 33, 49, 32, 26, 27, 50, 26, 50, 49, 25, 26, 49, 48, 49, 33, 25, 49, 48, 34, 33, 1, 48, 33, 34, 34, 1, 2 ], - "vertices": [ 3, 4, 128.03, 88.47, 0.83908, 10, -70.2, -134.13, 0.01331, 2, 158.83, -71.91, 0.1476, 2, 4, 219.55, 53.15, 0.77988, 10, -48.04, -38.58, 0.22011, 3, 4, 266.3, 35.1, 0.53531, 10, -36.73, 10.22, 0.46443, 30, 127.25, 245.46, 2.4E-4, 4, 4, 286.89, 9.79, 0.35076, 10, -14.56, 34.14, 0.64667, 30, 125.69, 212.88, 0.0023, 44, 101.39, 199.13, 2.5E-4, 4, 4, 281.54, -41.24, 0.09169, 10, 36.71, 36, 0.90196, 30, 87.64, 178.44, 0.00513, 44, 58.29, 171.29, 0.00119, 5, 4, 271.53, -136.86, 0.05608, 10, 132.77, 39.48, 0.69232, 16, 34.99, 78.76, 0.22087, 30, 16.38, 113.93, 0.0224, 44, -22.45, 119.13, 0.0083, 5, 4, 283.51, -164.25, 0.01987, 10, 158.21, 55.17, 0.50334, 16, 52.65, 54.63, 0.3617, 30, 7.01, 85.54, 0.08322, 44, -36.28, 92.63, 0.03184, 6, 4, 326.15, -179.3, 0.00798, 10, 167.14, 99.49, 0.21327, 16, 97.55, 49.25, 0.35075, 30, 28.72, 45.87, 0.14107, 44, -21.26, 49.99, 0.22311, 60, -72.29, 25.96, 0.0638, 6, 4, 333.96, -167.35, 0.00242, 10, 154.22, 105.55, 0.07519, 16, 102.57, 62.6, 0.22995, 30, 42.51, 49.55, 0.2831, 44, -7.06, 51.39, 0.2694, 60, -58.17, 28.03, 0.13992, 6, 4, 344.19, -149.68, 4.9E-4, 10, 134.24, 114.44, 0.0176, 16, 109.72, 83.39, 0.11397, 30, 64.09, 55.23, 0.07976, 44, 15.12, 53.51, 0.36292, 60, -36.09, 31.19, 0.42523, 1, 60, 35.8, 41.81, 1, 1, 60, 128.11, 17.93, 1, 1, 60, 188.72, -29.42, 1, 1, 60, 44.86, -26.17, 1, 1, 44, 133.17, -49.83, 1, 1, 44, 78.78, -50.15, 1, 5, 4, 399.32, -220.02, 2.2E-4, 10, 195.56, 179.43, 0.01703, 16, 179.46, 27.52, 0.2372, 30, 58.34, -33.93, 0.2023, 44, -4.91, -33.55, 0.54324, 5, 4, 370.41, -244.91, 3.2E-4, 10, 225.9, 152.49, 0.02513, 16, 155.04, -5.13, 0.35003, 30, 17.88, -32.5, 0.29852, 44, -44.62, -25.61, 0.32598, 5, 4, 340.37, -270.04, 0.00251, 10, 254.98, 126.27, 0.10129, 16, 131.21, -36.2, 0.54075, 30, -21.24, -31.17, 0.2082, 44, -83.02, -17.97, 0.14723, 5, 4, 225.1, -238.94, 0.01529, 10, 240.33, 7.81, 0.24036, 16, 11.94, -30.98, 0.57881, 30, -86.31, 68.9, 0.12023, 44, -131.06, 91.29, 0.04528, 5, 4, 194.64, -233.55, 0.04819, 10, 239.26, -23.1, 0.40427, 16, -18.96, -32.37, 0.48451, 30, -105.4, 93.25, 0.04604, 44, -145.97, 118.4, 0.01697, 5, 4, 187.65, -209.73, 0.09565, 10, 216.66, -33.35, 0.57617, 16, -30.97, -10.65, 0.30651, 30, -94.71, 115.65, 0.01788, 44, -131.8, 138.78, 0.00376, 4, 4, 163.85, -128.67, 0.19533, 10, 139.75, -68.26, 0.8011, 30, -58.32, 191.88, 0.00327, 44, -83.58, 208.13, 2.9E-4, 4, 4, 165.74, -94.49, 0.31921, 10, 105.59, -71.26, 0.6795, 30, -5.04, 220.72, 0.00117, 44, -56.32, 275.96, 1.0E-4, 4, 4, 166.39, -79.07, 0.46205, 10, 90.23, -72.76, 0.53752, 30, 5.55, 230.48, 3.9E-4, 44, -40.61, 286.16, 2.0E-5, 3, 4, 166.49, -74.17, 0.53779, 10, 85.42, -73.28, 0.46208, 30, -19.99, 230.7, 1.2E-4, 2, 4, 141.54, -82.46, 0.73138, 10, 97.13, -96.82, 0.26861, 3, 4, 99.76, -97.08, 0.81379, 10, 117.34, -136.23, 0.13997, 2, -2.56, -164.19, 0.04623, 3, 4, 45.01, -114.56, 0.8186, 10, 142.41, -187.89, 0.02098, 2, -51.09, -135.29, 0.1604, 3, 4, -16.2, -74.76, 0.62389, 10, 113.82, -253.08, 0.00952, 2, -42.95, -58.38, 0.36658, 2, 4, -74.73, -19.33, 0.31468, 2, -52.66, 17.55, 0.68531, 2, 4, 1.67, 76.75, 0.25576, 2, 70.07, 18.78, 0.74423, 1, 4, 93.54, 4.13, 1, 2, 4, 185.14, -6.66, 0.75461, 10, 15.98, -64.27, 0.24538, 2, 4, 217.11, -18.75, 0.50845, 10, 23.47, -30.93, 0.49154, 3, 4, 225.63, -32.92, 0.32512, 10, 36.3, -20.5, 0.6744, 30, 51.57, 221.95, 4.7E-4, 4, 4, 223, -84.73, 0.20061, 10, 87.96, -15.86, 0.79287, 30, 15.03, 185.13, 0.00581, 44, -12.28, 189.61, 6.9E-4, 5, 4, 235.61, -168.06, 0.07777, 10, 168.69, 8.29, 0.54931, 16, 6.74, 40.47, 0.33413, 30, -31.18, 114.66, 0.0321, 44, -69.27, 127.55, 0.00667, 5, 4, 259.63, -194.79, 0.01921, 10, 191.79, 35.8, 0.30498, 16, 36, 19.62, 0.53642, 30, -31.14, 78.74, 0.09568, 44, -75.03, 92.09, 0.04369, 5, 4, 332.55, -220.1, 0.00292, 10, 206.64, 111.53, 0.10776, 16, 112.69, 10.82, 0.51915, 30, 6.25, 11.23, 0.23449, 44, -49.03, 19.43, 0.13566, 4, 10, 192.51, 130.62, 0.03213, 16, 130.6, 26.41, 0.33941, 30, 29.35, 5.71, 0.27333, 44, -27.12, 10.25, 0.35511, 1, 44, 67.46, 3.16, 1, 1, 60, 19.07, -14.51, 1, 6, 4, 381.55, -150.4, 3.0E-4, 10, 130.71, 150.34, 0.00811, 16, 145.36, 89.53, 0.04102, 30, 89.29, 30.41, 0.02558, 44, 36, 24.95, 0.37636, 60, -13.89, 3.64, 0.54861, 1, 44, 86.23, -6.55, 1, 4, 10, 164.9, 153.55, 0.02263, 16, 151.18, 56, 0.23908, 30, 65.44, 5.55, 0.19254, 44, 8.45, 4.27, 0.54574, 2, 4, -9.28, -17.5, 0.59606, 2, 7.72, -30.85, 0.40393, 3, 4, 195.9, -53.81, 0.42356, 10, 61.11, -47.06, 0.57613, 30, 39.7, 225.21, 2.9E-4, 3, 4, 190.1, -48.45, 0.53227, 10, 56.61, -53.56, 0.46765, 30, 39.83, 233.12, 6.0E-5, 2, 4, 161.26, -48.26, 0.79873, 10, 60.44, -82.13, 0.20126, 3, 4, 120.37, -58.54, 0.8485, 10, 76.31, -121.18, 0.14441, 2, 41.04, -161.4, 0.00707, 4, 4, 197.37, -69.23, 0.33487, 10, 76.17, -43.46, 0.66324, 30, 30.34, 213.88, 0.0017, 44, -9.09, 262.42, 1.8E-4 ], - "hull": 32 + "triangles": [ 46, 30, 31, 41, 42, 44, 43, 9, 10, 42, 43, 10, 41, 43, 42, 10, 13, 42, 11, 13, 10, 13, 11, 12, 13, 44, 42, 14, 15, 13, 45, 8, 9, 45, 40, 8, 16, 40, 45, 17, 40, 16, 16, 45, 15, 15, 45, 44, 45, 41, 44, 15, 44, 13, 45, 9, 43, 45, 43, 41, 19, 21, 38, 20, 21, 19, 39, 38, 6, 39, 6, 7, 40, 39, 7, 40, 7, 8, 18, 19, 38, 18, 38, 39, 17, 39, 40, 18, 39, 17, 47, 25, 48, 24, 25, 47, 35, 48, 34, 47, 48, 35, 51, 24, 47, 23, 24, 51, 3, 34, 2, 35, 34, 3, 36, 51, 47, 36, 47, 35, 4, 35, 3, 36, 35, 4, 37, 22, 23, 21, 22, 37, 36, 37, 23, 36, 23, 51, 5, 37, 36, 5, 36, 4, 6, 37, 5, 38, 21, 37, 38, 37, 6, 29, 30, 46, 32, 31, 0, 46, 31, 32, 28, 29, 46, 46, 27, 28, 32, 50, 46, 50, 27, 46, 33, 32, 0, 33, 0, 1, 49, 50, 32, 33, 49, 32, 26, 27, 50, 26, 50, 49, 25, 26, 49, 48, 49, 33, 25, 49, 48, 34, 33, 1, 48, 33, 34, 34, 1, 2 ], + "vertices": [ 2, 20, 128.03, 88.47, 0.8504, 1, 158.83, -71.91, 0.14959, 2, 20, 219.55, 53.15, 0.77988, 21, -48.04, -38.58, 0.22011, 2, 20, 266.3, 35.09999, 0.53544, 21, -36.73, 10.22, 0.46455, 2, 20, 286.89, 9.79, 0.35166, 21, -14.56, 34.14, 0.64832, 2, 20, 281.54, -41.24, 0.09228, 21, 36.71, 36, 0.90771, 3, 20, 271.53, -136.86, 0.05786, 21, 132.77, 39.48, 0.71425, 22, 34.99, 78.76, 0.22787, 3, 21, 158.21, 55.17, 0.5308, 22, 52.65, 54.63, 0.38143, 23, 7.01, 85.54, 0.08776, 5, 21, 167.14, 99.49, 0.21498, 22, 97.55, 49.25, 0.35357, 23, 28.72, 45.87, 0.14219, 24, -21.26, 49.99, 0.22491, 25, -72.29, 25.96, 0.06431, 5, 21, 154.22, 105.55, 0.07537, 22, 102.57, 62.6, 0.23051, 23, 42.51, 49.55, 0.28379, 24, -7.06, 51.39, 0.27004, 25, -58.17, 28.03, 0.14026, 4, 22, 109.72, 83.39, 0.11607, 23, 64.08999, 55.23, 0.08123, 24, 15.12, 53.51, 0.36961, 25, -36.09, 31.19, 0.43307, 1, 25, 35.8, 41.81, 1, 1, 25, 128.11, 17.93, 1, 1, 25, 188.72, -29.42, 1, 2, 24, 93.29, -7.6, 0.47999, 25, 44.86, -26.17, 0.52, 2, 24, 133.17, -49.83, 0.776, 25, 86.69, -66.47, 0.22399, 2, 24, 78.78, -50.15, 0.76799, 25, 32.38, -69.36, 0.232, 1, 24, -4.91, -33.55, 1, 3, 22, 155.04, -5.13, 0.35917, 23, 17.87999, -32.5, 0.30632, 24, -44.62, -25.61, 0.33449, 4, 21, 254.98, 126.27, 0.10154, 22, 131.21, -36.2, 0.54211, 23, -21.24, -31.17, 0.20873, 24, -83.01999, -17.96999, 0.1476, 3, 21, 240.33, 7.81, 0.25586, 22, 11.94, -30.98, 0.61614, 23, -86.31, 68.9, 0.12797, 2, 21, 239.26, -23.1, 0.45486, 22, -18.95999, -32.37, 0.54513, 3, 20, 187.65, -209.73, 0.09777, 21, 216.66, -33.34999, 0.58892, 22, -30.97, -10.65, 0.3133, 2, 20, 163.85, -128.67, 0.19603, 21, 139.75, -68.26, 0.80396, 2, 20, 165.74, -94.49, 0.31962, 21, 105.59, -71.26, 0.68037, 2, 20, 166.39, -79.07, 0.46225, 21, 90.23, -72.76, 0.53774, 2, 20, 166.49, -74.17, 0.53785, 21, 85.42, -73.28, 0.46213, 2, 20, 141.54, -82.46, 0.73138, 21, 97.13, -96.82, 0.26861, 2, 20, 99.76, -97.08, 0.85324, 21, 117.34, -136.23, 0.14675, 2, 20, 45.01, -114.56, 0.83615, 1, -51.09, -135.29, 0.16384, 2, 20, -16.2, -74.76, 0.62989, 1, -42.95, -58.38, 0.3701, 2, 20, -74.73, -19.33, 0.31468, 1, -52.66, 17.54999, 0.68531, 2, 20, 1.67, 76.75, 0.25576, 1, 70.07, 18.78, 0.74423, 1, 20, 93.54, 4.13, 1, 2, 20, 185.14, -6.66, 0.75461, 21, 15.98, -64.26999, 0.24538, 2, 20, 217.11, -18.75, 0.50844, 21, 23.47, -30.93, 0.49154, 2, 20, 225.63, -32.91999, 0.32527, 21, 36.3, -20.5, 0.67472, 2, 20, 223, -84.73, 0.20192, 21, 87.96, -15.86, 0.79807, 3, 20, 235.61, -168.06, 0.0809, 21, 168.69, 8.29, 0.57147, 22, 6.74, 40.47, 0.34761, 3, 21, 191.79, 35.8, 0.32545, 22, 36, 19.62, 0.57243, 23, -31.14, 78.74, 0.10211, 4, 21, 206.64, 111.53, 0.10808, 22, 112.69, 10.82, 0.52067, 23, 6.25, 11.23, 0.23517, 24, -49.03, 19.43, 0.13606, 3, 22, 130.6, 26.41, 0.35067, 23, 29.35, 5.71, 0.28241, 24, -27.12, 10.25, 0.3669, 2, 24, 67.46, 3.16, 0.384, 25, 18.54999, -16.62999, 0.61599, 1, 25, 19.07, -14.51, 1, 2, 24, 36, 24.95, 0.384, 25, -13.89, 3.64, 0.61599, 2, 24, 86.23, -6.55, 0.48799, 25, 37.75, -25.46, 0.512, 4, 21, 164.9, 153.55, 0.02263, 22, 151.18, 56, 0.23908, 23, 65.44, 5.55, 0.19254, 24, 8.45, 4.27, 0.54574, 2, 20, -9.28, -17.5, 0.59605, 1, 7.72, -30.85, 0.40393, 2, 20, 195.9, -53.81, 0.42368, 21, 61.11, -47.06, 0.5763, 2, 20, 190.1, -48.45, 0.53231, 21, 56.61, -53.56, 0.46768, 2, 20, 161.26, -48.26, 0.79873, 21, 60.44, -82.12999, 0.20126, 2, 20, 120.37, -58.54, 0.85455, 21, 76.31, -121.18, 0.14544, 2, 20, 197.37, -69.23, 0.3355, 21, 76.17, -43.46, 0.66449 ], + "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": "skinnedmesh", + "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": [ 16, 47, 15, 15, 12, 13, 15, 13, 14, 15, 47, 12, 47, 10, 11, 17, 46, 47, 47, 46, 10, 18, 46, 17, 17, 47, 16, 18, 45, 46, 47, 11, 12, 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, 20, 21, 44, 20, 45, 19, 44, 45, 20, 45, 18, 19, 46, 9, 10, 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, 28, 29, 40, 40, 39, 4, 7, 42, 6, 24, 42, 22, 40, 29, 39, 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, 6, 53.94, 69.15, 1, 1, 6, 126.23, 67.31, 1, 2, 6, 226.42, 31.13, 0.9375, 11, -30.87, -1.11, 0.0625, 2, 6, 240.84, 25.33, 0.7, 11, -25.64, 13.52, 0.3, 2, 6, 246.67, 8.05, 0.3, 11, -8.61, 20.02, 0.7, 3, 6, 240.81, -115.25, 0.0625, 11, 114.8, 19.01, 0.875, 19, 9.48, 59.16, 0.0625, 2, 11, 131.07, 29.69, 0.7, 19, 22.11, 44.35, 0.3, 2, 11, 146.06, 39.54, 0.3, 19, 33.76, 30.71, 0.7, 4, 11, 152.6, 65.01, 0.12438, 19, 59.85, 27.41, 0.74434, 35, 15.85, 48.05, 0.12104, 51, -80.52, 23.87, 0.01022, 4, 11, 154.28, 71.59, 0.0519, 19, 66.59, 26.56, 0.74749, 35, 16.72, 41.31, 0.15401, 51, -77.54, 17.76, 0.04658, 4, 11, 145.73, 77.3, 0.02193, 19, 71.19, 35.76, 0.63296, 35, 26.78, 39.17, 0.1288, 51, -67.32, 18.96, 0.21628, 3, 19, 87.93, 69.21, 0.0625, 35, 63.37, 31.39, 0.675, 51, -30.17, 23.3, 0.26249, 2, 35, 113.82, 35.72, 0.1038, 51, 16.23, 43.56, 0.89619, 1, 51, 128.14, 12.02, 1, 1, 51, 161.85, -15.81, 1, 2, 35, 90.98, -23.36, 0.0138, 51, 13.52, -19.72, 0.98619, 2, 35, 62.97, -25.81, 0.7, 51, -12.23, -31.02, 0.3, 3, 19, 115.12, -1.33, 0.08333, 35, 1.93, -12.66, 0.83333, 51, -74.26, -38.1, 0.08333, 2, 19, 106.11, -23.53, 0.3, 35, -21.8, -9.52, 0.7, 2, 19, 97.43, -44.9, 0.7, 35, -44.67, -6.51, 0.3, 2, 19, 84.26, -40.69, 0.9375, 35, -43.9, 7.29, 0.0625, 1, 19, 49.18, -29.46, 1, 2, 11, 206.75, 5.37, 0.13333, 19, 7.44, -33.77, 0.86666, 2, 11, 219.64, -20.52, 0.36111, 19, -16.64, -49.8, 0.63888, 2, 11, 208.4, -37.82, 0.72083, 19, -35.22, -40.82, 0.27916, 2, 11, 200.49, -50.02, 0.91666, 19, -48.31, -34.48, 0.08333, 1, 11, 161.1, -36.97, 1, 2, 6, 150.1, -116.76, 0.08333, 11, 119.88, -71.55, 0.91666, 2, 6, 154.99, -70.71, 0.42846, 11, 73.68, -68.47, 0.57153, 2, 6, 150.3, -65.27, 0.35604, 11, 68.42, -73.36, 0.64395, 2, 6, 146.51, -60.87, 0.59147, 11, 64.17, -77.32, 0.40852, 2, 6, 115.12, -75.08, 0.8446, 11, 79.61, -108.13, 0.15539, 1, 6, 63.33, -98.53, 1, 1, 6, 21.78, -94.55, 1, 1, 6, -66.69, -32.04, 1, 1, 6, -6.62, 52.97, 1, 1, 6, 58.14, -6, 1, 1, 6, 121.17, 2.44, 1, 2, 6, 188.87, -12.1, 0.96, 11, 13.79, -36.92, 0.04, 2, 6, 197.11, -18.42, 0.7, 11, 19.79, -28.44, 0.3, 2, 6, 203.98, -28.61, 0.3, 11, 29.69, -21.17, 0.7, 3, 6, 213.53, -136.06, 0.04, 11, 136.67, -7.42, 0.91999, 19, -14.02, 34.16, 0.04, 2, 11, 164.32, 0.66, 0.7, 19, -2.53, 7.73, 0.3, 2, 11, 177.97, 21.57, 0.25, 19, 19.92, -3.19, 0.75, 3, 11, 187.55, 72.78, 0.04, 19, 71.93, -6.29, 0.91999, 35, -13.72, 27.87, 0.04, 2, 19, 79.66, -3.72, 0.7, 35, -9.28, 21.04, 0.3, 3, 19, 87.98, 7.25, 0.3, 35, 3.42, 15.76, 0.66, 51, -81.96, -10.7, 0.04, 3, 19, 114.16, 61.85, 0.04, 35, 62.84, 4.15, 0.7, 51, -21.95, -2.66, 0.26 ], - "hull": 36 + "triangles": [ 15, 13, 14, 16, 47, 15, 15, 12, 13, 15, 47, 12, 18, 46, 17, 18, 45, 46, 17, 47, 16, 17, 46, 47, 47, 10, 11, 47, 46, 10, 47, 11, 12, 45, 18, 19, 44, 45, 20, 20, 45, 19, 20, 21, 44, 46, 9, 10, 46, 45, 9, 45, 44, 9, 21, 43, 44, 44, 8, 9, 44, 7, 8, 44, 43, 7, 21, 22, 43, 43, 22, 42, 43, 42, 7, 22, 23, 24, 24, 42, 22, 7, 42, 6, 42, 41, 6, 6, 41, 5, 24, 26, 42, 42, 26, 41, 24, 25, 26, 5, 40, 4, 5, 41, 40, 41, 28, 40, 26, 27, 41, 41, 27, 28, 40, 39, 4, 28, 29, 40, 40, 29, 39, 4, 39, 3, 39, 2, 3, 29, 30, 39, 39, 38, 2, 39, 30, 38, 38, 1, 2, 30, 37, 38, 38, 37, 1, 30, 31, 37, 31, 36, 37, 31, 32, 36, 32, 33, 36, 37, 0, 1, 37, 36, 0, 33, 34, 36, 36, 35, 0, 36, 34, 35 ], + "vertices": [ 1, 40, 53.94, 69.15, 1, 1, 40, 126.23, 67.31, 1, 2, 40, 226.42, 31.13, 0.9375, 41, -30.87, -1.11, 0.0625, 2, 40, 240.84, 25.33, 0.7, 41, -25.64, 13.52, 0.3, 2, 40, 246.67, 8.05, 0.3, 41, -8.60999, 20.02, 0.7, 3, 40, 240.81, -115.25, 0.0625, 41, 114.8, 19.01, 0.875, 42, 9.47999, 59.16, 0.0625, 2, 41, 131.07, 29.69, 0.7, 42, 22.11, 44.35, 0.3, 2, 41, 146.06, 39.54, 0.3, 42, 33.75999, 30.71, 0.7, 3, 41, 152.6, 65.01, 0.12566, 42, 59.85, 27.41, 0.75203, 43, 15.85, 48.05, 0.12229, 3, 41, 154.28, 71.58999, 0.05444, 42, 66.58999, 26.56, 0.78401, 43, 16.71999, 41.31, 0.16154, 3, 42, 71.19, 35.75999, 0.64716, 43, 26.78, 39.16999, 0.13169, 44, -67.32, 18.95999, 0.22114, 3, 42, 87.93, 69.21, 0.0625, 43, 63.37, 31.39, 0.675, 44, -30.17, 23.3, 0.26249, 2, 43, 113.82, 35.72, 0.1038, 44, 16.23, 43.56, 0.89619, 1, 44, 128.14, 12.02, 1, 1, 44, 161.85, -15.81, 1, 2, 43, 90.98, -23.36, 0.0138, 44, 13.52, -19.71999, 0.98619, 2, 43, 62.97, -25.81, 0.7, 44, -12.23, -31.02, 0.3, 3, 42, 115.12, -1.33, 0.08333, 43, 1.93, -12.66, 0.83333, 44, -74.26, -38.09999, 0.08333, 2, 42, 106.11, -23.53, 0.3, 43, -21.8, -9.52, 0.7, 2, 42, 97.43, -44.9, 0.7, 43, -44.67, -6.51, 0.3, 2, 42, 84.26, -40.68999, 0.9375, 43, -43.9, 7.29, 0.0625, 1, 42, 49.18, -29.46, 1, 2, 41, 206.75, 5.37, 0.13333, 42, 7.44, -33.77, 0.86666, 2, 41, 219.64, -20.52, 0.36111, 42, -16.64, -49.8, 0.63888, 2, 41, 208.4, -37.82, 0.72083, 42, -35.22, -40.82, 0.27916, 2, 41, 200.49, -50.02, 0.91666, 42, -48.31, -34.48, 0.08333, 1, 41, 161.1, -36.97, 1, 2, 40, 150.1, -116.76, 0.08333, 41, 119.88, -71.55, 0.91666, 2, 40, 154.99, -70.71, 0.42846, 41, 73.68, -68.47, 0.57153, 2, 40, 150.3, -65.26999, 0.35604, 41, 68.42, -73.36, 0.64395, 2, 40, 146.51, -60.87, 0.59147, 41, 64.17, -77.32, 0.40852, 2, 40, 115.12, -75.08, 0.8446, 41, 79.61, -108.13, 0.15538, 1, 40, 63.33, -98.53, 1, 1, 40, 21.78, -94.55, 1, 1, 40, -66.69, -32.04, 1, 1, 40, -6.62, 52.97, 1, 1, 40, 58.14, -6, 1, 1, 40, 121.17, 2.44, 1, 1, 40, 188.87, -12.1, 1, 2, 40, 197.11, -18.42, 0.7, 41, 19.79, -28.44, 0.3, 2, 40, 203.98, -28.61, 0.3, 41, 29.69, -21.17, 0.7, 1, 41, 136.67, -7.42, 1, 2, 41, 164.32, 0.66, 0.7, 42, -2.53, 7.73, 0.3, 2, 41, 177.97, 21.57, 0.25, 42, 19.92, -3.19, 0.75, 1, 42, 71.93, -6.29, 1, 2, 42, 79.66, -3.72, 0.7, 43, -9.28, 21.04, 0.3, 2, 42, 87.98, 7.25, 0.3125, 43, 3.42, 15.76, 0.6875, 3, 42, 114.16, 61.85, 0.04, 43, 62.84, 4.15, 0.7, 44, -21.95, -2.66, 0.26 ], + "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": { @@ -306,11 +410,14 @@ }, "raptor_jaw": { "raptor_jaw": { - "type": "skinnedmesh", - "uvs": [ 0.40984, 0.22169, 0.42214, 0.3988, 0.67894, 0.53819, 0.7589, 0.62838, 0.99999, 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, 0.31758, 0.50047 ], - "triangles": [ 14, 13, 0, 10, 11, 15, 15, 14, 1, 2, 7, 8, 8, 9, 10, 15, 2, 8, 15, 8, 10, 7, 3, 6, 7, 2, 3, 2, 15, 1, 6, 3, 5, 5, 3, 4, 14, 0, 1, 11, 14, 15, 11, 12, 14, 14, 12, 13 ], - "vertices": [ 1, 48, 28.6, 68.85, 1, 1, 48, 69.65, 38.95, 1, 1, 48, 150.72, 72.88, 1, 1, 48, 186.16, 74.79, 1, 1, 48, 199.76, 159.69, 1, 1, 48, 213.35, 148.16, 1, 1, 48, 242.43, 74.42, 1, 1, 48, 230.31, -13.08, 1, 1, 48, 189.56, -71.99, 1, 1, 48, 132.76, -105.6, 1, 1, 48, 83.71, -55.39, 1, 2, 33, -18.31, 12.1, 0.67732, 48, -0.04, -70.76, 0.32267, 1, 33, 113.44, 16.95, 1, 1, 33, 116.36, -62.48, 1, 1, 48, 1.86, 5.43, 1, 1, 48, 71.19, -4.17, 1 ], - "hull": 14 + "type": "mesh", + "uvs": [ 0.40984, 0.22169, 0.42214, 0.3988, 0.67894, 0.53819, 0.7589, 0.62838, 0.99999, 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, 35, 28.6, 68.85, 1, 1, 35, 69.65, 38.95, 1, 1, 35, 150.72, 72.87999, 1, 1, 35, 186.16, 74.79, 1, 1, 35, 199.76, 159.69, 1, 1, 35, 213.35, 148.16, 1, 1, 35, 242.43, 74.42, 1, 1, 35, 230.31, -13.08, 1, 1, 35, 189.56, -71.99, 1, 1, 35, 132.76, -105.6, 1, 1, 35, 83.71, -55.39, 1, 2, 16, -18.31, 12.1, 0.67732, 35, -0.04, -70.76, 0.32267, 1, 16, 113.44, 16.95, 1, 1, 16, 116.36, -62.48, 1, 1, 35, 1.86, 5.43, 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": { @@ -321,11 +428,14 @@ }, "raptor_saddle_strap_rear": { "raptor_saddle_strap_rear": { - "type": "skinnedmesh", + "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, 22, 15, 20, 14, 15, 22, 5, 20, 4, 22, 20, 5, 15, 16, 20, 20, 21, 4, 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, 21, 3.9, -3.27, 1, 1, 21, 4.25, 15.05, 1, 1, 21, 13.24, 20.28, 1, 2, 21, 23.42, 21.2, 0.7, 37, -15.2, 21.22, 0.3, 3, 21, 41.11, 22.87, 0.3, 37, 2.48, 22.89, 0.6375, 53, -33.83, 24.96, 0.0625, 3, 21, 52.07, 21.72, 0.0625, 37, 13.43, 21.74, 0.6375, 53, -22.97, 23.11, 0.3, 2, 37, 18.39, 20.76, 0.25, 53, -18.09, 21.82, 0.75, 1, 53, -18.76, 33.09, 1, 1, 53, 49.92, 31.57, 1, 1, 53, 53.21, 25, 1, 1, 53, 53.11, -27.48, 1, 1, 53, 49.74, -31.27, 1, 1, 53, -20.73, -36.76, 1, 1, 53, -23.82, -22.28, 1, 3, 21, 53.48, -24.61, 0.0625, 37, 14.84, -24.59, 0.575, 53, -24.51, -23.21, 0.3625, 3, 21, 41.44, -26.12, 0.3, 37, 2.81, -26.09, 0.6375, 53, -36.62, -23.95, 0.0625, 2, 21, 24.38, -26.12, 0.7, 37, -14.24, -26.1, 0.3, 1, 21, 5.57, -26.12, 1, 1, 21, 3.54, -22.64, 1, 1, 53, -23.08, -0.04, 1, 3, 21, 41.66, -1.72, 0.3, 37, 3.03, -1.7, 0.66, 53, -34.85, 0.38, 0.04, 2, 21, 23.85, -2.46, 0.7, 37, -14.77, -2.44, 0.3, 3, 21, 52.58, -1.52, 0.04, 37, 13.95, -1.5, 0.62, 53, -23.94, -0.11, 0.34 ], - "hull": 19 + "triangles": [ 7, 8, 6, 9, 10, 13, 13, 11, 12, 6, 8, 19, 8, 9, 19, 9, 13, 19, 13, 10, 11, 19, 22, 6, 13, 14, 19, 19, 14, 22, 6, 22, 5, 22, 20, 5, 5, 20, 4, 14, 15, 22, 22, 15, 20, 20, 21, 4, 15, 16, 20, 4, 21, 3, 20, 16, 21, 2, 3, 0, 3, 21, 0, 0, 1, 2, 21, 16, 18, 16, 17, 18, 21, 18, 0 ], + "vertices": [ 1, 50, 3.9, -3.27, 1, 1, 50, 4.25, 15.05, 1, 1, 50, 13.24, 20.28, 1, 2, 50, 23.42, 21.2, 0.7, 51, -15.2, 21.22, 0.3, 3, 50, 41.11, 22.87, 0.3, 51, 2.48, 22.89, 0.6375, 52, -33.83, 24.96, 0.0625, 3, 50, 52.07, 21.72, 0.0625, 51, 13.43, 21.74, 0.6375, 52, -22.97, 23.11, 0.3, 2, 51, 18.39, 20.76, 0.25, 52, -18.09, 21.82, 0.75, 1, 52, -18.76, 33.09, 1, 1, 52, 49.92, 31.57, 1, 1, 52, 53.21, 25, 1, 1, 52, 53.11, -27.48, 1, 1, 52, 49.74, -31.27, 1, 1, 52, -20.73, -36.75999, 1, 1, 52, -23.82, -22.28, 1, 3, 50, 53.48, -24.61, 0.0625, 51, 14.84, -24.59, 0.575, 52, -24.51, -23.21, 0.3625, 3, 50, 41.43999, -26.12, 0.3, 51, 2.81, -26.09, 0.6375, 52, -36.62, -23.95, 0.0625, 2, 50, 24.38, -26.12, 0.7, 51, -14.24, -26.1, 0.3, 1, 50, 5.57, -26.12, 1, 1, 50, 3.54, -22.64, 1, 1, 52, -23.08, -0.04, 1, 2, 50, 41.66, -1.72, 0.3125, 51, 3.03, -1.7, 0.6875, 2, 50, 23.85, -2.46, 0.7, 51, -14.77, -2.44, 0.3, 2, 51, 13.95, -1.5, 0.64582, 52, -23.94, -0.11, 0.35416 ], + "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": { @@ -333,11 +443,14 @@ }, "raptor_tongue": { "raptor_tongue": { - "type": "skinnedmesh", + "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, 55, 3.63, 27.04, 0.6875, 62, -47.26, 33.87, 0.3125, 3, 55, 39.09, 19.45, 0.3125, 62, -13.41, 20.86, 0.625, 65, -51.54, 33.37, 0.0625, 3, 55, 71.56, 19.02, 0.0625, 62, 18.58, 15.39, 0.625, 65, -21.56, 20.92, 0.3125, 2, 62, 55.03, 16.85, 0.3125, 65, 14.29, 14.23, 0.6875, 2, 62, 93.34, 18.39, 0.08333, 65, 51.98, 7.21, 0.91666, 1, 65, 56.09, -4.5, 1, 2, 62, 85.06, -1.49, 0.08333, 65, 39.48, -10.33, 0.91666, 2, 62, 54.22, -9.18, 0.3125, 65, 7.71, -10.96, 0.6875, 3, 55, 75.14, -14.72, 0.0625, 62, 16.87, -18.5, 0.625, 65, -30.77, -11.73, 0.3125, 3, 55, 38.8, -25.8, 0.3125, 62, -20.74, -23.8, 0.625, 65, -68.62, -8.53, 0.0625, 2, 55, 2.4, -35.77, 0.6875, 62, -58.25, -27.99, 0.3125, 2, 55, -17.28, -40.62, 0.91666, 62, -78.45, -29.71, 0.08333, 1, 55, -59.91, 8.18, 1, 2, 55, -26.13, 37.69, 0.91666, 62, -75.02, 49.02, 0.08333 ], - "hull": 14 + "vertices": [ 2, 63, 3.63, 27.04, 0.6875, 64, -47.26, 33.87, 0.3125, 3, 63, 39.09, 19.45, 0.3125, 64, -13.41, 20.86, 0.625, 65, -51.54, 33.37, 0.0625, 3, 63, 71.56, 19.02, 0.0625, 64, 18.58, 15.39, 0.625, 65, -21.56, 20.92, 0.3125, 2, 64, 55.03, 16.85, 0.3125, 65, 14.29, 14.23, 0.6875, 2, 64, 93.34, 18.39, 0.08333, 65, 51.98, 7.21, 0.91666, 1, 65, 56.09, -4.5, 1, 2, 64, 85.06, -1.49, 0.08333, 65, 39.48, -10.33, 0.91666, 2, 64, 54.22, -9.18, 0.3125, 65, 7.71, -10.96, 0.6875, 3, 63, 75.14, -14.72, 0.0625, 64, 16.87, -18.5, 0.625, 65, -30.77, -11.73, 0.3125, 3, 63, 38.8, -25.8, 0.3125, 64, -20.74, -23.8, 0.625, 65, -68.62, -8.53, 0.0625, 2, 63, 2.4, -35.77, 0.6875, 64, -58.25, -27.99, 0.3125, 2, 63, -17.28, -40.62, 0.91666, 64, -78.44999, -29.71, 0.08333, 1, 63, -59.91, 8.18, 1, 2, 63, -26.13, 37.68999, 0.91666, 64, -75.01999, 49.02, 0.08333 ], + "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": { @@ -351,11 +464,14 @@ }, "stirrup_strap": { "stirrup_strap": { - "type": "skinnedmesh", + "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, 26, 24.71, 8.03, 0.80344, 39, -17.42, 11.02, 0.19655, 2, 26, 37.95, 8.04, 0.59978, 39, -4.36, 8.87, 0.40021, 2, 26, 50.88, 8.04, 0.36895, 39, 8.39, 6.77, 0.63104, 2, 26, 65.92, 12.27, 0.17748, 39, 23.91, 8.48, 0.82251, 2, 26, 81.72, 16.7, 0.05943, 39, 40.23, 10.28, 0.94056, 2, 26, 98.82, 25.04, 0.01209, 39, 58.46, 15.71, 0.9879, 2, 26, 114.44, 11.57, 0.00191, 39, 71.67, -0.11, 0.99808, 2, 26, 100.47, -4.61, 0.01817, 39, 55.25, -13.81, 0.98182, 2, 26, 78.79, -4.14, 0.07487, 39, 33.94, -9.81, 0.92512, 2, 26, 65.83, -6.24, 0.2028, 39, 20.81, -9.76, 0.79719, 2, 26, 49.78, -8.83, 0.39971, 39, 4.55, -9.7, 0.60028, 2, 26, 37.93, -10.97, 0.62658, 39, -7.48, -9.88, 0.37341, 2, 26, 25.85, -13.15, 0.82034, 39, -19.75, -10.06, 0.17965, 2, 26, 0.25, -18.03, 0.95288, 39, -45.81, -10.7, 0.04711, 2, 26, -17.83, -2.43, 0.97709, 39, -61.11, 7.63, 0.0229, 2, 26, 1.57, 20.07, 0.94774, 39, -38.29, 26.67, 0.05225, 2, 26, 10.84, -1.23, 0.97709, 39, -32.62, 4.14, 0.0229 ], - "hull": 16 + "vertices": [ 2, 56, 24.71, 8.03, 0.80344, 57, -17.42, 11.02, 0.19655, 2, 56, 37.95, 8.04, 0.59978, 57, -4.36, 8.87, 0.40021, 2, 56, 50.88, 8.04, 0.36895, 57, 8.39, 6.77, 0.63103, 2, 56, 65.92, 12.27, 0.17748, 57, 23.91, 8.47999, 0.82251, 2, 56, 81.72, 16.7, 0.05943, 57, 40.23, 10.28, 0.94056, 2, 56, 98.82, 25.04, 0.01209, 57, 58.46, 15.71, 0.9879, 2, 56, 114.44, 11.57, 0.00191, 57, 71.67, -0.11, 0.99808, 2, 56, 100.47, -4.61, 0.01816, 57, 55.25, -13.81, 0.98182, 2, 56, 78.79, -4.14, 0.07487, 57, 33.93999, -9.81, 0.92512, 2, 56, 65.83, -6.24, 0.2028, 57, 20.81, -9.76, 0.79719, 2, 56, 49.78, -8.83, 0.39971, 57, 4.55, -9.7, 0.60028, 2, 56, 37.93, -10.97, 0.62658, 57, -7.48, -9.88, 0.37341, 2, 56, 25.85, -13.15, 0.82034, 57, -19.75, -10.06, 0.17965, 2, 56, 0.25, -18.03, 0.95288, 57, -45.81, -10.7, 0.04711, 2, 56, -17.83, -2.43, 0.97709, 57, -61.11, 7.63, 0.0229, 2, 56, 1.57, 20.07, 0.94774, 57, -38.29, 26.67, 0.05225, 2, 56, 10.84, -1.23, 0.97709, 57, -32.62, 4.14, 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": { @@ -364,6 +480,1179 @@ } }, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.9, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.7, "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.7, "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.7, "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 } + ] + } + } + }, "empty": {}, "gungrab": { "slots": { @@ -439,13 +1728,7 @@ }, "ik": { "front_arm_goal": [ - { - "time": 0, - "mix": 1, - "bendPositive": true, - "curve": [ 0.317, 0.13, 0.781, 0.56 ] - }, - { "time": 0.1333, "mix": 0, "bendPositive": true } + { "time": 0, "mix": 0 } ] } }, @@ -552,9 +1835,6 @@ "front_leg1": { "rotate": [ { "time": 0, "angle": 27.07 }, - { "time": 0.5333, "angle": -41.93 }, - { "time": 0.6333, "angle": -16.71 }, - { "time": 0.7333, "angle": 16.92 }, { "time": 1.0666, "angle": 31.39 } ], "translate": [ @@ -583,9 +1863,6 @@ "rear_leg1": { "rotate": [ { "time": 0, "angle": -64.85 }, - { "time": 0.1, "angle": -45.79 }, - { "time": 0.1666, "angle": -19.95 }, - { "time": 0.4, "angle": 35.36 }, { "time": 1.0666, "angle": -45.71 } ], "translate": [ @@ -639,9 +1916,6 @@ "front_leg2": { "rotate": [ { "time": 0, "angle": -347.28 }, - { "time": 0.5333, "angle": -346.78 }, - { "time": 0.6333, "angle": -398.52 }, - { "time": 0.7333, "angle": -393.21 }, { "time": 1.0666, "angle": -362.06 } ], "translate": [ @@ -652,11 +1926,6 @@ "rear_leg2": { "rotate": [ { "time": 0, "angle": 27.05 }, - { "time": 0.0666, "angle": -14.99 }, - { "time": 0.1, "angle": -28.87 }, - { "time": 0.1666, "angle": -49.87 }, - { "time": 0.4, "angle": -14.45 }, - { "time": 0.4666, "angle": 11.42 }, { "time": 1.0666, "angle": 9.92 } ], "translate": [ @@ -705,25 +1974,22 @@ }, "tail2": { "rotate": [ - { "time": 0, "angle": -6.57 }, - { "time": 0.0666, "angle": -1.96 }, - { "time": 0.3333, "angle": -18.09 }, - { "time": 0.6333, "angle": -1.96 }, - { "time": 0.9, "angle": -18.09 }, - { "time": 1.0666, "angle": -6.57 } + { "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 1.024, "y": 1 }, - { "time": 0.0666, "x": 1.072, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 0.6333, "x": 1.072, "y": 1 }, - { "time": 0.9, "x": 0.903, "y": 1 }, - { "time": 1.0666, "x": 1.024, "y": 1 } + { "time": 0, "x": 0.8, "y": 1 }, + { "time": 0.2333, "x": 0.9, "y": 1 }, + { "time": 0.5, "x": 0.8, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 0.8, "y": 1 } ] }, "torso2": { @@ -841,23 +2107,22 @@ }, "tail3": { "rotate": [ - { "time": 0, "angle": -14.83 }, - { "time": 0.0666, "angle": -24.31 }, - { "time": 0.3333, "angle": 8.86 }, - { "time": 0.6333, "angle": -24.31 }, - { "time": 0.9, "angle": 8.86 }, - { "time": 1.0666, "angle": -14.83 } + { "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "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": { @@ -969,36 +2234,43 @@ }, "tail4": { "rotate": [ - { "time": 0, "angle": 16.99 }, - { "time": 0.0666, "angle": 7.36 }, - { "time": 0.3333, "angle": 41.06 }, - { "time": 0.6333, "angle": 7.36 }, - { "time": 0.9, "angle": 41.06 }, - { "time": 1.0666, "angle": 16.99 } + { "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "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, "angle": 36.9 }, { "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 } + { "time": 1, "angle": 27.74 }, + { "time": 1.0666, "angle": 36.9 } ], "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, @@ -1098,23 +2370,39 @@ }, "tail5": { "rotate": [ - { "time": 0, "angle": -15.7 }, - { "time": 0.0666, "angle": -38.39 }, - { "time": 0.3333, "angle": 41.03 }, - { "time": 0.6333, "angle": -38.39 }, - { "time": 0.9, "angle": 41.03 }, - { "time": 1.0666, "angle": -15.7 } + { + "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "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": { @@ -1132,7 +2420,7 @@ }, "front_foot3": { "rotate": [ - { "time": 0, "angle": 27.59 }, + { "time": 0, "angle": -1.65 }, { "time": 0.0666, "angle": -5.29 }, { "time": 0.1333, "angle": -3.94 }, { "time": 0.2666, "angle": -3.81 }, @@ -1141,8 +2429,8 @@ { "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 } + { "time": 1, "angle": 10.93 }, + { "time": 1.0666, "angle": -1.65 } ], "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, @@ -1283,21 +2571,21 @@ ] } }, - "ffd": { + "deform": { "default": { "raptor_body": { "raptor_body": [ { "time": 0 }, { "time": 0.2666, - "offset": 368, - "vertices": [ -16.78, 15.47, -0.63, 22.82, 18.11, 13.89, 19.32, 12.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, 0, 0, 0, 0, 0, 0, -3.24, 0.81, 0, 0, -3.24, 0.81 ] + "offset": 314, + "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, -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": 368, - "vertices": [ -16.78, 15.47, -0.63, 22.82, 18.11, 13.89, 19.32, 12.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, 0, 0, 0, 0, 0, 0, -3.24, 0.81, 0, 0, -3.24, 0.81 ] + "offset": 314, + "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, -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 } ] @@ -1308,18 +2596,18 @@ { "time": 0.2666 }, { "time": 0.5333, - "offset": 216, - "vertices": [ -2.23, 21.95, 21.54, -4.75 ] + "offset": 138, + "vertices": [ -2.23608, 21.95403, 21.54915, -4.7554 ] }, { "time": 0.6, - "offset": 216, - "vertices": [ 7.17, 15.14, 15.26, -6.91 ] + "offset": 138, + "vertices": [ 7.17962, 15.14358, 15.26523, -6.91741 ] }, { "time": 0.7333, - "offset": 176, - "vertices": [ -0.82, 0.73, -0.01, -1.1, -0.27, 1.06, -1.28, 0.39, 0, 0, 0, 0, 0, 0, 1.48, -2.59, 0.98, 2.82, 2.73, -10.49, 6.12, 8.95, -3.72, -10.18, -2.6, -2.28, 3.43, -0.47, -3.44, -0.39, -2.28, -4.76, 5.08, 1.4, -4.58, -2.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.37, -1.75, 2.22, 0.1, -1.86, -0.75, -2.86, -0.77, 2.45, -1.65 ] + "offset": 110, + "vertices": [ -0.82485, 0.73406, -0.01284, -1.10443, 0, 0, 0, 0, 1.4866, -2.59426, 0.98071, 2.82342, 2.7366, -10.49935, 6.12506, 8.95282, -2.60873, -2.28384, 3.43417, -0.47045, -2.28305, -4.76037, 5.08892, 1.40078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 ] }, { "time": 0.8, "curve": "stepped" }, { "time": 0.9666, "curve": "stepped" }, diff --git a/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.png b/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.png deleted file mode 100644 index 78aed4d3e..000000000 Binary files a/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.png and /dev/null differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.skel b/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.skel index 507d86e2e..e70312f37 100644 Binary files a/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.skel and b/spine-libgdx/spine-libgdx-tests/assets/raptor/raptor.skel differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-diffuse.atlas b/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-diffuse.atlas new file mode 100644 index 000000000..4efa6dc46 --- /dev/null +++ b/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-diffuse.atlas @@ -0,0 +1,167 @@ + +spineboy-old-diffuse.png +size: 512,128 +format: RGBA8888 +filter: Linear,Linear +repeat: none +eyes + rotate: false + xy: 439, 99 + size: 34, 27 + orig: 34, 27 + offset: 0, 0 + index: -1 +eyes-closed + rotate: false + xy: 439, 70 + size: 34, 27 + orig: 34, 27 + offset: 0, 0 + index: -1 +head + rotate: true + xy: 2, 5 + size: 121, 132 + orig: 121, 132 + offset: 0, 0 + index: -1 +left-ankle + rotate: true + xy: 475, 71 + size: 25, 32 + orig: 25, 32 + offset: 0, 0 + index: -1 +left-arm + rotate: true + xy: 306, 2 + size: 35, 29 + orig: 35, 29 + offset: 0, 0 + index: -1 +left-foot + rotate: false + xy: 205, 2 + size: 65, 30 + orig: 65, 30 + offset: 0, 0 + index: -1 +left-hand + rotate: false + xy: 475, 31 + size: 30, 38 + orig: 30, 38 + offset: 0, 0 + index: -1 +left-lower-leg + rotate: false + xy: 339, 62 + size: 49, 64 + orig: 49, 64 + offset: 0, 0 + index: -1 +left-pant-bottom + rotate: false + xy: 254, 36 + size: 44, 22 + orig: 44, 22 + offset: 0, 0 + index: -1 +left-shoulder + rotate: true + xy: 337, 3 + size: 34, 53 + orig: 34, 53 + offset: 0, 0 + index: -1 +left-upper-leg + rotate: false + xy: 252, 60 + size: 33, 66 + orig: 33, 66 + offset: 0, 0 + index: -1 +neck + rotate: false + xy: 475, 98 + size: 34, 28 + orig: 34, 28 + offset: 0, 0 + index: -1 +pelvis + rotate: true + xy: 390, 63 + size: 63, 47 + orig: 63, 47 + offset: 0, 0 + index: -1 +right-ankle + rotate: true + xy: 475, 4 + size: 25, 30 + orig: 25, 30 + offset: 0, 0 + index: -1 +right-arm + rotate: true + xy: 300, 39 + size: 21, 45 + orig: 21, 45 + offset: 0, 0 + index: -1 +right-foot + rotate: false + xy: 136, 2 + size: 67, 30 + orig: 67, 30 + offset: 0, 0 + index: -1 +right-foot-idle + rotate: true + xy: 392, 8 + size: 53, 28 + orig: 53, 28 + offset: 0, 0 + index: -1 +right-hand + rotate: false + xy: 272, 2 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +right-lower-leg + rotate: false + xy: 287, 62 + size: 50, 64 + orig: 50, 64 + offset: 0, 0 + index: -1 +right-pant-bottom + rotate: false + xy: 206, 36 + size: 46, 18 + orig: 46, 18 + offset: 0, 0 + index: -1 +right-shoulder + rotate: true + xy: 422, 9 + size: 52, 51 + orig: 52, 51 + offset: 0, 0 + index: -1 +right-upper-leg + rotate: false + xy: 206, 56 + size: 44, 70 + orig: 44, 70 + offset: 0, 0 + index: -1 +torso + rotate: false + xy: 136, 34 + size: 68, 92 + orig: 68, 92 + offset: 0, 0 + index: -1 diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-diffuse.png b/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-diffuse.png new file mode 100644 index 000000000..46a22db6b Binary files /dev/null and b/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-diffuse.png differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-normal.png b/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-normal.png new file mode 100644 index 000000000..ff367ac75 Binary files /dev/null and b/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-normal.png differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-pma.atlas b/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-pma.atlas new file mode 100644 index 000000000..d5096d1ae --- /dev/null +++ b/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-pma.atlas @@ -0,0 +1,167 @@ + +spineboy-old-pma.png +size: 1024,128 +format: RGBA8888 +filter: Linear,Linear +repeat: none +eyes + rotate: false + xy: 808, 99 + size: 34, 27 + orig: 34, 27 + offset: 0, 0 + index: -1 +eyes-closed + rotate: false + xy: 844, 99 + size: 34, 27 + orig: 34, 27 + offset: 0, 0 + index: -1 +head + rotate: true + xy: 2, 5 + size: 121, 132 + orig: 121, 132 + offset: 0, 0 + index: -1 +left-ankle + rotate: false + xy: 914, 94 + size: 25, 32 + orig: 25, 32 + offset: 0, 0 + index: -1 +left-arm + rotate: false + xy: 735, 97 + size: 35, 29 + orig: 35, 29 + offset: 0, 0 + index: -1 +left-foot + rotate: false + xy: 205, 2 + size: 65, 30 + orig: 65, 30 + offset: 0, 0 + index: -1 +left-hand + rotate: true + xy: 695, 91 + size: 35, 38 + orig: 35, 38 + offset: 0, 0 + index: -1 +left-lower-leg + rotate: true + xy: 331, 77 + size: 49, 64 + orig: 49, 64 + offset: 0, 0 + index: -1 +left-pant-bottom + rotate: false + xy: 206, 38 + size: 44, 22 + orig: 44, 22 + offset: 0, 0 + index: -1 +left-shoulder + rotate: true + xy: 531, 92 + size: 34, 53 + orig: 34, 53 + offset: 0, 0 + index: -1 +left-upper-leg + rotate: true + xy: 462, 93 + size: 33, 67 + orig: 33, 67 + offset: 0, 0 + index: -1 +neck + rotate: false + xy: 772, 98 + size: 34, 28 + orig: 34, 28 + offset: 0, 0 + index: -1 +pelvis + rotate: false + xy: 397, 79 + size: 63, 47 + orig: 63, 47 + offset: 0, 0 + index: -1 +right-ankle + rotate: false + xy: 941, 96 + size: 25, 30 + orig: 25, 30 + offset: 0, 0 + index: -1 +right-arm + rotate: true + xy: 640, 75 + size: 21, 45 + orig: 21, 45 + offset: 0, 0 + index: -1 +right-foot + rotate: false + xy: 136, 2 + size: 67, 30 + orig: 67, 30 + offset: 0, 0 + index: -1 +right-foot-idle + rotate: false + xy: 640, 98 + size: 53, 28 + orig: 53, 28 + offset: 0, 0 + index: -1 +right-hand + rotate: false + xy: 880, 94 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +right-lower-leg + rotate: false + xy: 206, 62 + size: 51, 64 + orig: 51, 64 + offset: 0, 0 + index: -1 +right-pant-bottom + rotate: false + xy: 259, 62 + size: 46, 18 + orig: 46, 18 + offset: 0, 0 + index: -1 +right-shoulder + rotate: false + xy: 586, 75 + size: 52, 51 + orig: 52, 51 + offset: 0, 0 + index: -1 +right-upper-leg + rotate: true + xy: 259, 82 + size: 44, 70 + orig: 44, 70 + offset: 0, 0 + index: -1 +torso + rotate: false + xy: 136, 34 + size: 68, 92 + orig: 68, 92 + offset: 0, 0 + index: -1 diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-pma.png b/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-pma.png new file mode 100644 index 000000000..7d5bb12dd Binary files /dev/null and b/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old-pma.png differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old.json b/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old.json new file mode 100644 index 000000000..ce83de110 --- /dev/null +++ b/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old.json @@ -0,0 +1,992 @@ +{ +"skeleton": { "hash": "DIwMYpCxf9hwB7YgCS6TSSPK/5A", "spine": "3.4.00", "width": 161.12, "height": 343.58, "images": "./images/" }, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, + { "name": "torso", "parent": "hip", "length": 85.82, "rotation": 99.4, "x": -6.42, "y": 1.97 }, + { "name": "neck", "parent": "torso", "length": 18.38, "rotation": 0.9, "x": 83.64, "y": -1.78 }, + { "name": "head", "parent": "neck", "length": 68.28, "rotation": -8.94, "x": 19.09, "y": 6.97 }, + { "name": "left shoulder", "parent": "torso", "length": 44.19, "rotation": -156.96, "x": 78.96, "y": -15.75 }, + { "name": "left arm", "parent": "left shoulder", "length": 35.62, "rotation": 28.16, "x": 44.19, "y": -0.01 }, + { "name": "left upper leg", "parent": "hip", "length": 50.39, "rotation": -89.09, "x": 14.45, "y": 2.81 }, + { "name": "left lower leg", "parent": "left upper leg", "length": 56.45, "rotation": -16.65, "x": 51.78, "y": 3.46 }, + { "name": "left foot", "parent": "left lower leg", "length": 46.5, "rotation": 102.43, "x": 64.02, "y": -8.67 }, + { "name": "left hand", "parent": "left arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.07 }, + { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, + { "name": "right shoulder", "parent": "torso", "length": 49.95, "rotation": 130.6, "x": 81.9, "y": 6.79 }, + { "name": "right arm", "parent": "right shoulder", "length": 36.74, "rotation": 40.12, "x": 49.95, "y": -0.12 }, + { "name": "right upper leg", "parent": "hip", "length": 45.76, "rotation": -101.13, "x": -18.27 }, + { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "rotation": -10.7, "x": 50.21, "y": 0.6 }, + { "name": "right foot", "parent": "right lower leg", "length": 45.45, "rotation": 110.3, "x": 64.88, "y": 0.04 }, + { "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.35, "x": 36.9, "y": 0.34 } +], +"slots": [ + { "name": "left shoulder", "bone": "left shoulder", "attachment": "left-shoulder" }, + { "name": "left arm", "bone": "left arm", "attachment": "left-arm" }, + { "name": "left hand", "bone": "left hand", "attachment": "left-hand" }, + { "name": "left foot", "bone": "left foot", "attachment": "left-foot" }, + { "name": "left lower leg", "bone": "left lower leg", "attachment": "left-lower-leg" }, + { "name": "left upper leg", "bone": "left upper leg", "attachment": "left-upper-leg" }, + { "name": "pelvis", "bone": "pelvis", "attachment": "pelvis" }, + { "name": "right foot", "bone": "right foot", "attachment": "right-foot" }, + { "name": "right lower leg", "bone": "right lower leg", "attachment": "right-lower-leg" }, + { "name": "right upper leg", "bone": "right upper leg", "attachment": "right-upper-leg" }, + { "name": "torso", "bone": "torso", "attachment": "torso" }, + { "name": "neck", "bone": "neck", "attachment": "neck" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "eyes", "bone": "head", "attachment": "eyes" }, + { "name": "right shoulder", "bone": "right shoulder", "attachment": "right-shoulder" }, + { "name": "right arm", "bone": "right arm", "attachment": "right-arm" }, + { "name": "right hand", "bone": "right hand", "attachment": "right-hand" }, + { "name": "bb-head", "bone": "head", "attachment": "bb-head" } +], +"skins": { + "default": { + "bb-head": { + "bb-head": { + "type": "boundingbox", + "vertexCount": 5, + "vertices": [ 77.26, -53.82, 105.8, -32.41999, 58.43, 40.34, 5.82, 37, -7.01, -42.23 ] + } + }, + "eyes": { + "eyes": { "x": 28.94, "y": -32.92, "rotation": -86.9, "width": 34, "height": 27 }, + "eyes-closed": { "x": 28.77, "y": -32.86, "rotation": -86.9, "width": 34, "height": 27 } + }, + "head": { + "head": { "x": 53.94, "y": -5.75, "rotation": -86.9, "width": 121, "height": 132 } + }, + "left arm": { + "left-arm": { "x": 15.11, "y": -0.44, "rotation": 33.84, "width": 35, "height": 29 } + }, + "left foot": { + "left-foot": { "x": 24.35, "y": 8.88, "rotation": 3.32, "width": 65, "height": 30 } + }, + "left hand": { + "left-hand": { "x": 0.75, "y": 1.86, "rotation": 31.14, "width": 35, "height": 38 } + }, + "left lower leg": { + "left-lower-leg": { "x": 24.55, "y": -1.92, "rotation": 105.75, "width": 49, "height": 64 } + }, + "left shoulder": { + "left-shoulder": { "x": 23.74, "y": 0.11, "rotation": 62.01, "width": 34, "height": 53 } + }, + "left upper leg": { + "left-upper-leg": { "x": 26.12, "y": -1.85, "rotation": 89.09, "width": 33, "height": 67 } + }, + "neck": { + "neck": { "x": 9.42, "y": -3.66, "rotation": -100.15, "width": 34, "height": 28 } + }, + "pelvis": { + "pelvis": { "x": -4.83, "y": 10.62, "width": 63, "height": 47 } + }, + "right arm": { + "right-arm": { "x": 18.34, "y": -2.64, "rotation": 94.32, "width": 21, "height": 45 } + }, + "right foot": { + "right-foot": { "x": 19.02, "y": 8.47, "rotation": 1.52, "width": 67, "height": 30 } + }, + "right hand": { + "right-hand": { "x": 6.82, "y": 1.25, "rotation": 91.96, "width": 32, "height": 32 } + }, + "right lower leg": { + "right-lower-leg": { "x": 23.28, "y": -2.59, "rotation": 111.83, "width": 51, "height": 64 } + }, + "right shoulder": { + "right-shoulder": { "x": 25.86, "y": 0.03, "rotation": 134.44, "width": 52, "height": 51 } + }, + "right upper leg": { + "right-upper-leg": { "x": 23.03, "y": 0.25, "rotation": 101.13, "width": 44, "height": 70 } + }, + "torso": { + "torso": { "x": 44.57, "y": -7.08, "rotation": -94.95, "width": 68, "height": 92 } + } + } +}, +"events": { + "behind": {}, + "headAttach": {}, + "headPop": {} +}, +"animations": { + "headPop": { + "bones": { + "head": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.9614, "angle": -23.11 }, + { "time": 1.7856, "angle": -56.45 }, + { "time": 2.6097, "angle": 1.38 }, + { "time": 3.5712, "angle": 36.12 }, + { "time": 4.258, "angle": 1.24 }, + { "time": 5.2195, "angle": -37.12 }, + { "time": 5.9086, "angle": 2.07 }, + { "time": 6.9044, "angle": 34.72 }, + { "time": 7.7675, "angle": 359.99 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.19, 0.4, 0.586, 0.75 ] + }, + { + "time": 0.5494, + "x": 57.88, + "y": -35.72, + "curve": [ 0.39, 0.54, 0.632, 0.72 ] + }, + { + "time": 0.9614, + "x": 87.26, + "y": -87.89, + "curve": [ 0.325, 0.23, 0.587, 0.36 ] + }, + { + "time": 1.3735, + "x": 28.89, + "y": -114.62, + "curve": [ 0.383, 0.23, 0.736, 0.55 ] + }, + { + "time": 1.7856, + "x": -76.58, + "y": -124.98, + "curve": [ 0.129, 0.21, 0.547, 0.64 ] + }, + { + "time": 2.1977, + "x": -154.37, + "y": -77.13, + "curve": [ 0.354, 0.48, 0.729, 0.9 ] + }, + { + "time": 2.6097, + "x": -181.02, + "y": 18.56, + "curve": [ 0.063, 0.15, 0.52, 0.62 ] + }, + { + "time": 3.1591, + "x": -150.38, + "y": 128.67, + "curve": [ 0.381, 0.54, 0.778, 1 ] + }, + { + "time": 3.5712, + "x": -112.08, + "y": 146.28, + "curve": [ 0.242, 0, 0.626, 0.45 ] + }, + { + "time": 3.8459, + "x": -63.7, + "y": 111.22, + "curve": [ 0.398, 0.35, 0.786, 0.76 ] + }, + { + "time": 4.258, + "x": -48.94, + "y": -1.55, + "curve": [ 0.188, 0.21, 0.575, 0.61 ] + }, + { + "time": 4.6701, + "x": -91.69, + "y": -91.93, + "curve": [ 0.362, 0.51, 0.766, 1 ] + }, + { + "time": 5.2195, + "x": -142.79, + "y": -126.83, + "curve": [ 0.227, 0.34, 0.593, 0.75 ] + }, + { + "time": 5.4942, + "x": -176.7, + "y": -98.32, + "curve": [ 0.26, 0.4, 0.612, 0.71 ] + }, + { + "time": 5.7689, + "x": -163.95, + "y": -24.04, + "curve": [ 0.338, 0.37, 0.676, 0.71 ] + }, + { + "time": 5.9063, + "x": -150.17, + "y": 10.71, + "curve": [ 0.387, 0.61, 0.741, 1 ] + }, + { + "time": 6.181, + "x": -102.44, + "y": 45.92, + "curve": [ 0.31, 0.24, 0.648, 0.58 ] + }, + { + "time": 6.4557, + "x": -53.99, + "y": 70.39, + "curve": [ 0.325, 0.29, 0.663, 0.63 ] + }, + { + "time": 6.7304, + "x": 1.88, + "y": 55.54, + "curve": [ 0.387, 0.33, 0.769, 0.73 ] + }, + { + "time": 7.1425, + "x": 34.26, + "y": 36.13, + "curve": [ 0.206, 0.28, 0.596, 0.67 ] + }, + { + "time": 7.5545, + "x": 23.94, + "y": 1.01, + "curve": [ 0.373, 0.56, 0.759, 1 ] + }, + { "time": 7.9666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 1.6482, "x": 1, "y": 1 }, + { "time": 2.6097, "x": 0.742, "y": 0.742 }, + { "time": 3.5712, "x": 1, "y": 1 }, + { "time": 4.258, "x": 1.502, "y": 1.502 }, + { "time": 5.2195, "x": 1, "y": 1 }, + { "time": 5.9063, "x": 0.707, "y": 0.707 }, + { "time": 6.7304, "x": 1, "y": 1 } + ] + } + }, + "drawOrder": [ + { + "time": 1.2362, + "offsets": [ + { "slot": "head", "offset": -12 }, + { "slot": "eyes", "offset": -12 } + ] + }, + { + "time": 3.5712, + "offsets": [ + { "slot": "head", "offset": 3 }, + { "slot": "eyes", "offset": 3 } + ] + }, + { + "time": 5.2195, + "offsets": [ + { "slot": "head", "offset": -12 }, + { "slot": "eyes", "offset": -12 } + ] + }, + { "time": 7.1425 } + ], + "events": [ + { "time": 0, "name": "headPop", "string": "pop.wav" }, + { "time": 2.6097, "name": "behind" }, + { "time": 5.9063, "name": "behind" }, + { "time": 7.9666, "name": "headAttach", "string": "attach.wav" } + ] + }, + "jump": { + "bones": { + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.9333, "angle": 0, "curve": "stepped" }, + { "time": 1.3666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -11.57, "y": -3 }, + { "time": 0.2333, "x": -16.2, "y": -19.43 }, + { + "time": 0.3333, + "x": 7.66, + "y": -8.48, + "curve": [ 0.057, 0.06, 0.712, 1 ] + }, + { "time": 0.3666, "x": 15.38, "y": 5.01 }, + { "time": 0.4666, "x": -7.84, "y": 57.22 }, + { + "time": 0.6, + "x": -10.81, + "y": 96.34, + "curve": [ 0.241, 0, 1, 1 ] + }, + { "time": 0.7333, "x": -7.01, "y": 54.7 }, + { "time": 0.8, "x": -10.58, "y": 32.2 }, + { "time": 0.9333, "x": -31.99, "y": 0.45 }, + { "time": 1.0666, "x": -12.48, "y": -29.47 }, + { "time": 1.3666, "x": -11.57, "y": -3 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "left upper leg": { + "rotate": [ + { "time": 0, "angle": 17.13 }, + { "time": 0.2333, "angle": 44.35 }, + { "time": 0.3333, "angle": 16.46 }, + { "time": 0.4, "angle": -9.88 }, + { "time": 0.4666, "angle": -11.42 }, + { "time": 0.5666, "angle": 23.46 }, + { "time": 0.7666, "angle": 71.82 }, + { "time": 0.9333, "angle": 65.53 }, + { "time": 1.0666, "angle": 51.01 }, + { "time": 1.3666, "angle": 17.13 } + ], + "translate": [ + { "time": 0, "x": -3, "y": -2.25, "curve": "stepped" }, + { "time": 0.9333, "x": -3, "y": -2.25, "curve": "stepped" }, + { "time": 1.3666, "x": -3, "y": -2.25 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "left lower leg": { + "rotate": [ + { "time": 0, "angle": -16.25 }, + { "time": 0.2333, "angle": -52.21 }, + { "time": 0.4, "angle": 15.04 }, + { "time": 0.4666, "angle": -8.95 }, + { "time": 0.5666, "angle": -39.53 }, + { "time": 0.7666, "angle": -27.27 }, + { "time": 0.9333, "angle": -3.52 }, + { "time": 1.0666, "angle": -61.92 }, + { "time": 1.3666, "angle": -16.25 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "left foot": { + "rotate": [ + { "time": 0, "angle": 0.33 }, + { "time": 0.2333, "angle": 6.2 }, + { "time": 0.3333, "angle": 14.73 }, + { "time": 0.4, "angle": -15.54 }, + { "time": 0.4333, "angle": -21.2 }, + { "time": 0.5666, "angle": -7.55 }, + { "time": 0.7666, "angle": -0.67 }, + { "time": 0.9333, "angle": -0.58 }, + { "time": 1.0666, "angle": 14.64 }, + { "time": 1.3666, "angle": 0.33 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "right upper leg": { + "rotate": [ + { "time": 0, "angle": 25.97 }, + { "time": 0.2333, "angle": 46.43 }, + { "time": 0.3333, "angle": 22.61 }, + { "time": 0.4, "angle": 2.13 }, + { + "time": 0.4666, + "angle": 0.04, + "curve": [ 0, 0, 0.637, 0.98 ] + }, + { "time": 0.6, "angle": 65.55 }, + { "time": 0.7666, "angle": 64.93 }, + { "time": 0.9333, "angle": 41.08 }, + { "time": 1.0666, "angle": 66.25 }, + { "time": 1.3666, "angle": 25.97 } + ], + "translate": [ + { "time": 0, "x": 5.74, "y": 0.61 }, + { "time": 0.2333, "x": 4.79, "y": 1.79 }, + { "time": 0.3333, "x": 6.05, "y": -4.55 }, + { "time": 0.9333, "x": 4.79, "y": 1.79, "curve": "stepped" }, + { "time": 1.0666, "x": 4.79, "y": 1.79 }, + { "time": 1.3666, "x": 5.74, "y": 0.61 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "right lower leg": { + "rotate": [ + { "time": 0, "angle": -27.46 }, + { "time": 0.2333, "angle": -64.03 }, + { "time": 0.4, "angle": -48.36 }, + { "time": 0.5666, "angle": -76.86 }, + { "time": 0.7666, "angle": -26.89 }, + { "time": 0.9, "angle": -18.97 }, + { "time": 0.9333, "angle": -14.18 }, + { "time": 1.0666, "angle": -80.45 }, + { "time": 1.3666, "angle": -27.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "right foot": { + "rotate": [ + { "time": 0, "angle": 1.08 }, + { "time": 0.2333, "angle": 16.02 }, + { "time": 0.3, "angle": 12.94 }, + { "time": 0.3333, "angle": 15.16 }, + { "time": 0.4, "angle": -14.7 }, + { "time": 0.4333, "angle": -12.85 }, + { "time": 0.4666, "angle": -19.18 }, + { "time": 0.5666, "angle": -15.82 }, + { "time": 0.6, "angle": -3.59 }, + { "time": 0.7666, "angle": -3.56 }, + { "time": 0.9333, "angle": 1.86 }, + { "time": 1.0666, "angle": 16.02 }, + { "time": 1.3666, "angle": 1.08 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -13.35 }, + { "time": 0.2333, "angle": -48.95 }, + { "time": 0.4333, "angle": -35.77 }, + { "time": 0.6, "angle": -4.59 }, + { "time": 0.7666, "angle": 14.61 }, + { "time": 0.9333, "angle": 15.74 }, + { "time": 1.0666, "angle": -32.44 }, + { "time": 1.3666, "angle": -13.35 } + ], + "translate": [ + { "time": 0, "x": -3.67, "y": 1.68, "curve": "stepped" }, + { "time": 0.9333, "x": -3.67, "y": 1.68, "curve": "stepped" }, + { "time": 1.3666, "x": -3.67, "y": 1.68 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 12.78 }, + { "time": 0.2333, "angle": 16.46 }, + { "time": 0.4, "angle": 26.49 }, + { "time": 0.6, "angle": 15.51 }, + { "time": 0.7666, "angle": 1.34 }, + { "time": 0.9333, "angle": 2.35 }, + { "time": 1.0666, "angle": 6.08 }, + { "time": 1.3, "angle": 21.23 }, + { "time": 1.3666, "angle": 12.78 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 5.19 }, + { "time": 0.2333, "angle": 20.27 }, + { "time": 0.4, "angle": 15.27 }, + { "time": 0.6, "angle": -24.69 }, + { "time": 0.7666, "angle": -11.02 }, + { "time": 0.9333, "angle": -24.38 }, + { "time": 1.0666, "angle": 11.99 }, + { "time": 1.3, "angle": 4.86 }, + { "time": 1.3666, "angle": 5.19 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "left shoulder": { + "rotate": [ + { + "time": 0, + "angle": 0.05, + "curve": [ 0, 0, 0.62, 1 ] + }, + { + "time": 0.2333, + "angle": 279.66, + "curve": [ 0.218, 0.67, 0.66, 0.99 ] + }, + { + "time": 0.5, + "angle": 62.27, + "curve": [ 0.462, 0, 0.764, 0.58 ] + }, + { "time": 0.9333, "angle": 28.91 }, + { "time": 1.0666, "angle": -8.62 }, + { "time": 1.1666, "angle": -18.43 }, + { "time": 1.3666, "angle": 0.05 } + ], + "translate": [ + { "time": 0, "x": -1.76, "y": 0.56, "curve": "stepped" }, + { "time": 0.9333, "x": -1.76, "y": 0.56, "curve": "stepped" }, + { "time": 1.3666, "x": -1.76, "y": 0.56 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "left hand": { + "rotate": [ + { "time": 0, "angle": 11.58, "curve": "stepped" }, + { "time": 0.9333, "angle": 11.58, "curve": "stepped" }, + { "time": 1.3666, "angle": 11.58 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "left arm": { + "rotate": [ + { "time": 0, "angle": 0.51 }, + { "time": 0.4333, "angle": 12.82 }, + { "time": 0.6, "angle": 47.55 }, + { "time": 0.9333, "angle": 12.82 }, + { "time": 1.1666, "angle": -6.5 }, + { "time": 1.3666, "angle": 0.51 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "right shoulder": { + "rotate": [ + { + "time": 0, + "angle": 43.82, + "curve": [ 0, 0, 0.62, 1 ] + }, + { + "time": 0.2333, + "angle": -8.74, + "curve": [ 0.304, 0.58, 0.709, 0.97 ] + }, + { + "time": 0.5333, + "angle": -208.02, + "curve": [ 0.462, 0, 0.764, 0.58 ] + }, + { "time": 0.9333, "angle": -246.72 }, + { "time": 1.0666, "angle": -307.13 }, + { "time": 1.1666, "angle": 37.15 }, + { "time": 1.3666, "angle": 43.82 } + ], + "translate": [ + { "time": 0, "x": -7.84, "y": 7.19, "curve": "stepped" }, + { "time": 0.9333, "x": -7.84, "y": 7.19, "curve": "stepped" }, + { "time": 1.3666, "x": -7.84, "y": 7.19 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "right arm": { + "rotate": [ + { "time": 0, "angle": -4.02 }, + { "time": 0.6, "angle": 17.5 }, + { "time": 0.9333, "angle": -4.02 }, + { "time": 1.1666, "angle": -16.72 }, + { "time": 1.3666, "angle": -4.02 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "right hand": { + "rotate": [ + { "time": 0, "angle": 22.92, "curve": "stepped" }, + { "time": 0.9333, "angle": 22.92, "curve": "stepped" }, + { "time": 1.3666, "angle": 22.92 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.3666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + }, + "root": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4333, "angle": -14.52 }, + { "time": 0.8, "angle": 9.86 }, + { "time": 1.3666, "angle": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.3666, "x": 1, "y": 1 } + ] + } + } + }, + "walk": { + "bones": { + "left upper leg": { + "rotate": [ + { "time": 0, "angle": -26.55 }, + { "time": 0.1333, "angle": -8.78 }, + { "time": 0.2666, "angle": 9.51 }, + { "time": 0.4, "angle": 30.74 }, + { "time": 0.5333, "angle": 25.33 }, + { "time": 0.6666, "angle": 26.11 }, + { "time": 0.8, "angle": -7.7 }, + { "time": 0.9333, "angle": -21.19 }, + { "time": 1.0666, "angle": -26.55 } + ], + "translate": [ + { "time": 0, "x": -3, "y": -2.25 }, + { "time": 0.4, "x": -2.18, "y": -2.25 }, + { "time": 1.0666, "x": -3, "y": -2.25 } + ] + }, + "right upper leg": { + "rotate": [ + { "time": 0, "angle": 42.45 }, + { "time": 0.1333, "angle": 52.1 }, + { "time": 0.2666, "angle": 5.96 }, + { "time": 0.5333, "angle": -16.93 }, + { "time": 0.6666, "angle": 1.89 }, + { + "time": 0.8, + "angle": 28.06, + "curve": [ 0.462, 0.11, 1, 1 ] + }, + { + "time": 0.9333, + "angle": 58.68, + "curve": [ 0.5, 0.02, 1, 1 ] + }, + { "time": 1.0666, "angle": 42.45 } + ], + "translate": [ + { "time": 0, "x": 8.11, "y": -2.36 }, + { "time": 0.1333, "x": 10.03, "y": -2.56 }, + { "time": 0.4, "x": 2.76, "y": -2.97 }, + { "time": 0.5333, "x": 2.76, "y": -2.81 }, + { "time": 0.9333, "x": 8.67, "y": -2.54 }, + { "time": 1.0666, "x": 8.11, "y": -2.36 } + ] + }, + "left lower leg": { + "rotate": [ + { "time": 0, "angle": -10.21 }, + { "time": 0.1333, "angle": -55.64 }, + { "time": 0.2666, "angle": -68.12 }, + { "time": 0.5333, "angle": 5.11 }, + { "time": 0.6666, "angle": -28.29 }, + { "time": 0.8, "angle": 4.08 }, + { "time": 0.9333, "angle": 3.53 }, + { "time": 1.0666, "angle": -10.21 } + ] + }, + "left foot": { + "rotate": [ + { "time": 0, "angle": -3.69 }, + { "time": 0.1333, "angle": -10.42 }, + { "time": 0.2666, "angle": -17.14 }, + { "time": 0.4, "angle": -2.83 }, + { "time": 0.5333, "angle": -3.87 }, + { "time": 0.6666, "angle": 2.78 }, + { "time": 0.8, "angle": 1.68 }, + { "time": 0.9333, "angle": -8.54 }, + { "time": 1.0666, "angle": -3.69 } + ] + }, + "right shoulder": { + "rotate": [ + { + "time": 0, + "angle": 20.89, + "curve": [ 0.264, 0, 0.75, 1 ] + }, + { + "time": 0.1333, + "angle": 3.72, + "curve": [ 0.272, 0, 0.841, 1 ] + }, + { "time": 0.6666, "angle": -278.28 }, + { "time": 1.0666, "angle": 20.89 } + ], + "translate": [ + { "time": 0, "x": -7.84, "y": 7.19 }, + { "time": 0.1333, "x": -6.36, "y": 6.42 }, + { "time": 0.6666, "x": -11.07, "y": 5.25 }, + { "time": 1.0666, "x": -7.84, "y": 7.19 } + ] + }, + "right arm": { + "rotate": [ + { + "time": 0, + "angle": -4.02, + "curve": [ 0.267, 0, 0.804, 0.99 ] + }, + { + "time": 0.1333, + "angle": -13.99, + "curve": [ 0.341, 0, 1, 1 ] + }, + { + "time": 0.6666, + "angle": 36.54, + "curve": [ 0.307, 0, 0.787, 0.99 ] + }, + { "time": 1.0666, "angle": -4.02 } + ] + }, + "right hand": { + "rotate": [ + { "time": 0, "angle": 22.92 }, + { "time": 0.4, "angle": -8.97 }, + { "time": 0.6666, "angle": 0.51 }, + { "time": 1.0666, "angle": 22.92 } + ] + }, + "left shoulder": { + "rotate": [ + { "time": 0, "angle": -1.47 }, + { "time": 0.1333, "angle": 13.6 }, + { "time": 0.6666, "angle": 280.74 }, + { "time": 1.0666, "angle": -1.47 } + ], + "translate": [ + { "time": 0, "x": -1.76, "y": 0.56 }, + { "time": 0.6666, "x": -2.47, "y": 8.14 }, + { "time": 1.0666, "x": -1.76, "y": 0.56 } + ] + }, + "left hand": { + "rotate": [ + { + "time": 0, + "angle": 11.58, + "curve": [ 0.169, 0.37, 0.632, 1.55 ] + }, + { + "time": 0.1333, + "angle": 28.13, + "curve": [ 0.692, 0, 0.692, 0.99 ] + }, + { + "time": 0.6666, + "angle": -27.42, + "curve": [ 0.117, 0.41, 0.738, 1.76 ] + }, + { "time": 0.8, "angle": -36.32 }, + { "time": 1.0666, "angle": 11.58 } + ] + }, + "left arm": { + "rotate": [ + { "time": 0, "angle": -8.27 }, + { "time": 0.1333, "angle": 18.43 }, + { "time": 0.6666, "angle": 0.88 }, + { "time": 1.0666, "angle": -8.27 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -10.28 }, + { + "time": 0.1333, + "angle": -15.38, + "curve": [ 0.545, 0, 1, 1 ] + }, + { + "time": 0.4, + "angle": -9.78, + "curve": [ 0.58, 0.17, 1, 1 ] + }, + { "time": 0.6666, "angle": -15.75 }, + { "time": 0.9333, "angle": -7.06 }, + { "time": 1.0666, "angle": -10.28 } + ], + "translate": [ + { "time": 0, "x": -3.67, "y": 1.68 }, + { "time": 0.1333, "x": -3.67, "y": 0.68 }, + { "time": 0.4, "x": -3.67, "y": 1.97 }, + { "time": 0.6666, "x": -3.67, "y": -0.14 }, + { "time": 1.0666, "x": -3.67, "y": 1.68 } + ] + }, + "right foot": { + "rotate": [ + { "time": 0, "angle": -5.25 }, + { "time": 0.2666, "angle": -4.08 }, + { "time": 0.4, "angle": -6.45 }, + { "time": 0.5333, "angle": -5.39 }, + { "time": 0.8, "angle": -11.68 }, + { "time": 0.9333, "angle": 0.46 }, + { "time": 1.0666, "angle": -5.25 } + ] + }, + "right lower leg": { + "rotate": [ + { "time": 0, "angle": -3.39 }, + { "time": 0.1333, "angle": -45.53 }, + { "time": 0.2666, "angle": -2.59 }, + { "time": 0.5333, "angle": -19.53 }, + { "time": 0.6666, "angle": -64.8 }, + { + "time": 0.8, + "angle": -82.56, + "curve": [ 0.557, 0.18, 1, 1 ] + }, + { "time": 1.0666, "angle": -3.39 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { + "time": 0.1333, + "x": 0, + "y": -7.61, + "curve": [ 0.272, 0.86, 1, 1 ] + }, + { "time": 0.4, "x": 0, "y": 8.7 }, + { "time": 0.5333, "x": 0, "y": -0.41 }, + { + "time": 0.6666, + "x": 0, + "y": -7.05, + "curve": [ 0.235, 0.89, 1, 1 ] + }, + { "time": 0.8, "x": 0, "y": 2.92 }, + { "time": 0.9333, "x": 0, "y": 6.78 }, + { "time": 1.0666, "x": 0, "y": 0 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 3.6 }, + { "time": 0.1333, "angle": 17.49 }, + { "time": 0.2666, "angle": 6.1 }, + { "time": 0.4, "angle": 3.45 }, + { "time": 0.5333, "angle": 5.17 }, + { "time": 0.6666, "angle": 18.36 }, + { "time": 0.8, "angle": 6.09 }, + { "time": 0.9333, "angle": 2.28 }, + { "time": 1.0666, "angle": 3.6 } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 3.6, + "curve": [ 0, 0, 0.704, 1.61 ] + }, + { "time": 0.1666, "angle": -0.2 }, + { "time": 0.2666, "angle": 6.1 }, + { "time": 0.4, "angle": 3.45 }, + { + "time": 0.5333, + "angle": 5.17, + "curve": [ 0, 0, 0.704, 1.61 ] + }, + { "time": 0.7, "angle": 1.1 }, + { "time": 0.8, "angle": 6.09 }, + { "time": 0.9333, "angle": 2.28 }, + { "time": 1.0666, "angle": 3.6 } + ] + }, + "root": { + "rotate": [ + { "time": 0, "angle": 0 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old.skel b/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old.skel new file mode 100644 index 000000000..c04665a2a Binary files /dev/null and b/spine-libgdx/spine-libgdx-tests/assets/spineboy-old/spineboy-old.skel differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-hover.json b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-hover.json new file mode 100644 index 000000000..97c861981 --- /dev/null +++ b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-hover.json @@ -0,0 +1,947 @@ +{ +"skeleton": { "hash": "kLwY39chXP87A04aUX8jh92jUjs", "spine": "3.4.00", "width": 511.47, "height": 739.87, "images": "./images/" }, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "x": -49.89, "y": 290.95 }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "rotation": -72.54, "x": 8.91, "y": -5.62, "color": "ff000dff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.83, "x": 86.1, "y": -1.32, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 51.58, "rotation": 45.77, "x": 121.45, "y": -0.75, "color": "ff000dff" }, + { "name": "back_foot_tip", "parent": "rear_foot", "length": 50.3, "rotation": 46.62, "x": 51.16, "y": 0.23, "color": "ff000dff" }, + { "name": "hoverboard", "parent": "root", "length": 72.32, "x": 9.9, "y": 57.05 }, + { "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.96, "color": "ff3f00ff" }, + { "name": "front_ankle_ik", "parent": "front_foot_ik", "x": -28.39, "y": 29.06, "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.32, "color": "00ff04ff" }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.57, + "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.19, "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.26, "x": 128.75, "y": -0.33, "color": "00ff04ff" }, + { + "name": "front_foot_tip", + "parent": "front_foot", + "length": 56.02, + "rotation": 44.3, + "x": 41.42, + "y": -0.08, + "color": "00ff04ff" + }, + { "name": "front_toe_ik", "parent": "hoverboard", "rotation": -0.97, "x": -44.59, "y": 21.98, "color": "ff3f00ff" }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -153.6, "x": 92.35, "y": -19.21, "color": "ff000dff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "rotation": 43.56, "x": 51.35, "color": "ff000dff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "rotation": 17.61, "x": 34.41, "y": -0.45, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.04, "y": 52.13, "color": "ff000dff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" }, + { "name": "head", "parent": "neck", "length": 131.78, "rotation": 51.9, "x": 27.66, "y": -0.25, "color": "e0da19ff" }, + { "name": "hair1", "parent": "head", "length": 47.22, "rotation": -49.1, "x": 149.82, "y": -59.77, "color": "e0da19ff" }, + { "name": "hair2", "parent": "hair1", "length": 55.56, "rotation": 50.41, "x": 47.22, "y": 0.18, "color": "e0da19ff" }, + { "name": "hair3", "parent": "head", "length": 62.22, "rotation": -32.16, "x": 164.13, "y": 3.68, "color": "e0da19ff" }, + { "name": "hair4", "parent": "hair3", "length": 80.28, "rotation": 83.7, "x": 62.22, "y": -0.03, "color": "e0da19ff" }, + { + "name": "hoverboard_thruster_front", + "parent": "hoverboard", + "rotation": -29.03, + "x": 95.77, + "y": -2.7, + "inheritRotation": false + }, + { + "name": "hoverboard_thruster_rear", + "parent": "hoverboard", + "rotation": -29.03, + "x": -76.46, + "y": -5.11, + "inheritRotation": false + }, + { "name": "hoverglow_front", "parent": "hoverboard_thruster_front", "x": -1.89, "y": -37.78 }, + { "name": "hoverglow_rear", "parent": "hoverboard_thruster_rear", "x": 0.95, "y": -35.66 }, + { "name": "rear_foot_ik", "parent": "hoverboard", "rotation": -0.97, "x": 83.75, "y": 21.71, "color": "ff3f00ff" }, + { "name": "rear_ankle_ik", "parent": "rear_foot_ik", "x": -33.9, "y": 37.33, "color": "ff3f00ff" }, + { "name": "rear_toe_ik", "parent": "hoverboard", "rotation": -0.97, "x": 135.05, "y": 20.47, "color": "ff3f00ff" } +], +"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", + "bones": [ "front_thigh", "front_shin" ], + "target": "front_ankle_ik", + "bendPositive": false + }, + { + "name": "front_foot_ik", + "bones": [ "front_foot" ], + "target": "front_foot_ik" + }, + { + "name": "front_toe_ik", + "bones": [ "front_foot_tip" ], + "target": "front_toe_ik" + }, + { + "name": "rear_ankle_ik", + "bones": [ "rear_thigh", "rear_shin" ], + "target": "rear_ankle_ik", + "bendPositive": false + }, + { + "name": "rear_foot_ik", + "bones": [ "rear_foot" ], + "target": "rear_foot_ik" + }, + { + "name": "rear_toe_ik", + "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.16, -86.8, 28.32, 0.92, 112.27, 30.44, 143.11, -57.28 ], + "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.03, "y": -1.67, "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.23421, 0.62256, 0.30335, 0.65008, 0.37035, 0.67637, 0.38403, 0.72068, 0.40709, 0.76264, 0.42894, 1, 0.70375, 1, 1, 0.65517, 1, 0.3644, 1, 0, 1, 0, 0.39196, 0, 0, 0.17845, 0, 0.49795, 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, 17, 18.17, 41.57, 0.72255, 18, 12.46, 46.04, 0.27744, 2, 17, 24.08, 40.75, 0.57406, 18, 16.12, 41.34, 0.42592, 2, 17, 29.8, 39.97, 0.47663, 18, 19.67, 36.77, 0.52336, 2, 17, 32.8, 41.66, 0.37452, 18, 22.99, 35.89, 0.62547, 2, 17, 37.86, 44.51, 0.24772, 18, 28.6, 34.4, 0.75227, 2, 17, 42.65, 47.21, 0.17783, 18, 33.91, 32.98, 0.82216, 1, 18, 64.15, 14.56, 1, 1, 18, 64.51, -5.87, 1, 1, 18, 21.07, -6.63, 1, 2, 17, 35.38, -16.16, 0.99998, 18, -15.54, -7.28, 1.0E-5, 1, 17, 3.1, -48.81, 1, 1, 17, -26.72, -19.31, 1, 1, 17, -45.95, -0.29, 1, 1, 17, -30.14, 15.69, 1, 2, 17, -1.84, 44.31, 0.91511, 18, 0.05, 61.98, 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.24, "rotation": 45.32, "width": 128, "height": 70 }, + "front_foot_bend2": { "x": 8.16, "y": 19.57, "rotation": 45.32, "width": 108, "height": 93 } + }, + "front_shin": { + "front_shin": { "x": 60.92, "y": -3.9, "rotation": 96.59, "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.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 } + }, + "goggles": { + "goggles": { + "type": "mesh", + "uvs": [ 0.53653, 0.04113, 0.72921, 0.16034, 0.91666, 0.33222, 0.97046, 0.31329, 1, 0.48053, 0.95755, 0.57329, 0.88825, 0.63279, 0.86877, 0.78962, 0.77403, 0.86749, 0.72628, 1, 0.60713, 0.93862, 0.496, 0.88138, 0.41557, 0.75026, 0.32547, 0.70084, 0.2782, 0.58256, 0.17209, 0.63281, 0.17228, 0.75071, 0.1078, 0.79897, 0, 0.32304, 0, 0.12475, 0.07372, 0.07343, 0.15423, 0.10733, 0.23165, 0.13993, 0.30313, 0.02256, 0.34802, 0, 0.42978, 0.69183, 0.39475, 0.51041, 0.39488, 0.31511, 0.45878, 0.23197, 0.56501, 0.28108, 0.6996, 0.39216, 0.82039, 0.54202, 0.85737, 0.62342, 0.91107, 0.51406, 0.72638, 0.32146, 0.58762, 0.19609, 0.48074, 0.11268, 0.37822, 0.05501, 0.32869, 0.17866, 0.31899, 0.30499, 0.36035, 0.53798, 0.40327, 0.70072, 0.30058, 0.55837, 0.21956, 0.2815, 0.09963, 0.28942, 0.56862, 0.4368, 0.4911, 0.37156, 0.51184, 0.52091, 0.67018, 0.59302, 0.7619, 0.68574, 0.73296, 0.43354 ], + "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.81, 170.09, -31.19, 159.41, -86.8, 167.03, -99, 143.39, -115.48, 125.2, -110.14, 109.88, -96.35, 83.64, -100.19, 63.25, -81.15, 38.37, -76.69, 37.66, -43.98, 37, -13.47, 50.57, 13.54, 50.51, 38.45, 64.94, 56.6, 47.89, 79.94, 29.45, 73.42, 16.31, 86.63, 81.5, 139.38, 112.55, 150.28, 126.97, 134.97, 128.63, 113.28, 130.22, 92.43, 154.78, 81.29, 162.21, 71.48, 60.96, 13.26, 86.33, 31.87, 116.92, 42.6, 135.47, 31.44, 136.98, 2.58, 131.23, -36.66, 118.22, -74.65, 108.68, -88.23, 130.45, -95.43, 144.62, -39.36, 152.24, 1.69, 156.05, 32.59, 156.21, 61.01, 132.56, 66.4, 111.94, 61.83, 79.03, 38.83, 57.27, 19.29, 70.67, 52.42, 107.01, 87.61, 95.39, 116.7, 112.91, -6.87, 116.41, 15.8, 94.82, 2.47, 97.23, -40.47, 90.66, -68.16, 127.64, -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.4, "rotation": 60.82, "width": 210, "height": 203 } + }, + "head": { + "head": { + "type": "mesh", + "uvs": [ 0.75918, 0.06107, 0.88392, 0.17892, 0.90174, 0.30856, 0.94223, 0.1966, 1, 0.26584, 1, 0.42199, 0.95863, 0.46992, 0.92118, 0.51333, 0.85957, 0.53469, 0.78388, 0.65605, 0.74384, 0.74838, 0.85115, 0.75151, 0.84828, 0.82563, 0.8178, 0.85367, 0.75598, 0.85906, 0.76236, 0.90467, 0.65875, 1, 0.38336, 1, 0.18579, 0.85403, 0.1274, 0.8109, 0.06024, 0.69209, 0, 0.58551, 0, 0.41021, 0.08529, 0.20691, 0.24243, 0.14504, 0.49999, 0.14208, 0.50322, 0.07433, 0.41738, 0, 0.57612, 0, 0.85059, 0.36086, 0.73431, 0.43206, 0.6848, 0.3127, 0.72164, 0.16717, 0.55931, 0.04153, 0.44763, 0.22894, 0.23925, 0.26559, 0.71271, 0.44035, 0.56992, 0.38299, 0.41678, 0.3351, 0.29299, 0.31496, 0.70801, 0.44501, 0.56676, 0.38976, 0.4152, 0.34416, 0.28753, 0.33017, 0.88988, 0.50176, 0.30388, 0.73462, 0.2646, 0.65674, 0.21414, 0.61583, 0.14612, 0.62193, 0.10315, 0.66636, 0.10357, 0.72556, 0.14505, 0.79163, 0.20263, 0.81355, 0.27872, 0.80158, 0.34946, 0.7376, 0.23073, 0.57072, 0.08878, 0.60706, 0.2946, 0.8129, 0.73005, 0.87883, 0.69804, 0.87348, 0.66165, 0.79681 ], + "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, 29, 41.97, -41.79, 1, 3, 27, 73.46, 27.54, 0.18925, 29, -5.75, -51.7, 0.72418, 28, 112.98, -11.43, 0.08656, 3, 27, 38.23, 10.98, 0.84284, 29, -41.00999, -35.22, 0.09705, 28, 92.72, -44.67, 0.0601, 1, 27, 73.35, 10.89, 1, 1, 27, 58.59, -10.38, 1, 2, 27, 14.35, -24.8, 0.89742, 26, 75.49, -4.55, 0.10257, 2, 27, -2.69, -18.57, 0.58265, 26, 59.82, -13.72, 0.41734, 1, 25, 163.06, -108.68, 1, 1, 25, 151.52, -95.04, 1, 1, 25, 110.6, -87.69, 1, 1, 25, 81.05, -86.58, 1, 1, 25, 89.81, -114.32, 1, 1, 25, 68.72, -120.91, 1, 1, 25, 58.1, -115.89, 1, 1, 25, 51.03, -100.62, 1, 1, 25, 38.78, -106.76, 1, 1, 25, 2.67, -89.69, 1, 1, 25, -22.07, -19.29, 1, 1, 25, 1.19, 45.62, 1, 1, 25, 8.07, 64.81, 1, 1, 25, 35.43, 93.72, 1, 1, 25, 59.98, 119.66, 1, 1, 25, 109.25, 136.98, 1, 1, 25, 174.07, 135.27, 1, 2, 28, -16.79, 104.63, 0.16236, 25, 205.58, 101.22, 0.83763, 2, 29, 58.93, 30.5, 0.60735, 28, 38.37, 61.89, 0.39264, 2, 29, 75.55, 19, 0.94502, 28, 51.62, 77.15, 0.05497, 1, 29, 106.69, 26.9, 1, 1, 29, 83.78, -9.5, 1, 4, 27, 19.12, 19.33, 0.58067, 29, -46.82, -15.19, 0.07453, 28, 72.17, -48.24, 0.14877, 26, 44.52, 27.24, 0.19601, 2, 28, 34.31, -45.24, 0.20796, 26, 7.42, 19.08, 0.79203, 1, 28, 45.94, -9.06, 1, 1, 29, 20.62, -16.35, 1, 1, 29, 75.73, 0.94, 1, 3, 29, 44.58, 56.29, 0.14949, 28, 11.16, 50.46, 0.3683, 25, 200.44, 40.47, 0.4822, 1, 25, 171.41, 90.11, 1, 2, 28, 28.19, -43.54, 0.20796, 26, 1.07, 18.93, 0.79203, 3, 28, 8.54, -6.08, 0.75382, 26, -28.63, 49.03, 0.13133, 25, 168.13, -6.01, 0.11484, 2, 28, -15.06, 30.9, 0.72898, 25, 167.82, 37.86, 0.27101, 1, 25, 162.36, 71.5, 1, 1, 25, 163.1, -47.44, 1, 1, 25, 165.94, -5.87, 1, 1, 25, 165.14, 37.37, 1, 1, 25, 157.6, 71.39, 1, 1, 25, 163.5, -99.53, 1, 1, 25, 45.37, 27.24, 1, 1, 25, 63.73, 44.98, 1, 1, 25, 70.69, 61.92, 1, 1, 25, 62.87, 78.69, 1, 1, 25, 46.52, 85.3, 1, 1, 25, 29.92, 79.33, 1, 1, 25, 15.07, 62.21, 1, 1, 25, 14.09, 45.32, 1, 1, 25, 24.29, 27.05, 1, 1, 25, 48.63, 15.29, 1, 1, 25, 84.87, 62.14, 1, 1, 25, 61.9, 94.83, 1, 1, 25, 22.54, 21.87, 1, 1, 25, 43.14, -95.94, 1, 1, 25, 41.77, -87.23, 1, 1, 25, 60.05, -70.35, 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.14, -70.3, 40.8, -118.07, 257.77, -115.61, 285.16, 57.18, 120.77, 164.95, -5.06, 76.94 ] + } + }, + "hoverboard_board": { + "hoverboard_board": { "x": -11.6, "y": 25.64, "rotation": 0.17, "width": 492, "height": 152 } + }, + "hoverboard_thruster_front": { + "hoverboard_thruster": { "y": -7.08, "width": 60, "height": 64 } + }, + "hoverboard_thruster_rear": { + "hoverboard_thruster": { "x": 1.08, "y": -6.29, "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.39, "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.28, -85.88, -19.56, 1.84, 36.09, 21.41, 66.93, -66.31 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + }, + "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.62, "width": 93, "height": 59 }, + "mouth_smile": { "x": 23.68, "y": -32.23, "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.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": { + "type": "mesh", + "uvs": [ 0.48368, 0.13869, 0.5199, 0.21423, 0.55099, 0.27906, 0.58837, 0.29815, 0.63488, 0.32191, 0.77342, 0.39266, 1, 0.73346, 1, 1, 0.59434, 1, 0.3116, 1, 0, 1, 0, 0.41396, 0.1363, 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, 4, 10.45, 29.41, 0.88824, 5, -6.74, 49.62, 0.11175, 2, 4, 16.54, 29.27, 0.83163, 5, -2.65, 45.08, 0.16836, 2, 4, 21.79, 29.15, 0.78305, 5, 0.85, 41.18999, 0.21694, 2, 4, 25.53, 31.43, 0.67844, 5, 5.07, 40.04, 0.32155, 2, 4, 30.17, 34.27, 0.54832, 5, 10.33, 38.61, 0.45167, 2, 4, 44.01, 42.72, 0.16068, 5, 25.97, 34.36, 0.83929, 1, 5, 51.56, 13.89, 1, 1, 5, 51.54, -2.08, 1, 2, 4, 56.58, 2.98, 0.02959, 5, 5.71, -2.05, 0.9704, 1, 4, 34.63, -20.20999, 0.99999, 1, 4, 10.43, -45.8, 0.99999, 1, 4, -15.1, -21.64, 1, 1, 4, -22.56, 6.61, 0.99999, 2, 4, -0.76, 29.67, 0.99219, 5, -14.25, 57.94, 0.0078 ], + "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.82, "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.08, "rotation": 89.32, "width": 47, "height": 87 } + }, + "torso": { + "torso": { + "type": "mesh", + "uvs": [ 0.62509, 0.12672, 1, 0.2636, 1, 0.2887, 1, 0.66021, 1, 0.68245, 0.92323, 0.69258, 0.95115, 0.84965, 0.77123, 1, 0.49654, 1, 0.27181, 1, 0.13842, 0.77196, 0, 0.45614, 0, 0.19436, 0.14462, 0, 0.27801, 0, 0.72524, 0.27835, 0.76091, 0.46216, 0.84888, 0.67962, 0.68257, 0.63248, 0.53985, 0.38469, 0.25443, 0.32169, 0.30061, 0.55172, 0.39552, 0.79506, 0.26389, 0.17006, 0.52409, 0.18673 ], + "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.62, -10.38, 102.17, -45.07, 97.66, -44.71, 31, -39.45, 27.01, -39.13, 25.78, -31.49, -2.60999, -31.99, -28.2, -12.29, -26.08, 14.54, -24.34, 36.5, 17.59, 46.3, 75.33, 55.34, 122.31, 51.63, 156.07, 34.75, 155.03, 21.72, 101.64, -18.02, 68.37, -18.9, 28.68, -24.41, 38.41, -8.83, 83.99, 1.59, 97.5, 28.58, 55.86, 27.33, 11.47, 21.51, 124.63, 25.51, 119.63, 0.32 ], + "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.7, + "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.7, + "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.7, "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.9, "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.9, "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.9, "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.7, "angle": 20.53 }, + { "time": 0.8666, "angle": 11.84 }, + { "time": 1.0333, "angle": 6.65 }, + { "time": 1.1333, "angle": 8.52 }, + { "time": 1.3, "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.7, + "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.7, + "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-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-hover.skel b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-hover.skel new file mode 100644 index 000000000..bc96d5ca1 Binary files /dev/null and b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-hover.skel differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-mesh.json b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-mesh.json new file mode 100644 index 000000000..77b40ee63 --- /dev/null +++ b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-mesh.json @@ -0,0 +1,990 @@ +{ +"skeleton": { "hash": "VINkfhwM1ewwp32eV9+fiLvUsH0", "spine": "3.4.00", "width": 0, "height": 0, "images": "./images/" }, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "y": 247.26 }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "rotation": -72.54, "x": 8.91, "y": -5.62, "color": "ff000dff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.83, "x": 86.1, "y": -1.32, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 51.58, "rotation": 45.77, "x": 121.45, "y": -0.75, "color": "ff000dff" }, + { + "name": "back_foot_tip", + "parent": "rear_foot", + "length": 50.3, + "rotation": -0.85, + "x": 51.16, + "y": 0.23, + "inheritRotation": false, + "color": "ff000dff" + }, + { "name": "front_foot_ik", "parent": "root", "x": -13.52, "y": 0.04, "color": "ff3f00ff" }, + { "name": "front_ankle_ik", "parent": "front_foot_ik", "x": -28.39, "y": 29.06, "color": "ff3f00ff" }, + { "name": "torso", "parent": "hip", "length": 127.55, "rotation": 103.82, "x": -1.61, "y": 4.9, "color": "e0da19ff" }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "rotation": 168.37, "x": 103.75, "y": 19.32, "color": "00ff04ff" }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.57, + "rotation": 18.29, + "x": 68.8, + "y": -0.68, + "color": "00ff04ff" + }, + { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "rotation": 12.43, "x": 40.56, "y": 0.19, "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.76, + "rotation": -2.21, + "x": 78.69, + "y": 1.6, + "inheritScale": false, + "color": "00ff04ff" + }, + { "name": "front_foot", "parent": "front_shin", "length": 41, "rotation": 51.26, "x": 128.75, "y": -0.33, "color": "00ff04ff" }, + { + "name": "front_foot_tip", + "parent": "front_foot", + "length": 56.02, + "rotation": -1.67, + "x": 41.42, + "y": -0.08, + "inheritRotation": false, + "color": "00ff04ff" + }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -169.55, "x": 92.35, "y": -19.22, "color": "ff000dff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "rotation": 23.15, "x": 51.35, "color": "ff000dff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "rotation": 5.34, "x": 34.42, "y": -0.45, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.04, "y": 52.13, "color": "ff000dff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" }, + { "name": "head", "parent": "neck", "length": 131.79, "rotation": 23.18, "x": 27.66, "y": -0.25, "color": "e0da19ff" }, + { "name": "hair1", "parent": "head", "length": 47.22, "rotation": -49.1, "x": 149.82, "y": -59.77, "color": "e0da19ff" }, + { "name": "hair2", "parent": "hair1", "length": 55.56, "rotation": 50.41, "x": 47.22, "y": 0.18, "color": "e0da19ff" }, + { "name": "hair3", "parent": "head", "length": 62.22, "rotation": -32.16, "x": 164.13, "y": 3.68, "color": "e0da19ff" }, + { "name": "hair4", "parent": "hair3", "length": 80.28, "rotation": 83.7, "x": 62.22, "y": -0.03, "color": "e0da19ff" }, + { "name": "rear_foot_ik", "parent": "root", "x": 61.9, "y": 0.42, "color": "ff3f00ff" }, + { "name": "rear_ankle_ik", "parent": "rear_foot_ik", "x": -33.9, "y": 37.33, "color": "ff3f00ff" } +], +"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": "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_grind" }, + { "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" } +], +"ik": [ + { + "name": "front_ankle_ik", + "bones": [ "front_thigh", "front_shin" ], + "target": "front_ankle_ik", + "bendPositive": false + }, + { + "name": "front_foot_ik", + "bones": [ "front_foot" ], + "target": "front_foot_ik" + }, + { + "name": "rear_ankle_ik", + "bones": [ "rear_thigh", "rear_shin" ], + "target": "rear_ankle_ik", + "bendPositive": false + }, + { + "name": "rear_foot_ik", + "bones": [ "rear_foot" ], + "target": "rear_foot_ik" + } +], +"skins": { + "default": { + "eye": { + "eye_indifferent": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 59.16, -86.8, 28.32, 0.92, 112.27, 30.44, 143.11, -57.28 ], + "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.63, "width": 93, "height": 89 } + }, + "front_bracer": { + "front_bracer": { "x": 12.03, "y": -1.67, "rotation": 79.59, "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.59417, 0.23421, 0.62257, 0.30335, 0.65009, 0.37035, 0.67637, 0.38403, 0.72068, 0.40709, 0.76264, 0.42894, 1, 0.70375, 1, 1, 0.65517, 1, 0.3644, 1, 0, 1, 0, 0.39196, 0, 0, 0.17845, 0, 0.49795, 0 ], + "triangles": [ 8, 6, 7, 8, 5, 6, 8, 4, 5, 4, 8, 3, 8, 9, 3, 9, 2, 3, 2, 10, 1, 2, 9, 10, 1, 11, 0, 0, 11, 13, 13, 14, 0, 11, 1, 10, 11, 12, 13 ], + "vertices": [ 2, 14, 18.17, 41.57, 0.72255, 15, 12.46, 46.04, 0.27744, 2, 14, 24.08, 40.75999, 0.57406, 15, 16.12, 41.34, 0.42592, 2, 14, 29.8, 39.97, 0.47663, 15, 19.67, 36.77, 0.52336, 2, 14, 32.8, 41.66, 0.37452, 15, 22.99, 35.89, 0.62547, 2, 14, 37.86, 44.51, 0.24772, 15, 28.6, 34.4, 0.75227, 2, 14, 42.65, 47.21, 0.17783, 15, 33.91, 32.98, 0.82216, 1, 15, 64.15, 14.56, 1, 1, 15, 64.51, -5.87, 1, 1, 15, 21.07, -6.63, 1, 2, 14, 35.38, -16.16, 0.99998, 15, -15.54, -7.28, 1.0E-5, 2, 14, 3.1, -48.81, 1, 15, -61.44, -8.09, 0, 2, 14, -26.72, -19.31, 1, 15, -62.18, 33.84, 0, 2, 14, -45.95, -0.29, 1, 15, -62.66, 60.88, 0, 1, 14, -30.14, 15.69, 1, 2, 14, -1.84, 44.31, 0.91511, 15, 0.05, 61.98, 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.24, "rotation": 45.32, "width": 128, "height": 70 }, + "front_foot_bend2": { "x": 8.16, "y": 19.57, "rotation": 45.32, "width": 108, "height": 93 } + }, + "front_shin": { + "front_shin": { "x": 60.92, "y": -3.9, "rotation": 96.59, "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.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 } + }, + "goggles": { + "goggles": { + "type": "mesh", + "uvs": [ 0.53653, 0.04113, 0.72921, 0.16035, 0.91666, 0.33222, 0.97046, 0.31329, 1, 0.48053, 0.95755, 0.57329, 0.88825, 0.63279, 0.86877, 0.78962, 0.77403, 0.86749, 0.72628, 1, 0.60713, 0.93862, 0.496, 0.88138, 0.41557, 0.75026, 0.32547, 0.70084, 0.2782, 0.58256, 0.17209, 0.63281, 0.17228, 0.75071, 0.1078, 0.79897, 0, 0.32304, 0, 0.12475, 0.07372, 0.07343, 0.15423, 0.10733, 0.23165, 0.13994, 0.30313, 0.02256, 0.34802, 0, 0.42978, 0.69183, 0.39475, 0.51041, 0.39488, 0.31511, 0.45878, 0.23197, 0.56501, 0.28108, 0.6996, 0.39216, 0.82039, 0.54203, 0.85737, 0.62342, 0.91107, 0.51407, 0.72638, 0.32146, 0.58763, 0.19609, 0.48074, 0.11268, 0.37822, 0.05501, 0.32869, 0.17866, 0.31899, 0.30499, 0.36035, 0.53798, 0.40327, 0.70072, 0.30058, 0.55837, 0.21956, 0.2815, 0.09963, 0.28942, 0.56862, 0.4368, 0.4911, 0.37156, 0.51184, 0.52092, 0.67018, 0.59303, 0.7619, 0.68574, 0.73296, 0.43354 ], + "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.81, 170.09, -31.19, 159.41, -86.8, 167.03, -99, 143.4, -115.48, 125.2, -110.14, 109.88, -96.35, 83.64, -100.19, 63.25, -81.15, 38.37, -76.69, 37.66, -43.98, 37.00999, -13.47, 50.57, 13.54, 50.51, 38.45, 64.94, 56.6, 47.89, 79.94999, 29.45, 73.42, 16.31, 86.63, 81.5, 139.38, 112.55, 150.29, 126.97, 134.97, 128.63, 113.28, 130.22, 92.43, 154.79, 81.29, 162.21, 71.48, 60.96, 13.26, 86.33, 31.87, 116.92, 42.6, 135.47, 31.44, 136.98, 2.58, 131.23, -36.66, 118.22, -74.65, 108.68, -88.23, 130.45, -95.43, 144.62, -39.36, 152.24, 1.69, 156.05, 32.59999, 156.21, 61.01, 132.56, 66.4, 111.94, 61.83, 79.03, 38.83, 57.27, 19.29999, 70.67, 52.42, 107.01, 87.61, 95.39, 116.7, 112.91, -6.87, 116.41, 15.8, 94.82, 2.47, 97.23, -40.47, 90.66, -68.16, 127.64, -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.4, "rotation": 60.82, "width": 210, "height": 203 } + }, + "head": { + "head": { + "type": "mesh", + "uvs": [ 0.75918, 0.06107, 0.88392, 0.17892, 0.90174, 0.30856, 0.94223, 0.1966, 1, 0.26584, 1, 0.42199, 0.95863, 0.46992, 0.92118, 0.51333, 0.85957, 0.53469, 0.78388, 0.65605, 0.74384, 0.74838, 0.85115, 0.75151, 0.84828, 0.82563, 0.8178, 0.85367, 0.75598, 0.85906, 0.76236, 0.90467, 0.65875, 1, 0.38336, 1, 0.18579, 0.85403, 0.12741, 0.8109, 0.06024, 0.69209, 0, 0.58551, 0, 0.41021, 0.08529, 0.20691, 0.24243, 0.14504, 0.49999, 0.14209, 0.50323, 0.07433, 0.41738, 0, 0.57613, 0, 0.85059, 0.36086, 0.73431, 0.43206, 0.6848, 0.3127, 0.72164, 0.16717, 0.55931, 0.04153, 0.44763, 0.22894, 0.23925, 0.26559, 0.71271, 0.44035, 0.56992, 0.38299, 0.41678, 0.3351, 0.29299, 0.31496, 0.70801, 0.44501, 0.56676, 0.38976, 0.4152, 0.34416, 0.28753, 0.33017, 0.88988, 0.50176, 0.30388, 0.73462, 0.2646, 0.65674, 0.21414, 0.61583, 0.14612, 0.62193, 0.10315, 0.66636, 0.10357, 0.72556, 0.14505, 0.79163, 0.20263, 0.81355, 0.27872, 0.80158, 0.34946, 0.7376, 0.23073, 0.57073, 0.08878, 0.60706, 0.2946, 0.8129, 0.73005, 0.87883, 0.69804, 0.87348, 0.66165, 0.79681 ], + "triangles": [ 34, 25, 31, 37, 38, 34, 31, 32, 29, 31, 37, 34, 37, 41, 38, 30, 31, 29, 36, 37, 31, 33, 27, 28, 26, 27, 33, 0, 33, 28, 32, 33, 0, 32, 0, 1, 33, 25, 26, 33, 32, 25, 31, 25, 32, 2, 32, 1, 2, 3, 4, 2, 29, 32, 2, 4, 5, 29, 2, 5, 6, 29, 5, 30, 36, 31, 30, 29, 6, 44, 30, 6, 36, 30, 44, 34, 24, 25, 35, 23, 24, 35, 24, 34, 39, 35, 34, 39, 22, 35, 38, 39, 34, 42, 39, 38, 43, 39, 42, 41, 42, 38, 22, 23, 35, 43, 22, 39, 40, 37, 36, 41, 37, 40, 7, 44, 6, 8, 36, 44, 40, 36, 8, 8, 44, 7, 55, 22, 43, 56, 21, 22, 55, 56, 22, 55, 48, 56, 47, 48, 55, 9, 40, 8, 55, 54, 46, 42, 55, 43, 47, 55, 46, 49, 56, 48, 20, 21, 56, 20, 56, 49, 50, 49, 48, 20, 49, 50, 46, 54, 45, 54, 55, 41, 55, 42, 41, 9, 60, 40, 46, 51, 50, 60, 41, 40, 10, 60, 9, 54, 41, 60, 46, 52, 51, 19, 50, 51, 50, 48, 47, 47, 46, 50, 46, 45, 52, 20, 50, 19, 57, 53, 45, 57, 45, 54, 53, 52, 45, 12, 10, 11, 13, 10, 12, 18, 51, 52, 19, 51, 18, 18, 52, 53, 18, 53, 57, 14, 10, 13, 60, 10, 14, 59, 60, 14, 58, 59, 14, 58, 14, 15, 17, 54, 60, 16, 17, 60, 57, 54, 17, 18, 57, 17, 59, 16, 60, 16, 59, 58, 16, 58, 15 ], + "vertices": [ 1, 25, 41.97, -41.79, 1, 3, 23, 73.46, 27.54, 0.18925, 25, -5.75, -51.7, 0.72418, 24, 112.98, -11.43, 0.08656, 3, 23, 38.23, 10.98, 0.84283, 25, -41.00999, -35.22, 0.09705, 24, 92.72, -44.67, 0.0601, 1, 23, 73.35, 10.89, 1, 1, 23, 58.59, -10.38, 1, 2, 22, 75.49, -4.55, 0.10257, 23, 14.35, -24.8, 0.89742, 2, 22, 59.82, -13.72, 0.41734, 23, -2.69, -18.57, 0.58265, 1, 21, 163.06, -108.68, 1, 1, 21, 151.52, -95.04, 1, 1, 21, 110.6, -87.69, 1, 1, 21, 81.05, -86.58, 1, 1, 21, 89.81, -114.32, 1, 1, 21, 68.72, -120.91, 1, 1, 21, 58.1, -115.89, 1, 1, 21, 51.03, -100.62, 1, 1, 21, 38.78, -106.76, 1, 1, 21, 2.67, -89.69, 1, 1, 21, -22.07, -19.29999, 1, 1, 21, 1.19, 45.62, 1, 1, 21, 8.07, 64.81, 1, 1, 21, 35.43, 93.72, 1, 1, 21, 59.98, 119.66, 1, 1, 21, 109.25, 136.98, 1, 1, 21, 174.07, 135.27, 1, 2, 21, 205.58, 101.22, 0.83763, 24, -16.79999, 104.63, 0.16236, 2, 25, 58.93, 30.5, 0.60735, 24, 38.37, 61.89, 0.39264, 2, 25, 75.55, 19, 0.94502, 24, 51.62, 77.15, 0.05497, 1, 25, 106.69, 26.9, 1, 1, 25, 83.78, -9.5, 1, 4, 22, 44.52, 27.24, 0.19601, 23, 19.12, 19.33, 0.58066, 25, -46.82, -15.19, 0.07453, 24, 72.17, -48.24, 0.14877, 2, 22, 7.42, 19.08, 0.79203, 24, 34.31, -45.24, 0.20796, 1, 24, 45.94, -9.06, 1, 1, 25, 20.62, -16.35, 1, 1, 25, 75.73, 0.94, 1, 3, 21, 200.44, 40.47, 0.4822, 25, 44.58, 56.29, 0.14949, 24, 11.16, 50.46, 0.3683, 1, 21, 171.41, 90.11, 1, 2, 22, 1.07, 18.93, 0.79203, 24, 28.19, -43.54, 0.20796, 3, 21, 168.13, -6.01, 0.11484, 22, -28.63, 49.03, 0.13133, 24, 8.54, -6.08, 0.75382, 2, 21, 167.82, 37.86, 0.27101, 24, -15.06, 30.9, 0.72898, 1, 21, 162.36, 71.5, 1, 1, 21, 163.1, -47.44, 1, 1, 21, 165.94, -5.87, 1, 1, 21, 165.14, 37.37, 1, 1, 21, 157.6, 71.39, 1, 1, 21, 163.5, -99.53, 1, 1, 21, 45.37, 27.24, 1, 1, 21, 63.73, 44.98, 1, 1, 21, 70.69999, 61.92, 1, 1, 21, 62.87, 78.69999, 1, 1, 21, 46.52, 85.3, 1, 1, 21, 29.92, 79.33999, 1, 1, 21, 15.07, 62.21, 1, 1, 21, 14.09, 45.32, 1, 1, 21, 24.29, 27.05, 1, 1, 21, 48.63, 15.29, 1, 1, 21, 84.87, 62.14, 1, 1, 21, 61.9, 94.83, 1, 1, 21, 22.54, 21.87, 1, 1, 21, 43.14, -95.94, 1, 1, 21, 41.77, -87.23, 1, 1, 21, 60.05, -70.35, 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.14, -70.3, 40.8, -118.07, 257.77, -115.61, 285.16, 57.18, 120.77, 164.95, -5.06, 76.94 ] + } + }, + "mouth": { + "mouth_grind": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 11.28, -85.88, -19.56, 1.84, 36.09, 21.41, 66.93, -66.31 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + }, + "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth_smile": { "x": 23.68, "y": -32.23, "rotation": -70.63, "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.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": { + "type": "mesh", + "uvs": [ 0.48368, 0.1387, 0.5199, 0.21423, 0.55099, 0.27906, 0.58838, 0.29816, 0.63488, 0.32191, 0.77342, 0.39266, 1, 0.73346, 1, 1, 0.59435, 1, 0.3116, 1, 0, 1, 0, 0.41396, 0.1363, 0, 0.41716, 0 ], + "triangles": [ 8, 6, 7, 6, 8, 5, 5, 8, 4, 4, 8, 3, 8, 9, 3, 9, 2, 3, 2, 10, 1, 2, 9, 10, 1, 11, 0, 0, 11, 12, 12, 13, 0, 11, 1, 10 ], + "vertices": [ 2, 4, 10.45, 29.41, 0.88824, 5, -6.74, 49.62, 0.11175, 2, 4, 16.54999, 29.27, 0.83163, 5, -2.65, 45.08, 0.16836, 2, 4, 21.79, 29.15, 0.78305, 5, 0.85, 41.18999, 0.21694, 2, 4, 25.53, 31.43, 0.67844, 5, 5.07, 40.04, 0.32155, 2, 4, 30.17, 34.27, 0.54832, 5, 10.33, 38.61, 0.45167, 2, 4, 44.01, 42.72, 0.16069, 5, 25.97, 34.36, 0.83929, 1, 5, 51.56, 13.89, 1, 2, 4, 88.08, 36.28, 0, 5, 51.54, -2.08999, 1, 2, 4, 56.58, 2.98, 0.02959, 5, 5.71, -2.05, 0.9704, 2, 4, 34.63, -20.21999, 0.99999, 5, -26.22, -2.03, 0, 2, 4, 10.43, -45.8, 0.99999, 5, -61.43, -2, 0, 2, 4, -15.1, -21.64, 1, 5, -61.4, 33.15, 0, 2, 4, -22.56, 6.61, 0.99999, 5, -45.98, 57.97, 0, 2, 4, -0.76, 29.67, 0.99219, 5, -14.25, 57.94, 0.0078 ], + "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.82, "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.1, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 } + }, + "rear_upper_arm": { + "rear_upper_arm": { "x": 21.12, "y": 4.08, "rotation": 89.32, "width": 47, "height": 87 } + }, + "torso": { + "torso": { + "type": "mesh", + "uvs": [ 0.62509, 0.12672, 1, 0.2636, 1, 0.2887, 1, 0.66021, 1, 0.68245, 0.92323, 0.69258, 0.95115, 0.84965, 0.77123, 1, 0.49654, 1, 0.27181, 1, 0.13842, 0.77196, 0, 0.45614, 0, 0.19436, 0.14462, 0, 0.27801, 0, 0.72524, 0.27835, 0.76091, 0.46216, 0.84888, 0.67962, 0.68257, 0.63249, 0.53985, 0.38469, 0.25443, 0.32169, 0.30062, 0.55173, 0.39552, 0.79506, 0.26389, 0.17006, 0.52409, 0.18673 ], + "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.62, -10.38, 102.17, -45.07, 97.66, -44.71, 31, -39.45, 27.01, -39.13, 25.78, -31.49, -2.60999, -31.99, -28.2, -12.29, -26.08, 14.54, -24.34, 36.5, 17.59, 46.3, 75.33, 55.34, 122.31, 51.63, 156.07, 34.75, 155.04, 21.72, 101.64, -18.02, 68.37999, -18.9, 28.68, -24.41, 38.41999, -8.83, 83.99, 1.59, 97.5, 28.58, 55.86, 27.33, 11.47, 21.51, 124.63, 25.51, 119.63, 0.32 ], + "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": { + "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.195, 0.86, 0.75, 1 ] + }, + { "time": 0.0666, "angle": 46.07 }, + { "time": 0.1333, "angle": -20.28 }, + { "time": 0.2, "angle": -27.23 }, + { "time": 0.2666, "angle": -47.16 }, + { "time": 0.3333, "angle": -39.79 }, + { "time": 0.4, "angle": -25.86 }, + { "time": 0.4666, "angle": 14.35 }, + { "time": 0.5333, "angle": 55.62 }, + { "time": 0.6, "angle": 69.65 }, + { "time": 0.6666, "angle": 86.4 }, + { "time": 0.7333, "angle": 65.87 }, + { "time": 0.8, "angle": 42.05 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0333, "x": -5.79, "y": 11.15 }, + { "time": 0.0666, "x": -5.13, "y": 11.55 }, + { "time": 0.1333, "x": -7.7, "y": 8.98 }, + { "time": 0.5333, "x": -1.26, "y": 3.83 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -39.7 }, + { "time": 0.2, "angle": -57.29 }, + { "time": 0.4, "angle": -39.7 }, + { "time": 0.6, "angle": -57.29 }, + { "time": 0.8, "angle": -39.7 } + ], + "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -56.59 }, + { "time": 0.0666, "angle": -21.57 }, + { "time": 0.1333, "angle": 27.95 }, + { "time": 0.2, "angle": 42.42 }, + { "time": 0.2666, "angle": 62.37 }, + { "time": 0.3333, "angle": 45.42 }, + { "time": 0.4, "angle": 15.67 }, + { "time": 0.4666, "angle": 28.22 }, + { "time": 0.5333, "angle": -38.62 }, + { "time": 0.6, "angle": -53.26 }, + { "time": 0.6666, "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.4666, "x": -13.04, "y": 4.04 }, + { "time": 0.5, "x": -10.24, "y": 7.11 }, + { "time": 0.5333, "x": -9.01, "y": -5.15 }, + { "time": 0.6666, "x": -23.18, "y": -2.57 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": -74 }, + { "time": 0.0666, "angle": -83.38 }, + { "time": 0.1333, "angle": -106.69 }, + { "time": 0.2, "angle": -66.01 }, + { "time": 0.2666, "angle": -55.22 }, + { "time": 0.3333, "angle": -24.8 }, + { + "time": 0.4, + "angle": 18.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4666, "angle": -56.65 }, + { + "time": 0.5333, + "angle": -11.94, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6666, "angle": -41.26 }, + { "time": 0.7333, "angle": -43.6 }, + { "time": 0.8, "angle": -74 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -89.36 }, + { "time": 0.0666, "angle": -95.67 }, + { "time": 0.1333, "angle": -22 }, + { "time": 0.2, "angle": -316.04 }, + { "time": 0.2666, "angle": -274.94 }, + { "time": 0.3333, "angle": -273.74 }, + { "time": 0.4, "angle": -272.09 }, + { "time": 0.4666, "angle": -264.89 }, + { "time": 0.5333, "angle": -320.09 }, + { "time": 0.6, "angle": -50.83 }, + { "time": 0.6666, "angle": -81.72 }, + { "time": 0.7333, "angle": -83.92 }, + { "time": 0.8, "angle": -89.36 } + ], + "translate": [ + { "time": 0, "x": 6.24, "y": 10.05 }, + { "time": 0.2666, "x": 4.95, "y": -13.13 }, + { "time": 0.6, "x": -2.43, "y": 1.94 }, + { "time": 0.8, "x": 6.24, "y": 10.05 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 33.43 }, + { "time": 0.0666, "angle": 20.53 }, + { "time": 0.1333, "angle": 15.26 }, + { "time": 0.2, "angle": 19.28 }, + { "time": 0.2666, "angle": 22.62 }, + { "time": 0.3333, "angle": 37.29 }, + { "time": 0.4, "angle": 41.53 }, + { "time": 0.4666, "angle": 31.73 }, + { "time": 0.5333, "angle": 67.45 }, + { "time": 0.6666, "angle": 39.77 }, + { "time": 0.7333, "angle": 30.95 }, + { "time": 0.8, "angle": 33.43 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -19.75 }, + { "time": 0.0666, "angle": -37.11 }, + { "time": 0.1333, "angle": -50.79 }, + { "time": 0.2666, "angle": -12.69 }, + { "time": 0.3333, "angle": 3.01 }, + { "time": 0.4333, "angle": 12.05 }, + { "time": 0.5333, "angle": 13.25 }, + { "time": 0.8, "angle": -19.75 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 68.68 }, + { "time": 0.0666, "angle": 73.89 }, + { "time": 0.1333, "angle": -9.64 }, + { "time": 0.2, "angle": 284.27 }, + { "time": 0.2666, "angle": 283.29 }, + { "time": 0.3333, "angle": 278.28 }, + { "time": 0.4, "angle": 271.02 }, + { "time": 0.4666, "angle": 263.2 }, + { "time": 0.5333, "angle": 314.25 }, + { "time": 0.6, "angle": 16.83 }, + { "time": 0.6666, "angle": 70.35 }, + { "time": 0.7333, "angle": 73.53 }, + { "time": 0.8, "angle": 68.68 } + ], + "translate": [ + { "time": 0, "x": -2.57, "y": -8.89 }, + { "time": 0.1333, "x": -4.68, "y": 7.2 }, + { "time": 0.2, "x": 21.73, "y": 51.17 }, + { "time": 0.6, "x": 4.33, "y": 2.05 }, + { "time": 0.8, "x": -2.57, "y": -8.89 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 31.04 }, + { "time": 0.0666, "angle": 28.28 }, + { "time": 0.1333, "angle": 49.36 }, + { "time": 0.2, "angle": 59.37 }, + { "time": 0.2666, "angle": 8.56 }, + { "time": 0.3333, "angle": 9.38 }, + { "time": 0.4, "angle": 11.51 }, + { "time": 0.4666, "angle": 7.22 }, + { "time": 0.5333, "angle": -18.44 }, + { "time": 0.6, "angle": 11.44 }, + { "time": 0.6666, "angle": 9.99 }, + { "time": 0.7333, "angle": 8.28 }, + { "time": 0.8, "angle": 31.04 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.2, "angle": 13.58 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.6, "angle": 13.58 }, + { "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.1, "angle": 12.34 }, + { "time": 0.2, "angle": 25.55 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.5, "angle": 12.34 }, + { "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 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.481, 0.01, 0.75, 1 ] + }, + { "time": 0.0666, "angle": -64.42 }, + { + "time": 0.1333, + "angle": -20.59, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.2666, "angle": -62.51 }, + { "time": 0.3333, "angle": -79.74 }, + { "time": 0.4, "angle": -78.28 }, + { + "time": 0.4666, + "angle": -118.96, + "curve": [ 0.93, 0, 0.952, 0.95 ] + }, + { "time": 0.6, "angle": -88.95 }, + { "time": 0.6666, "angle": -79.09 }, + { "time": 0.7333, "angle": -47.77 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { + "time": 0.0333, + "angle": -21.13, + "curve": [ 0.121, 0.23, 0.75, 1 ] + }, + { "time": 0.0666, "angle": 17.64 }, + { "time": 0.1, "angle": 29.92 }, + { "time": 0.1333, "angle": 16.44 }, + { "time": 0.2, "angle": -29.22 }, + { "time": 0.2666, "angle": -1.61 }, + { "time": 0.3333, "angle": -10.22 }, + { "time": 0.4666, "angle": -15.99 }, + { "time": 0.6, "angle": 9.03 }, + { "time": 0.7333, "angle": 17.32 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0666, "angle": -12.04 }, + { "time": 0.1333, "angle": -0.87 }, + { "time": 0.2, "angle": 25.81 }, + { "time": 0.2666, "angle": 4.71 }, + { + "time": 0.4, + "angle": 18.09, + "curve": [ 0.281, 0.73, 0.75, 1 ] + }, + { "time": 0.4333, "angle": -1.7 }, + { "time": 0.4666, "angle": 27.12 }, + { "time": 0.5, "angle": 38.83 }, + { "time": 0.5333, "angle": 30.76 }, + { "time": 0.5666, "angle": -20.49 }, + { "time": 0.6, "angle": -30.8 }, + { "time": 0.6666, "angle": -1.31 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 24.72 }, + { "time": 0.5, "angle": -11.87 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": -24.88, + "curve": [ 0.3, 0.8, 0.663, 0.91 ] + }, + { + "time": 0.0666, + "x": 0, + "y": -40.28, + "curve": [ 0.456, 0, 0.339, 0.98 ] + }, + { + "time": 0.2666, + "x": 0, + "y": 20.51, + "curve": [ 0.17, 0.52, 0.596, 0.99 ] + }, + { "time": 0.4, "x": 0, "y": -24.88 }, + { "time": 0.4333, "x": 0, "y": -26.36 }, + { + "time": 0.4666, + "x": 0, + "y": -45.06, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6666, "x": 0, "y": 20.51 }, + { "time": 0.8, "x": 0, "y": -24.88 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_foot_ik": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0333, "angle": -41.68 }, + { "time": 0.1333, "angle": -102.41 }, + { "time": 0.2, "angle": -121.43 }, + { "time": 0.2333, "angle": -133.6 }, + { "time": 0.2666, "angle": -139.86 }, + { "time": 0.3333, "angle": -152.39 }, + { "time": 0.3666, "angle": -146.32 }, + { "time": 0.5, "angle": -143.8 }, + { "time": 0.5333, "angle": -114.84 }, + { "time": 0.5666, "angle": -99.08 }, + { "time": 0.6, "angle": -63.03 }, + { "time": 0.6333, "angle": -47.34 }, + { "time": 0.6666, "angle": -31.04 }, + { "time": 0.7, "angle": -25.01 }, + { "time": 0.7666, "angle": -15.95 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 159.31, "y": 38.68 }, + { "time": 0.0333, "x": 115.32, "y": 0.18 }, + { "time": 0.0666, "x": 16.34, "y": 0.18 }, + { "time": 0.1333, "x": -116.47, "y": 0.18 }, + { "time": 0.2, "x": -210.62, "y": 126.29 }, + { "time": 0.2333, "x": -226.11, "y": 203.77 }, + { "time": 0.2666, "x": -223.73, "y": 258 }, + { "time": 0.3333, "x": -208.23, "y": 250.25 }, + { "time": 0.3666, "x": -207.64, "y": 215.69 }, + { "time": 0.4, "x": -205.85, "y": 185.29 }, + { "time": 0.4333, "x": -179.03, "y": 176.95 }, + { "time": 0.4666, "x": -154, "y": 157.28 }, + { "time": 0.5, "x": -128.97, "y": 108.41 }, + { "time": 0.5333, "x": -76.68, "y": 75.29 }, + { "time": 0.5666, "x": -41.24, "y": 67.74 }, + { "time": 0.6, "x": 28.47, "y": 59.02 }, + { "time": 0.6333, "x": 70.89, "y": 78.19 }, + { "time": 0.6666, "x": 110.42, "y": 99 }, + { "time": 0.7, "x": 122.21, "y": 79.58 }, + { "time": 0.7666, "x": 145.33, "y": 44.61 }, + { "time": 0.8, "x": 159.31, "y": 38.68 } + ] + }, + "front_ankle_ik": { + "translate": [ + { "time": 0, "x": -14.25, "y": -25.95 }, + { "time": 0.1333, "x": -13.63, "y": -34.72 }, + { "time": 0.1666, "x": -11.41, "y": -12.61 }, + { "time": 0.5, "x": -14.88, "y": -31.78 }, + { "time": 0.8, "x": -14.25, "y": -25.95 } + ] + }, + "rear_foot_ik": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0666, "angle": 18.55 }, + { "time": 0.1333, "angle": 52.75 }, + { "time": 0.1666, "angle": 87.39 }, + { "time": 0.2333, "angle": 133.94 }, + { "time": 0.3, "angle": 150.92 }, + { "time": 0.3666, "angle": 168.02 }, + { "time": 0.4, "angle": 129.09 }, + { "time": 0.4333, "angle": 125.95 }, + { "time": 0.5, "angle": 114.27 }, + { "time": 0.5333, "angle": 85.36 }, + { "time": 0.5666, "angle": 49.17 }, + { "time": 0.6333, "angle": 9.5 }, + { "time": 0.7, "angle": 4.15 }, + { "time": 0.7666, "angle": -1.36 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -248.9, "y": 230.06 }, + { "time": 0.0666, "x": -228.7, "y": 134.11 }, + { "time": 0.1333, "x": -145.37, "y": 94.22 }, + { "time": 0.1666, "x": -82.75, "y": 54.32 }, + { "time": 0.2333, "x": 37.92, "y": 74.38 }, + { "time": 0.2666, "x": 80.37, "y": 91.82 }, + { "time": 0.3, "x": 93.21, "y": 67.3 }, + { "time": 0.3666, "x": 99.34, "y": 35.47 }, + { "time": 0.4, "x": 68.62, "y": 0.35 }, + { "time": 0.4333, "x": 21.58, "y": -2.63 }, + { "time": 0.5, "x": -92.9, "y": -2.63 }, + { "time": 0.5333, "x": -166.79, "y": -2.63 }, + { "time": 0.5666, "x": -252.51, "y": 57.14 }, + { "time": 0.6333, "x": -304.31, "y": 214.02 }, + { "time": 0.7, "x": -296.91, "y": 281.36 }, + { "time": 0.7666, "x": -269.53, "y": 257.68 }, + { "time": 0.8, "x": -248.9, "y": 230.06 } + ] + }, + "rear_ankle_ik": { + "translate": [ + { "time": 0, "x": 85, "y": -33.59, "curve": "stepped" }, + { "time": 0.8, "x": 85, "y": -33.59 } + ] + }, + "back_foot_tip": { + "rotate": [ + { "time": 0, "angle": -151.51 }, + { "time": 0.1333, "angle": -93.33 }, + { "time": 0.1666, "angle": -70.77 }, + { "time": 0.2333, "angle": 22.43 }, + { "time": 0.3, "angle": 36.85 }, + { "time": 0.3666, "angle": 34.85 }, + { "time": 0.4, "angle": 0.76 }, + { "time": 0.4333, "angle": 0.82, "curve": "stepped" }, + { "time": 0.5333, "angle": 0.82 }, + { "time": 0.5666, "angle": -61.7 }, + { "time": 0.6333, "angle": -139.59 }, + { "time": 0.7, "angle": -146.78 }, + { "time": 0.8, "angle": -151.51 } + ] + }, + "front_foot_tip": { + "rotate": [ + { "time": 0, "angle": 42.19 }, + { "time": 0.0333, "angle": -0.23 }, + { "time": 0.1333, "angle": -0.28 }, + { "time": 0.1666, "angle": -59.58 }, + { "time": 0.2, "angle": -112.55 }, + { "time": 0.2666, "angle": -130.07 }, + { "time": 0.3333, "angle": -146.2 }, + { "time": 0.5, "angle": -86.48 }, + { "time": 0.5333, "angle": -86.98 }, + { "time": 0.5666, "angle": -66.86 }, + { "time": 0.6, "angle": -22.89 }, + { "time": 0.6333, "angle": -12.06 }, + { "time": 0.7, "angle": 35.39 }, + { "time": 0.8, "angle": 42.19 } + ] + }, + "hair1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -10.21 }, + { "time": 0.2666, "angle": 7.16 }, + { "time": 0.3666, "angle": -0.15 }, + { "time": 0.4666, "angle": -10.21 }, + { "time": 0.6333, "angle": 7.16 }, + { "time": 0.7333, "angle": -0.15 }, + { "time": 0.8, "angle": 0 } + ] + }, + "hair2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -10.21 }, + { "time": 0.1666, "angle": -30.13 }, + { "time": 0.2666, "angle": 6.38 }, + { "time": 0.3666, "angle": -13.48 }, + { "time": 0.4666, "angle": -10.21 }, + { "time": 0.5333, "angle": -30.13 }, + { "time": 0.6333, "angle": 6.38 }, + { "time": 0.7333, "angle": -13.48 }, + { "time": 0.8, "angle": 0 } + ] + }, + "hair3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -10.21 }, + { "time": 0.2666, "angle": 7.16 }, + { "time": 0.3666, "angle": -0.15 }, + { "time": 0.4666, "angle": -10.21 }, + { "time": 0.6333, "angle": 7.16 }, + { "time": 0.7333, "angle": -0.15 }, + { "time": 0.8, "angle": 0 } + ] + }, + "hair4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -10.21 }, + { "time": 0.1666, "angle": -30.13 }, + { "time": 0.2666, "angle": 6.38 }, + { "time": 0.3666, "angle": -13.48 }, + { "time": 0.4666, "angle": -10.21 }, + { "time": 0.5333, "angle": -30.13 }, + { "time": 0.6333, "angle": 6.38 }, + { "time": 0.7333, "angle": -13.48 }, + { "time": 0.8, "angle": 0 } + ] + } + }, + "deform": { + "default": { + "eye": { + "eye_indifferent": [ + { + "time": 0, + "vertices": [ -0.15328, 0.70867, -0.15328, 0.70867, -0.15328, 0.70867, -0.15328, 0.70867 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "vertices": [ 3.92968, -18.23848, 3.92968, -18.23848, 3.92968, -18.23848, 3.92968, -18.23848 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "vertices": [ -0.15328, 0.70867, -0.15328, 0.70867, -0.15328, 0.70867, -0.15328, 0.70867 ] + } + ] + }, + "goggles": { + "goggles": [ + { + "time": 0, + "vertices": [ -0.08837, 0.23265, -0.04028, 0.11365, -1.15417, 5.38665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08233, 5.00095, -1.86743, 8.62226, -0.82043, 3.80258, -0.0957, 0.27987, -0.11633, 0.32749, -5.76245, 7.7601, -3.05987, 10.76796, -2.18188, 10.12056, -4.92511, 9.45659, 0, 0, 0, 0, 0.65328, -3.03142, 0.55996, -2.59837, -1.40084, 6.49587, -0.16394, 0.42825, -0.14651, 0.37985, -0.13543, 0.35089, -0.11294, 0.31703, -0.12219, 0.33459, -0.12271, 0.32937, -0.10714, 0.28684, -0.90087, 4.02339, -0.04678, 0.13842, -1.07189, 4.96331, -1.06213, 4.94195, -1.04928, 4.90511, -0.04034, 0.11959, -0.07522, 0.20426, -0.10211, 0.26987, -0.12774, 0.33331, -0.13964, 0.36775, -0.14172, 0.37709, -0.1307, 0.35703, -0.1195, 0.33389, -0.14541, 0.39531, -0.16638, 0.43952, -1.40084, 6.49587, -0.82043, 3.80258, -0.82043, 3.80258, -0.82043, 3.80258, -1.82894, 8.48513, -1.82894, 8.48513, -1.82894, 8.48513 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "vertices": [ 1.73339, -8.03618, 0.70187, -3.25497, 0.39651, -1.84367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.08755, -5.04639, 3.97546, -18.45124, 0.47232, -2.1937, 1.59594, -7.39851, 2.05963, -9.54877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.58685, -11.98995, 2.93106, -13.58876, 2.71148, -12.57045, 2.01113, -9.32378, 2.26412, -10.49626, 2.34347, -10.8643, 2.05169, -9.51168, 1.96224, -9.10095, 0.75805, -3.51469, 0.08056, -0.37484, 0.57971, -2.69226, 0.35055, -1.63069, 0.65036, -3.01589, 1.40933, -6.53389, 1.98852, -9.21901, 4.07943, -18.92243, 3.45761, -16.03435, 3.45532, -16.02368, 2.42819, -11.25721, 2.14263, -9.93373, 2.06396, -9.56589, 2.5906, -12.00682, 0, 0, 0.47232, -2.1937, 0.47232, -2.1937, 0.47232, -2.1937, 0.47232, -2.1937, 0.47232, -2.1937, 0.47232, -2.1937 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "vertices": [ -0.08837, 0.23265, -0.04028, 0.11365, -1.15417, 5.38665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08233, 5.00095, -1.86743, 8.62226, -0.82043, 3.80258, -0.0957, 0.27987, -0.11633, 0.32749, -5.76245, 7.7601, -3.05987, 10.76796, -2.18188, 10.12056, -4.92511, 9.45659, 0, 0, 0, 0, 0.65328, -3.03142, 0.55996, -2.59837, -1.40084, 6.49587, -0.16394, 0.42825, -0.14651, 0.37985, -0.13543, 0.35089, -0.11294, 0.31703, -0.12219, 0.33459, -0.12271, 0.32937, -0.10714, 0.28684, -0.90087, 4.02339, -0.04678, 0.13842, -1.07189, 4.96331, -1.06213, 4.94195, -1.04928, 4.90511, -0.04034, 0.11959, -0.07522, 0.20426, -0.10211, 0.26987, -0.12774, 0.33331, -0.13964, 0.36775, -0.14172, 0.37709, -0.1307, 0.35703, -0.1195, 0.33389, -0.14541, 0.39531, -0.16638, 0.43952, -1.40084, 6.49587, -0.82043, 3.80258, -0.82043, 3.80258, -0.82043, 3.80258, -1.82894, 8.48513, -1.82894, 8.48513, -1.82894, 8.48513 ] + } + ] + }, + "head": { + "head": [ + { + "time": 0, + "offset": 32, + "vertices": [ 2.81555, 0.98518, 1.01535, 8.62647, -2.70272, 4.09555, -4.48742, 7.13697, -4.7698, 3.34321, 0, 0, -2.25769, -4.31037, 0, 0, 0, 0, -0.45578, 2.11444, -0.45578, 2.11444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.14776, 14.58548, -2.8666, 13.27986, -2.55056, 11.81706, -2.1733, 10.06674, -1.96667, 9.10785, -2.01522, 9.33308, -2.29977, 10.65303, -2.6397, 12.23277, -3.05856, 14.17199, 0, 0, 0, 0, 0, 0, 0, 0, -0.59756, 2.77131, -1.96328, 9.10585, -2.16217, 10.02964 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "offset": 34, + "vertices": [ 3.14837, -14.61261, 3.14837, -14.61261, 3.14837, -14.61261, 0.83425, -3.87112, 0, 0, 0, 0, 0, 0, 0, 0, -0.45578, 2.11444, -0.45578, 2.11444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.17175, -0.81675, 0.17175, -0.81675, 0.17175, -0.81675, 0.17175, -0.81675, 0.17175, -0.81675, 0.17175, -0.81675, 0.17175, -0.81675, 0.17175, -0.81675, 0.17175, -0.81675, 0, 0, 0, 0, 0, 0, 0, 0, 0.55618, -2.58074, 0.41714, -1.93557, 1.04281, -4.83889 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "offset": 32, + "vertices": [ 2.81555, 0.98518, 1.01535, 8.62647, -2.70272, 4.09555, -4.48742, 7.13697, -4.7698, 3.34321, 0, 0, -2.25769, -4.31037, 0, 0, 0, 0, -0.45578, 2.11444, -0.45578, 2.11444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.14776, 14.58548, -2.8666, 13.27986, -2.55056, 11.81706, -2.1733, 10.06674, -1.96667, 9.10785, -2.01522, 9.33308, -2.29977, 10.65303, -2.6397, 12.23277, -3.05856, 14.17199, 0, 0, 0, 0, 0, 0, 0, 0, -0.59756, 2.77131, -1.96328, 9.10585, -2.16217, 10.02964 ] + } + ] + }, + "mouth": { + "mouth_grind": [ + { + "time": 0, + "vertices": [ -10.19201, 11.7786, -1.60018, 14.33763, 0.02328, 8.88684, -8.56857, 6.32778 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "vertices": [ -1.87524, -8.97547, 0.00448, -17.7002, 0.00448, -17.7002, -1.87524, -8.97547 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "vertices": [ -10.19201, 11.7786, -1.60018, 14.33763, 0.02328, 8.88684, -8.56857, 6.32778 ] + } + ] + }, + "torso": { + "torso": [ + { + "time": 0, + "offset": 6, + "vertices": [ 6.35966, 1.33517, 6.35966, 1.33517, 0, 0, 0, 0, 0.8206, 5.12242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.8206, 5.12242, 0.8206, 5.12242, -0.9412, 5.14301, 0.8206, 5.12242, 0.8206, 5.12242, 0.24157, 4.36882, 0.24157, 4.36882, 0.24157, 4.36882, 0, 0, 0.8206, 5.12242 ] + }, + { + "time": 0.4, + "offset": 2, + "vertices": [ 1.4615, 2.96601, 0.68634, 3.23445, 2.20619, 0.10388, 0, 0, -0.31028, -2.89859, 0, 0, -0.1851, 0.38208, 0.33795, -3.61551, 0, 0, 0, 0, -0.5516, 4.21406, -0.5516, 4.21406, 0, 0, 0, 0, -0.29403, -8.94627, -0.02416, -9.50223, 0.23017, -9.93909, -4.64135, -8.88913, -2.62136, -9.24012, -1.70074, -5.16261, -1.70074, -5.16261, -1.70074, -5.16261, 0, 0, -7.3706, -10.47316 ] + }, + { + "time": 0.8, + "offset": 6, + "vertices": [ 6.35966, 1.33517, 6.35966, 1.33517, 0, 0, 0, 0, 0.8206, 5.12242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.8206, 5.12242, 0.8206, 5.12242, -0.9412, 5.14301, 0.8206, 5.12242, 0.8206, 5.12242, 0.24157, 4.36882, 0.24157, 4.36882, 0.24157, 4.36882, 0, 0, 0.8206, 5.12242 ] + } + ] + } + } + } + } +} +} \ No newline at end of file diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-mesh.skel b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-mesh.skel new file mode 100644 index 000000000..cd94c8948 Binary files /dev/null and b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-mesh.skel differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-diffuse.png b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-diffuse.png deleted file mode 100644 index 9688984c6..000000000 Binary files a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-diffuse.png and /dev/null differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-normal.png b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-normal.png deleted file mode 100644 index b4ed28a68..000000000 Binary files a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-old-normal.png and /dev/null differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-pma.atlas b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-pma.atlas new file mode 100644 index 000000000..c2c7c6ec2 --- /dev/null +++ b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-pma.atlas @@ -0,0 +1,216 @@ + +spineboy-pma.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-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-pma.png b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-pma.png new file mode 100644 index 000000000..48fa9770d Binary files /dev/null and b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy-pma.png differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.json b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.json index 5f354402d..a25f9afdd 100644 --- a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.json +++ b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.json @@ -1,5 +1,5 @@ { -"skeleton": { "hash": "rPoYyBLFG6F0CGZ5wsUEBKDJU9U", "spine": "99.dev", "width": 470.9, "height": 731.49, "images": "./images/" }, +"skeleton": { "hash": "rPoYyBLFG6F0CGZ5wsUEBKDJU9U", "spine": "3.4.00", "width": 470.9, "height": 731.49, "images": "./images/" }, "bones": [ { "name": "hip", "y": 247.47 }, { "name": "torso", "parent": "hip", "length": 127.55, "rotation": 103.82, "x": -1.61, "y": 4.9, "color": "e0da19ff" }, diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.png b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.png deleted file mode 100644 index b43262310..000000000 Binary files a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.png and /dev/null differ diff --git a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.skel b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.skel index 92ba2e937..20f970670 100644 Binary files a/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.skel and b/spine-libgdx/spine-libgdx-tests/assets/spineboy/spineboy.skel differ diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/Box2DExample.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/Box2DExample.java index 8a1a35896..b1b1c6b73 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/Box2DExample.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/Box2DExample.java @@ -80,7 +80,7 @@ public class Box2DExample extends ApplicationAdapter { skeletonRenderer = new SkeletonRenderer(); skeletonRenderer.setPremultipliedAlpha(true); - atlas = new TextureAtlas(Gdx.files.internal("spineboy/spineboy.atlas")); + atlas = new TextureAtlas(Gdx.files.internal("spineboy/spineboy-pma.atlas")); // This loader creates Box2dAttachments instead of RegionAttachments for an easy way to keep // track of the Box2D body for each attachment. diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/IkTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/IkTest.java deleted file mode 100644 index d8c1a0045..000000000 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/IkTest.java +++ /dev/null @@ -1,171 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the - * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) 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. - *****************************************************************************/ - -package com.esotericsoftware.spine; - -import com.badlogic.gdx.ApplicationAdapter; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.backends.lwjgl.LwjglApplication; -import com.badlogic.gdx.graphics.GL20; -import com.badlogic.gdx.graphics.OrthographicCamera; -import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.badlogic.gdx.math.Vector2; - -public class IkTest extends ApplicationAdapter { - OrthographicCamera camera; - SpriteBatch batch; - SkeletonRenderer renderer; - SkeletonRendererDebug debugRenderer; - - TextureAtlas atlas; - Skeleton skeleton; - AnimationState state; - - public void create () { - camera = new OrthographicCamera(); - batch = new SpriteBatch(); - renderer = new SkeletonRenderer(); - renderer.setPremultipliedAlpha(true); - debugRenderer = new SkeletonRendererDebug(); - debugRenderer.setBoundingBoxes(false); - debugRenderer.setRegionAttachments(false); - - atlas = new TextureAtlas(Gdx.files.internal("spineboy/spineboy.atlas")); - SkeletonJson json = new SkeletonJson(atlas); // This loads skeleton JSON data, which is stateless. - json.setScale(0.6f); // Load the skeleton at 60% the size it was in Spine. - SkeletonData skeletonData = json.readSkeletonData(Gdx.files.internal("spineboy/spineboy.json")); - - skeleton = new Skeleton(skeletonData); // Skeleton holds skeleton state (bone positions, slot attachments, etc). - skeleton.setPosition(250, 20); - - AnimationStateData stateData = new AnimationStateData(skeletonData); // Defines mixing (crossfading) between animations. - stateData.setMix("run", "jump", 0.2f); - stateData.setMix("jump", "run", 0.2f); - - state = new AnimationState(stateData); // Holds the animation state for a skeleton (current animation, time, etc). - state.setTimeScale(0.5f); // Slow all animations down to 50% speed. - state.setAnimation(0, "run", true); - state.addAnimation(0, "jump", false, 2); // Jump after 2 seconds. - state.addAnimation(0, "run", true, 0); // Run after the jump. - - // skeleton.findBone("front_foot").parent = skeleton.findBone("hip"); - - IkConstraintData data; - - data = new IkConstraintData("head"); - data.getBones().add(skeletonData.findBone("torso")); - data.getBones().add(skeletonData.findBone("head")); - data.target = skeletonData.findBone("front_foot"); - data.setBendDirection(-1); - skeleton.getIkConstraints().add(new IkConstraint(data, skeleton)); - -// data = new IkConstraintData("arm"); -// data.getBones().add(skeletonData.findBone("front_upper_arm")); -// data.getBones().add(skeletonData.findBone("front_bracer")); -// data.setTarget(skeletonData.findBone("front_foot")); -// skeleton.getIkConstraints().add(new IkConstraint(data, skeleton)); -// -// data = new IkConstraintData("leg"); -// data.getBones().add(skeletonData.findBone("front_thigh")); -// data.getBones().add(skeletonData.findBone("front_shin")); -// data.target = skeletonData.findBone("front_foot"); -// data.setBendDirection(-1); -// skeleton.getIkConstraints().add(new IkConstraint(data, skeleton)); -// //skeleton.getIkConstraints().peek().setMix(0.5f); - - skeleton.updateCache(); - skeleton.updateWorldTransform(); - } - - public void render () { - state.update(Gdx.graphics.getDeltaTime()); // Update the animation time. - - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - - // state.apply(skeleton); // Poses skeleton using current animations. This sets the bones' local SRT. - -// skeleton.findBone("front_shin").y = 40; -// skeleton.findBone("front_shin").scaleX = 2; -// skeleton.findBone("front_thigh").scaleX = 2; -// skeleton.findBone("front_bracer").y = 40; -// skeleton.findBone("front_bracer").scaleX = 2; -// skeleton.findBone("front_upper_arm").scaleX = 2; -// skeleton.getRootBone().setScale(1.3f, 0.6f); - - // skeleton.findBone("front_upper_arm").parent = skeleton.findBone("front_shin"); -// skeleton.findBone("head").scaleX = 2; -// skeleton.findBone("head").x = 100; -// skeleton.findBone("head").y = 100; -// skeleton.findBone("head").rotation = 0; -// skeleton.findBone("neck").x = 100; -// skeleton.findBone("neck").y = 100; -// skeleton.findBone("neck").rotation = 45; - - skeleton.setPosition(250, 20); -// skeleton.setFlip(false, false); - skeleton.setPosition(250, 20); -// skeleton.setFlipX(true); -// skeleton.setFlipY(false); - -// skeleton.findBone("torso").setFlipX(true); -// skeleton.findBone("torso").setFlipY(true); - - Vector2 p = skeleton.findBone("front_foot").parent.worldToLocal(new Vector2(Gdx.input.getX() - skeleton.getX(), - Gdx.graphics.getHeight() - Gdx.input.getY() - skeleton.getY())); - skeleton.findBone("front_foot").setPosition(p.x, p.y); - - skeleton.updateWorldTransform(); // Uses the bones' local SRT to compute their world SRT. - - // Configure the camera, SpriteBatch, and SkeletonRendererDebug. - camera.update(); - batch.getProjectionMatrix().set(camera.combined); - debugRenderer.getShapeRenderer().setProjectionMatrix(camera.combined); - - batch.begin(); - renderer.draw(batch, skeleton); // Draw the skeleton images. - batch.end(); - - debugRenderer.draw(skeleton); // Draw debug lines. - } - - public void resize (int width, int height) { - camera.setToOrtho(false); // Update camera with new size. - } - - public void dispose () { - atlas.dispose(); - } - - public static void main (String[] args) throws Exception { - new LwjglApplication(new IkTest()); - } -} diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/MixTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/MixTest.java index 844f49f8a..b8a4db77c 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/MixTest.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/MixTest.java @@ -60,7 +60,7 @@ public class MixTest extends ApplicationAdapter { final String name = "spineboy/spineboy"; - TextureAtlas atlas = new TextureAtlas(Gdx.files.internal(name + ".atlas")); + TextureAtlas atlas = new TextureAtlas(Gdx.files.internal(name + "-pma.atlas")); if (true) { SkeletonJson json = new SkeletonJson(atlas); diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/NormalMapTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/NormalMapTest.java index 8cf25a1fd..6372ecc92 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/NormalMapTest.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/NormalMapTest.java @@ -37,6 +37,7 @@ import com.badlogic.gdx.InputAdapter; import com.badlogic.gdx.InputMultiplexer; import com.badlogic.gdx.Preferences; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; +import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; @@ -89,10 +90,12 @@ public class NormalMapTest extends ApplicationAdapter { batch.setShader(program); renderer = new SkeletonRenderer(); - TextureAtlas atlas = new TextureAtlas(Gdx.files.internal(skeletonPath + "-diffuse.atlas")); + FileHandle file = Gdx.files.internal(skeletonPath + "-diffuse.atlas"); + TextureAtlas atlas = new TextureAtlas(file); atlasTexture = atlas.getRegions().first().getTexture(); - normalMapTexture = new Texture(Gdx.files.internal(skeletonPath + "-normal.png")); + normalMapTexture = new Texture(Gdx.files.internal(skeletonPath + "-normal.png")); + SkeletonJson json = new SkeletonJson(atlas); skeletonData = json.readSkeletonData(Gdx.files.internal(skeletonPath + ".json")); if (animationName != null) animation = skeletonData.findAnimation(animationName); @@ -373,7 +376,7 @@ public class NormalMapTest extends ApplicationAdapter { public static void main (String[] args) throws Exception { if (args.length == 0) - args = new String[] {"spineboy/spineboy-old", "walk"}; + args = new String[] {"spineboy-old/spineboy-old", "walk"}; else if (args.length == 1) // args = new String[] {args[0], null}; diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.java index 9201d1a1d..424053bfe 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest1.java @@ -58,7 +58,7 @@ public class SimpleTest1 extends ApplicationAdapter { debugRenderer.setBoundingBoxes(false); debugRenderer.setRegionAttachments(false); - atlas = new TextureAtlas(Gdx.files.internal("spineboy/spineboy.atlas")); + atlas = new TextureAtlas(Gdx.files.internal("spineboy/spineboy-pma.atlas")); SkeletonJson json = new SkeletonJson(atlas); // This loads skeleton JSON data, which is stateless. json.setScale(0.6f); // Load the skeleton at 60% the size it was in Spine. SkeletonData skeletonData = json.readSkeletonData(Gdx.files.internal("spineboy/spineboy.json")); diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest2.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest2.java index 7740ca477..e907e751f 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest2.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest2.java @@ -64,7 +64,7 @@ public class SimpleTest2 extends ApplicationAdapter { renderer.setPremultipliedAlpha(true); debugRenderer = new SkeletonRendererDebug(); - atlas = new TextureAtlas(Gdx.files.internal("spineboy/spineboy.atlas")); + atlas = new TextureAtlas(Gdx.files.internal("spineboy/spineboy-pma.atlas")); SkeletonJson json = new SkeletonJson(atlas); // This loads skeleton JSON data, which is stateless. json.setScale(0.6f); // Load the skeleton at 60% the size it was in Spine. SkeletonData skeletonData = json.readSkeletonData(Gdx.files.internal("spineboy/spineboy.json")); diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest3.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest3.java index e8c42d431..b6c7f18bf 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest3.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SimpleTest3.java @@ -59,7 +59,7 @@ public class SimpleTest3 extends ApplicationAdapter { debugRenderer.setRegionAttachments(false); debugRenderer.setMeshHull(false); - atlas = new TextureAtlas(Gdx.files.internal("raptor/raptor.atlas")); + atlas = new TextureAtlas(Gdx.files.internal("raptor/raptor-pma.atlas")); SkeletonJson json = new SkeletonJson(atlas); // This loads skeleton JSON data, which is stateless. json.setScale(0.5f); // Load the skeleton at 50% the size it was in Spine. SkeletonData skeletonData = json.readSkeletonData(Gdx.files.internal("raptor/raptor.json")); diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAttachmentTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAttachmentTest.java index d02fab183..5e7114392 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAttachmentTest.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/SkeletonAttachmentTest.java @@ -55,7 +55,7 @@ public class SkeletonAttachmentTest extends ApplicationAdapter { renderer.setPremultipliedAlpha(true); { - TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("spineboy/spineboy.atlas")); + TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("spineboy/spineboy-pma.atlas")); SkeletonJson json = new SkeletonJson(atlas); json.setScale(0.6f); SkeletonData skeletonData = json.readSkeletonData(Gdx.files.internal("spineboy/spineboy.json")); @@ -70,7 +70,7 @@ public class SkeletonAttachmentTest extends ApplicationAdapter { } { - TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("goblins/goblins-mesh.atlas")); + TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("goblins/goblins-pma.atlas")); SkeletonJson json = new SkeletonJson(atlas); SkeletonData skeletonData = json.readSkeletonData(Gdx.files.internal("goblins/goblins-mesh.json")); goblin = new Skeleton(skeletonData); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java index 403fdbbfb..39b368960 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java @@ -540,7 +540,8 @@ public class Animation { frameIndex = binarySearch(frames, time, 1) - 1; String attachmentName = attachmentNames[frameIndex]; - skeleton.slots.get(slotIndex).attachmentName = attachmentName; + skeleton.slots.get(slotIndex) + .setAttachment(attachmentName == null ? null : skeleton.getAttachment(slotIndex, attachmentName)); } } @@ -695,7 +696,7 @@ public class Animation { public void apply (Skeleton skeleton, float lastTime, float time, Array firedEvents, float alpha) { Slot slot = skeleton.slots.get(slotIndex); - Attachment slotAttachment = slot.getAttachment(); + Attachment slotAttachment = slot.attachment; if (!(slotAttachment instanceof VertexAttachment) || !((VertexAttachment)slotAttachment).applyDeform(attachment)) return; float[] frames = this.frames; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java index f0e61f622..076a4b2d6 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java @@ -62,7 +62,7 @@ public class Bone implements Updatable { setToSetupPose(); } - /** Copy constructor. + /** Copy constructor. Does not copy the children bones. * @param parent May be null. */ public Bone (Bone bone, Skeleton skeleton, Bone parent) { if (bone == null) throw new IllegalArgumentException("bone cannot be null."); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java index 4e72c26c7..7037eeb27 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java @@ -58,7 +58,7 @@ public class PathConstraint implements Updatable { @SuppressWarnings("null") public void update () { - Attachment attachment = target.getAttachment(); + Attachment attachment = target.attachment; if (!(attachment instanceof PathAttachment)) return; float rotateMix = this.rotateMix, translateMix = this.translateMix; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java index a0dcc8fe9..55ff6615f 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java @@ -107,8 +107,15 @@ public class Skeleton { bones = new Array(skeleton.bones.size); for (Bone bone : skeleton.bones) { - Bone parent = bone.parent == null ? null : bones.get(bone.parent.data.index); - bones.add(new Bone(bone, this, parent)); + Bone copy; + if (bone.parent == null) + copy = new Bone(bone, this, null); + else { + Bone parent = bones.get(bone.parent.data.index); + copy = new Bone(bone, this, parent); + parent.children.add(copy); + } + bones.add(copy); } slots = new Array(skeleton.slots.size); @@ -203,7 +210,7 @@ public class Skeleton { for (int ii = 0, nn = data.skins.size; ii < nn; ii++) sortPathConstraintAttachment(data.skins.get(ii), slotIndex, slotBone); - Attachment attachment = slot.getAttachment(); + Attachment attachment = slot.attachment; if (attachment instanceof PathAttachment) sortPathConstraintAttachment(attachment, slotBone); Array constrained = constraint.bones; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java index 3c113dcb4..f737f54e5 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java @@ -167,7 +167,7 @@ public class SkeletonJson { String targetName = constraintMap.getString("target"); data.target = skeletonData.findBone(targetName); - if (data.target == null) throw new SerializationException("Target bone not found: " + targetName); + if (data.target == null) throw new SerializationException("IK target bone not found: " + targetName); data.bendDirection = constraintMap.getBoolean("bendPositive", true) ? 1 : -1; data.mix = constraintMap.getFloat("mix", 1); @@ -182,20 +182,20 @@ public class SkeletonJson { for (JsonValue boneMap = constraintMap.getChild("bones"); boneMap != null; boneMap = boneMap.next) { String boneName = boneMap.asString(); BoneData bone = skeletonData.findBone(boneName); - if (bone == null) throw new SerializationException("Path bone not found: " + boneName); + if (bone == null) throw new SerializationException("Transform constraint bone not found: " + boneName); data.bones.add(bone); } String targetName = constraintMap.getString("target"); data.target = skeletonData.findBone(targetName); - if (data.target == null) throw new SerializationException("Target bone not found: " + targetName); + if (data.target == null) throw new SerializationException("Transform constraint target bone not found: " + targetName); data.offsetRotation = constraintMap.getFloat("rotation", 0); data.offsetX = constraintMap.getFloat("x", 0) * scale; data.offsetY = constraintMap.getFloat("y", 0) * scale; - data.offsetScaleX = constraintMap.getFloat("scaleX", 0) * scale; - data.offsetScaleY = constraintMap.getFloat("scaleY", 0) * scale; - data.offsetShearY = constraintMap.getFloat("shearY", 0) * scale; + data.offsetScaleX = constraintMap.getFloat("scaleX", 0); + data.offsetScaleY = constraintMap.getFloat("scaleY", 0); + data.offsetShearY = constraintMap.getFloat("shearY", 0); data.rotateMix = constraintMap.getFloat("rotateMix", 1); data.translateMix = constraintMap.getFloat("translateMix", 1); @@ -218,7 +218,7 @@ public class SkeletonJson { String targetName = constraintMap.getString("target"); data.target = skeletonData.findSlot(targetName); - if (data.target == null) throw new SerializationException("Target slot not found: " + targetName); + if (data.target == null) throw new SerializationException("Path target slot not found: " + targetName); data.positionMode = PositionMode.valueOf(constraintMap.getString("positionMode", "percent")); data.spacingMode = SpacingMode.valueOf(constraintMap.getString("spacingMode", "length")); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/VertexAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/VertexAttachment.java index 2d2fc478f..51829d38d 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/VertexAttachment.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/VertexAttachment.java @@ -85,7 +85,9 @@ public class VertexAttachment extends Attachment { if (deformArray.size == 0) { for (int w = offset, b = skip * 3; w < count; w += 2) { float wx = x, wy = y; - for (int n = bones[v++] + v; v < n; v++, b += 3) { + int n = bones[v++]; + n += v; + for (; v < n; v++, b += 3) { Bone bone = (Bone)skeletonBones[bones[v]]; float vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; wx += (vx * bone.getA() + vy * bone.getB() + bone.getWorldX()) * weight; @@ -98,7 +100,9 @@ public class VertexAttachment extends Attachment { float[] deform = deformArray.items; for (int w = offset, b = skip * 3, f = skip << 1; w < count; w += 2) { float wx = x, wy = y; - for (int n = bones[v++] + v; v < n; v++, b += 3, f += 2) { + int n = bones[v++]; + n += v; + for (; v < n; v++, b += 3, f += 2) { Bone bone = (Bone)skeletonBones[bones[v]]; float vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; wx += (vx * bone.getA() + vy * bone.getB() + bone.getWorldX()) * weight; diff --git a/spine-lua/Atlas.lua b/spine-lua/Atlas.lua new file mode 100644 index 000000000..29c664a9d --- /dev/null +++ b/spine-lua/Atlas.lua @@ -0,0 +1,106 @@ +------------------------------------------------------------------------------- +-- Spine Runtimes Software License +-- Version 2.3 +-- +-- Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the +-- Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; +-- OR BUSINESS INTERRUPTION) 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. +------------------------------------------------------------------------------- + +local Atlas = {} + +function Atlas.parse(atlasPath, atlasBase) + local function parseIntTuple4( l ) + local a,b,c,d = string.match( l , " ? ?%a+: ([+-]?%d+), ?([+-]?%d+), ?([+-]?%d+), ?([+-]?%d+)" ) + local a,b,c,d = tonumber( a ), tonumber( b ), tonumber( c ), tonumber( d ) + return a and b and c and d and {a, b, c ,d} + end + + local function parseIntTuple2( l ) + local a,b = string.match( l , " ? ?%a+: ([+-]?%d+), ?([+-]?%d+)" ) + local a,b = tonumber( a ), tonumber( b ) + return a and b and {a, b} + end + + if not atlasPath then + error("Error: " .. atlasPath .. ".atlas" .. " doesn't exist!") + return nil + end + + local atlasLines = spine.utils.readFile( atlasPath, atlasBase ) + if not atlasLines then + error("Error: " .. atlasPath .. ".atlas" .. " unable to read!") + return nil + end + + local pages = {} + + + local it = string.gmatch(atlasLines, "(.-)\r?\n") -- iterate over lines + for l in it do + if #l == 0 then + l = it() + if l then + local page = { name = l } + l = it() + page.size = parseIntTuple2( l ) + if page.size then + l = it() + end + page.format = string.match( l, "%a+: (.+)" ) + page.filter = {string.match( it(), "%a+: (.+),(.+)" )} + page.wrap = string.match( it(), "%a+: (.+)" ) + page.regions = {} + table.insert( pages, page ) + else + break + end + else + local region = {name = l} + + region.rotate = string.match( it(), "%a+: (.+)" ) == "true" + region.xy = parseIntTuple2( it() ) + region.size = parseIntTuple2( it() ) + l = it() + region.splits = parseIntTuple4(l) + if region.splits then + l = it() + region.pad = parseIntTuple4(l) + if region.pad then + l = it() + end + end + region.orig = parseIntTuple2( l ) + region.offset = parseIntTuple2( it() ) + region.index = tonumber( string.match( it() , "%a+: ([+-]?%d+)" ) ) + + table.insert( pages[#pages].regions, region ) + end + end + + return pages +end + +return Atlas diff --git a/spine-lua/AttachmentLoader.lua b/spine-lua/AttachmentLoader.lua index bb8f6ac9e..8fe6ac792 100644 --- a/spine-lua/AttachmentLoader.lua +++ b/spine-lua/AttachmentLoader.lua @@ -31,6 +31,7 @@ local AttachmentType = require "spine-lua.AttachmentType" local RegionAttachment = require "spine-lua.RegionAttachment" +local MeshAttachment = require "spine-lua.MeshAttachment" local BoundingBoxAttachment = require "spine-lua.BoundingBoxAttachment" local MeshAttachment = require "spine-lua.MeshAttachment" local SkinningMeshAttachment = require "spine-lua.SkinnedMeshAttachment" diff --git a/spine-monogame/README.md b/spine-monogame/README.md index ae93d235f..d1e742306 100644 --- a/spine-monogame/README.md +++ b/spine-monogame/README.md @@ -10,7 +10,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-monogame works with data exported from Spine 3.2.01. Updating spine-monogame to [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. +spine-monogame works with data exported from from the latest version of Spine. spine-monogame supports all Spine features. diff --git a/spine-monogame/windows8-store/example/Properties/AssemblyInfo.cs b/spine-monogame/windows8-store/example/Properties/AssemblyInfo.cs index 82df9295a..9288461df 100644 --- a/spine-monogame/windows8-store/example/Properties/AssemblyInfo.cs +++ b/spine-monogame/windows8-store/example/Properties/AssemblyInfo.cs @@ -9,8 +9,8 @@ using System.Runtime.InteropServices; [assembly: AssemblyProduct("spine-monogame-example")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyDescription("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyCompany("Esoteric Software")] +[assembly: AssemblyCopyright("Copyright © Esoteric Software 2013-2016")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/spine-monogame/windows8-store/src/Properties/AssemblyInfo.cs b/spine-monogame/windows8-store/src/Properties/AssemblyInfo.cs index 57fffa7a5..065071dbb 100644 --- a/spine-monogame/windows8-store/src/Properties/AssemblyInfo.cs +++ b/spine-monogame/windows8-store/src/Properties/AssemblyInfo.cs @@ -5,12 +5,12 @@ using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("SpineMonogameWindows8Store")] -[assembly: AssemblyDescription("")] +[assembly: AssemblyTitle("spine-monogame-win8store-example")] +[assembly: AssemblyProduct("spine-monogame-win8store-example")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("SpineMonogameWindows8Store")] -[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyCompany("Esoteric Software")] +[assembly: AssemblyCopyright("Copyright © Esoteric Software 2013-2016")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/spine-sfml/.cproject b/spine-sfml/.cproject deleted file mode 100644 index 2e94d15a6..000000000 --- a/spine-sfml/.cproject +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - make - - moo - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/spine-sfml/.project b/spine-sfml/.project deleted file mode 100644 index c17ffb5df..000000000 --- a/spine-sfml/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - spine-sfml - - - spine-c - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/spine-sfml/.settings/org.eclipse.cdt.codan.core.prefs b/spine-sfml/.settings/org.eclipse.cdt.codan.core.prefs deleted file mode 100644 index c7be96702..000000000 --- a/spine-sfml/.settings/org.eclipse.cdt.codan.core.prefs +++ /dev/null @@ -1,68 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.cdt.codan.checkers.errnoreturn=Warning -org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false} -org.eclipse.cdt.codan.checkers.errreturnvalue=Error -org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.checkers.noreturn=Error -org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false} -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},no_break_comment\=>"no break",last_case_param\=>true,empty_case_param\=>false} -org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning -org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},unknown\=>false,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},skip\=>true} -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error -org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error -org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},paramNot\=>false} -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},else\=>false,afterelse\=>false} -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>("@(\#)","$Id")} -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -useParentScope=false diff --git a/spine-sfml/.settings/org.eclipse.cdt.core.prefs b/spine-sfml/.settings/org.eclipse.cdt.core.prefs deleted file mode 100644 index b2d602b0b..000000000 --- a/spine-sfml/.settings/org.eclipse.cdt.core.prefs +++ /dev/null @@ -1,163 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.cdt.core.formatter.alignment_for_assignment=16 -org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80 -org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.cdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=34 -org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18 -org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0 -org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16 -org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48 -org.eclipse.cdt.core.formatter.alignment_for_expression_list=0 -org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.cdt.core.formatter.alignment_for_member_access=0 -org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16 -org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.cdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=end_of_line -org.eclipse.cdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1 -org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true -org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true -org.eclipse.cdt.core.formatter.compact_else_if=true -org.eclipse.cdt.core.formatter.continuation_indentation=2 -org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false -org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0 -org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true -org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false -org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false -org.eclipse.cdt.core.formatter.indent_empty_lines=false -org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.cdt.core.formatter.indentation.size=4 -org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert -org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert -org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert -org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert -org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert -org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert -org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.cdt.core.formatter.join_wrapped_lines=true -org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.cdt.core.formatter.lineSplit=130 -org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.cdt.core.formatter.tabulation.char=tab -org.eclipse.cdt.core.formatter.tabulation.size=3 -org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/spine-sfml/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/spine-sfml/.settings/org.eclipse.cdt.managedbuilder.core.prefs deleted file mode 100644 index bfe651904..000000000 --- a/spine-sfml/.settings/org.eclipse.cdt.managedbuilder.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -eclipse.preferences.version=1 -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.804921154/CPATH/delimiter=; -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.804921154/CPATH/operation=remove -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.804921154/CPLUS_INCLUDE_PATH/delimiter=; -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.804921154/CPLUS_INCLUDE_PATH/operation=remove -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.804921154/C_INCLUDE_PATH/delimiter=; -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.804921154/C_INCLUDE_PATH/operation=remove -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.804921154/append=true -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.804921154/appendContributed=true -environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.mingw.exe.debug.804921154/LIBRARY_PATH/delimiter=; -environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.mingw.exe.debug.804921154/LIBRARY_PATH/operation=remove -environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.mingw.exe.debug.804921154/append=true -environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.mingw.exe.debug.804921154/appendContributed=true diff --git a/spine-sfml/.settings/org.eclipse.cdt.ui.prefs b/spine-sfml/.settings/org.eclipse.cdt.ui.prefs deleted file mode 100644 index 0a72262a7..000000000 --- a/spine-sfml/.settings/org.eclipse.cdt.ui.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -formatter_profile=_Nate -formatter_settings_version=1 diff --git a/spine-sfml/.settings/org.eclipse.ltk.core.refactoring.prefs b/spine-sfml/.settings/org.eclipse.ltk.core.refactoring.prefs deleted file mode 100644 index b196c64a3..000000000 --- a/spine-sfml/.settings/org.eclipse.ltk.core.refactoring.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false diff --git a/spine-sfml/README.md b/spine-sfml/README.md index 856804404..9d2051256 100644 --- a/spine-sfml/README.md +++ b/spine-sfml/README.md @@ -10,7 +10,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-sfml works with data exported from Spine version 3.2.01. +spine-sfml works with data exported from the latest version of Spine. spine-sfml supports all Spine features. diff --git a/spine-sfml/data/goblins-mesh.atlas b/spine-sfml/data/goblins-mesh.atlas index d0ddb80c6..2652027f9 100644 --- a/spine-sfml/data/goblins-mesh.atlas +++ b/spine-sfml/data/goblins-mesh.atlas @@ -1,291 +1,292 @@ goblins-mesh.png +size: 512,512 format: RGBA8888 filter: Linear,Linear repeat: none dagger - rotate: true - xy: 372, 100 + rotate: false + xy: 26, 147 size: 26, 108 orig: 26, 108 offset: 0, 0 index: -1 goblin/eyes-closed rotate: false - xy: 2, 7 + xy: 329, 334 size: 34, 12 orig: 34, 12 offset: 0, 0 index: -1 goblin/head rotate: false - xy: 107, 36 + xy: 26, 355 size: 103, 66 orig: 103, 66 offset: 0, 0 index: -1 goblin/left-arm rotate: false - xy: 901, 56 + xy: 54, 142 size: 37, 35 orig: 37, 35 offset: 0, 0 index: -1 goblin/left-foot - rotate: false - xy: 929, 95 + rotate: true + xy: 2, 69 size: 65, 31 orig: 65, 31 offset: 0, 0 index: -1 goblin/left-hand rotate: false - xy: 452, 2 + xy: 266, 332 size: 36, 41 orig: 36, 41 offset: 0, 0 index: -1 goblin/left-lower-leg rotate: true - xy: 713, 93 + xy: 273, 433 size: 33, 70 orig: 33, 70 offset: 0, 0 index: -1 goblin/left-shoulder rotate: false - xy: 610, 44 + xy: 305, 288 size: 29, 44 orig: 29, 44 offset: 0, 0 index: -1 goblin/left-upper-leg - rotate: true - xy: 638, 93 + rotate: false + xy: 96, 280 size: 33, 73 orig: 33, 73 offset: 0, 0 index: -1 goblin/neck rotate: false - xy: 490, 2 + xy: 267, 289 size: 36, 41 orig: 36, 41 offset: 0, 0 index: -1 goblin/pelvis rotate: false - xy: 482, 45 + xy: 131, 363 size: 62, 43 orig: 62, 43 offset: 0, 0 index: -1 goblin/right-arm - rotate: true - xy: 690, 2 + rotate: false + xy: 304, 334 size: 23, 50 orig: 23, 50 offset: 0, 0 index: -1 goblin/right-foot rotate: false - xy: 771, 58 + xy: 201, 397 size: 63, 33 orig: 63, 33 offset: 0, 0 index: -1 goblin/right-hand rotate: false - xy: 940, 56 + xy: 336, 295 size: 36, 37 orig: 36, 37 offset: 0, 0 index: -1 goblin/right-lower-leg rotate: true - xy: 482, 90 + xy: 273, 468 size: 36, 76 orig: 36, 76 offset: 0, 0 index: -1 goblin/right-shoulder - rotate: true - xy: 602, 3 + rotate: false + xy: 196, 285 size: 39, 45 orig: 39, 45 offset: 0, 0 index: -1 goblin/right-upper-leg rotate: true - xy: 641, 57 + xy: 131, 282 size: 34, 63 orig: 34, 63 offset: 0, 0 index: -1 goblin/torso - rotate: true - xy: 212, 34 + rotate: false + xy: 131, 408 size: 68, 96 orig: 68, 96 offset: 0, 0 index: -1 goblin/undie-straps - rotate: false - xy: 380, 5 + rotate: true + xy: 266, 375 size: 55, 19 orig: 55, 19 offset: 0, 0 index: -1 goblin/undies rotate: false - xy: 174, 5 + xy: 429, 440 size: 36, 29 orig: 36, 29 offset: 0, 0 index: -1 goblingirl/eyes-closed rotate: false - xy: 269, 11 + xy: 96, 257 size: 37, 21 orig: 37, 21 offset: 0, 0 index: -1 goblingirl/head rotate: false - xy: 2, 21 + xy: 26, 423 size: 103, 81 orig: 103, 81 offset: 0, 0 index: -1 goblingirl/left-arm - rotate: true - xy: 978, 56 + rotate: false + xy: 390, 434 size: 37, 35 orig: 37, 35 offset: 0, 0 index: -1 goblingirl/left-foot - rotate: false - xy: 107, 3 + rotate: true + xy: 2, 2 size: 65, 31 orig: 65, 31 offset: 0, 0 index: -1 goblingirl/left-hand rotate: false - xy: 565, 2 + xy: 329, 348 size: 35, 40 orig: 35, 40 offset: 0, 0 index: -1 goblingirl/left-lower-leg rotate: true - xy: 785, 93 + xy: 351, 471 size: 33, 70 orig: 33, 70 offset: 0, 0 index: -1 goblingirl/left-shoulder - rotate: true - xy: 690, 27 + rotate: false + xy: 237, 284 size: 28, 46 orig: 28, 46 offset: 0, 0 index: -1 goblingirl/left-upper-leg rotate: true - xy: 857, 93 + xy: 423, 471 size: 33, 70 orig: 33, 70 offset: 0, 0 index: -1 goblingirl/neck rotate: false - xy: 528, 2 + xy: 328, 390 size: 35, 41 orig: 35, 41 offset: 0, 0 index: -1 goblingirl/pelvis rotate: false - xy: 546, 45 + xy: 131, 318 size: 62, 43 orig: 62, 43 offset: 0, 0 index: -1 goblingirl/right-arm - rotate: false - xy: 452, 48 + rotate: true + xy: 135, 252 size: 28, 50 orig: 28, 50 offset: 0, 0 index: -1 goblingirl/right-foot - rotate: false - xy: 836, 58 + rotate: true + xy: 231, 332 size: 63, 33 orig: 63, 33 offset: 0, 0 index: -1 goblingirl/right-hand rotate: true - xy: 771, 20 + xy: 351, 433 size: 36, 37 orig: 36, 37 offset: 0, 0 index: -1 goblingirl/right-lower-leg - rotate: true - xy: 560, 90 + rotate: false + xy: 54, 179 size: 36, 76 orig: 36, 76 offset: 0, 0 index: -1 goblingirl/right-shoulder rotate: false - xy: 649, 10 + xy: 287, 386 size: 39, 45 orig: 39, 45 offset: 0, 0 index: -1 goblingirl/right-upper-leg - rotate: true - xy: 706, 57 + rotate: false + xy: 195, 332 size: 34, 63 orig: 34, 63 offset: 0, 0 index: -1 goblingirl/torso rotate: false - xy: 310, 2 + xy: 26, 257 size: 68, 96 orig: 68, 96 offset: 0, 0 index: -1 goblingirl/undie-straps - rotate: false - xy: 212, 13 + rotate: true + xy: 92, 200 size: 55, 19 orig: 55, 19 offset: 0, 0 index: -1 goblingirl/undies - rotate: false - xy: 810, 27 + rotate: true + xy: 365, 395 size: 36, 29 orig: 36, 29 offset: 0, 0 index: -1 shield rotate: false - xy: 380, 26 + xy: 201, 432 size: 70, 72 orig: 70, 72 offset: 0, 0 index: -1 spear - rotate: true - xy: 2, 104 + rotate: false + xy: 2, 136 size: 22, 368 orig: 22, 368 offset: 0, 0 diff --git a/spine-sfml/data/goblins-mesh.json b/spine-sfml/data/goblins-mesh.json index 67a624a36..8443eee97 100644 --- a/spine-sfml/data/goblins-mesh.json +++ b/spine-sfml/data/goblins-mesh.json @@ -1,26 +1,27 @@ { +"skeleton": { "hash": "P7CQ4ImK+tcAICATgSttlZ5HOSM", "spine": "3.3.07", "width": 266.93, "height": 349.6, "images": "./images/" }, "bones": [ { "name": "root" }, { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, - { "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 }, + { "name": "torso", "parent": "hip", "length": 85.82, "rotation": 93.92, "x": -6.42, "y": 1.97 }, + { "name": "neck", "parent": "torso", "length": 18.38, "rotation": -1.51, "x": 81.67, "y": -6.34 }, + { "name": "head", "parent": "neck", "length": 68.28, "rotation": -13.92, "x": 20.93, "y": 11.59 }, + { "name": "left shoulder", "parent": "torso", "length": 35.43, "rotation": -156.96, "x": 74.04, "y": -20.38 }, + { "name": "left arm", "parent": "left shoulder", "length": 35.62, "rotation": 28.16, "x": 37.85, "y": -2.34 }, + { "name": "left upper leg", "parent": "hip", "length": 50.39, "rotation": -89.09, "x": 14.45, "y": 2.81 }, + { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "rotation": -16.65, "x": 56.34, "y": 0.98 }, + { "name": "left foot", "parent": "left lower leg", "length": 46.5, "rotation": 102.43, "x": 58.94, "y": -7.61 }, + { "name": "left hand", "parent": "left arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.07 }, { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, - { "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 }, - { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 }, - { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 }, - { "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 }, - { "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 }, - { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 }, - { "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 }, - { "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 }, - { "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 }, - { "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 }, - { "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 }, - { "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 }, - { "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 }, - { "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 }, - { "name": "spear1", "parent": "left hand", "length": 65.06, "x": 0.48, "y": 17.03, "rotation": 102.43 }, - { "name": "spear2", "parent": "spear1", "length": 61.41, "x": 65.05, "y": 0.04, "rotation": 0.9 }, - { "name": "spear3", "parent": "spear2", "length": 76.79, "x": 61.88, "y": 0.57, "rotation": -0.9 } + { "name": "right shoulder", "parent": "torso", "length": 37.24, "rotation": 133.88, "x": 76.02, "y": 18.14 }, + { "name": "right arm", "parent": "right shoulder", "length": 36.74, "rotation": 36.32, "x": 37.6, "y": 0.31 }, + { "name": "right upper leg", "parent": "hip", "length": 42.45, "rotation": -97.49, "x": -20.07, "y": -6.83 }, + { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "rotation": -14.34, "x": 42.99, "y": -0.61 }, + { "name": "right foot", "parent": "right lower leg", "length": 45.45, "rotation": 110.3, "x": 64.88, "y": 0.04 }, + { "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.35, "x": 36.9, "y": 0.34 }, + { "name": "spear1", "parent": "left hand", "length": 65.06, "rotation": 102.43, "x": 0.48, "y": 17.03 }, + { "name": "spear2", "parent": "spear1", "length": 61.41, "rotation": 0.9, "x": 65.05, "y": 0.04 }, + { "name": "spear3", "parent": "spear2", "length": 76.79, "rotation": -0.9, "x": 61.88, "y": 0.57 } ], "slots": [ { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" }, @@ -52,12 +53,12 @@ "left hand item": { "dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 }, "spear": { - "type": "skinnedmesh", + "type": "mesh", "uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.76608, 0.21781, 0.75642, 0.386, 0.74723, 0.54607, 0.72117, 1, 0.28838, 1, 0.24208, 0.54327, 0.22589, 0.38361, 0.2089, 0.21605, 0.20043, 0.13242, 0, 0.11519, 0.4527, 0, 0.58399, 0 ], "triangles": [ 4, 7, 3, 6, 7, 4, 5, 6, 4, 10, 11, 12, 1, 13, 0, 12, 13, 1, 10, 12, 1, 9, 10, 1, 2, 9, 1, 8, 9, 2, 3, 8, 2, 7, 8, 3 ], - "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.51, 20, -0.31, -6.16, 0.48, 2, 18, 64.73, -5.03, 0.5, 19, -0.4, -5.06, 0.49, 1, 16, 4.56, 23.91, 1, 1, 16, 41.7, -138.95, 1, 1, 16, 32.42, -141.1, 1, 1, 16, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.5, 19, 0.53, 6.59, 0.49, 2, 19, 62.18, 6.66, 0.51, 20, 0.2, 6.09, 0.48, 1, 20, 30.96, 6.61, 1, 1, 20, 37.26, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], - "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], + "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.5116, 20, -0.31, -6.16, 0.48839, 2, 18, 64.73, -5.03, 0.50272, 19, -0.4, -5.06, 0.49728, 1, 10, 4.56, 23.91, 1, 1, 10, 41.7, -138.95, 1, 1, 10, 32.41999, -141.1, 1, 1, 10, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.50272, 19, 0.52999, 6.59, 0.49728, 2, 19, 62.18, 6.66, 0.5116, 20, 0.2, 6.09, 0.48839, 1, 20, 30.96, 6.61, 1, 1, 20, 37.25999, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], "hull": 14, + "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], "width": 22, "height": 368 } @@ -66,10 +67,10 @@ "dagger": { "type": "mesh", "uvs": [ 0.78091, 0.38453, 1, 0.38405, 1, 0.44881, 0.73953, 0.4687, 0.74641, 0.81344, 0.34022, 1, 0.15434, 1, 0.11303, 0.78858, 0.23007, 0.47367, 0, 0.45047, 0, 0.38621, 0.22367, 0.38573, 0.24384, 0, 1, 0 ], - "triangles": [ 5, 7, 8, 4, 8, 3, 4, 5, 8, 5, 6, 7, 9, 11, 8, 8, 11, 3, 3, 0, 2, 3, 11, 0, 9, 10, 11, 0, 1, 2, 11, 12, 0, 0, 12, 13 ], + "triangles": [ 0, 12, 13, 11, 12, 0, 0, 1, 2, 9, 10, 11, 3, 11, 0, 3, 0, 2, 8, 11, 3, 9, 11, 8, 5, 6, 7, 4, 5, 8, 4, 8, 3, 5, 7, 8 ], "vertices": [ 15.49, -12.82, 21.13, -13.57, 20.16, -20.49, 13.15, -21.67, 8.13, -58.56, -5.13, -77.04, -9.92, -76.36, -7.79, -53.6, -0.03, -20.36, -5.6, -17.04, -4.63, -10.17, 1.12, -10.93, 7.46, 30.24, 26.93, 27.49 ], - "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], "hull": 14, + "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], "width": 26, "height": 108 } @@ -88,9 +89,9 @@ "type": "mesh", "uvs": [ 0, 0.60494, 0.14172, 0.5145, 0.24218, 0.55229, 0.32667, 0.67806, 0.37969, 0.79352, 0.53505, 0.93014, 0.86056, 1, 0.94071, 0.94169, 0.92098, 0.69923, 0.9888, 0.65497, 0.99003, 0.51643, 0.89632, 0.43561, 0.94487, 0.41916, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80754, 0.16044, 0.66698, 0.01997, 0.4734, 0.01805, 0.29215, 0.19893, 0.25392, 0.31823, 0.09117, 0.324, 0, 0.44331, 0.43271, 0.69153, 0.466, 0.47794, 0.35996, 0.31246, 0.73473, 0.68593, 0.72215, 0.57425, 0.88179, 0.5583, 0.80267, 0.51015 ], "triangles": [ 5, 27, 6, 7, 27, 8, 7, 6, 27, 4, 24, 5, 5, 24, 27, 4, 3, 24, 27, 29, 8, 8, 29, 9, 24, 28, 27, 24, 25, 28, 24, 3, 25, 29, 28, 30, 29, 27, 28, 25, 2, 26, 25, 3, 2, 9, 29, 10, 0, 23, 1, 28, 25, 30, 29, 11, 10, 29, 30, 11, 2, 21, 26, 2, 1, 21, 23, 22, 1, 1, 22, 21, 30, 16, 11, 30, 17, 16, 30, 25, 17, 17, 26, 18, 18, 26, 19, 26, 17, 25, 11, 15, 12, 11, 16, 15, 12, 15, 13, 15, 14, 13, 21, 20, 26, 26, 20, 19 ], - "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.46, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.6, 23.41, 35.89, 40.17, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.8, -24.31, 17.2, -40.65, 20.68, -33.02 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], + "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.45999, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.59999, 23.41, 35.89, 40.16999, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.79999, -24.31, 17.2, -40.65, 20.68, -33.02 ], "hull": 24, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], "width": 103, "height": 66 } @@ -101,9 +102,9 @@ "type": "mesh", "uvs": [ 0.68992, 0.29284, 1, 0.46364, 1, 0.74643, 0.84089, 1, 0.66344, 1, 0.33765, 0.64284, 0, 0.44124, 0, 0, 0.34295, 0 ], "triangles": [ 3, 4, 2, 4, 5, 2, 5, 0, 2, 0, 1, 2, 0, 5, 8, 5, 6, 8, 6, 7, 8 ], - "vertices": [ 18.6, 8.81, 32.19, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], + "vertices": [ 18.6, 8.81, 32.18999, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], "width": 37, "height": 35 } @@ -113,10 +114,10 @@ "name": "goblin/left-foot", "type": "mesh", "uvs": [ 0.15733, 0.31873, 0.08195, 0.78502, 0.15884, 0.99366, 0.41633, 0.96804, 0.68822, 0.97636, 1, 0.96388, 0.99385, 0.73501, 0.85294, 0.51862, 0.61479, 0.31056, 0.46991, 0, 0.48032, 0.75604, 0.75994, 0.77706 ], - "triangles": [ 2, 1, 3, 3, 10, 4, 4, 11, 5, 4, 10, 11, 3, 1, 10, 11, 6, 5, 1, 0, 10, 11, 7, 6, 11, 10, 7, 10, 8, 7, 10, 0, 8, 0, 9, 8 ], + "triangles": [ 0, 9, 8, 10, 0, 8, 10, 8, 7, 11, 10, 7, 11, 7, 6, 1, 0, 10, 11, 6, 5, 3, 1, 10, 4, 10, 11, 4, 11, 5, 3, 10, 4, 2, 1, 3 ], "vertices": [ 2.28, 13.07, -1.76, -1.64, 3.59, -7.8, 20.25, -6.04, 37.91, -5.27, 58.12, -3.71, 57.31, 3.34, 47.78, 9.51, 31.95, 15.05, 21.99, 24.11, 24.03, 0.75, 42.21, 1.16 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], "width": 65, "height": 31 } @@ -126,10 +127,10 @@ "name": "goblin/left-hand", "type": "mesh", "uvs": [ 0.518, 0.12578, 1, 0.16285, 0.99788, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42792, 0.17601, 0, 0.43567, 0 ], - "triangles": [ 2, 3, 0, 4, 5, 0, 3, 4, 0, 0, 7, 8, 6, 7, 0, 0, 5, 6, 2, 0, 1 ], - "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.48, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], - "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], + "triangles": [ 2, 0, 1, 0, 5, 6, 6, 7, 0, 0, 7, 8, 3, 4, 0, 4, 5, 0, 2, 3, 0 ], + "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.47999, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], "hull": 9, + "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], "width": 36, "height": 41 } @@ -139,10 +140,10 @@ "name": "goblin/left-lower-leg", "type": "mesh", "uvs": [ 0.95508, 0.20749, 0.81927, 0.65213, 0.94754, 0.77308, 0.67842, 0.97346, 0.46463, 1, 0.26845, 1, 0.04963, 0.90706, 0.2106, 0.60115, 0.07478, 0.40195, 0.18545, 0, 0.28857, 0 ], - "triangles": [ 1, 3, 4, 7, 4, 5, 5, 6, 7, 3, 1, 2, 1, 4, 7, 0, 1, 10, 7, 8, 10, 1, 7, 10, 10, 8, 9 ], - "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.19, -18.29 ], - "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], + "triangles": [ 10, 8, 9, 1, 7, 10, 7, 8, 10, 0, 1, 10, 1, 4, 7, 3, 1, 2, 5, 6, 7, 7, 4, 5, 1, 3, 4 ], + "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.18999, -18.29 ], "hull": 11, + "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], "width": 33, "height": 70 } @@ -153,9 +154,9 @@ "type": "mesh", "uvs": [ 0.7377, 0.40692, 1, 0.75237, 1, 1, 0.62046, 1, 0.26184, 0.56601, 0, 0.29783, 0, 0, 0.44115, 0 ], "triangles": [ 3, 1, 2, 3, 0, 1, 3, 4, 0, 4, 7, 0, 4, 5, 7, 5, 6, 7 ], - "vertices": [ 15.18, 5.74, 32.17, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.74, -4.66, 6.54 ], - "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], + "vertices": [ 15.18, 5.74, 32.16999, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.73999, -4.66, 6.54 ], "hull": 8, + "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], "width": 29, "height": 44 } @@ -165,10 +166,10 @@ "name": "goblin/left-upper-leg", "type": "mesh", "uvs": [ 1, 0.12167, 1, 0.54873, 0.91067, 0.78907, 0.76567, 1, 0.3087, 0.9579, 0, 0.68777, 0, 0.219, 0.51961, 0, 0.87552, 0 ], - "triangles": [ 3, 4, 2, 2, 4, 1, 1, 4, 7, 4, 5, 7, 0, 1, 7, 5, 6, 7, 7, 8, 0 ], + "triangles": [ 7, 8, 0, 5, 6, 7, 0, 1, 7, 4, 5, 7, 1, 4, 7, 2, 4, 1, 3, 4, 2 ], "vertices": [ 2.33, 13.06, 33.5, 12.57, 51, 9.34, 66.32, 4.31, 63, -10.71, 43.13, -20.58, 8.91, -20.04, -6.79, -2.64, -6.61, 9.1 ], - "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], "hull": 9, + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], "width": 33, "height": 73 } @@ -179,9 +180,9 @@ "type": "mesh", "uvs": [ 0.81967, 0.27365, 0.92101, 0.82048, 0.47134, 1, 0.15679, 0.9354, 0, 0.7556, 0.19268, 0.51833, 0.15468, 0.35706, 0, 0.21989, 0.13568, 0, 0.68878, 0, 0.70145, 0.53872 ], "triangles": [ 3, 5, 2, 2, 10, 1, 2, 5, 10, 3, 4, 5, 10, 0, 1, 0, 10, 6, 10, 5, 6, 7, 8, 6, 6, 9, 0, 6, 8, 9 ], - "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.05, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], - "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], + "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.04999, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], "hull": 10, + "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], "width": 36, "height": 41 } @@ -191,10 +192,10 @@ "name": "goblin/pelvis", "type": "mesh", "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], - "triangles": [ 1, 3, 0, 1, 2, 3 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], "vertices": [ 25.38, -20.73, -36.61, -20.73, -36.61, 22.26, 25.38, 22.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "width": 62, "height": 43 } @@ -205,9 +206,9 @@ "type": "mesh", "uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24384, 1, 0, 0.86558, 0.20822, 0.10919, 0.50903, 0, 0.85342, 0 ], "triangles": [ 1, 2, 6, 6, 2, 5, 1, 6, 0, 4, 5, 3, 2, 3, 5, 6, 7, 0 ], - "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.18 ], - "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], + "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.17999 ], "hull": 8, + "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], "width": 23, "height": 50 } @@ -217,10 +218,10 @@ "name": "goblin/right-foot", "type": "mesh", "uvs": [ 0.40851, 0.0047, 0.59087, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97532, 0.89391, 0.90385, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65984, 0, 0.46577, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71257, 0.715, 0.74681 ], - "triangles": [ 4, 5, 15, 7, 14, 6, 5, 6, 15, 6, 14, 15, 14, 7, 9, 7, 8, 9, 15, 3, 4, 9, 10, 14, 15, 2, 3, 15, 14, 2, 14, 10, 1, 12, 1, 11, 1, 12, 13, 14, 1, 2, 1, 13, 0, 1, 10, 11 ], + "triangles": [ 1, 10, 11, 1, 13, 0, 14, 1, 2, 1, 12, 13, 12, 1, 11, 14, 10, 1, 15, 14, 2, 15, 2, 3, 9, 10, 14, 15, 3, 4, 7, 8, 9, 14, 7, 9, 6, 14, 15, 5, 6, 15, 7, 14, 6, 4, 5, 15 ], "vertices": [ 17.36, 25.99, 29.13, 15.44, 39.89, 10.8, 48.14, 7.24, 53.84, -2.38, 49.43, -6, 34.84, -6.39, 16.84, -6.87, -2.4, -7.38, -7.58, -3.86, -7.78, 3.7, -7.95, 10.1, -2.57, 22.36, 10.84, 25.97, 22.14, 2.75, 37.31, 2.03 ], - "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], "hull": 14, + "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], "width": 63, "height": 33 } @@ -230,10 +231,10 @@ "name": "goblin/right-hand", "type": "mesh", "uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89823, 0.82004, 0.8259, 0.74285, 0.84223, 0.49993, 0.96356, 0.34102, 0.66023, 0 ], - "triangles": [ 4, 7, 5, 5, 7, 6, 4, 3, 7, 3, 2, 8, 7, 3, 8, 8, 1, 10, 8, 2, 1, 0, 10, 1, 8, 10, 9 ], - "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.88, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "triangles": [ 8, 10, 9, 0, 10, 1, 8, 2, 1, 8, 1, 10, 7, 3, 8, 3, 2, 8, 4, 3, 7, 5, 7, 6, 4, 7, 5 ], + "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.87999, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], "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 ], "width": 36, "height": 37 } @@ -243,10 +244,10 @@ "name": "goblin/right-hand", "type": "mesh", "uvs": [ 0.88538, 0.22262, 0.76167, 0.3594, 0.75088, 0.78308, 0.95326, 0.84981, 1, 0.60302 ], - "triangles": [ 3, 2, 4, 2, 1, 4, 1, 0, 4 ], + "triangles": [ 1, 0, 4, 2, 1, 4, 3, 2, 4 ], "vertices": [ -2.82, 15.97, 2.4, 11.71, 18.08, 11.9, 20.27, 19.27, 11.09, 20.62 ], - "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], "hull": 5, + "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], "width": 36, "height": 37 } @@ -256,10 +257,10 @@ "name": "goblin/right-lower-leg", "type": "mesh", "uvs": [ 1, 0.27261, 0.81312, 0.52592, 0.79587, 0.71795, 0.95544, 0.80988, 0.85193, 0.95493, 0.47241, 1, 0.14033, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30325, 0.60611, 0 ], - "triangles": [ 4, 5, 2, 2, 5, 8, 5, 6, 8, 6, 7, 8, 4, 2, 3, 2, 8, 1, 8, 9, 1, 9, 10, 1, 1, 10, 0 ], - "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.1, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.77, -1.03, 58.99, -9.19, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], + "triangles": [ 1, 10, 0, 9, 10, 1, 8, 9, 1, 2, 8, 1, 4, 2, 3, 6, 7, 8, 5, 6, 8, 2, 5, 8, 4, 5, 2 ], + "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.09999, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.76999, -1.03, 58.99, -9.18999, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], "width": 36, "height": 76 } @@ -271,8 +272,8 @@ "uvs": [ 0.62008, 0.03708, 0.92131, 0.09048, 1, 0.38319, 0.72049, 0.6937, 0.31656, 1, 0, 1, 0, 0.75106, 0.28233, 0.49988 ], "triangles": [ 4, 6, 7, 4, 7, 3, 4, 5, 6, 7, 0, 3, 2, 0, 1, 2, 3, 0 ], "vertices": [ -3.17, -11.05, -9, -0.57, -1.01, 10.33, 16.69, 11.17, 37.41, 8.2, 45.45, -1.16, 36.95, -8.46, 21.2, -7.47 ], - "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], "hull": 8, + "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], "width": 39, "height": 45 } @@ -282,10 +283,10 @@ "name": "goblin/right-upper-leg", "type": "mesh", "uvs": [ 0.27018, 0, 0.11618, 0.18177, 0, 0.70688, 0, 0.89577, 0.26668, 1, 0.48718, 1, 0.67618, 0.83532, 1, 0.5161, 1, 0.25543, 0.74618, 0.0571 ], - "triangles": [ 5, 4, 6, 6, 4, 2, 4, 3, 2, 2, 1, 6, 6, 1, 9, 6, 9, 7, 9, 1, 0, 9, 8, 7 ], - "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.51, 10.18, 19.13, 18.47, 2.85, 16.32, -8.4, 6.14 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "triangles": [ 9, 8, 7, 9, 1, 0, 6, 9, 7, 6, 1, 9, 2, 1, 6, 4, 3, 2, 6, 4, 2, 5, 4, 6 ], + "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.50999, 10.18, 19.12999, 18.46999, 2.85, 16.32, -8.39999, 6.14 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], "width": 34, "height": 63 } @@ -296,9 +297,9 @@ "type": "mesh", "uvs": [ 0, 0.33287, 0.15945, 0.46488, 0.15761, 0.60314, 0.15502, 0.79806, 0.32807, 0.93478, 0.6875, 1, 0.80731, 1, 1, 0.77763, 1, 0.66147, 1, 0.56703, 0.93207, 0.4771, 0.86944, 0.39416, 0.83837, 0.226, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78734, 0.86249, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38316, 0.77692, 0.73446, 0.66478, 0.51012 ], "triangles": [ 5, 16, 6, 6, 16, 7, 4, 17, 5, 5, 17, 16, 4, 3, 17, 17, 21, 16, 16, 21, 7, 3, 2, 17, 21, 19, 18, 21, 17, 19, 17, 2, 19, 21, 8, 7, 21, 18, 8, 18, 9, 8, 19, 22, 18, 18, 10, 9, 18, 22, 10, 2, 1, 19, 19, 20, 22, 19, 1, 20, 22, 11, 10, 22, 20, 11, 20, 1, 14, 20, 12, 11, 1, 0, 14, 20, 13, 12, 20, 14, 13, 0, 15, 14 ], - "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.88, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], + "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.87999, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], "hull": 16, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], "width": 68, "height": 96 } @@ -308,10 +309,10 @@ "name": "goblin/undie-straps", "type": "mesh", "uvs": [ 0.36097, 0.44959, 0.66297, 0.60591, 1, 0.19486, 1, 0.57117, 0.75897, 1, 0.38697, 1, 0, 0.26433, 0, 0, 0.12497, 0 ], - "triangles": [ 5, 1, 4, 4, 1, 3, 6, 0, 5, 5, 0, 1, 3, 1, 2, 6, 8, 0, 6, 7, 8 ], - "vertices": [ -10.56, 12.87, 6.53, 9.9, 25.62, 17.71, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], + "triangles": [ 6, 7, 8, 6, 8, 0, 3, 1, 2, 5, 0, 1, 6, 0, 5, 4, 1, 3, 5, 1, 4 ], + "vertices": [ -10.56, 12.87, 6.53, 9.89999, 25.62, 17.70999, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], "width": 55, "height": 19 } @@ -321,10 +322,10 @@ "name": "goblin/undies", "type": "mesh", "uvs": [ 0, 0.32029, 0.14893, 0.59457, 0.22437, 1, 0.35909, 1, 0.50998, 1, 0.79559, 0.58453, 0.9842, 0.28015, 1, 0.00588, 0.46957, 0.17646, 0, 0.03933, 0.48843, 0.59122, 0.48114, 0.43099 ], - "triangles": [ 3, 10, 4, 4, 10, 5, 10, 3, 1, 3, 2, 1, 1, 11, 10, 1, 0, 11, 10, 11, 5, 5, 11, 6, 0, 8, 11, 11, 8, 6, 0, 9, 8, 6, 8, 7 ], - "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.59, 22.22, 6.11, 22.92, 14.05, 3.75, 9.44, -13.08, 13.71, 4.21, -2.59, 4.03, 2.05 ], - "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], + "triangles": [ 6, 8, 7, 0, 9, 8, 11, 8, 6, 0, 8, 11, 5, 11, 6, 10, 11, 5, 1, 0, 11, 1, 11, 10, 3, 2, 1, 10, 3, 1, 4, 10, 5, 3, 10, 4 ], + "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.58999, 22.22, 6.11, 22.92, 14.05, 3.75, 9.43999, -13.08, 13.71, 4.21, -2.58999, 4.03, 2.05 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], "width": 36, "height": 29 } @@ -757,7 +758,7 @@ ] } }, - "ffd": { + "deform": { "default": { "left hand item": { "spear": [ @@ -769,19 +770,19 @@ { "time": 0, "offset": 26, - "vertices": [ 2.34, 0.14 ], + "vertices": [ 2.34754, 0.14469 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.5, "offset": 8, - "vertices": [ -1.19, 4.31, 0.07, 6.41, 1.66, 6.18, 1.75, 3.59 ], + "vertices": [ -1.19415, 4.31531, 0.07279, 6.41351, 1.66048, 6.18882, 1.75232, 3.59555 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1, "offset": 26, - "vertices": [ 2.34, 0.14 ] + "vertices": [ 2.34754, 0.14469 ] } ] } @@ -795,22 +796,22 @@ }, { "time": 0.2, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08, -1.08, 0.08, -1.08, 0.08, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08 ], + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391, -1.08534, 0.08391, -1.08534, 0.08391, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.3666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09, 1.47, 0.09, 1.47, 0.09, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09 ], + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017, 1.47305, 0.09017, 1.47305, 0.09017, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017 ], "curve": [ 0.621, 0, 0.75, 1 ] }, { "time": 0.7, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17, -1.17, -0.17, -1.17, -0.17, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17 ], + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183, -1.1755, -0.17182, -1.1755, -0.17183, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.8666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08, 0.38, 0.08, 0.38, 0.08, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08 ], + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446, 0.38687, 0.08446, 0.38687, 0.08446, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1 } @@ -821,35 +822,35 @@ { "time": 0, "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] }, { "time": 0.1333 }, { "time": 0.2333, "offset": 8, - "vertices": [ -3.96, -2.34, -5.8, -12.47, -2.23, -12.99, 2.02, -9.1, 0, 0, 0, 0, 0, 0, -1.35, -5.28 ] + "vertices": [ -3.96072, -2.34594, -5.80445, -12.47629, -2.23129, -12.99037, 2.02941, -9.1036, 0, 0, 0, 0, 0, 0, -1.35254, -5.2883 ] }, { "time": 0.3666, "offset": 8, - "vertices": [ 0.66, 0.33, 0.33, 2.69, -0.48, 2.54, -1.13, 1.38, 0, 0, 0, 0, 0, 0, -0.11, 0.79 ] + "vertices": [ 0.66504, 0.33548, 0.33902, 2.69014, -0.4817, 2.54524, -1.13592, 1.38562, 0, 0, 0, 0, 0, 0, -0.11907, 0.79273 ] }, { "time": 0.5, "curve": "stepped" }, { "time": 0.6333 }, { "time": 0.7333, "offset": 8, - "vertices": [ -2.97, 9.4, -6.91, 19.92, -10.55, 18.41, -12.37, 12.38, -4.72, 6.3, 0, 0, -1.48, 4.88, -7.06, 10.7 ] + "vertices": [ -2.97737, 9.40254, -6.91661, 19.92794, -10.55287, 18.41085, -12.37161, 12.38473, -4.72606, 6.30798, 0, 0, -1.48902, 4.88944, -7.06773, 10.70101 ] }, { "time": 0.8333, "offset": 6, - "vertices": [ 1.05, 1.56, -2.52, 7.99, -5.52, 17.14, -8.93, 15.79, -10.73, 10.22, -4.23, 5.36, 0, 0, 0, 0, -5.83, 8.55 ] + "vertices": [ 1.05318, 1.56361, -2.52722, 7.9974, -5.5203, 17.14136, -8.93317, 15.79635, -10.73747, 10.22055, -4.23801, 5.36992, 0, 0, 0, 0, -5.83147, 8.55531 ] }, { "time": 1, "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] } ] }, @@ -859,22 +860,22 @@ { "time": 0.1333, "offset": 6, - "vertices": [ -0.68, -4.13 ] + "vertices": [ -0.68989, -4.13283 ] }, { "time": 0.3333, "offset": 6, - "vertices": [ -1.04, -3.1 ] + "vertices": [ -1.04945, -3.10476 ] }, { "time": 0.7, "offset": 6, - "vertices": [ -1.42, -6.3 ] + "vertices": [ -1.4245, -6.30616 ] }, { "time": 0.8666, "offset": 6, - "vertices": [ -1.13, -1.79 ] + "vertices": [ -1.13541, -1.79035 ] }, { "time": 1 } ] @@ -885,38 +886,38 @@ { "time": 0.1333, "offset": 2, - "vertices": [ -2.81, 2.63, -2.35, 3.89, -1.99, 4.86, -0.93, 5.57, -0.48, 5.09, -0.34, 3.42, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31, 1.91, -1.32, 3.65 ] + "vertices": [ -2.81258, 2.63114, -2.35238, 3.89441, -1.99921, 4.8639, -0.93273, 5.57982, -0.48886, 5.09854, -0.34812, 3.42912, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31305, 1.91371, -1.32986, 3.65703 ] }, { "time": 0.2333, "offset": 2, - "vertices": [ -6.39, 6.41, -7.74, 8.27, -7.02, 11.35, -4.03, 13.93, -2.5, 12.62, -1.46, 7.58, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84, 2.61, -4.53, 7.92 ] + "vertices": [ -6.39088, 6.41245, -7.74575, 8.27191, -7.02471, 11.35894, -4.0347, 13.93454, -2.50399, 12.62962, -1.46124, 7.58915, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84765, 2.61215, -4.53955, 7.92357 ] }, { "time": 0.3, "offset": 2, - "vertices": [ -8.27, 6.68, -9.29, 10.13, -8.62, 14.71, -4.58, 18.81, -2.2, 17.1, -0.07, 9.9, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94, 2.38, -4.59, 10.01 ] + "vertices": [ -8.27184, 6.68821, -9.29764, 10.13797, -8.62231, 14.71339, -4.58629, 18.81939, -2.20304, 17.10709, -0.07794, 9.9046, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94624, 2.38007, -4.59398, 10.01888 ] }, { "time": 0.3666, "offset": 2, - "vertices": [ -10.47, 9.44, -13.36, 12.4, -14.32, 16.94, -9.24, 23.55, -5.51, 21.51, -1.19, 11.53, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14, 2.29, -6.63, 11.37 ] + "vertices": [ -10.47683, 9.44175, -13.36882, 12.40982, -14.32568, 16.94392, -9.24462, 23.55674, -5.51711, 21.51377, -1.19581, 11.53192, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14847, 2.29389, -6.63418, 11.37127 ] }, { "time": 0.5, "offset": 2, - "vertices": [ -5.42, 4.36, -10.59, 7.04, -11.64, 11.55, -6.19, 20.12, -1.45, 18.05, 4.86, 6.41, 2.81, 0.27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96, 4.94 ] + "vertices": [ -5.42473, 4.36854, -10.59004, 7.04468, -11.64251, 11.55845, -6.19665, 20.12805, -1.45497, 18.05411, 4.86619, 6.41678, 2.81462, 0.27601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96412, 4.94829 ] }, { "time": 0.6333 }, { "time": 0.7333, "offset": 4, - "vertices": [ 1.31, -6.84, -0.87, -12.54, -5.98, -14.08, -7.15, -11.63, -5.67, -4.83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06, -6.93 ] + "vertices": [ 1.31462, -6.84099, -0.87905, -12.54479, -5.9851, -14.08367, -7.15892, -11.63193, -5.6792, -4.83544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06163, -6.93844 ] }, { "time": 0.8, "offset": 4, - "vertices": [ 0.65, -3.42, -0.43, -6.27, -2.99, -7.04, -3.57, -5.81, -2.83, -2.41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79, -1.28, 0, 0, 0, 0, -1.03, -3.46 ] + "vertices": [ 0.65731, -3.42049, -0.43952, -6.27239, -2.99255, -7.04183, -3.57946, -5.81596, -2.83959, -2.41772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79687, -1.2802, 0, 0, 0, 0, -1.03081, -3.46922 ] }, { "time": 0.8666 } ] @@ -926,13 +927,13 @@ { "time": 0, "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] }, { "time": 0.5 }, { "time": 1, "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] } ] }, @@ -942,7 +943,7 @@ { "time": 0.6, "offset": 6, - "vertices": [ 1.8, -1.56 ] + "vertices": [ 1.80396, -1.56552 ] }, { "time": 1 } ] @@ -951,17 +952,17 @@ "right upper leg": [ { "time": 0, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] }, { "time": 0.3333 }, { "time": 0.8666, "offset": 14, - "vertices": [ 0.13, -2.35, -1.33, -5.99, -1.35, -4.43 ] + "vertices": [ 0.13424, -2.35377, -1.33317, -5.99572, -1.35861, -4.43323 ] }, { "time": 1, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] } ] }, @@ -970,37 +971,37 @@ { "time": 0, "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] }, { "time": 0.1333, "offset": 14, - "vertices": [ 1.31, -0.59, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + "vertices": [ 1.31318, -0.59727, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] }, { "time": 0.3, "offset": 14, - "vertices": [ 6.03, -3.13, 7.55, -1.38, 6.79, 0.31, 4.23, 1.14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07, -5.16, 0, 0, 4, 0.27, 0, 0, 0, 0, 3.43, -3.52 ] + "vertices": [ 6.03761, -3.13561, 7.55475, -1.38111, 6.79747, 0.31171, 4.23503, 1.14012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07575, -5.16824, 0, 0, 4.0041, 0.27245, 0, 0, 0, 0, 3.4376, -3.52286 ] }, { "time": 0.5, "offset": 14, - "vertices": [ 2.25, -0.87, 2.57, -0.56, 3.17, -0.57, 1.48, 0.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22, -4.43, 0, 0, 1.48, 0.01, 0, 0, 0, 0, 0.31, -3.28, -1.53, 0.17 ] + "vertices": [ 2.25942, -0.87202, 2.575, -0.56861, 3.17112, -0.57003, 1.48704, 0.9924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22451, -4.43862, 0, 0, 1.48691, 0.01586, 0, 0, 0, 0, 0.31388, -3.28095, -1.53797, 0.17803 ] }, { "time": 0.6333, "offset": 14, - "vertices": [ 0.75, -1.51, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + "vertices": [ 0.75002, -1.51701, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] }, { "time": 0.8666, "offset": 14, - "vertices": [ 0.62, -1.26, 0.38, -2.2, 3.25, -0.5, 2.41, 2.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.66, -3.1, 0, 0, 2.3, -1.15, 0, 0, 0, 0, -0.07, -3.63, -0.93, 0.1 ] + "vertices": [ 0.62202, -1.26262, 0.38489, -2.20701, 3.25048, -0.50042, 2.41108, 2.39315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6639, -3.10099, 0, 0, 2.30655, -1.15196, 0, 0, 0, 0, -0.07676, -3.63497, -0.9321, 0.1079 ] }, { "time": 1, "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] } ] }, @@ -1009,32 +1010,32 @@ { "time": 0, "offset": 2, - "vertices": [ -1.77, 0.54, -0.96, -1.03, -0.39, -0.24, -1.77, 0.54 ] + "vertices": [ -1.77696, 0.54759, -0.96145, -1.03793, -0.39148, -0.24071, -1.77696, 0.54759 ] }, { "time": 0.1333, "offset": 2, - "vertices": [ -2.25, -1.03, -1.49, -4.23, -0.74, -2.84, -1.9, 0.54 ] + "vertices": [ -2.25683, -1.03177, -1.49719, -4.23861, -0.74469, -2.84906, -1.90072, 0.54477 ] }, { "time": 0.3333, "offset": 2, - "vertices": [ -2.37, -0.05, -0.49, 0.19, -0.9, 1.16, -1.6, 2.7, 0.96, 0.8 ] + "vertices": [ -2.37974, -0.05431, -0.49433, 0.19436, -0.90861, 1.16519, -1.60956, 2.70798, 0.96186, 0.80615 ] }, { "time": 0.7, "offset": 2, - "vertices": [ -0.91, -2.76, -0.62, -3.63, -0.84, -2.26, -2.56, 0.52 ] + "vertices": [ -0.91714, -2.76567, -0.62214, -3.63489, -0.8494, -2.26772, -2.56076, 0.5297 ] }, { "time": 0.8666, "offset": 2, - "vertices": [ -2.56, 0.52, -1.58, 0.32, -1.38, 0.32, -2.56, 0.52 ] + "vertices": [ -2.56076, 0.5297, -1.58064, 0.32031, -1.3847, 0.32476, -2.56076, 0.5297 ] }, { "time": 1, "offset": 2, - "vertices": [ -1.77, 0.54, -0.8, 0.53, -0.8, 0.53, -1.77, 0.54 ] + "vertices": [ -1.77696, 0.54759, -0.80128, 0.53413, -0.80128, 0.53413, -1.77696, 0.54759 ] } ] }, @@ -1042,35 +1043,35 @@ "undies": [ { "time": 0, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] }, { "time": 0.1333, - "vertices": [ 0.72, 0.43, 7.2, -0.16, 1.37, 0, 1.37, 0, 1.37, 0, 1.25, 0.04, -0.99, -2.95, -1.37, -3.07, 1.37, 0, 0.35, -0.29, 2.99, -0.07, 3.9, -0.14 ] + "vertices": [ 0.72659, 0.43319, 7.20416, -0.1638, 1.37759, 0, 1.37759, 0, 1.37759, 0, 1.25279, 0.0464, -0.99861, -2.95085, -1.37542, -3.07404, 1.37759, 0, 0.35279, -0.29279, 2.99218, -0.07019, 3.90478, -0.14039 ] }, { "time": 0.3333, - "vertices": [ 1.16, 0, 2.1, -0.23, 0, 0, 0, 0, 0, 0, 2.24, -0.24, -0.43, 0.6, -1.55, 0.48 ] + "vertices": [ 1.16999, 0, 2.10599, -0.234, 0, 0, 0, 0, 0, 0, 2.24999, -0.24999, -0.4344, 0.60551, -1.55939, 0.48051 ] }, { "time": 0.5333, - "vertices": [ 1.16, 0, -0.23, -0.93, -2.92, 0.35, 0, 0, 0, 0, 0.49, -0.24, -0.64, -2.07, -0.64, -2.07 ] + "vertices": [ 1.16999, 0, -0.234, -0.93599, -2.92499, 0.35099, 0, 0, 0, 0, 0.49999, -0.24999, -0.64078, -2.07914, -0.64078, -2.07914 ] }, { "time": 0.7, - "vertices": [ 1.86, -0.11, 4.66, -0.09, -1.76, 0.21, 0, 0, -0.56, 0.32, -1.13, -1.15, -2.19, -3.47, -1.29, -3.47, 0, 0, 0, 0, 1.58, -0.04, 2.65, 0.16 ] + "vertices": [ 1.8627, -0.11514, 4.66326, -0.09099, -1.76428, 0.21171, 0, 0, -0.56832, 0.32832, -1.13833, -1.1511, -2.19996, -3.47068, -1.29718, -3.47068, 0, 0, 0, 0, 1.58785, -0.04642, 2.65941, 0.16714 ] }, { "time": 0.8333, - "vertices": [ 2.41, -0.2, 8.58, 0.58, -0.83, 0.1, 0, 0, -1.02, 0.59, -2.44, -1.87, -1.62, 0, 0, 0, 0, 0, 0, 0, 2.85, -0.08, 4.78, 0.3 ] + "vertices": [ 2.41687, -0.20725, 8.58108, 0.585, -0.83571, 0.10028, 0, 0, -1.02299, 0.59098, -2.44899, -1.872, -1.62499, 0, 0, 0, 0, 0, 0, 0, 2.85813, -0.08356, 4.78695, 0.30086 ] }, { "time": 0.8666, - "vertices": [ 2.01, -0.02, 8.98, 0.44, -0.2, 0.08, 0.45, 0, -0.35, 0.47, -1.84, -1.44, -0.79, 1.26, 0.53, 1.23, 0.45, 0, 0.11, -0.09, 3.28, -0.09, 5.13, 0.19 ] + "vertices": [ 2.01969, -0.0214, 8.98545, 0.4446, -0.20937, 0.08022, 0.45919, 0, -0.35919, 0.47279, -1.84159, -1.4488, -0.79153, 1.2642, 0.53285, 1.23981, 0.45919, 0, 0.11759, -0.09759, 3.2839, -0.09025, 5.13115, 0.19388 ] }, { "time": 1, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] } ] } diff --git a/spine-sfml/data/goblins-mesh.png b/spine-sfml/data/goblins-mesh.png index a3daf0010..6eaf853b1 100644 Binary files a/spine-sfml/data/goblins-mesh.png and b/spine-sfml/data/goblins-mesh.png differ diff --git a/spine-sfml/data/raptor.atlas b/spine-sfml/data/raptor.atlas index c90da0078..b59a1747c 100644 --- a/spine-sfml/data/raptor.atlas +++ b/spine-sfml/data/raptor.atlas @@ -1,251 +1,251 @@ raptor.png -size: 1022,1022 +size: 2048,2048 format: RGBA8888 filter: Linear,Linear repeat: none back_arm rotate: false - xy: 410, 545 - size: 46, 29 - orig: 46, 29 + xy: 830, 1093 + size: 91, 57 + orig: 91, 57 offset: 0, 0 index: -1 back_bracer - rotate: false - xy: 540, 548 - size: 39, 28 - orig: 39, 28 + rotate: true + xy: 217, 113 + size: 77, 55 + orig: 77, 55 offset: 0, 0 index: -1 back_hand rotate: true - xy: 504, 538 - size: 36, 34 - orig: 36, 34 + xy: 275, 501 + size: 72, 68 + orig: 72, 68 offset: 0, 0 index: -1 back_knee rotate: false - xy: 299, 478 - size: 49, 67 - orig: 49, 67 + xy: 583, 955 + size: 97, 134 + orig: 97, 134 offset: 0, 0 index: -1 back_thigh rotate: true - xy: 140, 247 - size: 39, 24 - orig: 39, 24 + xy: 440, 689 + size: 78, 47 + orig: 78, 47 offset: 0, 0 index: -1 eyes_open rotate: true - xy: 2, 2 - size: 47, 45 - orig: 47, 45 + xy: 495, 848 + size: 93, 89 + orig: 93, 89 offset: 0, 0 index: -1 front_arm rotate: false - xy: 360, 544 - size: 48, 30 - orig: 48, 30 + xy: 2, 5 + size: 96, 60 + orig: 96, 60 offset: 0, 0 index: -1 front_bracer - rotate: false - xy: 538, 578 - size: 41, 29 - orig: 41, 29 + rotate: true + xy: 217, 192 + size: 81, 58 + orig: 81, 58 offset: 0, 0 index: -1 front_hand rotate: false - xy: 538, 609 - size: 41, 38 - orig: 41, 38 + xy: 586, 878 + size: 82, 75 + orig: 82, 75 offset: 0, 0 index: -1 front_open_hand - rotate: false - xy: 894, 782 - size: 43, 44 - orig: 43, 44 + rotate: true + xy: 495, 760 + size: 86, 87 + orig: 86, 87 offset: 0, 0 index: -1 front_thigh rotate: false - xy: 942, 849 - size: 57, 29 - orig: 57, 29 + xy: 714, 1092 + size: 114, 58 + orig: 114, 58 offset: 0, 0 index: -1 gun rotate: false - xy: 785, 774 - size: 107, 103 - orig: 107, 103 + xy: 2, 67 + size: 213, 206 + orig: 213, 206 offset: 0, 0 index: -1 gun_nohand rotate: false - xy: 614, 703 - size: 105, 102 - orig: 105, 102 + xy: 1563, 1547 + size: 210, 203 + orig: 210, 203 offset: 0, 0 index: -1 head rotate: false - xy: 2, 137 - size: 136, 149 - orig: 136, 149 + xy: 2, 275 + size: 271, 298 + orig: 271, 298 offset: 0, 0 index: -1 lower_leg rotate: true - xy: 780, 699 - size: 73, 98 - orig: 73, 98 + xy: 386, 943 + size: 146, 195 + orig: 146, 195 offset: 0, 0 index: -1 mouth_smile - rotate: true - xy: 49, 2 - size: 47, 30 - orig: 47, 30 + rotate: false + xy: 100, 6 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 neck - rotate: true - xy: 1001, 860 - size: 18, 21 - orig: 18, 21 + rotate: false + xy: 1012, 1109 + size: 36, 41 + orig: 36, 41 offset: 0, 0 index: -1 raptor_arm_back rotate: false - xy: 940, 936 - size: 82, 86 - orig: 82, 86 + xy: 330, 769 + size: 163, 172 + orig: 163, 172 offset: 0, 0 index: -1 raptor_body rotate: false - xy: 2, 737 - size: 610, 285 - orig: 610, 285 + xy: 2, 1468 + size: 1219, 570 + orig: 1219, 570 offset: 0, 0 index: -1 raptor_front_arm rotate: true - xy: 195, 464 - size: 81, 102 - orig: 81, 102 + xy: 1223, 1445 + size: 162, 203 + orig: 162, 203 offset: 0, 0 index: -1 raptor_front_leg rotate: false - xy: 2, 478 - size: 191, 257 - orig: 191, 257 + xy: 2, 952 + size: 382, 514 + orig: 382, 514 offset: 0, 0 index: -1 raptor_hindleg_back rotate: false - xy: 614, 807 - size: 169, 215 - orig: 169, 215 + xy: 1223, 1609 + size: 338, 429 + orig: 338, 429 offset: 0, 0 index: -1 raptor_horn rotate: false - xy: 360, 655 - size: 182, 80 - orig: 182, 80 + xy: 714, 1307 + size: 363, 159 + orig: 363, 159 offset: 0, 0 index: -1 raptor_horn_back rotate: false - xy: 360, 576 - size: 176, 77 - orig: 176, 77 + xy: 714, 1152 + size: 351, 153 + orig: 351, 153 offset: 0, 0 index: -1 raptor_jaw rotate: false - xy: 785, 879 - size: 153, 143 - orig: 153, 143 + xy: 1563, 1752 + size: 305, 286 + orig: 305, 286 offset: 0, 0 index: -1 raptor_saddle_noshadow rotate: false - xy: 2, 288 - size: 163, 188 - orig: 163, 188 + xy: 2, 575 + size: 326, 375 + orig: 326, 375 offset: 0, 0 index: -1 raptor_saddle_strap_front - rotate: false - xy: 721, 710 - size: 57, 95 - orig: 57, 95 + rotate: true + xy: 1558, 1431 + size: 114, 189 + orig: 114, 189 offset: 0, 0 index: -1 raptor_saddle_strap_rear - rotate: true - xy: 940, 880 - size: 54, 74 - orig: 54, 74 + rotate: false + xy: 1079, 1318 + size: 108, 148 + orig: 108, 148 offset: 0, 0 index: -1 raptor_saddle_w_shadow rotate: false - xy: 195, 547 - size: 163, 188 - orig: 163, 188 + xy: 386, 1091 + size: 326, 375 + orig: 326, 375 offset: 0, 0 index: -1 raptor_tongue rotate: true - xy: 544, 649 - size: 86, 64 - orig: 86, 64 + xy: 1428, 1436 + size: 171, 128 + orig: 171, 128 offset: 0, 0 index: -1 stirrup_back rotate: false - xy: 458, 539 - size: 44, 35 - orig: 44, 35 + xy: 923, 1081 + size: 87, 69 + orig: 87, 69 offset: 0, 0 index: -1 stirrup_front - rotate: true - xy: 81, 4 - size: 45, 50 - orig: 45, 50 + rotate: false + xy: 1775, 1650 + size: 89, 100 + orig: 89, 100 offset: 0, 0 index: -1 stirrup_strap rotate: true - xy: 894, 828 - size: 49, 46 - orig: 49, 46 + xy: 1775, 1551 + size: 97, 91 + orig: 97, 91 offset: 0, 0 index: -1 torso - rotate: true - xy: 610, 647 - size: 54, 91 - orig: 54, 91 + rotate: false + xy: 330, 585 + size: 108, 182 + orig: 108, 182 offset: 0, 0 index: -1 visor - rotate: false - xy: 2, 51 - size: 131, 84 - orig: 131, 84 + rotate: true + xy: 1870, 1777 + size: 261, 168 + orig: 261, 168 offset: 0, 0 index: -1 diff --git a/spine-sfml/data/raptor.json b/spine-sfml/data/raptor.json index df9892de6..24504ac67 100644 --- a/spine-sfml/data/raptor.json +++ b/spine-sfml/data/raptor.json @@ -1,167 +1,202 @@ { -"skeleton": { "hash": "r3IJRaLbaxgEoW1YBAOrYT69jB4", "spine": "Dev", "width": 1224.2, "height": 1052.38 }, +"skeleton": { "hash": "tzTkzbBrpNYAwwMjxvin8GH1NPg", "spine": "3.3.07", "width": 1223.72, "height": 1055.5, "images": "./images/" }, "bones": [ { "name": "root" }, - { "name": "front_foot_goal", "parent": "root", "x": -45.79, "y": -28.67, "rotation": -0.94 }, - { "name": "hip", "parent": "root", "x": -136.78, "y": 415.47, "rotation": 3.15 }, - { "name": "rear_foot_goal", "parent": "root", "x": 33.43, "y": 30.81 }, - { "name": "front_leg1", "parent": "hip", "length": 251.74, "x": 27.36, "y": -28.27, "rotation": -51.5 }, - { "name": "front_leg_goal", "parent": "front_foot_goal", "x": -106.06, "y": 115.58 }, - { "name": "rear_leg1", "parent": "hip", "length": 226.27, "x": 55.19, "y": -71.25, "rotation": -54.76 }, - { "name": "rear_leg_goal", "parent": "rear_foot_goal", "x": -127.51, "y": 75.99 }, - { "name": "tail1", "parent": "hip", "length": 162.53, "x": -20.86, "y": 6.87, "rotation": 162.92 }, - { "name": "torso1", "parent": "hip", "length": 126.25, "x": 30.03, "y": -0.4, "rotation": -4.97 }, - { "name": "front_leg2", "parent": "front_leg1", "length": 208.54, "x": 251.03, "y": 0.16, "rotation": 261.93 }, - { "name": "rear_leg2", "parent": "rear_leg1", "length": 172.58, "x": 226.32, "y": 0.23, "rotation": -92.25 }, - { "name": "saddle", "parent": "torso1", "length": 50.91, "x": 4.56, "y": 71.86, "rotation": 91.8 }, - { "name": "tail2", "parent": "tail1", "length": 130.02, "x": 162.53, "y": -0.82, "rotation": 30.3 }, - { "name": "torso2", "parent": "torso1", "length": 121.2, "x": 126.25, "y": -0.37, "rotation": 39.84 }, - { "name": "front_arm1", "parent": "torso2", "length": 109.99, "x": 46.37, "y": -84.61, "rotation": 224.54 }, - { "name": "front_leg3", "parent": "front_leg2", "length": 118.18, "x": 208.5, "y": -1.63, "rotation": 85.46 }, - { "name": "neck", "parent": "torso2", "length": 70.59, "x": 121.19, "y": 0.34, "rotation": 41.37 }, - { "name": "rear_arm1", "parent": "torso2", "length": 109.56, "x": 57.05, "y": -95.38, "rotation": -124.71 }, - { "name": "rear_leg3", "parent": "rear_leg2", "length": 103.05, "x": 172.31, "y": 2.21, "rotation": 82.81 }, - { "name": "saddle_strap_front1", "parent": "saddle", "length": 97.27, "x": -27.36, "y": -73.38, "rotation": -148.11 }, - { "name": "saddle_strap_rear1", "parent": "saddle", "length": 38.62, "x": -33.34, "y": 87.32, "rotation": 151.13 }, - { "name": "spineboy_front_arm_goal", "parent": "saddle", "x": -50.7, "y": -96.93 }, - { "name": "spineboy_hip", "parent": "saddle", "length": 0.52, "x": 81.88, "y": 2.68, "rotation": 90.01 }, - { "name": "spineboy_rear_arm_goal", "parent": "saddle", "x": -30.43, "y": -100.08 }, - { "name": "stirrup", "parent": "saddle", "length": 78.17, "x": -81.94, "y": -103.38, "rotation": -68.85 }, - { "name": "stirrup_strap1", "parent": "saddle", "length": 43.69, "x": -20.38, "y": -29.37, "rotation": -135 }, - { "name": "tail3", "parent": "tail2", "length": 141.06, "x": 130.02, "y": 0.1, "rotation": 6.88 }, - { "name": "back_thigh", "parent": "spineboy_hip", "length": 71.15, "x": -9.57, "y": 2.31, "rotation": 160.75 }, - { "name": "front_arm2", "parent": "front_arm1", "length": 86.33, "x": 109.99, "y": 0.2, "rotation": 105.23 }, - { "name": "front_foot1", "parent": "front_leg3", "length": 57.79, "x": 118.19, "y": -0.79, "scaleX": 1.126, "rotation": 54.46 }, - { "name": "front_thigh", "parent": "spineboy_hip", "length": 77.79, "x": 15.51, "y": 17.01, "rotation": 163.34 }, + { "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": "gun", + "name": "spineboy_torso", "parent": "spineboy_hip", - "length": 181.35, - "x": 16.86, - "y": -7.89, - "scaleX": 0.816, - "scaleY": 0.816, - "rotation": 107.11 + "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, + "inheritRotation": false, + "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": "head", "parent": "neck", "length": 105.5, "x": 70.59, "y": 0.03, "rotation": 9.82 }, - { "name": "rear_arm2", "parent": "rear_arm1", "length": 85.8, "x": 109.56, "rotation": 123.56 }, - { "name": "rear_foot1", "parent": "rear_leg3", "length": 84.51, "x": 102.37, "y": -0.02, "rotation": 75.43 }, - { "name": "saddle_strap_front2", "parent": "saddle_strap_front1", "length": 102.74, "x": 97.29, "y": 0.3, "rotation": -11.13 }, - { "name": "saddle_strap_rear2", "parent": "saddle_strap_rear1", "length": 54.36, "x": 38.63, "y": -0.02 }, - { "name": "spineboy_torso", "parent": "spineboy_hip", "length": 122.45, "x": 1.05, "y": -2.1, "rotation": -75.85 }, - { "name": "stirrup_strap2", "parent": "stirrup_strap1", "length": 51.62, "x": 43.7, "rotation": 9.38 }, - { "name": "tail4", "parent": "tail3", "length": 126.25, "x": 141.05, "y": 0.64, "rotation": -18.86 }, - { "name": "back_arm", "parent": "spineboy_torso", "length": 67.21, "x": 96.33, "y": -38.46, "rotation": -120.89 }, - { "name": "back_knee", "parent": "back_thigh", "length": 97.17, "x": 71.15, "y": -0.28, "rotation": -54.97 }, - { "name": "front_arm", "parent": "spineboy_torso", "length": 74.51, "x": 101.37, "y": 9.78, "rotation": -118.16 }, { "name": "front_foot2", "parent": "front_foot1", "length": 56.19, + "rotation": -2.15, "x": 57.78, "y": -0.02, "scaleX": 0.73, "scaleY": 0.823, - "rotation": -0.46, - "inheritRotation": false + "inheritRotation": false, + "color": "15ff00ff" }, - { "name": "front_hand", "parent": "front_arm2", "length": 47.55, "x": 86.33, "y": 0.06, "rotation": -56.83 }, - { "name": "horn_front", "parent": "head", "length": 87.48, "x": 82.09, "y": -221.36, "rotation": 49.36 }, - { "name": "horn_rear", "parent": "head", "length": 73.78, "x": 99.27, "y": -226.79, "rotation": 44.31 }, - { "name": "jaw", "parent": "head", "length": 203.76, "x": 29.36, "y": -40.15, "rotation": -140.14, "inheritScale": false }, - { "name": "lower_leg", "parent": "front_thigh", "length": 111.5, "x": 77.92, "y": -0.1, "rotation": -49.62 }, - { "name": "neck2", "parent": "spineboy_torso", "length": 32.04, "x": 113.44, "y": -15.21, "rotation": -45.22 }, - { - "name": "rear_foot2", - "parent": "rear_foot1", - "length": 102.31, - "x": 84.49, - "y": -0.34, - "rotation": -6.13, - "inheritRotation": false - }, - { "name": "rear_hand", "parent": "rear_arm2", "length": 45.8, "x": 85.8, "y": 0.1, "rotation": -76.28 }, - { "name": "saddle_strap_rear3", "parent": "saddle_strap_rear2", "length": 44.04, "x": 54.86, "y": 0.19, "rotation": 3.63 }, - { "name": "tail5", "parent": "tail4", "length": 91.06, "x": 126.25, "y": -0.47, "rotation": -22.34 }, - { "name": "tongue1", "parent": "head", "length": 55.11, "x": 20.81, "y": -104.75, "rotation": -129.04 }, - { "name": "back_bracer", "parent": "back_arm", "length": 43.68, "x": 67.21, "y": -0.31, "rotation": 17.48 }, - { "name": "bone", "parent": "horn_front", "x": 294.58, "y": 234.17, "rotation": -138.59 }, - { "name": "bone2", "parent": "horn_rear", "x": 232.68, "y": 245.84, "rotation": -133.55 }, - { "name": "front_bracer", "parent": "front_arm", "length": 39.85, "x": 74.52, "y": -0.41, "rotation": 20.3 }, { "name": "front_foot3", "parent": "front_foot2", "length": 129.88, + "rotation": -2.7, "x": 49.71, "y": 20.65, "scaleX": 1.154, - "rotation": -3.16, - "inheritRotation": false + "color": "15ff00ff" }, - { "name": "head2", "parent": "neck2", "length": 249.64, "x": 23.01, "y": 3.47, "rotation": 11.65 }, - { "name": "tongue2", "parent": "tongue1", "length": 44.66, "x": 55.59, "y": 0.93, "rotation": 8.93 }, - { "name": "back_hand", "parent": "back_bracer", "length": 41.97, "x": 43.68, "y": 0.06, "rotation": 9.2, "inheritRotation": false }, + { "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.9, "x": 39.98, "y": -0.89, - "rotation": 13.9, - "inheritRotation": false + "inheritRotation": false, + "color": "ffffffff" }, - { "name": "tongue3", "parent": "tongue2", "length": 43.64, "x": 44.26, "y": -0.2, "rotation": 12.86 } -], -"ik": [ + { "name": "spineboy_front_arm_goal", "parent": "saddle", "x": -50.7, "y": -96.93, "color": "ff0004ff" }, { - "name": "front_leg_goal", - "bones": [ "front_leg1", "front_leg2" ], - "target": "front_leg_goal", - "bendPositive": false + "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, "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, + "inheritRotation": false, + "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": "rear_leg_goal", - "bones": [ "rear_leg1", "rear_leg2" ], - "target": "rear_leg_goal", - "bendPositive": false + "name": "saddle_strap_front2", + "parent": "saddle_strap_front1", + "length": 102.74, + "rotation": -11.13, + "x": 97.29, + "y": 0.3, + "color": "ff7300ff" }, { - "name": "front_foot_goal", - "bones": [ "front_leg3", "front_foot1" ], - "target": "front_foot_goal" + "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": "rear_foot_goal", - "bones": [ "rear_leg3", "rear_foot1" ], - "target": "rear_foot_goal" + "name": "saddle_strap_rear3", + "parent": "saddle_strap_rear2", + "length": 44.04, + "rotation": 3.63, + "x": 54.86, + "y": 0.19, + "color": "ff7300ff" }, - { - "name": "stirrup", - "bones": [ "stirrup_strap1", "stirrup_strap2" ], - "target": "stirrup" - }, - { - "name": "spineboy_rear_leg_goal", - "bones": [ "back_thigh", "back_knee" ], - "target": "spineboy_rear_arm_goal", - "bendPositive": false - }, - { - "name": "spineboy_front_leg_goal", - "bones": [ "front_thigh", "lower_leg" ], - "target": "spineboy_front_arm_goal", - "bendPositive": false - }, - { - "name": "rear_arm_goal", - "bones": [ "back_arm", "back_bracer" ], - "target": "bone2" - }, - { - "name": "front_arm_goal", - "bones": [ "front_arm", "front_bracer" ], - "target": "bone" - } + { "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" }, @@ -198,6 +233,57 @@ { "name": "front_bracer", "bone": "front_bracer", "attachment": "front_bracer" }, { "name": "front_hand", "bone": "front_hand2", "attachment": "front_hand" } ], +"ik": [ + { + "name": "front_arm_goal", + "bones": [ "front_arm", "front_bracer" ], + "target": "front_arm_target" + }, + { + "name": "front_foot_goal", + "bones": [ "front_leg3", "front_foot1" ], + "target": "front_foot_goal" + }, + { + "name": "front_leg_goal", + "bones": [ "front_leg1", "front_leg2" ], + "target": "front_leg_goal", + "bendPositive": false + }, + { + "name": "rear_arm_goal", + "bones": [ "back_arm", "back_bracer" ], + "target": "rear_arm_target" + }, + { + "name": "rear_foot_goal", + "bones": [ "rear_leg3", "rear_foot1" ], + "target": "rear_foot_goal" + }, + { + "name": "rear_leg_goal", + "bones": [ "rear_leg1", "rear_leg2" ], + "target": "rear_leg_goal", + "bendPositive": false + }, + { + "name": "spineboy_front_leg_goal", + "bones": [ "front_thigh", "lower_leg" ], + "target": "spineboy_front_arm_goal", + "bendPositive": false + }, + { + "name": "spineboy_rear_leg_goal", + "bones": [ "back_thigh", "back_knee" ], + "target": "spineboy_rear_arm_goal", + "bendPositive": false + }, + { + "name": "stirrup", + "bones": [ "stirrup_strap1", "stirrup_strap2" ], + "target": "stirrup" + } +], "skins": { "default": { "back_arm": { @@ -236,9 +322,12 @@ "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": [ 9, 10, 11, 14, 11, 12, 14, 12, 0, 9, 11, 14, 6, 9, 14, 14, 0, 1, 13, 14, 1, 6, 7, 8, 6, 8, 9, 13, 1, 2, 13, 5, 6, 13, 6, 14, 3, 4, 13, 5, 13, 4, 3, 13, 2 ], + "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.48, 50.63, 83.86, 46.32, 142.05, 42.17, 197.91, 3.34, 163.7, -45.86, 86.15, -47.34, 15.9, -48.68, 8.42, -120.68, -69.06, -66.81, -35.32, -20.73, -58.83, -10.35, -44.69, 9.99, -14.55, 53.35, 85.21, 6.43, 20.45, 8.2 ], - "hull": 13 + "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": { @@ -255,47 +344,62 @@ }, "raptor_arm_back": { "raptor_arm_back": { - "type": "skinnedmesh", - "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, 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, 0.94947, 0.60129 ], - "triangles": [ 6, 14, 15, 5, 6, 15, 5, 15, 4, 6, 7, 14, 24, 7, 8, 24, 14, 7, 13, 14, 24, 11, 13, 24, 11, 24, 8, 11, 8, 9, 10, 11, 9, 12, 13, 11, 15, 16, 4, 18, 19, 2, 16, 3, 4, 17, 18, 2, 17, 2, 3, 17, 3, 16, 20, 21, 22, 23, 20, 22, 0, 20, 23, 1, 20, 0, 1, 19, 20, 2, 19, 1 ], - "vertices": [ 2, 18, 36.95, 33.31, 0.91666, 34, 68.53, 41.05, 0.08333, 2, 18, 66.02, 20.35, 0.76813, 34, 41.41, 24.39, 0.23186, 2, 18, 74.51, 16.57, 0.64468, 34, 33.49, 19.53, 0.35531, 3, 18, 70.89, 21.97, 0.27669, 34, 39.99, 19.46, 0.67508, 52, -29.67, -39.91, 0.04822, 3, 18, 42.77, 63.89, 0.11483, 34, 90.47, 18.95, 0.60854, 52, -17.2, 9, 0.27661, 2, 34, 101.86, 18.83, 0.45955, 52, -14.38, 20.04, 0.54044, 2, 34, 106.47, 2.08, 0.0625, 52, 2.98, 20.56, 0.9375, 1, 52, 51.32, 21.98, 1, 1, 52, 72.39, 9.61, 1, 1, 52, 100.37, -23.87, 1, 1, 52, 104.96, -40.9, 1, 1, 52, 78.37, -25.61, 1, 1, 52, 86.05, -56.84, 1, 1, 52, 52.92, -30.04, 1, 2, 34, 62.24, -43.92, 0.0625, 52, 37.19, -33.33, 0.9375, 2, 34, 64.89, -28.65, 0.3125, 52, 22.98, -27.14, 0.6875, 2, 34, 57.69, -27.17, 0.30612, 52, 19.83, -33.78, 0.69387, 2, 18, 124.19, 3.83, 0.19395, 34, -5.09, -14.23, 0.80604, 2, 18, 110.77, -19.65, 0.3125, 34, -16.88, 10.1, 0.6875, 2, 18, 99.14, -19.2, 0.51613, 34, -9.93, 19.44, 0.48386, 2, 18, 43.73, -17.03, 0.9375, 34, 23.17, 63.92, 0.0625, 1, 18, 35.41, -29.77, 1, 1, 18, -15.68, -28.02, 1, 1, 18, -13.87, 24.65, 1, 1, 52, 60.41, 11.1, 1 ], - "hull": 24 + "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.53, 41.05, 0.08333, 2, 40, 66.01999, 20.35, 0.76813, 41, 41.41, 24.39, 0.23186, 2, 40, 74.51, 16.57, 0.64468, 41, 33.49, 19.53, 0.35531, 2, 40, 70.89, 21.97, 0.29071, 41, 39.99, 19.45999, 0.70928, 3, 40, 42.77, 63.89, 0.11483, 41, 90.47, 18.95, 0.60854, 49, -17.2, 9, 0.2766, 2, 41, 101.86, 18.83, 0.45955, 49, -14.38, 20.04, 0.54044, 2, 41, 106.47, 2.08, 0.0625, 49, 2.98, 20.56, 0.9375, 1, 49, 51.32, 21.98, 1, 1, 49, 60.41, 11.1, 1, 1, 49, 72.39, 9.60999, 1, 1, 49, 100.37, -23.87, 1, 1, 49, 104.96, -40.9, 1, 1, 49, 78.37, -25.61, 1, 1, 49, 86.05, -56.84, 1, 1, 49, 52.92, -30.04, 1, 2, 41, 62.24, -43.92, 0.0625, 49, 37.18999, -33.33, 0.9375, 2, 41, 64.89, -28.65, 0.3125, 49, 22.98, -27.14, 0.6875, 2, 41, 57.69, -27.17, 0.30612, 49, 19.83, -33.78, 0.69387, 2, 40, 124.19, 3.83, 0.19395, 41, -5.09, -14.23, 0.80604, 2, 40, 110.77, -19.65, 0.3125, 41, -16.87999, 10.1, 0.6875, 2, 40, 99.14, -19.2, 0.51612, 41, -9.93, 19.44, 0.48386, 2, 40, 43.73, -17.03, 0.9375, 41, 23.17, 63.92, 0.0625, 1, 40, 35.41, -29.77, 1, 1, 40, -15.68, -28.02, 1, 1, 40, -13.87, 24.65, 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": "skinnedmesh", - "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.27515, 0.71028, 0.25301, 0.71948, 0.22568, 0.73082, 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 ], - "triangles": [ 10, 11, 45, 45, 11, 44, 11, 12, 44, 44, 68, 45, 12, 69, 44, 12, 58, 52, 21, 22, 55, 22, 61, 55, 22, 23, 61, 55, 61, 27, 23, 56, 61, 23, 24, 56, 61, 56, 26, 61, 26, 27, 26, 56, 25, 56, 24, 25, 19, 60, 89, 19, 20, 60, 60, 20, 90, 20, 21, 90, 90, 21, 55, 89, 60, 29, 90, 28, 60, 60, 28, 29, 55, 27, 90, 90, 27, 28, 16, 17, 54, 91, 15, 16, 18, 54, 17, 54, 18, 89, 16, 54, 91, 18, 19, 89, 15, 91, 59, 31, 91, 54, 89, 30, 54, 89, 29, 30, 32, 59, 91, 30, 31, 54, 32, 91, 31, 33, 59, 32, 14, 15, 59, 33, 53, 59, 13, 58, 12, 58, 13, 53, 59, 53, 14, 13, 14, 53, 34, 58, 53, 35, 52, 58, 34, 53, 33, 58, 34, 35, 44, 69, 51, 12, 52, 69, 51, 38, 39, 51, 69, 38, 38, 69, 37, 69, 52, 37, 36, 52, 35, 36, 37, 52, 4, 5, 70, 4, 57, 73, 73, 57, 67, 4, 73, 3, 3, 73, 72, 3, 74, 2, 74, 87, 2, 87, 88, 2, 88, 1, 2, 73, 67, 72, 72, 67, 66, 67, 57, 66, 57, 49, 66, 57, 41, 49, 3, 72, 74, 72, 62, 74, 72, 66, 62, 74, 85, 87, 85, 74, 84, 49, 65, 66, 66, 65, 62, 84, 74, 62, 63, 62, 65, 84, 62, 63, 41, 42, 49, 85, 86, 87, 88, 86, 81, 88, 87, 86, 85, 84, 80, 85, 80, 79, 80, 84, 75, 79, 80, 78, 49, 64, 65, 64, 49, 43, 1, 88, 82, 80, 75, 78, 82, 88, 81, 75, 77, 78, 82, 81, 77, 81, 78, 77, 65, 64, 63, 75, 76, 77, 75, 84, 76, 76, 84, 83, 76, 83, 82, 83, 0, 1, 0, 83, 84, 63, 0, 84, 63, 64, 0, 1, 82, 83, 49, 42, 43, 64, 43, 0, 57, 4, 70, 45, 50, 46, 46, 47, 8, 46, 50, 47, 8, 47, 7, 50, 71, 47, 47, 71, 7, 7, 71, 6, 71, 50, 48, 48, 50, 40, 50, 68, 40, 71, 48, 6, 6, 48, 5, 5, 48, 70, 48, 40, 70, 70, 40, 57, 57, 40, 41, 10, 45, 9, 45, 46, 9, 9, 46, 8, 45, 68, 50, 44, 51, 68, 68, 39, 40, 68, 51, 39 ], - "vertices": [ 1, 33, 147.48, -145.48, 1, 1, 33, 89.4, -281.62, 1, 1, 33, -28.24, -285.93, 1, 1, 33, -14.58, -194.68, 1, 5, 9, 363.21, 87.73, 0.02179, 14, 238.39, -84.13, 0.20397, 17, 32.1, -140.85, 0.18915, 33, -61.96, -132.26, 0.41197, 48, 129.57, 6.39, 0.1731, 5, 9, 332.7, 63.71, 0.06905, 14, 199.57, -83.03, 0.29424, 17, 3.69, -114.37, 0.2194, 33, -85.43, -101.32, 0.30859, 48, 127.34, -26.64, 0.1087, 5, 9, 307.08, 43.5, 0.11018, 14, 166.95, -82.13, 0.37282, 17, -20.18, -92.14, 0.24572, 33, -105.18, -75.34, 0.21862, 48, 123.08, -64.79, 0.05264, 5, 9, 307.75, 5.7, 0.18146, 14, 143.25, -111.59, 0.56512, 17, -57.43, -98.57, 0.12044, 33, -142.98, -75.33, 0.10715, 48, 154.85, -83.49, 0.0258, 2, 9, 308.7, -30.55, 0.25, 14, 120.75, -140.04, 0.75, 2, 9, 213.94, -142.7, 0.75, 14, -23.83, -165.45, 0.25, 3, 9, 64.45, -187.34, 0.31139, 8, -158.45, 158.33, 0.10379, 2, 84.16, -190.98, 0.5848, 1, 2, -61.47, -178.84, 1, 1, 2, -166.91, -67.95, 1, 6, 9, -246.26, -74, 0.04136, 8, 170.4, 123.13, 0.2858, 13, 66.71, 104.77, 0.57052, 27, -53.08, 110.21, 0.10163, 40, -220.11, 35.3, 5.1E-4, 54, -331.4, -106.89, 1.5E-4, 6, 9, -297.45, -69.74, 0.01855, 8, 221.11, 131.31, 0.14592, 13, 115.07, 87.47, 0.47026, 27, -6.58, 88.39, 0.30085, 40, -168.92, 31, 0.06162, 54, -282.82, -90.19, 0.00276, 6, 9, -359.24, -85.1, 0.00915, 8, 277.38, 161.09, 0.07914, 13, 178.73, 86.41, 0.35008, 27, 56.68, 81.29, 0.38638, 40, -107.13, 46.31, 0.15555, 54, -232.44, -51.26, 0.01966, 6, 9, -376.16, -107.83, 0.0043, 8, 294.31, 176.47, 0.03904, 13, 203.26, 86.51, 0.25323, 27, 83.06, 77.02, 0.42283, 40, -79.56, 53.53, 0.23684, 54, -210.89, -28.3, 0.04374, 6, 9, -416.83, -99.41, 0.00211, 8, 329.83, 188.85, 0.0196, 13, 238.06, 85.41, 0.18217, 27, 115.65, 74.66, 0.41374, 40, -49.53, 60.58, 0.30031, 54, -185.49, -14.98, 0.08205, 6, 9, -449.42, -116.23, 0.00122, 8, 364.17, 200.07, 0.01106, 13, 275.48, 71.62, 0.13243, 27, 152.97, 53.58, 0.37336, 40, -5.82, 53.94, 0.34144, 54, -142.85, 0.11, 0.14047, 6, 9, -498.22, -88.19, 7.8E-4, 8, 411.52, 197.55, 0.00669, 13, 313.81, 53.61, 0.09623, 27, 188.04, 35.82, 0.32105, 40, 31.84, 49.3, 0.36432, 54, -106.46, 7.49, 0.21089, 6, 9, -524.31, -113.4, 5.8E-4, 8, 437.98, 213.03, 0.00423, 13, 345.74, 45.54, 0.06864, 27, 219.6, 19.28, 0.26387, 40, 68.31, 43.02, 0.36996, 54, -70.13, 18.19, 0.2927, 6, 9, -580.94, -76.79, 4.7E-4, 8, 494.56, 206.4, 0.00237, 13, 390.81, 21.3, 0.0452, 27, 261.62, -3.66, 0.20066, 40, 114.55, 37.83, 0.35931, 54, -26.15, 30.34, 0.39196, 6, 9, -621.23, -53.98, 4.4E-4, 8, 539.16, 193.96, 0.00115, 13, 423.87, -11.11, 0.02629, 27, 291.46, -39.06, 0.13478, 40, 154.83, 14.99, 0.33453, 54, 19.91, 25.67, 0.50278, 6, 9, -661.22, -31.34, 4.6E-4, 8, 583.41, 181.62, 5.6E-4, 13, 456.68, -43.27, 0.01512, 27, 321.06, -74.2, 0.08778, 40, 194.79, -7.66, 0.31014, 54, 65.62, 21.04, 0.58591, 6, 9, -698.76, 17.64, 4.7E-4, 8, 631.64, 143.1, 4.0E-4, 13, 480.34, -100.28, 0.01183, 27, 339.2, -133.2, 0.07247, 40, 232.3, -56.69, 0.30126, 54, 119.7, -8.69, 0.61353, 6, 9, -636.21, 0.4, 4.5E-4, 8, 566.79, 144.78, 5.5E-4, 13, 424.34, -67.52, 0.01513, 27, 286.57, -95.27, 0.08778, 40, 169.77, -39.4, 0.31045, 54, 55.51, -18.08, 0.5856, 6, 9, -596.68, -3.21, 4.2E-4, 8, 527.55, 138.78, 0.00111, 13, 387.08, -53.84, 0.02607, 27, 250.77, -78.11, 0.13421, 40, 130.24, -35.75, 0.33502, 54, 17.87, -30.67, 0.50314, 6, 9, -553.14, -7.2, 4.2E-4, 8, 484.33, 132.17, 0.00229, 13, 346.04, -38.78, 0.04477, 27, 211.34, -59.22, 0.19954, 40, 86.7, -31.72, 0.3598, 54, -23.59, -44.54, 0.39316, 6, 9, -516.96, -25.93, 4.7E-4, 8, 449.17, 125.97, 0.00408, 13, 311.45, -35.25, 0.06808, 27, 175.89, -56.83, 0.26228, 40, 51.53, -43.14, 0.37032, 54, -52.88, -67.87, 0.29473, 6, 9, -479.88, 14.24, 6.0E-4, 8, 418.38, 93.72, 0.00651, 13, 269.72, -40.64, 0.09608, 27, 135.19, -53.82, 0.32015, 40, 13.42, -53.11, 0.36453, 54, -82.03, -93.66, 0.21211, 6, 9, -451.64, 0.32, 8.3E-4, 8, 390.82, 86.58, 0.01046, 13, 241.19, -39.8, 0.13162, 27, 105.59, -52.93, 0.37317, 40, -16.25, -62.16, 0.34265, 54, -108.34, -111.24, 0.14123, 6, 9, -420.35, 31.66, 0.00137, 8, 364.8, 62.48, 0.01849, 13, 207.71, -42.14, 0.18078, 27, 73.33, -49.43, 0.41415, 40, -46.11, -70.49, 0.30264, 54, -129.51, -133.56, 0.08254, 6, 9, -399.11, 28.98, 0.00258, 8, 345.49, 47.53, 0.03705, 13, 182.34, -50.62, 0.25183, 27, 45.87, -56.62, 0.4234, 40, -71.57, -84.96, 0.24035, 54, -150.85, -153.35, 0.04477, 6, 9, -365.43, 66.79, 0.00485, 8, 319.95, 15.15, 0.07594, 13, 145.6, -61.95, 0.35325, 27, 9.61, -63.26, 0.38742, 40, -101.06, -105.58, 0.15807, 54, -165.65, -187.83, 0.02044, 6, 9, -312.31, 100.78, 0.00731, 8, 276.58, -30.61, 0.13928, 13, 85.52, -81.11, 0.48508, 27, -52.01, -76.62, 0.30338, 40, -154.2, -139.52, 0.06214, 54, -200.6, -240.31, 0.00279, 6, 9, -242.48, 124.41, 0.00974, 8, 214.5, -70.36, 0.27055, 13, 11.97, -85.98, 0.61489, 27, -125.69, -74.48, 0.10409, 40, -224.04, -163.1, 5.4E-4, 54, -255.01, -290.05, 1.5E-4, 6, 9, -166.71, 150.07, 0.02469, 8, 147.14, -113.5, 0.57033, 13, -67.84, -91.26, 0.38714, 27, -205.65, -72.16, 0.01755, 40, -299.83, -188.7, 2.0E-4, 54, -314.05, -344.03, 5.0E-5, 2, 9, -113.14, 135.84, 0.24192, 8, 91.72, -112.59, 0.75807, 2, 9, -42.12, 116.77, 0.14515, 8, 18.2, -111.17, 0.85484, 1, 9, 44.2, 107.1, 1, 2, 9, 140.09, 96.35, 0.22579, 14, 72.59, 65.41, 0.7742, 4, 9, 137.69, 169.35, 0.05644, 14, 117.5, 123, 0.24355, 17, 78.3, 94.48, 0.2125, 33, 23.7, 91.74, 0.4875, 2, 17, 171.15, 111.98, 0.25, 33, 118.17, 93.15, 0.75, 1, 33, 158.96, -25.58, 1, 1, 2, -40.63, -86.01, 1, 3, 9, 67.34, -86.66, 0.33215, 8, -137.02, 59.92, 0.08303, 2, 92.54, -90.61, 0.5848, 2, 9, 170.13, -66.29, 0.75, 14, -8.53, -78.72, 0.25, 2, 9, 231.74, -8.12, 0.4, 14, 76.03, -73.52, 0.6, 5, 9, 222.04, 70.41, 0.16894, 14, 118.9, -7, 0.5373, 17, -6.58, -3.99, 0.17075, 33, -76.73, 9.18, 0.08551, 48, 45.05, -108.02, 0.03748, 1, 33, 50.43, -46.56, 1, 1, 14, -9.88, 20.65, 1, 2, 9, -53.22, 20.53, 0.2, 8, 5.8, -15.09, 0.8, 6, 9, -180.71, 32.22, 0.0849, 8, 132.35, 4.24, 0.55723, 13, -23.98, 19.01, 0.34911, 27, -151.51, 33.44, 0.0085, 40, -285.75, -70.86, 1.8E-4, 54, -348.66, -230.51, 5.0E-5, 6, 9, -304.22, 7.95, 0.01243, 8, 246.39, 57.53, 0.13635, 13, 101.61, 10.65, 0.48532, 27, -27.28, 13.2, 0.30559, 40, -162.22, -46.69, 0.05823, 54, -245.36, -158.59, 0.00205, 6, 9, -418.56, -35.1, 0.00168, 8, 346.99, 126.85, 0.01839, 13, 223.17, 22.83, 0.18014, 27, 94.88, 13.77, 0.41602, 40, -47.85, -3.72, 0.30281, 54, -158.02, -73.16, 0.08093, 6, 9, -566.47, -40.57, 4.4E-4, 8, 489.24, 167.77, 0.00225, 13, 367.51, -9.96, 0.04446, 27, 235.45, -32.57, 0.20024, 40, 100.06, 1.62, 0.36103, 54, -24.81, -8.63, 0.39156, 6, 9, -648.5, -15.19, 4.5E-4, 8, 574.96, 162.88, 5.5E-4, 13, 440.24, -55.6, 0.01566, 27, 303.52, -84.91, 0.09149, 40, 182.07, -23.8, 0.3135, 54, 60.48, 1.14, 0.57832, 3, 14, 174.99, 22.22, 0.2, 17, 54.82, -19.14, 0.6, 33, -18.8, -16.2, 0.2, 6, 9, -242.34, 20.11, 0.02478, 8, 189.25, 30.83, 0.26443, 13, 38.68, 14.84, 0.61556, 27, -89.52, 23.34, 0.09454, 40, -224.1, -58.8, 5.1E-4, 54, -297.11, -194.62, 1.4E-4, 6, 9, -359.57, -12.88, 0.00674, 8, 295.08, 91.08, 0.07453, 13, 160.45, 16.54, 0.35139, 27, 31.85, 13.48, 0.39116, 40, -106.86, -25.89, 0.15674, 54, -203.08, -117.24, 0.01941, 6, 9, -488.69, -37.69, 6.7E-4, 8, 414.43, 146.25, 0.00642, 13, 291.61, 7.27, 0.09534, 27, 161.53, -8.2, 0.32068, 40, 22.27, -1.18, 0.36568, 54, -94.86, -42.56, 0.21117, 6, 9, -607.64, -27.83, 4.3E-4, 8, 532.26, 165.32, 0.00108, 13, 404.01, -32.87, 0.02584, 27, 269.61, -58.84, 0.13469, 40, 141.21, -11.13, 0.33582, 54, 17.98, -3.72, 0.50211, 1, 33, 26.4, -166.06, 1, 1, 33, 87.21, -106.12, 1, 1, 33, 108.19, -49.62, 1, 2, 33, 61.73, -82.13, 0.50021, 48, 4.42, 52.83, 0.49978, 2, 33, 22.84, -109.4, 0.50021, 48, 51.52, 46.73, 0.49978, 5, 9, 348.39, 119.13, 0.00694, 14, 247.12, -50.52, 0.065, 17, 60.86, -121.4, 0.06027, 33, -30.3, -118, 0.48738, 48, 96.58, 17.22, 0.38039, 1, 9, 26.73, 14.8, 1, 2, 9, -107.97, 25.67, 0.24192, 8, 60.17, -6.91, 0.75807, 5, 9, 235.53, 102.96, 0.07484, 14, 150.1, 9.35, 0.34943, 17, 27.64, -12.34, 0.40983, 33, -44.43, -4.87, 0.14928, 48, 34.03, -74.39, 0.0166, 5, 9, 227.15, 28.49, 0.29239, 14, 95.96, -42.46, 0.5708, 17, -47.23, -15.44, 0.07952, 33, -118.74, 4.84, 0.03982, 48, 84.85, -129.5, 0.01745, 2, 33, 5.19, -153.1, 0.87618, 48, 90.96, 71.21, 0.12381, 5, 9, 351.78, 108.85, 0.01127, 14, 243.13, -60.59, 0.10548, 17, 51.21, -126.33, 0.09782, 33, -40.65, -121.21, 0.46541, 48, 105.71, 17.33, 0.32, 1, 33, 23.69, -185.21, 1, 1, 33, 79.64, -175.94, 1, 1, 33, 93.96, -187.56, 1, 1, 33, 87.07, -206.55, 1, 1, 33, 64.2, -216.74, 1, 1, 33, 52.23, -203.68, 1, 1, 33, 59.24, -187.03, 1, 1, 33, 64.26, -223.8, 1, 1, 33, 89.44, -211.41, 1, 1, 33, 102.04, -186.95, 1, 1, 33, 83.1, -166.14, 1, 1, 33, 46.84, -186.41, 1, 1, 33, 50.32, -204.36, 1, 1, 33, 41.7, -206.59, 1, 1, 33, 61.87, -230.97, 1, 6, 9, -448.12, -58.75, 9.7E-4, 8, 374.97, 143.6, 0.01016, 13, 256.29, 17.42, 0.13074, 27, 127.43, 2.07, 0.37548, 40, -13.35, -3.05, 0.34387, 54, -128.14, -55.46, 0.13875, 6, 9, -519.55, -68.54, 5.1E-4, 8, 442.75, 168.18, 0.00402, 13, 327.21, 4.42, 0.06791, 27, 196.28, -19.32, 0.26429, 40, 58.71, -1.05, 0.3719, 54, -62.24, -26.21, 0.29134, 6, 9, -386.43, -41.35, 0.00321, 8, 318.32, 113.62, 0.03567, 13, 192.26, 20.14, 0.25008, 27, 64.19, 12.44, 0.42824, 40, -76.55, -13.67, 0.24036, 54, -182.56, -89.31, 0.0424 ], - "hull": 44 + "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, 16, 56, 15, 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, 20, 91, 56, 56, 19, 20, 17, 19, 56, 18, 19, 17, 93, 91, 31, 55, 34, 35, 33, 34, 55, 61, 33, 55, 61, 32, 33, 93, 32, 61, 56, 91, 93, 56, 93, 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.24, -285.93, 1, 1, 8, -14.58, -194.68, 1, 4, 6, 238.39, -84.13, 0.20851, 7, 32.09999, -140.85, 0.19336, 8, -61.96, -132.26, 0.42115, 39, 129.57, 6.39, 0.17696, 5, 2, 332.7, 63.71, 0.06905, 6, 199.57, -83.03, 0.29424, 7, 3.69, -114.37, 0.2194, 8, -85.43, -101.32, 0.30859, 39, 127.34, -26.64, 0.1087, 5, 2, 307.08, 43.5, 0.11018, 6, 166.95, -82.12999, 0.37282, 7, -20.18, -92.14, 0.24572, 8, -105.18, -75.33999, 0.21862, 39, 123.08, -64.79, 0.05264, 4, 2, 307.75, 5.7, 0.18627, 6, 143.25, -111.59, 0.58009, 7, -57.43, -98.57, 0.12363, 8, -142.98, -75.33, 0.10999, 2, 2, 308.7, -30.55, 0.25, 6, 120.75, -140.04, 0.75, 2, 2, 213.94, -142.7, 0.75, 6, -23.83, -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, 4, 58, 118.47, 114.74, 0.07383, 59, 17.17, 122.49, 0.17504, 60, -100.71, 132.55, 0.06818, 1, -166.91, -67.94999, 0.68294, 4, 58, 170.4, 123.13, 0.06537, 59, 66.71, 104.77, 0.20999, 60, -53.08, 110.21, 0.12016, 1, -217.69, -61.33, 0.60447, 6, 58, 221.11, 131.31, 0.02179, 59, 115.07, 87.47, 0.23058, 60, -6.58, 88.39, 0.16258, 61, -168.92, 31, 0.02826, 62, -282.82, -90.19, 0.029, 1, -267.66, -55.14, 0.52776, 5, 59, 146.51, 86.08, 0.23635, 60, 26.66, 83.39, 0.19338, 61, -134.99, 41.34, 0.06624, 62, -257.52, -60.65, 0.06962, 1, -298.87, -61.99, 0.43436, 5, 59, 178.73, 86.41, 0.22521, 60, 56.68, 81.29, 0.20997, 61, -107.13, 46.31, 0.11271, 62, -232.44, -51.26, 0.12148, 1, -328.68, -69.24, 0.3306, 5, 59, 203.26, 86.51, 0.21603, 60, 83.06, 77.01999, 0.22457, 61, -79.56, 53.53, 0.13939, 62, -210.89, -28.3, 0.15618, 1, -354.01, -75.41, 0.26379, 5, 59, 238.06, 85.41, 0.20114, 60, 115.65, 74.66, 0.2315, 61, -49.53, 60.58, 0.16455, 62, -185.49, -14.98, 0.19123, 1, -385.33, -83.15, 0.21156, 5, 59, 255.33, 78.85, 0.18224, 60, 133.83, 63.18, 0.23194, 61, -27.04, 56.84, 0.18907, 62, -163.58, -5.26, 0.22658, 1, -406.45, -79.89, 0.17015, 5, 59, 275.48, 71.62, 0.16169, 60, 152.97, 53.58, 0.22885, 61, -5.82, 53.94, 0.21292, 62, -142.85, 0.11, 0.26159, 1, -427.72, -77.47, 0.13493, 5, 59, 313.81, 53.61, 0.14198, 60, 188.04, 35.82, 0.22293, 61, 31.84, 49.3, 0.23478, 62, -106.46, 7.49, 0.29326, 1, -465.96, -72.58999, 0.10702, 5, 59, 345.74, 45.54, 0.12502, 60, 219.6, 19.28, 0.2179, 61, 68.31, 43.02, 0.25622, 62, -70.12999, 18.19, 0.32248, 1, -502.09, -68.19, 0.07835, 4, 59, 390.81, 21.3, 0.11758, 60, 261.62, -3.66, 0.22607, 61, 114.55, 37.83, 0.29087, 62, -26.15, 30.34, 0.36547, 4, 59, 423.87, -11.11, 0.10536, 60, 291.46, -39.06, 0.21954, 61, 154.83, 14.99, 0.30098, 62, 19.91, 25.67, 0.37409, 4, 59, 456.68, -43.27, 0.09949, 60, 321.06, -74.19999, 0.21749, 61, 194.79, -7.66, 0.30788, 62, 65.62, 21.04, 0.37513, 4, 59, 480.34, -100.28, 0.10045, 60, 339.2, -133.2, 0.22026, 61, 232.3, -56.69, 0.31103, 62, 119.7, -8.68999, 0.36824, 4, 59, 424.34, -67.51999, 0.10379, 60, 286.57, -95.27, 0.23087, 61, 169.77, -39.4, 0.30828, 62, 55.51, -18.08, 0.35705, 4, 59, 387.08, -53.84, 0.11505, 60, 250.77, -78.11, 0.2454, 61, 130.24, -35.75, 0.30092, 62, 17.87, -30.67, 0.3386, 4, 59, 346.04, -38.78, 0.13471, 60, 211.34, -59.22, 0.26271, 61, 86.7, -31.72, 0.2888, 62, -23.59, -44.54, 0.31376, 5, 58, 449.17, 125.97, 0.02419, 59, 311.45, -35.25, 0.16384, 60, 175.89, -56.83, 0.2727, 61, 51.53, -43.14, 0.26317, 62, -52.88, -67.87, 0.27607, 5, 58, 418.38, 93.72, 0.05913, 59, 269.72, -40.64, 0.19681, 60, 135.19, -53.82, 0.27688, 61, 13.42, -53.11, 0.23219, 62, -82.03, -93.66, 0.23497, 5, 58, 390.82, 86.58, 0.10638, 59, 241.19, -39.8, 0.2354, 60, 105.59, -52.93, 0.27331, 61, -16.25, -62.16, 0.19459, 62, -108.34, -111.24, 0.19028, 5, 58, 364.8, 62.48, 0.14347, 59, 207.71, -42.14, 0.28099, 60, 73.33, -49.43, 0.26867, 61, -46.11, -70.49, 0.15764, 62, -129.51, -133.56, 0.1492, 5, 58, 345.49, 47.53, 0.18499, 59, 182.34, -50.62, 0.33114, 60, 45.87, -56.62, 0.25881, 61, -71.57, -84.96, 0.1174, 62, -150.85, -153.35, 0.10763, 5, 58, 319.95, 15.15, 0.23755, 59, 145.6, -61.95, 0.39396, 60, 9.60999, -63.26, 0.24619, 61, -101.06, -105.58, 0.06443, 62, -165.65, -187.83, 0.05784, 3, 58, 276.58, -30.61, 0.29942, 59, 85.52, -81.11, 0.46774, 60, -52.01, -76.62, 0.23283, 3, 58, 214.5, -70.36, 0.32855, 59, 11.97, -85.98, 0.48601, 60, -125.69, -74.48, 0.18543, 2, 58, 147.14, -113.5, 0.59565, 59, -67.83999, -91.26, 0.40433, 2, 2, -113.14, 135.84, 0.24192, 58, 91.72, -112.59, 0.75807, 2, 2, -42.12, 116.77, 0.14515, 58, 18.2, -111.17, 0.85484, 1, 2, 44.2, 107.1, 1, 2, 2, 140.09, 96.35, 0.22579, 6, 72.58999, 65.41, 0.7742, 4, 2, 137.69, 169.35, 0.05644, 6, 117.5, 123, 0.24355, 7, 78.3, 94.48, 0.2125, 8, 23.7, 91.74, 0.4875, 2, 7, 171.15, 111.98, 0.25, 8, 118.17, 93.15, 0.75, 1, 8, 158.96, -25.58, 1, 1, 1, -40.63, -86.01, 1, 3, 2, 67.33999, -86.66, 0.33215, 58, -137.02, 59.92, 0.08303, 1, 92.54, -90.61, 0.5848, 2, 2, 170.13, -66.29, 0.75, 6, -8.53, -78.72, 0.25, 2, 2, 231.74, -8.12, 0.4, 6, 76.03, -73.51999, 0.6, 4, 2, 222.04, 70.41, 0.17551, 6, 118.9, -7, 0.55823, 7, -6.58, -3.99, 0.17739, 8, -76.73, 9.18, 0.08884, 1, 8, 50.43, -46.56, 1, 1, 6, -9.88, 20.65, 1, 2, 2, -53.22, 20.53, 0.2, 58, 5.8, -15.09, 0.8, 3, 2, -180.71, 32.22, 0.08564, 58, 132.35, 4.23999, 0.56215, 59, -23.98, 19.01, 0.35219, 3, 58, 246.39, 57.53, 0.30273, 59, 101.61, 10.65, 0.46989, 60, -27.28, 13.2, 0.22737, 5, 58, 346.99, 126.85, 0.13479, 59, 223.17, 22.83, 0.28279, 60, 94.88, 13.77, 0.24481, 61, -47.85, -3.72, 0.17322, 62, -158.02, -73.16, 0.16438, 4, 59, 367.51, -9.96, 0.14656, 60, 235.45, -32.57, 0.23073, 61, 100.06, 1.62, 0.29607, 62, -24.81, -8.63, 0.32661, 4, 59, 440.24, -55.6, 0.10821, 60, 303.52, -84.91, 0.21897, 61, 182.07, -23.8, 0.31097, 62, 60.48, 1.14, 0.36182, 3, 6, 174.99, 22.22, 0.2, 7, 54.82, -19.14, 0.6, 8, -18.79999, -16.2, 0.2, 3, 58, 189.25, 30.83, 0.33253, 59, 38.68, 14.84, 0.48076, 60, -89.52, 23.34, 0.18669, 5, 58, 295.08, 91.08, 0.22891, 59, 160.45, 16.54, 0.38754, 60, 31.85, 13.48, 0.2306, 61, -106.86, -25.89, 0.08042, 62, -203.08, -117.24, 0.0725, 5, 58, 414.43, 146.25, 0.07359, 59, 291.61, 7.27, 0.20198, 60, 161.53, -8.2, 0.23762, 61, 22.27, -1.17999, 0.24024, 62, -94.86, -42.56, 0.24654, 4, 59, 404.01, -32.87, 0.12351, 60, 269.61, -58.84, 0.22261, 61, 141.21, -11.13, 0.30609, 62, 17.98, -3.72, 0.34777, 1, 8, 26.4, -166.06, 1, 1, 8, 87.21, -106.12, 1, 1, 8, 108.19, -49.62, 1, 2, 8, 61.73, -82.12999, 0.50021, 39, 4.42, 52.83, 0.49978, 2, 8, 22.84, -109.4, 0.50021, 39, 51.52, 46.73, 0.49978, 4, 6, 247.12, -50.52, 0.06545, 7, 60.86, -121.4, 0.06069, 8, -30.3, -118, 0.49079, 39, 96.58, 17.21999, 0.38305, 1, 2, 26.73, 14.8, 1, 2, 2, -107.97, 25.67, 0.24192, 58, 60.17, -6.91, 0.75807, 4, 2, 235.53, 102.96, 0.0761, 6, 150.1, 9.35, 0.35533, 7, 27.64, -12.34, 0.41675, 8, -44.43, -4.87, 0.1518, 3, 2, 227.15, 28.49, 0.31015, 6, 95.96, -42.46, 0.60548, 7, -47.23, -15.44, 0.08435, 2, 8, 5.19, -153.1, 0.87618, 39, 90.96, 71.21, 0.12381, 4, 6, 243.13, -60.59, 0.10669, 7, 51.21, -126.33, 0.09893, 8, -40.65, -121.21, 0.47072, 39, 105.71, 17.33, 0.32363, 1, 8, 23.69, -185.21, 1, 1, 8, 79.64, -175.94, 1, 1, 8, 93.96, -187.56, 1, 1, 8, 87.07, -206.55, 1, 1, 8, 64.19999, -216.74, 1, 1, 8, 52.23, -203.68, 1, 1, 8, 59.24, -187.03, 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.1, -166.14, 1, 1, 8, 46.84, -186.41, 1, 1, 8, 50.32, -204.36, 1, 1, 8, 41.7, -206.59, 1, 1, 8, 61.87, -230.97, 1, 5, 58, 374.97, 143.6, 0.10291, 59, 256.29, 17.42, 0.23985, 60, 127.43, 2.07, 0.2431, 61, -13.35, -3.05, 0.20854, 62, -128.14, -55.46, 0.20557, 4, 59, 327.21, 4.42, 0.17789, 60, 196.28, -19.32, 0.24248, 61, 58.71, -1.04999, 0.28055, 62, -62.24, -26.21, 0.29905, 5, 58, 318.32, 113.62, 0.17774, 59, 192.26, 20.14, 0.33383, 60, 64.19, 12.44, 0.24171, 61, -76.55, -13.67, 0.12849, 62, -182.56, -89.31, 0.11821, 2, 8, 56.98, -162.99, 0.89259, 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": "skinnedmesh", + "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, 15, 3.06, 31.88, 0.51075, 14, 66.56, -109.48, 0.48924, 1, 15, 35.87, 35.62, 1, 2, 15, 60.94, 27.12, 0.8464, 29, 46.49, 31.12, 0.15359, 3, 15, 74.05, 22.67, 0.34375, 29, 36.5, 21.53, 0.64062, 45, -45.25, -29.96, 0.01562, 3, 15, 67, 31.58, 0.10937, 29, 47.66, 23.68, 0.78125, 45, -40.93, -19.44, 0.10937, 3, 15, 42.17, 62.99, 0.01562, 29, 86.98, 31.24, 0.64062, 45, -25.75, 17.61, 0.34375, 2, 29, 103.83, 34.49, 0.34375, 45, -19.24, 33.49, 0.65625, 2, 29, 114.04, 19.51, 0.10937, 45, -1.11, 33.84, 0.89062, 2, 29, 144.85, -25.73, 0.02083, 45, 53.62, 34.88, 0.97916, 1, 45, 96.03, -19.16, 1, 1, 45, 104.2, -47.31, 1, 1, 45, 71.34, -23.98, 1, 1, 45, 81.39, -64.61, 1, 1, 45, 76.8, -68.81, 1, 2, 29, 83.18, -57.72, 0.02083, 45, 46.65, -34.25, 0.97916, 2, 29, 73.13, -45.76, 0.10937, 45, 31.14, -36.12, 0.89062, 2, 29, 73.98, -26.9, 0.34375, 45, 15.82, -25.09, 0.65625, 3, 15, 103.67, 70.28, 0.01562, 29, 65.1, -26.69, 0.64062, 45, 10.78, -32.41, 0.34375, 3, 15, 133.56, 9.13, 0.10937, 29, -2.94, -25.03, 0.78125, 45, -27.84, -88.47, 0.10937, 3, 15, 123.67, -14.42, 0.34375, 29, -19.29, -5.39, 0.64062, 45, -53.23, -91.41, 0.01562, 2, 15, 97.41, -15.43, 0.8464, 29, -8.08, 18.37, 0.15359, 1, 15, 45.46, -17.43, 1, 2, 15, 40.69, -27.17, 0.45035, 14, -1.69, -93.8, 0.54964, 2, 15, -2.74, -29.63, 0.44352, 14, 18.99, -72.93, 0.55647, 1, 14, 32.11, -48.45, 1, 1, 14, 57.56, -67.43, 1, 1, 14, 84.38, -87.42, 1, 2, 15, 16.44, 5.21, 0.7182, 14, 46.31, -101.86, 0.28179, 2, 15, -4.51, 5.32, 0.48851, 14, 52.82, -81.94, 0.51148 ], - "hull": 27 + "vertices": [ 2, 21, 3.06, 31.88, 0.51075, 6, 66.56, -109.48, 0.48924, 1, 21, 35.87, 35.62, 1, 2, 21, 60.94, 27.12, 0.8464, 22, 46.49, 31.12, 0.15358, 2, 21, 74.05, 22.67, 0.3492, 22, 36.5, 21.53, 0.65078, 3, 21, 67, 31.58, 0.10937, 22, 47.66, 23.68, 0.78125, 31, -40.93, -19.44, 0.10937, 2, 22, 86.98, 31.24, 0.65078, 31, -25.75, 17.61, 0.3492, 2, 22, 103.83, 34.49, 0.34375, 31, -19.24, 33.49, 0.65625, 2, 22, 114.04, 19.51, 0.10937, 31, -1.11, 33.84, 0.89062, 1, 31, 53.62, 34.88, 1, 1, 31, 96.03, -19.16, 1, 1, 31, 104.2, -47.31, 1, 1, 31, 71.33999, -23.98, 1, 1, 31, 81.39, -64.61, 1, 1, 31, 76.8, -68.81, 1, 1, 31, 46.65, -34.25, 1, 2, 22, 73.12999, -45.76, 0.10937, 31, 31.14, -36.12, 0.89062, 2, 22, 73.98, -26.9, 0.34375, 31, 15.82, -25.09, 0.65625, 2, 22, 65.1, -26.69, 0.65078, 31, 10.78, -32.41, 0.3492, 3, 21, 133.56, 9.13, 0.10937, 22, -2.94, -25.03, 0.78125, 31, -27.84, -88.47, 0.10937, 2, 21, 123.67, -14.42, 0.3492, 22, -19.29, -5.39, 0.65078, 2, 21, 97.41, -15.43, 0.8464, 22, -8.08, 18.37, 0.15358, 1, 21, 45.46, -17.43, 1, 2, 21, 40.68999, -27.17, 0.45035, 6, -1.69, -93.8, 0.54964, 2, 21, -2.74, -29.63, 0.44352, 6, 18.99, -72.93, 0.55646, 1, 6, 32.11, -48.45, 1, 1, 6, 57.56, -67.43, 1, 1, 6, 84.38, -87.42, 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.82, -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": "skinnedmesh", + "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, 43, 9, 10, 42, 43, 10, 41, 43, 42, 13, 44, 42, 10, 13, 42, 11, 13, 10, 13, 11, 12, 45, 8, 9, 45, 9, 43, 40, 8, 45, 41, 42, 44, 45, 43, 41, 45, 41, 44, 16, 40, 45, 17, 40, 16, 15, 45, 44, 16, 45, 15, 14, 15, 44, 13, 14, 44, 19, 21, 38, 20, 21, 19, 39, 38, 6, 39, 6, 7, 40, 39, 7, 40, 7, 8, 18, 19, 38, 18, 38, 39, 17, 39, 40, 18, 39, 17, 47, 25, 48, 24, 25, 47, 35, 48, 34, 47, 48, 35, 51, 24, 47, 23, 24, 51, 3, 34, 2, 35, 34, 3, 36, 51, 47, 23, 51, 36, 22, 23, 36, 36, 47, 35, 4, 35, 3, 36, 35, 4, 37, 22, 36, 21, 22, 37, 5, 37, 36, 5, 36, 4, 6, 37, 5, 38, 21, 37, 38, 37, 6, 29, 30, 46, 32, 31, 0, 46, 31, 32, 28, 29, 46, 28, 46, 32, 32, 27, 28, 50, 27, 32, 33, 32, 0, 33, 0, 1, 49, 50, 32, 33, 49, 32, 26, 27, 50, 26, 50, 49, 25, 26, 49, 48, 49, 33, 25, 49, 48, 34, 33, 1, 48, 33, 34, 34, 1, 2 ], - "vertices": [ 3, 4, 128.03, 88.47, 0.83908, 10, -70.2, -134.13, 0.01331, 2, 158.83, -71.91, 0.1476, 2, 4, 219.55, 53.15, 0.77988, 10, -48.04, -38.58, 0.22011, 3, 4, 266.3, 35.1, 0.53531, 10, -36.73, 10.22, 0.46443, 30, 127.25, 245.46, 2.4E-4, 4, 4, 286.89, 9.79, 0.35076, 10, -14.56, 34.14, 0.64667, 30, 125.69, 212.88, 0.0023, 44, 101.39, 199.13, 2.5E-4, 4, 4, 281.54, -41.24, 0.09169, 10, 36.71, 36, 0.90196, 30, 87.64, 178.44, 0.00513, 44, 58.29, 171.29, 0.00119, 5, 4, 271.53, -136.86, 0.05608, 10, 132.77, 39.48, 0.69232, 16, 34.99, 78.76, 0.22087, 30, 16.38, 113.93, 0.0224, 44, -22.45, 119.13, 0.0083, 5, 4, 283.51, -164.25, 0.01987, 10, 158.21, 55.17, 0.50334, 16, 52.65, 54.63, 0.3617, 30, 7.01, 85.54, 0.08322, 44, -36.28, 92.63, 0.03184, 6, 4, 326.15, -179.3, 0.00798, 10, 167.14, 99.49, 0.21327, 16, 97.55, 49.25, 0.35075, 30, 28.72, 45.87, 0.14107, 44, -21.26, 49.99, 0.22311, 60, -72.29, 25.96, 0.0638, 6, 4, 333.96, -167.35, 0.00242, 10, 154.22, 105.55, 0.07519, 16, 102.57, 62.6, 0.22995, 30, 42.51, 49.55, 0.2831, 44, -7.06, 51.39, 0.2694, 60, -58.17, 28.03, 0.13992, 6, 4, 344.19, -149.68, 4.9E-4, 10, 134.24, 114.44, 0.0176, 16, 109.72, 83.39, 0.11397, 30, 64.09, 55.23, 0.07976, 44, 15.12, 53.51, 0.36292, 60, -36.09, 31.19, 0.42523, 1, 60, 35.8, 41.81, 1, 1, 60, 128.11, 17.93, 1, 1, 60, 188.72, -29.42, 1, 1, 60, 44.86, -26.17, 1, 1, 44, 133.17, -49.83, 1, 1, 44, 78.78, -50.15, 1, 5, 4, 399.32, -220.02, 2.2E-4, 10, 195.56, 179.43, 0.01703, 16, 179.46, 27.52, 0.2372, 30, 58.34, -33.93, 0.2023, 44, -4.91, -33.55, 0.54324, 5, 4, 370.41, -244.91, 3.2E-4, 10, 225.9, 152.49, 0.02513, 16, 155.04, -5.13, 0.35003, 30, 17.88, -32.5, 0.29852, 44, -44.62, -25.61, 0.32598, 5, 4, 340.37, -270.04, 0.00251, 10, 254.98, 126.27, 0.10129, 16, 131.21, -36.2, 0.54075, 30, -21.24, -31.17, 0.2082, 44, -83.02, -17.97, 0.14723, 5, 4, 225.1, -238.94, 0.01529, 10, 240.33, 7.81, 0.24036, 16, 11.94, -30.98, 0.57881, 30, -86.31, 68.9, 0.12023, 44, -131.06, 91.29, 0.04528, 5, 4, 194.64, -233.55, 0.04819, 10, 239.26, -23.1, 0.40427, 16, -18.96, -32.37, 0.48451, 30, -105.4, 93.25, 0.04604, 44, -145.97, 118.4, 0.01697, 5, 4, 187.65, -209.73, 0.09565, 10, 216.66, -33.35, 0.57617, 16, -30.97, -10.65, 0.30651, 30, -94.71, 115.65, 0.01788, 44, -131.8, 138.78, 0.00376, 4, 4, 163.85, -128.67, 0.19533, 10, 139.75, -68.26, 0.8011, 30, -58.32, 191.88, 0.00327, 44, -83.58, 208.13, 2.9E-4, 4, 4, 165.74, -94.49, 0.31921, 10, 105.59, -71.26, 0.6795, 30, -5.04, 220.72, 0.00117, 44, -56.32, 275.96, 1.0E-4, 4, 4, 166.39, -79.07, 0.46205, 10, 90.23, -72.76, 0.53752, 30, 5.55, 230.48, 3.9E-4, 44, -40.61, 286.16, 2.0E-5, 3, 4, 166.49, -74.17, 0.53779, 10, 85.42, -73.28, 0.46208, 30, -19.99, 230.7, 1.2E-4, 2, 4, 141.54, -82.46, 0.73138, 10, 97.13, -96.82, 0.26861, 3, 4, 99.76, -97.08, 0.81379, 10, 117.34, -136.23, 0.13997, 2, -2.56, -164.19, 0.04623, 3, 4, 45.01, -114.56, 0.8186, 10, 142.41, -187.89, 0.02098, 2, -51.09, -135.29, 0.1604, 3, 4, -16.2, -74.76, 0.62389, 10, 113.82, -253.08, 0.00952, 2, -42.95, -58.38, 0.36658, 2, 4, -74.73, -19.33, 0.31468, 2, -52.66, 17.55, 0.68531, 2, 4, 1.67, 76.75, 0.25576, 2, 70.07, 18.78, 0.74423, 1, 4, 93.54, 4.13, 1, 2, 4, 185.14, -6.66, 0.75461, 10, 15.98, -64.27, 0.24538, 2, 4, 217.11, -18.75, 0.50845, 10, 23.47, -30.93, 0.49154, 3, 4, 225.63, -32.92, 0.32512, 10, 36.3, -20.5, 0.6744, 30, 51.57, 221.95, 4.7E-4, 4, 4, 223, -84.73, 0.20061, 10, 87.96, -15.86, 0.79287, 30, 15.03, 185.13, 0.00581, 44, -12.28, 189.61, 6.9E-4, 5, 4, 235.61, -168.06, 0.07777, 10, 168.69, 8.29, 0.54931, 16, 6.74, 40.47, 0.33413, 30, -31.18, 114.66, 0.0321, 44, -69.27, 127.55, 0.00667, 5, 4, 259.63, -194.79, 0.01921, 10, 191.79, 35.8, 0.30498, 16, 36, 19.62, 0.53642, 30, -31.14, 78.74, 0.09568, 44, -75.03, 92.09, 0.04369, 5, 4, 332.55, -220.1, 0.00292, 10, 206.64, 111.53, 0.10776, 16, 112.69, 10.82, 0.51915, 30, 6.25, 11.23, 0.23449, 44, -49.03, 19.43, 0.13566, 4, 10, 192.51, 130.62, 0.03213, 16, 130.6, 26.41, 0.33941, 30, 29.35, 5.71, 0.27333, 44, -27.12, 10.25, 0.35511, 1, 44, 67.46, 3.16, 1, 1, 60, 19.07, -14.51, 1, 6, 4, 381.55, -150.4, 3.0E-4, 10, 130.71, 150.34, 0.00811, 16, 145.36, 89.53, 0.04102, 30, 89.29, 30.41, 0.02558, 44, 36, 24.95, 0.37636, 60, -13.89, 3.64, 0.54861, 1, 44, 86.23, -6.55, 1, 4, 10, 164.9, 153.55, 0.02263, 16, 151.18, 56, 0.23908, 30, 65.44, 5.55, 0.19254, 44, 8.45, 4.27, 0.54574, 2, 4, -9.28, -17.5, 0.59606, 2, 7.72, -30.85, 0.40393, 3, 4, 195.9, -53.81, 0.42356, 10, 61.11, -47.06, 0.57613, 30, 39.7, 225.21, 2.9E-4, 3, 4, 190.1, -48.45, 0.53227, 10, 56.61, -53.56, 0.46765, 30, 39.83, 233.12, 6.0E-5, 2, 4, 161.26, -48.26, 0.79873, 10, 60.44, -82.13, 0.20126, 3, 4, 120.37, -58.54, 0.8485, 10, 76.31, -121.18, 0.14441, 2, 41.04, -161.4, 0.00707, 4, 4, 197.37, -69.23, 0.33487, 10, 76.17, -43.46, 0.66324, 30, 30.34, 213.88, 0.0017, 44, -9.09, 262.42, 1.8E-4 ], - "hull": 32 + "triangles": [ 46, 30, 31, 41, 42, 44, 43, 9, 10, 42, 43, 10, 41, 43, 42, 10, 13, 42, 11, 13, 10, 13, 11, 12, 13, 44, 42, 14, 15, 13, 45, 8, 9, 45, 40, 8, 16, 40, 45, 17, 40, 16, 16, 45, 15, 15, 45, 44, 45, 41, 44, 15, 44, 13, 45, 9, 43, 45, 43, 41, 19, 21, 38, 20, 21, 19, 39, 38, 6, 39, 6, 7, 40, 39, 7, 40, 7, 8, 18, 19, 38, 18, 38, 39, 17, 39, 40, 18, 39, 17, 47, 25, 48, 24, 25, 47, 35, 48, 34, 47, 48, 35, 51, 24, 47, 23, 24, 51, 3, 34, 2, 35, 34, 3, 36, 51, 47, 36, 47, 35, 4, 35, 3, 36, 35, 4, 37, 22, 23, 21, 22, 37, 36, 37, 23, 36, 23, 51, 5, 37, 36, 5, 36, 4, 6, 37, 5, 38, 21, 37, 38, 37, 6, 29, 30, 46, 32, 31, 0, 46, 31, 32, 28, 29, 46, 46, 27, 28, 32, 50, 46, 50, 27, 46, 33, 32, 0, 33, 0, 1, 49, 50, 32, 33, 49, 32, 26, 27, 50, 26, 50, 49, 25, 26, 49, 48, 49, 33, 25, 49, 48, 34, 33, 1, 48, 33, 34, 34, 1, 2 ], + "vertices": [ 2, 25, 128.03, 88.47, 0.8504, 1, 158.83, -71.91, 0.14959, 2, 25, 219.55, 53.15, 0.77988, 26, -48.04, -38.58, 0.22011, 2, 25, 266.3, 35.09999, 0.53544, 26, -36.73, 10.22, 0.46455, 2, 25, 286.89, 9.79, 0.35166, 26, -14.56, 34.14, 0.64832, 2, 25, 281.54, -41.24, 0.09228, 26, 36.71, 36, 0.90771, 3, 25, 271.53, -136.86, 0.05786, 26, 132.77, 39.48, 0.71425, 27, 34.99, 78.76, 0.22787, 3, 26, 158.21, 55.17, 0.5308, 27, 52.65, 54.63, 0.38143, 28, 7.01, 85.54, 0.08776, 5, 26, 167.14, 99.49, 0.21498, 27, 97.55, 49.25, 0.35357, 28, 28.72, 45.87, 0.14219, 29, -21.26, 49.99, 0.22491, 30, -72.29, 25.96, 0.06431, 5, 26, 154.22, 105.55, 0.07537, 27, 102.57, 62.6, 0.23051, 28, 42.51, 49.55, 0.28379, 29, -7.06, 51.39, 0.27004, 30, -58.17, 28.03, 0.14026, 4, 27, 109.72, 83.39, 0.11607, 28, 64.08999, 55.23, 0.08123, 29, 15.12, 53.51, 0.36961, 30, -36.09, 31.19, 0.43307, 1, 30, 35.8, 41.81, 1, 1, 30, 128.11, 17.93, 1, 1, 30, 188.72, -29.42, 1, 2, 29, 93.29, -7.6, 0.47999, 30, 44.86, -26.17, 0.52, 2, 29, 133.17, -49.83, 0.776, 30, 86.69, -66.47, 0.22399, 2, 29, 78.78, -50.15, 0.76799, 30, 32.38, -69.36, 0.232, 1, 29, -4.91, -33.55, 1, 3, 27, 155.04, -5.13, 0.35917, 28, 17.87999, -32.5, 0.30632, 29, -44.62, -25.61, 0.33449, 4, 26, 254.98, 126.27, 0.10154, 27, 131.21, -36.2, 0.54211, 28, -21.24, -31.17, 0.20873, 29, -83.01999, -17.96999, 0.1476, 3, 26, 240.33, 7.81, 0.25586, 27, 11.94, -30.98, 0.61614, 28, -86.31, 68.9, 0.12797, 2, 26, 239.26, -23.1, 0.45486, 27, -18.95999, -32.37, 0.54513, 3, 25, 187.65, -209.73, 0.09777, 26, 216.66, -33.34999, 0.58892, 27, -30.97, -10.65, 0.3133, 2, 25, 163.85, -128.67, 0.19603, 26, 139.75, -68.26, 0.80396, 2, 25, 165.74, -94.49, 0.31962, 26, 105.59, -71.26, 0.68037, 2, 25, 166.39, -79.07, 0.46225, 26, 90.23, -72.76, 0.53774, 2, 25, 166.49, -74.17, 0.53785, 26, 85.42, -73.28, 0.46213, 2, 25, 141.54, -82.46, 0.73138, 26, 97.13, -96.82, 0.26861, 2, 25, 99.76, -97.08, 0.85324, 26, 117.34, -136.23, 0.14675, 2, 25, 45.01, -114.56, 0.83615, 1, -51.09, -135.29, 0.16384, 2, 25, -16.2, -74.76, 0.62989, 1, -42.95, -58.38, 0.3701, 2, 25, -74.73, -19.33, 0.31468, 1, -52.66, 17.54999, 0.68531, 2, 25, 1.67, 76.75, 0.25576, 1, 70.07, 18.78, 0.74423, 1, 25, 93.54, 4.13, 1, 2, 25, 185.14, -6.66, 0.75461, 26, 15.98, -64.26999, 0.24538, 2, 25, 217.11, -18.75, 0.50844, 26, 23.47, -30.93, 0.49154, 2, 25, 225.63, -32.91999, 0.32527, 26, 36.3, -20.5, 0.67472, 2, 25, 223, -84.73, 0.20192, 26, 87.96, -15.86, 0.79807, 3, 25, 235.61, -168.06, 0.0809, 26, 168.69, 8.29, 0.57147, 27, 6.74, 40.47, 0.34761, 3, 26, 191.79, 35.8, 0.32545, 27, 36, 19.62, 0.57243, 28, -31.14, 78.74, 0.10211, 4, 26, 206.64, 111.53, 0.10808, 27, 112.69, 10.82, 0.52067, 28, 6.25, 11.23, 0.23517, 29, -49.03, 19.43, 0.13606, 3, 27, 130.6, 26.41, 0.35067, 28, 29.35, 5.71, 0.28241, 29, -27.12, 10.25, 0.3669, 2, 29, 67.46, 3.16, 0.384, 30, 18.54999, -16.62999, 0.61599, 1, 30, 19.07, -14.51, 1, 2, 29, 36, 24.95, 0.384, 30, -13.89, 3.64, 0.61599, 2, 29, 86.23, -6.55, 0.48799, 30, 37.75, -25.46, 0.512, 4, 26, 164.9, 153.55, 0.02263, 27, 151.18, 56, 0.23908, 28, 65.44, 5.55, 0.19254, 29, 8.45, 4.27, 0.54574, 2, 25, -9.28, -17.5, 0.59605, 1, 7.72, -30.85, 0.40393, 2, 25, 195.9, -53.81, 0.42368, 26, 61.11, -47.06, 0.5763, 2, 25, 190.1, -48.45, 0.53231, 26, 56.61, -53.56, 0.46768, 2, 25, 161.26, -48.26, 0.79873, 26, 60.44, -82.12999, 0.20126, 2, 25, 120.37, -58.54, 0.85455, 26, 76.31, -121.18, 0.14544, 2, 25, 197.37, -69.23, 0.3355, 26, 76.17, -43.46, 0.66449 ], + "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": "skinnedmesh", + "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": [ 16, 47, 15, 15, 12, 13, 15, 13, 14, 15, 47, 12, 47, 10, 11, 17, 46, 47, 47, 46, 10, 18, 46, 17, 17, 47, 16, 18, 45, 46, 47, 11, 12, 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, 20, 21, 44, 20, 45, 19, 44, 45, 20, 45, 18, 19, 46, 9, 10, 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, 28, 29, 40, 40, 39, 4, 7, 42, 6, 24, 42, 22, 40, 29, 39, 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, 6, 53.94, 69.15, 1, 1, 6, 126.23, 67.31, 1, 2, 6, 226.42, 31.13, 0.9375, 11, -30.87, -1.11, 0.0625, 2, 6, 240.84, 25.33, 0.7, 11, -25.64, 13.52, 0.3, 2, 6, 246.67, 8.05, 0.3, 11, -8.61, 20.02, 0.7, 3, 6, 240.81, -115.25, 0.0625, 11, 114.8, 19.01, 0.875, 19, 9.48, 59.16, 0.0625, 2, 11, 131.07, 29.69, 0.7, 19, 22.11, 44.35, 0.3, 2, 11, 146.06, 39.54, 0.3, 19, 33.76, 30.71, 0.7, 4, 11, 152.6, 65.01, 0.12438, 19, 59.85, 27.41, 0.74434, 35, 15.85, 48.05, 0.12104, 51, -80.52, 23.87, 0.01022, 4, 11, 154.28, 71.59, 0.0519, 19, 66.59, 26.56, 0.74749, 35, 16.72, 41.31, 0.15401, 51, -77.54, 17.76, 0.04658, 4, 11, 145.73, 77.3, 0.02193, 19, 71.19, 35.76, 0.63296, 35, 26.78, 39.17, 0.1288, 51, -67.32, 18.96, 0.21628, 3, 19, 87.93, 69.21, 0.0625, 35, 63.37, 31.39, 0.675, 51, -30.17, 23.3, 0.26249, 2, 35, 113.82, 35.72, 0.1038, 51, 16.23, 43.56, 0.89619, 1, 51, 128.14, 12.02, 1, 1, 51, 161.85, -15.81, 1, 2, 35, 90.98, -23.36, 0.0138, 51, 13.52, -19.72, 0.98619, 2, 35, 62.97, -25.81, 0.7, 51, -12.23, -31.02, 0.3, 3, 19, 115.12, -1.33, 0.08333, 35, 1.93, -12.66, 0.83333, 51, -74.26, -38.1, 0.08333, 2, 19, 106.11, -23.53, 0.3, 35, -21.8, -9.52, 0.7, 2, 19, 97.43, -44.9, 0.7, 35, -44.67, -6.51, 0.3, 2, 19, 84.26, -40.69, 0.9375, 35, -43.9, 7.29, 0.0625, 1, 19, 49.18, -29.46, 1, 2, 11, 206.75, 5.37, 0.13333, 19, 7.44, -33.77, 0.86666, 2, 11, 219.64, -20.52, 0.36111, 19, -16.64, -49.8, 0.63888, 2, 11, 208.4, -37.82, 0.72083, 19, -35.22, -40.82, 0.27916, 2, 11, 200.49, -50.02, 0.91666, 19, -48.31, -34.48, 0.08333, 1, 11, 161.1, -36.97, 1, 2, 6, 150.1, -116.76, 0.08333, 11, 119.88, -71.55, 0.91666, 2, 6, 154.99, -70.71, 0.42846, 11, 73.68, -68.47, 0.57153, 2, 6, 150.3, -65.27, 0.35604, 11, 68.42, -73.36, 0.64395, 2, 6, 146.51, -60.87, 0.59147, 11, 64.17, -77.32, 0.40852, 2, 6, 115.12, -75.08, 0.8446, 11, 79.61, -108.13, 0.15539, 1, 6, 63.33, -98.53, 1, 1, 6, 21.78, -94.55, 1, 1, 6, -66.69, -32.04, 1, 1, 6, -6.62, 52.97, 1, 1, 6, 58.14, -6, 1, 1, 6, 121.17, 2.44, 1, 2, 6, 188.87, -12.1, 0.96, 11, 13.79, -36.92, 0.04, 2, 6, 197.11, -18.42, 0.7, 11, 19.79, -28.44, 0.3, 2, 6, 203.98, -28.61, 0.3, 11, 29.69, -21.17, 0.7, 3, 6, 213.53, -136.06, 0.04, 11, 136.67, -7.42, 0.91999, 19, -14.02, 34.16, 0.04, 2, 11, 164.32, 0.66, 0.7, 19, -2.53, 7.73, 0.3, 2, 11, 177.97, 21.57, 0.25, 19, 19.92, -3.19, 0.75, 3, 11, 187.55, 72.78, 0.04, 19, 71.93, -6.29, 0.91999, 35, -13.72, 27.87, 0.04, 2, 19, 79.66, -3.72, 0.7, 35, -9.28, 21.04, 0.3, 3, 19, 87.98, 7.25, 0.3, 35, 3.42, 15.76, 0.66, 51, -81.96, -10.7, 0.04, 3, 19, 114.16, 61.85, 0.04, 35, 62.84, 4.15, 0.7, 51, -21.95, -2.66, 0.26 ], - "hull": 36 + "triangles": [ 15, 13, 14, 16, 47, 15, 15, 12, 13, 15, 47, 12, 18, 46, 17, 18, 45, 46, 17, 47, 16, 17, 46, 47, 47, 10, 11, 47, 46, 10, 47, 11, 12, 45, 18, 19, 44, 45, 20, 20, 45, 19, 20, 21, 44, 46, 9, 10, 46, 45, 9, 45, 44, 9, 21, 43, 44, 44, 8, 9, 44, 7, 8, 44, 43, 7, 21, 22, 43, 43, 22, 42, 43, 42, 7, 22, 23, 24, 24, 42, 22, 7, 42, 6, 42, 41, 6, 6, 41, 5, 24, 26, 42, 42, 26, 41, 24, 25, 26, 5, 40, 4, 5, 41, 40, 41, 28, 40, 26, 27, 41, 41, 27, 28, 40, 39, 4, 28, 29, 40, 40, 29, 39, 4, 39, 3, 39, 2, 3, 29, 30, 39, 39, 38, 2, 39, 30, 38, 38, 1, 2, 30, 37, 38, 38, 37, 1, 30, 31, 37, 31, 36, 37, 31, 32, 36, 32, 33, 36, 37, 0, 1, 37, 36, 0, 33, 34, 36, 36, 35, 0, 36, 34, 35 ], + "vertices": [ 1, 44, 53.94, 69.15, 1, 1, 44, 126.23, 67.31, 1, 2, 44, 226.42, 31.13, 0.9375, 45, -30.87, -1.11, 0.0625, 2, 44, 240.84, 25.33, 0.7, 45, -25.64, 13.52, 0.3, 2, 44, 246.67, 8.05, 0.3, 45, -8.60999, 20.02, 0.7, 3, 44, 240.81, -115.25, 0.0625, 45, 114.8, 19.01, 0.875, 46, 9.47999, 59.16, 0.0625, 2, 45, 131.07, 29.69, 0.7, 46, 22.11, 44.35, 0.3, 2, 45, 146.06, 39.54, 0.3, 46, 33.75999, 30.71, 0.7, 3, 45, 152.6, 65.01, 0.12566, 46, 59.85, 27.41, 0.75203, 47, 15.85, 48.05, 0.12229, 3, 45, 154.28, 71.58999, 0.05444, 46, 66.58999, 26.56, 0.78401, 47, 16.71999, 41.31, 0.16154, 3, 46, 71.19, 35.75999, 0.64716, 47, 26.78, 39.16999, 0.13169, 48, -67.32, 18.95999, 0.22114, 3, 46, 87.93, 69.21, 0.0625, 47, 63.37, 31.39, 0.675, 48, -30.17, 23.3, 0.26249, 2, 47, 113.82, 35.72, 0.1038, 48, 16.23, 43.56, 0.89619, 1, 48, 128.14, 12.02, 1, 1, 48, 161.85, -15.81, 1, 2, 47, 90.98, -23.36, 0.0138, 48, 13.52, -19.71999, 0.98619, 2, 47, 62.97, -25.81, 0.7, 48, -12.23, -31.02, 0.3, 3, 46, 115.12, -1.33, 0.08333, 47, 1.93, -12.66, 0.83333, 48, -74.26, -38.09999, 0.08333, 2, 46, 106.11, -23.53, 0.3, 47, -21.8, -9.52, 0.7, 2, 46, 97.43, -44.9, 0.7, 47, -44.67, -6.51, 0.3, 2, 46, 84.26, -40.68999, 0.9375, 47, -43.9, 7.29, 0.0625, 1, 46, 49.18, -29.46, 1, 2, 45, 206.75, 5.37, 0.13333, 46, 7.44, -33.77, 0.86666, 2, 45, 219.64, -20.52, 0.36111, 46, -16.64, -49.8, 0.63888, 2, 45, 208.4, -37.82, 0.72083, 46, -35.22, -40.82, 0.27916, 2, 45, 200.49, -50.02, 0.91666, 46, -48.31, -34.48, 0.08333, 1, 45, 161.1, -36.97, 1, 2, 44, 150.1, -116.76, 0.08333, 45, 119.88, -71.55, 0.91666, 2, 44, 154.99, -70.71, 0.42846, 45, 73.68, -68.47, 0.57153, 2, 44, 150.3, -65.26999, 0.35604, 45, 68.42, -73.36, 0.64395, 2, 44, 146.51, -60.87, 0.59147, 45, 64.17, -77.32, 0.40852, 2, 44, 115.12, -75.08, 0.8446, 45, 79.61, -108.13, 0.15538, 1, 44, 63.33, -98.53, 1, 1, 44, 21.78, -94.55, 1, 1, 44, -66.69, -32.04, 1, 1, 44, -6.62, 52.97, 1, 1, 44, 58.14, -6, 1, 1, 44, 121.17, 2.44, 1, 1, 44, 188.87, -12.1, 1, 2, 44, 197.11, -18.42, 0.7, 45, 19.79, -28.44, 0.3, 2, 44, 203.98, -28.61, 0.3, 45, 29.69, -21.17, 0.7, 1, 45, 136.67, -7.42, 1, 2, 45, 164.32, 0.66, 0.7, 46, -2.53, 7.73, 0.3, 2, 45, 177.97, 21.57, 0.25, 46, 19.92, -3.19, 0.75, 1, 46, 71.93, -6.29, 1, 2, 46, 79.66, -3.72, 0.7, 47, -9.28, 21.04, 0.3, 2, 46, 87.98, 7.25, 0.3125, 47, 3.42, 15.76, 0.6875, 3, 46, 114.16, 61.85, 0.04, 47, 62.84, 4.15, 0.7, 48, -21.95, -2.66, 0.26 ], + "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": { @@ -306,11 +410,14 @@ }, "raptor_jaw": { "raptor_jaw": { - "type": "skinnedmesh", - "uvs": [ 0.40984, 0.22169, 0.42214, 0.3988, 0.67894, 0.53819, 0.7589, 0.62838, 0.99999, 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, 0.31758, 0.50047 ], - "triangles": [ 14, 13, 0, 10, 11, 15, 15, 14, 1, 2, 7, 8, 8, 9, 10, 15, 2, 8, 15, 8, 10, 7, 3, 6, 7, 2, 3, 2, 15, 1, 6, 3, 5, 5, 3, 4, 14, 0, 1, 11, 14, 15, 11, 12, 14, 14, 12, 13 ], - "vertices": [ 1, 48, 28.6, 68.85, 1, 1, 48, 69.65, 38.95, 1, 1, 48, 150.72, 72.88, 1, 1, 48, 186.16, 74.79, 1, 1, 48, 199.76, 159.69, 1, 1, 48, 213.35, 148.16, 1, 1, 48, 242.43, 74.42, 1, 1, 48, 230.31, -13.08, 1, 1, 48, 189.56, -71.99, 1, 1, 48, 132.76, -105.6, 1, 1, 48, 83.71, -55.39, 1, 2, 33, -18.31, 12.1, 0.67732, 48, -0.04, -70.76, 0.32267, 1, 33, 113.44, 16.95, 1, 1, 33, 116.36, -62.48, 1, 1, 48, 1.86, 5.43, 1, 1, 48, 71.19, -4.17, 1 ], - "hull": 14 + "type": "mesh", + "uvs": [ 0.40984, 0.22169, 0.42214, 0.3988, 0.67894, 0.53819, 0.7589, 0.62838, 0.99999, 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.85, 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.42, 1, 1, 39, 230.31, -13.08, 1, 1, 39, 189.56, -71.99, 1, 1, 39, 132.76, -105.6, 1, 1, 39, 83.71, -55.39, 1, 2, 8, -18.31, 12.1, 0.67732, 39, -0.04, -70.76, 0.32267, 1, 8, 113.44, 16.95, 1, 1, 8, 116.36, -62.48, 1, 1, 39, 1.86, 5.43, 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": { @@ -321,11 +428,14 @@ }, "raptor_saddle_strap_rear": { "raptor_saddle_strap_rear": { - "type": "skinnedmesh", + "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, 22, 15, 20, 14, 15, 22, 5, 20, 4, 22, 20, 5, 15, 16, 20, 20, 21, 4, 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, 21, 3.9, -3.27, 1, 1, 21, 4.25, 15.05, 1, 1, 21, 13.24, 20.28, 1, 2, 21, 23.42, 21.2, 0.7, 37, -15.2, 21.22, 0.3, 3, 21, 41.11, 22.87, 0.3, 37, 2.48, 22.89, 0.6375, 53, -33.83, 24.96, 0.0625, 3, 21, 52.07, 21.72, 0.0625, 37, 13.43, 21.74, 0.6375, 53, -22.97, 23.11, 0.3, 2, 37, 18.39, 20.76, 0.25, 53, -18.09, 21.82, 0.75, 1, 53, -18.76, 33.09, 1, 1, 53, 49.92, 31.57, 1, 1, 53, 53.21, 25, 1, 1, 53, 53.11, -27.48, 1, 1, 53, 49.74, -31.27, 1, 1, 53, -20.73, -36.76, 1, 1, 53, -23.82, -22.28, 1, 3, 21, 53.48, -24.61, 0.0625, 37, 14.84, -24.59, 0.575, 53, -24.51, -23.21, 0.3625, 3, 21, 41.44, -26.12, 0.3, 37, 2.81, -26.09, 0.6375, 53, -36.62, -23.95, 0.0625, 2, 21, 24.38, -26.12, 0.7, 37, -14.24, -26.1, 0.3, 1, 21, 5.57, -26.12, 1, 1, 21, 3.54, -22.64, 1, 1, 53, -23.08, -0.04, 1, 3, 21, 41.66, -1.72, 0.3, 37, 3.03, -1.7, 0.66, 53, -34.85, 0.38, 0.04, 2, 21, 23.85, -2.46, 0.7, 37, -14.77, -2.44, 0.3, 3, 21, 52.58, -1.52, 0.04, 37, 13.95, -1.5, 0.62, 53, -23.94, -0.11, 0.34 ], - "hull": 19 + "triangles": [ 7, 8, 6, 9, 10, 13, 13, 11, 12, 6, 8, 19, 8, 9, 19, 9, 13, 19, 13, 10, 11, 19, 22, 6, 13, 14, 19, 19, 14, 22, 6, 22, 5, 22, 20, 5, 5, 20, 4, 14, 15, 22, 22, 15, 20, 20, 21, 4, 15, 16, 20, 4, 21, 3, 20, 16, 21, 2, 3, 0, 3, 21, 0, 0, 1, 2, 21, 16, 18, 16, 17, 18, 21, 18, 0 ], + "vertices": [ 1, 52, 3.9, -3.27, 1, 1, 52, 4.25, 15.05, 1, 1, 52, 13.24, 20.28, 1, 2, 52, 23.42, 21.2, 0.7, 53, -15.2, 21.22, 0.3, 3, 52, 41.11, 22.87, 0.3, 53, 2.48, 22.89, 0.6375, 54, -33.83, 24.96, 0.0625, 3, 52, 52.07, 21.72, 0.0625, 53, 13.43, 21.74, 0.6375, 54, -22.97, 23.11, 0.3, 2, 53, 18.39, 20.76, 0.25, 54, -18.09, 21.82, 0.75, 1, 54, -18.76, 33.09, 1, 1, 54, 49.92, 31.57, 1, 1, 54, 53.21, 25, 1, 1, 54, 53.11, -27.48, 1, 1, 54, 49.74, -31.27, 1, 1, 54, -20.73, -36.75999, 1, 1, 54, -23.82, -22.28, 1, 3, 52, 53.48, -24.61, 0.0625, 53, 14.84, -24.59, 0.575, 54, -24.51, -23.21, 0.3625, 3, 52, 41.43999, -26.12, 0.3, 53, 2.81, -26.09, 0.6375, 54, -36.62, -23.95, 0.0625, 2, 52, 24.38, -26.12, 0.7, 53, -14.24, -26.1, 0.3, 1, 52, 5.57, -26.12, 1, 1, 52, 3.54, -22.64, 1, 1, 54, -23.08, -0.04, 1, 2, 52, 41.66, -1.72, 0.3125, 53, 3.03, -1.7, 0.6875, 2, 52, 23.85, -2.46, 0.7, 53, -14.77, -2.44, 0.3, 2, 53, 13.95, -1.5, 0.64582, 54, -23.94, -0.11, 0.35416 ], + "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": { @@ -333,11 +443,14 @@ }, "raptor_tongue": { "raptor_tongue": { - "type": "skinnedmesh", + "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, 55, 3.63, 27.04, 0.6875, 62, -47.26, 33.87, 0.3125, 3, 55, 39.09, 19.45, 0.3125, 62, -13.41, 20.86, 0.625, 65, -51.54, 33.37, 0.0625, 3, 55, 71.56, 19.02, 0.0625, 62, 18.58, 15.39, 0.625, 65, -21.56, 20.92, 0.3125, 2, 62, 55.03, 16.85, 0.3125, 65, 14.29, 14.23, 0.6875, 2, 62, 93.34, 18.39, 0.08333, 65, 51.98, 7.21, 0.91666, 1, 65, 56.09, -4.5, 1, 2, 62, 85.06, -1.49, 0.08333, 65, 39.48, -10.33, 0.91666, 2, 62, 54.22, -9.18, 0.3125, 65, 7.71, -10.96, 0.6875, 3, 55, 75.14, -14.72, 0.0625, 62, 16.87, -18.5, 0.625, 65, -30.77, -11.73, 0.3125, 3, 55, 38.8, -25.8, 0.3125, 62, -20.74, -23.8, 0.625, 65, -68.62, -8.53, 0.0625, 2, 55, 2.4, -35.77, 0.6875, 62, -58.25, -27.99, 0.3125, 2, 55, -17.28, -40.62, 0.91666, 62, -78.45, -29.71, 0.08333, 1, 55, -59.91, 8.18, 1, 2, 55, -26.13, 37.69, 0.91666, 62, -75.02, 49.02, 0.08333 ], - "hull": 14 + "vertices": [ 2, 63, 3.63, 27.04, 0.6875, 64, -47.26, 33.87, 0.3125, 3, 63, 39.09, 19.45, 0.3125, 64, -13.41, 20.86, 0.625, 65, -51.54, 33.37, 0.0625, 3, 63, 71.56, 19.02, 0.0625, 64, 18.58, 15.39, 0.625, 65, -21.56, 20.92, 0.3125, 2, 64, 55.03, 16.85, 0.3125, 65, 14.29, 14.23, 0.6875, 2, 64, 93.34, 18.39, 0.08333, 65, 51.98, 7.21, 0.91666, 1, 65, 56.09, -4.5, 1, 2, 64, 85.06, -1.49, 0.08333, 65, 39.48, -10.33, 0.91666, 2, 64, 54.22, -9.18, 0.3125, 65, 7.71, -10.96, 0.6875, 3, 63, 75.14, -14.72, 0.0625, 64, 16.87, -18.5, 0.625, 65, -30.77, -11.73, 0.3125, 3, 63, 38.8, -25.8, 0.3125, 64, -20.74, -23.8, 0.625, 65, -68.62, -8.53, 0.0625, 2, 63, 2.4, -35.77, 0.6875, 64, -58.25, -27.99, 0.3125, 2, 63, -17.28, -40.62, 0.91666, 64, -78.44999, -29.71, 0.08333, 1, 63, -59.91, 8.18, 1, 2, 63, -26.13, 37.68999, 0.91666, 64, -75.01999, 49.02, 0.08333 ], + "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": { @@ -351,11 +464,14 @@ }, "stirrup_strap": { "stirrup_strap": { - "type": "skinnedmesh", + "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, 26, 24.71, 8.03, 0.80344, 39, -17.42, 11.02, 0.19655, 2, 26, 37.95, 8.04, 0.59978, 39, -4.36, 8.87, 0.40021, 2, 26, 50.88, 8.04, 0.36895, 39, 8.39, 6.77, 0.63104, 2, 26, 65.92, 12.27, 0.17748, 39, 23.91, 8.48, 0.82251, 2, 26, 81.72, 16.7, 0.05943, 39, 40.23, 10.28, 0.94056, 2, 26, 98.82, 25.04, 0.01209, 39, 58.46, 15.71, 0.9879, 2, 26, 114.44, 11.57, 0.00191, 39, 71.67, -0.11, 0.99808, 2, 26, 100.47, -4.61, 0.01817, 39, 55.25, -13.81, 0.98182, 2, 26, 78.79, -4.14, 0.07487, 39, 33.94, -9.81, 0.92512, 2, 26, 65.83, -6.24, 0.2028, 39, 20.81, -9.76, 0.79719, 2, 26, 49.78, -8.83, 0.39971, 39, 4.55, -9.7, 0.60028, 2, 26, 37.93, -10.97, 0.62658, 39, -7.48, -9.88, 0.37341, 2, 26, 25.85, -13.15, 0.82034, 39, -19.75, -10.06, 0.17965, 2, 26, 0.25, -18.03, 0.95288, 39, -45.81, -10.7, 0.04711, 2, 26, -17.83, -2.43, 0.97709, 39, -61.11, 7.63, 0.0229, 2, 26, 1.57, 20.07, 0.94774, 39, -38.29, 26.67, 0.05225, 2, 26, 10.84, -1.23, 0.97709, 39, -32.62, 4.14, 0.0229 ], - "hull": 16 + "vertices": [ 2, 56, 24.71, 8.03, 0.80344, 57, -17.42, 11.02, 0.19655, 2, 56, 37.95, 8.04, 0.59978, 57, -4.36, 8.87, 0.40021, 2, 56, 50.88, 8.04, 0.36895, 57, 8.39, 6.77, 0.63103, 2, 56, 65.92, 12.27, 0.17748, 57, 23.91, 8.47999, 0.82251, 2, 56, 81.72, 16.7, 0.05943, 57, 40.23, 10.28, 0.94056, 2, 56, 98.82, 25.04, 0.01209, 57, 58.46, 15.71, 0.9879, 2, 56, 114.44, 11.57, 0.00191, 57, 71.67, -0.11, 0.99808, 2, 56, 100.47, -4.61, 0.01816, 57, 55.25, -13.81, 0.98182, 2, 56, 78.79, -4.14, 0.07487, 57, 33.93999, -9.81, 0.92512, 2, 56, 65.83, -6.24, 0.2028, 57, 20.81, -9.76, 0.79719, 2, 56, 49.78, -8.83, 0.39971, 57, 4.55, -9.7, 0.60028, 2, 56, 37.93, -10.97, 0.62658, 57, -7.48, -9.88, 0.37341, 2, 56, 25.85, -13.15, 0.82034, 57, -19.75, -10.06, 0.17965, 2, 56, 0.25, -18.03, 0.95288, 57, -45.81, -10.7, 0.04711, 2, 56, -17.83, -2.43, 0.97709, 57, -61.11, 7.63, 0.0229, 2, 56, 1.57, 20.07, 0.94774, 57, -38.29, 26.67, 0.05225, 2, 56, 10.84, -1.23, 0.97709, 57, -32.62, 4.14, 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": { @@ -364,7 +480,1179 @@ } }, "animations": { - "empty": {}, + "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.9, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.7, "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.7, "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.7, "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 } + ] + } + } + }, "gungrab": { "slots": { "front_hand": { @@ -439,13 +1727,7 @@ }, "ik": { "front_arm_goal": [ - { - "time": 0, - "mix": 1, - "bendPositive": true, - "curve": [ 0.317, 0.13, 0.781, 0.56 ] - }, - { "time": 0.1333, "mix": 0, "bendPositive": true } + { "time": 0, "mix": 0 } ] } }, @@ -552,9 +1834,6 @@ "front_leg1": { "rotate": [ { "time": 0, "angle": 27.07 }, - { "time": 0.5333, "angle": -41.93 }, - { "time": 0.6333, "angle": -16.71 }, - { "time": 0.7333, "angle": 16.92 }, { "time": 1.0666, "angle": 31.39 } ], "translate": [ @@ -583,9 +1862,6 @@ "rear_leg1": { "rotate": [ { "time": 0, "angle": -64.85 }, - { "time": 0.1, "angle": -45.79 }, - { "time": 0.1666, "angle": -19.95 }, - { "time": 0.4, "angle": 35.36 }, { "time": 1.0666, "angle": -45.71 } ], "translate": [ @@ -639,9 +1915,6 @@ "front_leg2": { "rotate": [ { "time": 0, "angle": -347.28 }, - { "time": 0.5333, "angle": -346.78 }, - { "time": 0.6333, "angle": -398.52 }, - { "time": 0.7333, "angle": -393.21 }, { "time": 1.0666, "angle": -362.06 } ], "translate": [ @@ -652,11 +1925,6 @@ "rear_leg2": { "rotate": [ { "time": 0, "angle": 27.05 }, - { "time": 0.0666, "angle": -14.99 }, - { "time": 0.1, "angle": -28.87 }, - { "time": 0.1666, "angle": -49.87 }, - { "time": 0.4, "angle": -14.45 }, - { "time": 0.4666, "angle": 11.42 }, { "time": 1.0666, "angle": 9.92 } ], "translate": [ @@ -705,25 +1973,22 @@ }, "tail2": { "rotate": [ - { "time": 0, "angle": -6.57 }, - { "time": 0.0666, "angle": -1.96 }, - { "time": 0.3333, "angle": -18.09 }, - { "time": 0.6333, "angle": -1.96 }, - { "time": 0.9, "angle": -18.09 }, - { "time": 1.0666, "angle": -6.57 } + { "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 1.024, "y": 1 }, - { "time": 0.0666, "x": 1.072, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 0.6333, "x": 1.072, "y": 1 }, - { "time": 0.9, "x": 0.903, "y": 1 }, - { "time": 1.0666, "x": 1.024, "y": 1 } + { "time": 0, "x": 0.8, "y": 1 }, + { "time": 0.2333, "x": 0.9, "y": 1 }, + { "time": 0.5, "x": 0.8, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 0.8, "y": 1 } ] }, "torso2": { @@ -841,23 +2106,22 @@ }, "tail3": { "rotate": [ - { "time": 0, "angle": -14.83 }, - { "time": 0.0666, "angle": -24.31 }, - { "time": 0.3333, "angle": 8.86 }, - { "time": 0.6333, "angle": -24.31 }, - { "time": 0.9, "angle": 8.86 }, - { "time": 1.0666, "angle": -14.83 } + { "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "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": { @@ -969,36 +2233,43 @@ }, "tail4": { "rotate": [ - { "time": 0, "angle": 16.99 }, - { "time": 0.0666, "angle": 7.36 }, - { "time": 0.3333, "angle": 41.06 }, - { "time": 0.6333, "angle": 7.36 }, - { "time": 0.9, "angle": 41.06 }, - { "time": 1.0666, "angle": 16.99 } + { "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "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, "angle": 36.9 }, { "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 } + { "time": 1, "angle": 27.74 }, + { "time": 1.0666, "angle": 36.9 } ], "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, @@ -1098,23 +2369,39 @@ }, "tail5": { "rotate": [ - { "time": 0, "angle": -15.7 }, - { "time": 0.0666, "angle": -38.39 }, - { "time": 0.3333, "angle": 41.03 }, - { "time": 0.6333, "angle": -38.39 }, - { "time": 0.9, "angle": 41.03 }, - { "time": 1.0666, "angle": -15.7 } + { + "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "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": { @@ -1132,7 +2419,7 @@ }, "front_foot3": { "rotate": [ - { "time": 0, "angle": 27.59 }, + { "time": 0, "angle": -1.65 }, { "time": 0.0666, "angle": -5.29 }, { "time": 0.1333, "angle": -3.94 }, { "time": 0.2666, "angle": -3.81 }, @@ -1141,8 +2428,8 @@ { "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 } + { "time": 1, "angle": 10.93 }, + { "time": 1.0666, "angle": -1.65 } ], "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, @@ -1283,21 +2570,21 @@ ] } }, - "ffd": { + "deform": { "default": { "raptor_body": { "raptor_body": [ { "time": 0 }, { "time": 0.2666, - "offset": 368, - "vertices": [ -16.78, 15.47, -0.63, 22.82, 18.11, 13.89, 19.32, 12.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, 0, 0, 0, 0, 0, 0, -3.24, 0.81, 0, 0, -3.24, 0.81 ] + "offset": 314, + "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, -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": 368, - "vertices": [ -16.78, 15.47, -0.63, 22.82, 18.11, 13.89, 19.32, 12.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, 0, 0, 0, 0, 0, 0, -3.24, 0.81, 0, 0, -3.24, 0.81 ] + "offset": 314, + "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, -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 } ] @@ -1308,18 +2595,18 @@ { "time": 0.2666 }, { "time": 0.5333, - "offset": 216, - "vertices": [ -2.23, 21.95, 21.54, -4.75 ] + "offset": 138, + "vertices": [ -2.23608, 21.95403, 21.54915, -4.7554 ] }, { "time": 0.6, - "offset": 216, - "vertices": [ 7.17, 15.14, 15.26, -6.91 ] + "offset": 138, + "vertices": [ 7.17962, 15.14358, 15.26523, -6.91741 ] }, { "time": 0.7333, - "offset": 176, - "vertices": [ -0.82, 0.73, -0.01, -1.1, -0.27, 1.06, -1.28, 0.39, 0, 0, 0, 0, 0, 0, 1.48, -2.59, 0.98, 2.82, 2.73, -10.49, 6.12, 8.95, -3.72, -10.18, -2.6, -2.28, 3.43, -0.47, -3.44, -0.39, -2.28, -4.76, 5.08, 1.4, -4.58, -2.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.37, -1.75, 2.22, 0.1, -1.86, -0.75, -2.86, -0.77, 2.45, -1.65 ] + "offset": 110, + "vertices": [ -0.82485, 0.73406, -0.01284, -1.10443, 0, 0, 0, 0, 1.4866, -2.59426, 0.98071, 2.82342, 2.7366, -10.49935, 6.12506, 8.95282, -2.60873, -2.28384, 3.43417, -0.47045, -2.28305, -4.76037, 5.08892, 1.40078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 ] }, { "time": 0.8, "curve": "stepped" }, { "time": 0.9666, "curve": "stepped" }, diff --git a/spine-sfml/data/raptor.png b/spine-sfml/data/raptor.png index 861dbce1a..625072a67 100644 Binary files a/spine-sfml/data/raptor.png and b/spine-sfml/data/raptor.png differ diff --git a/spine-sfml/data/spineboy-shear.json b/spine-sfml/data/spineboy-shear.json deleted file mode 100644 index dd2607b4f..000000000 --- a/spine-sfml/data/spineboy-shear.json +++ /dev/null @@ -1,183 +0,0 @@ -{ -"skeleton": { "hash": "8JOt0KF63FuqjG/j+ncweKjt3Vc", "spine": "9.0.01", "width": 505.42, "height": 723.02, "images": "./images/" }, -"bones": [ - { "name": "root" }, - { "name": "hip", "parent": "root", "length": 338.72, "y": 247.47 }, - { "name": "shoot target", "parent": "root", "rotation": 1.22, "x": 578.73, "y": 350.08, "color": "ff3f00ff" }, - { "name": "aimer", "parent": "hip", "length": 350.93, "rotation": 1.57, "x": -5.73, "y": 98.76 }, - { "name": "aiming gun target", "parent": "aimer", "rotation": 0.33, "x": 317.91, "y": -78.74, "color": "ff3f00ff" }, - { "name": "free gun bone", "parent": "root", "rotation": -37.23, "x": 41.13, "y": 276.2 }, - { "name": "torso", "parent": "hip", "length": 127.55, "rotation": 103.82, "x": -1.61, "y": 4.9, "color": "e0da19ff" }, - { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "rotation": 168.37, "x": 103.75, "y": 19.32, "color": "00ff04ff" }, - { - "name": "front_bracer", - "parent": "front_upper_arm", - "length": 40.57, - "rotation": 18.29, - "x": 68.8, - "y": -0.68, - "color": "00ff04ff" - }, - { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "rotation": 29.28, "x": 40.56, "y": 0.19, "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.76, - "rotation": -2.21, - "x": 78.69, - "y": 1.6, - "inheritScale": false, - "color": "00ff04ff" - }, - { "name": "front_foot", "parent": "front_shin", "length": 91.34, "rotation": 77.9, "x": 128.75, "y": -0.33, "color": "00ff04ff" }, - { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -169.55, "x": 92.35, "y": -19.22, "color": "ff000dff" }, - { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "rotation": 23.15, "x": 51.35, "color": "ff000dff" }, - { "name": "gun", "parent": "rear_bracer", "length": 43.1, "rotation": 5.34, "x": 34.42, "y": -0.45, "color": "ff000dff" }, - { "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.03, "y": 52.12, "color": "ff000dff" }, - { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" }, - { "name": "head", "parent": "neck", "length": 263.57, "rotation": 23.18, "x": 27.66, "y": -0.25, "color": "e0da19ff" }, - { "name": "rear_thigh", "parent": "hip", "length": 85.71, "rotation": -72.54, "x": 8.91, "y": -5.62, "color": "ff000dff" }, - { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.83, "x": 86.1, "y": -1.32, "color": "ff000dff" }, - { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "rotation": 69.3, "x": 121.45, "y": -0.75, "color": "ff000dff" } -], -"ik": [ - { - "name": "aiming constraint", - "bones": [ "aimer" ], - "target": "shoot target", - "mix": 0 - }, - { - "name": "aiming gun constraint", - "bones": [ "rear_upper_arm", "rear_bracer" ], - "target": "aiming gun target", - "mix": 0 - } -], -"transform": [ - { "name": "gun flying", "bone": "gun", "target": "free gun bone", "rotateMix": 0, "translateMix": 0, "scaleMix": 0, "shearMix": 0 } -], -"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": "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" } -], -"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.67, "rotation": 79.59, "width": 58, "height": 80 } - }, - "front_fist": { - "front_fist_closed": { "x": 35.71, "y": -4.54, "rotation": 50.3, "width": 75, "height": 82 }, - "front_fist_open": { "x": 40.11, "y": -4.04, "rotation": 50.3, "width": 86, "height": 87 } - }, - "front_foot": { - "front_foot": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 126, "height": 69 }, - "front_foot_bend1": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 128, "height": 70 }, - "front_foot_bend2": { "x": 16.07, "y": 13.83, "rotation": 18.68, "width": 108, "height": 93 } - }, - "front_shin": { - "front_shin": { "x": 55.11, "y": -3.54, "rotation": 96.59, "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.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 } - }, - "goggles": { - "goggles": { "x": 97.07, "y": 6.54, "rotation": -70.63, "width": 261, "height": 166 } - }, - "gun": { - "gun": { "x": 77.29, "y": 16.39, "rotation": 60.82, "width": 210, "height": 203 } - }, - "head": { - "head": { "x": 128.95, "y": 0.29, "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.61, 285.16, 57.18, 120.77, 164.95, -5.06, 76.94 ] - } - }, - "mouth": { - "mouth_grind": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, - "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, - "mouth_smile": { "x": 23.68, "y": -32.23, "rotation": -70.63, "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.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.57, "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.1, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 } - }, - "rear_upper_arm": { - "rear_upper_arm": { "x": 21.12, "y": 4.08, "rotation": 89.32, "width": 47, "height": 87 } - }, - "torso": { - "torso": { "x": 63.61, "y": 7.12, "rotation": -94.53, "width": 98, "height": 180 } - } - } -}, -"events": { - "footstep": {}, - "headAttach": { "int": 3, "float": 4 }, - "headBehind": { "int": 5, "float": 6, "string": "setup" }, - "headPop": { "int": 1, "float": 2 } -}, -"animations": { - "shear": { - "bones": { - "head": { - "shear": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.5, "x": 45, "y": 0 }, - { "time": 1, "x": 0.59, "y": 0 } - ] - } - }, - "transform": { - "gun flying": [ - { "time": 0 } - ] - } - } -} -} \ No newline at end of file diff --git a/spine-sfml/data/spineboy.atlas b/spine-sfml/data/spineboy.atlas index 19c0934b1..e9500cc4a 100644 --- a/spine-sfml/data/spineboy.atlas +++ b/spine-sfml/data/spineboy.atlas @@ -1,194 +1,195 @@ spineboy.png +size: 1024,1024 format: RGBA8888 filter: Linear,Linear repeat: none eye_indifferent - rotate: true - xy: 389, 5 - size: 56, 53 - orig: 56, 53 + rotate: false + xy: 550, 694 + size: 93, 89 + orig: 93, 89 offset: 0, 0 index: -1 eye_surprised rotate: false - xy: 580, 34 - size: 56, 53 - orig: 56, 53 + xy: 834, 856 + size: 93, 89 + orig: 93, 89 offset: 0, 0 index: -1 front_bracer rotate: false - xy: 732, 85 - size: 35, 48 - orig: 35, 48 + xy: 678, 774 + size: 58, 80 + orig: 58, 80 offset: 0, 0 index: -1 front_fist_closed - rotate: false - xy: 556, 91 - size: 45, 49 - orig: 45, 49 + rotate: true + xy: 466, 593 + size: 75, 82 + orig: 75, 82 offset: 0, 0 index: -1 front_fist_open rotate: false - xy: 668, 32 - size: 52, 52 - orig: 52, 52 + xy: 550, 605 + size: 86, 87 + orig: 86, 87 offset: 0, 0 index: -1 front_foot rotate: false - xy: 924, 201 - size: 76, 41 - orig: 76, 41 + xy: 550, 785 + size: 126, 69 + orig: 126, 69 offset: 0, 0 index: -1 front_foot_bend1 - rotate: false - xy: 845, 200 - size: 77, 42 - orig: 77, 42 + rotate: true + xy: 375, 492 + size: 128, 70 + orig: 128, 70 offset: 0, 0 index: -1 front_foot_bend2 - rotate: false - xy: 778, 186 - size: 65, 56 - orig: 65, 56 + rotate: true + xy: 275, 330 + size: 108, 93 + orig: 108, 93 offset: 0, 0 index: -1 front_shin - rotate: true - xy: 444, 91 - size: 49, 110 - orig: 49, 110 + rotate: false + xy: 466, 670 + size: 82, 184 + orig: 82, 184 offset: 0, 0 index: -1 front_thigh - rotate: true - xy: 603, 89 - size: 29, 67 - orig: 29, 67 + rotate: false + xy: 214, 208 + size: 48, 112 + orig: 48, 112 offset: 0, 0 index: -1 front_upper_arm - rotate: true - xy: 672, 86 - size: 32, 58 - orig: 32, 58 + rotate: false + xy: 214, 109 + size: 54, 97 + orig: 54, 97 offset: 0, 0 index: -1 goggles rotate: false - xy: 444, 142 - size: 157, 100 - orig: 157, 100 + xy: 466, 856 + size: 261, 166 + orig: 261, 166 offset: 0, 0 index: -1 gun rotate: false - xy: 603, 120 - size: 126, 122 - orig: 126, 122 + xy: 2, 117 + size: 210, 203 + orig: 210, 203 offset: 0, 0 index: -1 head rotate: false - xy: 279, 63 - size: 163, 179 - orig: 163, 179 + xy: 2, 322 + size: 271, 298 + orig: 271, 298 offset: 0, 0 index: -1 mouth_grind rotate: false - xy: 845, 163 - size: 56, 35 - orig: 56, 35 + xy: 929, 896 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 mouth_oooo rotate: false - xy: 842, 126 - size: 56, 35 - orig: 56, 35 + xy: 929, 835 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 mouth_smile rotate: false - xy: 769, 97 - size: 56, 35 - orig: 56, 35 + xy: 447, 532 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 muzzle rotate: false - xy: 2, 2 - size: 275, 240 - orig: 277, 240 + xy: 2, 622 + size: 462, 400 + orig: 462, 400 offset: 0, 0 index: -1 neck rotate: false - xy: 903, 173 - size: 22, 25 - orig: 22, 25 + xy: 796, 819 + size: 36, 41 + orig: 36, 41 offset: 0, 0 index: -1 rear_bracer rotate: false - xy: 722, 40 - size: 34, 43 - orig: 34, 43 + xy: 738, 788 + size: 56, 72 + orig: 56, 72 offset: 0, 0 index: -1 rear_foot - rotate: false - xy: 444, 11 - size: 68, 36 - orig: 68, 36 + rotate: true + xy: 2, 2 + size: 113, 60 + orig: 113, 60 offset: 0, 0 index: -1 rear_foot_bend1 rotate: false - xy: 444, 49 - size: 70, 40 - orig: 70, 40 + xy: 64, 49 + size: 117, 66 + orig: 117, 66 offset: 0, 0 index: -1 rear_foot_bend2 rotate: false - xy: 778, 134 - size: 62, 50 - orig: 62, 50 + xy: 729, 862 + size: 103, 83 + orig: 103, 83 offset: 0, 0 index: -1 rear_shin - rotate: false - xy: 731, 135 - size: 45, 107 - orig: 45, 107 + rotate: true + xy: 729, 947 + size: 75, 178 + orig: 75, 178 offset: 0, 0 index: -1 rear_thigh rotate: true - xy: 516, 50 - size: 39, 62 - orig: 39, 62 + xy: 909, 957 + size: 65, 104 + orig: 65, 104 offset: 0, 0 index: -1 rear_upper_arm - rotate: false - xy: 638, 35 - size: 28, 52 - orig: 28, 52 + rotate: true + xy: 447, 483 + size: 47, 87 + orig: 47, 87 offset: 0, 0 index: -1 torso - rotate: true - xy: 279, 2 - size: 59, 108 - orig: 59, 108 + rotate: false + xy: 275, 440 + size: 98, 180 + orig: 98, 180 offset: 0, 0 index: -1 diff --git a/spine-sfml/data/spineboy.json b/spine-sfml/data/spineboy.json index 2e422677a..88bafe6a7 100644 --- a/spine-sfml/data/spineboy.json +++ b/spine-sfml/data/spineboy.json @@ -1,39 +1,31 @@ { +"skeleton": { "hash": "rPoYyBLFG6F0CGZ5wsUEBKDJU9U", "spine": "3.3.07", "width": 470.71, "height": 731.57, "images": "./images/" }, "bones": [ { "name": "hip", "y": 247.47 }, - { "name": "front_thigh", "parent": "hip", "length": 74.8, "x": -17.45, "y": -11.64, "rotation": -95.51, "color": "00ff04ff" }, - { "name": "rear_thigh", "parent": "hip", "length": 85.71, "x": 8.91, "y": -5.62, "rotation": -72.54, "color": "ff000dff" }, - { "name": "torso", "parent": "hip", "length": 127.55, "x": -1.61, "y": 4.9, "rotation": 103.82, "color": "e0da19ff" }, - { - "name": "front_shin", - "parent": "front_thigh", - "length": 128.76, - "x": 78.69, - "y": 1.6, - "rotation": -2.21, - "inheritScale": false, - "color": "00ff04ff" - }, - { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "x": 103.75, "y": 19.32, "rotation": 168.37, "color": "00ff04ff" }, - { "name": "neck", "parent": "torso", "length": 25.45, "x": 127.49, "y": -0.3, "rotation": -31.53, "color": "e0da19ff" }, - { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "x": 86.1, "y": -1.32, "rotation": -19.83, "color": "ff000dff" }, - { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "x": 92.35, "y": -19.22, "rotation": -169.55, "color": "ff000dff" }, + { "name": "torso", "parent": "hip", "length": 127.55, "rotation": 103.82, "x": -1.61, "y": 4.9, "color": "e0da19ff" }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "rotation": 168.37, "x": 103.75, "y": 19.32, "color": "00ff04ff" }, { "name": "front_bracer", "parent": "front_upper_arm", "length": 40.57, + "rotation": 18.29, "x": 68.8, "y": -0.68, - "rotation": 18.29, "color": "00ff04ff" }, - { "name": "front_foot", "parent": "front_shin", "length": 91.34, "x": 128.75, "y": -0.33, "rotation": 77.9, "color": "00ff04ff" }, - { "name": "head", "parent": "neck", "length": 263.57, "x": 27.66, "y": -0.25, "rotation": 23.18, "color": "e0da19ff" }, - { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "x": 51.35, "rotation": 23.15, "color": "ff000dff" }, - { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "x": 121.45, "y": -0.75, "rotation": 69.3, "color": "ff000dff" }, - { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "x": 40.56, "y": 0.19, "rotation": 12.43, "color": "00ff04ff" }, - { "name": "gun", "parent": "rear_bracer", "length": 43.1, "x": 34.42, "y": -0.45, "rotation": 5.34, "color": "ff000dff" }, - { "name": "gunTip", "parent": "gun", "x": 201.04, "y": 52.13, "rotation": 6.83, "color": "ff000dff" } + { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "rotation": 12.43, "x": 40.56, "y": 0.19, "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.76, "rotation": -2.21, "x": 78.69, "y": 1.6, "color": "00ff04ff" }, + { "name": "front_foot", "parent": "front_shin", "length": 91.34, "rotation": 77.9, "x": 128.75, "y": -0.33, "color": "00ff04ff" }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -169.55, "x": 92.35, "y": -19.22, "color": "ff000dff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "rotation": 23.15, "x": 51.35, "color": "ff000dff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "rotation": 5.34, "x": 34.42, "y": -0.45, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.04, "y": 52.13, "color": "ff000dff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" }, + { "name": "head", "parent": "neck", "length": 263.57, "rotation": 23.18, "x": 27.66, "y": -0.25, "color": "e0da19ff" }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "rotation": -72.54, "x": 8.91, "y": -5.62, "color": "ff000dff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.83, "x": 86.1, "y": -1.32, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "rotation": 69.3, "x": 121.45, "y": -0.75, "color": "ff000dff" } ], "slots": [ { "name": "rear_upper_arm", "bone": "rear_upper_arm", "attachment": "rear_upper_arm" }, @@ -54,8 +46,8 @@ { "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", "additive": true }, - { "name": "head-bb", "bone": "head", "attachment": "head" } + { "name": "muzzle", "bone": "gunTip", "blend": "additive" }, + { "name": "head-bb", "bone": "head" } ], "skins": { "default": { @@ -96,7 +88,8 @@ "head-bb": { "head": { "type": "boundingbox", - "vertices": [ -19.143097, -70.30209, 40.80313, -118.074234, 257.77155, -115.61827, 285.16193, 57.18005, 120.77191, 164.95125, -5.067627, 76.94907 ] + "vertexCount": 6, + "vertices": [ -19.14, -70.3, 40.8, -118.07, 257.77, -115.61, 285.16, 57.18, 120.77, 164.95, -5.06, 76.94 ] } }, "mouth": { @@ -1832,10 +1825,6 @@ ] }, "muzzle": { - "attachment": [ - { "time": 0.1333, "name": "muzzle" }, - { "time": 0.2666, "name": null } - ], "color": [ { "time": 0.1333, @@ -1848,6 +1837,10 @@ "curve": [ 0.821, 0, 0.909, 0.89 ] }, { "time": 0.2666, "color": "ffffff00" } + ], + "attachment": [ + { "time": 0.1333, "name": "muzzle" }, + { "time": 0.2666, "name": null } ] } }, @@ -2015,7 +2008,7 @@ ] } }, - "draworder": [ + "drawOrder": [ { "time": 0.6666, "offsets": [ diff --git a/spine-sfml/data/spineboy.png b/spine-sfml/data/spineboy.png index dce2fe3e2..c336b66f6 100644 Binary files a/spine-sfml/data/spineboy.png and b/spine-sfml/data/spineboy.png differ diff --git a/spine-sfml/data/tank.atlas b/spine-sfml/data/tank.atlas new file mode 100644 index 000000000..b925bb065 --- /dev/null +++ b/spine-sfml/data/tank.atlas @@ -0,0 +1,125 @@ + +tank.png +size: 2048,2048 +format: RGBA8888 +filter: Linear,Linear +repeat: none +images/antenna + rotate: true + xy: 1295, 1730 + size: 22, 303 + orig: 22, 303 + offset: 0, 0 + index: -1 +images/cannon + rotate: true + xy: 504, 769 + size: 931, 58 + orig: 931, 58 + offset: 0, 0 + index: -1 +images/cannonConnector + rotate: false + xy: 564, 1239 + size: 112, 135 + orig: 112, 135 + offset: 0, 0 + index: -1 +images/guntower + rotate: false + xy: 1295, 1754 + size: 730, 289 + orig: 730, 289 + offset: 0, 0 + index: -1 +images/machinegun + rotate: true + xy: 504, 436 + size: 331, 57 + orig: 331, 57 + offset: 0, 0 + index: -1 +images/machinegun-mount + rotate: false + xy: 2, 2 + size: 72, 96 + orig: 72, 96 + offset: 0, 0 + index: -1 +images/rock + rotate: false + xy: 226, 358 + size: 252, 55 + orig: 252, 55 + offset: 0, 0 + index: -1 +images/tankBottom + rotate: true + xy: 226, 415 + size: 1285, 276 + orig: 1285, 276 + offset: 0, 0 + index: -1 +images/tankBottom-shadow + rotate: false + xy: 2, 1702 + size: 1291, 341 + orig: 1291, 341 + offset: 0, 0 + index: -1 +images/tankTop + rotate: true + xy: 2, 293 + size: 1407, 222 + orig: 1407, 222 + offset: 0, 0 + index: -1 +images/tread + rotate: false + xy: 226, 326 + size: 96, 30 + orig: 96, 30 + offset: 0, 0 + index: -1 +images/tread-inside + rotate: false + xy: 195, 263 + size: 25, 28 + orig: 25, 28 + offset: 0, 0 + index: -1 +images/wheel-big + rotate: false + xy: 2, 100 + size: 191, 191 + orig: 191, 191 + offset: 0, 0 + index: -1 +images/wheel-big-overlay + rotate: false + xy: 564, 1514 + size: 186, 186 + orig: 186, 186 + offset: 0, 0 + index: -1 +images/wheel-mid + rotate: false + xy: 564, 1376 + size: 136, 136 + orig: 136, 136 + offset: 0, 0 + index: -1 +images/wheel-mid-overlay + rotate: false + xy: 752, 1564 + size: 136, 136 + orig: 136, 136 + offset: 0, 0 + index: -1 +images/wheel-small + rotate: false + xy: 890, 1629 + size: 71, 71 + orig: 71, 71 + offset: 0, 0 + index: -1 diff --git a/spine-sfml/data/tank.json b/spine-sfml/data/tank.json new file mode 100644 index 000000000..c26ccbe47 --- /dev/null +++ b/spine-sfml/data/tank.json @@ -0,0 +1,1899 @@ +{ +"skeleton": { "hash": "kgtyty1lpfv5JU2lygtFi2u3oQQ", "spine": "3.3.07", "width": 1914.53, "height": 964.05, "images": "" }, +"bones": [ + { "name": "root" }, + { "name": "tankRoot", "parent": "root", "y": 200 }, + { "name": "tankTreads", "parent": "tankRoot" }, + { "name": "tankBody", "parent": "tankTreads", "y": 10 }, + { "name": "guntower", "parent": "tankBody", "x": -21.72, "y": 245.47 }, + { "name": "antennaRoot", "parent": "guntower", "x": 164.6, "y": 202.52 }, + { "name": "antenna1", "parent": "antennaRoot", "length": 40, "rotation": 90, "y": 39.99, "color": "ffee00ff" }, + { "name": "antenna2", "parent": "antenna1", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna3", "parent": "antenna2", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna4", "parent": "antenna3", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna5", "parent": "antenna4", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna6", "parent": "antenna5", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "cannonConnector", "parent": "guntower", "x": -235.04, "y": 96.07 }, + { "name": "cannonTarget", "parent": "tankRoot", "x": -1486.66, "y": 351.82, "color": "ff3f00ff" }, + { "name": "cannon", "parent": "cannonConnector", "length": 946.68, "rotation": 180, "color": "ff4000ff" }, + { "name": "cannonTip", "parent": "cannon", "x": 946.68, "color": "ff4000ff" }, + { "name": "machineGunTarget", "parent": "tankRoot", "x": -1474, "y": 559.42, "color": "ff3f00ff" }, + { + "name": "machinegun-mount", + "parent": "guntower", + "length": 90.97, + "rotation": 90, + "x": -123.72, + "y": 218.32, + "color": "15ff00ff" + }, + { + "name": "machinegun", + "parent": "machinegun-mount", + "length": 208.94, + "rotation": 90, + "x": 91.52, + "y": -1.03, + "color": "15ff00ff" + }, + { "name": "machinegun-tip", "parent": "machinegun", "x": 210.42, "y": -12.2 }, + { "name": "rock", "parent": "root", "x": -656.45 }, + { + "name": "tread", + "parent": "tankRoot", + "length": 82, + "rotation": 180, + "x": -22.89, + "y": 213.85, + "scaleX": 0.993, + "color": "e64344ff" + }, + { "name": "tread2", "parent": "tread", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread3", "parent": "tread2", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread4", "parent": "tread3", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread5", "parent": "tread4", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread6", "parent": "tread5", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread7", "parent": "tread6", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread8", "parent": "tread7", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread9", "parent": "tread8", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread10", "parent": "tread9", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread11", "parent": "tread10", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread12", "parent": "tread11", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread13", "parent": "tread12", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread14", "parent": "tread13", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread15", "parent": "tread14", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread16", "parent": "tread15", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread17", "parent": "tread16", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread18", "parent": "tread17", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread19", "parent": "tread18", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread20", "parent": "tread19", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread21", "parent": "tread20", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread22", "parent": "tread21", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread23", "parent": "tread22", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread24", "parent": "tread23", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread25", "parent": "tread24", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread26", "parent": "tread25", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread27", "parent": "tread26", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread28", "parent": "tread27", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread29", "parent": "tread28", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread30", "parent": "tread29", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread31", "parent": "tread30", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread32", "parent": "tread31", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread33", "parent": "tread32", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread34", "parent": "tread33", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread35", "parent": "tread34", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread36", "parent": "tread35", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "wheel-midCenter", "parent": "tankRoot", "y": -114.56 }, + { "name": "treadCollider1", "parent": "wheel-midCenter", "x": -329.57, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider2", "parent": "wheel-midCenter", "x": -165.95, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider3", "parent": "wheel-midCenter", "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider4", "parent": "wheel-midCenter", "x": 163.56, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider5", "parent": "wheel-midCenter", "x": 329.12, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadGravity1", "parent": "tankRoot", "rotation": 180, "x": -175.35, "y": 109.99, "color": "ff00fbff" }, + { "name": "treadGravity2", "parent": "tankRoot", "rotation": 180, "x": 177.88, "y": 105.45, "color": "ff00fbff" }, + { "name": "wheel-bigRoot1", "parent": "tankTreads", "x": -549.59, "y": 14.39, "color": "abe323ff" }, + { "name": "wheel-big1", "parent": "wheel-bigRoot1", "x": -0.02, "color": "abe323ff" }, + { "name": "wheel-bigRoot2", "parent": "tankTreads", "x": 547.33, "y": 14.39 }, + { "name": "wheel-big2", "parent": "wheel-bigRoot2" }, + { "name": "wheel-midRoot1", "parent": "wheel-midCenter", "x": -410.57, "color": "abe323ff" }, + { "name": "wheel-mid1", "parent": "wheel-midRoot1", "color": "abe323ff" }, + { "name": "wheel-midRoot2", "parent": "wheel-midCenter", "x": -246.95 }, + { "name": "wheel-mid2", "parent": "wheel-midRoot2" }, + { "name": "wheel-midRoot3", "parent": "wheel-midCenter", "x": -82.72 }, + { "name": "wheel-mid3", "parent": "wheel-midRoot3" }, + { "name": "wheel-midRoot4", "parent": "wheel-midCenter", "x": 80.89 }, + { "name": "wheel-mid4", "parent": "wheel-midRoot4" }, + { "name": "wheel-midRoot5", "parent": "wheel-midCenter", "x": 244.51 }, + { "name": "wheel-mid5", "parent": "wheel-midRoot5" }, + { "name": "wheel-midRoot6", "parent": "wheel-midCenter", "x": 408.73 }, + { "name": "wheel-mid6", "parent": "wheel-midRoot6" }, + { "name": "wheel-smallRoot1", "parent": "tankTreads", "x": -337.38, "y": 109.43 }, + { "name": "wheel-small1", "parent": "wheel-smallRoot1", "color": "abe323ff" }, + { "name": "wheel-smallRoot2", "parent": "tankTreads", "x": 0.08, "y": 109.43 }, + { "name": "wheel-small2", "parent": "wheel-smallRoot2" }, + { "name": "wheel-smallRoot3", "parent": "tankTreads", "x": 334.68, "y": 109.43 }, + { "name": "wheel-small3", "parent": "wheel-smallRoot3" } +], +"slots": [ + { "name": "tankBody-shadow", "bone": "tankBody", "color": "ffffffb9", "attachment": "images/tankBottom-shadow" }, + { "name": "bottom", "bone": "tankBody", "attachment": "images/tankBottom" }, + { "name": "tread-inside1", "bone": "tread", "attachment": "images/tread-inside" }, + { "name": "tread-inside53", "bone": "tread27", "attachment": "images/tread-inside" }, + { "name": "tread-inside27", "bone": "tread14", "attachment": "images/tread-inside" }, + { "name": "tread-inside3", "bone": "tread2", "attachment": "images/tread-inside" }, + { "name": "tread-inside55", "bone": "tread28", "attachment": "images/tread-inside" }, + { "name": "tread-inside29", "bone": "tread15", "attachment": "images/tread-inside" }, + { "name": "tread-inside5", "bone": "tread3", "attachment": "images/tread-inside" }, + { "name": "tread-inside57", "bone": "tread29", "attachment": "images/tread-inside" }, + { "name": "tread-inside31", "bone": "tread16", "attachment": "images/tread-inside" }, + { "name": "tread-inside7", "bone": "tread4", "attachment": "images/tread-inside" }, + { "name": "tread-inside59", "bone": "tread30", "attachment": "images/tread-inside" }, + { "name": "tread-inside33", "bone": "tread17", "attachment": "images/tread-inside" }, + { "name": "tread-inside9", "bone": "tread5", "attachment": "images/tread-inside" }, + { "name": "tread-inside61", "bone": "tread31", "attachment": "images/tread-inside" }, + { "name": "tread-inside35", "bone": "tread18", "attachment": "images/tread-inside" }, + { "name": "tread-inside11", "bone": "tread6", "attachment": "images/tread-inside" }, + { "name": "tread-inside63", "bone": "tread32", "attachment": "images/tread-inside" }, + { "name": "tread-inside37", "bone": "tread19", "attachment": "images/tread-inside" }, + { "name": "tread-inside13", "bone": "tread7", "attachment": "images/tread-inside" }, + { "name": "tread-inside65", "bone": "tread33", "attachment": "images/tread-inside" }, + { "name": "tread-inside39", "bone": "tread20", "attachment": "images/tread-inside" }, + { "name": "tread-inside15", "bone": "tread8", "attachment": "images/tread-inside" }, + { "name": "tread-inside67", "bone": "tread34", "attachment": "images/tread-inside" }, + { "name": "tread-inside69", "bone": "tread35", "attachment": "images/tread-inside" }, + { "name": "tread-inside71", "bone": "tread36", "attachment": "images/tread-inside" }, + { "name": "tread-inside41", "bone": "tread21", "attachment": "images/tread-inside" }, + { "name": "tread-inside17", "bone": "tread9", "attachment": "images/tread-inside" }, + { "name": "tread-inside43", "bone": "tread22", "attachment": "images/tread-inside" }, + { "name": "tread-inside19", "bone": "tread10", "attachment": "images/tread-inside" }, + { "name": "tread-inside45", "bone": "tread23", "attachment": "images/tread-inside" }, + { "name": "tread-inside21", "bone": "tread11", "attachment": "images/tread-inside" }, + { "name": "tread-inside47", "bone": "tread24", "attachment": "images/tread-inside" }, + { "name": "tread-inside23", "bone": "tread12", "attachment": "images/tread-inside" }, + { "name": "tread-inside49", "bone": "tread25", "attachment": "images/tread-inside" }, + { "name": "tread-inside25", "bone": "tread13", "attachment": "images/tread-inside" }, + { "name": "tread-inside51", "bone": "tread26", "attachment": "images/tread-inside" }, + { "name": "tread-inside2", "bone": "tread", "attachment": "images/tread-inside" }, + { "name": "tread-inside54", "bone": "tread27", "attachment": "images/tread-inside" }, + { "name": "tread-inside28", "bone": "tread14", "attachment": "images/tread-inside" }, + { "name": "tread-inside4", "bone": "tread2", "attachment": "images/tread-inside" }, + { "name": "tread-inside56", "bone": "tread28", "attachment": "images/tread-inside" }, + { "name": "tread-inside30", "bone": "tread15", "attachment": "images/tread-inside" }, + { "name": "tread-inside6", "bone": "tread3", "attachment": "images/tread-inside" }, + { "name": "tread-inside58", "bone": "tread29", "attachment": "images/tread-inside" }, + { "name": "tread-inside32", "bone": "tread16", "attachment": "images/tread-inside" }, + { "name": "tread-inside8", "bone": "tread4", "attachment": "images/tread-inside" }, + { "name": "tread-inside60", "bone": "tread30", "attachment": "images/tread-inside" }, + { "name": "tread-inside34", "bone": "tread17", "attachment": "images/tread-inside" }, + { "name": "tread-inside10", "bone": "tread5", "attachment": "images/tread-inside" }, + { "name": "tread-inside62", "bone": "tread31", "attachment": "images/tread-inside" }, + { "name": "tread-inside36", "bone": "tread18", "attachment": "images/tread-inside" }, + { "name": "tread-inside12", "bone": "tread6", "attachment": "images/tread-inside" }, + { "name": "tread-inside64", "bone": "tread32", "attachment": "images/tread-inside" }, + { "name": "tread-inside38", "bone": "tread19", "attachment": "images/tread-inside" }, + { "name": "tread-inside14", "bone": "tread7", "attachment": "images/tread-inside" }, + { "name": "tread-inside66", "bone": "tread33", "attachment": "images/tread-inside" }, + { "name": "tread-inside40", "bone": "tread20", "attachment": "images/tread-inside" }, + { "name": "tread-inside16", "bone": "tread8", "attachment": "images/tread-inside" }, + { "name": "tread-inside68", "bone": "tread34", "attachment": "images/tread-inside" }, + { "name": "tread-inside70", "bone": "tread35", "attachment": "images/tread-inside" }, + { "name": "tread-inside72", "bone": "tread36", "attachment": "images/tread-inside" }, + { "name": "tread-inside42", "bone": "tread21", "attachment": "images/tread-inside" }, + { "name": "tread-inside18", "bone": "tread9", "attachment": "images/tread-inside" }, + { "name": "tread-inside44", "bone": "tread22", "attachment": "images/tread-inside" }, + { "name": "tread-inside20", "bone": "tread10", "attachment": "images/tread-inside" }, + { "name": "tread-inside46", "bone": "tread23", "attachment": "images/tread-inside" }, + { "name": "tread-inside22", "bone": "tread11", "attachment": "images/tread-inside" }, + { "name": "tread-inside48", "bone": "tread24", "attachment": "images/tread-inside" }, + { "name": "tread-inside24", "bone": "tread12", "attachment": "images/tread-inside" }, + { "name": "tread-inside50", "bone": "tread25", "attachment": "images/tread-inside" }, + { "name": "tread-inside26", "bone": "tread13", "attachment": "images/tread-inside" }, + { "name": "tread-inside52", "bone": "tread26", "attachment": "images/tread-inside" }, + { "name": "wheel-big", "bone": "wheel-big1", "color": "dbdbdbff", "attachment": "images/wheel-big" }, + { "name": "wheel-big2", "bone": "wheel-big2", "color": "dbdbdbff", "attachment": "images/wheel-big" }, + { "name": "wheel-mid", "bone": "wheel-mid1", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid2", "bone": "wheel-mid2", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid3", "bone": "wheel-mid3", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid4", "bone": "wheel-mid4", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid5", "bone": "wheel-mid5", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid6", "bone": "wheel-mid6", "attachment": "images/wheel-mid" }, + { "name": "wheel-small", "bone": "wheel-small1", "attachment": "images/wheel-small" }, + { "name": "wheel-small2", "bone": "wheel-small2", "attachment": "images/wheel-small" }, + { "name": "wheel-small3", "bone": "wheel-small3", "attachment": "images/wheel-small" }, + { + "name": "wheel-mid-overlay", + "bone": "wheel-midRoot1", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay2", + "bone": "wheel-midRoot2", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay3", + "bone": "wheel-midRoot3", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay4", + "bone": "wheel-midRoot4", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay5", + "bone": "wheel-midRoot5", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay6", + "bone": "wheel-midRoot6", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-big-overlay1", + "bone": "wheel-bigRoot1", + "color": "ffffffe9", + "attachment": "images/wheel-big-overlay", + "blend": "multiply" + }, + { + "name": "wheel-big-overlay2", + "bone": "wheel-bigRoot2", + "color": "ffffffe9", + "attachment": "images/wheel-big-overlay", + "blend": "multiply" + }, + { "name": "treads", "bone": "tankRoot", "attachment": "treads" }, + { "name": "tread", "bone": "tread", "color": "c0974fff", "attachment": "images/tread" }, + { "name": "tread27", "bone": "tread27", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread14", "bone": "tread14", "attachment": "images/tread" }, + { "name": "tread2", "bone": "tread2", "attachment": "images/tread" }, + { "name": "tread28", "bone": "tread28", "attachment": "images/tread" }, + { "name": "tread15", "bone": "tread15", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread3", "bone": "tread3", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread29", "bone": "tread29", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread16", "bone": "tread16", "attachment": "images/tread" }, + { "name": "tread4", "bone": "tread4", "attachment": "images/tread" }, + { "name": "tread30", "bone": "tread30", "attachment": "images/tread" }, + { "name": "tread17", "bone": "tread17", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread5", "bone": "tread5", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread31", "bone": "tread31", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread18", "bone": "tread18", "attachment": "images/tread" }, + { "name": "tread6", "bone": "tread6", "attachment": "images/tread" }, + { "name": "tread32", "bone": "tread32", "attachment": "images/tread" }, + { "name": "tread19", "bone": "tread19", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread7", "bone": "tread7", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread33", "bone": "tread33", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread20", "bone": "tread20", "attachment": "images/tread" }, + { "name": "tread8", "bone": "tread8", "attachment": "images/tread" }, + { "name": "tread34", "bone": "tread34", "attachment": "images/tread" }, + { "name": "tread35", "bone": "tread35", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread36", "bone": "tread36", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread21", "bone": "tread21", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread9", "bone": "tread9", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread22", "bone": "tread22", "attachment": "images/tread" }, + { "name": "tread10", "bone": "tread10", "attachment": "images/tread" }, + { "name": "tread23", "bone": "tread23", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread11", "bone": "tread11", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread24", "bone": "tread24", "attachment": "images/tread" }, + { "name": "tread12", "bone": "tread12", "attachment": "images/tread" }, + { "name": "tread25", "bone": "tread25", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread13", "bone": "tread13", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread26", "bone": "tread26", "attachment": "images/tread" }, + { "name": "rock", "bone": "rock", "attachment": "images/rock" }, + { "name": "machinegun", "bone": "machinegun", "attachment": "images/machinegun" }, + { "name": "machinegun-mount", "bone": "machinegun-mount", "attachment": "images/machinegun-mount" }, + { "name": "tankTop", "bone": "tankBody", "attachment": "images/tankTop" }, + { "name": "guntower", "bone": "guntower", "attachment": "images/guntower" }, + { "name": "cannon", "bone": "cannon", "attachment": "images/cannon" }, + { "name": "cannonConnector", "bone": "cannonConnector", "attachment": "images/cannonConnector" }, + { "name": "antenna", "bone": "antennaRoot", "attachment": "images/antenna" } +], +"ik": [ + { + "name": "cannonTarget", + "bones": [ "cannon" ], + "target": "cannonTarget" + }, + { + "name": "machineGunTarget", + "bones": [ "machinegun" ], + "target": "machineGunTarget", + "mix": 0 + } +], +"transform": [ + { + "name": "wheel-big", + "bones": [ "wheel-big2" ], + "target": "wheel-big1", + "rotation": 65.6, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid1", + "bones": [ "wheel-mid2", "wheel-mid4" ], + "target": "wheel-mid1", + "rotation": 93, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid2", + "bones": [ "wheel-mid3", "wheel-mid5" ], + "target": "wheel-mid1", + "rotation": -89, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid3", + "bones": [ "wheel-mid6" ], + "target": "wheel-mid1", + "rotation": -152.6, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-small1", + "bones": [ "wheel-small2" ], + "target": "wheel-small1", + "rotation": 87, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-small2", + "bones": [ "wheel-small3" ], + "target": "wheel-small1", + "rotation": 54.9, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + } +], +"path": [ + { + "name": "treads", + "bones": [ + "tread", + "tread2", + "tread3", + "tread4", + "tread5", + "tread6", + "tread7", + "tread8", + "tread9", + "tread10", + "tread11", + "tread12", + "tread13", + "tread14", + "tread15", + "tread16", + "tread17", + "tread18", + "tread19", + "tread20", + "tread21", + "tread22", + "tread23", + "tread24", + "tread25", + "tread26", + "tread27", + "tread28", + "tread29", + "tread30", + "tread31", + "tread32", + "tread33", + "tread34", + "tread35", + "tread36" + ], + "target": "treads", + "rotateMode": "chain" + } +], +"skins": { + "default": { + "antenna": { + "images/antenna": { + "type": "mesh", + "uvs": [ 0.64286, 0.07875, 0.65354, 0.15349, 0.66324, 0.22137, 0.67367, 0.29433, 0.68383, 0.36543, 0.69359, 0.43374, 0.7031, 0.50029, 0.71311, 0.5703, 0.72327, 0.64138, 0.73406, 0.71688, 0.7444, 0.78929, 0.75614, 0.8714, 0.76905, 0.9431, 1, 0.9431, 1, 1, 0, 1, 0, 0.9431, 0.20105, 0.9431, 0.20105, 0.87093, 0.21461, 0.78846, 0.22651, 0.71606, 0.23885, 0.64098, 0.25035, 0.57104, 0.26206, 0.49983, 0.27306, 0.4329, 0.2843, 0.36453, 0.29592, 0.29381, 0.308, 0.22037, 0.319, 0.15345, 0.33141, 0.07795, 0.34423, 0, 0.6316, 0 ], + "triangles": [ 30, 31, 0, 29, 30, 0, 29, 0, 1, 28, 29, 1, 28, 1, 2, 27, 28, 2, 27, 2, 3, 26, 3, 4, 25, 26, 4, 25, 4, 5, 26, 27, 3, 24, 5, 6, 23, 24, 6, 7, 23, 6, 24, 25, 5, 22, 7, 8, 21, 22, 8, 21, 8, 9, 7, 22, 23, 20, 9, 10, 19, 20, 10, 20, 21, 9, 19, 10, 11, 18, 19, 11, 17, 18, 11, 17, 11, 12, 15, 16, 17, 12, 13, 14, 15, 17, 12, 14, 15, 12 ], + "vertices": [ 2, 10, 65.37999, -3.14, 0.3125, 11, 23.38, -3.14, 0.6875, 3, 9, 84.73, -3.37, 0.0625, 10, 42.73, -3.37, 0.625, 11, 0.73, -3.37, 0.3125, 3, 9, 64.16, -3.59, 0.3125, 10, 22.16, -3.59, 0.625, 11, -19.83, -3.59, 0.0625, 3, 8, 84.06, -3.82, 0.0625, 9, 42.06, -3.82, 0.625, 10, 0.06, -3.82, 0.3125, 3, 8, 62.51, -4.04, 0.3125, 9, 20.51, -4.04, 0.625, 10, -21.48, -4.04, 0.0625, 3, 7, 83.81, -4.25, 0.0625, 8, 41.81, -4.25, 0.625, 9, -0.18, -4.25, 0.3125, 3, 7, 63.65, -4.46, 0.3125, 8, 21.65, -4.46, 0.625, 9, -20.34, -4.46, 0.0625, 3, 6, 84.43, -4.67999, 0.0625, 7, 42.43, -4.67999, 0.625, 8, 0.43, -4.67999, 0.3125, 3, 6, 62.9, -4.91, 0.3125, 7, 20.9, -4.91, 0.625, 8, -21.09, -4.91, 0.0625, 3, 5, 5.14, 80.01999, 0.0625, 6, 40.02, -5.14, 0.625, 7, -1.97, -5.14, 0.3125, 3, 5, 5.37, 58.08, 0.375, 6, 18.08, -5.37, 0.5625, 7, -23.91, -5.37, 0.0625, 1, 5, 5.63, 33.2, 1, 1, 5, 5.91, 11.48, 1, 1, 5, 11, 11.48, 1, 1, 5, 10.99, -5.75, 1, 1, 5, -11, -5.75, 1, 1, 5, -10.99, 11.48, 1, 1, 5, -6.57, 11.48, 1, 1, 5, -6.57, 33.34, 1, 3, 5, -6.27, 58.33, 0.375, 6, 18.33, 6.27, 0.5625, 7, -23.66, 6.27, 0.0625, 3, 5, -6.01, 80.26999, 0.0625, 6, 40.27, 6.01, 0.625, 7, -1.72, 6.01, 0.3125, 3, 6, 63.02, 5.74, 0.3125, 7, 21.02, 5.74, 0.625, 8, -20.96999, 5.74, 0.0625, 3, 6, 84.21, 5.49, 0.0625, 7, 42.21, 5.49, 0.625, 8, 0.21, 5.49, 0.3125, 3, 7, 63.79, 5.23, 0.3125, 8, 21.79, 5.23, 0.625, 9, -20.2, 5.23, 0.0625, 3, 7, 84.07, 4.98999, 0.0625, 8, 42.07, 4.98999, 0.625, 9, 0.07, 4.98999, 0.3125, 3, 8, 62.78, 4.73999, 0.3125, 9, 20.78, 4.73999, 0.625, 10, -21.21, 4.73999, 0.0625, 3, 8, 84.21, 4.48, 0.0625, 9, 42.21, 4.48, 0.625, 10, 0.21, 4.48, 0.3125, 3, 9, 64.46, 4.21999, 0.3125, 10, 22.46, 4.21999, 0.625, 11, -19.53, 4.21999, 0.0625, 3, 9, 84.74, 3.98, 0.0625, 10, 42.74, 3.98, 0.625, 11, 0.74, 3.98, 0.3125, 2, 10, 65.62, 3.7, 0.3125, 11, 23.62, 3.7, 0.6875, 1, 11, 47.24, 3.42, 1, 1, 11, 47.24, -2.89, 1 ], + "hull": 32, + "edges": [ 28, 30, 28, 26, 30, 32, 26, 24, 24, 22, 32, 34, 34, 24, 34, 36, 36, 22, 60, 62, 38, 36, 20, 22, 38, 20, 40, 38, 18, 20, 40, 18, 42, 40, 16, 18, 42, 16, 44, 42, 14, 16, 44, 14, 46, 44, 12, 14, 46, 12, 48, 46, 10, 12, 48, 10, 50, 48, 8, 10, 50, 8, 52, 50, 6, 8, 52, 6, 54, 52, 4, 6, 54, 4, 56, 54, 2, 4, 56, 2, 60, 58, 58, 56, 62, 0, 0, 2, 58, 0 ], + "width": 22, + "height": 303 + } + }, + "bottom": { + "images/tankBottom": { "x": -16.66, "y": 9.89, "width": 1285, "height": 276 } + }, + "cannon": { + "images/cannon": { "x": 481.95, "y": -0.02, "rotation": 179.99, "width": 931, "height": 58 } + }, + "cannonConnector": { + "images/cannonConnector": { + "type": "mesh", + "uvs": [ 1, 0.03236, 1, 0.10602, 0.90987, 0.32859, 0.81975, 0.55116, 0.72962, 0.77372, 0.6395, 0.99629, 0.42157, 0.99629, 0.20364, 0.99629, 0, 0.85433, 0, 0.69901, 0.02267, 0.52884, 0, 0.31444, 0.21601, 0.12998, 0.43367, 0, 0.63546, 0.0037, 0.48407, 0.77059, 0.31496, 0.52496, 0.64132, 0.19648, 0.21516, 0.76765, 0.58345, 0.5647, 0.68444, 0.40146, 0.46758, 0.36649, 0.28934, 0.34603 ], + "triangles": [ 21, 22, 12, 11, 12, 22, 17, 21, 13, 17, 13, 14, 21, 12, 13, 21, 17, 20, 16, 22, 21, 10, 11, 22, 10, 22, 16, 19, 21, 20, 16, 21, 19, 18, 10, 16, 9, 10, 18, 15, 16, 19, 18, 16, 15, 8, 9, 18, 7, 8, 18, 6, 18, 15, 7, 18, 6, 14, 0, 1, 17, 14, 1, 2, 17, 1, 20, 17, 2, 3, 20, 2, 19, 20, 3, 4, 19, 3, 15, 19, 4, 5, 15, 4, 6, 15, 5 ], + "vertices": [ 1, 12, 35.91, 69.08, 1, 1, 12, 35.91, 59.13, 1, 1, 12, 25.81, 29.09, 1, 1, 12, 15.72, -0.95, 1, 1, 12, 5.63, -31, 1, 1, 12, -4.46, -61.04, 1, 2, 12, -28.87, -61.04, 0.33333, 14, 28.87, 61.03, 0.66666, 1, 14, 53.27, 61.01, 1, 1, 14, 76.08, 41.83, 1, 1, 14, 71.17, 21.62, 1, 1, 14, 72.83, -1.62, 1, 1, 14, 70.37, -29.12, 1, 1, 14, 50.66, -56.13, 1, 2, 12, -28.43, 74.37, 0.41, 14, 28.43, -74.39, 0.58999, 2, 12, -4.91, 72.94999, 0.52, 14, 4.91, -72.94999, 0.48, 2, 12, -21.87, -30.57, 0.49, 14, 21.87, 30.56, 0.51, 1, 14, 40.81, -2.59999, 1, 2, 12, -4.25, 46.92, 0.49, 14, 4.25, -46.92, 0.51, 1, 14, 51.98, 30.15, 1, 2, 12, -10.74, -2.78, 0.49, 14, 10.74, 2.77, 0.51, 2, 12, 0.56, 19.25, 0.49, 14, -0.56, -19.25, 0.51, 1, 14, 23.71, -23.98, 1, 1, 14, 43.68, -26.76, 1 ], + "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, 28, 0 ], + "width": 112, + "height": 135 + } + }, + "guntower": { + "images/guntower": { "x": 77.22, "y": 122.58, "width": 730, "height": 289 } + }, + "machinegun": { + "images/machinegun": { "x": 44.85, "y": -5.72, "rotation": -180, "width": 331, "height": 57 } + }, + "machinegun-mount": { + "images/machinegun-mount": { "x": 47.42, "y": -1.53, "rotation": -90, "width": 72, "height": 96 } + }, + "rock": { + "images/rock": { "color": "404040ff", "x": 25.23, "y": 27.35, "width": 252, "height": 55 } + }, + "tankBody-shadow": { + "images/tankBottom-shadow": { "x": -11.43, "y": -42.88, "width": 1291, "height": 341 } + }, + "tankTop": { + "images/tankTop": { "x": 6.8, "y": 168.71, "width": 1407, "height": 222 } + }, + "tread": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread-inside1": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside10": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside11": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside12": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside13": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside14": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside15": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside16": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside17": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside18": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside19": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside2": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside20": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside21": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside22": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside23": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside24": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside25": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside26": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside27": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside28": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside29": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside3": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside30": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside31": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside32": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside33": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside34": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside35": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside36": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside37": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside38": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside39": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside4": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside40": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside41": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside42": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside43": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside44": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside45": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside46": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside47": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside48": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside49": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside5": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside50": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside51": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside52": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside53": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside54": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside55": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside56": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside57": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside58": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside59": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside6": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside60": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside61": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside62": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside63": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside64": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside65": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside66": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside67": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside68": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside69": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside7": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside70": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside71": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside72": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside8": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside9": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread10": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread11": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread12": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread13": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread14": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread15": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread16": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread17": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread18": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread19": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread2": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread20": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread21": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread22": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread23": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread24": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread25": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread26": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread27": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread28": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread29": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread3": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread30": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread31": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread32": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread33": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread34": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread35": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread36": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread4": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread5": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread6": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread7": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread8": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread9": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "treads": { + "treads": { + "type": "path", + "closed": true, + "lengths": [ 182.41, 349, 472.77, 602.99, 780.46, 1052.96, 1133.44, 1218.43, 1298.34, 1382.7, 1465.57, 1546.11, 1628.02, 1707.73, 1794.36, 1876.75, 2158.69, 2321.34, 2438.56, 2579.42, 2745.35, 2919.23 ], + "vertexCount": 66, + "vertices": [ 1, 83, 11.23, 41.86, 1, 1, 83, 0.78, 41.93999, 1, 1, 83, -34.72, 42.23, 1, 1, 63, -104.21, 0.41, 1, 1, 63, 0.07, 0.55, 1, 1, 63, 68.8, 0.64, 1, 1, 81, 20.5, 43.47, 1, 1, 81, 1.13, 40.81, 1, 1, 81, -27.38, 36.84, 1, 1, 65, 147.06, 105, 1, 1, 65, 96.21, 96.63, 1, 1, 65, 43.87, 87.71, 1, 1, 65, 16.18, 103.34, 1, 1, 65, -33.66999, 94.2, 1, 1, 65, -99.35, 81.25, 1, 1, 65, -122.04, -1.69, 1, 1, 65, -83.58, -47.92, 1, 1, 65, -33.53, -109.36, 1, 1, 69, -83.56, -66.08999, 1, 1, 69, -2.16, -67.89, 1, 2, 69, 56.68, -41.48, 0.67999, 58, -24.31, -41.49, 0.32, 1, 58, -26.58, 16.69, 1, 1, 58, -2.69, 16.69, 1, 1, 58, 13.51, 16.69, 1, 2, 71, -52.41, -46.51, 0.74399, 58, 30.2, -46.51, 0.256, 1, 71, -0.32, -68.92, 1, 2, 71, 52.09, -44.72, 0.712, 59, -28.9, -44.73, 0.28799, 1, 59, -22.8, 16.24, 1, 1, 59, -1.42, 16.24, 1, 1, 59, 20.46999, 16.24, 1, 2, 73, -47.21, -47.45, 0.744, 59, 36.00999, -47.46, 0.25599, 1, 73, -0.28, -69.65, 1, 2, 73, 45.23, -47.26, 0.736, 60, -37.48, -47.26, 0.26399, 1, 60, -23.76, 15.27, 1, 1, 60, -0.13, 15.27, 1, 1, 60, 24.45, 15.27, 1, 2, 75, -47.36, -48.7, 0.74399, 60, 33.52, -48.7, 0.256, 1, 75, -0.49, -70.39, 1, 2, 75, 49.09, -48.33, 0.744, 61, -33.57, -48.34, 0.25599, 1, 61, -20.89, 15.83, 1, 1, 61, -1.25, 15.83, 1, 1, 61, 15.78, 15.83, 1, 2, 77, -52.49, -48.21, 0.75999, 61, 28.45, -48.21, 0.24, 1, 77, -2.5, -68.92, 1, 2, 77, 55.72, -47.82, 0.752, 62, -28.88, -47.82, 0.248, 1, 62, -21.64, 16.69, 1, 1, 62, -0.48, 16.69, 1, 1, 62, 20.73, 16.69, 1, 2, 79, -53.65, -48.89, 0.76, 62, 25.96, -48.89, 0.23999, 1, 79, 2.27, -69.65, 1, 1, 79, 44.94, -69.74, 1, 1, 65, 1172.98, -85.6, 1, 1, 65, 1190.53, -42.24, 1, 1, 65, 1215.63, 19.75, 1, 1, 65, 1175.55, 76.62, 1, 1, 65, 1134.22, 95.07, 1, 1, 65, 1128.4, 97.66, 1, 1, 65, 1081.79, 87.47, 1, 1, 65, 1017.16, 92.52, 1, 1, 65, 977.9, 95.58, 1, 1, 85, 47.07, 42.29, 1, 1, 85, 0.24, 42.74, 1, 1, 85, -29.63, 43.28, 1, 1, 64, -86.64, 1.35, 1, 1, 64, 0.49, 0.25, 1, 1, 64, 92.42, -0.89, 1 ] + } + }, + "wheel-big": { + "images/wheel-big": { "width": 191, "height": 191 } + }, + "wheel-big-overlay1": { + "images/wheel-big-overlay": { "width": 186, "height": 186 } + }, + "wheel-big-overlay2": { + "images/wheel-big-overlay": { "width": 186, "height": 186 } + }, + "wheel-big2": { + "images/wheel-big": { "width": 191, "height": 191 } + }, + "wheel-mid": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay2": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay3": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay4": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay5": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay6": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid2": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid3": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid4": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid5": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid6": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-small": { + "images/wheel-small": { "width": 71, "height": 71 } + }, + "wheel-small2": { + "images/wheel-small": { "width": 71, "height": 71 } + }, + "wheel-small3": { + "images/wheel-small": { "width": 71, "height": 71 } + } + } +}, +"animations": { + "drive": { + "bones": { + "tankRoot": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.549, 0, 0.907, 0.84 ] + }, + { + "time": 3.0333, + "x": -1426.14, + "y": 0, + "curve": [ 0.211, 0.23, 0.851, 0.92 ] + }, + { + "time": 4.8666, + "x": -2806.98, + "y": 0, + "curve": [ 0.253, 0.27, 0.625, 0.94 ] + }, + { "time": 5.3333, "x": -2903.34, "y": 0 } + ] + }, + "wheel-midRoot1": { + "translate": [ + { "time": 0.7666, "x": 0, "y": 0 }, + { + "time": 1.1666, + "x": 0, + "y": 50.95, + "curve": [ 0.633, 0, 0.907, 0.82 ] + }, + { "time": 1.5666, "x": 0, "y": 0 } + ] + }, + "treadCollider1": { + "rotate": [ + { "time": 1.1, "angle": 0 }, + { "time": 1.2333, "angle": -19.78 }, + { "time": 1.4666, "angle": 0 }, + { "time": 1.6, "angle": 28.87 }, + { "time": 1.8, "angle": 0 } + ], + "translate": [ + { "time": 1.1, "x": 0, "y": 0 }, + { + "time": 1.4666, + "x": 0, + "y": 58.66, + "curve": [ 0.352, 0, 0.828, 0.92 ] + }, + { "time": 1.8, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot2": { + "translate": [ + { "time": 1.2666, "x": 0, "y": 0 }, + { + "time": 1.6333, + "x": 0, + "y": 55.07, + "curve": [ 0.889, 0.01, 0.843, 0.81 ] + }, + { "time": 1.9333, "x": 0, "y": 0 } + ] + }, + "treadCollider2": { + "rotate": [ + { "time": 1.5333, "angle": 0 }, + { "time": 1.6333, "angle": -18.67 }, + { "time": 1.8, "angle": 0 }, + { "time": 1.9, "angle": 29.49 }, + { "time": 2.0666, "angle": 0 } + ], + "translate": [ + { + "time": 1.5333, + "x": 0, + "y": 0, + "curve": [ 0.16, 0.25, 0.813, 0.82 ] + }, + { + "time": 1.8, + "x": 0, + "y": 59.03, + "curve": [ 0.376, 0.26, 0.879, 0.79 ] + }, + { "time": 2.0666, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot3": { + "translate": [ + { "time": 1.6666, "x": 0, "y": 0 }, + { + "time": 1.9333, + "x": 0, + "y": 60.17, + "curve": [ 0.544, 0, 0.838, 0.77 ] + }, + { "time": 2.2, "x": 0, "y": 0 } + ] + }, + "treadCollider3": { + "rotate": [ + { "time": 1.8666, "angle": 0 }, + { "time": 1.9333, "angle": -20.16 }, + { "time": 2.0666, "angle": 0.57 }, + { "time": 2.1666, "angle": 33.66 }, + { "time": 2.3333, "angle": 0 } + ], + "translate": [ + { "time": 1.8666, "x": 0, "y": 0 }, + { + "time": 2.0666, + "x": 0, + "y": 61.53, + "curve": [ 0.582, 0, 0.836, 0.77 ] + }, + { "time": 2.3333, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot4": { + "translate": [ + { "time": 1.9333, "x": 0, "y": 0 }, + { + "time": 2.2, + "x": 0, + "y": 58.89, + "curve": [ 0.48, 0, 0.75, 1 ] + }, + { "time": 2.4666, "x": 0, "y": 0 } + ] + }, + "treadCollider4": { + "rotate": [ + { "time": 2.1333, "angle": 0 }, + { "time": 2.2, "angle": -20.43 }, + { "time": 2.3333, "angle": 4.49 }, + { "time": 2.4333, "angle": 35.87 }, + { "time": 2.5666, "angle": 0 } + ], + "translate": [ + { + "time": 2.1333, + "x": 0, + "y": 0, + "curve": [ 0.191, 0.49, 0.75, 1 ] + }, + { "time": 2.3333, "x": 0, "y": 66.64 }, + { "time": 2.5666, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot5": { + "translate": [ + { "time": 2.2, "x": 0, "y": 0 }, + { "time": 2.4333, "x": 0, "y": 60.26 }, + { "time": 2.7, "x": 0, "y": 0 } + ] + }, + "treadCollider5": { + "rotate": [ + { "time": 2.3333, "angle": 0 }, + { "time": 2.4333, "angle": -23.6 }, + { "time": 2.5666, "angle": 6.49 }, + { "time": 2.6666, "angle": 29.93 }, + { "time": 2.8, "angle": -0.13 } + ], + "translate": [ + { "time": 2.3333, "x": 0, "y": 0 }, + { "time": 2.4333, "x": 0, "y": 36.34 }, + { "time": 2.5, "x": 0, "y": 56.39 }, + { "time": 2.5666, "x": 0, "y": 61.34 }, + { "time": 2.8, "x": 0, "y": 2.04 } + ] + }, + "wheel-midRoot6": { + "translate": [ + { + "time": 2.4333, + "x": 0, + "y": 0, + "curve": [ 0.19, 0.26, 0.804, 0.8 ] + }, + { + "time": 2.6333, + "x": 0, + "y": 51.86, + "curve": [ 0.346, 0, 0.852, 0.7 ] + }, + { "time": 2.8, "x": 0, "y": 0 } + ] + }, + "wheel-mid1": { + "rotate": [ + { + "time": 0, + "angle": 21, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 0.8, "angle": 120 }, + { "time": 1.2333, "angle": 240 }, + { "time": 1.6, "angle": 0 }, + { "time": 1.9, "angle": 120 }, + { "time": 2.1666, "angle": 240 }, + { "time": 2.4, "angle": 0 }, + { "time": 2.5666, "angle": 120 }, + { "time": 2.7333, "angle": 240 }, + { "time": 2.9333, "angle": 0 }, + { "time": 3.1, "angle": 120 }, + { "time": 3.2666, "angle": 240 }, + { "time": 3.4333, "angle": 0 }, + { "time": 3.6333, "angle": 120 }, + { "time": 3.8, "angle": 240 }, + { "time": 3.9666, "angle": 0 }, + { "time": 4.1666, "angle": 120 }, + { "time": 4.3333, "angle": 240 }, + { "time": 4.5, "angle": 0 }, + { "time": 4.7, "angle": 120 }, + { "time": 4.8666, "angle": 240 }, + { "time": 5.2666, "angle": -67.99 } + ] + }, + "tankTreads": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.145, 0.34, 0.75, 1 ] + }, + { "time": 1.1, "angle": -3.9 }, + { "time": 1.3333, "angle": -2.37 }, + { "time": 1.6333, "angle": -3.54 }, + { "time": 2.1666, "angle": 0.27 }, + { + "time": 2.4666, + "angle": 2.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.7, + "angle": 3.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3, "angle": -3.62 }, + { "time": 3.2333, "angle": -1.23, "curve": "stepped" }, + { + "time": 4.8666, + "angle": -1.23, + "curve": [ 0.188, 0.16, 0.75, 1 ] + }, + { + "time": 5.2, + "angle": 4.47, + "curve": [ 0.416, 0.01, 0.75, 1 ] + }, + { + "time": 5.5666, + "angle": -3.08, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 5.8333, "angle": -1.23 } + ] + }, + "wheel-big1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 1.1, "angle": 120 }, + { "time": 1.5333, "angle": 240 }, + { "time": 1.8, "angle": 360 }, + { "time": 2.0333, "angle": 120 }, + { "time": 2.2666, "angle": 240 }, + { "time": 2.4666, "angle": 360 }, + { "time": 2.7, "angle": 120 }, + { "time": 2.9333, "angle": 240 }, + { "time": 3.1333, "angle": 360 }, + { "time": 3.3666, "angle": 120 }, + { "time": 3.5666, "angle": 240 }, + { "time": 3.8, "angle": -24 }, + { "time": 4.0333, "angle": 120 }, + { "time": 4.2333, "angle": 240 }, + { "time": 4.4666, "angle": -24 }, + { "time": 4.7, "angle": 120 }, + { "time": 4.8666, "angle": -143.99 }, + { + "time": 5.0666, + "angle": -131.4, + "curve": [ 0.14, 0.25, 0.75, 1 ] + }, + { "time": 5.6666, "angle": -76.85 }, + { "time": 5.8333, "angle": -72.3 } + ] + }, + "treadGravity1": { + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.4666, "x": 0, "y": 0 }, + { "time": 1.8, "x": 0, "y": 29.44 }, + { "time": 2.3333, "x": 0, "y": -0.52 }, + { "time": 2.5666, "x": 0, "y": 5.2 }, + { "time": 2.6666, "x": 0, "y": -11.05, "curve": "stepped" }, + { "time": 4.8666, "x": 0, "y": -11.05 }, + { "time": 5.0666, "x": 0, "y": -1.91 }, + { "time": 5.5333, "x": 0, "y": -6.9 }, + { "time": 5.7333, "x": 0, "y": -11.05 } + ] + }, + "treadGravity2": { + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.4666, "x": 0, "y": 0 }, + { "time": 1.8, "x": 0, "y": 8.5 }, + { "time": 2.3333, "x": 0, "y": 34.74 }, + { "time": 2.5666, "x": 0, "y": 5.2 }, + { "time": 2.6666, "x": 0, "y": -11.05, "curve": "stepped" }, + { "time": 4.8666, "x": 0, "y": -11.05 }, + { "time": 5.0666, "x": 0, "y": 3.9 }, + { "time": 5.5333, "x": 0, "y": -6.9 }, + { "time": 5.7333, "x": 0, "y": -11.05 } + ] + }, + "wheel-small1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 0.7, "angle": 120 }, + { "time": 1.1, "angle": 240 }, + { "time": 1.4666, "angle": 360 }, + { "time": 1.7666, "angle": 120 }, + { "time": 2.0333, "angle": 240 }, + { "time": 2.2666, "angle": 360 }, + { "time": 2.4333, "angle": 120 }, + { "time": 2.5666, "angle": 240 }, + { "time": 2.7, "angle": 360 }, + { "time": 2.8333, "angle": 120 }, + { "time": 2.9666, "angle": 240 }, + { "time": 3.1, "angle": 360 }, + { "time": 3.2333, "angle": 120 }, + { "time": 3.3666, "angle": 240 }, + { "time": 3.5, "angle": 360 }, + { "time": 3.6333, "angle": 120 }, + { "time": 3.7666, "angle": 240 }, + { "time": 3.9, "angle": 360 }, + { "time": 4.0333, "angle": 120 }, + { "time": 4.1666, "angle": 240 }, + { "time": 4.3, "angle": 360 }, + { "time": 4.4333, "angle": 120 }, + { "time": 4.5666, "angle": 240 }, + { "time": 4.7, "angle": 360 }, + { "time": 4.8333, "angle": 120 }, + { "time": 5, "angle": 240 }, + { + "time": 5.2, + "angle": -25.64, + "curve": [ 0.181, 0.26, 0.75, 1 ] + }, + { "time": 5.5666, "angle": 90 } + ] + }, + "tankBody": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.1666, + "angle": -1.41, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.9333, + "angle": -0.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3, + "angle": 0.84, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -2.33, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.4666, + "angle": -0.45, + "curve": [ 0.329, 0.32, 0.757, 1 ] + }, + { + "time": 4.8666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3333, + "angle": 1.82, + "curve": [ 0.324, 0.01, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -1.15, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.0333, "angle": 0 } + ] + }, + "antenna1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna4": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna5": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna6": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "machinegun": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 2.8333, + "angle": 0, + "curve": [ 0.183, 0.17, 0.75, 1 ] + }, + { + "time": 3, + "angle": -4.43, + "curve": [ 0.156, 0.16, 0.75, 1 ] + }, + { + "time": 3.1666, + "angle": -2.93, + "curve": [ 0.156, 0.16, 0.75, 1 ] + }, + { + "time": 4.8333, + "angle": 0, + "curve": [ 0.183, 0.17, 0.75, 1 ] + }, + { + "time": 5.1666, + "angle": -6.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.4, + "angle": 6.15, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 5.6, "angle": -1.26 } + ] + }, + "cannon": { + "rotate": [ + { "time": 0, "angle": 0 } + ] + }, + "cannonTarget": { + "translate": [ + { + "time": 5, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.3333, "x": -15.38, "y": 99.99 } + ] + } + }, + "ik": { + "cannonTarget": [ + { "time": 0, "mix": 0.809, "curve": "stepped" }, + { "time": 4.7333, "mix": 0.809 }, + { "time": 5.1666, "mix": 0.504 }, + { "time": 5.6666 } + ] + }, + "paths": { + "treads": { + "position": [ + { + "time": 0, + "curve": [ 0.549, 0, 0.907, 0.84 ] + }, + { "time": 3.0333, "position": 0.51 }, + { "time": 4.8666, "position": 0.9794 }, + { + "time": 5.2666, + "position": 1, + "curve": [ 0.226, 0.15, 0.765, 0.96 ] + }, + { + "time": 5.5333, + "position": 1.02, + "curve": [ 0.279, 0.32, 0.694, 0.99 ] + }, + { "time": 5.8333, "position": 1.021 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-sfml/data/tank.png b/spine-sfml/data/tank.png new file mode 100644 index 000000000..9811ee418 Binary files /dev/null and b/spine-sfml/data/tank.png differ diff --git a/spine-sfml/data/vine.atlas b/spine-sfml/data/vine.atlas new file mode 100644 index 000000000..313213413 --- /dev/null +++ b/spine-sfml/data/vine.atlas @@ -0,0 +1,13 @@ + +vine.png +size: 128,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +images/vine + rotate: false + xy: 2, 2 + size: 68, 962 + orig: 68, 962 + offset: 0, 0 + index: -1 diff --git a/spine-sfml/data/vine.json b/spine-sfml/data/vine.json new file mode 100644 index 000000000..a08c20022 --- /dev/null +++ b/spine-sfml/data/vine.json @@ -0,0 +1,300 @@ +{ +"skeleton": { "hash": "Ww/IgnvLkO+Bc7+ljr0JS3OTq8Q", "spine": "3.4.00", "width": 227.35, "height": 841.02, "images": "" }, +"bones": [ + { "name": "root" }, + { "name": "vine1", "parent": "root", "length": 74, "rotation": 90, "x": 339.09, "y": -467.15, "color": "f700ffff" }, + { "name": "vine2", "parent": "vine1", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine3", "parent": "vine2", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine4", "parent": "vine3", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine5", "parent": "vine4", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine6", "parent": "vine5", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine7", "parent": "vine6", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine8", "parent": "vine7", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine9", "parent": "vine8", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine10", "parent": "vine9", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine11", "parent": "vine10", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine12", "parent": "vine11", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine13", "parent": "vine12", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine-control1", "parent": "root", "length": 296.68, "rotation": 88.64, "x": -2.5, "y": 2.55, "color": "ff0004ff" }, + { "name": "vine-control2", "parent": "vine-control1", "length": 292.59, "rotation": 0.96, "x": 296.68, "color": "ff0004ff" }, + { "name": "vine-control3", "parent": "vine-control2", "length": 247.5, "rotation": 0.16, "x": 292.59, "color": "ff0004ff" }, + { "name": "vine-control4", "parent": "vine-control3", "length": 212.43, "rotation": 0.5, "x": 247.5, "color": "ff0004ff" } +], +"slots": [ + { "name": "vine-path", "bone": "root", "attachment": "vine-path" }, + { "name": "vine", "bone": "vine1", "attachment": "images/vine" } +], +"path": [ + { + "name": "vine-path", + "bones": [ "vine1", "vine2", "vine3", "vine4", "vine5", "vine6", "vine7", "vine8", "vine9", "vine10", "vine11", "vine12", "vine13" ], + "target": "vine-path", + "rotateMode": "chainScale" + } +], +"skins": { + "default": { + "vine": { + "images/vine": { + "type": "mesh", + "uvs": [ 0, 0, 0.5, 0, 1, 0, 1, 0.03846, 1, 0.07692, 1, 0.11538, 1, 0.15384, 1, 0.1923, 1, 0.23076, 1, 0.26923, 1, 0.30769, 1, 0.34615, 1, 0.38461, 1, 0.42307, 1, 0.46153, 1, 0.5, 1, 0.53846, 1, 0.57692, 1, 0.61538, 1, 0.65384, 1, 0.6923, 1, 0.73076, 1, 0.76923, 1, 0.80769, 1, 0.84615, 1, 0.88461, 1, 0.92307, 1, 0.96153, 1, 1, 0.5, 1, 0, 1, 0, 0.96153, 0, 0.92307, 0, 0.88461, 0, 0.84615, 0, 0.80769, 0, 0.76923, 0, 0.73076, 0, 0.6923, 0, 0.65384, 0, 0.61538, 0, 0.57692, 0, 0.53846, 0, 0.5, 0, 0.46153, 0, 0.42307, 0, 0.38461, 0, 0.34615, 0, 0.30769, 0, 0.26923, 0, 0.23076, 0, 0.1923, 0, 0.15384, 0, 0.11538, 0, 0.07692, 0, 0.03846, 0.5, 0.03846, 0.5, 0.07692, 0.5, 0.11538, 0.5, 0.15384, 0.5, 0.1923, 0.5, 0.23076, 0.5, 0.26923, 0.5, 0.30769, 0.5, 0.34615, 0.5, 0.38461, 0.5, 0.42307, 0.5, 0.46153, 0.5, 0.5, 0.5, 0.53846, 0.5, 0.57692, 0.5, 0.61538, 0.5, 0.65384, 0.5, 0.6923, 0.5, 0.73076, 0.5, 0.76923, 0.5, 0.80769, 0.5, 0.84615, 0.5, 0.88461, 0.5, 0.92307, 0.5, 0.96153 ], + "triangles": [ 57, 56, 3, 54, 55, 56, 56, 2, 3, 55, 1, 56, 56, 1, 2, 55, 0, 1, 54, 56, 57, 59, 58, 5, 52, 53, 58, 58, 4, 5, 53, 57, 58, 58, 57, 4, 53, 54, 57, 57, 3, 4, 61, 60, 7, 50, 51, 60, 60, 6, 7, 51, 59, 60, 60, 59, 6, 51, 52, 59, 59, 5, 6, 52, 58, 59, 63, 62, 9, 48, 49, 62, 62, 8, 9, 49, 61, 62, 62, 61, 8, 49, 50, 61, 61, 7, 8, 50, 60, 61, 65, 64, 11, 46, 47, 64, 64, 10, 11, 47, 63, 64, 64, 63, 10, 47, 48, 63, 63, 9, 10, 48, 62, 63, 67, 66, 13, 44, 45, 66, 66, 12, 13, 45, 65, 66, 66, 65, 12, 45, 46, 65, 65, 11, 12, 46, 64, 65, 69, 68, 15, 42, 43, 68, 68, 14, 15, 43, 67, 68, 68, 67, 14, 43, 44, 67, 67, 13, 14, 44, 66, 67, 71, 70, 17, 40, 41, 70, 70, 16, 17, 41, 69, 70, 70, 69, 16, 41, 42, 69, 69, 15, 16, 42, 68, 69, 73, 72, 19, 38, 39, 72, 72, 18, 19, 39, 71, 72, 72, 71, 18, 39, 40, 71, 71, 17, 18, 40, 70, 71, 75, 74, 21, 36, 37, 74, 74, 20, 21, 37, 73, 74, 74, 73, 20, 37, 38, 73, 73, 19, 20, 38, 72, 73, 77, 76, 23, 34, 35, 76, 76, 22, 23, 35, 75, 76, 76, 75, 22, 35, 36, 75, 75, 21, 22, 36, 74, 75, 78, 77, 24, 33, 34, 77, 32, 78, 79, 79, 78, 25, 32, 33, 78, 78, 24, 25, 33, 77, 78, 77, 23, 24, 34, 76, 77, 79, 25, 26, 29, 27, 28, 30, 80, 29, 29, 80, 27, 30, 31, 80, 80, 26, 27, 31, 79, 80, 80, 79, 26, 31, 32, 79 ], + "vertices": [ 4, 10, 294, 33.89, 3.2E-4, 11, 220, 33.89, 0.01648, 12, 146, 33.89, 0.21526, 13, 72, 33.89, 0.76791, 3, 11, 220, -0.1, 0.00752, 12, 146, -0.1, 0.16869, 13, 72, -0.1, 0.82378, 4, 10, 294, -34.09999, 3.2E-4, 11, 220, -34.09999, 0.01648, 12, 146, -34.09999, 0.21526, 13, 72, -34.09999, 0.76791, 4, 10, 257, -34.09999, 0.00195, 11, 183, -34.09999, 0.04739, 12, 109, -34.09999, 0.33351, 13, 35, -34.09999, 0.61714, 5, 9, 294, -34.09999, 2.4E-4, 10, 220, -34.09999, 0.01163, 11, 146, -34.09999, 0.14109, 12, 72, -34.09999, 0.49171, 13, -1.99, -34.09999, 0.35531, 5, 9, 257, -34.09999, 0.00195, 10, 183, -34.09999, 0.04663, 11, 109, -34.09999, 0.31166, 12, 35, -34.09999, 0.48761, 13, -38.99, -34.09999, 0.15212, 6, 8, 294, -34.09999, 2.4E-4, 9, 220, -34.09999, 0.01163, 10, 146, -34.09999, 0.14101, 11, 72, -34.09999, 0.48685, 12, -1.99, -34.09999, 0.31174, 13, -75.99, -34.09999, 0.0485, 6, 8, 257, -34.09999, 0.00195, 9, 183, -34.09999, 0.04663, 10, 109, -34.09999, 0.31166, 11, 35, -34.09999, 0.48685, 12, -38.99, -34.09999, 0.14101, 13, -112.99, -34.09999, 0.01188, 7, 7, 294, -34.09999, 2.4E-4, 8, 220, -34.09999, 0.01163, 9, 146, -34.09999, 0.14101, 10, 72, -34.09999, 0.48685, 11, -1.99, -34.09999, 0.31166, 12, -75.99, -34.09999, 0.04663, 13, -149.99, -34.09999, 0.00195, 7, 7, 257, -34.09999, 0.00195, 8, 183, -34.09999, 0.04663, 9, 109, -34.09999, 0.31166, 10, 35, -34.09999, 0.48685, 11, -38.99, -34.09999, 0.14101, 12, -112.99, -34.09999, 0.01163, 13, -186.99, -34.09999, 2.4E-4, 7, 6, 294, -34.09999, 2.4E-4, 7, 220, -34.09999, 0.01163, 8, 146, -34.09999, 0.14101, 9, 72, -34.09999, 0.48685, 10, -1.99, -34.09999, 0.31166, 11, -75.99, -34.09999, 0.04663, 12, -149.99, -34.09999, 0.00195, 7, 6, 257, -34.09999, 0.00195, 7, 183, -34.09999, 0.04663, 8, 109, -34.09999, 0.31166, 9, 35, -34.09999, 0.48685, 10, -38.99, -34.09999, 0.14101, 11, -112.99, -34.09999, 0.01163, 12, -186.99, -34.09999, 2.4E-4, 7, 5, 294, -34.09999, 2.4E-4, 6, 220, -34.09999, 0.01163, 7, 146, -34.09999, 0.14101, 8, 72, -34.09999, 0.48685, 9, -1.99, -34.09999, 0.31166, 10, -75.99, -34.09999, 0.04663, 11, -149.99, -34.09999, 0.00195, 7, 5, 257, -34.09999, 0.00195, 6, 183, -34.09999, 0.04663, 7, 109, -34.09999, 0.31166, 8, 35, -34.09999, 0.48685, 9, -38.99, -34.09999, 0.14101, 10, -112.99, -34.09999, 0.01163, 11, -186.99, -34.09999, 2.4E-4, 7, 4, 294, -34.09999, 2.4E-4, 5, 220, -34.09999, 0.01163, 6, 146, -34.09999, 0.14101, 7, 72, -34.09999, 0.48685, 8, -1.99, -34.09999, 0.31166, 9, -75.99, -34.09999, 0.04663, 10, -149.99, -34.09999, 0.00195, 7, 4, 257, -34.09999, 0.00195, 5, 183, -34.09999, 0.04663, 6, 109, -34.09999, 0.31166, 7, 35, -34.09999, 0.48685, 8, -38.99, -34.09999, 0.14101, 9, -112.99, -34.09999, 0.01163, 10, -186.99, -34.09999, 2.4E-4, 7, 3, 294, -34.09999, 2.4E-4, 4, 220, -34.09999, 0.01163, 5, 146, -34.09999, 0.14101, 6, 72, -34.09999, 0.48685, 7, -1.99, -34.09999, 0.31166, 8, -75.99, -34.09999, 0.04663, 9, -149.99, -34.09999, 0.00195, 7, 3, 257, -34.09999, 0.00195, 4, 183, -34.09999, 0.04663, 5, 109, -34.09999, 0.31166, 6, 35, -34.09999, 0.48685, 7, -38.99, -34.09999, 0.14101, 8, -112.99, -34.09999, 0.01163, 9, -186.99, -34.09999, 2.4E-4, 7, 2, 294, -34.09999, 2.4E-4, 3, 220, -34.09999, 0.01163, 4, 146, -34.09999, 0.14101, 5, 72, -34.09999, 0.48685, 6, -1.99, -34.09999, 0.31166, 7, -75.99, -34.09999, 0.04663, 8, -149.99, -34.09999, 0.00195, 7, 2, 257, -34.09999, 0.00195, 3, 183, -34.09999, 0.04663, 4, 109, -34.09999, 0.31166, 5, 35, -34.09999, 0.48685, 6, -38.99, -34.09999, 0.14101, 7, -112.99, -34.09999, 0.01163, 8, -186.99, -34.09999, 2.4E-4, 7, 1, 294, -34.09999, 2.4E-4, 2, 220, -34.09999, 0.01163, 3, 146, -34.09999, 0.14101, 4, 72, -34.09999, 0.48685, 5, -1.99, -34.09999, 0.31166, 6, -75.99, -34.09999, 0.04663, 7, -149.99, -34.09999, 0.00195, 7, 1, 257, -34.09999, 0.0017, 2, 183, -34.09999, 0.04687, 3, 109, -34.09999, 0.31166, 4, 35, -34.09999, 0.48685, 5, -38.99, -34.09999, 0.14101, 6, -112.99, -34.09999, 0.01163, 7, -186.99, -34.09999, 2.4E-4, 6, 1, 220, -34.09999, 0.01033, 2, 146, -34.09999, 0.14256, 3, 72, -34.09999, 0.48685, 4, -1.99, -34.09999, 0.31166, 5, -75.99, -34.09999, 0.04663, 6, -149.99, -34.09999, 0.00195, 6, 1, 183, -34.09999, 0.04058, 2, 109, -34.09999, 0.31966, 3, 35, -34.09999, 0.48685, 4, -38.99, -34.09999, 0.14101, 5, -112.99, -34.09999, 0.01163, 6, -186.99, -34.09999, 2.4E-4, 5, 1, 146, -34.09999, 0.1274, 2, 72, -34.09999, 0.51233, 3, -1.99, -34.09999, 0.31166, 4, -75.99, -34.09999, 0.04663, 5, -149.99, -34.09999, 0.00195, 5, 1, 109, -34.09999, 0.30116, 2, 35, -34.09999, 0.54594, 3, -38.99, -34.09999, 0.14101, 4, -112.99, -34.09999, 0.01163, 5, -186.99, -34.09999, 2.4E-4, 4, 1, 72, -34.09999, 0.55403, 2, -1.99, -34.09999, 0.39738, 3, -75.99, -34.09999, 0.04663, 4, -149.99, -34.09999, 0.00195, 4, 1, 35, -34.09999, 0.77978, 2, -38.99, -34.09999, 0.20825, 3, -112.99, -34.09999, 0.01171, 4, -186.99, -34.09999, 2.4E-4, 3, 1, -1.99, -34.09999, 0.89032, 2, -75.99, -34.09999, 0.10696, 3, -149.99, -34.09999, 0.00271, 3, 1, -1.99, -0.1, 0.9264, 2, -75.99, -0.1, 0.07272, 3, -149.99, -0.1, 8.6E-4, 3, 1, -1.99, 33.89, 0.89032, 2, -75.99, 33.89, 0.10696, 3, -149.99, 33.89, 0.00271, 4, 1, 35, 33.89, 0.77978, 2, -38.99, 33.89, 0.20825, 3, -112.99, 33.89, 0.01171, 4, -186.99, 33.89, 2.4E-4, 4, 1, 72, 33.89, 0.55403, 2, -1.99, 33.89, 0.39738, 3, -75.99, 33.89, 0.04663, 4, -149.99, 33.89, 0.00195, 5, 1, 109, 33.89, 0.30116, 2, 35, 33.89, 0.54594, 3, -38.99, 33.89, 0.14101, 4, -112.99, 33.89, 0.01163, 5, -186.99, 33.89, 2.4E-4, 5, 1, 146, 33.89, 0.1274, 2, 72, 33.89, 0.51233, 3, -1.99, 33.89, 0.31166, 4, -75.99, 33.89, 0.04663, 5, -149.99, 33.89, 0.00195, 6, 1, 183, 33.89, 0.04058, 2, 109, 33.89, 0.31966, 3, 35, 33.89, 0.48685, 4, -38.99, 33.89, 0.14101, 5, -112.99, 33.89, 0.01163, 6, -186.99, 33.89, 2.4E-4, 6, 1, 220, 33.89, 0.01033, 2, 146, 33.89, 0.14256, 3, 72, 33.89, 0.48685, 4, -1.99, 33.89, 0.31166, 5, -75.99, 33.89, 0.04663, 6, -149.99, 33.89, 0.00195, 7, 1, 257, 33.89, 0.0017, 2, 183, 33.89, 0.04687, 3, 109, 33.89, 0.31166, 4, 35, 33.89, 0.48685, 5, -38.99, 33.89, 0.14101, 6, -112.99, 33.89, 0.01163, 7, -186.99, 33.89, 2.4E-4, 7, 1, 294, 33.89, 2.4E-4, 2, 220, 33.89, 0.01163, 3, 146, 33.89, 0.14101, 4, 72, 33.89, 0.48685, 5, -1.99, 33.89, 0.31166, 6, -75.99, 33.89, 0.04663, 7, -149.99, 33.89, 0.00195, 7, 2, 257, 33.89, 0.00195, 3, 183, 33.89, 0.04663, 4, 109, 33.89, 0.31166, 5, 35, 33.89, 0.48685, 6, -38.99, 33.89, 0.14101, 7, -112.99, 33.89, 0.01163, 8, -186.99, 33.89, 2.4E-4, 7, 2, 294, 33.89, 2.4E-4, 3, 220, 33.89, 0.01163, 4, 146, 33.89, 0.14101, 5, 72, 33.89, 0.48685, 6, -1.99, 33.89, 0.31166, 7, -75.99, 33.89, 0.04663, 8, -149.99, 33.89, 0.00195, 7, 3, 257, 33.89, 0.00195, 4, 183, 33.89, 0.04663, 5, 109, 33.89, 0.31166, 6, 35, 33.89, 0.48685, 7, -38.99, 33.89, 0.14101, 8, -112.99, 33.89, 0.01163, 9, -186.99, 33.89, 2.4E-4, 7, 3, 294, 33.89, 2.4E-4, 4, 220, 33.89, 0.01163, 5, 146, 33.89, 0.14101, 6, 72, 33.89, 0.48685, 7, -1.99, 33.89, 0.31166, 8, -75.99, 33.89, 0.04663, 9, -149.99, 33.89, 0.00195, 7, 4, 257, 33.89, 0.00195, 5, 183, 33.89, 0.04663, 6, 109, 33.89, 0.31166, 7, 35, 33.89, 0.48685, 8, -38.99, 33.89, 0.14101, 9, -112.99, 33.89, 0.01163, 10, -186.99, 33.89, 2.4E-4, 7, 4, 294, 33.89, 2.4E-4, 5, 220, 33.89, 0.01163, 6, 146, 33.89, 0.14101, 7, 72, 33.89, 0.48685, 8, -1.99, 33.89, 0.31166, 9, -75.99, 33.89, 0.04663, 10, -149.99, 33.89, 0.00195, 7, 5, 257, 33.89, 0.00195, 6, 183, 33.89, 0.04663, 7, 109, 33.89, 0.31166, 8, 35, 33.89, 0.48685, 9, -38.99, 33.89, 0.14101, 10, -112.99, 33.89, 0.01163, 11, -186.99, 33.89, 2.4E-4, 7, 5, 294, 33.89, 2.4E-4, 6, 220, 33.89, 0.01163, 7, 146, 33.89, 0.14101, 8, 72, 33.89, 0.48685, 9, -1.99, 33.89, 0.31166, 10, -75.99, 33.89, 0.04663, 11, -149.99, 33.89, 0.00195, 7, 6, 257, 33.89, 0.00195, 7, 183, 33.89, 0.04663, 8, 109, 33.89, 0.31166, 9, 35, 33.89, 0.48685, 10, -38.99, 33.89, 0.14101, 11, -112.99, 33.89, 0.01163, 12, -186.99, 33.89, 2.4E-4, 7, 6, 294, 33.89, 2.4E-4, 7, 220, 33.89, 0.01163, 8, 146, 33.89, 0.14101, 9, 72, 33.89, 0.48685, 10, -1.99, 33.89, 0.31166, 11, -75.99, 33.89, 0.04663, 12, -149.99, 33.89, 0.00195, 7, 7, 257, 33.89, 0.00195, 8, 183, 33.89, 0.04663, 9, 109, 33.89, 0.31166, 10, 35, 33.89, 0.48685, 11, -38.99, 33.89, 0.14101, 12, -112.99, 33.89, 0.01163, 13, -186.99, 33.89, 2.4E-4, 7, 7, 294, 33.89, 2.4E-4, 8, 220, 33.89, 0.01163, 9, 146, 33.89, 0.14101, 10, 72, 33.89, 0.48685, 11, -1.99, 33.89, 0.31166, 12, -75.99, 33.89, 0.04663, 13, -149.99, 33.89, 0.00195, 6, 8, 257, 33.89, 0.00195, 9, 183, 33.89, 0.04663, 10, 109, 33.89, 0.31166, 11, 35, 33.89, 0.48685, 12, -38.99, 33.89, 0.14101, 13, -112.99, 33.89, 0.01188, 6, 8, 294, 33.89, 2.4E-4, 9, 220, 33.89, 0.01163, 10, 146, 33.89, 0.14101, 11, 72, 33.89, 0.48685, 12, -1.99, 33.89, 0.31174, 13, -75.99, 33.89, 0.0485, 5, 9, 257, 33.89, 0.00195, 10, 183, 33.89, 0.04663, 11, 109, 33.89, 0.31166, 12, 35, 33.89, 0.48761, 13, -38.99, 33.89, 0.15212, 5, 9, 294, 33.89, 2.4E-4, 10, 220, 33.89, 0.01163, 11, 146, 33.89, 0.14109, 12, 72, 33.89, 0.49171, 13, -1.99, 33.89, 0.35531, 4, 10, 257, 33.89, 0.00195, 11, 183, 33.89, 0.04739, 12, 109, 33.89, 0.33351, 13, 35, 33.89, 0.61714, 4, 10, 257, -0.1, 6.5E-4, 11, 183, -0.1, 0.03067, 12, 109, -0.1, 0.31658, 13, 35, -0.1, 0.65209, 4, 10, 220, -0.1, 0.00542, 11, 146, -0.1, 0.11402, 12, 72, -0.1, 0.5478, 13, -1.99, -0.1, 0.33273, 5, 9, 257, -0.1, 6.5E-4, 10, 183, -0.1, 0.03045, 11, 109, -0.1, 0.30373, 12, 35, -0.1, 0.54592, 13, -38.99, -0.1, 0.11923, 5, 9, 220, -0.1, 0.00542, 10, 146, -0.1, 0.11402, 11, 72, -0.1, 0.5457, 12, -1.99, -0.1, 0.30373, 13, -75.99, -0.1, 0.0311, 6, 8, 257, -0.1, 6.5E-4, 9, 183, -0.1, 0.03045, 10, 109, -0.1, 0.30373, 11, 35, -0.1, 0.5457, 12, -38.99, -0.1, 0.11402, 13, -112.99, -0.1, 0.00542, 6, 8, 220, -0.1, 0.00542, 9, 146, -0.1, 0.11402, 10, 72, -0.1, 0.5457, 11, -1.99, -0.1, 0.30373, 12, -75.99, -0.1, 0.03045, 13, -149.99, -0.1, 6.5E-4, 6, 7, 257, -0.1, 6.5E-4, 8, 183, -0.1, 0.03045, 9, 109, -0.1, 0.30373, 10, 35, -0.1, 0.5457, 11, -38.99, -0.1, 0.11402, 12, -112.99, -0.1, 0.00542, 6, 7, 220, -0.1, 0.00542, 8, 146, -0.1, 0.11402, 9, 72, -0.1, 0.5457, 10, -1.99, -0.1, 0.30373, 11, -75.99, -0.1, 0.03045, 12, -149.99, -0.1, 6.5E-4, 6, 6, 257, -0.1, 6.5E-4, 7, 183, -0.1, 0.03045, 8, 109, -0.1, 0.30373, 9, 35, -0.1, 0.5457, 10, -38.99, -0.1, 0.11402, 11, -112.99, -0.1, 0.00542, 6, 6, 220, -0.1, 0.00542, 7, 146, -0.1, 0.11402, 8, 72, -0.1, 0.5457, 9, -1.99, -0.1, 0.30373, 10, -75.99, -0.1, 0.03045, 11, -149.99, -0.1, 6.5E-4, 6, 5, 257, -0.1, 6.5E-4, 6, 183, -0.1, 0.03045, 7, 109, -0.1, 0.30373, 8, 35, -0.1, 0.5457, 9, -38.99, -0.1, 0.11402, 10, -112.99, -0.1, 0.00542, 6, 5, 220, -0.1, 0.00542, 6, 146, -0.1, 0.11402, 7, 72, -0.1, 0.5457, 8, -1.99, -0.1, 0.30373, 9, -75.99, -0.1, 0.03045, 10, -149.99, -0.1, 6.5E-4, 6, 4, 257, -0.1, 6.5E-4, 5, 183, -0.1, 0.03045, 6, 109, -0.1, 0.30373, 7, 35, -0.1, 0.5457, 8, -38.99, -0.1, 0.11402, 9, -112.99, -0.1, 0.00542, 6, 4, 220, -0.1, 0.00542, 5, 146, -0.1, 0.11402, 6, 72, -0.1, 0.5457, 7, -1.99, -0.1, 0.30373, 8, -75.99, -0.1, 0.03045, 9, -149.99, -0.1, 6.5E-4, 6, 3, 257, -0.1, 6.5E-4, 4, 183, -0.1, 0.03045, 5, 109, -0.1, 0.30373, 6, 35, -0.1, 0.5457, 7, -38.99, -0.1, 0.11402, 8, -112.99, -0.1, 0.00542, 6, 3, 220, -0.1, 0.00542, 4, 146, -0.1, 0.11402, 5, 72, -0.1, 0.5457, 6, -1.99, -0.1, 0.30373, 7, -75.99, -0.1, 0.03045, 8, -149.99, -0.1, 6.5E-4, 6, 2, 257, -0.1, 6.5E-4, 3, 183, -0.1, 0.03045, 4, 109, -0.1, 0.30373, 5, 35, -0.1, 0.5457, 6, -38.99, -0.1, 0.11402, 7, -112.99, -0.1, 0.00542, 6, 2, 220, -0.1, 0.00542, 3, 146, -0.1, 0.11402, 4, 72, -0.1, 0.5457, 5, -1.99, -0.1, 0.30373, 6, -75.99, -0.1, 0.03045, 7, -149.99, -0.1, 6.5E-4, 6, 1, 257, -0.1, 6.5E-4, 2, 183, -0.1, 0.03045, 3, 109, -0.1, 0.30373, 4, 35, -0.1, 0.5457, 5, -38.99, -0.1, 0.11402, 6, -112.99, -0.1, 0.00542, 6, 1, 220, -0.1, 0.00477, 2, 146, -0.1, 0.11467, 3, 72, -0.1, 0.5457, 4, -1.99, -0.1, 0.30373, 5, -75.99, -0.1, 0.03045, 6, -149.99, -0.1, 6.5E-4, 5, 1, 183, -0.1, 0.02676, 2, 109, -0.1, 0.30807, 3, 35, -0.1, 0.5457, 4, -38.99, -0.1, 0.11402, 5, -112.99, -0.1, 0.00542, 5, 1, 146, -0.1, 0.09905, 2, 72, -0.1, 0.5661, 3, -1.99, -0.1, 0.30373, 4, -75.99, -0.1, 0.03045, 5, -149.99, -0.1, 6.5E-4, 4, 1, 109, -0.1, 0.27658, 2, 35, -0.1, 0.60395, 3, -38.99, -0.1, 0.11402, 4, -112.99, -0.1, 0.00542, 4, 1, 72, -0.1, 0.55929, 2, -1.99, -0.1, 0.40959, 3, -75.99, -0.1, 0.03045, 4, -149.99, -0.1, 6.5E-4, 3, 1, 35, -0.1, 0.81845, 2, -38.99, -0.1, 0.17611, 3, -112.99, -0.1, 0.00542 ], + "hull": 56, + "edges": [ 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, 60, 62, 62, 64, 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, 106, 106, 108, 108, 110, 110, 0, 0, 2, 58, 60, 2, 4, 56, 58, 62, 160, 160, 54, 64, 158, 158, 52, 66, 156, 156, 50, 68, 154, 154, 48, 46, 152, 152, 70, 72, 150, 150, 44, 42, 148, 148, 74, 76, 146, 146, 40, 38, 144, 144, 78, 80, 142, 142, 36, 34, 140, 140, 82, 84, 138, 138, 32, 30, 136, 136, 86, 88, 134, 134, 28, 26, 132, 132, 90, 92, 130, 130, 24, 22, 128, 128, 94, 96, 126, 126, 20, 18, 124, 124, 98, 100, 122, 122, 16, 14, 120, 120, 102, 12, 118, 118, 104, 106, 116, 116, 10, 8, 114, 114, 108, 110, 112, 112, 6 ], + "width": 68, + "height": 962 + } + }, + "vine-path": { + "vine-path": { + "type": "path", + "lengths": [ 223.68, 474.79, 780.31, 992.69, 1196.42, 2277.75 ], + "vertexCount": 18, + "vertices": [ 1, 14, -31.64, 22.49, 1, 1, 14, -2.73, -6.56, 1, 1, 14, 56.89, -69, 1, 1, 14, 115.57, 75.01, 1, 1, 14, 198.6, 53.37, 1, 2, 14, 332.76, 19.74, 0.8, 15, 36.41, 19.12999, 0.19999, 2, 14, 276.72, -68.37, 0.232, 15, -21.1, -68.01999, 0.76799, 1, 15, 96.09, -93.88, 1, 2, 15, 229.75, -122.63, 0.664, 16, -63.18, -122.45, 0.33599, 2, 15, 242.53, 29.31, 0.52, 16, -49.97, 29.45, 0.47999, 1, 16, 66.72, 38.65, 1, 2, 16, 183.42, 47.85, 0.80799, 17, -63.65, 48.41, 0.192, 2, 16, 177.29, -41.22, 0.77599, 17, -70.56, -40.61, 0.224, 2, 16, 265.5, -16.18, 0.488, 17, 17.86, -16.34, 0.51199, 2, 16, 343.25, 7.25, 0.21599, 17, 95.81, 6.41, 0.784, 1, 17, 138.78, 45.72, 1, 1, 17, 212.86, 5.44, 1, 1, 14, 1094.34, -1.02, 1 ] + } + } + } +}, +"animations": { + "animation": { + "slots": { + "vine": { + "color": [ + { + "time": 0, + "color": "ffcb73ff", + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 10.3666, "color": "fefaffff" } + ] + } + }, + "bones": { + "vine1": { + "scale": [ + { + "time": 0, + "x": 1, + "y": 0.183, + "curve": [ 0.166, 0.22, 0.598, 0.99 ] + }, + { + "time": 3.6333, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 11.4333, "x": 1, "y": 1.438 } + ] + }, + "vine-control1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 2.86, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.7, + "angle": -0.13, + "curve": [ 0.505, 0, 0.75, 1 ] + }, + { + "time": 6.4333, + "angle": 0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 9.6, "angle": 0.68 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.3333, + "x": 1, + "y": 0.792, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 7.6, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.568, 0.99 ] + }, + { "time": 11.4333, "x": 1, "y": 0.636 } + ] + }, + "vine-control2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 2.86, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.7, + "angle": -0.13, + "curve": [ 0.505, 0, 0.75, 1 ] + }, + { + "time": 6.4333, + "angle": 0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 9.6, "angle": 0.68 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.3333, + "x": 1, + "y": 0.791, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 7.6, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 11.4333, "x": 1, "y": 0.923 } + ] + }, + "vine-control3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 10.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.7, + "angle": -11.18, + "curve": [ 0.505, 0, 0.75, 1 ] + }, + { + "time": 6.4333, + "angle": -0.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 9.6, "angle": -5.23 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.3333, + "x": 1, + "y": 0.791, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 7.6, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 11.4333, "x": 1, "y": 0.923 } + ] + }, + "vine-control4": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 10.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.7, + "angle": -11.18, + "curve": [ 0.505, 0, 0.75, 1 ] + }, + { + "time": 6.4333, + "angle": 7.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 9.6, "angle": 2.71 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.3333, + "x": 1, + "y": 0.791, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 7.6, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 11.4333, "x": 1, "y": 0.923 } + ] + } + }, + "paths": { + "vine-path": { + "position": [ + { "time": 0, "position": -0.1 }, + { "time": 0.3333, "position": -0.025 } + ], + "spacing": [ + { "time": 0, "spacing": -100 }, + { + "time": 0.3333, + "spacing": -71.8, + "curve": [ 0.32, 0.18, 0.624, 0.6 ] + }, + { + "time": 3.1333, + "spacing": -13.199, + "curve": [ 0.251, 0.5, 0.557, 0.98 ] + }, + { "time": 6.7333, "spacing": 20.9 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-sfml/data/vine.png b/spine-sfml/data/vine.png new file mode 100644 index 000000000..15ad8b736 Binary files /dev/null and b/spine-sfml/data/vine.png differ diff --git a/spine-sfml/example/main.cpp b/spine-sfml/example/main.cpp index 5b9943cdb..50f414788 100644 --- a/spine-sfml/example/main.cpp +++ b/spine-sfml/example/main.cpp @@ -95,13 +95,10 @@ void spineboy () { Slot* headSlot = Skeleton_findSlot(skeleton, "head"); drawable->state->listener = callback; - if (false) { - AnimationState_setAnimationByName(drawable->state, 0, "test", true); - } else { - AnimationState_setAnimationByName(drawable->state, 0, "walk", true); - AnimationState_addAnimationByName(drawable->state, 0, "jump", false, 3); - AnimationState_addAnimationByName(drawable->state, 0, "run", true, 0); - } + AnimationState_setAnimationByName(drawable->state, 0, "test", true); + AnimationState_addAnimationByName(drawable->state, 0, "walk", true, 0); + AnimationState_addAnimationByName(drawable->state, 0, "jump", false, 3); + AnimationState_addAnimationByName(drawable->state, 0, "run", true, 0); sf::RenderWindow window(sf::VideoMode(640, 480), "Spine SFML - spineboy"); window.setFramerateLimit(60); @@ -207,7 +204,6 @@ void raptor () { Skeleton_updateWorldTransform(skeleton); AnimationState_setAnimationByName(drawable->state, 0, "walk", true); - AnimationState_setAnimationByName(drawable->state, 1, "empty", false); AnimationState_addAnimationByName(drawable->state, 1, "gungrab", false, 2); sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - raptor"); @@ -232,7 +228,137 @@ void raptor () { Atlas_dispose(atlas); } +void tank () { + // Load atlas, skeleton, and animations. + Atlas* atlas = Atlas_createFromFile("data/tank.atlas", 0); + SkeletonJson* json = SkeletonJson_create(atlas); + json->scale = 0.2f; + SkeletonData *skeletonData = SkeletonJson_readSkeletonDataFile(json, "data/tank.json"); + if (!skeletonData) { + printf("Error: %s\n", json->error); + exit(0); + } + SkeletonJson_dispose(json); + + SkeletonDrawable* drawable = new SkeletonDrawable(skeletonData); + drawable->timeScale = 1; + + Skeleton* skeleton = drawable->skeleton; + skeleton->x = 500; + skeleton->y = 590; + Skeleton_updateWorldTransform(skeleton); + + AnimationState_setAnimationByName(drawable->state, 0, "drive", true); + + sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - tank"); + window.setFramerateLimit(60); + sf::Event event; + sf::Clock deltaClock; + + while (window.isOpen()) { + while (window.pollEvent(event)) + if (event.type == sf::Event::Closed) window.close(); + + float delta = deltaClock.getElapsedTime().asSeconds(); + deltaClock.restart(); + drawable->update(delta); + window.clear(); + window.draw(*drawable); + window.display(); + } + + SkeletonData_dispose(skeletonData); + Atlas_dispose(atlas); +} + +void vine () { + // Load atlas, skeleton, and animations. + Atlas* atlas = Atlas_createFromFile("data/vine.atlas", 0); + SkeletonJson* json = SkeletonJson_create(atlas); + json->scale = 0.5f; + SkeletonData *skeletonData = SkeletonJson_readSkeletonDataFile(json, "data/vine.json"); + if (!skeletonData) { + printf("Error: %s\n", json->error); + exit(0); + } + SkeletonJson_dispose(json); + + SkeletonDrawable* drawable = new SkeletonDrawable(skeletonData); + drawable->timeScale = 1; + + Skeleton* skeleton = drawable->skeleton; + skeleton->x = 320; + skeleton->y = 590; + Skeleton_updateWorldTransform(skeleton); + + AnimationState_setAnimationByName(drawable->state, 0, "animation", true); + + sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - vine"); + window.setFramerateLimit(60); + sf::Event event; + sf::Clock deltaClock; + while (window.isOpen()) { + while (window.pollEvent(event)) + if (event.type == sf::Event::Closed) window.close(); + + float delta = deltaClock.getElapsedTime().asSeconds(); + deltaClock.restart(); + + drawable->update(delta); + + window.clear(); + window.draw(*drawable); + window.display(); + } + + SkeletonData_dispose(skeletonData); + Atlas_dispose(atlas); +} + +/** + * Used for debugging purposes during runtime development + */ +void test () { + // Load atlas, skeleton, and animations. + Atlas* atlas = Atlas_createFromFile("data/tank.atlas", 0); + SkeletonJson* json = SkeletonJson_create(atlas); + json->scale = 1; + SkeletonData *skeletonData = SkeletonJson_readSkeletonDataFile(json, "data/tank.json"); + if (!skeletonData) { + printf("Error: %s\n", json->error); + exit(0); + } + SkeletonJson_dispose(json); + + spSkeleton* skeleton = Skeleton_create(skeletonData); + spAnimationStateData* animData = spAnimationStateData_create(skeletonData); + spAnimationState* animState = spAnimationState_create(animData); + spAnimationState_setAnimationByName(animState, 0, "drive", true); + + + float d = 3; + for (int i = 0; i < 1; i++) { + spSkeleton_update(skeleton, d); + spAnimationState_update(animState, d); + spAnimationState_apply(animState, skeleton); + spSkeleton_updateWorldTransform(skeleton); + for (int ii = 0; ii < skeleton->bonesCount; ii++) { + spBone* bone = skeleton->bones[ii]; + printf("%s %f %f %f %f %f %f\n", bone->data->name, bone->a, bone->b, bone->c, bone->d, bone->worldX, bone->worldY); + } + printf("========================================\n"); + d += 0.1f; + } + + SkeletonData_dispose(skeletonData); + Skeleton_dispose(skeleton); + Atlas_dispose(atlas); +} + int main () { + test(); + vine(); + tank(); raptor(); spineboy(); goblins(); diff --git a/spine-sfml/src/spine/spine-sfml.cpp b/spine-sfml/src/spine/spine-sfml.cpp index c40da9441..1390461ae 100644 --- a/spine-sfml/src/spine/spine-sfml.cpp +++ b/spine-sfml/src/spine/spine-sfml.cpp @@ -176,7 +176,7 @@ void SkeletonDrawable::draw (RenderTarget& target, RenderStates states) const { } else if (attachment->type == ATTACHMENT_MESH) { MeshAttachment* mesh = (MeshAttachment*)attachment; - if (mesh->verticesCount > SPINE_MESH_VERTEX_COUNT_MAX) continue; + if (mesh->super.worldVerticesLength > SPINE_MESH_VERTEX_COUNT_MAX) continue; texture = (Texture*)((AtlasRegion*)mesh->rendererObject)->page->rendererObject; MeshAttachment_computeWorldVertices(mesh, slot, worldVertices); @@ -199,30 +199,6 @@ void SkeletonDrawable::draw (RenderTarget& target, RenderStates states) const { vertexArray->append(vertex); } - } else if (attachment->type == ATTACHMENT_WEIGHTED_MESH) { - WeightedMeshAttachment* mesh = (WeightedMeshAttachment*)attachment; - if (mesh->uvsCount > SPINE_MESH_VERTEX_COUNT_MAX) continue; - texture = (Texture*)((AtlasRegion*)mesh->rendererObject)->page->rendererObject; - WeightedMeshAttachment_computeWorldVertices(mesh, slot, worldVertices); - - 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); - vertex.color.r = r; - vertex.color.g = g; - vertex.color.b = b; - vertex.color.a = a; - - Vector2u size = texture->getSize(); - for (int i = 0; i < mesh->trianglesCount; ++i) { - int index = mesh->triangles[i] << 1; - vertex.position.x = worldVertices[index]; - vertex.position.y = worldVertices[index + 1]; - vertex.texCoords.x = mesh->uvs[index] * size.x; - vertex.texCoords.y = mesh->uvs[index + 1] * size.y; - vertexArray->append(vertex); - } } if (texture) { diff --git a/spine-starling/README.md b/spine-starling/README.md index 9b7500bc5..9fa83a91f 100644 --- a/spine-starling/README.md +++ b/spine-starling/README.md @@ -1,6 +1,6 @@ # spine-starling -The spine-starling runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using [Starling](http://gamua.com/starling/). spine-starling is based on [spine-as3](https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-as3). +The spine-starling runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using [Starling 2.0](http://gamua.com/starling/). spine-starling is based on [spine-as3](https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-as3). ## Licensing @@ -10,18 +10,34 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-starling works with data exported from Spine 3.1.08. Updating spine-starling to [v3.2](https://github.com/EsotericSoftware/spine-runtimes/issues/586) and [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. +spine-starling works with data exported from the latest Spine version. spine-starling supports all Spine features. spine-starling does not yet support loading the binary format. -## Setup +# Usage +1. Create a new Starling 2.0 project as per the [documentation]. +2. Download the Spine Runtimes source using [git](https://help.github.com/articles/set-up-git) or by downloading it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip). +3. Copy the sources in `spine-as3/spine-as3/src/` and `spine-starling/spine-starling/src/` into your project's source directory -1. Download the Spine Runtimes source using [git](https://help.github.com/articles/set-up-git) or by downloading it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip). -1. Using [FDT](http://fdt.powerflasher.com/), import the spine-as3 and spine-starling projects by choosing File -> Import -> Existing projects. For other IDEs you will need to create new projects and import the source. +## Example +The Spine AS3 example works on Windows, Linux and Mac OS X. This guide assumes you are using [FDT Free](http://fdt.powerflasher.com/) as your development environment. -Alternatively, the contents of the `spine-as3/src` and `spine-starling/src` directories can be copied into your project. +1. Download [FDT free](http://fdt.powerflasher.com/buy-download/) for your operating system. +3. Download and install Adobe Flash Player 22 with debugging support](https://www.adobe.com/support/flashplayer/debug_downloads.html#fp15) +2. Download the latest [Flex SDK](http://www.adobe.com/devnet/flex/flex-sdk-download.html). We assume it will be installed to some folder on your disk called `flex_sdk`. +3. Download the latest [Adobe AIR SDK](http://www.adobe.com/devnet/air/air-sdk-download.html) +4. Extract the AIR SDK contents, and copy them to your `flex_sdk` folder. This will replace the Adobe AIR version shipped with Flex. +5. Open FDT, go to `Preferences -> FDT -> Installed SDKs` +6. Click `Add` and browse to `flex_sdk` +7. Go to `File -> Import -> General -> Existing Projects into Workspace` +6. Browse to `spine-as3/`. You should see both the `spine-as3` and `spine-as3-example` project in the import dialog. Click `Finish` +7. Go to `File -> Import -> General -> Existing Projects into Workspace` +6. Browse to `spine-starling/`. You should see both the `spine-starling` and `spine-starling-example` project in the import dialog. Click `Finish` +8. Right click the `Main.as` file in `spine-starling-example/src/spine` in the FDT explorer and select `Debug As -> FDT SWF Application` + +**Note**: FDT Free does not allow project dependencies. If you modify the sources of `spine-as3` or `spine-starling`, you will have to compile the project to an `.swc` and place it in `spine-starling-example/libs`. ## Examples diff --git a/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.classpath b/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.classpath index e81cadb11..c35f9e0ac 100644 --- a/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.classpath +++ b/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.classpath @@ -3,7 +3,7 @@ lib frameworks/libs/player/{playerVersion}/playerglobal.swc src - lib/spine-starling.swc + lib/starling-2.0.1.swc lib/spine-as3.swc - lib/starling-1.7.swc + lib/spine-starling.swc diff --git a/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.core.prefs b/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.core.prefs index d1623e619..403470f21 100644 --- a/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.core.prefs +++ b/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.core.prefs @@ -3,6 +3,7 @@ com.powerflasher.fdt.core.CompilerArguments=-static-link-runtime-shared-librarie com.powerflasher.fdt.core.CompilerConstants=CONFIG\:\:AUTHOR\!"{user.name}"\nCONFIG\:\:DEBUG\!{debug} com.powerflasher.fdt.core.DefaultOutputFolder=bin com.powerflasher.fdt.core.DefaultPlayer=External_SWF_Viewer +com.powerflasher.fdt.core.IncludeTestResources=false com.powerflasher.fdt.core.Language=AS3 com.powerflasher.fdt.core.Manifests= com.powerflasher.fdt.core.PassClasspath=true @@ -13,7 +14,7 @@ com.powerflasher.fdt.core.PassManifests=true com.powerflasher.fdt.core.PassRsls=false com.powerflasher.fdt.core.PassSwcs=true com.powerflasher.fdt.core.PlatformType=WEB -com.powerflasher.fdt.core.PlayerVersion=11.1 +com.powerflasher.fdt.core.PlayerVersion=22.0 com.powerflasher.fdt.core.ProjectTypeHint=Web com.powerflasher.fdt.core.Runtime=Flash_Player com.powerflasher.fdt.core.SdkName=Flex 4.6.0 diff --git a/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.ui.sourceLocation.prefs b/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.ui.sourceLocation.prefs new file mode 100644 index 000000000..6cc33682a --- /dev/null +++ b/spine-starling/spine-starling-example/.settings/com.powerflasher.fdt.ui.sourceLocation.prefs @@ -0,0 +1,2 @@ +//lib/starling-2.0.1.swc=/Applications/flash/starling/src +eclipse.preferences.version=1 diff --git a/spine-starling/spine-starling-example/.settings/launch/spine-starling-example.launch b/spine-starling/spine-starling-example/.settings/launch/spine-starling-example.launch index fd22c65ed..a58d277bf 100644 --- a/spine-starling/spine-starling-example/.settings/launch/spine-starling-example.launch +++ b/spine-starling/spine-starling-example/.settings/launch/spine-starling-example.launch @@ -8,12 +8,15 @@ - + + + + - + diff --git a/spine-starling/spine-starling-example/.settings/org.eclipse.core.resources.prefs b/spine-starling/spine-starling-example/.settings/org.eclipse.core.resources.prefs index 99f26c020..c8ffeb576 100644 --- a/spine-starling/spine-starling-example/.settings/org.eclipse.core.resources.prefs +++ b/spine-starling/spine-starling-example/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,3 @@ eclipse.preferences.version=1 +encoding//src/spine/examples/TankExample.as=UTF-8 encoding/=UTF-8 diff --git a/spine-starling/spine-starling-example/lib/spine-as3.swc b/spine-starling/spine-starling-example/lib/spine-as3.swc index 3f90b6481..4b693db1b 100644 Binary files a/spine-starling/spine-starling-example/lib/spine-as3.swc and b/spine-starling/spine-starling-example/lib/spine-as3.swc differ diff --git a/spine-starling/spine-starling-example/lib/spine-starling.swc b/spine-starling/spine-starling-example/lib/spine-starling.swc index b22d2786c..f950b38a5 100644 Binary files a/spine-starling/spine-starling-example/lib/spine-starling.swc and b/spine-starling/spine-starling-example/lib/spine-starling.swc differ diff --git a/spine-starling/spine-starling-example/lib/starling-1.7.swc b/spine-starling/spine-starling-example/lib/starling-1.7.swc deleted file mode 100644 index dd36fb67a..000000000 Binary files a/spine-starling/spine-starling-example/lib/starling-1.7.swc and /dev/null differ diff --git a/spine-starling/spine-starling-example/lib/starling-2.0.1.swc b/spine-starling/spine-starling-example/lib/starling-2.0.1.swc new file mode 100644 index 000000000..eb24c27fa Binary files /dev/null and b/spine-starling/spine-starling-example/lib/starling-2.0.1.swc differ diff --git a/spine-starling/spine-starling-example/src/goblins-mesh.atlas b/spine-starling/spine-starling-example/src/goblins-mesh.atlas index d0ddb80c6..0f57a0f6a 100644 --- a/spine-starling/spine-starling-example/src/goblins-mesh.atlas +++ b/spine-starling/spine-starling-example/src/goblins-mesh.atlas @@ -1,5 +1,6 @@ -goblins-mesh.png +goblins.png +size: 1024,128 format: RGBA8888 filter: Linear,Linear repeat: none diff --git a/spine-starling/spine-starling-example/src/goblins-mesh.json b/spine-starling/spine-starling-example/src/goblins-mesh.json index 67a624a36..82da6832a 100644 --- a/spine-starling/spine-starling-example/src/goblins-mesh.json +++ b/spine-starling/spine-starling-example/src/goblins-mesh.json @@ -1,26 +1,27 @@ { +"skeleton": { "hash": "P7CQ4ImK+tcAICATgSttlZ5HOSM", "spine": "3.4.00", "width": 0, "height": 0, "images": "./images/" }, "bones": [ { "name": "root" }, { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, - { "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 }, + { "name": "torso", "parent": "hip", "length": 85.82, "rotation": 93.92, "x": -6.42, "y": 1.97 }, + { "name": "neck", "parent": "torso", "length": 18.38, "rotation": -1.51, "x": 81.67, "y": -6.34 }, + { "name": "head", "parent": "neck", "length": 68.28, "rotation": -13.92, "x": 20.93, "y": 11.59 }, + { "name": "left shoulder", "parent": "torso", "length": 35.43, "rotation": -156.96, "x": 74.04, "y": -20.38 }, + { "name": "left arm", "parent": "left shoulder", "length": 35.62, "rotation": 28.16, "x": 37.85, "y": -2.34 }, + { "name": "left upper leg", "parent": "hip", "length": 50.39, "rotation": -89.09, "x": 14.45, "y": 2.81 }, + { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "rotation": -16.65, "x": 56.34, "y": 0.98 }, + { "name": "left foot", "parent": "left lower leg", "length": 46.5, "rotation": 102.43, "x": 58.94, "y": -7.61 }, + { "name": "left hand", "parent": "left arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.07 }, { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, - { "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 }, - { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 }, - { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 }, - { "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 }, - { "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 }, - { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 }, - { "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 }, - { "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 }, - { "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 }, - { "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 }, - { "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 }, - { "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 }, - { "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 }, - { "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 }, - { "name": "spear1", "parent": "left hand", "length": 65.06, "x": 0.48, "y": 17.03, "rotation": 102.43 }, - { "name": "spear2", "parent": "spear1", "length": 61.41, "x": 65.05, "y": 0.04, "rotation": 0.9 }, - { "name": "spear3", "parent": "spear2", "length": 76.79, "x": 61.88, "y": 0.57, "rotation": -0.9 } + { "name": "right shoulder", "parent": "torso", "length": 37.24, "rotation": 133.88, "x": 76.02, "y": 18.14 }, + { "name": "right arm", "parent": "right shoulder", "length": 36.74, "rotation": 36.32, "x": 37.6, "y": 0.31 }, + { "name": "right upper leg", "parent": "hip", "length": 42.45, "rotation": -97.49, "x": -20.07, "y": -6.83 }, + { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "rotation": -14.34, "x": 42.99, "y": -0.61 }, + { "name": "right foot", "parent": "right lower leg", "length": 45.45, "rotation": 110.3, "x": 64.88, "y": 0.04 }, + { "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.35, "x": 36.9, "y": 0.34 }, + { "name": "spear1", "parent": "left hand", "length": 65.06, "rotation": 102.43, "x": 0.48, "y": 17.03 }, + { "name": "spear2", "parent": "spear1", "length": 61.41, "rotation": 0.9, "x": 65.05, "y": 0.04 }, + { "name": "spear3", "parent": "spear2", "length": 76.79, "rotation": -0.9, "x": 61.88, "y": 0.57 } ], "slots": [ { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" }, @@ -52,12 +53,12 @@ "left hand item": { "dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 }, "spear": { - "type": "skinnedmesh", + "type": "mesh", "uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.76608, 0.21781, 0.75642, 0.386, 0.74723, 0.54607, 0.72117, 1, 0.28838, 1, 0.24208, 0.54327, 0.22589, 0.38361, 0.2089, 0.21605, 0.20043, 0.13242, 0, 0.11519, 0.4527, 0, 0.58399, 0 ], "triangles": [ 4, 7, 3, 6, 7, 4, 5, 6, 4, 10, 11, 12, 1, 13, 0, 12, 13, 1, 10, 12, 1, 9, 10, 1, 2, 9, 1, 8, 9, 2, 3, 8, 2, 7, 8, 3 ], - "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.51, 20, -0.31, -6.16, 0.48, 2, 18, 64.73, -5.03, 0.5, 19, -0.4, -5.06, 0.49, 1, 16, 4.56, 23.91, 1, 1, 16, 41.7, -138.95, 1, 1, 16, 32.42, -141.1, 1, 1, 16, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.5, 19, 0.53, 6.59, 0.49, 2, 19, 62.18, 6.66, 0.51, 20, 0.2, 6.09, 0.48, 1, 20, 30.96, 6.61, 1, 1, 20, 37.26, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], - "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], + "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.5116, 20, -0.31, -6.16, 0.48839, 2, 18, 64.73, -5.03, 0.50272, 19, -0.4, -5.06, 0.49728, 1, 10, 4.56, 23.91, 1, 1, 10, 41.7, -138.95, 1, 1, 10, 32.41999, -141.1, 1, 1, 10, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.50272, 19, 0.52999, 6.59, 0.49728, 2, 19, 62.18, 6.66, 0.5116, 20, 0.2, 6.09, 0.48839, 1, 20, 30.96, 6.61, 1, 1, 20, 37.25999, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], "hull": 14, + "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], "width": 22, "height": 368 } @@ -66,10 +67,10 @@ "dagger": { "type": "mesh", "uvs": [ 0.78091, 0.38453, 1, 0.38405, 1, 0.44881, 0.73953, 0.4687, 0.74641, 0.81344, 0.34022, 1, 0.15434, 1, 0.11303, 0.78858, 0.23007, 0.47367, 0, 0.45047, 0, 0.38621, 0.22367, 0.38573, 0.24384, 0, 1, 0 ], - "triangles": [ 5, 7, 8, 4, 8, 3, 4, 5, 8, 5, 6, 7, 9, 11, 8, 8, 11, 3, 3, 0, 2, 3, 11, 0, 9, 10, 11, 0, 1, 2, 11, 12, 0, 0, 12, 13 ], + "triangles": [ 0, 12, 13, 11, 12, 0, 0, 1, 2, 9, 10, 11, 3, 11, 0, 3, 0, 2, 8, 11, 3, 9, 11, 8, 5, 6, 7, 4, 5, 8, 4, 8, 3, 5, 7, 8 ], "vertices": [ 15.49, -12.82, 21.13, -13.57, 20.16, -20.49, 13.15, -21.67, 8.13, -58.56, -5.13, -77.04, -9.92, -76.36, -7.79, -53.6, -0.03, -20.36, -5.6, -17.04, -4.63, -10.17, 1.12, -10.93, 7.46, 30.24, 26.93, 27.49 ], - "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], "hull": 14, + "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], "width": 26, "height": 108 } @@ -88,9 +89,9 @@ "type": "mesh", "uvs": [ 0, 0.60494, 0.14172, 0.5145, 0.24218, 0.55229, 0.32667, 0.67806, 0.37969, 0.79352, 0.53505, 0.93014, 0.86056, 1, 0.94071, 0.94169, 0.92098, 0.69923, 0.9888, 0.65497, 0.99003, 0.51643, 0.89632, 0.43561, 0.94487, 0.41916, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80754, 0.16044, 0.66698, 0.01997, 0.4734, 0.01805, 0.29215, 0.19893, 0.25392, 0.31823, 0.09117, 0.324, 0, 0.44331, 0.43271, 0.69153, 0.466, 0.47794, 0.35996, 0.31246, 0.73473, 0.68593, 0.72215, 0.57425, 0.88179, 0.5583, 0.80267, 0.51015 ], "triangles": [ 5, 27, 6, 7, 27, 8, 7, 6, 27, 4, 24, 5, 5, 24, 27, 4, 3, 24, 27, 29, 8, 8, 29, 9, 24, 28, 27, 24, 25, 28, 24, 3, 25, 29, 28, 30, 29, 27, 28, 25, 2, 26, 25, 3, 2, 9, 29, 10, 0, 23, 1, 28, 25, 30, 29, 11, 10, 29, 30, 11, 2, 21, 26, 2, 1, 21, 23, 22, 1, 1, 22, 21, 30, 16, 11, 30, 17, 16, 30, 25, 17, 17, 26, 18, 18, 26, 19, 26, 17, 25, 11, 15, 12, 11, 16, 15, 12, 15, 13, 15, 14, 13, 21, 20, 26, 26, 20, 19 ], - "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.46, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.6, 23.41, 35.89, 40.17, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.8, -24.31, 17.2, -40.65, 20.68, -33.02 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], + "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.45999, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.59999, 23.41, 35.89, 40.16999, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.79999, -24.31, 17.2, -40.65, 20.68, -33.02 ], "hull": 24, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], "width": 103, "height": 66 } @@ -101,9 +102,9 @@ "type": "mesh", "uvs": [ 0.68992, 0.29284, 1, 0.46364, 1, 0.74643, 0.84089, 1, 0.66344, 1, 0.33765, 0.64284, 0, 0.44124, 0, 0, 0.34295, 0 ], "triangles": [ 3, 4, 2, 4, 5, 2, 5, 0, 2, 0, 1, 2, 0, 5, 8, 5, 6, 8, 6, 7, 8 ], - "vertices": [ 18.6, 8.81, 32.19, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], + "vertices": [ 18.6, 8.81, 32.18999, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], "width": 37, "height": 35 } @@ -113,10 +114,10 @@ "name": "goblin/left-foot", "type": "mesh", "uvs": [ 0.15733, 0.31873, 0.08195, 0.78502, 0.15884, 0.99366, 0.41633, 0.96804, 0.68822, 0.97636, 1, 0.96388, 0.99385, 0.73501, 0.85294, 0.51862, 0.61479, 0.31056, 0.46991, 0, 0.48032, 0.75604, 0.75994, 0.77706 ], - "triangles": [ 2, 1, 3, 3, 10, 4, 4, 11, 5, 4, 10, 11, 3, 1, 10, 11, 6, 5, 1, 0, 10, 11, 7, 6, 11, 10, 7, 10, 8, 7, 10, 0, 8, 0, 9, 8 ], + "triangles": [ 0, 9, 8, 10, 0, 8, 10, 8, 7, 11, 10, 7, 11, 7, 6, 1, 0, 10, 11, 6, 5, 3, 1, 10, 4, 10, 11, 4, 11, 5, 3, 10, 4, 2, 1, 3 ], "vertices": [ 2.28, 13.07, -1.76, -1.64, 3.59, -7.8, 20.25, -6.04, 37.91, -5.27, 58.12, -3.71, 57.31, 3.34, 47.78, 9.51, 31.95, 15.05, 21.99, 24.11, 24.03, 0.75, 42.21, 1.16 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], "width": 65, "height": 31 } @@ -126,10 +127,10 @@ "name": "goblin/left-hand", "type": "mesh", "uvs": [ 0.518, 0.12578, 1, 0.16285, 0.99788, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42792, 0.17601, 0, 0.43567, 0 ], - "triangles": [ 2, 3, 0, 4, 5, 0, 3, 4, 0, 0, 7, 8, 6, 7, 0, 0, 5, 6, 2, 0, 1 ], - "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.48, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], - "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], + "triangles": [ 2, 0, 1, 0, 5, 6, 6, 7, 0, 0, 7, 8, 3, 4, 0, 4, 5, 0, 2, 3, 0 ], + "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.47999, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], "hull": 9, + "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], "width": 36, "height": 41 } @@ -139,10 +140,10 @@ "name": "goblin/left-lower-leg", "type": "mesh", "uvs": [ 0.95508, 0.20749, 0.81927, 0.65213, 0.94754, 0.77308, 0.67842, 0.97346, 0.46463, 1, 0.26845, 1, 0.04963, 0.90706, 0.2106, 0.60115, 0.07478, 0.40195, 0.18545, 0, 0.28857, 0 ], - "triangles": [ 1, 3, 4, 7, 4, 5, 5, 6, 7, 3, 1, 2, 1, 4, 7, 0, 1, 10, 7, 8, 10, 1, 7, 10, 10, 8, 9 ], - "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.19, -18.29 ], - "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], + "triangles": [ 10, 8, 9, 1, 7, 10, 7, 8, 10, 0, 1, 10, 1, 4, 7, 3, 1, 2, 5, 6, 7, 7, 4, 5, 1, 3, 4 ], + "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.18999, -18.29 ], "hull": 11, + "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], "width": 33, "height": 70 } @@ -153,9 +154,9 @@ "type": "mesh", "uvs": [ 0.7377, 0.40692, 1, 0.75237, 1, 1, 0.62046, 1, 0.26184, 0.56601, 0, 0.29783, 0, 0, 0.44115, 0 ], "triangles": [ 3, 1, 2, 3, 0, 1, 3, 4, 0, 4, 7, 0, 4, 5, 7, 5, 6, 7 ], - "vertices": [ 15.18, 5.74, 32.17, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.74, -4.66, 6.54 ], - "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], + "vertices": [ 15.18, 5.74, 32.16999, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.73999, -4.66, 6.54 ], "hull": 8, + "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], "width": 29, "height": 44 } @@ -165,10 +166,10 @@ "name": "goblin/left-upper-leg", "type": "mesh", "uvs": [ 1, 0.12167, 1, 0.54873, 0.91067, 0.78907, 0.76567, 1, 0.3087, 0.9579, 0, 0.68777, 0, 0.219, 0.51961, 0, 0.87552, 0 ], - "triangles": [ 3, 4, 2, 2, 4, 1, 1, 4, 7, 4, 5, 7, 0, 1, 7, 5, 6, 7, 7, 8, 0 ], + "triangles": [ 7, 8, 0, 5, 6, 7, 0, 1, 7, 4, 5, 7, 1, 4, 7, 2, 4, 1, 3, 4, 2 ], "vertices": [ 2.33, 13.06, 33.5, 12.57, 51, 9.34, 66.32, 4.31, 63, -10.71, 43.13, -20.58, 8.91, -20.04, -6.79, -2.64, -6.61, 9.1 ], - "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], "hull": 9, + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], "width": 33, "height": 73 } @@ -179,9 +180,9 @@ "type": "mesh", "uvs": [ 0.81967, 0.27365, 0.92101, 0.82048, 0.47134, 1, 0.15679, 0.9354, 0, 0.7556, 0.19268, 0.51833, 0.15468, 0.35706, 0, 0.21989, 0.13568, 0, 0.68878, 0, 0.70145, 0.53872 ], "triangles": [ 3, 5, 2, 2, 10, 1, 2, 5, 10, 3, 4, 5, 10, 0, 1, 0, 10, 6, 10, 5, 6, 7, 8, 6, 6, 9, 0, 6, 8, 9 ], - "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.05, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], - "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], + "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.04999, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], "hull": 10, + "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], "width": 36, "height": 41 } @@ -191,10 +192,10 @@ "name": "goblin/pelvis", "type": "mesh", "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], - "triangles": [ 1, 3, 0, 1, 2, 3 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], "vertices": [ 25.38, -20.73, -36.61, -20.73, -36.61, 22.26, 25.38, 22.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "width": 62, "height": 43 } @@ -205,9 +206,9 @@ "type": "mesh", "uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24384, 1, 0, 0.86558, 0.20822, 0.10919, 0.50903, 0, 0.85342, 0 ], "triangles": [ 1, 2, 6, 6, 2, 5, 1, 6, 0, 4, 5, 3, 2, 3, 5, 6, 7, 0 ], - "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.18 ], - "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], + "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.17999 ], "hull": 8, + "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], "width": 23, "height": 50 } @@ -217,10 +218,10 @@ "name": "goblin/right-foot", "type": "mesh", "uvs": [ 0.40851, 0.0047, 0.59087, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97532, 0.89391, 0.90385, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65984, 0, 0.46577, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71257, 0.715, 0.74681 ], - "triangles": [ 4, 5, 15, 7, 14, 6, 5, 6, 15, 6, 14, 15, 14, 7, 9, 7, 8, 9, 15, 3, 4, 9, 10, 14, 15, 2, 3, 15, 14, 2, 14, 10, 1, 12, 1, 11, 1, 12, 13, 14, 1, 2, 1, 13, 0, 1, 10, 11 ], + "triangles": [ 1, 10, 11, 1, 13, 0, 14, 1, 2, 1, 12, 13, 12, 1, 11, 14, 10, 1, 15, 14, 2, 15, 2, 3, 9, 10, 14, 15, 3, 4, 7, 8, 9, 14, 7, 9, 6, 14, 15, 5, 6, 15, 7, 14, 6, 4, 5, 15 ], "vertices": [ 17.36, 25.99, 29.13, 15.44, 39.89, 10.8, 48.14, 7.24, 53.84, -2.38, 49.43, -6, 34.84, -6.39, 16.84, -6.87, -2.4, -7.38, -7.58, -3.86, -7.78, 3.7, -7.95, 10.1, -2.57, 22.36, 10.84, 25.97, 22.14, 2.75, 37.31, 2.03 ], - "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], "hull": 14, + "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], "width": 63, "height": 33 } @@ -230,10 +231,10 @@ "name": "goblin/right-hand", "type": "mesh", "uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89823, 0.82004, 0.8259, 0.74285, 0.84223, 0.49993, 0.96356, 0.34102, 0.66023, 0 ], - "triangles": [ 4, 7, 5, 5, 7, 6, 4, 3, 7, 3, 2, 8, 7, 3, 8, 8, 1, 10, 8, 2, 1, 0, 10, 1, 8, 10, 9 ], - "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.88, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "triangles": [ 8, 10, 9, 0, 10, 1, 8, 2, 1, 8, 1, 10, 7, 3, 8, 3, 2, 8, 4, 3, 7, 5, 7, 6, 4, 7, 5 ], + "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.87999, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], "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 ], "width": 36, "height": 37 } @@ -243,10 +244,10 @@ "name": "goblin/right-hand", "type": "mesh", "uvs": [ 0.88538, 0.22262, 0.76167, 0.3594, 0.75088, 0.78308, 0.95326, 0.84981, 1, 0.60302 ], - "triangles": [ 3, 2, 4, 2, 1, 4, 1, 0, 4 ], + "triangles": [ 1, 0, 4, 2, 1, 4, 3, 2, 4 ], "vertices": [ -2.82, 15.97, 2.4, 11.71, 18.08, 11.9, 20.27, 19.27, 11.09, 20.62 ], - "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], "hull": 5, + "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], "width": 36, "height": 37 } @@ -256,10 +257,10 @@ "name": "goblin/right-lower-leg", "type": "mesh", "uvs": [ 1, 0.27261, 0.81312, 0.52592, 0.79587, 0.71795, 0.95544, 0.80988, 0.85193, 0.95493, 0.47241, 1, 0.14033, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30325, 0.60611, 0 ], - "triangles": [ 4, 5, 2, 2, 5, 8, 5, 6, 8, 6, 7, 8, 4, 2, 3, 2, 8, 1, 8, 9, 1, 9, 10, 1, 1, 10, 0 ], - "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.1, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.77, -1.03, 58.99, -9.19, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], + "triangles": [ 1, 10, 0, 9, 10, 1, 8, 9, 1, 2, 8, 1, 4, 2, 3, 6, 7, 8, 5, 6, 8, 2, 5, 8, 4, 5, 2 ], + "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.09999, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.76999, -1.03, 58.99, -9.18999, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], "width": 36, "height": 76 } @@ -271,8 +272,8 @@ "uvs": [ 0.62008, 0.03708, 0.92131, 0.09048, 1, 0.38319, 0.72049, 0.6937, 0.31656, 1, 0, 1, 0, 0.75106, 0.28233, 0.49988 ], "triangles": [ 4, 6, 7, 4, 7, 3, 4, 5, 6, 7, 0, 3, 2, 0, 1, 2, 3, 0 ], "vertices": [ -3.17, -11.05, -9, -0.57, -1.01, 10.33, 16.69, 11.17, 37.41, 8.2, 45.45, -1.16, 36.95, -8.46, 21.2, -7.47 ], - "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], "hull": 8, + "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], "width": 39, "height": 45 } @@ -282,10 +283,10 @@ "name": "goblin/right-upper-leg", "type": "mesh", "uvs": [ 0.27018, 0, 0.11618, 0.18177, 0, 0.70688, 0, 0.89577, 0.26668, 1, 0.48718, 1, 0.67618, 0.83532, 1, 0.5161, 1, 0.25543, 0.74618, 0.0571 ], - "triangles": [ 5, 4, 6, 6, 4, 2, 4, 3, 2, 2, 1, 6, 6, 1, 9, 6, 9, 7, 9, 1, 0, 9, 8, 7 ], - "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.51, 10.18, 19.13, 18.47, 2.85, 16.32, -8.4, 6.14 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "triangles": [ 9, 8, 7, 9, 1, 0, 6, 9, 7, 6, 1, 9, 2, 1, 6, 4, 3, 2, 6, 4, 2, 5, 4, 6 ], + "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.50999, 10.18, 19.12999, 18.46999, 2.85, 16.32, -8.39999, 6.14 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], "width": 34, "height": 63 } @@ -296,9 +297,9 @@ "type": "mesh", "uvs": [ 0, 0.33287, 0.15945, 0.46488, 0.15761, 0.60314, 0.15502, 0.79806, 0.32807, 0.93478, 0.6875, 1, 0.80731, 1, 1, 0.77763, 1, 0.66147, 1, 0.56703, 0.93207, 0.4771, 0.86944, 0.39416, 0.83837, 0.226, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78734, 0.86249, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38316, 0.77692, 0.73446, 0.66478, 0.51012 ], "triangles": [ 5, 16, 6, 6, 16, 7, 4, 17, 5, 5, 17, 16, 4, 3, 17, 17, 21, 16, 16, 21, 7, 3, 2, 17, 21, 19, 18, 21, 17, 19, 17, 2, 19, 21, 8, 7, 21, 18, 8, 18, 9, 8, 19, 22, 18, 18, 10, 9, 18, 22, 10, 2, 1, 19, 19, 20, 22, 19, 1, 20, 22, 11, 10, 22, 20, 11, 20, 1, 14, 20, 12, 11, 1, 0, 14, 20, 13, 12, 20, 14, 13, 0, 15, 14 ], - "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.88, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], + "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.87999, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], "hull": 16, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], "width": 68, "height": 96 } @@ -308,10 +309,10 @@ "name": "goblin/undie-straps", "type": "mesh", "uvs": [ 0.36097, 0.44959, 0.66297, 0.60591, 1, 0.19486, 1, 0.57117, 0.75897, 1, 0.38697, 1, 0, 0.26433, 0, 0, 0.12497, 0 ], - "triangles": [ 5, 1, 4, 4, 1, 3, 6, 0, 5, 5, 0, 1, 3, 1, 2, 6, 8, 0, 6, 7, 8 ], - "vertices": [ -10.56, 12.87, 6.53, 9.9, 25.62, 17.71, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], + "triangles": [ 6, 7, 8, 6, 8, 0, 3, 1, 2, 5, 0, 1, 6, 0, 5, 4, 1, 3, 5, 1, 4 ], + "vertices": [ -10.56, 12.87, 6.53, 9.89999, 25.62, 17.70999, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], "width": 55, "height": 19 } @@ -321,10 +322,10 @@ "name": "goblin/undies", "type": "mesh", "uvs": [ 0, 0.32029, 0.14893, 0.59457, 0.22437, 1, 0.35909, 1, 0.50998, 1, 0.79559, 0.58453, 0.9842, 0.28015, 1, 0.00588, 0.46957, 0.17646, 0, 0.03933, 0.48843, 0.59122, 0.48114, 0.43099 ], - "triangles": [ 3, 10, 4, 4, 10, 5, 10, 3, 1, 3, 2, 1, 1, 11, 10, 1, 0, 11, 10, 11, 5, 5, 11, 6, 0, 8, 11, 11, 8, 6, 0, 9, 8, 6, 8, 7 ], - "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.59, 22.22, 6.11, 22.92, 14.05, 3.75, 9.44, -13.08, 13.71, 4.21, -2.59, 4.03, 2.05 ], - "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], + "triangles": [ 6, 8, 7, 0, 9, 8, 11, 8, 6, 0, 8, 11, 5, 11, 6, 10, 11, 5, 1, 0, 11, 1, 11, 10, 3, 2, 1, 10, 3, 1, 4, 10, 5, 3, 10, 4 ], + "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.58999, 22.22, 6.11, 22.92, 14.05, 3.75, 9.43999, -13.08, 13.71, 4.21, -2.58999, 4.03, 2.05 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], "width": 36, "height": 29 } @@ -757,7 +758,7 @@ ] } }, - "ffd": { + "deform": { "default": { "left hand item": { "spear": [ @@ -769,19 +770,19 @@ { "time": 0, "offset": 26, - "vertices": [ 2.34, 0.14 ], + "vertices": [ 2.34754, 0.14469 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.5, "offset": 8, - "vertices": [ -1.19, 4.31, 0.07, 6.41, 1.66, 6.18, 1.75, 3.59 ], + "vertices": [ -1.19415, 4.31531, 0.07279, 6.41351, 1.66048, 6.18882, 1.75232, 3.59555 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1, "offset": 26, - "vertices": [ 2.34, 0.14 ] + "vertices": [ 2.34754, 0.14469 ] } ] } @@ -795,22 +796,22 @@ }, { "time": 0.2, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08, -1.08, 0.08, -1.08, 0.08, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08 ], + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391, -1.08534, 0.08391, -1.08534, 0.08391, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.3666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09, 1.47, 0.09, 1.47, 0.09, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09 ], + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017, 1.47305, 0.09017, 1.47305, 0.09017, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017 ], "curve": [ 0.621, 0, 0.75, 1 ] }, { "time": 0.7, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17, -1.17, -0.17, -1.17, -0.17, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17 ], + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183, -1.1755, -0.17182, -1.1755, -0.17183, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.8666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08, 0.38, 0.08, 0.38, 0.08, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08 ], + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446, 0.38687, 0.08446, 0.38687, 0.08446, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1 } @@ -821,35 +822,35 @@ { "time": 0, "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] }, { "time": 0.1333 }, { "time": 0.2333, "offset": 8, - "vertices": [ -3.96, -2.34, -5.8, -12.47, -2.23, -12.99, 2.02, -9.1, 0, 0, 0, 0, 0, 0, -1.35, -5.28 ] + "vertices": [ -3.96072, -2.34594, -5.80445, -12.47629, -2.23129, -12.99037, 2.02941, -9.1036, 0, 0, 0, 0, 0, 0, -1.35254, -5.2883 ] }, { "time": 0.3666, "offset": 8, - "vertices": [ 0.66, 0.33, 0.33, 2.69, -0.48, 2.54, -1.13, 1.38, 0, 0, 0, 0, 0, 0, -0.11, 0.79 ] + "vertices": [ 0.66504, 0.33548, 0.33902, 2.69014, -0.4817, 2.54524, -1.13592, 1.38562, 0, 0, 0, 0, 0, 0, -0.11907, 0.79273 ] }, { "time": 0.5, "curve": "stepped" }, { "time": 0.6333 }, { "time": 0.7333, "offset": 8, - "vertices": [ -2.97, 9.4, -6.91, 19.92, -10.55, 18.41, -12.37, 12.38, -4.72, 6.3, 0, 0, -1.48, 4.88, -7.06, 10.7 ] + "vertices": [ -2.97737, 9.40254, -6.91661, 19.92794, -10.55287, 18.41085, -12.37161, 12.38473, -4.72606, 6.30798, 0, 0, -1.48902, 4.88944, -7.06773, 10.70101 ] }, { "time": 0.8333, "offset": 6, - "vertices": [ 1.05, 1.56, -2.52, 7.99, -5.52, 17.14, -8.93, 15.79, -10.73, 10.22, -4.23, 5.36, 0, 0, 0, 0, -5.83, 8.55 ] + "vertices": [ 1.05318, 1.56361, -2.52722, 7.9974, -5.5203, 17.14136, -8.93317, 15.79635, -10.73747, 10.22055, -4.23801, 5.36992, 0, 0, 0, 0, -5.83147, 8.55531 ] }, { "time": 1, "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] } ] }, @@ -859,22 +860,22 @@ { "time": 0.1333, "offset": 6, - "vertices": [ -0.68, -4.13 ] + "vertices": [ -0.68989, -4.13283 ] }, { "time": 0.3333, "offset": 6, - "vertices": [ -1.04, -3.1 ] + "vertices": [ -1.04945, -3.10476 ] }, { "time": 0.7, "offset": 6, - "vertices": [ -1.42, -6.3 ] + "vertices": [ -1.4245, -6.30616 ] }, { "time": 0.8666, "offset": 6, - "vertices": [ -1.13, -1.79 ] + "vertices": [ -1.13541, -1.79035 ] }, { "time": 1 } ] @@ -885,38 +886,38 @@ { "time": 0.1333, "offset": 2, - "vertices": [ -2.81, 2.63, -2.35, 3.89, -1.99, 4.86, -0.93, 5.57, -0.48, 5.09, -0.34, 3.42, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31, 1.91, -1.32, 3.65 ] + "vertices": [ -2.81258, 2.63114, -2.35238, 3.89441, -1.99921, 4.8639, -0.93273, 5.57982, -0.48886, 5.09854, -0.34812, 3.42912, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31305, 1.91371, -1.32986, 3.65703 ] }, { "time": 0.2333, "offset": 2, - "vertices": [ -6.39, 6.41, -7.74, 8.27, -7.02, 11.35, -4.03, 13.93, -2.5, 12.62, -1.46, 7.58, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84, 2.61, -4.53, 7.92 ] + "vertices": [ -6.39088, 6.41245, -7.74575, 8.27191, -7.02471, 11.35894, -4.0347, 13.93454, -2.50399, 12.62962, -1.46124, 7.58915, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84765, 2.61215, -4.53955, 7.92357 ] }, { "time": 0.3, "offset": 2, - "vertices": [ -8.27, 6.68, -9.29, 10.13, -8.62, 14.71, -4.58, 18.81, -2.2, 17.1, -0.07, 9.9, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94, 2.38, -4.59, 10.01 ] + "vertices": [ -8.27184, 6.68821, -9.29764, 10.13797, -8.62231, 14.71339, -4.58629, 18.81939, -2.20304, 17.10709, -0.07794, 9.9046, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94624, 2.38007, -4.59398, 10.01888 ] }, { "time": 0.3666, "offset": 2, - "vertices": [ -10.47, 9.44, -13.36, 12.4, -14.32, 16.94, -9.24, 23.55, -5.51, 21.51, -1.19, 11.53, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14, 2.29, -6.63, 11.37 ] + "vertices": [ -10.47683, 9.44175, -13.36882, 12.40982, -14.32568, 16.94392, -9.24462, 23.55674, -5.51711, 21.51377, -1.19581, 11.53192, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14847, 2.29389, -6.63418, 11.37127 ] }, { "time": 0.5, "offset": 2, - "vertices": [ -5.42, 4.36, -10.59, 7.04, -11.64, 11.55, -6.19, 20.12, -1.45, 18.05, 4.86, 6.41, 2.81, 0.27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96, 4.94 ] + "vertices": [ -5.42473, 4.36854, -10.59004, 7.04468, -11.64251, 11.55845, -6.19665, 20.12805, -1.45497, 18.05411, 4.86619, 6.41678, 2.81462, 0.27601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96412, 4.94829 ] }, { "time": 0.6333 }, { "time": 0.7333, "offset": 4, - "vertices": [ 1.31, -6.84, -0.87, -12.54, -5.98, -14.08, -7.15, -11.63, -5.67, -4.83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06, -6.93 ] + "vertices": [ 1.31462, -6.84099, -0.87905, -12.54479, -5.9851, -14.08367, -7.15892, -11.63193, -5.6792, -4.83544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06163, -6.93844 ] }, { "time": 0.8, "offset": 4, - "vertices": [ 0.65, -3.42, -0.43, -6.27, -2.99, -7.04, -3.57, -5.81, -2.83, -2.41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79, -1.28, 0, 0, 0, 0, -1.03, -3.46 ] + "vertices": [ 0.65731, -3.42049, -0.43952, -6.27239, -2.99255, -7.04183, -3.57946, -5.81596, -2.83959, -2.41772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79687, -1.2802, 0, 0, 0, 0, -1.03081, -3.46922 ] }, { "time": 0.8666 } ] @@ -926,13 +927,13 @@ { "time": 0, "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] }, { "time": 0.5 }, { "time": 1, "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] } ] }, @@ -942,7 +943,7 @@ { "time": 0.6, "offset": 6, - "vertices": [ 1.8, -1.56 ] + "vertices": [ 1.80396, -1.56552 ] }, { "time": 1 } ] @@ -951,17 +952,17 @@ "right upper leg": [ { "time": 0, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] }, { "time": 0.3333 }, { "time": 0.8666, "offset": 14, - "vertices": [ 0.13, -2.35, -1.33, -5.99, -1.35, -4.43 ] + "vertices": [ 0.13424, -2.35377, -1.33317, -5.99572, -1.35861, -4.43323 ] }, { "time": 1, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] } ] }, @@ -970,37 +971,37 @@ { "time": 0, "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] }, { "time": 0.1333, "offset": 14, - "vertices": [ 1.31, -0.59, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + "vertices": [ 1.31318, -0.59727, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] }, { "time": 0.3, "offset": 14, - "vertices": [ 6.03, -3.13, 7.55, -1.38, 6.79, 0.31, 4.23, 1.14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07, -5.16, 0, 0, 4, 0.27, 0, 0, 0, 0, 3.43, -3.52 ] + "vertices": [ 6.03761, -3.13561, 7.55475, -1.38111, 6.79747, 0.31171, 4.23503, 1.14012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07575, -5.16824, 0, 0, 4.0041, 0.27245, 0, 0, 0, 0, 3.4376, -3.52286 ] }, { "time": 0.5, "offset": 14, - "vertices": [ 2.25, -0.87, 2.57, -0.56, 3.17, -0.57, 1.48, 0.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22, -4.43, 0, 0, 1.48, 0.01, 0, 0, 0, 0, 0.31, -3.28, -1.53, 0.17 ] + "vertices": [ 2.25942, -0.87202, 2.575, -0.56861, 3.17112, -0.57003, 1.48704, 0.9924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22451, -4.43862, 0, 0, 1.48691, 0.01586, 0, 0, 0, 0, 0.31388, -3.28095, -1.53797, 0.17803 ] }, { "time": 0.6333, "offset": 14, - "vertices": [ 0.75, -1.51, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + "vertices": [ 0.75002, -1.51701, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] }, { "time": 0.8666, "offset": 14, - "vertices": [ 0.62, -1.26, 0.38, -2.2, 3.25, -0.5, 2.41, 2.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.66, -3.1, 0, 0, 2.3, -1.15, 0, 0, 0, 0, -0.07, -3.63, -0.93, 0.1 ] + "vertices": [ 0.62202, -1.26262, 0.38489, -2.20701, 3.25048, -0.50042, 2.41108, 2.39315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6639, -3.10099, 0, 0, 2.30655, -1.15196, 0, 0, 0, 0, -0.07676, -3.63497, -0.9321, 0.1079 ] }, { "time": 1, "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] } ] }, @@ -1009,32 +1010,32 @@ { "time": 0, "offset": 2, - "vertices": [ -1.77, 0.54, -0.96, -1.03, -0.39, -0.24, -1.77, 0.54 ] + "vertices": [ -1.77696, 0.54759, -0.96145, -1.03793, -0.39148, -0.24071, -1.77696, 0.54759 ] }, { "time": 0.1333, "offset": 2, - "vertices": [ -2.25, -1.03, -1.49, -4.23, -0.74, -2.84, -1.9, 0.54 ] + "vertices": [ -2.25683, -1.03177, -1.49719, -4.23861, -0.74469, -2.84906, -1.90072, 0.54477 ] }, { "time": 0.3333, "offset": 2, - "vertices": [ -2.37, -0.05, -0.49, 0.19, -0.9, 1.16, -1.6, 2.7, 0.96, 0.8 ] + "vertices": [ -2.37974, -0.05431, -0.49433, 0.19436, -0.90861, 1.16519, -1.60956, 2.70798, 0.96186, 0.80615 ] }, { "time": 0.7, "offset": 2, - "vertices": [ -0.91, -2.76, -0.62, -3.63, -0.84, -2.26, -2.56, 0.52 ] + "vertices": [ -0.91714, -2.76567, -0.62214, -3.63489, -0.8494, -2.26772, -2.56076, 0.5297 ] }, { "time": 0.8666, "offset": 2, - "vertices": [ -2.56, 0.52, -1.58, 0.32, -1.38, 0.32, -2.56, 0.52 ] + "vertices": [ -2.56076, 0.5297, -1.58064, 0.32031, -1.3847, 0.32476, -2.56076, 0.5297 ] }, { "time": 1, "offset": 2, - "vertices": [ -1.77, 0.54, -0.8, 0.53, -0.8, 0.53, -1.77, 0.54 ] + "vertices": [ -1.77696, 0.54759, -0.80128, 0.53413, -0.80128, 0.53413, -1.77696, 0.54759 ] } ] }, @@ -1042,35 +1043,35 @@ "undies": [ { "time": 0, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] }, { "time": 0.1333, - "vertices": [ 0.72, 0.43, 7.2, -0.16, 1.37, 0, 1.37, 0, 1.37, 0, 1.25, 0.04, -0.99, -2.95, -1.37, -3.07, 1.37, 0, 0.35, -0.29, 2.99, -0.07, 3.9, -0.14 ] + "vertices": [ 0.72659, 0.43319, 7.20416, -0.1638, 1.37759, 0, 1.37759, 0, 1.37759, 0, 1.25279, 0.0464, -0.99861, -2.95085, -1.37542, -3.07404, 1.37759, 0, 0.35279, -0.29279, 2.99218, -0.07019, 3.90478, -0.14039 ] }, { "time": 0.3333, - "vertices": [ 1.16, 0, 2.1, -0.23, 0, 0, 0, 0, 0, 0, 2.24, -0.24, -0.43, 0.6, -1.55, 0.48 ] + "vertices": [ 1.16999, 0, 2.10599, -0.234, 0, 0, 0, 0, 0, 0, 2.24999, -0.24999, -0.4344, 0.60551, -1.55939, 0.48051 ] }, { "time": 0.5333, - "vertices": [ 1.16, 0, -0.23, -0.93, -2.92, 0.35, 0, 0, 0, 0, 0.49, -0.24, -0.64, -2.07, -0.64, -2.07 ] + "vertices": [ 1.16999, 0, -0.234, -0.93599, -2.92499, 0.35099, 0, 0, 0, 0, 0.49999, -0.24999, -0.64078, -2.07914, -0.64078, -2.07914 ] }, { "time": 0.7, - "vertices": [ 1.86, -0.11, 4.66, -0.09, -1.76, 0.21, 0, 0, -0.56, 0.32, -1.13, -1.15, -2.19, -3.47, -1.29, -3.47, 0, 0, 0, 0, 1.58, -0.04, 2.65, 0.16 ] + "vertices": [ 1.8627, -0.11514, 4.66326, -0.09099, -1.76428, 0.21171, 0, 0, -0.56832, 0.32832, -1.13833, -1.1511, -2.19996, -3.47068, -1.29718, -3.47068, 0, 0, 0, 0, 1.58785, -0.04642, 2.65941, 0.16714 ] }, { "time": 0.8333, - "vertices": [ 2.41, -0.2, 8.58, 0.58, -0.83, 0.1, 0, 0, -1.02, 0.59, -2.44, -1.87, -1.62, 0, 0, 0, 0, 0, 0, 0, 2.85, -0.08, 4.78, 0.3 ] + "vertices": [ 2.41687, -0.20725, 8.58108, 0.585, -0.83571, 0.10028, 0, 0, -1.02299, 0.59098, -2.44899, -1.872, -1.62499, 0, 0, 0, 0, 0, 0, 0, 2.85813, -0.08356, 4.78695, 0.30086 ] }, { "time": 0.8666, - "vertices": [ 2.01, -0.02, 8.98, 0.44, -0.2, 0.08, 0.45, 0, -0.35, 0.47, -1.84, -1.44, -0.79, 1.26, 0.53, 1.23, 0.45, 0, 0.11, -0.09, 3.28, -0.09, 5.13, 0.19 ] + "vertices": [ 2.01969, -0.0214, 8.98545, 0.4446, -0.20937, 0.08022, 0.45919, 0, -0.35919, 0.47279, -1.84159, -1.4488, -0.79153, 1.2642, 0.53285, 1.23981, 0.45919, 0, 0.11759, -0.09759, 3.2839, -0.09025, 5.13115, 0.19388 ] }, { "time": 1, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] } ] } diff --git a/spine-starling/spine-starling-example/src/goblins-mesh.png b/spine-starling/spine-starling-example/src/goblins-mesh.png index a3daf0010..9d1ae572a 100644 Binary files a/spine-starling/spine-starling-example/src/goblins-mesh.png and b/spine-starling/spine-starling-example/src/goblins-mesh.png differ diff --git a/spine-starling/spine-starling-example/src/raptor.atlas b/spine-starling/spine-starling-example/src/raptor.atlas index c90da0078..11728a52d 100644 --- a/spine-starling/spine-starling-example/src/raptor.atlas +++ b/spine-starling/spine-starling-example/src/raptor.atlas @@ -1,26 +1,26 @@ raptor.png -size: 1022,1022 +size: 1024,1024 format: RGBA8888 filter: Linear,Linear repeat: none back_arm - rotate: false - xy: 410, 545 + rotate: true + xy: 140, 191 size: 46, 29 orig: 46, 29 offset: 0, 0 index: -1 back_bracer - rotate: false - xy: 540, 548 + rotate: true + xy: 167, 317 size: 39, 28 orig: 39, 28 offset: 0, 0 index: -1 back_hand - rotate: true - xy: 504, 538 + rotate: false + xy: 167, 358 size: 36, 34 orig: 36, 34 offset: 0, 0 @@ -34,49 +34,63 @@ back_knee index: -1 back_thigh rotate: true - xy: 140, 247 + xy: 167, 437 size: 39, 24 orig: 39, 24 offset: 0, 0 index: -1 -eyes_open +eyes_closed rotate: true xy: 2, 2 size: 47, 45 orig: 47, 45 offset: 0, 0 index: -1 +eyes_open + rotate: true + xy: 49, 2 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 +eyes_surprised + rotate: true + xy: 96, 2 + size: 47, 45 + orig: 47, 45 + offset: 0, 0 + index: -1 front_arm rotate: false - xy: 360, 544 + xy: 419, 544 size: 48, 30 orig: 48, 30 offset: 0, 0 index: -1 front_bracer rotate: false - xy: 538, 578 + xy: 880, 695 size: 41, 29 orig: 41, 29 offset: 0, 0 index: -1 front_hand - rotate: false - xy: 538, 609 + rotate: true + xy: 167, 394 size: 41, 38 orig: 41, 38 offset: 0, 0 index: -1 front_open_hand rotate: false - xy: 894, 782 + xy: 880, 726 size: 43, 44 orig: 43, 44 offset: 0, 0 index: -1 front_thigh rotate: false - xy: 942, 849 + xy: 360, 545 size: 57, 29 orig: 57, 29 offset: 0, 0 @@ -109,16 +123,30 @@ lower_leg orig: 73, 98 offset: 0, 0 index: -1 +mouth_grind + rotate: false + xy: 469, 544 + size: 47, 30 + orig: 47, 30 + offset: 0, 0 + index: -1 +mouth_oooo + rotate: true + xy: 894, 772 + size: 105, 30 + orig: 105, 30 + offset: 0, 0 + index: -1 mouth_smile rotate: true - xy: 49, 2 + xy: 140, 239 size: 47, 30 orig: 47, 30 offset: 0, 0 index: -1 neck rotate: true - xy: 1001, 860 + xy: 538, 577 size: 18, 21 orig: 18, 21 offset: 0, 0 @@ -215,22 +243,22 @@ raptor_tongue offset: 0, 0 index: -1 stirrup_back - rotate: false - xy: 458, 539 + rotate: true + xy: 140, 145 size: 44, 35 orig: 44, 35 offset: 0, 0 index: -1 stirrup_front - rotate: true - xy: 81, 4 + rotate: false + xy: 538, 597 size: 45, 50 orig: 45, 50 offset: 0, 0 index: -1 stirrup_strap - rotate: true - xy: 894, 828 + rotate: false + xy: 350, 497 size: 49, 46 orig: 49, 46 offset: 0, 0 diff --git a/spine-starling/spine-starling-example/src/raptor.json b/spine-starling/spine-starling-example/src/raptor.json index df9892de6..f1b4aee9e 100644 --- a/spine-starling/spine-starling-example/src/raptor.json +++ b/spine-starling/spine-starling-example/src/raptor.json @@ -1,167 +1,202 @@ { -"skeleton": { "hash": "r3IJRaLbaxgEoW1YBAOrYT69jB4", "spine": "Dev", "width": 1224.2, "height": 1052.38 }, +"skeleton": { "hash": "BhDanzAnuitcp4TvGXMQuSCPJ6I", "spine": "3.4.00", "width": 0, "height": 0, "images": "./images/" }, "bones": [ { "name": "root" }, - { "name": "front_foot_goal", "parent": "root", "x": -45.79, "y": -28.67, "rotation": -0.94 }, - { "name": "hip", "parent": "root", "x": -136.78, "y": 415.47, "rotation": 3.15 }, - { "name": "rear_foot_goal", "parent": "root", "x": 33.43, "y": 30.81 }, - { "name": "front_leg1", "parent": "hip", "length": 251.74, "x": 27.36, "y": -28.27, "rotation": -51.5 }, - { "name": "front_leg_goal", "parent": "front_foot_goal", "x": -106.06, "y": 115.58 }, - { "name": "rear_leg1", "parent": "hip", "length": 226.27, "x": 55.19, "y": -71.25, "rotation": -54.76 }, - { "name": "rear_leg_goal", "parent": "rear_foot_goal", "x": -127.51, "y": 75.99 }, - { "name": "tail1", "parent": "hip", "length": 162.53, "x": -20.86, "y": 6.87, "rotation": 162.92 }, - { "name": "torso1", "parent": "hip", "length": 126.25, "x": 30.03, "y": -0.4, "rotation": -4.97 }, - { "name": "front_leg2", "parent": "front_leg1", "length": 208.54, "x": 251.03, "y": 0.16, "rotation": 261.93 }, - { "name": "rear_leg2", "parent": "rear_leg1", "length": 172.58, "x": 226.32, "y": 0.23, "rotation": -92.25 }, - { "name": "saddle", "parent": "torso1", "length": 50.91, "x": 4.56, "y": 71.86, "rotation": 91.8 }, - { "name": "tail2", "parent": "tail1", "length": 130.02, "x": 162.53, "y": -0.82, "rotation": 30.3 }, - { "name": "torso2", "parent": "torso1", "length": 121.2, "x": 126.25, "y": -0.37, "rotation": 39.84 }, - { "name": "front_arm1", "parent": "torso2", "length": 109.99, "x": 46.37, "y": -84.61, "rotation": 224.54 }, - { "name": "front_leg3", "parent": "front_leg2", "length": 118.18, "x": 208.5, "y": -1.63, "rotation": 85.46 }, - { "name": "neck", "parent": "torso2", "length": 70.59, "x": 121.19, "y": 0.34, "rotation": 41.37 }, - { "name": "rear_arm1", "parent": "torso2", "length": 109.56, "x": 57.05, "y": -95.38, "rotation": -124.71 }, - { "name": "rear_leg3", "parent": "rear_leg2", "length": 103.05, "x": 172.31, "y": 2.21, "rotation": 82.81 }, - { "name": "saddle_strap_front1", "parent": "saddle", "length": 97.27, "x": -27.36, "y": -73.38, "rotation": -148.11 }, - { "name": "saddle_strap_rear1", "parent": "saddle", "length": 38.62, "x": -33.34, "y": 87.32, "rotation": 151.13 }, - { "name": "spineboy_front_arm_goal", "parent": "saddle", "x": -50.7, "y": -96.93 }, - { "name": "spineboy_hip", "parent": "saddle", "length": 0.52, "x": 81.88, "y": 2.68, "rotation": 90.01 }, - { "name": "spineboy_rear_arm_goal", "parent": "saddle", "x": -30.43, "y": -100.08 }, - { "name": "stirrup", "parent": "saddle", "length": 78.17, "x": -81.94, "y": -103.38, "rotation": -68.85 }, - { "name": "stirrup_strap1", "parent": "saddle", "length": 43.69, "x": -20.38, "y": -29.37, "rotation": -135 }, - { "name": "tail3", "parent": "tail2", "length": 141.06, "x": 130.02, "y": 0.1, "rotation": 6.88 }, - { "name": "back_thigh", "parent": "spineboy_hip", "length": 71.15, "x": -9.57, "y": 2.31, "rotation": 160.75 }, - { "name": "front_arm2", "parent": "front_arm1", "length": 86.33, "x": 109.99, "y": 0.2, "rotation": 105.23 }, - { "name": "front_foot1", "parent": "front_leg3", "length": 57.79, "x": 118.19, "y": -0.79, "scaleX": 1.126, "rotation": 54.46 }, - { "name": "front_thigh", "parent": "spineboy_hip", "length": 77.79, "x": 15.51, "y": 17.01, "rotation": 163.34 }, + { "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": "gun", + "name": "spineboy_torso", "parent": "spineboy_hip", - "length": 181.35, - "x": 16.86, - "y": -7.89, - "scaleX": 0.816, - "scaleY": 0.816, - "rotation": 107.11 + "length": 122.45, + "rotation": -75.85, + "x": 1.05, + "y": -2.1, + "color": "ffffffff" + }, + { + "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, + "inheritRotation": false, + "color": "ffffffff" + }, + { "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": "front_arm", + "parent": "spineboy_torso", + "length": 74.51, + "rotation": -118.16, + "x": 101.37, + "y": 9.78, + "color": "ffffffff" + }, + { "name": "torso2", "parent": "torso1", "length": 121.2, "rotation": 39.84, "x": 126.25, "y": -0.37, "color": "eaff00ff" }, + { "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": "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_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_bracer", "parent": "front_arm", "length": 39.85, "rotation": 20.3, "x": 74.52, "y": -0.41, "color": "ffffffff" }, + { "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": "head", "parent": "neck", "length": 105.5, "x": 70.59, "y": 0.03, "rotation": 9.82 }, - { "name": "rear_arm2", "parent": "rear_arm1", "length": 85.8, "x": 109.56, "rotation": 123.56 }, - { "name": "rear_foot1", "parent": "rear_leg3", "length": 84.51, "x": 102.37, "y": -0.02, "rotation": 75.43 }, - { "name": "saddle_strap_front2", "parent": "saddle_strap_front1", "length": 102.74, "x": 97.29, "y": 0.3, "rotation": -11.13 }, - { "name": "saddle_strap_rear2", "parent": "saddle_strap_rear1", "length": 54.36, "x": 38.63, "y": -0.02 }, - { "name": "spineboy_torso", "parent": "spineboy_hip", "length": 122.45, "x": 1.05, "y": -2.1, "rotation": -75.85 }, - { "name": "stirrup_strap2", "parent": "stirrup_strap1", "length": 51.62, "x": 43.7, "rotation": 9.38 }, - { "name": "tail4", "parent": "tail3", "length": 126.25, "x": 141.05, "y": 0.64, "rotation": -18.86 }, - { "name": "back_arm", "parent": "spineboy_torso", "length": 67.21, "x": 96.33, "y": -38.46, "rotation": -120.89 }, - { "name": "back_knee", "parent": "back_thigh", "length": 97.17, "x": 71.15, "y": -0.28, "rotation": -54.97 }, - { "name": "front_arm", "parent": "spineboy_torso", "length": 74.51, "x": 101.37, "y": 9.78, "rotation": -118.16 }, { "name": "front_foot2", "parent": "front_foot1", "length": 56.19, + "rotation": -2.15, "x": 57.78, "y": -0.02, "scaleX": 0.73, "scaleY": 0.823, - "rotation": -0.46, - "inheritRotation": false + "inheritRotation": false, + "color": "15ff00ff" }, - { "name": "front_hand", "parent": "front_arm2", "length": 47.55, "x": 86.33, "y": 0.06, "rotation": -56.83 }, - { "name": "horn_front", "parent": "head", "length": 87.48, "x": 82.09, "y": -221.36, "rotation": 49.36 }, - { "name": "horn_rear", "parent": "head", "length": 73.78, "x": 99.27, "y": -226.79, "rotation": 44.31 }, - { "name": "jaw", "parent": "head", "length": 203.76, "x": 29.36, "y": -40.15, "rotation": -140.14, "inheritScale": false }, - { "name": "lower_leg", "parent": "front_thigh", "length": 111.5, "x": 77.92, "y": -0.1, "rotation": -49.62 }, - { "name": "neck2", "parent": "spineboy_torso", "length": 32.04, "x": 113.44, "y": -15.21, "rotation": -45.22 }, - { - "name": "rear_foot2", - "parent": "rear_foot1", - "length": 102.31, - "x": 84.49, - "y": -0.34, - "rotation": -6.13, - "inheritRotation": false - }, - { "name": "rear_hand", "parent": "rear_arm2", "length": 45.8, "x": 85.8, "y": 0.1, "rotation": -76.28 }, - { "name": "saddle_strap_rear3", "parent": "saddle_strap_rear2", "length": 44.04, "x": 54.86, "y": 0.19, "rotation": 3.63 }, - { "name": "tail5", "parent": "tail4", "length": 91.06, "x": 126.25, "y": -0.47, "rotation": -22.34 }, - { "name": "tongue1", "parent": "head", "length": 55.11, "x": 20.81, "y": -104.75, "rotation": -129.04 }, - { "name": "back_bracer", "parent": "back_arm", "length": 43.68, "x": 67.21, "y": -0.31, "rotation": 17.48 }, - { "name": "bone", "parent": "horn_front", "x": 294.58, "y": 234.17, "rotation": -138.59 }, - { "name": "bone2", "parent": "horn_rear", "x": 232.68, "y": 245.84, "rotation": -133.55 }, - { "name": "front_bracer", "parent": "front_arm", "length": 39.85, "x": 74.52, "y": -0.41, "rotation": 20.3 }, { "name": "front_foot3", "parent": "front_foot2", "length": 129.88, + "rotation": -2.7, "x": 49.71, "y": 20.65, "scaleX": 1.154, - "rotation": -3.16, - "inheritRotation": false + "color": "15ff00ff" }, - { "name": "head2", "parent": "neck2", "length": 249.64, "x": 23.01, "y": 3.47, "rotation": 11.65 }, - { "name": "tongue2", "parent": "tongue1", "length": 44.66, "x": 55.59, "y": 0.93, "rotation": 8.93 }, - { "name": "back_hand", "parent": "back_bracer", "length": 41.97, "x": 43.68, "y": 0.06, "rotation": 9.2, "inheritRotation": false }, + { "name": "front_foot_goal", "parent": "root", "rotation": -0.94, "x": -45.79, "y": -28.67, "color": "ff0000ff" }, + { "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.9, "x": 39.98, "y": -0.89, - "rotation": 13.9, - "inheritRotation": false + "inheritRotation": false, + "color": "ffffffff" }, - { "name": "tongue3", "parent": "tongue2", "length": 43.64, "x": 44.26, "y": -0.2, "rotation": 12.86 } -], -"ik": [ + { "name": "front_leg_goal", "parent": "front_foot_goal", "x": -106.06, "y": 115.58, "color": "ff0000ff" }, { - "name": "front_leg_goal", - "bones": [ "front_leg1", "front_leg2" ], - "target": "front_leg_goal", - "bendPositive": false + "name": "front_thigh", + "parent": "spineboy_hip", + "length": 77.79, + "rotation": 163.34, + "x": 15.51, + "y": 17.01, + "color": "ffffffff" }, { - "name": "rear_leg_goal", - "bones": [ "rear_leg1", "rear_leg2" ], - "target": "rear_leg_goal", - "bendPositive": false + "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": "horn_rear", "parent": "head", "length": 73.78, "rotation": 44.31, "x": 99.27, "y": -226.79, "color": "e07800ff" }, + { "name": "jaw", "parent": "head", "length": 203.76, "rotation": -140.14, "x": 29.36, "y": -40.15, "color": "ffff00ff" }, + { "name": "lower_leg", "parent": "front_thigh", "length": 111.5, "rotation": -49.62, "x": 77.92, "y": -0.1, "color": "ffffffff" }, + { "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_arm_target", "parent": "horn_rear", "rotation": -133.55, "x": 232.68, "y": 245.84, "color": "e07800ff" }, + { "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, + "inheritRotation": false, + "color": "e07800ff" + }, + { "name": "rear_foot_goal", "parent": "root", "x": 33.43, "y": 30.81, "color": "ff0000ff" }, + { "name": "rear_hand", "parent": "rear_arm2", "length": 45.8, "rotation": -76.28, "x": 85.8, "y": 0.1, "color": "e07800ff" }, + { "name": "rear_leg_goal", "parent": "rear_foot_goal", "x": -127.51, "y": 75.99, "color": "ff0000ff" }, + { + "name": "saddle_strap_front1", + "parent": "saddle", + "length": 97.27, + "rotation": -148.11, + "x": -27.36, + "y": -73.38, + "color": "ff7300ff" }, { - "name": "front_foot_goal", - "bones": [ "front_leg3", "front_foot1" ], - "target": "front_foot_goal" + "name": "saddle_strap_front2", + "parent": "saddle_strap_front1", + "length": 102.74, + "rotation": -11.13, + "x": 97.29, + "y": 0.3, + "color": "ff7300ff" }, { - "name": "rear_foot_goal", - "bones": [ "rear_leg3", "rear_foot1" ], - "target": "rear_foot_goal" + "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": "stirrup", - "bones": [ "stirrup_strap1", "stirrup_strap2" ], - "target": "stirrup" + "name": "saddle_strap_rear3", + "parent": "saddle_strap_rear2", + "length": 44.04, + "rotation": 3.63, + "x": 54.86, + "y": 0.19, + "color": "ff7300ff" }, - { - "name": "spineboy_rear_leg_goal", - "bones": [ "back_thigh", "back_knee" ], - "target": "spineboy_rear_arm_goal", - "bendPositive": false - }, - { - "name": "spineboy_front_leg_goal", - "bones": [ "front_thigh", "lower_leg" ], - "target": "spineboy_front_arm_goal", - "bendPositive": false - }, - { - "name": "rear_arm_goal", - "bones": [ "back_arm", "back_bracer" ], - "target": "bone2" - }, - { - "name": "front_arm_goal", - "bones": [ "front_arm", "front_bracer" ], - "target": "bone" - } + { "name": "spineboy_front_arm_goal", "parent": "saddle", "x": -50.7, "y": -96.93, "color": "ff0004ff" }, + { "name": "spineboy_rear_arm_goal", "parent": "saddle", "x": -30.43, "y": -100.08, "color": "ff0001ff" }, + { "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" }, @@ -198,6 +233,57 @@ { "name": "front_bracer", "bone": "front_bracer", "attachment": "front_bracer" }, { "name": "front_hand", "bone": "front_hand2", "attachment": "front_hand" } ], +"ik": [ + { + "name": "front_arm_goal", + "bones": [ "front_arm", "front_bracer" ], + "target": "front_arm_target" + }, + { + "name": "front_foot_goal", + "bones": [ "front_leg3", "front_foot1" ], + "target": "front_foot_goal" + }, + { + "name": "front_leg_goal", + "bones": [ "front_leg1", "front_leg2" ], + "target": "front_leg_goal", + "bendPositive": false + }, + { + "name": "rear_arm_goal", + "bones": [ "back_arm", "back_bracer" ], + "target": "rear_arm_target" + }, + { + "name": "rear_foot_goal", + "bones": [ "rear_leg3", "rear_foot1" ], + "target": "rear_foot_goal" + }, + { + "name": "rear_leg_goal", + "bones": [ "rear_leg1", "rear_leg2" ], + "target": "rear_leg_goal", + "bendPositive": false + }, + { + "name": "spineboy_front_leg_goal", + "bones": [ "front_thigh", "lower_leg" ], + "target": "spineboy_front_arm_goal", + "bendPositive": false + }, + { + "name": "spineboy_rear_leg_goal", + "bones": [ "back_thigh", "back_knee" ], + "target": "spineboy_rear_arm_goal", + "bendPositive": false + }, + { + "name": "stirrup", + "bones": [ "stirrup_strap1", "stirrup_strap2" ], + "target": "stirrup" + } +], "skins": { "default": { "back_arm": { @@ -236,9 +322,12 @@ "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": [ 9, 10, 11, 14, 11, 12, 14, 12, 0, 9, 11, 14, 6, 9, 14, 14, 0, 1, 13, 14, 1, 6, 7, 8, 6, 8, 9, 13, 1, 2, 13, 5, 6, 13, 6, 14, 3, 4, 13, 5, 13, 4, 3, 13, 2 ], + "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.48, 50.63, 83.86, 46.32, 142.05, 42.17, 197.91, 3.34, 163.7, -45.86, 86.15, -47.34, 15.9, -48.68, 8.42, -120.68, -69.06, -66.81, -35.32, -20.73, -58.83, -10.35, -44.69, 9.99, -14.55, 53.35, 85.21, 6.43, 20.45, 8.2 ], - "hull": 13 + "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": { @@ -255,47 +344,62 @@ }, "raptor_arm_back": { "raptor_arm_back": { - "type": "skinnedmesh", - "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, 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, 0.94947, 0.60129 ], - "triangles": [ 6, 14, 15, 5, 6, 15, 5, 15, 4, 6, 7, 14, 24, 7, 8, 24, 14, 7, 13, 14, 24, 11, 13, 24, 11, 24, 8, 11, 8, 9, 10, 11, 9, 12, 13, 11, 15, 16, 4, 18, 19, 2, 16, 3, 4, 17, 18, 2, 17, 2, 3, 17, 3, 16, 20, 21, 22, 23, 20, 22, 0, 20, 23, 1, 20, 0, 1, 19, 20, 2, 19, 1 ], - "vertices": [ 2, 18, 36.95, 33.31, 0.91666, 34, 68.53, 41.05, 0.08333, 2, 18, 66.02, 20.35, 0.76813, 34, 41.41, 24.39, 0.23186, 2, 18, 74.51, 16.57, 0.64468, 34, 33.49, 19.53, 0.35531, 3, 18, 70.89, 21.97, 0.27669, 34, 39.99, 19.46, 0.67508, 52, -29.67, -39.91, 0.04822, 3, 18, 42.77, 63.89, 0.11483, 34, 90.47, 18.95, 0.60854, 52, -17.2, 9, 0.27661, 2, 34, 101.86, 18.83, 0.45955, 52, -14.38, 20.04, 0.54044, 2, 34, 106.47, 2.08, 0.0625, 52, 2.98, 20.56, 0.9375, 1, 52, 51.32, 21.98, 1, 1, 52, 72.39, 9.61, 1, 1, 52, 100.37, -23.87, 1, 1, 52, 104.96, -40.9, 1, 1, 52, 78.37, -25.61, 1, 1, 52, 86.05, -56.84, 1, 1, 52, 52.92, -30.04, 1, 2, 34, 62.24, -43.92, 0.0625, 52, 37.19, -33.33, 0.9375, 2, 34, 64.89, -28.65, 0.3125, 52, 22.98, -27.14, 0.6875, 2, 34, 57.69, -27.17, 0.30612, 52, 19.83, -33.78, 0.69387, 2, 18, 124.19, 3.83, 0.19395, 34, -5.09, -14.23, 0.80604, 2, 18, 110.77, -19.65, 0.3125, 34, -16.88, 10.1, 0.6875, 2, 18, 99.14, -19.2, 0.51613, 34, -9.93, 19.44, 0.48386, 2, 18, 43.73, -17.03, 0.9375, 34, 23.17, 63.92, 0.0625, 1, 18, 35.41, -29.77, 1, 1, 18, -15.68, -28.02, 1, 1, 18, -13.87, 24.65, 1, 1, 52, 60.41, 11.1, 1 ], - "hull": 24 + "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": [ 13, 14, 12, 11, 12, 10, 12, 9, 10, 12, 8, 9, 12, 14, 8, 14, 15, 8, 8, 15, 7, 16, 17, 4, 6, 7, 15, 5, 16, 4, 5, 6, 16, 6, 15, 16, 18, 3, 17, 18, 2, 3, 18, 19, 2, 19, 20, 2, 17, 3, 4, 2, 20, 1, 1, 20, 21, 1, 21, 0, 0, 21, 24, 24, 21, 23, 21, 22, 23 ], + "vertices": [ 2, 37, 36.95, 33.31, 0.91666, 38, 68.53, 41.05, 0.08333, 2, 37, 66.01999, 20.35, 0.76813, 38, 41.41, 24.39, 0.23186, 2, 37, 74.51, 16.57, 0.64468, 38, 33.49, 19.53, 0.35531, 2, 37, 70.89, 21.97, 0.29071, 38, 39.99, 19.45999, 0.70928, 3, 37, 42.77, 63.89, 0.11483, 38, 90.47, 18.95, 0.60854, 46, -17.2, 9, 0.2766, 2, 38, 101.86, 18.83, 0.45955, 46, -14.38, 20.04, 0.54044, 2, 38, 106.47, 2.08, 0.0625, 46, 2.98, 20.56, 0.9375, 1, 46, 51.32, 21.98, 1, 1, 46, 60.41, 11.1, 1, 1, 46, 72.39, 9.60999, 1, 1, 46, 100.37, -23.87, 1, 1, 46, 104.96, -40.9, 1, 1, 46, 78.37, -25.61, 1, 1, 46, 86.05, -56.84, 1, 1, 46, 52.92, -30.04, 1, 2, 38, 62.24, -43.92, 0.0625, 46, 37.18999, -33.33, 0.9375, 2, 38, 64.89, -28.65, 0.3125, 46, 22.98, -27.14, 0.6875, 2, 38, 57.69, -27.17, 0.30612, 46, 19.83, -33.78, 0.69387, 2, 37, 124.19, 3.83, 0.19395, 38, -5.09, -14.23, 0.80604, 2, 37, 110.77, -19.65, 0.3125, 38, -16.87999, 10.1, 0.6875, 2, 37, 99.14, -19.2, 0.51612, 38, -9.93, 19.44, 0.48386, 2, 37, 43.73, -17.03, 0.9375, 38, 23.17, 63.92, 0.0625, 1, 37, 35.41, -29.77, 1, 1, 37, -15.68, -28.02, 1, 1, 37, -13.87, 24.65, 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": "skinnedmesh", - "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.27515, 0.71028, 0.25301, 0.71948, 0.22568, 0.73082, 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 ], - "triangles": [ 10, 11, 45, 45, 11, 44, 11, 12, 44, 44, 68, 45, 12, 69, 44, 12, 58, 52, 21, 22, 55, 22, 61, 55, 22, 23, 61, 55, 61, 27, 23, 56, 61, 23, 24, 56, 61, 56, 26, 61, 26, 27, 26, 56, 25, 56, 24, 25, 19, 60, 89, 19, 20, 60, 60, 20, 90, 20, 21, 90, 90, 21, 55, 89, 60, 29, 90, 28, 60, 60, 28, 29, 55, 27, 90, 90, 27, 28, 16, 17, 54, 91, 15, 16, 18, 54, 17, 54, 18, 89, 16, 54, 91, 18, 19, 89, 15, 91, 59, 31, 91, 54, 89, 30, 54, 89, 29, 30, 32, 59, 91, 30, 31, 54, 32, 91, 31, 33, 59, 32, 14, 15, 59, 33, 53, 59, 13, 58, 12, 58, 13, 53, 59, 53, 14, 13, 14, 53, 34, 58, 53, 35, 52, 58, 34, 53, 33, 58, 34, 35, 44, 69, 51, 12, 52, 69, 51, 38, 39, 51, 69, 38, 38, 69, 37, 69, 52, 37, 36, 52, 35, 36, 37, 52, 4, 5, 70, 4, 57, 73, 73, 57, 67, 4, 73, 3, 3, 73, 72, 3, 74, 2, 74, 87, 2, 87, 88, 2, 88, 1, 2, 73, 67, 72, 72, 67, 66, 67, 57, 66, 57, 49, 66, 57, 41, 49, 3, 72, 74, 72, 62, 74, 72, 66, 62, 74, 85, 87, 85, 74, 84, 49, 65, 66, 66, 65, 62, 84, 74, 62, 63, 62, 65, 84, 62, 63, 41, 42, 49, 85, 86, 87, 88, 86, 81, 88, 87, 86, 85, 84, 80, 85, 80, 79, 80, 84, 75, 79, 80, 78, 49, 64, 65, 64, 49, 43, 1, 88, 82, 80, 75, 78, 82, 88, 81, 75, 77, 78, 82, 81, 77, 81, 78, 77, 65, 64, 63, 75, 76, 77, 75, 84, 76, 76, 84, 83, 76, 83, 82, 83, 0, 1, 0, 83, 84, 63, 0, 84, 63, 64, 0, 1, 82, 83, 49, 42, 43, 64, 43, 0, 57, 4, 70, 45, 50, 46, 46, 47, 8, 46, 50, 47, 8, 47, 7, 50, 71, 47, 47, 71, 7, 7, 71, 6, 71, 50, 48, 48, 50, 40, 50, 68, 40, 71, 48, 6, 6, 48, 5, 5, 48, 70, 48, 40, 70, 70, 40, 57, 57, 40, 41, 10, 45, 9, 45, 46, 9, 9, 46, 8, 45, 68, 50, 44, 51, 68, 68, 39, 40, 68, 51, 39 ], - "vertices": [ 1, 33, 147.48, -145.48, 1, 1, 33, 89.4, -281.62, 1, 1, 33, -28.24, -285.93, 1, 1, 33, -14.58, -194.68, 1, 5, 9, 363.21, 87.73, 0.02179, 14, 238.39, -84.13, 0.20397, 17, 32.1, -140.85, 0.18915, 33, -61.96, -132.26, 0.41197, 48, 129.57, 6.39, 0.1731, 5, 9, 332.7, 63.71, 0.06905, 14, 199.57, -83.03, 0.29424, 17, 3.69, -114.37, 0.2194, 33, -85.43, -101.32, 0.30859, 48, 127.34, -26.64, 0.1087, 5, 9, 307.08, 43.5, 0.11018, 14, 166.95, -82.13, 0.37282, 17, -20.18, -92.14, 0.24572, 33, -105.18, -75.34, 0.21862, 48, 123.08, -64.79, 0.05264, 5, 9, 307.75, 5.7, 0.18146, 14, 143.25, -111.59, 0.56512, 17, -57.43, -98.57, 0.12044, 33, -142.98, -75.33, 0.10715, 48, 154.85, -83.49, 0.0258, 2, 9, 308.7, -30.55, 0.25, 14, 120.75, -140.04, 0.75, 2, 9, 213.94, -142.7, 0.75, 14, -23.83, -165.45, 0.25, 3, 9, 64.45, -187.34, 0.31139, 8, -158.45, 158.33, 0.10379, 2, 84.16, -190.98, 0.5848, 1, 2, -61.47, -178.84, 1, 1, 2, -166.91, -67.95, 1, 6, 9, -246.26, -74, 0.04136, 8, 170.4, 123.13, 0.2858, 13, 66.71, 104.77, 0.57052, 27, -53.08, 110.21, 0.10163, 40, -220.11, 35.3, 5.1E-4, 54, -331.4, -106.89, 1.5E-4, 6, 9, -297.45, -69.74, 0.01855, 8, 221.11, 131.31, 0.14592, 13, 115.07, 87.47, 0.47026, 27, -6.58, 88.39, 0.30085, 40, -168.92, 31, 0.06162, 54, -282.82, -90.19, 0.00276, 6, 9, -359.24, -85.1, 0.00915, 8, 277.38, 161.09, 0.07914, 13, 178.73, 86.41, 0.35008, 27, 56.68, 81.29, 0.38638, 40, -107.13, 46.31, 0.15555, 54, -232.44, -51.26, 0.01966, 6, 9, -376.16, -107.83, 0.0043, 8, 294.31, 176.47, 0.03904, 13, 203.26, 86.51, 0.25323, 27, 83.06, 77.02, 0.42283, 40, -79.56, 53.53, 0.23684, 54, -210.89, -28.3, 0.04374, 6, 9, -416.83, -99.41, 0.00211, 8, 329.83, 188.85, 0.0196, 13, 238.06, 85.41, 0.18217, 27, 115.65, 74.66, 0.41374, 40, -49.53, 60.58, 0.30031, 54, -185.49, -14.98, 0.08205, 6, 9, -449.42, -116.23, 0.00122, 8, 364.17, 200.07, 0.01106, 13, 275.48, 71.62, 0.13243, 27, 152.97, 53.58, 0.37336, 40, -5.82, 53.94, 0.34144, 54, -142.85, 0.11, 0.14047, 6, 9, -498.22, -88.19, 7.8E-4, 8, 411.52, 197.55, 0.00669, 13, 313.81, 53.61, 0.09623, 27, 188.04, 35.82, 0.32105, 40, 31.84, 49.3, 0.36432, 54, -106.46, 7.49, 0.21089, 6, 9, -524.31, -113.4, 5.8E-4, 8, 437.98, 213.03, 0.00423, 13, 345.74, 45.54, 0.06864, 27, 219.6, 19.28, 0.26387, 40, 68.31, 43.02, 0.36996, 54, -70.13, 18.19, 0.2927, 6, 9, -580.94, -76.79, 4.7E-4, 8, 494.56, 206.4, 0.00237, 13, 390.81, 21.3, 0.0452, 27, 261.62, -3.66, 0.20066, 40, 114.55, 37.83, 0.35931, 54, -26.15, 30.34, 0.39196, 6, 9, -621.23, -53.98, 4.4E-4, 8, 539.16, 193.96, 0.00115, 13, 423.87, -11.11, 0.02629, 27, 291.46, -39.06, 0.13478, 40, 154.83, 14.99, 0.33453, 54, 19.91, 25.67, 0.50278, 6, 9, -661.22, -31.34, 4.6E-4, 8, 583.41, 181.62, 5.6E-4, 13, 456.68, -43.27, 0.01512, 27, 321.06, -74.2, 0.08778, 40, 194.79, -7.66, 0.31014, 54, 65.62, 21.04, 0.58591, 6, 9, -698.76, 17.64, 4.7E-4, 8, 631.64, 143.1, 4.0E-4, 13, 480.34, -100.28, 0.01183, 27, 339.2, -133.2, 0.07247, 40, 232.3, -56.69, 0.30126, 54, 119.7, -8.69, 0.61353, 6, 9, -636.21, 0.4, 4.5E-4, 8, 566.79, 144.78, 5.5E-4, 13, 424.34, -67.52, 0.01513, 27, 286.57, -95.27, 0.08778, 40, 169.77, -39.4, 0.31045, 54, 55.51, -18.08, 0.5856, 6, 9, -596.68, -3.21, 4.2E-4, 8, 527.55, 138.78, 0.00111, 13, 387.08, -53.84, 0.02607, 27, 250.77, -78.11, 0.13421, 40, 130.24, -35.75, 0.33502, 54, 17.87, -30.67, 0.50314, 6, 9, -553.14, -7.2, 4.2E-4, 8, 484.33, 132.17, 0.00229, 13, 346.04, -38.78, 0.04477, 27, 211.34, -59.22, 0.19954, 40, 86.7, -31.72, 0.3598, 54, -23.59, -44.54, 0.39316, 6, 9, -516.96, -25.93, 4.7E-4, 8, 449.17, 125.97, 0.00408, 13, 311.45, -35.25, 0.06808, 27, 175.89, -56.83, 0.26228, 40, 51.53, -43.14, 0.37032, 54, -52.88, -67.87, 0.29473, 6, 9, -479.88, 14.24, 6.0E-4, 8, 418.38, 93.72, 0.00651, 13, 269.72, -40.64, 0.09608, 27, 135.19, -53.82, 0.32015, 40, 13.42, -53.11, 0.36453, 54, -82.03, -93.66, 0.21211, 6, 9, -451.64, 0.32, 8.3E-4, 8, 390.82, 86.58, 0.01046, 13, 241.19, -39.8, 0.13162, 27, 105.59, -52.93, 0.37317, 40, -16.25, -62.16, 0.34265, 54, -108.34, -111.24, 0.14123, 6, 9, -420.35, 31.66, 0.00137, 8, 364.8, 62.48, 0.01849, 13, 207.71, -42.14, 0.18078, 27, 73.33, -49.43, 0.41415, 40, -46.11, -70.49, 0.30264, 54, -129.51, -133.56, 0.08254, 6, 9, -399.11, 28.98, 0.00258, 8, 345.49, 47.53, 0.03705, 13, 182.34, -50.62, 0.25183, 27, 45.87, -56.62, 0.4234, 40, -71.57, -84.96, 0.24035, 54, -150.85, -153.35, 0.04477, 6, 9, -365.43, 66.79, 0.00485, 8, 319.95, 15.15, 0.07594, 13, 145.6, -61.95, 0.35325, 27, 9.61, -63.26, 0.38742, 40, -101.06, -105.58, 0.15807, 54, -165.65, -187.83, 0.02044, 6, 9, -312.31, 100.78, 0.00731, 8, 276.58, -30.61, 0.13928, 13, 85.52, -81.11, 0.48508, 27, -52.01, -76.62, 0.30338, 40, -154.2, -139.52, 0.06214, 54, -200.6, -240.31, 0.00279, 6, 9, -242.48, 124.41, 0.00974, 8, 214.5, -70.36, 0.27055, 13, 11.97, -85.98, 0.61489, 27, -125.69, -74.48, 0.10409, 40, -224.04, -163.1, 5.4E-4, 54, -255.01, -290.05, 1.5E-4, 6, 9, -166.71, 150.07, 0.02469, 8, 147.14, -113.5, 0.57033, 13, -67.84, -91.26, 0.38714, 27, -205.65, -72.16, 0.01755, 40, -299.83, -188.7, 2.0E-4, 54, -314.05, -344.03, 5.0E-5, 2, 9, -113.14, 135.84, 0.24192, 8, 91.72, -112.59, 0.75807, 2, 9, -42.12, 116.77, 0.14515, 8, 18.2, -111.17, 0.85484, 1, 9, 44.2, 107.1, 1, 2, 9, 140.09, 96.35, 0.22579, 14, 72.59, 65.41, 0.7742, 4, 9, 137.69, 169.35, 0.05644, 14, 117.5, 123, 0.24355, 17, 78.3, 94.48, 0.2125, 33, 23.7, 91.74, 0.4875, 2, 17, 171.15, 111.98, 0.25, 33, 118.17, 93.15, 0.75, 1, 33, 158.96, -25.58, 1, 1, 2, -40.63, -86.01, 1, 3, 9, 67.34, -86.66, 0.33215, 8, -137.02, 59.92, 0.08303, 2, 92.54, -90.61, 0.5848, 2, 9, 170.13, -66.29, 0.75, 14, -8.53, -78.72, 0.25, 2, 9, 231.74, -8.12, 0.4, 14, 76.03, -73.52, 0.6, 5, 9, 222.04, 70.41, 0.16894, 14, 118.9, -7, 0.5373, 17, -6.58, -3.99, 0.17075, 33, -76.73, 9.18, 0.08551, 48, 45.05, -108.02, 0.03748, 1, 33, 50.43, -46.56, 1, 1, 14, -9.88, 20.65, 1, 2, 9, -53.22, 20.53, 0.2, 8, 5.8, -15.09, 0.8, 6, 9, -180.71, 32.22, 0.0849, 8, 132.35, 4.24, 0.55723, 13, -23.98, 19.01, 0.34911, 27, -151.51, 33.44, 0.0085, 40, -285.75, -70.86, 1.8E-4, 54, -348.66, -230.51, 5.0E-5, 6, 9, -304.22, 7.95, 0.01243, 8, 246.39, 57.53, 0.13635, 13, 101.61, 10.65, 0.48532, 27, -27.28, 13.2, 0.30559, 40, -162.22, -46.69, 0.05823, 54, -245.36, -158.59, 0.00205, 6, 9, -418.56, -35.1, 0.00168, 8, 346.99, 126.85, 0.01839, 13, 223.17, 22.83, 0.18014, 27, 94.88, 13.77, 0.41602, 40, -47.85, -3.72, 0.30281, 54, -158.02, -73.16, 0.08093, 6, 9, -566.47, -40.57, 4.4E-4, 8, 489.24, 167.77, 0.00225, 13, 367.51, -9.96, 0.04446, 27, 235.45, -32.57, 0.20024, 40, 100.06, 1.62, 0.36103, 54, -24.81, -8.63, 0.39156, 6, 9, -648.5, -15.19, 4.5E-4, 8, 574.96, 162.88, 5.5E-4, 13, 440.24, -55.6, 0.01566, 27, 303.52, -84.91, 0.09149, 40, 182.07, -23.8, 0.3135, 54, 60.48, 1.14, 0.57832, 3, 14, 174.99, 22.22, 0.2, 17, 54.82, -19.14, 0.6, 33, -18.8, -16.2, 0.2, 6, 9, -242.34, 20.11, 0.02478, 8, 189.25, 30.83, 0.26443, 13, 38.68, 14.84, 0.61556, 27, -89.52, 23.34, 0.09454, 40, -224.1, -58.8, 5.1E-4, 54, -297.11, -194.62, 1.4E-4, 6, 9, -359.57, -12.88, 0.00674, 8, 295.08, 91.08, 0.07453, 13, 160.45, 16.54, 0.35139, 27, 31.85, 13.48, 0.39116, 40, -106.86, -25.89, 0.15674, 54, -203.08, -117.24, 0.01941, 6, 9, -488.69, -37.69, 6.7E-4, 8, 414.43, 146.25, 0.00642, 13, 291.61, 7.27, 0.09534, 27, 161.53, -8.2, 0.32068, 40, 22.27, -1.18, 0.36568, 54, -94.86, -42.56, 0.21117, 6, 9, -607.64, -27.83, 4.3E-4, 8, 532.26, 165.32, 0.00108, 13, 404.01, -32.87, 0.02584, 27, 269.61, -58.84, 0.13469, 40, 141.21, -11.13, 0.33582, 54, 17.98, -3.72, 0.50211, 1, 33, 26.4, -166.06, 1, 1, 33, 87.21, -106.12, 1, 1, 33, 108.19, -49.62, 1, 2, 33, 61.73, -82.13, 0.50021, 48, 4.42, 52.83, 0.49978, 2, 33, 22.84, -109.4, 0.50021, 48, 51.52, 46.73, 0.49978, 5, 9, 348.39, 119.13, 0.00694, 14, 247.12, -50.52, 0.065, 17, 60.86, -121.4, 0.06027, 33, -30.3, -118, 0.48738, 48, 96.58, 17.22, 0.38039, 1, 9, 26.73, 14.8, 1, 2, 9, -107.97, 25.67, 0.24192, 8, 60.17, -6.91, 0.75807, 5, 9, 235.53, 102.96, 0.07484, 14, 150.1, 9.35, 0.34943, 17, 27.64, -12.34, 0.40983, 33, -44.43, -4.87, 0.14928, 48, 34.03, -74.39, 0.0166, 5, 9, 227.15, 28.49, 0.29239, 14, 95.96, -42.46, 0.5708, 17, -47.23, -15.44, 0.07952, 33, -118.74, 4.84, 0.03982, 48, 84.85, -129.5, 0.01745, 2, 33, 5.19, -153.1, 0.87618, 48, 90.96, 71.21, 0.12381, 5, 9, 351.78, 108.85, 0.01127, 14, 243.13, -60.59, 0.10548, 17, 51.21, -126.33, 0.09782, 33, -40.65, -121.21, 0.46541, 48, 105.71, 17.33, 0.32, 1, 33, 23.69, -185.21, 1, 1, 33, 79.64, -175.94, 1, 1, 33, 93.96, -187.56, 1, 1, 33, 87.07, -206.55, 1, 1, 33, 64.2, -216.74, 1, 1, 33, 52.23, -203.68, 1, 1, 33, 59.24, -187.03, 1, 1, 33, 64.26, -223.8, 1, 1, 33, 89.44, -211.41, 1, 1, 33, 102.04, -186.95, 1, 1, 33, 83.1, -166.14, 1, 1, 33, 46.84, -186.41, 1, 1, 33, 50.32, -204.36, 1, 1, 33, 41.7, -206.59, 1, 1, 33, 61.87, -230.97, 1, 6, 9, -448.12, -58.75, 9.7E-4, 8, 374.97, 143.6, 0.01016, 13, 256.29, 17.42, 0.13074, 27, 127.43, 2.07, 0.37548, 40, -13.35, -3.05, 0.34387, 54, -128.14, -55.46, 0.13875, 6, 9, -519.55, -68.54, 5.1E-4, 8, 442.75, 168.18, 0.00402, 13, 327.21, 4.42, 0.06791, 27, 196.28, -19.32, 0.26429, 40, 58.71, -1.05, 0.3719, 54, -62.24, -26.21, 0.29134, 6, 9, -386.43, -41.35, 0.00321, 8, 318.32, 113.62, 0.03567, 13, 192.26, 20.14, 0.25008, 27, 64.19, 12.44, 0.42824, 40, -76.55, -13.67, 0.24036, 54, -182.56, -89.31, 0.0424 ], - "hull": 44 + "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": [ 16, 56, 15, 15, 93, 14, 13, 14, 55, 10, 11, 47, 47, 11, 46, 11, 12, 46, 46, 70, 47, 12, 71, 46, 13, 60, 12, 91, 21, 62, 92, 30, 62, 20, 21, 91, 21, 22, 62, 62, 22, 92, 22, 23, 92, 92, 23, 57, 23, 24, 57, 24, 63, 57, 24, 25, 63, 57, 29, 92, 92, 29, 30, 57, 63, 29, 25, 58, 63, 25, 26, 58, 63, 58, 28, 63, 28, 29, 28, 58, 27, 58, 26, 27, 18, 19, 17, 17, 19, 56, 56, 19, 20, 20, 91, 56, 31, 32, 93, 91, 62, 31, 62, 30, 31, 12, 60, 54, 60, 13, 55, 93, 61, 14, 61, 55, 14, 60, 55, 35, 54, 60, 36, 60, 35, 36, 36, 37, 54, 16, 17, 56, 56, 93, 15, 56, 91, 93, 93, 32, 61, 61, 32, 33, 61, 33, 55, 33, 34, 55, 55, 34, 35, 93, 91, 31, 46, 71, 53, 12, 54, 71, 53, 40, 41, 53, 71, 40, 40, 71, 39, 71, 54, 39, 39, 37, 38, 39, 54, 37, 5, 72, 75, 5, 75, 4, 75, 72, 69, 4, 75, 3, 75, 69, 3, 3, 76, 2, 76, 89, 2, 89, 90, 2, 90, 1, 2, 69, 74, 3, 74, 69, 68, 69, 59, 68, 59, 51, 68, 59, 43, 51, 3, 74, 76, 74, 64, 76, 74, 68, 64, 76, 87, 89, 76, 64, 87, 51, 67, 68, 68, 67, 64, 64, 94, 87, 64, 67, 94, 43, 44, 51, 90, 88, 83, 80, 83, 81, 87, 88, 89, 88, 90, 89, 87, 81, 88, 87, 82, 81, 87, 94, 82, 83, 88, 81, 81, 82, 80, 51, 66, 67, 51, 44, 66, 67, 65, 94, 94, 77, 82, 94, 86, 77, 94, 65, 86, 1, 90, 84, 82, 77, 80, 84, 90, 83, 77, 79, 80, 84, 83, 79, 83, 80, 79, 67, 66, 65, 77, 78, 79, 77, 86, 78, 78, 86, 85, 79, 78, 84, 78, 85, 84, 85, 0, 1, 85, 86, 65, 0, 85, 65, 65, 66, 0, 1, 84, 85, 44, 45, 66, 66, 45, 0, 72, 59, 69, 47, 52, 48, 48, 49, 8, 48, 52, 49, 8, 49, 7, 52, 73, 49, 49, 73, 7, 7, 73, 6, 73, 52, 50, 50, 52, 42, 52, 70, 42, 73, 50, 6, 6, 50, 5, 50, 72, 5, 50, 42, 72, 72, 42, 59, 59, 42, 43, 10, 47, 9, 47, 48, 9, 9, 48, 8, 47, 70, 52, 46, 53, 70, 70, 41, 42, 70, 53, 41 ], + "vertices": [ 1, 16, 147.48, -145.48, 1, 1, 16, 89.4, -281.62, 1, 1, 16, -28.24, -285.93, 1, 1, 16, -14.58, -194.68, 1, 4, 12, 238.39, -84.13, 0.20851, 15, 32.09999, -140.85, 0.19336, 16, -61.96, -132.26, 0.42115, 35, 129.57, 6.39, 0.17696, 5, 2, 332.7, 63.71, 0.06905, 12, 199.57, -83.03, 0.29424, 15, 3.69, -114.37, 0.2194, 16, -85.43, -101.32, 0.30859, 35, 127.34, -26.64, 0.1087, 5, 2, 307.08, 43.5, 0.11018, 12, 166.95, -82.12999, 0.37282, 15, -20.18, -92.14, 0.24572, 16, -105.18, -75.33999, 0.21862, 35, 123.08, -64.79, 0.05264, 4, 2, 307.75, 5.7, 0.18627, 12, 143.25, -111.59, 0.58009, 15, -57.43, -98.57, 0.12363, 16, -142.98, -75.33, 0.10999, 2, 2, 308.7, -30.55, 0.25, 12, 120.75, -140.04, 0.75, 2, 2, 213.94, -142.7, 0.75, 12, -23.83, -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, 4, 58, 118.47, 114.74, 0.07383, 59, 17.17, 122.49, 0.17504, 60, -100.71, 132.55, 0.06818, 1, -166.91, -67.94999, 0.68294, 4, 58, 170.4, 123.13, 0.06537, 59, 66.71, 104.77, 0.20999, 60, -53.08, 110.21, 0.12016, 1, -217.69, -61.33, 0.60447, 6, 58, 221.11, 131.31, 0.02179, 59, 115.07, 87.47, 0.23058, 60, -6.58, 88.39, 0.16258, 61, -168.92, 31, 0.02826, 62, -282.82, -90.19, 0.029, 1, -267.66, -55.14, 0.52776, 5, 59, 146.51, 86.08, 0.23635, 60, 26.66, 83.39, 0.19338, 61, -134.99, 41.34, 0.06624, 62, -257.52, -60.65, 0.06962, 1, -298.87, -61.99, 0.43436, 5, 59, 178.73, 86.41, 0.22521, 60, 56.68, 81.29, 0.20997, 61, -107.13, 46.31, 0.11271, 62, -232.44, -51.26, 0.12148, 1, -328.68, -69.24, 0.3306, 5, 59, 203.26, 86.51, 0.21603, 60, 83.06, 77.01999, 0.22457, 61, -79.56, 53.53, 0.13939, 62, -210.89, -28.3, 0.15618, 1, -354.01, -75.41, 0.26379, 5, 59, 238.06, 85.41, 0.20114, 60, 115.65, 74.66, 0.2315, 61, -49.53, 60.58, 0.16455, 62, -185.49, -14.98, 0.19123, 1, -385.33, -83.15, 0.21156, 5, 59, 255.33, 78.85, 0.18224, 60, 133.83, 63.18, 0.23194, 61, -27.04, 56.84, 0.18907, 62, -163.58, -5.26, 0.22658, 1, -406.45, -79.89, 0.17015, 5, 59, 275.48, 71.62, 0.16169, 60, 152.97, 53.58, 0.22885, 61, -5.82, 53.94, 0.21292, 62, -142.85, 0.11, 0.26159, 1, -427.72, -77.47, 0.13493, 5, 59, 313.81, 53.61, 0.14198, 60, 188.04, 35.82, 0.22293, 61, 31.84, 49.3, 0.23478, 62, -106.46, 7.49, 0.29326, 1, -465.96, -72.58999, 0.10702, 5, 59, 345.74, 45.54, 0.12502, 60, 219.6, 19.28, 0.2179, 61, 68.31, 43.02, 0.25622, 62, -70.12999, 18.19, 0.32248, 1, -502.09, -68.19, 0.07835, 4, 59, 390.81, 21.3, 0.11758, 60, 261.62, -3.66, 0.22607, 61, 114.55, 37.83, 0.29087, 62, -26.15, 30.34, 0.36547, 4, 59, 423.87, -11.11, 0.10536, 60, 291.46, -39.06, 0.21954, 61, 154.83, 14.99, 0.30098, 62, 19.91, 25.67, 0.37409, 4, 59, 456.68, -43.27, 0.09949, 60, 321.06, -74.19999, 0.21749, 61, 194.79, -7.66, 0.30788, 62, 65.62, 21.04, 0.37513, 4, 59, 480.34, -100.28, 0.10045, 60, 339.2, -133.2, 0.22026, 61, 232.3, -56.69, 0.31103, 62, 119.7, -8.68999, 0.36824, 4, 59, 424.34, -67.51999, 0.10379, 60, 286.57, -95.27, 0.23087, 61, 169.77, -39.4, 0.30828, 62, 55.51, -18.08, 0.35705, 4, 59, 387.08, -53.84, 0.11505, 60, 250.77, -78.11, 0.2454, 61, 130.24, -35.75, 0.30092, 62, 17.87, -30.67, 0.3386, 4, 59, 346.04, -38.78, 0.13471, 60, 211.34, -59.22, 0.26271, 61, 86.7, -31.72, 0.2888, 62, -23.59, -44.54, 0.31376, 5, 58, 449.17, 125.97, 0.02419, 59, 311.45, -35.25, 0.16384, 60, 175.89, -56.83, 0.2727, 61, 51.53, -43.14, 0.26317, 62, -52.88, -67.87, 0.27607, 5, 58, 418.38, 93.72, 0.05913, 59, 269.72, -40.64, 0.19681, 60, 135.19, -53.82, 0.27688, 61, 13.42, -53.11, 0.23219, 62, -82.03, -93.66, 0.23497, 5, 58, 390.82, 86.58, 0.10638, 59, 241.19, -39.8, 0.2354, 60, 105.59, -52.93, 0.27331, 61, -16.25, -62.16, 0.19459, 62, -108.34, -111.24, 0.19028, 5, 58, 364.8, 62.48, 0.14347, 59, 207.71, -42.14, 0.28099, 60, 73.33, -49.43, 0.26867, 61, -46.11, -70.49, 0.15764, 62, -129.51, -133.56, 0.1492, 5, 58, 345.49, 47.53, 0.18499, 59, 182.34, -50.62, 0.33114, 60, 45.87, -56.62, 0.25881, 61, -71.57, -84.96, 0.1174, 62, -150.85, -153.35, 0.10763, 5, 58, 319.95, 15.15, 0.23755, 59, 145.6, -61.95, 0.39396, 60, 9.60999, -63.26, 0.24619, 61, -101.06, -105.58, 0.06443, 62, -165.65, -187.83, 0.05784, 3, 58, 276.58, -30.61, 0.29942, 59, 85.52, -81.11, 0.46774, 60, -52.01, -76.62, 0.23283, 3, 58, 214.5, -70.36, 0.32855, 59, 11.97, -85.98, 0.48601, 60, -125.69, -74.48, 0.18543, 2, 58, 147.14, -113.5, 0.59565, 59, -67.83999, -91.26, 0.40433, 2, 2, -113.14, 135.84, 0.24192, 58, 91.72, -112.59, 0.75807, 2, 2, -42.12, 116.77, 0.14515, 58, 18.2, -111.17, 0.85484, 1, 2, 44.2, 107.1, 1, 2, 2, 140.09, 96.35, 0.22579, 12, 72.58999, 65.41, 0.7742, 4, 2, 137.69, 169.35, 0.05644, 12, 117.5, 123, 0.24355, 15, 78.3, 94.48, 0.2125, 16, 23.7, 91.74, 0.4875, 2, 15, 171.15, 111.98, 0.25, 16, 118.17, 93.15, 0.75, 1, 16, 158.96, -25.58, 1, 1, 1, -40.63, -86.01, 1, 3, 2, 67.33999, -86.66, 0.33215, 58, -137.02, 59.92, 0.08303, 1, 92.54, -90.61, 0.5848, 2, 2, 170.13, -66.29, 0.75, 12, -8.53, -78.72, 0.25, 2, 2, 231.74, -8.12, 0.4, 12, 76.03, -73.51999, 0.6, 4, 2, 222.04, 70.41, 0.17551, 12, 118.9, -7, 0.55823, 15, -6.58, -3.99, 0.17739, 16, -76.73, 9.18, 0.08884, 1, 16, 50.43, -46.56, 1, 1, 12, -9.88, 20.65, 1, 2, 2, -53.22, 20.53, 0.2, 58, 5.8, -15.09, 0.8, 3, 2, -180.71, 32.22, 0.08564, 58, 132.35, 4.23999, 0.56215, 59, -23.98, 19.01, 0.35219, 3, 58, 246.39, 57.53, 0.30273, 59, 101.61, 10.65, 0.46989, 60, -27.28, 13.2, 0.22737, 5, 58, 346.99, 126.85, 0.13479, 59, 223.17, 22.83, 0.28279, 60, 94.88, 13.77, 0.24481, 61, -47.85, -3.72, 0.17322, 62, -158.02, -73.16, 0.16438, 4, 59, 367.51, -9.96, 0.14656, 60, 235.45, -32.57, 0.23073, 61, 100.06, 1.62, 0.29607, 62, -24.81, -8.63, 0.32661, 4, 59, 440.24, -55.6, 0.10821, 60, 303.52, -84.91, 0.21897, 61, 182.07, -23.8, 0.31097, 62, 60.48, 1.14, 0.36182, 3, 12, 174.99, 22.22, 0.2, 15, 54.82, -19.14, 0.6, 16, -18.79999, -16.2, 0.2, 3, 58, 189.25, 30.83, 0.33253, 59, 38.68, 14.84, 0.48076, 60, -89.52, 23.34, 0.18669, 5, 58, 295.08, 91.08, 0.22891, 59, 160.45, 16.54, 0.38754, 60, 31.85, 13.48, 0.2306, 61, -106.86, -25.89, 0.08042, 62, -203.08, -117.24, 0.0725, 5, 58, 414.43, 146.25, 0.07359, 59, 291.61, 7.27, 0.20198, 60, 161.53, -8.2, 0.23762, 61, 22.27, -1.17999, 0.24024, 62, -94.86, -42.56, 0.24654, 4, 59, 404.01, -32.87, 0.12351, 60, 269.61, -58.84, 0.22261, 61, 141.21, -11.13, 0.30609, 62, 17.98, -3.72, 0.34777, 1, 16, 26.4, -166.06, 1, 1, 16, 87.21, -106.12, 1, 1, 16, 108.19, -49.62, 1, 2, 16, 61.73, -82.12999, 0.50021, 35, 4.42, 52.83, 0.49978, 2, 16, 22.84, -109.4, 0.50021, 35, 51.52, 46.73, 0.49978, 4, 12, 247.12, -50.52, 0.06545, 15, 60.86, -121.4, 0.06069, 16, -30.3, -118, 0.49079, 35, 96.58, 17.21999, 0.38305, 1, 2, 26.73, 14.8, 1, 2, 2, -107.97, 25.67, 0.24192, 58, 60.17, -6.91, 0.75807, 4, 2, 235.53, 102.96, 0.0761, 12, 150.1, 9.35, 0.35533, 15, 27.64, -12.34, 0.41675, 16, -44.43, -4.87, 0.1518, 3, 2, 227.15, 28.49, 0.31015, 12, 95.96, -42.46, 0.60548, 15, -47.23, -15.44, 0.08435, 2, 16, 5.19, -153.1, 0.87618, 35, 90.96, 71.21, 0.12381, 4, 12, 243.13, -60.59, 0.10669, 15, 51.21, -126.33, 0.09893, 16, -40.65, -121.21, 0.47072, 35, 105.71, 17.33, 0.32363, 1, 16, 23.69, -185.21, 1, 1, 16, 79.64, -175.94, 1, 1, 16, 93.96, -187.56, 1, 1, 16, 87.07, -206.55, 1, 1, 16, 64.19999, -216.74, 1, 1, 16, 52.23, -203.68, 1, 1, 16, 59.24, -187.03, 1, 1, 16, 64.26, -223.8, 1, 1, 16, 89.44, -211.41, 1, 1, 16, 102.04, -186.95, 1, 1, 16, 83.1, -166.14, 1, 1, 16, 46.84, -186.41, 1, 1, 16, 50.32, -204.36, 1, 1, 16, 41.7, -206.59, 1, 1, 16, 61.87, -230.97, 1, 5, 58, 374.97, 143.6, 0.10291, 59, 256.29, 17.42, 0.23985, 60, 127.43, 2.07, 0.2431, 61, -13.35, -3.05, 0.20854, 62, -128.14, -55.46, 0.20557, 4, 59, 327.21, 4.42, 0.17789, 60, 196.28, -19.32, 0.24248, 61, 58.71, -1.04999, 0.28055, 62, -62.24, -26.21, 0.29905, 5, 58, 318.32, 113.62, 0.17774, 59, 192.26, 20.14, 0.33383, 60, 64.19, 12.44, 0.24171, 61, -76.55, -13.67, 0.12849, 62, -182.56, -89.31, 0.11821, 2, 16, 56.98, -162.99, 0.89259, 35, 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": "skinnedmesh", + "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, 15, 3.06, 31.88, 0.51075, 14, 66.56, -109.48, 0.48924, 1, 15, 35.87, 35.62, 1, 2, 15, 60.94, 27.12, 0.8464, 29, 46.49, 31.12, 0.15359, 3, 15, 74.05, 22.67, 0.34375, 29, 36.5, 21.53, 0.64062, 45, -45.25, -29.96, 0.01562, 3, 15, 67, 31.58, 0.10937, 29, 47.66, 23.68, 0.78125, 45, -40.93, -19.44, 0.10937, 3, 15, 42.17, 62.99, 0.01562, 29, 86.98, 31.24, 0.64062, 45, -25.75, 17.61, 0.34375, 2, 29, 103.83, 34.49, 0.34375, 45, -19.24, 33.49, 0.65625, 2, 29, 114.04, 19.51, 0.10937, 45, -1.11, 33.84, 0.89062, 2, 29, 144.85, -25.73, 0.02083, 45, 53.62, 34.88, 0.97916, 1, 45, 96.03, -19.16, 1, 1, 45, 104.2, -47.31, 1, 1, 45, 71.34, -23.98, 1, 1, 45, 81.39, -64.61, 1, 1, 45, 76.8, -68.81, 1, 2, 29, 83.18, -57.72, 0.02083, 45, 46.65, -34.25, 0.97916, 2, 29, 73.13, -45.76, 0.10937, 45, 31.14, -36.12, 0.89062, 2, 29, 73.98, -26.9, 0.34375, 45, 15.82, -25.09, 0.65625, 3, 15, 103.67, 70.28, 0.01562, 29, 65.1, -26.69, 0.64062, 45, 10.78, -32.41, 0.34375, 3, 15, 133.56, 9.13, 0.10937, 29, -2.94, -25.03, 0.78125, 45, -27.84, -88.47, 0.10937, 3, 15, 123.67, -14.42, 0.34375, 29, -19.29, -5.39, 0.64062, 45, -53.23, -91.41, 0.01562, 2, 15, 97.41, -15.43, 0.8464, 29, -8.08, 18.37, 0.15359, 1, 15, 45.46, -17.43, 1, 2, 15, 40.69, -27.17, 0.45035, 14, -1.69, -93.8, 0.54964, 2, 15, -2.74, -29.63, 0.44352, 14, 18.99, -72.93, 0.55647, 1, 14, 32.11, -48.45, 1, 1, 14, 57.56, -67.43, 1, 1, 14, 84.38, -87.42, 1, 2, 15, 16.44, 5.21, 0.7182, 14, 46.31, -101.86, 0.28179, 2, 15, -4.51, 5.32, 0.48851, 14, 52.82, -81.94, 0.51148 ], - "hull": 27 + "triangles": [ 23, 24, 25, 28, 25, 26, 23, 25, 28, 0, 28, 26, 10, 11, 9, 13, 14, 12, 12, 14, 11, 11, 8, 9, 11, 14, 8, 8, 14, 7, 7, 14, 15, 15, 16, 7, 6, 16, 5, 6, 7, 16, 18, 4, 17, 18, 3, 4, 18, 19, 3, 16, 17, 5, 17, 4, 5, 19, 20, 3, 3, 20, 2, 2, 20, 21, 2, 21, 1, 21, 27, 1, 21, 22, 27, 1, 27, 0, 27, 23, 28, 27, 22, 23, 27, 28, 0 ], + "vertices": [ 2, 13, 3.06, 31.88, 0.51075, 12, 66.56, -109.48, 0.48924, 1, 13, 35.87, 35.62, 1, 2, 13, 60.94, 27.12, 0.8464, 14, 46.49, 31.12, 0.15358, 2, 13, 74.05, 22.67, 0.3492, 14, 36.5, 21.53, 0.65078, 3, 13, 67, 31.58, 0.10937, 14, 47.66, 23.68, 0.78125, 27, -40.93, -19.44, 0.10937, 2, 14, 86.98, 31.24, 0.65078, 27, -25.75, 17.61, 0.3492, 2, 14, 103.83, 34.49, 0.34375, 27, -19.24, 33.49, 0.65625, 2, 14, 114.04, 19.51, 0.10937, 27, -1.11, 33.84, 0.89062, 1, 27, 53.62, 34.88, 1, 1, 27, 96.03, -19.16, 1, 1, 27, 104.2, -47.31, 1, 1, 27, 71.33999, -23.98, 1, 1, 27, 81.39, -64.61, 1, 1, 27, 76.8, -68.81, 1, 1, 27, 46.65, -34.25, 1, 2, 14, 73.12999, -45.76, 0.10937, 27, 31.14, -36.12, 0.89062, 2, 14, 73.98, -26.9, 0.34375, 27, 15.82, -25.09, 0.65625, 2, 14, 65.1, -26.69, 0.65078, 27, 10.78, -32.41, 0.3492, 3, 13, 133.56, 9.13, 0.10937, 14, -2.94, -25.03, 0.78125, 27, -27.84, -88.47, 0.10937, 2, 13, 123.67, -14.42, 0.3492, 14, -19.29, -5.39, 0.65078, 2, 13, 97.41, -15.43, 0.8464, 14, -8.08, 18.37, 0.15358, 1, 13, 45.46, -17.43, 1, 2, 13, 40.68999, -27.17, 0.45035, 12, -1.69, -93.8, 0.54964, 2, 13, -2.74, -29.63, 0.44352, 12, 18.99, -72.93, 0.55646, 1, 12, 32.11, -48.45, 1, 1, 12, 57.56, -67.43, 1, 1, 12, 84.38, -87.42, 1, 2, 13, 16.44, 5.21, 0.7182, 12, 46.31, -101.86, 0.28178, 2, 13, -4.51, 5.32, 0.48851, 12, 52.82, -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": "skinnedmesh", + "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, 43, 9, 10, 42, 43, 10, 41, 43, 42, 13, 44, 42, 10, 13, 42, 11, 13, 10, 13, 11, 12, 45, 8, 9, 45, 9, 43, 40, 8, 45, 41, 42, 44, 45, 43, 41, 45, 41, 44, 16, 40, 45, 17, 40, 16, 15, 45, 44, 16, 45, 15, 14, 15, 44, 13, 14, 44, 19, 21, 38, 20, 21, 19, 39, 38, 6, 39, 6, 7, 40, 39, 7, 40, 7, 8, 18, 19, 38, 18, 38, 39, 17, 39, 40, 18, 39, 17, 47, 25, 48, 24, 25, 47, 35, 48, 34, 47, 48, 35, 51, 24, 47, 23, 24, 51, 3, 34, 2, 35, 34, 3, 36, 51, 47, 23, 51, 36, 22, 23, 36, 36, 47, 35, 4, 35, 3, 36, 35, 4, 37, 22, 36, 21, 22, 37, 5, 37, 36, 5, 36, 4, 6, 37, 5, 38, 21, 37, 38, 37, 6, 29, 30, 46, 32, 31, 0, 46, 31, 32, 28, 29, 46, 28, 46, 32, 32, 27, 28, 50, 27, 32, 33, 32, 0, 33, 0, 1, 49, 50, 32, 33, 49, 32, 26, 27, 50, 26, 50, 49, 25, 26, 49, 48, 49, 33, 25, 49, 48, 34, 33, 1, 48, 33, 34, 34, 1, 2 ], - "vertices": [ 3, 4, 128.03, 88.47, 0.83908, 10, -70.2, -134.13, 0.01331, 2, 158.83, -71.91, 0.1476, 2, 4, 219.55, 53.15, 0.77988, 10, -48.04, -38.58, 0.22011, 3, 4, 266.3, 35.1, 0.53531, 10, -36.73, 10.22, 0.46443, 30, 127.25, 245.46, 2.4E-4, 4, 4, 286.89, 9.79, 0.35076, 10, -14.56, 34.14, 0.64667, 30, 125.69, 212.88, 0.0023, 44, 101.39, 199.13, 2.5E-4, 4, 4, 281.54, -41.24, 0.09169, 10, 36.71, 36, 0.90196, 30, 87.64, 178.44, 0.00513, 44, 58.29, 171.29, 0.00119, 5, 4, 271.53, -136.86, 0.05608, 10, 132.77, 39.48, 0.69232, 16, 34.99, 78.76, 0.22087, 30, 16.38, 113.93, 0.0224, 44, -22.45, 119.13, 0.0083, 5, 4, 283.51, -164.25, 0.01987, 10, 158.21, 55.17, 0.50334, 16, 52.65, 54.63, 0.3617, 30, 7.01, 85.54, 0.08322, 44, -36.28, 92.63, 0.03184, 6, 4, 326.15, -179.3, 0.00798, 10, 167.14, 99.49, 0.21327, 16, 97.55, 49.25, 0.35075, 30, 28.72, 45.87, 0.14107, 44, -21.26, 49.99, 0.22311, 60, -72.29, 25.96, 0.0638, 6, 4, 333.96, -167.35, 0.00242, 10, 154.22, 105.55, 0.07519, 16, 102.57, 62.6, 0.22995, 30, 42.51, 49.55, 0.2831, 44, -7.06, 51.39, 0.2694, 60, -58.17, 28.03, 0.13992, 6, 4, 344.19, -149.68, 4.9E-4, 10, 134.24, 114.44, 0.0176, 16, 109.72, 83.39, 0.11397, 30, 64.09, 55.23, 0.07976, 44, 15.12, 53.51, 0.36292, 60, -36.09, 31.19, 0.42523, 1, 60, 35.8, 41.81, 1, 1, 60, 128.11, 17.93, 1, 1, 60, 188.72, -29.42, 1, 1, 60, 44.86, -26.17, 1, 1, 44, 133.17, -49.83, 1, 1, 44, 78.78, -50.15, 1, 5, 4, 399.32, -220.02, 2.2E-4, 10, 195.56, 179.43, 0.01703, 16, 179.46, 27.52, 0.2372, 30, 58.34, -33.93, 0.2023, 44, -4.91, -33.55, 0.54324, 5, 4, 370.41, -244.91, 3.2E-4, 10, 225.9, 152.49, 0.02513, 16, 155.04, -5.13, 0.35003, 30, 17.88, -32.5, 0.29852, 44, -44.62, -25.61, 0.32598, 5, 4, 340.37, -270.04, 0.00251, 10, 254.98, 126.27, 0.10129, 16, 131.21, -36.2, 0.54075, 30, -21.24, -31.17, 0.2082, 44, -83.02, -17.97, 0.14723, 5, 4, 225.1, -238.94, 0.01529, 10, 240.33, 7.81, 0.24036, 16, 11.94, -30.98, 0.57881, 30, -86.31, 68.9, 0.12023, 44, -131.06, 91.29, 0.04528, 5, 4, 194.64, -233.55, 0.04819, 10, 239.26, -23.1, 0.40427, 16, -18.96, -32.37, 0.48451, 30, -105.4, 93.25, 0.04604, 44, -145.97, 118.4, 0.01697, 5, 4, 187.65, -209.73, 0.09565, 10, 216.66, -33.35, 0.57617, 16, -30.97, -10.65, 0.30651, 30, -94.71, 115.65, 0.01788, 44, -131.8, 138.78, 0.00376, 4, 4, 163.85, -128.67, 0.19533, 10, 139.75, -68.26, 0.8011, 30, -58.32, 191.88, 0.00327, 44, -83.58, 208.13, 2.9E-4, 4, 4, 165.74, -94.49, 0.31921, 10, 105.59, -71.26, 0.6795, 30, -5.04, 220.72, 0.00117, 44, -56.32, 275.96, 1.0E-4, 4, 4, 166.39, -79.07, 0.46205, 10, 90.23, -72.76, 0.53752, 30, 5.55, 230.48, 3.9E-4, 44, -40.61, 286.16, 2.0E-5, 3, 4, 166.49, -74.17, 0.53779, 10, 85.42, -73.28, 0.46208, 30, -19.99, 230.7, 1.2E-4, 2, 4, 141.54, -82.46, 0.73138, 10, 97.13, -96.82, 0.26861, 3, 4, 99.76, -97.08, 0.81379, 10, 117.34, -136.23, 0.13997, 2, -2.56, -164.19, 0.04623, 3, 4, 45.01, -114.56, 0.8186, 10, 142.41, -187.89, 0.02098, 2, -51.09, -135.29, 0.1604, 3, 4, -16.2, -74.76, 0.62389, 10, 113.82, -253.08, 0.00952, 2, -42.95, -58.38, 0.36658, 2, 4, -74.73, -19.33, 0.31468, 2, -52.66, 17.55, 0.68531, 2, 4, 1.67, 76.75, 0.25576, 2, 70.07, 18.78, 0.74423, 1, 4, 93.54, 4.13, 1, 2, 4, 185.14, -6.66, 0.75461, 10, 15.98, -64.27, 0.24538, 2, 4, 217.11, -18.75, 0.50845, 10, 23.47, -30.93, 0.49154, 3, 4, 225.63, -32.92, 0.32512, 10, 36.3, -20.5, 0.6744, 30, 51.57, 221.95, 4.7E-4, 4, 4, 223, -84.73, 0.20061, 10, 87.96, -15.86, 0.79287, 30, 15.03, 185.13, 0.00581, 44, -12.28, 189.61, 6.9E-4, 5, 4, 235.61, -168.06, 0.07777, 10, 168.69, 8.29, 0.54931, 16, 6.74, 40.47, 0.33413, 30, -31.18, 114.66, 0.0321, 44, -69.27, 127.55, 0.00667, 5, 4, 259.63, -194.79, 0.01921, 10, 191.79, 35.8, 0.30498, 16, 36, 19.62, 0.53642, 30, -31.14, 78.74, 0.09568, 44, -75.03, 92.09, 0.04369, 5, 4, 332.55, -220.1, 0.00292, 10, 206.64, 111.53, 0.10776, 16, 112.69, 10.82, 0.51915, 30, 6.25, 11.23, 0.23449, 44, -49.03, 19.43, 0.13566, 4, 10, 192.51, 130.62, 0.03213, 16, 130.6, 26.41, 0.33941, 30, 29.35, 5.71, 0.27333, 44, -27.12, 10.25, 0.35511, 1, 44, 67.46, 3.16, 1, 1, 60, 19.07, -14.51, 1, 6, 4, 381.55, -150.4, 3.0E-4, 10, 130.71, 150.34, 0.00811, 16, 145.36, 89.53, 0.04102, 30, 89.29, 30.41, 0.02558, 44, 36, 24.95, 0.37636, 60, -13.89, 3.64, 0.54861, 1, 44, 86.23, -6.55, 1, 4, 10, 164.9, 153.55, 0.02263, 16, 151.18, 56, 0.23908, 30, 65.44, 5.55, 0.19254, 44, 8.45, 4.27, 0.54574, 2, 4, -9.28, -17.5, 0.59606, 2, 7.72, -30.85, 0.40393, 3, 4, 195.9, -53.81, 0.42356, 10, 61.11, -47.06, 0.57613, 30, 39.7, 225.21, 2.9E-4, 3, 4, 190.1, -48.45, 0.53227, 10, 56.61, -53.56, 0.46765, 30, 39.83, 233.12, 6.0E-5, 2, 4, 161.26, -48.26, 0.79873, 10, 60.44, -82.13, 0.20126, 3, 4, 120.37, -58.54, 0.8485, 10, 76.31, -121.18, 0.14441, 2, 41.04, -161.4, 0.00707, 4, 4, 197.37, -69.23, 0.33487, 10, 76.17, -43.46, 0.66324, 30, 30.34, 213.88, 0.0017, 44, -9.09, 262.42, 1.8E-4 ], - "hull": 32 + "triangles": [ 46, 30, 31, 13, 44, 42, 13, 11, 12, 11, 13, 10, 10, 13, 42, 41, 43, 42, 42, 43, 10, 43, 9, 10, 41, 42, 44, 45, 43, 41, 45, 9, 43, 15, 44, 13, 45, 41, 44, 15, 45, 44, 16, 45, 15, 17, 40, 16, 16, 40, 45, 45, 40, 8, 45, 8, 9, 14, 15, 13, 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": [ 2, 20, 128.03, 88.47, 0.8504, 1, 158.83, -71.91, 0.14959, 2, 20, 219.55, 53.15, 0.77988, 21, -48.04, -38.58, 0.22011, 2, 20, 266.3, 35.09999, 0.53544, 21, -36.73, 10.22, 0.46455, 2, 20, 286.89, 9.79, 0.35166, 21, -14.56, 34.14, 0.64832, 2, 20, 281.54, -41.24, 0.09228, 21, 36.71, 36, 0.90771, 3, 20, 271.53, -136.86, 0.05786, 21, 132.77, 39.48, 0.71425, 22, 34.99, 78.76, 0.22787, 3, 21, 158.21, 55.17, 0.5308, 22, 52.65, 54.63, 0.38143, 23, 7.01, 85.54, 0.08776, 5, 21, 167.14, 99.49, 0.21498, 22, 97.55, 49.25, 0.35357, 23, 28.72, 45.87, 0.14219, 24, -21.26, 49.99, 0.22491, 25, -72.29, 25.96, 0.06431, 5, 21, 154.22, 105.55, 0.07537, 22, 102.57, 62.6, 0.23051, 23, 42.51, 49.55, 0.28379, 24, -7.06, 51.39, 0.27004, 25, -58.17, 28.03, 0.14026, 4, 22, 109.72, 83.39, 0.11607, 23, 64.08999, 55.23, 0.08123, 24, 15.12, 53.51, 0.36961, 25, -36.09, 31.19, 0.43307, 1, 25, 35.8, 41.81, 1, 1, 25, 128.11, 17.93, 1, 1, 25, 188.72, -29.42, 1, 2, 24, 93.29, -7.6, 0.47999, 25, 44.86, -26.17, 0.52, 2, 24, 133.17, -49.83, 0.776, 25, 86.69, -66.47, 0.22399, 2, 24, 78.78, -50.15, 0.76799, 25, 32.38, -69.36, 0.232, 1, 24, -4.91, -33.55, 1, 3, 22, 155.04, -5.13, 0.35917, 23, 17.87999, -32.5, 0.30632, 24, -44.62, -25.61, 0.33449, 4, 21, 254.98, 126.27, 0.10154, 22, 131.21, -36.2, 0.54211, 23, -21.24, -31.17, 0.20873, 24, -83.01999, -17.96999, 0.1476, 3, 21, 240.33, 7.81, 0.25586, 22, 11.94, -30.98, 0.61614, 23, -86.31, 68.9, 0.12797, 2, 21, 239.26, -23.1, 0.45486, 22, -18.95999, -32.37, 0.54513, 3, 20, 187.65, -209.73, 0.09777, 21, 216.66, -33.34999, 0.58892, 22, -30.97, -10.65, 0.3133, 2, 20, 163.85, -128.67, 0.19603, 21, 139.75, -68.26, 0.80396, 2, 20, 165.74, -94.49, 0.31962, 21, 105.59, -71.26, 0.68037, 2, 20, 166.39, -79.07, 0.46225, 21, 90.23, -72.76, 0.53774, 2, 20, 166.49, -74.17, 0.53785, 21, 85.42, -73.28, 0.46213, 2, 20, 141.54, -82.46, 0.73138, 21, 97.13, -96.82, 0.26861, 2, 20, 99.76, -97.08, 0.85324, 21, 117.34, -136.23, 0.14675, 2, 20, 45.01, -114.56, 0.83615, 1, -51.09, -135.29, 0.16384, 2, 20, -16.2, -74.76, 0.62989, 1, -42.95, -58.38, 0.3701, 2, 20, -74.73, -19.33, 0.31468, 1, -52.66, 17.54999, 0.68531, 2, 20, 1.67, 76.75, 0.25576, 1, 70.07, 18.78, 0.74423, 1, 20, 93.54, 4.13, 1, 2, 20, 185.14, -6.66, 0.75461, 21, 15.98, -64.26999, 0.24538, 2, 20, 217.11, -18.75, 0.50844, 21, 23.47, -30.93, 0.49154, 2, 20, 225.63, -32.91999, 0.32527, 21, 36.3, -20.5, 0.67472, 2, 20, 223, -84.73, 0.20192, 21, 87.96, -15.86, 0.79807, 3, 20, 235.61, -168.06, 0.0809, 21, 168.69, 8.29, 0.57147, 22, 6.74, 40.47, 0.34761, 3, 21, 191.79, 35.8, 0.32545, 22, 36, 19.62, 0.57243, 23, -31.14, 78.74, 0.10211, 4, 21, 206.64, 111.53, 0.10808, 22, 112.69, 10.82, 0.52067, 23, 6.25, 11.23, 0.23517, 24, -49.03, 19.43, 0.13606, 3, 22, 130.6, 26.41, 0.35067, 23, 29.35, 5.71, 0.28241, 24, -27.12, 10.25, 0.3669, 2, 24, 67.46, 3.16, 0.384, 25, 18.54999, -16.62999, 0.61599, 1, 25, 19.07, -14.51, 1, 2, 24, 36, 24.95, 0.384, 25, -13.89, 3.64, 0.61599, 2, 24, 86.23, -6.55, 0.48799, 25, 37.75, -25.46, 0.512, 4, 21, 164.9, 153.55, 0.02263, 22, 151.18, 56, 0.23908, 23, 65.44, 5.55, 0.19254, 24, 8.45, 4.27, 0.54574, 2, 20, -9.28, -17.5, 0.59605, 1, 7.72, -30.85, 0.40393, 2, 20, 195.9, -53.81, 0.42368, 21, 61.11, -47.06, 0.5763, 2, 20, 190.1, -48.45, 0.53231, 21, 56.61, -53.56, 0.46768, 2, 20, 161.26, -48.26, 0.79873, 21, 60.44, -82.12999, 0.20126, 2, 20, 120.37, -58.54, 0.85455, 21, 76.31, -121.18, 0.14544, 2, 20, 197.37, -69.23, 0.3355, 21, 76.17, -43.46, 0.66449 ], + "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": "skinnedmesh", + "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": [ 16, 47, 15, 15, 12, 13, 15, 13, 14, 15, 47, 12, 47, 10, 11, 17, 46, 47, 47, 46, 10, 18, 46, 17, 17, 47, 16, 18, 45, 46, 47, 11, 12, 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, 20, 21, 44, 20, 45, 19, 44, 45, 20, 45, 18, 19, 46, 9, 10, 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, 28, 29, 40, 40, 39, 4, 7, 42, 6, 24, 42, 22, 40, 29, 39, 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, 6, 53.94, 69.15, 1, 1, 6, 126.23, 67.31, 1, 2, 6, 226.42, 31.13, 0.9375, 11, -30.87, -1.11, 0.0625, 2, 6, 240.84, 25.33, 0.7, 11, -25.64, 13.52, 0.3, 2, 6, 246.67, 8.05, 0.3, 11, -8.61, 20.02, 0.7, 3, 6, 240.81, -115.25, 0.0625, 11, 114.8, 19.01, 0.875, 19, 9.48, 59.16, 0.0625, 2, 11, 131.07, 29.69, 0.7, 19, 22.11, 44.35, 0.3, 2, 11, 146.06, 39.54, 0.3, 19, 33.76, 30.71, 0.7, 4, 11, 152.6, 65.01, 0.12438, 19, 59.85, 27.41, 0.74434, 35, 15.85, 48.05, 0.12104, 51, -80.52, 23.87, 0.01022, 4, 11, 154.28, 71.59, 0.0519, 19, 66.59, 26.56, 0.74749, 35, 16.72, 41.31, 0.15401, 51, -77.54, 17.76, 0.04658, 4, 11, 145.73, 77.3, 0.02193, 19, 71.19, 35.76, 0.63296, 35, 26.78, 39.17, 0.1288, 51, -67.32, 18.96, 0.21628, 3, 19, 87.93, 69.21, 0.0625, 35, 63.37, 31.39, 0.675, 51, -30.17, 23.3, 0.26249, 2, 35, 113.82, 35.72, 0.1038, 51, 16.23, 43.56, 0.89619, 1, 51, 128.14, 12.02, 1, 1, 51, 161.85, -15.81, 1, 2, 35, 90.98, -23.36, 0.0138, 51, 13.52, -19.72, 0.98619, 2, 35, 62.97, -25.81, 0.7, 51, -12.23, -31.02, 0.3, 3, 19, 115.12, -1.33, 0.08333, 35, 1.93, -12.66, 0.83333, 51, -74.26, -38.1, 0.08333, 2, 19, 106.11, -23.53, 0.3, 35, -21.8, -9.52, 0.7, 2, 19, 97.43, -44.9, 0.7, 35, -44.67, -6.51, 0.3, 2, 19, 84.26, -40.69, 0.9375, 35, -43.9, 7.29, 0.0625, 1, 19, 49.18, -29.46, 1, 2, 11, 206.75, 5.37, 0.13333, 19, 7.44, -33.77, 0.86666, 2, 11, 219.64, -20.52, 0.36111, 19, -16.64, -49.8, 0.63888, 2, 11, 208.4, -37.82, 0.72083, 19, -35.22, -40.82, 0.27916, 2, 11, 200.49, -50.02, 0.91666, 19, -48.31, -34.48, 0.08333, 1, 11, 161.1, -36.97, 1, 2, 6, 150.1, -116.76, 0.08333, 11, 119.88, -71.55, 0.91666, 2, 6, 154.99, -70.71, 0.42846, 11, 73.68, -68.47, 0.57153, 2, 6, 150.3, -65.27, 0.35604, 11, 68.42, -73.36, 0.64395, 2, 6, 146.51, -60.87, 0.59147, 11, 64.17, -77.32, 0.40852, 2, 6, 115.12, -75.08, 0.8446, 11, 79.61, -108.13, 0.15539, 1, 6, 63.33, -98.53, 1, 1, 6, 21.78, -94.55, 1, 1, 6, -66.69, -32.04, 1, 1, 6, -6.62, 52.97, 1, 1, 6, 58.14, -6, 1, 1, 6, 121.17, 2.44, 1, 2, 6, 188.87, -12.1, 0.96, 11, 13.79, -36.92, 0.04, 2, 6, 197.11, -18.42, 0.7, 11, 19.79, -28.44, 0.3, 2, 6, 203.98, -28.61, 0.3, 11, 29.69, -21.17, 0.7, 3, 6, 213.53, -136.06, 0.04, 11, 136.67, -7.42, 0.91999, 19, -14.02, 34.16, 0.04, 2, 11, 164.32, 0.66, 0.7, 19, -2.53, 7.73, 0.3, 2, 11, 177.97, 21.57, 0.25, 19, 19.92, -3.19, 0.75, 3, 11, 187.55, 72.78, 0.04, 19, 71.93, -6.29, 0.91999, 35, -13.72, 27.87, 0.04, 2, 19, 79.66, -3.72, 0.7, 35, -9.28, 21.04, 0.3, 3, 19, 87.98, 7.25, 0.3, 35, 3.42, 15.76, 0.66, 51, -81.96, -10.7, 0.04, 3, 19, 114.16, 61.85, 0.04, 35, 62.84, 4.15, 0.7, 51, -21.95, -2.66, 0.26 ], - "hull": 36 + "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, 40, 53.94, 69.15, 1, 1, 40, 126.23, 67.31, 1, 2, 40, 226.42, 31.13, 0.9375, 41, -30.87, -1.11, 0.0625, 2, 40, 240.84, 25.33, 0.7, 41, -25.64, 13.52, 0.3, 2, 40, 246.67, 8.05, 0.3, 41, -8.60999, 20.02, 0.7, 3, 40, 240.81, -115.25, 0.0625, 41, 114.8, 19.01, 0.875, 42, 9.47999, 59.16, 0.0625, 2, 41, 131.07, 29.69, 0.7, 42, 22.11, 44.35, 0.3, 2, 41, 146.06, 39.54, 0.3, 42, 33.75999, 30.71, 0.7, 3, 41, 152.6, 65.01, 0.12566, 42, 59.85, 27.41, 0.75203, 43, 15.85, 48.05, 0.12229, 3, 41, 154.28, 71.58999, 0.05444, 42, 66.58999, 26.56, 0.78401, 43, 16.71999, 41.31, 0.16154, 3, 42, 71.19, 35.75999, 0.64716, 43, 26.78, 39.16999, 0.13169, 44, -67.32, 18.95999, 0.22114, 3, 42, 87.93, 69.21, 0.0625, 43, 63.37, 31.39, 0.675, 44, -30.17, 23.3, 0.26249, 2, 43, 113.82, 35.72, 0.1038, 44, 16.23, 43.56, 0.89619, 1, 44, 128.14, 12.02, 1, 1, 44, 161.85, -15.81, 1, 2, 43, 90.98, -23.36, 0.0138, 44, 13.52, -19.71999, 0.98619, 2, 43, 62.97, -25.81, 0.7, 44, -12.23, -31.02, 0.3, 3, 42, 115.12, -1.33, 0.08333, 43, 1.93, -12.66, 0.83333, 44, -74.26, -38.09999, 0.08333, 2, 42, 106.11, -23.53, 0.3, 43, -21.8, -9.52, 0.7, 2, 42, 97.43, -44.9, 0.7, 43, -44.67, -6.51, 0.3, 2, 42, 84.26, -40.68999, 0.9375, 43, -43.9, 7.29, 0.0625, 1, 42, 49.18, -29.46, 1, 2, 41, 206.75, 5.37, 0.13333, 42, 7.44, -33.77, 0.86666, 2, 41, 219.64, -20.52, 0.36111, 42, -16.64, -49.8, 0.63888, 2, 41, 208.4, -37.82, 0.72083, 42, -35.22, -40.82, 0.27916, 2, 41, 200.49, -50.02, 0.91666, 42, -48.31, -34.48, 0.08333, 1, 41, 161.1, -36.97, 1, 2, 40, 150.1, -116.76, 0.08333, 41, 119.88, -71.55, 0.91666, 2, 40, 154.99, -70.71, 0.42846, 41, 73.68, -68.47, 0.57153, 2, 40, 150.3, -65.26999, 0.35604, 41, 68.42, -73.36, 0.64395, 2, 40, 146.51, -60.87, 0.59147, 41, 64.17, -77.32, 0.40852, 2, 40, 115.12, -75.08, 0.8446, 41, 79.61, -108.13, 0.15538, 1, 40, 63.33, -98.53, 1, 1, 40, 21.78, -94.55, 1, 1, 40, -66.69, -32.04, 1, 1, 40, -6.62, 52.97, 1, 1, 40, 58.14, -6, 1, 1, 40, 121.17, 2.44, 1, 1, 40, 188.87, -12.1, 1, 2, 40, 197.11, -18.42, 0.7, 41, 19.79, -28.44, 0.3, 2, 40, 203.98, -28.61, 0.3, 41, 29.69, -21.17, 0.7, 1, 41, 136.67, -7.42, 1, 2, 41, 164.32, 0.66, 0.7, 42, -2.53, 7.73, 0.3, 2, 41, 177.97, 21.57, 0.25, 42, 19.92, -3.19, 0.75, 1, 42, 71.93, -6.29, 1, 2, 42, 79.66, -3.72, 0.7, 43, -9.28, 21.04, 0.3, 2, 42, 87.98, 7.25, 0.3125, 43, 3.42, 15.76, 0.6875, 3, 42, 114.16, 61.85, 0.04, 43, 62.84, 4.15, 0.7, 44, -21.95, -2.66, 0.26 ], + "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": { @@ -306,11 +410,14 @@ }, "raptor_jaw": { "raptor_jaw": { - "type": "skinnedmesh", - "uvs": [ 0.40984, 0.22169, 0.42214, 0.3988, 0.67894, 0.53819, 0.7589, 0.62838, 0.99999, 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, 0.31758, 0.50047 ], - "triangles": [ 14, 13, 0, 10, 11, 15, 15, 14, 1, 2, 7, 8, 8, 9, 10, 15, 2, 8, 15, 8, 10, 7, 3, 6, 7, 2, 3, 2, 15, 1, 6, 3, 5, 5, 3, 4, 14, 0, 1, 11, 14, 15, 11, 12, 14, 14, 12, 13 ], - "vertices": [ 1, 48, 28.6, 68.85, 1, 1, 48, 69.65, 38.95, 1, 1, 48, 150.72, 72.88, 1, 1, 48, 186.16, 74.79, 1, 1, 48, 199.76, 159.69, 1, 1, 48, 213.35, 148.16, 1, 1, 48, 242.43, 74.42, 1, 1, 48, 230.31, -13.08, 1, 1, 48, 189.56, -71.99, 1, 1, 48, 132.76, -105.6, 1, 1, 48, 83.71, -55.39, 1, 2, 33, -18.31, 12.1, 0.67732, 48, -0.04, -70.76, 0.32267, 1, 33, 113.44, 16.95, 1, 1, 33, 116.36, -62.48, 1, 1, 48, 1.86, 5.43, 1, 1, 48, 71.19, -4.17, 1 ], - "hull": 14 + "type": "mesh", + "uvs": [ 0.40984, 0.22169, 0.42214, 0.3988, 0.67894, 0.53819, 0.7589, 0.62838, 0.99999, 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": [ 2, 7, 8, 8, 9, 10, 2, 8, 10, 7, 3, 6, 7, 2, 3, 2, 10, 1, 6, 3, 5, 11, 14, 10, 10, 14, 1, 5, 3, 4, 14, 0, 1, 14, 13, 0, 11, 12, 14, 14, 12, 13 ], + "vertices": [ 1, 35, 28.6, 68.85, 1, 1, 35, 69.65, 38.95, 1, 1, 35, 150.72, 72.87999, 1, 1, 35, 186.16, 74.79, 1, 1, 35, 199.76, 159.69, 1, 1, 35, 213.35, 148.16, 1, 1, 35, 242.43, 74.42, 1, 1, 35, 230.31, -13.08, 1, 1, 35, 189.56, -71.99, 1, 1, 35, 132.76, -105.6, 1, 1, 35, 83.71, -55.39, 1, 2, 16, -18.31, 12.1, 0.67732, 35, -0.04, -70.76, 0.32267, 1, 16, 113.44, 16.95, 1, 1, 16, 116.36, -62.48, 1, 1, 35, 1.86, 5.43, 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": { @@ -321,11 +428,14 @@ }, "raptor_saddle_strap_rear": { "raptor_saddle_strap_rear": { - "type": "skinnedmesh", + "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, 22, 15, 20, 14, 15, 22, 5, 20, 4, 22, 20, 5, 15, 16, 20, 20, 21, 4, 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, 21, 3.9, -3.27, 1, 1, 21, 4.25, 15.05, 1, 1, 21, 13.24, 20.28, 1, 2, 21, 23.42, 21.2, 0.7, 37, -15.2, 21.22, 0.3, 3, 21, 41.11, 22.87, 0.3, 37, 2.48, 22.89, 0.6375, 53, -33.83, 24.96, 0.0625, 3, 21, 52.07, 21.72, 0.0625, 37, 13.43, 21.74, 0.6375, 53, -22.97, 23.11, 0.3, 2, 37, 18.39, 20.76, 0.25, 53, -18.09, 21.82, 0.75, 1, 53, -18.76, 33.09, 1, 1, 53, 49.92, 31.57, 1, 1, 53, 53.21, 25, 1, 1, 53, 53.11, -27.48, 1, 1, 53, 49.74, -31.27, 1, 1, 53, -20.73, -36.76, 1, 1, 53, -23.82, -22.28, 1, 3, 21, 53.48, -24.61, 0.0625, 37, 14.84, -24.59, 0.575, 53, -24.51, -23.21, 0.3625, 3, 21, 41.44, -26.12, 0.3, 37, 2.81, -26.09, 0.6375, 53, -36.62, -23.95, 0.0625, 2, 21, 24.38, -26.12, 0.7, 37, -14.24, -26.1, 0.3, 1, 21, 5.57, -26.12, 1, 1, 21, 3.54, -22.64, 1, 1, 53, -23.08, -0.04, 1, 3, 21, 41.66, -1.72, 0.3, 37, 3.03, -1.7, 0.66, 53, -34.85, 0.38, 0.04, 2, 21, 23.85, -2.46, 0.7, 37, -14.77, -2.44, 0.3, 3, 21, 52.58, -1.52, 0.04, 37, 13.95, -1.5, 0.62, 53, -23.94, -0.11, 0.34 ], - "hull": 19 + "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, 50, 3.9, -3.27, 1, 1, 50, 4.25, 15.05, 1, 1, 50, 13.24, 20.28, 1, 2, 50, 23.42, 21.2, 0.7, 51, -15.2, 21.22, 0.3, 3, 50, 41.11, 22.87, 0.3, 51, 2.48, 22.89, 0.6375, 52, -33.83, 24.96, 0.0625, 3, 50, 52.07, 21.72, 0.0625, 51, 13.43, 21.74, 0.6375, 52, -22.97, 23.11, 0.3, 2, 51, 18.39, 20.76, 0.25, 52, -18.09, 21.82, 0.75, 1, 52, -18.76, 33.09, 1, 1, 52, 49.92, 31.57, 1, 1, 52, 53.21, 25, 1, 1, 52, 53.11, -27.48, 1, 1, 52, 49.74, -31.27, 1, 1, 52, -20.73, -36.75999, 1, 1, 52, -23.82, -22.28, 1, 3, 50, 53.48, -24.61, 0.0625, 51, 14.84, -24.59, 0.575, 52, -24.51, -23.21, 0.3625, 3, 50, 41.43999, -26.12, 0.3, 51, 2.81, -26.09, 0.6375, 52, -36.62, -23.95, 0.0625, 2, 50, 24.38, -26.12, 0.7, 51, -14.24, -26.1, 0.3, 1, 50, 5.57, -26.12, 1, 1, 50, 3.54, -22.64, 1, 1, 52, -23.08, -0.04, 1, 2, 50, 41.66, -1.72, 0.3125, 51, 3.03, -1.7, 0.6875, 2, 50, 23.85, -2.46, 0.7, 51, -14.77, -2.44, 0.3, 2, 51, 13.95, -1.5, 0.64582, 52, -23.94, -0.11, 0.35416 ], + "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": { @@ -333,11 +443,14 @@ }, "raptor_tongue": { "raptor_tongue": { - "type": "skinnedmesh", + "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, 55, 3.63, 27.04, 0.6875, 62, -47.26, 33.87, 0.3125, 3, 55, 39.09, 19.45, 0.3125, 62, -13.41, 20.86, 0.625, 65, -51.54, 33.37, 0.0625, 3, 55, 71.56, 19.02, 0.0625, 62, 18.58, 15.39, 0.625, 65, -21.56, 20.92, 0.3125, 2, 62, 55.03, 16.85, 0.3125, 65, 14.29, 14.23, 0.6875, 2, 62, 93.34, 18.39, 0.08333, 65, 51.98, 7.21, 0.91666, 1, 65, 56.09, -4.5, 1, 2, 62, 85.06, -1.49, 0.08333, 65, 39.48, -10.33, 0.91666, 2, 62, 54.22, -9.18, 0.3125, 65, 7.71, -10.96, 0.6875, 3, 55, 75.14, -14.72, 0.0625, 62, 16.87, -18.5, 0.625, 65, -30.77, -11.73, 0.3125, 3, 55, 38.8, -25.8, 0.3125, 62, -20.74, -23.8, 0.625, 65, -68.62, -8.53, 0.0625, 2, 55, 2.4, -35.77, 0.6875, 62, -58.25, -27.99, 0.3125, 2, 55, -17.28, -40.62, 0.91666, 62, -78.45, -29.71, 0.08333, 1, 55, -59.91, 8.18, 1, 2, 55, -26.13, 37.69, 0.91666, 62, -75.02, 49.02, 0.08333 ], - "hull": 14 + "triangles": [ 7, 8, 3, 6, 7, 3, 4, 6, 3, 6, 4, 5, 8, 7, 6, 9, 1, 2, 8, 9, 2, 9, 10, 1, 8, 2, 3, 0, 11, 12, 0, 12, 13, 10, 11, 0, 1, 10, 0 ], + "vertices": [ 2, 63, 3.63, 27.04, 0.6875, 64, -47.26, 33.87, 0.3125, 3, 63, 39.09, 19.45, 0.3125, 64, -13.41, 20.86, 0.625, 65, -51.54, 33.37, 0.0625, 3, 63, 71.56, 19.02, 0.0625, 64, 18.58, 15.39, 0.625, 65, -21.56, 20.92, 0.3125, 2, 64, 55.03, 16.85, 0.3125, 65, 14.29, 14.23, 0.6875, 2, 64, 93.34, 18.39, 0.08333, 65, 51.98, 7.21, 0.91666, 1, 65, 56.09, -4.5, 1, 2, 64, 85.06, -1.49, 0.08333, 65, 39.48, -10.33, 0.91666, 2, 64, 54.22, -9.18, 0.3125, 65, 7.71, -10.96, 0.6875, 3, 63, 75.14, -14.72, 0.0625, 64, 16.87, -18.5, 0.625, 65, -30.77, -11.73, 0.3125, 3, 63, 38.8, -25.8, 0.3125, 64, -20.74, -23.8, 0.625, 65, -68.62, -8.53, 0.0625, 2, 63, 2.4, -35.77, 0.6875, 64, -58.25, -27.99, 0.3125, 2, 63, -17.28, -40.62, 0.91666, 64, -78.44999, -29.71, 0.08333, 1, 63, -59.91, 8.18, 1, 2, 63, -26.13, 37.68999, 0.91666, 64, -75.01999, 49.02, 0.08333 ], + "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": { @@ -351,11 +464,14 @@ }, "stirrup_strap": { "stirrup_strap": { - "type": "skinnedmesh", + "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, 26, 24.71, 8.03, 0.80344, 39, -17.42, 11.02, 0.19655, 2, 26, 37.95, 8.04, 0.59978, 39, -4.36, 8.87, 0.40021, 2, 26, 50.88, 8.04, 0.36895, 39, 8.39, 6.77, 0.63104, 2, 26, 65.92, 12.27, 0.17748, 39, 23.91, 8.48, 0.82251, 2, 26, 81.72, 16.7, 0.05943, 39, 40.23, 10.28, 0.94056, 2, 26, 98.82, 25.04, 0.01209, 39, 58.46, 15.71, 0.9879, 2, 26, 114.44, 11.57, 0.00191, 39, 71.67, -0.11, 0.99808, 2, 26, 100.47, -4.61, 0.01817, 39, 55.25, -13.81, 0.98182, 2, 26, 78.79, -4.14, 0.07487, 39, 33.94, -9.81, 0.92512, 2, 26, 65.83, -6.24, 0.2028, 39, 20.81, -9.76, 0.79719, 2, 26, 49.78, -8.83, 0.39971, 39, 4.55, -9.7, 0.60028, 2, 26, 37.93, -10.97, 0.62658, 39, -7.48, -9.88, 0.37341, 2, 26, 25.85, -13.15, 0.82034, 39, -19.75, -10.06, 0.17965, 2, 26, 0.25, -18.03, 0.95288, 39, -45.81, -10.7, 0.04711, 2, 26, -17.83, -2.43, 0.97709, 39, -61.11, 7.63, 0.0229, 2, 26, 1.57, 20.07, 0.94774, 39, -38.29, 26.67, 0.05225, 2, 26, 10.84, -1.23, 0.97709, 39, -32.62, 4.14, 0.0229 ], - "hull": 16 + "triangles": [ 7, 5, 6, 7, 4, 5, 7, 8, 4, 8, 3, 4, 8, 9, 3, 9, 2, 3, 9, 10, 2, 2, 10, 1, 10, 11, 1, 11, 12, 1, 13, 16, 12, 12, 0, 1, 12, 16, 0, 16, 15, 0, 13, 14, 16, 16, 14, 15 ], + "vertices": [ 2, 56, 24.71, 8.03, 0.80344, 57, -17.42, 11.02, 0.19655, 2, 56, 37.95, 8.04, 0.59978, 57, -4.36, 8.87, 0.40021, 2, 56, 50.88, 8.04, 0.36895, 57, 8.39, 6.77, 0.63103, 2, 56, 65.92, 12.27, 0.17748, 57, 23.91, 8.47999, 0.82251, 2, 56, 81.72, 16.7, 0.05943, 57, 40.23, 10.28, 0.94056, 2, 56, 98.82, 25.04, 0.01209, 57, 58.46, 15.71, 0.9879, 2, 56, 114.44, 11.57, 0.00191, 57, 71.67, -0.11, 0.99808, 2, 56, 100.47, -4.61, 0.01816, 57, 55.25, -13.81, 0.98182, 2, 56, 78.79, -4.14, 0.07487, 57, 33.93999, -9.81, 0.92512, 2, 56, 65.83, -6.24, 0.2028, 57, 20.81, -9.76, 0.79719, 2, 56, 49.78, -8.83, 0.39971, 57, 4.55, -9.7, 0.60028, 2, 56, 37.93, -10.97, 0.62658, 57, -7.48, -9.88, 0.37341, 2, 56, 25.85, -13.15, 0.82034, 57, -19.75, -10.06, 0.17965, 2, 56, 0.25, -18.03, 0.95288, 57, -45.81, -10.7, 0.04711, 2, 56, -17.83, -2.43, 0.97709, 57, -61.11, 7.63, 0.0229, 2, 56, 1.57, 20.07, 0.94774, 57, -38.29, 26.67, 0.05225, 2, 56, 10.84, -1.23, 0.97709, 57, -32.62, 4.14, 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": { @@ -364,6 +480,1179 @@ } }, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "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.9, "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.7, "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.7, "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.7, "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.7, "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.7, "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.7, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.7, "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.7, "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.7, "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 } + ] + } + } + }, "empty": {}, "gungrab": { "slots": { @@ -439,13 +1728,7 @@ }, "ik": { "front_arm_goal": [ - { - "time": 0, - "mix": 1, - "bendPositive": true, - "curve": [ 0.317, 0.13, 0.781, 0.56 ] - }, - { "time": 0.1333, "mix": 0, "bendPositive": true } + { "time": 0, "mix": 0 } ] } }, @@ -552,9 +1835,6 @@ "front_leg1": { "rotate": [ { "time": 0, "angle": 27.07 }, - { "time": 0.5333, "angle": -41.93 }, - { "time": 0.6333, "angle": -16.71 }, - { "time": 0.7333, "angle": 16.92 }, { "time": 1.0666, "angle": 31.39 } ], "translate": [ @@ -583,9 +1863,6 @@ "rear_leg1": { "rotate": [ { "time": 0, "angle": -64.85 }, - { "time": 0.1, "angle": -45.79 }, - { "time": 0.1666, "angle": -19.95 }, - { "time": 0.4, "angle": 35.36 }, { "time": 1.0666, "angle": -45.71 } ], "translate": [ @@ -639,9 +1916,6 @@ "front_leg2": { "rotate": [ { "time": 0, "angle": -347.28 }, - { "time": 0.5333, "angle": -346.78 }, - { "time": 0.6333, "angle": -398.52 }, - { "time": 0.7333, "angle": -393.21 }, { "time": 1.0666, "angle": -362.06 } ], "translate": [ @@ -652,11 +1926,6 @@ "rear_leg2": { "rotate": [ { "time": 0, "angle": 27.05 }, - { "time": 0.0666, "angle": -14.99 }, - { "time": 0.1, "angle": -28.87 }, - { "time": 0.1666, "angle": -49.87 }, - { "time": 0.4, "angle": -14.45 }, - { "time": 0.4666, "angle": 11.42 }, { "time": 1.0666, "angle": 9.92 } ], "translate": [ @@ -705,25 +1974,22 @@ }, "tail2": { "rotate": [ - { "time": 0, "angle": -6.57 }, - { "time": 0.0666, "angle": -1.96 }, - { "time": 0.3333, "angle": -18.09 }, - { "time": 0.6333, "angle": -1.96 }, - { "time": 0.9, "angle": -18.09 }, - { "time": 1.0666, "angle": -6.57 } + { "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 1.024, "y": 1 }, - { "time": 0.0666, "x": 1.072, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 0.6333, "x": 1.072, "y": 1 }, - { "time": 0.9, "x": 0.903, "y": 1 }, - { "time": 1.0666, "x": 1.024, "y": 1 } + { "time": 0, "x": 0.8, "y": 1 }, + { "time": 0.2333, "x": 0.9, "y": 1 }, + { "time": 0.5, "x": 0.8, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 0.8, "y": 1 } ] }, "torso2": { @@ -841,23 +2107,22 @@ }, "tail3": { "rotate": [ - { "time": 0, "angle": -14.83 }, - { "time": 0.0666, "angle": -24.31 }, - { "time": 0.3333, "angle": 8.86 }, - { "time": 0.6333, "angle": -24.31 }, - { "time": 0.9, "angle": 8.86 }, - { "time": 1.0666, "angle": -14.83 } + { "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "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": { @@ -969,36 +2234,43 @@ }, "tail4": { "rotate": [ - { "time": 0, "angle": 16.99 }, - { "time": 0.0666, "angle": 7.36 }, - { "time": 0.3333, "angle": 41.06 }, - { "time": 0.6333, "angle": 7.36 }, - { "time": 0.9, "angle": 41.06 }, - { "time": 1.0666, "angle": 16.99 } + { "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "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, "angle": 36.9 }, { "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 } + { "time": 1, "angle": 27.74 }, + { "time": 1.0666, "angle": 36.9 } ], "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, @@ -1098,23 +2370,39 @@ }, "tail5": { "rotate": [ - { "time": 0, "angle": -15.7 }, - { "time": 0.0666, "angle": -38.39 }, - { "time": 0.3333, "angle": 41.03 }, - { "time": 0.6333, "angle": -38.39 }, - { "time": 0.9, "angle": 41.03 }, - { "time": 1.0666, "angle": -15.7 } + { + "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": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "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": { @@ -1132,7 +2420,7 @@ }, "front_foot3": { "rotate": [ - { "time": 0, "angle": 27.59 }, + { "time": 0, "angle": -1.65 }, { "time": 0.0666, "angle": -5.29 }, { "time": 0.1333, "angle": -3.94 }, { "time": 0.2666, "angle": -3.81 }, @@ -1141,8 +2429,8 @@ { "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 } + { "time": 1, "angle": 10.93 }, + { "time": 1.0666, "angle": -1.65 } ], "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, @@ -1283,21 +2571,21 @@ ] } }, - "ffd": { + "deform": { "default": { "raptor_body": { "raptor_body": [ { "time": 0 }, { "time": 0.2666, - "offset": 368, - "vertices": [ -16.78, 15.47, -0.63, 22.82, 18.11, 13.89, 19.32, 12.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, 0, 0, 0, 0, 0, 0, -3.24, 0.81, 0, 0, -3.24, 0.81 ] + "offset": 314, + "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, -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": 368, - "vertices": [ -16.78, 15.47, -0.63, 22.82, 18.11, 13.89, 19.32, 12.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, 0, 0, 0, 0, 0, 0, -3.24, 0.81, 0, 0, -3.24, 0.81 ] + "offset": 314, + "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, -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 } ] @@ -1308,18 +2596,18 @@ { "time": 0.2666 }, { "time": 0.5333, - "offset": 216, - "vertices": [ -2.23, 21.95, 21.54, -4.75 ] + "offset": 138, + "vertices": [ -2.23608, 21.95403, 21.54915, -4.7554 ] }, { "time": 0.6, - "offset": 216, - "vertices": [ 7.17, 15.14, 15.26, -6.91 ] + "offset": 138, + "vertices": [ 7.17962, 15.14358, 15.26523, -6.91741 ] }, { "time": 0.7333, - "offset": 176, - "vertices": [ -0.82, 0.73, -0.01, -1.1, -0.27, 1.06, -1.28, 0.39, 0, 0, 0, 0, 0, 0, 1.48, -2.59, 0.98, 2.82, 2.73, -10.49, 6.12, 8.95, -3.72, -10.18, -2.6, -2.28, 3.43, -0.47, -3.44, -0.39, -2.28, -4.76, 5.08, 1.4, -4.58, -2.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.37, -1.75, 2.22, 0.1, -1.86, -0.75, -2.86, -0.77, 2.45, -1.65 ] + "offset": 110, + "vertices": [ -0.82485, 0.73406, -0.01284, -1.10443, 0, 0, 0, 0, 1.4866, -2.59426, 0.98071, 2.82342, 2.7366, -10.49935, 6.12506, 8.95282, -2.60873, -2.28384, 3.43417, -0.47045, -2.28305, -4.76037, 5.08892, 1.40078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 ] }, { "time": 0.8, "curve": "stepped" }, { "time": 0.9666, "curve": "stepped" }, diff --git a/spine-starling/spine-starling-example/src/raptor.png b/spine-starling/spine-starling-example/src/raptor.png index 861dbce1a..503d1c446 100644 Binary files a/spine-starling/spine-starling-example/src/raptor.png and b/spine-starling/spine-starling-example/src/raptor.png differ diff --git a/spine-starling/spine-starling-example/src/spine/GoblinsExample.as b/spine-starling/spine-starling-example/src/spine/examples/GoblinsExample.as similarity index 97% rename from spine-starling/spine-starling-example/src/spine/GoblinsExample.as rename to spine-starling/spine-starling-example/src/spine/examples/GoblinsExample.as index e8b12a11c..a63248c6d 100644 --- a/spine-starling/spine-starling-example/src/spine/GoblinsExample.as +++ b/spine-starling/spine-starling-example/src/spine/examples/GoblinsExample.as @@ -29,8 +29,8 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -package spine { - +package spine.examples { +import spine.*; import spine.atlas.Atlas; import spine.attachments.AtlasAttachmentLoader; import spine.attachments.AttachmentLoader; @@ -65,7 +65,7 @@ public class GoblinsExample extends Sprite { private var skeleton:SkeletonAnimation; public function GoblinsExample () { - var useStarlingAtlas:Boolean = true; + var useStarlingAtlas:Boolean = false; var attachmentLoader:AttachmentLoader; if (useStarlingAtlas) { @@ -81,7 +81,7 @@ public class GoblinsExample extends Sprite { var json:SkeletonJson = new SkeletonJson(attachmentLoader); var skeletonData:SkeletonData = json.readSkeletonData(new GoblinsJson()); - skeleton = new SkeletonAnimation(skeletonData, true); + skeleton = new SkeletonAnimation(skeletonData); skeleton.x = 320; skeleton.y = 420; skeleton.skeleton.skinName = "goblin"; diff --git a/spine-starling/spine-starling-example/src/spine/Main.as b/spine-starling/spine-starling-example/src/spine/examples/Main.as similarity index 91% rename from spine-starling/spine-starling-example/src/spine/Main.as rename to spine-starling/spine-starling-example/src/spine/examples/Main.as index 7636a041c..f2b78236e 100644 --- a/spine-starling/spine-starling-example/src/spine/Main.as +++ b/spine-starling/spine-starling-example/src/spine/examples/Main.as @@ -29,7 +29,7 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -package spine { +package spine.examples { import flash.display.Sprite; @@ -41,13 +41,16 @@ public class Main extends Sprite { public function Main () { var example:Class; - //example = SpineboyExample; - //example = GoblinsExample; - example = RaptorExample; + // example = SpineboyExample; + // example = GoblinsExample; + // example = RaptorExample; + // example = TankExample; + example = VineExample; _starling = new Starling(example, stage); _starling.enableErrorChecking = true; _starling.showStats = true; + _starling.skipUnchangedFrames = false; _starling.start(); } } diff --git a/spine-starling/spine-starling-example/src/spine/RaptorExample.as b/spine-starling/spine-starling-example/src/spine/examples/RaptorExample.as similarity index 97% rename from spine-starling/spine-starling-example/src/spine/RaptorExample.as rename to spine-starling/spine-starling-example/src/spine/examples/RaptorExample.as index 29280ec83..fb3289099 100644 --- a/spine-starling/spine-starling-example/src/spine/RaptorExample.as +++ b/spine-starling/spine-starling-example/src/spine/examples/RaptorExample.as @@ -29,8 +29,9 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -package spine { +package spine.examples { import spine.atlas.Atlas; +import spine.*; import spine.attachments.AtlasAttachmentLoader; import spine.attachments.AttachmentLoader; import spine.starling.SkeletonAnimation; @@ -64,7 +65,7 @@ public class RaptorExample extends Sprite { json.scale = 0.5; var skeletonData:SkeletonData = json.readSkeletonData(new RaptorJson()); - skeleton = new SkeletonAnimation(skeletonData, true); + skeleton = new SkeletonAnimation(skeletonData); skeleton.x = 400; skeleton.y = 560; skeleton.state.setAnimationByName(0, "walk", true); diff --git a/spine-starling/spine-starling-example/src/spine/SpineboyExample.as b/spine-starling/spine-starling-example/src/spine/examples/SpineboyExample.as similarity index 97% rename from spine-starling/spine-starling-example/src/spine/SpineboyExample.as rename to spine-starling/spine-starling-example/src/spine/examples/SpineboyExample.as index 22ff7b3a5..46dc6a9cd 100644 --- a/spine-starling/spine-starling-example/src/spine/SpineboyExample.as +++ b/spine-starling/spine-starling-example/src/spine/examples/SpineboyExample.as @@ -29,8 +29,9 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -package spine { +package spine.examples { import spine.animation.AnimationStateData; +import spine.*; import spine.atlas.Atlas; import spine.attachments.AtlasAttachmentLoader; import spine.attachments.AttachmentLoader; @@ -67,7 +68,7 @@ public class SpineboyExample extends Sprite { stateData.setMixByName("jump", "run", 0.4); stateData.setMixByName("jump", "jump", 0.2); - skeleton = new SkeletonAnimation(skeletonData, false, stateData); + skeleton = new SkeletonAnimation(skeletonData, stateData); skeleton.x = 400; skeleton.y = 560; @@ -85,6 +86,7 @@ public class SpineboyExample extends Sprite { + event.data.name + ": " + event.intValue + ", " + event.floatValue + ", " + event.stringValue); }); + skeleton.skeleton.setToSetupPose(); skeleton.state.setAnimationByName(0, "run", true); skeleton.state.addAnimationByName(0, "jump", false, 3); skeleton.state.addAnimationByName(0, "run", true, 0); diff --git a/spine-starling/spine-starling-example/src/spine/examples/TankExample.as b/spine-starling/spine-starling-example/src/spine/examples/TankExample.as new file mode 100644 index 000000000..bc4108da8 --- /dev/null +++ b/spine-starling/spine-starling-example/src/spine/examples/TankExample.as @@ -0,0 +1,73 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +package spine.examples { +import spine.atlas.Atlas; +import spine.*; +import spine.attachments.AtlasAttachmentLoader; +import spine.attachments.AttachmentLoader; +import spine.starling.SkeletonAnimation; +import spine.starling.StarlingTextureLoader; + +import starling.core.Starling; +import starling.display.Sprite; + +public class TankExample extends Sprite { + [Embed(source = "/tank.json", mimeType = "application/octet-stream")] + static public const TankJson:Class; + + [Embed(source = "/tank.atlas", mimeType = "application/octet-stream")] + static public const TankAtlas:Class; + + [Embed(source = "/tank.png")] + static public const TankAtlasTexture:Class; + + private var skeleton:SkeletonAnimation; + + public function TankExample () { + var attachmentLoader:AttachmentLoader; + var spineAtlas:Atlas = new Atlas(new TankAtlas(), new StarlingTextureLoader(new TankAtlasTexture())); + attachmentLoader = new AtlasAttachmentLoader(spineAtlas); + + var json:SkeletonJson = new SkeletonJson(attachmentLoader); + json.scale = 0.5; + var skeletonData:SkeletonData = json.readSkeletonData(new TankJson()); + + skeleton = new SkeletonAnimation(skeletonData); + skeleton.x = 400; + skeleton.y = 560; + skeleton.state.setAnimationByName(0, "drive", true); + + addChild(skeleton); + Starling.juggler.add(skeleton); + } +} +} diff --git a/spine-starling/spine-starling-example/src/spine/examples/VineExample.as b/spine-starling/spine-starling-example/src/spine/examples/VineExample.as new file mode 100644 index 000000000..ff997d6ad --- /dev/null +++ b/spine-starling/spine-starling-example/src/spine/examples/VineExample.as @@ -0,0 +1,73 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +package spine.examples { +import spine.*; +import spine.atlas.Atlas; +import spine.attachments.AtlasAttachmentLoader; +import spine.attachments.AttachmentLoader; +import spine.starling.SkeletonAnimation; +import spine.starling.StarlingTextureLoader; + +import starling.core.Starling; +import starling.display.Sprite; + +public class VineExample extends Sprite { + [Embed(source = "/vine.json", mimeType = "application/octet-stream")] + static public const VineJson:Class; + + [Embed(source = "/vine.atlas", mimeType = "application/octet-stream")] + static public const VineAtlas:Class; + + [Embed(source = "/vine.png")] + static public const VineAtlasTexture:Class; + + private var skeleton:SkeletonAnimation; + + public function VineExample () { + var attachmentLoader:AttachmentLoader; + var spineAtlas:Atlas = new Atlas(new VineAtlas(), new StarlingTextureLoader(new VineAtlasTexture())); + attachmentLoader = new AtlasAttachmentLoader(spineAtlas); + + var json:SkeletonJson = new SkeletonJson(attachmentLoader); + json.scale = 0.5; + var skeletonData:SkeletonData = json.readSkeletonData(new VineJson()); + + skeleton = new SkeletonAnimation(skeletonData); + skeleton.x = 400; + skeleton.y = 560; + skeleton.state.setAnimationByName(0, "animation", true); + + addChild(skeleton); + Starling.juggler.add(skeleton); + } +} +} diff --git a/spine-starling/spine-starling-example/src/spineboy.atlas b/spine-starling/spine-starling-example/src/spineboy.atlas index 19c0934b1..2454a1f47 100644 --- a/spine-starling/spine-starling-example/src/spineboy.atlas +++ b/spine-starling/spine-starling-example/src/spineboy.atlas @@ -1,194 +1,216 @@ spineboy.png +size: 1024,1024 format: RGBA8888 filter: Linear,Linear repeat: none eye_indifferent rotate: true - xy: 389, 5 - size: 56, 53 - orig: 56, 53 + xy: 648, 629 + size: 93, 89 + orig: 93, 89 offset: 0, 0 index: -1 eye_surprised - rotate: false - xy: 580, 34 - size: 56, 53 - orig: 56, 53 + rotate: true + xy: 233, 179 + size: 93, 89 + orig: 93, 89 offset: 0, 0 index: -1 front_bracer rotate: false - xy: 732, 85 - size: 35, 48 - orig: 35, 48 + xy: 245, 2 + size: 58, 80 + orig: 58, 80 offset: 0, 0 index: -1 front_fist_closed rotate: false - xy: 556, 91 - size: 45, 49 - orig: 45, 49 + xy: 168, 45 + size: 75, 82 + orig: 75, 82 offset: 0, 0 index: -1 front_fist_open rotate: false - xy: 668, 32 - size: 52, 52 - orig: 52, 52 + xy: 844, 646 + size: 86, 87 + orig: 86, 87 offset: 0, 0 index: -1 front_foot - rotate: false - xy: 924, 201 - size: 76, 41 - orig: 76, 41 + rotate: true + xy: 310, 326 + size: 126, 69 + orig: 126, 69 offset: 0, 0 index: -1 front_foot_bend1 - rotate: false - xy: 845, 200 - size: 77, 42 - orig: 77, 42 + rotate: true + xy: 951, 894 + size: 128, 70 + orig: 128, 70 offset: 0, 0 index: -1 front_foot_bend2 rotate: false - xy: 778, 186 - size: 65, 56 - orig: 65, 56 + xy: 2, 33 + size: 108, 93 + orig: 108, 93 offset: 0, 0 index: -1 front_shin rotate: true - xy: 444, 91 - size: 49, 110 - orig: 49, 110 + xy: 739, 735 + size: 82, 184 + orig: 82, 184 offset: 0, 0 index: -1 front_thigh - rotate: true - xy: 603, 89 - size: 29, 67 - orig: 29, 67 + rotate: false + xy: 381, 340 + size: 48, 112 + orig: 48, 112 offset: 0, 0 index: -1 front_upper_arm - rotate: true - xy: 672, 86 - size: 32, 58 - orig: 32, 58 + rotate: false + xy: 112, 29 + size: 54, 97 + orig: 54, 97 offset: 0, 0 index: -1 goggles rotate: false - xy: 444, 142 - size: 157, 100 - orig: 157, 100 + xy: 156, 454 + size: 261, 166 + orig: 261, 166 offset: 0, 0 index: -1 gun rotate: false - xy: 603, 120 - size: 126, 122 - orig: 126, 122 + xy: 739, 819 + size: 210, 203 + orig: 210, 203 offset: 0, 0 index: -1 head rotate: false - xy: 279, 63 - size: 163, 179 - orig: 163, 179 + 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: false - xy: 845, 163 - size: 56, 35 - orig: 56, 35 + rotate: true + xy: 951, 799 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 mouth_oooo - rotate: false - xy: 842, 126 - size: 56, 35 - orig: 56, 35 + rotate: true + xy: 245, 84 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 mouth_smile rotate: false - xy: 769, 97 - size: 56, 35 - orig: 56, 35 + xy: 925, 738 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 muzzle rotate: false - xy: 2, 2 - size: 275, 240 - orig: 277, 240 + xy: 2, 622 + size: 462, 400 + orig: 462, 400 offset: 0, 0 index: -1 neck rotate: false - xy: 903, 173 - size: 22, 25 - orig: 22, 25 + xy: 168, 2 + size: 36, 41 + orig: 36, 41 offset: 0, 0 index: -1 rear_bracer rotate: false - xy: 722, 40 - size: 34, 43 - orig: 34, 43 + xy: 932, 664 + size: 56, 72 + orig: 56, 72 offset: 0, 0 index: -1 rear_foot rotate: false - xy: 444, 11 - size: 68, 36 - orig: 68, 36 + xy: 487, 562 + size: 113, 60 + orig: 113, 60 offset: 0, 0 index: -1 rear_foot_bend1 - rotate: false - xy: 444, 49 - size: 70, 40 - orig: 70, 40 + rotate: true + xy: 419, 503 + size: 117, 66 + orig: 117, 66 offset: 0, 0 index: -1 rear_foot_bend2 rotate: false - xy: 778, 134 - size: 62, 50 - orig: 62, 50 + xy: 739, 650 + size: 103, 83 + orig: 103, 83 offset: 0, 0 index: -1 rear_shin rotate: false - xy: 731, 135 - size: 45, 107 - orig: 45, 107 + xy: 233, 274 + size: 75, 178 + orig: 75, 178 offset: 0, 0 index: -1 rear_thigh rotate: true - xy: 516, 50 - size: 39, 62 - orig: 39, 62 + xy: 487, 495 + size: 65, 104 + orig: 65, 104 offset: 0, 0 index: -1 rear_upper_arm - rotate: false - xy: 638, 35 - size: 28, 52 - orig: 28, 52 + rotate: true + xy: 156, 129 + size: 47, 87 + orig: 47, 87 offset: 0, 0 index: -1 torso rotate: true - xy: 279, 2 - size: 59, 108 - orig: 59, 108 + xy: 466, 624 + size: 98, 180 + orig: 98, 180 offset: 0, 0 index: -1 diff --git a/spine-starling/spine-starling-example/src/spineboy.json b/spine-starling/spine-starling-example/src/spineboy.json index 7b4497712..e9e6e761b 100644 --- a/spine-starling/spine-starling-example/src/spineboy.json +++ b/spine-starling/spine-starling-example/src/spineboy.json @@ -1,39 +1,31 @@ { +"skeleton": { "hash": "rPoYyBLFG6F0CGZ5wsUEBKDJU9U", "spine": "3.4.00", "width": 0, "height": 0, "images": "./images/" }, "bones": [ { "name": "hip", "y": 247.47 }, - { "name": "front_thigh", "parent": "hip", "length": 74.8, "x": -17.45, "y": -11.64, "rotation": -95.51, "color": "00ff04ff" }, - { "name": "rear_thigh", "parent": "hip", "length": 85.71, "x": 8.91, "y": -5.62, "rotation": -72.54, "color": "ff000dff" }, - { "name": "torso", "parent": "hip", "length": 127.55, "x": -1.61, "y": 4.9, "rotation": 103.82, "color": "e0da19ff" }, - { - "name": "front_shin", - "parent": "front_thigh", - "length": 128.76, - "x": 78.69, - "y": 1.6, - "rotation": -2.21, - "inheritScale": false, - "color": "00ff04ff" - }, - { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "x": 103.75, "y": 19.32, "rotation": 168.37, "color": "00ff04ff" }, - { "name": "neck", "parent": "torso", "length": 25.45, "x": 127.49, "y": -0.3, "rotation": -31.53, "color": "e0da19ff" }, - { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "x": 86.1, "y": -1.32, "rotation": -19.83, "color": "ff000dff" }, - { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "x": 92.35, "y": -19.22, "rotation": -169.55, "color": "ff000dff" }, + { "name": "torso", "parent": "hip", "length": 127.55, "rotation": 103.82, "x": -1.61, "y": 4.9, "color": "e0da19ff" }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "rotation": 168.37, "x": 103.75, "y": 19.32, "color": "00ff04ff" }, { "name": "front_bracer", "parent": "front_upper_arm", "length": 40.57, + "rotation": 18.29, "x": 68.8, "y": -0.68, - "rotation": 18.29, "color": "00ff04ff" }, - { "name": "front_foot", "parent": "front_shin", "length": 91.34, "x": 128.75, "y": -0.33, "rotation": 77.9, "color": "00ff04ff" }, - { "name": "head", "parent": "neck", "length": 263.57, "x": 27.66, "y": -0.25, "rotation": 23.18, "color": "e0da19ff" }, - { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "x": 51.35, "rotation": 23.15, "color": "ff000dff" }, - { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "x": 121.45, "y": -0.75, "rotation": 69.3, "color": "ff000dff" }, - { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "x": 40.56, "y": 0.19, "rotation": 12.43, "color": "00ff04ff" }, - { "name": "gun", "parent": "rear_bracer", "length": 43.1, "x": 34.42, "y": -0.45, "rotation": 5.34, "color": "ff000dff" }, - { "name": "gunTip", "parent": "gun", "x": 201.04, "y": 52.13, "rotation": 6.83, "color": "ff000dff" } + { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "rotation": 12.43, "x": 40.56, "y": 0.19, "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.76, "rotation": -2.21, "x": 78.69, "y": 1.6, "color": "00ff04ff" }, + { "name": "front_foot", "parent": "front_shin", "length": 91.34, "rotation": 77.9, "x": 128.75, "y": -0.33, "color": "00ff04ff" }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -169.55, "x": 92.35, "y": -19.22, "color": "ff000dff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "rotation": 23.15, "x": 51.35, "color": "ff000dff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "rotation": 5.34, "x": 34.42, "y": -0.45, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.04, "y": 52.13, "color": "ff000dff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" }, + { "name": "head", "parent": "neck", "length": 263.57, "rotation": 23.18, "x": 27.66, "y": -0.25, "color": "e0da19ff" }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "rotation": -72.54, "x": 8.91, "y": -5.62, "color": "ff000dff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.83, "x": 86.1, "y": -1.32, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "rotation": 69.3, "x": 121.45, "y": -0.75, "color": "ff000dff" } ], "slots": [ { "name": "rear_upper_arm", "bone": "rear_upper_arm", "attachment": "rear_upper_arm" }, @@ -54,7 +46,7 @@ { "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", "additive": true }, + { "name": "muzzle", "bone": "gunTip", "blend": "additive" }, { "name": "head-bb", "bone": "head" } ], "skins": { @@ -96,7 +88,8 @@ "head-bb": { "head": { "type": "boundingbox", - "vertices": [ -19.143097, -70.30209, 40.80313, -118.074234, 257.77155, -115.61827, 285.16193, 57.18005, 120.77191, 164.95125, -5.067627, 76.94907 ] + "vertexCount": 6, + "vertices": [ -19.14, -70.3, 40.8, -118.07, 257.77, -115.61, 285.16, 57.18, 120.77, 164.95, -5.06, 76.94 ] } }, "mouth": { @@ -1832,10 +1825,6 @@ ] }, "muzzle": { - "attachment": [ - { "time": 0.1333, "name": "muzzle" }, - { "time": 0.2666, "name": null } - ], "color": [ { "time": 0.1333, @@ -1848,6 +1837,10 @@ "curve": [ 0.821, 0, 0.909, 0.89 ] }, { "time": 0.2666, "color": "ffffff00" } + ], + "attachment": [ + { "time": 0.1333, "name": "muzzle" }, + { "time": 0.2666, "name": null } ] } }, @@ -2015,7 +2008,7 @@ ] } }, - "draworder": [ + "drawOrder": [ { "time": 0.6666, "offsets": [ diff --git a/spine-starling/spine-starling-example/src/spineboy.png b/spine-starling/spine-starling-example/src/spineboy.png index dce2fe3e2..2eae82219 100644 Binary files a/spine-starling/spine-starling-example/src/spineboy.png and b/spine-starling/spine-starling-example/src/spineboy.png differ diff --git a/spine-starling/spine-starling-example/src/tank.atlas b/spine-starling/spine-starling-example/src/tank.atlas new file mode 100644 index 000000000..ecf24e7df --- /dev/null +++ b/spine-starling/spine-starling-example/src/tank.atlas @@ -0,0 +1,125 @@ + +tank.png +size: 2048,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +images/antenna + rotate: true + xy: 1295, 683 + size: 22, 303 + orig: 22, 303 + offset: 0, 0 + index: -1 +images/cannon + rotate: false + xy: 2, 93 + size: 931, 58 + orig: 931, 58 + offset: 0, 0 + index: -1 +images/cannonConnector + rotate: true + xy: 1676, 455 + size: 112, 135 + orig: 112, 135 + offset: 0, 0 + index: -1 +images/guntower + rotate: false + xy: 1295, 707 + size: 730, 289 + orig: 730, 289 + offset: 0, 0 + index: -1 +images/machinegun + rotate: false + xy: 2, 34 + size: 331, 57 + orig: 331, 57 + offset: 0, 0 + index: -1 +images/machinegun-mount + rotate: false + xy: 1952, 609 + size: 72, 96 + orig: 72, 96 + offset: 0, 0 + index: -1 +images/rock + rotate: false + xy: 935, 96 + size: 252, 55 + orig: 252, 55 + offset: 0, 0 + index: -1 +images/tankBottom + rotate: false + xy: 2, 377 + size: 1285, 276 + orig: 1285, 276 + offset: 0, 0 + index: -1 +images/tankBottom-shadow + rotate: false + xy: 2, 655 + size: 1291, 341 + orig: 1291, 341 + offset: 0, 0 + index: -1 +images/tankTop + rotate: false + xy: 2, 153 + size: 1407, 222 + orig: 1407, 222 + offset: 0, 0 + index: -1 +images/tread + rotate: false + xy: 2, 2 + size: 96, 30 + orig: 96, 30 + offset: 0, 0 + index: -1 +images/tread-inside + rotate: false + xy: 335, 63 + size: 25, 28 + orig: 25, 28 + offset: 0, 0 + index: -1 +images/wheel-big + rotate: false + xy: 1295, 490 + size: 191, 191 + orig: 191, 191 + offset: 0, 0 + index: -1 +images/wheel-big-overlay + rotate: false + xy: 1488, 495 + size: 186, 186 + orig: 186, 186 + offset: 0, 0 + index: -1 +images/wheel-mid + rotate: false + xy: 1676, 569 + size: 136, 136 + orig: 136, 136 + offset: 0, 0 + index: -1 +images/wheel-mid-overlay + rotate: false + xy: 1814, 569 + size: 136, 136 + orig: 136, 136 + offset: 0, 0 + index: -1 +images/wheel-small + rotate: false + xy: 1813, 496 + size: 71, 71 + orig: 71, 71 + offset: 0, 0 + index: -1 diff --git a/spine-starling/spine-starling-example/src/tank.json b/spine-starling/spine-starling-example/src/tank.json new file mode 100644 index 000000000..c26ccbe47 --- /dev/null +++ b/spine-starling/spine-starling-example/src/tank.json @@ -0,0 +1,1899 @@ +{ +"skeleton": { "hash": "kgtyty1lpfv5JU2lygtFi2u3oQQ", "spine": "3.3.07", "width": 1914.53, "height": 964.05, "images": "" }, +"bones": [ + { "name": "root" }, + { "name": "tankRoot", "parent": "root", "y": 200 }, + { "name": "tankTreads", "parent": "tankRoot" }, + { "name": "tankBody", "parent": "tankTreads", "y": 10 }, + { "name": "guntower", "parent": "tankBody", "x": -21.72, "y": 245.47 }, + { "name": "antennaRoot", "parent": "guntower", "x": 164.6, "y": 202.52 }, + { "name": "antenna1", "parent": "antennaRoot", "length": 40, "rotation": 90, "y": 39.99, "color": "ffee00ff" }, + { "name": "antenna2", "parent": "antenna1", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna3", "parent": "antenna2", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna4", "parent": "antenna3", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna5", "parent": "antenna4", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna6", "parent": "antenna5", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "cannonConnector", "parent": "guntower", "x": -235.04, "y": 96.07 }, + { "name": "cannonTarget", "parent": "tankRoot", "x": -1486.66, "y": 351.82, "color": "ff3f00ff" }, + { "name": "cannon", "parent": "cannonConnector", "length": 946.68, "rotation": 180, "color": "ff4000ff" }, + { "name": "cannonTip", "parent": "cannon", "x": 946.68, "color": "ff4000ff" }, + { "name": "machineGunTarget", "parent": "tankRoot", "x": -1474, "y": 559.42, "color": "ff3f00ff" }, + { + "name": "machinegun-mount", + "parent": "guntower", + "length": 90.97, + "rotation": 90, + "x": -123.72, + "y": 218.32, + "color": "15ff00ff" + }, + { + "name": "machinegun", + "parent": "machinegun-mount", + "length": 208.94, + "rotation": 90, + "x": 91.52, + "y": -1.03, + "color": "15ff00ff" + }, + { "name": "machinegun-tip", "parent": "machinegun", "x": 210.42, "y": -12.2 }, + { "name": "rock", "parent": "root", "x": -656.45 }, + { + "name": "tread", + "parent": "tankRoot", + "length": 82, + "rotation": 180, + "x": -22.89, + "y": 213.85, + "scaleX": 0.993, + "color": "e64344ff" + }, + { "name": "tread2", "parent": "tread", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread3", "parent": "tread2", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread4", "parent": "tread3", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread5", "parent": "tread4", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread6", "parent": "tread5", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread7", "parent": "tread6", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread8", "parent": "tread7", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread9", "parent": "tread8", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread10", "parent": "tread9", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread11", "parent": "tread10", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread12", "parent": "tread11", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread13", "parent": "tread12", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread14", "parent": "tread13", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread15", "parent": "tread14", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread16", "parent": "tread15", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread17", "parent": "tread16", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread18", "parent": "tread17", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread19", "parent": "tread18", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread20", "parent": "tread19", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread21", "parent": "tread20", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread22", "parent": "tread21", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread23", "parent": "tread22", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread24", "parent": "tread23", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread25", "parent": "tread24", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread26", "parent": "tread25", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread27", "parent": "tread26", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread28", "parent": "tread27", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread29", "parent": "tread28", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread30", "parent": "tread29", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread31", "parent": "tread30", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread32", "parent": "tread31", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread33", "parent": "tread32", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread34", "parent": "tread33", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread35", "parent": "tread34", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread36", "parent": "tread35", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "wheel-midCenter", "parent": "tankRoot", "y": -114.56 }, + { "name": "treadCollider1", "parent": "wheel-midCenter", "x": -329.57, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider2", "parent": "wheel-midCenter", "x": -165.95, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider3", "parent": "wheel-midCenter", "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider4", "parent": "wheel-midCenter", "x": 163.56, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider5", "parent": "wheel-midCenter", "x": 329.12, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadGravity1", "parent": "tankRoot", "rotation": 180, "x": -175.35, "y": 109.99, "color": "ff00fbff" }, + { "name": "treadGravity2", "parent": "tankRoot", "rotation": 180, "x": 177.88, "y": 105.45, "color": "ff00fbff" }, + { "name": "wheel-bigRoot1", "parent": "tankTreads", "x": -549.59, "y": 14.39, "color": "abe323ff" }, + { "name": "wheel-big1", "parent": "wheel-bigRoot1", "x": -0.02, "color": "abe323ff" }, + { "name": "wheel-bigRoot2", "parent": "tankTreads", "x": 547.33, "y": 14.39 }, + { "name": "wheel-big2", "parent": "wheel-bigRoot2" }, + { "name": "wheel-midRoot1", "parent": "wheel-midCenter", "x": -410.57, "color": "abe323ff" }, + { "name": "wheel-mid1", "parent": "wheel-midRoot1", "color": "abe323ff" }, + { "name": "wheel-midRoot2", "parent": "wheel-midCenter", "x": -246.95 }, + { "name": "wheel-mid2", "parent": "wheel-midRoot2" }, + { "name": "wheel-midRoot3", "parent": "wheel-midCenter", "x": -82.72 }, + { "name": "wheel-mid3", "parent": "wheel-midRoot3" }, + { "name": "wheel-midRoot4", "parent": "wheel-midCenter", "x": 80.89 }, + { "name": "wheel-mid4", "parent": "wheel-midRoot4" }, + { "name": "wheel-midRoot5", "parent": "wheel-midCenter", "x": 244.51 }, + { "name": "wheel-mid5", "parent": "wheel-midRoot5" }, + { "name": "wheel-midRoot6", "parent": "wheel-midCenter", "x": 408.73 }, + { "name": "wheel-mid6", "parent": "wheel-midRoot6" }, + { "name": "wheel-smallRoot1", "parent": "tankTreads", "x": -337.38, "y": 109.43 }, + { "name": "wheel-small1", "parent": "wheel-smallRoot1", "color": "abe323ff" }, + { "name": "wheel-smallRoot2", "parent": "tankTreads", "x": 0.08, "y": 109.43 }, + { "name": "wheel-small2", "parent": "wheel-smallRoot2" }, + { "name": "wheel-smallRoot3", "parent": "tankTreads", "x": 334.68, "y": 109.43 }, + { "name": "wheel-small3", "parent": "wheel-smallRoot3" } +], +"slots": [ + { "name": "tankBody-shadow", "bone": "tankBody", "color": "ffffffb9", "attachment": "images/tankBottom-shadow" }, + { "name": "bottom", "bone": "tankBody", "attachment": "images/tankBottom" }, + { "name": "tread-inside1", "bone": "tread", "attachment": "images/tread-inside" }, + { "name": "tread-inside53", "bone": "tread27", "attachment": "images/tread-inside" }, + { "name": "tread-inside27", "bone": "tread14", "attachment": "images/tread-inside" }, + { "name": "tread-inside3", "bone": "tread2", "attachment": "images/tread-inside" }, + { "name": "tread-inside55", "bone": "tread28", "attachment": "images/tread-inside" }, + { "name": "tread-inside29", "bone": "tread15", "attachment": "images/tread-inside" }, + { "name": "tread-inside5", "bone": "tread3", "attachment": "images/tread-inside" }, + { "name": "tread-inside57", "bone": "tread29", "attachment": "images/tread-inside" }, + { "name": "tread-inside31", "bone": "tread16", "attachment": "images/tread-inside" }, + { "name": "tread-inside7", "bone": "tread4", "attachment": "images/tread-inside" }, + { "name": "tread-inside59", "bone": "tread30", "attachment": "images/tread-inside" }, + { "name": "tread-inside33", "bone": "tread17", "attachment": "images/tread-inside" }, + { "name": "tread-inside9", "bone": "tread5", "attachment": "images/tread-inside" }, + { "name": "tread-inside61", "bone": "tread31", "attachment": "images/tread-inside" }, + { "name": "tread-inside35", "bone": "tread18", "attachment": "images/tread-inside" }, + { "name": "tread-inside11", "bone": "tread6", "attachment": "images/tread-inside" }, + { "name": "tread-inside63", "bone": "tread32", "attachment": "images/tread-inside" }, + { "name": "tread-inside37", "bone": "tread19", "attachment": "images/tread-inside" }, + { "name": "tread-inside13", "bone": "tread7", "attachment": "images/tread-inside" }, + { "name": "tread-inside65", "bone": "tread33", "attachment": "images/tread-inside" }, + { "name": "tread-inside39", "bone": "tread20", "attachment": "images/tread-inside" }, + { "name": "tread-inside15", "bone": "tread8", "attachment": "images/tread-inside" }, + { "name": "tread-inside67", "bone": "tread34", "attachment": "images/tread-inside" }, + { "name": "tread-inside69", "bone": "tread35", "attachment": "images/tread-inside" }, + { "name": "tread-inside71", "bone": "tread36", "attachment": "images/tread-inside" }, + { "name": "tread-inside41", "bone": "tread21", "attachment": "images/tread-inside" }, + { "name": "tread-inside17", "bone": "tread9", "attachment": "images/tread-inside" }, + { "name": "tread-inside43", "bone": "tread22", "attachment": "images/tread-inside" }, + { "name": "tread-inside19", "bone": "tread10", "attachment": "images/tread-inside" }, + { "name": "tread-inside45", "bone": "tread23", "attachment": "images/tread-inside" }, + { "name": "tread-inside21", "bone": "tread11", "attachment": "images/tread-inside" }, + { "name": "tread-inside47", "bone": "tread24", "attachment": "images/tread-inside" }, + { "name": "tread-inside23", "bone": "tread12", "attachment": "images/tread-inside" }, + { "name": "tread-inside49", "bone": "tread25", "attachment": "images/tread-inside" }, + { "name": "tread-inside25", "bone": "tread13", "attachment": "images/tread-inside" }, + { "name": "tread-inside51", "bone": "tread26", "attachment": "images/tread-inside" }, + { "name": "tread-inside2", "bone": "tread", "attachment": "images/tread-inside" }, + { "name": "tread-inside54", "bone": "tread27", "attachment": "images/tread-inside" }, + { "name": "tread-inside28", "bone": "tread14", "attachment": "images/tread-inside" }, + { "name": "tread-inside4", "bone": "tread2", "attachment": "images/tread-inside" }, + { "name": "tread-inside56", "bone": "tread28", "attachment": "images/tread-inside" }, + { "name": "tread-inside30", "bone": "tread15", "attachment": "images/tread-inside" }, + { "name": "tread-inside6", "bone": "tread3", "attachment": "images/tread-inside" }, + { "name": "tread-inside58", "bone": "tread29", "attachment": "images/tread-inside" }, + { "name": "tread-inside32", "bone": "tread16", "attachment": "images/tread-inside" }, + { "name": "tread-inside8", "bone": "tread4", "attachment": "images/tread-inside" }, + { "name": "tread-inside60", "bone": "tread30", "attachment": "images/tread-inside" }, + { "name": "tread-inside34", "bone": "tread17", "attachment": "images/tread-inside" }, + { "name": "tread-inside10", "bone": "tread5", "attachment": "images/tread-inside" }, + { "name": "tread-inside62", "bone": "tread31", "attachment": "images/tread-inside" }, + { "name": "tread-inside36", "bone": "tread18", "attachment": "images/tread-inside" }, + { "name": "tread-inside12", "bone": "tread6", "attachment": "images/tread-inside" }, + { "name": "tread-inside64", "bone": "tread32", "attachment": "images/tread-inside" }, + { "name": "tread-inside38", "bone": "tread19", "attachment": "images/tread-inside" }, + { "name": "tread-inside14", "bone": "tread7", "attachment": "images/tread-inside" }, + { "name": "tread-inside66", "bone": "tread33", "attachment": "images/tread-inside" }, + { "name": "tread-inside40", "bone": "tread20", "attachment": "images/tread-inside" }, + { "name": "tread-inside16", "bone": "tread8", "attachment": "images/tread-inside" }, + { "name": "tread-inside68", "bone": "tread34", "attachment": "images/tread-inside" }, + { "name": "tread-inside70", "bone": "tread35", "attachment": "images/tread-inside" }, + { "name": "tread-inside72", "bone": "tread36", "attachment": "images/tread-inside" }, + { "name": "tread-inside42", "bone": "tread21", "attachment": "images/tread-inside" }, + { "name": "tread-inside18", "bone": "tread9", "attachment": "images/tread-inside" }, + { "name": "tread-inside44", "bone": "tread22", "attachment": "images/tread-inside" }, + { "name": "tread-inside20", "bone": "tread10", "attachment": "images/tread-inside" }, + { "name": "tread-inside46", "bone": "tread23", "attachment": "images/tread-inside" }, + { "name": "tread-inside22", "bone": "tread11", "attachment": "images/tread-inside" }, + { "name": "tread-inside48", "bone": "tread24", "attachment": "images/tread-inside" }, + { "name": "tread-inside24", "bone": "tread12", "attachment": "images/tread-inside" }, + { "name": "tread-inside50", "bone": "tread25", "attachment": "images/tread-inside" }, + { "name": "tread-inside26", "bone": "tread13", "attachment": "images/tread-inside" }, + { "name": "tread-inside52", "bone": "tread26", "attachment": "images/tread-inside" }, + { "name": "wheel-big", "bone": "wheel-big1", "color": "dbdbdbff", "attachment": "images/wheel-big" }, + { "name": "wheel-big2", "bone": "wheel-big2", "color": "dbdbdbff", "attachment": "images/wheel-big" }, + { "name": "wheel-mid", "bone": "wheel-mid1", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid2", "bone": "wheel-mid2", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid3", "bone": "wheel-mid3", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid4", "bone": "wheel-mid4", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid5", "bone": "wheel-mid5", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid6", "bone": "wheel-mid6", "attachment": "images/wheel-mid" }, + { "name": "wheel-small", "bone": "wheel-small1", "attachment": "images/wheel-small" }, + { "name": "wheel-small2", "bone": "wheel-small2", "attachment": "images/wheel-small" }, + { "name": "wheel-small3", "bone": "wheel-small3", "attachment": "images/wheel-small" }, + { + "name": "wheel-mid-overlay", + "bone": "wheel-midRoot1", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay2", + "bone": "wheel-midRoot2", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay3", + "bone": "wheel-midRoot3", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay4", + "bone": "wheel-midRoot4", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay5", + "bone": "wheel-midRoot5", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay6", + "bone": "wheel-midRoot6", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-big-overlay1", + "bone": "wheel-bigRoot1", + "color": "ffffffe9", + "attachment": "images/wheel-big-overlay", + "blend": "multiply" + }, + { + "name": "wheel-big-overlay2", + "bone": "wheel-bigRoot2", + "color": "ffffffe9", + "attachment": "images/wheel-big-overlay", + "blend": "multiply" + }, + { "name": "treads", "bone": "tankRoot", "attachment": "treads" }, + { "name": "tread", "bone": "tread", "color": "c0974fff", "attachment": "images/tread" }, + { "name": "tread27", "bone": "tread27", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread14", "bone": "tread14", "attachment": "images/tread" }, + { "name": "tread2", "bone": "tread2", "attachment": "images/tread" }, + { "name": "tread28", "bone": "tread28", "attachment": "images/tread" }, + { "name": "tread15", "bone": "tread15", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread3", "bone": "tread3", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread29", "bone": "tread29", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread16", "bone": "tread16", "attachment": "images/tread" }, + { "name": "tread4", "bone": "tread4", "attachment": "images/tread" }, + { "name": "tread30", "bone": "tread30", "attachment": "images/tread" }, + { "name": "tread17", "bone": "tread17", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread5", "bone": "tread5", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread31", "bone": "tread31", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread18", "bone": "tread18", "attachment": "images/tread" }, + { "name": "tread6", "bone": "tread6", "attachment": "images/tread" }, + { "name": "tread32", "bone": "tread32", "attachment": "images/tread" }, + { "name": "tread19", "bone": "tread19", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread7", "bone": "tread7", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread33", "bone": "tread33", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread20", "bone": "tread20", "attachment": "images/tread" }, + { "name": "tread8", "bone": "tread8", "attachment": "images/tread" }, + { "name": "tread34", "bone": "tread34", "attachment": "images/tread" }, + { "name": "tread35", "bone": "tread35", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread36", "bone": "tread36", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread21", "bone": "tread21", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread9", "bone": "tread9", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread22", "bone": "tread22", "attachment": "images/tread" }, + { "name": "tread10", "bone": "tread10", "attachment": "images/tread" }, + { "name": "tread23", "bone": "tread23", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread11", "bone": "tread11", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread24", "bone": "tread24", "attachment": "images/tread" }, + { "name": "tread12", "bone": "tread12", "attachment": "images/tread" }, + { "name": "tread25", "bone": "tread25", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread13", "bone": "tread13", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread26", "bone": "tread26", "attachment": "images/tread" }, + { "name": "rock", "bone": "rock", "attachment": "images/rock" }, + { "name": "machinegun", "bone": "machinegun", "attachment": "images/machinegun" }, + { "name": "machinegun-mount", "bone": "machinegun-mount", "attachment": "images/machinegun-mount" }, + { "name": "tankTop", "bone": "tankBody", "attachment": "images/tankTop" }, + { "name": "guntower", "bone": "guntower", "attachment": "images/guntower" }, + { "name": "cannon", "bone": "cannon", "attachment": "images/cannon" }, + { "name": "cannonConnector", "bone": "cannonConnector", "attachment": "images/cannonConnector" }, + { "name": "antenna", "bone": "antennaRoot", "attachment": "images/antenna" } +], +"ik": [ + { + "name": "cannonTarget", + "bones": [ "cannon" ], + "target": "cannonTarget" + }, + { + "name": "machineGunTarget", + "bones": [ "machinegun" ], + "target": "machineGunTarget", + "mix": 0 + } +], +"transform": [ + { + "name": "wheel-big", + "bones": [ "wheel-big2" ], + "target": "wheel-big1", + "rotation": 65.6, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid1", + "bones": [ "wheel-mid2", "wheel-mid4" ], + "target": "wheel-mid1", + "rotation": 93, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid2", + "bones": [ "wheel-mid3", "wheel-mid5" ], + "target": "wheel-mid1", + "rotation": -89, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid3", + "bones": [ "wheel-mid6" ], + "target": "wheel-mid1", + "rotation": -152.6, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-small1", + "bones": [ "wheel-small2" ], + "target": "wheel-small1", + "rotation": 87, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-small2", + "bones": [ "wheel-small3" ], + "target": "wheel-small1", + "rotation": 54.9, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + } +], +"path": [ + { + "name": "treads", + "bones": [ + "tread", + "tread2", + "tread3", + "tread4", + "tread5", + "tread6", + "tread7", + "tread8", + "tread9", + "tread10", + "tread11", + "tread12", + "tread13", + "tread14", + "tread15", + "tread16", + "tread17", + "tread18", + "tread19", + "tread20", + "tread21", + "tread22", + "tread23", + "tread24", + "tread25", + "tread26", + "tread27", + "tread28", + "tread29", + "tread30", + "tread31", + "tread32", + "tread33", + "tread34", + "tread35", + "tread36" + ], + "target": "treads", + "rotateMode": "chain" + } +], +"skins": { + "default": { + "antenna": { + "images/antenna": { + "type": "mesh", + "uvs": [ 0.64286, 0.07875, 0.65354, 0.15349, 0.66324, 0.22137, 0.67367, 0.29433, 0.68383, 0.36543, 0.69359, 0.43374, 0.7031, 0.50029, 0.71311, 0.5703, 0.72327, 0.64138, 0.73406, 0.71688, 0.7444, 0.78929, 0.75614, 0.8714, 0.76905, 0.9431, 1, 0.9431, 1, 1, 0, 1, 0, 0.9431, 0.20105, 0.9431, 0.20105, 0.87093, 0.21461, 0.78846, 0.22651, 0.71606, 0.23885, 0.64098, 0.25035, 0.57104, 0.26206, 0.49983, 0.27306, 0.4329, 0.2843, 0.36453, 0.29592, 0.29381, 0.308, 0.22037, 0.319, 0.15345, 0.33141, 0.07795, 0.34423, 0, 0.6316, 0 ], + "triangles": [ 30, 31, 0, 29, 30, 0, 29, 0, 1, 28, 29, 1, 28, 1, 2, 27, 28, 2, 27, 2, 3, 26, 3, 4, 25, 26, 4, 25, 4, 5, 26, 27, 3, 24, 5, 6, 23, 24, 6, 7, 23, 6, 24, 25, 5, 22, 7, 8, 21, 22, 8, 21, 8, 9, 7, 22, 23, 20, 9, 10, 19, 20, 10, 20, 21, 9, 19, 10, 11, 18, 19, 11, 17, 18, 11, 17, 11, 12, 15, 16, 17, 12, 13, 14, 15, 17, 12, 14, 15, 12 ], + "vertices": [ 2, 10, 65.37999, -3.14, 0.3125, 11, 23.38, -3.14, 0.6875, 3, 9, 84.73, -3.37, 0.0625, 10, 42.73, -3.37, 0.625, 11, 0.73, -3.37, 0.3125, 3, 9, 64.16, -3.59, 0.3125, 10, 22.16, -3.59, 0.625, 11, -19.83, -3.59, 0.0625, 3, 8, 84.06, -3.82, 0.0625, 9, 42.06, -3.82, 0.625, 10, 0.06, -3.82, 0.3125, 3, 8, 62.51, -4.04, 0.3125, 9, 20.51, -4.04, 0.625, 10, -21.48, -4.04, 0.0625, 3, 7, 83.81, -4.25, 0.0625, 8, 41.81, -4.25, 0.625, 9, -0.18, -4.25, 0.3125, 3, 7, 63.65, -4.46, 0.3125, 8, 21.65, -4.46, 0.625, 9, -20.34, -4.46, 0.0625, 3, 6, 84.43, -4.67999, 0.0625, 7, 42.43, -4.67999, 0.625, 8, 0.43, -4.67999, 0.3125, 3, 6, 62.9, -4.91, 0.3125, 7, 20.9, -4.91, 0.625, 8, -21.09, -4.91, 0.0625, 3, 5, 5.14, 80.01999, 0.0625, 6, 40.02, -5.14, 0.625, 7, -1.97, -5.14, 0.3125, 3, 5, 5.37, 58.08, 0.375, 6, 18.08, -5.37, 0.5625, 7, -23.91, -5.37, 0.0625, 1, 5, 5.63, 33.2, 1, 1, 5, 5.91, 11.48, 1, 1, 5, 11, 11.48, 1, 1, 5, 10.99, -5.75, 1, 1, 5, -11, -5.75, 1, 1, 5, -10.99, 11.48, 1, 1, 5, -6.57, 11.48, 1, 1, 5, -6.57, 33.34, 1, 3, 5, -6.27, 58.33, 0.375, 6, 18.33, 6.27, 0.5625, 7, -23.66, 6.27, 0.0625, 3, 5, -6.01, 80.26999, 0.0625, 6, 40.27, 6.01, 0.625, 7, -1.72, 6.01, 0.3125, 3, 6, 63.02, 5.74, 0.3125, 7, 21.02, 5.74, 0.625, 8, -20.96999, 5.74, 0.0625, 3, 6, 84.21, 5.49, 0.0625, 7, 42.21, 5.49, 0.625, 8, 0.21, 5.49, 0.3125, 3, 7, 63.79, 5.23, 0.3125, 8, 21.79, 5.23, 0.625, 9, -20.2, 5.23, 0.0625, 3, 7, 84.07, 4.98999, 0.0625, 8, 42.07, 4.98999, 0.625, 9, 0.07, 4.98999, 0.3125, 3, 8, 62.78, 4.73999, 0.3125, 9, 20.78, 4.73999, 0.625, 10, -21.21, 4.73999, 0.0625, 3, 8, 84.21, 4.48, 0.0625, 9, 42.21, 4.48, 0.625, 10, 0.21, 4.48, 0.3125, 3, 9, 64.46, 4.21999, 0.3125, 10, 22.46, 4.21999, 0.625, 11, -19.53, 4.21999, 0.0625, 3, 9, 84.74, 3.98, 0.0625, 10, 42.74, 3.98, 0.625, 11, 0.74, 3.98, 0.3125, 2, 10, 65.62, 3.7, 0.3125, 11, 23.62, 3.7, 0.6875, 1, 11, 47.24, 3.42, 1, 1, 11, 47.24, -2.89, 1 ], + "hull": 32, + "edges": [ 28, 30, 28, 26, 30, 32, 26, 24, 24, 22, 32, 34, 34, 24, 34, 36, 36, 22, 60, 62, 38, 36, 20, 22, 38, 20, 40, 38, 18, 20, 40, 18, 42, 40, 16, 18, 42, 16, 44, 42, 14, 16, 44, 14, 46, 44, 12, 14, 46, 12, 48, 46, 10, 12, 48, 10, 50, 48, 8, 10, 50, 8, 52, 50, 6, 8, 52, 6, 54, 52, 4, 6, 54, 4, 56, 54, 2, 4, 56, 2, 60, 58, 58, 56, 62, 0, 0, 2, 58, 0 ], + "width": 22, + "height": 303 + } + }, + "bottom": { + "images/tankBottom": { "x": -16.66, "y": 9.89, "width": 1285, "height": 276 } + }, + "cannon": { + "images/cannon": { "x": 481.95, "y": -0.02, "rotation": 179.99, "width": 931, "height": 58 } + }, + "cannonConnector": { + "images/cannonConnector": { + "type": "mesh", + "uvs": [ 1, 0.03236, 1, 0.10602, 0.90987, 0.32859, 0.81975, 0.55116, 0.72962, 0.77372, 0.6395, 0.99629, 0.42157, 0.99629, 0.20364, 0.99629, 0, 0.85433, 0, 0.69901, 0.02267, 0.52884, 0, 0.31444, 0.21601, 0.12998, 0.43367, 0, 0.63546, 0.0037, 0.48407, 0.77059, 0.31496, 0.52496, 0.64132, 0.19648, 0.21516, 0.76765, 0.58345, 0.5647, 0.68444, 0.40146, 0.46758, 0.36649, 0.28934, 0.34603 ], + "triangles": [ 21, 22, 12, 11, 12, 22, 17, 21, 13, 17, 13, 14, 21, 12, 13, 21, 17, 20, 16, 22, 21, 10, 11, 22, 10, 22, 16, 19, 21, 20, 16, 21, 19, 18, 10, 16, 9, 10, 18, 15, 16, 19, 18, 16, 15, 8, 9, 18, 7, 8, 18, 6, 18, 15, 7, 18, 6, 14, 0, 1, 17, 14, 1, 2, 17, 1, 20, 17, 2, 3, 20, 2, 19, 20, 3, 4, 19, 3, 15, 19, 4, 5, 15, 4, 6, 15, 5 ], + "vertices": [ 1, 12, 35.91, 69.08, 1, 1, 12, 35.91, 59.13, 1, 1, 12, 25.81, 29.09, 1, 1, 12, 15.72, -0.95, 1, 1, 12, 5.63, -31, 1, 1, 12, -4.46, -61.04, 1, 2, 12, -28.87, -61.04, 0.33333, 14, 28.87, 61.03, 0.66666, 1, 14, 53.27, 61.01, 1, 1, 14, 76.08, 41.83, 1, 1, 14, 71.17, 21.62, 1, 1, 14, 72.83, -1.62, 1, 1, 14, 70.37, -29.12, 1, 1, 14, 50.66, -56.13, 1, 2, 12, -28.43, 74.37, 0.41, 14, 28.43, -74.39, 0.58999, 2, 12, -4.91, 72.94999, 0.52, 14, 4.91, -72.94999, 0.48, 2, 12, -21.87, -30.57, 0.49, 14, 21.87, 30.56, 0.51, 1, 14, 40.81, -2.59999, 1, 2, 12, -4.25, 46.92, 0.49, 14, 4.25, -46.92, 0.51, 1, 14, 51.98, 30.15, 1, 2, 12, -10.74, -2.78, 0.49, 14, 10.74, 2.77, 0.51, 2, 12, 0.56, 19.25, 0.49, 14, -0.56, -19.25, 0.51, 1, 14, 23.71, -23.98, 1, 1, 14, 43.68, -26.76, 1 ], + "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, 28, 0 ], + "width": 112, + "height": 135 + } + }, + "guntower": { + "images/guntower": { "x": 77.22, "y": 122.58, "width": 730, "height": 289 } + }, + "machinegun": { + "images/machinegun": { "x": 44.85, "y": -5.72, "rotation": -180, "width": 331, "height": 57 } + }, + "machinegun-mount": { + "images/machinegun-mount": { "x": 47.42, "y": -1.53, "rotation": -90, "width": 72, "height": 96 } + }, + "rock": { + "images/rock": { "color": "404040ff", "x": 25.23, "y": 27.35, "width": 252, "height": 55 } + }, + "tankBody-shadow": { + "images/tankBottom-shadow": { "x": -11.43, "y": -42.88, "width": 1291, "height": 341 } + }, + "tankTop": { + "images/tankTop": { "x": 6.8, "y": 168.71, "width": 1407, "height": 222 } + }, + "tread": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread-inside1": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside10": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside11": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside12": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside13": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside14": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside15": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside16": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside17": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside18": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside19": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside2": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside20": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside21": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside22": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside23": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside24": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside25": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside26": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside27": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside28": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside29": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside3": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside30": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside31": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside32": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside33": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside34": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside35": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside36": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside37": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside38": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside39": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside4": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside40": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside41": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside42": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside43": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside44": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside45": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside46": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside47": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside48": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside49": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside5": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside50": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside51": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside52": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside53": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside54": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside55": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside56": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside57": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside58": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside59": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside6": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside60": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside61": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside62": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside63": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside64": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside65": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside66": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside67": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside68": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside69": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside7": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside70": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside71": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside72": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside8": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside9": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread10": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread11": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread12": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread13": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread14": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread15": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread16": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread17": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread18": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread19": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread2": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread20": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread21": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread22": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread23": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread24": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread25": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread26": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread27": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread28": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread29": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread3": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread30": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread31": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread32": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread33": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread34": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread35": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread36": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread4": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread5": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread6": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread7": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread8": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread9": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "treads": { + "treads": { + "type": "path", + "closed": true, + "lengths": [ 182.41, 349, 472.77, 602.99, 780.46, 1052.96, 1133.44, 1218.43, 1298.34, 1382.7, 1465.57, 1546.11, 1628.02, 1707.73, 1794.36, 1876.75, 2158.69, 2321.34, 2438.56, 2579.42, 2745.35, 2919.23 ], + "vertexCount": 66, + "vertices": [ 1, 83, 11.23, 41.86, 1, 1, 83, 0.78, 41.93999, 1, 1, 83, -34.72, 42.23, 1, 1, 63, -104.21, 0.41, 1, 1, 63, 0.07, 0.55, 1, 1, 63, 68.8, 0.64, 1, 1, 81, 20.5, 43.47, 1, 1, 81, 1.13, 40.81, 1, 1, 81, -27.38, 36.84, 1, 1, 65, 147.06, 105, 1, 1, 65, 96.21, 96.63, 1, 1, 65, 43.87, 87.71, 1, 1, 65, 16.18, 103.34, 1, 1, 65, -33.66999, 94.2, 1, 1, 65, -99.35, 81.25, 1, 1, 65, -122.04, -1.69, 1, 1, 65, -83.58, -47.92, 1, 1, 65, -33.53, -109.36, 1, 1, 69, -83.56, -66.08999, 1, 1, 69, -2.16, -67.89, 1, 2, 69, 56.68, -41.48, 0.67999, 58, -24.31, -41.49, 0.32, 1, 58, -26.58, 16.69, 1, 1, 58, -2.69, 16.69, 1, 1, 58, 13.51, 16.69, 1, 2, 71, -52.41, -46.51, 0.74399, 58, 30.2, -46.51, 0.256, 1, 71, -0.32, -68.92, 1, 2, 71, 52.09, -44.72, 0.712, 59, -28.9, -44.73, 0.28799, 1, 59, -22.8, 16.24, 1, 1, 59, -1.42, 16.24, 1, 1, 59, 20.46999, 16.24, 1, 2, 73, -47.21, -47.45, 0.744, 59, 36.00999, -47.46, 0.25599, 1, 73, -0.28, -69.65, 1, 2, 73, 45.23, -47.26, 0.736, 60, -37.48, -47.26, 0.26399, 1, 60, -23.76, 15.27, 1, 1, 60, -0.13, 15.27, 1, 1, 60, 24.45, 15.27, 1, 2, 75, -47.36, -48.7, 0.74399, 60, 33.52, -48.7, 0.256, 1, 75, -0.49, -70.39, 1, 2, 75, 49.09, -48.33, 0.744, 61, -33.57, -48.34, 0.25599, 1, 61, -20.89, 15.83, 1, 1, 61, -1.25, 15.83, 1, 1, 61, 15.78, 15.83, 1, 2, 77, -52.49, -48.21, 0.75999, 61, 28.45, -48.21, 0.24, 1, 77, -2.5, -68.92, 1, 2, 77, 55.72, -47.82, 0.752, 62, -28.88, -47.82, 0.248, 1, 62, -21.64, 16.69, 1, 1, 62, -0.48, 16.69, 1, 1, 62, 20.73, 16.69, 1, 2, 79, -53.65, -48.89, 0.76, 62, 25.96, -48.89, 0.23999, 1, 79, 2.27, -69.65, 1, 1, 79, 44.94, -69.74, 1, 1, 65, 1172.98, -85.6, 1, 1, 65, 1190.53, -42.24, 1, 1, 65, 1215.63, 19.75, 1, 1, 65, 1175.55, 76.62, 1, 1, 65, 1134.22, 95.07, 1, 1, 65, 1128.4, 97.66, 1, 1, 65, 1081.79, 87.47, 1, 1, 65, 1017.16, 92.52, 1, 1, 65, 977.9, 95.58, 1, 1, 85, 47.07, 42.29, 1, 1, 85, 0.24, 42.74, 1, 1, 85, -29.63, 43.28, 1, 1, 64, -86.64, 1.35, 1, 1, 64, 0.49, 0.25, 1, 1, 64, 92.42, -0.89, 1 ] + } + }, + "wheel-big": { + "images/wheel-big": { "width": 191, "height": 191 } + }, + "wheel-big-overlay1": { + "images/wheel-big-overlay": { "width": 186, "height": 186 } + }, + "wheel-big-overlay2": { + "images/wheel-big-overlay": { "width": 186, "height": 186 } + }, + "wheel-big2": { + "images/wheel-big": { "width": 191, "height": 191 } + }, + "wheel-mid": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay2": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay3": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay4": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay5": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay6": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid2": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid3": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid4": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid5": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid6": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-small": { + "images/wheel-small": { "width": 71, "height": 71 } + }, + "wheel-small2": { + "images/wheel-small": { "width": 71, "height": 71 } + }, + "wheel-small3": { + "images/wheel-small": { "width": 71, "height": 71 } + } + } +}, +"animations": { + "drive": { + "bones": { + "tankRoot": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.549, 0, 0.907, 0.84 ] + }, + { + "time": 3.0333, + "x": -1426.14, + "y": 0, + "curve": [ 0.211, 0.23, 0.851, 0.92 ] + }, + { + "time": 4.8666, + "x": -2806.98, + "y": 0, + "curve": [ 0.253, 0.27, 0.625, 0.94 ] + }, + { "time": 5.3333, "x": -2903.34, "y": 0 } + ] + }, + "wheel-midRoot1": { + "translate": [ + { "time": 0.7666, "x": 0, "y": 0 }, + { + "time": 1.1666, + "x": 0, + "y": 50.95, + "curve": [ 0.633, 0, 0.907, 0.82 ] + }, + { "time": 1.5666, "x": 0, "y": 0 } + ] + }, + "treadCollider1": { + "rotate": [ + { "time": 1.1, "angle": 0 }, + { "time": 1.2333, "angle": -19.78 }, + { "time": 1.4666, "angle": 0 }, + { "time": 1.6, "angle": 28.87 }, + { "time": 1.8, "angle": 0 } + ], + "translate": [ + { "time": 1.1, "x": 0, "y": 0 }, + { + "time": 1.4666, + "x": 0, + "y": 58.66, + "curve": [ 0.352, 0, 0.828, 0.92 ] + }, + { "time": 1.8, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot2": { + "translate": [ + { "time": 1.2666, "x": 0, "y": 0 }, + { + "time": 1.6333, + "x": 0, + "y": 55.07, + "curve": [ 0.889, 0.01, 0.843, 0.81 ] + }, + { "time": 1.9333, "x": 0, "y": 0 } + ] + }, + "treadCollider2": { + "rotate": [ + { "time": 1.5333, "angle": 0 }, + { "time": 1.6333, "angle": -18.67 }, + { "time": 1.8, "angle": 0 }, + { "time": 1.9, "angle": 29.49 }, + { "time": 2.0666, "angle": 0 } + ], + "translate": [ + { + "time": 1.5333, + "x": 0, + "y": 0, + "curve": [ 0.16, 0.25, 0.813, 0.82 ] + }, + { + "time": 1.8, + "x": 0, + "y": 59.03, + "curve": [ 0.376, 0.26, 0.879, 0.79 ] + }, + { "time": 2.0666, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot3": { + "translate": [ + { "time": 1.6666, "x": 0, "y": 0 }, + { + "time": 1.9333, + "x": 0, + "y": 60.17, + "curve": [ 0.544, 0, 0.838, 0.77 ] + }, + { "time": 2.2, "x": 0, "y": 0 } + ] + }, + "treadCollider3": { + "rotate": [ + { "time": 1.8666, "angle": 0 }, + { "time": 1.9333, "angle": -20.16 }, + { "time": 2.0666, "angle": 0.57 }, + { "time": 2.1666, "angle": 33.66 }, + { "time": 2.3333, "angle": 0 } + ], + "translate": [ + { "time": 1.8666, "x": 0, "y": 0 }, + { + "time": 2.0666, + "x": 0, + "y": 61.53, + "curve": [ 0.582, 0, 0.836, 0.77 ] + }, + { "time": 2.3333, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot4": { + "translate": [ + { "time": 1.9333, "x": 0, "y": 0 }, + { + "time": 2.2, + "x": 0, + "y": 58.89, + "curve": [ 0.48, 0, 0.75, 1 ] + }, + { "time": 2.4666, "x": 0, "y": 0 } + ] + }, + "treadCollider4": { + "rotate": [ + { "time": 2.1333, "angle": 0 }, + { "time": 2.2, "angle": -20.43 }, + { "time": 2.3333, "angle": 4.49 }, + { "time": 2.4333, "angle": 35.87 }, + { "time": 2.5666, "angle": 0 } + ], + "translate": [ + { + "time": 2.1333, + "x": 0, + "y": 0, + "curve": [ 0.191, 0.49, 0.75, 1 ] + }, + { "time": 2.3333, "x": 0, "y": 66.64 }, + { "time": 2.5666, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot5": { + "translate": [ + { "time": 2.2, "x": 0, "y": 0 }, + { "time": 2.4333, "x": 0, "y": 60.26 }, + { "time": 2.7, "x": 0, "y": 0 } + ] + }, + "treadCollider5": { + "rotate": [ + { "time": 2.3333, "angle": 0 }, + { "time": 2.4333, "angle": -23.6 }, + { "time": 2.5666, "angle": 6.49 }, + { "time": 2.6666, "angle": 29.93 }, + { "time": 2.8, "angle": -0.13 } + ], + "translate": [ + { "time": 2.3333, "x": 0, "y": 0 }, + { "time": 2.4333, "x": 0, "y": 36.34 }, + { "time": 2.5, "x": 0, "y": 56.39 }, + { "time": 2.5666, "x": 0, "y": 61.34 }, + { "time": 2.8, "x": 0, "y": 2.04 } + ] + }, + "wheel-midRoot6": { + "translate": [ + { + "time": 2.4333, + "x": 0, + "y": 0, + "curve": [ 0.19, 0.26, 0.804, 0.8 ] + }, + { + "time": 2.6333, + "x": 0, + "y": 51.86, + "curve": [ 0.346, 0, 0.852, 0.7 ] + }, + { "time": 2.8, "x": 0, "y": 0 } + ] + }, + "wheel-mid1": { + "rotate": [ + { + "time": 0, + "angle": 21, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 0.8, "angle": 120 }, + { "time": 1.2333, "angle": 240 }, + { "time": 1.6, "angle": 0 }, + { "time": 1.9, "angle": 120 }, + { "time": 2.1666, "angle": 240 }, + { "time": 2.4, "angle": 0 }, + { "time": 2.5666, "angle": 120 }, + { "time": 2.7333, "angle": 240 }, + { "time": 2.9333, "angle": 0 }, + { "time": 3.1, "angle": 120 }, + { "time": 3.2666, "angle": 240 }, + { "time": 3.4333, "angle": 0 }, + { "time": 3.6333, "angle": 120 }, + { "time": 3.8, "angle": 240 }, + { "time": 3.9666, "angle": 0 }, + { "time": 4.1666, "angle": 120 }, + { "time": 4.3333, "angle": 240 }, + { "time": 4.5, "angle": 0 }, + { "time": 4.7, "angle": 120 }, + { "time": 4.8666, "angle": 240 }, + { "time": 5.2666, "angle": -67.99 } + ] + }, + "tankTreads": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.145, 0.34, 0.75, 1 ] + }, + { "time": 1.1, "angle": -3.9 }, + { "time": 1.3333, "angle": -2.37 }, + { "time": 1.6333, "angle": -3.54 }, + { "time": 2.1666, "angle": 0.27 }, + { + "time": 2.4666, + "angle": 2.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.7, + "angle": 3.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3, "angle": -3.62 }, + { "time": 3.2333, "angle": -1.23, "curve": "stepped" }, + { + "time": 4.8666, + "angle": -1.23, + "curve": [ 0.188, 0.16, 0.75, 1 ] + }, + { + "time": 5.2, + "angle": 4.47, + "curve": [ 0.416, 0.01, 0.75, 1 ] + }, + { + "time": 5.5666, + "angle": -3.08, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 5.8333, "angle": -1.23 } + ] + }, + "wheel-big1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 1.1, "angle": 120 }, + { "time": 1.5333, "angle": 240 }, + { "time": 1.8, "angle": 360 }, + { "time": 2.0333, "angle": 120 }, + { "time": 2.2666, "angle": 240 }, + { "time": 2.4666, "angle": 360 }, + { "time": 2.7, "angle": 120 }, + { "time": 2.9333, "angle": 240 }, + { "time": 3.1333, "angle": 360 }, + { "time": 3.3666, "angle": 120 }, + { "time": 3.5666, "angle": 240 }, + { "time": 3.8, "angle": -24 }, + { "time": 4.0333, "angle": 120 }, + { "time": 4.2333, "angle": 240 }, + { "time": 4.4666, "angle": -24 }, + { "time": 4.7, "angle": 120 }, + { "time": 4.8666, "angle": -143.99 }, + { + "time": 5.0666, + "angle": -131.4, + "curve": [ 0.14, 0.25, 0.75, 1 ] + }, + { "time": 5.6666, "angle": -76.85 }, + { "time": 5.8333, "angle": -72.3 } + ] + }, + "treadGravity1": { + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.4666, "x": 0, "y": 0 }, + { "time": 1.8, "x": 0, "y": 29.44 }, + { "time": 2.3333, "x": 0, "y": -0.52 }, + { "time": 2.5666, "x": 0, "y": 5.2 }, + { "time": 2.6666, "x": 0, "y": -11.05, "curve": "stepped" }, + { "time": 4.8666, "x": 0, "y": -11.05 }, + { "time": 5.0666, "x": 0, "y": -1.91 }, + { "time": 5.5333, "x": 0, "y": -6.9 }, + { "time": 5.7333, "x": 0, "y": -11.05 } + ] + }, + "treadGravity2": { + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.4666, "x": 0, "y": 0 }, + { "time": 1.8, "x": 0, "y": 8.5 }, + { "time": 2.3333, "x": 0, "y": 34.74 }, + { "time": 2.5666, "x": 0, "y": 5.2 }, + { "time": 2.6666, "x": 0, "y": -11.05, "curve": "stepped" }, + { "time": 4.8666, "x": 0, "y": -11.05 }, + { "time": 5.0666, "x": 0, "y": 3.9 }, + { "time": 5.5333, "x": 0, "y": -6.9 }, + { "time": 5.7333, "x": 0, "y": -11.05 } + ] + }, + "wheel-small1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 0.7, "angle": 120 }, + { "time": 1.1, "angle": 240 }, + { "time": 1.4666, "angle": 360 }, + { "time": 1.7666, "angle": 120 }, + { "time": 2.0333, "angle": 240 }, + { "time": 2.2666, "angle": 360 }, + { "time": 2.4333, "angle": 120 }, + { "time": 2.5666, "angle": 240 }, + { "time": 2.7, "angle": 360 }, + { "time": 2.8333, "angle": 120 }, + { "time": 2.9666, "angle": 240 }, + { "time": 3.1, "angle": 360 }, + { "time": 3.2333, "angle": 120 }, + { "time": 3.3666, "angle": 240 }, + { "time": 3.5, "angle": 360 }, + { "time": 3.6333, "angle": 120 }, + { "time": 3.7666, "angle": 240 }, + { "time": 3.9, "angle": 360 }, + { "time": 4.0333, "angle": 120 }, + { "time": 4.1666, "angle": 240 }, + { "time": 4.3, "angle": 360 }, + { "time": 4.4333, "angle": 120 }, + { "time": 4.5666, "angle": 240 }, + { "time": 4.7, "angle": 360 }, + { "time": 4.8333, "angle": 120 }, + { "time": 5, "angle": 240 }, + { + "time": 5.2, + "angle": -25.64, + "curve": [ 0.181, 0.26, 0.75, 1 ] + }, + { "time": 5.5666, "angle": 90 } + ] + }, + "tankBody": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.1666, + "angle": -1.41, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.9333, + "angle": -0.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3, + "angle": 0.84, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -2.33, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.4666, + "angle": -0.45, + "curve": [ 0.329, 0.32, 0.757, 1 ] + }, + { + "time": 4.8666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3333, + "angle": 1.82, + "curve": [ 0.324, 0.01, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -1.15, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.0333, "angle": 0 } + ] + }, + "antenna1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna4": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna5": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna6": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "machinegun": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 2.8333, + "angle": 0, + "curve": [ 0.183, 0.17, 0.75, 1 ] + }, + { + "time": 3, + "angle": -4.43, + "curve": [ 0.156, 0.16, 0.75, 1 ] + }, + { + "time": 3.1666, + "angle": -2.93, + "curve": [ 0.156, 0.16, 0.75, 1 ] + }, + { + "time": 4.8333, + "angle": 0, + "curve": [ 0.183, 0.17, 0.75, 1 ] + }, + { + "time": 5.1666, + "angle": -6.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.4, + "angle": 6.15, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 5.6, "angle": -1.26 } + ] + }, + "cannon": { + "rotate": [ + { "time": 0, "angle": 0 } + ] + }, + "cannonTarget": { + "translate": [ + { + "time": 5, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.3333, "x": -15.38, "y": 99.99 } + ] + } + }, + "ik": { + "cannonTarget": [ + { "time": 0, "mix": 0.809, "curve": "stepped" }, + { "time": 4.7333, "mix": 0.809 }, + { "time": 5.1666, "mix": 0.504 }, + { "time": 5.6666 } + ] + }, + "paths": { + "treads": { + "position": [ + { + "time": 0, + "curve": [ 0.549, 0, 0.907, 0.84 ] + }, + { "time": 3.0333, "position": 0.51 }, + { "time": 4.8666, "position": 0.9794 }, + { + "time": 5.2666, + "position": 1, + "curve": [ 0.226, 0.15, 0.765, 0.96 ] + }, + { + "time": 5.5333, + "position": 1.02, + "curve": [ 0.279, 0.32, 0.694, 0.99 ] + }, + { "time": 5.8333, "position": 1.021 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-starling/spine-starling-example/src/tank.png b/spine-starling/spine-starling-example/src/tank.png new file mode 100644 index 000000000..b0b1b3642 Binary files /dev/null and b/spine-starling/spine-starling-example/src/tank.png differ diff --git a/spine-starling/spine-starling-example/src/vine.atlas b/spine-starling/spine-starling-example/src/vine.atlas new file mode 100644 index 000000000..313213413 --- /dev/null +++ b/spine-starling/spine-starling-example/src/vine.atlas @@ -0,0 +1,13 @@ + +vine.png +size: 128,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +images/vine + rotate: false + xy: 2, 2 + size: 68, 962 + orig: 68, 962 + offset: 0, 0 + index: -1 diff --git a/spine-starling/spine-starling-example/src/vine.json b/spine-starling/spine-starling-example/src/vine.json new file mode 100644 index 000000000..a08c20022 --- /dev/null +++ b/spine-starling/spine-starling-example/src/vine.json @@ -0,0 +1,300 @@ +{ +"skeleton": { "hash": "Ww/IgnvLkO+Bc7+ljr0JS3OTq8Q", "spine": "3.4.00", "width": 227.35, "height": 841.02, "images": "" }, +"bones": [ + { "name": "root" }, + { "name": "vine1", "parent": "root", "length": 74, "rotation": 90, "x": 339.09, "y": -467.15, "color": "f700ffff" }, + { "name": "vine2", "parent": "vine1", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine3", "parent": "vine2", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine4", "parent": "vine3", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine5", "parent": "vine4", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine6", "parent": "vine5", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine7", "parent": "vine6", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine8", "parent": "vine7", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine9", "parent": "vine8", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine10", "parent": "vine9", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine11", "parent": "vine10", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine12", "parent": "vine11", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine13", "parent": "vine12", "length": 74, "x": 74, "color": "f700ffff" }, + { "name": "vine-control1", "parent": "root", "length": 296.68, "rotation": 88.64, "x": -2.5, "y": 2.55, "color": "ff0004ff" }, + { "name": "vine-control2", "parent": "vine-control1", "length": 292.59, "rotation": 0.96, "x": 296.68, "color": "ff0004ff" }, + { "name": "vine-control3", "parent": "vine-control2", "length": 247.5, "rotation": 0.16, "x": 292.59, "color": "ff0004ff" }, + { "name": "vine-control4", "parent": "vine-control3", "length": 212.43, "rotation": 0.5, "x": 247.5, "color": "ff0004ff" } +], +"slots": [ + { "name": "vine-path", "bone": "root", "attachment": "vine-path" }, + { "name": "vine", "bone": "vine1", "attachment": "images/vine" } +], +"path": [ + { + "name": "vine-path", + "bones": [ "vine1", "vine2", "vine3", "vine4", "vine5", "vine6", "vine7", "vine8", "vine9", "vine10", "vine11", "vine12", "vine13" ], + "target": "vine-path", + "rotateMode": "chainScale" + } +], +"skins": { + "default": { + "vine": { + "images/vine": { + "type": "mesh", + "uvs": [ 0, 0, 0.5, 0, 1, 0, 1, 0.03846, 1, 0.07692, 1, 0.11538, 1, 0.15384, 1, 0.1923, 1, 0.23076, 1, 0.26923, 1, 0.30769, 1, 0.34615, 1, 0.38461, 1, 0.42307, 1, 0.46153, 1, 0.5, 1, 0.53846, 1, 0.57692, 1, 0.61538, 1, 0.65384, 1, 0.6923, 1, 0.73076, 1, 0.76923, 1, 0.80769, 1, 0.84615, 1, 0.88461, 1, 0.92307, 1, 0.96153, 1, 1, 0.5, 1, 0, 1, 0, 0.96153, 0, 0.92307, 0, 0.88461, 0, 0.84615, 0, 0.80769, 0, 0.76923, 0, 0.73076, 0, 0.6923, 0, 0.65384, 0, 0.61538, 0, 0.57692, 0, 0.53846, 0, 0.5, 0, 0.46153, 0, 0.42307, 0, 0.38461, 0, 0.34615, 0, 0.30769, 0, 0.26923, 0, 0.23076, 0, 0.1923, 0, 0.15384, 0, 0.11538, 0, 0.07692, 0, 0.03846, 0.5, 0.03846, 0.5, 0.07692, 0.5, 0.11538, 0.5, 0.15384, 0.5, 0.1923, 0.5, 0.23076, 0.5, 0.26923, 0.5, 0.30769, 0.5, 0.34615, 0.5, 0.38461, 0.5, 0.42307, 0.5, 0.46153, 0.5, 0.5, 0.5, 0.53846, 0.5, 0.57692, 0.5, 0.61538, 0.5, 0.65384, 0.5, 0.6923, 0.5, 0.73076, 0.5, 0.76923, 0.5, 0.80769, 0.5, 0.84615, 0.5, 0.88461, 0.5, 0.92307, 0.5, 0.96153 ], + "triangles": [ 57, 56, 3, 54, 55, 56, 56, 2, 3, 55, 1, 56, 56, 1, 2, 55, 0, 1, 54, 56, 57, 59, 58, 5, 52, 53, 58, 58, 4, 5, 53, 57, 58, 58, 57, 4, 53, 54, 57, 57, 3, 4, 61, 60, 7, 50, 51, 60, 60, 6, 7, 51, 59, 60, 60, 59, 6, 51, 52, 59, 59, 5, 6, 52, 58, 59, 63, 62, 9, 48, 49, 62, 62, 8, 9, 49, 61, 62, 62, 61, 8, 49, 50, 61, 61, 7, 8, 50, 60, 61, 65, 64, 11, 46, 47, 64, 64, 10, 11, 47, 63, 64, 64, 63, 10, 47, 48, 63, 63, 9, 10, 48, 62, 63, 67, 66, 13, 44, 45, 66, 66, 12, 13, 45, 65, 66, 66, 65, 12, 45, 46, 65, 65, 11, 12, 46, 64, 65, 69, 68, 15, 42, 43, 68, 68, 14, 15, 43, 67, 68, 68, 67, 14, 43, 44, 67, 67, 13, 14, 44, 66, 67, 71, 70, 17, 40, 41, 70, 70, 16, 17, 41, 69, 70, 70, 69, 16, 41, 42, 69, 69, 15, 16, 42, 68, 69, 73, 72, 19, 38, 39, 72, 72, 18, 19, 39, 71, 72, 72, 71, 18, 39, 40, 71, 71, 17, 18, 40, 70, 71, 75, 74, 21, 36, 37, 74, 74, 20, 21, 37, 73, 74, 74, 73, 20, 37, 38, 73, 73, 19, 20, 38, 72, 73, 77, 76, 23, 34, 35, 76, 76, 22, 23, 35, 75, 76, 76, 75, 22, 35, 36, 75, 75, 21, 22, 36, 74, 75, 78, 77, 24, 33, 34, 77, 32, 78, 79, 79, 78, 25, 32, 33, 78, 78, 24, 25, 33, 77, 78, 77, 23, 24, 34, 76, 77, 79, 25, 26, 29, 27, 28, 30, 80, 29, 29, 80, 27, 30, 31, 80, 80, 26, 27, 31, 79, 80, 80, 79, 26, 31, 32, 79 ], + "vertices": [ 4, 10, 294, 33.89, 3.2E-4, 11, 220, 33.89, 0.01648, 12, 146, 33.89, 0.21526, 13, 72, 33.89, 0.76791, 3, 11, 220, -0.1, 0.00752, 12, 146, -0.1, 0.16869, 13, 72, -0.1, 0.82378, 4, 10, 294, -34.09999, 3.2E-4, 11, 220, -34.09999, 0.01648, 12, 146, -34.09999, 0.21526, 13, 72, -34.09999, 0.76791, 4, 10, 257, -34.09999, 0.00195, 11, 183, -34.09999, 0.04739, 12, 109, -34.09999, 0.33351, 13, 35, -34.09999, 0.61714, 5, 9, 294, -34.09999, 2.4E-4, 10, 220, -34.09999, 0.01163, 11, 146, -34.09999, 0.14109, 12, 72, -34.09999, 0.49171, 13, -1.99, -34.09999, 0.35531, 5, 9, 257, -34.09999, 0.00195, 10, 183, -34.09999, 0.04663, 11, 109, -34.09999, 0.31166, 12, 35, -34.09999, 0.48761, 13, -38.99, -34.09999, 0.15212, 6, 8, 294, -34.09999, 2.4E-4, 9, 220, -34.09999, 0.01163, 10, 146, -34.09999, 0.14101, 11, 72, -34.09999, 0.48685, 12, -1.99, -34.09999, 0.31174, 13, -75.99, -34.09999, 0.0485, 6, 8, 257, -34.09999, 0.00195, 9, 183, -34.09999, 0.04663, 10, 109, -34.09999, 0.31166, 11, 35, -34.09999, 0.48685, 12, -38.99, -34.09999, 0.14101, 13, -112.99, -34.09999, 0.01188, 7, 7, 294, -34.09999, 2.4E-4, 8, 220, -34.09999, 0.01163, 9, 146, -34.09999, 0.14101, 10, 72, -34.09999, 0.48685, 11, -1.99, -34.09999, 0.31166, 12, -75.99, -34.09999, 0.04663, 13, -149.99, -34.09999, 0.00195, 7, 7, 257, -34.09999, 0.00195, 8, 183, -34.09999, 0.04663, 9, 109, -34.09999, 0.31166, 10, 35, -34.09999, 0.48685, 11, -38.99, -34.09999, 0.14101, 12, -112.99, -34.09999, 0.01163, 13, -186.99, -34.09999, 2.4E-4, 7, 6, 294, -34.09999, 2.4E-4, 7, 220, -34.09999, 0.01163, 8, 146, -34.09999, 0.14101, 9, 72, -34.09999, 0.48685, 10, -1.99, -34.09999, 0.31166, 11, -75.99, -34.09999, 0.04663, 12, -149.99, -34.09999, 0.00195, 7, 6, 257, -34.09999, 0.00195, 7, 183, -34.09999, 0.04663, 8, 109, -34.09999, 0.31166, 9, 35, -34.09999, 0.48685, 10, -38.99, -34.09999, 0.14101, 11, -112.99, -34.09999, 0.01163, 12, -186.99, -34.09999, 2.4E-4, 7, 5, 294, -34.09999, 2.4E-4, 6, 220, -34.09999, 0.01163, 7, 146, -34.09999, 0.14101, 8, 72, -34.09999, 0.48685, 9, -1.99, -34.09999, 0.31166, 10, -75.99, -34.09999, 0.04663, 11, -149.99, -34.09999, 0.00195, 7, 5, 257, -34.09999, 0.00195, 6, 183, -34.09999, 0.04663, 7, 109, -34.09999, 0.31166, 8, 35, -34.09999, 0.48685, 9, -38.99, -34.09999, 0.14101, 10, -112.99, -34.09999, 0.01163, 11, -186.99, -34.09999, 2.4E-4, 7, 4, 294, -34.09999, 2.4E-4, 5, 220, -34.09999, 0.01163, 6, 146, -34.09999, 0.14101, 7, 72, -34.09999, 0.48685, 8, -1.99, -34.09999, 0.31166, 9, -75.99, -34.09999, 0.04663, 10, -149.99, -34.09999, 0.00195, 7, 4, 257, -34.09999, 0.00195, 5, 183, -34.09999, 0.04663, 6, 109, -34.09999, 0.31166, 7, 35, -34.09999, 0.48685, 8, -38.99, -34.09999, 0.14101, 9, -112.99, -34.09999, 0.01163, 10, -186.99, -34.09999, 2.4E-4, 7, 3, 294, -34.09999, 2.4E-4, 4, 220, -34.09999, 0.01163, 5, 146, -34.09999, 0.14101, 6, 72, -34.09999, 0.48685, 7, -1.99, -34.09999, 0.31166, 8, -75.99, -34.09999, 0.04663, 9, -149.99, -34.09999, 0.00195, 7, 3, 257, -34.09999, 0.00195, 4, 183, -34.09999, 0.04663, 5, 109, -34.09999, 0.31166, 6, 35, -34.09999, 0.48685, 7, -38.99, -34.09999, 0.14101, 8, -112.99, -34.09999, 0.01163, 9, -186.99, -34.09999, 2.4E-4, 7, 2, 294, -34.09999, 2.4E-4, 3, 220, -34.09999, 0.01163, 4, 146, -34.09999, 0.14101, 5, 72, -34.09999, 0.48685, 6, -1.99, -34.09999, 0.31166, 7, -75.99, -34.09999, 0.04663, 8, -149.99, -34.09999, 0.00195, 7, 2, 257, -34.09999, 0.00195, 3, 183, -34.09999, 0.04663, 4, 109, -34.09999, 0.31166, 5, 35, -34.09999, 0.48685, 6, -38.99, -34.09999, 0.14101, 7, -112.99, -34.09999, 0.01163, 8, -186.99, -34.09999, 2.4E-4, 7, 1, 294, -34.09999, 2.4E-4, 2, 220, -34.09999, 0.01163, 3, 146, -34.09999, 0.14101, 4, 72, -34.09999, 0.48685, 5, -1.99, -34.09999, 0.31166, 6, -75.99, -34.09999, 0.04663, 7, -149.99, -34.09999, 0.00195, 7, 1, 257, -34.09999, 0.0017, 2, 183, -34.09999, 0.04687, 3, 109, -34.09999, 0.31166, 4, 35, -34.09999, 0.48685, 5, -38.99, -34.09999, 0.14101, 6, -112.99, -34.09999, 0.01163, 7, -186.99, -34.09999, 2.4E-4, 6, 1, 220, -34.09999, 0.01033, 2, 146, -34.09999, 0.14256, 3, 72, -34.09999, 0.48685, 4, -1.99, -34.09999, 0.31166, 5, -75.99, -34.09999, 0.04663, 6, -149.99, -34.09999, 0.00195, 6, 1, 183, -34.09999, 0.04058, 2, 109, -34.09999, 0.31966, 3, 35, -34.09999, 0.48685, 4, -38.99, -34.09999, 0.14101, 5, -112.99, -34.09999, 0.01163, 6, -186.99, -34.09999, 2.4E-4, 5, 1, 146, -34.09999, 0.1274, 2, 72, -34.09999, 0.51233, 3, -1.99, -34.09999, 0.31166, 4, -75.99, -34.09999, 0.04663, 5, -149.99, -34.09999, 0.00195, 5, 1, 109, -34.09999, 0.30116, 2, 35, -34.09999, 0.54594, 3, -38.99, -34.09999, 0.14101, 4, -112.99, -34.09999, 0.01163, 5, -186.99, -34.09999, 2.4E-4, 4, 1, 72, -34.09999, 0.55403, 2, -1.99, -34.09999, 0.39738, 3, -75.99, -34.09999, 0.04663, 4, -149.99, -34.09999, 0.00195, 4, 1, 35, -34.09999, 0.77978, 2, -38.99, -34.09999, 0.20825, 3, -112.99, -34.09999, 0.01171, 4, -186.99, -34.09999, 2.4E-4, 3, 1, -1.99, -34.09999, 0.89032, 2, -75.99, -34.09999, 0.10696, 3, -149.99, -34.09999, 0.00271, 3, 1, -1.99, -0.1, 0.9264, 2, -75.99, -0.1, 0.07272, 3, -149.99, -0.1, 8.6E-4, 3, 1, -1.99, 33.89, 0.89032, 2, -75.99, 33.89, 0.10696, 3, -149.99, 33.89, 0.00271, 4, 1, 35, 33.89, 0.77978, 2, -38.99, 33.89, 0.20825, 3, -112.99, 33.89, 0.01171, 4, -186.99, 33.89, 2.4E-4, 4, 1, 72, 33.89, 0.55403, 2, -1.99, 33.89, 0.39738, 3, -75.99, 33.89, 0.04663, 4, -149.99, 33.89, 0.00195, 5, 1, 109, 33.89, 0.30116, 2, 35, 33.89, 0.54594, 3, -38.99, 33.89, 0.14101, 4, -112.99, 33.89, 0.01163, 5, -186.99, 33.89, 2.4E-4, 5, 1, 146, 33.89, 0.1274, 2, 72, 33.89, 0.51233, 3, -1.99, 33.89, 0.31166, 4, -75.99, 33.89, 0.04663, 5, -149.99, 33.89, 0.00195, 6, 1, 183, 33.89, 0.04058, 2, 109, 33.89, 0.31966, 3, 35, 33.89, 0.48685, 4, -38.99, 33.89, 0.14101, 5, -112.99, 33.89, 0.01163, 6, -186.99, 33.89, 2.4E-4, 6, 1, 220, 33.89, 0.01033, 2, 146, 33.89, 0.14256, 3, 72, 33.89, 0.48685, 4, -1.99, 33.89, 0.31166, 5, -75.99, 33.89, 0.04663, 6, -149.99, 33.89, 0.00195, 7, 1, 257, 33.89, 0.0017, 2, 183, 33.89, 0.04687, 3, 109, 33.89, 0.31166, 4, 35, 33.89, 0.48685, 5, -38.99, 33.89, 0.14101, 6, -112.99, 33.89, 0.01163, 7, -186.99, 33.89, 2.4E-4, 7, 1, 294, 33.89, 2.4E-4, 2, 220, 33.89, 0.01163, 3, 146, 33.89, 0.14101, 4, 72, 33.89, 0.48685, 5, -1.99, 33.89, 0.31166, 6, -75.99, 33.89, 0.04663, 7, -149.99, 33.89, 0.00195, 7, 2, 257, 33.89, 0.00195, 3, 183, 33.89, 0.04663, 4, 109, 33.89, 0.31166, 5, 35, 33.89, 0.48685, 6, -38.99, 33.89, 0.14101, 7, -112.99, 33.89, 0.01163, 8, -186.99, 33.89, 2.4E-4, 7, 2, 294, 33.89, 2.4E-4, 3, 220, 33.89, 0.01163, 4, 146, 33.89, 0.14101, 5, 72, 33.89, 0.48685, 6, -1.99, 33.89, 0.31166, 7, -75.99, 33.89, 0.04663, 8, -149.99, 33.89, 0.00195, 7, 3, 257, 33.89, 0.00195, 4, 183, 33.89, 0.04663, 5, 109, 33.89, 0.31166, 6, 35, 33.89, 0.48685, 7, -38.99, 33.89, 0.14101, 8, -112.99, 33.89, 0.01163, 9, -186.99, 33.89, 2.4E-4, 7, 3, 294, 33.89, 2.4E-4, 4, 220, 33.89, 0.01163, 5, 146, 33.89, 0.14101, 6, 72, 33.89, 0.48685, 7, -1.99, 33.89, 0.31166, 8, -75.99, 33.89, 0.04663, 9, -149.99, 33.89, 0.00195, 7, 4, 257, 33.89, 0.00195, 5, 183, 33.89, 0.04663, 6, 109, 33.89, 0.31166, 7, 35, 33.89, 0.48685, 8, -38.99, 33.89, 0.14101, 9, -112.99, 33.89, 0.01163, 10, -186.99, 33.89, 2.4E-4, 7, 4, 294, 33.89, 2.4E-4, 5, 220, 33.89, 0.01163, 6, 146, 33.89, 0.14101, 7, 72, 33.89, 0.48685, 8, -1.99, 33.89, 0.31166, 9, -75.99, 33.89, 0.04663, 10, -149.99, 33.89, 0.00195, 7, 5, 257, 33.89, 0.00195, 6, 183, 33.89, 0.04663, 7, 109, 33.89, 0.31166, 8, 35, 33.89, 0.48685, 9, -38.99, 33.89, 0.14101, 10, -112.99, 33.89, 0.01163, 11, -186.99, 33.89, 2.4E-4, 7, 5, 294, 33.89, 2.4E-4, 6, 220, 33.89, 0.01163, 7, 146, 33.89, 0.14101, 8, 72, 33.89, 0.48685, 9, -1.99, 33.89, 0.31166, 10, -75.99, 33.89, 0.04663, 11, -149.99, 33.89, 0.00195, 7, 6, 257, 33.89, 0.00195, 7, 183, 33.89, 0.04663, 8, 109, 33.89, 0.31166, 9, 35, 33.89, 0.48685, 10, -38.99, 33.89, 0.14101, 11, -112.99, 33.89, 0.01163, 12, -186.99, 33.89, 2.4E-4, 7, 6, 294, 33.89, 2.4E-4, 7, 220, 33.89, 0.01163, 8, 146, 33.89, 0.14101, 9, 72, 33.89, 0.48685, 10, -1.99, 33.89, 0.31166, 11, -75.99, 33.89, 0.04663, 12, -149.99, 33.89, 0.00195, 7, 7, 257, 33.89, 0.00195, 8, 183, 33.89, 0.04663, 9, 109, 33.89, 0.31166, 10, 35, 33.89, 0.48685, 11, -38.99, 33.89, 0.14101, 12, -112.99, 33.89, 0.01163, 13, -186.99, 33.89, 2.4E-4, 7, 7, 294, 33.89, 2.4E-4, 8, 220, 33.89, 0.01163, 9, 146, 33.89, 0.14101, 10, 72, 33.89, 0.48685, 11, -1.99, 33.89, 0.31166, 12, -75.99, 33.89, 0.04663, 13, -149.99, 33.89, 0.00195, 6, 8, 257, 33.89, 0.00195, 9, 183, 33.89, 0.04663, 10, 109, 33.89, 0.31166, 11, 35, 33.89, 0.48685, 12, -38.99, 33.89, 0.14101, 13, -112.99, 33.89, 0.01188, 6, 8, 294, 33.89, 2.4E-4, 9, 220, 33.89, 0.01163, 10, 146, 33.89, 0.14101, 11, 72, 33.89, 0.48685, 12, -1.99, 33.89, 0.31174, 13, -75.99, 33.89, 0.0485, 5, 9, 257, 33.89, 0.00195, 10, 183, 33.89, 0.04663, 11, 109, 33.89, 0.31166, 12, 35, 33.89, 0.48761, 13, -38.99, 33.89, 0.15212, 5, 9, 294, 33.89, 2.4E-4, 10, 220, 33.89, 0.01163, 11, 146, 33.89, 0.14109, 12, 72, 33.89, 0.49171, 13, -1.99, 33.89, 0.35531, 4, 10, 257, 33.89, 0.00195, 11, 183, 33.89, 0.04739, 12, 109, 33.89, 0.33351, 13, 35, 33.89, 0.61714, 4, 10, 257, -0.1, 6.5E-4, 11, 183, -0.1, 0.03067, 12, 109, -0.1, 0.31658, 13, 35, -0.1, 0.65209, 4, 10, 220, -0.1, 0.00542, 11, 146, -0.1, 0.11402, 12, 72, -0.1, 0.5478, 13, -1.99, -0.1, 0.33273, 5, 9, 257, -0.1, 6.5E-4, 10, 183, -0.1, 0.03045, 11, 109, -0.1, 0.30373, 12, 35, -0.1, 0.54592, 13, -38.99, -0.1, 0.11923, 5, 9, 220, -0.1, 0.00542, 10, 146, -0.1, 0.11402, 11, 72, -0.1, 0.5457, 12, -1.99, -0.1, 0.30373, 13, -75.99, -0.1, 0.0311, 6, 8, 257, -0.1, 6.5E-4, 9, 183, -0.1, 0.03045, 10, 109, -0.1, 0.30373, 11, 35, -0.1, 0.5457, 12, -38.99, -0.1, 0.11402, 13, -112.99, -0.1, 0.00542, 6, 8, 220, -0.1, 0.00542, 9, 146, -0.1, 0.11402, 10, 72, -0.1, 0.5457, 11, -1.99, -0.1, 0.30373, 12, -75.99, -0.1, 0.03045, 13, -149.99, -0.1, 6.5E-4, 6, 7, 257, -0.1, 6.5E-4, 8, 183, -0.1, 0.03045, 9, 109, -0.1, 0.30373, 10, 35, -0.1, 0.5457, 11, -38.99, -0.1, 0.11402, 12, -112.99, -0.1, 0.00542, 6, 7, 220, -0.1, 0.00542, 8, 146, -0.1, 0.11402, 9, 72, -0.1, 0.5457, 10, -1.99, -0.1, 0.30373, 11, -75.99, -0.1, 0.03045, 12, -149.99, -0.1, 6.5E-4, 6, 6, 257, -0.1, 6.5E-4, 7, 183, -0.1, 0.03045, 8, 109, -0.1, 0.30373, 9, 35, -0.1, 0.5457, 10, -38.99, -0.1, 0.11402, 11, -112.99, -0.1, 0.00542, 6, 6, 220, -0.1, 0.00542, 7, 146, -0.1, 0.11402, 8, 72, -0.1, 0.5457, 9, -1.99, -0.1, 0.30373, 10, -75.99, -0.1, 0.03045, 11, -149.99, -0.1, 6.5E-4, 6, 5, 257, -0.1, 6.5E-4, 6, 183, -0.1, 0.03045, 7, 109, -0.1, 0.30373, 8, 35, -0.1, 0.5457, 9, -38.99, -0.1, 0.11402, 10, -112.99, -0.1, 0.00542, 6, 5, 220, -0.1, 0.00542, 6, 146, -0.1, 0.11402, 7, 72, -0.1, 0.5457, 8, -1.99, -0.1, 0.30373, 9, -75.99, -0.1, 0.03045, 10, -149.99, -0.1, 6.5E-4, 6, 4, 257, -0.1, 6.5E-4, 5, 183, -0.1, 0.03045, 6, 109, -0.1, 0.30373, 7, 35, -0.1, 0.5457, 8, -38.99, -0.1, 0.11402, 9, -112.99, -0.1, 0.00542, 6, 4, 220, -0.1, 0.00542, 5, 146, -0.1, 0.11402, 6, 72, -0.1, 0.5457, 7, -1.99, -0.1, 0.30373, 8, -75.99, -0.1, 0.03045, 9, -149.99, -0.1, 6.5E-4, 6, 3, 257, -0.1, 6.5E-4, 4, 183, -0.1, 0.03045, 5, 109, -0.1, 0.30373, 6, 35, -0.1, 0.5457, 7, -38.99, -0.1, 0.11402, 8, -112.99, -0.1, 0.00542, 6, 3, 220, -0.1, 0.00542, 4, 146, -0.1, 0.11402, 5, 72, -0.1, 0.5457, 6, -1.99, -0.1, 0.30373, 7, -75.99, -0.1, 0.03045, 8, -149.99, -0.1, 6.5E-4, 6, 2, 257, -0.1, 6.5E-4, 3, 183, -0.1, 0.03045, 4, 109, -0.1, 0.30373, 5, 35, -0.1, 0.5457, 6, -38.99, -0.1, 0.11402, 7, -112.99, -0.1, 0.00542, 6, 2, 220, -0.1, 0.00542, 3, 146, -0.1, 0.11402, 4, 72, -0.1, 0.5457, 5, -1.99, -0.1, 0.30373, 6, -75.99, -0.1, 0.03045, 7, -149.99, -0.1, 6.5E-4, 6, 1, 257, -0.1, 6.5E-4, 2, 183, -0.1, 0.03045, 3, 109, -0.1, 0.30373, 4, 35, -0.1, 0.5457, 5, -38.99, -0.1, 0.11402, 6, -112.99, -0.1, 0.00542, 6, 1, 220, -0.1, 0.00477, 2, 146, -0.1, 0.11467, 3, 72, -0.1, 0.5457, 4, -1.99, -0.1, 0.30373, 5, -75.99, -0.1, 0.03045, 6, -149.99, -0.1, 6.5E-4, 5, 1, 183, -0.1, 0.02676, 2, 109, -0.1, 0.30807, 3, 35, -0.1, 0.5457, 4, -38.99, -0.1, 0.11402, 5, -112.99, -0.1, 0.00542, 5, 1, 146, -0.1, 0.09905, 2, 72, -0.1, 0.5661, 3, -1.99, -0.1, 0.30373, 4, -75.99, -0.1, 0.03045, 5, -149.99, -0.1, 6.5E-4, 4, 1, 109, -0.1, 0.27658, 2, 35, -0.1, 0.60395, 3, -38.99, -0.1, 0.11402, 4, -112.99, -0.1, 0.00542, 4, 1, 72, -0.1, 0.55929, 2, -1.99, -0.1, 0.40959, 3, -75.99, -0.1, 0.03045, 4, -149.99, -0.1, 6.5E-4, 3, 1, 35, -0.1, 0.81845, 2, -38.99, -0.1, 0.17611, 3, -112.99, -0.1, 0.00542 ], + "hull": 56, + "edges": [ 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, 60, 62, 62, 64, 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, 106, 106, 108, 108, 110, 110, 0, 0, 2, 58, 60, 2, 4, 56, 58, 62, 160, 160, 54, 64, 158, 158, 52, 66, 156, 156, 50, 68, 154, 154, 48, 46, 152, 152, 70, 72, 150, 150, 44, 42, 148, 148, 74, 76, 146, 146, 40, 38, 144, 144, 78, 80, 142, 142, 36, 34, 140, 140, 82, 84, 138, 138, 32, 30, 136, 136, 86, 88, 134, 134, 28, 26, 132, 132, 90, 92, 130, 130, 24, 22, 128, 128, 94, 96, 126, 126, 20, 18, 124, 124, 98, 100, 122, 122, 16, 14, 120, 120, 102, 12, 118, 118, 104, 106, 116, 116, 10, 8, 114, 114, 108, 110, 112, 112, 6 ], + "width": 68, + "height": 962 + } + }, + "vine-path": { + "vine-path": { + "type": "path", + "lengths": [ 223.68, 474.79, 780.31, 992.69, 1196.42, 2277.75 ], + "vertexCount": 18, + "vertices": [ 1, 14, -31.64, 22.49, 1, 1, 14, -2.73, -6.56, 1, 1, 14, 56.89, -69, 1, 1, 14, 115.57, 75.01, 1, 1, 14, 198.6, 53.37, 1, 2, 14, 332.76, 19.74, 0.8, 15, 36.41, 19.12999, 0.19999, 2, 14, 276.72, -68.37, 0.232, 15, -21.1, -68.01999, 0.76799, 1, 15, 96.09, -93.88, 1, 2, 15, 229.75, -122.63, 0.664, 16, -63.18, -122.45, 0.33599, 2, 15, 242.53, 29.31, 0.52, 16, -49.97, 29.45, 0.47999, 1, 16, 66.72, 38.65, 1, 2, 16, 183.42, 47.85, 0.80799, 17, -63.65, 48.41, 0.192, 2, 16, 177.29, -41.22, 0.77599, 17, -70.56, -40.61, 0.224, 2, 16, 265.5, -16.18, 0.488, 17, 17.86, -16.34, 0.51199, 2, 16, 343.25, 7.25, 0.21599, 17, 95.81, 6.41, 0.784, 1, 17, 138.78, 45.72, 1, 1, 17, 212.86, 5.44, 1, 1, 14, 1094.34, -1.02, 1 ] + } + } + } +}, +"animations": { + "animation": { + "slots": { + "vine": { + "color": [ + { + "time": 0, + "color": "ffcb73ff", + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 10.3666, "color": "fefaffff" } + ] + } + }, + "bones": { + "vine1": { + "scale": [ + { + "time": 0, + "x": 1, + "y": 0.183, + "curve": [ 0.166, 0.22, 0.598, 0.99 ] + }, + { + "time": 3.6333, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 11.4333, "x": 1, "y": 1.438 } + ] + }, + "vine-control1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 2.86, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.7, + "angle": -0.13, + "curve": [ 0.505, 0, 0.75, 1 ] + }, + { + "time": 6.4333, + "angle": 0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 9.6, "angle": 0.68 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.3333, + "x": 1, + "y": 0.792, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 7.6, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.568, 0.99 ] + }, + { "time": 11.4333, "x": 1, "y": 0.636 } + ] + }, + "vine-control2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 2.86, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.7, + "angle": -0.13, + "curve": [ 0.505, 0, 0.75, 1 ] + }, + { + "time": 6.4333, + "angle": 0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 9.6, "angle": 0.68 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.3333, + "x": 1, + "y": 0.791, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 7.6, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 11.4333, "x": 1, "y": 0.923 } + ] + }, + "vine-control3": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 10.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.7, + "angle": -11.18, + "curve": [ 0.505, 0, 0.75, 1 ] + }, + { + "time": 6.4333, + "angle": -0.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 9.6, "angle": -5.23 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.3333, + "x": 1, + "y": 0.791, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 7.6, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 11.4333, "x": 1, "y": 0.923 } + ] + }, + "vine-control4": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": 10.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.7, + "angle": -11.18, + "curve": [ 0.505, 0, 0.75, 1 ] + }, + { + "time": 6.4333, + "angle": 7.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 9.6, "angle": 2.71 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 4.3333, + "x": 1, + "y": 0.791, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 7.6, + "x": 1, + "y": 1, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 11.4333, "x": 1, "y": 0.923 } + ] + } + }, + "paths": { + "vine-path": { + "position": [ + { "time": 0, "position": -0.1 }, + { "time": 0.3333, "position": -0.025 } + ], + "spacing": [ + { "time": 0, "spacing": -100 }, + { + "time": 0.3333, + "spacing": -71.8, + "curve": [ 0.32, 0.18, 0.624, 0.6 ] + }, + { + "time": 3.1333, + "spacing": -13.199, + "curve": [ 0.251, 0.5, 0.557, 0.98 ] + }, + { "time": 6.7333, "spacing": 20.9 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-starling/spine-starling-example/src/vine.png b/spine-starling/spine-starling-example/src/vine.png new file mode 100644 index 000000000..15ad8b736 Binary files /dev/null and b/spine-starling/spine-starling-example/src/vine.png differ diff --git a/spine-starling/spine-starling/.settings/com.powerflasher.fdt.classpath b/spine-starling/spine-starling/.settings/com.powerflasher.fdt.classpath index 53c37a5fa..e4540bec9 100644 --- a/spine-starling/spine-starling/.settings/com.powerflasher.fdt.classpath +++ b/spine-starling/spine-starling/.settings/com.powerflasher.fdt.classpath @@ -1,8 +1,16 @@ lib - frameworks/libs/player/{playerVersion}/playerglobal.swc src lib/spine-as3.swc - lib/starling-1.7.swc + lib/starling-2.0.1.swc + frameworks/libs/air/airglobal.swc + frameworks/libs/textLayout.swc + frameworks/libs/osmf.swc + frameworks/libs/authoringsupport.swc + frameworks/libs/core.swc + frameworks/libs/air/aircore.swc + frameworks/libs/air/applicationupdater.swc + frameworks/libs/air/applicationupdater_ui.swc + frameworks/libs/air/servicemonitor.swc diff --git a/spine-starling/spine-starling/.settings/com.powerflasher.fdt.core.prefs b/spine-starling/spine-starling/.settings/com.powerflasher.fdt.core.prefs index d1623e619..bd3538e23 100644 --- a/spine-starling/spine-starling/.settings/com.powerflasher.fdt.core.prefs +++ b/spine-starling/spine-starling/.settings/com.powerflasher.fdt.core.prefs @@ -1,8 +1,9 @@ -com.powerflasher.fdt.core.CompatiblePlayers=External_SWF_Viewer\:Browser\:Standalone_Flash_Player +com.powerflasher.fdt.core.CompatiblePlayers=AIR_Debug_Launcher com.powerflasher.fdt.core.CompilerArguments=-static-link-runtime-shared-libraries\=true\n-target-player\={playerVersion}\n-library-path+\="{flexSDK}/frameworks/locale/en_US"\n-default-size\=550,400 com.powerflasher.fdt.core.CompilerConstants=CONFIG\:\:AUTHOR\!"{user.name}"\nCONFIG\:\:DEBUG\!{debug} com.powerflasher.fdt.core.DefaultOutputFolder=bin -com.powerflasher.fdt.core.DefaultPlayer=External_SWF_Viewer +com.powerflasher.fdt.core.DefaultPlayer=AIR_Debug_Launcher +com.powerflasher.fdt.core.IncludeTestResources=false com.powerflasher.fdt.core.Language=AS3 com.powerflasher.fdt.core.Manifests= com.powerflasher.fdt.core.PassClasspath=true @@ -12,9 +13,9 @@ com.powerflasher.fdt.core.PassMainclass=true com.powerflasher.fdt.core.PassManifests=true com.powerflasher.fdt.core.PassRsls=false com.powerflasher.fdt.core.PassSwcs=true -com.powerflasher.fdt.core.PlatformType=WEB -com.powerflasher.fdt.core.PlayerVersion=11.1 -com.powerflasher.fdt.core.ProjectTypeHint=Web -com.powerflasher.fdt.core.Runtime=Flash_Player +com.powerflasher.fdt.core.PlatformType=AIR +com.powerflasher.fdt.core.PlayerVersion=22.0 +com.powerflasher.fdt.core.ProjectTypeHint=Library AIR +com.powerflasher.fdt.core.Runtime=AIR com.powerflasher.fdt.core.SdkName=Flex 4.6.0 eclipse.preferences.version=1 diff --git a/spine-starling/spine-starling/.settings/com.powerflasher.fdt.exclude b/spine-starling/spine-starling/.settings/com.powerflasher.fdt.exclude new file mode 100644 index 000000000..ea01af7bd --- /dev/null +++ b/spine-starling/spine-starling/.settings/com.powerflasher.fdt.exclude @@ -0,0 +1,22 @@ + + + SDK:frameworks/libs/air/aircore.swc + SDK:frameworks/libs/air/airglobal.swc + SDK:frameworks/libs/air/applicationupdater.swc + SDK:frameworks/libs/air/applicationupdater_ui.swc + SDK:frameworks/libs/air/servicemonitor.swc + SDK:frameworks/libs/authoringsupport.swc + SDK:frameworks/libs/core.swc + SDK:frameworks/libs/osmf.swc + SDK:frameworks/libs/textLayout.swc + frameworks/libs/air/aircore.swc + frameworks/libs/air/airglobal.swc + frameworks/libs/air/applicationupdater.swc + frameworks/libs/air/applicationupdater_ui.swc + frameworks/libs/air/servicemonitor.swc + frameworks/libs/authoringsupport.swc + frameworks/libs/core.swc + frameworks/libs/osmf.swc + frameworks/libs/textLayout.swc + + diff --git a/spine-starling/spine-starling/.settings/org.eclipse.core.resources.prefs b/spine-starling/spine-starling/.settings/org.eclipse.core.resources.prefs index 99f26c020..8b768ecaa 100644 --- a/spine-starling/spine-starling/.settings/org.eclipse.core.resources.prefs +++ b/spine-starling/spine-starling/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,7 @@ eclipse.preferences.version=1 +encoding//src/spine/starling/SkeletonAnimation.as=UTF-8 +encoding//src/spine/starling/SkeletonMesh.as=UTF-8 +encoding//src/spine/starling/SkeletonSprite.as=UTF-8 +encoding//src/spine/starling/StarlingAtlasAttachmentLoader.as=UTF-8 +encoding//src/spine/starling/StarlingTextureLoader.as=UTF-8 encoding/=UTF-8 diff --git a/spine-starling/spine-starling/lib/spine-as3.swc b/spine-starling/spine-starling/lib/spine-as3.swc index 3f90b6481..109a011b5 100644 Binary files a/spine-starling/spine-starling/lib/spine-as3.swc and b/spine-starling/spine-starling/lib/spine-as3.swc differ diff --git a/spine-starling/spine-starling/lib/starling-1.7.swc b/spine-starling/spine-starling/lib/starling-1.7.swc deleted file mode 100644 index dd36fb67a..000000000 Binary files a/spine-starling/spine-starling/lib/starling-1.7.swc and /dev/null differ diff --git a/spine-starling/spine-starling/lib/starling-2.0.1.swc b/spine-starling/spine-starling/lib/starling-2.0.1.swc new file mode 100644 index 000000000..eb24c27fa Binary files /dev/null and b/spine-starling/spine-starling/lib/starling-2.0.1.swc differ diff --git a/spine-starling/spine-starling/src/spine/starling/PolygonBatch.as b/spine-starling/spine-starling/src/spine/starling/PolygonBatch.as deleted file mode 100644 index 55a823148..000000000 --- a/spine-starling/spine-starling/src/spine/starling/PolygonBatch.as +++ /dev/null @@ -1,289 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the - * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) 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. - *****************************************************************************/ - -package spine.starling { -import spine.BlendMode; - -import starling.core.RenderSupport; -import starling.core.Starling; -import starling.textures.Texture; -import starling.textures.TextureSmoothing; -import starling.utils.MatrixUtil; -import starling.utils.VertexData; - -import flash.display3D.Context3D; -import flash.display3D.Context3DProgramType; -import flash.display3D.Context3DTextureFormat; -import flash.display3D.Context3DVertexBufferFormat; -import flash.display3D.IndexBuffer3D; -import flash.display3D.Program3D; -import flash.display3D.VertexBuffer3D; -import flash.events.Event; -import flash.geom.Matrix; -import flash.geom.Point; -import flash.utils.Dictionary; - -internal class PolygonBatch { - static private var _tempPoint:Point = new Point(); - static private var _renderAlpha:Vector. = new [1.0, 1.0, 1.0, 1.0]; - static private var _programNameCache:Dictionary = new Dictionary(); - - private var _capacity:int; - public var maxCapacity:int = 2000; - public var smoothing:String = TextureSmoothing.BILINEAR; - - private var _texture:Texture; - private var _support:RenderSupport; - private var _programBits:uint; - private var _blendModeNormal:String; - private var _blendMode:spine.BlendMode; - private var _alpha:Number; - - private var _verticesCount:int; - private var _vertices:Vector. = new []; - private var _verticesBuffer:VertexBuffer3D; - - private var _trianglesCount:int; - private var _triangles:Vector. = new []; - private var _trianglesBuffer:IndexBuffer3D; - - public function PolygonBatch () { - Starling.current.stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreated, false, 0, true); - } - - public function dispose () : void { - Starling.current.stage3D.removeEventListener(Event.CONTEXT3D_CREATE, onContextCreated); - if (_verticesBuffer) _verticesBuffer.dispose(); - if (_trianglesBuffer) _trianglesBuffer.dispose(); - } - - public function begin (support:RenderSupport, alpha:Number, blendMode:String) : void { - _support = support; - _alpha = alpha; - _programBits = 0xffffffff; - _blendMode = null; - - support.finishQuadBatch(); - support.blendMode = blendMode; - _blendModeNormal = support.blendMode; - - var context:Context3D = Starling.context; - context.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 1, support.mvpMatrix3D, true); - - var verticesBuffer:VertexBuffer3D = _verticesBuffer; - if (verticesBuffer) { - context.setVertexBufferAt(0, verticesBuffer, VertexData.POSITION_OFFSET, Context3DVertexBufferFormat.FLOAT_2); - context.setVertexBufferAt(1, verticesBuffer, VertexData.COLOR_OFFSET, Context3DVertexBufferFormat.FLOAT_4); - context.setVertexBufferAt(2, verticesBuffer, VertexData.TEXCOORD_OFFSET, Context3DVertexBufferFormat.FLOAT_2); - } - } - - public function end () : void { - flush(); - var context:Context3D = Starling.context; - context.setTextureAt(0, null); - context.setVertexBufferAt(2, null); - context.setVertexBufferAt(1, null); - context.setVertexBufferAt(0, null); - } - - public function add (texture:Texture, vertices:Vector., vl:int, uvs:Vector., triangles:Vector., - r:Number, g:Number, b:Number, a:Number, blendMode:spine.BlendMode, matrix:Matrix) : void { - if (blendMode != _blendMode) { - _blendMode = blendMode; - flush(); - if (blendMode == spine.BlendMode.normal) - _support.blendMode = _blendModeNormal; - else - _support.blendMode = spine.starling.SkeletonSprite.blendModes[blendMode.ordinal]; - _support.applyBlendMode(true); - } - - if (!_texture || texture.base != _texture.base) { - flush(); - _texture = texture; - } - - var vc:int = _verticesCount, firstVertex:int = vc >> 3; - if (firstVertex + (vl >> 1) > _capacity) { - resize(firstVertex + (vl >> 1) - _capacity); - vc = _verticesCount; - firstVertex = vc >> 3; - } - var tl:int = triangles.length, tc:int = _trianglesCount; - if (tc + tl > _triangles.length) { - resize((tc + tl - _triangles.length) / 3); - vc = _verticesCount; - firstVertex = vc >> 3; - tc = _trianglesCount; - } - - var i:int, t:Vector. = _triangles; - for (i = 0; i < tl; i += 3, tc += 3) { - t[tc] = firstVertex + triangles[i]; - t[int(tc + 1)] = firstVertex + triangles[int(i + 1)]; - t[int(tc + 2)] = firstVertex + triangles[int(i + 2)]; - } - _trianglesCount = tc; - - var v:Vector. = _vertices; - if (matrix) { - var point:Point = _tempPoint; - for (i = 0; i < vl; i += 2, vc += 8) { - MatrixUtil.transformCoords(matrix, vertices[i], vertices[int(i + 1)], point); - v[vc] = point.x; - v[int(vc + 1)] = point.y; - v[int(vc + 2)] = r; - v[int(vc + 3)] = g; - v[int(vc + 4)] = b; - v[int(vc + 5)] = a; - v[int(vc + 6)] = uvs[i]; - v[int(vc + 7)] = uvs[int(i + 1)]; - } - } else { - for (i = 0; i < vl; i += 2, vc += 8) { - v[vc] = vertices[i]; - v[int(vc + 1)] = vertices[int(i + 1)]; - v[int(vc + 2)] = r; - v[int(vc + 3)] = g; - v[int(vc + 4)] = b; - v[int(vc + 5)] = a; - v[int(vc + 6)] = uvs[i]; - v[int(vc + 7)] = uvs[int(i + 1)]; - } - } - _verticesCount = vc; - } - - private function resize (additional:int) : void { - var newCapacity:int = Math.min(maxCapacity, Math.max(_capacity + additional, _capacity * 2)); - if (newCapacity == maxCapacity) { - flush(); - newCapacity = additional; - if (newCapacity < _capacity) return; - if (newCapacity > maxCapacity) throw new ArgumentError("Too many vertices: " + newCapacity + " > " + maxCapacity); - } - _capacity = newCapacity; - _vertices.length = newCapacity << 3; - _triangles.length = newCapacity * 3; - _verticesBuffer = null; - _trianglesBuffer = null; - } - - public function flush () : void { - if (!_verticesCount) return; - - var context:Context3D = Starling.context; - - if (!_verticesBuffer) { - _verticesBuffer = context.createVertexBuffer(_capacity, 8); - var count:int = _verticesCount >> 3; - _verticesBuffer.uploadFromVector(_vertices, 0, count); - var verticesTemp:Vector. = new []; // Buffer must be filled completely once. - verticesTemp.length = (_capacity << 3) - _verticesCount; - _verticesBuffer.uploadFromVector(verticesTemp, count, _capacity - count); - verticesTemp = null; - - _trianglesBuffer = context.createIndexBuffer(_capacity * 3); - _trianglesBuffer.uploadFromVector(_triangles, 0, _trianglesCount); - var trianglesTemp:Vector. = new []; // Buffer must be filled completely once. - trianglesTemp.length = _capacity * 3 - _trianglesCount; - _trianglesBuffer.uploadFromVector(trianglesTemp, _trianglesCount, trianglesTemp.length); - trianglesTemp = null; - - context.setVertexBufferAt(0, _verticesBuffer, VertexData.POSITION_OFFSET, Context3DVertexBufferFormat.FLOAT_2); - context.setVertexBufferAt(1, _verticesBuffer, VertexData.COLOR_OFFSET, Context3DVertexBufferFormat.FLOAT_4); - context.setVertexBufferAt(2, _verticesBuffer, VertexData.TEXCOORD_OFFSET, Context3DVertexBufferFormat.FLOAT_2); - } else { - _verticesBuffer.uploadFromVector(_vertices, 0, _verticesCount >> 3); - _trianglesBuffer.uploadFromVector(_triangles, 0, _trianglesCount); - } - - var pma:Boolean = _texture ? _texture.premultipliedAlpha : true; - _renderAlpha[0] = _renderAlpha[1] = _renderAlpha[2] = pma ? _alpha : 1.0; - _renderAlpha[3] = _alpha; - - _support.applyBlendMode(pma); - context.setProgramConstantsFromVector(Context3DProgramType.VERTEX, 0, _renderAlpha, 1); - - setProgram(context); - context.setTextureAt(0, _texture.base); - context.drawTriangles(_trianglesBuffer, 0, _trianglesCount / 3); - - _verticesCount = 0; - _trianglesCount = 0; - - _support.raiseDrawCount(); - } - - private function onContextCreated (event:Event) : void { - _verticesBuffer = null; - _trianglesBuffer = null; - } - - private function setProgram (context:Context3D) : void { - var bits:uint = 0; - var texture:Texture = _texture; - if (texture.mipMapping) bits |= 1 << 1; - if (texture.repeat) bits |= 1 << 2; - if (smoothing != TextureSmoothing.BILINEAR) bits |= 1 << (smoothing == TextureSmoothing.TRILINEAR ? 3 : 4); - if (texture.format != Context3DTextureFormat.BGRA) bits |= 1 << (texture.format == "compressedAlpha" ? 5 : 6); - if (bits == _programBits) return; - _programBits = bits; - - var name:String = _programNameCache[bits]; - if (name == null) { - name = "PB_i." + bits.toString(16); - _programNameCache[bits] = name; - } - - var program:Program3D = Starling.current.getProgram(name); - if (!program) { - // va0 -> position - // va1 -> color - // va2 -> texCoords - // vc0 -> alpha - // vc1 -> mvpMatrix - // fs0 -> texture - var vertexShader:String = - "m44 op, va0, vc1 \n" + // 4x4 matrix transform to output clipspace - "mul v0, va1, vc0 \n" + // multiply alpha (vc0) with color (va1) - "mov v1, va2 \n"; // pass texture coordinates to fragment program - var flags:String = RenderSupport.getTextureLookupFlags(texture.format, texture.mipMapping, texture.repeat, smoothing); - var fragmentShader:String = - "tex ft1, v1, fs0 " + flags + " \n" + // sample texture 0 - "mul oc, ft1, v0 \n"; // multiply color with texel color - program = Starling.current.registerProgramFromSource(name, vertexShader, fragmentShader); - } - context.setProgram(program); - } -} -} diff --git a/spine-starling/spine-starling/src/spine/starling/SkeletonAnimation.as b/spine-starling/spine-starling/src/spine/starling/SkeletonAnimation.as index 8a03be1a8..41e656809 100644 --- a/spine-starling/spine-starling/src/spine/starling/SkeletonAnimation.as +++ b/spine-starling/spine-starling/src/spine/starling/SkeletonAnimation.as @@ -39,10 +39,9 @@ import starling.animation.IAnimatable; public class SkeletonAnimation extends SkeletonSprite implements IAnimatable { public var state:AnimationState; public var timeScale:Number = 1; - - /** @param renderMeshes If false, meshes won't be rendered. This may improve batching with non-Spine display objects. */ - public function SkeletonAnimation (skeletonData:SkeletonData, renderMeshes:Boolean = true, stateData:AnimationStateData = null) { - super(skeletonData, renderMeshes); + + public function SkeletonAnimation (skeletonData:SkeletonData, stateData:AnimationStateData = null) { + super(skeletonData); state = new AnimationState(stateData ? stateData : new AnimationStateData(skeletonData)); } @@ -52,6 +51,7 @@ public class SkeletonAnimation extends SkeletonSprite implements IAnimatable { state.update(time); state.apply(skeleton); skeleton.updateWorldTransform(); + this.setRequiresRedraw(); } } diff --git a/spine-starling/spine-starling/src/spine/starling/SkeletonMesh.as b/spine-starling/spine-starling/src/spine/starling/SkeletonMesh.as new file mode 100644 index 000000000..201c2693a --- /dev/null +++ b/spine-starling/spine-starling/src/spine/starling/SkeletonMesh.as @@ -0,0 +1,55 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +package spine.starling { +import starling.textures.Texture; +import starling.styles.MeshStyle; +import starling.rendering.IndexData; +import starling.rendering.VertexData; +import starling.display.Mesh; + +public class SkeletonMesh extends Mesh { + + public function SkeletonMesh(texture:Texture, vertexData:VertexData = null, indexData:IndexData = null, style:MeshStyle=null) { + super(vertexData == null? new VertexData(): vertexData, indexData == null? new IndexData(): indexData, style); + this.texture = texture; + } + + public function getVertexData(): VertexData { + return this.vertexData; + } + + public function getIndexData(): IndexData { + return this.indexData; + } +} + +} \ No newline at end of file diff --git a/spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as b/spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as index 80883fd22..e80ead676 100644 --- a/spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as +++ b/spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as @@ -38,14 +38,15 @@ import spine.atlas.AtlasRegion; import spine.attachments.Attachment; import spine.attachments.MeshAttachment; import spine.attachments.RegionAttachment; -import spine.attachments.WeightedMeshAttachment; -import starling.core.RenderSupport; import starling.display.BlendMode; import starling.display.DisplayObject; +import starling.display.Image; +import starling.rendering.IndexData; +import starling.rendering.Painter; +import starling.rendering.VertexData; import starling.utils.Color; import starling.utils.MatrixUtil; -import starling.utils.VertexData; import flash.geom.Matrix; import flash.geom.Point; @@ -54,129 +55,23 @@ import flash.geom.Rectangle; public class SkeletonSprite extends DisplayObject { static private var _tempPoint:Point = new Point(); static private var _tempMatrix:Matrix = new Matrix(); - static private var _tempVertices:Vector. = new Vector.(8); - static private var _quadTriangles:Vector. = new [0, 1, 2, 2, 3, 0]; + static private var _tempVertices:Vector. = new Vector.(8); static internal var blendModes:Vector. = new [ BlendMode.NORMAL, BlendMode.ADD, BlendMode.MULTIPLY, BlendMode.SCREEN]; - private var _skeleton:Skeleton; - private var _polygonBatch:PolygonBatch; - public var batchable:Boolean = true; - private var _batched:Boolean; + private var _skeleton:Skeleton; + public var batchable:Boolean = true; private var _smoothing:String = "bilinear"; - - /** @param renderMeshes If false, meshes won't be rendered. This may improve batching with non-Spine display objects. */ - public function SkeletonSprite (skeletonData:SkeletonData, renderMeshes:Boolean = true) { + + public function SkeletonSprite (skeletonData:SkeletonData) { Bone.yDown = true; - - if (renderMeshes) _polygonBatch = new PolygonBatch(); - _skeleton = new Skeleton(skeletonData); _skeleton.updateWorldTransform(); } - override public function render (support:RenderSupport, alpha:Number) : void { - alpha *= this.alpha * skeleton.a; - var originalBlendMode:String = support.blendMode; - if (_polygonBatch) - renderMeshes(support, alpha); - else - renderRegions(support, alpha); - support.blendMode = originalBlendMode; - } - - private function renderMeshes (support:RenderSupport, alpha:Number) : void { - if (!batchable) { - _polygonBatch.begin(support, alpha, blendMode); - addToBatch(_polygonBatch, alpha, null); - _polygonBatch.end(); - } else if (!_batched) { - support.popMatrix(); - _polygonBatch.begin(support, alpha, blendMode); - addToBatch(_polygonBatch, alpha, transformationMatrix); - for(var i:int = parent.getChildIndex(this) + 1, n:int = parent.numChildren; i < n; ++i) { - var sibling:SkeletonSprite = parent.getChildAt(i) as SkeletonSprite; - if (!sibling || !sibling.batchable || sibling.blendMode != blendMode || !sibling.visible) break; - sibling._batched = true; - sibling.addToBatch(_polygonBatch, alpha, sibling.transformationMatrix); - } - _polygonBatch.end(); - support.pushMatrix(); - support.transformMatrix(this); - } else - _batched = false; - } - - private function addToBatch (polygonBatch:PolygonBatch, skeletonA:Number, matrix:Matrix) : void { - var skeletonR:Number = skeleton.r; - var skeletonG:Number = skeleton.g; - var skeletonB:Number = skeleton.b; - var x:Number = skeleton.x; - var y:Number = skeleton.y; - var worldVertices:Vector. = _tempVertices; - var drawOrder:Vector. = skeleton.drawOrder; - for (var i:int = 0, n:int = drawOrder.length; i < n; ++i) { - var slot:Slot = drawOrder[i]; - var attachment:Attachment = slot.attachment; - if (!attachment) continue; - var image:SkeletonImage, verticesLength:int, uvs:Vector., triangles:Vector.; - var r:Number, g:Number, b:Number, a:Number; - if (attachment is RegionAttachment) { - var region:RegionAttachment = RegionAttachment(slot.attachment); - verticesLength = 8; - region.computeWorldVertices(x, y, slot.bone, worldVertices); - uvs = region.uvs; - triangles = _quadTriangles; - r = region.r; - g = region.g; - b = region.b; - a = region.a; - image = region.rendererObject as SkeletonImage; - if (image == null) region.rendererObject = image = SkeletonImage(AtlasRegion(region.rendererObject).rendererObject); - } else if (attachment is MeshAttachment) { - var mesh:MeshAttachment = MeshAttachment(attachment); - verticesLength = mesh.vertices.length; - if (worldVertices.length < verticesLength) worldVertices.length = verticesLength; - mesh.computeWorldVertices(x, y, slot, worldVertices); - uvs = mesh.uvs; - triangles = mesh.triangles; - r = mesh.r; - g = mesh.g; - b = mesh.b; - a = mesh.a; - image = mesh.rendererObject as SkeletonImage; - if (image == null) mesh.rendererObject = image = SkeletonImage(AtlasRegion(mesh.rendererObject).rendererObject); - } else if (attachment is WeightedMeshAttachment) { - var weightedMesh:WeightedMeshAttachment = WeightedMeshAttachment(attachment); - verticesLength = weightedMesh.uvs.length; - if (worldVertices.length < verticesLength) worldVertices.length = verticesLength; - weightedMesh.computeWorldVertices(x, y, slot, worldVertices); - uvs = weightedMesh.uvs; - triangles = weightedMesh.triangles; - r = weightedMesh.r; - g = weightedMesh.g; - b = weightedMesh.b; - a = weightedMesh.a; - image = weightedMesh.rendererObject as SkeletonImage; - if (image == null) weightedMesh.rendererObject = image = SkeletonImage(AtlasRegion(weightedMesh.rendererObject).rendererObject); - } - if (image) { - a *= skeletonA * slot.a; - if (image.texture.premultipliedAlpha) { - r *= skeletonR * slot.r * a; - g *= skeletonG * slot.g * a; - b *= skeletonB * slot.b * a; - } else { - r *= skeletonR * slot.r; - g *= skeletonG * slot.g; - b *= skeletonB * slot.b; - } - polygonBatch.add(image.texture, worldVertices, verticesLength, uvs, triangles, r, g, b, a, slot.data.blendMode, matrix); - } - } - } - - private function renderRegions (support:RenderSupport, alpha:Number) : void { + override public function render (painter:Painter) : void { + alpha *= this.alpha * skeleton.a; + var originalBlendMode:String = painter.state.blendMode; var r:Number = skeleton.r * 255; var g:Number = skeleton.g * 255; var b:Number = skeleton.b * 255; @@ -184,43 +79,99 @@ public class SkeletonSprite extends DisplayObject { var y:Number = skeleton.y; var drawOrder:Vector. = skeleton.drawOrder; var worldVertices:Vector. = _tempVertices; + var ii:int, iii:int; + var rgb:uint, a:Number; + var mesh:SkeletonMesh; + var verticesLength:int, verticesCount:int, indicesLength:int; + var indexData:IndexData, indices:Vector., vertexData:VertexData; + var uvs: Vector.; + for (var i:int = 0, n:int = drawOrder.length; i < n; ++i) { - var slot:Slot = drawOrder[i]; - var region:RegionAttachment = slot.attachment as RegionAttachment; - if (region != null) { + var slot:Slot = drawOrder[i]; + if (slot.attachment is RegionAttachment) { + var region:RegionAttachment = slot.attachment as RegionAttachment; region.computeWorldVertices(x, y, slot.bone, worldVertices); - var a:Number = slot.a * region.a; - var rgb:uint = Color.rgb( + // FIXME pre-multiplied alpha? + a = slot.a * region.a; + rgb = Color.rgb( r * slot.r * region.r, g * slot.g * region.g, b * slot.b * region.b); - var image:SkeletonImage = region.rendererObject as SkeletonImage; - if (image == null) region.rendererObject = image = SkeletonImage(AtlasRegion(region.rendererObject).rendererObject); - - var vertexData:VertexData = image.vertexData; - vertexData.setPosition(0, worldVertices[2], worldVertices[3]); - vertexData.setColorAndAlpha(0, rgb, a); + var image:Image = region.rendererObject as Image; + if (image == null) region.rendererObject = image = Image(AtlasRegion(region.rendererObject).rendererObject); - vertexData.setPosition(1, worldVertices[4], worldVertices[5]); - vertexData.setColorAndAlpha(1, rgb, a); + image.setVertexPosition(0, worldVertices[2], worldVertices[3]); + image.setVertexColor(0, rgb); + image.setVertexAlpha(0, a); - vertexData.setPosition(2, worldVertices[0], worldVertices[1]); - vertexData.setColorAndAlpha(2, rgb, a); + image.setVertexPosition(1, worldVertices[4], worldVertices[5]); + image.setVertexColor(1, rgb); + image.setVertexAlpha(1, a); - vertexData.setPosition(3, worldVertices[6], worldVertices[7]); - vertexData.setColorAndAlpha(3, rgb, a); + image.setVertexPosition(2, worldVertices[0], worldVertices[1]); + image.setVertexColor(2, rgb); + image.setVertexAlpha(2, a); - image.updateVertices(); - support.blendMode = blendModes[slot.data.blendMode.ordinal]; - support.batchQuad(image, alpha, image.texture, _smoothing); + image.setVertexPosition(3, worldVertices[6], worldVertices[7]); + image.setVertexColor(3, rgb); + image.setVertexAlpha(3, a); + + image.setRequiresRedraw(); + painter.state.blendMode = blendModes[slot.data.blendMode.ordinal]; + // FIXME set smoothing/filter + painter.batchMesh(image); + } else if (slot.attachment is MeshAttachment) { + var meshAttachment:MeshAttachment = MeshAttachment(slot.attachment); + verticesLength = meshAttachment.worldVerticesLength; + verticesCount = verticesLength >> 1; + if (worldVertices.length < verticesLength) worldVertices.length = verticesLength; + meshAttachment.computeWorldVertices(slot, worldVertices); + mesh = meshAttachment.rendererObject as SkeletonMesh; + if (mesh == null) { + if (meshAttachment.rendererObject is Image) + meshAttachment.rendererObject = mesh = new SkeletonMesh(Image(meshAttachment.rendererObject).texture); + if (meshAttachment.rendererObject is AtlasRegion) + meshAttachment.rendererObject = mesh = new SkeletonMesh(Image(AtlasRegion(meshAttachment.rendererObject).rendererObject).texture); + } + + if (mesh.numIndices != meshAttachment.triangles.length) { + indexData = mesh.getIndexData(); + indices = meshAttachment.triangles; + indicesLength = meshAttachment.triangles.length; + for (ii = 0; ii < indicesLength; ii++) { + indexData.setIndex(ii, indices[ii]); + } + indexData.numIndices = indicesLength; + indexData.trim(); + } + + // FIXME pre-multiplied alpha? + a = slot.a * meshAttachment.a; + rgb = Color.rgb( + r * slot.r * meshAttachment.r, + g * slot.g * meshAttachment.g, + b * slot.b * meshAttachment.b); + + vertexData = mesh.getVertexData(); + uvs = meshAttachment.uvs; + vertexData.colorize("color", rgb, a); + for (ii = 0, iii = 0; ii < verticesCount; ii++, iii+=2) { + mesh.setVertexPosition(ii, worldVertices[iii], worldVertices[iii+1]); + mesh.setTexCoords(ii, uvs[iii], uvs[iii+1]); + } + vertexData.numVertices = verticesCount; + // FIXME set smoothing/filter + painter.batchMesh(mesh); } } + painter.state.blendMode = originalBlendMode; } - override public function hitTest (localPoint:Point, forTouch:Boolean = false) : DisplayObject { - if (forTouch && (!visible || !touchable)) - return null; + override public function hitTest (localPoint:Point) : DisplayObject { + // FIXME what to do here? +// if (forTouch && (!visible || !touchable)) +// return null; var minX:Number = Number.MAX_VALUE, minY:Number = Number.MAX_VALUE; var maxX:Number = -Number.MAX_VALUE, maxY:Number = -Number.MAX_VALUE; @@ -237,14 +188,9 @@ public class SkeletonSprite extends DisplayObject { region.computeWorldVertices(0, 0, slot.bone, worldVertices); } else if (attachment is MeshAttachment) { var mesh:MeshAttachment = MeshAttachment(attachment); - verticesLength = mesh.vertices.length; + verticesLength = mesh.worldVerticesLength; if (worldVertices.length < verticesLength) worldVertices.length = verticesLength; - mesh.computeWorldVertices(0, 0, slot, worldVertices); - } else if (attachment is WeightedMeshAttachment) { - var weightedMesh:WeightedMeshAttachment = WeightedMeshAttachment(attachment); - verticesLength = weightedMesh.uvs.length; - if (worldVertices.length < verticesLength) worldVertices.length = verticesLength; - weightedMesh.computeWorldVertices(0, 0, slot, worldVertices); + mesh.computeWorldVertices(slot, worldVertices); } else continue; for (var ii:int = 0; ii < verticesLength; ii += 2) { @@ -298,8 +244,7 @@ public class SkeletonSprite extends DisplayObject { } public function set smoothing (smoothing:String) : void { - _smoothing = smoothing; - if (_polygonBatch) _polygonBatch.smoothing = _smoothing; + _smoothing = smoothing; } } diff --git a/spine-starling/spine-starling/src/spine/starling/StarlingAtlasAttachmentLoader.as b/spine-starling/spine-starling/src/spine/starling/StarlingAtlasAttachmentLoader.as index 3deae3290..ef5d95b41 100644 --- a/spine-starling/spine-starling/src/spine/starling/StarlingAtlasAttachmentLoader.as +++ b/spine-starling/spine-starling/src/spine/starling/StarlingAtlasAttachmentLoader.as @@ -30,13 +30,14 @@ *****************************************************************************/ package spine.starling { +import spine.attachments.PathAttachment; +import starling.display.Image; import spine.Bone; import spine.Skin; import spine.attachments.AttachmentLoader; import spine.attachments.BoundingBoxAttachment; import spine.attachments.MeshAttachment; import spine.attachments.RegionAttachment; -import spine.attachments.WeightedMeshAttachment; import starling.textures.SubTexture; import starling.textures.Texture; @@ -58,7 +59,7 @@ public class StarlingAtlasAttachmentLoader implements AttachmentLoader { if (texture == null) throw new Error("Region not found in Starling atlas: " + path + " (region attachment: " + name + ")"); var attachment:RegionAttachment = new RegionAttachment(name); - attachment.rendererObject = new SkeletonImage(Texture.fromTexture(texture)); // Discard frame. + attachment.rendererObject = new Image(Texture.fromTexture(texture)); // Discard frame. var frame:Rectangle = texture.frame; attachment.regionOffsetX = frame ? -frame.x : 0; attachment.regionOffsetY = frame ? -frame.y : 0; @@ -90,37 +91,7 @@ public class StarlingAtlasAttachmentLoader implements AttachmentLoader { if (texture == null) throw new Error("Region not found in Starling atlas: " + path + " (mesh attachment: " + name + ")"); var attachment:MeshAttachment = new MeshAttachment(name); - attachment.rendererObject = new SkeletonImage(Texture.fromTexture(texture)); // Discard frame. - var subTexture:SubTexture = texture as SubTexture; - if (subTexture) { - var root:Texture = subTexture.root; - var rectRegion:Rectangle = atlas.getRegion(path); - attachment.regionU = rectRegion.x / root.width; - attachment.regionV = rectRegion.y / root.height; - attachment.regionU2 = (rectRegion.x + subTexture.width) / root.width; - attachment.regionV2 = (rectRegion.y + subTexture.height) / root.height; - } else { - attachment.regionU = 0; - attachment.regionV = 1; - attachment.regionU2 = 1; - attachment.regionV2 = 0; - } - var frame:Rectangle = texture.frame; - attachment.regionOffsetX = frame ? -frame.x : 0; - attachment.regionOffsetY = frame ? -frame.y : 0; - attachment.regionWidth = texture.width; - attachment.regionHeight = texture.height; - attachment.regionOriginalWidth = frame ? frame.width : texture.width; - attachment.regionOriginalHeight = frame ? frame.height : texture.height; - return attachment; - } - - public function newWeightedMeshAttachment (skin:Skin, name:String, path:String) : WeightedMeshAttachment { - var texture:Texture = atlas.getTexture(path); - if (texture == null) - throw new Error("Region not found in Starling atlas: " + path + " (weighted mesh attachment: " + name + ")"); - var attachment:WeightedMeshAttachment = new WeightedMeshAttachment(name); - attachment.rendererObject = new SkeletonImage(Texture.fromTexture(texture)); // Discard frame. + attachment.rendererObject = new Image(Texture.fromTexture(texture)); // Discard frame. var subTexture:SubTexture = texture as SubTexture; if (subTexture) { var root:Texture = subTexture.root; @@ -129,6 +100,7 @@ public class StarlingAtlasAttachmentLoader implements AttachmentLoader { attachment.regionV = rectRegion.y / root.height; attachment.regionU2 = (rectRegion.x + subTexture.width) / root.width; attachment.regionV2 = (rectRegion.y + subTexture.height) / root.height; + attachment.rendererObject = new Image(root); } else { attachment.regionU = 0; attachment.regionV = 1; @@ -148,6 +120,10 @@ public class StarlingAtlasAttachmentLoader implements AttachmentLoader { public function newBoundingBoxAttachment (skin:Skin, name:String) : BoundingBoxAttachment { return new BoundingBoxAttachment(name); } + + public function newPathAttachment (skin:Skin, name:String) : PathAttachment { + return new PathAttachment(name); + } } } diff --git a/spine-starling/spine-starling/src/spine/starling/StarlingTextureLoader.as b/spine-starling/spine-starling/src/spine/starling/StarlingTextureLoader.as index 46721a064..4dcc54e7b 100644 --- a/spine-starling/spine-starling/src/spine/starling/StarlingTextureLoader.as +++ b/spine-starling/spine-starling/src/spine/starling/StarlingTextureLoader.as @@ -30,6 +30,7 @@ *****************************************************************************/ package spine.starling { + import starling.display.Image; import spine.atlas.AtlasPage; import spine.atlas.AtlasRegion; import spine.atlas.TextureLoader; @@ -78,17 +79,17 @@ public class StarlingTextureLoader implements TextureLoader { } public function loadRegion (region:AtlasRegion) : void { - var image:SkeletonImage = new SkeletonImage(Texture(region.page.rendererObject)); - if (region.rotate) { - image.setTexCoordsTo(0, region.u, region.v2); - image.setTexCoordsTo(1, region.u, region.v); - image.setTexCoordsTo(2, region.u2, region.v2); - image.setTexCoordsTo(3, region.u2, region.v); + var image:Image = new Image(Texture(region.page.rendererObject)); + if (region.rotate) { + image.setTexCoords(0, region.u, region.v2); + image.setTexCoords(1, region.u, region.v); + image.setTexCoords(2, region.u2, region.v2); + image.setTexCoords(3, region.u2, region.v); } else { - image.setTexCoordsTo(0, region.u, region.v); - image.setTexCoordsTo(1, region.u2, region.v); - image.setTexCoordsTo(2, region.u, region.v2); - image.setTexCoordsTo(3, region.u2, region.v2); + image.setTexCoords(0, region.u, region.v); + image.setTexCoords(1, region.u2, region.v); + image.setTexCoords(2, region.u, region.v2); + image.setTexCoords(3, region.u2, region.v2); } region.rendererObject = image; } diff --git a/spine-torque2d/README.md b/spine-torque2d/README.md deleted file mode 100644 index d3ed6de67..000000000 --- a/spine-torque2d/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# spine-torque2d - -The Spine runtime for [Torque2D](https://www.garagegames.com/products/torque-2d) is currently integrated into Torque2D itself: - -https://github.com/GarageGames/Torque2D/tree/master/engine/source/spine - -Unfortunately, it is also a bit out of date. diff --git a/spine-unity/Assets/Examples/Getting Started/1 The Spine GameObject.unity b/spine-unity/Assets/Examples/Getting Started/1 The Spine GameObject.unity index 4b3446d3c..c9e13e349 100644 Binary files a/spine-unity/Assets/Examples/Getting Started/1 The Spine GameObject.unity and b/spine-unity/Assets/Examples/Getting Started/1 The Spine GameObject.unity differ diff --git a/spine-unity/Assets/Examples/Getting Started/2 Controlling Animation.unity b/spine-unity/Assets/Examples/Getting Started/2 Controlling Animation.unity index eab6bc9bf..9deb572d7 100644 Binary files a/spine-unity/Assets/Examples/Getting Started/2 Controlling Animation.unity and b/spine-unity/Assets/Examples/Getting Started/2 Controlling Animation.unity differ diff --git a/spine-unity/Assets/Examples/Getting Started/3 Controlling Animation Continued.unity b/spine-unity/Assets/Examples/Getting Started/3 Controlling Animation Continued.unity index 6d032562f..661dc5a5f 100644 Binary files a/spine-unity/Assets/Examples/Getting Started/3 Controlling Animation Continued.unity and b/spine-unity/Assets/Examples/Getting Started/3 Controlling Animation Continued.unity differ diff --git a/spine-unity/Assets/Examples/Getting Started/4 Object Oriented Sample.unity b/spine-unity/Assets/Examples/Getting Started/4 Object Oriented Sample.unity index 0b3172c32..f93e4070c 100644 Binary files a/spine-unity/Assets/Examples/Getting Started/4 Object Oriented Sample.unity and b/spine-unity/Assets/Examples/Getting Started/4 Object Oriented Sample.unity differ diff --git a/spine-unity/Assets/Examples/Getting Started/5 Basic Platformer.unity b/spine-unity/Assets/Examples/Getting Started/5 Basic Platformer.unity index e2bfd67c3..e5fb0f497 100644 Binary files a/spine-unity/Assets/Examples/Getting Started/5 Basic Platformer.unity and b/spine-unity/Assets/Examples/Getting Started/5 Basic Platformer.unity differ diff --git a/spine-unity/Assets/Examples/Getting Started/6 SkeletonGraphic.unity b/spine-unity/Assets/Examples/Getting Started/6 SkeletonGraphic.unity index b6bdee6ed..f96734da1 100644 Binary files a/spine-unity/Assets/Examples/Getting Started/6 SkeletonGraphic.unity and b/spine-unity/Assets/Examples/Getting Started/6 SkeletonGraphic.unity differ diff --git a/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerModel.cs b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerModel.cs index 20fd265c0..64896112d 100644 --- a/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerModel.cs +++ b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerModel.cs @@ -50,9 +50,27 @@ public class SpineboyBeginnerModel : MonoBehaviour { IEnumerator JumpRoutine () { if (state == SpineBeginnerBodyState.Jumping) yield break; // Don't jump when already jumping. - // Fake jumping. state = SpineBeginnerBodyState.Jumping; - yield return new WaitForSeconds(1.2f); + + // Terribly-coded Fake jumping. + { + var pos = transform.localPosition; + const float jumpTime = 1.2f; + const float half = jumpTime * 0.5f; + const float jumpPower = 20f; + for (float t = 0; t < half; t += Time.deltaTime) { + float d = jumpPower * (half - t); + transform.Translate((d * Time.deltaTime) * Vector3.up); + yield return null; + } + for (float t = 0; t < half; t += Time.deltaTime) { + float d = jumpPower * t; + transform.Translate((d * Time.deltaTime) * Vector3.down); + yield return null; + } + transform.localPosition = pos; + } + state = SpineBeginnerBodyState.Idle; } diff --git a/spine-unity/Assets/Examples/Other Examples/AtlasRegionAttacher.unity b/spine-unity/Assets/Examples/Other Examples/AtlasRegionAttacher.unity index 4842a5799..80223fcad 100644 Binary files a/spine-unity/Assets/Examples/Other Examples/AtlasRegionAttacher.unity and b/spine-unity/Assets/Examples/Other Examples/AtlasRegionAttacher.unity differ diff --git a/spine-unity/Assets/Examples/Other Examples/Dragon.unity b/spine-unity/Assets/Examples/Other Examples/Dragon.unity index afa2abb5b..068358d61 100644 Binary files a/spine-unity/Assets/Examples/Other Examples/Dragon.unity and b/spine-unity/Assets/Examples/Other Examples/Dragon.unity differ diff --git a/spine-unity/Assets/Examples/Other Examples/Goblins.unity b/spine-unity/Assets/Examples/Other Examples/Goblins.unity index dd9c62a7c..d668087f6 100644 Binary files a/spine-unity/Assets/Examples/Other Examples/Goblins.unity and b/spine-unity/Assets/Examples/Other Examples/Goblins.unity differ diff --git a/spine-unity/Assets/Examples/Other Examples/Mix and Match.unity b/spine-unity/Assets/Examples/Other Examples/Mix and Match.unity index c81130b6a..34505ceb3 100644 Binary files a/spine-unity/Assets/Examples/Other Examples/Mix and Match.unity and b/spine-unity/Assets/Examples/Other Examples/Mix and Match.unity differ diff --git a/spine-unity/Assets/Examples/Other Examples/SkeletonRenderSeparator.unity b/spine-unity/Assets/Examples/Other Examples/SkeletonRenderSeparator.unity index 30259aa25..7d21b862e 100644 Binary files a/spine-unity/Assets/Examples/Other Examples/SkeletonRenderSeparator.unity and b/spine-unity/Assets/Examples/Other Examples/SkeletonRenderSeparator.unity differ diff --git a/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Animated Physics.unity b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Animated Physics.unity index 584910f51..656f6fc77 100644 Binary files a/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Animated Physics.unity and b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Animated Physics.unity differ diff --git a/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Eyes.unity b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Eyes.unity index dda286dbb..b800ce2d1 100644 Binary files a/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Eyes.unity and b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Eyes.unity differ diff --git a/spine-unity/Assets/Examples/Other Examples/SkeletonUtility GroundConstraint.unity b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility GroundConstraint.unity index 86c0e0eff..2dcb70d43 100644 Binary files a/spine-unity/Assets/Examples/Other Examples/SkeletonUtility GroundConstraint.unity and b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility GroundConstraint.unity differ diff --git a/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Ragdoll.unity b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Ragdoll.unity index bdc1d5d0b..17b539782 100644 Binary files a/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Ragdoll.unity and b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Ragdoll.unity differ diff --git a/spine-unity/Assets/Examples/Other Examples/SpineGauge.unity b/spine-unity/Assets/Examples/Other Examples/SpineGauge.unity index 6741cb6b9..5efb61299 100644 Binary files a/spine-unity/Assets/Examples/Other Examples/SpineGauge.unity and b/spine-unity/Assets/Examples/Other Examples/SpineGauge.unity differ diff --git a/spine-unity/Assets/Examples/Spine/Dragon/dragon.json b/spine-unity/Assets/Examples/Spine/Dragon/dragon.json index a22f75978..8ffedc479 100644 --- a/spine-unity/Assets/Examples/Spine/Dragon/dragon.json +++ b/spine-unity/Assets/Examples/Spine/Dragon/dragon.json @@ -1 +1,784 @@ -{"skeleton":{"spine":"1.9.07","hash":"3BCQecnYlSs8J+bIzsK8JxuoBXI","width":897,"height":716.36},"bones":[{"name":"root","y":-176.12},{"name":"COG","parent":"root","y":176.12},{"name":"back","parent":"COG","length":115.37,"x":16.03,"y":27.94,"rotation":151.83},{"name":"chest","parent":"COG","length":31.24,"x":52.52,"y":15.34,"rotation":161.7},{"name":"neck","parent":"COG","length":41.36,"x":64.75,"y":11.98,"rotation":39.05},{"name":"L_front_thigh","parent":"chest","length":67.42,"x":-45.58,"y":7.92,"rotation":138.94},{"name":"L_wing","parent":"chest","length":301.12,"x":-7.24,"y":-24.65,"rotation":-75.51},{"name":"R_front_thigh","parent":"chest","length":81.63,"x":-10.89,"y":28.25,"rotation":67.96},{"name":"R_rear_thigh","parent":"back","length":123.46,"x":65.31,"y":59.89,"rotation":104.87},{"name":"chin","parent":"neck","length":153.15,"x":64.62,"y":-6.99,"rotation":-69.07},{"name":"head","parent":"neck","length":188.83,"x":69.96,"y":2.49,"rotation":8.06},{"name":"tail1","parent":"back","length":65.65,"x":115.37,"y":-0.19,"rotation":44.31},{"name":"L_front_leg","parent":"L_front_thigh","length":51.57,"x":67.42,"y":0.02,"rotation":43.36},{"name":"L_rear_thigh","parent":"R_rear_thigh","length":88.05,"x":-8.59,"y":30.18,"rotation":28.35},{"name":"R_front_leg","parent":"R_front_thigh","length":66.52,"x":83.04,"y":-0.3,"rotation":92.7},{"name":"R_rear_leg","parent":"R_rear_thigh","length":91.06,"x":123.46,"y":-0.26,"rotation":-129.04},{"name":"R_wing","parent":"head","length":359.5,"x":-74.68,"y":20.9,"rotation":83.21},{"name":"tail2","parent":"tail1","length":54.5,"x":65.65,"y":0.22,"rotation":12},{"name":"L_front_toe1","parent":"L_front_leg","length":51.44,"x":45.53,"y":2.43,"rotation":-98},{"name":"L_front_toe2","parent":"L_front_leg","length":61.97,"x":51.57,"y":-0.12,"rotation":-55.26},{"name":"L_front_toe3","parent":"L_front_leg","length":45.65,"x":54.19,"y":0.6,"scaleX":1.134,"rotation":-11.13},{"name":"L_front_toe4","parent":"L_front_leg","length":53.47,"x":50.6,"y":7.08,"scaleX":1.134,"rotation":19.42},{"name":"L_rear_leg","parent":"L_rear_thigh","length":103.74,"x":96.04,"y":-0.97,"rotation":-122.41},{"name":"R_front_toe1","parent":"R_front_leg","length":46.65,"x":70.03,"y":5.31,"rotation":8.59},{"name":"R_front_toe2","parent":"R_front_leg","length":53.66,"x":66.52,"y":0.33,"rotation":-35.02},{"name":"R_front_toe3","parent":"R_front_leg","length":58.38,"x":62.1,"y":-0.79,"rotation":-74.67},{"name":"R_rear_toe1","parent":"R_rear_leg","length":94.99,"x":90.06,"y":2.12,"rotation":141.98},{"name":"R_rear_toe2","parent":"R_rear_leg","length":99.29,"x":89.6,"y":1.52,"rotation":125.32},{"name":"R_rear_toe3","parent":"R_rear_leg","length":103.45,"x":91.06,"y":-0.35,"rotation":112.26},{"name":"tail3","parent":"tail2","length":41.78,"x":54.5,"y":0.37,"rotation":1.8},{"name":"tail4","parent":"tail3","length":34.19,"x":41.78,"y":0.16,"rotation":-1.8},{"name":"tail5","parent":"tail4","length":32.32,"x":34.19,"y":-0.19,"rotation":-3.15},{"name":"tail6","parent":"tail5","length":80.08,"x":32.32,"y":-0.23,"rotation":-29.55}],"ik":[],"slots":[{"name":"L_rear_leg","bone":"L_rear_leg","attachment":"L_rear_leg"},{"name":"L_rear_thigh","bone":"L_rear_thigh","attachment":"L_rear_thigh"},{"name":"L_wing","bone":"L_wing","attachment":"L_wing01"},{"name":"tail6","bone":"tail6","attachment":"tail06"},{"name":"tail5","bone":"tail5","attachment":"tail05"},{"name":"tail4","bone":"tail4","attachment":"tail04"},{"name":"tail3","bone":"tail3","attachment":"tail03"},{"name":"tail2","bone":"tail2","attachment":"tail02"},{"name":"tail1","bone":"tail1","attachment":"tail01"},{"name":"back","bone":"back","attachment":"back"},{"name":"L_front_thigh","bone":"L_front_thigh","attachment":"L_front_thigh"},{"name":"L_front_leg","bone":"L_front_leg","attachment":"L_front_leg"},{"name":"L_front_toe1","bone":"L_front_toe1","attachment":"front_toeA"},{"name":"L_front_toe4","bone":"L_front_toe4","attachment":"front_toeB"},{"name":"L_front_toe3","bone":"L_front_toe3","attachment":"front_toeB"},{"name":"L_front_toe2","bone":"L_front_toe2","attachment":"front_toeB"},{"name":"chest","bone":"chest","attachment":"chest"},{"name":"R_rear_toe1","bone":"R_rear_toe1","attachment":"rear-toe"},{"name":"R_rear_toe2","bone":"R_rear_toe2","attachment":"rear-toe"},{"name":"R_rear_toe3","bone":"R_rear_toe3","attachment":"rear-toe"},{"name":"R_rear_leg","bone":"R_rear_leg","attachment":"R_rear_leg"},{"name":"R_rear_thigh","bone":"R_rear_thigh","attachment":"R_rear_thigh"},{"name":"R_front_toe1","bone":"R_front_toe1","attachment":"front_toeB"},{"name":"R_front_thigh","bone":"R_front_thigh","attachment":"R_front_thigh"},{"name":"R_front_leg","bone":"R_front_leg","attachment":"R_front_leg"},{"name":"R_front_toe2","bone":"R_front_toe2","attachment":"front_toeB"},{"name":"R_front_toe3","bone":"R_front_toe3","attachment":"front_toeB"},{"name":"chin","bone":"chin","attachment":"chin"},{"name":"R_wing","bone":"R_wing","attachment":"R_wing01"},{"name":"head","bone":"head","attachment":"head"},{"name":"logo","bone":"root","attachment":"logo"}],"skins":{"default":{"R_rear_leg":{"R_rear_leg":{"x":60.87,"y":-5.72,"rotation":-127.66,"width":116,"height":100}},"chest":{"chest":{"x":-14.6,"y":24.78,"rotation":-161.7,"width":136,"height":122}},"L_front_leg":{"L_front_leg":{"x":14.68,"y":0.48,"rotation":15.99,"width":84,"height":57}},"L_rear_leg":{"L_rear_leg":{"x":67.29,"y":12.62,"rotation":-162.65,"width":206,"height":177}},"R_rear_thigh":{"R_rear_thigh":{"x":53.25,"y":12.58,"rotation":103.29,"width":91,"height":149}},"R_front_toe1":{"front_toeB":{"x":24.49,"y":-2.61,"rotation":104.18,"width":56,"height":57}},"R_front_leg":{"R_front_leg":{"x":17.79,"y":4.22,"rotation":37.62,"width":101,"height":89}},"R_front_toe3":{"front_toeB":{"x":30.66,"y":-0.06,"rotation":112.29,"width":56,"height":57}},"L_front_thigh":{"L_front_thigh":{"x":27.66,"y":-11.58,"rotation":58.66,"width":84,"height":72}},"L_rear_thigh":{"L_rear_thigh":{"x":56.03,"y":27.38,"rotation":74.93,"width":91,"height":149}},"L_front_toe1":{"front_toeA":{"x":31.92,"y":0.61,"rotation":109.55,"width":29,"height":50}},"L_front_toe2":{"front_toeB":{"x":26.83,"y":-4.94,"rotation":109.51,"width":56,"height":57}},"L_front_toe3":{"front_toeB":{"x":18.21,"y":-7.21,"scaleX":0.881,"scaleY":0.94,"rotation":99.71,"width":56,"height":57}},"L_front_toe4":{"front_toeB":{"x":23.21,"y":-11.68,"scaleX":0.881,"rotation":79.89,"width":56,"height":57}},"R_wing":{"R_wing01":{"x":170.08,"y":-23.67,"rotation":-130.33,"width":219,"height":310},"R_wing02":{"x":171.14,"y":-19.33,"rotation":-130.33,"width":203,"height":305},"R_wing03":{"x":166.46,"y":29.23,"rotation":-130.33,"width":272,"height":247},"R_wing04":{"x":42.94,"y":134.05,"rotation":-130.33,"width":279,"height":144},"R_wing05":{"x":-8.83,"y":142.59,"rotation":-130.33,"width":251,"height":229},"R_wing06":{"x":-123.33,"y":111.22,"rotation":-130.33,"width":200,"height":366},"R_wing07":{"x":-40.17,"y":118.03,"rotation":-130.33,"width":200,"height":263},"R_wing08":{"x":48.01,"y":28.76,"rotation":-130.33,"width":234,"height":254},"R_wing09":{"x":128.1,"y":21.12,"rotation":-130.33,"width":248,"height":204}},"L_wing":{"L_wing01":{"x":129.21,"y":-45.49,"rotation":-83.7,"width":191,"height":256},"L_wing02":{"x":126.37,"y":-31.69,"rotation":-86.18,"width":179,"height":269},"L_wing03":{"x":110.26,"y":-90.89,"rotation":-86.18,"width":186,"height":207},"L_wing04":{"x":-61.61,"y":-83.26,"rotation":-86.18,"width":188,"height":135},"L_wing05":{"x":-90.01,"y":-78.14,"rotation":-86.18,"width":218,"height":213},"L_wing06":{"x":-143.76,"y":-83.71,"rotation":-86.18,"width":192,"height":331},"L_wing07":{"x":-133.04,"y":-33.89,"rotation":-86.18,"width":159,"height":255},"L_wing08":{"x":50.15,"y":-15.71,"rotation":-86.18,"width":164,"height":181},"L_wing09":{"x":85.94,"y":-11.32,"rotation":-86.18,"width":204,"height":167}},"head":{"head":{"x":76.68,"y":32.21,"rotation":-47.12,"width":296,"height":260}},"tail1":{"tail01":{"x":22.59,"y":-4.5,"rotation":163.85,"width":120,"height":153}},"tail2":{"tail02":{"x":18.11,"y":-1.75,"rotation":151.84,"width":95,"height":120}},"tail3":{"tail03":{"x":16.94,"y":-2,"rotation":150.04,"width":73,"height":92}},"tail4":{"tail04":{"x":15.34,"y":-2.17,"rotation":151.84,"width":56,"height":71}},"tail5":{"tail05":{"x":15.05,"y":-3.57,"rotation":155,"width":52,"height":59}},"tail6":{"tail06":{"x":28.02,"y":-16.83,"rotation":-175.44,"width":95,"height":68}},"back":{"back":{"x":35.84,"y":19.99,"rotation":-151.83,"width":190,"height":185}},"R_front_toe2":{"front_toeB":{"x":26.39,"y":1.16,"rotation":104.57,"width":56,"height":57}},"logo":{"logo":{"y":-176.72,"width":897,"height":92}},"R_front_thigh":{"R_front_thigh":{"x":35.28,"y":2.11,"rotation":130.33,"width":108,"height":108}},"R_rear_toe1":{"rear-toe":{"x":54.75,"y":-5.72,"rotation":134.79,"width":109,"height":77}},"R_rear_toe2":{"rear-toe":{"x":57.02,"y":-7.22,"rotation":134.42,"width":109,"height":77}},"R_rear_toe3":{"rear-toe":{"x":47.46,"y":-7.64,"rotation":134.34,"width":109,"height":77}},"chin":{"chin":{"x":66.55,"y":7.32,"rotation":30.01,"width":214,"height":146}}}},"animations":{"flying":{"slots":{"L_wing":{"attachment":[{"time":0,"name":"L_wing01"},{"time":0.0666,"name":"L_wing02"},{"time":0.1333,"name":"L_wing03"},{"time":0.2,"name":"L_wing04"},{"time":0.2666,"name":"L_wing05"},{"time":0.3333,"name":"L_wing06"},{"time":0.4,"name":"L_wing07"},{"time":0.4666,"name":"L_wing08"},{"time":0.5333,"name":"L_wing09"},{"time":0.6,"name":"L_wing01"},{"time":0.7333,"name":"L_wing02"},{"time":0.8,"name":"L_wing03"},{"time":0.8333,"name":"L_wing04"},{"time":0.8666,"name":"L_wing05"},{"time":0.9,"name":"L_wing06"},{"time":0.9333,"name":"L_wing07"},{"time":0.9666,"name":"L_wing08"},{"time":1,"name":"L_wing01"}]},"R_wing":{"attachment":[{"time":0,"name":"R_wing01"},{"time":0.0666,"name":"R_wing02"},{"time":0.1333,"name":"R_wing03"},{"time":0.2,"name":"R_wing04"},{"time":0.2666,"name":"R_wing05"},{"time":0.3333,"name":"R_wing06"},{"time":0.4,"name":"R_wing07"},{"time":0.4666,"name":"R_wing08"},{"time":0.5333,"name":"R_wing09"},{"time":0.6,"name":"R_wing01"},{"time":0.7333,"name":"R_wing02"},{"time":0.7666,"name":"R_wing02"},{"time":0.8,"name":"R_wing03"},{"time":0.8333,"name":"R_wing04"},{"time":0.8666,"name":"R_wing05"},{"time":0.9,"name":"R_wing06"},{"time":0.9333,"name":"R_wing07"},{"time":0.9666,"name":"R_wing08"},{"time":1,"name":"R_wing01"}]}},"bones":{"back":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":17.39},{"time":0.5,"angle":0},{"time":0.8333,"angle":7},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"neck":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":-8.18},{"time":0.3333,"angle":-23.16},{"time":0.5,"angle":-18.01},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"chest":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.5,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"tail1":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":-2.42},{"time":0.3333,"angle":-26.2},{"time":0.5,"angle":-29.65},{"time":0.6666,"angle":-23.15},{"time":0.8333,"angle":-55.46},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"R_rear_thigh":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.5,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"tail2":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":-1.12},{"time":0.3333,"angle":10.48},{"time":0.5,"angle":7.89},{"time":0.8333,"angle":-10.38},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"tail3":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":8.24},{"time":0.3333,"angle":15.21},{"time":0.5,"angle":14.84},{"time":0.8333,"angle":-18.9},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"tail4":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":17.46},{"time":0.3333,"angle":22.15},{"time":0.5,"angle":22.76},{"time":0.8333,"angle":-4.37},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"tail5":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":7.4},{"time":0.3333,"angle":28.5},{"time":0.5,"angle":21.33},{"time":0.8333,"angle":-1.27},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"tail6":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":45.99},{"time":0.4,"angle":43.53},{"time":0.5,"angle":61.79},{"time":0.8333,"angle":13.28},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"R_rear_leg":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":-14.21},{"time":0.5,"angle":47.17},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"R_rear_toe3":{"rotate":[{"time":0,"angle":0},{"time":0.5,"angle":-36.06},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"R_rear_toe2":{"rotate":[{"time":0,"angle":0},{"time":0.5,"angle":-20.32},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"R_rear_toe1":{"rotate":[{"time":0,"angle":0},{"time":0.5,"angle":-18.71},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"head":{"rotate":[{"time":0,"angle":0,"curve":[0.408,1.36,0.675,1.43]},{"time":0.5,"angle":1.03},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"chin":{"rotate":[{"time":0,"angle":0,"curve":[0.416,1.15,0.494,1.27]},{"time":0.3333,"angle":-5.15},{"time":0.5,"angle":9.79},{"time":0.6666,"angle":18.94},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"L_front_thigh":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":-19.18},{"time":0.3333,"angle":-32.02},{"time":0.5,"angle":-19.62},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"R_front_thigh":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":-12.96},{"time":0.5,"angle":16.2},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"L_front_leg":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":37.77},{"time":0.5,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"L_front_toe1":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":-16.08},{"time":0.5,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"L_front_toe2":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":0.5,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1},{"time":0.5,"x":1.33,"y":1.029},{"time":1,"x":1,"y":1}]},"L_front_toe4":{"rotate":[{"time":0,"angle":0},{"time":0.5,"angle":26.51},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1},{"time":0.5,"x":1.239,"y":0.993},{"time":1,"x":1,"y":1}]},"L_front_toe3":{"rotate":[{"time":0,"angle":0},{"time":0.5,"angle":16.99},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1},{"time":0.5,"x":1.402,"y":1.007},{"time":1,"x":1,"y":1}]},"R_front_leg":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":26.07},{"time":0.5,"angle":-21.6},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1,"curve":"stepped"},{"time":0.5,"x":1,"y":1,"curve":"stepped"},{"time":1,"x":1,"y":1}]},"R_front_toe1":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":29.23},{"time":0.5,"angle":34.83},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1},{"time":0.5,"x":1.412,"y":1},{"time":1,"x":1,"y":1}]},"R_front_toe2":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":24.89},{"time":0.5,"angle":23.16},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1},{"time":0.5,"x":1.407,"y":1.057},{"time":1,"x":1,"y":1}]},"R_front_toe3":{"rotate":[{"time":0,"angle":0},{"time":0.1666,"angle":11.01},{"time":0.5,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1},{"time":0.5,"x":1.329,"y":1.181},{"time":1,"x":1,"y":1}]},"L_rear_leg":{"rotate":[{"time":0,"angle":0},{"time":0.3666,"angle":25.19},{"time":0.6666,"angle":-15.65},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0}],"scale":[{"time":0,"x":1,"y":1}]},"COG":{"rotate":[{"time":0,"angle":0,"curve":[0.456,0.2,0.422,1.06]},{"time":0.3333,"angle":23.93},{"time":0.6666,"angle":337.8,"curve":[0.41,0,0.887,0.75]},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":0,"curve":[0.33,1,0.816,1.33]},{"time":0.5,"x":0,"y":113.01,"curve":[0.396,0,0.709,2.03]},{"time":1,"x":0,"y":0}]}}}}} \ No newline at end of file +{ +"skeleton": { "hash": "9MKo2cmJTDc3IPV4B3LRJxWbl04", "spine": "3.3.07", "width": 897, "height": 716.31, "images": "./images/" }, +"bones": [ + { "name": "root", "y": -176.12 }, + { "name": "COG", "parent": "root", "y": 176.12 }, + { "name": "chest", "parent": "COG", "length": 31.24, "rotation": 161.7, "x": 52.52, "y": 15.34 }, + { "name": "L_front_thigh", "parent": "chest", "length": 67.42, "rotation": 138.94, "x": -45.58, "y": 7.92 }, + { "name": "L_front_leg", "parent": "L_front_thigh", "length": 51.57, "rotation": 43.36, "x": 67.42, "y": 0.02 }, + { "name": "L_front_toe1", "parent": "L_front_leg", "length": 51.44, "rotation": -98, "x": 45.53, "y": 2.43 }, + { "name": "L_front_toe2", "parent": "L_front_leg", "length": 61.97, "rotation": -55.26, "x": 51.57, "y": -0.12 }, + { "name": "L_front_toe3", "parent": "L_front_leg", "length": 45.65, "rotation": -11.13, "x": 54.19, "y": 0.6, "scaleX": 1.134 }, + { "name": "L_front_toe4", "parent": "L_front_leg", "length": 53.47, "rotation": 19.42, "x": 50.6, "y": 7.08, "scaleX": 1.134 }, + { "name": "back", "parent": "COG", "length": 115.37, "rotation": 151.83, "x": 16.03, "y": 27.94 }, + { "name": "R_rear_thigh", "parent": "back", "length": 123.46, "rotation": 104.87, "x": 65.31, "y": 59.89 }, + { "name": "L_rear_thigh", "parent": "R_rear_thigh", "length": 88.05, "rotation": 28.35, "x": -8.59, "y": 30.18 }, + { "name": "L_rear_leg", "parent": "L_rear_thigh", "length": 103.74, "rotation": -122.41, "x": 96.04, "y": -0.97 }, + { "name": "L_wing", "parent": "chest", "length": 301.12, "rotation": -75.51, "x": -7.24, "y": -24.65 }, + { "name": "R_front_thigh", "parent": "chest", "length": 81.63, "rotation": 67.96, "x": -10.89, "y": 28.25 }, + { "name": "R_front_leg", "parent": "R_front_thigh", "length": 66.52, "rotation": 92.7, "x": 83.04, "y": -0.3 }, + { "name": "R_front_toe1", "parent": "R_front_leg", "length": 46.65, "rotation": 8.59, "x": 70.03, "y": 5.31 }, + { "name": "R_front_toe2", "parent": "R_front_leg", "length": 53.66, "rotation": -35.02, "x": 66.52, "y": 0.33 }, + { "name": "R_front_toe3", "parent": "R_front_leg", "length": 58.38, "rotation": -74.67, "x": 62.1, "y": -0.79 }, + { "name": "R_rear_leg", "parent": "R_rear_thigh", "length": 91.06, "rotation": -129.04, "x": 123.46, "y": -0.26 }, + { "name": "R_rear_toe1", "parent": "R_rear_leg", "length": 94.99, "rotation": 141.98, "x": 90.06, "y": 2.12 }, + { "name": "R_rear_toe2", "parent": "R_rear_leg", "length": 99.29, "rotation": 125.32, "x": 89.6, "y": 1.52 }, + { "name": "R_rear_toe3", "parent": "R_rear_leg", "length": 103.45, "rotation": 112.26, "x": 91.06, "y": -0.35 }, + { "name": "neck", "parent": "COG", "length": 41.36, "rotation": 39.05, "x": 64.75, "y": 11.98 }, + { "name": "head", "parent": "neck", "length": 188.83, "rotation": 8.06, "x": 69.96, "y": 2.49 }, + { "name": "R_wing", "parent": "head", "length": 359.5, "rotation": 83.21, "x": -74.68, "y": 20.9 }, + { "name": "chin", "parent": "neck", "length": 153.15, "rotation": -69.07, "x": 64.62, "y": -6.99 }, + { "name": "tail1", "parent": "back", "length": 65.65, "rotation": 44.31, "x": 115.37, "y": -0.19 }, + { "name": "tail2", "parent": "tail1", "length": 54.5, "rotation": 12, "x": 65.65, "y": 0.22 }, + { "name": "tail3", "parent": "tail2", "length": 41.78, "rotation": 1.8, "x": 54.5, "y": 0.37 }, + { "name": "tail4", "parent": "tail3", "length": 34.19, "rotation": -1.8, "x": 41.78, "y": 0.16 }, + { "name": "tail5", "parent": "tail4", "length": 32.32, "rotation": -3.15, "x": 34.19, "y": -0.19 }, + { "name": "tail6", "parent": "tail5", "length": 80.08, "rotation": -29.55, "x": 32.32, "y": -0.23 } +], +"slots": [ + { "name": "L_rear_leg", "bone": "L_rear_leg", "attachment": "L_rear_leg" }, + { "name": "L_rear_thigh", "bone": "L_rear_thigh", "attachment": "L_rear_thigh" }, + { "name": "L_wing", "bone": "L_wing", "attachment": "L_wing01" }, + { "name": "tail6", "bone": "tail6", "attachment": "tail06" }, + { "name": "tail5", "bone": "tail5", "attachment": "tail05" }, + { "name": "tail4", "bone": "tail4", "attachment": "tail04" }, + { "name": "tail3", "bone": "tail3", "attachment": "tail03" }, + { "name": "tail2", "bone": "tail2", "attachment": "tail02" }, + { "name": "tail1", "bone": "tail1", "attachment": "tail01" }, + { "name": "back", "bone": "back", "attachment": "back" }, + { "name": "L_front_thigh", "bone": "L_front_thigh", "attachment": "L_front_thigh" }, + { "name": "L_front_leg", "bone": "L_front_leg", "attachment": "L_front_leg" }, + { "name": "L_front_toe1", "bone": "L_front_toe1", "attachment": "front_toeA" }, + { "name": "L_front_toe4", "bone": "L_front_toe4", "attachment": "front_toeB" }, + { "name": "L_front_toe3", "bone": "L_front_toe3", "attachment": "front_toeB" }, + { "name": "L_front_toe2", "bone": "L_front_toe2", "attachment": "front_toeB" }, + { "name": "chest", "bone": "chest", "attachment": "chest" }, + { "name": "R_rear_toe1", "bone": "R_rear_toe1", "attachment": "rear-toe" }, + { "name": "R_rear_toe2", "bone": "R_rear_toe2", "attachment": "rear-toe" }, + { "name": "R_rear_toe3", "bone": "R_rear_toe3", "attachment": "rear-toe" }, + { "name": "R_rear_leg", "bone": "R_rear_leg", "attachment": "R_rear_leg" }, + { "name": "R_rear_thigh", "bone": "R_rear_thigh", "attachment": "R_rear_thigh" }, + { "name": "R_front_toe1", "bone": "R_front_toe1", "attachment": "front_toeB" }, + { "name": "R_front_thigh", "bone": "R_front_thigh", "attachment": "R_front_thigh" }, + { "name": "R_front_leg", "bone": "R_front_leg", "attachment": "R_front_leg" }, + { "name": "R_front_toe2", "bone": "R_front_toe2", "attachment": "front_toeB" }, + { "name": "R_front_toe3", "bone": "R_front_toe3", "attachment": "front_toeB" }, + { "name": "chin", "bone": "chin", "attachment": "chin" }, + { "name": "R_wing", "bone": "R_wing", "attachment": "R_wing01" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "logo", "bone": "root", "attachment": "logo" } +], +"skins": { + "default": { + "L_front_leg": { + "L_front_leg": { "x": 14.68, "y": 0.48, "rotation": 15.99, "width": 84, "height": 57 } + }, + "L_front_thigh": { + "L_front_thigh": { "x": 27.66, "y": -11.58, "rotation": 58.66, "width": 84, "height": 72 } + }, + "L_front_toe1": { + "front_toeA": { "x": 31.92, "y": 0.61, "rotation": 109.55, "width": 29, "height": 50 } + }, + "L_front_toe2": { + "front_toeB": { "x": 26.83, "y": -4.94, "rotation": 109.51, "width": 56, "height": 57 } + }, + "L_front_toe3": { + "front_toeB": { "x": 18.21, "y": -7.21, "scaleX": 0.881, "scaleY": 0.94, "rotation": 99.71, "width": 56, "height": 57 } + }, + "L_front_toe4": { + "front_toeB": { "x": 23.21, "y": -11.68, "scaleX": 0.881, "rotation": 79.89, "width": 56, "height": 57 } + }, + "L_rear_leg": { + "L_rear_leg": { "x": 67.29, "y": 12.62, "rotation": -162.65, "width": 206, "height": 177 } + }, + "L_rear_thigh": { + "L_rear_thigh": { "x": 56.03, "y": 27.38, "rotation": 74.93, "width": 91, "height": 149 } + }, + "L_wing": { + "L_wing01": { "x": 129.21, "y": -45.49, "rotation": -83.7, "width": 191, "height": 256 }, + "L_wing02": { "x": 126.37, "y": -31.69, "rotation": -86.18, "width": 179, "height": 269 }, + "L_wing03": { "x": 110.26, "y": -90.89, "rotation": -86.18, "width": 186, "height": 207 }, + "L_wing04": { "x": -61.61, "y": -83.26, "rotation": -86.18, "width": 188, "height": 135 }, + "L_wing05": { "x": -90.01, "y": -78.14, "rotation": -86.18, "width": 218, "height": 213 }, + "L_wing06": { "x": -143.76, "y": -83.71, "rotation": -86.18, "width": 192, "height": 331 }, + "L_wing07": { "x": -133.04, "y": -33.89, "rotation": -86.18, "width": 159, "height": 255 }, + "L_wing08": { "x": 50.15, "y": -15.71, "rotation": -86.18, "width": 164, "height": 181 }, + "L_wing09": { "x": 85.94, "y": -11.32, "rotation": -86.18, "width": 204, "height": 167 } + }, + "R_front_leg": { + "R_front_leg": { "x": 17.79, "y": 4.22, "rotation": 37.62, "width": 101, "height": 89 } + }, + "R_front_thigh": { + "R_front_thigh": { "x": 35.28, "y": 2.11, "rotation": 130.33, "width": 108, "height": 108 } + }, + "R_front_toe1": { + "front_toeB": { "x": 24.49, "y": -2.61, "rotation": 104.18, "width": 56, "height": 57 } + }, + "R_front_toe2": { + "front_toeB": { "x": 26.39, "y": 1.16, "rotation": 104.57, "width": 56, "height": 57 } + }, + "R_front_toe3": { + "front_toeB": { "x": 30.66, "y": -0.06, "rotation": 112.29, "width": 56, "height": 57 } + }, + "R_rear_leg": { + "R_rear_leg": { "x": 60.87, "y": -5.72, "rotation": -127.66, "width": 116, "height": 100 } + }, + "R_rear_thigh": { + "R_rear_thigh": { "x": 53.25, "y": 12.58, "rotation": 103.29, "width": 91, "height": 149 } + }, + "R_rear_toe1": { + "rear-toe": { "x": 54.75, "y": -5.72, "rotation": 134.79, "width": 109, "height": 77 } + }, + "R_rear_toe2": { + "rear-toe": { "x": 57.02, "y": -7.22, "rotation": 134.42, "width": 109, "height": 77 } + }, + "R_rear_toe3": { + "rear-toe": { "x": 47.46, "y": -7.64, "rotation": 134.34, "width": 109, "height": 77 } + }, + "R_wing": { + "R_wing01": { "x": 170.08, "y": -23.67, "rotation": -130.33, "width": 219, "height": 310 }, + "R_wing02": { "x": 171.14, "y": -19.33, "rotation": -130.33, "width": 203, "height": 305 }, + "R_wing03": { "x": 166.46, "y": 29.23, "rotation": -130.33, "width": 272, "height": 247 }, + "R_wing04": { "x": 42.94, "y": 134.05, "rotation": -130.33, "width": 279, "height": 144 }, + "R_wing05": { "x": -8.83, "y": 142.59, "rotation": -130.33, "width": 251, "height": 229 }, + "R_wing06": { "x": -123.33, "y": 111.22, "rotation": -130.33, "width": 200, "height": 366 }, + "R_wing07": { "x": -40.17, "y": 118.03, "rotation": -130.33, "width": 200, "height": 263 }, + "R_wing08": { "x": 48.01, "y": 28.76, "rotation": -130.33, "width": 234, "height": 254 }, + "R_wing09": { "x": 128.1, "y": 21.12, "rotation": -130.33, "width": 248, "height": 204 } + }, + "back": { + "back": { "x": 35.84, "y": 19.99, "rotation": -151.83, "width": 190, "height": 185 } + }, + "chest": { + "chest": { "x": -14.6, "y": 24.78, "rotation": -161.7, "width": 136, "height": 122 } + }, + "chin": { + "chin": { "x": 66.55, "y": 7.32, "rotation": 30.01, "width": 214, "height": 146 } + }, + "head": { + "head": { "x": 76.68, "y": 32.21, "rotation": -47.12, "width": 296, "height": 260 } + }, + "logo": { + "logo": { "y": -176.72, "width": 897, "height": 92 } + }, + "tail1": { + "tail01": { "x": 22.59, "y": -4.5, "rotation": 163.85, "width": 120, "height": 153 } + }, + "tail2": { + "tail02": { "x": 18.11, "y": -1.75, "rotation": 151.84, "width": 95, "height": 120 } + }, + "tail3": { + "tail03": { "x": 16.94, "y": -2, "rotation": 150.04, "width": 73, "height": 92 } + }, + "tail4": { + "tail04": { "x": 15.34, "y": -2.17, "rotation": 151.84, "width": 56, "height": 71 } + }, + "tail5": { + "tail05": { "x": 15.05, "y": -3.57, "rotation": 155, "width": 52, "height": 59 } + }, + "tail6": { + "tail06": { "x": 28.02, "y": -16.83, "rotation": -175.44, "width": 95, "height": 68 } + } + } +}, +"animations": { + "flying": { + "slots": { + "L_wing": { + "attachment": [ + { "time": 0, "name": "L_wing01" }, + { "time": 0.0666, "name": "L_wing02" }, + { "time": 0.1333, "name": "L_wing03" }, + { "time": 0.2, "name": "L_wing04" }, + { "time": 0.2666, "name": "L_wing05" }, + { "time": 0.3333, "name": "L_wing06" }, + { "time": 0.4, "name": "L_wing07" }, + { "time": 0.4666, "name": "L_wing08" }, + { "time": 0.5333, "name": "L_wing09" }, + { "time": 0.6, "name": "L_wing01" }, + { "time": 0.7333, "name": "L_wing02" }, + { "time": 0.8, "name": "L_wing03" }, + { "time": 0.8333, "name": "L_wing04" }, + { "time": 0.8666, "name": "L_wing05" }, + { "time": 0.9, "name": "L_wing06" }, + { "time": 0.9333, "name": "L_wing07" }, + { "time": 0.9666, "name": "L_wing08" }, + { "time": 1, "name": "L_wing01" } + ] + }, + "R_wing": { + "attachment": [ + { "time": 0, "name": "R_wing01" }, + { "time": 0.0666, "name": "R_wing02" }, + { "time": 0.1333, "name": "R_wing03" }, + { "time": 0.2, "name": "R_wing04" }, + { "time": 0.2666, "name": "R_wing05" }, + { "time": 0.3333, "name": "R_wing06" }, + { "time": 0.4, "name": "R_wing07" }, + { "time": 0.4666, "name": "R_wing08" }, + { "time": 0.5333, "name": "R_wing09" }, + { "time": 0.6, "name": "R_wing01" }, + { "time": 0.7333, "name": "R_wing02" }, + { "time": 0.7666, "name": "R_wing02" }, + { "time": 0.8, "name": "R_wing03" }, + { "time": 0.8333, "name": "R_wing04" }, + { "time": 0.8666, "name": "R_wing05" }, + { "time": 0.9, "name": "R_wing06" }, + { "time": 0.9333, "name": "R_wing07" }, + { "time": 0.9666, "name": "R_wing08" }, + { "time": 1, "name": "R_wing01" } + ] + } + }, + "bones": { + "back": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 17.39 }, + { "time": 0.5, "angle": 0 }, + { "time": 0.8333, "angle": 7 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -8.18 }, + { "time": 0.3333, "angle": -23.16 }, + { "time": 0.5, "angle": -18.01 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "chest": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "tail1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -2.42 }, + { "time": 0.3333, "angle": -26.2 }, + { "time": 0.5, "angle": -29.65 }, + { "time": 0.6666, "angle": -23.15 }, + { "time": 0.8333, "angle": -55.46 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_rear_thigh": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "tail2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -1.12 }, + { "time": 0.3333, "angle": 10.48 }, + { "time": 0.5, "angle": 7.89 }, + { "time": 0.8333, "angle": -10.38 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "tail3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 8.24 }, + { "time": 0.3333, "angle": 15.21 }, + { "time": 0.5, "angle": 14.84 }, + { "time": 0.8333, "angle": -18.9 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "tail4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 17.46 }, + { "time": 0.3333, "angle": 22.15 }, + { "time": 0.5, "angle": 22.76 }, + { "time": 0.8333, "angle": -4.37 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "tail5": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 7.4 }, + { "time": 0.3333, "angle": 28.5 }, + { "time": 0.5, "angle": 21.33 }, + { "time": 0.8333, "angle": -1.27 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "tail6": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 45.99 }, + { "time": 0.4, "angle": 43.53 }, + { "time": 0.5, "angle": 61.79 }, + { "time": 0.8333, "angle": 13.28 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_rear_leg": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -14.21 }, + { "time": 0.5, "angle": 47.17 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_rear_toe3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": -36.06 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_rear_toe2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": -20.32 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_rear_toe1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": -18.71 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.408, 1.36, 0.675, 1.43 ] + }, + { "time": 0.5, "angle": 1.03 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "chin": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.416, 1.15, 0.494, 1.27 ] + }, + { "time": 0.3333, "angle": -5.15 }, + { "time": 0.5, "angle": 9.79 }, + { "time": 0.6666, "angle": 18.94 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "L_front_thigh": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -19.18 }, + { "time": 0.3333, "angle": -32.02 }, + { "time": 0.5, "angle": -19.62 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_front_thigh": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -12.96 }, + { "time": 0.5, "angle": 16.2 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "L_front_leg": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 37.77 }, + { "time": 0.5, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "L_front_toe1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -16.08 }, + { "time": 0.5, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "L_front_toe2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.5, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1.33, "y": 1.029 }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "L_front_toe4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": 26.51 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1.21, "y": 0.993 }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "L_front_toe3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5, "angle": 16.99 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1.354, "y": 1.007 }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_front_leg": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 26.07 }, + { "time": 0.5, "angle": -21.6 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_front_toe1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 29.23 }, + { "time": 0.5, "angle": 34.83 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1.412, "y": 1 }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_front_toe2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 24.89 }, + { "time": 0.5, "angle": 23.16 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1.407, "y": 1.057 }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "R_front_toe3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": 11.01 }, + { "time": 0.5, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1.329, "y": 1.181 }, + { "time": 1, "x": 1, "y": 1 } + ] + }, + "L_rear_leg": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.3666, "angle": 25.19 }, + { "time": 0.6666, "angle": -15.65 }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "COG": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.456, 0.2, 0.422, 1.06 ] + }, + { "time": 0.3333, "angle": 23.93 }, + { + "time": 0.6666, + "angle": 337.8, + "curve": [ 0.41, 0, 0.887, 0.75 ] + }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.33, 1, 0.816, 1.33 ] + }, + { + "time": 0.5, + "x": 0, + "y": 113.01, + "curve": [ 0.396, 0, 0.709, 2.03 ] + }, + { "time": 1, "x": 0, "y": 0 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-unity/Assets/Examples/Spine/Dragon/dragon.png.meta b/spine-unity/Assets/Examples/Spine/Dragon/dragon.png.meta index f9cb265ad..ba8fc7367 100644 --- a/spine-unity/Assets/Examples/Spine/Dragon/dragon.png.meta +++ b/spine-unity/Assets/Examples/Spine/Dragon/dragon.png.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 6bc52290ef03f2846ba38d67e2823598 -timeCreated: 1455501336 +timeCreated: 1467205225 licenseType: Free TextureImporter: fileIDToRecycleName: {} diff --git a/spine-unity/Assets/Examples/Spine/Dragon/dragon2.png.meta b/spine-unity/Assets/Examples/Spine/Dragon/dragon2.png.meta index dc6b74a26..77bf674b3 100644 --- a/spine-unity/Assets/Examples/Spine/Dragon/dragon2.png.meta +++ b/spine-unity/Assets/Examples/Spine/Dragon/dragon2.png.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 12c126994123f12468cf4c5a2684078a -timeCreated: 1455501336 +timeCreated: 1467205225 licenseType: Free TextureImporter: fileIDToRecycleName: {} diff --git a/spine-unity/Assets/Examples/Spine/Dragon/dragon_Atlas.asset b/spine-unity/Assets/Examples/Spine/Dragon/dragon_Atlas.asset index b069c892c..de8ead202 100644 Binary files a/spine-unity/Assets/Examples/Spine/Dragon/dragon_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Dragon/dragon_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Dragon/dragon_SkeletonData.asset b/spine-unity/Assets/Examples/Spine/Dragon/dragon_SkeletonData.asset index 8f43b99b9..74028988b 100644 Binary files a/spine-unity/Assets/Examples/Spine/Dragon/dragon_SkeletonData.asset and b/spine-unity/Assets/Examples/Spine/Dragon/dragon_SkeletonData.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon.mat b/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon.mat index 2c6ce3a58..eff332981 100644 Binary files a/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon.mat and b/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon2.mat b/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon2.mat index a72a50d45..a4a54511a 100644 Binary files a/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon2.mat and b/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon2.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Eyes/eyes.json b/spine-unity/Assets/Examples/Spine/Eyes/eyes.json index c77c7b2fa..77ad79d18 100644 --- a/spine-unity/Assets/Examples/Spine/Eyes/eyes.json +++ b/spine-unity/Assets/Examples/Spine/Eyes/eyes.json @@ -1 +1,36 @@ -{"skeleton":{"hash":"LxkXoqW3SPQ5weFYd4V71R86WUk","spine":"2.0.20","width":868,"height":322},"bones":[{"name":"root"},{"name":"L_Eye","parent":"root","x":-223.18,"y":2.99},{"name":"R_Eye","parent":"root","x":237.32,"y":6.4}],"slots":[{"name":"EyeWhite","bone":"root","attachment":"EyeWhite"},{"name":"R_Eye","bone":"R_Eye","attachment":"R_Eye"},{"name":"L_Eye","bone":"L_Eye","attachment":"L_Eye"},{"name":"EyeLines","bone":"root","attachment":"EyeLines"}],"skins":{"default":{"EyeLines":{"EyeLines":{"y":28,"width":868,"height":322}},"EyeWhite":{"EyeWhite":{"x":3,"y":2,"width":700,"height":148}},"L_Eye":{"L_Eye":{"x":-0.82,"y":2,"width":148,"height":148}},"R_Eye":{"R_Eye":{"x":0.67,"y":-1.4,"width":148,"height":148}}}}} \ No newline at end of file +{ +"skeleton": { + "hash": "4JK7uGWbzO7qeQSyyuOyKLXQ5oI", + "spine": "3.3.07", + "width": 868, + "height": 322, + "images": "C:\\Users\\John Eric\\Desktop\\old exports" +}, +"bones": [ + { "name": "root" }, + { "name": "L_Eye", "parent": "root", "x": -223.18, "y": 2.99 }, + { "name": "R_Eye", "parent": "root", "x": 237.32, "y": 6.4 } +], +"slots": [ + { "name": "EyeWhite", "bone": "root", "attachment": "EyeWhite" }, + { "name": "R_Eye", "bone": "R_Eye", "attachment": "R_Eye" }, + { "name": "L_Eye", "bone": "L_Eye", "attachment": "L_Eye" }, + { "name": "EyeLines", "bone": "root", "attachment": "EyeLines" } +], +"skins": { + "default": { + "EyeLines": { + "EyeLines": { "y": 28, "width": 868, "height": 322 } + }, + "EyeWhite": { + "EyeWhite": { "x": 3, "y": 2, "width": 700, "height": 148 } + }, + "L_Eye": { + "L_Eye": { "x": -0.82, "y": 2, "width": 148, "height": 148 } + }, + "R_Eye": { + "R_Eye": { "x": 0.67, "y": -1.4, "width": 148, "height": 148 } + } + } +} +} \ No newline at end of file diff --git a/spine-unity/Assets/Examples/Spine/Eyes/eyes.png.meta b/spine-unity/Assets/Examples/Spine/Eyes/eyes.png.meta index fe8202451..83f497ebb 100644 --- a/spine-unity/Assets/Examples/Spine/Eyes/eyes.png.meta +++ b/spine-unity/Assets/Examples/Spine/Eyes/eyes.png.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 49441e5a1682e564694545bd9b509785 -timeCreated: 1455501336 +timeCreated: 1467205225 licenseType: Free TextureImporter: fileIDToRecycleName: {} diff --git a/spine-unity/Assets/Examples/Spine/Eyes/eyes_Atlas.asset b/spine-unity/Assets/Examples/Spine/Eyes/eyes_Atlas.asset index c8af918f3..ca81907ba 100644 Binary files a/spine-unity/Assets/Examples/Spine/Eyes/eyes_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Eyes/eyes_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Eyes/eyes_Material.mat b/spine-unity/Assets/Examples/Spine/Eyes/eyes_Material.mat index 171e3d9c2..fe0d105d8 100644 Binary files a/spine-unity/Assets/Examples/Spine/Eyes/eyes_Material.mat and b/spine-unity/Assets/Examples/Spine/Eyes/eyes_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Eyes/eyes_SkeletonData.asset b/spine-unity/Assets/Examples/Spine/Eyes/eyes_SkeletonData.asset index 77a24614b..9eae83c9c 100644 Binary files a/spine-unity/Assets/Examples/Spine/Eyes/eyes_SkeletonData.asset and b/spine-unity/Assets/Examples/Spine/Eyes/eyes_SkeletonData.asset differ diff --git a/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment.png.meta b/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment.png.meta index b004dc955..281448493 100644 --- a/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment.png.meta +++ b/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment.png.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: ddb89f63d0296cf4f8572b0448bb6b30 -timeCreated: 1455501337 +timeCreated: 1467205225 licenseType: Free TextureImporter: fileIDToRecycleName: {} diff --git a/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Atlas.asset b/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Atlas.asset index 349de63b3..08a155189 100644 Binary files a/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Atlas.asset and b/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Material.mat b/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Material.mat index f7c147560..6616e58c3 100644 Binary files a/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Material.mat and b/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White.png.meta b/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White.png.meta index 1790b7c3a..4da1dd337 100644 --- a/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White.png.meta +++ b/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White.png.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 57b57f94df266f94ea0981915a4472e1 -timeCreated: 1455501336 +timeCreated: 1467205225 licenseType: Free TextureImporter: fileIDToRecycleName: {} diff --git a/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Atlas.asset b/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Atlas.asset index 63f6b3838..90776f83d 100644 Binary files a/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Atlas.asset and b/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Material.mat b/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Material.mat index cf035f168..9dd8a7a3f 100644 Binary files a/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Material.mat and b/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/FootSoldier/FootSoldier.json b/spine-unity/Assets/Examples/Spine/FootSoldier/FootSoldier.json index 75e7be0bb..51e6d7e0c 100644 --- a/spine-unity/Assets/Examples/Spine/FootSoldier/FootSoldier.json +++ b/spine-unity/Assets/Examples/Spine/FootSoldier/FootSoldier.json @@ -1,18 +1,18 @@ { -"skeleton": { "hash": "uZfvh80BNvvngM3EGMfAkHebg00", "spine": "2.1.08", "width": 147.68, "height": 268.92, "images": "./images/" }, +"skeleton": { "hash": "Nxia9637znam+9FXwv6fILb3hpo", "spine": "3.3.07", "width": 0, "height": 0, "images": "./images/" }, "bones": [ { "name": "Root" }, { "name": "Hip", "parent": "Root", "x": -0.93, "y": 73.4 }, - { "name": "Body", "parent": "Hip", "length": 60.98, "x": 2.46, "y": -7.69, "rotation": 89.52 }, - { "name": "Leg", "parent": "Hip", "length": 31.39, "x": -20.32, "y": -13.85, "rotation": -105.82 }, - { "name": "Leg2", "parent": "Hip", "length": 31.09, "x": 22.48, "y": -12.01, "rotation": -74.17 }, - { "name": "Arm", "parent": "Body", "length": 51.63, "x": 49.91, "y": 37.35, "rotation": 166.67 }, - { "name": "Arm2", "parent": "Body", "length": 52.61, "x": 53.81, "y": -28.52, "rotation": -157.17 }, - { "name": "Feet", "parent": "Leg", "length": 15.4, "x": 39.56, "y": 1.59, "rotation": 14.56 }, - { "name": "Feet2", "parent": "Leg2", "length": 12.32, "x": 41.33, "y": 0.12, "rotation": -17.19 }, - { "name": "Head", "parent": "Body", "length": 65.29, "x": 73.6, "y": 1.09, "rotation": -88.23 }, - { "name": "Shield", "parent": "Arm", "x": 45.01, "y": -2.1, "rotation": 123.56 }, - { "name": "Weapon", "parent": "Arm2", "length": 137.65, "x": 48.2, "y": 12.78, "rotation": 92.5 } + { "name": "Body", "parent": "Hip", "length": 60.98, "rotation": 89.52, "x": 2.46, "y": -7.69 }, + { "name": "Arm", "parent": "Body", "length": 51.63, "rotation": 166.67, "x": 49.91, "y": 37.34 }, + { "name": "Arm2", "parent": "Body", "length": 52.61, "rotation": -157.17, "x": 53.81, "y": -28.52 }, + { "name": "Leg", "parent": "Hip", "length": 31.39, "rotation": -105.82, "x": -20.32, "y": -13.85 }, + { "name": "Feet", "parent": "Leg", "length": 15.4, "rotation": 14.56, "x": 39.56, "y": 1.59 }, + { "name": "Leg2", "parent": "Hip", "length": 31.09, "rotation": -74.17, "x": 22.48, "y": -12.01 }, + { "name": "Feet2", "parent": "Leg2", "length": 12.32, "rotation": -17.19, "x": 41.33, "y": 0.12 }, + { "name": "Head", "parent": "Body", "length": 65.29, "rotation": -88.23, "x": 73.6, "y": 1.09 }, + { "name": "Shield", "parent": "Arm", "rotation": 123.56, "x": 45.01, "y": -2.09 }, + { "name": "Weapon", "parent": "Arm2", "length": 137.64, "rotation": 92.5, "x": 48.2, "y": 12.78 } ], "slots": [ { "name": "Arm2", "bone": "Arm2", "attachment": "Arm2" }, @@ -61,7 +61,7 @@ "Leg": { "name": "leg", "path": "White/leg", "x": 16.86, "y": -4.3, "rotation": 104.82, "width": 48, "height": 55 } }, "Leg2": { - "Leg2": { "name": "leg 2", "path": "White/leg 2", "x": 16.44, "y": -2.11, "rotation": 74.17, "width": 50, "height": 58 } + "Leg2": { "name": "leg 2", "path": "White/leg 2", "x": 16.44, "y": -2.1, "rotation": 74.17, "width": 50, "height": 58 } }, "Mouth": { "Closed": { "path": "White/mouth", "x": 10.96, "y": 3.69, "rotation": -1.29, "width": 28, "height": 21 } @@ -239,11 +239,11 @@ "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.3333, "x": 4.5, "y": -0.72 }, - { "time": 0.4666, "x": -1.04, "y": -2.35, "curve": "stepped" }, + { "time": 0.4666, "x": -1.04, "y": -2.34, "curve": "stepped" }, { "time": 0.6, "x": -1.04, - "y": -2.35, + "y": -2.34, "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.8333, "x": 0, "y": 0 } @@ -345,7 +345,7 @@ "translate": [ { "time": 0, "x": 0, "y": 0 }, { "time": 0.2, "x": -50.02, "y": -6.59 }, - { "time": 0.3333, "x": -83.36, "y": -37.67 } + { "time": 0.3333, "x": -83.36, "y": -37.66 } ] }, "Body": { @@ -491,7 +491,7 @@ "y": 0, "curve": [ 0.25, 0, 0.758, 0.67 ] }, - { "time": 0.3333, "x": -4.47, "y": 3.29 } + { "time": 0.3333, "x": -4.46, "y": 3.29 } ] }, "Leg2": { @@ -686,7 +686,7 @@ }, { "time": 0.3666, - "angle": -2.34, + "angle": -2.33, "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.8666, "angle": 0 }, @@ -1518,17 +1518,17 @@ { "time": 0, "x": -0.84, - "y": -4.45, + "y": -4.44, "curve": [ 0.25, 0, 0.75, 1 ] }, - { "time": 0.2, "x": -1.03, "y": -4.7, "curve": "stepped" }, + { "time": 0.2, "x": -1.03, "y": -4.69, "curve": "stepped" }, { "time": 0.5333, "x": -1.03, - "y": -4.7, + "y": -4.69, "curve": [ 0.25, 0, 0.75, 1 ] }, - { "time": 0.6666, "x": -0.84, "y": -4.45 } + { "time": 0.6666, "x": -0.84, "y": -4.44 } ] }, "Feet2": { diff --git a/spine-unity/Assets/Examples/Spine/FootSoldier/FootSoldier_SkeletonData.asset b/spine-unity/Assets/Examples/Spine/FootSoldier/FootSoldier_SkeletonData.asset index 2328d3451..ae6627d97 100644 Binary files a/spine-unity/Assets/Examples/Spine/FootSoldier/FootSoldier_SkeletonData.asset and b/spine-unity/Assets/Examples/Spine/FootSoldier/FootSoldier_SkeletonData.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Gauge/Gauge.json b/spine-unity/Assets/Examples/Spine/Gauge/Gauge.json index cad689354..8d2a118dc 100644 --- a/spine-unity/Assets/Examples/Spine/Gauge/Gauge.json +++ b/spine-unity/Assets/Examples/Spine/Gauge/Gauge.json @@ -1,5 +1,5 @@ { -"skeleton": { "hash": "IKLl/62j+Y1bsQ8rdHoVK9PDip8", "spine": "2.1.27", "width": 250, "height": 60, "images": "./images/" }, +"skeleton": { "hash": "C69Pg+RG3DYyHmt9bOPYVrESJBQ", "spine": "3.3.07", "width": 250, "height": 60, "images": "./images/" }, "bones": [ { "name": "root" }, { "name": "Bar", "parent": "root", "x": -112.29 } diff --git a/spine-unity/Assets/Examples/Spine/Gauge/Gauge.png.meta b/spine-unity/Assets/Examples/Spine/Gauge/Gauge.png.meta index e11ad370e..ed1534eb1 100644 --- a/spine-unity/Assets/Examples/Spine/Gauge/Gauge.png.meta +++ b/spine-unity/Assets/Examples/Spine/Gauge/Gauge.png.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: a11301aad15ed6b4995485a02a81b132 -timeCreated: 1455501336 +timeCreated: 1467205225 licenseType: Free TextureImporter: fileIDToRecycleName: {} diff --git a/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Atlas.asset b/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Atlas.asset index ae5d3ceab..9c786b0f6 100644 Binary files a/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Material.mat b/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Material.mat index ed5295511..90e6e82a8 100644 Binary files a/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Material.mat and b/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Gauge/Gauge_SkeletonData.asset b/spine-unity/Assets/Examples/Spine/Gauge/Gauge_SkeletonData.asset index 089e29b45..0db61a8dd 100644 Binary files a/spine-unity/Assets/Examples/Spine/Gauge/Gauge_SkeletonData.asset and b/spine-unity/Assets/Examples/Spine/Gauge/Gauge_SkeletonData.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.atlas.txt.meta b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.atlas.txt.meta deleted file mode 100644 index c785f9ff7..000000000 --- a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.atlas.txt.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 3586e5ccd2041c24eb20eb4764168abd -TextScriptImporter: - userData: diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.json b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.json deleted file mode 100644 index e286f326b..000000000 --- a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.json +++ /dev/null @@ -1 +0,0 @@ -{"skeleton":{"hash":"z+KSUKNoVFCKmcUxpaNi+3NFJa8","spine":"Dev","width":266.89,"height":349.61},"bones":[{"name":"root"},{"name":"hip","parent":"root","x":0.64,"y":114.41},{"name":"left upper leg","parent":"hip","length":50.39,"x":14.45,"y":2.81,"rotation":-89.09},{"name":"pelvis","parent":"hip","x":1.41,"y":-6.57},{"name":"right upper leg","parent":"hip","length":42.45,"x":-20.07,"y":-6.83,"rotation":-97.49},{"name":"torso","parent":"hip","length":85.82,"x":-6.42,"y":1.97,"rotation":93.92},{"name":"left lower leg","parent":"left upper leg","length":49.89,"x":56.34,"y":0.98,"rotation":-16.65},{"name":"left shoulder","parent":"torso","length":35.43,"x":74.04,"y":-20.38,"rotation":-156.96},{"name":"neck","parent":"torso","length":18.38,"x":81.67,"y":-6.34,"rotation":-1.51},{"name":"right lower leg","parent":"right upper leg","length":58.52,"x":42.99,"y":-0.61,"rotation":-14.34},{"name":"right shoulder","parent":"torso","length":37.24,"x":76.02,"y":18.14,"rotation":133.88},{"name":"head","parent":"neck","length":68.28,"x":20.93,"y":11.59,"rotation":-13.92},{"name":"left arm","parent":"left shoulder","length":35.62,"x":37.85,"y":-2.34,"rotation":28.16},{"name":"left foot","parent":"left lower leg","length":46.5,"x":58.94,"y":-7.61,"rotation":102.43},{"name":"right arm","parent":"right shoulder","length":36.74,"x":37.6,"y":0.31,"rotation":36.32},{"name":"right foot","parent":"right lower leg","length":45.45,"x":64.88,"y":0.04,"rotation":110.3},{"name":"left hand","parent":"left arm","length":11.52,"x":35.62,"y":0.07,"rotation":2.7},{"name":"right hand","parent":"right arm","length":15.32,"x":36.9,"y":0.34,"rotation":2.35},{"name":"spear1","parent":"left hand","length":65.06,"x":0.48,"y":17.03,"rotation":102.43},{"name":"spear2","parent":"spear1","length":61.41,"x":65.05,"y":0.04,"rotation":0.9},{"name":"spear3","parent":"spear2","length":76.79,"x":61.88,"y":0.57,"rotation":-0.9}],"slots":[{"name":"left shoulder","bone":"left shoulder","attachment":"left shoulder"},{"name":"left arm","bone":"left arm","attachment":"left arm"},{"name":"left hand item","bone":"left hand","attachment":"spear"},{"name":"left hand","bone":"left hand","attachment":"left hand"},{"name":"left foot","bone":"left foot","attachment":"left foot"},{"name":"left lower leg","bone":"left lower leg","attachment":"left lower leg"},{"name":"left upper leg","bone":"left upper leg","attachment":"left upper leg"},{"name":"neck","bone":"neck","attachment":"neck"},{"name":"torso","bone":"torso","attachment":"torso"},{"name":"pelvis","bone":"pelvis","attachment":"pelvis"},{"name":"right foot","bone":"right foot","attachment":"right foot"},{"name":"right lower leg","bone":"right lower leg","attachment":"right lower leg"},{"name":"undie straps","bone":"pelvis","attachment":"undie straps"},{"name":"undies","bone":"pelvis","attachment":"undies"},{"name":"right upper leg","bone":"right upper leg","attachment":"right upper leg"},{"name":"head","bone":"head","attachment":"head"},{"name":"eyes","bone":"head"},{"name":"right shoulder","bone":"right shoulder","attachment":"right shoulder"},{"name":"right arm","bone":"right arm","attachment":"right arm"},{"name":"right hand thumb","bone":"right hand","attachment":"right hand thumb"},{"name":"right hand item","bone":"right hand","attachment":"dagger"},{"name":"right hand","bone":"right hand","attachment":"right hand"},{"name":"right hand item 2","bone":"right hand","attachment":"shield"}],"skins":{"default":{"left hand item":{"dagger":{"x":7.88,"y":-23.45,"rotation":10.47,"width":26,"height":108},"spear":{"type":"skinnedmesh","uvs":[1,0.11236,0.77096,0.13278,0.76608,0.21781,0.75642,0.386,0.74723,0.54607,0.72117,1,0.28838,1,0.24208,0.54327,0.22589,0.38361,0.2089,0.21605,0.20043,0.13242,0,0.11519,0.4527,0,0.58399,0],"triangles":[5,6,4,6,7,4,4,7,3,2,9,1,9,10,1,10,12,1,12,13,1,1,13,0,10,11,12,3,8,2,8,9,2,7,8,3],"vertices":[1,20,38.54,-10.88,1,1,20,30.97,-5.93,1,2,19,61.48,-5.58,0.5116,20,-0.31,-6.16,0.48839,2,18,64.73,-5.03,0.50272,19,-0.4,-5.06,0.49728,1,16,4.56,23.91,1,1,16,41.7,-138.95,1,1,16,32.42,-141.1,1,1,16,-6.49,22.4,1,2,18,65.48,6.64,0.50272,19,0.53,6.59,0.49728,2,19,62.18,6.66,0.5116,20,0.2,6.09,0.48839,1,20,30.96,6.61,1,1,20,37.26,11.09,1,1,20,79.75,1.59,1,1,20,79.78,-1.29,1],"hull":14}},"right hand item":{"dagger":{"type":"mesh","uvs":[0.78091,0.38453,1,0.38405,1,0.44881,0.73953,0.4687,0.74641,0.81344,0.34022,1,0.15434,1,0.11303,0.78858,0.23007,0.47367,0,0.45047,0,0.38621,0.22367,0.38573,0.24384,0,1,0],"triangles":[0,12,13,11,12,0,0,1,2,9,10,11,3,11,0,3,0,2,8,11,3,9,11,8,5,6,7,4,5,8,4,8,3,5,7,8],"vertices":[15.49,-12.82,21.13,-13.57,20.16,-20.49,13.15,-21.67,8.13,-58.56,-5.13,-77.04,-9.92,-76.36,-7.79,-53.6,-0.03,-20.36,-5.6,-17.04,-4.63,-10.17,1.12,-10.93,7.46,30.24,26.93,27.49],"hull":14}},"right hand item 2":{"shield":{"rotation":93.49,"width":70,"height":72}}},"goblin":{"eyes":{"eyes closed":{"name":"goblin/eyes-closed","x":29.19,"y":-24.89,"rotation":-88.92,"width":34,"height":12}},"head":{"head":{"name":"goblin/head","type":"mesh","uvs":[0,0.60494,0.14172,0.5145,0.24218,0.55229,0.32667,0.67806,0.37969,0.79352,0.53505,0.93014,0.86056,1,0.94071,0.94169,0.92098,0.69923,0.9888,0.65497,0.99003,0.51643,0.89632,0.43561,0.94487,0.41916,1,0.39713,1,0.2836,0.94017,0.27027,0.87906,0.25666,0.80754,0.16044,0.66698,0.01997,0.4734,0.01805,0.29215,0.19893,0.25392,0.31823,0.09117,0.324,0,0.44331,0.43271,0.69153,0.466,0.47794,0.35996,0.31246,0.73473,0.68593,0.72215,0.57425,0.88179,0.5583,0.80267,0.51015],"triangles":[5,27,6,7,27,8,7,6,27,4,24,5,5,24,27,4,3,24,27,29,8,8,29,9,24,28,27,24,25,28,24,3,25,29,28,30,29,27,28,25,2,26,25,3,2,9,29,10,0,23,1,28,25,30,29,11,10,29,30,11,2,21,26,2,1,21,23,22,1,1,22,21,30,16,11,30,17,16,30,25,17,17,26,18,18,26,19,26,17,25,11,15,12,11,16,15,12,15,13,15,14,13,21,20,26,26,20,19],"vertices":[14.56,50.42,23.12,35.47,17.46,26.36,11.57,16.86,3.74,11.71,-5.89,-3.91,-11.83,-37.23,-8.31,-45.63,7.75,-44.24,10.39,-51.33,19.52,-51.82,25.21,-43.15,26.12,-47.43,27.35,-53.16,34.84,-53.46,35.96,-47.33,37.11,-41.08,43.75,-33.97,53.58,-19.87,54.5,0.03,43.31,19.16,35.6,23.41,35.89,40.17,28.39,49.87,10.25,5.99,24.2,2,35.55,12.48,9.39,-25.1,16.8,-24.31,17.2,-40.65,20.68,-33.02],"hull":24}},"left arm":{"left arm":{"name":"goblin/left-arm","type":"mesh","uvs":[0.68992,0.29284,1,0.46364,1,0.74643,0.84089,1,0.66344,1,0.33765,0.64284,0,0.44124,0,0,0.34295,0],"triangles":[3,4,2,4,5,2,5,0,2,0,1,2,0,5,8,5,6,8,6,7,8],"vertices":[18.6,8.81,32.19,10.31,38.02,1.62,38.08,-9.63,32.31,-13.49,14.37,-9.62,-0.75,-10.78,-9.84,2.77,1.29,10.25],"hull":9}},"left foot":{"left foot":{"name":"goblin/left-foot","type":"mesh","uvs":[0.15733,0.31873,0.08195,0.78502,0.15884,0.99366,0.41633,0.96804,0.68822,0.97636,1,0.96388,0.99385,0.73501,0.85294,0.51862,0.61479,0.31056,0.46991,0,0.48032,0.75604,0.75994,0.77706],"triangles":[0,9,8,10,0,8,10,8,7,11,10,7,11,7,6,1,0,10,11,6,5,3,1,10,4,10,11,4,11,5,3,10,4,2,1,3],"vertices":[2.28,13.07,-1.76,-1.64,3.59,-7.8,20.25,-6.04,37.91,-5.27,58.12,-3.71,57.31,3.34,47.78,9.51,31.95,15.05,21.99,24.11,24.03,0.75,42.21,1.16],"hull":10}},"left hand":{"left hand":{"name":"goblin/left-hand","type":"mesh","uvs":[0.518,0.12578,1,0.16285,0.99788,0.50578,0.69745,1,0.37445,1,0,0.80051,0,0.42792,0.17601,0,0.43567,0],"triangles":[2,0,1,0,5,6,6,7,0,0,7,8,3,4,0,4,5,0,2,3,0],"vertices":[-3.11,15.42,10.83,22.27,15.5,14.55,18.35,-8.96,9.48,-14.32,-4.58,-14.3,-11.63,-2.63,-14.89,13.68,-7.75,17.99],"hull":9}},"left lower leg":{"left lower leg":{"name":"goblin/left-lower-leg","type":"mesh","uvs":[0.95508,0.20749,0.81927,0.65213,0.94754,0.77308,0.67842,0.97346,0.46463,1,0.26845,1,0.04963,0.90706,0.2106,0.60115,0.07478,0.40195,0.18545,0,0.28857,0],"triangles":[10,8,9,1,7,10,7,8,10,0,1,10,1,4,7,3,1,2,5,6,7,7,4,5,1,3,4],"vertices":[-0.19,6.82,30.97,10.96,37.97,17.33,53.88,12.6,57.58,6.31,59.34,0.08,55.04,-8.63,32.99,-9.33,20.79,-17.43,-7.27,-21.56,-8.19,-18.29],"hull":11}},"left shoulder":{"left shoulder":{"name":"goblin/left-shoulder","type":"mesh","uvs":[0.7377,0.40692,1,0.75237,1,1,0.62046,1,0.26184,0.56601,0,0.29783,0,0,0.44115,0],"triangles":[3,1,2,3,0,1,3,4,0,4,7,0,4,5,7,5,6,7],"vertices":[15.18,5.74,32.17,5.32,41.79,0.21,36.63,-9.5,14.88,-9.72,0.9,-10.89,-10.66,-4.74,-4.66,6.54],"hull":8}},"left upper leg":{"left upper leg":{"name":"goblin/left-upper-leg","type":"mesh","uvs":[1,0.12167,1,0.54873,0.91067,0.78907,0.76567,1,0.3087,0.9579,0,0.68777,0,0.219,0.51961,0,0.87552,0],"triangles":[7,8,0,5,6,7,0,1,7,4,5,7,1,4,7,2,4,1,3,4,2],"vertices":[2.33,13.06,33.5,12.57,51,9.34,66.32,4.31,63,-10.71,43.13,-20.58,8.91,-20.04,-6.79,-2.64,-6.61,9.1],"hull":9}},"neck":{"neck":{"name":"goblin/neck","type":"mesh","uvs":[0.81967,0.27365,0.92101,0.82048,0.47134,1,0.15679,0.9354,0,0.7556,0.19268,0.51833,0.15468,0.35706,0,0.21989,0.13568,0,0.68878,0,0.70145,0.53872],"triangles":[3,5,2,2,10,1,2,5,10,3,4,5,10,0,1,0,10,6,10,5,6,7,8,6,6,9,0,6,8,9],"vertices":[18.62,-11.65,-3.98,-13.85,-10.28,2.76,-6.91,13.89,0.8,19.05,10.06,11.51,16.74,12.45,22.71,17.64,31.4,12.19,30.12,-7.67,8.05,-6.71],"hull":10}},"pelvis":{"pelvis":{"name":"goblin/pelvis","type":"mesh","uvs":[1,1,0,1,0,0,1,0],"triangles":[1,2,3,1,3,0],"vertices":[25.38,-20.73,-36.61,-20.73,-36.61,22.26,25.38,22.26],"hull":4}},"right arm":{"right arm":{"name":"goblin/right-arm","type":"mesh","uvs":[1,0.09223,1,0.8501,0.72058,1,0.24384,1,0,0.86558,0.20822,0.10919,0.50903,0,0.85342,0],"triangles":[1,2,6,6,2,5,1,6,0,4,5,3,2,3,5,6,7,0],"vertices":[-4.75,8.89,33.03,11.74,40.99,5.89,41.81,-5.03,35.53,-11.13,-2.53,-9.2,-8.5,-2.71,-9.09,5.18],"hull":8}},"right foot":{"right foot":{"name":"goblin/right-foot","type":"mesh","uvs":[0.40851,0.0047,0.59087,0.33404,0.75959,0.48311,0.88907,0.59751,0.97532,0.89391,0.90385,1,0.6722,1,0.38633,1,0.08074,1,0,0.88921,0,0.65984,0,0.46577,0.0906,0.0988,0.305,0,0.47461,0.71257,0.715,0.74681],"triangles":[1,10,11,1,13,0,14,1,2,1,12,13,12,1,11,14,10,1,15,14,2,15,2,3,9,10,14,15,3,4,7,8,9,14,7,9,6,14,15,5,6,15,7,14,6,4,5,15],"vertices":[17.36,25.99,29.13,15.44,39.89,10.8,48.14,7.24,53.84,-2.38,49.43,-6,34.84,-6.39,16.84,-6.87,-2.4,-7.38,-7.58,-3.86,-7.78,3.7,-7.95,10.1,-2.57,22.36,10.84,25.97,22.14,2.75,37.31,2.03],"hull":14}},"right hand":{"right hand":{"name":"goblin/right-hand","type":"mesh","uvs":[0.17957,0,0,0.44772,0,0.79734,0.20057,0.94264,0.55057,1,0.8539,1,0.89823,0.82004,0.8259,0.74285,0.84223,0.49993,0.96356,0.34102,0.66023,0],"triangles":[8,10,9,0,10,1,8,2,1,8,1,10,7,3,8,3,2,8,4,3,7,5,7,6,4,7,5],"vertices":[-10.82,-9.45,5.95,-15.34,18.88,-14.9,24,-7.5,25.69,5.16,25.31,16.07,18.61,17.44,15.84,14.74,6.84,15.02,0.81,19.18,-11.41,7.83],"hull":11}},"right hand thumb":{"right hand thumb":{"name":"goblin/right-hand","type":"mesh","uvs":[0.88538,0.22262,0.76167,0.3594,0.75088,0.78308,0.95326,0.84981,1,0.60302],"triangles":[1,0,4,2,1,4,3,2,4],"vertices":[-2.82,15.97,2.4,11.71,18.08,11.9,20.27,19.27,11.09,20.62],"hull":5}},"right lower leg":{"right lower leg":{"name":"goblin/right-lower-leg","type":"mesh","uvs":[1,0.27261,0.81312,0.52592,0.79587,0.71795,0.95544,0.80988,0.85193,0.95493,0.47241,1,0.14033,1,0,0.8773,0.14896,0.67914,0.1619,0.30325,0.60611,0],"triangles":[1,10,0,9,10,1,8,9,1,2,8,1,4,2,3,6,7,8,5,6,8,2,5,8,4,5,2],"vertices":[6.26,8.46,23.32,8.04,37.1,12.89,41.45,20.82,53.07,21.46,61.33,10.06,65.77,-1.03,58.99,-9.19,43.02,-9.81,16.33,-20,-12.79,-9.26],"hull":11}},"right shoulder":{"right shoulder":{"name":"goblin/right-shoulder","type":"mesh","uvs":[0.62008,0.03708,0.92131,0.09048,1,0.38319,0.72049,0.6937,0.31656,1,0,1,0,0.75106,0.28233,0.49988],"triangles":[4,6,7,4,7,3,4,5,6,7,0,3,2,0,1,2,3,0],"vertices":[-3.17,-11.05,-9,-0.57,-1.01,10.33,16.69,11.17,37.41,8.2,45.45,-1.16,36.95,-8.46,21.2,-7.47],"hull":8}},"right upper leg":{"right upper leg":{"name":"goblin/right-upper-leg","type":"mesh","uvs":[0.27018,0,0.11618,0.18177,0,0.70688,0,0.89577,0.26668,1,0.48718,1,0.67618,0.83532,1,0.5161,1,0.25543,0.74618,0.0571],"triangles":[9,8,7,9,1,0,6,9,7,6,1,9,2,1,6,4,3,2,6,4,2,5,4,6],"vertices":[-9.85,-10.37,2.17,-14.07,35.49,-13.66,47.29,-12.11,52.61,-2.26,51.63,5.16,40.51,10.18,19.13,18.47,2.85,16.32,-8.4,6.14],"hull":10}},"torso":{"torso":{"name":"goblin/torso","type":"mesh","uvs":[0,0.33287,0.15945,0.46488,0.15761,0.60314,0.15502,0.79806,0.32807,0.93478,0.6875,1,0.80731,1,1,0.77763,1,0.66147,1,0.56703,0.93207,0.4771,0.86944,0.39416,0.83837,0.226,0.68085,0,0.14836,0,0,0.07199,0.78734,0.86249,0.43679,0.79649,0.76738,0.61733,0.44345,0.58747,0.54329,0.38316,0.77692,0.73446,0.66478,0.51012],"triangles":[5,16,6,6,16,7,4,17,5,5,17,16,4,3,17,17,21,16,16,21,7,3,2,17,21,19,18,21,17,19,17,2,19,21,8,7,21,18,8,18,9,8,19,22,18,18,10,9,18,22,10,2,1,19,19,20,22,19,1,20,22,11,10,22,20,11,20,1,14,20,12,11,1,0,14,20,13,12,20,14,13,0,15,14],"vertices":[56.93,27.95,43.37,18.23,30.16,19.5,11.53,21.28,-2.55,10.69,-10.89,-13.12,-11.59,-21.23,8.54,-36.12,19.65,-37.08,28.68,-37.86,37.68,-34,45.98,-30.44,56.4,-29.07,84.78,-20.92,87.9,15.15,81.88,25.79,1.67,-21.01,10.03,2.18,25.23,-18.25,29.98,0,48.54,-8.39,13.98,-21.36,35.9,-15.6],"hull":16}},"undie straps":{"undie straps":{"name":"goblin/undie-straps","type":"mesh","uvs":[0.36097,0.44959,0.66297,0.60591,1,0.19486,1,0.57117,0.75897,1,0.38697,1,0,0.26433,0,0,0.12497,0],"triangles":[6,7,8,6,8,0,3,1,2,5,0,1,6,0,5,4,1,3,5,1,4],"vertices":[-10.56,12.87,6.53,9.9,25.62,17.71,25.62,10.56,11.97,2.41,-9.09,2.41,-31,16.39,-31,21.41,-23.92,21.41],"hull":9}},"undies":{"undies":{"name":"goblin/undies","type":"mesh","uvs":[0,0.32029,0.14893,0.59457,0.22437,1,0.35909,1,0.50998,1,0.79559,0.58453,0.9842,0.28015,1,0.00588,0.46957,0.17646,0,0.03933,0.48843,0.59122,0.48114,0.43099],"triangles":[6,8,7,0,9,8,11,8,6,0,8,11,5,11,6,10,11,5,1,0,11,1,11,10,3,2,1,10,3,1,4,10,5,3,10,4],"vertices":[-13.22,5.56,-8,-2.47,-5.49,-14.27,-0.64,-14.36,4.78,-14.45,15.27,-2.59,22.22,6.11,22.92,14.05,3.75,9.44,-13.08,13.71,4.21,-2.59,4.03,2.05],"hull":10}}},"goblingirl":{"eyes":{"eyes closed":{"name":"goblingirl/eyes-closed","x":28,"y":-25.54,"rotation":-87.04,"width":37,"height":21}},"head":{"head":{"name":"goblingirl/head","x":27.71,"y":-4.32,"rotation":-85.58,"width":103,"height":81}},"left arm":{"left arm":{"name":"goblingirl/left-arm","x":19.64,"y":-2.42,"rotation":33.05,"width":37,"height":35}},"left foot":{"left foot":{"name":"goblingirl/left-foot","x":25.17,"y":7.92,"rotation":3.32,"width":65,"height":31}},"left hand":{"left hand":{"name":"goblingirl/left-hand","x":4.34,"y":2.39,"scaleX":0.896,"scaleY":0.896,"rotation":30.34,"width":35,"height":40}},"left lower leg":{"left lower leg":{"name":"goblingirl/left-lower-leg","x":25.02,"y":-0.6,"rotation":105.75,"width":33,"height":70}},"left shoulder":{"left shoulder":{"name":"goblingirl/left-shoulder","x":19.8,"y":-0.42,"rotation":61.21,"width":28,"height":46}},"left upper leg":{"left upper leg":{"name":"goblingirl/left-upper-leg","x":30.21,"y":-2.95,"rotation":89.09,"width":33,"height":70}},"neck":{"neck":{"name":"goblingirl/neck","x":6.16,"y":-3.14,"rotation":-98.86,"width":35,"height":41}},"pelvis":{"pelvis":{"name":"goblingirl/pelvis","x":-3.87,"y":3.18,"width":62,"height":43}},"right arm":{"right arm":{"name":"goblingirl/right-arm","x":16.85,"y":-0.66,"rotation":93.52,"width":28,"height":50}},"right foot":{"right foot":{"name":"goblingirl/right-foot","x":23.46,"y":9.66,"rotation":1.52,"width":63,"height":33}},"right hand":{"right hand":{"name":"goblingirl/right-hand","x":7.21,"y":3.43,"rotation":91.16,"width":36,"height":37}},"right hand thumb":{"right hand thumb":{"name":"goblingirl/right-hand","x":7.21,"y":3.43,"rotation":91.16,"width":36,"height":37}},"right lower leg":{"right lower leg":{"name":"goblingirl/right-lower-leg","x":26.15,"y":-3.27,"rotation":111.83,"width":36,"height":76}},"right shoulder":{"right shoulder":{"name":"goblingirl/right-shoulder","x":14.46,"y":0.45,"rotation":129.85,"width":39,"height":45}},"right upper leg":{"right upper leg":{"name":"goblingirl/right-upper-leg","x":19.69,"y":2.13,"rotation":97.49,"width":34,"height":63}},"torso":{"torso":{"name":"goblingirl/torso","x":36.28,"y":-5.14,"rotation":-95.74,"width":68,"height":96}},"undie straps":{"undie straps":{"name":"goblingirl/undie-straps","x":-1.51,"y":14.18,"width":55,"height":19}},"undies":{"undies":{"name":"goblingirl/undies","x":5.4,"y":1.7,"width":36,"height":29}}}},"animations":{"walk":{"slots":{"eyes":{"attachment":[{"time":0.7,"name":"eyes closed"},{"time":0.8,"name":null}]}},"bones":{"left upper leg":{"rotate":[{"time":0,"angle":-26.55},{"time":0.1333,"angle":-8.78},{"time":0.2333,"angle":9.51},{"time":0.3666,"angle":30.74},{"time":0.5,"angle":25.33},{"time":0.6333,"angle":26.11},{"time":0.7333,"angle":7.45},{"time":0.8666,"angle":-21.19},{"time":1,"angle":-26.55}],"translate":[{"time":0,"x":-1.32,"y":1.7},{"time":0.3666,"x":-0.06,"y":2.42},{"time":1,"x":-1.32,"y":1.7}]},"right upper leg":{"rotate":[{"time":0,"angle":42.45},{"time":0.1333,"angle":49.86,"curve":[0.414,0,0.705,0.99]},{"time":0.2333,"angle":22.51},{"time":0.5,"angle":-16.93},{"time":0.6333,"angle":1.89},{"time":0.7333,"angle":34.86,"curve":[0.462,0.11,1,1]},{"time":0.8666,"angle":58.68,"curve":[0.5,0.02,1,1]},{"time":1,"angle":42.45}],"translate":[{"time":0,"x":6.23,"y":0},{"time":0.2333,"x":2.14,"y":2.4},{"time":0.5,"x":2.44,"y":4.8},{"time":1,"x":6.23,"y":0}]},"left lower leg":{"rotate":[{"time":0,"angle":-18.05},{"time":0.1333,"angle":-63.5},{"time":0.2333,"angle":-83.01},{"time":0.5,"angle":5.11},{"time":0.6333,"angle":-28.29},{"time":0.7333,"angle":-27.52},{"time":0.8666,"angle":3.53},{"time":1,"angle":-18.05}],"translate":[{"time":0,"x":0,"y":0},{"time":0.2333,"x":2.55,"y":-0.47},{"time":0.5,"x":0,"y":0,"curve":"stepped"},{"time":1,"x":0,"y":0}]},"left foot":{"rotate":[{"time":0,"angle":-14.56},{"time":0.1333,"angle":-10.42},{"time":0.2333,"angle":-5.01},{"time":0.3,"angle":6.67},{"time":0.3666,"angle":3.87},{"time":0.5,"angle":-3.87},{"time":0.6333,"angle":2.78},{"time":0.7333,"angle":-11.99},{"time":0.8666,"angle":-12.45},{"time":1,"angle":-14.56}]},"right shoulder":{"rotate":[{"time":0,"angle":5.29,"curve":[0.264,0,0.75,1]},{"time":0.6333,"angle":6.65},{"time":1,"angle":5.29}]},"right arm":{"rotate":[{"time":0,"angle":-4.02,"curve":[0.267,0,0.804,0.99]},{"time":0.6333,"angle":19.78,"curve":[0.307,0,0.787,0.99]},{"time":1,"angle":-4.02}]},"right hand":{"rotate":[{"time":0,"angle":8.98},{"time":0.6333,"angle":0.51},{"time":1,"angle":8.98}]},"left shoulder":{"rotate":[{"time":0,"angle":6.25,"curve":[0.339,0,0.683,1]},{"time":0.5,"angle":-11.78,"curve":[0.281,0,0.686,0.99]},{"time":1,"angle":6.25}],"translate":[{"time":0,"x":1.15,"y":0.23}]},"left hand":{"rotate":[{"time":0,"angle":-21.23,"curve":[0.295,0,0.755,0.98]},{"time":0.5,"angle":-27.28,"curve":[0.241,0,0.75,0.97]},{"time":1,"angle":-21.23}]},"left arm":{"rotate":[{"time":0,"angle":28.37,"curve":[0.339,0,0.683,1]},{"time":0.5,"angle":60.09,"curve":[0.281,0,0.686,0.99]},{"time":1,"angle":28.37}]},"torso":{"rotate":[{"time":0,"angle":-10.28},{"time":0.1333,"angle":-15.38,"curve":[0.545,0,0.818,1]},{"time":0.3666,"angle":-9.78,"curve":[0.58,0.17,0.669,0.99]},{"time":0.6333,"angle":-15.75,"curve":[0.235,0.01,0.795,1]},{"time":0.8666,"angle":-7.06,"curve":[0.209,0,0.816,0.98]},{"time":1,"angle":-10.28}],"translate":[{"time":0,"x":-3.72,"y":-0.01}]},"right foot":{"rotate":[{"time":0,"angle":-5.25},{"time":0.2333,"angle":-17.76},{"time":0.3666,"angle":-20.09},{"time":0.5,"angle":-19.73},{"time":0.7333,"angle":-11.68},{"time":0.8,"angle":4.46},{"time":0.8666,"angle":0.46},{"time":1,"angle":-5.25}]},"right lower leg":{"rotate":[{"time":0,"angle":-3.39,"curve":[0.316,0.01,0.741,0.98]},{"time":0.1333,"angle":-43.21,"curve":[0.414,0,0.705,0.99]},{"time":0.2333,"angle":-25.98},{"time":0.5,"angle":-19.53},{"time":0.6333,"angle":-64.8},{"time":0.7333,"angle":-89.54,"curve":[0.557,0.18,1,1]},{"time":1,"angle":-3.39}],"translate":[{"time":0,"x":0,"y":0,"curve":"stepped"},{"time":0.5,"x":0,"y":0},{"time":0.6333,"x":2.18,"y":0.21},{"time":1,"x":0,"y":0}]},"hip":{"rotate":[{"time":0,"angle":0,"curve":"stepped"},{"time":1,"angle":0}],"translate":[{"time":0,"x":0,"y":-8.4},{"time":0.1333,"x":0,"y":-9.35,"curve":[0.326,0.05,0.674,0.93]},{"time":0.2333,"x":0,"y":-0.59,"curve":[0.325,0.39,0.643,0.7]},{"time":0.3666,"x":0,"y":-3.96},{"time":0.5,"x":0,"y":-8.4},{"time":0.6333,"x":0,"y":-10,"curve":[0.359,0.47,0.646,0.74]},{"time":0.7333,"x":0,"y":-5.29,"curve":[0.333,0.36,0.662,0.69]},{"time":0.8,"x":0,"y":-2.49,"curve":[0.322,0.35,0.651,0.68]},{"time":0.8666,"x":0,"y":-3.96},{"time":1,"x":0,"y":-8.4}]},"neck":{"rotate":[{"time":0,"angle":3.6},{"time":0.1333,"angle":17.49},{"time":0.2333,"angle":6.1},{"time":0.3666,"angle":3.45},{"time":0.5,"angle":5.17},{"time":0.6333,"angle":18.36},{"time":0.7333,"angle":6.09},{"time":0.8666,"angle":2.28},{"time":1,"angle":3.6}]},"head":{"rotate":[{"time":0,"angle":3.6,"curve":[0,0,0.704,1.17]},{"time":0.1333,"angle":-0.2},{"time":0.2333,"angle":6.1},{"time":0.3666,"angle":3.45},{"time":0.5,"angle":5.17,"curve":[0,0,0.704,1.61]},{"time":0.6666,"angle":1.1},{"time":0.7333,"angle":6.09},{"time":0.8666,"angle":2.28},{"time":1,"angle":3.6}]},"pelvis":{"rotate":[{"time":0,"angle":-1.33}],"translate":[{"time":0,"x":0.39,"y":-0.78}]},"spear1":{"rotate":[{"time":0,"angle":1.84},{"time":0.2,"angle":-5.38},{"time":0.5,"angle":2.95},{"time":0.7333,"angle":-3.67},{"time":1,"angle":1.84}]},"spear2":{"rotate":[{"time":0,"angle":1.84},{"time":0.2,"angle":-5.38},{"time":0.5,"angle":2.95},{"time":0.7333,"angle":-3.67},{"time":1,"angle":1.84}]},"spear3":{"rotate":[{"time":0,"angle":3.64},{"time":0.2,"angle":-3.59},{"time":0.5,"angle":4.74},{"time":0.7333,"angle":-1.87},{"time":1,"angle":3.64}]}},"ffd":{"default":{"left hand item":{"spear":[{"time":0}]},"right hand item":{"dagger":[{"time":0,"offset":26,"vertices":[2.34,0.14],"curve":[0.25,0,0.75,1]},{"time":0.5,"offset":8,"vertices":[-1.19,4.31,0.07,6.41,1.66,6.18,1.75,3.59],"curve":[0.25,0,0.75,1]},{"time":1,"offset":26,"vertices":[2.34,0.14]}]}},"goblin":{"head":{"head":[{"time":0,"curve":[0.632,0,0.75,1]},{"time":0.2,"vertices":[-10.97,-6.68,-4.68,-2.46,0,0,0,0,0,0,0,0,0,0,0,0,-1.08,0.08,-1.08,0.08,-1.08,0.08,0,0,-2.22,2.66,-4.83,2.7,-5.7,-0.51,-3.15,-1.61,0,0,0,0,0,0,0,0,0,0,0,0,-6.64,0.81,-11.82,-1.34,0,0,0,0,0,0,0,0,0,0,-1.08,0.08],"curve":[0.25,0,0.75,1]},{"time":0.3666,"vertices":[10.69,4.05,3.66,1.85,0,0,0,0,0,0,0,0,0,0,0,0,1.47,0.09,1.47,0.09,1.47,0.09,0,0,2.69,-0.22,3.77,0.11,3.68,1.55,2.49,1.65,0,0,0,0,0,0,0,0,0,0,0,0,4.45,-3.91,9.19,-1.66,0,0,0,0,0,0,0,0,0,0,1.47,0.09],"curve":[0.621,0,0.75,1]},{"time":0.7,"vertices":[-10.97,-6.68,-4.68,-2.46,0,0,0,0,0,0,0,0,0,0,0,0,-1.17,-0.17,-1.17,-0.17,-1.17,-0.17,0,0,-2.22,2.66,-4.83,2.7,-5.7,-0.51,-3.15,-1.61,0,0,0,0,0,0,0,0,0,0,0,0,-6.64,0.81,-11.82,-1.34,0,0,0,0,0,0,0,0,0,0,-1.17,-0.17],"curve":[0.25,0,0.75,1]},{"time":0.8666,"vertices":[10.69,4.05,3.66,1.85,0,0,0,0,0,0,0,0,0,0,0,0,0.38,0.08,0.38,0.08,0.38,0.08,0,0,2.69,-0.22,3.77,0.11,3.68,1.55,2.49,1.65,0,0,0,0,0,0,0,0,0,0,0,0,4.45,-3.91,9.19,-1.66,0,0,0,0,0,0,0,0,0,0,0.38,0.08],"curve":[0.25,0,0.75,1]},{"time":1}]},"left foot":{"left foot":[{"time":0,"offset":8,"vertices":[3.69,2.37,-7.16,18.79,-12.78,14.77,-12.75,6.5,-3.13,1.98,-0.44,0.36,0,0,-3.8,2.98]},{"time":0.1333},{"time":0.2333,"offset":8,"vertices":[-3.96,-2.34,-5.8,-12.47,-2.23,-12.99,2.02,-9.1,0,0,0,0,0,0,-1.35,-5.28]},{"time":0.3666,"offset":8,"vertices":[0.66,0.33,0.33,2.69,-0.48,2.54,-1.13,1.38,0,0,0,0,0,0,-0.11,0.79]},{"time":0.5,"curve":"stepped"},{"time":0.6333},{"time":0.7333,"offset":8,"vertices":[-2.97,9.4,-6.91,19.92,-10.55,18.41,-12.37,12.38,-4.72,6.3,0,0,-1.48,4.88,-7.06,10.7]},{"time":0.8333,"offset":6,"vertices":[1.05,1.56,-2.52,7.99,-5.52,17.14,-8.93,15.79,-10.73,10.22,-4.23,5.36,0,0,0,0,-5.83,8.55]},{"time":1,"offset":8,"vertices":[3.69,2.37,-7.16,18.79,-12.78,14.77,-12.75,6.5,-3.13,1.98,-0.44,0.36,0,0,-3.8,2.98]}]},"pelvis":{"pelvis":[{"time":0},{"time":0.1333,"offset":6,"vertices":[-0.68,-4.13]},{"time":0.3333,"offset":6,"vertices":[-1.04,-3.1]},{"time":0.7,"offset":6,"vertices":[-1.42,-6.3]},{"time":0.8666,"offset":6,"vertices":[-1.13,-1.79]},{"time":1}]},"right foot":{"right foot":[{"time":0},{"time":0.1333,"offset":2,"vertices":[-2.81,2.63,-2.35,3.89,-1.99,4.86,-0.93,5.57,-0.48,5.09,-0.34,3.42,-0.17,1.36,0,0,0,0,0,0,0,0,0,0,0,0,-1.31,1.91,-1.32,3.65]},{"time":0.2333,"offset":2,"vertices":[-6.39,6.41,-7.74,8.27,-7.02,11.35,-4.03,13.93,-2.5,12.62,-1.46,7.58,-0.17,1.36,0,0,0,0,0,0,0,0,0,0,0,0,-3.84,2.61,-4.53,7.92]},{"time":0.3,"offset":2,"vertices":[-8.27,6.68,-9.29,10.13,-8.62,14.71,-4.58,18.81,-2.2,17.1,-0.07,9.9,2.54,1.01,0,0,0,0,0,0,0,0,0,0,0,0,-2.94,2.38,-4.59,10.01]},{"time":0.3666,"offset":2,"vertices":[-10.47,9.44,-13.36,12.4,-14.32,16.94,-9.24,23.55,-5.51,21.51,-1.19,11.53,2.54,1.01,0,0,0,0,0,0,0,0,0,0,0,0,-4.14,2.29,-6.63,11.37]},{"time":0.5,"offset":2,"vertices":[-5.42,4.36,-10.59,7.04,-11.64,11.55,-6.19,20.12,-1.45,18.05,4.86,6.41,2.81,0.27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.96,4.94]},{"time":0.6333},{"time":0.7333,"offset":4,"vertices":[1.31,-6.84,-0.87,-12.54,-5.98,-14.08,-7.15,-11.63,-5.67,-4.83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2.06,-6.93]},{"time":0.8,"offset":4,"vertices":[0.65,-3.42,-0.43,-6.27,-2.99,-7.04,-3.57,-5.81,-2.83,-2.41,0,0,0,0,0,0,0,0,0,0,2.79,-1.28,0,0,0,0,-1.03,-3.46]},{"time":0.8666}]},"right hand":{"right hand":[{"time":0,"offset":4,"vertices":[-1.48,0.34,0,0,1.31,0.08,1.6,0.09,0.13,0.15,0,0,0,0,-0.72,-0.04]},{"time":0.5},{"time":1,"offset":4,"vertices":[-1.48,0.34,0,0,1.31,0.08,1.6,0.09,0.13,0.15,0,0,0,0,-0.72,-0.04]}]},"right lower leg":{"right lower leg":[{"time":0},{"time":0.6,"offset":6,"vertices":[1.8,-1.56]},{"time":1}]},"right upper leg":{"right upper leg":[{"time":0,"vertices":[-6.03,-1.46,0,0,0,0,0,0,0,0,0,0,0,0,-0.34,-1.93,-1.86,-5.05,-2.5,-3.09]},{"time":0.3333},{"time":0.8666,"offset":14,"vertices":[0.13,-2.35,-1.33,-5.99,-1.35,-4.43]},{"time":1,"vertices":[-6.03,-1.46,0,0,0,0,0,0,0,0,0,0,0,0,-0.34,-1.93,-1.86,-5.05,-2.5,-3.09]}]},"torso":{"torso":[{"time":0,"offset":14,"vertices":[-1.48,-0.24,-2.72,-2.15,-0.51,-3.39,0,0,0,0,0,0,0,0,0,0,0,0,1.09,-2.61,0,0,0.57,-1.24,0,0,0,0,-2.11,-3.29]},{"time":0.1333,"offset":14,"vertices":[1.31,-0.59,-0.97,-1.62,0.74,-0.61,-1.44,1.97,0,0,0,0,0,0,0,0,0,0,2.65,-3.95,0,0,-1.46,-0.31,0,0,0,0,-3.31,-3.55,-2.56,0.29]},{"time":0.3,"offset":14,"vertices":[6.03,-3.13,7.55,-1.38,6.79,0.31,4.23,1.14,0,0,0,0,0,0,0,0,0,0,4.07,-5.16,0,0,4,0.27,0,0,0,0,3.43,-3.52]},{"time":0.5,"offset":14,"vertices":[2.25,-0.87,2.57,-0.56,3.17,-0.57,1.48,0.99,0,0,0,0,0,0,0,0,0,0,3.22,-4.43,0,0,1.48,0.01,0,0,0,0,0.31,-3.28,-1.53,0.17]},{"time":0.6333,"offset":14,"vertices":[0.75,-1.51,-0.97,-1.62,0.74,-0.61,-1.44,1.97,0,0,0,0,0,0,0,0,0,0,2.65,-3.95,0,0,-1.46,-0.31,0,0,0,0,-3.31,-3.55,-2.56,0.29]},{"time":0.8666,"offset":14,"vertices":[0.62,-1.26,0.38,-2.2,3.25,-0.5,2.41,2.39,0,0,0,0,0,0,0,0,0,0,1.66,-3.1,0,0,2.3,-1.15,0,0,0,0,-0.07,-3.63,-0.93,0.1]},{"time":1,"offset":14,"vertices":[-1.48,-0.24,-2.72,-2.15,-0.51,-3.39,0,0,0,0,0,0,0,0,0,0,0,0,1.09,-2.61,0,0,0.57,-1.24,0,0,0,0,-2.11,-3.29]}]},"undie straps":{"undie straps":[{"time":0,"offset":2,"vertices":[-1.77,0.54,-0.96,-1.03,-0.39,-0.24,-1.77,0.54]},{"time":0.1333,"offset":2,"vertices":[-2.25,-1.03,-1.49,-4.23,-0.74,-2.84,-1.9,0.54]},{"time":0.3333,"offset":2,"vertices":[-2.37,-0.05,-0.49,0.19,-0.9,1.16,-1.6,2.7,0.96,0.8]},{"time":0.7,"offset":2,"vertices":[-0.91,-2.76,-0.62,-3.63,-0.84,-2.26,-2.56,0.52]},{"time":0.8666,"offset":2,"vertices":[-2.56,0.52,-1.58,0.32,-1.38,0.32,-2.56,0.52]},{"time":1,"offset":2,"vertices":[-1.77,0.54,-0.8,0.53,-0.8,0.53,-1.77,0.54]}]},"undies":{"undies":[{"time":0,"vertices":[0.43,0.72,10.6,-0.11,2.29,0,2.29,0,2.29,0,0.58,0.24,-2.4,-0.65,-2.27,-0.77,2.29,0,0.58,-0.48,4.98,-0.11,6.5,-0.23]},{"time":0.1333,"vertices":[0.72,0.43,7.2,-0.16,1.37,0,1.37,0,1.37,0,1.25,0.04,-0.99,-2.95,-1.37,-3.07,1.37,0,0.35,-0.29,2.99,-0.07,3.9,-0.14]},{"time":0.3333,"vertices":[1.16,0,2.1,-0.23,0,0,0,0,0,0,2.24,-0.24,-0.43,0.6,-1.55,0.48]},{"time":0.5333,"vertices":[1.16,0,-0.23,-0.93,-2.92,0.35,0,0,0,0,0.49,-0.24,-0.64,-2.07,-0.64,-2.07]},{"time":0.7,"vertices":[1.86,-0.11,4.66,-0.09,-1.76,0.21,0,0,-0.56,0.32,-1.13,-1.15,-2.19,-3.47,-1.29,-3.47,0,0,0,0,1.58,-0.04,2.65,0.16]},{"time":0.8333,"vertices":[2.41,-0.2,8.58,0.58,-0.83,0.1,0,0,-1.02,0.59,-2.44,-1.87,-1.62,0,0,0,0,0,0,0,2.85,-0.08,4.78,0.3]},{"time":0.8666,"vertices":[2.01,-0.02,8.98,0.44,-0.2,0.08,0.45,0,-0.35,0.47,-1.84,-1.44,-0.79,1.26,0.53,1.23,0.45,0,0.11,-0.09,3.28,-0.09,5.13,0.19]},{"time":1,"vertices":[0.43,0.72,10.6,-0.11,2.29,0,2.29,0,2.29,0,0.58,0.24,-2.4,-0.65,-2.27,-0.77,2.29,0,0.58,-0.48,4.98,-0.11,6.5,-0.23]}]}}}}}} \ No newline at end of file diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.json.meta b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.json.meta deleted file mode 100644 index cc50a083e..000000000 --- a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.json.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: f3a3248bc50115241ae81702fde448eb -TextScriptImporter: - userData: diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Atlas.asset b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Atlas.asset deleted file mode 100644 index cc334ce8e..000000000 Binary files a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Atlas.asset and /dev/null differ diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Atlas.asset.meta b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Atlas.asset.meta deleted file mode 100644 index 4f8499576..000000000 --- a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Atlas.asset.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: df2c4ad0c6709fd4f9b1c19ab43878ae -NativeFormatImporter: - userData: diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Material.mat b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Material.mat deleted file mode 100644 index c623d8ae6..000000000 Binary files a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Material.mat and /dev/null differ diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Material.mat.meta b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Material.mat.meta deleted file mode 100644 index 1c84b0c05..000000000 --- a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Material.mat.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 64a66fecd89237b478156e7cc4d2da4a -NativeFormatImporter: - userData: diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_SkeletonData.asset b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_SkeletonData.asset deleted file mode 100644 index e443663b9..000000000 Binary files a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_SkeletonData.asset and /dev/null differ diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_SkeletonData.asset.meta b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_SkeletonData.asset.meta deleted file mode 100644 index 4e8df5510..000000000 --- a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_SkeletonData.asset.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 066917a2cc5e8824b9b7e2944feee6f1 -NativeFormatImporter: - userData: diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins.atlas.txt b/spine-unity/Assets/Examples/Spine/Goblins/goblins.atlas.txt new file mode 100644 index 000000000..bcb327ec8 --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Goblins/goblins.atlas.txt @@ -0,0 +1,293 @@ + +goblins.png +size: 795,142 +format: RGBA8888 +filter: Linear,Linear +repeat: none +dagger + rotate: false + xy: 1, 33 + size: 26, 108 + orig: 26, 108 + offset: 0, 0 + index: -1 +goblin/eyes-closed + rotate: false + xy: 760, 129 + size: 34, 12 + orig: 34, 12 + offset: 0, 0 + index: -1 +goblin/head + rotate: true + xy: 110, 38 + size: 103, 66 + orig: 103, 66 + offset: 0, 0 + index: -1 +goblin/left-arm + rotate: true + xy: 659, 7 + size: 37, 35 + orig: 37, 35 + offset: 0, 0 + index: -1 +goblin/left-foot + rotate: false + xy: 1, 1 + size: 65, 31 + orig: 65, 31 + offset: 0, 0 + index: -1 +goblin/left-hand + rotate: false + xy: 347, 3 + size: 36, 41 + orig: 36, 41 + offset: 0, 0 + index: -1 +goblin/left-lower-leg + rotate: false + xy: 420, 71 + size: 33, 70 + orig: 33, 70 + offset: 0, 0 + index: -1 +goblin/left-shoulder + rotate: true + xy: 684, 48 + size: 29, 44 + orig: 29, 44 + offset: 0, 0 + index: -1 +goblin/left-upper-leg + rotate: false + xy: 315, 68 + size: 33, 73 + orig: 33, 73 + offset: 0, 0 + index: -1 +goblin/neck + rotate: false + xy: 384, 3 + size: 36, 41 + orig: 36, 41 + offset: 0, 0 + index: -1 +goblin/pelvis + rotate: false + xy: 221, 1 + size: 62, 43 + orig: 62, 43 + offset: 0, 0 + index: -1 +goblin/right-arm + rotate: false + xy: 732, 91 + size: 23, 50 + orig: 23, 50 + offset: 0, 0 + index: -1 +goblin/right-foot + rotate: true + xy: 624, 78 + size: 63, 33 + orig: 63, 33 + offset: 0, 0 + index: -1 +goblin/right-hand + rotate: false + xy: 585, 7 + size: 36, 37 + orig: 36, 37 + offset: 0, 0 + index: -1 +goblin/right-lower-leg + rotate: true + xy: 67, 1 + size: 36, 76 + orig: 36, 76 + offset: 0, 0 + index: -1 +goblin/right-shoulder + rotate: true + xy: 493, 5 + size: 39, 45 + orig: 39, 45 + offset: 0, 0 + index: -1 +goblin/right-upper-leg + rotate: false + xy: 554, 78 + size: 34, 63 + orig: 34, 63 + offset: 0, 0 + index: -1 +goblin/torso + rotate: false + xy: 177, 45 + size: 68, 96 + orig: 68, 96 + offset: 0, 0 + index: -1 +goblin/undie-straps + rotate: true + xy: 692, 86 + size: 55, 19 + orig: 55, 19 + offset: 0, 0 + index: -1 +goblin/undies + rotate: false + xy: 756, 99 + size: 36, 29 + orig: 36, 29 + offset: 0, 0 + index: -1 +goblingirl/eyes-closed + rotate: true + xy: 729, 48 + size: 37, 21 + orig: 37, 21 + offset: 0, 0 + index: -1 +goblingirl/head + rotate: true + xy: 28, 38 + size: 103, 81 + orig: 103, 81 + offset: 0, 0 + index: -1 +goblingirl/left-arm + rotate: true + xy: 724, 10 + size: 37, 35 + orig: 37, 35 + offset: 0, 0 + index: -1 +goblingirl/left-foot + rotate: true + xy: 522, 76 + size: 65, 31 + orig: 65, 31 + offset: 0, 0 + index: -1 +goblingirl/left-hand + rotate: false + xy: 457, 4 + size: 35, 40 + orig: 35, 40 + offset: 0, 0 + index: -1 +goblingirl/left-lower-leg + rotate: false + xy: 454, 71 + size: 33, 70 + orig: 33, 70 + offset: 0, 0 + index: -1 +goblingirl/left-shoulder + rotate: false + xy: 695, 1 + size: 28, 46 + orig: 28, 46 + offset: 0, 0 + index: -1 +goblingirl/left-upper-leg + rotate: false + xy: 488, 71 + size: 33, 70 + orig: 33, 70 + offset: 0, 0 + index: -1 +goblingirl/neck + rotate: false + xy: 421, 3 + size: 35, 41 + orig: 35, 41 + offset: 0, 0 + index: -1 +goblingirl/pelvis + rotate: false + xy: 284, 1 + size: 62, 43 + orig: 62, 43 + offset: 0, 0 + index: -1 +goblingirl/right-arm + rotate: false + xy: 756, 48 + size: 28, 50 + orig: 28, 50 + offset: 0, 0 + index: -1 +goblingirl/right-foot + rotate: true + xy: 658, 78 + size: 63, 33 + orig: 63, 33 + offset: 0, 0 + index: -1 +goblingirl/right-hand + rotate: false + xy: 622, 7 + size: 36, 37 + orig: 36, 37 + offset: 0, 0 + index: -1 +goblingirl/right-lower-leg + rotate: true + xy: 144, 1 + size: 36, 76 + orig: 36, 76 + offset: 0, 0 + index: -1 +goblingirl/right-shoulder + rotate: true + xy: 539, 5 + size: 39, 45 + orig: 39, 45 + offset: 0, 0 + index: -1 +goblingirl/right-upper-leg + rotate: false + xy: 589, 78 + size: 34, 63 + orig: 34, 63 + offset: 0, 0 + index: -1 +goblingirl/torso + rotate: false + xy: 246, 45 + size: 68, 96 + orig: 68, 96 + offset: 0, 0 + index: -1 +goblingirl/undie-straps + rotate: true + xy: 712, 86 + size: 55, 19 + orig: 55, 19 + offset: 0, 0 + index: -1 +goblingirl/undies + rotate: true + xy: 760, 11 + size: 36, 29 + orig: 36, 29 + offset: 0, 0 + index: -1 +shield + rotate: false + xy: 349, 69 + size: 70, 72 + orig: 70, 72 + offset: 0, 0 + index: -1 +spear + rotate: true + xy: 315, 45 + size: 22, 368 + orig: 22, 368 + offset: 0, 0 + index: -1 diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins.atlas.txt.meta b/spine-unity/Assets/Examples/Spine/Goblins/goblins.atlas.txt.meta new file mode 100644 index 000000000..6766dd993 --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Goblins/goblins.atlas.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 179f09b47e5402545a1aa69bf5cb2cba +timeCreated: 1467115504 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins.json b/spine-unity/Assets/Examples/Spine/Goblins/goblins.json new file mode 100644 index 000000000..9a0cadc22 --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Goblins/goblins.json @@ -0,0 +1,1060 @@ +{ +"skeleton": { + "hash": "JkhrYH1FWGINlDaz60K/E43JLYM", + "spine": "3.3.07", + "width": 266.99, + "height": 349.62, + "images": "C:/Program Files (x86)/Spine/examples/goblins/images/" +}, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, + { "name": "torso", "parent": "hip", "length": 85.82, "rotation": 93.92, "x": -6.42, "y": 1.97 }, + { "name": "neck", "parent": "torso", "length": 18.38, "rotation": -1.51, "x": 81.67, "y": -6.34 }, + { "name": "head", "parent": "neck", "length": 68.28, "rotation": -13.92, "x": 20.93, "y": 11.59 }, + { "name": "left shoulder", "parent": "torso", "length": 35.43, "rotation": -156.96, "x": 74.04, "y": -20.38 }, + { "name": "left arm", "parent": "left shoulder", "length": 35.62, "rotation": 28.16, "x": 37.85, "y": -2.34 }, + { "name": "left upper leg", "parent": "hip", "length": 50.39, "rotation": -89.09, "x": 14.45, "y": 2.81 }, + { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "rotation": -16.65, "x": 56.34, "y": 0.98 }, + { "name": "left foot", "parent": "left lower leg", "length": 46.5, "rotation": 102.43, "x": 58.94, "y": -7.61 }, + { "name": "left hand", "parent": "left arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.07 }, + { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, + { "name": "right shoulder", "parent": "torso", "length": 37.24, "rotation": 133.88, "x": 76.02, "y": 18.14 }, + { "name": "right arm", "parent": "right shoulder", "length": 36.74, "rotation": 36.32, "x": 37.6, "y": 0.31 }, + { "name": "right upper leg", "parent": "hip", "length": 42.45, "rotation": -97.49, "x": -20.07, "y": -6.83 }, + { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "rotation": -14.34, "x": 42.99, "y": -0.61 }, + { "name": "right foot", "parent": "right lower leg", "length": 45.45, "rotation": 110.3, "x": 64.88, "y": 0.04 }, + { "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.35, "x": 36.9, "y": 0.34 } +], +"slots": [ + { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" }, + { "name": "left arm", "bone": "left arm", "attachment": "left arm" }, + { "name": "left hand item", "bone": "left hand", "attachment": "spear" }, + { "name": "left hand", "bone": "left hand", "attachment": "left hand" }, + { "name": "left foot", "bone": "left foot", "attachment": "left foot" }, + { "name": "left lower leg", "bone": "left lower leg", "attachment": "left lower leg" }, + { "name": "left upper leg", "bone": "left upper leg", "attachment": "left upper leg" }, + { "name": "neck", "bone": "neck", "attachment": "neck" }, + { "name": "torso", "bone": "torso", "attachment": "torso" }, + { "name": "pelvis", "bone": "pelvis", "attachment": "pelvis" }, + { "name": "right foot", "bone": "right foot", "attachment": "right foot" }, + { "name": "right lower leg", "bone": "right lower leg", "attachment": "right lower leg" }, + { "name": "undie straps", "bone": "pelvis", "attachment": "undie straps" }, + { "name": "undies", "bone": "pelvis", "attachment": "undies" }, + { "name": "right upper leg", "bone": "right upper leg", "attachment": "right upper leg" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "eyes", "bone": "head" }, + { "name": "right shoulder", "bone": "right shoulder", "attachment": "right shoulder" }, + { "name": "right arm", "bone": "right arm", "attachment": "right arm" }, + { "name": "right hand thumb", "bone": "right hand", "attachment": "right hand thumb" }, + { "name": "right hand item", "bone": "right hand", "attachment": "dagger" }, + { "name": "right hand", "bone": "right hand", "attachment": "right hand" }, + { "name": "right hand item 2", "bone": "right hand", "attachment": "shield" } +], +"skins": { + "default": { + "left hand item": { + "dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 }, + "spear": { + "type": "mesh", + "uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.72117, 1, 0.28838, 1, 0.20043, 0.13242, 0, 0.11519, 0.4527, 0, 0.58399, 0 ], + "triangles": [ 4, 5, 6, 1, 7, 0, 1, 3, 4, 6, 7, 1, 1, 4, 6, 2, 3, 1 ], + "vertices": [ -26.02, 180.65, -29.24, 172.19, 41.7, -138.95, 32.41999, -141.1, -41.49, 169.49, -47.22, 174.67, -47.08, 218.22, -44.27, 218.87 ], + "hull": 8, + "edges": [ 12, 10, 10, 8, 8, 6, 4, 6, 4, 2, 2, 0, 12, 14, 0, 14 ], + "width": 22, + "height": 368 + } + }, + "right hand item": { + "dagger": { + "type": "mesh", + "uvs": [ 0.78091, 0.38453, 1, 0.38405, 1, 0.44881, 0.73953, 0.4687, 0.74641, 0.81344, 0.34022, 1, 0.15434, 1, 0.11303, 0.78858, 0.23007, 0.47367, 0, 0.45047, 0, 0.38621, 0.22367, 0.38573, 0.24384, 0, 1, 0 ], + "triangles": [ 0, 12, 13, 11, 12, 0, 0, 1, 2, 9, 10, 11, 3, 11, 0, 3, 0, 2, 8, 11, 3, 9, 11, 8, 5, 6, 7, 4, 5, 8, 4, 8, 3, 5, 7, 8 ], + "vertices": [ 15.49, -12.82, 21.13, -13.57, 20.16, -20.49, 13.15, -21.67, 8.13, -58.56, -5.13, -77.04, -9.92, -76.36, -7.79, -53.6, -0.03, -20.36, -5.6, -17.04, -4.63, -10.17, 1.12, -10.93, 7.46, 30.24, 26.93, 27.49 ], + "hull": 14, + "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], + "width": 26, + "height": 108 + } + }, + "right hand item 2": { + "shield": { "rotation": 93.49, "width": 70, "height": 72 } + } + }, + "goblin": { + "eyes": { + "eyes closed": { "name": "goblin/eyes-closed", "x": 29.19, "y": -24.89, "rotation": -88.92, "width": 34, "height": 12 } + }, + "head": { + "head": { + "name": "goblin/head", + "type": "mesh", + "uvs": [ 0, 0.60494, 0.14172, 0.5145, 0.24218, 0.55229, 0.32667, 0.67806, 0.37969, 0.79352, 0.53505, 0.93014, 0.86056, 1, 0.94071, 0.94169, 0.92098, 0.69923, 0.9888, 0.65497, 0.99003, 0.51643, 0.89632, 0.43561, 0.94487, 0.41916, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80754, 0.16044, 0.66698, 0.01997, 0.4734, 0.01805, 0.29215, 0.19893, 0.25392, 0.31823, 0.09117, 0.324, 0, 0.44331, 0.43271, 0.69153, 0.466, 0.47794, 0.35996, 0.31246, 0.73473, 0.68593, 0.72215, 0.57425, 0.88179, 0.5583, 0.80267, 0.51015 ], + "triangles": [ 26, 20, 19, 21, 20, 26, 15, 14, 13, 12, 15, 13, 11, 16, 15, 11, 15, 12, 26, 17, 25, 18, 26, 19, 17, 26, 18, 30, 25, 17, 30, 17, 16, 30, 16, 11, 1, 22, 21, 23, 22, 1, 2, 1, 21, 2, 21, 26, 29, 30, 11, 29, 11, 10, 28, 25, 30, 0, 23, 1, 9, 29, 10, 25, 3, 2, 25, 2, 26, 29, 27, 28, 29, 28, 30, 24, 3, 25, 24, 25, 28, 24, 28, 27, 8, 29, 9, 27, 29, 8, 4, 3, 24, 5, 24, 27, 4, 24, 5, 7, 6, 27, 7, 27, 8, 5, 27, 6 ], + "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.45999, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.59999, 23.41, 35.89, 40.16999, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.79999, -24.31, 17.2, -40.65, 20.68, -33.02 ], + "hull": 24, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], + "width": 103, + "height": 66 + } + }, + "left arm": { + "left arm": { + "name": "goblin/left-arm", + "type": "mesh", + "uvs": [ 0.68992, 0.29284, 1, 0.46364, 1, 0.74643, 0.84089, 1, 0.66344, 1, 0.33765, 0.64284, 0, 0.44124, 0, 0, 0.34295, 0 ], + "triangles": [ 6, 7, 8, 5, 6, 8, 0, 5, 8, 0, 1, 2, 5, 0, 2, 4, 5, 2, 3, 4, 2 ], + "vertices": [ 18.6, 8.81, 32.18999, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], + "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], + "width": 37, + "height": 35 + } + }, + "left foot": { + "left foot": { + "name": "goblin/left-foot", + "type": "mesh", + "uvs": [ 0.15733, 0.31873, 0.08195, 0.78502, 0.15884, 0.99366, 0.41633, 0.96804, 0.68822, 0.97636, 1, 0.96388, 0.99385, 0.73501, 0.85294, 0.51862, 0.61479, 0.31056, 0.46991, 0, 0.48032, 0.75604, 0.75994, 0.77706 ], + "triangles": [ 0, 9, 8, 10, 0, 8, 10, 8, 7, 11, 10, 7, 11, 7, 6, 1, 0, 10, 11, 6, 5, 3, 1, 10, 4, 10, 11, 4, 11, 5, 3, 10, 4, 2, 1, 3 ], + "vertices": [ 2.28, 13.07, -1.76, -1.64, 3.59, -7.8, 20.25, -6.04, 37.91, -5.27, 58.12, -3.71, 57.31, 3.34, 47.78, 9.51, 31.95, 15.05, 21.99, 24.11, 24.03, 0.75, 42.21, 1.16 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], + "width": 65, + "height": 31 + } + }, + "left hand": { + "left hand": { + "name": "goblin/left-hand", + "type": "mesh", + "uvs": [ 0.518, 0.12578, 1, 0.16285, 0.99788, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42792, 0.17601, 0, 0.43567, 0 ], + "triangles": [ 2, 0, 1, 0, 5, 6, 6, 7, 0, 0, 7, 8, 3, 4, 0, 4, 5, 0, 2, 3, 0 ], + "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.47999, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], + "hull": 9, + "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], + "width": 36, + "height": 41 + } + }, + "left lower leg": { + "left lower leg": { + "name": "goblin/left-lower-leg", + "type": "mesh", + "uvs": [ 0.95508, 0.20749, 0.81927, 0.65213, 0.94754, 0.77308, 0.67842, 0.97346, 0.46463, 1, 0.26845, 1, 0.04963, 0.90706, 0.2106, 0.60115, 0.07478, 0.40195, 0.18545, 0, 0.28857, 0 ], + "triangles": [ 10, 8, 9, 1, 7, 10, 7, 8, 10, 0, 1, 10, 1, 4, 7, 3, 1, 2, 5, 6, 7, 7, 4, 5, 1, 3, 4 ], + "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.18999, -18.29 ], + "hull": 11, + "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], + "width": 33, + "height": 70 + } + }, + "left shoulder": { + "left shoulder": { + "name": "goblin/left-shoulder", + "type": "mesh", + "uvs": [ 0.7377, 0.40692, 1, 0.75237, 1, 1, 0.62046, 1, 0.26184, 0.56601, 0, 0.29783, 0, 0, 0.44115, 0 ], + "triangles": [ 5, 6, 7, 4, 5, 7, 4, 7, 0, 3, 4, 0, 3, 0, 1, 3, 1, 2 ], + "vertices": [ 15.18, 5.74, 32.16999, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.73999, -4.66, 6.54 ], + "hull": 8, + "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], + "width": 29, + "height": 44 + } + }, + "left upper leg": { + "left upper leg": { + "name": "goblin/left-upper-leg", + "type": "mesh", + "uvs": [ 1, 0.12167, 1, 0.54873, 0.91067, 0.78907, 0.76567, 1, 0.3087, 0.9579, 0, 0.68777, 0, 0.219, 0.51961, 0, 0.87552, 0 ], + "triangles": [ 7, 8, 0, 5, 6, 7, 0, 1, 7, 4, 5, 7, 1, 4, 7, 2, 4, 1, 3, 4, 2 ], + "vertices": [ 2.33, 13.06, 33.5, 12.57, 51, 9.34, 66.32, 4.31, 63, -10.71, 43.13, -20.58, 8.91, -20.04, -6.79, -2.64, -6.61, 9.1 ], + "hull": 9, + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], + "width": 33, + "height": 73 + } + }, + "neck": { + "neck": { + "name": "goblin/neck", + "type": "mesh", + "uvs": [ 0.81967, 0.27365, 0.92101, 0.82048, 0.47134, 1, 0.15679, 0.9354, 0, 0.7556, 0.19268, 0.51833, 0.15468, 0.35706, 0, 0.21989, 0.13568, 0, 0.68878, 0, 0.70145, 0.53872 ], + "triangles": [ 6, 8, 9, 6, 9, 0, 7, 8, 6, 10, 5, 6, 0, 10, 6, 10, 0, 1, 3, 4, 5, 2, 5, 10, 2, 10, 1, 3, 5, 2 ], + "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.04999, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], + "hull": 10, + "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], + "width": 36, + "height": 41 + } + }, + "pelvis": { + "pelvis": { + "name": "goblin/pelvis", + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], + "vertices": [ 25.38, -20.73, -36.61, -20.73, -36.61, 22.26, 25.38, 22.26 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 62, + "height": 43 + } + }, + "right arm": { + "right arm": { + "name": "goblin/right-arm", + "type": "mesh", + "uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24384, 1, 0, 0.86558, 0.20822, 0.10919, 0.50903, 0, 0.85342, 0 ], + "triangles": [ 6, 7, 0, 2, 3, 5, 4, 5, 3, 1, 6, 0, 6, 2, 5, 1, 2, 6 ], + "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.17999 ], + "hull": 8, + "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], + "width": 23, + "height": 50 + } + }, + "right foot": { + "right foot": { + "name": "goblin/right-foot", + "type": "mesh", + "uvs": [ 0.40851, 0.0047, 0.59087, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97532, 0.89391, 0.90385, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65984, 0, 0.46577, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71257, 0.715, 0.74681 ], + "triangles": [ 1, 10, 11, 1, 13, 0, 14, 1, 2, 1, 12, 13, 12, 1, 11, 14, 10, 1, 15, 14, 2, 15, 2, 3, 9, 10, 14, 15, 3, 4, 7, 8, 9, 14, 7, 9, 6, 14, 15, 5, 6, 15, 7, 14, 6, 4, 5, 15 ], + "vertices": [ 17.36, 25.99, 29.13, 15.44, 39.89, 10.8, 48.14, 7.24, 53.84, -2.38, 49.43, -6, 34.84, -6.39, 16.84, -6.87, -2.4, -7.38, -7.58, -3.86, -7.78, 3.7, -7.95, 10.1, -2.57, 22.36, 10.84, 25.97, 22.14, 2.75, 37.31, 2.03 ], + "hull": 14, + "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], + "width": 63, + "height": 33 + } + }, + "right hand": { + "right hand": { + "name": "goblin/right-hand", + "type": "mesh", + "uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89823, 0.82004, 0.8259, 0.74285, 0.84223, 0.49993, 0.96356, 0.34102, 0.66023, 0 ], + "triangles": [ 8, 10, 9, 0, 10, 1, 8, 2, 1, 8, 1, 10, 7, 3, 8, 3, 2, 8, 4, 3, 7, 5, 7, 6, 4, 7, 5 ], + "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.87999, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], + "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 ], + "width": 36, + "height": 37 + } + }, + "right hand thumb": { + "right hand thumb": { + "name": "goblin/right-hand", + "type": "mesh", + "uvs": [ 0.88538, 0.22262, 0.76167, 0.3594, 0.75088, 0.78308, 0.95326, 0.84981, 1, 0.60302 ], + "triangles": [ 1, 0, 4, 2, 1, 4, 3, 2, 4 ], + "vertices": [ -2.82, 15.97, 2.4, 11.71, 18.08, 11.9, 20.27, 19.27, 11.09, 20.62 ], + "hull": 5, + "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], + "width": 36, + "height": 37 + } + }, + "right lower leg": { + "right lower leg": { + "name": "goblin/right-lower-leg", + "type": "mesh", + "uvs": [ 1, 0.27261, 0.81312, 0.52592, 0.79587, 0.71795, 0.95544, 0.80988, 0.85193, 0.95493, 0.47241, 1, 0.14033, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30325, 0.60611, 0 ], + "triangles": [ 1, 10, 0, 9, 10, 1, 8, 9, 1, 2, 8, 1, 4, 2, 3, 6, 7, 8, 5, 6, 8, 2, 5, 8, 4, 5, 2 ], + "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.09999, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.76999, -1.03, 58.99, -9.18999, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], + "width": 36, + "height": 76 + } + }, + "right shoulder": { + "right shoulder": { + "name": "goblin/right-shoulder", + "type": "mesh", + "uvs": [ 0.62008, 0.03708, 0.92131, 0.09048, 1, 0.38319, 0.72049, 0.6937, 0.31656, 1, 0, 1, 0, 0.75106, 0.28233, 0.49988 ], + "triangles": [ 2, 3, 0, 2, 0, 1, 7, 0, 3, 4, 5, 6, 4, 7, 3, 4, 6, 7 ], + "vertices": [ -3.17, -11.05, -9, -0.57, -1.01, 10.33, 16.69, 11.17, 37.41, 8.2, 45.45, -1.16, 36.95, -8.46, 21.2, -7.47 ], + "hull": 8, + "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], + "width": 39, + "height": 45 + } + }, + "right upper leg": { + "right upper leg": { + "name": "goblin/right-upper-leg", + "type": "mesh", + "uvs": [ 0.27018, 0, 0.11618, 0.18177, 0, 0.70688, 0, 0.89577, 0.26668, 1, 0.48718, 1, 0.67618, 0.83532, 1, 0.5161, 1, 0.25543, 0.74618, 0.0571 ], + "triangles": [ 9, 8, 7, 9, 1, 0, 6, 9, 7, 6, 1, 9, 2, 1, 6, 4, 3, 2, 6, 4, 2, 5, 4, 6 ], + "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.50999, 10.18, 19.12999, 18.46999, 2.85, 16.32, -8.39999, 6.14 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "width": 34, + "height": 63 + } + }, + "torso": { + "torso": { + "name": "goblin/torso", + "type": "mesh", + "uvs": [ 0, 0.33287, 0.15945, 0.46488, 0.15761, 0.60314, 0.15502, 0.79806, 0.32807, 0.93478, 0.6875, 1, 0.80731, 1, 1, 0.77763, 1, 0.66147, 1, 0.56703, 0.93207, 0.4771, 0.86944, 0.39416, 0.83837, 0.226, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78734, 0.86249, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38316, 0.77692, 0.73446, 0.66478, 0.51012 ], + "triangles": [ 0, 15, 14, 20, 14, 13, 20, 13, 12, 1, 0, 14, 20, 12, 11, 20, 1, 14, 22, 20, 11, 22, 11, 10, 19, 1, 20, 19, 20, 22, 2, 1, 19, 18, 22, 10, 18, 10, 9, 19, 22, 18, 18, 9, 8, 21, 18, 8, 21, 8, 7, 17, 2, 19, 21, 17, 19, 21, 19, 18, 3, 2, 17, 16, 21, 7, 17, 21, 16, 4, 3, 17, 5, 17, 16, 4, 17, 5, 6, 16, 7, 5, 16, 6 ], + "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.87999, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -21.69, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], + "hull": 16, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], + "width": 68, + "height": 96 + } + }, + "undie straps": { + "undie straps": { + "name": "goblin/undie-straps", + "type": "mesh", + "uvs": [ 0.36097, 0.44959, 0.66297, 0.60591, 1, 0.19486, 1, 0.57117, 0.75897, 1, 0.38697, 1, 0, 0.26433, 0, 0, 0.12497, 0 ], + "triangles": [ 6, 7, 8, 6, 8, 0, 3, 1, 2, 5, 0, 1, 6, 0, 5, 4, 1, 3, 5, 1, 4 ], + "vertices": [ -10.56, 12.87, 6.53, 9.89999, 25.62, 17.70999, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], + "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], + "width": 55, + "height": 19 + } + }, + "undies": { + "undies": { + "name": "goblin/undies", + "type": "mesh", + "uvs": [ 0, 0.32029, 0.14893, 0.59457, 0.22437, 1, 0.35909, 1, 0.50998, 1, 0.79559, 0.58453, 0.9842, 0.28015, 1, 0.00588, 0.46957, 0.17646, 0, 0.03933, 0.48843, 0.59122, 0.48114, 0.43099 ], + "triangles": [ 6, 8, 7, 0, 9, 8, 11, 8, 6, 0, 8, 11, 5, 11, 6, 10, 11, 5, 1, 0, 11, 1, 11, 10, 3, 2, 1, 10, 3, 1, 4, 10, 5, 3, 10, 4 ], + "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.58999, 22.22, 6.11, 22.92, 14.05, 3.75, 9.43999, -13.08, 13.71, 4.21, -2.58999, 4.03, 2.05 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], + "width": 36, + "height": 29 + } + } + }, + "goblingirl": { + "eyes": { + "eyes closed": { "name": "goblingirl/eyes-closed", "x": 28, "y": -25.54, "rotation": -87.04, "width": 37, "height": 21 } + }, + "head": { + "head": { "name": "goblingirl/head", "x": 27.71, "y": -4.32, "rotation": -85.58, "width": 103, "height": 81 } + }, + "left arm": { + "left arm": { "name": "goblingirl/left-arm", "x": 19.64, "y": -2.42, "rotation": 33.05, "width": 37, "height": 35 } + }, + "left foot": { + "left foot": { "name": "goblingirl/left-foot", "type": "linkedmesh", "skin": "goblin", "parent": "left foot", "width": 65, "height": 31 } + }, + "left hand": { + "left hand": { + "name": "goblingirl/left-hand", + "x": 4.34, + "y": 2.39, + "scaleX": 0.896, + "scaleY": 0.896, + "rotation": 30.34, + "width": 35, + "height": 40 + } + }, + "left lower leg": { + "left lower leg": { "name": "goblingirl/left-lower-leg", "x": 25.02, "y": -0.6, "rotation": 105.75, "width": 33, "height": 70 } + }, + "left shoulder": { + "left shoulder": { "name": "goblingirl/left-shoulder", "x": 19.8, "y": -0.42, "rotation": 61.21, "width": 28, "height": 46 } + }, + "left upper leg": { + "left upper leg": { "name": "goblingirl/left-upper-leg", "x": 30.21, "y": -2.95, "rotation": 89.09, "width": 33, "height": 70 } + }, + "neck": { + "neck": { "name": "goblingirl/neck", "x": 6.16, "y": -3.14, "rotation": -98.86, "width": 35, "height": 41 } + }, + "pelvis": { + "pelvis": { "name": "goblingirl/pelvis", "type": "linkedmesh", "skin": "goblin", "parent": "pelvis", "width": 62, "height": 43 } + }, + "right arm": { + "right arm": { "name": "goblingirl/right-arm", "x": 16.85, "y": -0.66, "rotation": 93.52, "width": 28, "height": 50 } + }, + "right foot": { + "right foot": { "name": "goblingirl/right-foot", "type": "linkedmesh", "skin": "goblin", "parent": "right foot", "width": 63, "height": 33 } + }, + "right hand": { + "right hand": { "name": "goblingirl/right-hand", "x": 7.21, "y": 3.43, "rotation": 91.16, "width": 36, "height": 37 } + }, + "right hand thumb": { + "right hand thumb": { "name": "goblingirl/right-hand", "x": 7.21, "y": 3.43, "rotation": 91.16, "width": 36, "height": 37 } + }, + "right lower leg": { + "right lower leg": { "name": "goblingirl/right-lower-leg", "x": 26.15, "y": -3.27, "rotation": 111.83, "width": 36, "height": 76 } + }, + "right shoulder": { + "right shoulder": { "name": "goblingirl/right-shoulder", "x": 14.46, "y": 0.45, "rotation": 129.85, "width": 39, "height": 45 } + }, + "right upper leg": { + "right upper leg": { + "name": "goblingirl/right-upper-leg", + "type": "linkedmesh", + "skin": "goblin", + "parent": "right upper leg", + "width": 34, + "height": 63 + } + }, + "torso": { + "torso": { "name": "goblingirl/torso", "x": 36.28, "y": -5.14, "rotation": -95.74, "width": 68, "height": 96 } + }, + "undie straps": { + "undie straps": { "name": "goblingirl/undie-straps", "x": -1.51, "y": 14.18, "width": 55, "height": 19 } + }, + "undies": { + "undies": { "name": "goblingirl/undies", "x": 5.4, "y": 1.7, "width": 36, "height": 29 } + } + } +}, +"animations": { + "walk": { + "slots": { + "eyes": { + "attachment": [ + { "time": 0.7, "name": "eyes closed" }, + { "time": 0.8, "name": null } + ] + } + }, + "bones": { + "left upper leg": { + "rotate": [ + { "time": 0, "angle": -26.55 }, + { "time": 0.1333, "angle": -8.78 }, + { "time": 0.2333, "angle": 9.51 }, + { "time": 0.3666, "angle": 30.74 }, + { "time": 0.5, "angle": 25.33 }, + { "time": 0.6333, "angle": 26.11 }, + { "time": 0.7333, "angle": 7.45 }, + { "time": 0.8666, "angle": -21.19 }, + { "time": 1, "angle": -26.55 } + ], + "translate": [ + { "time": 0, "x": -1.32, "y": 1.7 }, + { "time": 0.3666, "x": -0.06, "y": 2.42 }, + { "time": 1, "x": -1.32, "y": 1.7 } + ] + }, + "right upper leg": { + "rotate": [ + { "time": 0, "angle": 42.45 }, + { + "time": 0.1333, + "angle": 49.86, + "curve": [ 0.414, 0, 0.705, 0.99 ] + }, + { "time": 0.2333, "angle": 22.51 }, + { "time": 0.5, "angle": -16.93 }, + { "time": 0.6333, "angle": 1.89 }, + { + "time": 0.7333, + "angle": 34.86, + "curve": [ 0.462, 0.11, 1, 1 ] + }, + { + "time": 0.8666, + "angle": 58.68, + "curve": [ 0.5, 0.02, 1, 1 ] + }, + { "time": 1, "angle": 42.45 } + ], + "translate": [ + { "time": 0, "x": 6.23, "y": 0 }, + { "time": 0.2333, "x": 2.14, "y": 2.4 }, + { "time": 0.5, "x": 2.44, "y": 4.8 }, + { "time": 1, "x": 6.23, "y": 0 } + ] + }, + "left lower leg": { + "rotate": [ + { "time": 0, "angle": -18.05 }, + { "time": 0.1333, "angle": -63.5 }, + { "time": 0.2333, "angle": -83.01 }, + { "time": 0.5, "angle": 5.11 }, + { "time": 0.6333, "angle": -28.29 }, + { "time": 0.7333, "angle": -27.52 }, + { "time": 0.8666, "angle": 3.53 }, + { "time": 1, "angle": -18.05 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.2333, "x": 2.55, "y": -0.47 }, + { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "left foot": { + "rotate": [ + { "time": 0, "angle": -14.56 }, + { "time": 0.1333, "angle": -10.42 }, + { "time": 0.2333, "angle": -5.01 }, + { "time": 0.3, "angle": 6.67 }, + { "time": 0.3666, "angle": 3.87 }, + { "time": 0.5, "angle": -3.87 }, + { "time": 0.6333, "angle": 2.78 }, + { "time": 0.7333, "angle": -11.99 }, + { "time": 0.8666, "angle": -12.45 }, + { "time": 1, "angle": -14.56 } + ] + }, + "right shoulder": { + "rotate": [ + { + "time": 0, + "angle": 5.29, + "curve": [ 0.264, 0, 0.75, 1 ] + }, + { "time": 0.6333, "angle": 6.65 }, + { "time": 1, "angle": 5.29 } + ] + }, + "right arm": { + "rotate": [ + { + "time": 0, + "angle": -4.02, + "curve": [ 0.267, 0, 0.804, 0.99 ] + }, + { + "time": 0.6333, + "angle": 19.78, + "curve": [ 0.307, 0, 0.787, 0.99 ] + }, + { "time": 1, "angle": -4.02 } + ] + }, + "right hand": { + "rotate": [ + { "time": 0, "angle": 8.98 }, + { "time": 0.6333, "angle": 0.51 }, + { "time": 1, "angle": 8.98 } + ] + }, + "left shoulder": { + "rotate": [ + { + "time": 0, + "angle": 6.25, + "curve": [ 0.339, 0, 0.683, 1 ] + }, + { + "time": 0.5, + "angle": -11.78, + "curve": [ 0.281, 0, 0.686, 0.99 ] + }, + { "time": 1, "angle": 6.25 } + ], + "translate": [ + { "time": 0, "x": 1.15, "y": 0.23 } + ] + }, + "left hand": { + "rotate": [ + { + "time": 0, + "angle": -21.23, + "curve": [ 0.295, 0, 0.755, 0.98 ] + }, + { + "time": 0.5, + "angle": -27.28, + "curve": [ 0.241, 0, 0.75, 0.97 ] + }, + { "time": 1, "angle": -21.23 } + ] + }, + "left arm": { + "rotate": [ + { + "time": 0, + "angle": 28.37, + "curve": [ 0.339, 0, 0.683, 1 ] + }, + { + "time": 0.5, + "angle": 60.09, + "curve": [ 0.281, 0, 0.686, 0.99 ] + }, + { "time": 1, "angle": 28.37 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -10.28 }, + { + "time": 0.1333, + "angle": -15.38, + "curve": [ 0.545, 0, 0.818, 1 ] + }, + { + "time": 0.3666, + "angle": -9.78, + "curve": [ 0.58, 0.17, 0.669, 0.99 ] + }, + { + "time": 0.6333, + "angle": -15.75, + "curve": [ 0.235, 0.01, 0.795, 1 ] + }, + { + "time": 0.8666, + "angle": -7.06, + "curve": [ 0.209, 0, 0.816, 0.98 ] + }, + { "time": 1, "angle": -10.28 } + ], + "translate": [ + { "time": 0, "x": -3.72, "y": -0.01 } + ] + }, + "right foot": { + "rotate": [ + { "time": 0, "angle": -5.25 }, + { "time": 0.2333, "angle": -17.76 }, + { "time": 0.3666, "angle": -20.09 }, + { "time": 0.5, "angle": -19.73 }, + { "time": 0.7333, "angle": -11.68 }, + { "time": 0.8, "angle": 4.46 }, + { "time": 0.8666, "angle": 0.46 }, + { "time": 1, "angle": -5.25 } + ] + }, + "right lower leg": { + "rotate": [ + { + "time": 0, + "angle": -3.39, + "curve": [ 0.316, 0.01, 0.741, 0.98 ] + }, + { + "time": 0.1333, + "angle": -43.21, + "curve": [ 0.414, 0, 0.705, 0.99 ] + }, + { "time": 0.2333, "angle": -25.98 }, + { "time": 0.5, "angle": -19.53 }, + { "time": 0.6333, "angle": -64.8 }, + { + "time": 0.7333, + "angle": -89.54, + "curve": [ 0.557, 0.18, 1, 1 ] + }, + { "time": 1, "angle": -3.39 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.5, "x": 0, "y": 0 }, + { "time": 0.6333, "x": 2.18, "y": 0.21 }, + { "time": 1, "x": 0, "y": 0 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": -8.4 }, + { + "time": 0.1333, + "x": 0, + "y": -9.35, + "curve": [ 0.326, 0.05, 0.674, 0.93 ] + }, + { + "time": 0.2333, + "x": 0, + "y": -0.59, + "curve": [ 0.325, 0.39, 0.643, 0.7 ] + }, + { "time": 0.3666, "x": 0, "y": -3.96 }, + { "time": 0.5, "x": 0, "y": -8.4 }, + { + "time": 0.6333, + "x": 0, + "y": -10, + "curve": [ 0.359, 0.47, 0.646, 0.74 ] + }, + { + "time": 0.7333, + "x": 0, + "y": -5.29, + "curve": [ 0.333, 0.36, 0.662, 0.69 ] + }, + { + "time": 0.8, + "x": 0, + "y": -2.49, + "curve": [ 0.322, 0.35, 0.651, 0.68 ] + }, + { "time": 0.8666, "x": 0, "y": -3.96 }, + { "time": 1, "x": 0, "y": -8.4 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 3.6 }, + { "time": 0.1333, "angle": 17.49 }, + { "time": 0.2333, "angle": 6.1 }, + { "time": 0.3666, "angle": 3.45 }, + { "time": 0.5, "angle": 5.17 }, + { "time": 0.6333, "angle": 18.36 }, + { "time": 0.7333, "angle": 6.09 }, + { "time": 0.8666, "angle": 2.28 }, + { "time": 1, "angle": 3.6 } + ] + }, + "head": { + "rotate": [ + { + "time": 0, + "angle": 3.6, + "curve": [ 0, 0, 0.704, 1.17 ] + }, + { "time": 0.1333, "angle": -0.2 }, + { "time": 0.2333, "angle": 6.1 }, + { "time": 0.3666, "angle": 3.45 }, + { + "time": 0.5, + "angle": 5.17, + "curve": [ 0, 0, 0.704, 1.61 ] + }, + { "time": 0.6666, "angle": 1.1 }, + { "time": 0.7333, "angle": 6.09 }, + { "time": 0.8666, "angle": 2.28 }, + { "time": 1, "angle": 3.6 } + ] + }, + "pelvis": { + "rotate": [ + { "time": 0, "angle": -1.33 } + ], + "translate": [ + { "time": 0, "x": 0.39, "y": -0.78 } + ] + } + }, + "deform": { + "default": { + "right hand item": { + "dagger": [ + { + "time": 0, + "offset": 26, + "vertices": [ 2.34754, 0.14469 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.5, + "offset": 8, + "vertices": [ -1.19415, 4.31531, 0.07279, 6.41351, 1.66048, 6.18882, 1.75232, 3.59555 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "offset": 26, + "vertices": [ 2.34754, 0.14469 ] + } + ] + } + }, + "goblin": { + "head": { + "head": [ + { + "time": 0, + "curve": [ 0.632, 0, 0.75, 1 ] + }, + { + "time": 0.2, + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391, -1.08534, 0.08391, -1.08534, 0.08391, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.3666, + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017, 1.47305, 0.09017, 1.47305, 0.09017, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017 ], + "curve": [ 0.621, 0, 0.75, 1 ] + }, + { + "time": 0.7, + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183, -1.1755, -0.17182, -1.1755, -0.17183, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8666, + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446, 0.38687, 0.08446, 0.38687, 0.08446, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1 } + ] + }, + "left foot": { + "left foot": [ + { + "time": 0, + "offset": 8, + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] + }, + { "time": 0.1333 }, + { + "time": 0.2333, + "offset": 8, + "vertices": [ -3.96072, -2.34594, -5.80445, -12.47629, -2.23129, -12.99037, 2.02941, -9.1036, 0, 0, 0, 0, 0, 0, -1.35254, -5.2883 ] + }, + { + "time": 0.3666, + "offset": 8, + "vertices": [ 0.66504, 0.33548, 0.33902, 2.69014, -0.4817, 2.54524, -1.13592, 1.38562, 0, 0, 0, 0, 0, 0, -0.11907, 0.79273 ] + }, + { "time": 0.5, "curve": "stepped" }, + { "time": 0.6333 }, + { + "time": 0.7333, + "offset": 8, + "vertices": [ -2.97737, 9.40254, -6.91661, 19.92794, -10.55287, 18.41085, -12.37161, 12.38473, -4.72606, 6.30798, 0, 0, -1.48902, 4.88944, -7.06773, 10.70101 ] + }, + { + "time": 0.8333, + "offset": 6, + "vertices": [ 1.05318, 1.56361, -2.52722, 7.9974, -5.5203, 17.14136, -8.93317, 15.79635, -10.73747, 10.22055, -4.23801, 5.36992, 0, 0, 0, 0, -5.83147, 8.55531 ] + }, + { + "time": 1, + "offset": 8, + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] + } + ] + }, + "pelvis": { + "pelvis": [ + { "time": 0 }, + { + "time": 0.1333, + "offset": 6, + "vertices": [ -0.68989, -4.13283 ] + }, + { + "time": 0.3333, + "offset": 6, + "vertices": [ -1.04945, -3.10476 ] + }, + { + "time": 0.7, + "offset": 6, + "vertices": [ -1.4245, -6.30616 ] + }, + { + "time": 0.8666, + "offset": 6, + "vertices": [ -1.13541, -1.79035 ] + }, + { "time": 1 } + ] + }, + "right foot": { + "right foot": [ + { "time": 0 }, + { + "time": 0.1333, + "offset": 2, + "vertices": [ -2.81258, 2.63114, -2.35238, 3.89441, -1.99921, 4.8639, -0.93273, 5.57982, -0.48886, 5.09854, -0.34812, 3.42912, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31305, 1.91371, -1.32986, 3.65703 ] + }, + { + "time": 0.2333, + "offset": 2, + "vertices": [ -6.39088, 6.41245, -7.74575, 8.27191, -7.02471, 11.35894, -4.0347, 13.93454, -2.50399, 12.62962, -1.46124, 7.58915, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84765, 2.61215, -4.53955, 7.92357 ] + }, + { + "time": 0.3, + "offset": 2, + "vertices": [ -8.27184, 6.68821, -9.29764, 10.13797, -8.62231, 14.71339, -4.58629, 18.81939, -2.20304, 17.10709, -0.07794, 9.9046, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94624, 2.38007, -4.59398, 10.01888 ] + }, + { + "time": 0.3666, + "offset": 2, + "vertices": [ -10.47683, 9.44175, -13.36882, 12.40982, -14.32568, 16.94392, -9.24462, 23.55674, -5.51711, 21.51377, -1.19581, 11.53192, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14847, 2.29389, -6.63418, 11.37127 ] + }, + { + "time": 0.5, + "offset": 2, + "vertices": [ -5.42473, 4.36854, -10.59004, 7.04468, -11.64251, 11.55845, -6.19665, 20.12805, -1.45497, 18.05411, 4.86619, 6.41678, 2.81462, 0.27601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96412, 4.94829 ] + }, + { "time": 0.6333 }, + { + "time": 0.7333, + "offset": 4, + "vertices": [ 1.31462, -6.84099, -0.87905, -12.54479, -5.9851, -14.08367, -7.15892, -11.63193, -5.6792, -4.83544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06163, -6.93844 ] + }, + { + "time": 0.8, + "offset": 4, + "vertices": [ 0.65731, -3.42049, -0.43952, -6.27239, -2.99255, -7.04183, -3.57946, -5.81596, -2.83959, -2.41772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79687, -1.2802, 0, 0, 0, 0, -1.03081, -3.46922 ] + }, + { "time": 0.8666 } + ] + }, + "right hand": { + "right hand": [ + { + "time": 0, + "offset": 4, + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] + }, + { "time": 0.5 }, + { + "time": 1, + "offset": 4, + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] + } + ] + }, + "right lower leg": { + "right lower leg": [ + { "time": 0 }, + { + "time": 0.6, + "offset": 6, + "vertices": [ 1.80396, -1.56552 ] + }, + { "time": 1 } + ] + }, + "right upper leg": { + "right upper leg": [ + { + "time": 0, + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] + }, + { "time": 0.3333 }, + { + "time": 0.8666, + "offset": 14, + "vertices": [ 0.13424, -2.35377, -1.33317, -5.99572, -1.35861, -4.43323 ] + }, + { + "time": 1, + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] + } + ] + }, + "torso": { + "torso": [ + { + "time": 0, + "offset": 14, + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] + }, + { + "time": 0.1333, + "offset": 14, + "vertices": [ 1.31318, -0.59727, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] + }, + { + "time": 0.3, + "offset": 14, + "vertices": [ 6.03761, -3.13561, 7.55475, -1.38111, 6.79747, 0.31171, 4.23503, 1.14012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07575, -5.16824, 0, 0, 4.0041, 0.27245, 0, 0, 0, 0, 3.4376, -3.52286 ] + }, + { + "time": 0.5, + "offset": 14, + "vertices": [ 2.25942, -0.87202, 2.575, -0.56861, 3.17112, -0.57003, 1.48704, 0.9924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22451, -4.43862, 0, 0, 1.48691, 0.01586, 0, 0, 0, 0, 0.31388, -3.28095, -1.53797, 0.17803 ] + }, + { + "time": 0.6333, + "offset": 14, + "vertices": [ 0.75002, -1.51701, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] + }, + { + "time": 0.8666, + "offset": 14, + "vertices": [ 0.62202, -1.26262, 0.38489, -2.20701, 3.25048, -0.50042, 2.41108, 2.39315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6639, -3.10099, 0, 0, 2.30655, -1.15196, 0, 0, 0, 0, -0.07676, -3.63497, -0.9321, 0.1079 ] + }, + { + "time": 1, + "offset": 14, + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] + } + ] + }, + "undie straps": { + "undie straps": [ + { + "time": 0, + "offset": 2, + "vertices": [ -1.77696, 0.54759, -0.96145, -1.03793, -0.39148, -0.24071, -1.77696, 0.54759 ] + }, + { + "time": 0.1333, + "offset": 2, + "vertices": [ -2.25683, -1.03177, -1.49719, -4.23861, -0.74469, -2.84906, -1.90072, 0.54477 ] + }, + { + "time": 0.3333, + "offset": 2, + "vertices": [ -2.37974, -0.05431, -0.49433, 0.19436, -0.90861, 1.16519, -1.60956, 2.70798, 0.96186, 0.80615 ] + }, + { + "time": 0.7, + "offset": 2, + "vertices": [ -0.91714, -2.76567, -0.62214, -3.63489, -0.8494, -2.26772, -2.56076, 0.5297 ] + }, + { + "time": 0.8666, + "offset": 2, + "vertices": [ -2.56076, 0.5297, -1.58064, 0.32031, -1.3847, 0.32476, -2.56076, 0.5297 ] + }, + { + "time": 1, + "offset": 2, + "vertices": [ -1.77696, 0.54759, -0.80128, 0.53413, -0.80128, 0.53413, -1.77696, 0.54759 ] + } + ] + }, + "undies": { + "undies": [ + { + "time": 0, + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] + }, + { + "time": 0.1333, + "vertices": [ 0.72659, 0.43319, 7.20416, -0.1638, 1.37759, 0, 1.37759, 0, 1.37759, 0, 1.25279, 0.0464, -0.99861, -2.95085, -1.37542, -3.07404, 1.37759, 0, 0.35279, -0.29279, 2.99218, -0.07019, 3.90478, -0.14039 ] + }, + { + "time": 0.3333, + "vertices": [ 1.16999, 0, 2.10599, -0.234, 0, 0, 0, 0, 0, 0, 2.24999, -0.24999, -0.4344, 0.60551, -1.55939, 0.48051 ] + }, + { + "time": 0.5333, + "vertices": [ 1.16999, 0, -0.234, -0.93599, -2.92499, 0.35099, 0, 0, 0, 0, 0.49999, -0.24999, -0.64078, -2.07914, -0.64078, -2.07914 ] + }, + { + "time": 0.7, + "vertices": [ 1.8627, -0.11514, 4.66326, -0.09099, -1.76428, 0.21171, 0, 0, -0.56832, 0.32832, -1.13833, -1.1511, -2.19996, -3.47068, -1.29718, -3.47068, 0, 0, 0, 0, 1.58785, -0.04642, 2.65941, 0.16714 ] + }, + { + "time": 0.8333, + "vertices": [ 2.41687, -0.20725, 8.58108, 0.585, -0.83571, 0.10028, 0, 0, -1.02299, 0.59098, -2.44899, -1.872, -1.62499, 0, 0, 0, 0, 0, 0, 0, 2.85813, -0.08356, 4.78695, 0.30086 ] + }, + { + "time": 0.8666, + "vertices": [ 2.01969, -0.0214, 8.98545, 0.4446, -0.20937, 0.08022, 0.45919, 0, -0.35919, 0.47279, -1.84159, -1.4488, -0.79153, 1.2642, 0.53285, 1.23981, 0.45919, 0, 0.11759, -0.09759, 3.2839, -0.09025, 5.13115, 0.19388 ] + }, + { + "time": 1, + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] + } + ] + } + } + } + } +} +} \ No newline at end of file diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins.json.meta b/spine-unity/Assets/Examples/Spine/Goblins/goblins.json.meta new file mode 100644 index 000000000..50fbf3815 --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Goblins/goblins.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c3921acb20cbc25418859f1b213d3d3f +timeCreated: 1467115504 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins.png b/spine-unity/Assets/Examples/Spine/Goblins/goblins.png new file mode 100644 index 000000000..2194a41fe Binary files /dev/null and b/spine-unity/Assets/Examples/Spine/Goblins/goblins.png differ diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.png.meta b/spine-unity/Assets/Examples/Spine/Goblins/goblins.png.meta similarity index 89% rename from spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.png.meta rename to spine-unity/Assets/Examples/Spine/Goblins/goblins.png.meta index 300122cab..fddf32d99 100644 --- a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.png.meta +++ b/spine-unity/Assets/Examples/Spine/Goblins/goblins.png.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 803c2e614a63081439fde6276d110661 -timeCreated: 1455501336 +guid: 5fb7efec30c79cb46a705e0d04debb04 +timeCreated: 1467205225 licenseType: Free TextureImporter: fileIDToRecycleName: {} @@ -30,15 +30,15 @@ TextureImporter: maxTextureSize: 2048 textureSettings: filterMode: -1 - aniso: -1 + aniso: 16 mipBias: -1 - wrapMode: -1 - nPOTScale: 1 + wrapMode: 1 + nPOTScale: 0 lightmap: 0 rGBM: 0 compressionQuality: 50 allowsAlphaSplitting: 0 - spriteMode: 0 + spriteMode: 1 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins_Atlas.asset b/spine-unity/Assets/Examples/Spine/Goblins/goblins_Atlas.asset new file mode 100644 index 000000000..6f377a39e --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Goblins/goblins_Atlas.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a6b194f808b1af6499c93410e504af42, type: 3} + m_Name: goblins_Atlas + m_EditorClassIdentifier: + atlasFile: {fileID: 4900000, guid: 179f09b47e5402545a1aa69bf5cb2cba, type: 3} + materials: + - {fileID: 2100000, guid: 54091ef934c41eb4192f72bfd8e3bcc9, type: 2} diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins_Atlas.asset.meta b/spine-unity/Assets/Examples/Spine/Goblins/goblins_Atlas.asset.meta new file mode 100644 index 000000000..3d55a9d89 --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Goblins/goblins_Atlas.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bb54bdab69af2bb49b35577b80dcaad9 +timeCreated: 1467115504 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins_Material.mat b/spine-unity/Assets/Examples/Spine/Goblins/goblins_Material.mat new file mode 100644 index 000000000..21f52650d --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Goblins/goblins_Material.mat @@ -0,0 +1,30 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: goblins_Material + m_Shader: {fileID: 4800000, guid: 1e8a610c9e01c3648bac42585e5fc676, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: 5fb7efec30c79cb46a705e0d04debb04, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + data: + first: + name: _Cutoff + second: 0.1 + m_Colors: {} diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins_Material.mat.meta b/spine-unity/Assets/Examples/Spine/Goblins/goblins_Material.mat.meta new file mode 100644 index 000000000..d4e948ee9 --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Goblins/goblins_Material.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 54091ef934c41eb4192f72bfd8e3bcc9 +timeCreated: 1467115504 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins_SkeletonData.asset b/spine-unity/Assets/Examples/Spine/Goblins/goblins_SkeletonData.asset new file mode 100644 index 000000000..712993750 --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Goblins/goblins_SkeletonData.asset @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1b3b4b945939a54ea0b23d3396115fb, type: 3} + m_Name: goblins_SkeletonData + m_EditorClassIdentifier: + atlasAssets: + - {fileID: 11400000, guid: bb54bdab69af2bb49b35577b80dcaad9, type: 2} + skeletonJSON: {fileID: 4900000, guid: c3921acb20cbc25418859f1b213d3d3f, type: 3} + scale: 0.01 + fromAnimation: [] + toAnimation: [] + duration: [] + defaultMix: 0 + controller: {fileID: 0} diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins_SkeletonData.asset.meta b/spine-unity/Assets/Examples/Spine/Goblins/goblins_SkeletonData.asset.meta new file mode 100644 index 000000000..0b2cc0155 --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Goblins/goblins_SkeletonData.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2e4e11d4dd87d844a876d18c4d76a612 +timeCreated: 1467115504 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Hero.prefab b/spine-unity/Assets/Examples/Spine/Hero.prefab index 99198b958..a0f9c534f 100644 Binary files a/spine-unity/Assets/Examples/Spine/Hero.prefab and b/spine-unity/Assets/Examples/Spine/Hero.prefab differ diff --git a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.json b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.json index 1f36470ef..e0eaf0212 100644 --- a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.json +++ b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.json @@ -1,57 +1,37 @@ { -"skeleton": { "hash": "3UtVZW/AAMHoaYnvByba3GW2T4U", "spine": "3.0.10", "width": 318.7, "height": 333.72, "images": "./images/" }, +"skeleton": { "hash": "jh5t7Fe4HCCCAZkNH+TzeRV82i4", "spine": "3.3.07", "width": 318.75, "height": 333.69, "images": "./images/" }, "bones": [ { "name": "root" }, - { "name": "R_Ground", "parent": "root", "x": 28.11, "y": 0.26, "color": "ff0000ff" }, - { "name": "R_Ankle", "parent": "R_Ground", "y": 31.79, "color": "ff3f00ff" }, - { "name": "LookTarget", "parent": "root", "x": 112.83, "y": 218.2, "color": "8a009bff" }, - { "name": "LookConstraintGoal", "parent": "LookTarget", "y": -43.82, "color": "ff3f00ff" }, + { "name": "Hip", "parent": "root", "y": 94.88 }, { "name": "L_Ground", "parent": "root", "x": -31.28, "y": 0.26, "color": "00ff00ff" }, { "name": "L_Ankle", "parent": "L_Ground", "x": 0.26, "y": 33.05, "color": "ff3f00ff" }, - { "name": "Hip", "parent": "root", "y": 94.88 }, - { "name": "body", "parent": "Hip", "length": 60.79, "x": 4.09, "y": 3.17, "rotation": 96.39 }, - { "name": "mantles", "parent": "body", "x": 48.47, "y": -9, "rotation": -2.25 }, - { "name": "capeRoot", "parent": "mantles", "x": 19.61, "y": 14.01, "rotation": -90.45 }, - { "name": "cape1", "parent": "capeRoot", "length": 29.18, "x": -2.88, "y": -14.83, "rotation": -102.96 }, - { "name": "cape2", "parent": "cape1", "length": 30.14, "x": 29.18, "y": -0.06, "rotation": 2.27 }, - { "name": "cape3", "parent": "cape2", "length": 32.51, "x": 30.14, "y": 0.22, "rotation": 1.8 }, - { "name": "cape4", "parent": "cape3", "length": 33.02, "x": 32.51, "y": 0.06, "rotation": 4.95 }, - { "name": "head", "parent": "body", "length": 24.35, "x": 74.55, "y": -4.84, "rotation": -92.69 }, - { "name": "hair01", "parent": "head", "x": 60.52, "y": 86.71 }, + { "name": "LookTarget", "parent": "root", "x": 112.83, "y": 218.2, "color": "8a009bff" }, + { "name": "LookConstraintGoal", "parent": "LookTarget", "y": -43.82, "color": "ff3f00ff" }, + { "name": "R_Ground", "parent": "root", "x": 28.11, "y": 0.26, "color": "ff0000ff" }, + { "name": "R_Ankle", "parent": "R_Ground", "y": 31.79, "color": "ff3f00ff" }, + { "name": "body", "parent": "Hip", "length": 60.79, "rotation": 96.39, "x": 4.09, "y": 3.17 }, + { "name": "head", "parent": "body", "length": 24.35, "rotation": -92.69, "x": 74.55, "y": -4.84 }, { "name": "bone2", "parent": "head", "x": 12.91, "y": 110.65 }, - { "name": "thigh1", "parent": "Hip", "length": 23.94, "x": -17.51, "y": -5.22, "rotation": -107.07 }, - { "name": "shin1", "parent": "thigh1", "length": 28.23, "x": 29.76, "y": -0.91, "rotation": 10.26 }, - { "name": "foot1", "parent": "shin1", "length": 27.07, "x": 28.17, "y": -0.48, "rotation": -90.96, "inheritRotation": false }, - { "name": "thigh2", "parent": "Hip", "length": 23.65, "x": 21.85, "y": -5.86, "rotation": -85.46 }, - { "name": "shin2", "parent": "thigh2", "length": 25.35, "x": 31.99, "y": 2.96, "rotation": -2.25 }, - { "name": "foot2", "parent": "shin2", "length": 22.28, "x": 25.54, "y": 0.27, "rotation": -90.42, "inheritRotation": false }, - { "name": "upperarm1", "parent": "body", "length": 19.35, "x": 52.49, "y": 41.84, "rotation": 130.11 }, - { "name": "forearm1", "parent": "upperarm1", "length": 22.06, "x": 23.97, "y": 5.16, "rotation": 30.56 }, - { "name": "hand1", "parent": "forearm1", "length": 28.01, "x": 27.54, "y": 0.44, "rotation": 16.24 }, - { "name": "upperarm2", "parent": "body", "length": 25.98, "x": 57.94, "y": -38.93, "rotation": -178.95 }, - { "name": "forearm2", "parent": "upperarm2", "length": 15.3, "x": 28.74, "y": -0.9, "rotation": 6.79 }, - { "name": "hand2", "parent": "forearm2", "length": 23.76, "x": 22.8, "y": -0.21, "rotation": 1.35 }, - { "name": "weapon", "parent": "hand2", "length": 157.4, "x": 15.97, "y": 1.43, "rotation": 77.9 } -], -"ik": [ - { - "name": "L_Leg", - "bones": [ "thigh1", "shin1" ], - "target": "L_Ankle", - "bendPositive": false - }, - { - "name": "R_Leg", - "bones": [ "thigh2", "shin2" ], - "target": "R_Ankle", - "bendPositive": false - }, - { - "name": "LookConstraint", - "bones": [ "head" ], - "target": "LookConstraintGoal", - "mix": 0 - } + { "name": "mantles", "parent": "body", "rotation": -2.25, "x": 48.47, "y": -9 }, + { "name": "capeRoot", "parent": "mantles", "rotation": -90.45, "x": 19.61, "y": 14.01 }, + { "name": "cape1", "parent": "capeRoot", "length": 29.18, "rotation": -102.96, "x": -2.88, "y": -14.83 }, + { "name": "cape2", "parent": "cape1", "length": 30.14, "rotation": 2.27, "x": 29.18, "y": -0.06 }, + { "name": "cape3", "parent": "cape2", "length": 32.51, "rotation": 1.8, "x": 30.14, "y": 0.22 }, + { "name": "cape4", "parent": "cape3", "length": 33.02, "rotation": 4.95, "x": 32.51, "y": 0.06 }, + { "name": "thigh1", "parent": "Hip", "length": 23.94, "rotation": -107.07, "x": -17.51, "y": -5.22 }, + { "name": "shin1", "parent": "thigh1", "length": 28.23, "rotation": 10.26, "x": 29.76, "y": -0.91 }, + { "name": "foot1", "parent": "shin1", "length": 27.07, "rotation": -90.96, "x": 28.17, "y": -0.48, "inheritRotation": false }, + { "name": "thigh2", "parent": "Hip", "length": 23.65, "rotation": -85.46, "x": 21.85, "y": -5.86 }, + { "name": "shin2", "parent": "thigh2", "length": 25.35, "rotation": -2.25, "x": 31.99, "y": 2.96 }, + { "name": "foot2", "parent": "shin2", "length": 22.28, "rotation": -90.42, "x": 25.54, "y": 0.27, "inheritRotation": false }, + { "name": "upperarm1", "parent": "body", "length": 19.35, "rotation": 130.11, "x": 52.49, "y": 41.84 }, + { "name": "forearm1", "parent": "upperarm1", "length": 22.06, "rotation": 30.56, "x": 23.97, "y": 5.16 }, + { "name": "upperarm2", "parent": "body", "length": 25.98, "rotation": -178.95, "x": 57.94, "y": -38.93 }, + { "name": "forearm2", "parent": "upperarm2", "length": 15.3, "rotation": 6.79, "x": 28.74, "y": -0.9 }, + { "name": "hair01", "parent": "head", "x": 60.52, "y": 86.71 }, + { "name": "hand1", "parent": "forearm1", "length": 28.01, "rotation": 16.24, "x": 27.54, "y": 0.44 }, + { "name": "hand2", "parent": "forearm2", "length": 23.76, "rotation": 1.35, "x": 22.8, "y": -0.21 }, + { "name": "weapon", "parent": "hand2", "length": 157.4, "rotation": 77.9, "x": 15.97, "y": 1.43 } ], "slots": [ { "name": "cape", "bone": "capeRoot", "attachment": "cape" }, @@ -76,6 +56,26 @@ { "name": "forearm1", "bone": "forearm1", "attachment": "forearm1" }, { "name": "hand1", "bone": "hand1", "attachment": "hand1" } ], +"ik": [ + { + "name": "L_Leg", + "bones": [ "thigh1", "shin1" ], + "target": "L_Ankle", + "bendPositive": false + }, + { + "name": "LookConstraint", + "bones": [ "head" ], + "target": "LookConstraintGoal", + "mix": 0 + }, + { + "name": "R_Leg", + "bones": [ "thigh2", "shin2" ], + "target": "R_Ankle", + "bendPositive": false + } +], "skins": { "default": { "body": { @@ -92,10 +92,10 @@ }, "cape": { "cape": { - "type": "skinnedmesh", + "type": "mesh", "uvs": [ 0.1298, 0.04145, 0.25, 0, 0.5, 0, 0.75, 0, 1, 0, 0.94074, 0.25, 0.90405, 0.5, 0.90969, 0.75259, 0.82336, 1, 0.55643, 1, 0.28104, 1, 0, 1, 0, 0.75518, 0.02821, 0.5, 0.05926, 0.25, 0.25, 0.25, 0.25, 0.5, 0.25, 0.75, 0.5, 0.25, 0.5, 0.5, 0.5, 0.75, 0.75, 0.25, 0.75, 0.5, 0.75, 0.75 ], "triangles": [ 20, 22, 23, 23, 6, 7, 12, 13, 17, 11, 12, 17, 10, 17, 20, 11, 17, 10, 9, 20, 23, 10, 20, 9, 8, 23, 7, 9, 23, 8, 13, 16, 17, 17, 19, 20, 14, 15, 16, 13, 14, 16, 16, 18, 19, 19, 21, 22, 17, 16, 19, 20, 19, 22, 23, 22, 6, 0, 1, 15, 14, 0, 15, 15, 2, 18, 18, 3, 21, 16, 15, 18, 19, 18, 21, 6, 22, 21, 5, 6, 21, 15, 1, 2, 18, 2, 3, 5, 21, 3, 4, 5, 3 ], - "vertices": [ 2, 10, -71.4, 10.27, 0.46604, 11, -9.13, -72.39, 0.53394, 2, 10, -47.49, 12.58, 0.68358, 11, -16.73, -49.61, 0.31641, 1, 10, -10.99, 12.58, 1, 1, 10, 25.5, 12.58, 1, 1, 10, 62, 12.58, 1, 5, 10, 62, -27.16, 0.46827, 11, -2.49, 66, 0.34919, 12, -29.04, 67.26, 0.138, 13, -57.05, 68.86, 0.03802, 14, -83.3, 76.26, 0.0065, 5, 10, 62, -66.91, 0.10393, 11, 36.24, 74.89, 0.24994, 12, 10.01, 74.62, 0.32221, 13, -17.77, 74.99, 0.22166, 14, -43.64, 78.98, 0.10223, 5, 10, 62, -106.66, 0.00721, 11, 74.98, 83.79, 0.07037, 12, 49.07, 81.98, 0.23464, 13, 21.49, 81.11, 0.35566, 14, -3.99, 81.69, 0.3321, 4, 11, 121.89, 57.11, 6.8E-4, 12, 94.89, 53.47, 0.03735, 13, 66.39, 51.18, 0.18593, 14, 38.16, 48, 0.77602, 3, 12, 101.65, 17.6, 1.8E-4, 13, 72.01999, 15.11, 0.0066, 14, 40.65, 11.58, 0.9932, 2, 13, 77.64, -20.94, 0.05302, 14, 43.15, -24.82, 0.94697, 3, 12, 115.16, -54.13, 0.00351, 13, 83.26999, -57, 0.13964, 14, 45.65, -61.23, 0.85684, 4, 11, 107.65, -58.5, 0.02404, 12, 76.1, -61.49, 0.08882, 13, 43.99, -63.13, 0.31703, 14, 5.99, -63.95, 0.57009, 5, 10, -83.99, -66.91, 0.00248, 11, 68.91, -67.39, 0.18233, 12, 37.04, -68.85, 0.31987, 13, 4.71999, -69.26, 0.35134, 14, -33.66, -66.67, 0.14396, 5, 10, -80.23, -27.03, 0.05345, 11, 29.2, -72.66, 0.47788, 12, -2.84, -72.54, 0.33484, 13, -35.25999, -71.69, 0.12468, 14, -73.69999, -65.65, 0.00913, 5, 10, -47.49, -27.16, 0.04861, 11, 22, -40.71, 0.52446, 12, -8.77, -40.34, 0.34709, 13, -40.16999, -39.32, 0.07735, 14, -75.81, -32.98, 0.00247, 4, 11, 60.74, -31.82, 0.12714, 12, 30.28, -32.98, 0.45018, 13, -0.9, -33.18999, 0.37754, 14, -36.15, -30.26, 0.04511, 4, 11, 99.48, -22.92, 0.00851, 12, 69.33999, -25.62, 0.04332, 13, 38.37, -27.07, 0.37472, 14, 3.49, -27.54, 0.57342, 1, 11, 13.83, -5.14, 1, 2, 12, 23.52, 2.88, 0.74116, 13, -6.52, 2.86, 0.25883, 3, 12, 62.59, 10.24, 0.01792, 13, 32.74, 8.99, 0.48072, 14, 1, 8.87, 0.50133, 5, 10, 25.5, -27.16, 0.37653, 11, 5.66, 30.42, 0.49807, 12, -22.29, 31.39, 0.10748, 13, -51.42, 32.8, 0.01629, 14, -80.8, 39.84, 0.0016, 5, 10, 25.5, -66.91, 0.05159, 11, 44.41, 39.32, 0.2736, 12, 16.77, 38.75, 0.45121, 13, -12.15, 38.91999, 0.18086, 14, -41.15, 42.56, 0.0427, 5, 10, 25.5, -106.66, 1.7E-4, 11, 83.15, 48.21, 0.01708, 12, 55.83, 46.11, 0.12238, 13, 27.12, 45.05, 0.35747, 14, -1.49, 45.28, 0.50287 ], + "vertices": [ 2, 12, -71.4, 10.27, 0.46604, 13, -9.13, -72.39, 0.53394, 2, 12, -47.49, 12.58, 0.68358, 13, -16.73, -49.61, 0.31641, 1, 12, -10.99, 12.58, 1, 1, 12, 25.5, 12.58, 1, 1, 12, 62, 12.58, 1, 5, 12, 62, -27.16, 0.46827, 13, -2.49, 66, 0.34919, 14, -29.04, 67.26, 0.138, 15, -57.05, 68.86, 0.03802, 16, -83.3, 76.26, 0.0065, 5, 12, 62, -66.91, 0.10393, 13, 36.24, 74.89, 0.24994, 14, 10.01, 74.62, 0.32221, 15, -17.77, 74.99, 0.22166, 16, -43.64, 78.98, 0.10223, 5, 12, 62, -106.66, 0.00721, 13, 74.98, 83.79, 0.07037, 14, 49.07, 81.98, 0.23464, 15, 21.49, 81.11, 0.35566, 16, -3.99, 81.69, 0.3321, 4, 13, 121.89, 57.11, 6.8E-4, 14, 94.89, 53.47, 0.03735, 15, 66.39, 51.18, 0.18593, 16, 38.16, 48, 0.77602, 3, 14, 101.65, 17.6, 1.8E-4, 15, 72.01999, 15.11, 0.0066, 16, 40.65, 11.58, 0.9932, 2, 15, 77.64, -20.94, 0.05302, 16, 43.15, -24.82, 0.94697, 3, 14, 115.16, -54.13, 0.00351, 15, 83.26999, -57, 0.13964, 16, 45.65, -61.23, 0.85684, 4, 13, 107.65, -58.5, 0.02404, 14, 76.1, -61.49, 0.08882, 15, 43.99, -63.13, 0.31703, 16, 5.99, -63.95, 0.57009, 5, 12, -83.99, -66.91, 0.00248, 13, 68.91, -67.39, 0.18233, 14, 37.04, -68.85, 0.31987, 15, 4.71999, -69.26, 0.35134, 16, -33.66, -66.67, 0.14396, 5, 12, -80.23, -27.03, 0.05345, 13, 29.2, -72.66, 0.47788, 14, -2.84, -72.54, 0.33484, 15, -35.25999, -71.69, 0.12468, 16, -73.69999, -65.65, 0.00913, 5, 12, -47.49, -27.16, 0.04861, 13, 22, -40.71, 0.52446, 14, -8.77, -40.34, 0.34709, 15, -40.16999, -39.32, 0.07735, 16, -75.81, -32.98, 0.00247, 4, 13, 60.74, -31.82, 0.12714, 14, 30.28, -32.98, 0.45018, 15, -0.9, -33.18999, 0.37754, 16, -36.15, -30.26, 0.04511, 4, 13, 99.48, -22.92, 0.00851, 14, 69.33999, -25.62, 0.04332, 15, 38.37, -27.07, 0.37472, 16, 3.49, -27.54, 0.57342, 1, 13, 13.83, -5.14, 1, 2, 14, 23.52, 2.88, 0.74116, 15, -6.52, 2.86, 0.25883, 3, 14, 62.59, 10.24, 0.01792, 15, 32.74, 8.99, 0.48072, 16, 1, 8.87, 0.50133, 5, 12, 25.5, -27.16, 0.37653, 13, 5.66, 30.42, 0.49807, 14, -22.29, 31.39, 0.10748, 15, -51.42, 32.8, 0.01629, 16, -80.8, 39.84, 0.0016, 5, 12, 25.5, -66.91, 0.05159, 13, 44.41, 39.32, 0.2736, 14, 16.77, 38.75, 0.45121, 15, -12.15, 38.91999, 0.18086, 16, -41.15, 42.56, 0.0427, 5, 12, 25.5, -106.66, 1.7E-4, 13, 83.15, 48.21, 0.01708, 14, 55.83, 46.11, 0.12238, 15, 27.12, 45.05, 0.35747, 16, -1.49, 45.28, 0.50287 ], "hull": 15, "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 0, 14, 16 ], "width": 146, @@ -137,10 +137,10 @@ }, "head": { "head": { - "type": "skinnedmesh", + "type": "mesh", "uvs": [ 0.89191, 0.07464, 1, 0.36671, 0.86524, 0.47125, 0.75952, 0.55326, 0.76614, 0.75424, 0.77423, 1, 0.52641, 1, 0.25139, 1, 0, 0.57054, 0.10296, 0.27407, 0.22999, 0.14511, 0.45598, 0.0454, 0.71272, 0, 0.6472, 0.42961, 0.39447, 0.39904, 0.22598, 0.42696, 0.75608, 0.33283, 0.60098, 0.22733, 0.43093, 0.21786, 0.52274, 0.41456, 0.52466, 0.72063, 0.24463, 0.56616, 0.28184, 0.73041, 0.67863, 0.75066 ], "triangles": [ 18, 10, 11, 17, 11, 12, 18, 11, 17, 9, 10, 18, 0, 17, 12, 18, 15, 9, 19, 18, 17, 16, 13, 17, 16, 17, 0, 16, 0, 1, 2, 16, 1, 2, 3, 16, 13, 19, 17, 14, 18, 19, 14, 15, 18, 3, 13, 16, 21, 15, 14, 8, 9, 15, 8, 15, 21, 20, 19, 13, 20, 13, 3, 21, 20, 22, 14, 20, 21, 19, 20, 14, 23, 20, 3, 23, 3, 4, 22, 8, 21, 7, 8, 22, 6, 20, 23, 22, 20, 6, 7, 22, 6, 5, 6, 23, 5, 23, 4 ], - "vertices": [ 2, 16, 16.16, 58.77, 0.65472, 17, 63.77, 34.83, 0.34527, 2, 16, 36.03, 1.92, 1.00135, 17, 83.64, -22.01, -0.00135, 2, 15, 72.24, 76.12, 0.00643, 16, 11.72, -10.58, 0.99356, 1, 15, 54.09, 62.63, 1, 1, 15, 55.3, 27.87, 1, 1, 15, 56.78, -14.64, 1, 1, 15, 14.16, -14.73, 1, 1, 15, -33.14, -14.83, 1, 1, 15, -76.53, 59.37, 1, 2, 15, -58.93, 110.69, 0.14022, 17, -71.83999, 0.04, 0.85977, 2, 15, -37.13, 133.05, 0.05322, 17, -50.04, 22.4, 0.94677, 3, 15, 1.69, 150.38, 0, 16, -58.82, 63.67, 0.03085, 17, -11.21, 39.73, 0.96913, 2, 16, -14.68, 71.62, 0.38932, 17, 32.93, 47.68, 0.61066, 1, 15, 34.72, 83.98, 1, 1, 15, -8.75, 89.18, 1, 1, 15, -37.72, 84.29, 1, 3, 15, 53.42, 100.64, 0.00656, 16, -7.1, 13.93, 0.75552, 17, 40.50999, -10, 0.23791, 2, 16, -33.81, 32.21, 0.17777, 17, 13.79, 8.27, 0.82222, 2, 15, -2.54, 120.54, 0.02356, 17, -15.45, 9.89, 0.97643, 1, 15, 13.31, 86.54, 1, 1, 15, 13.75, 33.59, 1, 1, 15, -34.46, 60.21, 1, 1, 15, -28, 31.81, 1, 1, 15, 40.25, 28.45, 1 ], + "vertices": [ 2, 27, 16.16, 58.77, 0.65472, 10, 63.77, 34.83, 0.34527, 2, 27, 36.03, 1.92, 1.00135, 10, 83.64, -22.01, -0.00135, 2, 9, 72.24, 76.12, 0.00643, 27, 11.72, -10.58, 0.99356, 1, 9, 54.09, 62.63, 1, 1, 9, 55.3, 27.87, 1, 1, 9, 56.78, -14.64, 1, 1, 9, 14.16, -14.73, 1, 1, 9, -33.14, -14.83, 1, 1, 9, -76.53, 59.37, 1, 2, 9, -58.93, 110.69, 0.14022, 10, -71.83999, 0.04, 0.85977, 2, 9, -37.13, 133.05, 0.05322, 10, -50.04, 22.4, 0.94677, 3, 9, 1.69, 150.38, 0, 27, -58.82, 63.67, 0.03085, 10, -11.21, 39.73, 0.96913, 2, 27, -14.68, 71.62, 0.38932, 10, 32.93, 47.68, 0.61066, 1, 9, 34.72, 83.98, 1, 1, 9, -8.75, 89.18, 1, 1, 9, -37.72, 84.29, 1, 3, 9, 53.42, 100.64, 0.00656, 27, -7.1, 13.93, 0.75552, 10, 40.50999, -10, 0.23791, 2, 27, -33.81, 32.21, 0.17777, 10, 13.79, 8.27, 0.82222, 2, 9, -2.54, 120.54, 0.02356, 10, -15.45, 9.89, 0.97643, 1, 9, 13.31, 86.54, 1, 1, 9, 13.75, 33.59, 1, 1, 9, -34.46, 60.21, 1, 1, 9, -28, 31.81, 1, 1, 9, 40.25, 28.45, 1 ], "hull": 13, "edges": [ 0, 24, 24, 22, 22, 20, 20, 18, 16, 18, 16, 14, 6, 26, 28, 30, 30, 16, 0, 2, 2, 4, 4, 6, 4, 32, 32, 34, 34, 36, 36, 18, 10, 12, 12, 14, 26, 38, 38, 28, 38, 34, 34, 24, 12, 40, 40, 38, 6, 8, 8, 10 ], "width": 172, @@ -517,7 +517,7 @@ ] } }, - "ffd": { + "deform": { "default": { "body": { "body": [ @@ -926,7 +926,7 @@ ] } }, - "ffd": { + "deform": { "default": { "body": { "body": [ @@ -1884,7 +1884,7 @@ ] } }, - "ffd": { + "deform": { "default": { "body": { "body": [ @@ -2449,7 +2449,7 @@ ] } }, - "ffd": { + "deform": { "default": { "body": { "body": [ @@ -3298,7 +3298,7 @@ ] } }, - "ffd": { + "deform": { "default": { "body": { "body": [ @@ -3841,7 +3841,7 @@ ] } }, - "ffd": { + "deform": { "default": { "body": { "body": [ diff --git a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.png.meta b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.png.meta index f03267cea..cf416725c 100644 --- a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.png.meta +++ b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.png.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 8d970daea81f33648ae2d84ab59c88d4 -timeCreated: 1455501336 +timeCreated: 1467205225 licenseType: Free TextureImporter: fileIDToRecycleName: {} diff --git a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Atlas.asset b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Atlas.asset index 185ea4c70..dc4bd66b2 100644 Binary files a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Material.mat b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Material.mat index b344b46dd..28302dc4c 100644 Binary files a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Material.mat and b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_SkeletonData.asset b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_SkeletonData.asset index eb82e98aa..2d6cadebd 100644 Binary files a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_SkeletonData.asset and b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_SkeletonData.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy.prefab b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy.prefab index 3828cb89e..cc2ea39d4 100644 Binary files a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy.prefab and b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy.prefab differ diff --git a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy.json b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy.json index 41815f4bb..95c560d29 100644 --- a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy.json +++ b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy.json @@ -1,22 +1,22 @@ { -"skeleton": { "hash": "VwRlHLlX3k1oQzXmdPiYJ828MGo", "spine": "2.1.27", "width": 157.46, "height": 364.95, "images": "" }, +"skeleton": { "hash": "FFV4kkOez2yiP1Fs81cfDffboO0", "spine": "3.3.07", "width": 157.46, "height": 364.91, "images": "" }, "bones": [ { "name": "root" }, { "name": "hip", "parent": "root", "x": -0.79, "y": 91.41 }, - { "name": "L-thigh", "parent": "hip", "length": 29.76, "x": 17.31, "y": -5.19, "rotation": -81.94 }, - { "name": "R-thigh", "parent": "hip", "length": 29.49, "x": -18.18, "y": -6.06, "rotation": -93.15 }, - { "name": "abdomen", "parent": "hip", "length": 33.49, "y": -0.1, "rotation": 89.54 }, - { "name": "L-foot", "parent": "L-thigh", "length": 37.25, "x": 37.35, "y": -1.78, "rotation": -6.29 }, - { "name": "R-foot", "parent": "R-thigh", "length": 39.98, "x": 36.41, "y": 0.27, "rotation": -1.8 }, + { "name": "abdomen", "parent": "hip", "length": 33.49, "rotation": 89.54, "y": -0.1 }, { "name": "chest", "parent": "abdomen", "length": 29.58, "x": 38.07, "y": 0.72 }, - { "name": "L-arm", "parent": "chest", "length": 32.67, "x": 24.63, "y": -16.69, "rotation": -121.22 }, - { "name": "R-arm", "parent": "chest", "length": 36.76, "x": 26, "y": 13.63, "rotation": 133.37 }, - { "name": "head", "parent": "chest", "length": 94.23, "x": 41.01, "y": -0.1, "rotation": -2.25 }, - { "name": "L-forearm", "parent": "L-arm", "length": 33.69, "x": 39.09, "y": -2.34, "rotation": -12.09 }, - { "name": "R-forearm", "parent": "R-arm", "length": 36.13, "x": 41.65, "y": 0.28, "rotation": 2.72 }, - { "name": "scalp", "parent": "head", "length": 31.94, "x": 129.34, "y": 15.1, "rotation": -29.89 }, - { "name": "hair1", "parent": "scalp", "length": 23, "x": 36.51, "y": 4.12, "rotation": 68.48 }, - { "name": "hair2", "parent": "hair1", "length": 23.49, "x": 29.03, "y": 1.58, "rotation": 59.55 } + { "name": "L-arm", "parent": "chest", "length": 32.66, "rotation": -121.22, "x": 24.63, "y": -16.69 }, + { "name": "L-thigh", "parent": "hip", "length": 29.76, "rotation": -81.94, "x": 17.31, "y": -5.19 }, + { "name": "L-foot", "parent": "L-thigh", "length": 37.25, "rotation": -6.29, "x": 37.34, "y": -1.78 }, + { "name": "L-forearm", "parent": "L-arm", "length": 33.68, "rotation": -12.09, "x": 39.09, "y": -2.33 }, + { "name": "R-arm", "parent": "chest", "length": 36.75, "rotation": 133.37, "x": 26, "y": 13.63 }, + { "name": "R-thigh", "parent": "hip", "length": 29.49, "rotation": -93.15, "x": -18.18, "y": -6.06 }, + { "name": "R-foot", "parent": "R-thigh", "length": 39.98, "rotation": -1.8, "x": 36.41, "y": 0.27 }, + { "name": "R-forearm", "parent": "R-arm", "length": 36.13, "rotation": 2.72, "x": 41.65, "y": 0.28 }, + { "name": "head", "parent": "chest", "length": 94.23, "rotation": -2.25, "x": 41.01, "y": -0.1 }, + { "name": "scalp", "parent": "head", "length": 31.94, "rotation": -29.89, "x": 129.34, "y": 15.1 }, + { "name": "hair1", "parent": "scalp", "length": 23, "rotation": 68.48, "x": 36.5, "y": 4.12 }, + { "name": "hair2", "parent": "hair1", "length": 23.49, "rotation": 59.55, "x": 29.03, "y": 1.58 } ], "slots": [ { "name": "R-arm", "bone": "R-arm", "attachment": "arm" }, @@ -30,10 +30,10 @@ "default": { "L-arm": { "arm": { - "type": "skinnedmesh", - "uvs": [ 1, 0.16417, 0.90367, 0.30177, 0.80735, 0.43937, 0.75345, 0.50663, 0.71536, 0.55416, 0.6656, 0.61625, 0.63233, 0.65777, 0.59417, 0.7054, 0.45366, 0.8527, 0.31315, 1, 0.15657, 1, 0, 1, 0, 0.71457, 0.13235, 0.59073, 0.2647, 0.46689, 0.34675, 0.39836, 0.39153, 0.36096, 0.43007, 0.32876, 0.4689, 0.29633, 0.52302, 0.25112, 0.59417, 0.19169, 0.72983, 0.09584, 0.86549, 0, 1, 0, 0.15702, 0.83582, 0.46721, 0.51561, 0.78995, 0.22527, 0.34029, 0.70958, 0.62889, 0.38429 ], + "type": "mesh", + "uvs": [ 1, 0.16417, 0.90367, 0.30177, 0.80735, 0.43937, 0.75345, 0.50663, 0.71536, 0.55416, 0.6656, 0.61624, 0.63233, 0.65777, 0.59416, 0.7054, 0.45366, 0.8527, 0.31314, 1, 0.15657, 1, 0, 1, 0, 0.71457, 0.13235, 0.59073, 0.2647, 0.46689, 0.34675, 0.39836, 0.39153, 0.36096, 0.43007, 0.32876, 0.4689, 0.29633, 0.52302, 0.25112, 0.59416, 0.19169, 0.72983, 0.09584, 0.86549, 0, 1, 0, 0.15702, 0.83582, 0.46721, 0.5156, 0.78995, 0.22527, 0.34029, 0.70958, 0.62888, 0.38429 ], "triangles": [ 10, 24, 9, 9, 27, 8, 9, 24, 27, 10, 11, 24, 11, 12, 24, 8, 27, 7, 12, 13, 24, 24, 13, 27, 13, 14, 27, 27, 25, 7, 25, 27, 14, 7, 25, 6, 6, 25, 5, 18, 4, 17, 28, 4, 18, 4, 28, 3, 15, 16, 25, 16, 17, 25, 25, 17, 5, 17, 4, 5, 3, 28, 2, 28, 26, 2, 2, 26, 1, 18, 19, 28, 19, 20, 28, 28, 20, 26, 1, 26, 0, 20, 21, 26, 26, 22, 0, 26, 21, 22, 22, 23, 0, 25, 14, 15 ], - "vertices": [ 1, 8, -11.38, 11.4, 1, 1, 8, 0.99, 11.79, 1, 1, 8, 13.36, 12.17, 1, 1, 8, 19.69, 11.97, 1, 2, 8, 24.16, 11.82, 0.91747, 11, -17.57, 10.72, 0.08252, 2, 8, 30, 11.63, 0.75238, 11, -11.82, 11.76, 0.24761, 2, 8, 33.91, 11.5, 0.44551, 11, -7.97, 12.46, 0.55448, 2, 8, 38.39, 11.36, 0.2127, 11, -3.56, 13.25, 0.78729, 2, 8, 53.17, 9.6, 0.07308, 11, 11.25, 14.64, 0.92691, 2, 8, 67.94999, 7.85, 0.00873, 11, 26.07, 16.03, 0.99126, 1, 11, 34.25, 8.51, 1, 1, 11, 42.44, 0.99, 1, 1, 11, 27.96, -14.77, 1, 2, 8, 50.32, -20.36, 0.05493, 11, 14.75, -15.25, 0.94506, 2, 8, 37.31, -18.06, 0.23231, 11, 1.55, -15.73, 0.76768, 2, 8, 29.75, -16.27, 0.47867, 11, -6.21, -15.58, 0.52132, 2, 8, 25.63, -15.3, 0.71242, 11, -10.43999, -15.49, 0.28757, 2, 8, 22.07, -14.47, 0.81875, 11, -14.09, -15.42, 0.18124, 2, 8, 18.5, -13.62, 0.9506, 11, -17.77, -15.34, 0.04939, 2, 8, 13.51, -12.45, 0.97879, 11, -22.89, -15.24, 0.0212, 2, 8, 6.95, -10.9, 0.99703, 11, -29.63, -15.11, 0.00296, 1, 8, -4.46999, -7.2, 1, 1, 8, -15.9, -3.49, 1, 1, 8, -21.42, 4.29, 1, 1, 11, 25.9, -0.52999, 1, 2, 8, 31.98, -4.21, 0.80128, 11, -6.55, -3.32, 0.19871, 1, 8, 0.97, 1.89, 1, 1, 11, 9.91, 1.29, 1, 1, 8, 17.31, -0.54, 1 ], + "vertices": [ 1, 4, -11.38, 11.4, 1, 1, 4, 0.99, 11.79, 1, 1, 4, 13.36, 12.17, 1, 1, 4, 19.69, 11.97, 1, 2, 4, 24.16, 11.82, 0.91747, 7, -17.57, 10.72, 0.08252, 2, 4, 30, 11.63, 0.75238, 7, -11.82, 11.76, 0.24761, 2, 4, 33.91, 11.5, 0.44551, 7, -7.97, 12.46, 0.55448, 2, 4, 38.39, 11.36, 0.2127, 7, -3.56, 13.25, 0.78729, 2, 4, 53.17, 9.6, 0.07308, 7, 11.25, 14.64, 0.92691, 2, 4, 67.94, 7.85, 0.00873, 7, 26.07, 16.03, 0.99126, 1, 7, 34.25, 8.51, 1, 1, 7, 42.44, 0.99, 1, 1, 7, 27.96, -14.77, 1, 2, 4, 50.32, -20.36, 0.05493, 7, 14.75, -15.25, 0.94506, 2, 4, 37.31, -18.06, 0.23231, 7, 1.55, -15.73, 0.76768, 2, 4, 29.75, -16.27, 0.47867, 7, -6.21, -15.58, 0.52132, 2, 4, 25.63, -15.3, 0.71242, 7, -10.43, -15.49, 0.28757, 2, 4, 22.07, -14.47, 0.81875, 7, -14.09, -15.42, 0.18124, 2, 4, 18.5, -13.62, 0.9506, 7, -17.77, -15.34, 0.04939, 2, 4, 13.51, -12.45, 0.97879, 7, -22.89, -15.24, 0.0212, 2, 4, 6.95, -10.9, 0.99703, 7, -29.63, -15.11, 0.00296, 1, 4, -4.46, -7.2, 1, 1, 4, -15.9, -3.49, 1, 1, 4, -21.42, 4.29, 1, 1, 7, 25.9, -0.52, 1, 2, 4, 31.98, -4.21, 0.80128, 7, -6.55, -3.32, 0.19871, 1, 4, 0.97, 1.89, 1, 1, 7, 9.91, 1.29, 1, 1, 4, 17.31, -0.54, 1 ], "hull": 24, "edges": [ 0, 2, 2, 4, 4, 6, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 38, 40, 40, 42, 42, 44, 44, 46, 46, 0, 10, 34, 30, 32, 32, 34, 10, 12, 12, 14, 6, 8, 8, 10, 34, 36, 36, 38, 8, 36 ], "width": 71, @@ -42,10 +42,10 @@ }, "L-leg": { "leg": { - "type": "skinnedmesh", - "uvs": [ 1, 0.23128, 1, 0.29497, 1, 0.37025, 1, 0.44552, 1, 0.50921, 1, 0.65975, 1, 0.71765, 1, 0.87399, 0.73923, 1, 0.2297, 1, 0, 0.89715, 0, 0.64817, 0.01978, 0.59915, 0.08516, 0.43711, 0.10541, 0.38693, 0.13057, 0.32458, 0.15317, 0.26858, 0.17799, 0.20706, 0.26155, 0, 1, 0, 0.61185, 0.12127, 0.51631, 0.54395 ], + "type": "mesh", + "uvs": [ 1, 0.23128, 1, 0.29497, 1, 0.37025, 1, 0.44552, 1, 0.50921, 1, 0.65975, 1, 0.71765, 1, 0.87399, 0.73923, 1, 0.2297, 1, 0, 0.89715, 0, 0.64817, 0.01978, 0.59915, 0.08516, 0.43711, 0.10541, 0.38693, 0.13056, 0.32458, 0.15317, 0.26857, 0.17799, 0.20706, 0.26155, 0, 1, 0, 0.61185, 0.12127, 0.5163, 0.54395 ], "triangles": [ 21, 13, 4, 21, 4, 5, 12, 13, 21, 12, 21, 5, 12, 5, 6, 11, 12, 6, 9, 10, 11, 11, 6, 9, 6, 8, 9, 7, 8, 6, 20, 18, 19, 20, 19, 0, 17, 18, 20, 17, 20, 0, 17, 0, 1, 16, 17, 1, 16, 1, 2, 15, 16, 2, 15, 2, 3, 14, 15, 3, 14, 3, 4, 13, 14, 4 ], - "vertices": [ 1, 2, 11.02, 15.14, 1, 1, 2, 17.31, 14.75, 1, 2, 2, 24.75, 14.29, 0.95576, 5, -14.28, 14.6, 0.04423, 2, 2, 32.18999, 13.82, 0.71873, 5, -6.84, 14.95, 0.28126, 2, 2, 38.48, 13.43, 0.37176, 5, -0.54, 15.25, 0.62822, 2, 2, 53.36, 12.51, 0.00735, 5, 14.34, 15.96, 0.99264, 1, 5, 20.06, 16.23, 1, 1, 5, 35.52, 16.96999, 1, 1, 5, 48.43, 8.18, 1, 1, 5, 49.3, -10.13, 1, 1, 5, 39.52, -18.87, 1, 2, 2, 49.98, -23.34, 0.00312, 5, 14.9, -20.04, 0.99687, 2, 2, 45.18, -22.33, 0.02542, 5, 10.02, -19.56, 0.97457, 2, 2, 29.31, -18.99, 0.4709, 5, -6.1, -17.98, 0.52909, 2, 2, 24.4, -17.95, 0.69967, 5, -11.1, -17.48, 0.30032, 2, 2, 18.29, -16.66, 0.89625, 5, -17.31, -16.87, 0.10374, 2, 2, 12.81, -15.51, 0.97789, 5, -22.89, -16.32, 0.0221, 1, 2, 6.79, -14.24, 1, 1, 2, -13.48, -9.96, 1, 1, 2, -11.83, 16.56, 1, 1, 2, -0.71, 1.87, 1, 1, 5, 3.71, -1.97, 1 ], + "vertices": [ 1, 5, 11.02, 15.14, 1, 1, 5, 17.31, 14.75, 1, 2, 5, 24.75, 14.29, 0.95576, 6, -14.28, 14.6, 0.04423, 2, 5, 32.18, 13.82, 0.71873, 6, -6.84, 14.95, 0.28126, 2, 5, 38.48, 13.43, 0.37176, 6, -0.54, 15.25, 0.62822, 2, 5, 53.36, 12.51, 0.00735, 6, 14.34, 15.96, 0.99264, 1, 6, 20.06, 16.23, 1, 1, 6, 35.52, 16.95999, 1, 1, 6, 48.43, 8.18, 1, 1, 6, 49.3, -10.13, 1, 1, 6, 39.52, -18.87, 1, 2, 5, 49.98, -23.34, 0.00312, 6, 14.9, -20.04, 0.99687, 2, 5, 45.18, -22.33, 0.02542, 6, 10.02, -19.56, 0.97457, 2, 5, 29.31, -18.99, 0.4709, 6, -6.1, -17.98, 0.52909, 2, 5, 24.4, -17.95, 0.69967, 6, -11.1, -17.48, 0.30032, 2, 5, 18.29, -16.66, 0.89625, 6, -17.31, -16.87, 0.10374, 2, 5, 12.81, -15.51, 0.97789, 6, -22.89, -16.32, 0.0221, 1, 5, 6.79, -14.24, 1, 1, 5, -13.48, -9.96, 1, 1, 5, -11.83, 16.56, 1, 1, 5, -0.71, 1.87, 1, 1, 6, 3.71, -1.97, 1 ], "hull": 20, "edges": [ 36, 38, 20, 22, 18, 20, 16, 18, 16, 14, 22, 24, 24, 10, 10, 12, 12, 14, 12, 22, 24, 26, 10, 8, 26, 8, 8, 6, 26, 28, 6, 28, 28, 30, 6, 4, 30, 4, 4, 2, 30, 32, 2, 32, 32, 34, 34, 36, 2, 0, 0, 38, 34, 0 ], "width": 36, @@ -54,10 +54,10 @@ }, "R-arm": { "arm": { - "type": "skinnedmesh", - "uvs": [ 1, 0.16417, 0.90367, 0.30177, 0.80735, 0.43937, 0.75345, 0.50663, 0.71536, 0.55416, 0.6656, 0.61625, 0.63233, 0.65777, 0.59417, 0.7054, 0.45366, 0.8527, 0.31315, 1, 0.15657, 1, 0, 1, 0, 0.71457, 0.13235, 0.59073, 0.2647, 0.46689, 0.34675, 0.39836, 0.39153, 0.36096, 0.43007, 0.32876, 0.4689, 0.29633, 0.52302, 0.25112, 0.59417, 0.19169, 0.72983, 0.09584, 0.86549, 0, 1, 0, 0.15702, 0.83582, 0.46721, 0.51561, 0.78995, 0.22527, 0.34029, 0.70958, 0.62889, 0.38429 ], + "type": "mesh", + "uvs": [ 1, 0.16417, 0.90367, 0.30177, 0.80735, 0.43937, 0.75345, 0.50663, 0.71536, 0.55416, 0.6656, 0.61624, 0.63233, 0.65777, 0.59416, 0.7054, 0.45366, 0.8527, 0.31314, 1, 0.15657, 1, 0, 1, 0, 0.71457, 0.13235, 0.59073, 0.2647, 0.46689, 0.34675, 0.39836, 0.39153, 0.36096, 0.43007, 0.32876, 0.4689, 0.29633, 0.52302, 0.25112, 0.59416, 0.19169, 0.72983, 0.09584, 0.86549, 0, 1, 0, 0.15702, 0.83582, 0.46721, 0.5156, 0.78995, 0.22527, 0.34029, 0.70958, 0.62888, 0.38429 ], "triangles": [ 10, 24, 9, 9, 27, 8, 9, 24, 27, 10, 11, 24, 11, 12, 24, 8, 27, 7, 12, 13, 24, 24, 13, 27, 13, 14, 27, 27, 25, 7, 25, 14, 15, 25, 27, 14, 7, 25, 6, 22, 23, 0, 26, 22, 0, 1, 26, 0, 6, 25, 5, 18, 4, 17, 28, 4, 18, 4, 28, 3, 15, 16, 25, 16, 17, 25, 25, 17, 5, 17, 4, 5, 3, 28, 2, 28, 26, 2, 2, 26, 1, 18, 19, 28, 19, 20, 28, 28, 20, 26, 20, 21, 26, 26, 21, 22 ], - "vertices": [ 1, 9, -6.97, 5.02, 1, 1, 9, 5.06, 7.92, 1, 1, 9, 17.09, 10.82, 1, 2, 9, 23.33, 11.91, 0.99563, 12, -17.74, 12.48, 0.00436, 2, 9, 27.74, 12.68, 0.95467, 12, -13.3, 13.04, 0.04532, 2, 9, 33.5, 13.68, 0.75827, 12, -7.5, 13.77, 0.24172, 2, 9, 37.34999, 14.35, 0.53963, 12, -3.63, 14.26, 0.46036, 2, 9, 41.75999, 15.12, 0.29362, 12, 0.81, 14.82, 0.70637, 2, 9, 56.59, 16.42, 3.9E-4, 12, 15.69, 15.4, 0.9996, 1, 12, 30.56, 15.99, 1, 1, 12, 38.33, 8.04, 1, 1, 12, 46.1, 0.1, 1, 1, 12, 30.79, -14.86, 1, 2, 9, 59.92, -13.5, 4.7E-4, 12, 17.58, -14.63, 0.99952, 2, 9, 46.71, -13.9, 0.17384, 12, 4.37, -14.41, 0.82615, 2, 9, 38.93999, -13.69, 0.56829, 12, -3.36, -13.83, 0.4317, 2, 9, 34.71, -13.58, 0.79613, 12, -7.59, -13.52, 0.20386, 2, 9, 31.06, -13.49, 0.92361, 12, -11.23, -13.25, 0.07638, 2, 9, 27.38, -13.39, 0.98277, 12, -14.9, -12.98, 0.01722, 1, 9, 22.26, -13.26, 1, 1, 9, 15.53, -13.08, 1, 1, 9, 3.58, -11.78, 1, 1, 9, -8.35999, -10.49, 1, 1, 9, -15.36, -3.99, 1, 1, 12, 29.5, -0.52999, 1, 2, 9, 38.66999, -1.43, 0.57762, 12, -3.06, -1.57, 0.42237, 1, 9, 7.06, -1.77, 1, 1, 12, 13.64, 2.15, 1, 1, 9, 23.56, -0.82, 1 ], + "vertices": [ 1, 8, -6.97, 5.02, 1, 1, 8, 5.06, 7.92, 1, 1, 8, 17.09, 10.82, 1, 2, 8, 23.33, 11.91, 0.99563, 11, -17.74, 12.48, 0.00436, 2, 8, 27.74, 12.68, 0.95467, 11, -13.3, 13.04, 0.04532, 2, 8, 33.5, 13.68, 0.75827, 11, -7.5, 13.77, 0.24172, 2, 8, 37.34, 14.35, 0.53963, 11, -3.63, 14.26, 0.46036, 2, 8, 41.75, 15.12, 0.29362, 11, 0.81, 14.82, 0.70637, 2, 8, 56.59, 16.42, 3.9E-4, 11, 15.69, 15.4, 0.9996, 1, 11, 30.56, 15.99, 1, 1, 11, 38.33, 8.04, 1, 1, 11, 46.1, 0.1, 1, 1, 11, 30.79, -14.86, 1, 2, 8, 59.92, -13.5, 4.7E-4, 11, 17.58, -14.63, 0.99952, 2, 8, 46.71, -13.9, 0.17384, 11, 4.37, -14.41, 0.82615, 2, 8, 38.93, -13.69, 0.56829, 11, -3.36, -13.83, 0.4317, 2, 8, 34.71, -13.58, 0.79613, 11, -7.59, -13.52, 0.20386, 2, 8, 31.06, -13.49, 0.92361, 11, -11.23, -13.25, 0.07638, 2, 8, 27.38, -13.39, 0.98277, 11, -14.9, -12.98, 0.01722, 1, 8, 22.26, -13.26, 1, 1, 8, 15.53, -13.08, 1, 1, 8, 3.58, -11.78, 1, 1, 8, -8.35, -10.49, 1, 1, 8, -15.36, -3.99, 1, 1, 11, 29.5, -0.52, 1, 2, 8, 38.66, -1.43, 0.57762, 11, -3.06, -1.57, 0.42237, 1, 8, 7.06, -1.77, 1, 1, 11, 13.64, 2.15, 1, 1, 8, 23.56, -0.82, 1 ], "hull": 24, "edges": [ 0, 2, 2, 4, 4, 6, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 38, 40, 40, 42, 42, 44, 44, 46, 46, 0, 10, 34, 30, 32, 32, 34, 10, 12, 12, 14, 6, 8, 8, 10, 34, 36, 36, 38, 8, 36 ], "width": 71, @@ -66,10 +66,10 @@ }, "R-leg": { "leg": { - "type": "skinnedmesh", - "uvs": [ 1, 0.23128, 1, 0.29497, 1, 0.37025, 1, 0.44552, 1, 0.50921, 1, 0.65975, 1, 0.71765, 1, 0.87399, 0.73923, 1, 0.2297, 1, 0, 0.89715, 0, 0.64817, 0.01978, 0.59915, 0.08516, 0.43711, 0.10541, 0.38693, 0.13057, 0.32458, 0.15317, 0.26858, 0.17799, 0.20706, 0.26155, 0, 1, 0, 0.61185, 0.12127, 0.51631, 0.54395 ], + "type": "mesh", + "uvs": [ 1, 0.23128, 1, 0.29497, 1, 0.37025, 1, 0.44552, 1, 0.50921, 1, 0.65975, 1, 0.71765, 1, 0.87399, 0.73923, 1, 0.2297, 1, 0, 0.89715, 0, 0.64817, 0.01978, 0.59915, 0.08516, 0.43711, 0.10541, 0.38693, 0.13056, 0.32458, 0.15317, 0.26857, 0.17799, 0.20706, 0.26155, 0, 1, 0, 0.61185, 0.12127, 0.5163, 0.54395 ], "triangles": [ 21, 13, 4, 21, 4, 5, 12, 13, 21, 12, 21, 5, 12, 5, 6, 11, 12, 6, 9, 10, 11, 11, 6, 9, 6, 8, 9, 7, 8, 6, 20, 18, 19, 20, 19, 0, 17, 18, 20, 17, 20, 0, 17, 0, 1, 16, 17, 1, 16, 1, 2, 15, 16, 2, 15, 2, 3, 14, 15, 3, 14, 3, 4, 13, 14, 4 ], - "vertices": [ 1, 3, 7.41, 14.89, 1, 2, 3, 13.7, 15.23, 0.99431, 6, -23.16, 14.24, 0.00568, 2, 3, 21.14, 15.64, 0.9183, 6, -15.74, 14.88, 0.08169, 2, 3, 28.58, 16.04999, 0.65731, 6, -8.31, 15.53, 0.34268, 2, 3, 34.88, 16.4, 0.33128, 6, -2.03, 16.07, 0.66871, 2, 3, 49.76, 17.21999, 0.004, 6, 12.81, 17.36, 0.99598, 1, 6, 18.52, 17.85, 1, 2, 3, 70.94, 18.39, 0, 6, 33.93999, 19.19, 0.99999, 2, 3, 83.91, 9.7, 0, 6, 47.18, 10.92, 0.99999, 2, 3, 84.92, -8.60999, 0, 6, 48.76, -7.35, 1, 2, 3, 75.21, -17.42, 0, 6, 39.33, -16.46999, 1, 2, 3, 50.6, -18.78, 0.01347, 6, 14.78, -18.6, 0.98652, 2, 3, 45.71, -18.34, 0.05686, 6, 9.88, -18.31, 0.94313, 2, 3, 29.56, -16.87, 0.66681, 6, -6.3, -17.35, 0.33318, 2, 3, 24.56, -16.41, 0.86313, 6, -11.31, -17.04999, 0.13686, 2, 3, 18.35, -15.85, 0.97672, 6, -17.54, -16.68, 0.02327, 2, 3, 12.77, -15.34, 0.99935, 6, -23.13, -16.35, 6.4E-4, 1, 3, 6.64, -14.78, 1, 2, 3, -13.98, -12.91, 0.99999, 6, -49.96, -14.76, 0, 2, 3, -15.45, 13.63, 0.99999, 6, -52.25, 11.72, 0, 2, 3, -2.69, 0.33, 0.99999, 6, -39.09, -1.16, 0, 2, 3, 39.27, -0.79, 0.02734, 6, 2.89, -0.97, 0.97265 ], + "vertices": [ 1, 9, 7.41, 14.89, 1, 2, 9, 13.7, 15.23, 0.99431, 10, -23.16, 14.24, 0.00568, 2, 9, 21.14, 15.64, 0.9183, 10, -15.74, 14.88, 0.08169, 2, 9, 28.58, 16.04, 0.65731, 10, -8.31, 15.53, 0.34268, 2, 9, 34.88, 16.4, 0.33128, 10, -2.03, 16.07, 0.66871, 2, 9, 49.76, 17.20999, 0.004, 10, 12.81, 17.36, 0.99598, 1, 10, 18.52, 17.85, 1, 1, 10, 33.93, 19.19, 0.99999, 1, 10, 47.18, 10.92, 0.99999, 1, 10, 48.76, -7.35, 1, 1, 10, 39.33, -16.45999, 1, 2, 9, 50.6, -18.78, 0.01347, 10, 14.78, -18.6, 0.98652, 2, 9, 45.71, -18.34, 0.05686, 10, 9.88, -18.31, 0.94313, 2, 9, 29.56, -16.87, 0.66681, 10, -6.3, -17.35, 0.33318, 2, 9, 24.56, -16.41, 0.86313, 10, -11.31, -17.04, 0.13686, 2, 9, 18.35, -15.85, 0.97672, 10, -17.54, -16.68, 0.02327, 2, 9, 12.77, -15.34, 0.99935, 10, -23.13, -16.35, 6.4E-4, 1, 9, 6.64, -14.78, 1, 1, 9, -13.98, -12.91, 0.99999, 1, 9, -15.45, 13.63, 0.99999, 1, 9, -2.69, 0.33, 0.99999, 2, 9, 39.27, -0.79, 0.02734, 10, 2.89, -0.97, 0.97265 ], "hull": 20, "edges": [ 36, 38, 20, 22, 18, 20, 16, 18, 16, 14, 22, 24, 24, 10, 10, 12, 12, 14, 12, 22, 24, 26, 10, 8, 26, 8, 8, 6, 26, 28, 6, 28, 28, 30, 6, 4, 30, 4, 4, 2, 30, 32, 2, 32, 32, 34, 34, 36, 2, 0, 0, 38, 34, 0 ], "width": 36, @@ -78,10 +78,10 @@ }, "head": { "head": { - "type": "skinnedmesh", - "uvs": [ 0.60755, 0.01863, 0.64145, 0.03354, 0.70226, 0.06028, 0.76687, 0.08869, 0.80695, 0.14523, 0.84157, 0.19407, 1, 0.41294, 1, 0.78561, 0.67348, 1, 0.38213, 1, 0.13934, 0.8937, 0.07948, 0.78807, 0.05898, 0.75189, 0, 0.6478, 0, 0.40213, 0.15055, 0.27783, 0.25631, 0.21733, 0.28424, 0.20136, 0.31116, 0.18596, 0.32033, 0.16739, 0.32984, 0.14813, 0.3317, 0.12797, 0.33358, 0.1076, 0.29622, 0.08869, 0.21778, 0.06977, 0.2514, 0.03194, 0.32658, 0.01699, 0.3752, 0.00732, 0.41202, 0, 0.45684, 0, 0.49046, 0, 0.53154, 0, 0.56516, 0, 0.55022, 0.1049, 0.46057, 0.06437, 0.38587, 0.05086, 0.31116, 0.04815, 0.54649, 0.17515, 0.35972, 0.28864, 0.14308, 0.41294, 0.13187, 0.57777, 0.24766, 0.43185, 0.43816, 0.37511, 0.59878, 0.3616, 0.78181, 0.43726, 0.8976, 0.53994, 0.87616, 0.37786 ], - "triangles": [ 36, 25, 26, 35, 27, 28, 23, 25, 36, 24, 25, 23, 26, 35, 36, 35, 26, 27, 22, 36, 35, 23, 36, 22, 28, 29, 34, 35, 28, 34, 21, 35, 34, 35, 21, 22, 34, 29, 30, 33, 31, 32, 33, 32, 0, 31, 34, 30, 34, 20, 21, 31, 33, 34, 37, 34, 33, 1, 33, 0, 2, 33, 1, 33, 2, 37, 37, 20, 34, 37, 38, 20, 19, 20, 38, 18, 19, 38, 17, 18, 38, 2, 4, 37, 4, 2, 3, 43, 4, 5, 43, 37, 4, 42, 38, 37, 43, 42, 37, 6, 46, 5, 44, 43, 5, 39, 14, 15, 41, 15, 16, 39, 15, 41, 16, 17, 38, 41, 16, 38, 41, 38, 42, 46, 44, 5, 45, 46, 6, 44, 46, 45, 40, 14, 39, 40, 39, 41, 13, 14, 40, 12, 13, 40, 45, 6, 7, 11, 12, 40, 9, 10, 40, 11, 40, 10, 9, 41, 42, 9, 40, 41, 8, 9, 42, 42, 43, 8, 44, 8, 43, 8, 44, 45, 8, 45, 7 ], - "vertices": [ 1, 14, 17.03, -22.65, 1, 3, 10, 187.59, -11.93, 0.00181, 13, 63.97, 5.58, 0.0238, 14, 11.42, -25.01, 0.97437, 2, 10, 182.37, -21.52, 0.62993, 14, 1.35, -29.25, 0.37005, 3, 10, 176.82, -31.71, 0.82289, 13, 64.49, -16.93, 0.07936, 14, -9.33, -33.75, 0.09774, 3, 10, 165.13, -38.41999, 0.8635, 13, 57.69, -28.57, 0.08155, 14, -22.66, -31.7, 0.05493, 3, 10, 155.03, -44.22, 0.89858, 13, 51.83, -38.63, 0.08345, 14, -34.16999, -29.93, 0.01796, 1, 10, 109.8, -70.69999, 1, 1, 10, 30.83, -74.44, 1, 1, 10, -16.95999, -26.54, 1, 1, 10, -19.08, 18.11, 1, 1, 10, 1.67, 56.39, 1, 1, 10, 23.62, 66.62999, 1, 1, 10, 31.14, 70.12999, 1, 1, 10, 52.77, 80.22, 1, 2, 10, 104.83, 82.69, 0.99073, 13, -54.92, 46.39, 0.00926, 3, 10, 132.26, 60.86, 0.88784, 13, -20.26, 41.13, 0.11168, 15, 48.07, 46.13, 4.7E-4, 4, 10, 145.85, 45.25, 0.85196, 13, -0.71, 34.37, 0.12365, 14, 14.48, 45.72, 0.00832, 15, 30.69, 34.9, 0.01603, 4, 10, 149.43, 41.13, 0.84249, 13, 4.44999, 32.58, 0.12681, 14, 14.71, 40.25999, 0.01053, 15, 26.1, 31.93, 0.02015, 4, 10, 152.89, 37.16, 0.83335, 13, 9.43, 30.86, 0.12986, 14, 14.94, 35, 0.01265, 15, 21.68, 29.07, 0.02412, 4, 10, 156.9, 35.93999, 0.60487, 13, 13.5, 31.8, 0.21602, 14, 17.31, 31.55, 0.05833, 15, 19.9, 25.28, 0.12076, 4, 10, 161.05, 34.68, 0.368, 13, 17.73, 32.77, 0.30535, 14, 19.76, 27.97, 0.10568, 15, 18.06, 21.35, 0.22096, 4, 10, 165.33, 34.59999, 0.18496, 13, 21.49, 34.83, 0.23674, 14, 23.06, 25.23, 0.12789, 15, 17.37, 17.12, 0.45039, 3, 13, 25.28, 36.91999, 0.1674, 14, 26.39, 22.46, 0.15034, 15, 16.67, 12.85, 0.68225, 3, 13, 25.58, 43.91, 0.03309, 14, 33, 24.76, 0.02128, 15, 21.99, 8.31, 0.94562, 1, 15, 33.59999, 3.17, 1, 1, 15, 27.7, -4.32, 1, 1, 15, 15.91, -6.38, 1, 1, 15, 8.29, -7.71, 1, 1, 15, 2.51, -8.72, 1, 2, 14, 33.79, -6.23, 0.33703, 15, -4.32, -8.06, 0.66296, 2, 14, 30.77, -10.41, 0.58777, 15, -9.46, -7.57, 0.41222, 2, 14, 27.07, -15.52, 0.81446, 15, -15.74, -6.97, 0.18553, 2, 14, 24.05, -19.7, 0.97838, 15, -20.87, -6.48, 0.02161, 1, 14, 7.36, -4.8, 1, 1, 14, 22.39, 1.29999, 1, 1, 15, 7.54, 1.63, 1, 3, 13, 34.06, 46.61, 0.01617, 14, 38.62, 17.86, 0.00459, 15, 18.89, -0.02, 0.97922, 1, 13, 30.81, 1.67, 1, 3, 10, 131.49, 28.69, 0.99827, 14, -7.07, 41.73, 7.0E-5, 15, 16.33, 51.46, 0.00165, 1, 10, 103.58, 60.65, 1, 1, 10, 68.57, 60.71, 1, 1, 10, 100.33, 44.43, 1, 1, 10, 113.74, 15.79, 1, 1, 10, 117.77, -8.68, 1, 1, 10, 103.06, -37.5, 1, 1, 10, 82.15, -56.28, 1, 3, 10, 116.33, -51.36, 0.97904, 13, 21.84, -64.11, 0.01724, 14, -68.86, -11.37, 0.00371 ], + "type": "mesh", + "uvs": [ 0.60755, 0.01863, 0.64145, 0.03354, 0.70226, 0.06028, 0.76687, 0.08869, 0.80695, 0.14523, 0.84157, 0.19407, 1, 0.41294, 1, 0.78561, 0.67348, 1, 0.38213, 1, 0.13934, 0.8937, 0.07948, 0.78807, 0.05898, 0.75189, 0, 0.6478, 0, 0.40213, 0.15054, 0.27783, 0.2563, 0.21733, 0.28424, 0.20136, 0.31116, 0.18596, 0.32033, 0.16739, 0.32984, 0.14813, 0.3317, 0.12797, 0.33358, 0.1076, 0.29622, 0.08869, 0.21778, 0.06977, 0.2514, 0.03193, 0.32657, 0.01699, 0.3752, 0.00732, 0.41202, 0, 0.45684, 0, 0.49046, 0, 0.53153, 0, 0.56515, 0, 0.55022, 0.1049, 0.46057, 0.06437, 0.38587, 0.05086, 0.31116, 0.04815, 0.54649, 0.17515, 0.35972, 0.28864, 0.14308, 0.41294, 0.13187, 0.57777, 0.24766, 0.43185, 0.43816, 0.37511, 0.59877, 0.3616, 0.78181, 0.43726, 0.8976, 0.53994, 0.87616, 0.37786 ], + "triangles": [ 36, 25, 26, 35, 27, 28, 23, 25, 36, 24, 25, 23, 26, 35, 36, 35, 26, 27, 22, 36, 35, 23, 36, 22, 28, 29, 34, 35, 28, 34, 21, 35, 34, 35, 21, 22, 37, 20, 34, 37, 38, 20, 19, 20, 38, 18, 19, 38, 17, 18, 38, 2, 4, 37, 4, 2, 3, 43, 4, 5, 43, 37, 4, 42, 38, 37, 43, 42, 37, 6, 46, 5, 44, 43, 5, 39, 14, 15, 41, 15, 16, 39, 15, 41, 16, 17, 38, 41, 16, 38, 41, 38, 42, 46, 44, 5, 45, 46, 6, 44, 46, 45, 40, 14, 39, 40, 39, 41, 13, 14, 40, 12, 13, 40, 45, 6, 7, 11, 12, 40, 9, 10, 40, 11, 40, 10, 9, 41, 42, 9, 40, 41, 8, 9, 42, 42, 43, 8, 44, 8, 43, 8, 44, 45, 8, 45, 7, 34, 29, 30, 33, 31, 32, 33, 32, 0, 31, 34, 30, 34, 20, 21, 31, 33, 34, 37, 34, 33, 1, 33, 0, 2, 33, 1, 33, 2, 37 ], + "vertices": [ 1, 14, 17.03, -22.65, 1, 3, 14, 11.42, -25.01, 0.97437, 12, 187.59, -11.93, 0.00181, 13, 63.97, 5.58, 0.0238, 2, 14, 1.35, -29.25, 0.37005, 12, 182.37, -21.52, 0.62993, 3, 14, -9.33, -33.75, 0.09774, 12, 176.82, -31.71, 0.82289, 13, 64.49, -16.93, 0.07936, 3, 14, -22.66, -31.7, 0.05493, 12, 165.13, -38.41, 0.8635, 13, 57.69, -28.57, 0.08155, 3, 14, -34.16, -29.93, 0.01796, 12, 155.03, -44.22, 0.89858, 13, 51.83, -38.63, 0.08345, 1, 12, 109.8, -70.69, 1, 1, 12, 30.83, -74.44, 1, 1, 12, -16.95, -26.54, 1, 1, 12, -19.08, 18.11, 1, 1, 12, 1.67, 56.39, 1, 1, 12, 23.62, 66.62, 1, 1, 12, 31.14, 70.12, 1, 1, 12, 52.77, 80.22, 1, 2, 12, 104.83, 82.69, 0.99073, 13, -54.92, 46.39, 0.00926, 3, 12, 132.25, 60.86, 0.88784, 13, -20.26, 41.13, 0.11168, 15, 48.07, 46.13, 4.7E-4, 4, 14, 14.48, 45.72, 0.00832, 12, 145.85, 45.25, 0.85196, 13, -0.71, 34.37, 0.12365, 15, 30.69, 34.9, 0.01603, 4, 14, 14.71, 40.25, 0.01053, 12, 149.42, 41.13, 0.84249, 13, 4.44, 32.58, 0.12681, 15, 26.1, 31.93, 0.02015, 4, 14, 14.94, 35, 0.01265, 12, 152.89, 37.16, 0.83335, 13, 9.43, 30.86, 0.12986, 15, 21.68, 29.07, 0.02412, 4, 14, 17.31, 31.55, 0.05833, 12, 156.89, 35.93, 0.60487, 13, 13.5, 31.8, 0.21602, 15, 19.9, 25.28, 0.12076, 4, 14, 19.76, 27.97, 0.10568, 12, 161.05, 34.68, 0.368, 13, 17.73, 32.77, 0.30535, 15, 18.06, 21.35, 0.22096, 4, 14, 23.06, 25.23, 0.12789, 12, 165.33, 34.59, 0.18496, 13, 21.49, 34.83, 0.23674, 15, 17.37, 17.12, 0.45039, 3, 14, 26.39, 22.46, 0.15034, 13, 25.28, 36.91, 0.1674, 15, 16.67, 12.85, 0.68225, 3, 14, 33, 24.76, 0.02128, 13, 25.58, 43.91, 0.03309, 15, 21.99, 8.31, 0.94562, 1, 15, 33.59, 3.17, 1, 1, 15, 27.7, -4.32, 1, 1, 15, 15.91, -6.38, 1, 1, 15, 8.29, -7.71, 1, 1, 15, 2.51, -8.72, 1, 2, 14, 33.79, -6.23, 0.33703, 15, -4.32, -8.06, 0.66296, 2, 14, 30.77, -10.41, 0.58777, 15, -9.46, -7.57, 0.41222, 2, 14, 27.07, -15.52, 0.81446, 15, -15.74, -6.97, 0.18553, 2, 14, 24.05, -19.7, 0.97838, 15, -20.87, -6.48, 0.02161, 1, 14, 7.36, -4.8, 1, 1, 14, 22.39, 1.29, 1, 1, 15, 7.54, 1.63, 1, 3, 14, 38.62, 17.86, 0.00459, 13, 34.06, 46.61, 0.01617, 15, 18.89, -0.02, 0.97922, 1, 13, 30.81, 1.67, 1, 3, 14, -7.07, 41.73, 7.0E-5, 12, 131.49, 28.69, 0.99827, 15, 16.33, 51.46, 0.00165, 1, 12, 103.58, 60.65, 1, 1, 12, 68.57, 60.71, 1, 1, 12, 100.33, 44.43, 1, 1, 12, 113.74, 15.79, 1, 1, 12, 117.77, -8.68, 1, 1, 12, 103.06, -37.5, 1, 1, 12, 82.15, -56.28, 1, 3, 14, -68.86, -11.37, 0.00371, 12, 116.33, -51.36, 0.97904, 13, 21.84, -64.11, 0.01724 ], "hull": 33, "edges": [ 16, 14, 16, 18, 18, 20, 26, 28, 28, 30, 44, 46, 46, 48, 48, 50, 14, 12, 10, 12, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 2, 0, 0, 64, 2, 4, 4, 6, 20, 22, 22, 24, 24, 26, 80, 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 12, 80, 26, 34, 36, 30, 32, 32, 34, 36, 38, 38, 40, 40, 42, 42, 44, 12, 92, 6, 8, 8, 10 ], "width": 136, @@ -89,19 +89,21 @@ }, "ragdoll": { "type": "boundingbox", - "vertices": [ -14.19607, -1.49276, -7.91528, -29.96175, 23.08404, -59.72487, 60.33676, -65.35634, 95.9493, -71.06551, 150.43092, -41.36028, 163.83543, 5.30173, 162.47502, 34.00399, 115.66124, 67.94895, 85.4782, 80.49074, 48.92517, 71.36101, 11.9019, 54.81194, -9.19035, 31.6207 ] + "vertexCount": 13, + "vertices": [ -14.19, -1.49, -7.91, -29.96, 23.08, -59.72, 60.33, -65.35, 95.94, -71.06, 150.43, -41.36, 163.83, 5.3, 162.47, 34, 115.66, 67.94, 85.47, 80.49, 48.92, 71.36, 11.9, 54.81, -9.18999, 31.62 ] } }, "torso": { "ragdoll": { "type": "boundingbox", - "vertices": [ 0.62625, -28.95774, 35.77471, -25.70054, 37.14599, 27.3694, 1.96002, 28.88128 ] + "vertexCount": 4, + "vertices": [ 0.62, -28.95, 35.77, -25.7, 37.14, 27.36, 1.96, 28.88 ] }, "torso": { - "type": "skinnedmesh", - "uvs": [ 0.87097, 0.13351, 1, 0.26702, 1, 0.45027, 1, 0.63351, 1, 0.81675, 1, 1, 0.75, 1, 0.5, 1, 0.25, 1, 0, 1, 0, 0.72402, 0, 0.44804, 0.09822, 0.22402, 0.19645, 0, 0.4692, 0, 0.74194, 0, 0.58868, 0.13131, 0.40099, 0.46062, 0.83539, 0.50155, 0.42394, 0.26749, 0.36228, 0.63165, 0.58838, 0.76773, 0.71972, 0.25772, 0.84057, 0.76485, 0.57726, 0.50305, 0.24069, 0.44015, 0.19158, 0.80079, 0.29694, 0.12288, 0.37842, 0.84005, 0.71037, 0.63432, 0.15888, 0.60895 ], - "triangles": [ 8, 26, 28, 8, 28, 7, 9, 26, 8, 9, 10, 26, 23, 4, 5, 6, 23, 5, 7, 21, 6, 6, 21, 23, 23, 3, 4, 22, 19, 16, 22, 0, 1, 19, 14, 16, 19, 27, 14, 22, 15, 0, 22, 16, 15, 12, 13, 27, 16, 14, 15, 27, 13, 14, 22, 24, 19, 1, 18, 22, 25, 27, 19, 25, 12, 27, 17, 19, 24, 24, 22, 18, 17, 25, 19, 7, 28, 21, 26, 20, 28, 28, 20, 21, 10, 30, 26, 26, 30, 20, 20, 24, 21, 21, 29, 23, 21, 24, 29, 29, 18, 23, 23, 18, 3, 10, 11, 30, 29, 24, 18, 18, 2, 3, 30, 25, 20, 20, 17, 24, 20, 25, 17, 30, 11, 25, 2, 18, 1, 11, 12, 25 ], - "vertices": [ 1, 7, 31.68, -23.15, 1, 2, 4, 57.14, -30.52, 0.39506, 7, 19.06, -31.25, 0.60493, 2, 4, 39.73, -30.66, 0.60493, 7, 1.66, -31.38, 0.39506, 2, 4, 22.33, -30.79, 0.79012, 7, -15.74, -31.52, 0.20987, 1, 2, -7.76, 14.88, 1, 1, 2, 9.47, 12.45, 1, 1, 2, 7.3, -2.89, 1, 2, 2, 5.13, -18.24, 0.488, 3, 5.76, 18.5, 0.51199, 2, 2, 2.96, -33.59, 0.16266, 3, 6.61, 3.02, 0.83733, 3, 4, -12.97, 30.92, 0.26337, 7, -51.04, 30.19, 0.06995, 3, 7.46, -12.45, 0.66666, 1, 3, -18.70999, -13.88, 1, 2, 4, 39.46, 31.33, 0.60493, 7, 1.38, 30.6, 0.39506, 2, 4, 60.79, 25.41, 0.39506, 7, 22.71, 24.68, 0.60493, 1, 7, 44.04, 18.76, 1, 1, 7, 44.17, 1.85, 1, 1, 7, 44.3, -15.05, 1, 1, 7, 31.75, -5.65, 1, 2, 4, 38.46, 6.46, 0.55198, 7, 0.38, 5.73, 0.448, 2, 4, 34.78, -20.49, 0.55198, 7, -3.29, -21.22, 0.448, 1, 7, 18.74, 4.46, 1, 1, 4, 22.19, 8.72999, 1, 2, 4, 9.37, -5.38, 0.52, 2, -15.94, -9.72, 0.48, 1, 7, 19.81, -13.86, 1, 2, 4, 9.77, -21.01, 0.52, 2, -14.02, 5.79, 0.48, 2, 4, 34.50999, -4.48999, 0.55198, 7, -3.55, -5.21999, 0.448, 2, 4, 40.32, 16.42, 0.55198, 7, 2.25, 15.69, 0.448, 2, 4, 6.04, 19.19, 0.584, 3, -12.08, -1.62, 0.41599, 1, 7, 32.41, 12.44, 1, 2, 4, 2.4, 7.58, 0.584, 3, -8.99, 10.14, 0.41599, 1, 4, 22.11, -12.84, 1, 1, 4, 24.25, 21.36, 1 ], + "type": "mesh", + "uvs": [ 0.87097, 0.1335, 1, 0.26701, 1, 0.45027, 1, 0.63351, 1, 0.81675, 1, 1, 0.75, 1, 0.5, 1, 0.25, 1, 0, 1, 0, 0.72402, 0, 0.44804, 0.09822, 0.22402, 0.19645, 0, 0.4692, 0, 0.74194, 0, 0.58868, 0.13131, 0.40099, 0.46062, 0.83539, 0.50155, 0.42394, 0.26749, 0.36228, 0.63164, 0.58837, 0.76773, 0.71972, 0.25772, 0.84057, 0.76485, 0.57726, 0.50305, 0.24069, 0.44015, 0.19158, 0.80079, 0.29694, 0.12288, 0.37842, 0.84005, 0.71037, 0.63432, 0.15888, 0.60895 ], + "triangles": [ 8, 26, 28, 8, 28, 7, 9, 26, 8, 9, 10, 26, 23, 4, 5, 6, 23, 5, 7, 21, 6, 6, 21, 23, 23, 3, 4, 7, 28, 21, 26, 20, 28, 28, 20, 21, 10, 30, 26, 26, 30, 20, 20, 24, 21, 21, 29, 23, 21, 24, 29, 29, 18, 23, 23, 18, 3, 10, 11, 30, 29, 24, 18, 18, 2, 3, 30, 25, 20, 20, 17, 24, 20, 25, 17, 30, 11, 25, 2, 18, 1, 11, 12, 25, 22, 19, 16, 22, 0, 1, 19, 14, 16, 19, 27, 14, 22, 15, 0, 22, 16, 15, 12, 13, 27, 16, 14, 15, 27, 13, 14, 22, 24, 19, 1, 18, 22, 25, 27, 19, 25, 12, 27, 17, 19, 24, 24, 22, 18, 17, 25, 19 ], + "vertices": [ 1, 3, 31.68, -23.15, 1, 2, 3, 19.06, -31.25, 0.60493, 2, 57.14, -30.52, 0.39506, 2, 3, 1.66, -31.38, 0.39506, 2, 39.73, -30.66, 0.60493, 2, 3, -15.74, -31.52, 0.20987, 2, 22.33, -30.79, 0.79012, 1, 5, -7.76, 14.88, 1, 1, 5, 9.47, 12.45, 1, 1, 5, 7.3, -2.89, 1, 2, 5, 5.13, -18.24, 0.488, 9, 5.76, 18.5, 0.51199, 2, 5, 2.96, -33.59, 0.16266, 9, 6.61, 3.02, 0.83733, 3, 3, -51.04, 30.19, 0.06995, 2, -12.97, 30.92, 0.26337, 9, 7.46, -12.45, 0.66666, 1, 9, -18.7, -13.88, 1, 2, 3, 1.38, 30.6, 0.39506, 2, 39.46, 31.33, 0.60493, 2, 3, 22.71, 24.68, 0.60493, 2, 60.79, 25.41, 0.39506, 1, 3, 44.04, 18.76, 1, 1, 3, 44.17, 1.85, 1, 1, 3, 44.3, -15.05, 1, 1, 3, 31.75, -5.65, 1, 2, 3, 0.38, 5.73, 0.448, 2, 38.46, 6.46, 0.55198, 2, 3, -3.29, -21.22, 0.448, 2, 34.78, -20.49, 0.55198, 1, 3, 18.74, 4.46, 1, 1, 2, 22.19, 8.72, 1, 2, 2, 9.37, -5.38, 0.52, 5, -15.94, -9.72, 0.48, 1, 3, 19.81, -13.86, 1, 2, 2, 9.77, -21.01, 0.52, 5, -14.02, 5.79, 0.48, 2, 3, -3.55, -5.21, 0.448, 2, 34.5, -4.48, 0.55198, 2, 3, 2.25, 15.69, 0.448, 2, 40.32, 16.42, 0.55198, 2, 2, 6.04, 19.19, 0.584, 9, -12.08, -1.62, 0.41599, 1, 3, 32.41, 12.44, 1, 2, 2, 2.4, 7.58, 0.584, 9, -8.99, 10.14, 0.41599, 1, 2, 22.11, -12.84, 1, 1, 2, 24.25, 21.36, 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, 30, 0 ], "width": 62, @@ -306,7 +308,7 @@ }, { "time": 0.2666, - "angle": -17.96, + "angle": -17.95, "curve": [ 0.25, 0, 0.535, 1 ] }, { @@ -325,7 +327,7 @@ { "time": 0, "angle": 0 } ], "translate": [ - { "time": 0, "x": -0.59, "y": 0 } + { "time": 0, "x": -0.58, "y": 0 } ] }, "R-foot": { diff --git a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy.png.meta b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy.png.meta index 34eb2f4ab..55778136c 100644 --- a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy.png.meta +++ b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy.png.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: b29bbacbc2368c94a9c942d176ac6f59 -timeCreated: 1455501337 +timeCreated: 1467205225 licenseType: Free TextureImporter: fileIDToRecycleName: {} diff --git a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Atlas.asset b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Atlas.asset index 336bb6976..a5a928852 100644 Binary files a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Material.mat b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Material.mat index a544beb03..de4d9e87e 100644 Binary files a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Material.mat and b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_SkeletonData.asset b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_SkeletonData.asset index 31e9c71fa..ec588e4af 100644 Binary files a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_SkeletonData.asset and b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_SkeletonData.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Raptor/raptor.json b/spine-unity/Assets/Examples/Spine/Raptor/raptor.json index cf761a65a..75366a4cb 100644 --- a/spine-unity/Assets/Examples/Spine/Raptor/raptor.json +++ b/spine-unity/Assets/Examples/Spine/Raptor/raptor.json @@ -1,48 +1,92 @@ { -"skeleton": { "hash": "qxmcEk0SYRCDt0lM83+xmNjO6rA", "spine": "3.0.01", "width": 1223.71, "height": 1052.13, "images": "./images/" }, +"skeleton": { + "hash": "MdV0IZSAvD5AddKCxR+b1ZqSro0", + "spine": "3.4.01", + "width": 1223.75, + "height": 1053.54, + "images": "C:/Program Files (x86)/Spine/examples/raptor/images/" +}, "bones": [ { "name": "root" }, - { "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": "hip", "parent": "root", "x": -136.78, "y": 415.47, "rotation": 3.15, "color": "fbff00ff" }, - { "name": "rear_leg1", "parent": "hip", "length": 226.27, "x": 55.19, "y": -71.25, "rotation": -54.76, "color": "e07800ff" }, - { "name": "rear_leg2", "parent": "rear_leg1", "length": 172.58, "x": 226.32, "y": 0.23, "rotation": -92.25, "color": "e07800ff" }, - { "name": "rear_leg3", "parent": "rear_leg2", "length": 103.05, "x": 172.31, "y": 2.21, "rotation": 82.81, "color": "e07800ff" }, - { "name": "rear_foot1", "parent": "rear_leg3", "length": 84.51, "x": 102.37, "y": -0.02, "rotation": 75.43, "color": "e07800ff" }, + { "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": "rear_foot2", - "parent": "rear_foot1", - "length": 102.31, - "x": 84.49, - "y": -0.34, - "rotation": -6.13, - "inheritRotation": false, - "color": "e07800ff" + "name": "spineboy_torso", + "parent": "spineboy_hip", + "length": 122.45, + "rotation": -75.85, + "x": 1.05, + "y": -2.1, + "color": "ffffffff" }, - { "name": "front_foot_goal", "parent": "root", "x": -45.79, "y": -28.67, "rotation": -0.94, "color": "ff0000ff" }, + { "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, + "inheritRotation": false, + "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, "x": 27.36, "y": -28.27, "rotation": -51.5, "color": "15ff00ff" }, - { "name": "front_leg2", "parent": "front_leg1", "length": 208.54, "x": 251.03, "y": 0.16, "rotation": 261.93, "color": "15ff00ff" }, - { "name": "front_leg3", "parent": "front_leg2", "length": 118.18, "x": 208.5, "y": -1.63, "rotation": 85.46, "color": "15ff00ff" }, + { "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, - "rotation": 54.46, "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, - "rotation": -0.46, "inheritRotation": false, "color": "15ff00ff" }, @@ -50,67 +94,102 @@ "name": "front_foot3", "parent": "front_foot2", "length": 129.88, + "rotation": -3.16, "x": 49.71, "y": 20.65, "scaleX": 1.154, - "rotation": -3.16, "inheritRotation": false, "color": "15ff00ff" }, - { "name": "tail1", "parent": "hip", "length": 162.53, "x": -20.86, "y": 6.87, "rotation": 162.92, "color": "eaff00ff" }, - { "name": "tail2", "parent": "tail1", "length": 130.02, "x": 162.53, "y": -0.82, "rotation": 30.3, "color": "eaff00ff" }, - { "name": "tail3", "parent": "tail2", "length": 141.06, "x": 130.02, "y": 0.1, "rotation": 6.88, "color": "eaff00ff" }, - { "name": "tail4", "parent": "tail3", "length": 126.25, "x": 141.05, "y": 0.64, "rotation": -18.86, "color": "eaff00ff" }, - { "name": "tail5", "parent": "tail4", "length": 91.06, "x": 126.25, "y": -0.47, "rotation": -22.34, "color": "eaff00ff" }, - { "name": "torso1", "parent": "hip", "length": 126.25, "x": 30.03, "y": -0.4, "rotation": -4.97, "color": "eaff00ff" }, - { "name": "saddle", "parent": "torso1", "length": 50.91, "x": 4.56, "y": 71.86, "rotation": 91.8, "color": "ff7300ff" }, - { "name": "stirrup", "parent": "saddle", "length": 78.17, "x": -81.94, "y": -103.38, "rotation": -68.85, "color": "ff7300ff" }, - { "name": "stirrup_strap1", "parent": "saddle", "length": 43.69, "x": -20.38, "y": -29.37, "rotation": -135, "color": "ff7300ff" }, - { "name": "stirrup_strap2", "parent": "stirrup_strap1", "length": 51.62, "x": 43.7, "rotation": 9.38, "color": "ff7300ff" }, - { "name": "spineboy_rear_arm_goal", "parent": "saddle", "x": -30.43, "y": -100.08, "color": "ff0001ff" }, - { "name": "spineboy_hip", "parent": "saddle", "length": 0.52, "x": 81.88, "y": 2.68, "rotation": 90.01, "color": "ffffffff" }, + { "name": "front_hand", "parent": "front_arm2", "length": 47.55, "rotation": -56.83, "x": 86.33, "y": 0.06, "color": "15ff00ff" }, { - "name": "spineboy_torso", - "parent": "spineboy_hip", - "length": 122.45, - "x": 1.05, - "y": -2.1, - "rotation": -75.85, + "name": "front_hand2", + "parent": "front_bracer", + "length": 58.18, + "rotation": 13.89, + "x": 39.98, + "y": -0.89, + "inheritRotation": false, "color": "ffffffff" }, - { "name": "neck2", "parent": "spineboy_torso", "length": 32.04, "x": 113.44, "y": -15.21, "rotation": -45.22, "color": "ffffffff" }, - { "name": "head2", "parent": "neck2", "length": 249.64, "x": 23.01, "y": 3.47, "rotation": 11.65, "color": "ffffffff" }, - { - "name": "gun", - "parent": "spineboy_hip", - "length": 181.35, - "x": 16.86, - "y": -7.89, - "scaleX": 0.816, - "scaleY": 0.816, - "rotation": 107.11, - "color": "ffffffff" - }, - { "name": "back_thigh", "parent": "spineboy_hip", "length": 71.15, "x": -9.57, "y": 2.31, "rotation": 160.75, "color": "ffffffff" }, - { "name": "back_knee", "parent": "back_thigh", "length": 97.17, "x": 71.15, "y": -0.28, "rotation": -54.97, "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, - "rotation": 163.34, "color": "ffffffff" }, - { "name": "lower_leg", "parent": "front_thigh", "length": 111.5, "x": 77.92, "y": -0.1, "rotation": -49.62, "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, + "inheritScale": false, + "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, + "inheritRotation": false, + "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, - "rotation": 151.13, "color": "ff7300ff" }, { "name": "saddle_strap_rear2", "parent": "saddle_strap_rear1", "length": 54.36, "x": 38.63, "y": -0.02, "color": "ff7300ff" }, @@ -118,146 +197,22 @@ "name": "saddle_strap_rear3", "parent": "saddle_strap_rear2", "length": 44.04, + "rotation": 3.63, "x": 54.86, "y": 0.19, - "rotation": 3.63, "color": "ff7300ff" }, - { - "name": "saddle_strap_front1", - "parent": "saddle", - "length": 97.27, - "x": -27.36, - "y": -73.38, - "rotation": -148.11, - "color": "ff7300ff" - }, - { - "name": "saddle_strap_front2", - "parent": "saddle_strap_front1", - "length": 102.74, - "x": 97.29, - "y": 0.3, - "rotation": -11.13, - "color": "ff7300ff" - }, - { "name": "torso2", "parent": "torso1", "length": 121.2, "x": 126.25, "y": -0.37, "rotation": 39.84, "color": "eaff00ff" }, - { "name": "rear_arm1", "parent": "torso2", "length": 109.56, "x": 57.05, "y": -95.38, "rotation": -124.71, "color": "e07800ff" }, - { "name": "rear_arm2", "parent": "rear_arm1", "length": 85.8, "x": 109.56, "rotation": 123.56, "color": "e07800ff" }, - { "name": "rear_hand", "parent": "rear_arm2", "length": 45.8, "x": 85.8, "y": 0.1, "rotation": -76.28, "color": "e07800ff" }, - { "name": "neck", "parent": "torso2", "length": 70.59, "x": 121.19, "y": 0.34, "rotation": 41.37, "color": "eaff00ff" }, - { "name": "head", "parent": "neck", "length": 105.5, "x": 70.59, "y": 0.03, "rotation": 9.82, "color": "eaff00ff" }, - { "name": "tongue1", "parent": "head", "length": 55.11, "x": 20.81, "y": -104.75, "rotation": -129.04, "color": "ffff00ff" }, - { "name": "tongue2", "parent": "tongue1", "length": 44.66, "x": 55.59, "y": 0.93, "rotation": 8.93, "color": "fff200ff" }, - { "name": "tongue3", "parent": "tongue2", "length": 43.64, "x": 44.26, "y": -0.2, "rotation": 12.86, "color": "fff200ff" }, - { - "name": "jaw", - "parent": "head", - "length": 203.76, - "x": 29.36, - "y": -40.15, - "rotation": -140.14, - "inheritScale": false, - "color": "ffff00ff" - }, - { "name": "horn_rear", "parent": "head", "length": 73.78, "x": 99.27, "y": -226.79, "rotation": 44.31, "color": "e07800ff" }, - { "name": "rear_arm_target", "parent": "horn_rear", "x": 232.68, "y": 245.84, "rotation": -133.55, "color": "e07800ff" }, - { - "name": "back_arm", - "parent": "spineboy_torso", - "length": 67.21, - "x": 96.33, - "y": -38.46, - "rotation": -120.89, - "color": "ffffffff" - }, - { "name": "back_bracer", "parent": "back_arm", "length": 43.68, "x": 67.21, "y": -0.31, "rotation": 17.48, "color": "ffffffff" }, - { - "name": "back_hand", - "parent": "back_bracer", - "length": 41.97, - "x": 43.68, - "y": 0.06, - "rotation": 9.2, - "inheritRotation": false, - "color": "ffffffff" - }, - { "name": "horn_front", "parent": "head", "length": 87.48, "x": 82.09, "y": -221.36, "rotation": 49.36, "color": "15ff00ff" }, - { "name": "front_arm_target", "parent": "horn_front", "x": 294.58, "y": 234.17, "rotation": -138.59, "color": "15ff00ff" }, - { - "name": "front_arm", - "parent": "spineboy_torso", - "length": 74.51, - "x": 101.37, - "y": 9.78, - "rotation": -118.16, - "color": "ffffffff" - }, - { "name": "front_bracer", "parent": "front_arm", "length": 39.85, "x": 74.52, "y": -0.41, "rotation": 20.3, "color": "ffffffff" }, - { - "name": "front_hand2", - "parent": "front_bracer", - "length": 58.18, - "x": 39.98, - "y": -0.89, - "rotation": 13.89, - "inheritRotation": false, - "color": "ffffffff" - }, - { "name": "front_arm1", "parent": "torso2", "length": 109.99, "x": 46.37, "y": -84.61, "rotation": 224.54, "color": "15ff00ff" }, - { "name": "front_arm2", "parent": "front_arm1", "length": 86.33, "x": 109.99, "y": 0.2, "rotation": 105.23, "color": "15ff00ff" }, - { "name": "front_hand", "parent": "front_arm2", "length": 47.55, "x": 86.33, "y": 0.06, "rotation": -56.83, "color": "15ff00ff" } -], -"ik": [ - { - "name": "front_leg_goal", - "bones": [ "front_leg1", "front_leg2" ], - "target": "front_leg_goal", - "bendPositive": false - }, - { - "name": "rear_leg_goal", - "bones": [ "rear_leg1", "rear_leg2" ], - "target": "rear_leg_goal", - "bendPositive": false - }, - { - "name": "front_foot_goal", - "bones": [ "front_leg3", "front_foot1" ], - "target": "front_foot_goal" - }, - { - "name": "rear_foot_goal", - "bones": [ "rear_leg3", "rear_foot1" ], - "target": "rear_foot_goal" - }, - { - "name": "stirrup", - "bones": [ "stirrup_strap1", "stirrup_strap2" ], - "target": "stirrup" - }, - { - "name": "spineboy_front_leg_goal", - "bones": [ "front_thigh", "lower_leg" ], - "target": "spineboy_front_arm_goal", - "bendPositive": false - }, - { - "name": "spineboy_rear_leg_goal", - "bones": [ "back_thigh", "back_knee" ], - "target": "spineboy_rear_arm_goal", - "bendPositive": false - }, - { - "name": "front_arm_goal", - "bones": [ "front_arm", "front_bracer" ], - "target": "front_arm_target" - }, - { - "name": "rear_arm_goal", - "bones": [ "back_arm", "back_bracer" ], - "target": "rear_arm_target" - } + { "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" }, @@ -294,6 +249,57 @@ { "name": "front_bracer", "bone": "front_bracer", "attachment": "front_bracer" }, { "name": "front_hand", "bone": "front_hand2", "attachment": "front_hand" } ], +"ik": [ + { + "name": "front_arm_goal", + "bones": [ "front_arm", "front_bracer" ], + "target": "front_arm_target" + }, + { + "name": "front_foot_goal", + "bones": [ "front_leg3", "front_foot1" ], + "target": "front_foot_goal" + }, + { + "name": "front_leg_goal", + "bones": [ "front_leg1", "front_leg2" ], + "target": "front_leg_goal", + "bendPositive": false + }, + { + "name": "rear_arm_goal", + "bones": [ "back_arm", "back_bracer" ], + "target": "rear_arm_target" + }, + { + "name": "rear_foot_goal", + "bones": [ "rear_leg3", "rear_foot1" ], + "target": "rear_foot_goal" + }, + { + "name": "rear_leg_goal", + "bones": [ "rear_leg1", "rear_leg2" ], + "target": "rear_leg_goal", + "bendPositive": false + }, + { + "name": "spineboy_front_leg_goal", + "bones": [ "front_thigh", "lower_leg" ], + "target": "spineboy_front_arm_goal", + "bendPositive": false + }, + { + "name": "spineboy_rear_leg_goal", + "bones": [ "back_thigh", "back_knee" ], + "target": "spineboy_rear_arm_goal", + "bendPositive": false + }, + { + "name": "stirrup", + "bones": [ "stirrup_strap1", "stirrup_strap2" ], + "target": "stirrup" + } +], "skins": { "default": { "back_arm": { @@ -354,10 +360,10 @@ }, "raptor_arm_back": { "raptor_arm_back": { - "type": "skinnedmesh", + "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, 44, 36.95, 33.31, 0.91666, 45, 68.53, 41.05, 0.08333, 2, 44, 66.01999, 20.35, 0.76813, 45, 41.41, 24.39, 0.23186, 2, 44, 74.51, 16.57, 0.64468, 45, 33.49, 19.53, 0.35531, 3, 44, 70.89, 21.97, 0.27669, 45, 39.99, 19.45999, 0.67508, 46, -29.67, -39.91, 0.04822, 3, 44, 42.77, 63.89, 0.11483, 45, 90.47, 18.95, 0.60854, 46, -17.2, 9, 0.2766, 2, 45, 101.86, 18.83, 0.45955, 46, -14.38, 20.04, 0.54044, 2, 45, 106.47, 2.08, 0.0625, 46, 2.98, 20.56, 0.9375, 1, 46, 51.32, 21.98, 1, 1, 46, 60.41, 11.1, 1, 1, 46, 72.39, 9.60999, 1, 1, 46, 100.37, -23.87, 1, 1, 46, 104.96, -40.9, 1, 1, 46, 78.37, -25.61, 1, 1, 46, 86.05, -56.84, 1, 1, 46, 52.92, -30.04, 1, 2, 45, 62.24, -43.92, 0.0625, 46, 37.18999, -33.33, 0.9375, 2, 45, 64.89, -28.65, 0.3125, 46, 22.98, -27.14, 0.6875, 2, 45, 57.69, -27.17, 0.30612, 46, 19.83, -33.78, 0.69387, 2, 44, 124.19, 3.83, 0.19395, 45, -5.09, -14.23, 0.80604, 2, 44, 110.77, -19.65, 0.3125, 45, -16.87999, 10.1, 0.6875, 2, 44, 99.14, -19.2, 0.51612, 45, -9.93, 19.44, 0.48386, 2, 44, 43.73, -17.03, 0.9375, 45, 23.17, 63.92, 0.0625, 1, 44, 35.41, -29.77, 1, 1, 44, -15.68, -28.02, 1, 1, 44, -13.87, 24.65, 1 ], + "vertices": [ 2, 40, 36.95, 33.31, 0.91666, 41, 68.53, 41.05, 0.08333, 2, 40, 66.01999, 20.35, 0.76813, 41, 41.41, 24.39, 0.23186, 2, 40, 74.51, 16.57, 0.64468, 41, 33.49, 19.53, 0.35531, 3, 40, 70.89, 21.97, 0.27669, 41, 39.99, 19.45999, 0.67508, 49, -29.67, -39.91, 0.04822, 3, 40, 42.77, 63.89, 0.11483, 41, 90.47, 18.95, 0.60854, 49, -17.2, 9, 0.2766, 2, 41, 101.86, 18.83, 0.45955, 49, -14.38, 20.04, 0.54044, 2, 41, 106.47, 2.08, 0.0625, 49, 2.98, 20.56, 0.9375, 1, 49, 51.32, 21.98, 1, 1, 49, 60.41, 11.1, 1, 1, 49, 72.39, 9.60999, 1, 1, 49, 100.37, -23.87, 1, 1, 49, 104.96, -40.9, 1, 1, 49, 78.37, -25.61, 1, 1, 49, 86.05, -56.84, 1, 1, 49, 52.92, -30.04, 1, 2, 41, 62.24, -43.92, 0.0625, 49, 37.18999, -33.33, 0.9375, 2, 41, 64.89, -28.65, 0.3125, 49, 22.98, -27.14, 0.6875, 2, 41, 57.69, -27.17, 0.30612, 49, 19.83, -33.78, 0.69387, 2, 40, 124.19, 3.83, 0.19395, 41, -5.09, -14.23, 0.80604, 2, 40, 110.77, -19.65, 0.3125, 41, -16.87999, 10.1, 0.6875, 2, 40, 99.14, -19.2, 0.51612, 41, -9.93, 19.44, 0.48386, 2, 40, 43.73, -17.03, 0.9375, 41, 23.17, 63.92, 0.0625, 1, 40, 35.41, -29.77, 1, 1, 40, -15.68, -28.02, 1, 1, 40, -13.87, 24.65, 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, @@ -366,10 +372,10 @@ }, "raptor_body": { "raptor_body": { - "type": "skinnedmesh", + "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, 48, 147.48, -145.48, 1, 1, 48, 89.4, -281.62, 1, 1, 48, -28.24, -285.93, 1, 1, 48, -14.58, -194.68, 1, 5, 22, 363.21, 87.73, 0.02179, 43, 238.39, -84.13, 0.20397, 47, 32.09999, -140.85, 0.18915, 48, -61.96, -132.26, 0.41197, 52, 129.57, 6.39, 0.1731, 5, 22, 332.7, 63.71, 0.06905, 43, 199.57, -83.03, 0.29424, 47, 3.69, -114.37, 0.2194, 48, -85.43, -101.32, 0.30859, 52, 127.34, -26.64, 0.1087, 5, 22, 307.08, 43.5, 0.11018, 43, 166.95, -82.12999, 0.37282, 47, -20.18, -92.14, 0.24572, 48, -105.18, -75.33999, 0.21862, 52, 123.08, -64.79, 0.05264, 5, 22, 307.75, 5.7, 0.18146, 43, 143.25, -111.59, 0.56512, 47, -57.43, -98.57, 0.12044, 48, -142.98, -75.33, 0.10715, 52, 154.85, -83.49, 0.0258, 2, 22, 308.7, -30.55, 0.25, 43, 120.75, -140.04, 0.75, 2, 22, 213.94, -142.7, 0.75, 43, -23.83, -165.45, 0.25, 3, 22, 64.44999, -187.34, 0.31139, 17, -158.45, 158.33, 0.10379, 3, 84.16, -190.98, 0.5848, 1, 3, -61.47, -178.84, 1, 7, 22, -193.84, -78.37, 0.01006, 17, 118.47, 114.74, 0.07207, 18, 17.17, 122.49, 0.17087, 19, -100.71, 132.55, 0.06655, 20, -272.53, 39.71, 0.0127, 21, -381.15, -123.99, 0.00106, 3, -166.91, -67.94999, 0.66666, 7, 22, -246.26, -74, 0.00847, 17, 170.4, 123.13, 0.06072, 18, 66.71, 104.77, 0.19505, 19, -53.08, 110.21, 0.11161, 20, -220.11, 35.3, 0.03559, 21, -331.4, -106.89, 0.02705, 3, -217.69, -61.33, 0.56148, 7, 22, -297.45, -69.74, 0.007, 17, 221.11, 131.31, 0.05019, 18, 115.07, 87.47, 0.2135, 19, -6.58, 88.39, 0.15181, 20, -168.92, 31, 0.05913, 21, -282.82, -90.19, 0.05445, 3, -267.66, -55.14, 0.46388, 7, 22, -322.38, -89.71, 0.00572, 17, 245.53, 147.45, 0.04099, 18, 146.51, 86.08, 0.22288, 19, 26.66, 83.39, 0.18428, 20, -134.99, 41.34, 0.0837, 21, -257.52, -60.65, 0.08408, 3, -298.87, -61.99, 0.37832, 7, 22, -359.24, -85.1, 0.00461, 17, 277.38, 161.09, 0.03306, 18, 178.73, 86.41, 0.22347, 19, 56.68, 81.29, 0.20919, 20, -107.13, 46.31, 0.10923, 21, -232.44, -51.26, 0.11589, 3, -328.68, -69.24, 0.30452, 7, 22, -376.16, -107.83, 0.00361, 17, 294.31, 176.47, 0.02591, 18, 203.26, 86.51, 0.21876, 19, 83.06, 77.01999, 0.2295, 20, -79.56, 53.53, 0.13534, 21, -210.89, -28.3, 0.14902, 3, -354.01, -75.41, 0.23783, 7, 22, -416.83, -99.41, 0.00301, 17, 329.83, 188.85, 0.02165, 18, 238.06, 85.41, 0.19918, 19, 115.65, 74.66, 0.23165, 20, -49.53, 60.58, 0.16135, 21, -185.49, -14.98, 0.18638, 3, -385.33, -83.15, 0.19674, 7, 22, -428.02, -116.81, 0.0025, 17, 343.12, 196.14, 0.01806, 18, 255.33, 78.85, 0.17874, 19, 133.83, 63.18, 0.23028, 20, -27.04, 56.84, 0.18642, 21, -163.58, -5.26, 0.22335, 3, -406.45, -79.89, 0.16063, 7, 22, -449.42, -116.23, 0.00209, 17, 364.17, 200.07, 0.01519, 18, 275.48, 71.62, 0.15813, 19, 152.97, 53.58, 0.22594, 20, -5.82, 53.94, 0.21024, 21, -142.85, 0.11, 0.25891, 3, -427.72, -77.47, 0.12944, 7, 22, -498.22, -88.19, 0.00178, 17, 411.52, 197.55, 0.0131, 18, 313.81, 53.61, 0.13839, 19, 188.04, 35.82, 0.21975, 20, 31.84, 49.3, 0.23251, 21, -106.46, 7.49, 0.2917, 3, -465.96, -72.58999, 0.10272, 7, 22, -524.31, -113.4, 0.00157, 17, 437.98, 213.03, 0.01186, 18, 345.74, 45.54, 0.12065, 19, 219.6, 19.28, 0.2131, 20, 68.31, 43.02, 0.25281, 21, -70.12999, 18.19, 0.32013, 3, -502.09, -68.19, 0.07983, 7, 22, -580.94, -76.79, 0.00148, 17, 494.56, 206.4, 0.01161, 18, 390.81, 21.3, 0.10603, 19, 261.62, -3.66, 0.20745, 20, 114.55, 37.83, 0.27063, 21, -26.15, 30.34, 0.34248, 3, -548.33, -63.22, 0.06027, 7, 22, -621.23, -53.98, 0.00153, 17, 539.16, 193.96, 0.01255, 18, 423.87, -11.11, 0.09566, 19, 291.46, -39.06, 0.20413, 20, 154.83, 14.99, 0.28529, 21, 19.91, 25.67, 0.35721, 3, -589.02, -42.19, 0.0436, 7, 22, -661.22, -31.34, 0.00173, 17, 583.41, 181.62, 0.01498, 18, 456.68, -43.27, 0.09054, 19, 321.06, -74.19999, 0.20422, 20, 194.79, -7.66, 0.29602, 21, 65.62, 21.04, 0.36309, 3, -629.78, -21.51, 0.02938, 7, 22, -698.76, 17.64, 0.00212, 17, 631.64, 143.1, 0.01928, 18, 480.34, -100.28, 0.09165, 19, 339.2, -133.2, 0.20843, 20, 232.3, -56.69, 0.30195, 21, 119.7, -8.68999, 0.35936, 3, -669.35, 25.71, 0.01717, 7, 22, -636.21, 0.4, 0.00186, 17, 566.79, 144.78, 0.02216, 18, 424.34, -67.51999, 0.09478, 19, 286.57, -95.27, 0.21971, 20, 169.77, -39.4, 0.30022, 21, 55.51, -18.08, 0.34915, 3, -606.08, 11.21, 0.01208, 7, 22, -596.68, -3.21, 0.00182, 17, 527.55, 138.78, 0.02791, 18, 387.08, -53.84, 0.10537, 19, 250.77, -78.11, 0.23429, 20, 130.24, -35.75, 0.29251, 21, 17.87, -30.67, 0.32978, 3, -566.25, 9.38, 0.00828, 7, 22, -553.14, -7.2, 0.00202, 17, 484.33, 132.17, 0.03718, 18, 346.04, -38.78, 0.12359, 19, 211.34, -59.22, 0.25059, 20, 86.7, -31.72, 0.27864, 21, -23.59, -44.54, 0.3024, 3, -522.33, 7.03, 0.00553, 7, 22, -516.96, -25.93, 0.00246, 17, 449.17, 125.97, 0.05073, 18, 311.45, -35.25, 0.14934, 19, 175.89, -56.83, 0.26648, 20, 51.53, -43.14, 0.2587, 21, -52.88, -67.87, 0.26867, 3, -487.23, 18.31, 0.00359, 7, 22, -479.88, 14.24, 0.00317, 17, 418.38, 93.72, 0.06938, 18, 269.72, -40.64, 0.18219, 19, 135.19, -53.82, 0.27948, 20, 13.42, -53.11, 0.23298, 21, -82.03, -93.66, 0.2305, 3, -449.1, 30.06, 0.00226, 7, 22, -451.64, 0.32, 0.00417, 17, 390.82, 86.58, 0.09392, 18, 241.19, -39.8, 0.22144, 19, 105.59, -52.93, 0.28715, 20, -16.25, -62.16, 0.20207, 21, -108.34, -111.24, 0.18983, 3, -419.88, 38.84, 0.00138, 7, 22, -420.35, 31.66, 0.00546, 17, 364.8, 62.48, 0.12486, 18, 207.71, -42.14, 0.26611, 19, 73.33, -49.43, 0.28757, 20, -46.11, -70.49, 0.16677, 21, -129.51, -133.56, 0.14836, 3, -389.13, 47.88, 8.1E-4, 7, 22, -399.11, 28.98, 0.00747, 17, 345.49, 47.53, 0.17173, 18, 182.34, -50.62, 0.31858, 19, 45.87, -56.62, 0.26575, 20, -71.57, -84.96, 0.1256, 21, -150.85, -153.35, 0.11024, 3, -365.08, 62.86, 5.8E-4, 7, 22, -365.43, 66.79, 0.00956, 17, 319.95, 15.15, 0.2203, 18, 145.6, -61.95, 0.37151, 19, 9.60999, -63.26, 0.24136, 20, -101.06, -105.58, 0.08415, 21, -165.65, -187.83, 0.07272, 3, -333.3, 82.65, 3.7E-4, 7, 22, -312.31, 100.78, 0.01175, 17, 276.58, -30.61, 0.27125, 18, 85.52, -81.11, 0.42509, 19, -52.01, -76.62, 0.21336, 20, -154.2, -139.52, 0.04227, 21, -200.6, -240.31, 0.03607, 3, -278.65, 115.6, 1.7E-4, 6, 22, -242.48, 124.41, 0.01402, 17, 214.5, -70.36, 0.32389, 18, 11.97, -85.98, 0.47912, 19, -125.69, -74.48, 0.18281, 20, -224.04, -163.1, 1.1E-4, 21, -255.01, -290.05, 3.0E-5, 6, 22, -166.71, 150.07, 0.02469, 17, 147.14, -113.5, 0.57033, 18, -67.83999, -91.26, 0.38714, 19, -205.65, -72.16, 0.01755, 20, -299.83, -188.7, 2.0E-4, 21, -314.05, -344.03, 5.0E-5, 2, 22, -113.14, 135.84, 0.24192, 17, 91.72, -112.59, 0.75807, 2, 22, -42.12, 116.77, 0.14515, 17, 18.2, -111.17, 0.85484, 1, 22, 44.2, 107.1, 1, 2, 22, 140.09, 96.35, 0.22579, 43, 72.58999, 65.41, 0.7742, 4, 22, 137.69, 169.35, 0.05644, 43, 117.5, 123, 0.24355, 47, 78.3, 94.48, 0.2125, 48, 23.7, 91.74, 0.4875, 2, 47, 171.15, 111.98, 0.25, 48, 118.17, 93.15, 0.75, 1, 48, 158.96, -25.58, 1, 1, 3, -40.63, -86.01, 1, 3, 22, 67.33999, -86.66, 0.33215, 17, -137.02, 59.92, 0.08303, 3, 92.54, -90.61, 0.5848, 2, 22, 170.13, -66.29, 0.75, 43, -8.53, -78.72, 0.25, 2, 22, 231.74, -8.12, 0.4, 43, 76.03, -73.51999, 0.6, 5, 22, 222.04, 70.41, 0.16894, 43, 118.9, -7, 0.5373, 47, -6.58, -3.99, 0.17075, 48, -76.73, 9.18, 0.08551, 52, 45.05, -108.02, 0.03748, 1, 48, 50.43, -46.56, 1, 1, 43, -9.88, 20.65, 1, 2, 22, -53.22, 20.53, 0.2, 17, 5.8, -15.09, 0.8, 6, 22, -180.71, 32.22, 0.0849, 17, 132.35, 4.23999, 0.55723, 18, -23.98, 19.01, 0.34911, 19, -151.51, 33.43999, 0.0085, 20, -285.75, -70.86, 1.8E-4, 21, -348.66, -230.51, 5.0E-5, 7, 22, -304.22, 7.95, 0.0403, 17, 246.39, 57.53, 0.26453, 18, 101.61, 10.65, 0.41136, 19, -27.28, 13.2, 0.19982, 20, -162.22, -46.69, 0.04444, 21, -245.36, -158.59, 0.03938, 3, -272.64, 22.61, 1.4E-4, 7, 22, -418.56, -35.09999, 0.01926, 17, 346.99, 126.85, 0.12662, 18, 223.17, 22.83, 0.27476, 19, 94.88, 13.77, 0.24466, 20, -47.85, -3.72, 0.1726, 21, -158.02, -73.16, 0.16124, 3, -387.18, -18.91, 8.0E-4, 7, 22, -566.47, -40.57, 0.00611, 17, 489.24, 167.77, 0.04146, 18, 367.51, -9.96, 0.13446, 19, 235.45, -32.57, 0.21638, 20, 100.06, 1.62, 0.28346, 21, -24.81, -8.63, 0.31257, 3, -534.79, -26.69, 0.00552, 7, 22, -648.5, -15.19, 0.00311, 17, 574.96, 162.88, 0.02391, 18, 440.24, -55.6, 0.09894, 19, 303.52, -84.91, 0.20698, 20, 182.07, -23.8, 0.30202, 21, 60.48, 1.14, 0.35292, 3, -617.72, -4.84, 0.01208, 3, 43, 174.99, 22.22, 0.2, 47, 54.82, -19.14, 0.6, 48, -18.79999, -16.2, 0.2, 6, 22, -242.34, 20.11, 0.04821, 17, 189.25, 30.83, 0.31645, 18, 38.68, 14.84, 0.45752, 19, -89.52, 23.34, 0.17767, 20, -224.1, -58.8, 1.0E-4, 21, -297.11, -194.62, 3.0E-5, 7, 22, -359.57, -12.88, 0.03247, 17, 295.08, 91.08, 0.21317, 18, 160.45, 16.54, 0.3652, 19, 31.85, 13.48, 0.22126, 20, -106.86, -25.89, 0.08869, 21, -203.08, -117.24, 0.07889, 3, -328.24, 2.88, 2.8E-4, 7, 22, -488.69, -37.68999, 0.01113, 17, 414.43, 146.25, 0.07357, 18, 291.61, 7.27, 0.19521, 19, 161.53, -8.2, 0.2345, 20, 22.27, -1.17999, 0.23931, 21, -94.86, -42.56, 0.24398, 3, -457.15, -22.02, 0.00224, 7, 22, -607.64, -27.83, 0.00441, 17, 532.26, 165.32, 0.03117, 18, 404.01, -32.87, 0.11328, 19, 269.61, -58.84, 0.20984, 20, 141.21, -11.13, 0.29595, 21, 17.98, -3.72, 0.33702, 3, -576.34, -15.62, 0.00828, 1, 48, 26.4, -166.06, 1, 1, 48, 87.21, -106.12, 1, 1, 48, 108.19, -49.62, 1, 2, 48, 61.73, -82.12999, 0.50021, 52, 4.42, 52.83, 0.49978, 2, 48, 22.84, -109.4, 0.50021, 52, 51.52, 46.73, 0.49978, 5, 22, 348.39, 119.13, 0.00694, 43, 247.12, -50.52, 0.065, 47, 60.86, -121.4, 0.06027, 48, -30.3, -118, 0.48738, 52, 96.58, 17.21999, 0.38039, 1, 22, 26.73, 14.8, 1, 2, 22, -107.97, 25.67, 0.24192, 17, 60.17, -6.91, 0.75807, 5, 22, 235.53, 102.96, 0.07484, 43, 150.1, 9.35, 0.34943, 47, 27.64, -12.34, 0.40983, 48, -44.43, -4.87, 0.14928, 52, 34.03, -74.39, 0.0166, 5, 22, 227.15, 28.49, 0.29238, 43, 95.96, -42.46, 0.5708, 47, -47.23, -15.44, 0.07952, 48, -118.74, 4.84, 0.03982, 52, 84.85, -129.5, 0.01744, 2, 48, 5.19, -153.1, 0.87618, 52, 90.96, 71.21, 0.12381, 5, 22, 351.78, 108.85, 0.01127, 43, 243.13, -60.59, 0.10548, 47, 51.21, -126.33, 0.09782, 48, -40.65, -121.21, 0.46541, 52, 105.71, 17.33, 0.32, 1, 48, 23.69, -185.21, 1, 1, 48, 79.64, -175.94, 1, 1, 48, 93.96, -187.56, 1, 1, 48, 87.07, -206.55, 1, 1, 48, 64.19999, -216.74, 1, 1, 48, 52.23, -203.68, 1, 1, 48, 59.24, -187.03, 1, 1, 48, 64.26, -223.8, 1, 1, 48, 89.44, -211.41, 1, 1, 48, 102.04, -186.95, 1, 1, 48, 83.1, -166.14, 1, 1, 48, 46.84, -186.41, 1, 1, 48, 50.32, -204.36, 1, 1, 48, 41.7, -206.59, 1, 1, 48, 61.87, -230.97, 1, 7, 22, -448.12, -58.75, 0.01475, 17, 374.97, 143.6, 0.09709, 18, 256.29, 17.42, 0.23314, 19, 127.43, 2.07, 0.24171, 20, -13.35, -3.05, 0.20842, 21, -128.14, -55.46, 0.20349, 3, -421.47, -20.31, 0.00137, 7, 22, -519.55, -68.54, 0.0083, 17, 442.75, 168.18, 0.05534, 18, 327.21, 4.42, 0.16201, 19, 196.28, -19.32, 0.22526, 20, 58.71, -1.04999, 0.2645, 21, -62.24, -26.21, 0.28097, 3, -493.48, -23.91, 0.00358, 7, 22, -386.43, -41.34999, 0.02472, 17, 318.32, 113.62, 0.16236, 18, 192.26, 20.14, 0.31904, 19, 64.19, 12.44, 0.24198, 20, -76.55, -13.67, 0.13287, 21, -182.56, -89.31, 0.11857, 3, -358.52, -8.29, 4.3E-4, 2, 48, 56.98, -162.99, 0.89259, 52, 57.54, 112, 0.1074 ], + "vertices": [ 1, 8, 147.48, -145.48, 1, 1, 8, 89.4, -281.62, 1, 1, 8, -28.24, -285.93, 1, 1, 8, -14.58, -194.68, 1, 5, 2, 363.21, 87.73, 0.02179, 6, 238.39, -84.13, 0.20397, 7, 32.09999, -140.85, 0.18915, 8, -61.96, -132.26, 0.41197, 39, 129.57, 6.39, 0.1731, 5, 2, 332.7, 63.71, 0.06905, 6, 199.57, -83.03, 0.29424, 7, 3.69, -114.37, 0.2194, 8, -85.43, -101.32, 0.30859, 39, 127.34, -26.64, 0.1087, 5, 2, 307.08, 43.5, 0.11018, 6, 166.95, -82.12999, 0.37282, 7, -20.18, -92.14, 0.24572, 8, -105.18, -75.33999, 0.21862, 39, 123.08, -64.79, 0.05264, 5, 2, 307.75, 5.7, 0.18146, 6, 143.25, -111.59, 0.56512, 7, -57.43, -98.57, 0.12044, 8, -142.98, -75.33, 0.10715, 39, 154.85, -83.49, 0.0258, 2, 2, 308.7, -30.55, 0.25, 6, 120.75, -140.04, 0.75, 2, 2, 213.94, -142.7, 0.75, 6, -23.83, -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.74, 0.07207, 59, 17.17, 122.49, 0.17087, 60, -100.71, 132.55, 0.06655, 61, -272.53, 39.71, 0.0127, 62, -381.15, -123.99, 0.00106, 1, -166.91, -67.94999, 0.66666, 7, 2, -246.26, -74, 0.00847, 58, 170.4, 123.13, 0.06072, 59, 66.71, 104.77, 0.19505, 60, -53.08, 110.21, 0.11161, 61, -220.11, 35.3, 0.03559, 62, -331.4, -106.89, 0.02705, 1, -217.69, -61.33, 0.56148, 7, 2, -297.45, -69.74, 0.007, 58, 221.11, 131.31, 0.05019, 59, 115.07, 87.47, 0.2135, 60, -6.58, 88.39, 0.15181, 61, -168.92, 31, 0.05913, 62, -282.82, -90.19, 0.05445, 1, -267.66, -55.14, 0.46388, 7, 2, -322.38, -89.71, 0.00572, 58, 245.53, 147.45, 0.04099, 59, 146.51, 86.08, 0.22288, 60, 26.66, 83.39, 0.18428, 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.1, 0.00461, 58, 277.38, 161.09, 0.03306, 59, 178.73, 86.41, 0.22347, 60, 56.68, 81.29, 0.20919, 61, -107.13, 46.31, 0.10923, 62, -232.44, -51.26, 0.11589, 1, -328.68, -69.24, 0.30452, 7, 2, -376.16, -107.83, 0.00361, 58, 294.31, 176.47, 0.02591, 59, 203.26, 86.51, 0.21876, 60, 83.06, 77.01999, 0.2295, 61, -79.56, 53.53, 0.13534, 62, -210.89, -28.3, 0.14902, 1, -354.01, -75.41, 0.23783, 7, 2, -416.83, -99.41, 0.00301, 58, 329.83, 188.85, 0.02165, 59, 238.06, 85.41, 0.19918, 60, 115.65, 74.66, 0.23165, 61, -49.53, 60.58, 0.16135, 62, -185.49, -14.98, 0.18638, 1, -385.33, -83.15, 0.19674, 7, 2, -428.02, -116.81, 0.0025, 58, 343.12, 196.14, 0.01806, 59, 255.33, 78.85, 0.17874, 60, 133.83, 63.18, 0.23028, 61, -27.04, 56.84, 0.18642, 62, -163.58, -5.26, 0.22335, 1, -406.45, -79.89, 0.16063, 7, 2, -449.42, -116.23, 0.00209, 58, 364.17, 200.07, 0.01519, 59, 275.48, 71.62, 0.15813, 60, 152.97, 53.58, 0.22594, 61, -5.82, 53.94, 0.21024, 62, -142.85, 0.11, 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.82, 0.21975, 61, 31.84, 49.3, 0.23251, 62, -106.46, 7.49, 0.2917, 1, -465.96, -72.58999, 0.10272, 7, 2, -524.31, -113.4, 0.00157, 58, 437.98, 213.03, 0.01186, 59, 345.74, 45.54, 0.12065, 60, 219.6, 19.28, 0.2131, 61, 68.31, 43.02, 0.25281, 62, -70.12999, 18.19, 0.32013, 1, -502.09, -68.19, 0.07983, 7, 2, -580.94, -76.79, 0.00148, 58, 494.56, 206.4, 0.01161, 59, 390.81, 21.3, 0.10603, 60, 261.62, -3.66, 0.20745, 61, 114.55, 37.83, 0.27063, 62, -26.15, 30.34, 0.34248, 1, -548.33, -63.22, 0.06027, 7, 2, -621.23, -53.98, 0.00153, 58, 539.16, 193.96, 0.01255, 59, 423.87, -11.11, 0.09566, 60, 291.46, -39.06, 0.20413, 61, 154.83, 14.99, 0.28529, 62, 19.91, 25.67, 0.35721, 1, -589.02, -42.19, 0.0436, 7, 2, -661.22, -31.34, 0.00173, 58, 583.41, 181.62, 0.01498, 59, 456.68, -43.27, 0.09054, 60, 321.06, -74.19999, 0.20422, 61, 194.79, -7.66, 0.29602, 62, 65.62, 21.04, 0.36309, 1, -629.78, -21.51, 0.02938, 7, 2, -698.76, 17.64, 0.00212, 58, 631.64, 143.1, 0.01928, 59, 480.34, -100.28, 0.09165, 60, 339.2, -133.2, 0.20843, 61, 232.3, -56.69, 0.30195, 62, 119.7, -8.68999, 0.35936, 1, -669.35, 25.71, 0.01717, 7, 2, -636.21, 0.4, 0.00186, 58, 566.79, 144.78, 0.02216, 59, 424.34, -67.51999, 0.09478, 60, 286.57, -95.27, 0.21971, 61, 169.77, -39.4, 0.30022, 62, 55.51, -18.08, 0.34915, 1, -606.08, 11.21, 0.01208, 7, 2, -596.68, -3.21, 0.00182, 58, 527.55, 138.78, 0.02791, 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.00828, 7, 2, -553.14, -7.2, 0.00202, 58, 484.33, 132.17, 0.03718, 59, 346.04, -38.78, 0.12359, 60, 211.34, -59.22, 0.25059, 61, 86.7, -31.72, 0.27864, 62, -23.59, -44.54, 0.3024, 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.89, -56.83, 0.26648, 61, 51.53, -43.14, 0.2587, 62, -52.88, -67.87, 0.26867, 1, -487.23, 18.31, 0.00359, 7, 2, -479.88, 14.24, 0.00317, 58, 418.38, 93.72, 0.06938, 59, 269.72, -40.64, 0.18219, 60, 135.19, -53.82, 0.27948, 61, 13.42, -53.11, 0.23298, 62, -82.03, -93.66, 0.2305, 1, -449.1, 30.06, 0.00226, 7, 2, -451.64, 0.32, 0.00417, 58, 390.82, 86.58, 0.09392, 59, 241.19, -39.8, 0.22144, 60, 105.59, -52.93, 0.28715, 61, -16.25, -62.16, 0.20207, 62, -108.34, -111.24, 0.18983, 1, -419.88, 38.84, 0.00138, 7, 2, -420.35, 31.66, 0.00546, 58, 364.8, 62.48, 0.12486, 59, 207.71, -42.14, 0.26611, 60, 73.33, -49.43, 0.28757, 61, -46.11, -70.49, 0.16677, 62, -129.51, -133.56, 0.14836, 1, -389.13, 47.88, 8.1E-4, 7, 2, -399.11, 28.98, 0.00747, 58, 345.49, 47.53, 0.17173, 59, 182.34, -50.62, 0.31858, 60, 45.87, -56.62, 0.26575, 61, -71.57, -84.96, 0.1256, 62, -150.85, -153.35, 0.11024, 1, -365.08, 62.86, 5.8E-4, 7, 2, -365.43, 66.79, 0.00956, 58, 319.95, 15.15, 0.2203, 59, 145.6, -61.95, 0.37151, 60, 9.60999, -63.26, 0.24136, 61, -101.06, -105.58, 0.08415, 62, -165.65, -187.83, 0.07272, 1, -333.3, 82.65, 3.7E-4, 7, 2, -312.31, 100.78, 0.01175, 58, 276.58, -30.61, 0.27125, 59, 85.52, -81.11, 0.42509, 60, -52.01, -76.62, 0.21336, 61, -154.2, -139.52, 0.04227, 62, -200.6, -240.31, 0.03607, 1, -278.65, 115.6, 1.7E-4, 6, 2, -242.48, 124.41, 0.01402, 58, 214.5, -70.36, 0.32389, 59, 11.97, -85.98, 0.47912, 60, -125.69, -74.48, 0.18281, 61, -224.04, -163.1, 1.1E-4, 62, -255.01, -290.05, 3.0E-5, 6, 2, -166.71, 150.07, 0.02469, 58, 147.14, -113.5, 0.57033, 59, -67.83999, -91.26, 0.38714, 60, -205.65, -72.16, 0.01755, 61, -299.83, -188.7, 2.0E-4, 62, -314.05, -344.03, 5.0E-5, 2, 2, -113.14, 135.84, 0.24192, 58, 91.72, -112.59, 0.75807, 2, 2, -42.12, 116.77, 0.14515, 58, 18.2, -111.17, 0.85484, 1, 2, 44.2, 107.1, 1, 2, 2, 140.09, 96.35, 0.22579, 6, 72.58999, 65.41, 0.7742, 4, 2, 137.69, 169.35, 0.05644, 6, 117.5, 123, 0.24355, 7, 78.3, 94.48, 0.2125, 8, 23.7, 91.74, 0.4875, 2, 7, 171.15, 111.98, 0.25, 8, 118.17, 93.15, 0.75, 1, 8, 158.96, -25.58, 1, 1, 1, -40.63, -86.01, 1, 3, 2, 67.33999, -86.66, 0.33215, 58, -137.02, 59.92, 0.08303, 1, 92.54, -90.61, 0.5848, 2, 2, 170.13, -66.29, 0.75, 6, -8.53, -78.72, 0.25, 2, 2, 231.74, -8.12, 0.4, 6, 76.03, -73.51999, 0.6, 5, 2, 222.04, 70.41, 0.16894, 6, 118.9, -7, 0.5373, 7, -6.58, -3.99, 0.17075, 8, -76.73, 9.18, 0.08551, 39, 45.05, -108.02, 0.03748, 1, 8, 50.43, -46.56, 1, 1, 6, -9.88, 20.65, 1, 2, 2, -53.22, 20.53, 0.2, 58, 5.8, -15.09, 0.8, 6, 2, -180.71, 32.22, 0.0849, 58, 132.35, 4.23999, 0.55723, 59, -23.98, 19.01, 0.34911, 60, -151.51, 33.43999, 0.0085, 61, -285.75, -70.86, 1.8E-4, 62, -348.66, -230.51, 5.0E-5, 7, 2, -304.22, 7.95, 0.0403, 58, 246.39, 57.53, 0.26453, 59, 101.61, 10.65, 0.41136, 60, -27.28, 13.2, 0.19982, 61, -162.22, -46.69, 0.04444, 62, -245.36, -158.59, 0.03938, 1, -272.64, 22.61, 1.4E-4, 7, 2, -418.56, -35.09999, 0.01926, 58, 346.99, 126.85, 0.12662, 59, 223.17, 22.83, 0.27476, 60, 94.88, 13.77, 0.24466, 61, -47.85, -3.72, 0.1726, 62, -158.02, -73.16, 0.16124, 1, -387.18, -18.91, 8.0E-4, 7, 2, -566.47, -40.57, 0.00611, 58, 489.24, 167.77, 0.04146, 59, 367.51, -9.96, 0.13446, 60, 235.45, -32.57, 0.21638, 61, 100.06, 1.62, 0.28346, 62, -24.81, -8.63, 0.31257, 1, -534.79, -26.69, 0.00552, 7, 2, -648.5, -15.19, 0.00311, 58, 574.96, 162.88, 0.02391, 59, 440.24, -55.6, 0.09894, 60, 303.52, -84.91, 0.20698, 61, 182.07, -23.8, 0.30202, 62, 60.48, 1.14, 0.35292, 1, -617.72, -4.84, 0.01208, 3, 6, 174.99, 22.22, 0.2, 7, 54.82, -19.14, 0.6, 8, -18.79999, -16.2, 0.2, 6, 2, -242.34, 20.11, 0.04821, 58, 189.25, 30.83, 0.31645, 59, 38.68, 14.84, 0.45752, 60, -89.52, 23.34, 0.17767, 61, -224.1, -58.8, 1.0E-4, 62, -297.11, -194.62, 3.0E-5, 7, 2, -359.57, -12.88, 0.03247, 58, 295.08, 91.08, 0.21317, 59, 160.45, 16.54, 0.3652, 60, 31.85, 13.48, 0.22126, 61, -106.86, -25.89, 0.08869, 62, -203.08, -117.24, 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.27, 0.19521, 60, 161.53, -8.2, 0.2345, 61, 22.27, -1.17999, 0.23931, 62, -94.86, -42.56, 0.24398, 1, -457.15, -22.02, 0.00224, 7, 2, -607.64, -27.83, 0.00441, 58, 532.26, 165.32, 0.03117, 59, 404.01, -32.87, 0.11328, 60, 269.61, -58.84, 0.20984, 61, 141.21, -11.13, 0.29595, 62, 17.98, -3.72, 0.33702, 1, -576.34, -15.62, 0.00828, 1, 8, 26.4, -166.06, 1, 1, 8, 87.21, -106.12, 1, 1, 8, 108.19, -49.62, 1, 2, 8, 61.73, -82.12999, 0.50021, 39, 4.42, 52.83, 0.49978, 2, 8, 22.84, -109.4, 0.50021, 39, 51.52, 46.73, 0.49978, 5, 2, 348.39, 119.13, 0.00694, 6, 247.12, -50.52, 0.065, 7, 60.86, -121.4, 0.06027, 8, -30.3, -118, 0.48738, 39, 96.58, 17.21999, 0.38039, 1, 2, 26.73, 14.8, 1, 2, 2, -107.97, 25.67, 0.24192, 58, 60.17, -6.91, 0.75807, 5, 2, 235.53, 102.96, 0.07484, 6, 150.1, 9.35, 0.34943, 7, 27.64, -12.34, 0.40983, 8, -44.43, -4.87, 0.14928, 39, 34.03, -74.39, 0.0166, 5, 2, 227.15, 28.49, 0.29238, 6, 95.96, -42.46, 0.5708, 7, -47.23, -15.44, 0.07952, 8, -118.74, 4.84, 0.03982, 39, 84.85, -129.5, 0.01744, 2, 8, 5.19, -153.1, 0.87618, 39, 90.96, 71.21, 0.12381, 5, 2, 351.78, 108.85, 0.01127, 6, 243.13, -60.59, 0.10548, 7, 51.21, -126.33, 0.09782, 8, -40.65, -121.21, 0.46541, 39, 105.71, 17.33, 0.32, 1, 8, 23.69, -185.21, 1, 1, 8, 79.64, -175.94, 1, 1, 8, 93.96, -187.56, 1, 1, 8, 87.07, -206.55, 1, 1, 8, 64.19999, -216.74, 1, 1, 8, 52.23, -203.68, 1, 1, 8, 59.24, -187.03, 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.1, -166.14, 1, 1, 8, 46.84, -186.41, 1, 1, 8, 50.32, -204.36, 1, 1, 8, 41.7, -206.59, 1, 1, 8, 61.87, -230.97, 1, 7, 2, -448.12, -58.75, 0.01475, 58, 374.97, 143.6, 0.09709, 59, 256.29, 17.42, 0.23314, 60, 127.43, 2.07, 0.24171, 61, -13.35, -3.05, 0.20842, 62, -128.14, -55.46, 0.20349, 1, -421.47, -20.31, 0.00137, 7, 2, -519.55, -68.54, 0.0083, 58, 442.75, 168.18, 0.05534, 59, 327.21, 4.42, 0.16201, 60, 196.28, -19.32, 0.22526, 61, 58.71, -1.04999, 0.2645, 62, -62.24, -26.21, 0.28097, 1, -493.48, -23.91, 0.00358, 7, 2, -386.43, -41.34999, 0.02472, 58, 318.32, 113.62, 0.16236, 59, 192.26, 20.14, 0.31904, 60, 64.19, 12.44, 0.24198, 61, -76.55, -13.67, 0.13287, 62, -182.56, -89.31, 0.11857, 1, -358.52, -8.29, 4.3E-4, 2, 8, 56.98, -162.99, 0.89259, 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, @@ -378,10 +384,10 @@ }, "raptor_front_arm": { "raptor_front_arm": { - "type": "skinnedmesh", + "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, 63, 3.06, 31.88, 0.51075, 43, 66.56, -109.48, 0.48924, 1, 63, 35.87, 35.62, 1, 2, 63, 60.94, 27.12, 0.8464, 64, 46.49, 31.12, 0.15358, 3, 63, 74.05, 22.67, 0.34375, 64, 36.5, 21.53, 0.64062, 65, -45.25, -29.96, 0.01562, 3, 63, 67, 31.58, 0.10937, 64, 47.66, 23.68, 0.78125, 65, -40.93, -19.44, 0.10937, 3, 63, 42.17, 62.99, 0.01562, 64, 86.98, 31.24, 0.64062, 65, -25.75, 17.61, 0.34375, 2, 64, 103.83, 34.49, 0.34375, 65, -19.24, 33.49, 0.65625, 2, 64, 114.04, 19.51, 0.10937, 65, -1.11, 33.84, 0.89062, 2, 64, 144.85, -25.73, 0.02083, 65, 53.62, 34.88, 0.97916, 1, 65, 96.03, -19.16, 1, 1, 65, 104.2, -47.31, 1, 1, 65, 71.33999, -23.98, 1, 1, 65, 81.39, -64.61, 1, 1, 65, 76.8, -68.81, 1, 2, 64, 83.18, -57.72, 0.02083, 65, 46.65, -34.25, 0.97916, 2, 64, 73.12999, -45.76, 0.10937, 65, 31.14, -36.12, 0.89062, 2, 64, 73.98, -26.9, 0.34375, 65, 15.82, -25.09, 0.65625, 3, 63, 103.67, 70.28, 0.01562, 64, 65.1, -26.69, 0.64062, 65, 10.78, -32.41, 0.34375, 3, 63, 133.56, 9.13, 0.10937, 64, -2.94, -25.03, 0.78125, 65, -27.84, -88.47, 0.10937, 3, 63, 123.67, -14.42, 0.34375, 64, -19.29, -5.39, 0.64062, 65, -53.23, -91.41, 0.01562, 2, 63, 97.41, -15.43, 0.8464, 64, -8.08, 18.37, 0.15358, 1, 63, 45.46, -17.43, 1, 2, 63, 40.68999, -27.17, 0.45035, 43, -1.69, -93.8, 0.54964, 2, 63, -2.74, -29.63, 0.44352, 43, 18.99, -72.93, 0.55646, 1, 43, 32.11, -48.45, 1, 1, 43, 57.56, -67.43, 1, 1, 43, 84.38, -87.42, 1, 2, 63, 16.44, 5.21, 0.7182, 43, 46.31, -101.86, 0.28178, 2, 63, -4.51, 5.32, 0.48851, 43, 52.82, -81.94, 0.51147 ], + "vertices": [ 2, 21, 3.06, 31.88, 0.51075, 6, 66.56, -109.48, 0.48924, 1, 21, 35.87, 35.62, 1, 2, 21, 60.94, 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.64062, 31, -45.25, -29.96, 0.01562, 3, 21, 67, 31.58, 0.10937, 22, 47.66, 23.68, 0.78125, 31, -40.93, -19.44, 0.10937, 3, 21, 42.17, 62.99, 0.01562, 22, 86.98, 31.24, 0.64062, 31, -25.75, 17.61, 0.34375, 2, 22, 103.83, 34.49, 0.34375, 31, -19.24, 33.49, 0.65625, 2, 22, 114.04, 19.51, 0.10937, 31, -1.11, 33.84, 0.89062, 2, 22, 144.85, -25.73, 0.02083, 31, 53.62, 34.88, 0.97916, 1, 31, 96.03, -19.16, 1, 1, 31, 104.2, -47.31, 1, 1, 31, 71.33999, -23.98, 1, 1, 31, 81.39, -64.61, 1, 1, 31, 76.8, -68.81, 1, 2, 22, 83.18, -57.72, 0.02083, 31, 46.65, -34.25, 0.97916, 2, 22, 73.12999, -45.76, 0.10937, 31, 31.14, -36.12, 0.89062, 2, 22, 73.98, -26.9, 0.34375, 31, 15.82, -25.09, 0.65625, 3, 21, 103.67, 70.28, 0.01562, 22, 65.1, -26.69, 0.64062, 31, 10.78, -32.41, 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.67, -14.42, 0.34375, 22, -19.29, -5.39, 0.64062, 31, -53.23, -91.41, 0.01562, 2, 21, 97.41, -15.43, 0.8464, 22, -8.08, 18.37, 0.15358, 1, 21, 45.46, -17.43, 1, 2, 21, 40.68999, -27.17, 0.45035, 6, -1.69, -93.8, 0.54964, 2, 21, -2.74, -29.63, 0.44352, 6, 18.99, -72.93, 0.55646, 1, 6, 32.11, -48.45, 1, 1, 6, 57.56, -67.43, 1, 1, 6, 84.38, -87.42, 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.82, -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, @@ -390,10 +396,10 @@ }, "raptor_front_leg": { "raptor_front_leg": { - "type": "skinnedmesh", + "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, 11, 128.03, 88.47, 0.83908, 12, -70.19999, -134.13, 0.01331, 3, 158.83, -71.91, 0.1476, 2, 11, 219.55, 53.15, 0.77988, 12, -48.04, -38.58, 0.22011, 3, 11, 266.3, 35.09999, 0.5353, 12, -36.73, 10.22, 0.46443, 14, 127.25, 245.46, 2.4E-4, 4, 11, 286.89, 9.79, 0.35076, 12, -14.56, 34.14, 0.64667, 14, 125.69, 212.88, 0.0023, 15, 101.39, 199.13, 2.5E-4, 4, 11, 281.54, -41.24, 0.09169, 12, 36.71, 36, 0.90196, 14, 87.64, 178.44, 0.00513, 15, 58.29, 171.29, 0.00119, 5, 11, 271.53, -136.86, 0.05608, 12, 132.77, 39.48, 0.69232, 13, 34.99, 78.76, 0.22087, 14, 16.37999, 113.93, 0.0224, 15, -22.45, 119.13, 0.0083, 5, 11, 283.51, -164.25, 0.01987, 12, 158.21, 55.17, 0.50334, 13, 52.65, 54.63, 0.3617, 14, 7.01, 85.54, 0.08322, 15, -36.28, 92.63, 0.03184, 6, 11, 326.15, -179.3, 0.00798, 12, 167.14, 99.49, 0.21327, 13, 97.55, 49.25, 0.35075, 14, 28.72, 45.87, 0.14106, 15, -21.26, 49.99, 0.22311, 16, -72.29, 25.96, 0.0638, 6, 11, 333.96, -167.35, 0.00242, 12, 154.22, 105.55, 0.07519, 13, 102.57, 62.6, 0.22995, 14, 42.51, 49.55, 0.2831, 15, -7.06, 51.39, 0.2694, 16, -58.17, 28.03, 0.13992, 6, 11, 344.19, -149.68, 4.9E-4, 12, 134.24, 114.44, 0.0176, 13, 109.72, 83.39, 0.11397, 14, 64.08999, 55.23, 0.07976, 15, 15.12, 53.51, 0.36292, 16, -36.09, 31.19, 0.42523, 1, 16, 35.8, 41.81, 1, 1, 16, 128.11, 17.93, 1, 1, 16, 188.72, -29.42, 1, 1, 16, 44.86, -26.17, 1, 1, 15, 133.17, -49.83, 1, 1, 15, 78.78, -50.15, 1, 5, 11, 399.32, -220.02, 2.2E-4, 12, 195.56, 179.43, 0.01703, 13, 179.46, 27.52, 0.2372, 14, 58.34, -33.93, 0.2023, 15, -4.91, -33.55, 0.54324, 5, 11, 370.41, -244.91, 3.2E-4, 12, 225.9, 152.49, 0.02513, 13, 155.04, -5.13, 0.35003, 14, 17.87999, -32.5, 0.29852, 15, -44.62, -25.61, 0.32598, 5, 11, 340.37, -270.04, 0.00251, 12, 254.98, 126.27, 0.10129, 13, 131.21, -36.2, 0.54075, 14, -21.24, -31.17, 0.2082, 15, -83.01999, -17.96999, 0.14723, 5, 11, 225.1, -238.94, 0.01529, 12, 240.33, 7.81, 0.24036, 13, 11.94, -30.98, 0.5788, 14, -86.31, 68.9, 0.12023, 15, -131.06, 91.29, 0.04528, 5, 11, 194.64, -233.55, 0.04819, 12, 239.26, -23.1, 0.40427, 13, -18.95999, -32.37, 0.48451, 14, -105.4, 93.25, 0.04604, 15, -145.97, 118.4, 0.01696, 5, 11, 187.65, -209.73, 0.09565, 12, 216.66, -33.34999, 0.57617, 13, -30.97, -10.65, 0.30651, 14, -94.71, 115.65, 0.01788, 15, -131.8, 138.78, 0.00376, 4, 11, 163.85, -128.67, 0.19533, 12, 139.75, -68.26, 0.8011, 14, -58.32, 191.88, 0.00327, 15, -83.58, 208.13, 2.9E-4, 4, 11, 165.74, -94.49, 0.31921, 12, 105.59, -71.26, 0.6795, 14, -5.04, 220.72, 0.00116, 15, -56.32, 275.96, 1.0E-4, 4, 11, 166.39, -79.07, 0.46205, 12, 90.23, -72.76, 0.53752, 14, 5.55, 230.48, 3.9E-4, 15, -40.61, 286.16, 2.0E-5, 3, 11, 166.49, -74.17, 0.53779, 12, 85.42, -73.28, 0.46208, 14, -19.99, 230.7, 1.2E-4, 2, 11, 141.54, -82.46, 0.73138, 12, 97.13, -96.82, 0.26861, 3, 11, 99.76, -97.08, 0.81379, 12, 117.34, -136.23, 0.13997, 3, -2.56, -164.19, 0.04623, 3, 11, 45.01, -114.56, 0.8186, 12, 142.41, -187.89, 0.02098, 3, -51.09, -135.29, 0.1604, 3, 11, -16.2, -74.76, 0.62389, 12, 113.82, -253.08, 0.00952, 3, -42.95, -58.38, 0.36658, 2, 11, -74.73, -19.33, 0.31468, 3, -52.66, 17.54999, 0.68531, 2, 11, 1.67, 76.75, 0.25576, 3, 70.07, 18.78, 0.74423, 1, 11, 93.54, 4.13, 1, 2, 11, 185.14, -6.66, 0.75461, 12, 15.98, -64.26999, 0.24538, 2, 11, 217.11, -18.75, 0.50844, 12, 23.47, -30.93, 0.49154, 3, 11, 225.63, -32.91999, 0.32512, 12, 36.3, -20.5, 0.6744, 14, 51.57, 221.95, 4.7E-4, 4, 11, 223, -84.73, 0.20061, 12, 87.96, -15.86, 0.79287, 14, 15.03, 185.13, 0.00581, 15, -12.28, 189.61, 6.9E-4, 5, 11, 235.61, -168.06, 0.07777, 12, 168.69, 8.29, 0.54931, 13, 6.74, 40.47, 0.33413, 14, -31.18, 114.66, 0.0321, 15, -69.26999, 127.55, 0.00667, 5, 11, 259.63, -194.79, 0.01921, 12, 191.79, 35.8, 0.30498, 13, 36, 19.62, 0.53642, 14, -31.14, 78.74, 0.09568, 15, -75.03, 92.09, 0.04369, 5, 11, 332.55, -220.1, 0.00292, 12, 206.64, 111.53, 0.10776, 13, 112.69, 10.82, 0.51915, 14, 6.25, 11.23, 0.23449, 15, -49.03, 19.43, 0.13565, 4, 12, 192.51, 130.62, 0.03213, 13, 130.6, 26.41, 0.33941, 14, 29.35, 5.71, 0.27333, 15, -27.12, 10.25, 0.35511, 1, 16, 18.54999, -16.62999, 1, 1, 16, 19.07, -14.51, 1, 6, 11, 381.55, -150.4, 3.0E-4, 12, 130.71, 150.34, 0.00811, 13, 145.36, 89.53, 0.04102, 14, 89.29, 30.41, 0.02558, 15, 36, 24.95, 0.37636, 16, -13.89, 3.64, 0.5486, 1, 16, 37.75, -25.46, 1, 4, 12, 164.9, 153.55, 0.02263, 13, 151.18, 56, 0.23908, 14, 65.44, 5.55, 0.19254, 15, 8.45, 4.27, 0.54574, 2, 11, -9.28, -17.5, 0.59605, 3, 7.72, -30.85, 0.40393, 3, 11, 195.9, -53.81, 0.42356, 12, 61.11, -47.06, 0.57612, 14, 39.7, 225.21, 2.9E-4, 3, 11, 190.1, -48.45, 0.53227, 12, 56.61, -53.56, 0.46765, 14, 39.83, 233.12, 6.0E-5, 2, 11, 161.26, -48.26, 0.79873, 12, 60.44, -82.12999, 0.20126, 3, 11, 120.37, -58.54, 0.8485, 12, 76.31, -121.18, 0.14441, 3, 41.04, -161.4, 0.00707, 4, 11, 197.37, -69.23, 0.33487, 12, 76.17, -43.46, 0.66324, 14, 30.34, 213.88, 0.0017, 15, -9.09, 262.42, 1.8E-4 ], + "vertices": [ 3, 25, 128.03, 88.47, 0.83908, 26, -70.19999, -134.13, 0.01331, 1, 158.83, -71.91, 0.1476, 2, 25, 219.55, 53.15, 0.77988, 26, -48.04, -38.58, 0.22011, 3, 25, 266.3, 35.09999, 0.5353, 26, -36.73, 10.22, 0.46443, 28, 127.25, 245.46, 2.4E-4, 4, 25, 286.89, 9.79, 0.35076, 26, -14.56, 34.14, 0.64667, 28, 125.69, 212.88, 0.0023, 29, 101.39, 199.13, 2.5E-4, 4, 25, 281.54, -41.24, 0.09169, 26, 36.71, 36, 0.90196, 28, 87.64, 178.44, 0.00513, 29, 58.29, 171.29, 0.00119, 5, 25, 271.53, -136.86, 0.05608, 26, 132.77, 39.48, 0.69232, 27, 34.99, 78.76, 0.22087, 28, 16.37999, 113.93, 0.0224, 29, -22.45, 119.13, 0.0083, 5, 25, 283.51, -164.25, 0.01987, 26, 158.21, 55.17, 0.50334, 27, 52.65, 54.63, 0.3617, 28, 7.01, 85.54, 0.08322, 29, -36.28, 92.63, 0.03184, 6, 25, 326.15, -179.3, 0.00798, 26, 167.14, 99.49, 0.21327, 27, 97.55, 49.25, 0.35075, 28, 28.72, 45.87, 0.14106, 29, -21.26, 49.99, 0.22311, 30, -72.29, 25.96, 0.0638, 6, 25, 333.96, -167.35, 0.00242, 26, 154.22, 105.55, 0.07519, 27, 102.57, 62.6, 0.22995, 28, 42.51, 49.55, 0.2831, 29, -7.06, 51.39, 0.2694, 30, -58.17, 28.03, 0.13992, 6, 25, 344.19, -149.68, 4.9E-4, 26, 134.24, 114.44, 0.0176, 27, 109.72, 83.39, 0.11397, 28, 64.08999, 55.23, 0.07976, 29, 15.12, 53.51, 0.36292, 30, -36.09, 31.19, 0.42523, 1, 30, 35.8, 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.17, -49.83, 1, 1, 29, 78.78, -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.2023, 29, -4.91, -33.55, 0.54324, 5, 25, 370.41, -244.91, 3.2E-4, 26, 225.9, 152.49, 0.02513, 27, 155.04, -5.13, 0.35003, 28, 17.87999, -32.5, 0.29852, 29, -44.62, -25.61, 0.32598, 5, 25, 340.37, -270.04, 0.00251, 26, 254.98, 126.27, 0.10129, 27, 131.21, -36.2, 0.54075, 28, -21.24, -31.17, 0.2082, 29, -83.01999, -17.96999, 0.14723, 5, 25, 225.1, -238.94, 0.01529, 26, 240.33, 7.81, 0.24036, 27, 11.94, -30.98, 0.5788, 28, -86.31, 68.9, 0.12023, 29, -131.06, 91.29, 0.04528, 5, 25, 194.64, -233.55, 0.04819, 26, 239.26, -23.1, 0.40427, 27, -18.95999, -32.37, 0.48451, 28, -105.4, 93.25, 0.04604, 29, -145.97, 118.4, 0.01696, 5, 25, 187.65, -209.73, 0.09565, 26, 216.66, -33.34999, 0.57617, 27, -30.97, -10.65, 0.30651, 28, -94.71, 115.65, 0.01788, 29, -131.8, 138.78, 0.00376, 4, 25, 163.85, -128.67, 0.19533, 26, 139.75, -68.26, 0.8011, 28, -58.32, 191.88, 0.00327, 29, -83.58, 208.13, 2.9E-4, 4, 25, 165.74, -94.49, 0.31921, 26, 105.59, -71.26, 0.6795, 28, -5.04, 220.72, 0.00116, 29, -56.32, 275.96, 1.0E-4, 4, 25, 166.39, -79.07, 0.46205, 26, 90.23, -72.76, 0.53752, 28, 5.55, 230.48, 3.9E-4, 29, -40.61, 286.16, 2.0E-5, 3, 25, 166.49, -74.17, 0.53779, 26, 85.42, -73.28, 0.46208, 28, -19.99, 230.7, 1.2E-4, 2, 25, 141.54, -82.46, 0.73138, 26, 97.13, -96.82, 0.26861, 3, 25, 99.76, -97.08, 0.81379, 26, 117.34, -136.23, 0.13997, 1, -2.56, -164.19, 0.04623, 3, 25, 45.01, -114.56, 0.8186, 26, 142.41, -187.89, 0.02098, 1, -51.09, -135.29, 0.1604, 3, 25, -16.2, -74.76, 0.62389, 26, 113.82, -253.08, 0.00952, 1, -42.95, -58.38, 0.36658, 2, 25, -74.73, -19.33, 0.31468, 1, -52.66, 17.54999, 0.68531, 2, 25, 1.67, 76.75, 0.25576, 1, 70.07, 18.78, 0.74423, 1, 25, 93.54, 4.13, 1, 2, 25, 185.14, -6.66, 0.75461, 26, 15.98, -64.26999, 0.24538, 2, 25, 217.11, -18.75, 0.50844, 26, 23.47, -30.93, 0.49154, 3, 25, 225.63, -32.91999, 0.32512, 26, 36.3, -20.5, 0.6744, 28, 51.57, 221.95, 4.7E-4, 4, 25, 223, -84.73, 0.20061, 26, 87.96, -15.86, 0.79287, 28, 15.03, 185.13, 0.00581, 29, -12.28, 189.61, 6.9E-4, 5, 25, 235.61, -168.06, 0.07777, 26, 168.69, 8.29, 0.54931, 27, 6.74, 40.47, 0.33413, 28, -31.18, 114.66, 0.0321, 29, -69.26999, 127.55, 0.00667, 5, 25, 259.63, -194.79, 0.01921, 26, 191.79, 35.8, 0.30498, 27, 36, 19.62, 0.53642, 28, -31.14, 78.74, 0.09568, 29, -75.03, 92.09, 0.04369, 5, 25, 332.55, -220.1, 0.00292, 26, 206.64, 111.53, 0.10776, 27, 112.69, 10.82, 0.51915, 28, 6.25, 11.23, 0.23449, 29, -49.03, 19.43, 0.13565, 4, 26, 192.51, 130.62, 0.03213, 27, 130.6, 26.41, 0.33941, 28, 29.35, 5.71, 0.27333, 29, -27.12, 10.25, 0.35511, 1, 30, 18.54999, -16.62999, 1, 1, 30, 19.07, -14.51, 1, 6, 25, 381.55, -150.4, 3.0E-4, 26, 130.71, 150.34, 0.00811, 27, 145.36, 89.53, 0.04102, 28, 89.29, 30.41, 0.02558, 29, 36, 24.95, 0.37636, 30, -13.89, 3.64, 0.5486, 1, 30, 37.75, -25.46, 1, 4, 26, 164.9, 153.55, 0.02263, 27, 151.18, 56, 0.23908, 28, 65.44, 5.55, 0.19254, 29, 8.45, 4.27, 0.54574, 2, 25, -9.28, -17.5, 0.59605, 1, 7.72, -30.85, 0.40393, 3, 25, 195.9, -53.81, 0.42356, 26, 61.11, -47.06, 0.57612, 28, 39.7, 225.21, 2.9E-4, 3, 25, 190.1, -48.45, 0.53227, 26, 56.61, -53.56, 0.46765, 28, 39.83, 233.12, 6.0E-5, 2, 25, 161.26, -48.26, 0.79873, 26, 60.44, -82.12999, 0.20126, 3, 25, 120.37, -58.54, 0.8485, 26, 76.31, -121.18, 0.14441, 1, 41.04, -161.4, 0.00707, 4, 25, 197.37, -69.23, 0.33487, 26, 76.17, -43.46, 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, @@ -402,10 +408,10 @@ }, "raptor_hindleg_back": { "raptor_hindleg_back": { - "type": "skinnedmesh", + "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, 4, 53.94, 69.15, 1, 1, 4, 126.23, 67.31, 1, 2, 4, 226.42, 31.13, 0.9375, 5, -30.87, -1.11, 0.0625, 2, 4, 240.84, 25.33, 0.7, 5, -25.64, 13.52, 0.3, 2, 4, 246.67, 8.05, 0.3, 5, -8.60999, 20.02, 0.7, 3, 4, 240.81, -115.25, 0.0625, 5, 114.8, 19.01, 0.875, 6, 9.47999, 59.16, 0.0625, 2, 5, 131.07, 29.69, 0.7, 6, 22.11, 44.35, 0.3, 2, 5, 146.06, 39.54, 0.3, 6, 33.75999, 30.71, 0.7, 4, 5, 152.6, 65.01, 0.12438, 6, 59.85, 27.41, 0.74434, 7, 15.85, 48.05, 0.12104, 8, -80.51999, 23.87, 0.01021, 4, 5, 154.28, 71.58999, 0.0519, 6, 66.58999, 26.56, 0.74749, 7, 16.71999, 41.31, 0.15401, 8, -77.54, 17.76, 0.04658, 4, 5, 145.73, 77.3, 0.02193, 6, 71.19, 35.75999, 0.63296, 7, 26.78, 39.16999, 0.1288, 8, -67.32, 18.95999, 0.21628, 3, 6, 87.93, 69.21, 0.0625, 7, 63.37, 31.39, 0.675, 8, -30.17, 23.3, 0.26249, 2, 7, 113.82, 35.72, 0.1038, 8, 16.23, 43.56, 0.89619, 1, 8, 128.14, 12.02, 1, 1, 8, 161.85, -15.81, 1, 2, 7, 90.98, -23.36, 0.0138, 8, 13.52, -19.71999, 0.98619, 2, 7, 62.97, -25.81, 0.7, 8, -12.23, -31.02, 0.3, 3, 6, 115.12, -1.33, 0.08333, 7, 1.93, -12.66, 0.83333, 8, -74.26, -38.09999, 0.08333, 2, 6, 106.11, -23.53, 0.3, 7, -21.8, -9.52, 0.7, 2, 6, 97.43, -44.9, 0.7, 7, -44.67, -6.51, 0.3, 2, 6, 84.26, -40.68999, 0.9375, 7, -43.9, 7.29, 0.0625, 1, 6, 49.18, -29.46, 1, 2, 5, 206.75, 5.37, 0.13333, 6, 7.44, -33.77, 0.86666, 2, 5, 219.64, -20.52, 0.36111, 6, -16.64, -49.8, 0.63888, 2, 5, 208.4, -37.82, 0.72083, 6, -35.22, -40.82, 0.27916, 2, 5, 200.49, -50.02, 0.91666, 6, -48.31, -34.48, 0.08333, 1, 5, 161.1, -36.97, 1, 2, 4, 150.1, -116.76, 0.08333, 5, 119.88, -71.55, 0.91666, 2, 4, 154.99, -70.71, 0.42846, 5, 73.68, -68.47, 0.57153, 2, 4, 150.3, -65.26999, 0.35604, 5, 68.42, -73.36, 0.64395, 2, 4, 146.51, -60.87, 0.59147, 5, 64.17, -77.32, 0.40852, 2, 4, 115.12, -75.08, 0.8446, 5, 79.61, -108.13, 0.15538, 1, 4, 63.33, -98.53, 1, 1, 4, 21.78, -94.55, 1, 1, 4, -66.69, -32.04, 1, 1, 4, -6.62, 52.97, 1, 1, 4, 58.14, -6, 1, 1, 4, 121.17, 2.44, 1, 2, 4, 188.87, -12.1, 0.96, 5, 13.79, -36.91999, 0.04, 2, 4, 197.11, -18.42, 0.7, 5, 19.79, -28.44, 0.3, 2, 4, 203.98, -28.61, 0.3, 5, 29.69, -21.17, 0.7, 3, 4, 213.53, -136.06, 0.04, 5, 136.67, -7.42, 0.91999, 6, -14.02, 34.16, 0.04, 2, 5, 164.32, 0.66, 0.7, 6, -2.53, 7.73, 0.3, 2, 5, 177.97, 21.57, 0.25, 6, 19.92, -3.19, 0.75, 3, 5, 187.55, 72.78, 0.04, 6, 71.93, -6.29, 0.91999, 7, -13.72, 27.87, 0.04, 2, 6, 79.66, -3.72, 0.7, 7, -9.28, 21.04, 0.3, 3, 6, 87.98, 7.25, 0.3, 7, 3.42, 15.76, 0.66, 8, -81.96, -10.7, 0.04, 3, 6, 114.16, 61.85, 0.04, 7, 62.84, 4.15, 0.7, 8, -21.95, -2.66, 0.26 ], + "vertices": [ 1, 44, 53.94, 69.15, 1, 1, 44, 126.23, 67.31, 1, 2, 44, 226.42, 31.13, 0.9375, 45, -30.87, -1.11, 0.0625, 2, 44, 240.84, 25.33, 0.7, 45, -25.64, 13.52, 0.3, 2, 44, 246.67, 8.05, 0.3, 45, -8.60999, 20.02, 0.7, 3, 44, 240.81, -115.25, 0.0625, 45, 114.8, 19.01, 0.875, 46, 9.47999, 59.16, 0.0625, 2, 45, 131.07, 29.69, 0.7, 46, 22.11, 44.35, 0.3, 2, 45, 146.06, 39.54, 0.3, 46, 33.75999, 30.71, 0.7, 4, 45, 152.6, 65.01, 0.12438, 46, 59.85, 27.41, 0.74434, 47, 15.85, 48.05, 0.12104, 48, -80.51999, 23.87, 0.01021, 4, 45, 154.28, 71.58999, 0.0519, 46, 66.58999, 26.56, 0.74749, 47, 16.71999, 41.31, 0.15401, 48, -77.54, 17.76, 0.04658, 4, 45, 145.73, 77.3, 0.02193, 46, 71.19, 35.75999, 0.63296, 47, 26.78, 39.16999, 0.1288, 48, -67.32, 18.95999, 0.21628, 3, 46, 87.93, 69.21, 0.0625, 47, 63.37, 31.39, 0.675, 48, -30.17, 23.3, 0.26249, 2, 47, 113.82, 35.72, 0.1038, 48, 16.23, 43.56, 0.89619, 1, 48, 128.14, 12.02, 1, 1, 48, 161.85, -15.81, 1, 2, 47, 90.98, -23.36, 0.0138, 48, 13.52, -19.71999, 0.98619, 2, 47, 62.97, -25.81, 0.7, 48, -12.23, -31.02, 0.3, 3, 46, 115.12, -1.33, 0.08333, 47, 1.93, -12.66, 0.83333, 48, -74.26, -38.09999, 0.08333, 2, 46, 106.11, -23.53, 0.3, 47, -21.8, -9.52, 0.7, 2, 46, 97.43, -44.9, 0.7, 47, -44.67, -6.51, 0.3, 2, 46, 84.26, -40.68999, 0.9375, 47, -43.9, 7.29, 0.0625, 1, 46, 49.18, -29.46, 1, 2, 45, 206.75, 5.37, 0.13333, 46, 7.44, -33.77, 0.86666, 2, 45, 219.64, -20.52, 0.36111, 46, -16.64, -49.8, 0.63888, 2, 45, 208.4, -37.82, 0.72083, 46, -35.22, -40.82, 0.27916, 2, 45, 200.49, -50.02, 0.91666, 46, -48.31, -34.48, 0.08333, 1, 45, 161.1, -36.97, 1, 2, 44, 150.1, -116.76, 0.08333, 45, 119.88, -71.55, 0.91666, 2, 44, 154.99, -70.71, 0.42846, 45, 73.68, -68.47, 0.57153, 2, 44, 150.3, -65.26999, 0.35604, 45, 68.42, -73.36, 0.64395, 2, 44, 146.51, -60.87, 0.59147, 45, 64.17, -77.32, 0.40852, 2, 44, 115.12, -75.08, 0.8446, 45, 79.61, -108.13, 0.15538, 1, 44, 63.33, -98.53, 1, 1, 44, 21.78, -94.55, 1, 1, 44, -66.69, -32.04, 1, 1, 44, -6.62, 52.97, 1, 1, 44, 58.14, -6, 1, 1, 44, 121.17, 2.44, 1, 2, 44, 188.87, -12.1, 0.96, 45, 13.79, -36.91999, 0.04, 2, 44, 197.11, -18.42, 0.7, 45, 19.79, -28.44, 0.3, 2, 44, 203.98, -28.61, 0.3, 45, 29.69, -21.17, 0.7, 3, 44, 213.53, -136.06, 0.04, 45, 136.67, -7.42, 0.91999, 46, -14.02, 34.16, 0.04, 2, 45, 164.32, 0.66, 0.7, 46, -2.53, 7.73, 0.3, 2, 45, 177.97, 21.57, 0.25, 46, 19.92, -3.19, 0.75, 3, 45, 187.55, 72.78, 0.04, 46, 71.93, -6.29, 0.91999, 47, -13.72, 27.87, 0.04, 2, 46, 79.66, -3.72, 0.7, 47, -9.28, 21.04, 0.3, 3, 46, 87.98, 7.25, 0.3, 47, 3.42, 15.76, 0.66, 48, -81.96, -10.7, 0.04, 3, 46, 114.16, 61.85, 0.04, 47, 62.84, 4.15, 0.7, 48, -21.95, -2.66, 0.26 ], "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, @@ -420,10 +426,10 @@ }, "raptor_jaw": { "raptor_jaw": { - "type": "skinnedmesh", + "type": "mesh", "uvs": [ 0.40984, 0.22169, 0.42214, 0.3988, 0.67894, 0.53819, 0.7589, 0.62838, 0.99999, 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, 52, 28.6, 68.85, 1, 1, 52, 69.65, 38.95, 1, 1, 52, 150.72, 72.87999, 1, 1, 52, 186.16, 74.79, 1, 1, 52, 199.76, 159.69, 1, 1, 52, 213.35, 148.16, 1, 1, 52, 242.43, 74.42, 1, 1, 52, 230.31, -13.08, 1, 1, 52, 189.56, -71.99, 1, 1, 52, 132.76, -105.6, 1, 1, 52, 83.71, -55.39, 1, 2, 48, -18.31, 12.1, 0.67732, 52, -0.04, -70.76, 0.32267, 1, 48, 113.44, 16.95, 1, 1, 48, 116.36, -62.48, 1, 1, 52, 1.86, 5.43, 1 ], + "vertices": [ 1, 39, 28.6, 68.85, 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.42, 1, 1, 39, 230.31, -13.08, 1, 1, 39, 189.56, -71.99, 1, 1, 39, 132.76, -105.6, 1, 1, 39, 83.71, -55.39, 1, 2, 8, -18.31, 12.1, 0.67732, 39, -0.04, -70.76, 0.32267, 1, 8, 113.44, 16.95, 1, 1, 8, 116.36, -62.48, 1, 1, 39, 1.86, 5.43, 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, @@ -438,10 +444,10 @@ }, "raptor_saddle_strap_rear": { "raptor_saddle_strap_rear": { - "type": "skinnedmesh", + "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, 38, 3.9, -3.27, 1, 1, 38, 4.25, 15.05, 1, 1, 38, 13.24, 20.28, 1, 2, 38, 23.42, 21.2, 0.7, 39, -15.2, 21.22, 0.3, 3, 38, 41.11, 22.87, 0.3, 39, 2.48, 22.89, 0.6375, 40, -33.83, 24.96, 0.0625, 3, 38, 52.07, 21.72, 0.0625, 39, 13.43, 21.74, 0.6375, 40, -22.97, 23.11, 0.3, 2, 39, 18.39, 20.76, 0.25, 40, -18.09, 21.82, 0.75, 1, 40, -18.76, 33.09, 1, 1, 40, 49.92, 31.57, 1, 1, 40, 53.21, 25, 1, 1, 40, 53.11, -27.48, 1, 1, 40, 49.74, -31.27, 1, 1, 40, -20.73, -36.75999, 1, 1, 40, -23.82, -22.28, 1, 3, 38, 53.48, -24.61, 0.0625, 39, 14.84, -24.59, 0.575, 40, -24.51, -23.21, 0.3625, 3, 38, 41.43999, -26.12, 0.3, 39, 2.81, -26.09, 0.6375, 40, -36.62, -23.95, 0.0625, 2, 38, 24.38, -26.12, 0.7, 39, -14.24, -26.1, 0.3, 1, 38, 5.57, -26.12, 1, 1, 38, 3.54, -22.64, 1, 1, 40, -23.08, -0.04, 1, 3, 38, 41.66, -1.72, 0.3, 39, 3.03, -1.7, 0.66, 40, -34.84999, 0.38, 0.04, 2, 38, 23.85, -2.46, 0.7, 39, -14.77, -2.44, 0.3, 3, 38, 52.58, -1.52, 0.04, 39, 13.95, -1.5, 0.62, 40, -23.94, -0.11, 0.34 ], + "vertices": [ 1, 52, 3.9, -3.27, 1, 1, 52, 4.25, 15.05, 1, 1, 52, 13.24, 20.28, 1, 2, 52, 23.42, 21.2, 0.7, 53, -15.2, 21.22, 0.3, 3, 52, 41.11, 22.87, 0.3, 53, 2.48, 22.89, 0.6375, 54, -33.83, 24.96, 0.0625, 3, 52, 52.07, 21.72, 0.0625, 53, 13.43, 21.74, 0.6375, 54, -22.97, 23.11, 0.3, 2, 53, 18.39, 20.76, 0.25, 54, -18.09, 21.82, 0.75, 1, 54, -18.76, 33.09, 1, 1, 54, 49.92, 31.57, 1, 1, 54, 53.21, 25, 1, 1, 54, 53.11, -27.48, 1, 1, 54, 49.74, -31.27, 1, 1, 54, -20.73, -36.75999, 1, 1, 54, -23.82, -22.28, 1, 3, 52, 53.48, -24.61, 0.0625, 53, 14.84, -24.59, 0.575, 54, -24.51, -23.21, 0.3625, 3, 52, 41.43999, -26.12, 0.3, 53, 2.81, -26.09, 0.6375, 54, -36.62, -23.95, 0.0625, 2, 52, 24.38, -26.12, 0.7, 53, -14.24, -26.1, 0.3, 1, 52, 5.57, -26.12, 1, 1, 52, 3.54, -22.64, 1, 1, 54, -23.08, -0.04, 1, 3, 52, 41.66, -1.72, 0.3, 53, 3.03, -1.7, 0.66, 54, -34.84999, 0.38, 0.04, 2, 52, 23.85, -2.46, 0.7, 53, -14.77, -2.44, 0.3, 3, 52, 52.58, -1.52, 0.04, 53, 13.95, -1.5, 0.62, 54, -23.94, -0.11, 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, @@ -453,10 +459,10 @@ }, "raptor_tongue": { "raptor_tongue": { - "type": "skinnedmesh", + "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, 49, 3.63, 27.04, 0.6875, 50, -47.26, 33.87, 0.3125, 3, 49, 39.09, 19.45, 0.3125, 50, -13.41, 20.86, 0.625, 51, -51.54, 33.37, 0.0625, 3, 49, 71.56, 19.02, 0.0625, 50, 18.58, 15.39, 0.625, 51, -21.56, 20.92, 0.3125, 2, 50, 55.03, 16.85, 0.3125, 51, 14.29, 14.23, 0.6875, 2, 50, 93.34, 18.39, 0.08333, 51, 51.98, 7.21, 0.91666, 1, 51, 56.09, -4.5, 1, 2, 50, 85.06, -1.49, 0.08333, 51, 39.48, -10.33, 0.91666, 2, 50, 54.22, -9.18, 0.3125, 51, 7.71, -10.96, 0.6875, 3, 49, 75.14, -14.72, 0.0625, 50, 16.87, -18.5, 0.625, 51, -30.77, -11.73, 0.3125, 3, 49, 38.8, -25.8, 0.3125, 50, -20.74, -23.8, 0.625, 51, -68.62, -8.53, 0.0625, 2, 49, 2.4, -35.77, 0.6875, 50, -58.25, -27.99, 0.3125, 2, 49, -17.28, -40.62, 0.91666, 50, -78.44999, -29.71, 0.08333, 1, 49, -59.91, 8.18, 1, 2, 49, -26.13, 37.68999, 0.91666, 50, -75.01999, 49.02, 0.08333 ], + "vertices": [ 2, 63, 3.63, 27.04, 0.6875, 64, -47.26, 33.87, 0.3125, 3, 63, 39.09, 19.45, 0.3125, 64, -13.41, 20.86, 0.625, 65, -51.54, 33.37, 0.0625, 3, 63, 71.56, 19.02, 0.0625, 64, 18.58, 15.39, 0.625, 65, -21.56, 20.92, 0.3125, 2, 64, 55.03, 16.85, 0.3125, 65, 14.29, 14.23, 0.6875, 2, 64, 93.34, 18.39, 0.08333, 65, 51.98, 7.21, 0.91666, 1, 65, 56.09, -4.5, 1, 2, 64, 85.06, -1.49, 0.08333, 65, 39.48, -10.33, 0.91666, 2, 64, 54.22, -9.18, 0.3125, 65, 7.71, -10.96, 0.6875, 3, 63, 75.14, -14.72, 0.0625, 64, 16.87, -18.5, 0.625, 65, -30.77, -11.73, 0.3125, 3, 63, 38.8, -25.8, 0.3125, 64, -20.74, -23.8, 0.625, 65, -68.62, -8.53, 0.0625, 2, 63, 2.4, -35.77, 0.6875, 64, -58.25, -27.99, 0.3125, 2, 63, -17.28, -40.62, 0.91666, 64, -78.44999, -29.71, 0.08333, 1, 63, -59.91, 8.18, 1, 2, 63, -26.13, 37.68999, 0.91666, 64, -75.01999, 49.02, 0.08333 ], "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, @@ -474,10 +480,10 @@ }, "stirrup_strap": { "stirrup_strap": { - "type": "skinnedmesh", + "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, 25, 24.71, 8.03, 0.80344, 26, -17.42, 11.02, 0.19655, 2, 25, 37.95, 8.04, 0.59978, 26, -4.36, 8.87, 0.40021, 2, 25, 50.88, 8.04, 0.36895, 26, 8.39, 6.77, 0.63103, 2, 25, 65.92, 12.27, 0.17748, 26, 23.91, 8.47999, 0.82251, 2, 25, 81.72, 16.7, 0.05943, 26, 40.23, 10.28, 0.94056, 2, 25, 98.82, 25.04, 0.01209, 26, 58.46, 15.71, 0.9879, 2, 25, 114.44, 11.57, 0.00191, 26, 71.67, -0.11, 0.99808, 2, 25, 100.47, -4.61, 0.01816, 26, 55.25, -13.81, 0.98182, 2, 25, 78.79, -4.14, 0.07487, 26, 33.93999, -9.81, 0.92512, 2, 25, 65.83, -6.24, 0.2028, 26, 20.81, -9.76, 0.79719, 2, 25, 49.78, -8.83, 0.39971, 26, 4.55, -9.7, 0.60028, 2, 25, 37.93, -10.97, 0.62658, 26, -7.48, -9.88, 0.37341, 2, 25, 25.85, -13.15, 0.82034, 26, -19.75, -10.06, 0.17965, 2, 25, 0.25, -18.03, 0.95288, 26, -45.81, -10.7, 0.04711, 2, 25, -17.83, -2.43, 0.97709, 26, -61.11, 7.63, 0.0229, 2, 25, 1.57, 20.07, 0.94774, 26, -38.29, 26.67, 0.05225, 2, 25, 10.84, -1.23, 0.97709, 26, -32.62, 4.14, 0.0229 ], + "vertices": [ 2, 56, 24.71, 8.03, 0.80344, 57, -17.42, 11.02, 0.19655, 2, 56, 37.95, 8.04, 0.59978, 57, -4.36, 8.87, 0.40021, 2, 56, 50.88, 8.04, 0.36895, 57, 8.39, 6.77, 0.63103, 2, 56, 65.92, 12.27, 0.17748, 57, 23.91, 8.47999, 0.82251, 2, 56, 81.72, 16.7, 0.05943, 57, 40.23, 10.28, 0.94056, 2, 56, 98.82, 25.04, 0.01209, 57, 58.46, 15.71, 0.9879, 2, 56, 114.44, 11.57, 0.00191, 57, 71.67, -0.11, 0.99808, 2, 56, 100.47, -4.61, 0.01816, 57, 55.25, -13.81, 0.98182, 2, 56, 78.79, -4.14, 0.07487, 57, 33.93999, -9.81, 0.92512, 2, 56, 65.83, -6.24, 0.2028, 57, 20.81, -9.76, 0.79719, 2, 56, 49.78, -8.83, 0.39971, 57, 4.55, -9.7, 0.60028, 2, 56, 37.93, -10.97, 0.62658, 57, -7.48, -9.88, 0.37341, 2, 56, 25.85, -13.15, 0.82034, 57, -19.75, -10.06, 0.17965, 2, 56, 0.25, -18.03, 0.95288, 57, -45.81, -10.7, 0.04711, 2, 56, -17.83, -2.43, 0.97709, 57, -61.11, 7.63, 0.0229, 2, 56, 1.57, 20.07, 0.94774, 57, -38.29, 26.67, 0.05225, 2, 56, 10.84, -1.23, 0.97709, 57, -32.62, 4.14, 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, @@ -1740,7 +1746,7 @@ }, "ik": { "front_arm_goal": [ - { "time": 0, "mix": 0, "bendPositive": true } + { "time": 0, "mix": 0 } ] } }, @@ -1826,8 +1832,8 @@ }, "ik": { "front_arm_goal": [ - { "time": 0, "mix": 0, "bendPositive": true, "curve": "stepped" }, - { "time": 0.5666, "mix": 1, "bendPositive": true } + { "time": 0, "mix": 0, "curve": "stepped" }, + { "time": 0.5666 } ] } }, @@ -2670,7 +2676,7 @@ ] } }, - "ffd": { + "deform": { "default": { "raptor_body": { "raptor_body": [ @@ -2716,7 +2722,7 @@ } }, "events": [ - { "time": 0, "name": "footstep" }, + { "time": 0.0333, "name": "footstep" }, { "time": 0.5333, "name": "footstep" } ] } diff --git a/spine-unity/Assets/Examples/Spine/Raptor/raptor.png.meta b/spine-unity/Assets/Examples/Spine/Raptor/raptor.png.meta index 1cd830520..cbac5fa23 100644 --- a/spine-unity/Assets/Examples/Spine/Raptor/raptor.png.meta +++ b/spine-unity/Assets/Examples/Spine/Raptor/raptor.png.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 4261719a8f729a644b2dab6113d1b0ea -timeCreated: 1455501336 +timeCreated: 1467205225 licenseType: Free TextureImporter: fileIDToRecycleName: {} diff --git a/spine-unity/Assets/Examples/Spine/Raptor/raptor_Atlas.asset b/spine-unity/Assets/Examples/Spine/Raptor/raptor_Atlas.asset index fbceadfb0..49b6a02f9 100644 Binary files a/spine-unity/Assets/Examples/Spine/Raptor/raptor_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Raptor/raptor_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Raptor/raptor_Material.mat b/spine-unity/Assets/Examples/Spine/Raptor/raptor_Material.mat index 197b240a7..9a1cfd46a 100644 Binary files a/spine-unity/Assets/Examples/Spine/Raptor/raptor_Material.mat and b/spine-unity/Assets/Examples/Spine/Raptor/raptor_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Raptor/raptor_SkeletonData.asset b/spine-unity/Assets/Examples/Spine/Raptor/raptor_SkeletonData.asset index 64a8d0ed4..3e9abdbb5 100644 Binary files a/spine-unity/Assets/Examples/Spine/Raptor/raptor_SkeletonData.asset and b/spine-unity/Assets/Examples/Spine/Raptor/raptor_SkeletonData.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy.json b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy.json index c89acd7f5..f98be262c 100644 --- a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy.json +++ b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy.json @@ -1,46 +1,51 @@ { "skeleton": { - "hash": "BATKOdd4U3M9OP4b5+/HxENiNzM", - "spine": "3.1.02", - "width": 470.86, - "height": 731.44, + "hash": "nRAMrmcWEKPxacYiF9d5DFza2MU", + "spine": "3.3.07", + "width": 470.7, + "height": 731.57, "images": "C:/Program Files (x86)/Spine/examples/spineboy/images/" }, "bones": [ - { "name": "hip", "y": 247.47 }, - { "name": "torso", "parent": "hip", "length": 127.55, "x": -1.61, "y": 4.9, "rotation": 103.82, "color": "e0da19ff" }, - { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "x": 103.75, "y": 19.32, "rotation": 168.37, "color": "00ff04ff" }, + { "name": "root" }, + { "name": "hip", "parent": "root", "length": 338.72, "y": 247.47 }, + { "name": "shoot target", "parent": "root", "rotation": 1.22, "x": 578.73, "y": 350.08, "color": "ff3f00ff" }, + { "name": "aimer", "parent": "hip", "length": 350.93, "rotation": 1.57, "x": -5.73, "y": 98.76 }, + { "name": "aiming gun target", "parent": "aimer", "rotation": 0.33, "x": 317.91, "y": -78.74, "color": "ff3f00ff" }, + { "name": "free gun bone", "parent": "root", "rotation": -37.23, "x": 41.13, "y": 276.2 }, + { "name": "torso", "parent": "hip", "length": 127.55, "rotation": 103.82, "x": -1.61, "y": 4.9, "color": "e0da19ff" }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "rotation": 168.37, "x": 103.75, "y": 19.32, "color": "00ff04ff" }, { "name": "front_bracer", "parent": "front_upper_arm", "length": 40.57, + "rotation": 18.29, "x": 68.8, "y": -0.68, - "rotation": 18.29, "color": "00ff04ff" }, - { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "x": 40.56, "y": 0.19, "rotation": 12.43, "color": "00ff04ff" }, - { "name": "front_thigh", "parent": "hip", "length": 74.8, "x": -17.45, "y": -11.64, "rotation": -95.51, "color": "00ff04ff" }, + { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "rotation": 29.28, "x": 40.56, "y": 0.19, "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.76, + "rotation": -2.21, "x": 78.69, "y": 1.6, - "rotation": -2.21, "inheritScale": false, "color": "00ff04ff" }, - { "name": "front_foot", "parent": "front_shin", "length": 91.34, "x": 128.75, "y": -0.33, "rotation": 77.9, "color": "00ff04ff" }, - { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "x": 92.35, "y": -19.22, "rotation": -169.55, "color": "ff000dff" }, - { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "x": 51.35, "rotation": 23.15, "color": "ff000dff" }, - { "name": "gun", "parent": "rear_bracer", "length": 43.1, "x": 34.42, "y": -0.45, "rotation": 5.34, "color": "ff000dff" }, - { "name": "gunTip", "parent": "gun", "x": 201.04, "y": 52.13, "rotation": 6.83, "color": "ff000dff" }, - { "name": "neck", "parent": "torso", "length": 25.45, "x": 127.49, "y": -0.3, "rotation": -31.53, "color": "e0da19ff" }, - { "name": "head", "parent": "neck", "length": 263.57, "x": 27.66, "y": -0.25, "rotation": 23.18, "color": "e0da19ff" }, - { "name": "rear_thigh", "parent": "hip", "length": 85.71, "x": 8.91, "y": -5.62, "rotation": -72.54, "color": "ff000dff" }, - { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "x": 86.1, "y": -1.32, "rotation": -19.83, "color": "ff000dff" }, - { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "x": 121.45, "y": -0.75, "rotation": 69.3, "color": "ff000dff" } + { "name": "front_foot", "parent": "front_shin", "length": 91.34, "rotation": 77.9, "x": 128.75, "y": -0.33, "color": "00ff04ff" }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -169.55, "x": 92.35, "y": -19.22, "color": "ff000dff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "rotation": 23.15, "x": 51.35, "color": "ff000dff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "rotation": 5.34, "x": 34.42, "y": -0.45, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.03, "y": 52.12, "color": "ff000dff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" }, + { "name": "head", "parent": "neck", "length": 263.57, "rotation": 23.18, "x": 27.66, "y": -0.25, "color": "e0da19ff" }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "rotation": -72.54, "x": 8.91, "y": -5.62, "color": "ff000dff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.83, "x": 86.1, "y": -1.32, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "rotation": 69.3, "x": 121.45, "y": -0.75, "color": "ff000dff" } ], "slots": [ { "name": "rear_upper_arm", "bone": "rear_upper_arm", "attachment": "rear_upper_arm" }, @@ -64,6 +69,31 @@ { "name": "muzzle", "bone": "gunTip", "blend": "additive" }, { "name": "head-bb", "bone": "head" } ], +"ik": [ + { + "name": "aiming constraint", + "bones": [ "aimer" ], + "target": "shoot target", + "mix": 0 + }, + { + "name": "aiming gun constraint", + "bones": [ "rear_upper_arm", "rear_bracer" ], + "target": "aiming gun target", + "mix": 0 + } +], +"transform": [ + { + "name": "gun flying", + "bones": [ "gun" ], + "target": "free gun bone", + "rotateMix": 0, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + } +], "skins": { "default": { "eye": { @@ -74,8 +104,8 @@ "front_bracer": { "x": 12.03, "y": -1.67, "rotation": 79.59, "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_fist_closed": { "x": 35.71, "y": -4.54, "rotation": 50.3, "width": 75, "height": 82 }, + "front_fist_open": { "x": 40.11, "y": -4.04, "rotation": 50.3, "width": 86, "height": 87 } }, "front_foot": { "front_foot": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 126, "height": 69 }, @@ -95,7 +125,7 @@ "goggles": { "x": 97.07, "y": 6.54, "rotation": -70.63, "width": 261, "height": 166 } }, "gun": { - "gun": { "x": 77.3, "y": 16.4, "rotation": 60.82, "width": 210, "height": 203 } + "gun": { "x": 77.29, "y": 16.39, "rotation": 60.82, "width": 210, "height": 203 } }, "head": { "head": { "x": 128.95, "y": 0.29, "rotation": -70.63, "width": 271, "height": 298 } @@ -103,7 +133,8 @@ "head-bb": { "head": { "type": "boundingbox", - "vertices": [ -19.14309, -70.30209, 40.80313, -118.07423, 257.77155, -115.61827, 285.16193, 57.18005, 120.77191, 164.95125, -5.06762, 76.94907 ] + "vertexCount": 6, + "vertices": [ -19.14, -70.3, 40.8, -118.07, 257.77, -115.61, 285.16, 57.18, 120.77, 164.95, -5.06, 76.94 ] } }, "mouth": { @@ -185,12 +216,6 @@ { "time": 2.5, "angle": -51.96, "curve": "stepped" }, { "time": 4.5333, "angle": -51.96 }, { "time": 4.6666, "angle": -85.28 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "neck": { @@ -207,12 +232,6 @@ { "time": 2.5, "angle": 18.5, "curve": "stepped" }, { "time": 4.5333, "angle": 18.5 }, { "time": 4.6666, "angle": 47.94 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "torso": { @@ -222,18 +241,12 @@ { "time": 0.2666, "angle": -280.19 }, { "time": 0.4, "angle": -237.22, "curve": "stepped" }, { "time": 0.4333, "angle": -237.22 }, - { "time": 0.5, "angle": 76.03, "curve": "stepped" }, + { "time": 0.5, "angle": 76.03 }, + { "time": 0.5666, "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 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 2.2333, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "front_upper_arm": { @@ -251,12 +264,6 @@ { "time": 4.6666, "angle": -290.68 }, { "time": 4.8, "angle": 8.61 }, { "time": 4.8666, "angle": 10.94 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "rear_upper_arm": { @@ -269,12 +276,6 @@ { "time": 0.5666, "angle": 172.6, "curve": "stepped" }, { "time": 0.9333, "angle": 172.6, "curve": "stepped" }, { "time": 2.2333, "angle": 172.6 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "front_bracer": { @@ -291,12 +292,6 @@ { "time": 4.6666, "angle": -1.95 }, { "time": 4.8, "angle": 34.55 }, { "time": 4.9333, "angle": -18.74 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "front_fist": { @@ -308,12 +303,6 @@ { "time": 2.7, "angle": 5.72, "curve": "stepped" }, { "time": 4.6666, "angle": 5.72 }, { "time": 4.8666, "angle": -6.52 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "rear_bracer": { @@ -326,44 +315,12 @@ { "time": 0.5666, "angle": -23.2, "curve": "stepped" }, { "time": 0.9333, "angle": -23.2, "curve": "stepped" }, { "time": 2.2333, "angle": -23.2 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "gun": { "rotate": [ { "time": 0, "angle": -2.78 }, { "time": 0.1333, "angle": -24.58 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 0.9333, "angle": 0, "curve": "stepped" }, - { "time": 2.2333, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.2, "x": 50.34, "y": 151.73 }, - { "time": 0.4, "x": 5.16, "y": -119.64, "curve": "stepped" }, - { "time": 0.4333, "x": 5.16, "y": -119.64 }, - { "time": 0.5, "x": 50.34, "y": -205.18, "curve": "stepped" }, - { "time": 0.8, "x": 50.34, "y": -205.18, "curve": "stepped" }, - { "time": 0.9333, "x": 50.34, "y": -205.18, "curve": "stepped" }, - { "time": 2.2333, "x": 50.34, "y": -205.18 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "front_thigh": { @@ -371,16 +328,10 @@ { "time": 0, "angle": 0 }, { "time": 0.1333, "angle": 8.47 }, { "time": 0.2666, "angle": 115.95 }, - { "time": 0.4, "angle": 180.66, "curve": "stepped" }, - { "time": 0.4333, "angle": 180.66 }, - { "time": 0.5, "angle": 155.22 }, - { "time": 0.6, "angle": 97.73 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } + { "time": 0.4, "angle": 180.66 }, + { "time": 0.5666, "angle": 192.71 }, + { "time": 0.6666, "angle": 155.22 }, + { "time": 0.7666, "angle": 97.73 } ] }, "front_shin": { @@ -389,15 +340,13 @@ { "time": 0.1333, "angle": -27.37 }, { "time": 0.2666, "angle": -35.1 }, { "time": 0.4, "angle": -37.72, "curve": "stepped" }, - { "time": 0.4333, "angle": -37.72 }, - { "time": 0.5, "angle": -40.06 }, - { "time": 0.6, "angle": 2.76 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } + { "time": 0.5666, "angle": -37.72 }, + { + "time": 0.6666, + "angle": -40.06, + "curve": [ 0.153, 0.88, 0.75, 1 ] + }, + { "time": 0.8, "angle": 2.76 } ] }, "rear_thigh": { @@ -408,13 +357,7 @@ { "time": 0.4, "angle": 214.31, "curve": "stepped" }, { "time": 0.4333, "angle": 214.31 }, { "time": 0.5, "angle": 169.67 }, - { "time": 0.8, "angle": 83.27 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } + { "time": 0.7, "angle": 83.27 } ] }, "rear_shin": { @@ -424,52 +367,41 @@ { "time": 0.2666, "angle": -21.04 }, { "time": 0.4, "angle": -29.93, "curve": "stepped" }, { "time": 0.4333, "angle": -29.93 }, - { "time": 0.5, "angle": -16.79 }, - { "time": 0.8, "angle": 7.77 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } + { + "time": 0.5666, + "angle": 9.39, + "curve": [ 0.053, 0.95, 0.75, 1 ] + }, + { "time": 0.7333, "angle": 7.77 } ] }, "rear_foot": { "rotate": [ { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": -11.62 }, - { "time": 0.4, "angle": -45.59, "curve": "stepped" }, - { "time": 0.4333, "angle": -45.59 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } + { "time": 0.1333, "angle": -41.12 }, + { "time": 0.3333, "angle": 9.01 }, + { "time": 0.5333, "angle": -45.59 }, + { "time": 0.7333, "angle": -26.91 } ] }, "front_foot": { "rotate": [ { "time": 0, "angle": 0 }, - { "time": 0.4, "angle": -48.75, "curve": "stepped" }, - { "time": 0.4333, "angle": -48.75 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } + { "time": 0.2, "angle": -27.97 }, + { "time": 0.3666, "angle": 12.62 }, + { "time": 0.4333, "angle": -4.69 }, + { "time": 0.6666, "angle": -26.61 } ] }, - "gunTip": { - "rotate": [ - { "time": 0, "angle": 0 } - ], + "hip": { "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.2, "x": 50.34, "y": 151.73 }, + { "time": 0.4, "x": 5.16, "y": -119.64, "curve": "stepped" }, + { "time": 0.4333, "x": 5.16, "y": -119.64 }, + { "time": 0.5, "x": 50.34, "y": -205.18 }, + { "time": 0.5666, "x": 50.34, "y": -193.75 }, + { "time": 0.6333, "x": 50.34, "y": -205.18 } ] } } @@ -621,6 +553,40 @@ { "time": 0.1333, "angle": -19.9 } ] }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -16.39, + "curve": [ 0.481, 0.01, 0.75, 1 ] + }, + { "time": 0.1333, "angle": 6.69 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": -2.78 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": -19.79, "curve": "stepped" }, + { "time": 0.0666, "angle": -19.79 }, + { "time": 0.2, "angle": 26.01 }, + { "time": 0.5546, "angle": 21.03 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": -28.21 }, + { "time": 0.1333, "angle": 34.38 }, + { "time": 0.5546, "angle": 15.66 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, "hip": { "rotate": [ { "time": 0, "angle": 0 }, @@ -717,44 +683,1306 @@ { "time": 0.4, "x": 1, "y": 1, "curve": "stepped" }, { "time": 1.1666, "x": 1, "y": 1 } ] + } + } + }, + "gun toss": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_open" }, + { "time": 0.1666, "name": "front_fist_open" }, + { "time": 0.5666, "name": "front_fist_closed" }, + { "time": 1.2, "name": "front_fist_open" }, + { "time": 2.5333, "name": "front_fist_open" } + ] + }, + "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.7666, "color": "ffffff00", "curve": "stepped" }, + { "time": 0.8, "color": "ffffffff", "curve": "stepped" }, + { "time": 0.8333, "color": "ffffff00", "curve": "stepped" }, + { "time": 0.8666, "color": "ffffffff", "curve": "stepped" }, + { "time": 0.9, "color": "ffffff00", "curve": "stepped" }, + { "time": 0.9333, "color": "ffffffff", "curve": "stepped" }, + { "time": 0.9666, "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.2666, "color": "ffffff00", "curve": "stepped" }, + { "time": 1.3333, "color": "ffffff00", "curve": "stepped" }, + { "time": 2.5333, "color": "ffffff00" } + ], + "attachment": [ + { "time": 0, "name": null }, + { "time": 0.7666, "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.985, 0.38 ] + }, + { "time": 1.1, "angle": -83.31 }, + { + "time": 1.2, + "angle": 155.47, + "curve": [ 0.187, 0.36, 0.477, 1 ] + }, + { "time": 1.4666, "angle": 0, "curve": "stepped" }, + { "time": 2.5333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -6.63, "y": -23.01, "curve": "stepped" }, + { + "time": 0.9, + "x": -6.63, + "y": -23.01, + "curve": [ 0.328, 0.07, 0.662, 0.41 ] + }, + { + "time": 0.9666, + "x": -5.86, + "y": -99.54, + "curve": [ 0.319, 0.15, 0.653, 0.5 ] + }, + { + "time": 1.1666, + "x": -9.34, + "y": 237.83, + "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.663, 0.64 ] + }, + { + "time": 1.7666, + "x": -3.93, + "y": -90.61, + "curve": [ 0.331, 0.32, 0.665, 0.65 ] + }, + { + "time": 1.9, + "x": -0.92, + "y": 15.74, + "curve": [ 0.329, 0.31, 0.662, 0.64 ] + }, + { + "time": 2.0333, + "x": -6.63, + "y": -23.01, + "curve": [ 0.329, 0.08, 0.663, 0.42 ] + }, + { + "time": 2.1, + "x": -6.63, + "y": -34.66, + "curve": [ 0.324, 0.16, 0.658, 0.51 ] + }, + { "time": 2.2666, "x": -6.63, "y": -23.01, "curve": "stepped" }, + { "time": 2.5333, "x": -6.63, "y": -23.01 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.9, "x": 1, "y": 1 }, + { "time": 0.9666, "x": 1.098, "y": 0.921 }, + { "time": 1.0666, "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.9666, "x": 0, "y": -1 }, + { "time": 1.1666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "front_thigh": { + "rotate": [ + { "time": 0, "angle": 0.64, "curve": "stepped" }, + { + "time": 0.9, + "angle": 0.64, + "curve": [ 0.328, 0.07, 0.662, 0.41 ] + }, + { + "time": 0.9666, + "angle": 39.66, + "curve": [ 0.326, 0.2, 0.659, 0.54 ] + }, + { + "time": 1.0333, + "angle": -13.85, + "curve": [ 0.326, 0.26, 0.659, 0.6 ] + }, + { + "time": 1.1666, + "angle": 86.96, + "curve": [ 0.315, 0.02, 0.648, 0.39 ] + }, + { "time": 1.4333, "angle": -15.97, "curve": "stepped" }, + { + "time": 1.7, + "angle": -15.97, + "curve": [ 0.331, 0.32, 0.665, 0.65 ] + }, + { + "time": 1.7666, + "angle": -5.81, + "curve": [ 0.327, 0.3, 0.661, 0.63 ] + }, + { + "time": 2.0333, + "angle": 0.64, + "curve": [ 0.329, 0.08, 0.663, 0.42 ] + }, + { + "time": 2.1, + "angle": 14.29, + "curve": [ 0.324, 0.16, 0.658, 0.51 ] + }, + { "time": 2.2666, "angle": 0.64, "curve": "stepped" }, + { "time": 2.5333, "angle": 0.64 } + ], + "translate": [ + { "time": 0, "x": -13.39, "y": 6.69, "curve": "stepped" }, + { + "time": 0.9, + "x": -13.39, + "y": 6.69, + "curve": [ 0.315, 0.02, 0.648, 0.39 ] + }, + { + "time": 1.1666, + "x": -12.04, + "y": 18.86, + "curve": [ 0.315, 0.02, 0.648, 0.39 ] + }, + { "time": 1.4333, "x": -10.69, "y": 14.8, "curve": "stepped" }, + { + "time": 1.7, + "x": -10.69, + "y": 14.8, + "curve": [ 0.326, 0.29, 0.659, 0.62 ] + }, + { "time": 2.0333, "x": -13.39, "y": 6.69, "curve": "stepped" }, + { "time": 2.5333, "x": -13.39, "y": 6.69 } + ], + "scale": [ + { "time": 0, "x": 0.896, "y": 1, "curve": "stepped" }, + { "time": 2.5333, "x": 0.896, "y": 1 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.6666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] }, "front_shin": { "rotate": [ + { "time": 0, "angle": -19.28, "curve": "stepped" }, { - "time": 0, - "angle": -16.39, - "curve": [ 0.481, 0.01, 0.75, 1 ] + "time": 0.9, + "angle": -19.28, + "curve": [ 0.328, 0.07, 0.662, 0.41 ] }, - { "time": 0.1333, "angle": 6.69 } + { + "time": 0.9666, + "angle": -87.26, + "curve": [ 0.326, 0.2, 0.659, 0.54 ] + }, + { + "time": 1.0333, + "angle": 2.8, + "curve": [ 0.326, 0.26, 0.659, 0.6 ] + }, + { + "time": 1.1666, + "angle": -103.46, + "curve": [ 0.321, 0.03, 0.655, 0.38 ] + }, + { + "time": 1.3333, + "angle": -22.81, + "curve": [ 0.326, 0.26, 0.659, 0.6 ] + }, + { "time": 1.4666, "angle": -26.16, "curve": "stepped" }, + { + "time": 1.7, + "angle": -26.16, + "curve": [ 0.331, 0.32, 0.665, 0.65 ] + }, + { + "time": 1.7666, + "angle": -44.54, + "curve": [ 0.327, 0.3, 0.661, 0.63 ] + }, + { + "time": 2.0333, + "angle": -19.28, + "curve": [ 0.329, 0.08, 0.663, 0.42 ] + }, + { + "time": 2.1, + "angle": -41.71, + "curve": [ 0.324, 0.16, 0.658, 0.51 ] + }, + { "time": 2.2666, "angle": -19.28, "curve": "stepped" }, + { "time": 2.5333, "angle": -19.28 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "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.9666, "x": -3.29, "y": 22.68 }, + { + "time": 1.0333, + "x": 0, + "y": 9.7, + "curve": [ 0.336, 0, 0.61, 0.5 ] + }, + { + "time": 1.1333, + "x": 0, + "y": -12.29, + "curve": [ 0.229, 0.5, 0.528, 1 ] + }, + { + "time": 1.2, + "x": 0, + "y": 9.7, + "curve": [ 0.25, 0, 0.406, 1 ] + }, + { "time": 1.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.7, "x": 0, "y": 0 }, + { "time": 1.7666, "x": -4.4, "y": 13.34 }, + { "time": 2.0333, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } ] }, - "gun": { + "rear_thigh": { "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": -2.78 } + { "time": 0, "angle": 30.5, "curve": "stepped" }, + { + "time": 0.9, + "angle": 30.5, + "curve": [ 0.326, 0.05, 0.66, 0.39 ] + }, + { + "time": 0.9666, + "angle": 75.84, + "curve": [ 0.323, 0.2, 0.657, 0.54 ] + }, + { + "time": 1.0666, + "angle": 87.83, + "curve": [ 0.324, 0.27, 0.657, 0.6 ] + }, + { + "time": 1.1666, + "angle": 57.77, + "curve": [ 0.308, 0.01, 0.641, 0.4 ] + }, + { "time": 1.4333, "angle": 56.48, "curve": "stepped" }, + { "time": 1.7, "angle": 56.48 }, + { "time": 1.7666, "angle": 73.88 }, + { "time": 1.9, "angle": 9.72 }, + { + "time": 2.0333, + "angle": 30.5, + "curve": [ 0.329, 0.08, 0.663, 0.42 ] + }, + { + "time": 2.1, + "angle": 40.03, + "curve": [ 0.324, 0.16, 0.658, 0.51 ] + }, + { "time": 2.2666, "angle": 30.5, "curve": "stepped" }, + { "time": 2.5333, "angle": 30.5 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": -23.83, "curve": "stepped" }, + { + "time": 0.9, + "angle": -23.83, + "curve": [ 0.326, 0.05, 0.66, 0.39 ] + }, + { + "time": 0.9666, + "angle": -80.38, + "curve": [ 0.323, 0.2, 0.657, 0.54 ] + }, + { + "time": 1.0666, + "angle": -124.5, + "curve": [ 0.324, 0.27, 0.657, 0.6 ] + }, + { + "time": 1.2666, + "angle": 10.25, + "curve": [ 0.308, 0.01, 0.641, 0.4 ] + }, + { "time": 1.4666, "angle": -49.1, "curve": "stepped" }, + { "time": 1.7, "angle": -49.1 }, + { "time": 1.7666, "angle": -67.91 }, + { "time": 1.9, "angle": 12.32 }, + { + "time": 2.0333, + "angle": -23.83, + "curve": [ 0.329, 0.08, 0.663, 0.42 ] + }, + { + "time": 2.1, + "angle": -37.67, + "curve": [ 0.324, 0.16, 0.658, 0.51 ] + }, + { "time": 2.2666, "angle": -23.83, "curve": "stepped" }, + { "time": 2.5333, "angle": -23.83 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.1666, "x": 1, "y": 1 }, + { "time": 1.3, "x": 1, "y": 1.803 }, + { "time": 1.4666, "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.57, + "y": 0, + "curve": [ 0.25, 0, 0.223, 1 ] + }, + { + "time": 1.2666, + "x": 14.34, + "y": 0, + "curve": [ 0.25, 0, 0.503, 1 ] + }, + { "time": 1.5, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } ] }, "front_foot": { "rotate": [ - { "time": 0, "angle": -19.79, "curve": "stepped" }, - { "time": 0.0666, "angle": -19.79 }, - { "time": 0.2, "angle": 26.01 }, - { "time": 0.5546, "angle": 21.03 } + { "time": 0, "angle": 5.13, "curve": "stepped" }, + { + "time": 0.9, + "angle": 5.13, + "curve": [ 0.551, 0.05, 0.837, 0.21 ] + }, + { + "time": 0.9666, + "angle": 26.2, + "curve": [ 0.319, 0.15, 0.653, 0.5 ] + }, + { + "time": 1.0333, + "angle": -12.15, + "curve": [ 0.319, 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, "curve": "stepped" }, + { + "time": 1.7, + "angle": 31, + "curve": [ 0.332, 0.32, 0.665, 0.66 ] + }, + { + "time": 1.7666, + "angle": 36.47, + "curve": [ 0.331, 0.32, 0.664, 0.65 ] + }, + { + "time": 1.8666, + "angle": -18.45, + "curve": [ 0.329, 0.3, 0.663, 0.64 ] + }, + { + "time": 1.9666, + "angle": 23.36, + "curve": [ 0.331, 0.32, 0.664, 0.65 ] + }, + { + "time": 2.0333, + "angle": 7.95, + "curve": [ 0.332, 0.32, 0.665, 0.66 ] + }, + { + "time": 2.1, + "angle": 15.51, + "curve": [ 0.324, 0.12, 0.657, 0.46 ] + }, + { "time": 2.2666, "angle": 5.13, "curve": "stepped" }, + { "time": 2.5333, "angle": 5.13 } + ], + "scale": [ + { "time": 0, "x": 0.755, "y": 1.309, "curve": "stepped" }, + { "time": 1.1, "x": 0.755, "y": 1.309 }, + { "time": 1.2, "x": 1.271, "y": 1.309, "curve": "stepped" }, + { "time": 1.2666, "x": 1.271, "y": 1.309 }, + { "time": 1.4, "x": 0.755, "y": 1.309, "curve": "stepped" }, + { "time": 2.5333, "x": 0.755, "y": 1.309 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 62.41, + "curve": [ 0.504, 0.02, 0.75, 1 ] + }, + { "time": 0.1666, "angle": -54.91 }, + { "time": 0.5333, "angle": 299.38 }, + { "time": 0.7, "angle": 103.94 }, + { "time": 0.7666, "angle": 149.61 }, + { "time": 1.3, "angle": 12.09 }, + { + "time": 1.4666, + "angle": 269.27, + "curve": [ 0.25, 0, 0.401, 1 ] + }, + { "time": 1.6, "angle": -90.72, "curve": "stepped" }, + { + "time": 1.6333, + "angle": -90.72, + "curve": [ 0.097, 0.62, 0.259, 1 ] + }, + { "time": 2, "angle": 62.41, "curve": "stepped" }, + { "time": 2.5333, "angle": 62.41 } + ], + "translate": [ + { "time": 0, "x": -1.83, "y": -16.78 }, + { "time": 0.1666, "x": -3.74, "y": 56 }, + { "time": 0.5333, "x": 8.84, "y": 49.52 }, + { "time": 0.7, "x": 4.59, "y": -0.69, "curve": "stepped" }, + { "time": 0.7666, "x": 4.59, "y": -0.69 }, + { "time": 1.4333, "x": 7.36, "y": 37.32 }, + { "time": 1.5666, "x": 29.37, "y": 77.68, "curve": "stepped" }, + { "time": 1.6333, "x": 29.37, "y": 77.68 }, + { "time": 2, "x": -1.83, "y": -16.78, "curve": "stepped" }, + { "time": 2.5333, "x": -1.83, "y": -16.78 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.2666, "x": 0, "y": 0 }, + { + "time": 1.4, + "x": 16.96, + "y": 0, + "curve": [ 0.25, 0, 0.511, 1 ] + }, + { "time": 1.6, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.9666, "x": 0, "y": 0 }, + { + "time": 2.0666, + "x": -8.11, + "y": 0, + "curve": [ 0.25, 0, 0.432, 1 ] + }, + { "time": 2.4666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -59.85, + "curve": [ 0.492, 0, 0.75, 1 ] + }, + { "time": 0.3, "angle": 52.26 }, + { + "time": 0.5333, + "angle": -300.75, + "curve": [ 0.25, 0, 0.566, 1.77 ] + }, + { "time": 0.7, "angle": -41.32 }, + { + "time": 0.8333, + "angle": -47.51, + "curve": [ 0.47, 0, 0.571, 1 ] + }, + { + "time": 1.2333, + "angle": -292.9, + "curve": [ 0.514, 0, 0.803, 0.42 ] + }, + { + "time": 1.3, + "angle": -231.77, + "curve": [ 0.342, 0.4, 0.364, 1 ] + }, + { "time": 1.5666, "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.23, "curve": "stepped" }, + { "time": 0.3, "x": -7.12, "y": -8.23 }, + { + "time": 0.5333, + "x": -4.98, + "y": -22.29, + "curve": [ 0.25, 0, 0.566, 1.77 ] + }, + { "time": 0.7, "x": -2.86, "y": 8.61, "curve": "stepped" }, + { + "time": 0.8333, + "x": -2.86, + "y": 8.61, + "curve": [ 0.47, 0, 0.571, 1 ] + }, + { "time": 1.2333, "x": -4.26, "y": -30.12 }, + { "time": 1.5666, "x": -11.4, "y": 10.91, "curve": "stepped" }, + { "time": 1.7333, "x": -11.4, "y": 10.91 }, + { "time": 2.3333, "x": -7.12, "y": -8.23, "curve": "stepped" }, + { "time": 2.5333, "x": -7.12, "y": -8.23 } + ], + "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.3666, "x": 0, "y": 0 }, + { + "time": 1.4666, + "x": 8.24, + "y": 0, + "curve": [ 0.25, 0, 0.333, 1 ] + }, + { "time": 1.6666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.9666, "x": 0, "y": 0 }, + { + "time": 2.1333, + "x": 10.64, + "y": 0, + "curve": [ 0.25, 0, 0.333, 1 ] + }, + { "time": 2.4666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "torso": { + "rotate": [ + { + "time": 0, + "angle": -5.61, + "curve": [ 0.299, 0, 0.635, 0.36 ] + }, + { + "time": 0.1666, + "angle": -19.41, + "curve": [ 0.285, 0.17, 0.69, 0.74 ] + }, + { + "time": 0.4333, + "angle": -22.45, + "curve": [ 0.285, 0.17, 0.69, 0.74 ] + }, + { "time": 0.7, "angle": 0.33, "curve": "stepped" }, + { + "time": 1.0333, + "angle": 0.33, + "curve": [ 0.25, 0, 0.548, 1 ] + }, + { "time": 1.3666, "angle": -80.68 }, + { "time": 1.4333, "angle": -65.08 }, + { + "time": 1.4666, + "angle": -95.78, + "curve": [ 0.223, 0.38, 0.459, 1 ] + }, + { + "time": 1.6333, + "angle": -85.98, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2.1666, "angle": -5.61, "curve": "stepped" }, + { "time": 2.5333, "angle": -5.61 } + ], + "translate": [ + { "time": 0, "x": -6.49, "y": 0 }, + { "time": 0.1666, "x": -6.49, "y": -5.46, "curve": "stepped" }, + { "time": 0.4333, "x": -6.49, "y": -5.46 }, + { "time": 0.7, "x": -6.49, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": -6.49, "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.46, + "curve": [ 0.492, 0, 0.75, 1 ] + }, + { "time": 0.1666, "angle": 62.76 }, + { + "time": 0.5666, + "angle": 89.75, + "curve": [ 0.179, 0.72, 0.456, 1 ] + }, + { "time": 0.7, "angle": -20.53, "curve": "stepped" }, + { + "time": 0.8333, + "angle": -20.53, + "curve": [ 0.47, 0, 0.571, 1 ] + }, + { "time": 1, "angle": 61.24 }, + { + "time": 1.4, + "angle": 93.63, + "curve": [ 0.294, 1.37, 0.624, 1 ] + }, + { "time": 1.6666, "angle": -18.23, "curve": "stepped" }, + { "time": 1.7333, "angle": -18.23 }, + { + "time": 1.9666, + "angle": -24.32, + "curve": [ 0.25, 0, 0.519, 1 ] + }, + { "time": 2.4, "angle": 45.46, "curve": "stepped" }, + { "time": 2.5333, "angle": 45.46 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { + "time": 0.8333, + "x": 0, + "y": 0, + "curve": [ 0.47, 0, 0.571, 1 ] + }, + { "time": 1, "x": -18.66, "y": 2.59, "curve": "stepped" }, + { "time": 1.7333, "x": -18.66, "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": -28.21 }, - { "time": 0.1333, "angle": 34.38 }, - { "time": 0.5546, "angle": 15.66 } + { "time": 0, "angle": -7.34, "curve": "stepped" }, + { + "time": 0.9, + "angle": -7.34, + "curve": [ 0.326, 0.05, 0.66, 0.39 ] + }, + { + "time": 0.9666, + "angle": 4.55, + "curve": [ 0.327, 0.23, 0.66, 0.57 ] + }, + { + "time": 1.0333, + "angle": -5.78, + "curve": [ 0.321, 0.24, 0.654, 0.58 ] + }, + { + "time": 1.1666, + "angle": 19.82, + "curve": [ 0.327, 0.06, 0.66, 0.4 ] + }, + { "time": 1.4333, "angle": 2.28 }, + { + "time": 1.5, + "angle": -5.48, + "curve": [ 0.325, 0.22, 0.658, 0.55 ] + }, + { + "time": 1.7666, + "angle": -5.69, + "curve": [ 0.33, 0.3, 0.663, 0.63 ] + }, + { + "time": 1.9, + "angle": -33.94, + "curve": [ 0.325, 0.28, 0.659, 0.62 ] + }, + { + "time": 2.0333, + "angle": -7.34, + "curve": [ 0.324, 0.04, 0.658, 0.39 ] + }, + { + "time": 2.1, + "angle": -2.67, + "curve": [ 0.317, 0.18, 0.65, 0.53 ] + }, + { "time": 2.2333, "angle": -7.34, "curve": "stepped" }, + { "time": 2.2666, "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.1666, "angle": -24.07 }, + { "time": 0.4333, "angle": -29.77 }, + { "time": 0.5666, "angle": -68.84 }, + { "time": 0.7, "angle": -22.33 }, + { "time": 0.7666, "angle": -20.19, "curve": "stepped" }, + { + "time": 0.8666, + "angle": -20.19, + "curve": [ 0.25, 0, 0.516, 1 ] + }, + { + "time": 1.2, + "angle": 3.47, + "curve": [ 0.277, 0, 0.569, 0.66 ] + }, + { + "time": 1.5, + "angle": 17.63, + "curve": [ 0.298, 0.6, 0.628, 1 ] + }, + { "time": 1.6, "angle": -23.72, "curve": "stepped" }, + { "time": 1.6333, "angle": -23.72 }, + { + "time": 1.8, + "angle": -80.6, + "curve": [ 0.465, 0.15, 0.852, 0.45 ] + }, + { "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.3666, + "angle": -5.51, + "curve": [ 0.317, 0, 0.651, 0.34 ] + }, + { + "time": 0.8333, + "angle": -35.47, + "curve": [ 0.299, 0.14, 0.637, 0.5 ] + }, + { + "time": 1.2, + "angle": -14.39, + "curve": [ 0.25, 0, 0.369, 1 ] + }, + { "time": 1.5666, "angle": -35.47, "curve": "stepped" }, + { + "time": 1.6666, + "angle": -35.47, + "curve": [ 0.433, 0, 0.716, 0.44 ] + }, + { "time": 1.8333, "angle": -14.54 }, + { + "time": 1.9333, + "angle": 30.04, + "curve": [ 0.197, 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.2666, "x": 1, "y": 1.384 }, + { "time": 1.4666, "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.6666, "x": 0, "y": 0 }, + { + "time": 1.8666, + "x": -17.77, + "y": 0, + "curve": [ 0.25, 0, 0.676, 1 ] + }, + { "time": 2, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 2.5333, "x": 0, "y": 0 } + ] + }, + "front_fist": { + "rotate": [ + { + "time": 0, + "angle": -6.84, + "curve": [ 0.367, 0, 0.698, 0.38 ] + }, + { "time": 0.1666, "angle": -7.86, "curve": "stepped" }, + { + "time": 0.4333, + "angle": -7.86, + "curve": [ 0.421, 0.25, 0.726, 0.75 ] + }, + { + "time": 0.6666, + "angle": -19.63, + "curve": [ 0.343, 0.61, 0.672, 1 ] + }, + { "time": 0.7333, "angle": -6.84, "curve": "stepped" }, + { "time": 1.0333, "angle": -6.84 }, + { + "time": 1.1666, + "angle": 77.81, + "curve": [ 0.25, 0, 0.438, 1 ] + }, + { "time": 1.5, "angle": -6.84, "curve": "stepped" }, + { + "time": 1.7, + "angle": -6.84, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.0333, + "angle": -44.04, + "curve": [ 0.25, 0, 0.556, 1 ] + }, + { "time": 2.4, "angle": -6.84, "curve": "stepped" }, + { "time": 2.5333, "angle": -6.84 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5666, "x": 1, "y": 1 }, + { "time": 0.6, "x": 1, "y": 2, "curve": "stepped" }, + { "time": 0.6333, "x": 1, "y": 2 }, + { "time": 0.6666, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.2333, "x": 1, "y": 1 }, + { "time": 1.3666, "x": 1, "y": 2, "curve": "stepped" }, + { "time": 1.4333, "x": 1, "y": 2 }, + { "time": 1.5666, "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.45, "y": 0 }, + { "time": 0.5333, "x": -14.51, "y": -10.11 }, + { "time": 0.6, "x": 9.49, "y": -7.02 }, + { "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.5666, + "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.286, 0, 0.626, 0.38 ] + }, + { "time": 0.1666, "angle": -8.72, "curve": "stepped" }, + { + "time": 0.4333, + "angle": -8.72, + "curve": [ 0.3, 0.22, 0.654, 0.62 ] + }, + { + "time": 0.5666, + "angle": -43.92, + "curve": [ 0.348, 0.38, 0.691, 0.75 ] + }, + { "time": 0.7, "angle": 0, "curve": "stepped" }, + { + "time": 1.7333, + "angle": 0, + "curve": [ 0.245, 0, 0.637, 0.55 ] + }, + { + "time": 1.9666, + "angle": -23.41, + "curve": [ 0.381, 0.54, 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.1666, "angle": 0, "curve": "stepped" }, + { "time": 0.4333, "angle": 0 }, + { "time": 0.6666, "angle": 81.73 }, + { "time": 0.7333, "angle": 201.73 }, + { "time": 0.8, "angle": 321.73 }, + { "time": 0.8666, "angle": 441.73 }, + { "time": 0.9666, "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.1666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4333, "x": 0, "y": 0 }, + { + "time": 0.6666, + "x": 24.84, + "y": 38.06, + "curve": [ 0.062, 0.74, 0.529, 0.9 ] + }, + { + "time": 1.1333, + "x": 12.43, + "y": 700.82, + "curve": [ 0.478, 0, 0.875, 0.5 ] + }, + { + "time": 1.6666, + "x": -45.78, + "y": 5.56, + "curve": [ 0.189, 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.21, "y": 0 }, + { "time": 1.0666, "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.7666, "x": 0, "y": 0 }, + { "time": 0.8333, "x": 20.93, "y": 1.57 }, + { "time": 0.8666, "x": 0, "y": 0 }, + { "time": 0.9333, "x": 20.93, "y": 1.57 }, + { "time": 0.9666, "x": 0, "y": 0 }, + { "time": 1.0333, "x": 20.93, "y": 1.57 }, + { "time": 1.0666, "x": 0, "y": 0 }, + { "time": 1.1333, "x": 20.93, "y": 1.57 }, + { "time": 1.2, "x": 0, "y": 0 }, + { "time": 1.3333, "x": 20.93, "y": 1.57, "curve": "stepped" }, + { "time": 2.5333, "x": 20.93, "y": 1.57 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { + "time": 0.7666, + "x": 1, + "y": 1, + "curve": [ 0.706, 0, 0.49, 1 ] + }, + { "time": 0.8333, "x": 1.247, "y": 1.516 }, + { + "time": 0.8666, + "x": 1, + "y": 1, + "curve": [ 0.706, 0, 0.49, 1 ] + }, + { "time": 0.9333, "x": 1.247, "y": 1.516 }, + { + "time": 0.9666, + "x": 1, + "y": 1, + "curve": [ 0.706, 0, 0.49, 1 ] + }, + { "time": 1.0333, "x": 1.247, "y": 1.516 }, + { + "time": 1.0666, + "x": 1, + "y": 1, + "curve": [ 0.706, 0, 0.49, 1 ] + }, + { "time": 1.1333, "x": 1.247, "y": 1.516 }, + { + "time": 1.2, + "x": 1, + "y": 1, + "curve": [ 0.706, 0, 0.49, 1 ] + }, + { "time": 1.3333, "x": 1.247, "y": 1.516, "curve": "stepped" }, + { "time": 2.5333, "x": 1.247, "y": 1.516 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4, "angle": 14.08 }, + { "time": 0.8666, "angle": -7.48 }, + { "time": 1.1333, "angle": -14.81 }, + { "time": 1.3333, "angle": -5.35 }, + { "time": 1.5, "angle": 0, "curve": "stepped" }, + { "time": 2.5333, "angle": 0 } + ] + } + }, + "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.6666, "rotateMix": 0, "translateMix": 0, "scaleMix": 0, "shearMix": 0 }, + { "time": 0.7, "curve": "stepped" }, + { "time": 1.6333 }, + { "time": 1.6666, "rotateMix": 0, "translateMix": 0, "scaleMix": 0, "shearMix": 0, "curve": "stepped" }, + { "time": 2.5333, "rotateMix": 0, "translateMix": 0, "scaleMix": 0, "shearMix": 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.38 }, + { "time": 0.1333, "angle": 24.94 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 10.21 }, + { "time": 0.2, "angle": -41.3 } + ] + }, + "front_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": -310.92, + "curve": [ 0.38, 0.53, 0.744, 1 ] + }, + { "time": 0.2, "angle": -112.59 } + ], + "translate": [ + { "time": 0, "x": 7.23, "y": -13.13 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 36.99 }, + { "time": 0.2, "angle": -28.64 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": 13.59 }, + { "time": 0.2, "angle": 7.55 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { + "time": 0, + "angle": 271.02, + "curve": [ 0.342, 0.36, 0.68, 0.71 ] + }, + { "time": 0.2, "angle": -15.84 } + ], + "translate": [ + { "time": 0.2, "x": -0.09, "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.75 } + ] + }, + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 90.94, + "curve": [ 0.227, 0.26, 0.432, 1 ] + }, + { "time": 0.2, "angle": 32.02 } + ], + "translate": [ + { "time": 0, "x": 7.21, "y": -4 } + ] + }, + "rear_thigh": { + "rotate": [ + { + "time": 0, + "angle": 40.51, + "curve": [ 0.295, 0.3, 0.59, 0.99 ] + }, + { "time": 0.2, "angle": 90.76 } + ], + "translate": [ + { "time": 0, "x": -1.96, "y": -0.32 } + ] + }, + "front_shin": { + "rotate": [ + { "time": 0, "angle": -96.62 }, + { "time": 0.2, "angle": -15.13 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": 7.99 }, + { "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.26 } + ], + "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.54, "y": -78.03 }, + { "time": 0.1333, "x": -36.48, "y": 12.42 }, + { "time": 0.2, "x": -36.48, "y": -2.99 } + ] } } }, - "hit": { + "hit old": { "slots": { "front_fist": { "attachment": [ @@ -837,13 +2065,6 @@ { "time": 0.3333, "angle": 39.75 } ] }, - "hip": { - "translate": [ - { "time": 0, "x": -75.54, "y": -78.03 }, - { "time": 0.2333, "x": -36.48, "y": 12.42 }, - { "time": 0.3333, "x": -36.48, "y": -2.99 } - ] - }, "front_thigh": { "rotate": [ { @@ -902,6 +2123,13 @@ { "time": 0, "angle": 2.67 }, { "time": 0.3333, "angle": -10.31 } ] + }, + "hip": { + "translate": [ + { "time": 0, "x": -75.54, "y": -78.03 }, + { "time": 0.2333, "x": -36.48, "y": 12.42 }, + { "time": 0.3333, "x": -36.48, "y": -2.99 } + ] } } }, @@ -937,10 +2165,6 @@ ], "translate": [ { "time": 0, "x": -6.49, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } ] }, "front_upper_arm": { @@ -961,10 +2185,6 @@ { "time": 0, "x": -7.12, "y": -8.23 }, { "time": 0.6666, "x": -6.32, "y": -8.3 }, { "time": 1.6666, "x": -7.12, "y": -8.23 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } ] }, "rear_upper_arm": { @@ -985,10 +2205,6 @@ { "time": 0, "x": -1.83, "y": -16.78 }, { "time": 0.6666, "x": 0.34, "y": -15.23 }, { "time": 1.6666, "x": -1.83, "y": -16.78 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } ] }, "neck": { @@ -1000,10 +2216,6 @@ "translate": [ { "time": 0, "x": -1.88, "y": -4.76, "curve": "stepped" }, { "time": 1.6666, "x": -1.88, "y": -4.76 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } ] }, "front_thigh": { @@ -1074,10 +2286,6 @@ "curve": [ 0.594, 0, 0.653, 1 ] }, { "time": 1.6666, "angle": 30.5 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } ] }, "rear_shin": { @@ -1093,10 +2301,6 @@ "curve": [ 0.594, 0, 0.653, 1 ] }, { "time": 1.6666, "angle": -23.83 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } ] }, "front_foot": { @@ -1118,27 +2322,6 @@ { "time": 1.6666, "x": 0.755, "y": 1.309 } ] }, - "hip": { - "translate": [ - { - "time": 0, - "x": -6.63, - "y": -23.01, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "x": 6.27, - "y": -35, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "x": -6.63, "y": -23.01 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, "rear_foot": { "rotate": [ { @@ -1152,10 +2335,6 @@ "curve": [ 0.594, 0, 0.653, 1 ] }, { "time": 1.6666, "angle": -7.34 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } ] }, "rear_bracer": { @@ -1171,10 +2350,6 @@ "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1.6666, "angle": -17.16 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } ] }, "head": { @@ -1190,10 +2365,6 @@ "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1.6666, "angle": -5.51 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } ] }, "front_bracer": { @@ -1209,10 +2380,6 @@ "curve": [ 0.32, 0.1, 0.736, 0.91 ] }, { "time": 1.6666, "angle": 45.46 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } ] }, "gun": { @@ -1228,10 +2395,6 @@ "curve": [ 0.732, 0, 0.769, 0.99 ] }, { "time": 1.6666, "angle": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } ] }, "front_fist": { @@ -1257,16 +2420,316 @@ }, { "time": 0.6666, - "x": 0.689, + "x": 0.8, "y": 1.1, "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1.6666, "x": 1, "y": 1 } ] + }, + "hip": { + "translate": [ + { + "time": 0, + "x": -6.63, + "y": -23.01, + "curve": [ 0.235, 0, 0.558, 0.99 ] + }, + { + "time": 0.6666, + "x": 6.27, + "y": -35, + "curve": [ 0.594, 0, 0.653, 1 ] + }, + { "time": 1.6666, "x": -6.63, "y": -23.01 } + ] } } }, "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.763, 1 ] + }, + { + "time": 0.1333, + "angle": -35.83, + "curve": [ 0.761, 0, 0.75, 1 ] + }, + { "time": 0.3666, "angle": 127.74 }, + { + "time": 0.6666, + "angle": 48.18, + "curve": [ 0.227, 0.26, 0.432, 1 ] + }, + { "time": 0.7666, "angle": 25.35 }, + { "time": 0.8666, "angle": 45.37 }, + { "time": 0.9666, "angle": 38.12 }, + { "time": 1.0666, "angle": 25.35 }, + { "time": 1.2666, "angle": 91.53 } + ], + "translate": [ + { "time": 0, "x": -2.56, "y": 5.77 }, + { "time": 0.3666, "x": 8.3, "y": 7.98 }, + { "time": 0.6666, "x": 7.21, "y": -4 }, + { "time": 1.2666, "x": -2.56, "y": 5.77 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -42.63 }, + { "time": 0.1333, "angle": -5.74 }, + { "time": 0.3666, "angle": -50.76 }, + { "time": 0.6666, "angle": 1.89 }, + { "time": 0.7666, "angle": 11.58 }, + { "time": 0.9, "angle": -1.89 }, + { "time": 1.0666, "angle": 11.58 }, + { "time": 1.2666, "angle": -42.63 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -26.32 }, + { "time": 0.1333, "angle": 121.44 }, + { "time": 0.3666, "angle": 70.54 }, + { + "time": 0.6666, + "angle": 79.89, + "curve": [ 0.295, 0.3, 0.59, 0.99 ] + }, + { "time": 0.7666, "angle": 99.12 }, + { "time": 0.8666, "angle": 74.05 }, + { "time": 0.9666, "angle": 98.04 }, + { "time": 1.0666, "angle": 99.12 }, + { "time": 1.2666, "angle": -26.32 } + ], + "translate": [ + { "time": 0, "x": -0.56, "y": -0.32 }, + { "time": 0.3666, "x": -8.5, "y": 10.58 }, + { "time": 0.6666, "x": -1.96, "y": -0.32 }, + { "time": 1.2666, "x": -0.56, "y": -0.32 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": -78.69 }, + { "time": 0.3666, "angle": -55.56 }, + { "time": 0.6666, "angle": -62.84 }, + { "time": 0.7666, "angle": -80.74 }, + { "time": 0.8666, "angle": -41.12 }, + { "time": 0.9666, "angle": -77.4 }, + { "time": 1.0666, "angle": -80.74 }, + { "time": 1.2666, "angle": -78.69 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -22.61 }, + { "time": 0.1333, "angle": -246.68 }, + { + "time": 0.5333, + "angle": 11.28, + "curve": [ 0.246, 0, 0.633, 0.53 ] + }, + { + "time": 0.6666, + "angle": -57.45, + "curve": [ 0.38, 0.53, 0.744, 1 ] + }, + { "time": 0.8, "angle": -112.59 }, + { "time": 0.8666, "angle": -102.17 }, + { "time": 0.9666, "angle": -108.61 }, + { "time": 1.0666, "angle": -112.59 }, + { "time": 1.2666, "angle": -22.61 } + ], + "translate": [ + { "time": 0, "x": 6.08, "y": 7.15 }, + { "time": 0.1333, "x": 7.23, "y": -13.13, "curve": "stepped" }, + { "time": 0.6666, "x": 7.23, "y": -13.13 }, + { "time": 1.2666, "x": 6.08, "y": 7.15 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 66.46 }, + { "time": 0.1333, "angle": 42.39 }, + { "time": 0.3666, "angle": 26.06 }, + { "time": 0.6666, "angle": 13.28 }, + { "time": 0.8, "angle": -28.64 }, + { "time": 0.8666, "angle": -22.31 }, + { "time": 0.9666, "angle": -35.39 }, + { "time": 1.0666, "angle": -28.64 }, + { "time": 1.2666, "angle": 66.46 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -28.43 }, + { "time": 0.3666, "angle": -45.6 }, + { "time": 0.6666, "angle": -53.66 }, + { "time": 0.8, "angle": 7.55 }, + { "time": 0.8666, "angle": 31.15 }, + { "time": 0.9666, "angle": -32.58 }, + { "time": 1.0666, "angle": 7.55 }, + { "time": 1.2666, "angle": -28.43 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 39.68 }, + { "time": 0.1333, "angle": 276.57 }, + { "time": 0.2333, "angle": 17.73 }, + { "time": 0.3666, "angle": 83.38 }, + { + "time": 0.5333, + "angle": -4.71, + "curve": [ 0.246, 0, 0.633, 0.53 ] + }, + { + "time": 0.6666, + "angle": -69.63, + "curve": [ 0.342, 0.36, 0.68, 0.71 ] + }, + { + "time": 0.7, + "angle": 321.47, + "curve": [ 0.333, 0.33, 0.667, 0.66 ] + }, + { + "time": 0.7333, + "angle": 33.7, + "curve": [ 0.358, 0.64, 0.693, 1 ] + }, + { "time": 0.8, "angle": 34.56 }, + { "time": 0.9666, "angle": 71.96 }, + { "time": 1.0666, "angle": 34.56 }, + { "time": 1.2666, "angle": 39.68 } + ], + "translate": [ + { "time": 0, "x": -3.1, "y": -4.86 }, + { "time": 0.1333, "x": 23.33, "y": 49.07 }, + { "time": 0.3666, "x": 20.78, "y": 40.21 }, + { "time": 1.2666, "x": -3.1, "y": -4.86 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 29.66 }, + { "time": 0.1333, "angle": 45.06 }, + { "time": 0.3666, "angle": -4.34 }, + { "time": 0.7, "angle": 61.68 }, + { "time": 0.7333, "angle": 82.59 }, + { "time": 0.8, "angle": 80.06 }, + { "time": 0.9666, "angle": 57.56 }, + { "time": 1.0666, "angle": 80.06 }, + { "time": 1.2666, "angle": 29.66 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 24.9 }, + { "time": 0.1333, "angle": 16.31 }, + { "time": 0.3666, "angle": 7.44 }, + { "time": 0.6666, "angle": -20.35 }, + { "time": 0.7666, "angle": -0.69, "curve": "stepped" }, + { "time": 1.0666, "angle": -0.69 }, + { "time": 1.2666, "angle": 24.9 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 24.92 }, + { "time": 0.1333, "angle": 10.36 }, + { "time": 0.3666, "angle": 28.65 }, + { "time": 0.6666, "angle": -2.65 }, + { "time": 0.7666, "angle": -28.94, "curve": "stepped" }, + { "time": 1.0666, "angle": -28.94 }, + { "time": 1.2666, "angle": 24.92 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": -90.62, + "curve": [ 0.416, 0.54, 0.743, 1 ] + }, + { + "time": 0.1333, + "angle": -10.52, + "curve": [ 0.644, 0, 0.75, 1 ] + }, + { "time": 0.3666, "angle": -127.72 }, + { "time": 0.6666, "angle": -19.91 }, + { "time": 0.7666, "angle": -5.16 }, + { "time": 0.8666, "angle": -35.06 }, + { "time": 0.9666, "angle": -43.97 }, + { "time": 1.0666, "angle": -5.16 }, + { "time": 1.2666, "angle": -90.62 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 16.27 }, + { "time": 0.0333, "angle": 21.02 }, + { "time": 0.0666, "angle": 10.92 }, + { "time": 0.1333, "angle": -38.45 }, + { "time": 0.3666, "angle": 6.62 }, + { "time": 0.6666, "angle": -11.51 }, + { "time": 0.9666, "angle": -22.91 }, + { "time": 1.2666, "angle": -0.79 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": -12.77 }, + { "time": 0.1333, "angle": 17.05 }, + { "time": 0.3666, "angle": 19.45 }, + { "time": 0.6666, "angle": 2.67 }, + { "time": 0.9666, "angle": -28.49 }, + { "time": 1.2666, "angle": -12.77 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 6.18 }, + { "time": 0.1333, "angle": 30.81 }, + { "time": 0.3666, "angle": 13.25 }, + { "time": 0.6666, "angle": 14.98 }, + { "time": 0.7, "angle": 25.64 }, + { "time": 0.7333, "angle": 20.62 }, + { "time": 0.8, "angle": 64.52 }, + { "time": 0.9666, "angle": 8.59 }, + { "time": 1.0666, "angle": 64.52 }, + { "time": 1.2666, "angle": 6.18 } + ] + } + } + }, + "jump old": { "slots": { "front_fist": { "attachment": [ @@ -1316,9 +2779,6 @@ { "time": 0.4333, "x": 8.3, "y": 7.98 }, { "time": 0.7333, "x": 7.21, "y": -4 }, { "time": 1.3333, "x": -2.56, "y": 5.77 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "torso": { @@ -1331,12 +2791,6 @@ { "time": 0.9666, "angle": -1.89 }, { "time": 1.1333, "angle": 11.58 }, { "time": 1.3333, "angle": -42.63 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "rear_thigh": { @@ -1360,9 +2814,6 @@ { "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 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "rear_shin": { @@ -1375,13 +2826,6 @@ { "time": 1.0333, "angle": -77.4 }, { "time": 1.1333, "angle": -80.74 }, { "time": 1.3333, "angle": -78.69 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.7333, "x": 1, "y": 1 } ] }, "front_upper_arm": { @@ -1409,9 +2853,6 @@ { "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 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "front_bracer": { @@ -1425,12 +2866,6 @@ { "time": 1.0333, "angle": -35.39 }, { "time": 1.1333, "angle": -28.64 }, { "time": 1.3333, "angle": 66.46 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "front_fist": { @@ -1443,12 +2878,6 @@ { "time": 1.0333, "angle": -32.58 }, { "time": 1.1333, "angle": 7.55 }, { "time": 1.3333, "angle": -28.43 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "rear_upper_arm": { @@ -1487,9 +2916,6 @@ { "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.86 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "rear_bracer": { @@ -1503,12 +2929,6 @@ { "time": 1.0333, "angle": 57.56 }, { "time": 1.1333, "angle": 80.06 }, { "time": 1.3333, "angle": 29.66 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "neck": { @@ -1520,12 +2940,6 @@ { "time": 0.8333, "angle": -0.69, "curve": "stepped" }, { "time": 1.1333, "angle": -0.69 }, { "time": 1.3333, "angle": 24.9 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "head": { @@ -1537,42 +2951,6 @@ { "time": 0.8333, "angle": -28.94, "curve": "stepped" }, { "time": 1.1333, "angle": -28.94 }, { "time": 1.3333, "angle": 24.92 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0 } - ], - "translate": [ - { - "time": 0, - "x": -34.51, - "y": -78.62, - "curve": [ 0.232, 1, 0.75, 1 ] - }, - { - "time": 0.2, - "x": -34.51, - "y": 182.5, - "curve": [ 0.232, 0.48, 0.598, 0.79 ] - }, - { - "time": 0.7666, - "x": -34.51, - "y": 596.22, - "curve": [ 0.329, 0.17, 0.66, 0.21 ] - }, - { "time": 1.1333, "x": -34.51, "y": 2.49 }, - { "time": 1.3333, "x": -34.51, "y": -78.62 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "front_shin": { @@ -1594,12 +2972,6 @@ { "time": 1.0333, "angle": -43.97 }, { "time": 1.1333, "angle": -5.16 }, { "time": 1.3333, "angle": -90.62 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "front_foot": { @@ -1614,12 +2986,6 @@ { "time": 0.7333, "angle": -11.51 }, { "time": 1.0333, "angle": -22.91 }, { "time": 1.3333, "angle": -0.79 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "rear_foot": { @@ -1630,12 +2996,6 @@ { "time": 0.7333, "angle": 2.67 }, { "time": 1.0333, "angle": -28.49 }, { "time": 1.3333, "angle": -12.77 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } ] }, "gun": { @@ -1650,12 +3010,30 @@ { "time": 1.0333, "angle": 8.59 }, { "time": 1.1333, "angle": 64.52 }, { "time": 1.3333, "angle": 6.18 } - ], + ] + }, + "hip": { "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } + { + "time": 0, + "x": -34.51, + "y": -78.62, + "curve": [ 0.232, 1, 0.75, 1 ] + }, + { + "time": 0.2, + "x": -34.51, + "y": 182.5, + "curve": [ 0.232, 0.48, 0.598, 0.79 ] + }, + { + "time": 0.7666, + "x": -34.51, + "y": 596.22, + "curve": [ 0.329, 0.17, 0.66, 0.21 ] + }, + { "time": 1.1333, "x": -34.51, "y": 2.49 }, + { "time": 1.3333, "x": -34.51, "y": -78.62 } ] } } @@ -1948,43 +3326,6 @@ { "time": 0.1666, "x": 1, "y": 1 } ] }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 0.0333, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": -62.47, "y": -31.55, "curve": "stepped" }, - { - "time": 0.0333, - "x": -62.47, - "y": -31.55, - "curve": [ 0.266, 0, 0.303, 1 ] - }, - { "time": 0.0666, "x": -34.75, "y": -23.15 }, - { "time": 0.1666, "x": -34.75, "y": -14.31, "curve": "stepped" }, - { - "time": 0.6666, - "x": -34.75, - "y": -14.31, - "curve": [ 0.433, 0, 0.823, 1 ] - }, - { "time": 1.6333, "x": -34.75, "y": -148.55, "curve": "stepped" }, - { "time": 2, "x": -34.75, "y": -148.55 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.0864, "x": 0.9, "y": 1.1 }, - { - "time": 0.1144, - "x": 1.163, - "y": 1, - "curve": [ 0.074, 0.48, 0.331, 1 ] - }, - { "time": 0.2333, "x": 1, "y": 1 } - ] - }, "front_shin": { "rotate": [ { @@ -2063,6 +3404,43 @@ { "time": 0.1666, "x": 1.208, "y": 1.208 }, { "time": 0.2666, "x": 1, "y": 1 } ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.0333, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -62.47, "y": -31.55, "curve": "stepped" }, + { + "time": 0.0333, + "x": -62.47, + "y": -31.55, + "curve": [ 0.266, 0, 0.303, 1 ] + }, + { "time": 0.0666, "x": -34.75, "y": -23.15 }, + { "time": 0.1666, "x": -34.75, "y": -14.31, "curve": "stepped" }, + { + "time": 0.6666, + "x": -34.75, + "y": -14.31, + "curve": [ 0.433, 0, 0.823, 1 ] + }, + { "time": 1.6333, "x": -34.75, "y": -148.55, "curve": "stepped" }, + { "time": 2, "x": -34.75, "y": -148.55 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.0666, "x": 1, "y": 1 }, + { "time": 0.0864, "x": 0.9, "y": 1.1 }, + { + "time": 0.1144, + "x": 1.163, + "y": 1, + "curve": [ 0.074, 0.48, 0.331, 1 ] + }, + { "time": 0.2333, "x": 1, "y": 1 } + ] } } }, @@ -2112,10 +3490,6 @@ { "time": 0.1333, "x": -7.7, "y": 8.98 }, { "time": 0.5333, "x": -1.26, "y": 3.83 }, { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "torso": { @@ -2130,10 +3504,6 @@ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "rear_thigh": { @@ -2161,10 +3531,6 @@ { "time": 0.5333, "x": -9.01, "y": -5.15 }, { "time": 0.6666, "x": -23.18, "y": -2.57 }, { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "rear_shin": { @@ -2193,10 +3559,6 @@ "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "front_upper_arm": { @@ -2220,10 +3582,6 @@ { "time": 0.2666, "x": 4.95, "y": -13.13 }, { "time": 0.6, "x": -2.43, "y": 1.94 }, { "time": 0.8, "x": 6.24, "y": 10.05 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "front_bracer": { @@ -2244,10 +3602,6 @@ "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "front_fist": { @@ -2264,10 +3618,6 @@ "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "rear_upper_arm": { @@ -2292,10 +3642,6 @@ { "time": 0.2, "x": 21.73, "y": 51.17 }, { "time": 0.6, "x": 4.33, "y": 2.05 }, { "time": 0.8, "x": -2.57, "y": -8.89 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "rear_bracer": { @@ -2317,10 +3663,6 @@ "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "neck": { @@ -2335,10 +3677,6 @@ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "head": { @@ -2355,45 +3693,6 @@ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": -62.47, "y": -23.1 }, - { - "time": 0.0666, - "x": -62.47, - "y": -38.51, - "curve": [ 0.244, 0.04, 0.75, 1 ] - }, - { - "time": 0.2666, - "x": -62.47, - "y": 22.28, - "curve": [ 0.17, 0.52, 0.75, 1 ] - }, - { "time": 0.4, "x": -62.47, "y": -23.1 }, - { "time": 0.4333, "x": -62.47, "y": -24.59 }, - { - "time": 0.4666, - "x": -62.47, - "y": -43.29, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.6666, "x": -62.47, "y": 22.28 }, - { "time": 0.8, "x": -62.47, "y": -23.1 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "front_shin": { @@ -2425,10 +3724,6 @@ "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "front_foot": { @@ -2453,10 +3748,6 @@ "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "rear_foot": { @@ -2483,10 +3774,6 @@ "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "gun": { @@ -2499,10 +3786,37 @@ "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 } ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } + "translate": [ + { "time": 0, "x": -62.47, "y": -23.1 }, + { + "time": 0.0666, + "x": -62.47, + "y": -38.51, + "curve": [ 0.244, 0.04, 0.75, 1 ] + }, + { + "time": 0.2666, + "x": -62.47, + "y": 22.28, + "curve": [ 0.17, 0.52, 0.75, 1 ] + }, + { "time": 0.4, "x": -62.47, "y": -23.1 }, + { "time": 0.4333, "x": -62.47, "y": -24.59 }, + { + "time": 0.4666, + "x": -62.47, + "y": -43.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6666, "x": -62.47, "y": 22.28 }, + { "time": 0.8, "x": -62.47, "y": -23.1 } ] } }, @@ -2512,6 +3826,108 @@ ] }, "shoot": { + "slots": { + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_grind" } + ] + }, + "muzzle": { + "color": [ + { + "time": 0.0225, + "color": "ffffff00", + "curve": [ 0.118, 0.99, 0.75, 1 ] + }, + { "time": 0.0666, "color": "ffffffff", "curve": "stepped" }, + { "time": 0.1, "color": "ffffffff" }, + { "time": 0.1666, "color": "ffffff00" } + ], + "attachment": [ + { "time": 0.0333, "name": "muzzle" }, + { "time": 0.1666, "name": null } + ] + } + }, + "bones": { + "gunTip": { + "translate": [ + { "time": 0.0333, "x": 0, "y": 0 }, + { "time": 0.1666, "x": 20.93, "y": 1.57 } + ], + "scale": [ + { + "time": 0.0333, + "x": 1, + "y": 1, + "curve": [ 0.706, 0, 0.49, 1 ] + }, + { "time": 0.1666, "x": 1.247, "y": 1.516 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 1.9 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0333, "x": -6.42, "y": 6.68 }, + { + "time": 0.0666, + "x": 0, + "y": 0, + "curve": [ 0, 0.98, 0.354, 0.98 ] + }, + { "time": 0.1666, "x": -9.3, "y": -1.41 }, + { "time": 0.2666, "x": 0, "y": 0 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": -30.47 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0, 0.3, 0.678, 1 ] + }, + { "time": 0.2, "x": -5.99, "y": -3.71 }, + { "time": 0.2666, "x": 0, "y": 0 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 62.3 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0, 0.3, 0.678, 1 ] + }, + { "time": 0.2, "x": 2.81, "y": 11.41 }, + { "time": 0.2666, "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": [ @@ -2525,10 +3941,6 @@ ] }, "muzzle": { - "attachment": [ - { "time": 0.1333, "name": "muzzle" }, - { "time": 0.2666, "name": null } - ], "color": [ { "time": 0.1333, @@ -2541,16 +3953,14 @@ "curve": [ 0.821, 0, 0.909, 0.89 ] }, { "time": 0.2666, "color": "ffffff00" } + ], + "attachment": [ + { "time": 0.1333, "name": "muzzle" }, + { "time": 0.2666, "name": null } ] } }, "bones": { - "front_fist": { - "scale": [ - { "time": 0.1333, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.4, "x": 1, "y": 1 } - ] - }, "gunTip": { "translate": [ { "time": 0.1333, "x": 0, "y": 0 }, @@ -2605,7 +4015,20 @@ { "time": 0.3, "x": 2.81, "y": 11.41 }, { "time": 0.4, "x": 0, "y": 0 } ] + }, + "aiming gun target": { + "translate": [ + { "time": 0, "x": -0.06, "y": -10.39 } + ] } + }, + "ik": { + "aiming constraint": [ + { "time": 0 } + ], + "aiming gun constraint": [ + { "time": 0 } + ] } }, "test": { @@ -2763,11 +4186,6 @@ { "time": 0.5, "x": 0.11, "y": 0.41 }, { "time": 0.6, "x": 9.48, "y": 0.27 }, { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.4, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "front_shin": { @@ -2780,14 +4198,6 @@ { "time": 0.5, "angle": -26.76 }, { "time": 0.7, "angle": -55.44 }, { "time": 0.8, "angle": 5.12 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "rear_thigh": { @@ -2808,10 +4218,6 @@ { "time": 0.5, "x": 0, "y": 0 }, { "time": 0.7, "x": -21.14, "y": -9.6 }, { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "rear_shin": { @@ -2826,10 +4232,6 @@ { "time": 0.7, "angle": 21.85 }, { "time": 0.8, "angle": 14.26 } ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], "scale": [ { "time": 0, "x": 1, "y": 1 }, { "time": 0.1, "x": 0.951, "y": 1 }, @@ -2848,14 +4250,6 @@ { "time": 0.6, "angle": -0.97 }, { "time": 0.7, "angle": 2.97 }, { "time": 0.8, "angle": 10.13 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "front_upper_arm": { @@ -2863,14 +4257,6 @@ { "time": 0, "angle": -23.74 }, { "time": 0.4, "angle": -320.57 }, { "time": 0.8, "angle": -23.74 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "rear_upper_arm": { @@ -2880,14 +4266,6 @@ { "time": 0.4, "angle": 345.26 }, { "time": 0.5, "angle": 343.44 }, { "time": 0.8, "angle": 11.62 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "torso": { @@ -2897,10 +4275,6 @@ { "time": 0.4, "angle": -12.11 }, { "time": 0.5666, "angle": -15.81 }, { "time": 0.8, "angle": -12.11 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "neck": { @@ -2910,15 +4284,6 @@ { "time": 0.4, "angle": 1.41 }, { "time": 0.6333, "angle": -3.04 }, { "time": 0.8, "angle": 1.41 } - ], - "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 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] }, "head": { @@ -2930,22 +4295,73 @@ { "time": 0.5666, "angle": 8.02 }, { "time": 0.6666, "angle": 12.65 }, { "time": 0.8, "angle": 6.97 } - ], - "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 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.4, "angle": 20.59 }, + { "time": 0.8, "angle": 0 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 12.49 }, + { "time": 0.1, "angle": -8.34 }, + { "time": 0.2, "angle": -6.17 }, + { "time": 0.3, "angle": -0.75 }, + { "time": 0.3333, "angle": 3.89 }, + { "time": 0.4, "angle": 10.22 }, + { "time": 0.5, "angle": 11.44 }, + { "time": 0.6, "angle": -0.33 }, + { "time": 0.7, "angle": 0.15 }, + { "time": 0.8, "angle": 12.49 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 3.58 }, + { "time": 0.1, "angle": 5.51 }, + { "time": 0.4, "angle": -22.77 }, + { "time": 0.5, "angle": -9.65 }, + { "time": 0.8, "angle": 3.58 } + ] + }, + "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.06, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.1, + "angle": -10.94, + "curve": [ 0.381, 0.54, 0.742, 1 ] + }, + { + "time": 0.4, + "angle": 25.34, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -27.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.8, "angle": -24.06 } ] }, "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 0.8, "angle": 0 } - ], "translate": [ { "time": 0, @@ -2996,114 +4412,6 @@ "curve": [ 0.615, 0, 0.75, 1 ] }, { "time": 0.8, "x": -23.93, "y": 3.22 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.4, "angle": 20.59 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": 12.49 }, - { "time": 0.1, "angle": -8.34 }, - { "time": 0.2, "angle": -6.17 }, - { "time": 0.3, "angle": -0.75 }, - { "time": 0.3333, "angle": 3.89 }, - { "time": 0.4, "angle": 10.22 }, - { "time": 0.5, "angle": 11.44 }, - { "time": 0.6, "angle": -0.33 }, - { "time": 0.7, "angle": 0.15 }, - { "time": 0.8, "angle": 12.49 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 3.58 }, - { "time": 0.1, "angle": 5.51 }, - { "time": 0.4, "angle": -22.77 }, - { "time": 0.5, "angle": -9.65 }, - { "time": 0.8, "angle": 3.58 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "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 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { - "time": 0, - "angle": -24.06, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.1, - "angle": -10.94, - "curve": [ 0.381, 0.54, 0.742, 1 ] - }, - { - "time": 0.4, - "angle": 25.34, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -27.47, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.8, "angle": -24.06 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } ] } } diff --git a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy.png.meta b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy.png.meta index 64f7ac3b3..f022f2d10 100644 --- a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy.png.meta +++ b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy.png.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 49bb65eefe08e424bbf7a38bc98ec638 -timeCreated: 1455501336 +timeCreated: 1467205225 licenseType: Free TextureImporter: fileIDToRecycleName: {} diff --git a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Atlas.asset b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Atlas.asset index 464fe2827..ae8491bec 100644 Binary files a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Material.mat b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Material.mat index cb02038bf..7333f766e 100644 Binary files a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Material.mat and b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_SkeletonData.asset b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_SkeletonData.asset index d5b6bf7d3..4ba0e80ab 100644 Binary files a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_SkeletonData.asset and b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_SkeletonData.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.json b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.json index 52129857a..dc2838e93 100644 --- a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.json +++ b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.json @@ -1,70 +1,66 @@ { -"skeleton": { "hash": "LB6lK51rA9CQsAi/AwR23H3jVZY", "spine": "3.0.11", "width": 519.72, "height": 542.19, "images": "" }, +"skeleton": { "hash": "mDzkOfnXqTuFIADT0TiLHSO3Mh4", "spine": "3.3.07", "width": 525.12, "height": 543.06, "images": "" }, "bones": [ { "name": "root" }, - { "name": "hip", "parent": "root", "length": 68.61, "x": -19.9, "y": 151.37, "rotation": -171.49, "color": "ffe941ff" }, - { "name": "lumbar", "parent": "hip", "length": 33.93, "x": 0.07, "y": -4.74, "rotation": -97.88 }, - { "name": "femurR", "parent": "hip", "length": 45.3, "x": 43.53, "y": 43.45, "rotation": 53.25 }, - { "name": "femurL", "parent": "hip", "length": 92.96, "x": -52.77, "y": 39.86, "rotation": 125.21 }, - { "name": "strap anchor", "parent": "hip", "length": 31.94, "x": 2.3, "y": 43.77, "rotation": -85.09, "color": "ff702eff" }, - { "name": "thorax", "parent": "lumbar", "length": 54.39, "x": 35.09, "y": -0.8, "rotation": -18.29 }, - { "name": "strap tie", "parent": "thorax", "length": 32.33, "x": 48.07, "y": 9.54, "rotation": 174.59, "color": "ff702eff" }, - { "name": "humerusR", "parent": "thorax", "length": 55.73, "x": 23.08, "y": 29.13, "rotation": 137.38 }, - { "name": "radiusR", "parent": "humerusR", "length": 47.29, "x": 58.87, "rotation": 4.01 }, + { "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": "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": "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": "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": "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": "ringR", "parent": "handR", "length": 18.11, "x": -10.21, "y": -16.03, "rotation": -31.44 }, - { "name": "pinkyR", "parent": "handR", "length": 20.98, "x": -15.17, "y": -0.62, "rotation": -38.56 }, - { "name": "middleR", "parent": "handR", "length": 19.24, "x": -3.3, "y": -17.06, "rotation": -23.52 }, - { "name": "indexR", "parent": "handR", "length": 18, "x": 6.82, "y": -13.85, "rotation": -11.04 }, - { "name": "handleCenterTargetR", "parent": "handR", "x": 18.07, "y": 0.06, "rotation": -89, "color": "ff0000ff" }, - { "name": "rotateHandle", "parent": "root", "length": 55.27, "x": -152.63, "y": 153.44, "rotation": 124.8, "color": "ff0000ff" }, + { "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": "humerusL", "parent": "thorax", "length": 73.48, "x": 41.33, "y": -55.5, "rotation": -65.21 }, - { "name": "radiusL", "parent": "humerusL", "length": 65.38, "x": 75.72, "y": 1.83, "rotation": 43.11 }, - { "name": "handL", "parent": "radiusL", "x": 80.44, "y": 2.06, "rotation": -52.7 }, - { "name": "ringL", "parent": "handL", "length": 15.27, "x": 21.05, "y": 12.5, "rotation": 62.01 }, - { "name": "pinkyL", "parent": "handL", "length": 12.17, "x": 22.03, "y": -15.19, "rotation": 37.78 }, - { "name": "middleL", "parent": "handL", "length": 23.21, "x": 4.54, "y": 20.96, "rotation": 75.15 }, - { "name": "indexL", "parent": "handL", "length": 22, "x": -13.07, "y": 20.89, "rotation": 99.18 }, - { "name": "arrowOrigin", "parent": "root", "x": 172.99, "y": 292 }, - { "name": "arrowY", "parent": "arrowOrigin", "length": 71.44, "x": 37.77, "y": 44.72, "rotation": 49.81 }, - { "name": "arrowX", "parent": "arrowOrigin", "length": 71.44, "x": 47.68, "y": -3.92, "rotation": -4.7 }, - { "name": "head", "parent": "thorax", "length": 14.3, "x": 70.1, "y": -1.78, "rotation": 6.59 }, - { "name": "pony2 1", "parent": "head", "length": 22.09, "x": 12.68, "y": -53.86, "rotation": -126.98 }, - { "name": "pony2 2", "parent": "pony2 1", "length": 24.31, "x": 25.67, "y": -0.29, "rotation": 2.08 }, - { "name": "pony2 3R", "parent": "pony2 2", "length": 43.41, "x": 27.7, "y": 0.83, "rotation": 15.37 }, - { "name": "pony2 3L", "parent": "pony2 2", "length": 33.37, "x": 31.3, "y": -1.21, "rotation": -9.21 }, - { "name": "pony1 1", "parent": "head", "length": 26.78, "x": 3.24, "y": -49.43, "rotation": -127.21 }, - { "name": "pony1 2", "parent": "pony1 1", "length": 20.86, "x": 29.89, "y": -1.1, "rotation": -14.7 }, - { "name": "pony1 3R", "parent": "pony1 2", "length": 37.66, "x": 34.01, "y": 6.79, "rotation": -2.95 }, - { "name": "pony1 3L", "parent": "pony1 2", "length": 36.26, "x": 27.65, "y": -8.15, "rotation": -26.46 }, - { "name": "mouth", "parent": "head", "x": 28.05, "y": 0.81, "rotation": -77.99 }, - { "name": "mouth opening", "parent": "mouth" }, - { "name": "irisR", "parent": "head", "x": 72.86, "y": 40.02, "rotation": -79.01 }, - { "name": "irisL", "parent": "head", "x": 82.7, "y": -29.95, "rotation": -79.01 }, - { "name": "hairSide", "parent": "head", "length": 33.33, "x": 47.44, "y": -92.9, "rotation": 94.94 }, - { "name": "hairR2", "parent": "head", "length": 49.32, "x": 179.91, "y": 62.62, "rotation": 157.66 }, - { "name": "hairR2 2", "parent": "hairR2", "length": 28.91, "x": 45.74, "y": -13.91, "rotation": -50.6 }, - { "name": "hairR1", "parent": "head", "length": 43.15, "x": 157.15, "y": 74.61, "rotation": -178.89 }, - { "name": "hairM", "parent": "head", "length": 25.81, "x": 182.69, "y": 31.1, "rotation": -173.33 }, - { "name": "hairMR", "parent": "hairM", "length": 44.06, "x": 17, "y": -28.44, "rotation": -6.41 }, - { "name": "hairML", "parent": "hairM", "length": 46.41, "x": 13.83, "y": 24.11, "rotation": 32.57 }, - { "name": "hairL2", "parent": "head", "length": 35.09, "x": 173.5, "y": -26.26, "rotation": -135.32 }, - { "name": "hairL2 2", "parent": "hairL2", "length": 32.49, "x": 37.68, "y": -0.62, "rotation": 17.32 }, - { "name": "hairL1", "parent": "head", "length": 27.5, "x": 179.86, "y": -9.57, "rotation": -150.58 }, - { "name": "eyelids", "parent": "head", "length": 14.96, "x": 79.11, "y": 8.18, "rotation": -82.34 }, - { "name": "browR", "parent": "head", "length": 26.75, "x": 121.66, "y": 39.52, "rotation": 65.11 }, - { "name": "browL", "parent": "head", "length": 31.37, "x": 128.48, "y": -11.4, "rotation": -58.18 }, - { "name": "thumbL", "parent": "handL", "length": 16.61, "x": -29.83, "y": -12.11, "rotation": 150.77 }, - { "name": "thumbR", "parent": "handR", "length": 20.56, "x": 4.36, "y": 18.56, "rotation": -7.45 }, - { "name": "tibiaL", "parent": "femurL", "length": 83, "x": 107.79, "y": -1.31, "rotation": -24.72 }, - { "name": "footL", "parent": "tibiaL", "length": 54.47, "x": 82.83, "y": -20.62, "rotation": 37.77 }, - { "name": "tibiaR", "parent": "femurR", "length": 42.31, "x": 52.54, "y": 9.88, "rotation": 106.18 } -], -"transform": [ - { "name": "rotateHandleTarget", "bone": "rotateHandle", "target": "handleCenterTargetR", "translateMix": 1.0 }, - { "name": "translateHandleTarget", "bone": "arrowOrigin", "target": "handL", "translateMix": 1.0 } + { "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" }, @@ -110,14 +106,26 @@ { "name": "arrowY", "bone": "arrowY", "attachment": "arrowY" }, { "name": "arrowX", "bone": "arrowX", "attachment": "arrowX" } ], +"transform": [ + { + "name": "rotateHandleTarget", + "bones": [ "rotateHandle" ], + "target": "handleCenterTargetR" + }, + { + "name": "translateHandleTarget", + "bones": [ "arrowOrigin" ], + "target": "handL" + } +], "skins": { "default": { "armL": { "armL": { - "type": "weightedmesh", + "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": [ 24, 25, 23, 26, 23, 25, 26, 27, 28, 27, 1, 2, 27, 0, 1, 17, 30, 35, 17, 35, 16, 7, 8, 34, 16, 35, 15, 31, 8, 9, 34, 31, 14, 31, 9, 10, 31, 13, 14, 10, 11, 31, 31, 12, 13, 31, 11, 12, 15, 34, 14, 34, 8, 31, 35, 34, 15, 30, 34, 35, 30, 7, 34, 18, 32, 17, 30, 17, 32, 29, 6, 30, 6, 7, 30, 29, 5, 6, 33, 29, 32, 22, 23, 26, 21, 33, 20, 21, 22, 33, 22, 28, 33, 28, 22, 26, 20, 32, 19, 20, 33, 32, 29, 33, 28, 28, 3, 4, 4, 29, 28, 27, 2, 28, 28, 2, 3, 29, 4, 5, 19, 32, 18, 32, 29, 30 ], - "vertices": [ 1, 6, 72.47, -38.62, 1, 1, 6, 77.25, -44.69, 1, 3, 19, 17.27, 31.86, 0.8272, 20, -22.11, 61.87, 0.00479, 6, 77.49, -57.83, 0.16799, 2, 19, 27.54, 28.85, 0.95931, 20, -16.67, 52.66, 0.04067, 2, 19, 46.81, 26.42, 0.89979, 20, -4.27, 37.71, 0.1002, 2, 19, 61.3, 27, 0.58207, 20, 6.69, 28.22, 0.41792, 3, 19, 74.75, 38.36, 0.24874, 20, 24.27, 27.31, 0.62043, 21, -54.13, -29.38, 0.1308, 2, 20, 40.46, 29.68, 0.60754, 21, -46.2, -15.07, 0.39245, 1, 21, -37.05, 2.7, 1, 1, 21, -29.18, 18.70999, 1, 1, 21, -16.26, 27.78, 1, 1, 21, -2.78, 31.75, 1, 1, 21, 16.67, 31.19, 1, 2, 20, 112.22, -10.38, 0.00319, 21, 29.17, 17.71999, 0.9968, 1, 21, 31.84, -3.98, 1, 1, 21, 31.47, -21.39, 1, 2, 20, 64.9, -43, 0.34301, 21, 26.44, -39.68, 0.65698, 3, 19, 136.75, -3.77, 0.00362, 20, 40.68999, -45.83, 0.69388, 21, 14, -60.66, 0.30249, 3, 19, 121.48, -15.93, 0.19497, 20, 21.23, -44.26, 0.50686, 21, 0.96, -75.18, 0.29815, 2, 19, 98.53, -23.69, 0.6028, 20, -0.81, -34.22, 0.39719, 2, 19, 68.06, -28.44, 0.98196, 20, -26.29, -16.85, 0.01803, 1, 19, 40.25, -28.37, 1, 1, 19, 19, -25.35, 1, 2, 19, 9.32, -25.85, 0.82399, 6, 21.76, -74.8, 0.176, 1, 6, 17.54999, -68.26999, 1, 1, 6, 21.54, -60.58, 1, 1, 6, 32.21, -51.4, 1, 1, 6, 58.83, -42.95, 1, 2, 19, 23.44, 6.66, 0.99126, 20, -34.84, 39.27, 0.00873, 2, 19, 64.46, 14.85, 0.69542, 20, 0.68, 17.2, 0.30456, 2, 20, 33.66999, -2.38, 0.736, 21, -24.8, -39.9, 0.26399, 1, 21, -1.62, 13.97, 1, 2, 19, 91.77, -6.43, 0.73823, 20, 6.05, -17.01, 0.26176, 1, 19, 51.17, -11.17, 1, 2, 20, 65.92, -2.16, 0.336, 21, -5.42, -14.11, 0.66399, 1, 21, 8.34, -35.14, 1 ], + "vertices": [ 1, 3, 72.47, -38.62, 1, 1, 3, 77.25, -44.69, 1, 3, 4, 17.27, 31.86, 0.8272, 5, -22.11, 61.87, 0.00479, 3, 77.49, -57.83, 0.16799, 2, 4, 27.54, 28.85, 0.95931, 5, -16.67, 52.66, 0.04067, 2, 4, 46.81, 26.42, 0.89979, 5, -4.27, 37.71, 0.1002, 2, 4, 61.3, 27, 0.58207, 5, 6.69, 28.22, 0.41792, 3, 4, 74.75, 38.36, 0.24874, 5, 24.27, 27.31, 0.62043, 6, -54.13, -29.38, 0.1308, 2, 5, 40.46, 29.68, 0.60754, 6, -46.2, -15.07, 0.39245, 1, 6, -37.05, 2.7, 1, 1, 6, -29.18, 18.70999, 1, 1, 6, -16.26, 27.78, 1, 1, 6, -2.78, 31.75, 1, 1, 6, 16.67, 31.19, 1, 2, 5, 112.22, -10.38, 0.00319, 6, 29.17, 17.71999, 0.9968, 1, 6, 31.84, -3.98, 1, 1, 6, 31.47, -21.39, 1, 2, 5, 64.9, -43, 0.34301, 6, 26.44, -39.68, 0.65698, 3, 4, 136.75, -3.77, 0.00362, 5, 40.68999, -45.83, 0.69388, 6, 14, -60.66, 0.30249, 3, 4, 121.48, -15.93, 0.19497, 5, 21.23, -44.26, 0.50686, 6, 0.96, -75.18, 0.29815, 2, 4, 98.53, -23.69, 0.6028, 5, -0.81, -34.22, 0.39719, 2, 4, 68.06, -28.44, 0.98196, 5, -26.29, -16.85, 0.01803, 1, 4, 40.25, -28.37, 1, 1, 4, 19, -25.35, 1, 2, 4, 9.32, -25.85, 0.82399, 3, 21.76, -74.8, 0.176, 1, 3, 17.54999, -68.26999, 1, 1, 3, 21.54, -60.58, 1, 1, 3, 32.21, -51.4, 1, 1, 3, 58.83, -42.95, 1, 2, 4, 23.44, 6.66, 0.99126, 5, -34.84, 39.27, 0.00873, 2, 4, 64.46, 14.85, 0.69542, 5, 0.68, 17.2, 0.30456, 2, 5, 33.66999, -2.38, 0.736, 6, -24.8, -39.9, 0.26399, 1, 6, -1.62, 13.97, 1, 2, 4, 91.77, -6.43, 0.73823, 5, 6.05, -17.01, 0.26176, 1, 4, 51.17, -11.17, 1, 2, 5, 65.92, -2.16, 0.336, 6, -5.42, -14.11, 0.66399, 1, 6, 8.34, -35.14, 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, @@ -126,10 +134,10 @@ }, "armR": { "armR": { - "type": "weightedmesh", + "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": [ 22, 2, 3, 23, 22, 3, 23, 3, 4, 28, 22, 23, 13, 28, 29, 21, 1, 2, 21, 2, 22, 0, 1, 21, 27, 21, 22, 27, 22, 28, 14, 28, 13, 27, 28, 14, 20, 0, 21, 26, 21, 27, 20, 21, 26, 15, 27, 14, 26, 27, 15, 19, 20, 26, 18, 19, 26, 16, 26, 15, 17, 18, 26, 16, 17, 26, 25, 6, 7, 24, 5, 6, 8, 25, 7, 31, 8, 9, 31, 25, 8, 25, 24, 6, 30, 24, 25, 30, 25, 31, 10, 31, 9, 30, 31, 10, 24, 23, 4, 24, 4, 5, 11, 30, 10, 29, 23, 24, 29, 24, 30, 29, 30, 11, 12, 29, 11, 28, 23, 29, 12, 13, 29 ], - "vertices": [ 1, 9, 65.4, -17.71999, 1, 1, 9, 49.09, -32.07, 1, 2, 8, 85.41, -29.41, 0.00107, 9, 24.41, -31.2, 0.99892, 2, 8, 65.32, -26.27, 0.14336, 9, 4.59, -26.65, 0.85663, 2, 8, 53.32, -22.57, 0.51598, 9, -7.11, -22.13, 0.48401, 2, 8, 37.75999, -22.59, 0.92586, 9, -22.64, -21.06, 0.07413, 2, 8, 4.02, -23.16, 0.99998, 9, -56.34, -19.26, 1.0E-5, 2, 8, -14.37, -21.08, 0.99998, 9, -74.54, -15.9, 1.0E-5, 2, 8, -23.69, -12.19, 0.99998, 9, -83.21, -6.39, 1.0E-5, 2, 8, -15.89, 7.82, 0.99999, 9, -74.04, 13.03, 0, 1, 8, -5.03, 16.87, 1, 1, 8, 12.61, 22.04, 1, 2, 8, 40.89, 23.14, 0.90115, 9, -16.32, 24.34, 0.09884, 2, 8, 54.97, 24.58, 0.45832, 9, -2.17, 24.8, 0.54167, 2, 8, 68.83, 26.16, 0.06028, 9, 11.76, 25.4, 0.93971, 1, 9, 32, 25.98, 1, 1, 9, 51.21, 27.27, 1, 1, 9, 62.95, 23.22, 1, 1, 9, 71.64, 12.39, 1, 1, 9, 72.44999, 0.12, 1, 1, 9, 71.11, -9.2, 1, 1, 9, 46.22, -13, 1, 2, 8, 79.72, -11.18, 0.00278, 9, 20.01, -12.61, 0.99721, 2, 8, 55.35, -8.46, 0.56562, 9, -4.1, -8.18999, 0.43437, 2, 8, 31.94, -8.6, 0.9957, 9, -27.47, -6.7, 0.00429, 2, 8, 2.59999, -10.53, 0.99999, 9, -56.87, -6.57, 0, 1, 9, 56.73, 9.43999, 1, 1, 9, 37.31, 6.49, 1, 1, 9, 11.03, 6.33, 1, 2, 8, 42.43, 6.7, 0.94672, 9, -15.93, 7.83, 0.05327, 1, 8, 16.96999, 3.99, 1, 2, 8, -4.69999, 2.86, 0.99999, 9, -63.22, 7.3, 0 ], + "vertices": [ 1, 29, 65.4, -17.71999, 1, 1, 29, 49.09, -32.07, 1, 2, 28, 85.41, -29.41, 0.00107, 29, 24.41, -31.2, 0.99892, 2, 28, 65.32, -26.27, 0.14336, 29, 4.59, -26.65, 0.85663, 2, 28, 53.32, -22.57, 0.51598, 29, -7.11, -22.13, 0.48401, 2, 28, 37.75999, -22.59, 0.92586, 29, -22.64, -21.06, 0.07413, 2, 28, 4.02, -23.16, 0.99998, 29, -56.34, -19.26, 1.0E-5, 2, 28, -14.37, -21.08, 0.99998, 29, -74.54, -15.9, 1.0E-5, 2, 28, -23.69, -12.19, 0.99998, 29, -83.21, -6.39, 1.0E-5, 2, 28, -15.89, 7.82, 0.99999, 29, -74.04, 13.03, 0, 1, 28, -5.03, 16.87, 1, 1, 28, 12.61, 22.04, 1, 2, 28, 40.89, 23.14, 0.90115, 29, -16.32, 24.34, 0.09884, 2, 28, 54.97, 24.58, 0.45832, 29, -2.17, 24.8, 0.54167, 2, 28, 68.83, 26.16, 0.06028, 29, 11.76, 25.4, 0.93971, 1, 29, 32, 25.98, 1, 1, 29, 51.21, 27.27, 1, 1, 29, 62.95, 23.22, 1, 1, 29, 71.64, 12.39, 1, 1, 29, 72.44999, 0.12, 1, 1, 29, 71.11, -9.2, 1, 1, 29, 46.22, -13, 1, 2, 28, 79.72, -11.18, 0.00278, 29, 20.01, -12.61, 0.99721, 2, 28, 55.35, -8.46, 0.56562, 29, -4.1, -8.18999, 0.43437, 2, 28, 31.94, -8.6, 0.9957, 29, -27.47, -6.7, 0.00429, 2, 28, 2.59999, -10.53, 0.99999, 29, -56.87, -6.57, 0, 1, 29, 56.73, 9.43999, 1, 1, 29, 37.31, 6.49, 1, 1, 29, 11.03, 6.33, 1, 2, 28, 42.43, 6.7, 0.94672, 29, -15.93, 7.83, 0.05327, 1, 28, 16.96999, 3.99, 1, 2, 28, -4.69999, 2.86, 0.99999, 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, @@ -144,10 +152,10 @@ }, "body": { "body": { - "type": "weightedmesh", + "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": [ 28, 88, 29, 88, 30, 29, 28, 27, 88, 26, 87, 27, 27, 87, 88, 87, 74, 88, 30, 88, 31, 88, 74, 31, 26, 25, 87, 71, 55, 72, 45, 72, 46, 47, 46, 70, 5, 4, 69, 69, 83, 63, 69, 4, 83, 63, 60, 55, 72, 60, 82, 72, 55, 60, 46, 72, 70, 47, 70, 48, 83, 62, 63, 63, 62, 60, 48, 70, 49, 72, 58, 70, 72, 82, 58, 4, 3, 83, 83, 3, 62, 60, 62, 76, 60, 76, 82, 76, 1, 0, 1, 76, 62, 58, 51, 70, 70, 50, 49, 70, 51, 50, 82, 76, 58, 3, 2, 62, 62, 2, 1, 76, 52, 58, 58, 52, 51, 76, 0, 52, 59, 63, 55, 87, 25, 81, 74, 32, 31, 87, 81, 74, 81, 25, 24, 81, 78, 74, 74, 33, 32, 74, 78, 33, 24, 61, 81, 81, 61, 78, 24, 23, 61, 78, 34, 33, 61, 66, 78, 35, 78, 66, 78, 35, 34, 35, 66, 36, 36, 66, 37, 66, 61, 22, 61, 23, 22, 22, 21, 66, 66, 38, 37, 21, 75, 66, 21, 20, 75, 66, 75, 38, 20, 64, 75, 20, 19, 64, 19, 84, 64, 19, 18, 84, 64, 57, 75, 75, 39, 38, 75, 57, 39, 17, 85, 18, 18, 85, 84, 57, 64, 40, 64, 84, 40, 57, 40, 39, 84, 85, 68, 85, 80, 68, 84, 41, 40, 41, 68, 42, 41, 84, 68, 65, 67, 53, 67, 9, 8, 13, 12, 65, 65, 12, 10, 12, 11, 10, 13, 65, 14, 65, 53, 14, 10, 9, 65, 65, 9, 67, 14, 53, 15, 16, 15, 73, 16, 80, 17, 17, 80, 85, 15, 53, 73, 16, 73, 80, 79, 73, 86, 73, 79, 80, 53, 67, 73, 80, 79, 68, 67, 54, 73, 73, 54, 86, 8, 7, 67, 67, 77, 54, 67, 7, 77, 79, 71, 68, 68, 43, 42, 43, 71, 44, 43, 68, 71, 86, 59, 79, 79, 59, 71, 86, 54, 59, 77, 56, 54, 54, 56, 59, 7, 6, 77, 6, 69, 77, 77, 69, 56, 56, 63, 59, 59, 55, 71, 71, 45, 44, 71, 72, 45, 6, 5, 69, 56, 69, 63 ], - "vertices": [ 1, 6, 77.69, -3.35, 1, 1, 6, 70.93, 17.96999, 1, 5, 1, 5.71, -100.8, 0.0145, 57, -247.48, -75.75, 0, 2, 94.39, 18.70999, 0.00385, 6, 50.19, 37.13, 0.98163, 19, -80.4, 46.88, 0, 5, 1, 23.74, -86.28, 0.08471, 57, -236.49, -96.13, 0, 2, 77.54, 34.58, 0.03571, 6, 29.21, 46.92, 0.87956, 19, -98.09, 31.93, 0, 5, 1, 41.53, -64.15, 0.26317, 57, -217.96, -117.66, 0, 2, 53.18, 49.18, 0.0809, 6, 1.5, 53.15, 0.65592, 19, -115.36, 9.38, 0, 5, 1, 49.42, -39.15, 0.58274, 57, -194.81, -129.97, 0, 2, 27.34, 53.58, 0.07701, 6, -24.41, 49.22, 0.34024, 19, -122.66, -15.8, 0, 3, 1, 50.65, -14.87, 0.84586, 2, 3.12, 51.48, 0.04506, 6, -46.76, 39.63, 0.10906, 2, 1, 50.08, 6.57, 0.99949, 6, -65.76, 29.68, 5.0E-4, 4, 1, 61.25, 19.02, 0.41233, 3, -8.97, -28.82, 0.58677, 2, -31.9, 57.35, 0, 6, -81.86, 34.22, 8.8E-4, 4, 1, 72.58999, 34.89, 0.07954, 3, 10.52, -28.41, 0.92009, 2, -49.17, 66.42, 0, 6, -101.1, 37.41999, 3.6E-4, 4, 1, 91.79, 71.97, 0.02573, 3, 51.72, -21.6, 0.97336, 2, -88.53, 80.37, 1.0E-5, 6, -142.86, 38.32, 8.9E-4, 4, 1, 96.09, 100.61, 1.0E-5, 3, 77.24, -7.91, 0.99997, 2, -117.49, 80.71, 0, 6, -170.47, 29.57, 1.0E-5, 3, 1, 76.54, 109.4, 1.0E-5, 3, 72.58999, 13, 0.99998, 2, -123.53, 60.14, 0, 2, 1, 49.25, 106.61, 0.14582, 3, 54.02, 33.2, 0.85417, 2, 1, 32.59999, 89.81, 0.31082, 3, 30.6, 36.49, 0.68917, 2, 1, 18.71999, 82.25, 0.83943, 3, 16.24, 43.09, 0.16056, 3, 1, -5.11, 77.22, 0.91391, 3, -2.05, 59.18, 0.048, 4, 3.04, -60.47, 0.03808, 2, 1, -27.35, 87.44, 0.75787, 4, 24.21, -48.2, 0.24212, 3, 1, -41.54, 98.53, 0.16242, 4, 41.45, -43, 0.83708, 57, -42.83, -65.61, 4.8E-4, 4, 1, -54.05, 106.96, 0.00263, 3, -7.5, 116.18, 0.02515, 4, 55.55, -37.64, 0.92652, 57, -32.27, -54.84, 0.04568, 4, 1, -74.35, 125.51, 1.4E-4, 3, -4.78, 143.55, 0.00627, 4, 82.41, -31.75, 0.81754, 57, -10.32, -38.25999, 0.17603, 3, 3, -1.4, 153.1, 2.5E-4, 4, 92.54, -32.00999, 0.60675, 57, -1.01, -34.25999, 0.39299, 2, 4, 100.62, -37.86, 0.33847, 57, 8.76, -36.18999, 0.66152, 2, 4, 117.02, -49.3, 0.13549, 57, 28.45, -39.74, 0.8645, 1, 57, 55.59, -40.45, 1, 2, 57, 83.33, -36.33, 0.92669, 58, -10.6, -11.59, 0.07329, 2, 57, 92.76, -30.93, 0.09793, 58, -0.08, -14.31, 0.90206, 1, 58, 16.06, -16.11, 1, 1, 58, 44.1, -11.17, 1, 1, 58, 62.7, -2.95, 1, 3, 4, 222.66, -25.15, 2.0E-5, 57, 114.34, 26.37, 0.13331, 58, 55.36, 11.64, 0.86666, 3, 4, 216.44, -20.19, 4.5E-4, 57, 106.6, 28.28, 0.42261, 58, 48.75, 24.08, 0.57693, 3, 4, 207.4, -10.55, 8.1E-4, 57, 94.36, 33.25999, 0.66584, 58, 45.88, 30.52, 0.33333, 3, 4, 195, -0.84, 0.00298, 57, 79.03, 36.88, 0.8859, 58, 37.43, 43.82, 0.11111, 2, 4, 163.25, 18.20999, 0.00655, 57, 42.22, 40.93, 0.99344, 2, 4, 137.03, 27.28, 0.05801, 57, 14.6, 38.21, 0.94198, 2, 4, 121.08, 29.34, 0.16158, 57, -0.74, 33.41, 0.83841, 2, 4, 112.15, 29.87, 0.33221, 57, -9.07, 30.16, 0.66778, 2, 4, 103.46, 30.64, 0.60759, 57, -17.29, 27.22, 0.39239, 2, 4, 72.6, 30.93, 0.83736, 57, -45.45, 14.59, 0.16263, 2, 4, 34.88, 26.01, 0.9936, 57, -77.67, -5.65, 0.00639, 3, 1, -81.94, 40.50999, 0.30239, 4, 17.34, 23.46, 0.6976, 57, -92.53, -15.3, 0, 3, 1, -74.65, 29.42, 0.60736, 4, 4.08, 23.89, 0.39263, 57, -104.76, -20.45, 0, 4, 1, -66.51, 14.76, 0.78491, 4, -12.58, 25.69, 0.21277, 57, -120.66, -25.78, 0, 6, -21.76, -78.62, 0.0023, 4, 1, -64.78, 1.05999, 0.77424, 4, -24.77, 32.16999, 0.13585, 57, -134.45, -24.99, 0, 6, -10.22999, -71.03, 0.08989, 4, 1, -66.04, -8.97, 0.68679, 57, -144.09, -21.92, 0, 6, -0.66, -67.74, 0.31202, 19, -6.48, -43.26, 0.00116, 4, 1, -73.83999, -15.03, 0.38179, 57, -148.63, -13.14, 0, 6, 8.22, -72.07, 0.49072, 19, 1.16999, -37.00999, 0.12748, 4, 1, -83.9, -20.07, 0.19577, 57, -151.75, -2.33, 0, 6, 17.17, -78.89, 0.55657, 19, 11.1, -31.74, 0.24764, 3, 1, -95.71, -27.6, 0.10164, 6, 29.13, -86.18, 0.54542, 19, 22.74, -23.93, 0.35293, 3, 1, -107.32, -47.56, 0.07677, 6, 52.17, -87.81, 0.57428, 19, 33.88, -3.69, 0.34892, 3, 1, -106.31, -68.39, 0.03831, 6, 70.42, -77.73, 0.62598, 19, 32.38, 17.1, 0.3357, 3, 1, -89.67, -86.04, 0.01311, 6, 78.94999, -55.01, 0.76821, 19, 15.32, 34.36, 0.21866, 1, 6, 84.45, -24.67, 1, 2, 1, 30.77, 65.08, 0.7233, 3, 9.68999, 23.15, 0.27669, 1, 1, 12.65, 15.26, 1, 3, 57, -165.71, -55.73, 0, 2, 23.09, -26.03, 0.72213, 6, -3.47, -27.71, 0.27785, 1, 1, 11.95, -10.77, 1, 1, 4, 62.53, 12.76, 1, 1, 6, 51.75, -38.97, 1, 3, 1, -11.15, -0.35, 0.71938, 4, -56.85, -10.81, 0.08552, 2, -2.81, -11.72, 0.19508, 3, 57, -192.92, -49.7, 0, 2, 50.81, -23.18, 0.05995, 6, 21.94, -16.32, 0.94004, 1, 57, 37, -19.27, 1, 1, 6, 32.75999, 14.89, 1, 2, 2, 31.52, 1.54, 0.468, 6, -4.12, 1.11, 0.53199, 2, 3, -36.13, 128.74, 1.1E-4, 4, 58.63, -6.53, 0.99988, 1, 3, 31.21, 7.42, 1, 1, 57, 6.55, 4.94999, 1, 3, 1, 40.25, 32.62, 0.73018, 3, -10.64, -3.85, 0.26962, 6, -84.83, 9.38, 1.8E-4, 2, 1, -52.52, 39.57, 0.42399, 4, -0.38, -0.04, 0.57599, 3, 1, 28.59, -32.06, 0.4151, 2, 23.16, 31.98, 0.19535, 6, -21.6, 27.4, 0.38953, 3, 1, -84.36, -45.92, 0.10306, 6, 40.58, -67.92, 0.5254, 19, 10.96, -5.87, 0.37152, 5, 1, -45.81, 2.06, 0.90915, 4, -34.9, 16.11, 0.04371, 57, -136.93, -43.82, 0, 2, -0.46, -46.39, 0.04497, 6, -19.46999, -54.44, 0.00215, 3, 1, -54.85, -33.97, 0.03193, 2, 36.46, -50.42, 0.01639, 6, 16.86, -46.68, 0.95165, 1, 1, 6.02, 47.78, 1, 2, 57, 91.17, 10.5, 0.91199, 58, 27.7, 16.45999, 0.088, 1, 4, 84, 0.64, 1, 1, 6, 53.65, -11.25, 1, 1, 1, 32.37, -0.52999, 1, 1, 57, 49.15, 13.5, 1, 1, 1, -21.79, 28.41, 1, 2, 1, -23.76, 58.6, 0.89677, 4, -1.41, -34.50999, 0.10322, 1, 57, 73.51, -17.7, 1, 1, 6, 36.05, -28.3, 1, 4, 1, 16.92, -58.8, 0.0867, 57, -208.22, -94.43, 0, 2, 51.25, 24.07, 0.04854, 6, 7.54, 28.7, 0.86475, 3, 1, -63.89, 71.66, 5.3E-4, 3, -41.66999, 102.95, 0.01015, 4, 32.39, -9.25, 0.9893, 2, 1, -41.81, 71.16, 0.017, 4, 19.25, -27, 0.98299, 1, 1, -3.56, 22.78, 1, 1, 58, -0.09, -2.88, 1, 1, 58, 43.03, 2.03, 1 ], + "vertices": [ 1, 3, 77.69, -3.35, 1, 1, 3, 70.93, 17.96999, 1, 5, 1, 5.71, -100.8, 0.0145, 16, -247.48, -75.75, 0, 2, 94.39, 18.70999, 0.00385, 3, 50.19, 37.13, 0.98163, 4, -80.4, 46.88, 0, 5, 1, 23.74, -86.28, 0.08471, 16, -236.49, -96.13, 0, 2, 77.54, 34.58, 0.03571, 3, 29.21, 46.92, 0.87956, 4, -98.09, 31.93, 0, 5, 1, 41.53, -64.15, 0.26317, 16, -217.96, -117.66, 0, 2, 53.18, 49.18, 0.0809, 3, 1.5, 53.15, 0.65592, 4, -115.36, 9.38, 0, 5, 1, 49.42, -39.15, 0.58274, 16, -194.81, -129.97, 0, 2, 27.34, 53.58, 0.07701, 3, -24.41, 49.22, 0.34024, 4, -122.66, -15.8, 0, 3, 1, 50.65, -14.87, 0.84586, 2, 3.12, 51.48, 0.04506, 3, -46.76, 39.63, 0.10906, 2, 1, 50.08, 6.57, 0.99949, 3, -65.76, 29.68, 5.0E-4, 4, 1, 61.25, 19.02, 0.41233, 15, -8.97, -28.82, 0.58677, 2, -31.9, 57.35, 0, 3, -81.86, 34.22, 8.8E-4, 4, 1, 72.58999, 34.89, 0.07954, 15, 10.52, -28.41, 0.92009, 2, -49.17, 66.42, 0, 3, -101.1, 37.41999, 3.6E-4, 4, 1, 91.79, 71.97, 0.02573, 15, 51.72, -21.6, 0.97336, 2, -88.53, 80.37, 1.0E-5, 3, -142.86, 38.32, 8.9E-4, 4, 1, 96.09, 100.61, 1.0E-5, 15, 77.24, -7.91, 0.99997, 2, -117.49, 80.71, 0, 3, -170.47, 29.57, 1.0E-5, 3, 1, 76.54, 109.4, 1.0E-5, 15, 72.58999, 13, 0.99998, 2, -123.53, 60.14, 0, 2, 1, 49.25, 106.61, 0.14582, 15, 54.02, 33.2, 0.85417, 2, 1, 32.59999, 89.81, 0.31082, 15, 30.6, 36.49, 0.68917, 2, 1, 18.71999, 82.25, 0.83943, 15, 16.24, 43.09, 0.16056, 3, 1, -5.11, 77.22, 0.91391, 15, -2.05, 59.18, 0.048, 14, 3.04, -60.47, 0.03808, 2, 1, -27.35, 87.44, 0.75787, 14, 24.21, -48.2, 0.24212, 3, 1, -41.54, 98.53, 0.16242, 14, 41.45, -43, 0.83708, 16, -42.83, -65.61, 4.8E-4, 4, 1, -54.05, 106.96, 0.00263, 15, -7.5, 116.18, 0.02515, 14, 55.55, -37.64, 0.92652, 16, -32.27, -54.84, 0.04568, 4, 1, -74.35, 125.51, 1.4E-4, 15, -4.78, 143.55, 0.00627, 14, 82.41, -31.75, 0.81754, 16, -10.32, -38.25999, 0.17603, 3, 15, -1.4, 153.1, 2.5E-4, 14, 92.54, -32.00999, 0.60675, 16, -1.01, -34.25999, 0.39299, 2, 14, 100.62, -37.86, 0.33847, 16, 8.76, -36.18999, 0.66152, 2, 14, 117.02, -49.3, 0.13549, 16, 28.45, -39.74, 0.8645, 1, 16, 55.59, -40.45, 1, 2, 16, 83.33, -36.33, 0.92669, 17, -10.6, -11.59, 0.07329, 2, 16, 92.76, -30.93, 0.09793, 17, -0.08, -14.31, 0.90206, 1, 17, 16.06, -16.11, 1, 1, 17, 44.1, -11.17, 1, 1, 17, 62.7, -2.95, 1, 3, 14, 222.66, -25.15, 2.0E-5, 16, 114.34, 26.37, 0.13331, 17, 55.36, 11.64, 0.86666, 3, 14, 216.44, -20.19, 4.5E-4, 16, 106.6, 28.28, 0.42261, 17, 48.75, 24.08, 0.57693, 3, 14, 207.4, -10.55, 8.1E-4, 16, 94.36, 33.25999, 0.66584, 17, 45.88, 30.52, 0.33333, 3, 14, 195, -0.84, 0.00298, 16, 79.03, 36.88, 0.8859, 17, 37.43, 43.82, 0.11111, 2, 14, 163.25, 18.20999, 0.00655, 16, 42.22, 40.93, 0.99344, 2, 14, 137.03, 27.28, 0.05801, 16, 14.6, 38.21, 0.94198, 2, 14, 121.08, 29.34, 0.16158, 16, -0.74, 33.41, 0.83841, 2, 14, 112.15, 29.87, 0.33221, 16, -9.07, 30.16, 0.66778, 2, 14, 103.46, 30.64, 0.60759, 16, -17.29, 27.22, 0.39239, 2, 14, 72.6, 30.93, 0.83736, 16, -45.45, 14.59, 0.16263, 2, 14, 34.88, 26.01, 0.9936, 16, -77.67, -5.65, 0.00639, 3, 1, -81.94, 40.50999, 0.30239, 14, 17.34, 23.46, 0.6976, 16, -92.53, -15.3, 0, 3, 1, -74.65, 29.42, 0.60736, 14, 4.08, 23.89, 0.39263, 16, -104.76, -20.45, 0, 4, 1, -66.51, 14.76, 0.78491, 14, -12.58, 25.69, 0.21277, 16, -120.66, -25.78, 0, 3, -21.76, -78.62, 0.0023, 4, 1, -64.78, 1.05999, 0.77424, 14, -24.77, 32.16999, 0.13585, 16, -134.45, -24.99, 0, 3, -10.22999, -71.03, 0.08989, 4, 1, -66.04, -8.97, 0.68679, 16, -144.09, -21.92, 0, 3, -0.66, -67.74, 0.31202, 4, -6.48, -43.26, 0.00116, 4, 1, -73.83999, -15.03, 0.38179, 16, -148.63, -13.14, 0, 3, 8.22, -72.07, 0.49072, 4, 1.16999, -37.00999, 0.12748, 4, 1, -83.9, -20.07, 0.19577, 16, -151.75, -2.33, 0, 3, 17.17, -78.89, 0.55657, 4, 11.1, -31.74, 0.24764, 3, 1, -95.71, -27.6, 0.10164, 3, 29.13, -86.18, 0.54542, 4, 22.74, -23.93, 0.35293, 3, 1, -107.32, -47.56, 0.07677, 3, 52.17, -87.81, 0.57428, 4, 33.88, -3.69, 0.34892, 3, 1, -106.31, -68.39, 0.03831, 3, 70.42, -77.73, 0.62598, 4, 32.38, 17.1, 0.3357, 3, 1, -89.67, -86.04, 0.01311, 3, 78.94999, -55.01, 0.76821, 4, 15.32, 34.36, 0.21866, 1, 3, 84.45, -24.67, 1, 2, 1, 30.77, 65.08, 0.7233, 15, 9.68999, 23.15, 0.27669, 1, 1, 12.65, 15.26, 1, 3, 16, -165.71, -55.73, 0, 2, 23.09, -26.03, 0.72213, 3, -3.47, -27.71, 0.27785, 1, 1, 11.95, -10.77, 1, 1, 14, 62.53, 12.76, 1, 1, 3, 51.75, -38.97, 1, 3, 1, -11.15, -0.35, 0.71938, 14, -56.85, -10.81, 0.08552, 2, -2.81, -11.72, 0.19508, 3, 16, -192.92, -49.7, 0, 2, 50.81, -23.18, 0.05995, 3, 21.94, -16.32, 0.94004, 1, 16, 37, -19.27, 1, 1, 3, 32.75999, 14.89, 1, 2, 2, 31.52, 1.54, 0.468, 3, -4.12, 1.11, 0.53199, 2, 15, -36.13, 128.74, 1.1E-4, 14, 58.63, -6.53, 0.99988, 1, 15, 31.21, 7.42, 1, 1, 16, 6.55, 4.94999, 1, 3, 1, 40.25, 32.62, 0.73018, 15, -10.64, -3.85, 0.26962, 3, -84.83, 9.38, 1.8E-4, 2, 1, -52.52, 39.57, 0.42399, 14, -0.38, -0.04, 0.57599, 3, 1, 28.59, -32.06, 0.4151, 2, 23.16, 31.98, 0.19535, 3, -21.6, 27.4, 0.38953, 3, 1, -84.36, -45.92, 0.10306, 3, 40.58, -67.92, 0.5254, 4, 10.96, -5.87, 0.37152, 5, 1, -45.81, 2.06, 0.90915, 14, -34.9, 16.11, 0.04371, 16, -136.93, -43.82, 0, 2, -0.46, -46.39, 0.04497, 3, -19.46999, -54.44, 0.00215, 3, 1, -54.85, -33.97, 0.03193, 2, 36.46, -50.42, 0.01639, 3, 16.86, -46.68, 0.95165, 1, 1, 6.02, 47.78, 1, 2, 16, 91.17, 10.5, 0.91199, 17, 27.7, 16.45999, 0.088, 1, 14, 84, 0.64, 1, 1, 3, 53.65, -11.25, 1, 1, 1, 32.37, -0.52999, 1, 1, 16, 49.15, 13.5, 1, 1, 1, -21.79, 28.41, 1, 2, 1, -23.76, 58.6, 0.89677, 14, -1.41, -34.50999, 0.10322, 1, 16, 73.51, -17.7, 1, 1, 3, 36.05, -28.3, 1, 4, 1, 16.92, -58.8, 0.0867, 16, -208.22, -94.43, 0, 2, 51.25, 24.07, 0.04854, 3, 7.54, 28.7, 0.86475, 3, 1, -63.89, 71.66, 5.3E-4, 15, -41.66999, 102.95, 0.01015, 14, 32.39, -9.25, 0.9893, 2, 1, -41.81, 71.16, 0.017, 14, 19.25, -27, 0.98299, 1, 1, -3.56, 22.78, 1, 1, 17, -0.09, -2.88, 1, 1, 17, 43.03, 2.03, 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, @@ -219,10 +227,10 @@ }, "hairL2": { "hairL2": { - "type": "weightedmesh", + "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": [ 3, 2, 8, 3, 8, 7, 4, 3, 7, 5, 4, 7, 6, 5, 7, 0, 12, 11, 0, 11, 10, 0, 10, 9, 1, 0, 9, 2, 1, 9, 2, 9, 8 ], - "vertices": [ 2, 49, 3.3, -16.42, 0.88765, 50, -37.53, -4.84, 0.11234, 2, 49, 17.99, -18.75, 0.67842, 50, -24.2, -11.44, 0.32157, 2, 49, 38.64, -16.93, 0.38403, 50, -3.94, -15.85, 0.61596, 2, 49, 55.47, -9.35999, 0.14944, 50, 14.38, -13.64, 0.85055, 2, 49, 69.74, 2.45, 0.02565, 50, 31.52, -6.6, 0.97434, 1, 50, 45.83, -0.28, 1, 2, 49, 78.86, 18.5, 0.03594, 50, 45, 6, 0.96405, 2, 49, 62.84, 14.07, 0.18299, 50, 28.38, 6.54, 0.817, 2, 49, 43.28, 11.5, 0.44116, 50, 8.96, 9.91, 0.55883, 2, 49, 23.66, 14.09, 0.73855, 50, -9, 18.21999, 0.26144, 2, 49, 1.61, 16.37999, 0.92483, 50, -29.36, 26.97, 0.07515, 2, 49, -8.74, 14.37, 0.99968, 50, -39.86, 28.15, 3.1E-4, 2, 49, -19.25, -1.37, 0.98639, 50, -54.58, 16.24, 0.0136 ], + "vertices": [ 2, 19, 3.3, -16.42, 0.88765, 20, -37.53, -4.84, 0.11234, 2, 19, 17.99, -18.75, 0.67842, 20, -24.2, -11.44, 0.32157, 2, 19, 38.64, -16.93, 0.38403, 20, -3.94, -15.85, 0.61596, 2, 19, 55.47, -9.35999, 0.14944, 20, 14.38, -13.64, 0.85055, 2, 19, 69.74, 2.45, 0.02565, 20, 31.52, -6.6, 0.97434, 1, 20, 45.83, -0.28, 1, 2, 19, 78.86, 18.5, 0.03594, 20, 45, 6, 0.96405, 2, 19, 62.84, 14.07, 0.18299, 20, 28.38, 6.54, 0.817, 2, 19, 43.28, 11.5, 0.44116, 20, 8.96, 9.91, 0.55883, 2, 19, 23.66, 14.09, 0.73855, 20, -9, 18.21999, 0.26144, 2, 19, 1.61, 16.37999, 0.92483, 20, -29.36, 26.97, 0.07515, 2, 19, -8.74, 14.37, 0.99968, 20, -39.86, 28.15, 3.1E-4, 2, 19, -19.25, -1.37, 0.98639, 20, -54.58, 16.24, 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, @@ -231,10 +239,10 @@ }, "hairM": { "hairM": { - "type": "weightedmesh", + "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.86818, 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": [ 8, 21, 11, 7, 21, 8, 9, 8, 11, 9, 11, 10, 3, 2, 22, 6, 22, 18, 7, 6, 18, 5, 4, 3, 22, 5, 3, 6, 5, 22, 17, 16, 15, 19, 0, 16, 19, 16, 17, 1, 0, 19, 14, 17, 15, 13, 17, 14, 13, 20, 17, 20, 13, 12, 18, 19, 17, 18, 17, 20, 21, 18, 20, 21, 20, 12, 2, 19, 18, 19, 2, 1, 22, 2, 18, 21, 12, 11, 7, 18, 21 ], - "vertices": [ 1, 46, -2.06, -32.41999, 1, 1, 46, 14.88, -38.04, 1, 2, 46, 32.34, -41.09, 0.66666, 47, 16.65, -10.85, 0.33333, 2, 46, 58.19, -39.83, 0.33453, 47, 42.21, -6.71, 0.66546, 3, 46, 67.53, -35.46, 0.16544, 47, 51, -1.33, 0.82718, 48, 13.17, -79.12, 0.00736, 3, 46, 67.08, -29.52, 0.14636, 47, 49.89, 4.51, 0.76915, 48, 15.99, -73.87, 0.08447, 3, 46, 58.82, -5.34, 0.23615, 47, 38.98, 27.62, 0.49129, 48, 22.04, -49.05, 0.27254, 3, 46, 57.45, 8.13, 0.22896, 47, 36.12, 40.87, 0.35342, 48, 28.15, -36.95, 0.4176, 3, 46, 56.14, 21.09, 0.22206, 47, 33.37, 53.6, 0.22094, 48, 34.02, -25.33, 0.55699, 3, 46, 57.77, 48.31, 0.13017, 47, 31.95, 80.83, 0.05675, 48, 50.05, -3.27, 0.81307, 3, 46, 58.99, 56.5, 0.1503, 47, 32.25, 89.1, 0.00247, 48, 55.49, 2.97, 0.84722, 2, 46, 43.16, 50.19, 0.33347, 48, 38.75999, 6.18, 0.66652, 2, 46, 27.5, 41.66999, 0.66666, 48, 20.96999, 7.43, 0.33333, 1, 46, 10.85, 40.18999, 1, 1, 46, -7.66, 36.04, 1, 1, 46, -13.82, 19.73, 1, 1, 46, -11.1, -16.57, 1, 1, 46, 6.05, 5.26, 1, 3, 46, 35.06, -8.43999, 0.61317, 47, 15.72, 21.89, 0.38471, 48, 0.36, -38.87, 0.0021, 1, 46, 12.53, -21.88, 1, 1, 46, 21.32, 22.64, 1, 3, 46, 38.88, 15.18, 0.59023, 47, 16.87999, 45.8, 0.17654, 48, 16.29999, -21.01, 0.23321, 3, 46, 46.57, -25.23, 0.47519, 47, 29.03, 6.48, 0.52382, 48, 1.01, -59.22, 9.8E-4 ], + "vertices": [ 1, 21, -2.06, -32.41999, 1, 1, 21, 14.88, -38.04, 1, 2, 21, 32.34, -41.09, 0.66666, 23, 16.65, -10.85, 0.33333, 2, 21, 58.19, -39.83, 0.33453, 23, 42.21, -6.71, 0.66546, 3, 21, 67.53, -35.46, 0.16544, 23, 51, -1.33, 0.82718, 22, 13.17, -79.12, 0.00736, 3, 21, 67.08, -29.52, 0.14636, 23, 49.89, 4.51, 0.76915, 22, 15.99, -73.87, 0.08447, 3, 21, 58.82, -5.34, 0.23615, 23, 38.98, 27.62, 0.49129, 22, 22.04, -49.05, 0.27254, 3, 21, 57.45, 8.13, 0.22896, 23, 36.12, 40.87, 0.35342, 22, 28.15, -36.95, 0.4176, 3, 21, 56.14, 21.09, 0.22206, 23, 33.37, 53.6, 0.22094, 22, 34.02, -25.33, 0.55699, 3, 21, 57.77, 48.31, 0.13017, 23, 31.95, 80.83, 0.05675, 22, 50.05, -3.27, 0.81307, 3, 21, 58.99, 56.5, 0.1503, 23, 32.25, 89.1, 0.00247, 22, 55.49, 2.97, 0.84722, 2, 21, 43.16, 50.19, 0.33347, 22, 38.75999, 6.18, 0.66652, 2, 21, 27.5, 41.66999, 0.66666, 22, 20.96999, 7.43, 0.33333, 1, 21, 10.85, 40.18999, 1, 1, 21, -7.66, 36.04, 1, 1, 21, -13.82, 19.73, 1, 1, 21, -11.1, -16.57, 1, 1, 21, 6.05, 5.26, 1, 3, 21, 35.06, -8.43999, 0.61317, 23, 15.72, 21.89, 0.38471, 22, 0.36, -38.87, 0.0021, 1, 21, 12.53, -21.88, 1, 1, 21, 21.32, 22.64, 1, 3, 21, 38.88, 15.18, 0.59023, 23, 16.87999, 45.8, 0.17654, 22, 16.29999, -21.01, 0.23321, 3, 21, 46.57, -25.23, 0.47519, 23, 29.03, 6.48, 0.52382, 22, 1.01, -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, @@ -279,10 +287,10 @@ }, "hairR2": { "hairR2": { - "type": "weightedmesh", + "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": [ 21, 3, 2, 8, 5, 9, 9, 4, 10, 9, 5, 4, 11, 10, 4, 8, 7, 5, 11, 4, 3, 7, 6, 5, 11, 3, 21, 21, 2, 20, 17, 16, 14, 16, 15, 14, 17, 14, 13, 13, 12, 17, 12, 21, 17, 18, 20, 1, 1, 0, 18, 21, 20, 17, 18, 17, 20, 20, 2, 1, 0, 19, 18, 12, 11, 21 ], - "vertices": [ 1, 43, -2.69, -5.03, 1, 2, 43, 11.45, -12.85, 0.97293, 44, -22.59, -25.83, 0.02706, 2, 43, 33.79, -19.14, 0.26299, 44, -3.55, -12.55, 0.737, 1, 44, 8.47999, -7.18, 1, 1, 44, 24.96, -5.77, 1, 1, 44, 37.43, -7.71, 1, 1, 44, 51.97, -11.39, 1, 1, 44, 53.68, -1.71, 1, 1, 44, 39.72, 3.77, 1, 1, 44, 30.55, 7.25, 1, 1, 44, 19.9, 8.16, 1, 2, 43, 56.79, -17.09, 0.18536, 44, 9.47, 6.51, 0.81463, 1, 43, 59.2, -16.03, 1, 1, 43, 75.47, -12.31, 1, 2, 43, 91.91, -4.04, 0.99835, 44, 21.69, 41.93999, 0.00164, 1, 43, 105.23, 8.51, 1, 1, 43, 99.55, 17.14, 1, 1, 43, 50.22, 4.38, 1, 2, 43, 4.01, 11.48, 0.99999, 44, -46.12, -16.11, 0, 2, 43, -8.25, 3.41, 1, 44, -47.68, -30.72, 0, 1, 43, 37.33, -10.74, 1, 1, 43, 49.07, -13.58, 1 ], + "vertices": [ 1, 25, -2.69, -5.03, 1, 2, 25, 11.45, -12.85, 0.97293, 26, -22.59, -25.83, 0.02706, 2, 25, 33.79, -19.14, 0.26299, 26, -3.55, -12.55, 0.737, 1, 26, 8.47999, -7.18, 1, 1, 26, 24.96, -5.77, 1, 1, 26, 37.43, -7.71, 1, 1, 26, 51.97, -11.39, 1, 1, 26, 53.68, -1.71, 1, 1, 26, 39.72, 3.77, 1, 1, 26, 30.55, 7.25, 1, 1, 26, 19.9, 8.16, 1, 2, 25, 56.79, -17.09, 0.18536, 26, 9.47, 6.51, 0.81463, 1, 25, 59.2, -16.03, 1, 1, 25, 75.47, -12.31, 1, 2, 25, 91.91, -4.04, 0.99835, 26, 21.69, 41.93999, 0.00164, 1, 25, 105.23, 8.51, 1, 1, 25, 99.55, 17.14, 1, 1, 25, 50.22, 4.38, 1, 2, 25, 4.01, 11.48, 0.99999, 26, -46.12, -16.11, 0, 2, 25, -8.25, 3.41, 1, 26, -47.68, -30.72, 0, 1, 25, 37.33, -10.74, 1, 1, 25, 49.07, -13.58, 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, @@ -477,22 +485,22 @@ }, "pony1": { "pony1": { - "type": "weightedmesh", - "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.63699, 0.96711, 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 ], - "triangles": [ 22, 15, 14, 12, 9, 22, 22, 14, 13, 10, 9, 11, 12, 22, 13, 9, 12, 11, 22, 9, 8, 23, 24, 3, 22, 8, 7, 24, 4, 3, 24, 22, 7, 7, 6, 24, 6, 5, 24, 5, 4, 24, 24, 23, 22, 15, 23, 16, 15, 22, 23, 3, 2, 23, 2, 18, 23, 23, 17, 16, 23, 18, 17, 2, 1, 18, 1, 0, 20, 1, 19, 18, 1, 20, 19, 20, 0, 21 ], - "vertices": [ 1, 34, -2.75, -10.57, 1, 2, 34, 15.34, -13.42, 0.858, 35, -10.94, -15.6, 0.14199, 2, 34, 31.32, -17.62, 0.18389, 35, 5.57, -15.62, 0.8161, 2, 35, 23.6, -17.94, 0.66187, 37, 0.72, -10.56, 0.33812, 3, 34, 55.12, -29.73, 0.00875, 35, 31.67, -21.29, 0.48806, 37, 9.43999, -9.97, 0.50317, 3, 34, 61.82, -34.82, 0.00354, 35, 39.43999, -24.52, 0.32978, 37, 17.84, -9.39999, 0.66666, 3, 34, 67.4, -39.82, 0.00192, 35, 46.11, -27.94, 0.30605, 37, 25.33, -9.49, 0.69202, 1, 37, 34.25999, -9.6, 1, 1, 37, 44.51, -11.09, 1, 2, 37, 41.34999, 11.18, 0.45454, 36, 36.79, -21.5, 0.54544, 1, 36, 45.63, 3.18, 1, 1, 36, 37.83, 6.68, 1, 3, 34, 94.41, -4.04, 0.00256, 35, 63.16, 13.51, 0.27216, 36, 28.77, 8.2, 0.72526, 3, 34, 85.29, 0.62, 0.00542, 35, 53.15, 15.72, 0.3279, 36, 18.65, 9.89999, 0.66666, 3, 34, 76.98, 3.9, 0.01281, 35, 44.28, 16.78, 0.47168, 36, 9.74, 10.5, 0.51549, 2, 35, 33.59, 18.04999, 0.65926, 36, -0.99, 11.23, 0.34073, 2, 35, 21.3, 16.79, 0.8289, 36, -13.2, 9.33, 0.17109, 2, 34, 42.78, 11.59, 0.18399, 35, 9.24, 15.54, 0.816, 1, 34, 26.02, 12.35, 1, 2, 34, 4.55, 10.92, 0.99582, 35, -27.56, 5.19999, 0.00417, 2, 34, -4.71999, 8.21, 0.98425, 35, -35.84999, 0.22, 0.01574, 2, 34, -12.93, -0.96, 0.99487, 35, -41.46, -10.72, 0.00512, 2, 37, 17.48, 14.41, 0.52799, 36, 16.19, -9.01, 0.472, 3, 35, 29.09, 0.74, 0.73333, 37, -2.68, 8.60999, 0.14666, 36, -4.6, -6.28, 0.12, 1, 37, 12.87, 0.19, 1 ], - "hull": 22, - "edges": [ 0, 2, 2, 4, 4, 6, 14, 16, 16, 18, 18, 20, 20, 22, 34, 36, 36, 38, 38, 40, 40, 42, 0, 42, 44, 46, 16, 44, 26, 28, 28, 30, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 30, 32, 32, 34 ], + "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": [ 10, 29, 11, 29, 30, 25, 25, 17, 16, 28, 25, 16, 28, 16, 15, 28, 15, 14, 28, 14, 13, 12, 25, 28, 12, 28, 13, 30, 29, 10, 11, 29, 25, 12, 11, 25, 27, 4, 3, 5, 4, 27, 30, 27, 25, 31, 5, 27, 30, 31, 27, 6, 5, 31, 7, 6, 31, 30, 10, 31, 9, 7, 31, 10, 9, 31, 8, 7, 9, 27, 26, 25, 26, 21, 20, 26, 20, 19, 2, 21, 26, 3, 2, 26, 26, 27, 3, 18, 25, 26, 18, 26, 19, 25, 18, 17, 23, 0, 24, 1, 23, 22, 1, 22, 21, 1, 0, 23, 2, 1, 21 ], + "vertices": [ 1, 42, -2.75, -10.57, 1, 1, 42, 15.34, -13.42, 1, 2, 42, 31.32, -17.62, 0.18389, 43, 5.57, -15.62, 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.30664, 44, 25.33, -9.49, 0.69335, 1, 44, 34.25999, -9.6, 1, 1, 44, 44.51, -11.09, 1, 1, 44, 43.26, -2.31, 1, 3, 43, 66.18, -27, 0.00552, 44, 42.89, 0.29, 0.30346, 45, 33.87, -32.09, 0.691, 2, 44, 41.34999, 11.18, 0.22585, 45, 36.79, -21.5, 0.77414, 2, 44, 40.41, 25.27, 0.09713, 45, 41.55, -8.2, 0.90286, 1, 45, 45.63, 3.18, 1, 1, 45, 37.83, 6.68, 1, 2, 43, 63.16, 13.51, 0.27286, 45, 28.77, 8.2, 0.72713, 2, 43, 53.15, 15.72, 0.32969, 45, 18.65, 9.89999, 0.6703, 2, 43, 44.28, 16.78, 0.4778, 45, 9.74, 10.5, 0.52218, 2, 43, 33.59, 18.04999, 0.65926, 45, -0.99, 11.23, 0.34073, 2, 43, 21.3, 16.79, 0.8289, 45, -13.2, 9.33, 0.17109, 2, 42, 42.78, 11.59, 0.18399, 43, 9.24, 15.54, 0.816, 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.96, 1, 3, 43, 49.72, -3.04, 0.21699, 44, 17.48, 14.41, 0.57976, 45, 16.19, -9.01, 0.20323, 1, 43, 29.09, 0.74, 1, 3, 43, 39.27, -13.71, 0.04697, 44, 12.87, 0.19, 0.83093, 45, 6.3, -20.2, 0.12208, 2, 44, 30.11, 28.24, 0.06201, 45, 33.3, -1.36, 0.93798, 2, 44, 30.68, 6.95, 0.24265, 45, 25.33, -21.11, 0.75734, 3, 43, 50.43, -17.39, 0.00887, 44, 24.5, 1.87, 0.39099, 45, 17.64, -23.3, 0.60012, 3, 43, 50.19, -19.71999, 0.0276, 44, 25.33, -0.31, 0.91782, 45, 17.52, -25.64, 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": "weightedmesh", + "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": [ 32, 22, 21, 15, 33, 18, 16, 15, 17, 18, 33, 19, 15, 18, 17, 33, 32, 20, 33, 20, 19, 20, 32, 21, 11, 10, 32, 13, 33, 14, 14, 33, 15, 33, 13, 32, 13, 12, 32, 12, 11, 32, 4, 28, 27, 4, 3, 28, 3, 29, 28, 3, 2, 29, 2, 30, 29, 2, 1, 30, 1, 31, 30, 1, 0, 31, 10, 9, 32, 32, 9, 22, 9, 23, 22, 23, 8, 24, 23, 9, 8, 8, 7, 24, 7, 25, 24, 7, 6, 25, 6, 26, 25, 6, 5, 26, 5, 27, 26, 5, 4, 27 ], - "vertices": [ 1, 30, -8.14, 1.04999, 1, 1, 30, 0.99, -7.18, 1, 1, 30, 11.07, -8.10999, 1, 2, 31, -9.35, -8, 0.20667, 30, 16.61, -8.63, 0.79332, 2, 31, -3.74, -8.72999, 0.41715, 30, 22.24, -9.14999, 0.58284, 2, 31, 3.73, -9.59, 0.72759, 30, 29.75, -9.72999, 0.2724, 1, 31, 10.3, -10.34, 1, 3, 31, 15.58, -10.95, 0.94603, 33, -13.96, -12.12, 0.0429, 32, -14.81, -8.14, 0.01105, 3, 31, 19.89, -11.44, 0.85612, 33, -9.63, -11.92, 0.10558, 32, -10.78, -9.76, 0.03829, 3, 31, 24.12, -11.93, 0.71142, 33, -5.38, -11.72, 0.19561, 32, -6.84, -11.35, 0.09295, 3, 31, 29.56, -12.26, 0.5223, 33, 0.04, -11.18, 0.4394, 32, -1.67, -13.12, 0.03829, 3, 31, 34.33, -12.55, 0.31189, 33, 4.8, -10.71, 0.67703, 32, 2.84, -14.67, 0.01105, 3, 31, 40.95, -12.96, 0.13585, 33, 11.4, -10.05, 0.86243, 32, 9.10999, -16.81, 0.0017, 1, 33, 16.58, -9.54, 1, 1, 33, 35.93999, -5.53, 1, 2, 33, 39.31, 6.28, 0.50399, 32, 41.29, -13.55, 0.496, 1, 32, 51.93, -0.54, 1, 1, 32, 48.28, 5.64, 1, 1, 32, 30.14, 8.05, 1, 3, 31, 47.84, 14.74, 0.10666, 33, 13.77, 18.4, 6.6E-4, 32, 23.1, 8.08, 0.89267, 3, 31, 42.35, 13.25, 0.27184, 33, 8.59, 16.04999, 0.00626, 32, 17.42, 8.1, 0.72188, 3, 31, 35.95, 11.52, 0.49123, 33, 2.55, 13.32, 0.02539, 32, 10.78, 8.12, 0.48336, 3, 31, 30.07, 9.92, 0.69316, 33, -2.99, 10.8, 0.06975, 32, 4.69, 8.14, 0.23708, 3, 31, 25.62, 9.74, 0.82519, 33, -7.36, 9.91, 0.02539, 32, 0.35, 9.14, 0.1494, 4, 31, 20.26, 9.52, 0.89665, 30, 45.57, 9.96, 0.01837, 33, -12.62, 8.84, 0.00626, 32, -4.87, 10.35, 0.07869, 4, 31, 14.14, 9.28, 0.89545, 30, 39.47, 9.49, 0.0735, 33, -18.62, 7.62, 6.6E-4, 32, -10.83, 11.74, 0.03036, 2, 31, 8.09, 9.03, 0.8346, 30, 33.43, 9.03, 0.16539, 2, 31, 1.30999, 8.76, 0.64909, 30, 26.66, 8.51, 0.3509, 2, 31, -3.32, 9.47, 0.3443, 30, 22, 9.06, 0.65569, 2, 31, -8.04, 10.2, 0.0337, 30, 17.26, 9.60999, 0.96629, 1, 30, 6.68, 10.86, 1, 1, 30, -0.33, 10.74, 1, 2, 33, 6.04, 1.81, 0.51199, 32, 9.17, -3.79, 0.488, 3, 31, 50.42, 2.02, 0.00322, 33, 18.35, 6.25, 0.48683, 32, 22.22, -4.87, 0.50994 ], + "vertices": [ 1, 46, -8.14, 1.04999, 1, 1, 46, 0.99, -7.18, 1, 1, 46, 11.07, -8.10999, 1, 2, 47, -9.35, -8, 0.20667, 46, 16.61, -8.63, 0.79332, 2, 47, -3.74, -8.72999, 0.41715, 46, 22.24, -9.14999, 0.58284, 2, 47, 3.73, -9.59, 0.72759, 46, 29.75, -9.72999, 0.2724, 1, 47, 10.3, -10.34, 1, 3, 47, 15.58, -10.95, 0.94603, 48, -13.96, -12.12, 0.0429, 49, -14.81, -8.14, 0.01105, 3, 47, 19.89, -11.44, 0.85612, 48, -9.63, -11.92, 0.10558, 49, -10.78, -9.76, 0.03829, 3, 47, 24.12, -11.93, 0.71142, 48, -5.38, -11.72, 0.19561, 49, -6.84, -11.35, 0.09295, 3, 47, 29.56, -12.26, 0.5223, 48, 0.04, -11.18, 0.4394, 49, -1.67, -13.12, 0.03829, 3, 47, 34.33, -12.55, 0.31189, 48, 4.8, -10.71, 0.67703, 49, 2.84, -14.67, 0.01105, 3, 47, 40.95, -12.96, 0.13585, 48, 11.4, -10.05, 0.86243, 49, 9.10999, -16.81, 0.0017, 1, 48, 16.58, -9.54, 1, 1, 48, 35.93999, -5.53, 1, 2, 48, 39.31, 6.28, 0.50399, 49, 41.29, -13.55, 0.496, 1, 49, 51.93, -0.54, 1, 1, 49, 48.28, 5.64, 1, 1, 49, 30.14, 8.05, 1, 3, 47, 47.84, 14.74, 0.10666, 48, 13.77, 18.4, 6.6E-4, 49, 23.1, 8.08, 0.89267, 3, 47, 42.35, 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.55, 13.32, 0.02539, 49, 10.78, 8.12, 0.48336, 3, 47, 30.07, 9.92, 0.69316, 48, -2.99, 10.8, 0.06975, 49, 4.69, 8.14, 0.23708, 3, 47, 25.62, 9.74, 0.82519, 48, -7.36, 9.91, 0.02539, 49, 0.35, 9.14, 0.1494, 4, 47, 20.26, 9.52, 0.89665, 46, 45.57, 9.96, 0.01837, 48, -12.62, 8.84, 0.00626, 49, -4.87, 10.35, 0.07869, 4, 47, 14.14, 9.28, 0.89545, 46, 39.47, 9.49, 0.0735, 48, -18.62, 7.62, 6.6E-4, 49, -10.83, 11.74, 0.03036, 2, 47, 8.09, 9.03, 0.8346, 46, 33.43, 9.03, 0.16539, 2, 47, 1.30999, 8.76, 0.64909, 46, 26.66, 8.51, 0.3509, 2, 47, -3.32, 9.47, 0.3443, 46, 22, 9.06, 0.65569, 2, 47, -8.04, 10.2, 0.0337, 46, 17.26, 9.60999, 0.96629, 1, 46, 6.68, 10.86, 1, 1, 46, -0.33, 10.74, 1, 2, 48, 6.04, 1.81, 0.51199, 49, 9.17, -3.79, 0.488, 3, 47, 50.42, 2.02, 0.00322, 48, 18.35, 6.25, 0.48683, 49, 22.22, -4.87, 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, @@ -538,10 +546,10 @@ }, "strap": { "strap": { - "type": "weightedmesh", + "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": [ 12, 2, 13, 13, 2, 1, 1, 0, 13, 13, 0, 14, 14, 0, 15, 3, 2, 12, 4, 3, 12, 7, 4, 11, 4, 12, 11, 7, 11, 8, 9, 8, 10, 6, 4, 7, 6, 5, 4, 8, 11, 10 ], - "vertices": [ 1, 7, -7.67, -10.93, 1, 1, 7, 8.72, -14, 1, 2, 2, 58.57, 20.03, 0.02146, 7, 33.82, -14.48, 0.97853, 3, 5, 69.28, 10.57, 0.00935, 2, 16.86, 21.19, 0.97687, 7, 72.49, 1.2, 0.01376, 1, 5, 18.94, 17.69, 1, 1, 5, 10.76, 26.12, 1, 1, 5, -6.86, 30.34, 1, 1, 5, -20.75, 18.75, 1, 1, 5, -29.42, -17.5, 1, 1, 5, -11.97, -32.18, 1, 1, 5, -3.65, -34.16999, 1, 2, 5, 18.71999, -17.06, 0.98247, 2, -26.33, -16.92, 0.01751, 1, 2, 21.34, -5.53, 1, 2, 2, 54.15, -7.27, 0.10496, 7, 26.89, 12.3, 0.89503, 1, 7, -1.35, 11.44, 1, 1, 7, -12.72, 8.46, 1 ], + "vertices": [ 1, 56, -7.67, -10.93, 1, 1, 56, 8.72, -14, 1, 2, 2, 58.57, 20.03, 0.02146, 56, 33.82, -14.48, 0.97853, 3, 55, 69.28, 10.57, 0.00935, 2, 16.86, 21.19, 0.97687, 56, 72.49, 1.2, 0.01376, 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.06, 0.98247, 2, -26.33, -16.92, 0.01751, 1, 2, 21.34, -5.53, 1, 2, 2, 54.15, -7.27, 0.10496, 56, 26.89, 12.3, 0.89503, 1, 56, -1.35, 11.44, 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, @@ -631,6 +639,21 @@ "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": { @@ -692,6 +715,21 @@ "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": { @@ -707,6 +745,21 @@ "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": { @@ -727,6 +780,27 @@ "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.4, + "x": 0, + "y": 3.77, + "curve": [ 0.25, 0, 0.442, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } ] }, "lumbar": { @@ -818,6 +892,21 @@ "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": { @@ -904,6 +993,21 @@ "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": { @@ -1169,6 +1273,11 @@ "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": { @@ -1281,6 +1390,11 @@ "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": { @@ -1408,6 +1522,11 @@ { "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": { @@ -1480,6 +1599,11 @@ "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.4, "x": -2.26, "y": -8.67 }, + { "time": 2, "x": 0, "y": 0 } ] }, "middleL": { @@ -1612,6 +1736,11 @@ "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": { @@ -1961,6 +2090,11 @@ "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": { @@ -1981,6 +2115,11 @@ "curve": [ 0.521, 0, 0.772, 0.48 ] }, { "time": 2, "angle": -0.17 } + ], + "shear": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 1.3, "x": 0, "y": 12.73 }, + { "time": 2, "x": 0, "y": 0 } ] }, "pony2 1": { @@ -2111,10 +2250,15 @@ "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 } ] } }, - "ffd": { + "deform": { "default": { "armL": { "armL": [ diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.png.meta b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.png.meta index de9e94891..442d8e367 100644 --- a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.png.meta +++ b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.png.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 33e128e17951b4a42b17608ff79ba5c5 -timeCreated: 1455501336 +timeCreated: 1467205225 licenseType: Free TextureImporter: fileIDToRecycleName: {} diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Atlas.asset b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Atlas.asset index 56f28290c..8546d47cc 100644 Binary files a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Material.mat b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Material.mat index 346c1951b..a5e03cbe5 100644 Binary files a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Material.mat and b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_SkeletonData.asset b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_SkeletonData.asset index a9640336f..085fa6f3a 100644 Binary files a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_SkeletonData.asset and b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_SkeletonData.asset differ diff --git a/spine-unity/Assets/Examples/Spine/dragon.prefab b/spine-unity/Assets/Examples/Spine/dragon.prefab index 788e55953..7c25866ff 100644 Binary files a/spine-unity/Assets/Examples/Spine/dragon.prefab and b/spine-unity/Assets/Examples/Spine/dragon.prefab differ diff --git a/spine-unity/Assets/Examples/Spine/eyes.prefab b/spine-unity/Assets/Examples/Spine/eyes.prefab index 94652a9d4..42ef7d0d9 100644 Binary files a/spine-unity/Assets/Examples/Spine/eyes.prefab and b/spine-unity/Assets/Examples/Spine/eyes.prefab differ diff --git a/spine-unity/Assets/Examples/Spine/goblins-mesh.prefab b/spine-unity/Assets/Examples/Spine/goblins-mesh.prefab deleted file mode 100644 index 64ed2d39d..000000000 Binary files a/spine-unity/Assets/Examples/Spine/goblins-mesh.prefab and /dev/null differ diff --git a/spine-unity/Assets/Examples/Spine/goblins-mesh.prefab.meta b/spine-unity/Assets/Examples/Spine/goblins-mesh.prefab.meta deleted file mode 100644 index 128faa129..000000000 --- a/spine-unity/Assets/Examples/Spine/goblins-mesh.prefab.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 700a0a62306a8954b8933538790e20a5 -NativeFormatImporter: - userData: diff --git a/spine-unity/Assets/Examples/Spine/raptor.prefab b/spine-unity/Assets/Examples/Spine/raptor.prefab index 8eda80ce4..bbab077da 100644 Binary files a/spine-unity/Assets/Examples/Spine/raptor.prefab and b/spine-unity/Assets/Examples/Spine/raptor.prefab differ diff --git a/spine-unity/Assets/Examples/Spine/spineboy.prefab b/spine-unity/Assets/Examples/Spine/spineboy.prefab index 02b6c3a39..da53e35e7 100644 Binary files a/spine-unity/Assets/Examples/Spine/spineboy.prefab and b/spine-unity/Assets/Examples/Spine/spineboy.prefab differ diff --git a/spine-unity/Assets/spine-unity/Asset Types/Editor/SkeletonDataAssetInspector.cs b/spine-unity/Assets/spine-unity/Asset Types/Editor/SkeletonDataAssetInspector.cs index b991889d6..b1d98e781 100644 --- a/spine-unity/Assets/spine-unity/Asset Types/Editor/SkeletonDataAssetInspector.cs +++ b/spine-unity/Assets/spine-unity/Asset Types/Editor/SkeletonDataAssetInspector.cs @@ -62,10 +62,6 @@ namespace Spine.Unity.Editor { duration = serializedObject.FindProperty("duration"); defaultMix = serializedObject.FindProperty("defaultMix"); - idlePlayButtonStyle = new GUIStyle(EditorStyles.toolbarButton); - activePlayButtonStyle = new GUIStyle(EditorStyles.toolbarButton); - activePlayButtonStyle.normal.textColor = Color.red; - #if SPINE_SKELETON_ANIMATOR controller = serializedObject.FindProperty("controller"); #endif @@ -99,6 +95,16 @@ namespace Spine.Unity.Editor { } override public void OnInspectorGUI () { + // Lazy initialization + { + // Accessing EditorStyles values in OnEnable during a recompile causes UnityEditor to throw null exceptions. (Unity 5.3.5) + idlePlayButtonStyle = idlePlayButtonStyle ?? new GUIStyle(EditorStyles.toolbarButton); + if (activePlayButtonStyle == null) { + activePlayButtonStyle = new GUIStyle(EditorStyles.toolbarButton); + activePlayButtonStyle.normal.textColor = Color.red; + } + } + serializedObject.Update(); EditorGUI.BeginChangeCheck(); @@ -115,7 +121,6 @@ namespace Spine.Unity.Editor { EditorGUILayout.PropertyField(skeletonJSON); EditorGUILayout.PropertyField(scale); EditorGUILayout.Space(); - if (EditorGUI.EndChangeCheck()) { if (serializedObject.ApplyModifiedProperties()) { if (m_previewUtility != null) { @@ -127,15 +132,16 @@ namespace Spine.Unity.Editor { return; } } - + + // Some code depends on the existence of m_skeletonAnimation instance. + // If m_skeletonAnimation is lazy-instantiated elsewhere, this can cause contents to change between Layout and Repaint events, causing GUILayout control count errors. + InitPreview(); if (m_skeletonData != null) { DrawAnimationStateInfo(); DrawAnimationList(); DrawSlotList(); DrawUnityTools(); - } else { - #if !SPINE_TK2D // Reimport Button using (new EditorGUI.DisabledGroupScope(skeletonJSON.objectReferenceValue == null)) { @@ -154,7 +160,7 @@ namespace Spine.Unity.Editor { } - if(!Application.isPlaying) + if (!Application.isPlaying) serializedObject.ApplyModifiedProperties(); } @@ -226,10 +232,6 @@ namespace Spine.Unity.Editor { using (new GUILayout.HorizontalScope()) { if (GUILayout.Button(new GUIContent("Bake All Skins", SpineEditorUtilities.Icons.unityIcon), GUILayout.Height(32), GUILayout.Width(150))) SkeletonBaker.BakeToPrefab(m_skeletonDataAsset, m_skeletonData.Skins, "", bakeAnimations, bakeIK, bakeEventOptions); - - // If m_skeletonAnimation is lazy-instantiated elsewhere, this can cause contents to change between Layout and Repaint events, causing scope errors. - if (m_skeletonData != null && m_skeletonAnimation == null) - InitPreview(); if (m_skeletonAnimation != null && m_skeletonAnimation.skeleton != null) { Skin bakeSkin = m_skeletonAnimation.skeleton.Skin; @@ -411,10 +413,11 @@ namespace Spine.Unity.Editor { icon = SpineEditorUtilities.Icons.mesh; else if (type == typeof(BoundingBoxAttachment)) icon = SpineEditorUtilities.Icons.boundingBox; - else if (type == typeof(WeightedMeshAttachment)) - icon = SpineEditorUtilities.Icons.weights; + else if (type == typeof(PathAttachment)) + icon = SpineEditorUtilities.Icons.boundingBox; else icon = SpineEditorUtilities.Icons.warning; + //JOHN: left todo: Icon for paths. Generic icon for unidentified attachments. // MITCH: left todo: Waterboard Nate //if (name != attachment.Name) @@ -560,20 +563,19 @@ namespace Spine.Unity.Editor { if (this.m_previewInstance == null) { string skinName = EditorPrefs.GetString(m_skeletonDataAssetGUID + "_lastSkin", ""); - m_previewInstance = SpineEditorUtilities.InstantiateSkeletonAnimation(skeletonDataAsset, skinName).gameObject; - m_previewInstance.hideFlags = HideFlags.HideAndDontSave; - m_previewInstance.layer = 0x1f; - m_skeletonAnimation = m_previewInstance.GetComponent(); - m_skeletonAnimation.initialSkinName = skinName; - m_skeletonAnimation.LateUpdate(); + if (m_previewInstance != null) { + m_previewInstance.hideFlags = HideFlags.HideAndDontSave; + m_previewInstance.layer = 0x1f; + m_skeletonAnimation = m_previewInstance.GetComponent(); + m_skeletonAnimation.initialSkinName = skinName; + m_skeletonAnimation.LateUpdate(); + m_skeletonData = m_skeletonAnimation.skeletonDataAsset.GetSkeletonData(true); + m_previewInstance.GetComponent().enabled = false; + m_initialized = true; + } - m_skeletonData = m_skeletonAnimation.skeletonDataAsset.GetSkeletonData(true); - - m_previewInstance.GetComponent().enabled = false; - - m_initialized = true; AdjustCameraGoals(true); } } @@ -694,7 +696,7 @@ namespace Spine.Unity.Editor { foreach (var slot in m_skeletonAnimation.skeleton.Slots) { var boundingBoxAttachment = slot.Attachment as BoundingBoxAttachment; if (boundingBoxAttachment != null) - DrawBoundingBox (slot.Bone, boundingBoxAttachment); + DrawBoundingBox (slot, boundingBoxAttachment); } } @@ -703,11 +705,11 @@ namespace Spine.Unity.Editor { } - static void DrawBoundingBox (Bone bone, BoundingBoxAttachment box) { + static void DrawBoundingBox (Slot slot, BoundingBoxAttachment box) { if (box.Vertices.Length <= 0) return; // Handle cases where user creates a BoundingBoxAttachment but doesn't actually define it. var worldVerts = new float[box.Vertices.Length]; - box.ComputeWorldVertices(bone, worldVerts); + box.ComputeWorldVertices(slot, worldVerts); Handles.color = Color.green; Vector3 lastVert = Vector3.back; @@ -830,7 +832,7 @@ namespace Spine.Unity.Editor { switch (current.GetTypeForControl(controlID)) { case EventType.ScrollWheel: if (position.Contains(current.mousePosition)) { - m_orthoGoal += current.delta.y; + m_orthoGoal += current.delta.y * 0.06f; m_orthoGoal = Mathf.Max(0.01f, m_orthoGoal); GUIUtility.hotControl = controlID; current.Use(); diff --git a/spine-unity/Assets/spine-unity/Asset Types/SkeletonDataAsset.cs b/spine-unity/Assets/spine-unity/Asset Types/SkeletonDataAsset.cs index 499ec80f2..da8629261 100644 --- a/spine-unity/Assets/spine-unity/Asset Types/SkeletonDataAsset.cs +++ b/spine-unity/Assets/spine-unity/Asset Types/SkeletonDataAsset.cs @@ -39,9 +39,11 @@ namespace Spine.Unity { public AtlasAsset[] atlasAssets; #if SPINE_TK2D public tk2dSpriteCollectionData spriteCollection; + public float scale = 1f; + #else + public float scale = 0.01f; #endif public TextAsset skeletonJSON; - public float scale = 0.01f; public String[] fromAnimation; public String[] toAnimation; public float[] duration; diff --git a/spine-unity/Assets/spine-unity/BoneFollower.cs b/spine-unity/Assets/spine-unity/BoneFollower.cs index a5a1af424..d59c88550 100644 --- a/spine-unity/Assets/spine-unity/BoneFollower.cs +++ b/spine-unity/Assets/spine-unity/BoneFollower.cs @@ -47,12 +47,16 @@ namespace Spine.Unity { } } - /// If a bone isn't set, boneName is used to find the bone. + /// If a bone isn't set in code, boneName is used to find the bone. [SpineBone(dataField: "skeletonRenderer")] public String boneName; public bool followZPosition = true; public bool followBoneRotation = true; + + [Tooltip("Follows the skeleton's flip state by controlling this Transform's local scale.")] + public bool followSkeletonFlip = false; + [UnityEngine.Serialization.FormerlySerializedAs("resetOnAwake")] public bool initializeOnAwake = true; #endregion @@ -122,6 +126,11 @@ namespace Spine.Unity { thisTransform.rotation = Quaternion.Euler(worldRotation.x, worldRotation.y, skeletonTransform.rotation.eulerAngles.z + bone.WorldRotationX); } } + + if (followSkeletonFlip) { + float flipScaleY = bone.skeleton.flipX ^ bone.skeleton.flipY ? -1f : 1f; + thisTransform.localScale = new Vector3(1f, flipScaleY, 1f); + } } } diff --git a/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs b/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs index 44221347e..534d0510f 100644 --- a/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs +++ b/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs @@ -35,8 +35,8 @@ using UnityEngine; namespace Spine.Unity.Editor { [CustomEditor(typeof(BoneFollower))] public class BoneFollowerInspector : UnityEditor.Editor { - SerializedProperty boneName, skeletonRenderer, followZPosition, followBoneRotation; - BoneFollower component; + SerializedProperty boneName, skeletonRenderer, followZPosition, followBoneRotation, followSkeletonFlip; + BoneFollower targetBoneFollower; bool needsReset; void OnEnable () { @@ -44,34 +44,41 @@ namespace Spine.Unity.Editor { boneName = serializedObject.FindProperty("boneName"); followBoneRotation = serializedObject.FindProperty("followBoneRotation"); followZPosition = serializedObject.FindProperty("followZPosition"); + followSkeletonFlip = serializedObject.FindProperty("followSkeletonFlip"); - component = (BoneFollower)target; - if (component.SkeletonRenderer != null) - component.SkeletonRenderer.Initialize(false); + targetBoneFollower = (BoneFollower)target; + if (targetBoneFollower.SkeletonRenderer != null) + targetBoneFollower.SkeletonRenderer.Initialize(false); } override public void OnInspectorGUI () { if (needsReset) { - component.Initialize(); - component.LateUpdate(); + targetBoneFollower.Initialize(); + targetBoneFollower.LateUpdate(); needsReset = false; SceneView.RepaintAll(); } serializedObject.Update(); - // FindRenderer() + // Find Renderer if (skeletonRenderer.objectReferenceValue == null) { - SkeletonRenderer parentRenderer = BoneFollowerInspector.GetInParent(component.transform); - - if (parentRenderer != null) { + SkeletonRenderer parentRenderer = BoneFollowerInspector.GetInParent(targetBoneFollower.transform); + if (parentRenderer != null && parentRenderer.gameObject != targetBoneFollower.gameObject) { Debug.Log("Inspector automatically assigned BoneFollower.SkeletonRenderer"); skeletonRenderer.objectReferenceValue = parentRenderer; } } EditorGUILayout.PropertyField(skeletonRenderer); + var skeletonRendererReference = skeletonRenderer.objectReferenceValue as SkeletonRenderer; + if (skeletonRendererReference != null) { + if (skeletonRendererReference.gameObject == targetBoneFollower.gameObject) { + skeletonRenderer.objectReferenceValue = null; + EditorUtility.DisplayDialog("Invalid assignment.", "BoneFollower can only follow a skeleton on a separate GameObject.\n\nCreate a new GameObject for your BoneFollower, or choose a SkeletonRenderer from a different GameObject.", "Ok"); + } + } - if (component.valid) { + if (targetBoneFollower.valid) { EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(boneName); if (EditorGUI.EndChangeCheck()) { @@ -79,18 +86,28 @@ namespace Spine.Unity.Editor { needsReset = true; serializedObject.Update(); } - EditorGUILayout.PropertyField(followBoneRotation); EditorGUILayout.PropertyField(followZPosition); + EditorGUILayout.PropertyField(followSkeletonFlip); } else { - GUILayout.Label("INVALID"); + var boneFollowerSkeletonRenderer = targetBoneFollower.skeletonRenderer; + if (boneFollowerSkeletonRenderer == null) { + EditorGUILayout.HelpBox("SkeletonRenderer is unassigned. Please assign a SkeletonRenderer (SkeletonAnimation or SkeletonAnimator).", MessageType.Warning); + } else { + boneFollowerSkeletonRenderer.Initialize(false); + + if (boneFollowerSkeletonRenderer.skeletonDataAsset == null) + EditorGUILayout.HelpBox("Assigned SkeletonRenderer does not have SkeletonData assigned to it.", MessageType.Warning); + + if (!boneFollowerSkeletonRenderer.valid) + EditorGUILayout.HelpBox("Assigned SkeletonRenderer is invalid. Check target SkeletonRenderer, its SkeletonDataAsset or the console for other errors.", MessageType.Warning); + } } - if (serializedObject.ApplyModifiedProperties() || - (UnityEngine.Event.current.type == EventType.ValidateCommand && UnityEngine.Event.current.commandName == "UndoRedoPerformed") - ) { - component.Initialize(); - } + var current = UnityEngine.Event.current; + bool wasUndo = (current.type == EventType.ValidateCommand && current.commandName == "UndoRedoPerformed"); + if (serializedObject.ApplyModifiedProperties() || wasUndo) + targetBoneFollower.Initialize(); } public static T GetInParent (Transform origin) where T : Component { @@ -101,7 +118,6 @@ namespace Spine.Unity.Editor { if(parent == null) return default(T); } - return parent.GetComponent(); #else return origin.GetComponentInParent(); diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs b/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs index 8759ac0f4..035ffd4cd 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs @@ -1,5 +1,3 @@ - - /***************************************************************************** * SkeletonBaker added by Mitch Thompson * Full irrevocable rights and permissions granted to Esoteric Software @@ -373,6 +371,7 @@ namespace Spine.Unity.Editor { float rotation = 0; Mesh mesh = null; Material material = null; + bool isWeightedMesh = false; if (meshTable.ContainsKey(attachmentMeshName)) mesh = meshTable[attachmentMeshName]; @@ -382,32 +381,28 @@ namespace Spine.Unity.Editor { offset.y = regionAttachment.Y; rotation = regionAttachment.Rotation; mesh = ExtractRegionAttachment(attachmentMeshName, regionAttachment, mesh); - material = ExtractMaterial((RegionAttachment)attachment); + material = ExtractMaterial(attachment); unusedMeshNames.Remove(attachmentMeshName); if (newPrefab || meshTable.ContainsKey(attachmentMeshName) == false) AssetDatabase.AddObjectToAsset(mesh, prefab); } else if (attachment is MeshAttachment) { var meshAttachment = (MeshAttachment)attachment; + isWeightedMesh = (meshAttachment.Bones != null); offset.x = 0; offset.y = 0; rotation = 0; - mesh = ExtractMeshAttachment(attachmentMeshName, meshAttachment, mesh); - material = ExtractMaterial((MeshAttachment)attachment); - unusedMeshNames.Remove(attachmentMeshName); - if (newPrefab || meshTable.ContainsKey(attachmentMeshName) == false) - AssetDatabase.AddObjectToAsset(mesh, prefab); - } else if (attachment is WeightedMeshAttachment) { - var meshAttachment = (WeightedMeshAttachment)attachment; - offset.x = 0; - offset.y = 0; - rotation = 0; - mesh = ExtractSkinnedMeshAttachment(attachmentMeshName, meshAttachment, i, skeletonData, boneList, mesh); - material = ExtractMaterial((WeightedMeshAttachment)attachment); + + if (isWeightedMesh) + mesh = ExtractWeightedMeshAttachment(attachmentMeshName, meshAttachment, i, skeletonData, boneList, mesh); + else + mesh = ExtractMeshAttachment(attachmentMeshName, meshAttachment, mesh); + + material = ExtractMaterial(attachment); unusedMeshNames.Remove(attachmentMeshName); if (newPrefab || meshTable.ContainsKey(attachmentMeshName) == false) AssetDatabase.AddObjectToAsset(mesh, prefab); } else - continue; //disregard unsupported types for now + continue; Transform attachmentTransform = new GameObject(attachmentName).transform; @@ -415,14 +410,13 @@ namespace Spine.Unity.Editor { attachmentTransform.localPosition = offset; attachmentTransform.localRotation = Quaternion.Euler(0, 0, rotation); - if (attachment is WeightedMeshAttachment) { + if (isWeightedMesh) { attachmentTransform.position = Vector3.zero; attachmentTransform.rotation = Quaternion.identity; var skinnedMeshRenderer = attachmentTransform.gameObject.AddComponent(); skinnedMeshRenderer.rootBone = boneList[0]; skinnedMeshRenderer.bones = boneList.ToArray(); skinnedMeshRenderer.sharedMesh = mesh; - } else { attachmentTransform.gameObject.AddComponent().sharedMesh = mesh; attachmentTransform.gameObject.AddComponent(); @@ -482,7 +476,7 @@ namespace Spine.Unity.Editor { return extractionBone; SkeletonData skelData = new SkeletonData(); - BoneData data = new BoneData("temp", null); + BoneData data = new BoneData(0, "temp", null); data.ScaleX = 1; data.ScaleY = 1; data.Length = 100; @@ -505,7 +499,7 @@ namespace Spine.Unity.Editor { Bone bone = GetExtractionBone(); - SlotData data = new SlotData("temp", bone.Data); + SlotData data = new SlotData(0, "temp", bone.Data); Slot slot = new Slot(data, bone); extractionSlot = slot; return extractionSlot; @@ -521,9 +515,6 @@ namespace Spine.Unity.Editor { } else if (attachment is MeshAttachment) { var att = (MeshAttachment)attachment; return (Material)((AtlasRegion)att.RendererObject).page.rendererObject; - } else if (attachment is WeightedMeshAttachment) { - var att = (WeightedMeshAttachment)attachment; - return (Material)((AtlasRegion)att.RendererObject).page.rendererObject; } else { return null; } @@ -573,7 +564,7 @@ namespace Spine.Unity.Editor { slot.Bone.UpdateWorldTransform(); Vector2[] uvs = ExtractUV(attachment.UVs); - float[] floatVerts = new float[attachment.Vertices.Length]; + float[] floatVerts = new float[attachment.WorldVerticesLength]; attachment.ComputeWorldVertices(slot, floatVerts); Vector3[] verts = ExtractVerts(floatVerts); @@ -630,12 +621,14 @@ namespace Spine.Unity.Editor { } } - static Mesh ExtractSkinnedMeshAttachment (string name, WeightedMeshAttachment attachment, int slotIndex, SkeletonData skeletonData, List boneList, Mesh mesh = null) { + static Mesh ExtractWeightedMeshAttachment (string name, MeshAttachment attachment, int slotIndex, SkeletonData skeletonData, List boneList, Mesh mesh = null) { + if (attachment.Bones == null) + throw new System.ArgumentException("Mesh is not weighted.", "attachment"); Skeleton skeleton = new Skeleton(skeletonData); skeleton.UpdateWorldTransform(); - float[] floatVerts = new float[attachment.UVs.Length]; + float[] floatVerts = new float[attachment.WorldVerticesLength]; attachment.ComputeWorldVertices(skeleton.Slots.Items[slotIndex], floatVerts); Vector2[] uvs = ExtractUV(attachment.UVs); @@ -644,8 +637,7 @@ namespace Spine.Unity.Editor { int[] triangles = attachment.Triangles; Color color = new Color(attachment.R, attachment.G, attachment.B, attachment.A); - if (mesh == null) - mesh = new Mesh(); + mesh = mesh ?? new Mesh(); mesh.triangles = new int[0]; @@ -661,21 +653,18 @@ namespace Spine.Unity.Editor { mesh.RecalculateNormals(); mesh.RecalculateBounds(); - //Handle weights and binding - Dictionary weightTable = new Dictionary(); - System.Text.StringBuilder warningBuilder = new System.Text.StringBuilder(); + // Handle weights and binding + var weightTable = new Dictionary(); + var warningBuilder = new System.Text.StringBuilder(); int[] bones = attachment.Bones; - float[] weights = attachment.Weights; + float[] weights = attachment.Vertices; for (int w = 0, v = 0, b = 0, n = bones.Length; v < n; w += 2) { int nn = bones[v++] + v; for (; v < nn; v++, b += 3) { Transform boneTransform = boneList[bones[v]]; int vIndex = w / 2; - - float weight = weights[b + 2]; - BoneWeightContainer container; if (weightTable.ContainsKey(vIndex)) container = weightTable[vIndex]; @@ -684,7 +673,7 @@ namespace Spine.Unity.Editor { weightTable.Add(vIndex, container); } - + float weight = weights[b + 2]; container.Add(boneTransform, weight); } } @@ -700,7 +689,7 @@ namespace Spine.Unity.Editor { for (int b = 0; b < pairs.Count; b++) { if (b > 3) { if (warningBuilder.Length == 0) - warningBuilder.Insert(0, "[SkinnedMeshAttachment " + name + "]\r\nUnity only supports 4 weight influences per vertex! The 4 strongest influences will be used.\r\n"); + warningBuilder.Insert(0, "[Weighted Mesh: " + name + "]\r\nUnity only supports 4 weight influences per vertex! The 4 strongest influences will be used.\r\n"); warningBuilder.AppendFormat("{0} ignored on vertex {1}!\r\n", pairs[b].bone.name, i); continue; @@ -844,6 +833,7 @@ namespace Spine.Unity.Editor { return clip; } + static int BinarySearch (float[] values, float target) { int low = 0; int high = values.Length - 2; @@ -869,7 +859,7 @@ namespace Spine.Unity.Editor { var ev = events[i]; AnimationEvent ae = new AnimationEvent(); - //TODO: Deal with Mecanim's zero-time missed event + //MITCH: left todo: Deal with Mecanim's zero-time missed event ae.time = frames[i]; ae.functionName = ev.Data.Name; ae.messageOptions = eventOptions; @@ -968,6 +958,7 @@ namespace Spine.Unity.Editor { return angle; } + static void BakeBone (Bone bone, Spine.Animation animation, AnimationClip clip) { Skeleton skeleton = bone.Skeleton; bool inheritRotation = bone.Data.InheritRotation; @@ -1178,7 +1169,7 @@ namespace Spine.Unity.Editor { string path = GetPath(boneData); - string propertyName = "localPosition"; + const string propertyName = "localPosition"; clip.SetCurve(path, typeof(Transform), propertyName + ".x", xCurve); clip.SetCurve(path, typeof(Transform), propertyName + ".y", yCurve); diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonRendererInspector.cs b/spine-unity/Assets/spine-unity/Editor/SkeletonRendererInspector.cs index af3b15fae..d79c6eef5 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonRendererInspector.cs +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonRendererInspector.cs @@ -30,7 +30,6 @@ *****************************************************************************/ #define NO_PREFAB_MESH -using System; using UnityEditor; using UnityEngine; @@ -65,23 +64,24 @@ namespace Spine.Unity.Editor { } protected virtual void DrawInspectorGUI () { + // JOHN: todo: support multiediting. SkeletonRenderer component = (SkeletonRenderer)target; - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.PropertyField(skeletonDataAsset); - const string ReloadButtonLabel = "Reload"; - float reloadWidth = GUI.skin.label.CalcSize(new GUIContent(ReloadButtonLabel)).x + 20; - if (GUILayout.Button(ReloadButtonLabel, GUILayout.Width(reloadWidth))) { - if (component.skeletonDataAsset != null) { - foreach (AtlasAsset aa in component.skeletonDataAsset.atlasAssets) { - if (aa != null) - aa.Reset(); + using (new EditorGUILayout.HorizontalScope()) { + EditorGUILayout.PropertyField(skeletonDataAsset); + const string ReloadButtonLabel = "Reload"; + float reloadWidth = GUI.skin.label.CalcSize(new GUIContent(ReloadButtonLabel)).x + 20; + if (GUILayout.Button(ReloadButtonLabel, GUILayout.Width(reloadWidth))) { + if (component.skeletonDataAsset != null) { + foreach (AtlasAsset aa in component.skeletonDataAsset.atlasAssets) { + if (aa != null) + aa.Reset(); + } + component.skeletonDataAsset.Reset(); } - component.skeletonDataAsset.Reset(); + component.Initialize(true); } - component.Initialize(true); } - EditorGUILayout.EndHorizontal(); if (!component.valid) { component.Initialize(true); @@ -100,10 +100,10 @@ namespace Spine.Unity.Editor { // Initial skin name. { - String[] skins = new String[component.skeleton.Data.Skins.Count]; + string[] skins = new string[component.skeleton.Data.Skins.Count]; int skinIndex = 0; for (int i = 0; i < skins.Length; i++) { - String skinNameString = component.skeleton.Data.Skins.Items[i].Name; + string skinNameString = component.skeleton.Data.Skins.Items[i].Name; skins[i] = skinNameString; if (skinNameString == initialSkinName.stringValue) skinIndex = i; @@ -115,40 +115,33 @@ namespace Spine.Unity.Editor { EditorGUILayout.Space(); // Sorting Layers - { - SpineInspectorUtility.SortingPropertyFields(sortingProperties, applyModifiedProperties: true); - } + SpineInspectorUtility.SortingPropertyFields(sortingProperties, applyModifiedProperties: true); // More Render Options... - { - using (new EditorGUILayout.VerticalScope(EditorStyles.helpBox)) { + using (new EditorGUILayout.VerticalScope(EditorStyles.helpBox)) { + EditorGUI.indentLevel++; + advancedFoldout = EditorGUILayout.Foldout(advancedFoldout, "Advanced"); + if (advancedFoldout) { EditorGUI.indentLevel++; - advancedFoldout = EditorGUILayout.Foldout(advancedFoldout, "Advanced"); - if (advancedFoldout) { - EditorGUI.indentLevel++; - SeparatorsField(separatorSlotNames); - EditorGUILayout.PropertyField(meshes, - new GUIContent("Render Mesh Attachments", "Disable to optimize rendering for skeletons that don't use Mesh Attachments")); - EditorGUILayout.PropertyField(immutableTriangles, - new GUIContent("Immutable Triangles", "Enable to optimize rendering for skeletons that never change attachment visbility")); - EditorGUILayout.Space(); + SeparatorsField(separatorSlotNames); + EditorGUILayout.PropertyField(meshes, + new GUIContent("Render MeshAttachments", "Disable to optimize rendering for skeletons that don't use Mesh Attachments")); + EditorGUILayout.PropertyField(immutableTriangles, + new GUIContent("Immutable Triangles", "Enable to optimize rendering for skeletons that never change attachment visbility")); + EditorGUILayout.Space(); - const float MinZSpacing = -0.1f; - const float MaxZSpacing = 0f; - EditorGUILayout.Slider(zSpacing, MinZSpacing, MaxZSpacing); + const float MinZSpacing = -0.1f; + const float MaxZSpacing = 0f; + EditorGUILayout.Slider(zSpacing, MinZSpacing, MaxZSpacing); - // Optional fields. May be disabled in SkeletonRenderer. - if (normals != null) { - EditorGUILayout.PropertyField(normals); - EditorGUILayout.PropertyField(tangents); - } - if (frontFacing != null) - EditorGUILayout.PropertyField(frontFacing); + // Optional fields. May be disabled in SkeletonRenderer. + if (normals != null) EditorGUILayout.PropertyField(normals, new GUIContent("Add Normals")); + if (tangents != null) EditorGUILayout.PropertyField(tangents, new GUIContent("Solve Tangents")); + if (frontFacing != null) EditorGUILayout.PropertyField(frontFacing); - EditorGUI.indentLevel--; - } EditorGUI.indentLevel--; } + EditorGUI.indentLevel--; } } @@ -162,7 +155,7 @@ namespace Spine.Unity.Editor { } override public void OnInspectorGUI () { - serializedObject.Update(); + //serializedObject.Update(); DrawInspectorGUI(); if (serializedObject.ApplyModifiedProperties() || (UnityEngine.Event.current.type == EventType.ValidateCommand && UnityEngine.Event.current.commandName == "UndoRedoPerformed") diff --git a/spine-unity/Assets/spine-unity/Editor/SpineAttributeDrawers.cs b/spine-unity/Assets/spine-unity/Editor/SpineAttributeDrawers.cs index a4db8a87d..d9dfdaa2e 100644 --- a/spine-unity/Assets/spine-unity/Editor/SpineAttributeDrawers.cs +++ b/spine-unity/Assets/spine-unity/Editor/SpineAttributeDrawers.cs @@ -33,15 +33,14 @@ namespace Spine.Unity.Editor { return; } - var dataProperty = property.serializedObject.FindProperty(TargetAttribute.dataField); - - if (dataProperty != null) { - if (dataProperty.objectReferenceValue is SkeletonDataAsset) { - skeletonDataAsset = (SkeletonDataAsset)dataProperty.objectReferenceValue; - } else if (dataProperty.objectReferenceValue is SkeletonRenderer) { - var renderer = (SkeletonRenderer)dataProperty.objectReferenceValue; - if (renderer != null) - skeletonDataAsset = renderer.skeletonDataAsset; + var dataField = property.serializedObject.FindProperty(TargetAttribute.dataField); + if (dataField != null) { + if (dataField.objectReferenceValue is SkeletonDataAsset) { + skeletonDataAsset = (SkeletonDataAsset)dataField.objectReferenceValue; + } else if (dataField.objectReferenceValue is ISkeletonComponent) { + var skeletonComponent = (ISkeletonComponent)dataField.objectReferenceValue; + if (skeletonComponent != null) + skeletonDataAsset = skeletonComponent.SkeletonDataAsset; } else { EditorGUI.LabelField(position, "ERROR:", "Invalid reference type"); return; @@ -49,10 +48,9 @@ namespace Spine.Unity.Editor { } else if (property.serializedObject.targetObject is Component) { var component = (Component)property.serializedObject.targetObject; - if (component.GetComponentInChildren() != null) { - var skeletonRenderer = component.GetComponentInChildren(); - skeletonDataAsset = skeletonRenderer.skeletonDataAsset; - } + var skeletonComponent = component.GetComponentInChildren(typeof(ISkeletonComponent)) as ISkeletonComponent; + if (skeletonComponent != null) + skeletonDataAsset = skeletonComponent.SkeletonDataAsset; } if (skeletonDataAsset == null) { @@ -63,28 +61,42 @@ namespace Spine.Unity.Editor { position = EditorGUI.PrefixLabel(position, label); var propertyStringValue = property.stringValue; - if (GUI.Button(position, string.IsNullOrEmpty(propertyStringValue) ? NoneLabel : propertyStringValue, EditorStyles.popup)) { + if (GUI.Button(position, string.IsNullOrEmpty(propertyStringValue) ? NoneLabel : propertyStringValue, EditorStyles.popup)) Selector(property); + + } + + public ISkeletonComponent GetTargetSkeletonComponent (SerializedProperty property) { + var dataField = property.serializedObject.FindProperty(TargetAttribute.dataField); + + if (dataField != null) { + var skeletonComponent = dataField.objectReferenceValue as ISkeletonComponent; + if (dataField.objectReferenceValue != null && skeletonComponent != null) // note the overloaded UnityEngine.Object == null check. Do not simplify. + return skeletonComponent; + } else { + var component = property.serializedObject.targetObject as Component; + if (component != null) + return component.GetComponentInChildren(typeof(ISkeletonComponent)) as ISkeletonComponent; } + return null; } protected virtual void Selector (SerializedProperty property) { SkeletonData data = skeletonDataAsset.GetSkeletonData(true); - if (data == null) - return; + if (data == null) return; - GenericMenu menu = new GenericMenu(); + var menu = new GenericMenu(); PopulateMenu(menu, property, this.TargetAttribute, data); menu.ShowAsContext(); } protected abstract void PopulateMenu (GenericMenu menu, SerializedProperty property, T targetAttribute, SkeletonData data); - protected virtual void HandleSelect (object val) { - var pair = (SpineDrawerValuePair)val; - pair.property.stringValue = pair.str; - pair.property.serializedObject.ApplyModifiedProperties(); + protected virtual void HandleSelect (object menuItemObject) { + var clickedItem = (SpineDrawerValuePair)menuItemObject; + clickedItem.property.stringValue = clickedItem.str; + clickedItem.property.serializedObject.ApplyModifiedProperties(); } public override float GetPropertyHeight (SerializedProperty property, GUIContent label) { @@ -100,14 +112,12 @@ namespace Spine.Unity.Editor { for (int i = 0; i < data.Slots.Count; i++) { string name = data.Slots.Items[i].Name; if (name.StartsWith(targetAttribute.startsWith, StringComparison.Ordinal)) { + if (targetAttribute.containsBoundingBoxes) { - int slotIndex = i; - - List attachments = new List(); - foreach (var skin in data.Skins) { + var attachments = new List(); + foreach (var skin in data.Skins) skin.FindAttachmentsForSlot(slotIndex, attachments); - } bool hasBoundingBox = false; foreach (var attachment in attachments) { @@ -121,7 +131,6 @@ namespace Spine.Unity.Editor { if (!hasBoundingBox) menu.AddDisabledItem(new GUIContent(name)); - } else { menu.AddItem(new GUIContent(name), name == property.stringValue, HandleSelect, new SpineDrawerValuePair(name, property)); } @@ -170,6 +179,10 @@ namespace Spine.Unity.Editor { public class SpineEventNameDrawer : SpineTreeItemDrawerBase { protected override void PopulateMenu (GenericMenu menu, SerializedProperty property, SpineEvent targetAttribute, SkeletonData data) { var events = skeletonDataAsset.GetSkeletonData(false).Events; + + // item + menu.AddItem(new GUIContent(NoneLabel), string.IsNullOrEmpty(property.stringValue), HandleSelect, new SpineDrawerValuePair("", property)); + for (int i = 0; i < events.Count; i++) { string name = events.Items[i].Name; if (name.StartsWith(targetAttribute.startsWith, StringComparison.Ordinal)) @@ -182,45 +195,32 @@ namespace Spine.Unity.Editor { [CustomPropertyDrawer(typeof(SpineAttachment))] public class SpineAttachmentDrawer : SpineTreeItemDrawerBase { protected override void PopulateMenu (GenericMenu menu, SerializedProperty property, SpineAttachment targetAttribute, SkeletonData data) { - List validSkins = new List(); - SkeletonRenderer skeletonRenderer = null; + ISkeletonComponent skeletonComponent = GetTargetSkeletonComponent(property); + var validSkins = new List(); - var component = property.serializedObject.targetObject as Component; - if (component != null) { - if (component.GetComponentInChildren() != null) { - skeletonRenderer = component.GetComponentInChildren(); - //if (skeletonDataAsset != skeletonRenderer.skeletonDataAsset) Debug.LogWarning("DataField SkeletonDataAsset and SkeletonRenderer/SkeletonAnimation's SkeletonDataAsset do not match. Remove the explicit dataField parameter of your [SpineAttachment] field."); - skeletonDataAsset = skeletonRenderer.skeletonDataAsset; - } - } - - if (skeletonRenderer != null && targetAttribute.currentSkinOnly) { - if (skeletonRenderer.skeleton.Skin != null) { - validSkins.Add(skeletonRenderer.skeleton.Skin); - } else { + if (skeletonComponent != null && targetAttribute.currentSkinOnly) { + var currentSkin = skeletonComponent.Skeleton.Skin; + if (currentSkin != null) + validSkins.Add(currentSkin); + else validSkins.Add(data.Skins.Items[0]); - } + } else { - foreach (Skin skin in data.Skins) { - if (skin != null) - validSkins.Add(skin); - } + foreach (Skin skin in data.Skins) + if (skin != null) validSkins.Add(skin); } - List attachmentNames = new List(); - List placeholderNames = new List(); - + var attachmentNames = new List(); + var placeholderNames = new List(); string prefix = ""; - if (skeletonRenderer != null && targetAttribute.currentSkinOnly) - menu.AddDisabledItem(new GUIContent(skeletonRenderer.gameObject.name + " (SkeletonRenderer)")); + if (skeletonComponent != null && targetAttribute.currentSkinOnly) + menu.AddDisabledItem(new GUIContent((skeletonComponent as Component).gameObject.name + " (Skeleton)")); else menu.AddDisabledItem(new GUIContent(skeletonDataAsset.name)); menu.AddSeparator(""); - menu.AddItem(new GUIContent("Null"), property.stringValue == "", HandleSelect, new SpineDrawerValuePair("", property)); - menu.AddSeparator(""); Skin defaultSkin = data.Skins.Items[0]; @@ -240,7 +240,7 @@ namespace Spine.Unity.Editor { prefix = skinPrefix; for (int i = 0; i < data.Slots.Count; i++) { - if (slotMatch.Length > 0 && data.Slots.Items[i].Name.ToLower().Contains(slotMatch) == false) + if (slotMatch.Length > 0 && !(data.Slots.Items[i].Name.ToLower().Contains(slotMatch))) continue; attachmentNames.Clear(); @@ -252,9 +252,7 @@ namespace Spine.Unity.Editor { skin.FindNamesForSlot(i, placeholderNames); } - for (int a = 0; a < attachmentNames.Count; a++) { - string attachmentPath = attachmentNames[a]; string menuPath = prefix + data.Slots.Items[i].Name + "/" + attachmentPath; string name = attachmentNames[a]; @@ -262,14 +260,13 @@ namespace Spine.Unity.Editor { if (targetAttribute.returnAttachmentPath) name = skin.Name + "/" + data.Slots.Items[i].Name + "/" + attachmentPath; - if (targetAttribute.placeholdersOnly && placeholderNames.Contains(attachmentPath) == false) { + if (targetAttribute.placeholdersOnly && !placeholderNames.Contains(attachmentPath)) { menu.AddDisabledItem(new GUIContent(menuPath)); } else { menu.AddItem(new GUIContent(menuPath), name == property.stringValue, HandleSelect, new SpineDrawerValuePair(name, property)); } - - } + } } } @@ -285,7 +282,7 @@ namespace Spine.Unity.Editor { for (int i = 0; i < data.Bones.Count; i++) { string name = data.Bones.Items[i].Name; - if (name.StartsWith(targetAttribute.startsWith)) + if (name.StartsWith(targetAttribute.startsWith, StringComparison.Ordinal)) menu.AddItem(new GUIContent(name), name == property.stringValue, HandleSelect, new SpineDrawerValuePair(name, property)); } } @@ -304,12 +301,7 @@ namespace Spine.Unity.Editor { } component = (Component)property.serializedObject.targetObject; - - if (component != null) - atlasProp = property.serializedObject.FindProperty("atlasAsset"); - else - atlasProp = null; - + atlasProp = component != null ? property.serializedObject.FindProperty("atlasAsset") : null; if (atlasProp == null) { EditorGUI.LabelField(position, "ERROR:", "Must have AtlasAsset variable!"); @@ -323,9 +315,8 @@ namespace Spine.Unity.Editor { position = EditorGUI.PrefixLabel(position, label); - if (GUI.Button(position, property.stringValue, EditorStyles.popup)) { + if (GUI.Button(position, property.stringValue, EditorStyles.popup)) Selector(property); - } } @@ -333,7 +324,7 @@ namespace Spine.Unity.Editor { GenericMenu menu = new GenericMenu(); AtlasAsset atlasAsset = (AtlasAsset)atlasProp.objectReferenceValue; Atlas atlas = atlasAsset.GetAtlas(); - FieldInfo field = typeof(Atlas).GetField("regions", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.NonPublic); + FieldInfo field = typeof(Atlas).GetField("regions", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); List regions = (List)field.GetValue(atlas); for (int i = 0; i < regions.Count; i++) { @@ -341,7 +332,6 @@ namespace Spine.Unity.Editor { menu.AddItem(new GUIContent(name), name == property.stringValue, HandleSelect, new SpineDrawerValuePair(name, property)); } - menu.ShowAsContext(); } diff --git a/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs b/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs index d0f08cfae..921cc53f8 100644 --- a/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs +++ b/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs @@ -28,7 +28,6 @@ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ - #pragma warning disable 0219 /***************************************************************************** @@ -38,7 +37,6 @@ #define SPINE_SKELETONANIMATOR using UnityEngine; using UnityEditor; -using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; @@ -150,15 +148,33 @@ namespace Spine.Unity.Editor { public static string editorGUIPath = ""; public static bool initialized; + /// This list keeps the asset reference temporarily during importing. + /// + /// In cases of very large projects/sufficient RAM pressure, when AssetDatabase.SaveAssets is called, + /// Unity can mistakenly unload assets whose references are only on the stack. + /// This leads to MissingReferenceException and other errors. + static readonly List protectFromStackGarbageCollection = new List(); + static HashSet assetsImportedInWrongState; static Dictionary skeletonRendererTable; static Dictionary skeletonUtilityBoneTable; static Dictionary boundingBoxFollowerTable; + #if SPINE_TK2D + const float DEFAULT_DEFAULT_SCALE = 1f; + #else + const float DEFAULT_DEFAULT_SCALE = 0.01f; + #endif + const string DEFAULT_SCALE_KEY = "SPINE_DEFAULT_SCALE"; + public static float defaultScale = DEFAULT_DEFAULT_SCALE; + + const float DEFAULT_DEFAULT_MIX = 0.2f; const string DEFAULT_MIX_KEY = "SPINE_DEFAULT_MIX"; - public static float defaultScale = 0.01f; - public static float defaultMix = 0.2f; - public static string defaultShader = "Spine/Skeleton"; + public static float defaultMix = DEFAULT_DEFAULT_MIX; + + const string DEFAULT_DEFAULT_SHADER = "Spine/Skeleton"; + const string DEFAULT_SHADER_KEY = "SPINE_DEFAULT_SHADER"; + public static string defaultShader = DEFAULT_DEFAULT_SHADER; #region Initialization static SpineEditorUtilities () { @@ -166,7 +182,14 @@ namespace Spine.Unity.Editor { } static void Initialize () { - defaultMix = EditorPrefs.GetFloat(DEFAULT_MIX_KEY, 0.2f); + { + defaultMix = EditorPrefs.GetFloat(DEFAULT_MIX_KEY, DEFAULT_DEFAULT_MIX); + defaultScale = EditorPrefs.GetFloat(DEFAULT_SCALE_KEY, DEFAULT_DEFAULT_SCALE); + defaultShader = EditorPrefs.GetString(DEFAULT_SHADER_KEY, DEFAULT_DEFAULT_SHADER); + } + + SceneView.onSceneGUIDelegate -= OnSceneGUI; + SceneView.onSceneGUIDelegate += OnSceneGUI; DirectoryInfo rootDir = new DirectoryInfo(Application.dataPath); FileInfo[] files = rootDir.GetFiles("SpineEditorUtilities.cs", SearchOption.AllDirectories); @@ -200,16 +223,28 @@ namespace Spine.Unity.Editor { static void PreferencesGUI () { if (!preferencesLoaded) { preferencesLoaded = true; - defaultMix = EditorPrefs.GetFloat(DEFAULT_MIX_KEY, 0.2f); + defaultMix = EditorPrefs.GetFloat(DEFAULT_MIX_KEY, DEFAULT_DEFAULT_MIX); + defaultScale = EditorPrefs.GetFloat(DEFAULT_SCALE_KEY, DEFAULT_DEFAULT_SCALE); + defaultShader = EditorPrefs.GetString(DEFAULT_SHADER_KEY, DEFAULT_DEFAULT_SHADER); } - EditorGUILayout.LabelField("Auto-Import Settings", EditorStyles.boldLabel); + EditorGUI.BeginChangeCheck(); defaultMix = EditorGUILayout.FloatField("Default Mix", defaultMix); - if (EditorGUI.EndChangeCheck()) + if (EditorGUI.EndChangeCheck()) EditorPrefs.SetFloat(DEFAULT_MIX_KEY, defaultMix); + EditorGUI.BeginChangeCheck(); + defaultScale = EditorGUILayout.FloatField("Default SkeletonData Scale", defaultScale); + if (EditorGUI.EndChangeCheck()) + EditorPrefs.SetFloat(DEFAULT_SCALE_KEY, defaultScale); + + EditorGUI.BeginChangeCheck(); + defaultShader = EditorGUILayout.DelayedTextField("Default shader for auto-generated materials", defaultShader); + if (EditorGUI.EndChangeCheck()) + EditorPrefs.SetString(DEFAULT_SHADER_KEY, defaultShader); + GUILayout.Space(20); EditorGUILayout.LabelField("3rd Party Settings", EditorStyles.boldLabel); GUILayout.BeginHorizontal(); @@ -223,6 +258,141 @@ namespace Spine.Unity.Editor { } #endregion + #region Drag and Drop to Scene View + + public delegate Component InstantiateDelegate (SkeletonDataAsset skeletonDataAsset); + + struct SpawnMenuData { + public Vector3 spawnPoint; + public SkeletonDataAsset skeletonDataAsset; + public InstantiateDelegate instantiateDelegate; + public bool isUI; + } + + public class SkeletonComponentSpawnType { + public string menuLabel; + public InstantiateDelegate instantiateDelegate; + public bool isUI; + } + + public static readonly List additionalSpawnTypes = new List(); + + static void OnSceneGUI (SceneView sceneview) { + var current = UnityEngine.Event.current; + var references = DragAndDrop.objectReferences; + + // Allow drag and drop of one SkeletonDataAsset. + if (references.Length == 1) { + var skeletonDataAsset = references[0] as SkeletonDataAsset; + if (skeletonDataAsset != null) { + var mousePos = current.mousePosition; + + bool invalidSkeletonData = skeletonDataAsset.GetSkeletonData(true) == null; + if (invalidSkeletonData) { + DragAndDrop.visualMode = DragAndDropVisualMode.Rejected; + Handles.BeginGUI(); + GUI.Label(new Rect(mousePos + new Vector2(20f, 20f), new Vector2(400f, 40f)), new GUIContent(string.Format("{0} is invalid.\nCannot create new Spine GameObject.", skeletonDataAsset.name), SpineEditorUtilities.Icons.warning)); + Handles.EndGUI(); + return; + } else { + DragAndDrop.visualMode = DragAndDropVisualMode.Copy; + Handles.BeginGUI(); + GUI.Label(new Rect(mousePos + new Vector2(20f, 20f), new Vector2(400f, 20f)), new GUIContent(string.Format("Create Spine GameObject ({0})", skeletonDataAsset.skeletonJSON.name), SpineEditorUtilities.Icons.spine)); + Handles.EndGUI(); + + if (current.type == EventType.DragPerform) { + RectTransform rectTransform = (Selection.activeGameObject == null) ? null : Selection.activeGameObject.GetComponent(); + Plane plane = (rectTransform == null) ? new Plane(Vector3.back, Vector3.zero) : new Plane(-rectTransform.forward, rectTransform.position); + Vector3 spawnPoint = MousePointToWorldPoint2D(mousePos, sceneview.camera, plane); + + var menu = new GenericMenu(); + menu.AddItem(new GUIContent("SkeletonAnimation"), false, HandleSkeletonComponentDrop, new SpawnMenuData { + skeletonDataAsset = skeletonDataAsset, + spawnPoint = spawnPoint, + instantiateDelegate = (data) => InstantiateSkeletonAnimation(data) + }); + + foreach (var spawnType in additionalSpawnTypes) { + menu.AddItem(new GUIContent(spawnType.menuLabel), false, HandleSkeletonComponentDrop, new SpawnMenuData { + skeletonDataAsset = skeletonDataAsset, + spawnPoint = spawnPoint, + instantiateDelegate = spawnType.instantiateDelegate, + isUI = spawnType.isUI + }); + } + + #if SPINE_SKELETONANIMATOR + menu.AddSeparator(""); + + menu.AddItem(new GUIContent("SkeletonAnimator"), false, HandleSkeletonComponentDrop, new SpawnMenuData { + skeletonDataAsset = skeletonDataAsset, + spawnPoint = spawnPoint, + instantiateDelegate = (data) => InstantiateSkeletonAnimator(data) + }); + #endif + + menu.ShowAsContext(); + } + } + + } + } + + } + + public static void HandleSkeletonComponentDrop (object menuData) { + var data = (SpawnMenuData)menuData; + + if (data.skeletonDataAsset.GetSkeletonData(true) == null) { + EditorUtility.DisplayDialog("Invalid SkeletonDataAsset", "Unable to create Spine GameObject.\n\nPlease check your SkeletonDataAsset.", "Ok"); + return; + } + + bool isUI = data.isUI; + + GameObject newGameObject = null; + Component newSkeletonComponent = data.instantiateDelegate.Invoke(data.skeletonDataAsset); + newGameObject = newSkeletonComponent.gameObject; + var transform = newGameObject.transform; + + var activeGameObject = Selection.activeGameObject; + if (activeGameObject != null) + transform.SetParent(activeGameObject.transform, false); + + newGameObject.transform.position = isUI ? data.spawnPoint : RoundVector(data.spawnPoint, 2); + + if (isUI && (activeGameObject == null || activeGameObject.GetComponent() == null)) + Debug.Log("Created a UI Skeleton GameObject not under a RectTransform. It may not be visible until you parent it to a canvas."); + + if (!isUI && activeGameObject != null && activeGameObject.transform.localScale != Vector3.one) + Debug.Log("New Spine GameObject was parented to a scaled Transform. It may not be the intended size."); + + Selection.activeGameObject = newGameObject; + Undo.RegisterCreatedObjectUndo(newGameObject, "Create Spine GameObject"); + } + + /// + /// Rounds off vector components to a number of decimal digits. + /// + public static Vector3 RoundVector (Vector3 vector, int digits) { + vector.x = (float)System.Math.Round(vector.x, digits); + vector.y = (float)System.Math.Round(vector.y, digits); + vector.z = (float)System.Math.Round(vector.z, digits); + return vector; + } + + /// + /// Converts a mouse point to a world point on a plane. + /// + static Vector3 MousePointToWorldPoint2D (Vector2 mousePosition, Camera camera, Plane plane) { + var screenPos = new Vector3(mousePosition.x, camera.pixelHeight - mousePosition.y, 0f); + var ray = camera.ScreenPointToRay(screenPos); + float distance; + bool hit = plane.Raycast(ray, out distance); + return ray.GetPoint(distance); + } + #endregion + #region Hierarchy Icons static void HierarchyWindowChanged () { skeletonRendererTable.Clear(); @@ -308,9 +478,9 @@ namespace Spine.Unity.Editor { } public static void ImportSpineContent (string[] imported, bool reimport = false) { - List atlasPaths = new List(); - List imagePaths = new List(); - List skeletonPaths = new List(); + var atlasPaths = new List(); + var imagePaths = new List(); + var skeletonPaths = new List(); foreach (string str in imported) { string extension = Path.GetExtension(str).ToLower(); @@ -369,9 +539,9 @@ namespace Spine.Unity.Editor { var filename = Path.GetFileNameWithoutExtension(sp); int result = EditorUtility.DisplayDialogComplex( - string.Format("Missing AtlasAsset for \"{0}\"", filename), - string.Format("Could not find matching AtlasAsset for \"{0}\"", filename), - "Choose AtlaseAssets...", "Skip this", "Stop importing all" + string.Format("AtlasAsset for \"{0}\"", filename), + string.Format("Could not automatically set the AtlasAsset for \"{0}\". You may set it manually.", filename), + "Choose AtlasAssets...", "Skip this", "Stop importing all" ); switch (result) { @@ -388,7 +558,7 @@ namespace Spine.Unity.Editor { } } break; - case 0: // Choose AtlaseAssets... + case 0: // Choose AtlasAssets... var atlasList = MultiAtlasDialog(requiredPaths, Path.GetDirectoryName(sp), Path.GetFileNameWithoutExtension(sp)); if (atlasList != null) IngestSpineProject(AssetDatabase.LoadAssetAtPath(sp, typeof(TextAsset)) as TextAsset, atlasList.ToArray()); @@ -471,6 +641,8 @@ namespace Spine.Unity.Editor { #endregion #region Match SkeletonData with Atlases + static readonly AttachmentType[] NonAtlasTypes = { AttachmentType.Boundingbox, AttachmentType.Path }; + static List MultiAtlasDialog (List requiredPaths, string initialDirectory, string filename = "") { List atlasAssets = new List(); bool resolved = false; @@ -552,7 +724,6 @@ namespace Spine.Unity.Editor { static AtlasAsset GetAtlasDialog (string dirPath) { string path = EditorUtility.OpenFilePanel("Select AtlasAsset...", dirPath, "asset"); - if (path == "") return null; // Canceled or closed by user. int subLen = Application.dataPath.Length - 6; @@ -587,15 +758,29 @@ namespace Spine.Unity.Editor { StringReader reader = new StringReader(spineJson.text); var root = Json.Deserialize(reader) as Dictionary; + foreach (KeyValuePair entry in (Dictionary)root["skins"]) { foreach (KeyValuePair slotEntry in (Dictionary)entry.Value) { foreach (KeyValuePair attachmentEntry in ((Dictionary)slotEntry.Value)) { var data = ((Dictionary)attachmentEntry.Value); + + // Ignore non-atlas-requiring types. if (data.ContainsKey("type")) { - if ((string)data["type"] == "boundingbox") + AttachmentType attachmentType; + string typeString = (string)data["type"]; + try { + attachmentType = (AttachmentType)System.Enum.Parse(typeof(AttachmentType), typeString, true); + } catch (System.ArgumentException e) { + // For more info, visit: http://esotericsoftware.com/forum/Spine-editor-and-runtime-version-management-6534 + Debug.LogWarning(string.Format("Unidentified Attachment type: \"{0}\". Skeleton may have been exported from an incompatible Spine version.", typeString)); + throw e; + } + + if (NonAtlasTypes.Contains(attachmentType)) continue; } + if (data.ContainsKey("path")) requiredPaths.Add((string)data["path"]); else if (data.ContainsKey("name")) @@ -633,6 +818,7 @@ namespace Spine.Unity.Editor { public class AtlasRequirementLoader : AttachmentLoader { List requirementList; + public AtlasRequirementLoader (List requirementList) { this.requirementList = requirementList; } @@ -647,14 +833,13 @@ namespace Spine.Unity.Editor { return new MeshAttachment(name); } - public WeightedMeshAttachment NewWeightedMeshAttachment(Skin skin, string name, string path) { - requirementList.Add(path); - return new WeightedMeshAttachment(name); - } - public BoundingBoxAttachment NewBoundingBoxAttachment (Skin skin, string name) { return new BoundingBoxAttachment(name); } + + public PathAttachment NewPathAttachment (Skin skin, string name) { + return new PathAttachment(name); + } } #endregion @@ -697,6 +882,7 @@ namespace Spine.Unity.Editor { vestigialMaterials.Add(m); } + protectFromStackGarbageCollection.Add(atlasAsset); atlasAsset.atlasFile = atlasText; //strip CR @@ -721,8 +907,10 @@ namespace Spine.Unity.Editor { texImporter.textureFormat = TextureImporterFormat.AutomaticTruecolor; texImporter.mipmapEnabled = false; texImporter.alphaIsTransparency = false; + texImporter.spriteImportMode = SpriteImportMode.None; texImporter.maxTextureSize = 2048; + EditorUtility.SetDirty(texImporter); AssetDatabase.ImportAsset(texturePath); AssetDatabase.SaveAssets(); @@ -785,6 +973,7 @@ namespace Spine.Unity.Editor { AssetDatabase.Refresh(); } + protectFromStackGarbageCollection.Remove(atlasAsset); return (AtlasAsset)AssetDatabase.LoadAssetAtPath(atlasPath, typeof(AtlasAsset)); } #endregion @@ -897,6 +1086,9 @@ namespace Spine.Unity.Editor { #endregion #region Checking Methods + static int[][] compatibleVersions = { new[] {3, 4, 0}, new[] {3, 3, 0} }; + static bool isFixVersionRequired = false; + static bool CheckForValidSkeletonData (string skeletonJSONPath) { string dir = Path.GetDirectoryName(skeletonJSONPath); TextAsset textAsset = (TextAsset)AssetDatabase.LoadAssetAtPath(skeletonJSONPath, typeof(TextAsset)); @@ -931,11 +1123,37 @@ namespace Spine.Unity.Editor { return false; } + // Version warning + { + var skeletonInfo = (Dictionary)root["skeleton"]; + string jsonVersion = (string)skeletonInfo["spine"]; + if (!string.IsNullOrEmpty(jsonVersion)) { + string[] jsonVersionSplit = jsonVersion.Split('.'); + bool match = false; + foreach (var version in compatibleVersions) { + bool primaryMatch = version[0] == int.Parse(jsonVersionSplit[0]); + bool secondaryMatch = version[1] == int.Parse(jsonVersionSplit[1]); + + if (isFixVersionRequired) + secondaryMatch &= version[2] <= int.Parse(jsonVersionSplit[2]); + + if (primaryMatch && secondaryMatch) { + match = true; + break; + } + } + + if (!match) { + string runtimeVersion = compatibleVersions[0][0] + "." + compatibleVersions[0][1]; + Debug.LogWarning(string.Format("Skeleton '{0}' (exported with Spine {1}) may be incompatible with your runtime version: spine-unity v{2}", asset.name, jsonVersion, runtimeVersion)); + } + } + } + + return root.ContainsKey("skeleton"); - // TODO: Warn users of old version incompatibility. - // var skeletonInfo = (Dictionary)root["skeleton"]; - // string spineVersion = (string)skeletonInfo["spine"]; + } #endregion @@ -947,7 +1165,7 @@ namespace Spine.Unity.Editor { string guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(o)); string skinName = EditorPrefs.GetString(guid + "_lastSkin", ""); - InstantiateSkeletonAnimation((SkeletonDataAsset)o, skinName); + InstantiateSkeletonAnimation((SkeletonDataAsset)o, skinName, false); SceneView.RepaintAll(); } } @@ -967,31 +1185,13 @@ namespace Spine.Unity.Editor { return true; } - public static SkeletonAnimation InstantiateSkeletonAnimation (SkeletonDataAsset skeletonDataAsset, string skinName) { + public static SkeletonAnimation InstantiateSkeletonAnimation (SkeletonDataAsset skeletonDataAsset, string skinName, bool destroyInvalid = true) { var skeletonData = skeletonDataAsset.GetSkeletonData(true); var skin = skeletonData != null ? skeletonData.FindSkin(skinName) : null; - return InstantiateSkeletonAnimation(skeletonDataAsset, skin); + return InstantiateSkeletonAnimation(skeletonDataAsset, skin, destroyInvalid); } - public static SkeletonAnimation InstantiateSkeletonAnimation (SkeletonDataAsset skeletonDataAsset, Skin skin = null) { - string spineGameObjectName = string.Format("Spine GameObject ({0})", skeletonDataAsset.name.Replace("_SkeletonData", "")); - GameObject go = new GameObject(spineGameObjectName, typeof(MeshFilter), typeof(MeshRenderer), typeof(SkeletonAnimation)); - SkeletonAnimation newSkeletonAnimation = go.GetComponent(); - newSkeletonAnimation.skeletonDataAsset = skeletonDataAsset; - - bool requiresNormals = false; - - foreach (AtlasAsset atlasAsset in newSkeletonAnimation.skeletonDataAsset.atlasAssets) { - foreach (Material m in atlasAsset.materials) { - if (m.shader.name.Contains("Lit")) { - requiresNormals = true; - break; - } - } - } - - newSkeletonAnimation.calculateNormals = requiresNormals; - + public static SkeletonAnimation InstantiateSkeletonAnimation (SkeletonDataAsset skeletonDataAsset, Skin skin = null, bool destroyInvalid = true) { SkeletonData data = skeletonDataAsset.GetSkeletonData(true); if (data == null) { @@ -1003,17 +1203,40 @@ namespace Spine.Unity.Editor { } if (data == null) { - Debug.LogWarning("Tried to instantiate a skeleton from an invalid SkeletonDataAsset."); + Debug.LogWarning("InstantiateSkeletonAnimation tried to instantiate a skeleton from an invalid SkeletonDataAsset."); return null; } - if (skin == null) - skin = data.DefaultSkin; + if (skin == null) skin = data.DefaultSkin; + if (skin == null) skin = data.Skins.Items[0]; - if (skin == null) - skin = data.Skins.Items[0]; + string spineGameObjectName = string.Format("Spine GameObject ({0})", skeletonDataAsset.name.Replace("_SkeletonData", "")); + GameObject go = new GameObject(spineGameObjectName, typeof(MeshFilter), typeof(MeshRenderer), typeof(SkeletonAnimation)); + SkeletonAnimation newSkeletonAnimation = go.GetComponent(); + newSkeletonAnimation.skeletonDataAsset = skeletonDataAsset; - newSkeletonAnimation.Initialize(false); + { + bool requiresNormals = false; + foreach (AtlasAsset atlasAsset in skeletonDataAsset.atlasAssets) { + foreach (Material m in atlasAsset.materials) { + if (m.shader.name.Contains("Lit")) { + requiresNormals = true; + break; + } + } + } + newSkeletonAnimation.calculateNormals = requiresNormals; + } + + try { + newSkeletonAnimation.Initialize(false); + } catch (System.Exception e) { + if (destroyInvalid) { + Debug.LogWarning("Editor-instantiated SkeletonAnimation threw an Exception. Destroying GameObject to prevent orphaned GameObject."); + GameObject.DestroyImmediate(go); + } + throw e; + } newSkeletonAnimation.skeleton.SetSkin(skin); newSkeletonAnimation.initialSkinName = skin.Name; @@ -1073,6 +1296,7 @@ namespace Spine.Unity.Editor { if (skeletonDataAsset.controller == null) { SkeletonBaker.GenerateMecanimAnimationClips(skeletonDataAsset); + Debug.Log(string.Format("Mecanim controller was automatically generated and assigned for {0}", skeletonDataAsset.name)); } go.GetComponent().runtimeAnimatorController = skeletonDataAsset.controller; diff --git a/spine-unity/Assets/spine-unity/ISkeletonAnimation.cs b/spine-unity/Assets/spine-unity/ISkeletonAnimation.cs index fddac4897..44d664708 100644 --- a/spine-unity/Assets/spine-unity/ISkeletonAnimation.cs +++ b/spine-unity/Assets/spine-unity/ISkeletonAnimation.cs @@ -31,7 +31,9 @@ using UnityEngine; namespace Spine.Unity { - public delegate void UpdateBonesDelegate (ISkeletonAnimation skeletonRenderer); + public delegate void UpdateBonesDelegate (ISkeletonAnimation animatedSkeletonComponent); + + /// A Spine-Unity Component that animates a Skeleton but not necessarily with a Spine.AnimationState. public interface ISkeletonAnimation { event UpdateBonesDelegate UpdateLocal; event UpdateBonesDelegate UpdateWorld; @@ -39,5 +41,20 @@ namespace Spine.Unity { void LateUpdate (); Skeleton Skeleton { get; } - } + } + + /// A Spine-Unity Component that manages a Spine.Skeleton instance, instantiated from a SkeletonDataAsset. + public interface ISkeletonComponent { + /// Gets the SkeletonDataAsset of the Spine Component. + SkeletonDataAsset SkeletonDataAsset { get; } + + /// Gets the Spine.Skeleton instance of the Spine Component. This is equivalent to SkeletonRenderer's .skeleton. + Skeleton Skeleton { get; } + } + + /// A Spine-Unity Component that uses a Spine.AnimationState to animate its skeleton. + public interface IAnimationStateComponent { + /// Gets the Spine.AnimationState of the animated Spine Component. This is equivalent to SkeletonAnimation.state. + AnimationState AnimationState { get; } + } } diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysMeshGenerator.cs b/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysMeshGenerator.cs index f71feb554..880150b61 100644 --- a/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysMeshGenerator.cs +++ b/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysMeshGenerator.cs @@ -34,8 +34,11 @@ using UnityEngine; namespace Spine.Unity.MeshGeneration { public class ArraysMeshGenerator { #region Settings - protected bool premultiplyVertexColors = true; - public bool PremultiplyVertexColors { get { return this.premultiplyVertexColors; } set { this.premultiplyVertexColors = value; } } + public bool PremultiplyVertexColors { get; set; } + protected bool addNormals; + public bool AddNormals { get { return addNormals; } set { addNormals = value; } } + protected bool addTangents; + public bool AddTangents { get { return addTangents; } set { addTangents = value; } } #endregion protected float[] attachmentVertexBuffer = new float[8]; @@ -43,25 +46,22 @@ namespace Spine.Unity.MeshGeneration { protected Color32[] meshColors32; protected Vector2[] meshUVs; - - protected bool generateNormals = false; - public bool GenerateNormals { - get { return generateNormals; } - set { generateNormals = value; } - } - - Vector3[] meshNormals; + #if SPINE_OPTIONAL_NORMALS + protected Vector3[] meshNormals; + #endif + protected Vector4[] meshTangents; + protected Vector2[] tempTanBuffer; public void TryAddNormalsTo (Mesh mesh, int targetVertexCount) { #if SPINE_OPTIONAL_NORMALS - if (generateNormals) { - bool verticesWasResized = this.meshNormals == null || targetVertexCount > meshNormals.Length; + if (addNormals) { + bool verticesWasResized = this.meshNormals == null || meshNormals.Length < targetVertexCount; if (verticesWasResized) { this.meshNormals = new Vector3[targetVertexCount]; - Vector3 normal = new Vector3(0, 0, -1); + Vector3 fixedNormal = new Vector3(0, 0, -1f); Vector3[] normals = this.meshNormals; for (int i = 0; i < targetVertexCount; i++) - normals[i] = normal; + normals[i] = fixedNormal; } mesh.normals = this.meshNormals; @@ -69,7 +69,8 @@ namespace Spine.Unity.MeshGeneration { #endif } - + /// Ensures the sizes of the passed array references. If they are not the correct size, a new array will be assigned to the references. + /// true, if a resize occurred, false otherwise. public static bool EnsureSize (int targetVertexCount, ref Vector3[] vertices, ref Vector2[] uvs, ref Color32[] colors) { Vector3[] verts = vertices; bool verticesWasResized = verts == null || targetVertexCount > verts.Length; @@ -97,12 +98,10 @@ namespace Spine.Unity.MeshGeneration { return submeshBuffersWasResized; } - /// - /// Fills vertex arrays. - /// + /// Fills Unity vertex data buffers with verts from the Spine Skeleton. /// Spine.Skeleton source of the drawOrder array /// Slot index of the first slot. - /// The index bounding the slot list. endSlot - 1 is the last slot to be added. + /// The index bounding the slot list. [endSlot - 1] is the last slot to be added. /// Spacing along the z-axis between attachments. /// If set to true, vertex colors will be premultiplied. This will also enable additive. /// Vertex positions array. @@ -112,7 +111,8 @@ namespace Spine.Unity.MeshGeneration { /// A temporary vertex position buffer for attachment position values. /// Reference to the running calculated minimum bounds. /// Reference to the running calculated maximum bounds. - public static void FillVerts (Skeleton skeleton, int startSlot, int endSlot, float zSpacing, bool pmaColors, Vector3[] verts, Vector2[] uvs, Color32[] colors, ref int vertexIndex, ref float[] tempVertBuffer, ref Vector3 boundsMin, ref Vector3 boundsMax) { + /// Include MeshAttachments. If false, it will ignore MeshAttachments. + public static void FillVerts (Skeleton skeleton, int startSlot, int endSlot, float zSpacing, bool pmaColors, Vector3[] verts, Vector2[] uvs, Color32[] colors, ref int vertexIndex, ref float[] tempVertBuffer, ref Vector3 boundsMin, ref Vector3 boundsMax, bool renderMeshes = true) { Color32 color; var skeletonDrawOrderItems = skeleton.DrawOrder.Items; float a = skeleton.a * 255, r = skeleton.r, g = skeleton.g, b = skeleton.b; @@ -183,10 +183,10 @@ namespace Spine.Unity.MeshGeneration { else if (y4 > bmax.y) bmax.y = y4; vi += 4; - } else { + } else if (renderMeshes) { var meshAttachment = attachment as MeshAttachment; if (meshAttachment != null) { - int meshVertexCount = meshAttachment.vertices.Length; + int meshVertexCount = meshAttachment.worldVerticesLength; if (tempVerts.Length < meshVertexCount) tempVerts = new float[meshVertexCount]; meshAttachment.ComputeWorldVertices(slot, tempVerts); @@ -217,41 +217,6 @@ namespace Spine.Unity.MeshGeneration { vi++; } - } else { - var weightedMeshAttachment = attachment as WeightedMeshAttachment; - if (weightedMeshAttachment != null) { - int meshVertexCount = weightedMeshAttachment.uvs.Length; - if (tempVerts.Length < meshVertexCount) tempVerts = new float[meshVertexCount]; - weightedMeshAttachment.ComputeWorldVertices(slot, tempVerts); - - if (pmaColors) { - color.a = (byte)(a * slot.a * weightedMeshAttachment.a); - color.r = (byte)(r * slot.r * weightedMeshAttachment.r * color.a); - color.g = (byte)(g * slot.g * weightedMeshAttachment.g * color.a); - color.b = (byte)(b * slot.b * weightedMeshAttachment.b * color.a); - if (slot.data.blendMode == BlendMode.additive) color.a = 0; - } else { - color.a = (byte)(a * slot.a * weightedMeshAttachment.a); - color.r = (byte)(r * slot.r * weightedMeshAttachment.r * 255); - color.g = (byte)(g * slot.g * weightedMeshAttachment.g * 255); - color.b = (byte)(b * slot.b * weightedMeshAttachment.b * 255); - } - - float[] attachmentUVs = weightedMeshAttachment.uvs; - for (int iii = 0; iii < meshVertexCount; iii += 2) { - float x = tempVerts[iii], y = tempVerts[iii + 1]; - verts[vi].x = x; verts[vi].y = y; verts[vi].z = z; - colors[vi] = color; - uvs[vi].x = attachmentUVs[iii]; uvs[vi].y = attachmentUVs[iii + 1]; - - if (x < bmin.x) bmin.x = x; - else if (x > bmax.x) bmax.x = x; - if (y < bmin.y) bmin.y = y; - else if (y > bmax.y) bmax.y = y; - - vi++; - } - } } } } @@ -264,22 +229,18 @@ namespace Spine.Unity.MeshGeneration { } - /// - /// Fills a submesh triangle buffer array. - /// + /// Fills a submesh triangle buffer array. /// Spine.Skeleton source of draw order slots. /// The target triangle count. /// First vertex of this submesh. /// Start slot. /// End slot. /// The triangle buffer array to be filled. This reference will be replaced in case the triangle values don't fit. - /// The current triangle count of the submesh buffer. This is not always equal to triangleBuffer.Length because for last submeshes, length may be larger than needed. /// If set to true, the triangle buffer is allowed to be larger than needed. - public static void FillTriangles (Skeleton skeleton, int triangleCount, int firstVertex, int startSlot, int endSlot, ref int[] triangleBuffer, bool isLastSubmesh) { + public static void FillTriangles (ref int[] triangleBuffer, Skeleton skeleton, int triangleCount, int firstVertex, int startSlot, int endSlot, bool isLastSubmesh) { int trianglesCapacity = triangleBuffer.Length; - var tris = triangleBuffer; + int[] tris = triangleBuffer; - // Ensure triangleBuffer size. if (isLastSubmesh) { if (trianglesCapacity > triangleCount) { for (int i = triangleCount; i < trianglesCapacity; i++) @@ -291,54 +252,170 @@ namespace Spine.Unity.MeshGeneration { triangleBuffer = tris = new int[triangleCount]; } - // Iterate through submesh slots and store the triangles. - int triangleIndex = 0; - int afv = firstVertex; // attachment first vertex var skeletonDrawOrderItems = skeleton.drawOrder.Items; - for (int i = startSlot, n = endSlot; i < n; i++) { + for (int i = startSlot, n = endSlot, ti = 0, afv = firstVertex; i < n; i++) { var attachment = skeletonDrawOrderItems[i].attachment; + // RegionAttachment if (attachment is RegionAttachment) { - tris[triangleIndex] = afv; tris[triangleIndex + 1] = afv + 2; tris[triangleIndex + 2] = afv + 1; - tris[triangleIndex + 3] = afv + 2; tris[triangleIndex + 4] = afv + 3; tris[triangleIndex + 5] = afv + 1; - - triangleIndex += 6; + tris[ti] = afv; + tris[ti + 1] = afv + 2; + tris[ti + 2] = afv + 1; + tris[ti + 3] = afv + 2; + tris[ti + 4] = afv + 3; + tris[ti + 5] = afv + 1; + ti += 6; afv += 4; - } else { - int[] attachmentTriangles; - int attachmentVertexCount; - var meshAttachment = attachment as MeshAttachment; - if (meshAttachment != null) { - attachmentVertexCount = meshAttachment.vertices.Length >> 1; // length/2 - attachmentTriangles = meshAttachment.triangles; - } else { - var weightedMeshAttachment = attachment as WeightedMeshAttachment; - if (weightedMeshAttachment != null) { - attachmentVertexCount = weightedMeshAttachment.uvs.Length >> 1; // length/2 - attachmentTriangles = weightedMeshAttachment.triangles; - } else - continue; - } - - for (int ii = 0, nn = attachmentTriangles.Length; ii < nn; ii++, triangleIndex++) - tris[triangleIndex] = afv + attachmentTriangles[ii]; - - afv += attachmentVertexCount; + continue; } - } // Done adding current submesh triangles + + // MeshAttachment + var meshAttachment = attachment as MeshAttachment; + if (meshAttachment != null) { + int[] attachmentTriangles = meshAttachment.triangles; + for (int ii = 0, nn = attachmentTriangles.Length; ii < nn; ii++, ti++) + tris[ti] = afv + attachmentTriangles[ii]; + + afv += meshAttachment.worldVerticesLength >> 1; // length/2; + } + + } } + public static void FillTrianglesQuads (ref int[] triangleBuffer, ref int storedTriangleCount, ref int storedFirstVertex, int instructionsFirstVertex, int instructionTriangleCount, bool isLastSubmesh) { + int trianglesCapacity = triangleBuffer.Length; + if (isLastSubmesh && trianglesCapacity > instructionTriangleCount) { + for (int i = instructionTriangleCount; i < trianglesCapacity; i++) + triangleBuffer[i] = 0; + storedTriangleCount = instructionTriangleCount; + } else if (trianglesCapacity != instructionTriangleCount) { + triangleBuffer = new int[instructionTriangleCount]; + storedTriangleCount = 0; + } + + // Use stored quad triangles if possible. + int[] tris = triangleBuffer; + if (storedFirstVertex != instructionsFirstVertex || storedTriangleCount < instructionTriangleCount) { //|| storedTriangleCount == 0 + storedTriangleCount = instructionTriangleCount; + storedFirstVertex = instructionsFirstVertex; + int afv = instructionsFirstVertex; // attachment first vertex + for (int ti = 0; ti < instructionTriangleCount; ti += 6, afv += 4) { + tris[ti] = afv; + tris[ti + 1] = afv + 2; + tris[ti + 2] = afv + 1; + tris[ti + 3] = afv + 2; + tris[ti + 4] = afv + 3; + tris[ti + 5] = afv + 1; + } + } + } + + /// Creates a UnityEngine.Bounds struct from minimum and maximum value vectors. public static Bounds ToBounds (Vector3 boundsMin, Vector3 boundsMax) { Vector3 size = (boundsMax - boundsMin); Vector3 center = boundsMin + size * 0.5f; return new Bounds(center, size); } + #region TangentSolver2D + // Thanks to contributions from forum user ToddRivers + + /// Step 1 of solving tangents. Ensure you have buffers of the correct size. + /// Eventual Vector4[] tangent buffer to assign to Mesh.tangents. + /// Temporary Vector2 buffer for calculating directions. + /// Number of vertices that require tangents (or the size of the vertex array) + public static void SolveTangents2DEnsureSize (ref Vector4[] tangentBuffer, ref Vector2[] tempTanBuffer, int vertexCount) { + if (tangentBuffer == null || tangentBuffer.Length < vertexCount) + tangentBuffer = new Vector4[vertexCount]; + + if (tempTanBuffer == null || tempTanBuffer.Length < vertexCount * 2) + tempTanBuffer = new Vector2[vertexCount * 2]; // two arrays in one. + } + + /// Step 2 of solving tangents. Fills (part of) a temporary tangent-solution buffer based on the vertices and uvs defined by a submesh's triangle buffer. Only needs to be called once for single-submesh meshes. + /// A temporary Vector3[] for calculating tangents. + /// The mesh's current vertex position buffer. + /// The mesh's current triangles buffer. + /// The mesh's current uvs buffer. + /// Number of vertices that require tangents (or the size of the vertex array) + /// The number of triangle indexes in the triangle array to be used. + public static void SolveTangents2DTriangles (Vector2[] tempTanBuffer, int[] triangles, int triangleCount, Vector3[] vertices, Vector2[] uvs, int vertexCount) { + Vector2 sdir; + Vector2 tdir; + for (int t = 0; t < triangleCount; t += 3) { + int i1 = triangles[t + 0]; + int i2 = triangles[t + 1]; + int i3 = triangles[t + 2]; + + Vector3 v1 = vertices[i1]; + Vector3 v2 = vertices[i2]; + Vector3 v3 = vertices[i3]; + + Vector2 w1 = uvs[i1]; + Vector2 w2 = uvs[i2]; + Vector2 w3 = uvs[i3]; + + float x1 = v2.x - v1.x; + float x2 = v3.x - v1.x; + float y1 = v2.y - v1.y; + float y2 = v3.y - v1.y; + + float s1 = w2.x - w1.x; + float s2 = w3.x - w1.x; + float t1 = w2.y - w1.y; + float t2 = w3.y - w1.y; + + float div = s1 * t2 - s2 * t1; + float r = (div == 0f) ? 0f : 1f / div; + + sdir.x = (t2 * x1 - t1 * x2) * r; + sdir.y = (t2 * y1 - t1 * y2) * r; + tempTanBuffer[i1] = tempTanBuffer[i2] = tempTanBuffer[i3] = sdir; + + tdir.x = (s1 * x2 - s2 * x1) * r; + tdir.y = (s1 * y2 - s2 * y1) * r; + tempTanBuffer[vertexCount + i1] = tempTanBuffer[vertexCount + i2] = tempTanBuffer[vertexCount + i3] = tdir; + } + } + + /// Step 3 of solving tangents. Fills a Vector4[] tangents array according to values calculated in step 2. + /// A Vector4[] that will eventually be used to set Mesh.tangents + /// A temporary Vector3[] for calculating tangents. + /// Number of vertices that require tangents (or the size of the vertex array) + public static void SolveTangents2DBuffer (Vector4[] tangents, Vector2[] tempTanBuffer, int vertexCount) { + + Vector4 tangent; + tangent.z = 0; + for (int i = 0; i < vertexCount; ++i) { + Vector2 t = tempTanBuffer[i]; + + // t.Normalize() (aggressively inlined). Even better if offloaded to GPU via vertex shader. + float magnitude = Mathf.Sqrt(t.x * t.x + t.y * t.y); + if (magnitude > 1E-05) { + float reciprocalMagnitude = 1f/magnitude; + t.x *= reciprocalMagnitude; + t.y *= reciprocalMagnitude; + } + + Vector2 t2 = tempTanBuffer[vertexCount + i]; + tangent.x = t.x; + tangent.y = t.y; + //tangent.z = 0; + tangent.w = (t.y * t2.x > t.x * t2.y) ? 1 : -1; // 2D direction calculation. Used for binormals. + tangents[i] = tangent; + } + + } + #endregion + #region SubmeshTriangleBuffer public class SubmeshTriangleBuffer { public int[] triangles; - //public int triangleCount; + public int triangleCount; // for last/single submeshes with potentially zeroed triangles. + public int firstVertex = -1; // for !renderMeshes. + + public SubmeshTriangleBuffer () { } public SubmeshTriangleBuffer (int triangleCount) { triangles = new int[triangleCount]; diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysSimpleMeshGenerator.cs b/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysSimpleMeshGenerator.cs index ae3c70e58..6c5f76024 100644 --- a/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysSimpleMeshGenerator.cs +++ b/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysSimpleMeshGenerator.cs @@ -34,18 +34,15 @@ namespace Spine.Unity.MeshGeneration { public class ArraysSimpleMeshGenerator : ArraysMeshGenerator, ISimpleMeshGenerator { #region Settings protected float scale = 1f; - public float Scale { - get { return scale; } - set { scale = value; } - } + public float Scale { get { return scale; } set { scale = value; } } + public float ZSpacing { get; set; } #endregion - private Mesh lastGeneratedMesh; + protected Mesh lastGeneratedMesh; public Mesh LastGeneratedMesh { get { return lastGeneratedMesh; } } readonly DoubleBufferedMesh doubleBufferedMesh = new DoubleBufferedMesh(); int[] triangles; - int triangleBufferCount; public Mesh GenerateMesh (Skeleton skeleton) { int totalVertexCount = 0; // size of vertex arrays @@ -65,15 +62,10 @@ namespace Spine.Unity.MeshGeneration { } else { var meshAttachment = attachment as MeshAttachment; if (meshAttachment != null) { - attachmentVertexCount = meshAttachment.vertices.Length >> 1; + attachmentVertexCount = meshAttachment.worldVerticesLength >> 1; attachmentTriangleCount = meshAttachment.triangles.Length; } else { - var skinnedMeshAttachment = attachment as WeightedMeshAttachment; - if (skinnedMeshAttachment != null) { - attachmentVertexCount = skinnedMeshAttachment.uvs.Length >> 1; - attachmentTriangleCount = skinnedMeshAttachment.triangles.Length; - } else - continue; + continue; } } totalTriangleCount += attachmentTriangleCount; @@ -85,7 +77,6 @@ namespace Spine.Unity.MeshGeneration { this.triangles = this.triangles ?? new int[totalTriangleCount]; // STEP 3 : Update vertex buffer - const float zSpacing = 0; const float zFauxHalfThickness = 0.01f; // Somehow needs this thickness for bounds to work properly in some cases (eg, Unity UI clipping) Vector3 meshBoundsMin; Vector3 meshBoundsMax; @@ -101,7 +92,7 @@ namespace Spine.Unity.MeshGeneration { meshBoundsMax.z = zFauxHalfThickness * scale; int vertexIndex = 0; - ArraysMeshGenerator.FillVerts(skeleton, 0, drawOrderCount, zSpacing, this.premultiplyVertexColors, this.meshVertices, this.meshUVs, this.meshColors32, ref vertexIndex, ref this.attachmentVertexBuffer, ref meshBoundsMin, ref meshBoundsMax); + ArraysMeshGenerator.FillVerts(skeleton, 0, drawOrderCount, this.ZSpacing, this.PremultiplyVertexColors, this.meshVertices, this.meshUVs, this.meshColors32, ref vertexIndex, ref this.attachmentVertexBuffer, ref meshBoundsMin, ref meshBoundsMax); // Apply scale to vertices meshBoundsMax.x *= scale; meshBoundsMax.y *= scale; @@ -116,7 +107,7 @@ namespace Spine.Unity.MeshGeneration { } // Step 4 : Update Triangles buffer - ArraysMeshGenerator.FillTriangles(skeleton, totalTriangleCount, 0, 0, drawOrderCount, ref this.triangles, true); + ArraysMeshGenerator.FillTriangles(ref this.triangles, skeleton, totalTriangleCount, 0, 0, drawOrderCount, true); // Step 5 : Update Mesh with buffers var mesh = doubleBufferedMesh.GetNextMesh(); @@ -125,6 +116,13 @@ namespace Spine.Unity.MeshGeneration { mesh.uv = meshUVs; mesh.bounds = ArraysMeshGenerator.ToBounds(meshBoundsMin, meshBoundsMax); mesh.triangles = triangles; + TryAddNormalsTo(mesh, totalVertexCount); + + if (addTangents) { + SolveTangents2DEnsureSize(ref this.meshTangents, ref this.tempTanBuffer, totalVertexCount); + SolveTangents2DTriangles(this.tempTanBuffer, triangles, totalTriangleCount, meshVertices, meshUVs, totalVertexCount); + SolveTangents2DBuffer(this.meshTangents, this.tempTanBuffer, totalVertexCount); + } lastGeneratedMesh = mesh; return mesh; diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysSubmeshSetMeshGenerator.cs b/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysSubmeshSetMeshGenerator.cs index eca7b8d40..bccdfc3b0 100644 --- a/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysSubmeshSetMeshGenerator.cs +++ b/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysSubmeshSetMeshGenerator.cs @@ -28,13 +28,12 @@ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -#define SPINE_OPTIONAL_NORMALS using UnityEngine; namespace Spine.Unity.MeshGeneration { public class ArraysSubmeshSetMeshGenerator : ArraysMeshGenerator, ISubmeshSetMeshGenerator { #region Settings - public float zSpacing = 0f; + public float ZSpacing { get; set; } #endregion readonly DoubleBuffered doubleBufferedSmartMesh = new DoubleBuffered(); @@ -69,7 +68,7 @@ namespace Spine.Unity.MeshGeneration { // Initial values for manual Mesh Bounds calculation Vector3 meshBoundsMin; Vector3 meshBoundsMax; - float zSpacing = this.zSpacing; + float zSpacing = this.ZSpacing; if (vertexCount <= 0) { meshBoundsMin = new Vector3(0, 0, 0); meshBoundsMax = new Vector3(0, 0, 0); @@ -103,7 +102,7 @@ namespace Spine.Unity.MeshGeneration { var ca = skeletonDrawOrderItems[i].attachment; if (ca != null) workingAttachments.Add(ca); // Includes BoundingBoxes. This is ok. } - ArraysMeshGenerator.FillVerts(skeleton, startSlot, endSlot, zSpacing, this.premultiplyVertexColors, this.meshVertices, this.meshUVs, this.meshColors32, ref vertexIndex, ref this.attachmentVertexBuffer, ref meshBoundsMin, ref meshBoundsMax); + ArraysMeshGenerator.FillVerts(skeleton, startSlot, endSlot, zSpacing, this.PremultiplyVertexColors, this.meshVertices, this.meshUVs, this.meshColors32, ref vertexIndex, ref this.attachmentVertexBuffer, ref meshBoundsMin, ref meshBoundsMax); } bool structureDoesntMatch = vertBufferResized || submeshBuffersResized || smartMesh.StructureDoesntMatch(workingAttachments, currentInstructions); @@ -112,7 +111,9 @@ namespace Spine.Unity.MeshGeneration { if (structureDoesntMatch) { var currentBuffer = submeshBuffers.Items[submeshIndex]; bool isLastSubmesh = (submeshIndex == submeshCount - 1); - ArraysMeshGenerator.FillTriangles(currentInstruction.skeleton, currentInstruction.triangleCount, currentInstruction.firstVertexIndex, currentInstruction.startSlot, currentInstruction.endSlot, ref currentBuffer.triangles, isLastSubmesh); + ArraysMeshGenerator.FillTriangles(ref currentBuffer.triangles, currentInstruction.skeleton, currentInstruction.triangleCount, currentInstruction.firstVertexIndex, currentInstruction.startSlot, currentInstruction.endSlot, isLastSubmesh); + currentBuffer.triangleCount = currentInstruction.triangleCount; + currentBuffer.firstVertex = currentInstruction.firstVertexIndex; } } @@ -124,15 +125,26 @@ namespace Spine.Unity.MeshGeneration { // STEP 3: Assign the buffers into the Mesh. smartMesh.Set(this.meshVertices, this.meshUVs, this.meshColors32, workingAttachments, currentInstructions); mesh.bounds = ArraysMeshGenerator.ToBounds(meshBoundsMin, meshBoundsMax); - #if SPINE_OPTIONAL_NORMALS - this.TryAddNormalsTo(mesh, vertexCount); - #endif + if (structureDoesntMatch) { // Push new triangles if doesn't match. mesh.subMeshCount = submeshCount; for (int i = 0; i < submeshCount; i++) mesh.SetTriangles(submeshBuffers.Items[i].triangles, i); + + this.TryAddNormalsTo(mesh, vertexCount); + } + + if (addTangents) { + SolveTangents2DEnsureSize(ref this.meshTangents, ref this.tempTanBuffer, vertexCount); + + for (int i = 0, n = submeshCount; i < n; i++) { + var submesh = submeshBuffers.Items[i]; + SolveTangents2DTriangles(this.tempTanBuffer, submesh.triangles, submesh.triangleCount, meshVertices, meshUVs, vertexCount); + } + + SolveTangents2DBuffer(this.meshTangents, this.tempTanBuffer, vertexCount); } return new MeshAndMaterials(smartMesh.mesh, sharedMaterials); diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysSubmeshedMeshGenerator.cs b/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysSubmeshedMeshGenerator.cs index 6c9ef8d57..998a18cf5 100644 --- a/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysSubmeshedMeshGenerator.cs +++ b/spine-unity/Assets/spine-unity/Mesh Generation/Arrays/ArraysSubmeshedMeshGenerator.cs @@ -28,7 +28,6 @@ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -//#define SPINE_OPTIONAL_NORMALS using UnityEngine; using System.Collections.Generic; @@ -42,11 +41,9 @@ namespace Spine.Unity.MeshGeneration { readonly List separators = new List(); public List Separators { get { return this.separators; } } - public float zSpacing = 0f; - #if SPINE_OPTIONAL_NORMALS - public bool generateNormals; - public bool generateTangents; - #endif + #region Settings + public float ZSpacing { get; set; } + #endregion readonly DoubleBuffered doubleBufferedSmartMesh = new DoubleBuffered(); readonly SubmeshedMeshInstruction currentInstructions = new SubmeshedMeshInstruction(); @@ -91,16 +88,10 @@ namespace Spine.Unity.MeshGeneration { var meshAttachment = attachment as MeshAttachment; if (meshAttachment != null) { rendererObject = meshAttachment.RendererObject; - attachmentVertexCount = meshAttachment.vertices.Length >> 1; + attachmentVertexCount = meshAttachment.worldVerticesLength >> 1; attachmentTriangleCount = meshAttachment.triangles.Length; } else { - var skinnedMeshAttachment = attachment as WeightedMeshAttachment; - if (skinnedMeshAttachment != null) { - rendererObject = skinnedMeshAttachment.RendererObject; - attachmentVertexCount = skinnedMeshAttachment.uvs.Length >> 1; - attachmentTriangleCount = skinnedMeshAttachment.triangles.Length; - } else - continue; + continue; } } @@ -164,12 +155,13 @@ namespace Spine.Unity.MeshGeneration { var instructionList = meshInstructions.submeshInstructions; // STEP 1: Ensure correct buffer sizes. + int vertexCount = meshInstructions.vertexCount; bool submeshBuffersResized = ArraysMeshGenerator.EnsureTriangleBuffersSize(submeshBuffers, submeshCount, instructionList.Items); - bool vertBufferResized = ArraysMeshGenerator.EnsureSize(meshInstructions.vertexCount, ref this.meshVertices, ref this.meshUVs, ref this.meshColors32); + bool vertBufferResized = ArraysMeshGenerator.EnsureSize(vertexCount, ref this.meshVertices, ref this.meshUVs, ref this.meshColors32); Vector3[] vertices = this.meshVertices; // STEP 2: Update buffers based on Skeleton. - float zSpacing = this.zSpacing; + float zSpacing = this.ZSpacing; Vector3 meshBoundsMin; Vector3 meshBoundsMax; int attachmentCount = meshInstructions.attachmentList.Count; @@ -198,11 +190,13 @@ namespace Spine.Unity.MeshGeneration { int start = submeshInstruction.startSlot; int end = submeshInstruction.endSlot; var skeleton = submeshInstruction.skeleton; - ArraysMeshGenerator.FillVerts(skeleton, start, end, zSpacing, this.premultiplyVertexColors, vertices, this.meshUVs, this.meshColors32, ref vertexIndex, ref this.attachmentVertexBuffer, ref meshBoundsMin, ref meshBoundsMax); + ArraysMeshGenerator.FillVerts(skeleton, start, end, zSpacing, this.PremultiplyVertexColors, vertices, this.meshUVs, this.meshColors32, ref vertexIndex, ref this.attachmentVertexBuffer, ref meshBoundsMin, ref meshBoundsMax); if (structureDoesntMatch) { var currentBuffer = submeshBuffers.Items[submeshIndex]; bool isLastSubmesh = (submeshIndex == submeshCount - 1); - ArraysMeshGenerator.FillTriangles(skeleton, submeshInstruction.triangleCount, submeshInstruction.firstVertexIndex, start, end, ref currentBuffer.triangles, isLastSubmesh); + ArraysMeshGenerator.FillTriangles(ref currentBuffer.triangles, skeleton, submeshInstruction.triangleCount, submeshInstruction.firstVertexIndex, start, end, isLastSubmesh); + currentBuffer.triangleCount = submeshInstruction.triangleCount; + currentBuffer.firstVertex = submeshInstruction.firstVertexIndex; } } @@ -221,24 +215,16 @@ namespace Spine.Unity.MeshGeneration { for (int i = 0; i < submeshCount; i++) mesh.SetTriangles(submeshBuffers.Items[i].triangles, i); - #if SPINE_OPTIONAL_NORMALS - if (generateNormals) { - int vertexCount = meshInstructions.vertexCount; - Vector3[] normals = new Vector3[vertexCount]; - Vector3 normal = new Vector3(0, 0, -1); - for (int i = 0; i < vertexCount; i++) - normals[i] = normal; - mesh.normals = normals; + TryAddNormalsTo(mesh, vertexCount); + } - if (generateTangents) { - Vector4[] tangents = new Vector4[vertexCount]; - Vector4 tangent = new Vector4(1, 0, 0, -1); - for (int i = 0; i < vertexCount; i++) - tangents[i] = tangent; - mesh.tangents = tangents; - } + if (addTangents) { + SolveTangents2DEnsureSize(ref this.meshTangents, ref this.tempTanBuffer, vertexCount); + for (int i = 0, n = submeshCount; i < n; i++) { + var submesh = submeshBuffers.Items[i]; + SolveTangents2DTriangles(this.tempTanBuffer, submesh.triangles, submesh.triangleCount, meshVertices, meshUVs, vertexCount); } - #endif + SolveTangents2DBuffer(this.meshTangents, this.tempTanBuffer, vertexCount); } return new MeshAndMaterials(smartMesh.mesh, sharedMaterials); diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/ISimpleMeshGenerator.cs b/spine-unity/Assets/spine-unity/Mesh Generation/ISimpleMeshGenerator.cs index 1fdb9e67a..07d5a5da0 100644 --- a/spine-unity/Assets/spine-unity/Mesh Generation/ISimpleMeshGenerator.cs +++ b/spine-unity/Assets/spine-unity/Mesh Generation/ISimpleMeshGenerator.cs @@ -4,8 +4,13 @@ // The Scale property allows generated mesh to match external systems like Canvas referencePixelsPerUnit public interface ISimpleMeshGenerator { - float Scale { set; } UnityEngine.Mesh GenerateMesh (Spine.Skeleton skeleton); UnityEngine.Mesh LastGeneratedMesh { get; } + + float Scale { set; } + float ZSpacing { get; set; } + + bool AddNormals { get; set; } + bool AddTangents { get; set; } } } diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/ISubmeshedMeshGenerator.cs b/spine-unity/Assets/spine-unity/Mesh Generation/ISubmeshedMeshGenerator.cs index 285653ad7..64d13d675 100644 --- a/spine-unity/Assets/spine-unity/Mesh Generation/ISubmeshedMeshGenerator.cs +++ b/spine-unity/Assets/spine-unity/Mesh Generation/ISubmeshedMeshGenerator.cs @@ -12,6 +12,10 @@ namespace Spine.Unity.MeshGeneration { SubmeshedMeshInstruction GenerateInstruction (Skeleton skeleton); MeshAndMaterials GenerateMesh (SubmeshedMeshInstruction wholeMeshInstruction); List Separators { get; } + + float ZSpacing { get; set; } + bool AddNormals { get; set; } + bool AddTangents { get; set; } } // ISubmeshSetMeshGenerator @@ -22,7 +26,10 @@ namespace Spine.Unity.MeshGeneration { // Step 4: Put the Mesh in MeshFilter. Put the Materials in MeshRenderer.sharedMaterials. public interface ISubmeshSetMeshGenerator { MeshAndMaterials GenerateMesh (ExposedList instructions, int startSubmesh, int endSubmesh); - bool GenerateNormals { get; set; } + + float ZSpacing { get; set; } + bool AddNormals { get; set; } + bool AddTangents { get; set; } } /// Primarily a collection of Submesh Instructions. This constitutes instructions for how to construct a mesh containing submeshes. diff --git a/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/BoundingBoxFollower.cs b/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/BoundingBoxFollower.cs index c3269e13a..38e1fce87 100644 --- a/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/BoundingBoxFollower.cs +++ b/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/BoundingBoxFollower.cs @@ -32,44 +32,32 @@ using UnityEngine; using System.Collections.Generic; namespace Spine.Unity { + [ExecuteInEditMode] public class BoundingBoxFollower : MonoBehaviour { - + #region Inspector public SkeletonRenderer skeletonRenderer; - [SpineSlot(dataField: "skeletonRenderer", containsBoundingBoxes: true)] public string slotName; + public bool isTrigger; + #endregion - //TODO: not this - [Tooltip("LOL JK, Someone else do it!")] - public bool use3DMeshCollider; + Slot slot; + BoundingBoxAttachment currentAttachment; + string currentAttachmentName; + PolygonCollider2D currentCollider; - private Slot slot; - private BoundingBoxAttachment currentAttachment; - private PolygonCollider2D currentCollider; - private string currentAttachmentName; - private bool valid = false; - private bool hasReset; + bool valid = false; + bool hasReset; - public Dictionary colliderTable = new Dictionary(); - public Dictionary attachmentNameTable = new Dictionary(); - - public string CurrentAttachmentName { - get { return currentAttachmentName; } - } - - public BoundingBoxAttachment CurrentAttachment { - get { return currentAttachment; } - } - - public PolygonCollider2D CurrentCollider { - get { return currentCollider; } - } - - public Slot Slot { - get { return slot; } - } + public readonly Dictionary colliderTable = new Dictionary(); + public readonly Dictionary attachmentNameTable = new Dictionary(); + public Slot Slot { get { return slot; } } + public BoundingBoxAttachment CurrentAttachment { get { return currentAttachment; } } + public string CurrentAttachmentName { get { return currentAttachmentName; } } + public PolygonCollider2D CurrentCollider { get { return currentCollider; } } + public bool IsTrigger { get { return isTrigger; } } void OnEnable () { ClearColliders(); @@ -78,79 +66,97 @@ namespace Spine.Unity { skeletonRenderer = GetComponentInParent(); if (skeletonRenderer != null) { - skeletonRenderer.OnRebuild -= HandleReset; - skeletonRenderer.OnRebuild += HandleReset; + skeletonRenderer.OnRebuild -= HandleRebuild; + skeletonRenderer.OnRebuild += HandleRebuild; if (hasReset) - HandleReset(skeletonRenderer); + HandleRebuild(skeletonRenderer); } } void OnDisable () { - skeletonRenderer.OnRebuild -= HandleReset; + skeletonRenderer.OnRebuild -= HandleRebuild; } void Start () { if (!hasReset && skeletonRenderer != null) - HandleReset(skeletonRenderer); + HandleRebuild(skeletonRenderer); } - public void HandleReset (SkeletonRenderer renderer) { - if (slotName == null || slotName == "") + public void HandleRebuild (SkeletonRenderer renderer) { + if (string.IsNullOrEmpty(slotName)) return; hasReset = true; - ClearColliders(); colliderTable.Clear(); if (skeletonRenderer.skeleton == null) { - skeletonRenderer.OnRebuild -= HandleReset; + skeletonRenderer.OnRebuild -= HandleRebuild; skeletonRenderer.Initialize(false); - skeletonRenderer.OnRebuild += HandleReset; + skeletonRenderer.OnRebuild += HandleRebuild; } - var skeleton = skeletonRenderer.skeleton; slot = skeleton.FindSlot(slotName); int slotIndex = skeleton.FindSlotIndex(slotName); - foreach (var skin in skeleton.Data.Skins) { - List attachmentNames = new List(); - skin.FindNamesForSlot(slotIndex, attachmentNames); + if (this.gameObject.activeInHierarchy) { + foreach (var skin in skeleton.Data.Skins) { + var attachmentNames = new List(); + skin.FindNamesForSlot(slotIndex, attachmentNames); - foreach (var name in attachmentNames) { - var attachment = skin.GetAttachment(slotIndex, name); - if (attachment is BoundingBoxAttachment) { - var collider = SkeletonUtility.AddBoundingBoxAsComponent((BoundingBoxAttachment)attachment, gameObject, true); - collider.enabled = false; - collider.hideFlags = HideFlags.HideInInspector; - colliderTable.Add((BoundingBoxAttachment)attachment, collider); - attachmentNameTable.Add((BoundingBoxAttachment)attachment, name); + foreach (var attachmentName in attachmentNames) { + var attachment = skin.GetAttachment(slotIndex, attachmentName); + var boundingBoxAttachment = attachment as BoundingBoxAttachment; + +#if UNITY_EDITOR + if (attachment != null && boundingBoxAttachment == null) + Debug.Log("BoundingBoxFollower tried to follow a slot that contains non-boundingbox attachments: " + slotName); +#endif + + if (boundingBoxAttachment != null) { + var bbCollider = SkeletonUtility.AddBoundingBoxAsComponent(boundingBoxAttachment, gameObject, true); + bbCollider.enabled = false; + bbCollider.hideFlags = HideFlags.NotEditable; + bbCollider.isTrigger = IsTrigger; + colliderTable.Add(boundingBoxAttachment, bbCollider); + attachmentNameTable.Add(boundingBoxAttachment, attachmentName); + } } } } - if (colliderTable.Count == 0) - valid = false; - else - valid = true; - - if (!valid) - Debug.LogWarning("Bounding Box Follower not valid! Slot [" + slotName + "] does not contain any Bounding Box Attachments!"); +#if UNITY_EDITOR + valid = colliderTable.Count != 0; + if (!valid) { + if (this.gameObject.activeInHierarchy) + Debug.LogWarning("Bounding Box Follower not valid! Slot [" + slotName + "] does not contain any Bounding Box Attachments!"); + else + Debug.LogWarning("Bounding Box Follower tried to rebuild as a prefab."); + } +#endif } void ClearColliders () { var colliders = GetComponents(); + if (colliders.Length == 0) return; + +#if UNITY_EDITOR if (Application.isPlaying) { foreach (var c in colliders) { - Destroy(c); + if (c != null) + Destroy(c); } } else { - foreach (var c in colliders) { + foreach (var c in colliders) DestroyImmediate(c); - } } +#else + foreach (var c in colliders) + if (c != null) + Destroy(c); +#endif colliderTable.Clear(); attachmentNameTable.Clear(); @@ -160,26 +166,32 @@ namespace Spine.Unity { if (!skeletonRenderer.valid) return; - if (slot != null) { - if (slot.Attachment != currentAttachment) - SetCurrent((BoundingBoxAttachment)slot.Attachment); - } + if (slot != null && slot.Attachment != currentAttachment) + MatchAttachment(slot.Attachment); } - void SetCurrent (BoundingBoxAttachment attachment) { - if (currentCollider) + /// Sets the current collider to match attachment. + /// If the attachment is not a bounding box, it will be treated as null. + void MatchAttachment (Attachment attachment) { + var bbAttachment = attachment as BoundingBoxAttachment; + +#if UNITY_EDITOR + if (attachment != null && bbAttachment == null) + Debug.LogWarning("BoundingBoxFollower tried to match a non-boundingbox attachment. It will treat it as null."); +#endif + + if (currentCollider != null) currentCollider.enabled = false; - if (attachment != null) { - currentCollider = colliderTable[attachment]; - currentCollider.enabled = true; - } else { + if (bbAttachment == null) { currentCollider = null; + } else { + currentCollider = colliderTable[bbAttachment]; + currentCollider.enabled = true; } - currentAttachment = attachment; - - currentAttachmentName = currentAttachment == null ? null : attachmentNameTable[attachment]; + currentAttachment = bbAttachment; + currentAttachmentName = currentAttachment == null ? null : attachmentNameTable[bbAttachment]; } } diff --git a/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/Editor/BoundingBoxFollowerInspector.cs b/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/Editor/BoundingBoxFollowerInspector.cs index 216fc2f81..d59267248 100644 --- a/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/Editor/BoundingBoxFollowerInspector.cs +++ b/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/Editor/BoundingBoxFollowerInspector.cs @@ -31,58 +31,83 @@ using UnityEngine; using UnityEditor; -using System.Collections; namespace Spine.Unity.Editor { [CustomEditor(typeof(BoundingBoxFollower))] public class BoundingBoxFollowerInspector : UnityEditor.Editor { - SerializedProperty skeletonRenderer, slotName; + SerializedProperty skeletonRenderer, slotName, isTrigger; BoundingBoxFollower follower; - bool needToReset = false; + bool rebuildRequired = false; + bool addBoneFollower = false; void OnEnable () { skeletonRenderer = serializedObject.FindProperty("skeletonRenderer"); slotName = serializedObject.FindProperty("slotName"); + isTrigger = serializedObject.FindProperty("isTrigger"); follower = (BoundingBoxFollower)target; } public override void OnInspectorGUI () { - if (needToReset) { - follower.HandleReset(null); - needToReset = false; + bool isInspectingPrefab = (PrefabUtility.GetPrefabType(target) == PrefabType.Prefab); + bool repaintEvent = UnityEngine.Event.current.type == EventType.Repaint; + + if (rebuildRequired) { + follower.HandleRebuild(null); + rebuildRequired = false; } + EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(skeletonRenderer); EditorGUILayout.PropertyField(slotName, new GUIContent("Slot")); + EditorGUILayout.PropertyField(isTrigger); - if (EditorGUI.EndChangeCheck()){ + if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); - needToReset = true; + if (!isInspectingPrefab) + rebuildRequired = true; } - bool hasBone = follower.GetComponent() != null; - - EditorGUI.BeginDisabledGroup(hasBone || follower.Slot == null); - { + bool hasBoneFollower = follower.GetComponent() != null; + using (new EditorGUI.DisabledGroupScope(hasBoneFollower || follower.Slot == null)) { if (GUILayout.Button(new GUIContent("Add Bone Follower", SpineEditorUtilities.Icons.bone))) { - var boneFollower = follower.gameObject.AddComponent(); - boneFollower.boneName = follower.Slot.Data.BoneData.Name; + addBoneFollower = true; } } - EditorGUI.EndDisabledGroup(); + if (isInspectingPrefab) { + follower.colliderTable.Clear(); + follower.attachmentNameTable.Clear(); + EditorGUILayout.HelpBox("BoundingBoxAttachments cannot be previewed in prefabs.", MessageType.Info); + // How do you prevent components from being saved into the prefab? No such HideFlag. DontSaveInEditor | DontSaveInBuild does not work. DestroyImmediate does not work. + var collider = follower.GetComponent(); + if (collider != null) Debug.LogWarning("Found BoundingBoxFollower collider components in prefab. These are disposed and regenerated at runtime."); - //GUILayout.Space(20); - GUILayout.Label("Attachment Names", EditorStyles.boldLabel); - foreach (var kp in follower.attachmentNameTable) { - string name = kp.Value; - var collider = follower.colliderTable[kp.Key]; - bool isPlaceholder = name != kp.Key.Name; - collider.enabled = EditorGUILayout.ToggleLeft(new GUIContent(!isPlaceholder ? name : name + " [" + kp.Key.Name + "]", isPlaceholder ? SpineEditorUtilities.Icons.skinPlaceholder : SpineEditorUtilities.Icons.boundingBox), collider.enabled); + } else { + EditorGUILayout.LabelField(string.Format("Attachment Names ({0} PolygonCollider2D)", follower.colliderTable.Count), EditorStyles.boldLabel); + EditorGUI.BeginChangeCheck(); + foreach (var kp in follower.attachmentNameTable) { + string attachmentName = kp.Value; + var collider = follower.colliderTable[kp.Key]; + bool isPlaceholder = attachmentName != kp.Key.Name; + collider.enabled = EditorGUILayout.ToggleLeft(new GUIContent(!isPlaceholder ? attachmentName : attachmentName + " [" + kp.Key.Name + "]", isPlaceholder ? SpineEditorUtilities.Icons.skinPlaceholder : SpineEditorUtilities.Icons.boundingBox), collider.enabled); + } + if (EditorGUI.EndChangeCheck()) { + SceneView.RepaintAll(); + } + + if (!Application.isPlaying) + EditorGUILayout.HelpBox("\nAt runtime, BoundingBoxFollower enables and disables PolygonCollider2Ds based on the currently active attachment in the slot.\n\nCheckboxes in Edit Mode are only for preview. Checkbox states are not saved.\n", MessageType.Info); + } + + if (addBoneFollower && repaintEvent) { + var boneFollower = follower.gameObject.AddComponent(); + boneFollower.boneName = follower.Slot.Data.BoneData.Name; + addBoneFollower = false; } } + } } diff --git a/spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs b/spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs index dbf4b0e3d..519600a67 100644 --- a/spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs +++ b/spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs @@ -1,4 +1,4 @@ -/***************************************************************************** +/***************************************************************************** * SkeletonGhostRenderer created by Mitch Thompson * Full irrevocable rights and permissions granted to Esoteric Software *****************************************************************************/ @@ -6,105 +6,101 @@ using UnityEngine; using System.Collections; -public class SkeletonGhostRenderer : MonoBehaviour { +namespace Spine.Unity.Modules { + public class SkeletonGhostRenderer : MonoBehaviour { - public float fadeSpeed = 10; + public float fadeSpeed = 10; - Color32[] colors; - Color32 black = new Color32(0, 0, 0, 0); - MeshFilter meshFilter; - MeshRenderer meshRenderer; + Color32[] colors; + Color32 black = new Color32(0, 0, 0, 0); + MeshFilter meshFilter; + MeshRenderer meshRenderer; - void Awake () { - meshRenderer = gameObject.AddComponent(); - meshFilter = gameObject.AddComponent(); - } - - public void Initialize (Mesh mesh, Material[] materials, Color32 color, bool additive, float speed, int sortingLayerID, int sortingOrder) { - StopAllCoroutines(); - - gameObject.SetActive(true); - - - meshRenderer.sharedMaterials = materials; - meshRenderer.sortingLayerID = sortingLayerID; - meshRenderer.sortingOrder = sortingOrder; - - meshFilter.sharedMesh = (Mesh)Instantiate(mesh); - - colors = meshFilter.sharedMesh.colors32; - - if ((color.a + color.r + color.g + color.b) > 0) { - for (int i = 0; i < colors.Length; i++) { - colors[i] = color; - } + void Awake () { + meshRenderer = gameObject.AddComponent(); + meshFilter = gameObject.AddComponent(); } - fadeSpeed = speed; + public void Initialize (Mesh mesh, Material[] materials, Color32 color, bool additive, float speed, int sortingLayerID, int sortingOrder) { + StopAllCoroutines(); - if (additive) - StartCoroutine(FadeAdditive()); - else - StartCoroutine(Fade()); - } + gameObject.SetActive(true); + meshRenderer.sharedMaterials = materials; + meshRenderer.sortingLayerID = sortingLayerID; + meshRenderer.sortingOrder = sortingOrder; + meshFilter.sharedMesh = Instantiate(mesh); + colors = meshFilter.sharedMesh.colors32; - IEnumerator Fade () { - Color32 c; - for (int t = 0; t < 500; t++) { - - bool breakout = true; - for (int i = 0; i < colors.Length; i++) { - c = colors[i]; - if (c.a > 0) - breakout = false; - - colors[i] = Color32.Lerp(c, black, Time.deltaTime * fadeSpeed); + if ((color.a + color.r + color.g + color.b) > 0) { + for (int i = 0; i < colors.Length; i++) + colors[i] = color; } - meshFilter.sharedMesh.colors32 = colors; + fadeSpeed = speed; - if (breakout) - break; - yield return null; + if (additive) + StartCoroutine(FadeAdditive()); + else + StartCoroutine(Fade()); } - Destroy(meshFilter.sharedMesh); + IEnumerator Fade () { + Color32 c; + for (int t = 0; t < 500; t++) { + bool breakout = true; + for (int i = 0; i < colors.Length; i++) { + c = colors[i]; + if (c.a > 0) + breakout = false; - gameObject.SetActive(false); - } + colors[i] = Color32.Lerp(c, black, Time.deltaTime * fadeSpeed); + } + meshFilter.sharedMesh.colors32 = colors; - IEnumerator FadeAdditive () { - Color32 c; - Color32 black = this.black; - - for (int t = 0; t < 500; t++) { - - bool breakout = true; - for (int i = 0; i < colors.Length; i++) { - c = colors[i]; - black.a = c.a; - if (c.r > 0 || c.g > 0 || c.b > 0) - breakout = false; - - colors[i] = Color32.Lerp(c, black, Time.deltaTime * fadeSpeed); + if (breakout) + break; + + yield return null; } - meshFilter.sharedMesh.colors32 = colors; - - if (breakout) - break; - yield return null; + Destroy(meshFilter.sharedMesh); + gameObject.SetActive(false); } - Destroy(meshFilter.sharedMesh); + IEnumerator FadeAdditive () { + Color32 c; + Color32 black = this.black; - gameObject.SetActive(false); - } + for (int t = 0; t < 500; t++) { + + bool breakout = true; + for (int i = 0; i < colors.Length; i++) { + c = colors[i]; + black.a = c.a; + if (c.r > 0 || c.g > 0 || c.b > 0) + breakout = false; + + colors[i] = Color32.Lerp(c, black, Time.deltaTime * fadeSpeed); + } + + meshFilter.sharedMesh.colors32 = colors; + + if (breakout) + break; + yield return null; + } - public void Cleanup () { - if (meshFilter != null && meshFilter.sharedMesh != null) Destroy(meshFilter.sharedMesh); - Destroy(gameObject); + gameObject.SetActive(false); + } + + public void Cleanup () { + if (meshFilter != null && meshFilter.sharedMesh != null) + Destroy(meshFilter.sharedMesh); + + Destroy(gameObject); + } } + } diff --git a/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs b/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs index b8674180b..5fdf93743 100644 --- a/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs +++ b/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs @@ -21,13 +21,15 @@ namespace Spine.Unity.Modules { [Header("Parameters")] public bool applyOnStart; + [Tooltip("Warning! You will have to re-enable and tune mix values manually if attempting to remove the ragdoll system.")] + public bool disableIK = true; + public bool disableOtherConstraints = false; + [Space] [Tooltip("Set RootRigidbody IsKinematic to true when Apply is called.")] public bool pinStartBone; [Tooltip("Enable Collision between adjacent ragdoll elements (IE: Neck and Head)")] public bool enableJointCollision; public bool useGravity = true; - [Tooltip("Warning! You will have to re-enable and tune mix values manually if attempting to remove the ragdoll system.")] - public bool disableIK = true; [Tooltip("If no BoundingBox Attachment is attached to a bone, this becomes the default Width or Radius of a Bone's ragdoll Rigidbody")] public float thickness = 0.125f; [Tooltip("Default rotational limit value. Min is negative this value, Max is this value.")] @@ -108,10 +110,6 @@ namespace Spine.Unity.Modules { Transform parentTransform; boneColliders.Add(t.GetComponent()); if (b == StartingBone) { -// skeletonSpaceTransform = new GameObject("Spine World Space Transform").transform; -// skeletonSpaceTransform.hideFlags = HideFlags.NotEditable; -// skeletonSpaceTransform.localScale = FlipScale(skeleton.flipX, skeleton.flipY); -// skeletonSpaceTransform.SetParent(this.transform, false); ragdollRoot = new GameObject("RagdollRoot").transform; ragdollRoot.SetParent(transform, false); if (b == skeleton.RootBone) { // RagdollRoot is skeleton root. @@ -176,11 +174,28 @@ namespace Spine.Unity.Modules { Debug.LogWarning(msg); } } - - // Disable IK constraints. + + // Disable skeleton constraints. if (disableIK) { - foreach (IkConstraint ik in skeleton.IkConstraints) - ik.Mix = 0; + var ikConstraints = skeleton.IkConstraints; + for (int i = 0, n = ikConstraints.Count; i < n; i++) + ikConstraints.Items[i].mix = 0; + } + + if (disableOtherConstraints) { + var transformConstraints = skeleton.transformConstraints; + for (int i = 0, n = transformConstraints.Count; i < n; i++) { + transformConstraints.Items[i].rotateMix = 0; + transformConstraints.Items[i].scaleMix = 0; + transformConstraints.Items[i].shearMix = 0; + transformConstraints.Items[i].translateMix = 0; + } + + var pathConstraints = skeleton.pathConstraints; + for (int i = 0, n = pathConstraints.Count; i < n; i++) { + pathConstraints.Items[i].rotateMix = 0; + pathConstraints.Items[i].translateMix = 0; + } } targetSkeletonComponent.UpdateWorld += UpdateSpineSkeleton; @@ -209,9 +224,8 @@ namespace Spine.Unity.Modules { Vector3 offset = worldPosition - transform.position; transform.position = worldPosition; - foreach (Transform t in boneTable.Values) { + foreach (Transform t in boneTable.Values) t.position -= offset; - } UpdateSpineSkeleton(null); skeleton.UpdateWorldTransform(); @@ -220,9 +234,9 @@ namespace Spine.Unity.Modules { /// Removes the ragdoll instance and effect from the animated skeleton. public void Remove () { isActive = false; - foreach (var t in boneTable.Values) { + foreach (var t in boneTable.Values) Destroy(t.gameObject); - } + Destroy(ragdollRoot.gameObject); boneTable.Clear(); @@ -247,7 +261,7 @@ namespace Spine.Unity.Modules { t.parent = transform; t.localPosition = new Vector3(b.WorldX, b.WorldY, 0); - t.localRotation = Quaternion.Euler(0, 0, b.WorldRotationX); + t.localRotation = Quaternion.Euler(0, 0, b.WorldRotationX - b.shearX); t.localScale = new Vector3(b.WorldScaleX, b.WorldScaleY, 1); // MITCH: You left "todo: proper ragdoll branching" @@ -266,9 +280,8 @@ namespace Spine.Unity.Modules { var rb = boneGameObject.AddComponent(); rb.constraints = RigidbodyConstraints.FreezePositionZ; - foreach (Bone child in b.Children) { + foreach (Bone child in b.Children) RecursivelyCreateBoneProxies(child); - } } void UpdateSpineSkeleton (ISkeletonAnimation skeletonRenderer) { diff --git a/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs b/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs index 2972d3fae..c245f7003 100644 --- a/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs +++ b/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs @@ -32,11 +32,13 @@ namespace Spine.Unity.Modules { [Header("Parameters")] public bool applyOnStart; + [Tooltip("Warning! You will have to re-enable and tune mix values manually if attempting to remove the ragdoll system.")] + public bool disableIK = true; + public bool disableOtherConstraints = false; + [Space] [Tooltip("Set RootRigidbody IsKinematic to true when Apply is called.")] public bool pinStartBone; public float gravityScale = 1; - [Tooltip("Warning! You will have to re-enable and tune mix values manually if attempting to remove the ragdoll system.")] - public bool disableIK = true; [Tooltip("If no BoundingBox Attachment is attached to a bone, this becomes the default Width or Radius of a Bone's ragdoll Rigidbody")] public float thickness = 0.125f; [Tooltip("Default rotational limit value. Min is negative this value, Max is this value.")] @@ -62,7 +64,6 @@ namespace Spine.Unity.Modules { public Vector3 RootOffset { get { return this.rootOffset; } } bool isActive; public bool IsActive { get { return this.isActive; } } -// public Transform skeletonSpaceTransform; IEnumerator Start () { if (parentSpaceHelper == null) { @@ -129,10 +130,6 @@ namespace Spine.Unity.Modules { Transform parentTransform; boneColliders.Add(t.GetComponent()); if (b == startingBone) { -// skeletonSpaceTransform = new GameObject("Spine World Space Transform").transform; -// skeletonSpaceTransform.hideFlags = HideFlags.NotEditable; -// skeletonSpaceTransform.localScale = FlipScale(skeleton.flipX, skeleton.flipY); -// skeletonSpaceTransform.SetParent(this.transform, false); ragdollRoot = new GameObject("RagdollRoot").transform; ragdollRoot.SetParent(transform, false); if (b == skeleton.RootBone) { // RagdollRoot is skeleton root. @@ -194,11 +191,30 @@ namespace Spine.Unity.Modules { Debug.LogWarning(msg); } } - // Disable IK constraints. + + // Disable skeleton constraints. if (disableIK) { - foreach (IkConstraint ik in skeleton.IkConstraints) - ik.Mix = 0; + var ikConstraints = skeleton.IkConstraints; + for (int i = 0, n = ikConstraints.Count; i < n; i++) + ikConstraints.Items[i].mix = 0; } + + if (disableOtherConstraints) { + var transformConstraints = skeleton.transformConstraints; + for (int i = 0, n = transformConstraints.Count; i < n; i++) { + transformConstraints.Items[i].rotateMix = 0; + transformConstraints.Items[i].scaleMix = 0; + transformConstraints.Items[i].shearMix = 0; + transformConstraints.Items[i].translateMix = 0; + } + + var pathConstraints = skeleton.pathConstraints; + for (int i = 0, n = pathConstraints.Count; i < n; i++) { + pathConstraints.Items[i].rotateMix = 0; + pathConstraints.Items[i].translateMix = 0; + } + } + targetSkeletonComponent.UpdateWorld += UpdateSpineSkeleton; } @@ -222,11 +238,12 @@ namespace Spine.Unity.Modules { Debug.LogWarning("Can't call SetSkeletonPosition while Ragdoll is not active!"); return; } + Vector3 offset = worldPosition - transform.position; transform.position = worldPosition; - foreach (Transform t in boneTable.Values) { + foreach (Transform t in boneTable.Values) t.position -= offset; - } + UpdateSpineSkeleton(null); skeleton.UpdateWorldTransform(); } @@ -234,9 +251,9 @@ namespace Spine.Unity.Modules { /// Removes the ragdoll instance and effect from the animated skeleton. public void Remove () { isActive = false; - foreach (var t in boneTable.Values) { + foreach (var t in boneTable.Values) Destroy(t.gameObject); - } + Destroy(ragdollRoot.gameObject); boneTable.Clear(); targetSkeletonComponent.UpdateWorld -= UpdateSpineSkeleton; @@ -261,7 +278,7 @@ namespace Spine.Unity.Modules { t.parent = transform; t.localPosition = new Vector3(b.WorldX, b.WorldY, 0); - t.localRotation = Quaternion.Euler(0, 0, b.WorldRotationX); + t.localRotation = Quaternion.Euler(0, 0, b.WorldRotationX - b.shearX); t.localScale = new Vector3(b.WorldScaleX, b.WorldScaleY, 0); // MITCH: You left "todo: proper ragdoll branching" @@ -284,9 +301,8 @@ namespace Spine.Unity.Modules { rb.isKinematic = spawnKinematic; #endif - foreach (Bone child in b.Children) { + foreach (Bone child in b.Children) RecursivelyCreateBoneProxies(child); - } } /// Performed every skeleton animation update to translate Unity Transforms positions into Spine bone transforms. @@ -337,19 +353,6 @@ namespace Spine.Unity.Modules { b.y = Mathf.Lerp(b.y, boneLocalPosition.y, mix); b.rotation = Mathf.Lerp(b.rotation, boneLocalRotation, mix); b.appliedRotation = Mathf.Lerp(b.appliedRotation, boneLocalRotation, mix); - -// Mitch Original Code: -// Vector3 right = parentSpaceHelper.InverseTransformDirection(t.right); -// float a = Mathf.Atan2(right.y, right.x) * Mathf.Rad2Deg; -// if (b.worldSignX ^ b.worldSignY) { -// a *= -1; -// } -// if (parentBone != null) { -// if ((b.WorldFlipX ^ b.WorldFlipY) != flip) { -// a -= GetCompensatedRotationIK(parentBone) * 2; -// } -// } -// b.Rotation = Mathf.Lerp(b.Rotation, a, mix); } } diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Editor/SkeletonGraphicInspector.cs b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Editor/SkeletonGraphicInspector.cs index 3f80d3efc..bd9ede169 100644 --- a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Editor/SkeletonGraphicInspector.cs +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Editor/SkeletonGraphicInspector.cs @@ -37,7 +37,8 @@ using UnityEditor; using Spine; namespace Spine.Unity.Editor { - + + [InitializeOnLoad] [CustomEditor(typeof(SkeletonGraphic))] public class SkeletonGraphicInspector : UnityEditor.Editor { SerializedProperty material_, color_; @@ -48,6 +49,40 @@ namespace Spine.Unity.Editor { SkeletonGraphic thisSkeletonGraphic; + static SpineEditorUtilities.InstantiateDelegate instantiateDelegate; + + static SkeletonGraphicInspector () { + if (!SpineEditorUtilities.initialized) + return; + + if (instantiateDelegate == null) + instantiateDelegate = new SpineEditorUtilities.InstantiateDelegate(SpawnSkeletonGraphicFromDrop); + + // Drag and Drop Instantiate menu item + var spawnTypes = SpineEditorUtilities.additionalSpawnTypes; + UnityEngine.Assertions.Assert.IsFalse(spawnTypes == null); + bool menuItemExists = false; + foreach (var spawnType in spawnTypes) { + if (spawnType.instantiateDelegate == SkeletonGraphicInspector.instantiateDelegate) { + menuItemExists = true; + break; + } + } + + if (!menuItemExists) { + SpineEditorUtilities.additionalSpawnTypes.Add(new SpineEditorUtilities.SkeletonComponentSpawnType { + menuLabel = "SkeletonGraphic (UI)", + instantiateDelegate = SkeletonGraphicInspector.instantiateDelegate, + isUI = true + }); + } + + } + + static public Component SpawnSkeletonGraphicFromDrop (SkeletonDataAsset data) { + return InstantiateSkeletonGraphic(data); + } + void OnEnable () { var so = this.serializedObject; thisSkeletonGraphic = target as SkeletonGraphic; @@ -108,6 +143,7 @@ namespace Spine.Unity.Editor { var skeletonGraphic = (SkeletonGraphic)command.context; var mesh = skeletonGraphic.SpineMeshGenerator.LastGeneratedMesh; + mesh.RecalculateBounds(); var bounds = mesh.bounds; var size = bounds.size; var center = bounds.center; @@ -120,27 +156,13 @@ namespace Spine.Unity.Editor { skeletonGraphic.rectTransform.pivot = p; } - public static Material DefaultSkeletonGraphicMaterial { - get { - var guids = AssetDatabase.FindAssets("SkeletonGraphicDefault t:material"); - if (guids.Length <= 0) - return null; - var firstAssetPath = AssetDatabase.GUIDToAssetPath(guids[0]); - if (string.IsNullOrEmpty(firstAssetPath)) - return null; - var firstMaterial = AssetDatabase.LoadAssetAtPath(firstAssetPath); - return firstMaterial; - } - } - [MenuItem("GameObject/Spine/SkeletonGraphic (UnityUI)", false, 15)] static public void SkeletonGraphicCreateMenuItem () { var parentGameObject = Selection.activeObject as GameObject; var parentTransform = parentGameObject == null ? null : parentGameObject.GetComponent(); - if (parentTransform == null) { + if (parentTransform == null) Debug.LogWarning("Your new SkeletonGraphic will not be visible until it is placed under a Canvas"); - } var gameObject = NewSkeletonGraphicGameObject("New SkeletonGraphic"); gameObject.transform.SetParent(parentTransform, false); @@ -219,6 +241,19 @@ namespace Spine.Unity.Editor { return go; } + public static Material DefaultSkeletonGraphicMaterial { + get { + var guids = AssetDatabase.FindAssets("SkeletonGraphicDefault t:material"); + if (guids.Length <= 0) return null; + + var firstAssetPath = AssetDatabase.GUIDToAssetPath(guids[0]); + if (string.IsNullOrEmpty(firstAssetPath)) return null; + + var firstMaterial = AssetDatabase.LoadAssetAtPath(firstAssetPath); + return firstMaterial; + } + } + #endregion #endif diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphic.shader b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphic.shader index c58b7ef71..3f9877915 100644 --- a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphic.shader +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphic.shader @@ -1,3 +1,5 @@ +// This is a premultiply-alpha adaptation of the built-in Unity shader "UI/Default" to allow Unity UI stencil masking. + Shader "Spine/SkeletonGraphic (Premultiply Alpha)" { Properties @@ -84,7 +86,7 @@ Shader "Spine/SkeletonGraphic (Premultiply Alpha)" fixed4 frag(v2f IN) : SV_Target { half4 color = tex2D(_MainTex, IN.texcoord) * IN.color; - clip (color.a - 0.01); + //clip(color.a - 0.01); return color; } ENDCG diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs index 552f5987e..8642121d5 100644 --- a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs @@ -39,10 +39,11 @@ using Spine; namespace Spine.Unity { [ExecuteInEditMode, RequireComponent(typeof(CanvasRenderer), typeof(RectTransform)), DisallowMultipleComponent] [AddComponentMenu("Spine/SkeletonGraphic (Unity UI Canvas)")] - public class SkeletonGraphic : MaskableGraphic { + public class SkeletonGraphic : MaskableGraphic, ISkeletonComponent, IAnimationStateComponent, ISkeletonAnimation { #region Inspector public SkeletonDataAsset skeletonDataAsset; + public SkeletonDataAsset SkeletonDataAsset { get { return skeletonDataAsset; } } [SpineSkin(dataField:"skeletonDataAsset")] public string initialSkinName = "default"; @@ -66,15 +67,13 @@ namespace Spine.Unity { Clear(); Initialize(true); startingAnimation = ""; - if (skeletonDataAsset.atlasAssets.Length > 1 || skeletonDataAsset.atlasAssets[0].materials.Length > 1) { + if (skeletonDataAsset.atlasAssets.Length > 1 || skeletonDataAsset.atlasAssets[0].materials.Length > 1) Debug.LogError("Unity UI does not support multiple textures per Renderer. Your skeleton will not be rendered correctly. Recommend using SkeletonAnimation instead. This requires the use of a Screen space camera canvas."); - } } else { if (freeze) return; skeleton.SetToSetupPose(); - if (!string.IsNullOrEmpty(startingAnimation)) { + if (!string.IsNullOrEmpty(startingAnimation)) skeleton.PoseWithAnimation(startingAnimation, 0f, false); - } } } else { if (skeletonDataAsset != null) @@ -88,13 +87,8 @@ namespace Spine.Unity { protected override void Reset () { base.Reset(); - if (canvas == null) { - Debug.LogWarningFormat("SkeletonGraphic requires a Canvas to be visible. Move this GameObject ({0}) in the Hierarchy so it becomes a child of a Canvas.", gameObject.name); - } - - if (material == null || material.shader != Shader.Find("Spine/SkeletonGraphic (Premultiply Alpha)")) { - Debug.LogWarning("SkeletonGraphic works best with the SkeletonGraphic material."); - } + if (material == null || material.shader != Shader.Find("Spine/SkeletonGraphic (Premultiply Alpha)")) + Debug.LogWarning("SkeletonGraphic works best with the SkeletonGraphic material."); } #endif #endregion @@ -148,7 +142,7 @@ namespace Spine.Unity { if (UpdateComplete != null) UpdateComplete(this); } - void LateUpdate () { + public void LateUpdate () { if (freeze) return; //this.SetVerticesDirty(); // Which is better? UpdateMesh(); @@ -168,10 +162,9 @@ namespace Spine.Unity { protected Spine.Unity.MeshGeneration.ISimpleMeshGenerator spineMeshGenerator; public Spine.Unity.MeshGeneration.ISimpleMeshGenerator SpineMeshGenerator { get { return this.spineMeshGenerator; } } - public delegate void UpdateDelegate (SkeletonGraphic skeletonGraphic); - public event UpdateDelegate UpdateLocal; - public event UpdateDelegate UpdateWorld; - public event UpdateDelegate UpdateComplete; + public event UpdateBonesDelegate UpdateLocal; + public event UpdateBonesDelegate UpdateWorld; + public event UpdateBonesDelegate UpdateComplete; public void Clear () { skeleton = null; @@ -209,13 +202,18 @@ namespace Spine.Unity { if (this.IsValid) { skeleton.SetColor(this.color); if (canvas != null) - spineMeshGenerator.Scale = canvas.referencePixelsPerUnit; // TODO: move this to a listener to of the canvas? + spineMeshGenerator.Scale = canvas.referencePixelsPerUnit; //JOHN: left a todo: move this to a listener to of the canvas? canvasRenderer.SetMesh(spineMeshGenerator.GenerateMesh(skeleton)); //this.UpdateMaterial(); // TODO: This allocates memory. } } #endregion + #else + public Skeleton Skeleton { get { return null; } } + public AnimationState AnimationState { get { return null; } } + public event UpdateBonesDelegate UpdateLocal, UpdateWorld, UpdateComplete; + public void LateUpdate () { } #endif } } \ No newline at end of file diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonRenderSeparatorInspector.cs b/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonRenderSeparatorInspector.cs index a8e75cf7f..26455fe5f 100644 --- a/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonRenderSeparatorInspector.cs +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/Editor/SkeletonRenderSeparatorInspector.cs @@ -76,7 +76,7 @@ namespace Spine.Unity.Modules { } public override void OnInspectorGUI () { - // TODO: Add Undo support + //JOHN: left todo: Add Undo support var componentRenderers = component.partsRenderers; int totalParts; diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.cs b/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.cs index e56b84732..5bf76d18d 100644 --- a/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.cs +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.cs @@ -69,14 +69,29 @@ namespace Spine.Unity.Modules { void OnEnable () { if (skeletonRenderer == null) return; - if (block == null) block = new MaterialPropertyBlock(); + if (copiedBlock == null) copiedBlock = new MaterialPropertyBlock(); mainMeshRenderer = skeletonRenderer.GetComponent(); skeletonRenderer.GenerateMeshOverride -= HandleRender; skeletonRenderer.GenerateMeshOverride += HandleRender; + #if UNITY_5_4_OR_NEWER if (copyMeshRendererFlags) { - bool useLightProbes = mainMeshRenderer.useLightProbes; + var lightProbeUsage = mainMeshRenderer.lightProbeUsage; + bool receiveShadows = mainMeshRenderer.receiveShadows; + + for (int i = 0; i < partsRenderers.Count; i++) { + var currentRenderer = partsRenderers[i]; + if (currentRenderer == null) continue; // skip null items. + + var mr = currentRenderer.MeshRenderer; + mr.lightProbeUsage = lightProbeUsage; + mr.receiveShadows = receiveShadows; + } + } + #else + if (copyMeshRendererFlags) { + var useLightProbes = mainMeshRenderer.useLightProbes; bool receiveShadows = mainMeshRenderer.receiveShadows; for (int i = 0; i < partsRenderers.Count; i++) { @@ -88,6 +103,7 @@ namespace Spine.Unity.Modules { mr.receiveShadows = receiveShadows; } } + #endif } @@ -103,7 +119,7 @@ namespace Spine.Unity.Modules { s.ClearMesh(); } - MaterialPropertyBlock block; + MaterialPropertyBlock copiedBlock; void HandleRender (SkeletonRenderer.SmartMesh.Instruction instruction) { int rendererCount = partsRenderers.Count; @@ -112,21 +128,27 @@ namespace Spine.Unity.Modules { int rendererIndex = 0; if (copyPropertyBlock) - mainMeshRenderer.GetPropertyBlock(block); + mainMeshRenderer.GetPropertyBlock(copiedBlock); var submeshInstructions = instruction.submeshInstructions; var submeshInstructionsItems = submeshInstructions.Items; int lastSubmeshInstruction = submeshInstructions.Count - 1; var currentRenderer = partsRenderers[rendererIndex]; - bool useNormals = skeletonRenderer.calculateNormals; + bool addNormals = skeletonRenderer.calculateNormals; + bool addTangents = skeletonRenderer.calculateTangents; for (int si = 0, start = 0; si <= lastSubmeshInstruction; si++) { if (submeshInstructionsItems[si].forceSeparate || si == lastSubmeshInstruction) { - currentRenderer.RenderParts(instruction.submeshInstructions, start, si + 1); - currentRenderer.MeshGenerator.GenerateNormals = useNormals; + // Apply properties + var meshGenerator = currentRenderer.MeshGenerator; + meshGenerator.AddNormals = addNormals; + meshGenerator.AddTangents = addTangents; if (copyPropertyBlock) - currentRenderer.SetPropertyBlock(block); + currentRenderer.SetPropertyBlock(copiedBlock); + + // Render + currentRenderer.RenderParts(instruction.submeshInstructions, start, si + 1); start = si + 1; rendererIndex++; diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.txt b/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.txt new file mode 100644 index 000000000..c42f929ac --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.txt @@ -0,0 +1,6 @@ +SkeletonRenderSeparator +======================= + +Dependencies: +- SkeletonPartsRenderer uses the `ArraysMeshGenerator` class in `Spine.Unity.MeshGeneration` +- It requires `SPINE_OPTIONAL_RENDEROVERRIDE` to be #defined in `SkeletonRenderer.cs`. diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.txt.meta b/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.txt.meta new file mode 100644 index 000000000..5dd3c994d --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonRenderSeparator/SkeletonRenderSeparator.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f0e413eeb00eabc46bde6dbd7aaaa76c +timeCreated: 1469110129 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Modules/SpriteAttacher.cs b/spine-unity/Assets/spine-unity/Modules/SpriteAttacher.cs index ceb4d2601..1b2dba0f9 100644 --- a/spine-unity/Assets/spine-unity/Modules/SpriteAttacher.cs +++ b/spine-unity/Assets/spine-unity/Modules/SpriteAttacher.cs @@ -70,7 +70,7 @@ namespace Spine.Unity.Modules { public class SpriteAttachmentLoader : AttachmentLoader { - //TODO: Memory cleanup functions + //MITCH: left a todo: Memory cleanup functions //IMPORTANT: Make sure you clear this when you don't need it anymore. Goodluck. public static Dictionary atlasTable = new Dictionary(); @@ -125,25 +125,25 @@ namespace Spine.Unity.Modules { int instanceId = tex.GetInstanceID(); AtlasRegion atlasRegion; - //check cache first + // Check cache first if (atlasTable.ContainsKey(instanceId)) { atlasRegion = atlasTable[instanceId]; } else { - //Setup new material - Material mat = new Material(shader); + // Setup new material. + var material = new Material(shader); if (sprite.packed) - mat.name = "Unity Packed Sprite Material"; + material.name = "Unity Packed Sprite Material"; else - mat.name = sprite.name + " Sprite Material"; - mat.mainTexture = tex; + material.name = sprite.name + " Sprite Material"; + material.mainTexture = tex; - //create faux-region to play nice with SkeletonRenderer + // Create faux-region to play nice with SkeletonRenderer. atlasRegion = new AtlasRegion(); AtlasPage page = new AtlasPage(); - page.rendererObject = mat; + page.rendererObject = material; atlasRegion.page = page; - //cache it + // Cache it. atlasTable[instanceId] = atlasRegion; } @@ -158,12 +158,11 @@ namespace Spine.Unity.Modules { Bounds bounds = sprite.bounds; Vector3 size = bounds.size; - //TODO: make sure this rotation thing actually works + //MITCH: left todo: make sure this rotation thing actually works bool rotated = false; if (sprite.packed) rotated = sprite.packingRotation == SpritePackingRotation.Any; - //do some math and assign UVs and sizes attachment.SetUVs(texRect.xMin, texRect.yMax, texRect.xMax, texRect.yMin, rotated); attachment.RendererObject = atlasRegion; attachment.SetColor(Color.white); @@ -183,16 +182,16 @@ namespace Spine.Unity.Modules { } public MeshAttachment NewMeshAttachment (Skin skin, string name, string path) { - //TODO: Unity 5 only - throw new System.NotImplementedException(); + //MITCH : Left todo: Unity 5 only + return null; } - public WeightedMeshAttachment NewWeightedMeshAttachment(Skin skin, string name, string path) { - throw new System.NotImplementedException(); + public BoundingBoxAttachment NewBoundingBoxAttachment (Skin skin, string name) { + return null; } - public BoundingBoxAttachment NewBoundingBoxAttachment (Skin skin, string name) { - throw new System.NotImplementedException(); + public PathAttachment NewPathAttachment (Skin skin, string name) { + return null; } private float InverseLerp(float a, float b, float value) diff --git a/spine-unity/Assets/spine-unity/Modules/TK2D/SpriteCollectionAttachmentLoader.cs b/spine-unity/Assets/spine-unity/Modules/TK2D/SpriteCollectionAttachmentLoader.cs index 3c6097de6..0f3b559cf 100644 --- a/spine-unity/Assets/spine-unity/Modules/TK2D/SpriteCollectionAttachmentLoader.cs +++ b/spine-unity/Assets/spine-unity/Modules/TK2D/SpriteCollectionAttachmentLoader.cs @@ -138,29 +138,13 @@ namespace Spine.Unity.TK2D { return mesh; } - public WeightedMeshAttachment NewWeightedMeshAttachment (Skin skin, String name, String path) { - ProcessSpriteDefinition(path); - - WeightedMeshAttachment mesh = new WeightedMeshAttachment(name); - mesh.Path = path; - mesh.RendererObject = material; - mesh.RegionU = u; - mesh.RegionV = v; - mesh.RegionU2 = u2; - mesh.RegionV2 = v2; - mesh.RegionRotate = regionRotated; - mesh.RegionOriginalWidth = regionOriginalWidth; - mesh.RegionOriginalHeight = regionOriginalHeight; - mesh.RegionWidth = regionWidth; - mesh.RegionHeight = regionHeight; - mesh.RegionOffsetX = regionOffsetX; - mesh.RegionOffsetY = regionOffsetY; - return mesh; - } - public BoundingBoxAttachment NewBoundingBoxAttachment (Skin skin, String name) { return new BoundingBoxAttachment(name); } + + public PathAttachment NewPathAttachment (Skin skin, string name) { + return new PathAttachment(name); + } } } #endif diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimation.cs b/spine-unity/Assets/spine-unity/SkeletonAnimation.cs index 5608ec762..7fdf243b2 100644 --- a/spine-unity/Assets/spine-unity/SkeletonAnimation.cs +++ b/spine-unity/Assets/spine-unity/SkeletonAnimation.cs @@ -37,12 +37,13 @@ namespace Spine.Unity { [ExecuteInEditMode] [AddComponentMenu("Spine/SkeletonAnimation")] [HelpURL("http://esotericsoftware.com/spine-unity-documentation#Controlling-Animation")] - public class SkeletonAnimation : SkeletonRenderer, ISkeletonAnimation { + public class SkeletonAnimation : SkeletonRenderer, ISkeletonAnimation, Spine.Unity.IAnimationStateComponent { /// /// This is the Spine.AnimationState object of this SkeletonAnimation. You can control animations through it. /// Note that this object, like .skeleton, is not guaranteed to exist in Awake. Do all accesses and caching to it in Start public Spine.AnimationState state; + public Spine.AnimationState AnimationState { get { return this.state; } } public event UpdateBonesDelegate UpdateLocal { add { _UpdateLocal += value; } @@ -63,18 +64,9 @@ namespace Spine.Unity { protected event UpdateBonesDelegate _UpdateWorld; protected event UpdateBonesDelegate _UpdateComplete; - /// Gets the skeleton. - public Skeleton Skeleton { - get { - this.Initialize(false); - return this.skeleton; - } - } - [SerializeField] [SpineAnimation] private String _animationName; - public String AnimationName { get { if (!valid) { @@ -95,7 +87,7 @@ namespace Spine.Unity { return; } - if (value == null || value.Length == 0) + if (string.IsNullOrEmpty(value)) state.ClearTrack(0); else state.SetAnimation(0, value, loop); @@ -103,17 +95,13 @@ namespace Spine.Unity { } /// Whether or not an animation should loop. This only applies to the initial animation specified in the inspector, or any subsequent Animations played through .AnimationName. Animations set through state.SetAnimation are unaffected. - #if UNITY_5 [Tooltip("Whether or not an animation should loop. This only applies to the initial animation specified in the inspector, or any subsequent Animations played through .AnimationName. Animations set through state.SetAnimation are unaffected.")] - #endif public bool loop; /// /// The rate at which animations progress over time. 1 means 100%. 0.5 means 50%. /// AnimationState and TrackEntry also have their own timeScale. These are combined multiplicatively. - #if UNITY_5 [Tooltip("The rate at which animations progress over time. 1 means 100%. 0.5 means 50%.")] - #endif public float timeScale = 1; #region Runtime Instantiation @@ -155,8 +143,8 @@ namespace Spine.Unity { } #else if (!string.IsNullOrEmpty(_animationName)) { - state.SetAnimation(0, _animationName, loop); - Update(0); + state.SetAnimation(0, _animationName, loop); + Update(0); } #endif } diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimator.cs b/spine-unity/Assets/spine-unity/SkeletonAnimator.cs index d2ccd63e7..d84482081 100644 --- a/spine-unity/Assets/spine-unity/SkeletonAnimator.cs +++ b/spine-unity/Assets/spine-unity/SkeletonAnimator.cs @@ -33,8 +33,6 @@ namespace Spine.Unity { protected event UpdateBonesDelegate _UpdateWorld; protected event UpdateBonesDelegate _UpdateComplete; - public Skeleton Skeleton { get { return this.skeleton; } } - readonly Dictionary animationTable = new Dictionary(); readonly Dictionary clipNameHashCodeTable = new Dictionary(); Animator animator; diff --git a/spine-unity/Assets/spine-unity/SkeletonExtensions.cs b/spine-unity/Assets/spine-unity/SkeletonExtensions.cs index bfeb523ba..edf5756d1 100644 --- a/spine-unity/Assets/spine-unity/SkeletonExtensions.cs +++ b/spine-unity/Assets/spine-unity/SkeletonExtensions.cs @@ -15,7 +15,6 @@ namespace Spine.Unity { public static Color GetColor (this Skeleton s) { return new Color(s.r, s.g, s.b, s.a); } public static Color GetColor (this RegionAttachment a) { return new Color(a.r, a.g, a.b, a.a); } public static Color GetColor (this MeshAttachment a) { return new Color(a.r, a.g, a.b, a.a); } - public static Color GetColor (this WeightedMeshAttachment a) { return new Color(a.r, a.g, a.b, a.a); } public static void SetColor (this Skeleton skeleton, Color color) { skeleton.A = color.a; @@ -72,23 +71,9 @@ namespace Spine.Unity { attachment.G = color.g * ByteToFloat; attachment.B = color.b * ByteToFloat; } - - public static void SetColor (this WeightedMeshAttachment attachment, Color color) { - attachment.A = color.a; - attachment.R = color.r; - attachment.G = color.g; - attachment.B = color.b; - } - - public static void SetColor (this WeightedMeshAttachment attachment, Color32 color) { - attachment.A = color.a * ByteToFloat; - attachment.R = color.r * ByteToFloat; - attachment.G = color.g * ByteToFloat; - attachment.B = color.b * ByteToFloat; - } #endregion - #region Bone Position + #region Bone public static void SetPosition (this Bone bone, Vector2 position) { bone.X = position.x; bone.Y = position.y; @@ -106,8 +91,21 @@ namespace Spine.Unity { public static Vector3 GetWorldPosition (this Bone bone, UnityEngine.Transform parentTransform) { return parentTransform.TransformPoint(new Vector3(bone.worldX, bone.worldY)); } + + public static Matrix4x4 GetMatrix4x4 (this Bone bone) { + return new Matrix4x4 { + m00 = bone.a, m01 = bone.b, m03 = bone.worldX, + m10 = bone.c, m11 = bone.d, m13 = bone.worldY, + m33 = 1 + }; + } #endregion + } +} + +namespace Spine { + public static class SkeletonExtensions { #region Posing /// /// Shortcut for posing a skeleton at a specific time. Time is in seconds. (frameNumber / 30f) will give you seconds. @@ -161,7 +159,7 @@ namespace Spine.Unity { for (int i = 0, n = timelinesItems.Length; i < n; i++) timelinesItems[i].SetToSetupPose(skeleton); } - + public static void SetToSetupPose (this Timeline timeline, Skeleton skeleton) { if (timeline != null) { // sorted according to assumed likelihood here @@ -181,10 +179,10 @@ namespace Spine.Unity { // Attachment - } else if (timeline is FfdTimeline) { - var slot = skeleton.slots.Items[((FfdTimeline)timeline).slotIndex]; - slot.attachmentVerticesCount = 0; - + } else if (timeline is DeformTimeline) { + var slot = skeleton.slots.Items[((DeformTimeline)timeline).slotIndex]; + slot.attachmentVertices.Clear(false); + // Slot } else if (timeline is AttachmentTimeline) { skeleton.SetSlotAttachmentToSetupPose(((AttachmentTimeline)timeline).slotIndex); diff --git a/spine-unity/Assets/spine-unity/SkeletonRenderer.cs b/spine-unity/Assets/spine-unity/SkeletonRenderer.cs index 341713ac5..77526ac35 100644 --- a/spine-unity/Assets/spine-unity/SkeletonRenderer.cs +++ b/spine-unity/Assets/spine-unity/SkeletonRenderer.cs @@ -28,10 +28,13 @@ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -#define SPINE_OPTIONAL_NORMALS -#define SPINE_OPTIONAL_FRONTFACING + #define SPINE_OPTIONAL_RENDEROVERRIDE #define SPINE_OPTIONAL_MATERIALOVERRIDE +#define SPINE_OPTIONAL_NORMALS +#define SPINE_OPTIONAL_SOLVETANGENTS + +//#define SPINE_OPTIONAL_FRONTFACING //#define SPINE_OPTIONAL_SUBMESHRENDERER // Deprecated using System; @@ -43,12 +46,13 @@ namespace Spine.Unity { /// Renders a skeleton. [ExecuteInEditMode, RequireComponent(typeof(MeshFilter), typeof(MeshRenderer)), DisallowMultipleComponent] [HelpURL("http://esotericsoftware.com/spine-unity-documentation#Rendering")] - public class SkeletonRenderer : MonoBehaviour { + public class SkeletonRenderer : MonoBehaviour, ISkeletonComponent { public delegate void SkeletonRendererDelegate (SkeletonRenderer skeletonRenderer); public SkeletonRendererDelegate OnRebuild; public SkeletonDataAsset skeletonDataAsset; + public SkeletonDataAsset SkeletonDataAsset { get { return skeletonDataAsset; } } public String initialSkinName; #region Advanced @@ -62,8 +66,12 @@ namespace Spine.Unity { public float zSpacing; public bool renderMeshes = true, immutableTriangles; public bool pmaVertexColors = true; + #if SPINE_OPTIONAL_NORMALS - public bool calculateNormals, calculateTangents; + public bool calculateNormals; + #endif + #if SPINE_OPTIONAL_SOLVETANGENTS + public bool calculateTangents; #endif #if SPINE_OPTIONAL_FRONTFACING public bool frontFacing; @@ -112,10 +120,16 @@ namespace Spine.Unity { [System.NonSerialized] public bool valid; [System.NonSerialized] public Skeleton skeleton; + public Skeleton Skeleton { + get { + Initialize(false); + return skeleton; + } + } Spine.Unity.DoubleBuffered doubleBufferedMesh; readonly SmartMesh.Instruction currentInstructions = new SmartMesh.Instruction(); - readonly ExposedList submeshes = new ExposedList(); + readonly ExposedList submeshes = new ExposedList(); readonly ExposedList submeshMaterials = new ExposedList(); Material[] sharedMaterials = new Material[0]; float[] tempVertices = new float[8]; @@ -124,7 +138,10 @@ namespace Spine.Unity { Vector2[] uvs; #if SPINE_OPTIONAL_NORMALS Vector3[] normals; + #endif + #if SPINE_OPTIONAL_SOLVETANGENTS Vector4[] tangents; + Vector2[] tempTanBuffer; #endif #region Runtime Instantiation @@ -189,7 +206,7 @@ namespace Spine.Unity { vertices = new Vector3[0]; skeleton = new Skeleton(skeletonData); - if (initialSkinName != null && initialSkinName.Length > 0 && initialSkinName != "default") + if (!string.IsNullOrEmpty(initialSkinName) && initialSkinName != "default") skeleton.SetSkin(initialSkinName); separatorSlots.Clear(); @@ -211,31 +228,21 @@ namespace Spine.Unity { return; if ( - ( - !meshRenderer.enabled - - ) + (!meshRenderer.enabled) #if SPINE_OPTIONAL_RENDEROVERRIDE && this.generateMeshOverride == null #endif - #if SPINE_OPTIONAL_SUBMESHRENDERER && submeshRenderers.Length > 0 #endif - ) return; + - - - // STEP 1. Determine a SmartMesh.Instruction. Split up instructions into submeshes. - - // This method caches several .Items arrays. - // Never mutate their overlying ExposedList objects. + // STEP 1. Determine a SmartMesh.Instruction. Split up instructions into submeshes. ============================================================ ExposedList drawOrder = skeleton.drawOrder; var drawOrderItems = drawOrder.Items; int drawOrderCount = drawOrder.Count; - int separatorSlotCount = separatorSlots.Count; bool renderMeshes = this.renderMeshes; // Clear last state of attachments and submeshes @@ -268,7 +275,6 @@ namespace Spine.Unity { for (int i = 0; i < drawOrderCount; i++) { Slot slot = drawOrderItems[i]; Attachment attachment = slot.attachment; - workingAttachmentsItems[i] = attachment; #if SPINE_OPTIONAL_FRONTFACING @@ -290,23 +296,15 @@ namespace Spine.Unity { var meshAttachment = attachment as MeshAttachment; if (meshAttachment != null) { rendererObject = meshAttachment.RendererObject; - attachmentVertexCount = meshAttachment.vertices.Length >> 1; + attachmentVertexCount = meshAttachment.worldVerticesLength >> 1; attachmentTriangleCount = meshAttachment.triangles.Length; } else { - var skinnedMeshAttachment = attachment as WeightedMeshAttachment; - if (skinnedMeshAttachment != null) { - rendererObject = skinnedMeshAttachment.RendererObject; - attachmentVertexCount = skinnedMeshAttachment.uvs.Length >> 1; - attachmentTriangleCount = skinnedMeshAttachment.triangles.Length; - } else - continue; + continue; } } #if !SPINE_TK2D - // Material material = (Material)((AtlasRegion)rendererObject).page.rendererObject; // For no customSlotMaterials - - Material material; + Material material; //= (Material)((AtlasRegion)rendererObject).page.rendererObject; // For no customSlotMaterials if (isCustomSlotMaterialsPopulated) { if (!customSlotMaterials.TryGetValue(slot, out material)) { material = (Material)((AtlasRegion)rendererObject).page.rendererObject; @@ -319,8 +317,8 @@ namespace Spine.Unity { #endif // Create a new SubmeshInstruction when material changes. (or when forced to separate by a submeshSeparator) - bool forceSeparate = (separatorSlotCount > 0 && separatorSlots.Contains(slot)); - if ((vertexCount > 0 && lastMaterial.GetInstanceID() != material.GetInstanceID()) || forceSeparate) { + bool forceSeparate = (separatorSlots.Count > 0 && separatorSlots.Contains(slot)); + if (vertexCount > 0 && (lastMaterial.GetInstanceID() != material.GetInstanceID() || forceSeparate)) { workingSubmeshInstructions.Add( new Spine.Unity.MeshGeneration.SubmeshInstruction { skeleton = this.skeleton, @@ -333,14 +331,13 @@ namespace Spine.Unity { forceSeparate = forceSeparate } ); - submeshTriangleCount = 0; submeshVertexCount = 0; submeshFirstVertex = vertexCount; submeshStartSlotIndex = i; } + // Update state for the next iteration. lastMaterial = material; - submeshTriangleCount += attachmentTriangleCount; vertexCount += attachmentVertexCount; submeshVertexCount += attachmentVertexCount; @@ -367,7 +364,8 @@ namespace Spine.Unity { workingInstruction.frontFacing = this.frontFacing; #endif - // STEP 1.9. Post-process workingInstructions. + + // STEP 1.9. Post-process workingInstructions. ============================================================ #if SPINE_OPTIONAL_MATERIALOVERRIDE // Material overrides are done here so they can be applied per submesh instead of per slot @@ -384,61 +382,29 @@ namespace Spine.Unity { } } #endif - #if SPINE_OPTIONAL_RENDEROVERRIDE if (this.generateMeshOverride != null) { this.generateMeshOverride(workingInstruction); - - if (disableRenderingOnOverride) { - return; - } + if (disableRenderingOnOverride) return; } #endif - // STEP 2. Update vertex buffer based on verts from the attachments. + + // STEP 2. Update vertex buffer based on verts from the attachments. ============================================================ // Uses values that were also stored in workingInstruction. - Vector3[] vertices = this.vertices; - bool vertexCountIncreased = vertexCount > vertices.Length; - - if (vertexCountIncreased) { - this.vertices = vertices = new Vector3[vertexCount]; - this.colors = new Color32[vertexCount]; - this.uvs = new Vector2[vertexCount]; - - #if SPINE_OPTIONAL_NORMALS - if (calculateNormals) { - Vector3[] localNormals = this.normals = new Vector3[vertexCount]; - Vector3 normal = new Vector3(0, 0, -1); - for (int i = 0; i < vertexCount; i++) - localNormals[i] = normal; - } - - // For dynamic tangent calculation, you can remove the tangent-filling logic and add tangent calculation logic below. - if (calculateTangents) { - Vector4[] localTangents = this.tangents = new Vector4[vertexCount]; - Vector4 tangent = new Vector4(1, 0, 0, -1); - for (int i = 0; i < vertexCount; i++) - localTangents[i] = tangent; - } - #endif - } else { - Vector3 zero = Vector3.zero; - for (int i = vertexCount, n = vertices.Length; i < n; i++) - vertices[i] = zero; + bool vertexCountIncreased = ArraysMeshGenerator.EnsureSize(vertexCount, ref this.vertices, ref this.uvs, ref this.colors); + #if SPINE_OPTIONAL_NORMALS + if (vertexCountIncreased && calculateNormals) { + Vector3[] localNormals = this.normals = new Vector3[vertexCount]; + Vector3 normal = new Vector3(0, 0, -1); + for (int i = 0; i < vertexCount; i++) + localNormals[i] = normal; } - - float zSpacing = this.zSpacing; - float[] tempVertices = this.tempVertices; - Vector2[] uvs = this.uvs; - Color32[] colors = this.colors; - int vertexIndex = 0; - bool pmaVertexColors = this.pmaVertexColors; - Color32 color; - float a = skeleton.a * 255, r = skeleton.r, g = skeleton.g, b = skeleton.b; + #endif Vector3 meshBoundsMin; Vector3 meshBoundsMax; - if (vertexCount == 0) { + if (vertexCount <= 0) { meshBoundsMin = new Vector3(0, 0, 0); meshBoundsMax = new Vector3(0, 0, 0); } else { @@ -446,6 +412,7 @@ namespace Spine.Unity { meshBoundsMin.y = int.MaxValue; meshBoundsMax.x = int.MinValue; meshBoundsMax.y = int.MinValue; + if (zSpacing > 0f) { meshBoundsMin.z = 0f; meshBoundsMax.z = zSpacing * (drawOrderCount - 1); @@ -453,234 +420,60 @@ namespace Spine.Unity { meshBoundsMin.z = zSpacing * (drawOrderCount - 1); meshBoundsMax.z = 0f; } - int i = 0; - do { - Slot slot = drawOrderItems[i]; - Attachment attachment = slot.attachment; - RegionAttachment regionAttachment = attachment as RegionAttachment; - if (regionAttachment != null) { - regionAttachment.ComputeWorldVertices(slot.bone, tempVertices); - - float z = i * zSpacing; - float x1 = tempVertices[RegionAttachment.X1], y1 = tempVertices[RegionAttachment.Y1]; - float x2 = tempVertices[RegionAttachment.X2], y2 = tempVertices[RegionAttachment.Y2]; - float x3 = tempVertices[RegionAttachment.X3], y3 = tempVertices[RegionAttachment.Y3]; - float x4 = tempVertices[RegionAttachment.X4], y4 = tempVertices[RegionAttachment.Y4]; - vertices[vertexIndex].x = x1; - vertices[vertexIndex].y = y1; - vertices[vertexIndex].z = z; - vertices[vertexIndex + 1].x = x4; - vertices[vertexIndex + 1].y = y4; - vertices[vertexIndex + 1].z = z; - vertices[vertexIndex + 2].x = x2; - vertices[vertexIndex + 2].y = y2; - vertices[vertexIndex + 2].z = z; - vertices[vertexIndex + 3].x = x3; - vertices[vertexIndex + 3].y = y3; - vertices[vertexIndex + 3].z = z; - - if (pmaVertexColors) { - color.a = (byte)(a * slot.a * regionAttachment.a); - color.r = (byte)(r * slot.r * regionAttachment.r * color.a); - color.g = (byte)(g * slot.g * regionAttachment.g * color.a); - color.b = (byte)(b * slot.b * regionAttachment.b * color.a); - if (slot.data.blendMode == BlendMode.additive) color.a = 0; - } else { - color.a = (byte)(a * slot.a * regionAttachment.a); - color.r = (byte)(r * slot.r * regionAttachment.r * 255); - color.g = (byte)(g * slot.g * regionAttachment.g * 255); - color.b = (byte)(b * slot.b * regionAttachment.b * 255); - } - - colors[vertexIndex] = color; - colors[vertexIndex + 1] = color; - colors[vertexIndex + 2] = color; - colors[vertexIndex + 3] = color; - - float[] regionUVs = regionAttachment.uvs; - uvs[vertexIndex].x = regionUVs[RegionAttachment.X1]; - uvs[vertexIndex].y = regionUVs[RegionAttachment.Y1]; - uvs[vertexIndex + 1].x = regionUVs[RegionAttachment.X4]; - uvs[vertexIndex + 1].y = regionUVs[RegionAttachment.Y4]; - uvs[vertexIndex + 2].x = regionUVs[RegionAttachment.X2]; - uvs[vertexIndex + 2].y = regionUVs[RegionAttachment.Y2]; - uvs[vertexIndex + 3].x = regionUVs[RegionAttachment.X3]; - uvs[vertexIndex + 3].y = regionUVs[RegionAttachment.Y3]; - - // Calculate min/max X - if (x1 < meshBoundsMin.x) - meshBoundsMin.x = x1; - else if (x1 > meshBoundsMax.x) - meshBoundsMax.x = x1; - if (x2 < meshBoundsMin.x) - meshBoundsMin.x = x2; - else if (x2 > meshBoundsMax.x) - meshBoundsMax.x = x2; - if (x3 < meshBoundsMin.x) - meshBoundsMin.x = x3; - else if (x3 > meshBoundsMax.x) - meshBoundsMax.x = x3; - if (x4 < meshBoundsMin.x) - meshBoundsMin.x = x4; - else if (x4 > meshBoundsMax.x) - meshBoundsMax.x = x4; - - // Calculate min/max Y - if (y1 < meshBoundsMin.y) - meshBoundsMin.y = y1; - else if (y1 > meshBoundsMax.y) - meshBoundsMax.y = y1; - if (y2 < meshBoundsMin.y) - meshBoundsMin.y = y2; - else if (y2 > meshBoundsMax.y) - meshBoundsMax.y = y2; - if (y3 < meshBoundsMin.y) - meshBoundsMin.y = y3; - else if (y3 > meshBoundsMax.y) - meshBoundsMax.y = y3; - if (y4 < meshBoundsMin.y) - meshBoundsMin.y = y4; - else if (y4 > meshBoundsMax.y) - meshBoundsMax.y = y4; - - vertexIndex += 4; - } else { - if (!renderMeshes) - continue; - MeshAttachment meshAttachment = attachment as MeshAttachment; - if (meshAttachment != null) { - int meshVertexCount = meshAttachment.vertices.Length; - if (tempVertices.Length < meshVertexCount) - this.tempVertices = tempVertices = new float[meshVertexCount]; - meshAttachment.ComputeWorldVertices(slot, tempVertices); - - if (pmaVertexColors) { - color.a = (byte)(a * slot.a * meshAttachment.a); - color.r = (byte)(r * slot.r * meshAttachment.r * color.a); - color.g = (byte)(g * slot.g * meshAttachment.g * color.a); - color.b = (byte)(b * slot.b * meshAttachment.b * color.a); - if (slot.data.blendMode == BlendMode.additive) color.a = 0; - } else { - color.a = (byte)(a * slot.a * meshAttachment.a); - color.r = (byte)(r * slot.r * meshAttachment.r * 255); - color.g = (byte)(g * slot.g * meshAttachment.g * 255); - color.b = (byte)(b * slot.b * meshAttachment.b * 255); - } - - float[] meshUVs = meshAttachment.uvs; - float z = i * zSpacing; - for (int ii = 0; ii < meshVertexCount; ii += 2, vertexIndex++) { - float x = tempVertices[ii], y = tempVertices[ii + 1]; - vertices[vertexIndex].x = x; - vertices[vertexIndex].y = y; - vertices[vertexIndex].z = z; - colors[vertexIndex] = color; - uvs[vertexIndex].x = meshUVs[ii]; - uvs[vertexIndex].y = meshUVs[ii + 1]; - - if (x < meshBoundsMin.x) - meshBoundsMin.x = x; - else if (x > meshBoundsMax.x) - meshBoundsMax.x = x; - if (y < meshBoundsMin.y) - meshBoundsMin.y = y; - else if (y > meshBoundsMax.y) - meshBoundsMax.y = y; - } - } else { - WeightedMeshAttachment weightedMeshAttachment = attachment as WeightedMeshAttachment; - if (weightedMeshAttachment != null) { - int meshVertexCount = weightedMeshAttachment.uvs.Length; - if (tempVertices.Length < meshVertexCount) - this.tempVertices = tempVertices = new float[meshVertexCount]; - weightedMeshAttachment.ComputeWorldVertices(slot, tempVertices); - - if (pmaVertexColors) { - color.a = (byte)(a * slot.a * weightedMeshAttachment.a); - color.r = (byte)(r * slot.r * weightedMeshAttachment.r * color.a); - color.g = (byte)(g * slot.g * weightedMeshAttachment.g * color.a); - color.b = (byte)(b * slot.b * weightedMeshAttachment.b * color.a); - if (slot.data.blendMode == BlendMode.additive) color.a = 0; - } else { - color.a = (byte)(a * slot.a * weightedMeshAttachment.a); - color.r = (byte)(r * slot.r * weightedMeshAttachment.r * 255); - color.g = (byte)(g * slot.g * weightedMeshAttachment.g * 255); - color.b = (byte)(b * slot.b * weightedMeshAttachment.b * 255); - } - - float[] meshUVs = weightedMeshAttachment.uvs; - float z = i * zSpacing; - for (int ii = 0; ii < meshVertexCount; ii += 2, vertexIndex++) { - float x = tempVertices[ii], y = tempVertices[ii + 1]; - vertices[vertexIndex].x = x; - vertices[vertexIndex].y = y; - vertices[vertexIndex].z = z; - colors[vertexIndex] = color; - uvs[vertexIndex].x = meshUVs[ii]; - uvs[vertexIndex].y = meshUVs[ii + 1]; - - if (x < meshBoundsMin.x) - meshBoundsMin.x = x; - else if (x > meshBoundsMax.x) - meshBoundsMax.x = x; - if (y < meshBoundsMin.y) - meshBoundsMin.y = y; - else if (y > meshBoundsMax.y) - meshBoundsMax.y = y; - } - } - } - } - } while (++i < drawOrderCount); } + int vertexIndex = 0; + ArraysMeshGenerator.FillVerts(skeleton, 0, drawOrderCount, this.zSpacing, pmaVertexColors, this.vertices, this.uvs, this.colors, ref vertexIndex, ref tempVertices, ref meshBoundsMin, ref meshBoundsMax, renderMeshes); - // Step 3. Move the mesh data into a UnityEngine.Mesh + + // Step 3. Move the mesh data into a UnityEngine.Mesh ============================================================ var currentSmartMesh = doubleBufferedMesh.GetNext(); // Double-buffer for performance. var currentMesh = currentSmartMesh.mesh; - - currentMesh.vertices = vertices; + currentMesh.vertices = this.vertices; currentMesh.colors32 = colors; currentMesh.uv = uvs; - - Vector3 meshBoundsExtents = meshBoundsMax - meshBoundsMin; - Vector3 meshBoundsCenter = meshBoundsMin + meshBoundsExtents * 0.5f; - currentMesh.bounds = new Bounds(meshBoundsCenter, meshBoundsExtents); + currentMesh.bounds = ArraysMeshGenerator.ToBounds(meshBoundsMin, meshBoundsMax); var currentSmartMeshInstructionUsed = currentSmartMesh.instructionUsed; #if SPINE_OPTIONAL_NORMALS - if (currentSmartMeshInstructionUsed.vertexCount < vertexCount) { - if (calculateNormals) - currentMesh.normals = normals; - - // For dynamic calculated tangents, this needs to be moved out of the vertexCount check block when replacing the logic, also ensuring the size. - if (calculateTangents) - currentMesh.tangents = this.tangents; - } + if (calculateNormals && currentSmartMeshInstructionUsed.vertexCount < vertexCount) + currentMesh.normals = normals; #endif // Check if the triangles should also be updated. // This thorough structure check is cheaper than updating triangles every frame. bool mustUpdateMeshStructure = CheckIfMustUpdateMeshStructure(workingInstruction, currentSmartMeshInstructionUsed); + int submeshCount = workingSubmeshInstructions.Count; if (mustUpdateMeshStructure) { var thisSubmeshMaterials = this.submeshMaterials; thisSubmeshMaterials.Clear(false); - int submeshCount = workingSubmeshInstructions.Count; int oldSubmeshCount = submeshes.Count; submeshes.Capacity = submeshCount; for (int i = oldSubmeshCount; i < submeshCount; i++) - submeshes.Items[i] = new SubmeshTriangleBuffer(); + submeshes.Items[i] = new ArraysMeshGenerator.SubmeshTriangleBuffer(workingSubmeshInstructions.Items[i].triangleCount); var mutableTriangles = !workingInstruction.immutableTriangles; for (int i = 0, last = submeshCount - 1; i < submeshCount; i++) { var submeshInstruction = workingSubmeshInstructions.Items[i]; - if (mutableTriangles || i >= oldSubmeshCount) - SetSubmesh(i, submeshInstruction, - #if SPINE_OPTIONAL_FRONTFACING - currentInstructions.attachmentFlips, - #endif - i == last); + + if (mutableTriangles || i >= oldSubmeshCount) { + + #if !SPINE_OPTIONAL_FRONTFACING + var currentSubmesh = submeshes.Items[i]; + int instructionTriangleCount = submeshInstruction.triangleCount; + if (renderMeshes) { + ArraysMeshGenerator.FillTriangles(ref currentSubmesh.triangles, skeleton, instructionTriangleCount, submeshInstruction.firstVertexIndex, submeshInstruction.startSlot, submeshInstruction.endSlot, (i == last)); + currentSubmesh.triangleCount = instructionTriangleCount; + } else { + ArraysMeshGenerator.FillTrianglesQuads(ref currentSubmesh.triangles, ref currentSubmesh.triangleCount, ref currentSubmesh.firstVertex, submeshInstruction.firstVertexIndex, instructionTriangleCount, (i == last)); + } + #else + SetSubmesh(i, submeshInstruction, currentInstructions.attachmentFlips, i == last); + #endif + + } + thisSubmeshMaterials.Add(submeshInstruction.material); } @@ -690,12 +483,24 @@ namespace Spine.Unity { currentMesh.SetTriangles(submeshes.Items[i].triangles, i); } + #if SPINE_OPTIONAL_SOLVETANGENTS + if (calculateTangents) { + ArraysMeshGenerator.SolveTangents2DEnsureSize(ref this.tangents, ref this.tempTanBuffer, vertices.Length); + for (int i = 0; i < submeshCount; i++) { + var submesh = submeshes.Items[i]; + ArraysMeshGenerator.SolveTangents2DTriangles(this.tempTanBuffer, submesh.triangles, submesh.triangleCount, this.vertices, this.uvs, vertexCount); + } + ArraysMeshGenerator.SolveTangents2DBuffer(this.tangents, this.tempTanBuffer, vertexCount); + currentMesh.tangents = this.tangents; + } + #endif + // CheckIfMustUpdateMaterialArray (last pushed materials vs currently parsed materials) // Needs to check against the Working Submesh Instructions Materials instead of the cached submeshMaterials. { var lastPushedMaterials = this.sharedMaterials; bool mustUpdateRendererMaterials = mustUpdateMeshStructure || - (lastPushedMaterials.Length != workingSubmeshInstructions.Count); + (lastPushedMaterials.Length != submeshCount); if (!mustUpdateRendererMaterials) { var workingSubmeshInstructionsItems = workingSubmeshInstructions.Items; @@ -717,14 +522,12 @@ namespace Spine.Unity { } } - // Step 4. The UnityEngine.Mesh is ready. Set it as the MeshFilter's mesh. Store the instructions used for that mesh. + + // Step 4. The UnityEngine.Mesh is ready. Set it as the MeshFilter's mesh. Store the instructions used for that mesh. ============================================================ meshFilter.sharedMesh = currentMesh; currentSmartMesh.instructionUsed.Set(workingInstruction); - // Step 5. Miscellaneous - // Add stuff here if you want - #if SPINE_OPTIONAL_SUBMESHRENDERER if (submeshRenderers.Length > 0) { for (int i = 0; i < submeshRenderers.Length; i++) { @@ -803,10 +606,7 @@ namespace Spine.Unity { #if SPINE_OPTIONAL_FRONTFACING void SetSubmesh (int submeshIndex, Spine.Unity.MeshGeneration.SubmeshInstruction submeshInstructions, ExposedList flipStates, bool isLastSubmesh) { - #else - void SetSubmesh (int submeshIndex, Spine.Unity.MeshGeneration.SubmeshInstruction submeshInstructions, bool isLastSubmesh) { - #endif - SubmeshTriangleBuffer currentSubmesh = submeshes.Items[submeshIndex]; + var currentSubmesh = submeshes.Items[submeshIndex]; int[] triangles = currentSubmesh.triangles; int triangleCount = submeshInstructions.triangleCount; @@ -825,12 +625,8 @@ namespace Spine.Unity { currentSubmesh.triangles = triangles = new int[triangleCount]; currentSubmesh.triangleCount = 0; } - - #if SPINE_OPTIONAL_FRONTFACING + if (!this.renderMeshes && !this.frontFacing) { - #else - if (!this.renderMeshes) { - #endif // Use stored triangles if possible. if (currentSubmesh.firstVertex != firstVertex || currentSubmesh.triangleCount < triangleCount) { //|| currentSubmesh.triangleCount == 0 currentSubmesh.triangleCount = triangleCount; @@ -847,20 +643,14 @@ namespace Spine.Unity { } return; } - - // This method caches several .Items arrays. - // Never mutate their overlying ExposedList objects. - - #if SPINE_OPTIONAL_FRONTFACING + var flipStatesItems = flipStates.Items; - #endif // Iterate through all slots and store their triangles. var drawOrderItems = skeleton.DrawOrder.Items; int triangleIndex = 0; // Modified by loop for (int i = submeshInstructions.startSlot, n = submeshInstructions.endSlot; i < n; i++) { Attachment attachment = drawOrderItems[i].attachment; - #if SPINE_OPTIONAL_FRONTFACING bool flip = frontFacing && flipStatesItems[i]; // Add RegionAttachment triangles @@ -885,38 +675,18 @@ namespace Spine.Unity { firstVertex += 4; continue; } - #else - if (attachment is RegionAttachment) { - triangles[triangleIndex] = firstVertex; - triangles[triangleIndex + 1] = firstVertex + 2; - triangles[triangleIndex + 2] = firstVertex + 1; - triangles[triangleIndex + 3] = firstVertex + 2; - triangles[triangleIndex + 4] = firstVertex + 3; - triangles[triangleIndex + 5] = firstVertex + 1; - - triangleIndex += 6; - firstVertex += 4; - continue; - } - #endif // Add (Weighted)MeshAttachment triangles int[] attachmentTriangles; int attachmentVertexCount; var meshAttachment = attachment as MeshAttachment; if (meshAttachment != null) { - attachmentVertexCount = meshAttachment.vertices.Length >> 1; // length/2 + attachmentVertexCount = meshAttachment.worldVerticesLength >> 1; // length/2 attachmentTriangles = meshAttachment.triangles; } else { - var weightedMeshAttachment = attachment as WeightedMeshAttachment; - if (weightedMeshAttachment != null) { - attachmentVertexCount = weightedMeshAttachment.uvs.Length >> 1; // length/2 - attachmentTriangles = weightedMeshAttachment.triangles; - } else - continue; + continue; } - #if SPINE_OPTIONAL_FRONTFACING if (flip) { for (int ii = 0, nn = attachmentTriangles.Length; ii < nn; ii += 3, triangleIndex += 3) { triangles[triangleIndex + 2] = firstVertex + attachmentTriangles[ii]; @@ -928,15 +698,11 @@ namespace Spine.Unity { triangles[triangleIndex] = firstVertex + attachmentTriangles[ii]; } } - #else - for (int ii = 0, nn = attachmentTriangles.Length; ii < nn; ii++, triangleIndex++) { - triangles[triangleIndex] = firstVertex + attachmentTriangles[ii]; - } - #endif firstVertex += attachmentVertexCount; } } + #endif #if UNITY_EDITOR void OnDrawGizmos () { @@ -1004,13 +770,5 @@ namespace Spine.Unity { } } } - - class SubmeshTriangleBuffer { - public int[] triangles = new int[0]; - - // These two fields are used when renderMeshes == false - public int triangleCount; - public int firstVertex = -1; - } } } diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs b/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs index 42e346d9b..3506fb2b3 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs @@ -211,7 +211,7 @@ namespace Spine.Unity.Editor { Texture2D icon = null; - if (attachment is MeshAttachment || attachment is WeightedMeshAttachment) + if (attachment is MeshAttachment) icon = SpineEditorUtilities.Icons.mesh; else icon = SpineEditorUtilities.Icons.image; diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs index b242d5421..78253b241 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs @@ -229,17 +229,15 @@ namespace Spine.Unity { for (int i = 0, n = ikConstraints.Count; i < n; i++) constraintTargetNames.Add(ikConstraints.Items[i].Target.Data.Name); - foreach (var b in utilityBones) { - if (b.bone == null) { - return; - } - if (b.mode == SkeletonUtilityBone.Mode.Override) { + var utilityBones = this.utilityBones; + for (int i = 0, n = utilityBones.Count; i < n; i++) { + var b = utilityBones[i]; + if (b.bone == null) return; + if (b.mode == SkeletonUtilityBone.Mode.Override) hasTransformBones = true; - } - if (constraintTargetNames.Contains(b.bone.Data.Name)) { + if (constraintTargetNames.Contains(b.bone.Data.Name)) hasUtilityConstraints = true; - } } if (utilityConstraints.Count > 0) @@ -267,25 +265,21 @@ namespace Spine.Unity { } void UpdateLocal (ISkeletonAnimation anim) { - if (needToReprocessBones) CollectBones(); - if (utilityBones == null) - return; - - foreach (SkeletonUtilityBone b in utilityBones) { - b.transformLerpComplete = false; - } + var utilityBones = this.utilityBones; + if (utilityBones == null) return; + for (int i = 0, n = utilityBones.Count; i < n; i++) + utilityBones[i].transformLerpComplete = false; UpdateAllBones(); } void UpdateWorld (ISkeletonAnimation anim) { UpdateAllBones(); - - foreach (SkeletonUtilityConstraint c in utilityConstraints) - c.DoUpdate(); + for (int i = 0, n = utilityConstraints.Count; i < n; i++) + utilityConstraints[i].DoUpdate(); } void UpdateComplete (ISkeletonAnimation anim) { @@ -293,16 +287,13 @@ namespace Spine.Unity { } void UpdateAllBones () { - if (boneRoot == null) { + if (boneRoot == null) CollectBones(); - } - - if (utilityBones == null) - return; - - foreach (SkeletonUtilityBone b in utilityBones) { - b.DoUpdate(); - } + + var utilityBones = this.utilityBones; + if (utilityBones == null) return; + for (int i = 0, n = utilityBones.Count; i < n; i++) + utilityBones[i].DoUpdate(); } public Transform GetBoneRoot () { diff --git a/spine-unity/Assets/spine-unity/SpineAttributes.cs b/spine-unity/Assets/spine-unity/SpineAttributes.cs index 269f37ae9..d6c0ab34c 100644 --- a/spine-unity/Assets/spine-unity/SpineAttributes.cs +++ b/spine-unity/Assets/spine-unity/SpineAttributes.cs @@ -170,8 +170,7 @@ namespace Spine.Unity { } public class SpineAtlasRegion : PropertyAttribute { - //TODO: Standardize with Skeleton attributes - //NOTE: For now, relies on locally scoped field named "atlasAsset" for source. + } } diff --git a/spine-unity/README.md b/spine-unity/README.md index 9274b05d7..277a49caf 100644 --- a/spine-unity/README.md +++ b/spine-unity/README.md @@ -2,7 +2,7 @@ The **spine-unity** runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using [Unity](http://unity3d.com/). spine-unity is based on [spine-csharp](https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-csharp). -For more documentation, see [spine-unity Documentation](https://github.com/pharan/spine-unity-docs/blob/master/README.md). +For more documentation, see [spine-unity Documentation](http://esotericsoftware.com/spine-unity). While spine-unity can render directly with Unity, without the need for any other plugins, it also works with [2D Toolkit](http://www.2dtoolkit.com/) and can render skeletons using a TK2D texture atlas. @@ -14,7 +14,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-unity works with data exported from Spine 3.2.01. Updating spine-unity to [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. +spine-unity works with data exported from the latest version of Spine. spine-unity supports all Spine features. @@ -32,9 +32,7 @@ For more documentation, see [spine-unity Documentation](http://esotericsoftware. ## Quick installation -Download and run this Unity package: - -[spine-unity.unitypackage](http://esotericsoftware.com/files/runtimes/unity/spine-unity.unitypackage) +Download the latest Spine-Unity unitypackage from the download page: http://esotericsoftware.com/spine-unity-download/ In the `Assets/Examples/Scenes` folder you will find many example scenes that demonstrate various spine-unity features. @@ -52,23 +50,13 @@ You can also choose to setup and run from the Git files: > - `Gizmos` is a [special folder](http://docs.unity3d.com/Manual/SpecialFolders.html) in Unity. It needs to be at the root of your assets folder to function correctly. (ie. `Assets/Gizmos` - `spine-csharp` and `spine-unity` can be placed in any subfolder you want. +For more information on importing the runtime into your Unity project, see the documentation sections on [installing](http://esotericsoftware.com/spine-unity#Installing) and [updating](http://esotericsoftware.com/spine-unity#Updating-Your-Projects-SpineUnity-Runtime), + ---------- -## Importing skeleton data - -1. Add your `.json`, `.atlas.txt` and `.png` into your Unity project. - - You can do this through Unity's Project View: Drag and drop a folder containing the `.json`, `.atlas.txt` and `.png` files exported from Spine directly into the Unity Project view. - - ... or you can opt to do this through Windows File Explorer or OSX Finder. Move or copy your `.json`, `.atlas.txt` and `.png` files into your Unity project's `Assets` folder, ideally in its own subfolder. -2. spine-unity will automatically detect the `.json` and `.atlas.txt` and attempt to generate the necessary spine-unity assets. -3. To start using your Spine assets, right-click on the SkeletonDataAsset (the asset with the orange Spine logo on it) and choose `Spine > Instantiate(SkeletonAnimation)`. This will add a GameObject with a `SkeletonAnimation` component on it. - - If you are more familiar with Mecanim, you may choose `Spine > Instantiate(Mecanim)` instead. -4. For more info on how to control the animation, see the [spine-unity Animation Control documentation](https://github.com/pharan/spine-unity-docs/blob/master/Animation.md). - -> The original [manual setup video](https://www.youtube.com/watch?v=-V84OIvZdQc) to shows which assets belong where and what spine-unity's automatic import actually does for you under the hood. In case you have a specialized asset setup, this video will be useful for understanding how assets fit together. - > More resources: -- [Drag and drop video](http://www.youtube.com/watch?v=-Gk_zJsY1Ms) -- [readme PDF](https://raw.githubusercontent.com/EsotericSoftware/spine-runtimes/master/spine-unity/README.pdf) +- [Spine-Unity Documentation](http://esotericsoftware.com/spine-unity) +- [Importing Spine Skeletons into Unity](http://esotericsoftware.com/spine-unity#Importing-into-Unity) ---------- diff --git a/spine-xna/Properties/AssemblyInfo.cs b/spine-xna/Properties/AssemblyInfo.cs index 8117bed42..b71ed01b4 100644 --- a/spine-xna/Properties/AssemblyInfo.cs +++ b/spine-xna/Properties/AssemblyInfo.cs @@ -8,8 +8,8 @@ using System.Runtime.InteropServices; [assembly: AssemblyTitle("spine-xna")] [assembly: AssemblyProduct("spine-xna")] [assembly: AssemblyDescription("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2013")] +[assembly: AssemblyCompany("Esoteric Software")] +[assembly: AssemblyCopyright("Copyright © Esoteric Software 2013-2016")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/spine-xna/README.md b/spine-xna/README.md index 2afbd013f..4f5c66625 100644 --- a/spine-xna/README.md +++ b/spine-xna/README.md @@ -10,14 +10,17 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-xna works with data exported from Spine 3.2.01. Updating spine-xna to [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. +spine-xna works with data exported from the latest version of Spine. spine-xna supports all Spine features. ## Setup 1. Download the Spine Runtimes source using [git](https://help.github.com/articles/set-up-git) or by downloading it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip). -1. If necessary, install [Microsoft XNA Game Studio 4.0](https://mxa.codeplex.com/releases/view/618279). +1. For XNA with Visual Studio 2015, download [XNA 4.0 refresh for Visual Studio 2015](https://mxa.codeplex.com/releases/view/618279). Install each subfolder as per the README file. 1. Open the `spine-xna.sln` project file with Visual Studio. +1. Set `spine-xna-example` as the startup project +1. Set the working directory of `spine-xna-example` to `spine-runtimes/spine-xna/example` +1. Run the example! Alternatively, the contents of the `spine-csharp/src` and `spine-xna/src` directories can be copied into your project. diff --git a/spine-xna/example/Properties/AssemblyInfo.cs b/spine-xna/example/Properties/AssemblyInfo.cs index f9b3c07df..d0fe099c2 100644 --- a/spine-xna/example/Properties/AssemblyInfo.cs +++ b/spine-xna/example/Properties/AssemblyInfo.cs @@ -8,8 +8,8 @@ using System.Runtime.InteropServices; [assembly: AssemblyTitle("spine-xna-example")] [assembly: AssemblyProduct("spine-xna-example")] [assembly: AssemblyDescription("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2013")] +[assembly: AssemblyCompany("Esoteric Software")] +[assembly: AssemblyCopyright("Copyright © Esoteric Software 2013-2016")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/spine-xna/example/data/goblins-mesh.atlas b/spine-xna/example/data/goblins-mesh.atlas index b928522f8..d674db469 100644 --- a/spine-xna/example/data/goblins-mesh.atlas +++ b/spine-xna/example/data/goblins-mesh.atlas @@ -1,291 +1,292 @@ goblins-mesh.png +size: 1024,128 format: RGBA8888 filter: Linear,Linear repeat: none dagger - rotate: false - xy: 2, 28 + rotate: true + xy: 372, 100 size: 26, 108 orig: 26, 108 offset: 0, 0 index: -1 goblin/eyes-closed rotate: false - xy: 137, 29 + xy: 2, 7 size: 34, 12 orig: 34, 12 offset: 0, 0 index: -1 goblin/head rotate: false - xy: 26, 357 + xy: 107, 36 size: 103, 66 orig: 103, 66 offset: 0, 0 index: -1 goblin/left-arm rotate: false - xy: 30, 28 + xy: 901, 56 size: 37, 35 orig: 37, 35 offset: 0, 0 index: -1 goblin/left-foot rotate: false - xy: 134, 260 + xy: 929, 95 size: 65, 31 orig: 65, 31 offset: 0, 0 index: -1 goblin/left-hand rotate: false - xy: 69, 25 + xy: 452, 2 size: 36, 41 orig: 36, 41 offset: 0, 0 index: -1 goblin/left-lower-leg - rotate: false - xy: 134, 293 + rotate: true + xy: 713, 93 size: 33, 70 orig: 33, 70 offset: 0, 0 index: -1 goblin/left-shoulder rotate: false - xy: 137, 43 + xy: 610, 44 size: 29, 44 orig: 29, 44 offset: 0, 0 index: -1 goblin/left-upper-leg - rotate: false - xy: 30, 65 + rotate: true + xy: 638, 93 size: 33, 73 orig: 33, 73 offset: 0, 0 index: -1 goblin/neck rotate: false - xy: 201, 387 + xy: 490, 2 size: 36, 41 orig: 36, 41 offset: 0, 0 index: -1 goblin/pelvis rotate: false - xy: 26, 140 + xy: 482, 45 size: 62, 43 orig: 62, 43 offset: 0, 0 index: -1 goblin/right-arm - rotate: false - xy: 171, 84 + rotate: true + xy: 690, 2 size: 23, 50 orig: 23, 50 offset: 0, 0 index: -1 goblin/right-foot rotate: false - xy: 134, 225 + xy: 771, 58 size: 63, 33 orig: 63, 33 offset: 0, 0 index: -1 goblin/right-hand rotate: false - xy: 204, 258 + xy: 940, 56 size: 36, 37 orig: 36, 37 offset: 0, 0 index: -1 goblin/right-lower-leg - rotate: false - xy: 201, 430 + rotate: true + xy: 482, 90 size: 36, 76 orig: 36, 76 offset: 0, 0 index: -1 goblin/right-shoulder - rotate: false - xy: 130, 89 + rotate: true + xy: 602, 3 size: 39, 45 orig: 39, 45 offset: 0, 0 index: -1 goblin/right-upper-leg - rotate: false - xy: 98, 214 + rotate: true + xy: 641, 57 size: 34, 63 orig: 34, 63 offset: 0, 0 index: -1 goblin/torso - rotate: false - xy: 131, 410 + rotate: true + xy: 212, 34 size: 68, 96 orig: 68, 96 offset: 0, 0 index: -1 goblin/undie-straps rotate: false - xy: 2, 7 + xy: 380, 5 size: 55, 19 orig: 55, 19 offset: 0, 0 index: -1 goblin/undies rotate: false - xy: 199, 227 + xy: 174, 5 size: 36, 29 orig: 36, 29 offset: 0, 0 index: -1 goblingirl/eyes-closed rotate: false - xy: 59, 2 + xy: 269, 11 size: 37, 21 orig: 37, 21 offset: 0, 0 index: -1 goblingirl/head rotate: false - xy: 26, 425 + xy: 2, 21 size: 103, 81 orig: 103, 81 offset: 0, 0 index: -1 goblingirl/left-arm - rotate: false - xy: 201, 190 + rotate: true + xy: 978, 56 size: 37, 35 orig: 37, 35 offset: 0, 0 index: -1 goblingirl/left-foot rotate: false - xy: 134, 192 + xy: 107, 3 size: 65, 31 orig: 65, 31 offset: 0, 0 index: -1 goblingirl/left-hand rotate: false - xy: 196, 109 + xy: 565, 2 size: 35, 40 orig: 35, 40 offset: 0, 0 index: -1 goblingirl/left-lower-leg - rotate: false - xy: 169, 293 + rotate: true + xy: 785, 93 size: 33, 70 orig: 33, 70 offset: 0, 0 index: -1 goblingirl/left-shoulder - rotate: false - xy: 107, 30 + rotate: true + xy: 690, 27 size: 28, 46 orig: 28, 46 offset: 0, 0 index: -1 goblingirl/left-upper-leg - rotate: false - xy: 65, 68 + rotate: true + xy: 857, 93 size: 33, 70 orig: 33, 70 offset: 0, 0 index: -1 goblingirl/neck rotate: false - xy: 204, 297 + xy: 528, 2 size: 35, 41 orig: 35, 41 offset: 0, 0 index: -1 goblingirl/pelvis rotate: false - xy: 131, 365 + xy: 546, 45 size: 62, 43 orig: 62, 43 offset: 0, 0 index: -1 goblingirl/right-arm rotate: false - xy: 100, 97 + xy: 452, 48 size: 28, 50 orig: 28, 50 offset: 0, 0 index: -1 goblingirl/right-foot rotate: false - xy: 134, 157 + xy: 836, 58 size: 63, 33 orig: 63, 33 offset: 0, 0 index: -1 goblingirl/right-hand - rotate: false - xy: 199, 151 + rotate: true + xy: 771, 20 size: 36, 37 orig: 36, 37 offset: 0, 0 index: -1 goblingirl/right-lower-leg - rotate: false - xy: 96, 279 + rotate: true + xy: 560, 90 size: 36, 76 orig: 36, 76 offset: 0, 0 index: -1 goblingirl/right-shoulder rotate: false - xy: 204, 340 + xy: 649, 10 size: 39, 45 orig: 39, 45 offset: 0, 0 index: -1 goblingirl/right-upper-leg - rotate: false - xy: 98, 149 + rotate: true + xy: 706, 57 size: 34, 63 orig: 34, 63 offset: 0, 0 index: -1 goblingirl/torso rotate: false - xy: 26, 259 + xy: 310, 2 size: 68, 96 orig: 68, 96 offset: 0, 0 index: -1 goblingirl/undie-straps rotate: false - xy: 134, 136 + xy: 212, 13 size: 55, 19 orig: 55, 19 offset: 0, 0 index: -1 goblingirl/undies rotate: false - xy: 196, 78 + xy: 810, 27 size: 36, 29 orig: 36, 29 offset: 0, 0 index: -1 shield rotate: false - xy: 26, 185 + xy: 380, 26 size: 70, 72 orig: 70, 72 offset: 0, 0 index: -1 spear - rotate: false - xy: 2, 138 + rotate: true + xy: 2, 104 size: 22, 368 orig: 22, 368 offset: 0, 0 diff --git a/spine-xna/example/data/goblins-mesh.json b/spine-xna/example/data/goblins-mesh.json index 163060444..8443eee97 100644 --- a/spine-xna/example/data/goblins-mesh.json +++ b/spine-xna/example/data/goblins-mesh.json @@ -1,26 +1,27 @@ { +"skeleton": { "hash": "P7CQ4ImK+tcAICATgSttlZ5HOSM", "spine": "3.3.07", "width": 266.93, "height": 349.6, "images": "./images/" }, "bones": [ { "name": "root" }, { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, - { "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 }, + { "name": "torso", "parent": "hip", "length": 85.82, "rotation": 93.92, "x": -6.42, "y": 1.97 }, + { "name": "neck", "parent": "torso", "length": 18.38, "rotation": -1.51, "x": 81.67, "y": -6.34 }, + { "name": "head", "parent": "neck", "length": 68.28, "rotation": -13.92, "x": 20.93, "y": 11.59 }, + { "name": "left shoulder", "parent": "torso", "length": 35.43, "rotation": -156.96, "x": 74.04, "y": -20.38 }, + { "name": "left arm", "parent": "left shoulder", "length": 35.62, "rotation": 28.16, "x": 37.85, "y": -2.34 }, + { "name": "left upper leg", "parent": "hip", "length": 50.39, "rotation": -89.09, "x": 14.45, "y": 2.81 }, + { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "rotation": -16.65, "x": 56.34, "y": 0.98 }, + { "name": "left foot", "parent": "left lower leg", "length": 46.5, "rotation": 102.43, "x": 58.94, "y": -7.61 }, + { "name": "left hand", "parent": "left arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.07 }, { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, - { "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 }, - { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 }, - { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 }, - { "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 }, - { "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 }, - { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 }, - { "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 }, - { "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 }, - { "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 }, - { "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 }, - { "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 }, - { "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 }, - { "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 }, - { "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 }, - { "name": "spear1", "parent": "left hand", "length": 65.06, "x": 0.48, "y": 17.03, "rotation": 102.43 }, - { "name": "spear2", "parent": "spear1", "length": 61.41, "x": 65.05, "y": 0.04, "rotation": 0.9 }, - { "name": "spear3", "parent": "spear2", "length": 76.79, "x": 61.88, "y": 0.57, "rotation": -0.9 } + { "name": "right shoulder", "parent": "torso", "length": 37.24, "rotation": 133.88, "x": 76.02, "y": 18.14 }, + { "name": "right arm", "parent": "right shoulder", "length": 36.74, "rotation": 36.32, "x": 37.6, "y": 0.31 }, + { "name": "right upper leg", "parent": "hip", "length": 42.45, "rotation": -97.49, "x": -20.07, "y": -6.83 }, + { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "rotation": -14.34, "x": 42.99, "y": -0.61 }, + { "name": "right foot", "parent": "right lower leg", "length": 45.45, "rotation": 110.3, "x": 64.88, "y": 0.04 }, + { "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.35, "x": 36.9, "y": 0.34 }, + { "name": "spear1", "parent": "left hand", "length": 65.06, "rotation": 102.43, "x": 0.48, "y": 17.03 }, + { "name": "spear2", "parent": "spear1", "length": 61.41, "rotation": 0.9, "x": 65.05, "y": 0.04 }, + { "name": "spear3", "parent": "spear2", "length": 76.79, "rotation": -0.9, "x": 61.88, "y": 0.57 } ], "slots": [ { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" }, @@ -52,12 +53,12 @@ "left hand item": { "dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 }, "spear": { - "type": "skinnedmesh", + "type": "mesh", "uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.76608, 0.21781, 0.75642, 0.386, 0.74723, 0.54607, 0.72117, 1, 0.28838, 1, 0.24208, 0.54327, 0.22589, 0.38361, 0.2089, 0.21605, 0.20043, 0.13242, 0, 0.11519, 0.4527, 0, 0.58399, 0 ], "triangles": [ 4, 7, 3, 6, 7, 4, 5, 6, 4, 10, 11, 12, 1, 13, 0, 12, 13, 1, 10, 12, 1, 9, 10, 1, 2, 9, 1, 8, 9, 2, 3, 8, 2, 7, 8, 3 ], - "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.51, 20, -0.31, -6.16, 0.48, 2, 18, 64.73, -5.03, 0.5, 19, -0.4, -5.06, 0.49, 1, 16, 4.56, 23.91, 1, 1, 16, 41.7, -138.95, 1, 1, 16, 32.42, -141.1, 1, 1, 16, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.5, 19, 0.53, 6.59, 0.49, 2, 19, 62.18, 6.66, 0.51, 20, 0.2, 6.09, 0.48, 1, 20, 30.96, 6.61, 1, 1, 20, 37.26, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], - "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], + "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.5116, 20, -0.31, -6.16, 0.48839, 2, 18, 64.73, -5.03, 0.50272, 19, -0.4, -5.06, 0.49728, 1, 10, 4.56, 23.91, 1, 1, 10, 41.7, -138.95, 1, 1, 10, 32.41999, -141.1, 1, 1, 10, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.50272, 19, 0.52999, 6.59, 0.49728, 2, 19, 62.18, 6.66, 0.5116, 20, 0.2, 6.09, 0.48839, 1, 20, 30.96, 6.61, 1, 1, 20, 37.25999, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], "hull": 14, + "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], "width": 22, "height": 368 } @@ -66,10 +67,10 @@ "dagger": { "type": "mesh", "uvs": [ 0.78091, 0.38453, 1, 0.38405, 1, 0.44881, 0.73953, 0.4687, 0.74641, 0.81344, 0.34022, 1, 0.15434, 1, 0.11303, 0.78858, 0.23007, 0.47367, 0, 0.45047, 0, 0.38621, 0.22367, 0.38573, 0.24384, 0, 1, 0 ], - "triangles": [ 5, 7, 8, 4, 8, 3, 4, 5, 8, 5, 6, 7, 9, 11, 8, 8, 11, 3, 3, 0, 2, 3, 11, 0, 9, 10, 11, 0, 1, 2, 11, 12, 0, 0, 12, 13 ], + "triangles": [ 0, 12, 13, 11, 12, 0, 0, 1, 2, 9, 10, 11, 3, 11, 0, 3, 0, 2, 8, 11, 3, 9, 11, 8, 5, 6, 7, 4, 5, 8, 4, 8, 3, 5, 7, 8 ], "vertices": [ 15.49, -12.82, 21.13, -13.57, 20.16, -20.49, 13.15, -21.67, 8.13, -58.56, -5.13, -77.04, -9.92, -76.36, -7.79, -53.6, -0.03, -20.36, -5.6, -17.04, -4.63, -10.17, 1.12, -10.93, 7.46, 30.24, 26.93, 27.49 ], - "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], "hull": 14, + "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], "width": 26, "height": 108 } @@ -88,9 +89,9 @@ "type": "mesh", "uvs": [ 0, 0.60494, 0.14172, 0.5145, 0.24218, 0.55229, 0.32667, 0.67806, 0.37969, 0.79352, 0.53505, 0.93014, 0.86056, 1, 0.94071, 0.94169, 0.92098, 0.69923, 0.9888, 0.65497, 0.99003, 0.51643, 0.89632, 0.43561, 0.94487, 0.41916, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80754, 0.16044, 0.66698, 0.01997, 0.4734, 0.01805, 0.29215, 0.19893, 0.25392, 0.31823, 0.09117, 0.324, 0, 0.44331, 0.43271, 0.69153, 0.466, 0.47794, 0.35996, 0.31246, 0.73473, 0.68593, 0.72215, 0.57425, 0.88179, 0.5583, 0.80267, 0.51015 ], "triangles": [ 5, 27, 6, 7, 27, 8, 7, 6, 27, 4, 24, 5, 5, 24, 27, 4, 3, 24, 27, 29, 8, 8, 29, 9, 24, 28, 27, 24, 25, 28, 24, 3, 25, 29, 28, 30, 29, 27, 28, 25, 2, 26, 25, 3, 2, 9, 29, 10, 0, 23, 1, 28, 25, 30, 29, 11, 10, 29, 30, 11, 2, 21, 26, 2, 1, 21, 23, 22, 1, 1, 22, 21, 30, 16, 11, 30, 17, 16, 30, 25, 17, 17, 26, 18, 18, 26, 19, 26, 17, 25, 11, 15, 12, 11, 16, 15, 12, 15, 13, 15, 14, 13, 21, 20, 26, 26, 20, 19 ], - "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.46, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.6, 23.41, 35.89, 40.17, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.8, -24.31, 17.2, -40.65, 20.68, -33.02 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], + "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.45999, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.59999, 23.41, 35.89, 40.16999, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.79999, -24.31, 17.2, -40.65, 20.68, -33.02 ], "hull": 24, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], "width": 103, "height": 66 } @@ -101,9 +102,9 @@ "type": "mesh", "uvs": [ 0.68992, 0.29284, 1, 0.46364, 1, 0.74643, 0.84089, 1, 0.66344, 1, 0.33765, 0.64284, 0, 0.44124, 0, 0, 0.34295, 0 ], "triangles": [ 3, 4, 2, 4, 5, 2, 5, 0, 2, 0, 1, 2, 0, 5, 8, 5, 6, 8, 6, 7, 8 ], - "vertices": [ 18.6, 8.81, 32.19, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], + "vertices": [ 18.6, 8.81, 32.18999, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], "width": 37, "height": 35 } @@ -113,10 +114,10 @@ "name": "goblin/left-foot", "type": "mesh", "uvs": [ 0.15733, 0.31873, 0.08195, 0.78502, 0.15884, 0.99366, 0.41633, 0.96804, 0.68822, 0.97636, 1, 0.96388, 0.99385, 0.73501, 0.85294, 0.51862, 0.61479, 0.31056, 0.46991, 0, 0.48032, 0.75604, 0.75994, 0.77706 ], - "triangles": [ 2, 1, 3, 3, 10, 4, 4, 11, 5, 4, 10, 11, 3, 1, 10, 11, 6, 5, 1, 0, 10, 11, 7, 6, 11, 10, 7, 10, 8, 7, 10, 0, 8, 0, 9, 8 ], + "triangles": [ 0, 9, 8, 10, 0, 8, 10, 8, 7, 11, 10, 7, 11, 7, 6, 1, 0, 10, 11, 6, 5, 3, 1, 10, 4, 10, 11, 4, 11, 5, 3, 10, 4, 2, 1, 3 ], "vertices": [ 2.28, 13.07, -1.76, -1.64, 3.59, -7.8, 20.25, -6.04, 37.91, -5.27, 58.12, -3.71, 57.31, 3.34, 47.78, 9.51, 31.95, 15.05, 21.99, 24.11, 24.03, 0.75, 42.21, 1.16 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], "width": 65, "height": 31 } @@ -126,10 +127,10 @@ "name": "goblin/left-hand", "type": "mesh", "uvs": [ 0.518, 0.12578, 1, 0.16285, 0.99788, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42792, 0.17601, 0, 0.43567, 0 ], - "triangles": [ 2, 3, 0, 4, 5, 0, 3, 4, 0, 0, 7, 8, 6, 7, 0, 0, 5, 6, 2, 0, 1 ], - "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.48, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], - "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], + "triangles": [ 2, 0, 1, 0, 5, 6, 6, 7, 0, 0, 7, 8, 3, 4, 0, 4, 5, 0, 2, 3, 0 ], + "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.47999, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], "hull": 9, + "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], "width": 36, "height": 41 } @@ -139,10 +140,10 @@ "name": "goblin/left-lower-leg", "type": "mesh", "uvs": [ 0.95508, 0.20749, 0.81927, 0.65213, 0.94754, 0.77308, 0.67842, 0.97346, 0.46463, 1, 0.26845, 1, 0.04963, 0.90706, 0.2106, 0.60115, 0.07478, 0.40195, 0.18545, 0, 0.28857, 0 ], - "triangles": [ 1, 3, 4, 7, 4, 5, 5, 6, 7, 3, 1, 2, 1, 4, 7, 0, 1, 10, 7, 8, 10, 1, 7, 10, 10, 8, 9 ], - "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.19, -18.29 ], - "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], + "triangles": [ 10, 8, 9, 1, 7, 10, 7, 8, 10, 0, 1, 10, 1, 4, 7, 3, 1, 2, 5, 6, 7, 7, 4, 5, 1, 3, 4 ], + "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.18999, -18.29 ], "hull": 11, + "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], "width": 33, "height": 70 } @@ -153,9 +154,9 @@ "type": "mesh", "uvs": [ 0.7377, 0.40692, 1, 0.75237, 1, 1, 0.62046, 1, 0.26184, 0.56601, 0, 0.29783, 0, 0, 0.44115, 0 ], "triangles": [ 3, 1, 2, 3, 0, 1, 3, 4, 0, 4, 7, 0, 4, 5, 7, 5, 6, 7 ], - "vertices": [ 15.18, 5.74, 32.17, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.74, -4.66, 6.54 ], - "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], + "vertices": [ 15.18, 5.74, 32.16999, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.73999, -4.66, 6.54 ], "hull": 8, + "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], "width": 29, "height": 44 } @@ -165,10 +166,10 @@ "name": "goblin/left-upper-leg", "type": "mesh", "uvs": [ 1, 0.12167, 1, 0.54873, 0.91067, 0.78907, 0.76567, 1, 0.3087, 0.9579, 0, 0.68777, 0, 0.219, 0.51961, 0, 0.87552, 0 ], - "triangles": [ 3, 4, 2, 2, 4, 1, 1, 4, 7, 4, 5, 7, 0, 1, 7, 5, 6, 7, 7, 8, 0 ], + "triangles": [ 7, 8, 0, 5, 6, 7, 0, 1, 7, 4, 5, 7, 1, 4, 7, 2, 4, 1, 3, 4, 2 ], "vertices": [ 2.33, 13.06, 33.5, 12.57, 51, 9.34, 66.32, 4.31, 63, -10.71, 43.13, -20.58, 8.91, -20.04, -6.79, -2.64, -6.61, 9.1 ], - "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], "hull": 9, + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], "width": 33, "height": 73 } @@ -179,9 +180,9 @@ "type": "mesh", "uvs": [ 0.81967, 0.27365, 0.92101, 0.82048, 0.47134, 1, 0.15679, 0.9354, 0, 0.7556, 0.19268, 0.51833, 0.15468, 0.35706, 0, 0.21989, 0.13568, 0, 0.68878, 0, 0.70145, 0.53872 ], "triangles": [ 3, 5, 2, 2, 10, 1, 2, 5, 10, 3, 4, 5, 10, 0, 1, 0, 10, 6, 10, 5, 6, 7, 8, 6, 6, 9, 0, 6, 8, 9 ], - "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.05, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], - "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], + "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.04999, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], "hull": 10, + "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], "width": 36, "height": 41 } @@ -191,10 +192,10 @@ "name": "goblin/pelvis", "type": "mesh", "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], - "triangles": [ 1, 3, 0, 1, 2, 3 ], + "triangles": [ 1, 2, 3, 1, 3, 0 ], "vertices": [ 25.38, -20.73, -36.61, -20.73, -36.61, 22.26, 25.38, 22.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "width": 62, "height": 43 } @@ -205,9 +206,9 @@ "type": "mesh", "uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24384, 1, 0, 0.86558, 0.20822, 0.10919, 0.50903, 0, 0.85342, 0 ], "triangles": [ 1, 2, 6, 6, 2, 5, 1, 6, 0, 4, 5, 3, 2, 3, 5, 6, 7, 0 ], - "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.18 ], - "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], + "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.17999 ], "hull": 8, + "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], "width": 23, "height": 50 } @@ -217,10 +218,10 @@ "name": "goblin/right-foot", "type": "mesh", "uvs": [ 0.40851, 0.0047, 0.59087, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97532, 0.89391, 0.90385, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65984, 0, 0.46577, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71257, 0.715, 0.74681 ], - "triangles": [ 4, 5, 15, 7, 14, 6, 5, 6, 15, 6, 14, 15, 14, 7, 9, 7, 8, 9, 15, 3, 4, 9, 10, 14, 15, 2, 3, 15, 14, 2, 14, 10, 1, 12, 1, 11, 1, 12, 13, 14, 1, 2, 1, 13, 0, 1, 10, 11 ], + "triangles": [ 1, 10, 11, 1, 13, 0, 14, 1, 2, 1, 12, 13, 12, 1, 11, 14, 10, 1, 15, 14, 2, 15, 2, 3, 9, 10, 14, 15, 3, 4, 7, 8, 9, 14, 7, 9, 6, 14, 15, 5, 6, 15, 7, 14, 6, 4, 5, 15 ], "vertices": [ 17.36, 25.99, 29.13, 15.44, 39.89, 10.8, 48.14, 7.24, 53.84, -2.38, 49.43, -6, 34.84, -6.39, 16.84, -6.87, -2.4, -7.38, -7.58, -3.86, -7.78, 3.7, -7.95, 10.1, -2.57, 22.36, 10.84, 25.97, 22.14, 2.75, 37.31, 2.03 ], - "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], "hull": 14, + "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], "width": 63, "height": 33 } @@ -230,10 +231,10 @@ "name": "goblin/right-hand", "type": "mesh", "uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89823, 0.82004, 0.8259, 0.74285, 0.84223, 0.49993, 0.96356, 0.34102, 0.66023, 0 ], - "triangles": [ 4, 7, 5, 5, 7, 6, 4, 3, 7, 3, 2, 8, 7, 3, 8, 8, 1, 10, 8, 2, 1, 0, 10, 1, 8, 10, 9 ], - "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.88, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], + "triangles": [ 8, 10, 9, 0, 10, 1, 8, 2, 1, 8, 1, 10, 7, 3, 8, 3, 2, 8, 4, 3, 7, 5, 7, 6, 4, 7, 5 ], + "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.87999, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], "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 ], "width": 36, "height": 37 } @@ -243,10 +244,10 @@ "name": "goblin/right-hand", "type": "mesh", "uvs": [ 0.88538, 0.22262, 0.76167, 0.3594, 0.75088, 0.78308, 0.95326, 0.84981, 1, 0.60302 ], - "triangles": [ 3, 2, 4, 2, 1, 4, 1, 0, 4 ], + "triangles": [ 1, 0, 4, 2, 1, 4, 3, 2, 4 ], "vertices": [ -2.82, 15.97, 2.4, 11.71, 18.08, 11.9, 20.27, 19.27, 11.09, 20.62 ], - "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], "hull": 5, + "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], "width": 36, "height": 37 } @@ -256,10 +257,10 @@ "name": "goblin/right-lower-leg", "type": "mesh", "uvs": [ 1, 0.27261, 0.81312, 0.52592, 0.79587, 0.71795, 0.95544, 0.80988, 0.85193, 0.95493, 0.47241, 1, 0.14033, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30325, 0.60611, 0 ], - "triangles": [ 4, 5, 2, 2, 5, 8, 5, 6, 8, 6, 7, 8, 4, 2, 3, 2, 8, 1, 8, 9, 1, 9, 10, 1, 1, 10, 0 ], - "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.1, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.77, -1.03, 58.99, -9.19, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], + "triangles": [ 1, 10, 0, 9, 10, 1, 8, 9, 1, 2, 8, 1, 4, 2, 3, 6, 7, 8, 5, 6, 8, 2, 5, 8, 4, 5, 2 ], + "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.09999, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.76999, -1.03, 58.99, -9.18999, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], "width": 36, "height": 76 } @@ -271,8 +272,8 @@ "uvs": [ 0.62008, 0.03708, 0.92131, 0.09048, 1, 0.38319, 0.72049, 0.6937, 0.31656, 1, 0, 1, 0, 0.75106, 0.28233, 0.49988 ], "triangles": [ 4, 6, 7, 4, 7, 3, 4, 5, 6, 7, 0, 3, 2, 0, 1, 2, 3, 0 ], "vertices": [ -3.17, -11.05, -9, -0.57, -1.01, 10.33, 16.69, 11.17, 37.41, 8.2, 45.45, -1.16, 36.95, -8.46, 21.2, -7.47 ], - "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], "hull": 8, + "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], "width": 39, "height": 45 } @@ -282,10 +283,10 @@ "name": "goblin/right-upper-leg", "type": "mesh", "uvs": [ 0.27018, 0, 0.11618, 0.18177, 0, 0.70688, 0, 0.89577, 0.26668, 1, 0.48718, 1, 0.67618, 0.83532, 1, 0.5161, 1, 0.25543, 0.74618, 0.0571 ], - "triangles": [ 5, 4, 6, 6, 4, 2, 4, 3, 2, 2, 1, 6, 6, 1, 9, 6, 9, 7, 9, 1, 0, 9, 8, 7 ], - "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.51, 10.18, 19.13, 18.47, 2.85, 16.32, -8.4, 6.14 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "triangles": [ 9, 8, 7, 9, 1, 0, 6, 9, 7, 6, 1, 9, 2, 1, 6, 4, 3, 2, 6, 4, 2, 5, 4, 6 ], + "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.50999, 10.18, 19.12999, 18.46999, 2.85, 16.32, -8.39999, 6.14 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], "width": 34, "height": 63 } @@ -296,9 +297,9 @@ "type": "mesh", "uvs": [ 0, 0.33287, 0.15945, 0.46488, 0.15761, 0.60314, 0.15502, 0.79806, 0.32807, 0.93478, 0.6875, 1, 0.80731, 1, 1, 0.77763, 1, 0.66147, 1, 0.56703, 0.93207, 0.4771, 0.86944, 0.39416, 0.83837, 0.226, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78734, 0.86249, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38316, 0.77692, 0.73446, 0.66478, 0.51012 ], "triangles": [ 5, 16, 6, 6, 16, 7, 4, 17, 5, 5, 17, 16, 4, 3, 17, 17, 21, 16, 16, 21, 7, 3, 2, 17, 21, 19, 18, 21, 17, 19, 17, 2, 19, 21, 8, 7, 21, 18, 8, 18, 9, 8, 19, 22, 18, 18, 10, 9, 18, 22, 10, 2, 1, 19, 19, 20, 22, 19, 1, 20, 22, 11, 10, 22, 20, 11, 20, 1, 14, 20, 12, 11, 1, 0, 14, 20, 13, 12, 20, 14, 13, 0, 15, 14 ], - "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.88, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], + "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.87999, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], "hull": 16, + "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], "width": 68, "height": 96 } @@ -308,10 +309,10 @@ "name": "goblin/undie-straps", "type": "mesh", "uvs": [ 0.36097, 0.44959, 0.66297, 0.60591, 1, 0.19486, 1, 0.57117, 0.75897, 1, 0.38697, 1, 0, 0.26433, 0, 0, 0.12497, 0 ], - "triangles": [ 5, 1, 4, 4, 1, 3, 6, 0, 5, 5, 0, 1, 3, 1, 2, 6, 8, 0, 6, 7, 8 ], - "vertices": [ -10.56, 12.87, 6.53, 9.9, 25.62, 17.71, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], + "triangles": [ 6, 7, 8, 6, 8, 0, 3, 1, 2, 5, 0, 1, 6, 0, 5, 4, 1, 3, 5, 1, 4 ], + "vertices": [ -10.56, 12.87, 6.53, 9.89999, 25.62, 17.70999, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], "hull": 9, + "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], "width": 55, "height": 19 } @@ -321,10 +322,10 @@ "name": "goblin/undies", "type": "mesh", "uvs": [ 0, 0.32029, 0.14893, 0.59457, 0.22437, 1, 0.35909, 1, 0.50998, 1, 0.79559, 0.58453, 0.9842, 0.28015, 1, 0.00588, 0.46957, 0.17646, 0, 0.03933, 0.48843, 0.59122, 0.48114, 0.43099 ], - "triangles": [ 3, 10, 4, 4, 10, 5, 10, 3, 1, 3, 2, 1, 1, 11, 10, 1, 0, 11, 10, 11, 5, 5, 11, 6, 0, 8, 11, 11, 8, 6, 0, 9, 8, 6, 8, 7 ], - "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.59, 22.22, 6.11, 22.92, 14.05, 3.75, 9.44, -13.08, 13.71, 4.21, -2.59, 4.03, 2.05 ], - "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], + "triangles": [ 6, 8, 7, 0, 9, 8, 11, 8, 6, 0, 8, 11, 5, 11, 6, 10, 11, 5, 1, 0, 11, 1, 11, 10, 3, 2, 1, 10, 3, 1, 4, 10, 5, 3, 10, 4 ], + "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.58999, 22.22, 6.11, 22.92, 14.05, 3.75, 9.43999, -13.08, 13.71, 4.21, -2.58999, 4.03, 2.05 ], "hull": 10, + "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], "width": 36, "height": 29 } @@ -757,26 +758,31 @@ ] } }, - "ffd": { + "deform": { "default": { + "left hand item": { + "spear": [ + { "time": 0 } + ] + }, "right hand item": { "dagger": [ { "time": 0, "offset": 26, - "vertices": [ 2.34, 0.14 ], + "vertices": [ 2.34754, 0.14469 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.5, "offset": 8, - "vertices": [ -1.19, 4.31, 0.07, 6.41, 1.66, 6.18, 1.75, 3.59 ], + "vertices": [ -1.19415, 4.31531, 0.07279, 6.41351, 1.66048, 6.18882, 1.75232, 3.59555 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1, "offset": 26, - "vertices": [ 2.34, 0.14 ] + "vertices": [ 2.34754, 0.14469 ] } ] } @@ -790,22 +796,22 @@ }, { "time": 0.2, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08, -1.08, 0.08, -1.08, 0.08, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08 ], + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391, -1.08534, 0.08391, -1.08534, 0.08391, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08391 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.3666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09, 1.47, 0.09, 1.47, 0.09, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09 ], + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017, 1.47305, 0.09017, 1.47305, 0.09017, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09017 ], "curve": [ 0.621, 0, 0.75, 1 ] }, { "time": 0.7, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17, -1.17, -0.17, -1.17, -0.17, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17 ], + "vertices": [ -10.97826, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183, -1.1755, -0.17182, -1.1755, -0.17183, 0, 0, -2.22324, 2.66465, -4.83295, 2.70084, -5.70553, -0.51941, -3.15962, -1.61501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64741, 0.81612, -11.82285, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.1755, -0.17183 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.8666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08, 0.38, 0.08, 0.38, 0.08, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08 ], + "vertices": [ 10.69275, 4.05949, 3.66373, 1.85426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446, 0.38687, 0.08446, 0.38687, 0.08446, 0, 0, 2.69652, -0.22738, 3.77135, 0.11417, 3.6893, 1.55352, 2.49594, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.4588, -3.9113, 9.19593, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446 ], "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 1 } @@ -816,35 +822,35 @@ { "time": 0, "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] }, { "time": 0.1333 }, { "time": 0.2333, "offset": 8, - "vertices": [ -3.96, -2.34, -5.8, -12.47, -2.23, -12.99, 2.02, -9.1, 0, 0, 0, 0, 0, 0, -1.35, -5.28 ] + "vertices": [ -3.96072, -2.34594, -5.80445, -12.47629, -2.23129, -12.99037, 2.02941, -9.1036, 0, 0, 0, 0, 0, 0, -1.35254, -5.2883 ] }, { "time": 0.3666, "offset": 8, - "vertices": [ 0.66, 0.33, 0.33, 2.69, -0.48, 2.54, -1.13, 1.38, 0, 0, 0, 0, 0, 0, -0.11, 0.79 ] + "vertices": [ 0.66504, 0.33548, 0.33902, 2.69014, -0.4817, 2.54524, -1.13592, 1.38562, 0, 0, 0, 0, 0, 0, -0.11907, 0.79273 ] }, { "time": 0.5, "curve": "stepped" }, { "time": 0.6333 }, { "time": 0.7333, "offset": 8, - "vertices": [ -2.97, 9.4, -6.91, 19.92, -10.55, 18.41, -12.37, 12.38, -4.72, 6.3, 0, 0, -1.48, 4.88, -7.06, 10.7 ] + "vertices": [ -2.97737, 9.40254, -6.91661, 19.92794, -10.55287, 18.41085, -12.37161, 12.38473, -4.72606, 6.30798, 0, 0, -1.48902, 4.88944, -7.06773, 10.70101 ] }, { "time": 0.8333, "offset": 6, - "vertices": [ 1.05, 1.56, -2.52, 7.99, -5.52, 17.14, -8.93, 15.79, -10.73, 10.22, -4.23, 5.36, 0, 0, 0, 0, -5.83, 8.55 ] + "vertices": [ 1.05318, 1.56361, -2.52722, 7.9974, -5.5203, 17.14136, -8.93317, 15.79635, -10.73747, 10.22055, -4.23801, 5.36992, 0, 0, 0, 0, -5.83147, 8.55531 ] }, { "time": 1, "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] + "vertices": [ 3.69298, 2.37572, -7.16969, 18.79732, -12.78161, 14.7778, -12.75775, 6.50514, -3.13475, 1.98906, -0.44401, 0.36629, 0, 0, -3.80085, 2.98474 ] } ] }, @@ -854,22 +860,22 @@ { "time": 0.1333, "offset": 6, - "vertices": [ -0.68, -4.13 ] + "vertices": [ -0.68989, -4.13283 ] }, { "time": 0.3333, "offset": 6, - "vertices": [ -1.04, -3.1 ] + "vertices": [ -1.04945, -3.10476 ] }, { "time": 0.7, "offset": 6, - "vertices": [ -1.42, -6.3 ] + "vertices": [ -1.4245, -6.30616 ] }, { "time": 0.8666, "offset": 6, - "vertices": [ -1.13, -1.79 ] + "vertices": [ -1.13541, -1.79035 ] }, { "time": 1 } ] @@ -880,38 +886,38 @@ { "time": 0.1333, "offset": 2, - "vertices": [ -2.81, 2.63, -2.35, 3.89, -1.99, 4.86, -0.93, 5.57, -0.48, 5.09, -0.34, 3.42, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31, 1.91, -1.32, 3.65 ] + "vertices": [ -2.81258, 2.63114, -2.35238, 3.89441, -1.99921, 4.8639, -0.93273, 5.57982, -0.48886, 5.09854, -0.34812, 3.42912, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31305, 1.91371, -1.32986, 3.65703 ] }, { "time": 0.2333, "offset": 2, - "vertices": [ -6.39, 6.41, -7.74, 8.27, -7.02, 11.35, -4.03, 13.93, -2.5, 12.62, -1.46, 7.58, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84, 2.61, -4.53, 7.92 ] + "vertices": [ -6.39088, 6.41245, -7.74575, 8.27191, -7.02471, 11.35894, -4.0347, 13.93454, -2.50399, 12.62962, -1.46124, 7.58915, -0.17445, 1.36898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84765, 2.61215, -4.53955, 7.92357 ] }, { "time": 0.3, "offset": 2, - "vertices": [ -8.27, 6.68, -9.29, 10.13, -8.62, 14.71, -4.58, 18.81, -2.2, 17.1, -0.07, 9.9, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94, 2.38, -4.59, 10.01 ] + "vertices": [ -8.27184, 6.68821, -9.29764, 10.13797, -8.62231, 14.71339, -4.58629, 18.81939, -2.20304, 17.10709, -0.07794, 9.9046, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94624, 2.38007, -4.59398, 10.01888 ] }, { "time": 0.3666, "offset": 2, - "vertices": [ -10.47, 9.44, -13.36, 12.4, -14.32, 16.94, -9.24, 23.55, -5.51, 21.51, -1.19, 11.53, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14, 2.29, -6.63, 11.37 ] + "vertices": [ -10.47683, 9.44175, -13.36882, 12.40982, -14.32568, 16.94392, -9.24462, 23.55674, -5.51711, 21.51377, -1.19581, 11.53192, 2.54451, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14847, 2.29389, -6.63418, 11.37127 ] }, { "time": 0.5, "offset": 2, - "vertices": [ -5.42, 4.36, -10.59, 7.04, -11.64, 11.55, -6.19, 20.12, -1.45, 18.05, 4.86, 6.41, 2.81, 0.27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96, 4.94 ] + "vertices": [ -5.42473, 4.36854, -10.59004, 7.04468, -11.64251, 11.55845, -6.19665, 20.12805, -1.45497, 18.05411, 4.86619, 6.41678, 2.81462, 0.27601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96412, 4.94829 ] }, { "time": 0.6333 }, { "time": 0.7333, "offset": 4, - "vertices": [ 1.31, -6.84, -0.87, -12.54, -5.98, -14.08, -7.15, -11.63, -5.67, -4.83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06, -6.93 ] + "vertices": [ 1.31462, -6.84099, -0.87905, -12.54479, -5.9851, -14.08367, -7.15892, -11.63193, -5.6792, -4.83544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06163, -6.93844 ] }, { "time": 0.8, "offset": 4, - "vertices": [ 0.65, -3.42, -0.43, -6.27, -2.99, -7.04, -3.57, -5.81, -2.83, -2.41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79, -1.28, 0, 0, 0, 0, -1.03, -3.46 ] + "vertices": [ 0.65731, -3.42049, -0.43952, -6.27239, -2.99255, -7.04183, -3.57946, -5.81596, -2.83959, -2.41772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79687, -1.2802, 0, 0, 0, 0, -1.03081, -3.46922 ] }, { "time": 0.8666 } ] @@ -921,13 +927,13 @@ { "time": 0, "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] }, { "time": 0.5 }, { "time": 1, "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] + "vertices": [ -1.48416, 0.34736, 0, 0, 1.31152, 0.08085, 1.60295, 0.09881, 0.13673, 0.1547, 0, 0, 0, 0, -0.72862, -0.0449 ] } ] }, @@ -937,7 +943,7 @@ { "time": 0.6, "offset": 6, - "vertices": [ 1.8, -1.56 ] + "vertices": [ 1.80396, -1.56552 ] }, { "time": 1 } ] @@ -946,17 +952,17 @@ "right upper leg": [ { "time": 0, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] }, { "time": 0.3333 }, { "time": 0.8666, "offset": 14, - "vertices": [ 0.13, -2.35, -1.33, -5.99, -1.35, -4.43 ] + "vertices": [ 0.13424, -2.35377, -1.33317, -5.99572, -1.35861, -4.43323 ] }, { "time": 1, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] + "vertices": [ -6.03856, -1.46324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34684, -1.93101, -1.86047, -5.05265, -2.5014, -3.09984 ] } ] }, @@ -965,37 +971,37 @@ { "time": 0, "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] }, { "time": 0.1333, "offset": 14, - "vertices": [ 1.31, -0.59, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + "vertices": [ 1.31318, -0.59727, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] }, { "time": 0.3, "offset": 14, - "vertices": [ 6.03, -3.13, 7.55, -1.38, 6.79, 0.31, 4.23, 1.14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07, -5.16, 0, 0, 4, 0.27, 0, 0, 0, 0, 3.43, -3.52 ] + "vertices": [ 6.03761, -3.13561, 7.55475, -1.38111, 6.79747, 0.31171, 4.23503, 1.14012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07575, -5.16824, 0, 0, 4.0041, 0.27245, 0, 0, 0, 0, 3.4376, -3.52286 ] }, { "time": 0.5, "offset": 14, - "vertices": [ 2.25, -0.87, 2.57, -0.56, 3.17, -0.57, 1.48, 0.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22, -4.43, 0, 0, 1.48, 0.01, 0, 0, 0, 0, 0.31, -3.28, -1.53, 0.17 ] + "vertices": [ 2.25942, -0.87202, 2.575, -0.56861, 3.17112, -0.57003, 1.48704, 0.9924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22451, -4.43862, 0, 0, 1.48691, 0.01586, 0, 0, 0, 0, 0.31388, -3.28095, -1.53797, 0.17803 ] }, { "time": 0.6333, "offset": 14, - "vertices": [ 0.75, -1.51, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] + "vertices": [ 0.75002, -1.51701, -0.97944, -1.62934, 0.74861, -0.6123, -1.44598, 1.97515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65701, -3.95221, 0, 0, -1.46987, -0.31373, 0, 0, 0, 0, -3.31756, -3.5535, -2.56329, 0.29673 ] }, { "time": 0.8666, "offset": 14, - "vertices": [ 0.62, -1.26, 0.38, -2.2, 3.25, -0.5, 2.41, 2.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.66, -3.1, 0, 0, 2.3, -1.15, 0, 0, 0, 0, -0.07, -3.63, -0.93, 0.1 ] + "vertices": [ 0.62202, -1.26262, 0.38489, -2.20701, 3.25048, -0.50042, 2.41108, 2.39315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.6639, -3.10099, 0, 0, 2.30655, -1.15196, 0, 0, 0, 0, -0.07676, -3.63497, -0.9321, 0.1079 ] }, { "time": 1, "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] + "vertices": [ -1.48952, -0.24021, -2.72312, -2.15489, -0.51183, -3.39752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0964, -2.61458, 0, 0, 0.57686, -1.24874, 0, 0, 0, 0, -2.11251, -3.29932 ] } ] }, @@ -1004,32 +1010,32 @@ { "time": 0, "offset": 2, - "vertices": [ -1.77, 0.54, -0.96, -1.03, -0.39, -0.24, -1.77, 0.54 ] + "vertices": [ -1.77696, 0.54759, -0.96145, -1.03793, -0.39148, -0.24071, -1.77696, 0.54759 ] }, { "time": 0.1333, "offset": 2, - "vertices": [ -2.25, -1.03, -1.49, -4.23, -0.74, -2.84, -1.9, 0.54 ] + "vertices": [ -2.25683, -1.03177, -1.49719, -4.23861, -0.74469, -2.84906, -1.90072, 0.54477 ] }, { "time": 0.3333, "offset": 2, - "vertices": [ -2.37, -0.05, -0.49, 0.19, -0.9, 1.16, -1.6, 2.7, 0.96, 0.8 ] + "vertices": [ -2.37974, -0.05431, -0.49433, 0.19436, -0.90861, 1.16519, -1.60956, 2.70798, 0.96186, 0.80615 ] }, { "time": 0.7, "offset": 2, - "vertices": [ -0.91, -2.76, -0.62, -3.63, -0.84, -2.26, -2.56, 0.52 ] + "vertices": [ -0.91714, -2.76567, -0.62214, -3.63489, -0.8494, -2.26772, -2.56076, 0.5297 ] }, { "time": 0.8666, "offset": 2, - "vertices": [ -2.56, 0.52, -1.58, 0.32, -1.38, 0.32, -2.56, 0.52 ] + "vertices": [ -2.56076, 0.5297, -1.58064, 0.32031, -1.3847, 0.32476, -2.56076, 0.5297 ] }, { "time": 1, "offset": 2, - "vertices": [ -1.77, 0.54, -0.8, 0.53, -0.8, 0.53, -1.77, 0.54 ] + "vertices": [ -1.77696, 0.54759, -0.80128, 0.53413, -0.80128, 0.53413, -1.77696, 0.54759 ] } ] }, @@ -1037,35 +1043,35 @@ "undies": [ { "time": 0, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] }, { "time": 0.1333, - "vertices": [ 0.72, 0.43, 7.2, -0.16, 1.37, 0, 1.37, 0, 1.37, 0, 1.25, 0.04, -0.99, -2.95, -1.37, -3.07, 1.37, 0, 0.35, -0.29, 2.99, -0.07, 3.9, -0.14 ] + "vertices": [ 0.72659, 0.43319, 7.20416, -0.1638, 1.37759, 0, 1.37759, 0, 1.37759, 0, 1.25279, 0.0464, -0.99861, -2.95085, -1.37542, -3.07404, 1.37759, 0, 0.35279, -0.29279, 2.99218, -0.07019, 3.90478, -0.14039 ] }, { "time": 0.3333, - "vertices": [ 1.16, 0, 2.1, -0.23, 0, 0, 0, 0, 0, 0, 2.24, -0.24, -0.43, 0.6, -1.55, 0.48 ] + "vertices": [ 1.16999, 0, 2.10599, -0.234, 0, 0, 0, 0, 0, 0, 2.24999, -0.24999, -0.4344, 0.60551, -1.55939, 0.48051 ] }, { "time": 0.5333, - "vertices": [ 1.16, 0, -0.23, -0.93, -2.92, 0.35, 0, 0, 0, 0, 0.49, -0.24, -0.64, -2.07, -0.64, -2.07 ] + "vertices": [ 1.16999, 0, -0.234, -0.93599, -2.92499, 0.35099, 0, 0, 0, 0, 0.49999, -0.24999, -0.64078, -2.07914, -0.64078, -2.07914 ] }, { "time": 0.7, - "vertices": [ 1.86, -0.11, 4.66, -0.09, -1.76, 0.21, 0, 0, -0.56, 0.32, -1.13, -1.15, -2.19, -3.47, -1.29, -3.47, 0, 0, 0, 0, 1.58, -0.04, 2.65, 0.16 ] + "vertices": [ 1.8627, -0.11514, 4.66326, -0.09099, -1.76428, 0.21171, 0, 0, -0.56832, 0.32832, -1.13833, -1.1511, -2.19996, -3.47068, -1.29718, -3.47068, 0, 0, 0, 0, 1.58785, -0.04642, 2.65941, 0.16714 ] }, { "time": 0.8333, - "vertices": [ 2.41, -0.2, 8.58, 0.58, -0.83, 0.1, 0, 0, -1.02, 0.59, -2.44, -1.87, -1.62, 0, 0, 0, 0, 0, 0, 0, 2.85, -0.08, 4.78, 0.3 ] + "vertices": [ 2.41687, -0.20725, 8.58108, 0.585, -0.83571, 0.10028, 0, 0, -1.02299, 0.59098, -2.44899, -1.872, -1.62499, 0, 0, 0, 0, 0, 0, 0, 2.85813, -0.08356, 4.78695, 0.30086 ] }, { "time": 0.8666, - "vertices": [ 2.01, -0.02, 8.98, 0.44, -0.2, 0.08, 0.45, 0, -0.35, 0.47, -1.84, -1.44, -0.79, 1.26, 0.53, 1.23, 0.45, 0, 0.11, -0.09, 3.28, -0.09, 5.13, 0.19 ] + "vertices": [ 2.01969, -0.0214, 8.98545, 0.4446, -0.20937, 0.08022, 0.45919, 0, -0.35919, 0.47279, -1.84159, -1.4488, -0.79153, 1.2642, 0.53285, 1.23981, 0.45919, 0, 0.11759, -0.09759, 3.2839, -0.09025, 5.13115, 0.19388 ] }, { "time": 1, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] + "vertices": [ 0.43098, 0.722, 10.60295, -0.11699, 2.29598, 0, 2.29598, 0, 2.29598, 0, 0.58798, 0.24399, -2.40018, -0.65335, -2.2782, -0.77533, 2.29598, 0, 0.58798, -0.48799, 4.98697, -0.11699, 6.50796, -0.23399 ] } ] } diff --git a/spine-xna/example/data/goblins-mesh.png b/spine-xna/example/data/goblins-mesh.png index f172361f2..fc524c564 100644 Binary files a/spine-xna/example/data/goblins-mesh.png and b/spine-xna/example/data/goblins-mesh.png differ diff --git a/spine-xna/example/data/goblins-mesh.skel b/spine-xna/example/data/goblins-mesh.skel new file mode 100644 index 000000000..4a4d2adf4 Binary files /dev/null and b/spine-xna/example/data/goblins-mesh.skel differ diff --git a/spine-xna/example/data/raptor.atlas b/spine-xna/example/data/raptor.atlas index c90da0078..a8a9b2dca 100644 --- a/spine-xna/example/data/raptor.atlas +++ b/spine-xna/example/data/raptor.atlas @@ -1,251 +1,251 @@ raptor.png -size: 1022,1022 +size: 2048,1024 format: RGBA8888 filter: Linear,Linear repeat: none back_arm rotate: false - xy: 410, 545 - size: 46, 29 - orig: 46, 29 + xy: 213, 4 + size: 91, 57 + orig: 91, 57 offset: 0, 0 index: -1 back_bracer rotate: false - xy: 540, 548 - size: 39, 28 - orig: 39, 28 + xy: 306, 6 + size: 77, 55 + orig: 77, 55 offset: 0, 0 index: -1 back_hand rotate: true - xy: 504, 538 - size: 36, 34 - orig: 36, 34 + xy: 1976, 277 + size: 72, 68 + orig: 72, 68 offset: 0, 0 index: -1 back_knee - rotate: false - xy: 299, 478 - size: 49, 67 - orig: 49, 67 + rotate: true + xy: 1320, 55 + size: 97, 134 + orig: 97, 134 offset: 0, 0 index: -1 back_thigh - rotate: true - xy: 140, 247 - size: 39, 24 - orig: 39, 24 + rotate: false + xy: 385, 14 + size: 78, 47 + orig: 78, 47 offset: 0, 0 index: -1 eyes_open - rotate: true - xy: 2, 2 - size: 47, 45 - orig: 47, 45 + rotate: false + xy: 1708, 14 + size: 93, 89 + orig: 93, 89 offset: 0, 0 index: -1 front_arm - rotate: false - xy: 360, 544 - size: 48, 30 - orig: 48, 30 + rotate: true + xy: 1547, 66 + size: 96, 60 + orig: 96, 60 offset: 0, 0 index: -1 front_bracer rotate: false - xy: 538, 578 - size: 41, 29 - orig: 41, 29 + xy: 1960, 440 + size: 81, 58 + orig: 81, 58 offset: 0, 0 index: -1 front_hand rotate: false - xy: 538, 609 - size: 41, 38 - orig: 41, 38 + xy: 1960, 500 + size: 82, 75 + orig: 82, 75 offset: 0, 0 index: -1 front_open_hand rotate: false - xy: 894, 782 - size: 43, 44 - orig: 43, 44 + xy: 1960, 577 + size: 86, 87 + orig: 86, 87 offset: 0, 0 index: -1 front_thigh rotate: false - xy: 942, 849 - size: 57, 29 - orig: 57, 29 + xy: 2, 3 + size: 114, 58 + orig: 114, 58 offset: 0, 0 index: -1 gun - rotate: false - xy: 785, 774 - size: 107, 103 - orig: 107, 103 + rotate: true + xy: 1588, 427 + size: 213, 206 + orig: 213, 206 offset: 0, 0 index: -1 gun_nohand - rotate: false - xy: 614, 703 - size: 105, 102 - orig: 105, 102 + rotate: true + xy: 1623, 215 + size: 210, 203 + orig: 210, 203 offset: 0, 0 index: -1 head - rotate: false - xy: 2, 137 - size: 136, 149 - orig: 136, 149 + rotate: true + xy: 1153, 154 + size: 271, 298 + orig: 271, 298 offset: 0, 0 index: -1 lower_leg - rotate: true - xy: 780, 699 - size: 73, 98 - orig: 73, 98 + rotate: false + xy: 1828, 240 + size: 146, 195 + orig: 146, 195 offset: 0, 0 index: -1 mouth_smile - rotate: true - xy: 49, 2 - size: 47, 30 - orig: 47, 30 + rotate: false + xy: 118, 2 + size: 93, 59 + orig: 93, 59 offset: 0, 0 index: -1 neck - rotate: true - xy: 1001, 860 - size: 18, 21 - orig: 18, 21 + rotate: false + xy: 465, 20 + size: 36, 41 + orig: 36, 41 offset: 0, 0 index: -1 raptor_arm_back rotate: false - xy: 940, 936 - size: 82, 86 - orig: 82, 86 + xy: 1828, 66 + size: 163, 172 + orig: 163, 172 offset: 0, 0 index: -1 raptor_body rotate: false - xy: 2, 737 - size: 610, 285 - orig: 610, 285 + xy: 2, 447 + size: 1219, 570 + orig: 1219, 570 offset: 0, 0 index: -1 raptor_front_arm - rotate: true - xy: 195, 464 - size: 81, 102 - orig: 81, 102 + rotate: false + xy: 1796, 437 + size: 162, 203 + orig: 162, 203 offset: 0, 0 index: -1 raptor_front_leg - rotate: false - xy: 2, 478 - size: 191, 257 - orig: 191, 257 + rotate: true + xy: 2, 63 + size: 382, 514 + orig: 382, 514 offset: 0, 0 index: -1 raptor_hindleg_back rotate: false - xy: 614, 807 - size: 169, 215 - orig: 169, 215 + xy: 1223, 588 + size: 338, 429 + orig: 338, 429 offset: 0, 0 index: -1 raptor_horn rotate: false - xy: 360, 655 - size: 182, 80 - orig: 182, 80 + xy: 1223, 427 + size: 363, 159 + orig: 363, 159 offset: 0, 0 index: -1 raptor_horn_back - rotate: false - xy: 360, 576 - size: 176, 77 - orig: 176, 77 + rotate: true + xy: 1891, 666 + size: 351, 153 + orig: 351, 153 offset: 0, 0 index: -1 raptor_jaw rotate: false - xy: 785, 879 - size: 153, 143 - orig: 153, 143 + xy: 846, 159 + size: 305, 286 + orig: 305, 286 offset: 0, 0 index: -1 raptor_saddle_noshadow rotate: false - xy: 2, 288 - size: 163, 188 - orig: 163, 188 + xy: 518, 70 + size: 326, 375 + orig: 326, 375 offset: 0, 0 index: -1 raptor_saddle_strap_front - rotate: false - xy: 721, 710 - size: 57, 95 - orig: 57, 95 + rotate: true + xy: 846, 43 + size: 114, 189 + orig: 114, 189 offset: 0, 0 index: -1 raptor_saddle_strap_rear - rotate: true - xy: 940, 880 - size: 54, 74 - orig: 54, 74 + rotate: false + xy: 1037, 9 + size: 108, 148 + orig: 108, 148 offset: 0, 0 index: -1 raptor_saddle_w_shadow rotate: false - xy: 195, 547 - size: 163, 188 - orig: 163, 188 + xy: 1563, 642 + size: 326, 375 + orig: 326, 375 offset: 0, 0 index: -1 raptor_tongue - rotate: true - xy: 544, 649 - size: 86, 64 - orig: 86, 64 + rotate: false + xy: 1147, 24 + size: 171, 128 + orig: 171, 128 offset: 0, 0 index: -1 stirrup_back - rotate: false - xy: 458, 539 - size: 44, 35 - orig: 44, 35 + rotate: true + xy: 1976, 351 + size: 87, 69 + orig: 87, 69 offset: 0, 0 index: -1 stirrup_front - rotate: true - xy: 81, 4 - size: 45, 50 - orig: 45, 50 + rotate: false + xy: 1456, 62 + size: 89, 100 + orig: 89, 100 offset: 0, 0 index: -1 stirrup_strap - rotate: true - xy: 894, 828 - size: 49, 46 - orig: 49, 46 + rotate: false + xy: 1609, 12 + size: 97, 91 + orig: 97, 91 offset: 0, 0 index: -1 torso rotate: true - xy: 610, 647 - size: 54, 91 - orig: 54, 91 + xy: 1623, 105 + size: 108, 182 + orig: 108, 182 offset: 0, 0 index: -1 visor - rotate: false - xy: 2, 51 - size: 131, 84 - orig: 131, 84 + rotate: true + xy: 1453, 164 + size: 261, 168 + orig: 261, 168 offset: 0, 0 index: -1 diff --git a/spine-xna/example/data/raptor.png b/spine-xna/example/data/raptor.png index 78aed4d3e..6be9ddf91 100644 Binary files a/spine-xna/example/data/raptor.png and b/spine-xna/example/data/raptor.png differ diff --git a/spine-xna/example/data/raptor.skel b/spine-xna/example/data/raptor.skel index a853b905f..f0274dec9 100644 Binary files a/spine-xna/example/data/raptor.skel and b/spine-xna/example/data/raptor.skel differ diff --git a/spine-xna/example/data/star.atlas b/spine-xna/example/data/star.atlas new file mode 100644 index 000000000..efcb8eb62 --- /dev/null +++ b/spine-xna/example/data/star.atlas @@ -0,0 +1,20 @@ + +star.png +size: 256,128 +format: RGBA8888 +filter: Linear,Linear +repeat: none +star + rotate: false + xy: 127, 52 + size: 76, 72 + orig: 76, 72 + offset: 0, 0 + index: -1 +token + rotate: false + xy: 2, 2 + size: 123, 122 + orig: 123, 122 + offset: 0, 0 + index: -1 diff --git a/spine-xna/example/data/star.json b/spine-xna/example/data/star.json new file mode 100644 index 000000000..d0914e59a --- /dev/null +++ b/spine-xna/example/data/star.json @@ -0,0 +1,23 @@ +{ +"skeleton": { "hash": "mDnmUvhqCvOsFMGQjPtWpEaJxXI", "spine": "3.3.07", "width": 123, "height": 240.92, "images": "./images/" }, +"bones": [ + { "name": "root" } +], +"slots": [ + { "name": "star", "bone": "root", "attachment": "star" }, + { "name": "token", "bone": "root", "attachment": "token" } +], +"skins": { + "default": { + "star": { + "star": { "x": 0.55, "y": 2.59, "width": 76, "height": 72 } + }, + "token": { + "token": { "x": 4.66, "y": 146.51, "width": 123, "height": 122 } + } + } +}, +"animations": { + "animation": {} +} +} \ No newline at end of file diff --git a/spine-xna/example/data/star.png b/spine-xna/example/data/star.png new file mode 100644 index 000000000..aaf3d79b8 Binary files /dev/null and b/spine-xna/example/data/star.png differ diff --git a/spine-xna/example/data/tank.atlas b/spine-xna/example/data/tank.atlas new file mode 100644 index 000000000..ecf24e7df --- /dev/null +++ b/spine-xna/example/data/tank.atlas @@ -0,0 +1,125 @@ + +tank.png +size: 2048,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +images/antenna + rotate: true + xy: 1295, 683 + size: 22, 303 + orig: 22, 303 + offset: 0, 0 + index: -1 +images/cannon + rotate: false + xy: 2, 93 + size: 931, 58 + orig: 931, 58 + offset: 0, 0 + index: -1 +images/cannonConnector + rotate: true + xy: 1676, 455 + size: 112, 135 + orig: 112, 135 + offset: 0, 0 + index: -1 +images/guntower + rotate: false + xy: 1295, 707 + size: 730, 289 + orig: 730, 289 + offset: 0, 0 + index: -1 +images/machinegun + rotate: false + xy: 2, 34 + size: 331, 57 + orig: 331, 57 + offset: 0, 0 + index: -1 +images/machinegun-mount + rotate: false + xy: 1952, 609 + size: 72, 96 + orig: 72, 96 + offset: 0, 0 + index: -1 +images/rock + rotate: false + xy: 935, 96 + size: 252, 55 + orig: 252, 55 + offset: 0, 0 + index: -1 +images/tankBottom + rotate: false + xy: 2, 377 + size: 1285, 276 + orig: 1285, 276 + offset: 0, 0 + index: -1 +images/tankBottom-shadow + rotate: false + xy: 2, 655 + size: 1291, 341 + orig: 1291, 341 + offset: 0, 0 + index: -1 +images/tankTop + rotate: false + xy: 2, 153 + size: 1407, 222 + orig: 1407, 222 + offset: 0, 0 + index: -1 +images/tread + rotate: false + xy: 2, 2 + size: 96, 30 + orig: 96, 30 + offset: 0, 0 + index: -1 +images/tread-inside + rotate: false + xy: 335, 63 + size: 25, 28 + orig: 25, 28 + offset: 0, 0 + index: -1 +images/wheel-big + rotate: false + xy: 1295, 490 + size: 191, 191 + orig: 191, 191 + offset: 0, 0 + index: -1 +images/wheel-big-overlay + rotate: false + xy: 1488, 495 + size: 186, 186 + orig: 186, 186 + offset: 0, 0 + index: -1 +images/wheel-mid + rotate: false + xy: 1676, 569 + size: 136, 136 + orig: 136, 136 + offset: 0, 0 + index: -1 +images/wheel-mid-overlay + rotate: false + xy: 1814, 569 + size: 136, 136 + orig: 136, 136 + offset: 0, 0 + index: -1 +images/wheel-small + rotate: false + xy: 1813, 496 + size: 71, 71 + orig: 71, 71 + offset: 0, 0 + index: -1 diff --git a/spine-xna/example/data/tank.json b/spine-xna/example/data/tank.json new file mode 100644 index 000000000..c26ccbe47 --- /dev/null +++ b/spine-xna/example/data/tank.json @@ -0,0 +1,1899 @@ +{ +"skeleton": { "hash": "kgtyty1lpfv5JU2lygtFi2u3oQQ", "spine": "3.3.07", "width": 1914.53, "height": 964.05, "images": "" }, +"bones": [ + { "name": "root" }, + { "name": "tankRoot", "parent": "root", "y": 200 }, + { "name": "tankTreads", "parent": "tankRoot" }, + { "name": "tankBody", "parent": "tankTreads", "y": 10 }, + { "name": "guntower", "parent": "tankBody", "x": -21.72, "y": 245.47 }, + { "name": "antennaRoot", "parent": "guntower", "x": 164.6, "y": 202.52 }, + { "name": "antenna1", "parent": "antennaRoot", "length": 40, "rotation": 90, "y": 39.99, "color": "ffee00ff" }, + { "name": "antenna2", "parent": "antenna1", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna3", "parent": "antenna2", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna4", "parent": "antenna3", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna5", "parent": "antenna4", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "antenna6", "parent": "antenna5", "length": 42, "x": 42, "color": "ffee00ff" }, + { "name": "cannonConnector", "parent": "guntower", "x": -235.04, "y": 96.07 }, + { "name": "cannonTarget", "parent": "tankRoot", "x": -1486.66, "y": 351.82, "color": "ff3f00ff" }, + { "name": "cannon", "parent": "cannonConnector", "length": 946.68, "rotation": 180, "color": "ff4000ff" }, + { "name": "cannonTip", "parent": "cannon", "x": 946.68, "color": "ff4000ff" }, + { "name": "machineGunTarget", "parent": "tankRoot", "x": -1474, "y": 559.42, "color": "ff3f00ff" }, + { + "name": "machinegun-mount", + "parent": "guntower", + "length": 90.97, + "rotation": 90, + "x": -123.72, + "y": 218.32, + "color": "15ff00ff" + }, + { + "name": "machinegun", + "parent": "machinegun-mount", + "length": 208.94, + "rotation": 90, + "x": 91.52, + "y": -1.03, + "color": "15ff00ff" + }, + { "name": "machinegun-tip", "parent": "machinegun", "x": 210.42, "y": -12.2 }, + { "name": "rock", "parent": "root", "x": -656.45 }, + { + "name": "tread", + "parent": "tankRoot", + "length": 82, + "rotation": 180, + "x": -22.89, + "y": 213.85, + "scaleX": 0.993, + "color": "e64344ff" + }, + { "name": "tread2", "parent": "tread", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread3", "parent": "tread2", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread4", "parent": "tread3", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread5", "parent": "tread4", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread6", "parent": "tread5", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread7", "parent": "tread6", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread8", "parent": "tread7", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread9", "parent": "tread8", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread10", "parent": "tread9", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread11", "parent": "tread10", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread12", "parent": "tread11", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread13", "parent": "tread12", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread14", "parent": "tread13", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread15", "parent": "tread14", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread16", "parent": "tread15", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread17", "parent": "tread16", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread18", "parent": "tread17", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread19", "parent": "tread18", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread20", "parent": "tread19", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread21", "parent": "tread20", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread22", "parent": "tread21", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread23", "parent": "tread22", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread24", "parent": "tread23", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread25", "parent": "tread24", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread26", "parent": "tread25", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread27", "parent": "tread26", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread28", "parent": "tread27", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread29", "parent": "tread28", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread30", "parent": "tread29", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread31", "parent": "tread30", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread32", "parent": "tread31", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread33", "parent": "tread32", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread34", "parent": "tread33", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread35", "parent": "tread34", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "tread36", "parent": "tread35", "length": 82, "x": 82, "color": "e64344ff" }, + { "name": "wheel-midCenter", "parent": "tankRoot", "y": -114.56 }, + { "name": "treadCollider1", "parent": "wheel-midCenter", "x": -329.57, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider2", "parent": "wheel-midCenter", "x": -165.95, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider3", "parent": "wheel-midCenter", "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider4", "parent": "wheel-midCenter", "x": 163.56, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadCollider5", "parent": "wheel-midCenter", "x": 329.12, "y": -85.44, "color": "ff00fbff" }, + { "name": "treadGravity1", "parent": "tankRoot", "rotation": 180, "x": -175.35, "y": 109.99, "color": "ff00fbff" }, + { "name": "treadGravity2", "parent": "tankRoot", "rotation": 180, "x": 177.88, "y": 105.45, "color": "ff00fbff" }, + { "name": "wheel-bigRoot1", "parent": "tankTreads", "x": -549.59, "y": 14.39, "color": "abe323ff" }, + { "name": "wheel-big1", "parent": "wheel-bigRoot1", "x": -0.02, "color": "abe323ff" }, + { "name": "wheel-bigRoot2", "parent": "tankTreads", "x": 547.33, "y": 14.39 }, + { "name": "wheel-big2", "parent": "wheel-bigRoot2" }, + { "name": "wheel-midRoot1", "parent": "wheel-midCenter", "x": -410.57, "color": "abe323ff" }, + { "name": "wheel-mid1", "parent": "wheel-midRoot1", "color": "abe323ff" }, + { "name": "wheel-midRoot2", "parent": "wheel-midCenter", "x": -246.95 }, + { "name": "wheel-mid2", "parent": "wheel-midRoot2" }, + { "name": "wheel-midRoot3", "parent": "wheel-midCenter", "x": -82.72 }, + { "name": "wheel-mid3", "parent": "wheel-midRoot3" }, + { "name": "wheel-midRoot4", "parent": "wheel-midCenter", "x": 80.89 }, + { "name": "wheel-mid4", "parent": "wheel-midRoot4" }, + { "name": "wheel-midRoot5", "parent": "wheel-midCenter", "x": 244.51 }, + { "name": "wheel-mid5", "parent": "wheel-midRoot5" }, + { "name": "wheel-midRoot6", "parent": "wheel-midCenter", "x": 408.73 }, + { "name": "wheel-mid6", "parent": "wheel-midRoot6" }, + { "name": "wheel-smallRoot1", "parent": "tankTreads", "x": -337.38, "y": 109.43 }, + { "name": "wheel-small1", "parent": "wheel-smallRoot1", "color": "abe323ff" }, + { "name": "wheel-smallRoot2", "parent": "tankTreads", "x": 0.08, "y": 109.43 }, + { "name": "wheel-small2", "parent": "wheel-smallRoot2" }, + { "name": "wheel-smallRoot3", "parent": "tankTreads", "x": 334.68, "y": 109.43 }, + { "name": "wheel-small3", "parent": "wheel-smallRoot3" } +], +"slots": [ + { "name": "tankBody-shadow", "bone": "tankBody", "color": "ffffffb9", "attachment": "images/tankBottom-shadow" }, + { "name": "bottom", "bone": "tankBody", "attachment": "images/tankBottom" }, + { "name": "tread-inside1", "bone": "tread", "attachment": "images/tread-inside" }, + { "name": "tread-inside53", "bone": "tread27", "attachment": "images/tread-inside" }, + { "name": "tread-inside27", "bone": "tread14", "attachment": "images/tread-inside" }, + { "name": "tread-inside3", "bone": "tread2", "attachment": "images/tread-inside" }, + { "name": "tread-inside55", "bone": "tread28", "attachment": "images/tread-inside" }, + { "name": "tread-inside29", "bone": "tread15", "attachment": "images/tread-inside" }, + { "name": "tread-inside5", "bone": "tread3", "attachment": "images/tread-inside" }, + { "name": "tread-inside57", "bone": "tread29", "attachment": "images/tread-inside" }, + { "name": "tread-inside31", "bone": "tread16", "attachment": "images/tread-inside" }, + { "name": "tread-inside7", "bone": "tread4", "attachment": "images/tread-inside" }, + { "name": "tread-inside59", "bone": "tread30", "attachment": "images/tread-inside" }, + { "name": "tread-inside33", "bone": "tread17", "attachment": "images/tread-inside" }, + { "name": "tread-inside9", "bone": "tread5", "attachment": "images/tread-inside" }, + { "name": "tread-inside61", "bone": "tread31", "attachment": "images/tread-inside" }, + { "name": "tread-inside35", "bone": "tread18", "attachment": "images/tread-inside" }, + { "name": "tread-inside11", "bone": "tread6", "attachment": "images/tread-inside" }, + { "name": "tread-inside63", "bone": "tread32", "attachment": "images/tread-inside" }, + { "name": "tread-inside37", "bone": "tread19", "attachment": "images/tread-inside" }, + { "name": "tread-inside13", "bone": "tread7", "attachment": "images/tread-inside" }, + { "name": "tread-inside65", "bone": "tread33", "attachment": "images/tread-inside" }, + { "name": "tread-inside39", "bone": "tread20", "attachment": "images/tread-inside" }, + { "name": "tread-inside15", "bone": "tread8", "attachment": "images/tread-inside" }, + { "name": "tread-inside67", "bone": "tread34", "attachment": "images/tread-inside" }, + { "name": "tread-inside69", "bone": "tread35", "attachment": "images/tread-inside" }, + { "name": "tread-inside71", "bone": "tread36", "attachment": "images/tread-inside" }, + { "name": "tread-inside41", "bone": "tread21", "attachment": "images/tread-inside" }, + { "name": "tread-inside17", "bone": "tread9", "attachment": "images/tread-inside" }, + { "name": "tread-inside43", "bone": "tread22", "attachment": "images/tread-inside" }, + { "name": "tread-inside19", "bone": "tread10", "attachment": "images/tread-inside" }, + { "name": "tread-inside45", "bone": "tread23", "attachment": "images/tread-inside" }, + { "name": "tread-inside21", "bone": "tread11", "attachment": "images/tread-inside" }, + { "name": "tread-inside47", "bone": "tread24", "attachment": "images/tread-inside" }, + { "name": "tread-inside23", "bone": "tread12", "attachment": "images/tread-inside" }, + { "name": "tread-inside49", "bone": "tread25", "attachment": "images/tread-inside" }, + { "name": "tread-inside25", "bone": "tread13", "attachment": "images/tread-inside" }, + { "name": "tread-inside51", "bone": "tread26", "attachment": "images/tread-inside" }, + { "name": "tread-inside2", "bone": "tread", "attachment": "images/tread-inside" }, + { "name": "tread-inside54", "bone": "tread27", "attachment": "images/tread-inside" }, + { "name": "tread-inside28", "bone": "tread14", "attachment": "images/tread-inside" }, + { "name": "tread-inside4", "bone": "tread2", "attachment": "images/tread-inside" }, + { "name": "tread-inside56", "bone": "tread28", "attachment": "images/tread-inside" }, + { "name": "tread-inside30", "bone": "tread15", "attachment": "images/tread-inside" }, + { "name": "tread-inside6", "bone": "tread3", "attachment": "images/tread-inside" }, + { "name": "tread-inside58", "bone": "tread29", "attachment": "images/tread-inside" }, + { "name": "tread-inside32", "bone": "tread16", "attachment": "images/tread-inside" }, + { "name": "tread-inside8", "bone": "tread4", "attachment": "images/tread-inside" }, + { "name": "tread-inside60", "bone": "tread30", "attachment": "images/tread-inside" }, + { "name": "tread-inside34", "bone": "tread17", "attachment": "images/tread-inside" }, + { "name": "tread-inside10", "bone": "tread5", "attachment": "images/tread-inside" }, + { "name": "tread-inside62", "bone": "tread31", "attachment": "images/tread-inside" }, + { "name": "tread-inside36", "bone": "tread18", "attachment": "images/tread-inside" }, + { "name": "tread-inside12", "bone": "tread6", "attachment": "images/tread-inside" }, + { "name": "tread-inside64", "bone": "tread32", "attachment": "images/tread-inside" }, + { "name": "tread-inside38", "bone": "tread19", "attachment": "images/tread-inside" }, + { "name": "tread-inside14", "bone": "tread7", "attachment": "images/tread-inside" }, + { "name": "tread-inside66", "bone": "tread33", "attachment": "images/tread-inside" }, + { "name": "tread-inside40", "bone": "tread20", "attachment": "images/tread-inside" }, + { "name": "tread-inside16", "bone": "tread8", "attachment": "images/tread-inside" }, + { "name": "tread-inside68", "bone": "tread34", "attachment": "images/tread-inside" }, + { "name": "tread-inside70", "bone": "tread35", "attachment": "images/tread-inside" }, + { "name": "tread-inside72", "bone": "tread36", "attachment": "images/tread-inside" }, + { "name": "tread-inside42", "bone": "tread21", "attachment": "images/tread-inside" }, + { "name": "tread-inside18", "bone": "tread9", "attachment": "images/tread-inside" }, + { "name": "tread-inside44", "bone": "tread22", "attachment": "images/tread-inside" }, + { "name": "tread-inside20", "bone": "tread10", "attachment": "images/tread-inside" }, + { "name": "tread-inside46", "bone": "tread23", "attachment": "images/tread-inside" }, + { "name": "tread-inside22", "bone": "tread11", "attachment": "images/tread-inside" }, + { "name": "tread-inside48", "bone": "tread24", "attachment": "images/tread-inside" }, + { "name": "tread-inside24", "bone": "tread12", "attachment": "images/tread-inside" }, + { "name": "tread-inside50", "bone": "tread25", "attachment": "images/tread-inside" }, + { "name": "tread-inside26", "bone": "tread13", "attachment": "images/tread-inside" }, + { "name": "tread-inside52", "bone": "tread26", "attachment": "images/tread-inside" }, + { "name": "wheel-big", "bone": "wheel-big1", "color": "dbdbdbff", "attachment": "images/wheel-big" }, + { "name": "wheel-big2", "bone": "wheel-big2", "color": "dbdbdbff", "attachment": "images/wheel-big" }, + { "name": "wheel-mid", "bone": "wheel-mid1", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid2", "bone": "wheel-mid2", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid3", "bone": "wheel-mid3", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid4", "bone": "wheel-mid4", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid5", "bone": "wheel-mid5", "attachment": "images/wheel-mid" }, + { "name": "wheel-mid6", "bone": "wheel-mid6", "attachment": "images/wheel-mid" }, + { "name": "wheel-small", "bone": "wheel-small1", "attachment": "images/wheel-small" }, + { "name": "wheel-small2", "bone": "wheel-small2", "attachment": "images/wheel-small" }, + { "name": "wheel-small3", "bone": "wheel-small3", "attachment": "images/wheel-small" }, + { + "name": "wheel-mid-overlay", + "bone": "wheel-midRoot1", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay2", + "bone": "wheel-midRoot2", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay3", + "bone": "wheel-midRoot3", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay4", + "bone": "wheel-midRoot4", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay5", + "bone": "wheel-midRoot5", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-mid-overlay6", + "bone": "wheel-midRoot6", + "color": "ffffffec", + "attachment": "images/wheel-mid-overlay", + "blend": "multiply" + }, + { + "name": "wheel-big-overlay1", + "bone": "wheel-bigRoot1", + "color": "ffffffe9", + "attachment": "images/wheel-big-overlay", + "blend": "multiply" + }, + { + "name": "wheel-big-overlay2", + "bone": "wheel-bigRoot2", + "color": "ffffffe9", + "attachment": "images/wheel-big-overlay", + "blend": "multiply" + }, + { "name": "treads", "bone": "tankRoot", "attachment": "treads" }, + { "name": "tread", "bone": "tread", "color": "c0974fff", "attachment": "images/tread" }, + { "name": "tread27", "bone": "tread27", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread14", "bone": "tread14", "attachment": "images/tread" }, + { "name": "tread2", "bone": "tread2", "attachment": "images/tread" }, + { "name": "tread28", "bone": "tread28", "attachment": "images/tread" }, + { "name": "tread15", "bone": "tread15", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread3", "bone": "tread3", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread29", "bone": "tread29", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread16", "bone": "tread16", "attachment": "images/tread" }, + { "name": "tread4", "bone": "tread4", "attachment": "images/tread" }, + { "name": "tread30", "bone": "tread30", "attachment": "images/tread" }, + { "name": "tread17", "bone": "tread17", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread5", "bone": "tread5", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread31", "bone": "tread31", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread18", "bone": "tread18", "attachment": "images/tread" }, + { "name": "tread6", "bone": "tread6", "attachment": "images/tread" }, + { "name": "tread32", "bone": "tread32", "attachment": "images/tread" }, + { "name": "tread19", "bone": "tread19", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread7", "bone": "tread7", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread33", "bone": "tread33", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread20", "bone": "tread20", "attachment": "images/tread" }, + { "name": "tread8", "bone": "tread8", "attachment": "images/tread" }, + { "name": "tread34", "bone": "tread34", "attachment": "images/tread" }, + { "name": "tread35", "bone": "tread35", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread36", "bone": "tread36", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread21", "bone": "tread21", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread9", "bone": "tread9", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread22", "bone": "tread22", "attachment": "images/tread" }, + { "name": "tread10", "bone": "tread10", "attachment": "images/tread" }, + { "name": "tread23", "bone": "tread23", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread11", "bone": "tread11", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread24", "bone": "tread24", "attachment": "images/tread" }, + { "name": "tread12", "bone": "tread12", "attachment": "images/tread" }, + { "name": "tread25", "bone": "tread25", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread13", "bone": "tread13", "color": "adc9b8ff", "attachment": "images/tread" }, + { "name": "tread26", "bone": "tread26", "attachment": "images/tread" }, + { "name": "rock", "bone": "rock", "attachment": "images/rock" }, + { "name": "machinegun", "bone": "machinegun", "attachment": "images/machinegun" }, + { "name": "machinegun-mount", "bone": "machinegun-mount", "attachment": "images/machinegun-mount" }, + { "name": "tankTop", "bone": "tankBody", "attachment": "images/tankTop" }, + { "name": "guntower", "bone": "guntower", "attachment": "images/guntower" }, + { "name": "cannon", "bone": "cannon", "attachment": "images/cannon" }, + { "name": "cannonConnector", "bone": "cannonConnector", "attachment": "images/cannonConnector" }, + { "name": "antenna", "bone": "antennaRoot", "attachment": "images/antenna" } +], +"ik": [ + { + "name": "cannonTarget", + "bones": [ "cannon" ], + "target": "cannonTarget" + }, + { + "name": "machineGunTarget", + "bones": [ "machinegun" ], + "target": "machineGunTarget", + "mix": 0 + } +], +"transform": [ + { + "name": "wheel-big", + "bones": [ "wheel-big2" ], + "target": "wheel-big1", + "rotation": 65.6, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid1", + "bones": [ "wheel-mid2", "wheel-mid4" ], + "target": "wheel-mid1", + "rotation": 93, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid2", + "bones": [ "wheel-mid3", "wheel-mid5" ], + "target": "wheel-mid1", + "rotation": -89, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-mid3", + "bones": [ "wheel-mid6" ], + "target": "wheel-mid1", + "rotation": -152.6, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-small1", + "bones": [ "wheel-small2" ], + "target": "wheel-small1", + "rotation": 87, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + }, + { + "name": "wheel-small2", + "bones": [ "wheel-small3" ], + "target": "wheel-small1", + "rotation": 54.9, + "translateMix": 0, + "scaleMix": 0, + "shearMix": 0 + } +], +"path": [ + { + "name": "treads", + "bones": [ + "tread", + "tread2", + "tread3", + "tread4", + "tread5", + "tread6", + "tread7", + "tread8", + "tread9", + "tread10", + "tread11", + "tread12", + "tread13", + "tread14", + "tread15", + "tread16", + "tread17", + "tread18", + "tread19", + "tread20", + "tread21", + "tread22", + "tread23", + "tread24", + "tread25", + "tread26", + "tread27", + "tread28", + "tread29", + "tread30", + "tread31", + "tread32", + "tread33", + "tread34", + "tread35", + "tread36" + ], + "target": "treads", + "rotateMode": "chain" + } +], +"skins": { + "default": { + "antenna": { + "images/antenna": { + "type": "mesh", + "uvs": [ 0.64286, 0.07875, 0.65354, 0.15349, 0.66324, 0.22137, 0.67367, 0.29433, 0.68383, 0.36543, 0.69359, 0.43374, 0.7031, 0.50029, 0.71311, 0.5703, 0.72327, 0.64138, 0.73406, 0.71688, 0.7444, 0.78929, 0.75614, 0.8714, 0.76905, 0.9431, 1, 0.9431, 1, 1, 0, 1, 0, 0.9431, 0.20105, 0.9431, 0.20105, 0.87093, 0.21461, 0.78846, 0.22651, 0.71606, 0.23885, 0.64098, 0.25035, 0.57104, 0.26206, 0.49983, 0.27306, 0.4329, 0.2843, 0.36453, 0.29592, 0.29381, 0.308, 0.22037, 0.319, 0.15345, 0.33141, 0.07795, 0.34423, 0, 0.6316, 0 ], + "triangles": [ 30, 31, 0, 29, 30, 0, 29, 0, 1, 28, 29, 1, 28, 1, 2, 27, 28, 2, 27, 2, 3, 26, 3, 4, 25, 26, 4, 25, 4, 5, 26, 27, 3, 24, 5, 6, 23, 24, 6, 7, 23, 6, 24, 25, 5, 22, 7, 8, 21, 22, 8, 21, 8, 9, 7, 22, 23, 20, 9, 10, 19, 20, 10, 20, 21, 9, 19, 10, 11, 18, 19, 11, 17, 18, 11, 17, 11, 12, 15, 16, 17, 12, 13, 14, 15, 17, 12, 14, 15, 12 ], + "vertices": [ 2, 10, 65.37999, -3.14, 0.3125, 11, 23.38, -3.14, 0.6875, 3, 9, 84.73, -3.37, 0.0625, 10, 42.73, -3.37, 0.625, 11, 0.73, -3.37, 0.3125, 3, 9, 64.16, -3.59, 0.3125, 10, 22.16, -3.59, 0.625, 11, -19.83, -3.59, 0.0625, 3, 8, 84.06, -3.82, 0.0625, 9, 42.06, -3.82, 0.625, 10, 0.06, -3.82, 0.3125, 3, 8, 62.51, -4.04, 0.3125, 9, 20.51, -4.04, 0.625, 10, -21.48, -4.04, 0.0625, 3, 7, 83.81, -4.25, 0.0625, 8, 41.81, -4.25, 0.625, 9, -0.18, -4.25, 0.3125, 3, 7, 63.65, -4.46, 0.3125, 8, 21.65, -4.46, 0.625, 9, -20.34, -4.46, 0.0625, 3, 6, 84.43, -4.67999, 0.0625, 7, 42.43, -4.67999, 0.625, 8, 0.43, -4.67999, 0.3125, 3, 6, 62.9, -4.91, 0.3125, 7, 20.9, -4.91, 0.625, 8, -21.09, -4.91, 0.0625, 3, 5, 5.14, 80.01999, 0.0625, 6, 40.02, -5.14, 0.625, 7, -1.97, -5.14, 0.3125, 3, 5, 5.37, 58.08, 0.375, 6, 18.08, -5.37, 0.5625, 7, -23.91, -5.37, 0.0625, 1, 5, 5.63, 33.2, 1, 1, 5, 5.91, 11.48, 1, 1, 5, 11, 11.48, 1, 1, 5, 10.99, -5.75, 1, 1, 5, -11, -5.75, 1, 1, 5, -10.99, 11.48, 1, 1, 5, -6.57, 11.48, 1, 1, 5, -6.57, 33.34, 1, 3, 5, -6.27, 58.33, 0.375, 6, 18.33, 6.27, 0.5625, 7, -23.66, 6.27, 0.0625, 3, 5, -6.01, 80.26999, 0.0625, 6, 40.27, 6.01, 0.625, 7, -1.72, 6.01, 0.3125, 3, 6, 63.02, 5.74, 0.3125, 7, 21.02, 5.74, 0.625, 8, -20.96999, 5.74, 0.0625, 3, 6, 84.21, 5.49, 0.0625, 7, 42.21, 5.49, 0.625, 8, 0.21, 5.49, 0.3125, 3, 7, 63.79, 5.23, 0.3125, 8, 21.79, 5.23, 0.625, 9, -20.2, 5.23, 0.0625, 3, 7, 84.07, 4.98999, 0.0625, 8, 42.07, 4.98999, 0.625, 9, 0.07, 4.98999, 0.3125, 3, 8, 62.78, 4.73999, 0.3125, 9, 20.78, 4.73999, 0.625, 10, -21.21, 4.73999, 0.0625, 3, 8, 84.21, 4.48, 0.0625, 9, 42.21, 4.48, 0.625, 10, 0.21, 4.48, 0.3125, 3, 9, 64.46, 4.21999, 0.3125, 10, 22.46, 4.21999, 0.625, 11, -19.53, 4.21999, 0.0625, 3, 9, 84.74, 3.98, 0.0625, 10, 42.74, 3.98, 0.625, 11, 0.74, 3.98, 0.3125, 2, 10, 65.62, 3.7, 0.3125, 11, 23.62, 3.7, 0.6875, 1, 11, 47.24, 3.42, 1, 1, 11, 47.24, -2.89, 1 ], + "hull": 32, + "edges": [ 28, 30, 28, 26, 30, 32, 26, 24, 24, 22, 32, 34, 34, 24, 34, 36, 36, 22, 60, 62, 38, 36, 20, 22, 38, 20, 40, 38, 18, 20, 40, 18, 42, 40, 16, 18, 42, 16, 44, 42, 14, 16, 44, 14, 46, 44, 12, 14, 46, 12, 48, 46, 10, 12, 48, 10, 50, 48, 8, 10, 50, 8, 52, 50, 6, 8, 52, 6, 54, 52, 4, 6, 54, 4, 56, 54, 2, 4, 56, 2, 60, 58, 58, 56, 62, 0, 0, 2, 58, 0 ], + "width": 22, + "height": 303 + } + }, + "bottom": { + "images/tankBottom": { "x": -16.66, "y": 9.89, "width": 1285, "height": 276 } + }, + "cannon": { + "images/cannon": { "x": 481.95, "y": -0.02, "rotation": 179.99, "width": 931, "height": 58 } + }, + "cannonConnector": { + "images/cannonConnector": { + "type": "mesh", + "uvs": [ 1, 0.03236, 1, 0.10602, 0.90987, 0.32859, 0.81975, 0.55116, 0.72962, 0.77372, 0.6395, 0.99629, 0.42157, 0.99629, 0.20364, 0.99629, 0, 0.85433, 0, 0.69901, 0.02267, 0.52884, 0, 0.31444, 0.21601, 0.12998, 0.43367, 0, 0.63546, 0.0037, 0.48407, 0.77059, 0.31496, 0.52496, 0.64132, 0.19648, 0.21516, 0.76765, 0.58345, 0.5647, 0.68444, 0.40146, 0.46758, 0.36649, 0.28934, 0.34603 ], + "triangles": [ 21, 22, 12, 11, 12, 22, 17, 21, 13, 17, 13, 14, 21, 12, 13, 21, 17, 20, 16, 22, 21, 10, 11, 22, 10, 22, 16, 19, 21, 20, 16, 21, 19, 18, 10, 16, 9, 10, 18, 15, 16, 19, 18, 16, 15, 8, 9, 18, 7, 8, 18, 6, 18, 15, 7, 18, 6, 14, 0, 1, 17, 14, 1, 2, 17, 1, 20, 17, 2, 3, 20, 2, 19, 20, 3, 4, 19, 3, 15, 19, 4, 5, 15, 4, 6, 15, 5 ], + "vertices": [ 1, 12, 35.91, 69.08, 1, 1, 12, 35.91, 59.13, 1, 1, 12, 25.81, 29.09, 1, 1, 12, 15.72, -0.95, 1, 1, 12, 5.63, -31, 1, 1, 12, -4.46, -61.04, 1, 2, 12, -28.87, -61.04, 0.33333, 14, 28.87, 61.03, 0.66666, 1, 14, 53.27, 61.01, 1, 1, 14, 76.08, 41.83, 1, 1, 14, 71.17, 21.62, 1, 1, 14, 72.83, -1.62, 1, 1, 14, 70.37, -29.12, 1, 1, 14, 50.66, -56.13, 1, 2, 12, -28.43, 74.37, 0.41, 14, 28.43, -74.39, 0.58999, 2, 12, -4.91, 72.94999, 0.52, 14, 4.91, -72.94999, 0.48, 2, 12, -21.87, -30.57, 0.49, 14, 21.87, 30.56, 0.51, 1, 14, 40.81, -2.59999, 1, 2, 12, -4.25, 46.92, 0.49, 14, 4.25, -46.92, 0.51, 1, 14, 51.98, 30.15, 1, 2, 12, -10.74, -2.78, 0.49, 14, 10.74, 2.77, 0.51, 2, 12, 0.56, 19.25, 0.49, 14, -0.56, -19.25, 0.51, 1, 14, 23.71, -23.98, 1, 1, 14, 43.68, -26.76, 1 ], + "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, 28, 0 ], + "width": 112, + "height": 135 + } + }, + "guntower": { + "images/guntower": { "x": 77.22, "y": 122.58, "width": 730, "height": 289 } + }, + "machinegun": { + "images/machinegun": { "x": 44.85, "y": -5.72, "rotation": -180, "width": 331, "height": 57 } + }, + "machinegun-mount": { + "images/machinegun-mount": { "x": 47.42, "y": -1.53, "rotation": -90, "width": 72, "height": 96 } + }, + "rock": { + "images/rock": { "color": "404040ff", "x": 25.23, "y": 27.35, "width": 252, "height": 55 } + }, + "tankBody-shadow": { + "images/tankBottom-shadow": { "x": -11.43, "y": -42.88, "width": 1291, "height": 341 } + }, + "tankTop": { + "images/tankTop": { "x": 6.8, "y": 168.71, "width": 1407, "height": 222 } + }, + "tread": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread-inside1": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside10": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside11": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside12": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside13": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside14": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside15": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside16": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside17": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside18": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside19": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside2": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside20": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside21": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside22": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside23": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside24": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside25": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside26": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside27": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside28": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside29": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside3": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside30": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside31": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside32": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside33": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside34": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside35": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside36": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside37": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside38": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside39": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside4": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside40": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside41": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside42": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside43": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside44": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside45": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside46": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside47": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside48": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside49": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside5": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside50": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside51": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside52": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside53": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside54": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside55": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside56": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside57": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside58": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside59": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside6": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside60": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside61": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside62": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside63": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside64": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside65": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside66": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside67": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside68": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside69": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside7": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside70": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside71": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside72": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside8": { + "images/tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread-inside9": { + "images/tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 } + }, + "tread10": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread11": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread12": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread13": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread14": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread15": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread16": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread17": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread18": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread19": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread2": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread20": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread21": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread22": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread23": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread24": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread25": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread26": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread27": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread28": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread29": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread3": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread30": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread31": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread32": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread33": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread34": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread35": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread36": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread4": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread5": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread6": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread7": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread8": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "tread9": { + "images/tread": { "x": 45.47, "y": -8.28, "rotation": -179.99, "width": 96, "height": 30 } + }, + "treads": { + "treads": { + "type": "path", + "closed": true, + "lengths": [ 182.41, 349, 472.77, 602.99, 780.46, 1052.96, 1133.44, 1218.43, 1298.34, 1382.7, 1465.57, 1546.11, 1628.02, 1707.73, 1794.36, 1876.75, 2158.69, 2321.34, 2438.56, 2579.42, 2745.35, 2919.23 ], + "vertexCount": 66, + "vertices": [ 1, 83, 11.23, 41.86, 1, 1, 83, 0.78, 41.93999, 1, 1, 83, -34.72, 42.23, 1, 1, 63, -104.21, 0.41, 1, 1, 63, 0.07, 0.55, 1, 1, 63, 68.8, 0.64, 1, 1, 81, 20.5, 43.47, 1, 1, 81, 1.13, 40.81, 1, 1, 81, -27.38, 36.84, 1, 1, 65, 147.06, 105, 1, 1, 65, 96.21, 96.63, 1, 1, 65, 43.87, 87.71, 1, 1, 65, 16.18, 103.34, 1, 1, 65, -33.66999, 94.2, 1, 1, 65, -99.35, 81.25, 1, 1, 65, -122.04, -1.69, 1, 1, 65, -83.58, -47.92, 1, 1, 65, -33.53, -109.36, 1, 1, 69, -83.56, -66.08999, 1, 1, 69, -2.16, -67.89, 1, 2, 69, 56.68, -41.48, 0.67999, 58, -24.31, -41.49, 0.32, 1, 58, -26.58, 16.69, 1, 1, 58, -2.69, 16.69, 1, 1, 58, 13.51, 16.69, 1, 2, 71, -52.41, -46.51, 0.74399, 58, 30.2, -46.51, 0.256, 1, 71, -0.32, -68.92, 1, 2, 71, 52.09, -44.72, 0.712, 59, -28.9, -44.73, 0.28799, 1, 59, -22.8, 16.24, 1, 1, 59, -1.42, 16.24, 1, 1, 59, 20.46999, 16.24, 1, 2, 73, -47.21, -47.45, 0.744, 59, 36.00999, -47.46, 0.25599, 1, 73, -0.28, -69.65, 1, 2, 73, 45.23, -47.26, 0.736, 60, -37.48, -47.26, 0.26399, 1, 60, -23.76, 15.27, 1, 1, 60, -0.13, 15.27, 1, 1, 60, 24.45, 15.27, 1, 2, 75, -47.36, -48.7, 0.74399, 60, 33.52, -48.7, 0.256, 1, 75, -0.49, -70.39, 1, 2, 75, 49.09, -48.33, 0.744, 61, -33.57, -48.34, 0.25599, 1, 61, -20.89, 15.83, 1, 1, 61, -1.25, 15.83, 1, 1, 61, 15.78, 15.83, 1, 2, 77, -52.49, -48.21, 0.75999, 61, 28.45, -48.21, 0.24, 1, 77, -2.5, -68.92, 1, 2, 77, 55.72, -47.82, 0.752, 62, -28.88, -47.82, 0.248, 1, 62, -21.64, 16.69, 1, 1, 62, -0.48, 16.69, 1, 1, 62, 20.73, 16.69, 1, 2, 79, -53.65, -48.89, 0.76, 62, 25.96, -48.89, 0.23999, 1, 79, 2.27, -69.65, 1, 1, 79, 44.94, -69.74, 1, 1, 65, 1172.98, -85.6, 1, 1, 65, 1190.53, -42.24, 1, 1, 65, 1215.63, 19.75, 1, 1, 65, 1175.55, 76.62, 1, 1, 65, 1134.22, 95.07, 1, 1, 65, 1128.4, 97.66, 1, 1, 65, 1081.79, 87.47, 1, 1, 65, 1017.16, 92.52, 1, 1, 65, 977.9, 95.58, 1, 1, 85, 47.07, 42.29, 1, 1, 85, 0.24, 42.74, 1, 1, 85, -29.63, 43.28, 1, 1, 64, -86.64, 1.35, 1, 1, 64, 0.49, 0.25, 1, 1, 64, 92.42, -0.89, 1 ] + } + }, + "wheel-big": { + "images/wheel-big": { "width": 191, "height": 191 } + }, + "wheel-big-overlay1": { + "images/wheel-big-overlay": { "width": 186, "height": 186 } + }, + "wheel-big-overlay2": { + "images/wheel-big-overlay": { "width": 186, "height": 186 } + }, + "wheel-big2": { + "images/wheel-big": { "width": 191, "height": 191 } + }, + "wheel-mid": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay2": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay3": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay4": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay5": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid-overlay6": { + "images/wheel-mid-overlay": { "width": 136, "height": 136 } + }, + "wheel-mid2": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid3": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid4": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid5": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-mid6": { + "images/wheel-mid": { "width": 136, "height": 136 } + }, + "wheel-small": { + "images/wheel-small": { "width": 71, "height": 71 } + }, + "wheel-small2": { + "images/wheel-small": { "width": 71, "height": 71 } + }, + "wheel-small3": { + "images/wheel-small": { "width": 71, "height": 71 } + } + } +}, +"animations": { + "drive": { + "bones": { + "tankRoot": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.549, 0, 0.907, 0.84 ] + }, + { + "time": 3.0333, + "x": -1426.14, + "y": 0, + "curve": [ 0.211, 0.23, 0.851, 0.92 ] + }, + { + "time": 4.8666, + "x": -2806.98, + "y": 0, + "curve": [ 0.253, 0.27, 0.625, 0.94 ] + }, + { "time": 5.3333, "x": -2903.34, "y": 0 } + ] + }, + "wheel-midRoot1": { + "translate": [ + { "time": 0.7666, "x": 0, "y": 0 }, + { + "time": 1.1666, + "x": 0, + "y": 50.95, + "curve": [ 0.633, 0, 0.907, 0.82 ] + }, + { "time": 1.5666, "x": 0, "y": 0 } + ] + }, + "treadCollider1": { + "rotate": [ + { "time": 1.1, "angle": 0 }, + { "time": 1.2333, "angle": -19.78 }, + { "time": 1.4666, "angle": 0 }, + { "time": 1.6, "angle": 28.87 }, + { "time": 1.8, "angle": 0 } + ], + "translate": [ + { "time": 1.1, "x": 0, "y": 0 }, + { + "time": 1.4666, + "x": 0, + "y": 58.66, + "curve": [ 0.352, 0, 0.828, 0.92 ] + }, + { "time": 1.8, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot2": { + "translate": [ + { "time": 1.2666, "x": 0, "y": 0 }, + { + "time": 1.6333, + "x": 0, + "y": 55.07, + "curve": [ 0.889, 0.01, 0.843, 0.81 ] + }, + { "time": 1.9333, "x": 0, "y": 0 } + ] + }, + "treadCollider2": { + "rotate": [ + { "time": 1.5333, "angle": 0 }, + { "time": 1.6333, "angle": -18.67 }, + { "time": 1.8, "angle": 0 }, + { "time": 1.9, "angle": 29.49 }, + { "time": 2.0666, "angle": 0 } + ], + "translate": [ + { + "time": 1.5333, + "x": 0, + "y": 0, + "curve": [ 0.16, 0.25, 0.813, 0.82 ] + }, + { + "time": 1.8, + "x": 0, + "y": 59.03, + "curve": [ 0.376, 0.26, 0.879, 0.79 ] + }, + { "time": 2.0666, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot3": { + "translate": [ + { "time": 1.6666, "x": 0, "y": 0 }, + { + "time": 1.9333, + "x": 0, + "y": 60.17, + "curve": [ 0.544, 0, 0.838, 0.77 ] + }, + { "time": 2.2, "x": 0, "y": 0 } + ] + }, + "treadCollider3": { + "rotate": [ + { "time": 1.8666, "angle": 0 }, + { "time": 1.9333, "angle": -20.16 }, + { "time": 2.0666, "angle": 0.57 }, + { "time": 2.1666, "angle": 33.66 }, + { "time": 2.3333, "angle": 0 } + ], + "translate": [ + { "time": 1.8666, "x": 0, "y": 0 }, + { + "time": 2.0666, + "x": 0, + "y": 61.53, + "curve": [ 0.582, 0, 0.836, 0.77 ] + }, + { "time": 2.3333, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot4": { + "translate": [ + { "time": 1.9333, "x": 0, "y": 0 }, + { + "time": 2.2, + "x": 0, + "y": 58.89, + "curve": [ 0.48, 0, 0.75, 1 ] + }, + { "time": 2.4666, "x": 0, "y": 0 } + ] + }, + "treadCollider4": { + "rotate": [ + { "time": 2.1333, "angle": 0 }, + { "time": 2.2, "angle": -20.43 }, + { "time": 2.3333, "angle": 4.49 }, + { "time": 2.4333, "angle": 35.87 }, + { "time": 2.5666, "angle": 0 } + ], + "translate": [ + { + "time": 2.1333, + "x": 0, + "y": 0, + "curve": [ 0.191, 0.49, 0.75, 1 ] + }, + { "time": 2.3333, "x": 0, "y": 66.64 }, + { "time": 2.5666, "x": 0, "y": 0 } + ] + }, + "wheel-midRoot5": { + "translate": [ + { "time": 2.2, "x": 0, "y": 0 }, + { "time": 2.4333, "x": 0, "y": 60.26 }, + { "time": 2.7, "x": 0, "y": 0 } + ] + }, + "treadCollider5": { + "rotate": [ + { "time": 2.3333, "angle": 0 }, + { "time": 2.4333, "angle": -23.6 }, + { "time": 2.5666, "angle": 6.49 }, + { "time": 2.6666, "angle": 29.93 }, + { "time": 2.8, "angle": -0.13 } + ], + "translate": [ + { "time": 2.3333, "x": 0, "y": 0 }, + { "time": 2.4333, "x": 0, "y": 36.34 }, + { "time": 2.5, "x": 0, "y": 56.39 }, + { "time": 2.5666, "x": 0, "y": 61.34 }, + { "time": 2.8, "x": 0, "y": 2.04 } + ] + }, + "wheel-midRoot6": { + "translate": [ + { + "time": 2.4333, + "x": 0, + "y": 0, + "curve": [ 0.19, 0.26, 0.804, 0.8 ] + }, + { + "time": 2.6333, + "x": 0, + "y": 51.86, + "curve": [ 0.346, 0, 0.852, 0.7 ] + }, + { "time": 2.8, "x": 0, "y": 0 } + ] + }, + "wheel-mid1": { + "rotate": [ + { + "time": 0, + "angle": 21, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 0.8, "angle": 120 }, + { "time": 1.2333, "angle": 240 }, + { "time": 1.6, "angle": 0 }, + { "time": 1.9, "angle": 120 }, + { "time": 2.1666, "angle": 240 }, + { "time": 2.4, "angle": 0 }, + { "time": 2.5666, "angle": 120 }, + { "time": 2.7333, "angle": 240 }, + { "time": 2.9333, "angle": 0 }, + { "time": 3.1, "angle": 120 }, + { "time": 3.2666, "angle": 240 }, + { "time": 3.4333, "angle": 0 }, + { "time": 3.6333, "angle": 120 }, + { "time": 3.8, "angle": 240 }, + { "time": 3.9666, "angle": 0 }, + { "time": 4.1666, "angle": 120 }, + { "time": 4.3333, "angle": 240 }, + { "time": 4.5, "angle": 0 }, + { "time": 4.7, "angle": 120 }, + { "time": 4.8666, "angle": 240 }, + { "time": 5.2666, "angle": -67.99 } + ] + }, + "tankTreads": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.145, 0.34, 0.75, 1 ] + }, + { "time": 1.1, "angle": -3.9 }, + { "time": 1.3333, "angle": -2.37 }, + { "time": 1.6333, "angle": -3.54 }, + { "time": 2.1666, "angle": 0.27 }, + { + "time": 2.4666, + "angle": 2.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.7, + "angle": 3.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 3, "angle": -3.62 }, + { "time": 3.2333, "angle": -1.23, "curve": "stepped" }, + { + "time": 4.8666, + "angle": -1.23, + "curve": [ 0.188, 0.16, 0.75, 1 ] + }, + { + "time": 5.2, + "angle": 4.47, + "curve": [ 0.416, 0.01, 0.75, 1 ] + }, + { + "time": 5.5666, + "angle": -3.08, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 5.8333, "angle": -1.23 } + ] + }, + "wheel-big1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 1.1, "angle": 120 }, + { "time": 1.5333, "angle": 240 }, + { "time": 1.8, "angle": 360 }, + { "time": 2.0333, "angle": 120 }, + { "time": 2.2666, "angle": 240 }, + { "time": 2.4666, "angle": 360 }, + { "time": 2.7, "angle": 120 }, + { "time": 2.9333, "angle": 240 }, + { "time": 3.1333, "angle": 360 }, + { "time": 3.3666, "angle": 120 }, + { "time": 3.5666, "angle": 240 }, + { "time": 3.8, "angle": -24 }, + { "time": 4.0333, "angle": 120 }, + { "time": 4.2333, "angle": 240 }, + { "time": 4.4666, "angle": -24 }, + { "time": 4.7, "angle": 120 }, + { "time": 4.8666, "angle": -143.99 }, + { + "time": 5.0666, + "angle": -131.4, + "curve": [ 0.14, 0.25, 0.75, 1 ] + }, + { "time": 5.6666, "angle": -76.85 }, + { "time": 5.8333, "angle": -72.3 } + ] + }, + "treadGravity1": { + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.4666, "x": 0, "y": 0 }, + { "time": 1.8, "x": 0, "y": 29.44 }, + { "time": 2.3333, "x": 0, "y": -0.52 }, + { "time": 2.5666, "x": 0, "y": 5.2 }, + { "time": 2.6666, "x": 0, "y": -11.05, "curve": "stepped" }, + { "time": 4.8666, "x": 0, "y": -11.05 }, + { "time": 5.0666, "x": 0, "y": -1.91 }, + { "time": 5.5333, "x": 0, "y": -6.9 }, + { "time": 5.7333, "x": 0, "y": -11.05 } + ] + }, + "treadGravity2": { + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.4666, "x": 0, "y": 0 }, + { "time": 1.8, "x": 0, "y": 8.5 }, + { "time": 2.3333, "x": 0, "y": 34.74 }, + { "time": 2.5666, "x": 0, "y": 5.2 }, + { "time": 2.6666, "x": 0, "y": -11.05, "curve": "stepped" }, + { "time": 4.8666, "x": 0, "y": -11.05 }, + { "time": 5.0666, "x": 0, "y": 3.9 }, + { "time": 5.5333, "x": 0, "y": -6.9 }, + { "time": 5.7333, "x": 0, "y": -11.05 } + ] + }, + "wheel-small1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.504, 0.11, 0.931, 0.71 ] + }, + { "time": 0.7, "angle": 120 }, + { "time": 1.1, "angle": 240 }, + { "time": 1.4666, "angle": 360 }, + { "time": 1.7666, "angle": 120 }, + { "time": 2.0333, "angle": 240 }, + { "time": 2.2666, "angle": 360 }, + { "time": 2.4333, "angle": 120 }, + { "time": 2.5666, "angle": 240 }, + { "time": 2.7, "angle": 360 }, + { "time": 2.8333, "angle": 120 }, + { "time": 2.9666, "angle": 240 }, + { "time": 3.1, "angle": 360 }, + { "time": 3.2333, "angle": 120 }, + { "time": 3.3666, "angle": 240 }, + { "time": 3.5, "angle": 360 }, + { "time": 3.6333, "angle": 120 }, + { "time": 3.7666, "angle": 240 }, + { "time": 3.9, "angle": 360 }, + { "time": 4.0333, "angle": 120 }, + { "time": 4.1666, "angle": 240 }, + { "time": 4.3, "angle": 360 }, + { "time": 4.4333, "angle": 120 }, + { "time": 4.5666, "angle": 240 }, + { "time": 4.7, "angle": 360 }, + { "time": 4.8333, "angle": 120 }, + { "time": 5, "angle": 240 }, + { + "time": 5.2, + "angle": -25.64, + "curve": [ 0.181, 0.26, 0.75, 1 ] + }, + { "time": 5.5666, "angle": 90 } + ] + }, + "tankBody": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.1666, + "angle": -1.41, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.9333, + "angle": -0.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3, + "angle": 0.84, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -2.33, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.4666, + "angle": -0.45, + "curve": [ 0.329, 0.32, 0.757, 1 ] + }, + { + "time": 4.8666, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3333, + "angle": 1.82, + "curve": [ 0.324, 0.01, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -1.15, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.0333, "angle": 0 } + ] + }, + "antenna1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna4": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna5": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "antenna6": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 0.4333, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7333, + "angle": -1.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.0666, + "angle": -0.68, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4, + "angle": 0.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.6666, "angle": -0.67, "curve": "stepped" }, + { + "time": 2.1333, + "angle": -0.67, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.3666, + "angle": 0.88, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.5666, + "angle": -1.69, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 2.8666, + "angle": 1.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.0333, + "angle": -1.09, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.2333, + "angle": 1.03, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 3.5, + "angle": -0.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 4.6666, "angle": -0.18 }, + { + "time": 5.0333, + "angle": -1.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.3666, + "angle": 9.17, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.6666, + "angle": -3.14, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.9, + "angle": 2.96, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 6.1, + "angle": -0.29, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.2666, "angle": 0.96 }, + { "time": 6.4, "angle": 0 } + ] + }, + "machinegun": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { + "time": 2.8333, + "angle": 0, + "curve": [ 0.183, 0.17, 0.75, 1 ] + }, + { + "time": 3, + "angle": -4.43, + "curve": [ 0.156, 0.16, 0.75, 1 ] + }, + { + "time": 3.1666, + "angle": -2.93, + "curve": [ 0.156, 0.16, 0.75, 1 ] + }, + { + "time": 4.8333, + "angle": 0, + "curve": [ 0.183, 0.17, 0.75, 1 ] + }, + { + "time": 5.1666, + "angle": -6.05, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 5.4, + "angle": 6.15, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 5.6, "angle": -1.26 } + ] + }, + "cannon": { + "rotate": [ + { "time": 0, "angle": 0 } + ] + }, + "cannonTarget": { + "translate": [ + { + "time": 5, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 6.3333, "x": -15.38, "y": 99.99 } + ] + } + }, + "ik": { + "cannonTarget": [ + { "time": 0, "mix": 0.809, "curve": "stepped" }, + { "time": 4.7333, "mix": 0.809 }, + { "time": 5.1666, "mix": 0.504 }, + { "time": 5.6666 } + ] + }, + "paths": { + "treads": { + "position": [ + { + "time": 0, + "curve": [ 0.549, 0, 0.907, 0.84 ] + }, + { "time": 3.0333, "position": 0.51 }, + { "time": 4.8666, "position": 0.9794 }, + { + "time": 5.2666, + "position": 1, + "curve": [ 0.226, 0.15, 0.765, 0.96 ] + }, + { + "time": 5.5333, + "position": 1.02, + "curve": [ 0.279, 0.32, 0.694, 0.99 ] + }, + { "time": 5.8333, "position": 1.021 } + ] + } + } + } +} +} \ No newline at end of file diff --git a/spine-xna/example/data/tank.png b/spine-xna/example/data/tank.png new file mode 100644 index 000000000..b0b1b3642 Binary files /dev/null and b/spine-xna/example/data/tank.png differ diff --git a/spine-xna/example/data/tank.skel b/spine-xna/example/data/tank.skel new file mode 100644 index 000000000..1da9f265c Binary files /dev/null and b/spine-xna/example/data/tank.skel differ diff --git a/spine-xna/example/src/ExampleGame.cs b/spine-xna/example/src/ExampleGame.cs index 9c514104a..2fc21c7d0 100644 --- a/spine-xna/example/src/ExampleGame.cs +++ b/spine-xna/example/src/ExampleGame.cs @@ -76,7 +76,9 @@ namespace Spine { // String name = "spineboy"; // String name = "goblins-mesh"; - String name = "raptor"; + // String name = "raptor"; + String name = "tank"; + // String name = "star"; bool binaryData = true; Atlas atlas = new Atlas(assetsFolder + name + ".atlas", new XnaTextureLoader(GraphicsDevice)); @@ -84,6 +86,7 @@ namespace Spine { float scale = 1; if (name == "spineboy") scale = 0.6f; if (name == "raptor") scale = 0.5f; + if (name == "tank") scale = 0.3f; SkeletonData skeletonData; if (binaryData) { @@ -116,15 +119,21 @@ namespace Spine { TrackEntry entry = state.AddAnimation(0, "jump", false, 0); entry.End += End; // Event handling for queued animations. state.AddAnimation(0, "run", true, 0); - } else if (name == "raptor") { + } + else if (name == "raptor") { state.SetAnimation(0, "walk", true); - state.SetAnimation(1, "empty", false); state.AddAnimation(1, "gungrab", false, 2); + } + else if (name == "star") { + // no animation in star + } + else if (name == "tank") { + state.SetAnimation(0, "drive", true); } else { state.SetAnimation(0, "walk", true); } - skeleton.X = 400; + skeleton.X = 400 + (name == "tank" ? 300: 0); skeleton.Y = 580; skeleton.UpdateWorldTransform(); @@ -148,7 +157,7 @@ namespace Spine { GraphicsDevice.Clear(Color.Black); state.Update(gameTime.ElapsedGameTime.Milliseconds / 1000f); - state.Apply(skeleton); + state.Apply(skeleton); skeleton.UpdateWorldTransform(); skeletonRenderer.Begin(); skeletonRenderer.Draw(skeleton); diff --git a/spine-xna/src/SkeletonMeshRenderer.cs b/spine-xna/src/SkeletonMeshRenderer.cs index 1b270ed6d..1f7a29151 100644 --- a/spine-xna/src/SkeletonMeshRenderer.cs +++ b/spine-xna/src/SkeletonMeshRenderer.cs @@ -154,44 +154,7 @@ namespace Spine { itemVertices[TR].TextureCoordinate.Y = uvs[RegionAttachment.Y4]; } else if (attachment is MeshAttachment) { MeshAttachment mesh = (MeshAttachment)attachment; - int vertexCount = mesh.Vertices.Length; - if (vertices.Length < vertexCount) vertices = new float[vertexCount]; - mesh.ComputeWorldVertices(slot, vertices); - - int[] triangles = mesh.Triangles; - MeshItem item = batcher.NextItem(vertexCount, triangles.Length); - item.triangles = triangles; - - AtlasRegion region = (AtlasRegion)mesh.RendererObject; - item.texture = (Texture2D)region.page.rendererObject; - - Color color; - float a = skeletonA * slot.A * mesh.A; - if (premultipliedAlpha) { - color = new Color( - skeletonR * slot.R * mesh.R * a, - skeletonG * slot.G * mesh.G * a, - skeletonB * slot.B * mesh.B * a, a); - } else { - color = new Color( - skeletonR * slot.R * mesh.R, - skeletonG * slot.G * mesh.G, - skeletonB * slot.B * mesh.B, a); - } - - float[] uvs = mesh.UVs; - VertexPositionColorTexture[] itemVertices = item.vertices; - for (int ii = 0, v = 0; v < vertexCount; ii++, v += 2) { - itemVertices[ii].Color = color; - itemVertices[ii].Position.X = vertices[v]; - itemVertices[ii].Position.Y = vertices[v + 1]; - itemVertices[ii].Position.Z = 0; - itemVertices[ii].TextureCoordinate.X = uvs[v]; - itemVertices[ii].TextureCoordinate.Y = uvs[v + 1]; - } - } else if (attachment is WeightedMeshAttachment) { - WeightedMeshAttachment mesh = (WeightedMeshAttachment)attachment; - int vertexCount = mesh.UVs.Length; + int vertexCount = mesh.WorldVerticesLength; if (vertices.Length < vertexCount) vertices = new float[vertexCount]; mesh.ComputeWorldVertices(slot, vertices);