diff --git a/spine-corona/examples/dragon.lua b/spine-corona/examples/dragon/dragon.lua similarity index 100% rename from spine-corona/examples/dragon.lua rename to spine-corona/examples/dragon/dragon.lua diff --git a/spine-corona/examples/goblins.lua b/spine-corona/examples/goblins/goblins.lua similarity index 100% rename from spine-corona/examples/goblins.lua rename to spine-corona/examples/goblins/goblins.lua diff --git a/spine-corona/examples/hero.lua b/spine-corona/examples/hero/hero.lua similarity index 66% rename from spine-corona/examples/hero.lua rename to spine-corona/examples/hero/hero.lua index 1eeaec864..2ba535771 100644 --- a/spine-corona/examples/hero.lua +++ b/spine-corona/examples/hero/hero.lua @@ -10,7 +10,7 @@ local skeleton = spine.Skeleton.new(skeletonData) function skeleton:createImage (attachment) return display.newImage("examples/hero/images/" .. attachment.name .. ".png") end -skeleton.group.x = 195 +skeleton.group.x = 95 skeleton.group.y = 385 skeleton.flipX = false skeleton.flipY = false @@ -19,10 +19,13 @@ skeleton:setToSetupPose() -- AnimationStateData defines crossfade durations between animations. local stateData = spine.AnimationStateData.new(skeletonData) +stateData.defaultMix = 0.2; +stateData:setMix("Walk", "Attack", 0) +stateData:setMix("Attack", "Run", 0) +stateData:setMix("Run", "Attack", 0) -- AnimationState has a queue of animations and can apply them with crossfading. local state = spine.AnimationState.new(stateData) ---state:setAnimationByName(0, "Idle", true, 0) -state:setAnimationByName(0, "Walk", true, 0) +state:setAnimationByName(0, "Idle", true) local lastTime = 0 local animationTime = 0 @@ -37,3 +40,16 @@ Runtime:addEventListener("enterFrame", function (event) state:apply(skeleton) skeleton:updateWorldTransform() end) + +Runtime:addEventListener("touch", function (event) + if event.phase ~= "ended" and event.phase ~= "cancelled" then return end + local name = state:getCurrent(0).animation.name + if name == "Idle" then + state:setAnimationByName(0, "Crouch", true) + elseif name == "Crouch" then + state:setAnimationByName(0, "Walk", true) + else + state:setAnimationByName(0, "Attack", false) + state:addAnimationByName(0, "Run", true, 0) + end +end) diff --git a/spine-corona/examples/spineboy/images/eye_indifferent.png b/spine-corona/examples/spineboy/images/eye_indifferent.png new file mode 100644 index 000000000..1d29940ff Binary files /dev/null and b/spine-corona/examples/spineboy/images/eye_indifferent.png differ diff --git a/spine-corona/examples/spineboy/images/eye_surprised.png b/spine-corona/examples/spineboy/images/eye_surprised.png new file mode 100644 index 000000000..f411f9432 Binary files /dev/null and b/spine-corona/examples/spineboy/images/eye_surprised.png differ diff --git a/spine-corona/examples/spineboy/images/front_bracer.png b/spine-corona/examples/spineboy/images/front_bracer.png new file mode 100644 index 000000000..aa0fca6fd Binary files /dev/null and b/spine-corona/examples/spineboy/images/front_bracer.png differ diff --git a/spine-corona/examples/spineboy/images/front_fist_closed.png b/spine-corona/examples/spineboy/images/front_fist_closed.png new file mode 100644 index 000000000..eb8b24217 Binary files /dev/null and b/spine-corona/examples/spineboy/images/front_fist_closed.png differ diff --git a/spine-corona/examples/spineboy/images/front_fist_open.png b/spine-corona/examples/spineboy/images/front_fist_open.png new file mode 100644 index 000000000..c950492d7 Binary files /dev/null and b/spine-corona/examples/spineboy/images/front_fist_open.png differ diff --git a/spine-corona/examples/spineboy/images/front_foot.png b/spine-corona/examples/spineboy/images/front_foot.png new file mode 100644 index 000000000..69ea494c3 Binary files /dev/null and b/spine-corona/examples/spineboy/images/front_foot.png differ diff --git a/spine-corona/examples/spineboy/images/front_foot_bend1.png b/spine-corona/examples/spineboy/images/front_foot_bend1.png new file mode 100644 index 000000000..6cbc1ffcc Binary files /dev/null and b/spine-corona/examples/spineboy/images/front_foot_bend1.png differ diff --git a/spine-corona/examples/spineboy/images/front_foot_bend2.png b/spine-corona/examples/spineboy/images/front_foot_bend2.png new file mode 100644 index 000000000..e6b3942c7 Binary files /dev/null and b/spine-corona/examples/spineboy/images/front_foot_bend2.png differ diff --git a/spine-corona/examples/spineboy/images/front_shin.png b/spine-corona/examples/spineboy/images/front_shin.png new file mode 100644 index 000000000..e63bef05b Binary files /dev/null and b/spine-corona/examples/spineboy/images/front_shin.png differ diff --git a/spine-corona/examples/spineboy/images/front_thigh.png b/spine-corona/examples/spineboy/images/front_thigh.png new file mode 100644 index 000000000..91dbd8df5 Binary files /dev/null and b/spine-corona/examples/spineboy/images/front_thigh.png differ diff --git a/spine-corona/examples/spineboy/images/front_upper_arm.png b/spine-corona/examples/spineboy/images/front_upper_arm.png new file mode 100644 index 000000000..49d16d286 Binary files /dev/null and b/spine-corona/examples/spineboy/images/front_upper_arm.png differ diff --git a/spine-corona/examples/spineboy/images/goggles.png b/spine-corona/examples/spineboy/images/goggles.png new file mode 100644 index 000000000..7eb52b9db Binary files /dev/null and b/spine-corona/examples/spineboy/images/goggles.png differ diff --git a/spine-corona/examples/spineboy/images/gun.png b/spine-corona/examples/spineboy/images/gun.png new file mode 100644 index 000000000..2ba05f556 Binary files /dev/null and b/spine-corona/examples/spineboy/images/gun.png differ diff --git a/spine-corona/examples/spineboy/images/head.png b/spine-corona/examples/spineboy/images/head.png index 5a98aa37a..2d7f66abf 100644 Binary files a/spine-corona/examples/spineboy/images/head.png and b/spine-corona/examples/spineboy/images/head.png differ diff --git a/spine-corona/examples/spineboy/images/mouth_grind.png b/spine-corona/examples/spineboy/images/mouth_grind.png new file mode 100644 index 000000000..60046ab92 Binary files /dev/null and b/spine-corona/examples/spineboy/images/mouth_grind.png differ diff --git a/spine-corona/examples/spineboy/images/mouth_oooo.png b/spine-corona/examples/spineboy/images/mouth_oooo.png new file mode 100644 index 000000000..e3dc2b1e2 Binary files /dev/null and b/spine-corona/examples/spineboy/images/mouth_oooo.png differ diff --git a/spine-corona/examples/spineboy/images/mouth_smile.png b/spine-corona/examples/spineboy/images/mouth_smile.png new file mode 100644 index 000000000..7a2276ee5 Binary files /dev/null and b/spine-corona/examples/spineboy/images/mouth_smile.png differ diff --git a/spine-corona/examples/spineboy/images/muzzle.png b/spine-corona/examples/spineboy/images/muzzle.png new file mode 100644 index 000000000..6d53f3ad8 Binary files /dev/null and b/spine-corona/examples/spineboy/images/muzzle.png differ diff --git a/spine-corona/examples/spineboy/images/neck.png b/spine-corona/examples/spineboy/images/neck.png index c7b938863..544ea1ed2 100644 Binary files a/spine-corona/examples/spineboy/images/neck.png and b/spine-corona/examples/spineboy/images/neck.png differ diff --git a/spine-corona/examples/spineboy/images/rear_bracer.png b/spine-corona/examples/spineboy/images/rear_bracer.png new file mode 100644 index 000000000..06b9c9cd7 Binary files /dev/null and b/spine-corona/examples/spineboy/images/rear_bracer.png differ diff --git a/spine-corona/examples/spineboy/images/rear_foot.png b/spine-corona/examples/spineboy/images/rear_foot.png new file mode 100644 index 000000000..6fdf9ad60 Binary files /dev/null and b/spine-corona/examples/spineboy/images/rear_foot.png differ diff --git a/spine-corona/examples/spineboy/images/rear_foot_bend1.png b/spine-corona/examples/spineboy/images/rear_foot_bend1.png new file mode 100644 index 000000000..10f2a72e9 Binary files /dev/null and b/spine-corona/examples/spineboy/images/rear_foot_bend1.png differ diff --git a/spine-corona/examples/spineboy/images/rear_foot_bend2.png b/spine-corona/examples/spineboy/images/rear_foot_bend2.png new file mode 100644 index 000000000..01dff6265 Binary files /dev/null and b/spine-corona/examples/spineboy/images/rear_foot_bend2.png differ diff --git a/spine-corona/examples/spineboy/images/rear_shin.png b/spine-corona/examples/spineboy/images/rear_shin.png new file mode 100644 index 000000000..02335c263 Binary files /dev/null and b/spine-corona/examples/spineboy/images/rear_shin.png differ diff --git a/spine-corona/examples/spineboy/images/rear_thigh.png b/spine-corona/examples/spineboy/images/rear_thigh.png new file mode 100644 index 000000000..d5da9f15d Binary files /dev/null and b/spine-corona/examples/spineboy/images/rear_thigh.png differ diff --git a/spine-corona/examples/spineboy/images/rear_upper_arm.png b/spine-corona/examples/spineboy/images/rear_upper_arm.png new file mode 100644 index 000000000..52d3a9ef5 Binary files /dev/null and b/spine-corona/examples/spineboy/images/rear_upper_arm.png differ diff --git a/spine-corona/examples/spineboy/images/torso.png b/spine-corona/examples/spineboy/images/torso.png index d5a318e72..c38b2ef45 100644 Binary files a/spine-corona/examples/spineboy/images/torso.png and b/spine-corona/examples/spineboy/images/torso.png differ diff --git a/spine-corona/examples/spineboy/spineboy.json b/spine-corona/examples/spineboy/spineboy.json index 113e72c33..408b1d87e 100644 --- a/spine-corona/examples/spineboy/spineboy.json +++ b/spine-corona/examples/spineboy/spineboy.json @@ -1,1002 +1 @@ -{ -"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": 45.76, "x": -18.27, "rotation": -101.13 }, - { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 94.95 }, - { "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 } -], -"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", "additive": true }, - { "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", - "vertices": [ - 55.69696, - -44.60648, - 8.2226715, - -47.609646, - -11.244263, - -32.942703, - -0.05206299, - 35.835804, - 61.018433, - 43.227512, - 90.35846, - -16.054127, - 115.41275, - -32.817406, - 78.29431, - -56.05409 - ] - } - }, - "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": { - "drawOrder": { - "bones": { - "head": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.4827, "angle": -23.11 }, - { "time": 0.8965, "angle": -56.45 }, - { "time": 1.3103, "angle": 1.38 }, - { "time": 1.7931, "angle": 36.12 }, - { "time": 2.1379, "angle": 1.24 }, - { "time": 2.6206, "angle": -37.12 }, - { "time": 2.9666, "angle": 2.07 }, - { "time": 3.4666, "angle": 34.72 }, - { "time": 3.9, "angle": 359.99 } - ], - "translate": [ - { - "time": 0, - "x": 0, - "y": 0, - "curve": [ 0.19, 0.4, 0.586, 0.75 ] - }, - { - "time": 0.2758, - "x": 57.88, - "y": -35.72, - "curve": [ 0.39, 0.54, 0.632, 0.72 ] - }, - { - "time": 0.4827, - "x": 87.26, - "y": -87.89, - "curve": [ 0.325, 0.23, 0.587, 0.36 ] - }, - { - "time": 0.6896, - "x": 28.89, - "y": -114.62, - "curve": [ 0.383, 0.23, 0.736, 0.55 ] - }, - { - "time": 0.8965, - "x": -76.58, - "y": -124.98, - "curve": [ 0.129, 0.21, 0.547, 0.64 ] - }, - { - "time": 1.1034, - "x": -154.37, - "y": -77.13, - "curve": [ 0.354, 0.48, 0.729, 0.9 ] - }, - { - "time": 1.3103, - "x": -181.02, - "y": 18.56, - "curve": [ 0.063, 0.15, 0.52, 0.62 ] - }, - { - "time": 1.5862, - "x": -150.38, - "y": 128.67, - "curve": [ 0.381, 0.54, 0.778, 1 ] - }, - { - "time": 1.7931, - "x": -112.08, - "y": 146.28, - "curve": [ 0.242, 0, 0.626, 0.45 ] - }, - { - "time": 1.931, - "x": -63.7, - "y": 111.22, - "curve": [ 0.398, 0.35, 0.786, 0.76 ] - }, - { - "time": 2.1379, - "x": -48.94, - "y": -1.55, - "curve": [ 0.188, 0.21, 0.575, 0.61 ] - }, - { - "time": 2.3448, - "x": -91.69, - "y": -91.93, - "curve": [ 0.362, 0.51, 0.766, 1 ] - }, - { - "time": 2.6206, - "x": -142.79, - "y": -126.83, - "curve": [ 0.227, 0.34, 0.593, 0.75 ] - }, - { - "time": 2.7586, - "x": -176.7, - "y": -98.32, - "curve": [ 0.26, 0.4, 0.612, 0.71 ] - }, - { - "time": 2.8965, - "x": -163.95, - "y": -24.04, - "curve": [ 0.338, 0.37, 0.676, 0.71 ] - }, - { - "time": 2.9655, - "x": -150.17, - "y": 10.71, - "curve": [ 0.387, 0.61, 0.741, 1 ] - }, - { - "time": 3.1034, - "x": -102.44, - "y": 45.92, - "curve": [ 0.31, 0.24, 0.648, 0.58 ] - }, - { - "time": 3.2413, - "x": -53.99, - "y": 70.39, - "curve": [ 0.325, 0.29, 0.663, 0.63 ] - }, - { - "time": 3.3793, - "x": 1.88, - "y": 55.54, - "curve": [ 0.387, 0.33, 0.769, 0.73 ] - }, - { - "time": 3.5862, - "x": 34.26, - "y": 36.13, - "curve": [ 0.206, 0.28, 0.596, 0.67 ] - }, - { - "time": 3.7931, - "x": 23.94, - "y": 1.01, - "curve": [ 0.373, 0.56, 0.759, 1 ] - }, - { "time": 4, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0.8275, "x": 1, "y": 1 }, - { "time": 1.3103, "x": 0.742, "y": 0.742 }, - { "time": 1.7931, "x": 1, "y": 1 }, - { "time": 2.1379, "x": 1.502, "y": 1.502 }, - { "time": 2.6206, "x": 1, "y": 1 }, - { "time": 2.9655, "x": 0.707, "y": 0.707 }, - { "time": 3.3793, "x": 1, "y": 1 } - ] - } - }, - "events": [ - { "time": 0, "name": "headPop", "string": "pop.wav" }, - { "time": 1.3103, "name": "behind" }, - { "time": 2.9655, "name": "behind" }, - { "time": 4, "name": "headAttach", "string": "attach.wav" } - ], - "draworder": [ - { - "time": 0.6206, - "offsets": [ - { "slot": "head", "offset": -12 }, - { "slot": "eyes", "offset": -12 } - ] - }, - { - "time": 1.7931, - "offsets": [ - { "slot": "head", "offset": 3 }, - { "slot": "eyes", "offset": 3 } - ] - }, - { - "time": 2.6206, - "offsets": [ - { "slot": "head", "offset": -12 }, - { "slot": "eyes", "offset": -12 } - ] - }, - { "time": 3.5862 } - ] - }, - "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 } - ] - } - } - } -} -} \ No newline at end of file +{"skeleton":{"hash":"K7WPVqF4PZ8L4jRHQe10IDN6xJI","spine":"2.1.03","width":470.64,"height":731.52},"bones":[{"name":"hip","y":247.47},{"name":"front_thigh","parent":"hip","length":74.8,"x":-17.45,"y":-11.64,"rotation":-95.51},{"name":"rear_thigh","parent":"hip","length":85.71,"x":8.91,"y":-5.62,"rotation":-72.54},{"name":"torso","parent":"hip","length":127.55,"x":-1.61,"y":4.9,"rotation":103.82},{"name":"front_shin","parent":"front_thigh","length":128.76,"x":78.69,"y":1.6,"rotation":-2.21,"inheritScale":false},{"name":"front_upper_arm","parent":"torso","length":69.45,"x":103.75,"y":19.32,"rotation":168.37},{"name":"neck","parent":"torso","length":25.45,"x":127.49,"y":-0.3,"rotation":-31.53},{"name":"rear_shin","parent":"rear_thigh","length":121.87,"x":86.1,"y":-1.32,"rotation":-19.83},{"name":"rear_upper_arm","parent":"torso","length":51.93,"x":92.35,"y":-19.22,"rotation":-169.55},{"name":"front_bracer","parent":"front_upper_arm","length":40.57,"x":68.8,"y":-0.68,"rotation":18.29},{"name":"front_foot","parent":"front_shin","length":91.34,"x":128.75,"y":-0.33,"rotation":77.9},{"name":"head","parent":"neck","length":263.57,"x":27.66,"y":-0.25,"rotation":23.18},{"name":"rear_bracer","parent":"rear_upper_arm","length":34.55,"x":51.35,"rotation":23.15},{"name":"rear_foot","parent":"rear_shin","length":82.57,"x":121.45,"y":-0.75,"rotation":69.3},{"name":"front_fist","parent":"front_bracer","length":65.38,"x":40.56,"y":0.19,"rotation":12.43},{"name":"gun","parent":"rear_bracer","length":43.1,"x":34.42,"y":-0.45,"rotation":5.34},{"name":"gunTip","parent":"gun","x":201.04,"y":52.13,"rotation":6.83}],"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"},{"name":"headbb","bone":"head","attachment":"headbb"}],"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]}},"headbb":{"headbb":{"type":"boundingbox","vertices":[-12.554413,-54.026264,23.48825,-101.27528,231.95355,-109.845566,274.80518,49.916832,181.1228,122.143875,83.208466,133.12569,2.8721924,56.44203]}},"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.lua b/spine-corona/examples/spineboy/spineboy.lua similarity index 92% rename from spine-corona/examples/spineboy.lua rename to spine-corona/examples/spineboy/spineboy.lua index 2df365143..f8bf7f221 100644 --- a/spine-corona/examples/spineboy.lua +++ b/spine-corona/examples/spineboy/spineboy.lua @@ -4,7 +4,7 @@ local spine = require "spine-corona.spine" local json = spine.SkeletonJson.new() -json.scale = 1 +json.scale = 0.6 local skeletonData = json:readSkeletonDataFile("examples/spineboy/spineboy.json") local skeleton = spine.Skeleton.new(skeletonData) @@ -25,13 +25,14 @@ 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", "walk", 0.4) +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, "drawOrder") -state:addAnimationByName(0, "jump", false, 0) -state:addAnimationByName(0, "walk", true, 0) +-- 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) diff --git a/spine-corona/main.lua b/spine-corona/main.lua index 54588f6fa..e279f778e 100644 --- a/spine-corona/main.lua +++ b/spine-corona/main.lua @@ -1,5 +1,5 @@ --- require "examples.spineboy" --- require "examples.goblins" --- require "examples.dragon" -require "examples.hero" +require "examples.spineboy.spineboy" +-- require "examples.goblins.goblins" +-- require "examples.dragon.dragon" +-- require "examples.hero.hero" diff --git a/spine-corona/spine-corona/spine.lua b/spine-corona/spine-corona/spine.lua index 2ca591561..9231f6f50 100644 --- a/spine-corona/spine-corona/spine.lua +++ b/spine-corona/spine-corona/spine.lua @@ -35,6 +35,7 @@ spine.SkeletonJson = require "spine-lua.SkeletonJson" spine.SkeletonData = require "spine-lua.SkeletonData" spine.BoneData = require "spine-lua.BoneData" spine.SlotData = require "spine-lua.SlotData" +spine.IkConstraintData = require "spine-lua.IkConstraintData" spine.Skin = require "spine-lua.Skin" spine.RegionAttachment = require "spine-lua.RegionAttachment" spine.MeshAttachment = require "spine-lua.MeshAttachment" @@ -42,6 +43,7 @@ spine.SkinnedMeshAttachment = require "spine-lua.SkinnedMeshAttachment" spine.Skeleton = require "spine-lua.Skeleton" spine.Bone = require "spine-lua.Bone" spine.Slot = require "spine-lua.Slot" +spine.IkConstraint = require "spine-lua.IkConstraint" spine.AttachmentType = require "spine-lua.AttachmentType" spine.AttachmentLoader = require "spine-lua.AttachmentLoader" spine.Animation = require "spine-lua.Animation" diff --git a/spine-love/data/goblins.json b/spine-love/data/goblins.json deleted file mode 100644 index f1dcc96a0..000000000 --- a/spine-love/data/goblins.json +++ /dev/null @@ -1,499 +0,0 @@ -{ -"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": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 }, - { "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 }, - { "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 }, - { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 }, - { "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 }, - { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 }, - { "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 }, - { "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 }, - { "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 }, - { "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 }, - { "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 }, - { "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 }, - { "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 }, - { "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 }, - { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 } -], -"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", "attachment": "dagger" }, - { "name": "right hand", "bone": "right hand", "attachment": "right hand" } -], -"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 } - } - }, - "goblin": { - "neck": { - "neck": { "name": "goblin/neck", "x": 10.1, "y": 0.42, "rotation": -93.69, "width": 36, "height": 41 } - }, - "undies": { - "undies": { "name": "goblin/undies", "x": 6.3, "y": 0.12, "rotation": 0.91, "width": 36, "height": 29 } - }, - "right hand": { - "right hand": { "name": "goblin/right-hand", "x": 7.88, "y": 2.78, "rotation": 91.96, "width": 36, "height": 37 } - }, - "right arm": { - "right arm": { "name": "goblin/right-arm", "x": 16.44, "y": -1.04, "rotation": 94.32, "width": 23, "height": 50 } - }, - "head": { - "head": { "name": "goblin/head", "x": 25.73, "y": 2.33, "rotation": -92.29, "width": 103, "height": 66 } - }, - "left shoulder": { - "left shoulder": { "name": "goblin/left-shoulder", "x": 15.56, "y": -2.26, "rotation": 62.01, "width": 29, "height": 44 } - }, - "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 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 - } - }, - "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 upper leg": { - "right upper leg": { "name": "goblin/right-upper-leg", "x": 20.35, "y": 1.47, "rotation": 97.49, "width": 34, "height": 63 } - }, - "pelvis": { - "pelvis": { "name": "goblin/pelvis", "x": -5.61, "y": 0.76, "width": 62, "height": 43 } - }, - "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 upper leg": { - "left upper leg": { "name": "goblin/left-upper-leg", "x": 29.68, "y": -3.87, "rotation": 89.09, "width": 33, "height": 73 } - }, - "torso": { - "torso": { "name": "goblin/torso", "x": 38.09, "y": -3.87, "rotation": -94.95, "width": 68, "height": 96 } - }, - "right shoulder": { - "right shoulder": { "name": "goblin/right-shoulder", "x": 15.68, "y": -1.03, "rotation": 130.65, "width": 39, "height": 45 } - }, - "right foot": { - "right foot": { "name": "goblin/right-foot", "x": 23.56, "y": 9.8, "rotation": 1.52, "width": 63, "height": 33 } - }, - "left foot": { - "left foot": { "name": "goblin/left-foot", "x": 24.85, "y": 8.74, "rotation": 3.32, "width": 65, "height": 31 } - }, - "undie straps": { - "undie straps": { "name": "goblin/undie-straps", "x": -3.87, "y": 13.1, "scaleX": 1.089, "width": 55, "height": 19 } - }, - "eyes": { - "eyes closed": { "name": "goblin/eyes-closed", "x": 32.21, "y": -21.27, "rotation": -88.92, "width": 34, "height": 12 } - } - }, - "goblingirl": { - "left upper leg": { - "left upper leg": { "name": "goblingirl/left-upper-leg", "x": 30.21, "y": -2.95, "rotation": 89.09, "width": 33, "height": 70 } - }, - "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 foot": { - "left foot": { "name": "goblingirl/left-foot", "x": 25.17, "y": 7.92, "rotation": 3.32, "width": 65, "height": 31 } - }, - "right upper leg": { - "right upper leg": { "name": "goblingirl/right-upper-leg", "x": 19.69, "y": 2.13, "rotation": 97.49, "width": 34, "height": 63 } - }, - "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 foot": { - "right foot": { "name": "goblingirl/right-foot", "x": 23.46, "y": 9.66, "rotation": 1.52, "width": 63, "height": 33 } - }, - "torso": { - "torso": { "name": "goblingirl/torso", "x": 36.28, "y": -5.14, "rotation": -95.74, "width": 68, "height": 96 } - }, - "left shoulder": { - "left shoulder": { "name": "goblingirl/left-shoulder", "x": 19.8, "y": -0.42, "rotation": 61.21, "width": 28, "height": 46 } - }, - "left arm": { - "left arm": { "name": "goblingirl/left-arm", "x": 19.64, "y": -2.42, "rotation": 33.05, "width": 37, "height": 35 } - }, - "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 - } - }, - "neck": { - "neck": { "name": "goblingirl/neck", "x": 6.16, "y": -3.14, "rotation": -98.86, "width": 35, "height": 41 } - }, - "head": { - "head": { "name": "goblingirl/head", "x": 27.71, "y": -4.32, "rotation": -85.58, "width": 103, "height": 81 } - }, - "right shoulder": { - "right shoulder": { "name": "goblingirl/right-shoulder", "x": 14.46, "y": 0.45, "rotation": 129.85, "width": 39, "height": 45 } - }, - "right arm": { - "right arm": { "name": "goblingirl/right-arm", "x": 16.85, "y": -0.66, "rotation": 93.52, "width": 28, "height": 50 } - }, - "right hand": { - "right hand": { "name": "goblingirl/right-hand", "x": 7.21, "y": 3.43, "rotation": 91.16, "width": 36, "height": 37 } - }, - "pelvis": { - "pelvis": { "name": "goblingirl/pelvis", "x": -3.87, "y": 3.18, "width": 62, "height": 43 } - }, - "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 } - }, - "eyes": { - "eyes closed": { "name": "goblingirl/eyes-closed", "x": 28, "y": -25.54, "rotation": -87.04, "width": 37, "height": 21 } - } - } -}, -"animations": { - "walk": { - "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 } - ] - } - }, - "slots": { - "eyes": { - "attachment": [ - { "time": 0.7, "name": "eyes closed" }, - { "time": 0.8, "name": null } - ] - } - } - } -} -} \ No newline at end of file diff --git a/spine-love/data/head.png b/spine-love/data/head.png deleted file mode 100644 index 5a98aa37a..000000000 Binary files a/spine-love/data/head.png and /dev/null differ diff --git a/spine-love/data/images/eye_indifferent.png b/spine-love/data/images/eye_indifferent.png new file mode 100644 index 000000000..1d29940ff Binary files /dev/null and b/spine-love/data/images/eye_indifferent.png differ diff --git a/spine-love/data/images/eye_surprised.png b/spine-love/data/images/eye_surprised.png new file mode 100644 index 000000000..f411f9432 Binary files /dev/null and b/spine-love/data/images/eye_surprised.png differ diff --git a/spine-love/data/eyes-closed.png b/spine-love/data/images/eyes-closed.png similarity index 100% rename from spine-love/data/eyes-closed.png rename to spine-love/data/images/eyes-closed.png diff --git a/spine-love/data/eyes.png b/spine-love/data/images/eyes.png similarity index 100% rename from spine-love/data/eyes.png rename to spine-love/data/images/eyes.png diff --git a/spine-love/data/images/front_bracer.png b/spine-love/data/images/front_bracer.png new file mode 100644 index 000000000..aa0fca6fd Binary files /dev/null and b/spine-love/data/images/front_bracer.png differ diff --git a/spine-love/data/images/front_fist_closed.png b/spine-love/data/images/front_fist_closed.png new file mode 100644 index 000000000..eb8b24217 Binary files /dev/null and b/spine-love/data/images/front_fist_closed.png differ diff --git a/spine-love/data/images/front_fist_open.png b/spine-love/data/images/front_fist_open.png new file mode 100644 index 000000000..c950492d7 Binary files /dev/null and b/spine-love/data/images/front_fist_open.png differ diff --git a/spine-love/data/images/front_foot.png b/spine-love/data/images/front_foot.png new file mode 100644 index 000000000..69ea494c3 Binary files /dev/null and b/spine-love/data/images/front_foot.png differ diff --git a/spine-love/data/images/front_foot_bend1.png b/spine-love/data/images/front_foot_bend1.png new file mode 100644 index 000000000..6cbc1ffcc Binary files /dev/null and b/spine-love/data/images/front_foot_bend1.png differ diff --git a/spine-love/data/images/front_foot_bend2.png b/spine-love/data/images/front_foot_bend2.png new file mode 100644 index 000000000..e6b3942c7 Binary files /dev/null and b/spine-love/data/images/front_foot_bend2.png differ diff --git a/spine-love/data/images/front_shin.png b/spine-love/data/images/front_shin.png new file mode 100644 index 000000000..e63bef05b Binary files /dev/null and b/spine-love/data/images/front_shin.png differ diff --git a/spine-love/data/images/front_thigh.png b/spine-love/data/images/front_thigh.png new file mode 100644 index 000000000..91dbd8df5 Binary files /dev/null and b/spine-love/data/images/front_thigh.png differ diff --git a/spine-love/data/images/front_upper_arm.png b/spine-love/data/images/front_upper_arm.png new file mode 100644 index 000000000..49d16d286 Binary files /dev/null and b/spine-love/data/images/front_upper_arm.png differ diff --git a/spine-love/data/images/goggles.png b/spine-love/data/images/goggles.png new file mode 100644 index 000000000..7eb52b9db Binary files /dev/null and b/spine-love/data/images/goggles.png differ diff --git a/spine-love/data/images/gun.png b/spine-love/data/images/gun.png new file mode 100644 index 000000000..2ba05f556 Binary files /dev/null and b/spine-love/data/images/gun.png differ diff --git a/spine-love/data/images/head.png b/spine-love/data/images/head.png new file mode 100644 index 000000000..2d7f66abf Binary files /dev/null and b/spine-love/data/images/head.png differ diff --git a/spine-love/data/left-ankle.png b/spine-love/data/images/left-ankle.png similarity index 100% rename from spine-love/data/left-ankle.png rename to spine-love/data/images/left-ankle.png diff --git a/spine-love/data/left-arm.png b/spine-love/data/images/left-arm.png similarity index 100% rename from spine-love/data/left-arm.png rename to spine-love/data/images/left-arm.png diff --git a/spine-love/data/left-foot.png b/spine-love/data/images/left-foot.png similarity index 100% rename from spine-love/data/left-foot.png rename to spine-love/data/images/left-foot.png diff --git a/spine-love/data/left-hand.png b/spine-love/data/images/left-hand.png similarity index 100% rename from spine-love/data/left-hand.png rename to spine-love/data/images/left-hand.png diff --git a/spine-love/data/left-lower-leg.png b/spine-love/data/images/left-lower-leg.png similarity index 100% rename from spine-love/data/left-lower-leg.png rename to spine-love/data/images/left-lower-leg.png diff --git a/spine-love/data/left-pant-bottom.png b/spine-love/data/images/left-pant-bottom.png similarity index 100% rename from spine-love/data/left-pant-bottom.png rename to spine-love/data/images/left-pant-bottom.png diff --git a/spine-love/data/left-shoulder.png b/spine-love/data/images/left-shoulder.png similarity index 100% rename from spine-love/data/left-shoulder.png rename to spine-love/data/images/left-shoulder.png diff --git a/spine-love/data/left-upper-leg.png b/spine-love/data/images/left-upper-leg.png similarity index 100% rename from spine-love/data/left-upper-leg.png rename to spine-love/data/images/left-upper-leg.png diff --git a/spine-love/data/images/mouth_grind.png b/spine-love/data/images/mouth_grind.png new file mode 100644 index 000000000..60046ab92 Binary files /dev/null and b/spine-love/data/images/mouth_grind.png differ diff --git a/spine-love/data/images/mouth_oooo.png b/spine-love/data/images/mouth_oooo.png new file mode 100644 index 000000000..e3dc2b1e2 Binary files /dev/null and b/spine-love/data/images/mouth_oooo.png differ diff --git a/spine-love/data/images/mouth_smile.png b/spine-love/data/images/mouth_smile.png new file mode 100644 index 000000000..7a2276ee5 Binary files /dev/null and b/spine-love/data/images/mouth_smile.png differ diff --git a/spine-love/data/images/muzzle.png b/spine-love/data/images/muzzle.png new file mode 100644 index 000000000..6d53f3ad8 Binary files /dev/null and b/spine-love/data/images/muzzle.png differ diff --git a/spine-love/data/images/neck.png b/spine-love/data/images/neck.png new file mode 100644 index 000000000..544ea1ed2 Binary files /dev/null and b/spine-love/data/images/neck.png differ diff --git a/spine-love/data/pelvis.png b/spine-love/data/images/pelvis.png similarity index 100% rename from spine-love/data/pelvis.png rename to spine-love/data/images/pelvis.png diff --git a/spine-love/data/images/rear_bracer.png b/spine-love/data/images/rear_bracer.png new file mode 100644 index 000000000..06b9c9cd7 Binary files /dev/null and b/spine-love/data/images/rear_bracer.png differ diff --git a/spine-love/data/images/rear_foot.png b/spine-love/data/images/rear_foot.png new file mode 100644 index 000000000..6fdf9ad60 Binary files /dev/null and b/spine-love/data/images/rear_foot.png differ diff --git a/spine-love/data/images/rear_foot_bend1.png b/spine-love/data/images/rear_foot_bend1.png new file mode 100644 index 000000000..10f2a72e9 Binary files /dev/null and b/spine-love/data/images/rear_foot_bend1.png differ diff --git a/spine-love/data/images/rear_foot_bend2.png b/spine-love/data/images/rear_foot_bend2.png new file mode 100644 index 000000000..01dff6265 Binary files /dev/null and b/spine-love/data/images/rear_foot_bend2.png differ diff --git a/spine-love/data/images/rear_shin.png b/spine-love/data/images/rear_shin.png new file mode 100644 index 000000000..02335c263 Binary files /dev/null and b/spine-love/data/images/rear_shin.png differ diff --git a/spine-love/data/images/rear_thigh.png b/spine-love/data/images/rear_thigh.png new file mode 100644 index 000000000..d5da9f15d Binary files /dev/null and b/spine-love/data/images/rear_thigh.png differ diff --git a/spine-love/data/images/rear_upper_arm.png b/spine-love/data/images/rear_upper_arm.png new file mode 100644 index 000000000..52d3a9ef5 Binary files /dev/null and b/spine-love/data/images/rear_upper_arm.png differ diff --git a/spine-love/data/right-ankle.png b/spine-love/data/images/right-ankle.png similarity index 100% rename from spine-love/data/right-ankle.png rename to spine-love/data/images/right-ankle.png diff --git a/spine-love/data/right-arm.png b/spine-love/data/images/right-arm.png similarity index 100% rename from spine-love/data/right-arm.png rename to spine-love/data/images/right-arm.png diff --git a/spine-love/data/right-foot-idle.png b/spine-love/data/images/right-foot-idle.png similarity index 100% rename from spine-love/data/right-foot-idle.png rename to spine-love/data/images/right-foot-idle.png diff --git a/spine-love/data/right-foot.png b/spine-love/data/images/right-foot.png similarity index 100% rename from spine-love/data/right-foot.png rename to spine-love/data/images/right-foot.png diff --git a/spine-love/data/right-hand.png b/spine-love/data/images/right-hand.png similarity index 100% rename from spine-love/data/right-hand.png rename to spine-love/data/images/right-hand.png diff --git a/spine-love/data/right-lower-leg.png b/spine-love/data/images/right-lower-leg.png similarity index 100% rename from spine-love/data/right-lower-leg.png rename to spine-love/data/images/right-lower-leg.png diff --git a/spine-love/data/right-pant-bottom.png b/spine-love/data/images/right-pant-bottom.png similarity index 100% rename from spine-love/data/right-pant-bottom.png rename to spine-love/data/images/right-pant-bottom.png diff --git a/spine-love/data/right-shoulder.png b/spine-love/data/images/right-shoulder.png similarity index 100% rename from spine-love/data/right-shoulder.png rename to spine-love/data/images/right-shoulder.png diff --git a/spine-love/data/right-upper-leg.png b/spine-love/data/images/right-upper-leg.png similarity index 100% rename from spine-love/data/right-upper-leg.png rename to spine-love/data/images/right-upper-leg.png diff --git a/spine-love/data/images/torso.png b/spine-love/data/images/torso.png new file mode 100644 index 000000000..c38b2ef45 Binary files /dev/null and b/spine-love/data/images/torso.png differ diff --git a/spine-love/data/neck.png b/spine-love/data/neck.png deleted file mode 100644 index c7b938863..000000000 Binary files a/spine-love/data/neck.png and /dev/null differ diff --git a/spine-love/data/spineboy.json b/spine-love/data/spineboy.json index 113e72c33..408b1d87e 100644 --- a/spine-love/data/spineboy.json +++ b/spine-love/data/spineboy.json @@ -1,1002 +1 @@ -{ -"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": 45.76, "x": -18.27, "rotation": -101.13 }, - { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 94.95 }, - { "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 } -], -"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", "additive": true }, - { "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", - "vertices": [ - 55.69696, - -44.60648, - 8.2226715, - -47.609646, - -11.244263, - -32.942703, - -0.05206299, - 35.835804, - 61.018433, - 43.227512, - 90.35846, - -16.054127, - 115.41275, - -32.817406, - 78.29431, - -56.05409 - ] - } - }, - "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": { - "drawOrder": { - "bones": { - "head": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.4827, "angle": -23.11 }, - { "time": 0.8965, "angle": -56.45 }, - { "time": 1.3103, "angle": 1.38 }, - { "time": 1.7931, "angle": 36.12 }, - { "time": 2.1379, "angle": 1.24 }, - { "time": 2.6206, "angle": -37.12 }, - { "time": 2.9666, "angle": 2.07 }, - { "time": 3.4666, "angle": 34.72 }, - { "time": 3.9, "angle": 359.99 } - ], - "translate": [ - { - "time": 0, - "x": 0, - "y": 0, - "curve": [ 0.19, 0.4, 0.586, 0.75 ] - }, - { - "time": 0.2758, - "x": 57.88, - "y": -35.72, - "curve": [ 0.39, 0.54, 0.632, 0.72 ] - }, - { - "time": 0.4827, - "x": 87.26, - "y": -87.89, - "curve": [ 0.325, 0.23, 0.587, 0.36 ] - }, - { - "time": 0.6896, - "x": 28.89, - "y": -114.62, - "curve": [ 0.383, 0.23, 0.736, 0.55 ] - }, - { - "time": 0.8965, - "x": -76.58, - "y": -124.98, - "curve": [ 0.129, 0.21, 0.547, 0.64 ] - }, - { - "time": 1.1034, - "x": -154.37, - "y": -77.13, - "curve": [ 0.354, 0.48, 0.729, 0.9 ] - }, - { - "time": 1.3103, - "x": -181.02, - "y": 18.56, - "curve": [ 0.063, 0.15, 0.52, 0.62 ] - }, - { - "time": 1.5862, - "x": -150.38, - "y": 128.67, - "curve": [ 0.381, 0.54, 0.778, 1 ] - }, - { - "time": 1.7931, - "x": -112.08, - "y": 146.28, - "curve": [ 0.242, 0, 0.626, 0.45 ] - }, - { - "time": 1.931, - "x": -63.7, - "y": 111.22, - "curve": [ 0.398, 0.35, 0.786, 0.76 ] - }, - { - "time": 2.1379, - "x": -48.94, - "y": -1.55, - "curve": [ 0.188, 0.21, 0.575, 0.61 ] - }, - { - "time": 2.3448, - "x": -91.69, - "y": -91.93, - "curve": [ 0.362, 0.51, 0.766, 1 ] - }, - { - "time": 2.6206, - "x": -142.79, - "y": -126.83, - "curve": [ 0.227, 0.34, 0.593, 0.75 ] - }, - { - "time": 2.7586, - "x": -176.7, - "y": -98.32, - "curve": [ 0.26, 0.4, 0.612, 0.71 ] - }, - { - "time": 2.8965, - "x": -163.95, - "y": -24.04, - "curve": [ 0.338, 0.37, 0.676, 0.71 ] - }, - { - "time": 2.9655, - "x": -150.17, - "y": 10.71, - "curve": [ 0.387, 0.61, 0.741, 1 ] - }, - { - "time": 3.1034, - "x": -102.44, - "y": 45.92, - "curve": [ 0.31, 0.24, 0.648, 0.58 ] - }, - { - "time": 3.2413, - "x": -53.99, - "y": 70.39, - "curve": [ 0.325, 0.29, 0.663, 0.63 ] - }, - { - "time": 3.3793, - "x": 1.88, - "y": 55.54, - "curve": [ 0.387, 0.33, 0.769, 0.73 ] - }, - { - "time": 3.5862, - "x": 34.26, - "y": 36.13, - "curve": [ 0.206, 0.28, 0.596, 0.67 ] - }, - { - "time": 3.7931, - "x": 23.94, - "y": 1.01, - "curve": [ 0.373, 0.56, 0.759, 1 ] - }, - { "time": 4, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0.8275, "x": 1, "y": 1 }, - { "time": 1.3103, "x": 0.742, "y": 0.742 }, - { "time": 1.7931, "x": 1, "y": 1 }, - { "time": 2.1379, "x": 1.502, "y": 1.502 }, - { "time": 2.6206, "x": 1, "y": 1 }, - { "time": 2.9655, "x": 0.707, "y": 0.707 }, - { "time": 3.3793, "x": 1, "y": 1 } - ] - } - }, - "events": [ - { "time": 0, "name": "headPop", "string": "pop.wav" }, - { "time": 1.3103, "name": "behind" }, - { "time": 2.9655, "name": "behind" }, - { "time": 4, "name": "headAttach", "string": "attach.wav" } - ], - "draworder": [ - { - "time": 0.6206, - "offsets": [ - { "slot": "head", "offset": -12 }, - { "slot": "eyes", "offset": -12 } - ] - }, - { - "time": 1.7931, - "offsets": [ - { "slot": "head", "offset": 3 }, - { "slot": "eyes", "offset": 3 } - ] - }, - { - "time": 2.6206, - "offsets": [ - { "slot": "head", "offset": -12 }, - { "slot": "eyes", "offset": -12 } - ] - }, - { "time": 3.5862 } - ] - }, - "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 } - ] - } - } - } -} -} \ No newline at end of file +{"skeleton":{"hash":"K7WPVqF4PZ8L4jRHQe10IDN6xJI","spine":"2.1.03","width":470.64,"height":731.52},"bones":[{"name":"hip","y":247.47},{"name":"front_thigh","parent":"hip","length":74.8,"x":-17.45,"y":-11.64,"rotation":-95.51},{"name":"rear_thigh","parent":"hip","length":85.71,"x":8.91,"y":-5.62,"rotation":-72.54},{"name":"torso","parent":"hip","length":127.55,"x":-1.61,"y":4.9,"rotation":103.82},{"name":"front_shin","parent":"front_thigh","length":128.76,"x":78.69,"y":1.6,"rotation":-2.21,"inheritScale":false},{"name":"front_upper_arm","parent":"torso","length":69.45,"x":103.75,"y":19.32,"rotation":168.37},{"name":"neck","parent":"torso","length":25.45,"x":127.49,"y":-0.3,"rotation":-31.53},{"name":"rear_shin","parent":"rear_thigh","length":121.87,"x":86.1,"y":-1.32,"rotation":-19.83},{"name":"rear_upper_arm","parent":"torso","length":51.93,"x":92.35,"y":-19.22,"rotation":-169.55},{"name":"front_bracer","parent":"front_upper_arm","length":40.57,"x":68.8,"y":-0.68,"rotation":18.29},{"name":"front_foot","parent":"front_shin","length":91.34,"x":128.75,"y":-0.33,"rotation":77.9},{"name":"head","parent":"neck","length":263.57,"x":27.66,"y":-0.25,"rotation":23.18},{"name":"rear_bracer","parent":"rear_upper_arm","length":34.55,"x":51.35,"rotation":23.15},{"name":"rear_foot","parent":"rear_shin","length":82.57,"x":121.45,"y":-0.75,"rotation":69.3},{"name":"front_fist","parent":"front_bracer","length":65.38,"x":40.56,"y":0.19,"rotation":12.43},{"name":"gun","parent":"rear_bracer","length":43.1,"x":34.42,"y":-0.45,"rotation":5.34},{"name":"gunTip","parent":"gun","x":201.04,"y":52.13,"rotation":6.83}],"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"},{"name":"headbb","bone":"head","attachment":"headbb"}],"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]}},"headbb":{"headbb":{"type":"boundingbox","vertices":[-12.554413,-54.026264,23.48825,-101.27528,231.95355,-109.845566,274.80518,49.916832,181.1228,122.143875,83.208466,133.12569,2.8721924,56.44203]}},"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-love/data/torso.png b/spine-love/data/torso.png deleted file mode 100644 index d5a318e72..000000000 Binary files a/spine-love/data/torso.png and /dev/null differ diff --git a/spine-love/main.lua b/spine-love/main.lua index 8da69e065..e28bee4e7 100644 --- a/spine-love/main.lua +++ b/spine-love/main.lua @@ -31,16 +31,16 @@ local spine = require "spine-love.spine" local json = spine.SkeletonJson.new() -json.scale = 1 +json.scale = 0.6 local skeletonData = json:readSkeletonDataFile("data/spineboy.json") local skeleton = spine.Skeleton.new(skeletonData) function skeleton:createImage (attachment) -- Customize where images are loaded. - return love.graphics.newImage("data/" .. attachment.name .. ".png") + return love.graphics.newImage("data/images/" .. attachment.name .. ".png") end skeleton.x = love.graphics.getWidth() / 2 -skeleton.y = love.graphics.getHeight() / 2 + 150 +skeleton.y = love.graphics.getHeight() / 2 + 250 skeleton.flipX = false skeleton.flipY = false skeleton.debugBones = true -- Omit or set to false to not draw debug lines on top of the images. @@ -50,13 +50,14 @@ skeleton:setToSetupPose() -- AnimationStateData defines crossfade durations between animations. local stateData = spine.AnimationStateData.new(skeletonData) stateData:setMix("walk", "jump", 0.2) -stateData:setMix("jump", "walk", 0.4) +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, "drawOrder") -state:addAnimationByName(0, "jump", false, 0) -state:addAnimationByName(0, "walk", true, 0) +-- state:setAnimationByName(0, "test") +state:setAnimationByName(0, "walk", true) +state:addAnimationByName(0, "jump", true, 3) +state:addAnimationByName(0, "run", true, 0) state.onStart = function (trackIndex) print(trackIndex.." start: "..state:getCurrent(trackIndex).animation.name) diff --git a/spine-love/spine-love/spine.lua b/spine-love/spine-love/spine.lua index b577b609a..894355d0e 100644 --- a/spine-love/spine-love/spine.lua +++ b/spine-love/spine-love/spine.lua @@ -35,11 +35,15 @@ spine.SkeletonJson = require "spine-lua.SkeletonJson" spine.SkeletonData = require "spine-lua.SkeletonData" spine.BoneData = require "spine-lua.BoneData" spine.SlotData = require "spine-lua.SlotData" +spine.IkConstraintData = require "spine-lua.IkConstraintData" spine.Skin = require "spine-lua.Skin" spine.RegionAttachment = require "spine-lua.RegionAttachment" +spine.MeshAttachment = require "spine-lua.MeshAttachment" +spine.SkinnedMeshAttachment = require "spine-lua.SkinnedMeshAttachment" spine.Skeleton = require "spine-lua.Skeleton" spine.Bone = require "spine-lua.Bone" spine.Slot = require "spine-lua.Slot" +spine.IkConstraint = require "spine-lua.IkConstraint" spine.AttachmentType = require "spine-lua.AttachmentType" spine.AttachmentLoader = require "spine-lua.AttachmentLoader" spine.Animation = require "spine-lua.Animation" diff --git a/spine-lua/Animation.lua b/spine-lua/Animation.lua index fc27956e5..be1b701e7 100644 --- a/spine-lua/Animation.lua +++ b/spine-lua/Animation.lua @@ -109,72 +109,89 @@ end Animation.CurveTimeline = {} function Animation.CurveTimeline.new () local LINEAR = 0 - local STEPPED = -1 + local STEPPED = 1 + local BEZIER = 2; local BEZIER_SEGMENTS = 10 + local BEZIER_SIZE = BEZIER_SEGMENTS * 2 - 1 local self = { - curves = {} + curves = {} -- type, x, y, ... } function self:setLinear (frameIndex) - self.curves[frameIndex * 6] = LINEAR + self.curves[frameIndex * BEZIER_SIZE] = LINEAR end function self:setStepped (frameIndex) - self.curves[frameIndex * 6] = STEPPED + self.curves[frameIndex * BEZIER_SIZE] = STEPPED end function self:setCurve (frameIndex, cx1, cy1, cx2, cy2) - local subdiv_step = 1 / BEZIER_SEGMENTS - local subdiv_step2 = subdiv_step * subdiv_step - local subdiv_step3 = subdiv_step2 * subdiv_step - local pre1 = 3 * subdiv_step - local pre2 = 3 * subdiv_step2 - local pre4 = 6 * subdiv_step2 - local pre5 = 6 * subdiv_step3 + local subdiv1 = 1 / BEZIER_SEGMENTS + local subdiv2 = subdiv1 * subdiv1 + local subdiv3 = subdiv2 * subdiv1; + local pre1 = 3 * subdiv1 + local pre2 = 3 * subdiv2 + local pre4 = 6 * subdiv2 + local pre5 = 6 * subdiv3 local tmp1x = -cx1 * 2 + cx2 local tmp1y = -cy1 * 2 + cy2 local tmp2x = (cx1 - cx2) * 3 + 1 local tmp2y = (cy1 - cy2) * 3 + 1 - local i = frameIndex * 6 - local curves = self.curves - curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3 - curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3 - curves[i + 2] = tmp1x * pre4 + tmp2x * pre5 - curves[i + 3] = tmp1y * pre4 + tmp2y * pre5 - curves[i + 4] = tmp2x * pre5 - curves[i + 5] = tmp2y * pre5 - end + local dfx = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv3 + local dfy = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv3 + local ddfx = tmp1x * pre4 + tmp2x * pre5 + local ddfy = tmp1y * pre4 + tmp2y * pre5; + local dddfx = tmp2x * pre5 + local dddfy = tmp2y * pre5 - function self:getCurvePercent (frameIndex, percent) - local curveIndex = frameIndex * 6 + local i = frameIndex * BEZIER_SIZE local curves = self.curves - local dfx = curves[curveIndex] - if not dfx then return percent end -- linear - if dfx == STEPPED then return 0 end - local dfy = curves[curveIndex + 1] - local ddfx = curves[curveIndex + 2] - local ddfy = curves[curveIndex + 3] - local dddfx = curves[curveIndex + 4] - local dddfy = curves[curveIndex + 5] + curves[i] = BEZIER + i = i + 1 + local x = dfx local y = dfy - local i = BEZIER_SEGMENTS - 2 - while true do - if x >= percent then - local lastX = x - dfx - local lastY = y - dfy - return lastY + (y - lastY) * (percent - lastX) / (x - lastX) - end - if i == 0 then break end - i = i - 1 + local n = i + BEZIER_SIZE - 1 + while i < n do + curves[i] = x + curves[i + 1] = y dfx = dfx + ddfx dfy = dfy + ddfy ddfx = ddfx + dddfx ddfy = ddfy + dddfy x = x + dfx y = y + dfy + i = i + 2 end + end + + function self:getCurvePercent (frameIndex, percent) + local curves = self.curves + local i = frameIndex * BEZIER_SIZE + local type = curves[i] + if type == LINEAR then return percent end + if type == STEPPED then return 0 end + i = i + 1 + local x + local n = i + BEZIER_SIZE - 1 + local start = i + while i < n do + x = curves[i] + if x >= percent then + local prevX, prevY + if i == start then + prevX = 0 + prevY = 0 + else + prevX = curves[i - 2] + prevY = curves[i - 1] + end + return prevY + (curves[i + 1] - prevY) * (percent - prevX) / (x - prevX) + end + i = i + 2 + end + local y = curves[i - 1] return y + (1 - y) * (percent - x) / (1 - x) -- Last point is 1,1. end @@ -183,7 +200,7 @@ end Animation.RotateTimeline = {} function Animation.RotateTimeline.new () - local LAST_FRAME_TIME = -2 + local PREV_FRAME_TIME = -2 local FRAME_VALUE = 1 local self = Animation.CurveTimeline.new() @@ -224,20 +241,20 @@ function Animation.RotateTimeline.new () -- Interpolate between the last frame and the current frame. local frameIndex = binarySearch(frames, time, 2) - local lastFrameValue = frames[frameIndex - 1] + local prevFrameValue = frames[frameIndex - 1] local frameTime = frames[frameIndex] - local percent = 1 - (time - frameTime) / (frames[frameIndex + LAST_FRAME_TIME] - frameTime) + local percent = 1 - (time - frameTime) / (frames[frameIndex + PREV_FRAME_TIME] - frameTime) if percent < 0 then percent = 0 elseif percent > 1 then percent = 1 end percent = self:getCurvePercent(frameIndex / 2 - 1, percent) - local amount = frames[frameIndex + FRAME_VALUE] - lastFrameValue + local amount = frames[frameIndex + FRAME_VALUE] - prevFrameValue while amount > 180 do amount = amount - 360 end while amount < -180 do amount = amount + 360 end - amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation + amount = bone.data.rotation + (prevFrameValue + amount * percent) - bone.rotation while amount > 180 do amount = amount - 360 end @@ -252,7 +269,7 @@ end Animation.TranslateTimeline = {} function Animation.TranslateTimeline.new () - local LAST_FRAME_TIME = -3 + local PREV_FRAME_TIME = -3 local FRAME_X = 1 local FRAME_Y = 2 @@ -289,15 +306,15 @@ function Animation.TranslateTimeline.new () -- Interpolate between the last frame and the current frame. local frameIndex = binarySearch(frames, time, 3) - local lastFrameX = frames[frameIndex - 2] - local lastFrameY = frames[frameIndex - 1] + local prevFrameX = frames[frameIndex - 2] + local prevFrameY = frames[frameIndex - 1] local frameTime = frames[frameIndex] - local percent = 1 - (time - frameTime) / (frames[frameIndex + LAST_FRAME_TIME] - frameTime) + local percent = 1 - (time - frameTime) / (frames[frameIndex + PREV_FRAME_TIME] - frameTime) if percent < 0 then percent = 0 elseif percent > 1 then percent = 1 end percent = self:getCurvePercent(frameIndex / 3 - 1, percent) - bone.x = bone.x + (bone.data.x + lastFrameX + (frames[frameIndex + FRAME_X] - lastFrameX) * percent - bone.x) * alpha - bone.y = bone.y + (bone.data.y + lastFrameY + (frames[frameIndex + FRAME_Y] - lastFrameY) * percent - bone.y) * alpha + bone.x = bone.x + (bone.data.x + prevFrameX + (frames[frameIndex + FRAME_X] - prevFrameX) * percent - bone.x) * alpha + bone.y = bone.y + (bone.data.y + prevFrameY + (frames[frameIndex + FRAME_Y] - prevFrameY) * percent - bone.y) * alpha end return self @@ -305,7 +322,7 @@ end Animation.ScaleTimeline = {} function Animation.ScaleTimeline.new () - local LAST_FRAME_TIME = -3 + local PREV_FRAME_TIME = -3 local FRAME_X = 1 local FRAME_Y = 2 @@ -325,15 +342,15 @@ function Animation.ScaleTimeline.new () -- Interpolate between the last frame and the current frame. local frameIndex = binarySearch(frames, time, 3) - local lastFrameX = frames[frameIndex - 2] - local lastFrameY = frames[frameIndex - 1] + local prevFrameX = frames[frameIndex - 2] + local prevFrameY = frames[frameIndex - 1] local frameTime = frames[frameIndex] - local percent = 1 - (time - frameTime) / (frames[frameIndex + LAST_FRAME_TIME] - frameTime) + local percent = 1 - (time - frameTime) / (frames[frameIndex + PREV_FRAME_TIME] - frameTime) if percent < 0 then percent = 0 elseif percent > 1 then percent = 1 end percent = self:getCurvePercent(frameIndex / 3 - 1, percent) - bone.scaleX = bone.scaleX + (bone.data.scaleX * (lastFrameX + (frames[frameIndex + FRAME_X] - lastFrameX) * percent) - bone.scaleX) * alpha - bone.scaleY = bone.scaleY + (bone.data.scaleY * (lastFrameY + (frames[frameIndex + FRAME_Y] - lastFrameY) * percent) - bone.scaleY) * alpha + bone.scaleX = bone.scaleX + (bone.data.scaleX * (prevFrameX + (frames[frameIndex + FRAME_X] - prevFrameX) * percent) - bone.scaleX) * alpha + bone.scaleY = bone.scaleY + (bone.data.scaleY * (prevFrameY + (frames[frameIndex + FRAME_Y] - prevFrameY) * percent) - bone.scaleY) * alpha end return self @@ -341,7 +358,7 @@ end Animation.ColorTimeline = {} function Animation.ColorTimeline.new () - local LAST_FRAME_TIME = -5 + local PREV_FRAME_TIME = -5 local FRAME_R = 1 local FRAME_G = 2 local FRAME_B = 3 @@ -381,19 +398,19 @@ function Animation.ColorTimeline.new () else -- Interpolate between the last frame and the current frame. local frameIndex = binarySearch(frames, time, 5) - local lastFrameR = frames[frameIndex - 4] - local lastFrameG = frames[frameIndex - 3] - local lastFrameB = frames[frameIndex - 2] - local lastFrameA = frames[frameIndex - 1] + local prevFrameR = frames[frameIndex - 4] + local prevFrameG = frames[frameIndex - 3] + local prevFrameB = frames[frameIndex - 2] + local prevFrameA = frames[frameIndex - 1] local frameTime = frames[frameIndex] - local percent = 1 - (time - frameTime) / (frames[frameIndex + LAST_FRAME_TIME] - frameTime) + local percent = 1 - (time - frameTime) / (frames[frameIndex + PREV_FRAME_TIME] - frameTime) if percent < 0 then percent = 0 elseif percent > 255 then percent = 255 end percent = self:getCurvePercent(frameIndex / 5 - 1, percent) - r = lastFrameR + (frames[frameIndex + FRAME_R] - lastFrameR) * percent - g = lastFrameG + (frames[frameIndex + FRAME_G] - lastFrameG) * percent - b = lastFrameB + (frames[frameIndex + FRAME_B] - lastFrameB) * percent - a = lastFrameA + (frames[frameIndex + FRAME_A] - lastFrameA) * percent + r = prevFrameR + (frames[frameIndex + FRAME_R] - prevFrameR) * percent + g = prevFrameG + (frames[frameIndex + FRAME_G] - prevFrameG) * percent + b = prevFrameB + (frames[frameIndex + FRAME_B] - prevFrameB) * percent + a = prevFrameA + (frames[frameIndex + FRAME_A] - prevFrameA) * percent end local slot = skeleton.slots[self.slotIndex] if alpha < 1 then @@ -409,7 +426,7 @@ end Animation.AttachmentTimeline = {} function Animation.AttachmentTimeline.new () local self = { - frames = {}, + frames = {}, -- time, ... attachmentNames = {}, slotName = nil } @@ -429,14 +446,20 @@ function Animation.AttachmentTimeline.new () function self:apply (skeleton, lastTime, time, firedEvents, alpha) local frames = self.frames - if time < frames[0] then return end -- Time is before first frame. + if time < frames[0] then + if lastTime > time then self:apply(skeleton, lastTime, 999999, nil, 0) end + return + elseif lastTime > time then + lastTime = -1 + end local frameIndex - if time >= frames[#frames] then -- Time is after last frame. + if time >= frames[#frames] then frameIndex = #frames else frameIndex = binarySearch1(frames, time) - 1 end + if frames[frameIndex] < lastTime then return end local attachmentName = self.attachmentNames[frameIndex] local slot = skeleton.slotsByName[self.slotName] @@ -561,7 +584,7 @@ end Animation.FfdTimeline = {} function Animation.FfdTimeline.new () local self = Animation.CurveTimeline.new() - self.frames = {} + self.frames = {} -- time, ... self.frameVertices = {} self.slotIndex = -1 @@ -583,17 +606,13 @@ function Animation.FfdTimeline.new () if slot.attachment ~= attachment then return end local frames = self.frames - if time < frames[0] then -- Time is before first frame. - slot.attachmentVerticesCount = 0 - return - end - + if time < frames[0] then return end -- Time is before first frame. + local frameVertices = self.frameVertices local vertexCount = #frameVertices[0] local vertices = slot.attachmentVertices if #vertices < vertexCount then vertices = {} - vertices[vertexCount] = 0 slot.attachmentVertices = vertices elseif #vertices < vertexCount then alpha = 1 -- Don't mix from uninitialized slot vertices. @@ -601,7 +620,7 @@ function Animation.FfdTimeline.new () slot.attachmentVerticesCount = vertexCount if time >= frames[#frames] then -- Time is after last frame. - local lastVertices = frameVertices[#frames.Length] + local lastVertices = frameVertices[#frames] if alpha < 1 then for i = 0, vertexCount do local vertex = vertices[i] @@ -642,6 +661,60 @@ function Animation.FfdTimeline.new () return self end +Animation.IkConstraintTimeline = {} +function Animation.IkConstraintTimeline.new () + local PREV_FRAME_TIME = -3 + local PREV_FRAME_MIX = -2 + local PREV_FRAME_BEND_DIRECTION = -1 + local FRAME_MIX = 1 + + local self = Animation.CurveTimeline.new() + self.frames = {} -- time, mix, bendDirection, ... + self.ikConstraintIndex = -1 + + function self:getDuration () + return self.frames[#self.frames - 2] + end + + function self:getFrameCount () + return (#self.frames + 1) / 3 + end + + function self:setFrame (frameIndex, time, mix, bendDirection) + frameIndex = frameIndex * 3 + self.frames[frameIndex] = time + self.frames[frameIndex + 1] = mix + self.frames[frameIndex + 2] = bendDirection + end + + function self:apply (skeleton, lastTime, time, firedEvents, alpha) + local frames = self.frames + if time < frames[0] then return end -- Time is before first frame. + + local ikConstraint = skeleton.ikConstraints[ikConstraintIndex] + + if time >= frames[#frames - 2] then -- Time is after last frame. + ikConstraint.mix = ikConstraint.mix + (frames[#frames - 1] - ikConstraint.mix) * alpha + ikConstraint.bendDirection = frames[#frames] + return + end + + -- Interpolate between the previous frame and the current frame. + local frameIndex = binarySearch(frames, time, 3); + local prevFrameMix = frames[frameIndex + PREV_FRAME_MIX] + local frameTime = frames[frameIndex] + local percent = 1 - (time - frameTime) / (frames[frameIndex + PREV_FRAME_TIME] - frameTime) + if percent < 0 then percent = 0 elseif percent > 1 then percent = 1 end + percent = self:getCurvePercent(frameIndex / 3 - 1, percent) + + local mix = prevFrameMix + (frames[frameIndex + FRAME_MIX] - prevFrameMix) * percent + ikConstraint.mix = ikConstraint.mix + (mix - ikConstraint.mix) * alpha + ikConstraint.bendDirection = frames[frameIndex + PREV_FRAME_BEND_DIRECTION] + end + + return self +end + Animation.FlipXTimeline = {} function Animation.FlipXTimeline.new () local self = { @@ -666,7 +739,7 @@ function Animation.FlipXTimeline.new () function self:apply (skeleton, lastTime, time, firedEvents, alpha) local frames = self.frames if time < frames[0] then - if lastTime > time then self:apply(skeleton, lastTime, 999999, null, 0) end + if lastTime > time then self:apply(skeleton, lastTime, 999999, nil, 0) end return elseif lastTime > time then lastTime = -1 diff --git a/spine-lua/Bone.lua b/spine-lua/Bone.lua index 55375d3e8..6c1f1555f 100644 --- a/spine-lua/Bone.lua +++ b/spine-lua/Bone.lua @@ -39,7 +39,7 @@ function Bone.new (data, skeleton, parent) skeleton = skeleton, parent = parent, x = 0, y = 0, - rotation = 0, + rotation = 0, rotationIK = 0, scaleX = 1, scaleY = 1, flipX = false, flipY = false, m00 = 0, m01 = 0, worldX = 0, -- a b x @@ -62,9 +62,9 @@ function Bone.new (data, skeleton, parent) self.worldScaleY = self.scaleY end if (self.data.inheritRotation) then - self.worldRotation = parent.worldRotation + self.rotation + self.worldRotation = parent.worldRotation + self.rotationIK else - self.worldRotation = self.rotation + self.worldRotation = self.rotationIK end self.worldFlipX = parent.worldFlipX ~= self.flipX self.worldFlipY = parent.worldFlipY ~= self.flipY @@ -82,7 +82,7 @@ function Bone.new (data, skeleton, parent) end self.worldScaleX = self.scaleX self.worldScaleY = self.scaleY - self.worldRotation = self.rotation + self.worldRotation = self.rotationIK self.worldFlipX = skeletonFlipX ~= self.flipX self.worldFlipY = skeletonFlipY ~= self.flipY end @@ -110,12 +110,36 @@ function Bone.new (data, skeleton, parent) self.x = data.x self.y = data.y self.rotation = data.rotation + self.rotationIK = self.rotation self.scaleX = data.scaleX self.scaleY = data.scaleY self.flipX = data.flipX self.flipY = data.flipY end + function self:worldToLocal (worldCoords) + local dx = worldCoords[1] - self.worldX + local dy = worldCoords[2] - self.worldY + local m00 = self.m00 + local m10 = self.m10 + local m01 = self.m01 + local m11 = self.m11 + if self.worldFlipX ~= self.worldFlipY then + m00 = -m00 + m11 = -m11 + end + local invDet = 1 / (m00 * m11 - m01 * m10) + worldCoords[1] = dx * m00 * invDet - dy * m01 * invDet + worldCoords[2] = dy * m11 * invDet - dx * m10 * invDet + end + + function self:localToWorld (localCoords) + local localX = localCoords[1] + local localY = localCoords[2] + localCoords[1] = localX * self.m00 + localY * self.m01 + self.worldX + localCoords[2] = localX * self.m10 + localY * self.m11 + self.worldY + end + self:setToSetupPose() return self end diff --git a/spine-lua/IkConstraint.lua b/spine-lua/IkConstraint.lua new file mode 100644 index 000000000..7a23187b5 --- /dev/null +++ b/spine-lua/IkConstraint.lua @@ -0,0 +1,150 @@ +------------------------------------------------------------------------------- +-- Spine Runtimes Software License +-- Version 2.1 +-- +-- Copyright (c) 2013, Esoteric Software +-- All rights reserved. +-- +-- You are granted a perpetual, non-exclusive, non-sublicensable and +-- non-transferable license to install, execute and perform the Spine Runtimes +-- Software (the "Software") solely for internal use. Without the written +-- permission of Esoteric Software (typically granted by licensing Spine), 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 SOFTARE 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 IkConstraint = {} +function IkConstraint.new (data, skeleton) + if not data then error("data cannot be nil", 2) end + if not skeleton then error("skeleton cannot be nil", 2) end + + local self = { + data = data, + skeleton = skeleton, + bones = {}, + target = nil, + bendDirection = data.bendDirection, + mix = data.mix + } + + function self:apply () + local target = self.target + local bones = self.bones + local boneCount = #bones + if boneCount == 1 then + IkConstraint.apply1(bones[1], target.worldX, target.worldY, self.mix) + elseif boneCount == 2 then + IkConstraint.apply2(bones[1], bones[2], target.worldX, target.worldY, self.bendDirection, self.mix) + end + end + + for i,boneData in ipairs(data.bones) do + table.insert(self.bones, skeleton:findBone(boneData.name)) + end + self.target = skeleton:findBone(data.target.name) + + return self +end + +local radDeg = 180 / math.pi +local degRad = math.pi / 180 + +function IkConstraint.apply1 (bone, targetX, targetY, alpha) + local parentRotation + if not bone.data.inheritRotation or not bone.parent then + parentRotation = 0 + else + parentRotation = bone.parent.worldRotation + end + local rotation = bone.rotation + local rotationIK = math.atan2(targetY - bone.worldY, targetX - bone.worldX) * radDeg - parentRotation + bone.rotationIK = rotation + (rotationIK - rotation) * alpha +end + +local temp = {} + +function IkConstraint.apply2 (parent, child, targetX, targetY, bendDirection, alpha) + local childRotation = child.rotation + local parentRotation = parent.rotation + if not alpha then + child.rotationIK = childRotation + parent.rotationIK = parentRotation + return + end + local positionX, positionY + local tempPosition = temp + local parentParent = parent.parent + if parentParent then + tempPosition[1] = targetX + tempPosition[2] = targetY + parentParent:worldToLocal(tempPosition) + targetX = (tempPosition[1] - parent.x) * parentParent.worldScaleX + targetY = (tempPosition[2] - parent.y) * parentParent.worldScaleY + else + targetX = targetX - parent.x + targetY = targetY - parent.y + end + if child.parent == parent then + positionX = child.x + positionY = child.y + else + tempPosition[1] = child.x + tempPosition[2] = child.y + child.parent:localToWorld(tempPosition) + parent:worldToLocal(tempPosition) + positionX = tempPosition[1] + positionY = tempPosition[2] + end + local childX = positionX * parent.worldScaleX + local childY = positionY * parent.worldScaleY + local offset = math.atan2(childY, childX) + local len1 = math.sqrt(childX * childX + childY * childY) + local len2 = child.data.length * child.worldScaleX + -- Based on code by Ryan Juckett with permission: Copyright (c) 2008-2009 Ryan Juckett, http://www.ryanjuckett.com/ + local cosDenom = 2 * len1 * len2 + if cosDenom < 0.0001 then + child.rotationIK = childRotation + (math.atan2(targetY, targetX) * radDeg - parentRotation - childRotation) * alpha + return + end + local cos = (targetX * targetX + targetY * targetY - len1 * len1 - len2 * len2) / cosDenom + if cos < -1 then + cos = -1 + elseif cos > 1 then + cos = 1 + end + local childAngle = math.acos(cos) * bendDirection + local adjacent = len1 + len2 * cos + local opposite = len2 * math.sin(childAngle) + local parentAngle = math.atan2(targetY * adjacent - targetX * opposite, targetX * adjacent + targetY * opposite) + local rotation = (parentAngle - offset) * radDeg - parentRotation + if rotation > 180 then + rotation = rotation - 360 + elseif rotation < -180 then + rotation = rotation + 360 + end + parent.rotationIK = parentRotation + rotation * alpha + rotation = (childAngle + offset) * radDeg - childRotation + if rotation > 180 then + rotation = rotation - 360 + elseif rotation < -180 then + rotation = rotation + 360 + end + child.rotationIK = childRotation + (rotation + parent.worldRotation - child.parent.worldRotation) * alpha +end + +return IkConstraint diff --git a/spine-lua/IkConstraintData.lua b/spine-lua/IkConstraintData.lua new file mode 100644 index 000000000..589b67f53 --- /dev/null +++ b/spine-lua/IkConstraintData.lua @@ -0,0 +1,45 @@ +------------------------------------------------------------------------------- +-- Spine Runtimes Software License +-- Version 2.1 +-- +-- Copyright (c) 2013, Esoteric Software +-- All rights reserved. +-- +-- You are granted a perpetual, non-exclusive, non-sublicensable and +-- non-transferable license to install, execute and perform the Spine Runtimes +-- Software (the "Software") solely for internal use. Without the written +-- permission of Esoteric Software (typically granted by licensing Spine), 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 SOFTARE 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 IkConstraintData = {} +function IkConstraintData.new (name) + if not name then error("name cannot be nil", 2) end + + local self = { + name = name, + bones = {}, + target = nil, + bendDirection = 1, + mix = 1 + } + + return self +end +return IkConstraintData diff --git a/spine-lua/Skeleton.lua b/spine-lua/Skeleton.lua index 5d0b166c7..25802854c 100644 --- a/spine-lua/Skeleton.lua +++ b/spine-lua/Skeleton.lua @@ -30,6 +30,7 @@ local Bone = require "spine-lua.Bone" local Slot = require "spine-lua.Slot" +local IkConstraint = require "spine-lua.IkConstraint" local AttachmentLoader = require "spine-lua.AttachmentLoader" local Skeleton = {} @@ -42,16 +43,71 @@ function Skeleton.new (skeletonData) slots = {}, slotsByName = {}, drawOrder = {}, + ikConstraints = {}, r = 1, g = 1, b = 1, a = 1, - x = 0, y = 0, skin = nil, flipX = false, flipY = false, - time = 0 + time = 0, + x = 0, y = 0 } - function self:updateWorldTransform () + -- Caches information about bones and IK constraints. Must be called if bones or IK constraints are added or removed. + function self:updateCache () + self.boneCache = {} + local boneCache = self.boneCache + local ikConstraints = self.ikConstraints + local ikConstraintsCount = #ikConstraints + + local arrayCount = ikConstraintsCount + 1 + while #boneCache < arrayCount do + table.insert(boneCache, {}) + end + + local nonIkBones = boneCache[1] + for i,bone in ipairs(self.bones) do - bone:updateWorldTransform() + local current = bone + local continueOuter + repeat + for ii,ikConstraint in ipairs(ikConstraints) do + local parent = ikConstraint.bones[0] + local child = ikConstraint.bones[#ikConstraint.bones - 1] + while true do + if current == child then + table.insert(boneCache[ii], bone) + table.insert(boneCache[ii + 1], bone) + ii = ikConstraintsCount + continueOuter = true + break + end + if child == parent then break end + child = child.parent + end + end + if continueOuter then break end + current = current.parent + until not current + table.insert(nonIkBones, bone) + end + end + + -- Updates the world transform for each bone and applies IK constraints. + function self:updateWorldTransform () + local bones = self.bones + for i,bone in ipairs(self.bones) do + bone.rotationIK = bone.rotation + end + local boneCache = self.boneCache + local ikConstraints = self.ikConstraints + local i = 1 + local last = #boneCache + while true do + for ii,bone in ipairs(boneCache[i]) do + bone:updateWorldTransform() + end + if i == last then break end + ikConstraints[i]:apply() + i = i + 1 end end @@ -64,6 +120,11 @@ function Skeleton.new (skeletonData) for i,bone in ipairs(self.bones) do bone:setToSetupPose() end + + for i,ikConstraint in ipairs(self.ikConstraints) do + ikConstraint.bendDirection = ikConstraint.data.bendDirection + ikConstraint.mix = ikConstraint.data.mix + end end function self:setSlotsToSetupPose () @@ -176,6 +237,12 @@ function Skeleton.new (skeletonData) table.insert(self.drawOrder, slot) end + for i,ikConstraintData in ipairs(skeletonData.ikConstraints) do + table.insert(self.ikConstraints, IkConstraint.new(ikConstraintData, self)) + end + + self:updateCache() + return self end return Skeleton diff --git a/spine-lua/SkeletonData.lua b/spine-lua/SkeletonData.lua index ddff41548..7ca4010b7 100644 --- a/spine-lua/SkeletonData.lua +++ b/spine-lua/SkeletonData.lua @@ -31,12 +31,15 @@ local SkeletonData = {} function SkeletonData.new () local self = { + version = 0, hash = 0, + width = 0, height = 0, bones = {}, slots = {}, slotNameIndices = {}, skins = {}, events = {}, animations = {}, + ikConstraints = {}, defaultSkin = nil } @@ -93,6 +96,14 @@ function SkeletonData.new () return nil end + function self:findIkConstraint (ikConstraintName) + if not ikConstraintName then error("ikConstraintName cannot be nil.", 2) end + for i,ikConstraint in ipairs(self.ikConstraints) do + if ikConstraint.name == ikConstraintName then return ikConstraint end + end + return nil + end + return self end return SkeletonData diff --git a/spine-lua/SkeletonJson.lua b/spine-lua/SkeletonJson.lua index 327444b24..c3c312507 100755 --- a/spine-lua/SkeletonJson.lua +++ b/spine-lua/SkeletonJson.lua @@ -34,6 +34,8 @@ local SlotData = require "spine-lua.SlotData" local Skin = require "spine-lua.Skin" local AttachmentLoader = require "spine-lua.AttachmentLoader" local Animation = require "spine-lua.Animation" +local IkConstraintData = require "spine-lua.IkConstraintData" +local IkConstraint = require "spine-lua.IkConstraint" local EventData = require "spine-lua.EventData" local Event = require "spine-lua.Event" local AttachmentType = require "spine-lua.AttachmentType" @@ -62,6 +64,15 @@ function SkeletonJson.new (attachmentLoader) local root = spine.utils.readJSON(jsonText) if not root then error("Invalid JSON: " .. jsonText, 2) end + -- Skeleton. + if root["skeleton"] then + local skeletonMap = root["skeleton"] + skeletonData.hash = skeletonMap["hash"] + skeletonData.version = skeletonMap["spine"] + skeletonData.width = skeletonMap["width"] or 0 + skeletonData.height = skeletonMap["height"] or 0 + end + -- Bones. for i,boneMap in ipairs(root["bones"]) do local boneName = boneMap["name"] @@ -101,6 +112,28 @@ function SkeletonJson.new (attachmentLoader) table.insert(skeletonData.bones, boneData) end + -- IK constraints. + if root["ik"] then + for i,ikMap in ipairs(root["ik"]) do + local ikConstraintData = IkConstraintData.new(ikMap["name"]) + + for i,boneName in ipairs(ikMap["bones"]) do + local bone = skeletonData:findBone(boneName) + if not bone then error("IK bone not found: " .. boneName) end + table.insert(ikConstraintData.bones, bone) + end + + local targetName = ikMap["target"] + ikConstraintData.target = skeletonData:findBone(targetName) + if not ikConstraintData.target then error("Target bone not found: " .. targetName) end + + if ikMap["bendPositive"] == false then ikConstraintData.bendDirection = -1 end + if ikMap["mix"] ~= nil then ikConstraintData.mix = ikMap["mix"] end + + table.insert(skeletonData.ikConstraints, ikConstraintData) + end + end + -- Slots. if root["slots"] then for i,slotMap in ipairs(root["slots"]) do @@ -391,7 +424,6 @@ function SkeletonJson.new (attachmentLoader) local frameIndex = 0 for i,valueMap in ipairs(values) do - local flip timeline:setFrame(frameIndex, valueMap["time"], valueMap[field] or false) frameIndex = frameIndex + 1 end @@ -405,6 +437,32 @@ function SkeletonJson.new (attachmentLoader) end end + local ik = map["ik"] + if ik then + for ikConstraintName,values in pairs(ik) do + local ikConstraint = skeletonData.findIkConstraint(ikConstraintName) + local timeline = IkConstraintTimeline.new() + for i,other in pairs(skeletonData.ikConstraints) do + if other == ikConstraint then + timeline.ikConstraintIndex = i + break + end + end + local frameIndex = 0 + for i,valueMap in ipairs(values) do + local mix = 1 + if valueMap["mix"] ~= nil then mix = valueMap["mix"] end + local bendPositive = 1 + if valueMap["bendPositive"] == false then bendPositive = -1 end + timeline:setFrame(frameIndex, valueMap["time"], mix, bendPositive) + readCurve(timeline, frameIndex, valueMap) + frameIndex = frameIndex + 1 + end + table.insert(timelines, timeline) + duration = math.max(duration, timeline:getDuration()) + end + end + local ffd = map["ffd"] if ffd then for skinName,slotMap in pairs(ffd) do @@ -553,8 +611,9 @@ function SkeletonJson.new (attachmentLoader) readCurve = function (timeline, frameIndex, valueMap) local curve = valueMap["curve"] - if not curve then return end - if curve == "stepped" then + if not curve then + timeline:setLinear(frameIndex) + elseif curve == "stepped" then timeline:setStepped(frameIndex) else timeline:setCurve(frameIndex, curve[1], curve[2], curve[3], curve[4])