Ver Fonte

cocos2d-x updated to 3.1alpha0.

No meshes yet.
NathanSweet há 11 anos atrás
pai
commit
5c6ebf2c63
43 ficheiros alterados com 5165 adições e 3099 exclusões
  1. 1 1
      spine-cocos2dx/cocos2dx/Place cocos2dx here.txt
  2. 41 29
      spine-cocos2dx/example/Classes/AppDelegate.cpp
  3. 10 10
      spine-cocos2dx/example/Classes/AppMacros.h
  4. 54 32
      spine-cocos2dx/example/Classes/ExampleLayer.cpp
  5. 34 6
      spine-cocos2dx/example/Classes/ExampleLayer.h
  6. 1081 0
      spine-cocos2dx/example/Resources/common/goblins-ffd.json
  7. 0 499
      spine-cocos2dx/example/Resources/common/goblins.json
  8. 2179 769
      spine-cocos2dx/example/Resources/common/spineboy.json
  9. 180 173
      spine-cocos2dx/example/Resources/ipad-retina/goblins-ffd.atlas
  10. BIN
      spine-cocos2dx/example/Resources/ipad-retina/goblins-ffd.png
  11. 194 0
      spine-cocos2dx/example/Resources/ipad-retina/spineboy.atlas
  12. BIN
      spine-cocos2dx/example/Resources/ipad-retina/spineboy.png
  13. 180 173
      spine-cocos2dx/example/Resources/ipad/goblins-ffd.atlas
  14. BIN
      spine-cocos2dx/example/Resources/ipad/goblins-ffd.png
  15. BIN
      spine-cocos2dx/example/Resources/ipad/goblins.png
  16. 122 94
      spine-cocos2dx/example/Resources/ipad/spineboy.atlas
  17. BIN
      spine-cocos2dx/example/Resources/ipad/spineboy.png
  18. BIN
      spine-cocos2dx/example/Resources/ipadhd/goblins.png
  19. 0 166
      spine-cocos2dx/example/Resources/ipadhd/spineboy.atlas
  20. BIN
      spine-cocos2dx/example/Resources/ipadhd/spineboy.png
  21. 180 173
      spine-cocos2dx/example/Resources/iphone-retina/goblins-ffd.atlas
  22. BIN
      spine-cocos2dx/example/Resources/iphone-retina/goblins-ffd.png
  23. BIN
      spine-cocos2dx/example/Resources/iphone-retina/goblins.png
  24. 122 94
      spine-cocos2dx/example/Resources/iphone-retina/spineboy.atlas
  25. BIN
      spine-cocos2dx/example/Resources/iphone-retina/spineboy.png
  26. 180 173
      spine-cocos2dx/example/Resources/iphone/goblins-ffd.atlas
  27. BIN
      spine-cocos2dx/example/Resources/iphone/goblins-ffd.png
  28. BIN
      spine-cocos2dx/example/Resources/iphone/goblins.png
  29. 122 94
      spine-cocos2dx/example/Resources/iphone/spineboy.atlas
  30. BIN
      spine-cocos2dx/example/Resources/iphone/spineboy.png
  31. BIN
      spine-cocos2dx/example/proj.win32/Debug/spine-c.lib
  32. 6 5
      spine-cocos2dx/example/proj.win32/main.cpp
  33. 0 2
      spine-cocos2dx/example/proj.win32/main.h
  34. 27 6
      spine-cocos2dx/example/proj.win32/spine-cocos2dx.sln
  35. 23 52
      spine-cocos2dx/example/proj.win32/spine-cocos2dx.vcxproj
  36. 14 152
      spine-cocos2dx/example/proj.win32/spine-cocos2dx.vcxproj.filters
  37. 0 304
      spine-cocos2dx/src/spine/CCSkeleton.cpp
  38. 29 29
      spine-cocos2dx/src/spine/SkeletonAnimation.cpp
  39. 18 18
      spine-cocos2dx/src/spine/SkeletonAnimation.h
  40. 318 0
      spine-cocos2dx/src/spine/SkeletonRenderer.cpp
  41. 21 17
      spine-cocos2dx/src/spine/SkeletonRenderer.h
  42. 26 25
      spine-cocos2dx/src/spine/spine-cocos2dx.cpp
  43. 3 3
      spine-cocos2dx/src/spine/spine-cocos2dx.h

+ 1 - 1
spine-cocos2dx/cocos2dx/Place cocos2dx here.txt

@@ -1 +1 @@
-cocos2d-2.1rc0-x-2.1.2 or later.
+cocos2d-x-3.1alpha0 or later.

+ 41 - 29
spine-cocos2dx/example/Classes/AppDelegate.cpp

@@ -1,5 +1,3 @@
-
-
 #include "AppDelegate.h"
 
 #include <vector>
@@ -18,58 +16,72 @@ AppDelegate::~AppDelegate () {
 }
 
 bool AppDelegate::applicationDidFinishLaunching () {
-	CCDirector* director = CCDirector::sharedDirector();
-
-	CCEGLView* view = CCEGLView::sharedOpenGLView();
-	director->setOpenGLView(view);
-	view->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionNoBorder);
+	// initialize director
+	auto director = Director::getInstance();
+	auto glview = director->getOpenGLView();
+
+	// Set the design resolution
+#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
+	// a bug in DirectX 11 level9-x on the device prevents ResolutionPolicy::NO_BORDER from working correctly
+	glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::SHOW_ALL);
+#else
+	glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER);
+#endif
+
+	Size frameSize = glview->getFrameSize();
+	
+	vector<string> searchPath;
 
 	// In this demo, we select resource according to the frame's height.
 	// If the resource size is different from design resolution size, you need to set contentScaleFactor.
 	// We use the ratio of resource's height to the height of design resolution,
 	// this can make sure that the resource's height could fit for the height of design resolution.
-
-	vector<string> searchPath;
-	CCSize frameSize = view->getFrameSize();
 	if (frameSize.height > mediumResource.size.height) {
 		// if the frame's height is larger than the height of medium resource size, select large resource.
 		searchPath.push_back(largeResource.directory);
-
-		director->setContentScaleFactor( //
-				MIN(largeResource.size.height / designResolutionSize.height, //
-				largeResource.size.width / designResolutionSize.width));
+		director->setContentScaleFactor(MIN(largeResource.size.height/designResolutionSize.height, largeResource.size.width/designResolutionSize.width));
 	} else if (frameSize.height > smallResource.size.height) {
 		// if the frame's height is larger than the height of small resource size, select medium resource.
 		searchPath.push_back(mediumResource.directory);
-
-		director->setContentScaleFactor( //
-				MIN(mediumResource.size.height / designResolutionSize.height, //
-				mediumResource.size.width / designResolutionSize.width));
+		director->setContentScaleFactor(MIN(mediumResource.size.height/designResolutionSize.height, mediumResource.size.width/designResolutionSize.width));
 	} else {
 		// if the frame's height is smaller than the height of medium resource size, select small resource.
 		searchPath.push_back(smallResource.directory);
-
-		director->setContentScaleFactor( //
-				MIN(smallResource.size.height / designResolutionSize.height, //
-				smallResource.size.width / designResolutionSize.width));
+		director->setContentScaleFactor(MIN(smallResource.size.height/designResolutionSize.height, smallResource.size.width/designResolutionSize.width));
 	}
-
+	
 	searchPath.push_back("common");
-	CCFileUtils::sharedFileUtils()->setSearchPaths(searchPath);
-
+	 
+	// set searching path
+	FileUtils::getInstance()->setSearchPaths(searchPath);
+	
+	// turn on display FPS
 	director->setDisplayStats(true);
+
+	// set FPS. the default value is 1.0/60 if you don't call this
 	director->setAnimationInterval(1.0 / 60);
-	director->runWithScene(ExampleLayer::scene());
+
+	// create a scene. it's an autorelease object
+	auto scene = ExampleLayer::scene();
+
+	// run
+	director->runWithScene(scene);
 
 	return true;
 }
 
+// This function will be called when the app is inactive. When comes a phone call,it's be invoked too
 void AppDelegate::applicationDidEnterBackground () {
-	CCDirector::sharedDirector()->stopAnimation();
+	Director::getInstance()->stopAnimation();
+
+	// if you use SimpleAudioEngine, it must be paused
 	// SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
 }
 
+// this function will be called when the app is active again
 void AppDelegate::applicationWillEnterForeground () {
-	CCDirector::sharedDirector()->startAnimation();
+	Director::getInstance()->startAnimation();
+
+	// if you use SimpleAudioEngine, it must resume here
 	// SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
-}
+}

+ 10 - 10
spine-cocos2dx/example/Classes/AppMacros.h

@@ -34,28 +34,28 @@
 #define TARGET_DESIGN_RESOLUTION_SIZE  DESIGN_RESOLUTION_960x640
 
 typedef struct tagResource {
-	cocos2d::CCSize size;
+	cocos2d::Size size;
 	char directory[100];
 } Resource;
 
-static Resource smallResource = {cocos2d::CCSizeMake(480, 320), "iphone"};
-static Resource mediumResource = {cocos2d::CCSizeMake(960, 640), "iphone-retina"};
-static Resource largeResource = {cocos2d::CCSizeMake(1024, 768), "iphone"};
-static Resource extralargeResource = {cocos2d::CCSizeMake(2048, 1536), "iphone-retina"};
+static Resource smallResource = {cocos2d::Size(480, 320), "iphone"};
+static Resource mediumResource = {cocos2d::Size(960, 640), "iphone-retina"};
+static Resource largeResource = {cocos2d::Size(1024, 768), "ipad"};
+static Resource extralargeResource = {cocos2d::Size(2048, 1536), "ipad-retina"};
 
 #if (TARGET_DESIGN_RESOLUTION_SIZE == DESIGN_RESOLUTION_480X320)
-static cocos2d::CCSize designResolutionSize = cocos2d::CCSizeMake(480, 320);
+static cocos2d::CCSize designResolutionSize = cocos2d::Size(480, 320);
 #elif (TARGET_DESIGN_RESOLUTION_SIZE == DESIGN_RESOLUTION_960x640)
-static cocos2d::CCSize designResolutionSize = cocos2d::CCSizeMake(960, 640);
+static cocos2d::CCSize designResolutionSize = cocos2d::Size(960, 640);
 #elif (TARGET_DESIGN_RESOLUTION_SIZE == DESIGN_RESOLUTION_1024X768)
-static cocos2d::CCSize designResolutionSize = cocos2d::CCSizeMake(1024, 768);
+static cocos2d::CCSize designResolutionSize = cocos2d::Size(1024, 768);
 #elif (TARGET_DESIGN_RESOLUTION_SIZE == DESIGN_RESOLUTION_2048X1536)
-static cocos2d::CCSize designResolutionSize = cocos2d::CCSizeMake(2048, 1536);
+static cocos2d::CCSize designResolutionSize = cocos2d::Size(2048, 1536);
 #else
 #error unknown target design resolution!
 #endif
 
 // The font size 24 is designed for small resolution, so we should change it to fit for current design resolution
-#define TITLE_FONT_SIZE  (cocos2d::CCEGLView::sharedOpenGLView()->getDesignResolutionSize().width / smallResource.size.width * 24)
+#define TITLE_FONT_SIZE (cocos2d::Director::getInstance()->getOpenGLView()->getDesignResolutionSize().width / smallResource.size.width * 24)
 
 #endif /* _APPMACROS_H_ */

+ 54 - 32
spine-cocos2dx/example/Classes/ExampleLayer.cpp

@@ -1,45 +1,67 @@
-
+/******************************************************************************
+ * 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.
+ *****************************************************************************/
 
 #include "ExampleLayer.h"
 #include <iostream>
 #include <fstream>
 #include <string.h>
 
-using namespace cocos2d;
+USING_NS_CC;
 using namespace spine;
 using namespace std;
 
-CCScene* ExampleLayer::scene () {
-	CCScene *scene = CCScene::create();
+Scene* ExampleLayer::scene () {
+	Scene *scene = Scene::create();
 	scene->addChild(ExampleLayer::create());
 	return scene;
 }
 
 bool ExampleLayer::init () {
-	if (!CCLayerColor::initWithColor(ccc4(128,128,128,255))) return false;
-	
-	skeletonNode = CCSkeletonAnimation::createWithFile("spineboy.json", "spineboy.atlas");
+	if (!LayerColor::initWithColor(Color4B(128, 128, 128, 255))) return false;
+
+	skeletonNode = SkeletonAnimation::createWithFile("spineboy.json", "spineboy.atlas", 0.6f);
 	skeletonNode->setMix("walk", "jump", 0.2f);
-	skeletonNode->setMix("jump", "walk", 0.4f);
-	
+	skeletonNode->setMix("jump", "run", 0.2f);
 	skeletonNode->setAnimationListener(this, animationStateEvent_selector(ExampleLayer::animationStateEvent));
-	skeletonNode->setAnimation(0, "walk", false);
-	skeletonNode->addAnimation(0, "jump", false);
-	skeletonNode->addAnimation(0, "walk", true);
-	skeletonNode->addAnimation(0, "jump", true, 4);
-	// skeletonNode->addAnimation(1, "drawOrder", true);
-
 	// skeletonNode->timeScale = 0.3f;
 	skeletonNode->debugBones = true;
-	skeletonNode->update(0);
 
-	skeletonNode->runAction(CCRepeatForever::create(CCSequence::create(CCFadeOut::create(1),
-		CCFadeIn::create(1),
-		CCDelayTime::create(5),
-		NULL)));
+	skeletonNode->setAnimation(0, "walk", true);
+	skeletonNode->addAnimation(0, "jump", false, 3);
+	skeletonNode->addAnimation(0, "run", true);
+
+	// skeletonNode->addAnimation(1, "test", true);
+	// skeletonNode->runAction(RepeatForever::create(Sequence::create(FadeOut::create(1), FadeIn::create(1), DelayTime::create(5), NULL)));
 
-	CCSize windowSize = CCDirector::sharedDirector()->getWinSize();
-	skeletonNode->setPosition(ccp(windowSize.width / 2, 20));
+	Size windowSize = Director::getInstance()->getWinSize();
+	skeletonNode->setPosition(Vector2(windowSize.width / 2, 20));
 	addChild(skeletonNode);
 
 	scheduleUpdate();
@@ -49,25 +71,25 @@ bool ExampleLayer::init () {
 
 void ExampleLayer::update (float deltaTime) {
 	// Test releasing memory.
-	// CCDirector::sharedDirector()->replaceScene(ExampleLayer::scene());
+	// Director::getInstance()->replaceScene(ExampleLayer::scene());
 }
 
-void ExampleLayer::animationStateEvent (CCSkeletonAnimation* node, int trackIndex, spEventType type, spEvent* event, int loopCount) {
+void ExampleLayer::animationStateEvent (SkeletonAnimation* node, int trackIndex, spEventType type, spEvent* event, int loopCount) {
 	spTrackEntry* entry = spAnimationState_getCurrent(node->state, trackIndex);
 	const char* animationName = (entry && entry->animation) ? entry->animation->name : 0;
 
 	switch (type) {
-	case ANIMATION_START:
-		CCLog("%d start: %s", trackIndex, animationName);
+	case SP_ANIMATION_START:
+		log("%d start: %s", trackIndex, animationName);
 		break;
-	case ANIMATION_END:
-		CCLog("%d end: %s", trackIndex, animationName);
+	case SP_ANIMATION_END:
+		log("%d end: %s", trackIndex, animationName);
 		break;
-	case ANIMATION_COMPLETE:
-		CCLog("%d complete: %s, %d", trackIndex, animationName, loopCount);
+	case SP_ANIMATION_COMPLETE:
+		log("%d complete: %s, %d", trackIndex, animationName, loopCount);
 		break;
-	case ANIMATION_EVENT:
-		CCLog("%d event: %s, %s: %d, %f, %s", trackIndex, animationName, event->data->name, event->intValue, event->floatValue, event->stringValue);
+	case SP_ANIMATION_EVENT:
+		log("%d event: %s, %s: %d, %f, %s", trackIndex, animationName, event->data->name, event->intValue, event->floatValue, event->stringValue);
 		break;
 	}
 	fflush(stdout);

+ 34 - 6
spine-cocos2dx/example/Classes/ExampleLayer.h

@@ -1,4 +1,32 @@
-
+/******************************************************************************
+ * 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.
+ *****************************************************************************/
 
 #ifndef _EXAMPLELAYER_H_
 #define _EXAMPLELAYER_H_
@@ -6,18 +34,18 @@
 #include "cocos2d.h"
 #include <spine/spine-cocos2dx.h>
 
-class ExampleLayer: public cocos2d::CCLayerColor {
+class ExampleLayer: public cocos2d::LayerColor {
 public:
-	static cocos2d::CCScene* scene ();
+	static cocos2d::Scene* scene ();
 
 	virtual bool init ();
 	virtual void update (float deltaTime);
 
 	CREATE_FUNC (ExampleLayer);
 private:
-	spine::CCSkeletonAnimation* skeletonNode;
-	
-	void animationStateEvent (spine::CCSkeletonAnimation* node, int trackIndex, spEventType type, spEvent* event, int loopCount);
+	spine::SkeletonAnimation* skeletonNode;
+
+	void animationStateEvent (spine::SkeletonAnimation* node, int trackIndex, spEventType type, spEvent* event, int loopCount);
 };
 
 #endif // _EXAMPLELAYER_H_

+ 1081 - 0
spine-cocos2dx/example/Resources/common/goblins-ffd.json

@@ -0,0 +1,1081 @@
+{
+"bones": [
+	{ "name": "root" },
+	{ "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 },
+	{ "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 },
+	{ "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 },
+	{ "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 },
+	{ "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 },
+	{ "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 },
+	{ "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 },
+	{ "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 },
+	{ "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 },
+	{ "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 },
+	{ "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 },
+	{ "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 },
+	{ "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 },
+	{ "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 },
+	{ "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 },
+	{ "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 },
+	{ "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 },
+	{ "name": "spear1", "parent": "left hand", "length": 65.06, "x": 0.48, "y": 17.03, "rotation": 102.43 },
+	{ "name": "spear2", "parent": "spear1", "length": 61.41, "x": 65.05, "y": 0.04, "rotation": 0.9 },
+	{ "name": "spear3", "parent": "spear2", "length": 76.79, "x": 61.88, "y": 0.57, "rotation": -0.9 }
+],
+"slots": [
+	{ "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" },
+	{ "name": "left arm", "bone": "left arm", "attachment": "left arm" },
+	{ "name": "left hand item", "bone": "left hand", "attachment": "spear" },
+	{ "name": "left hand", "bone": "left hand", "attachment": "left hand" },
+	{ "name": "left foot", "bone": "left foot", "attachment": "left foot" },
+	{ "name": "left lower leg", "bone": "left lower leg", "attachment": "left lower leg" },
+	{ "name": "left upper leg", "bone": "left upper leg", "attachment": "left upper leg" },
+	{ "name": "neck", "bone": "neck", "attachment": "neck" },
+	{ "name": "torso", "bone": "torso", "attachment": "torso" },
+	{ "name": "pelvis", "bone": "pelvis", "attachment": "pelvis" },
+	{ "name": "right foot", "bone": "right foot", "attachment": "right foot" },
+	{ "name": "right lower leg", "bone": "right lower leg", "attachment": "right lower leg" },
+	{ "name": "undie straps", "bone": "pelvis", "attachment": "undie straps" },
+	{ "name": "undies", "bone": "pelvis", "attachment": "undies" },
+	{ "name": "right upper leg", "bone": "right upper leg", "attachment": "right upper leg" },
+	{ "name": "head", "bone": "head", "attachment": "head" },
+	{ "name": "eyes", "bone": "head" },
+	{ "name": "right shoulder", "bone": "right shoulder", "attachment": "right shoulder" },
+	{ "name": "right arm", "bone": "right arm", "attachment": "right arm" },
+	{ "name": "right hand thumb", "bone": "right hand", "attachment": "right hand thumb" },
+	{ "name": "right hand item", "bone": "right hand", "attachment": "dagger" },
+	{ "name": "right hand", "bone": "right hand", "attachment": "right hand" },
+	{ "name": "right hand item 2", "bone": "right hand", "attachment": "shield" }
+],
+"skins": {
+	"default": {
+		"left hand item": {
+			"dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 },
+			"spear": {
+				"type": "skinnedmesh",
+				"uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.76608, 0.21781, 0.75642, 0.386, 0.74723, 0.54607, 0.72117, 1, 0.28838, 1, 0.24208, 0.54327, 0.22589, 0.38361, 0.2089, 0.21605, 0.20043, 0.13242, 0, 0.11519, 0.4527, 0, 0.58399, 0 ],
+				"triangles": [ 5, 6, 4, 6, 7, 4, 4, 7, 3, 2, 9, 1, 9, 10, 1, 10, 12, 1, 12, 13, 1, 1, 13, 0, 10, 11, 12, 3, 8, 2, 8, 9, 2, 7, 8, 3 ],
+				"vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.51, 20, -0.31, -6.16, 0.48, 2, 18, 64.73, -5.03, 0.5, 19, -0.4, -5.06, 0.49, 1, 16, 4.56, 23.91, 1, 1, 16, 41.7, -138.95, 1, 1, 16, 32.42, -141.1, 1, 1, 16, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.5, 19, 0.53, 6.59, 0.49, 2, 19, 62.18, 6.66, 0.51, 20, 0.2, 6.09, 0.48, 1, 20, 30.96, 6.61, 1, 1, 20, 37.26, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ],
+				"edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ],
+				"hull": 14,
+				"width": 22,
+				"height": 368
+			}
+		},
+		"right hand item": {
+			"dagger": {
+				"type": "mesh",
+				"uvs": [ 0.78091, 0.38453, 1, 0.38405, 1, 0.44881, 0.73953, 0.4687, 0.74641, 0.81344, 0.34022, 1, 0.15434, 1, 0.11303, 0.78858, 0.23007, 0.47367, 0, 0.45047, 0, 0.38621, 0.22367, 0.38573, 0.24384, 0, 1, 0 ],
+				"triangles": [ 0, 12, 13, 11, 12, 0, 0, 1, 2, 9, 10, 11, 3, 11, 0, 3, 0, 2, 8, 11, 3, 9, 11, 8, 5, 6, 7, 4, 5, 8, 4, 8, 3, 5, 7, 8 ],
+				"vertices": [ 15.49, -12.82, 21.13, -13.57, 20.16, -20.49, 13.15, -21.67, 8.13, -58.56, -5.13, -77.04, -9.92, -76.36, -7.79, -53.6, -0.03, -20.36, -5.6, -17.04, -4.63, -10.17, 1.12, -10.93, 7.46, 30.24, 26.93, 27.49 ],
+				"edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ],
+				"hull": 14,
+				"width": 26,
+				"height": 108
+			}
+		},
+		"right hand item 2": {
+			"shield": { "rotation": 93.49, "width": 70, "height": 72 }
+		}
+	},
+	"goblin": {
+		"eyes": {
+			"eyes closed": { "name": "goblin/eyes-closed", "x": 29.19, "y": -24.89, "rotation": -88.92, "width": 34, "height": 12 }
+		},
+		"head": {
+			"head": {
+				"name": "goblin/head",
+				"type": "mesh",
+				"uvs": [ 0, 0.60494, 0.14172, 0.5145, 0.24218, 0.55229, 0.32667, 0.67806, 0.37969, 0.79352, 0.53505, 0.93014, 0.86056, 1, 0.94071, 0.94169, 0.92098, 0.69923, 0.9888, 0.65497, 0.99003, 0.51643, 0.89632, 0.43561, 0.94487, 0.41916, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80754, 0.16044, 0.66698, 0.01997, 0.4734, 0.01805, 0.29215, 0.19893, 0.25392, 0.31823, 0.09117, 0.324, 0, 0.44331, 0.43271, 0.69153, 0.466, 0.47794, 0.35996, 0.31246, 0.73473, 0.68593, 0.72215, 0.57425, 0.88179, 0.5583, 0.80267, 0.51015 ],
+				"triangles": [ 26, 20, 19, 21, 20, 26, 15, 14, 13, 12, 15, 13, 11, 16, 15, 11, 15, 12, 26, 17, 25, 18, 26, 19, 17, 26, 18, 30, 25, 17, 30, 17, 16, 30, 16, 11, 1, 22, 21, 23, 22, 1, 2, 1, 21, 2, 21, 26, 29, 30, 11, 29, 11, 10, 28, 25, 30, 0, 23, 1, 9, 29, 10, 25, 3, 2, 25, 2, 26, 29, 27, 28, 29, 28, 30, 24, 3, 25, 24, 25, 28, 24, 28, 27, 8, 29, 9, 27, 29, 8, 4, 3, 24, 5, 24, 27, 4, 24, 5, 7, 6, 27, 7, 27, 8, 5, 27, 6 ],
+				"vertices": [ 14.56, 50.42, 23.12, 35.47, 17.46, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.6, 23.41, 35.89, 40.17, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.8, -24.31, 17.2, -40.65, 20.68, -33.02 ],
+				"edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ],
+				"hull": 24,
+				"width": 103,
+				"height": 66
+			}
+		},
+		"left arm": {
+			"left arm": {
+				"name": "goblin/left-arm",
+				"type": "mesh",
+				"uvs": [ 0.68992, 0.29284, 1, 0.46364, 1, 0.74643, 0.84089, 1, 0.66344, 1, 0.33765, 0.64284, 0, 0.44124, 0, 0, 0.34295, 0 ],
+				"triangles": [ 6, 7, 8, 5, 6, 8, 0, 5, 8, 0, 1, 2, 5, 0, 2, 4, 5, 2, 3, 4, 2 ],
+				"vertices": [ 18.6, 8.81, 32.19, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ],
+				"edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ],
+				"hull": 9,
+				"width": 37,
+				"height": 35
+			}
+		},
+		"left foot": {
+			"left foot": {
+				"name": "goblin/left-foot",
+				"type": "mesh",
+				"uvs": [ 0.15733, 0.31873, 0.08195, 0.78502, 0.15884, 0.99366, 0.41633, 0.96804, 0.68822, 0.97636, 1, 0.96388, 0.99385, 0.73501, 0.85294, 0.51862, 0.61479, 0.31056, 0.46991, 0, 0.48032, 0.75604, 0.75994, 0.77706 ],
+				"triangles": [ 0, 9, 8, 10, 0, 8, 10, 8, 7, 11, 10, 7, 11, 7, 6, 1, 0, 10, 11, 6, 5, 3, 1, 10, 4, 10, 11, 4, 11, 5, 3, 10, 4, 2, 1, 3 ],
+				"vertices": [ 2.28, 13.07, -1.76, -1.64, 3.59, -7.8, 20.25, -6.04, 37.91, -5.27, 58.12, -3.71, 57.31, 3.34, 47.78, 9.51, 31.95, 15.05, 21.99, 24.11, 24.03, 0.75, 42.21, 1.16 ],
+				"edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ],
+				"hull": 10,
+				"width": 65,
+				"height": 31
+			}
+		},
+		"left hand": {
+			"left hand": {
+				"name": "goblin/left-hand",
+				"type": "mesh",
+				"uvs": [ 0.518, 0.12578, 1, 0.16285, 0.99788, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42792, 0.17601, 0, 0.43567, 0 ],
+				"triangles": [ 2, 0, 1, 0, 5, 6, 6, 7, 0, 0, 7, 8, 3, 4, 0, 4, 5, 0, 2, 3, 0 ],
+				"vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.48, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ],
+				"edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ],
+				"hull": 9,
+				"width": 36,
+				"height": 41
+			}
+		},
+		"left lower leg": {
+			"left lower leg": {
+				"name": "goblin/left-lower-leg",
+				"type": "mesh",
+				"uvs": [ 0.95508, 0.20749, 0.81927, 0.65213, 0.94754, 0.77308, 0.67842, 0.97346, 0.46463, 1, 0.26845, 1, 0.04963, 0.90706, 0.2106, 0.60115, 0.07478, 0.40195, 0.18545, 0, 0.28857, 0 ],
+				"triangles": [ 10, 8, 9, 1, 7, 10, 7, 8, 10, 0, 1, 10, 1, 4, 7, 3, 1, 2, 5, 6, 7, 7, 4, 5, 1, 3, 4 ],
+				"vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.19, -18.29 ],
+				"edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ],
+				"hull": 11,
+				"width": 33,
+				"height": 70
+			}
+		},
+		"left shoulder": {
+			"left shoulder": {
+				"name": "goblin/left-shoulder",
+				"type": "mesh",
+				"uvs": [ 0.7377, 0.40692, 1, 0.75237, 1, 1, 0.62046, 1, 0.26184, 0.56601, 0, 0.29783, 0, 0, 0.44115, 0 ],
+				"triangles": [ 5, 6, 7, 4, 5, 7, 4, 7, 0, 3, 4, 0, 3, 0, 1, 3, 1, 2 ],
+				"vertices": [ 15.18, 5.74, 32.17, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.74, -4.66, 6.54 ],
+				"edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ],
+				"hull": 8,
+				"width": 29,
+				"height": 44
+			}
+		},
+		"left upper leg": {
+			"left upper leg": {
+				"name": "goblin/left-upper-leg",
+				"type": "mesh",
+				"uvs": [ 1, 0.12167, 1, 0.54873, 0.91067, 0.78907, 0.76567, 1, 0.3087, 0.9579, 0, 0.68777, 0, 0.219, 0.51961, 0, 0.87552, 0 ],
+				"triangles": [ 7, 8, 0, 5, 6, 7, 0, 1, 7, 4, 5, 7, 1, 4, 7, 2, 4, 1, 3, 4, 2 ],
+				"vertices": [ 2.33, 13.06, 33.5, 12.57, 51, 9.34, 66.32, 4.31, 63, -10.71, 43.13, -20.58, 8.91, -20.04, -6.79, -2.64, -6.61, 9.1 ],
+				"edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ],
+				"hull": 9,
+				"width": 33,
+				"height": 73
+			}
+		},
+		"neck": {
+			"neck": {
+				"name": "goblin/neck",
+				"type": "mesh",
+				"uvs": [ 0.81967, 0.27365, 0.92101, 0.82048, 0.47134, 1, 0.15679, 0.9354, 0, 0.7556, 0.19268, 0.51833, 0.15468, 0.35706, 0, 0.21989, 0.13568, 0, 0.68878, 0, 0.70145, 0.53872 ],
+				"triangles": [ 6, 8, 9, 6, 9, 0, 7, 8, 6, 10, 5, 6, 0, 10, 6, 10, 0, 1, 3, 4, 5, 2, 5, 10, 2, 10, 1, 3, 5, 2 ],
+				"vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.05, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ],
+				"edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ],
+				"hull": 10,
+				"width": 36,
+				"height": 41
+			}
+		},
+		"pelvis": {
+			"pelvis": {
+				"name": "goblin/pelvis",
+				"type": "mesh",
+				"uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ],
+				"triangles": [ 1, 2, 3, 1, 3, 0 ],
+				"vertices": [ 25.38, -20.73, -36.61, -20.73, -36.61, 22.26, 25.38, 22.26 ],
+				"edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ],
+				"hull": 4,
+				"width": 62,
+				"height": 43
+			}
+		},
+		"right arm": {
+			"right arm": {
+				"name": "goblin/right-arm",
+				"type": "mesh",
+				"uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24384, 1, 0, 0.86558, 0.20822, 0.10919, 0.50903, 0, 0.85342, 0 ],
+				"triangles": [ 6, 7, 0, 2, 3, 5, 4, 5, 3, 1, 6, 0, 6, 2, 5, 1, 2, 6 ],
+				"vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.18 ],
+				"edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ],
+				"hull": 8,
+				"width": 23,
+				"height": 50
+			}
+		},
+		"right foot": {
+			"right foot": {
+				"name": "goblin/right-foot",
+				"type": "mesh",
+				"uvs": [ 0.40851, 0.0047, 0.59087, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97532, 0.89391, 0.90385, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65984, 0, 0.46577, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71257, 0.715, 0.74681 ],
+				"triangles": [ 1, 10, 11, 1, 13, 0, 14, 1, 2, 1, 12, 13, 12, 1, 11, 14, 10, 1, 15, 14, 2, 15, 2, 3, 9, 10, 14, 15, 3, 4, 7, 8, 9, 14, 7, 9, 6, 14, 15, 5, 6, 15, 7, 14, 6, 4, 5, 15 ],
+				"vertices": [ 17.36, 25.99, 29.13, 15.44, 39.89, 10.8, 48.14, 7.24, 53.84, -2.38, 49.43, -6, 34.84, -6.39, 16.84, -6.87, -2.4, -7.38, -7.58, -3.86, -7.78, 3.7, -7.95, 10.1, -2.57, 22.36, 10.84, 25.97, 22.14, 2.75, 37.31, 2.03 ],
+				"edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ],
+				"hull": 14,
+				"width": 63,
+				"height": 33
+			}
+		},
+		"right hand": {
+			"right hand": {
+				"name": "goblin/right-hand",
+				"type": "mesh",
+				"uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89823, 0.82004, 0.8259, 0.74285, 0.84223, 0.49993, 0.96356, 0.34102, 0.66023, 0 ],
+				"triangles": [ 8, 10, 9, 0, 10, 1, 8, 2, 1, 8, 1, 10, 7, 3, 8, 3, 2, 8, 4, 3, 7, 5, 7, 6, 4, 7, 5 ],
+				"vertices": [ -10.82, -9.45, 5.95, -15.34, 18.88, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ],
+				"edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ],
+				"hull": 11,
+				"width": 36,
+				"height": 37
+			}
+		},
+		"right hand thumb": {
+			"right hand thumb": {
+				"name": "goblin/right-hand",
+				"type": "mesh",
+				"uvs": [ 0.88538, 0.22262, 0.76167, 0.3594, 0.75088, 0.78308, 0.95326, 0.84981, 1, 0.60302 ],
+				"triangles": [ 1, 0, 4, 2, 1, 4, 3, 2, 4 ],
+				"vertices": [ -2.82, 15.97, 2.4, 11.71, 18.08, 11.9, 20.27, 19.27, 11.09, 20.62 ],
+				"edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ],
+				"hull": 5,
+				"width": 36,
+				"height": 37
+			}
+		},
+		"right lower leg": {
+			"right lower leg": {
+				"name": "goblin/right-lower-leg",
+				"type": "mesh",
+				"uvs": [ 1, 0.27261, 0.81312, 0.52592, 0.79587, 0.71795, 0.95544, 0.80988, 0.85193, 0.95493, 0.47241, 1, 0.14033, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30325, 0.60611, 0 ],
+				"triangles": [ 1, 10, 0, 9, 10, 1, 8, 9, 1, 2, 8, 1, 4, 2, 3, 6, 7, 8, 5, 6, 8, 2, 5, 8, 4, 5, 2 ],
+				"vertices": [ 6.26, 8.46, 23.32, 8.04, 37.1, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.77, -1.03, 58.99, -9.19, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ],
+				"edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ],
+				"hull": 11,
+				"width": 36,
+				"height": 76
+			}
+		},
+		"right shoulder": {
+			"right shoulder": {
+				"name": "goblin/right-shoulder",
+				"type": "mesh",
+				"uvs": [ 0.62008, 0.03708, 0.92131, 0.09048, 1, 0.38319, 0.72049, 0.6937, 0.31656, 1, 0, 1, 0, 0.75106, 0.28233, 0.49988 ],
+				"triangles": [ 2, 3, 0, 2, 0, 1, 7, 0, 3, 4, 5, 6, 4, 7, 3, 4, 6, 7 ],
+				"vertices": [ -3.17, -11.05, -9, -0.57, -1.01, 10.33, 16.69, 11.17, 37.41, 8.2, 45.45, -1.16, 36.95, -8.46, 21.2, -7.47 ],
+				"edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ],
+				"hull": 8,
+				"width": 39,
+				"height": 45
+			}
+		},
+		"right upper leg": {
+			"right upper leg": {
+				"name": "goblin/right-upper-leg",
+				"type": "mesh",
+				"uvs": [ 0.27018, 0, 0.11618, 0.18177, 0, 0.70688, 0, 0.89577, 0.26668, 1, 0.48718, 1, 0.67618, 0.83532, 1, 0.5161, 1, 0.25543, 0.74618, 0.0571 ],
+				"triangles": [ 9, 8, 7, 9, 1, 0, 6, 9, 7, 6, 1, 9, 2, 1, 6, 4, 3, 2, 6, 4, 2, 5, 4, 6 ],
+				"vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.51, 10.18, 19.13, 18.47, 2.85, 16.32, -8.4, 6.14 ],
+				"edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ],
+				"hull": 10,
+				"width": 34,
+				"height": 63
+			}
+		},
+		"torso": {
+			"torso": {
+				"name": "goblin/torso",
+				"type": "mesh",
+				"uvs": [ 0, 0.33287, 0.15945, 0.46488, 0.15761, 0.60314, 0.15502, 0.79806, 0.32807, 0.93478, 0.6875, 1, 0.80731, 1, 1, 0.77763, 1, 0.66147, 1, 0.56703, 0.93207, 0.4771, 0.86944, 0.39416, 0.83837, 0.226, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78734, 0.86249, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38316, 0.77692, 0.73446, 0.66478, 0.51012 ],
+				"triangles": [ 0, 15, 14, 20, 14, 13, 20, 13, 12, 1, 0, 14, 20, 12, 11, 20, 1, 14, 22, 20, 11, 22, 11, 10, 19, 1, 20, 19, 20, 22, 2, 1, 19, 18, 22, 10, 18, 10, 9, 19, 22, 18, 18, 9, 8, 21, 18, 8, 21, 8, 7, 17, 2, 19, 21, 17, 19, 21, 19, 18, 3, 2, 17, 16, 21, 7, 17, 21, 16, 4, 3, 17, 5, 17, 16, 4, 17, 5, 6, 16, 7, 5, 16, 6 ],
+				"vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.88, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ],
+				"edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ],
+				"hull": 16,
+				"width": 68,
+				"height": 96
+			}
+		},
+		"undie straps": {
+			"undie straps": {
+				"name": "goblin/undie-straps",
+				"type": "mesh",
+				"uvs": [ 0.36097, 0.44959, 0.66297, 0.60591, 1, 0.19486, 1, 0.57117, 0.75897, 1, 0.38697, 1, 0, 0.26433, 0, 0, 0.12497, 0 ],
+				"triangles": [ 6, 7, 8, 6, 8, 0, 3, 1, 2, 5, 0, 1, 6, 0, 5, 4, 1, 3, 5, 1, 4 ],
+				"vertices": [ -10.56, 12.87, 6.53, 9.9, 25.62, 17.71, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ],
+				"edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ],
+				"hull": 9,
+				"width": 55,
+				"height": 19
+			}
+		},
+		"undies": {
+			"undies": {
+				"name": "goblin/undies",
+				"type": "mesh",
+				"uvs": [ 0, 0.32029, 0.14893, 0.59457, 0.22437, 1, 0.35909, 1, 0.50998, 1, 0.79559, 0.58453, 0.9842, 0.28015, 1, 0.00588, 0.46957, 0.17646, 0, 0.03933, 0.48843, 0.59122, 0.48114, 0.43099 ],
+				"triangles": [ 6, 8, 7, 0, 9, 8, 11, 8, 6, 0, 8, 11, 5, 11, 6, 10, 11, 5, 1, 0, 11, 1, 11, 10, 3, 2, 1, 10, 3, 1, 4, 10, 5, 3, 10, 4 ],
+				"vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.59, 22.22, 6.11, 22.92, 14.05, 3.75, 9.44, -13.08, 13.71, 4.21, -2.59, 4.03, 2.05 ],
+				"edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ],
+				"hull": 10,
+				"width": 36,
+				"height": 29
+			}
+		}
+	},
+	"goblingirl": {
+		"eyes": {
+			"eyes closed": { "name": "goblingirl/eyes-closed", "x": 28, "y": -25.54, "rotation": -87.04, "width": 37, "height": 21 }
+		},
+		"head": {
+			"head": { "name": "goblingirl/head", "x": 27.71, "y": -4.32, "rotation": -85.58, "width": 103, "height": 81 }
+		},
+		"left arm": {
+			"left arm": { "name": "goblingirl/left-arm", "x": 19.64, "y": -2.42, "rotation": 33.05, "width": 37, "height": 35 }
+		},
+		"left foot": {
+			"left foot": { "name": "goblingirl/left-foot", "x": 25.17, "y": 7.92, "rotation": 3.32, "width": 65, "height": 31 }
+		},
+		"left hand": {
+			"left hand": {
+				"name": "goblingirl/left-hand",
+				"x": 4.34,
+				"y": 2.39,
+				"scaleX": 0.896,
+				"scaleY": 0.896,
+				"rotation": 30.34,
+				"width": 35,
+				"height": 40
+			}
+		},
+		"left lower leg": {
+			"left lower leg": { "name": "goblingirl/left-lower-leg", "x": 25.02, "y": -0.6, "rotation": 105.75, "width": 33, "height": 70 }
+		},
+		"left shoulder": {
+			"left shoulder": { "name": "goblingirl/left-shoulder", "x": 19.8, "y": -0.42, "rotation": 61.21, "width": 28, "height": 46 }
+		},
+		"left upper leg": {
+			"left upper leg": { "name": "goblingirl/left-upper-leg", "x": 30.21, "y": -2.95, "rotation": 89.09, "width": 33, "height": 70 }
+		},
+		"neck": {
+			"neck": { "name": "goblingirl/neck", "x": 6.16, "y": -3.14, "rotation": -98.86, "width": 35, "height": 41 }
+		},
+		"pelvis": {
+			"pelvis": { "name": "goblingirl/pelvis", "x": -3.87, "y": 3.18, "width": 62, "height": 43 }
+		},
+		"right arm": {
+			"right arm": { "name": "goblingirl/right-arm", "x": 16.85, "y": -0.66, "rotation": 93.52, "width": 28, "height": 50 }
+		},
+		"right foot": {
+			"right foot": { "name": "goblingirl/right-foot", "x": 23.46, "y": 9.66, "rotation": 1.52, "width": 63, "height": 33 }
+		},
+		"right hand": {
+			"right hand": { "name": "goblingirl/right-hand", "x": 7.21, "y": 3.43, "rotation": 91.16, "width": 36, "height": 37 }
+		},
+		"right hand thumb": {
+			"right hand thumb": { "name": "goblingirl/right-hand", "x": 7.21, "y": 3.43, "rotation": 91.16, "width": 36, "height": 37 }
+		},
+		"right lower leg": {
+			"right lower leg": { "name": "goblingirl/right-lower-leg", "x": 26.15, "y": -3.27, "rotation": 111.83, "width": 36, "height": 76 }
+		},
+		"right shoulder": {
+			"right shoulder": { "name": "goblingirl/right-shoulder", "x": 14.46, "y": 0.45, "rotation": 129.85, "width": 39, "height": 45 }
+		},
+		"right upper leg": {
+			"right upper leg": { "name": "goblingirl/right-upper-leg", "x": 19.69, "y": 2.13, "rotation": 97.49, "width": 34, "height": 63 }
+		},
+		"torso": {
+			"torso": { "name": "goblingirl/torso", "x": 36.28, "y": -5.14, "rotation": -95.74, "width": 68, "height": 96 }
+		},
+		"undie straps": {
+			"undie straps": { "name": "goblingirl/undie-straps", "x": -1.51, "y": 14.18, "width": 55, "height": 19 }
+		},
+		"undies": {
+			"undies": { "name": "goblingirl/undies", "x": 5.4, "y": 1.7, "width": 36, "height": 29 }
+		}
+	}
+},
+"animations": {
+	"walk": {
+		"slots": {
+			"eyes": {
+				"attachment": [
+					{ "time": 0.7, "name": "eyes closed" },
+					{ "time": 0.8, "name": null }
+				]
+			}
+		},
+		"bones": {
+			"left upper leg": {
+				"rotate": [
+					{ "time": 0, "angle": -26.55 },
+					{ "time": 0.1333, "angle": -8.78 },
+					{ "time": 0.2333, "angle": 9.51 },
+					{ "time": 0.3666, "angle": 30.74 },
+					{ "time": 0.5, "angle": 25.33 },
+					{ "time": 0.6333, "angle": 26.11 },
+					{ "time": 0.7333, "angle": 7.45 },
+					{ "time": 0.8666, "angle": -21.19 },
+					{ "time": 1, "angle": -26.55 }
+				],
+				"translate": [
+					{ "time": 0, "x": -1.32, "y": 1.7 },
+					{ "time": 0.3666, "x": -0.06, "y": 2.42 },
+					{ "time": 1, "x": -1.32, "y": 1.7 }
+				]
+			},
+			"right upper leg": {
+				"rotate": [
+					{ "time": 0, "angle": 42.45 },
+					{
+						"time": 0.1333,
+						"angle": 49.86,
+						"curve": [ 0.414, 0, 0.705, 0.99 ]
+					},
+					{ "time": 0.2333, "angle": 22.51 },
+					{ "time": 0.5, "angle": -16.93 },
+					{ "time": 0.6333, "angle": 1.89 },
+					{
+						"time": 0.7333,
+						"angle": 34.86,
+						"curve": [ 0.462, 0.11, 1, 1 ]
+					},
+					{
+						"time": 0.8666,
+						"angle": 58.68,
+						"curve": [ 0.5, 0.02, 1, 1 ]
+					},
+					{ "time": 1, "angle": 42.45 }
+				],
+				"translate": [
+					{ "time": 0, "x": 6.23, "y": 0 },
+					{ "time": 0.2333, "x": 2.14, "y": 2.4 },
+					{ "time": 0.5, "x": 2.44, "y": 4.8 },
+					{ "time": 1, "x": 6.23, "y": 0 }
+				]
+			},
+			"left lower leg": {
+				"rotate": [
+					{ "time": 0, "angle": -18.05 },
+					{ "time": 0.1333, "angle": -63.5 },
+					{ "time": 0.2333, "angle": -83.01 },
+					{ "time": 0.5, "angle": 5.11 },
+					{ "time": 0.6333, "angle": -28.29 },
+					{ "time": 0.7333, "angle": -27.52 },
+					{ "time": 0.8666, "angle": 3.53 },
+					{ "time": 1, "angle": -18.05 }
+				],
+				"translate": [
+					{ "time": 0, "x": 0, "y": 0 },
+					{ "time": 0.2333, "x": 2.55, "y": -0.47 },
+					{ "time": 0.5, "x": 0, "y": 0, "curve": "stepped" },
+					{ "time": 1, "x": 0, "y": 0 }
+				]
+			},
+			"left foot": {
+				"rotate": [
+					{ "time": 0, "angle": -14.56 },
+					{ "time": 0.1333, "angle": -10.42 },
+					{ "time": 0.2333, "angle": -5.01 },
+					{ "time": 0.3, "angle": 6.67 },
+					{ "time": 0.3666, "angle": 3.87 },
+					{ "time": 0.5, "angle": -3.87 },
+					{ "time": 0.6333, "angle": 2.78 },
+					{ "time": 0.7333, "angle": -11.99 },
+					{ "time": 0.8666, "angle": -12.45 },
+					{ "time": 1, "angle": -14.56 }
+				]
+			},
+			"right shoulder": {
+				"rotate": [
+					{
+						"time": 0,
+						"angle": 5.29,
+						"curve": [ 0.264, 0, 0.75, 1 ]
+					},
+					{ "time": 0.6333, "angle": 6.65 },
+					{ "time": 1, "angle": 5.29 }
+				]
+			},
+			"right arm": {
+				"rotate": [
+					{
+						"time": 0,
+						"angle": -4.02,
+						"curve": [ 0.267, 0, 0.804, 0.99 ]
+					},
+					{
+						"time": 0.6333,
+						"angle": 19.78,
+						"curve": [ 0.307, 0, 0.787, 0.99 ]
+					},
+					{ "time": 1, "angle": -4.02 }
+				]
+			},
+			"right hand": {
+				"rotate": [
+					{ "time": 0, "angle": 8.98 },
+					{ "time": 0.6333, "angle": 0.51 },
+					{ "time": 1, "angle": 8.98 }
+				]
+			},
+			"left shoulder": {
+				"rotate": [
+					{
+						"time": 0,
+						"angle": 6.25,
+						"curve": [ 0.339, 0, 0.683, 1 ]
+					},
+					{
+						"time": 0.5,
+						"angle": -11.78,
+						"curve": [ 0.281, 0, 0.686, 0.99 ]
+					},
+					{ "time": 1, "angle": 6.25 }
+				],
+				"translate": [
+					{ "time": 0, "x": 1.15, "y": 0.23 }
+				]
+			},
+			"left hand": {
+				"rotate": [
+					{
+						"time": 0,
+						"angle": -21.23,
+						"curve": [ 0.295, 0, 0.755, 0.98 ]
+					},
+					{
+						"time": 0.5,
+						"angle": -27.28,
+						"curve": [ 0.241, 0, 0.75, 0.97 ]
+					},
+					{ "time": 1, "angle": -21.23 }
+				]
+			},
+			"left arm": {
+				"rotate": [
+					{
+						"time": 0,
+						"angle": 28.37,
+						"curve": [ 0.339, 0, 0.683, 1 ]
+					},
+					{
+						"time": 0.5,
+						"angle": 60.09,
+						"curve": [ 0.281, 0, 0.686, 0.99 ]
+					},
+					{ "time": 1, "angle": 28.37 }
+				]
+			},
+			"torso": {
+				"rotate": [
+					{ "time": 0, "angle": -10.28 },
+					{
+						"time": 0.1333,
+						"angle": -15.38,
+						"curve": [ 0.545, 0, 0.818, 1 ]
+					},
+					{
+						"time": 0.3666,
+						"angle": -9.78,
+						"curve": [ 0.58, 0.17, 0.669, 0.99 ]
+					},
+					{
+						"time": 0.6333,
+						"angle": -15.75,
+						"curve": [ 0.235, 0.01, 0.795, 1 ]
+					},
+					{
+						"time": 0.8666,
+						"angle": -7.06,
+						"curve": [ 0.209, 0, 0.816, 0.98 ]
+					},
+					{ "time": 1, "angle": -10.28 }
+				],
+				"translate": [
+					{ "time": 0, "x": -3.72, "y": -0.01 }
+				]
+			},
+			"right foot": {
+				"rotate": [
+					{ "time": 0, "angle": -5.25 },
+					{ "time": 0.2333, "angle": -17.76 },
+					{ "time": 0.3666, "angle": -20.09 },
+					{ "time": 0.5, "angle": -19.73 },
+					{ "time": 0.7333, "angle": -11.68 },
+					{ "time": 0.8, "angle": 4.46 },
+					{ "time": 0.8666, "angle": 0.46 },
+					{ "time": 1, "angle": -5.25 }
+				]
+			},
+			"right lower leg": {
+				"rotate": [
+					{
+						"time": 0,
+						"angle": -3.39,
+						"curve": [ 0.316, 0.01, 0.741, 0.98 ]
+					},
+					{
+						"time": 0.1333,
+						"angle": -43.21,
+						"curve": [ 0.414, 0, 0.705, 0.99 ]
+					},
+					{ "time": 0.2333, "angle": -25.98 },
+					{ "time": 0.5, "angle": -19.53 },
+					{ "time": 0.6333, "angle": -64.8 },
+					{
+						"time": 0.7333,
+						"angle": -89.54,
+						"curve": [ 0.557, 0.18, 1, 1 ]
+					},
+					{ "time": 1, "angle": -3.39 }
+				],
+				"translate": [
+					{ "time": 0, "x": 0, "y": 0, "curve": "stepped" },
+					{ "time": 0.5, "x": 0, "y": 0 },
+					{ "time": 0.6333, "x": 2.18, "y": 0.21 },
+					{ "time": 1, "x": 0, "y": 0 }
+				]
+			},
+			"hip": {
+				"rotate": [
+					{ "time": 0, "angle": 0, "curve": "stepped" },
+					{ "time": 1, "angle": 0 }
+				],
+				"translate": [
+					{ "time": 0, "x": 0, "y": -8.4 },
+					{
+						"time": 0.1333,
+						"x": 0,
+						"y": -9.35,
+						"curve": [ 0.326, 0.05, 0.674, 0.93 ]
+					},
+					{
+						"time": 0.2333,
+						"x": 0,
+						"y": -0.59,
+						"curve": [ 0.325, 0.39, 0.643, 0.7 ]
+					},
+					{ "time": 0.3666, "x": 0, "y": -3.96 },
+					{ "time": 0.5, "x": 0, "y": -8.4 },
+					{
+						"time": 0.6333,
+						"x": 0,
+						"y": -10,
+						"curve": [ 0.359, 0.47, 0.646, 0.74 ]
+					},
+					{
+						"time": 0.7333,
+						"x": 0,
+						"y": -5.29,
+						"curve": [ 0.333, 0.36, 0.662, 0.69 ]
+					},
+					{
+						"time": 0.8,
+						"x": 0,
+						"y": -2.49,
+						"curve": [ 0.322, 0.35, 0.651, 0.68 ]
+					},
+					{ "time": 0.8666, "x": 0, "y": -3.96 },
+					{ "time": 1, "x": 0, "y": -8.4 }
+				]
+			},
+			"neck": {
+				"rotate": [
+					{ "time": 0, "angle": 3.6 },
+					{ "time": 0.1333, "angle": 17.49 },
+					{ "time": 0.2333, "angle": 6.1 },
+					{ "time": 0.3666, "angle": 3.45 },
+					{ "time": 0.5, "angle": 5.17 },
+					{ "time": 0.6333, "angle": 18.36 },
+					{ "time": 0.7333, "angle": 6.09 },
+					{ "time": 0.8666, "angle": 2.28 },
+					{ "time": 1, "angle": 3.6 }
+				]
+			},
+			"head": {
+				"rotate": [
+					{
+						"time": 0,
+						"angle": 3.6,
+						"curve": [ 0, 0, 0.704, 1.17 ]
+					},
+					{ "time": 0.1333, "angle": -0.2 },
+					{ "time": 0.2333, "angle": 6.1 },
+					{ "time": 0.3666, "angle": 3.45 },
+					{
+						"time": 0.5,
+						"angle": 5.17,
+						"curve": [ 0, 0, 0.704, 1.61 ]
+					},
+					{ "time": 0.6666, "angle": 1.1 },
+					{ "time": 0.7333, "angle": 6.09 },
+					{ "time": 0.8666, "angle": 2.28 },
+					{ "time": 1, "angle": 3.6 }
+				]
+			},
+			"pelvis": {
+				"rotate": [
+					{ "time": 0, "angle": -1.33 }
+				],
+				"translate": [
+					{ "time": 0, "x": 0.39, "y": -0.78 }
+				]
+			},
+			"spear1": {
+				"rotate": [
+					{ "time": 0, "angle": 1.84 },
+					{ "time": 0.2, "angle": -5.38 },
+					{ "time": 0.5, "angle": 2.95 },
+					{ "time": 0.7333, "angle": -3.67 },
+					{ "time": 1, "angle": 1.84 }
+				]
+			},
+			"spear2": {
+				"rotate": [
+					{ "time": 0, "angle": 1.84 },
+					{ "time": 0.2, "angle": -5.38 },
+					{ "time": 0.5, "angle": 2.95 },
+					{ "time": 0.7333, "angle": -3.67 },
+					{ "time": 1, "angle": 1.84 }
+				]
+			},
+			"spear3": {
+				"rotate": [
+					{ "time": 0, "angle": 3.64 },
+					{ "time": 0.2, "angle": -3.59 },
+					{ "time": 0.5, "angle": 4.74 },
+					{ "time": 0.7333, "angle": -1.87 },
+					{ "time": 1, "angle": 3.64 }
+				]
+			}
+		},
+		"ffd": {
+			"default": {
+				"left hand item": {
+					"spear": [
+						{ "time": 0 }
+					]
+				},
+				"right hand item": {
+					"dagger": [
+						{
+							"time": 0,
+							"offset": 26,
+							"vertices": [ 2.34, 0.14 ],
+							"curve": [ 0.25, 0, 0.75, 1 ]
+						},
+						{
+							"time": 0.5,
+							"offset": 8,
+							"vertices": [ -1.19, 4.31, 0.07, 6.41, 1.66, 6.18, 1.75, 3.59 ],
+							"curve": [ 0.25, 0, 0.75, 1 ]
+						},
+						{
+							"time": 1,
+							"offset": 26,
+							"vertices": [ 2.34, 0.14 ]
+						}
+					]
+				}
+			},
+			"goblin": {
+				"head": {
+					"head": [
+						{
+							"time": 0,
+							"curve": [ 0.632, 0, 0.75, 1 ]
+						},
+						{
+							"time": 0.2,
+							"vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08, -1.08, 0.08, -1.08, 0.08, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08 ],
+							"curve": [ 0.25, 0, 0.75, 1 ]
+						},
+						{
+							"time": 0.3666,
+							"vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09, 1.47, 0.09, 1.47, 0.09, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09 ],
+							"curve": [ 0.621, 0, 0.75, 1 ]
+						},
+						{
+							"time": 0.7,
+							"vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17, -1.17, -0.17, -1.17, -0.17, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17 ],
+							"curve": [ 0.25, 0, 0.75, 1 ]
+						},
+						{
+							"time": 0.8666,
+							"vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08, 0.38, 0.08, 0.38, 0.08, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08 ],
+							"curve": [ 0.25, 0, 0.75, 1 ]
+						},
+						{ "time": 1 }
+					]
+				},
+				"left foot": {
+					"left foot": [
+						{
+							"time": 0,
+							"offset": 8,
+							"vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ]
+						},
+						{ "time": 0.1333 },
+						{
+							"time": 0.2333,
+							"offset": 8,
+							"vertices": [ -3.96, -2.34, -5.8, -12.47, -2.23, -12.99, 2.02, -9.1, 0, 0, 0, 0, 0, 0, -1.35, -5.28 ]
+						},
+						{
+							"time": 0.3666,
+							"offset": 8,
+							"vertices": [ 0.66, 0.33, 0.33, 2.69, -0.48, 2.54, -1.13, 1.38, 0, 0, 0, 0, 0, 0, -0.11, 0.79 ]
+						},
+						{ "time": 0.5, "curve": "stepped" },
+						{ "time": 0.6333 },
+						{
+							"time": 0.7333,
+							"offset": 8,
+							"vertices": [ -2.97, 9.4, -6.91, 19.92, -10.55, 18.41, -12.37, 12.38, -4.72, 6.3, 0, 0, -1.48, 4.88, -7.06, 10.7 ]
+						},
+						{
+							"time": 0.8333,
+							"offset": 6,
+							"vertices": [ 1.05, 1.56, -2.52, 7.99, -5.52, 17.14, -8.93, 15.79, -10.73, 10.22, -4.23, 5.36, 0, 0, 0, 0, -5.83, 8.55 ]
+						},
+						{
+							"time": 1,
+							"offset": 8,
+							"vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ]
+						}
+					]
+				},
+				"pelvis": {
+					"pelvis": [
+						{ "time": 0 },
+						{
+							"time": 0.1333,
+							"offset": 6,
+							"vertices": [ -0.68, -4.13 ]
+						},
+						{
+							"time": 0.3333,
+							"offset": 6,
+							"vertices": [ -1.04, -3.1 ]
+						},
+						{
+							"time": 0.7,
+							"offset": 6,
+							"vertices": [ -1.42, -6.3 ]
+						},
+						{
+							"time": 0.8666,
+							"offset": 6,
+							"vertices": [ -1.13, -1.79 ]
+						},
+						{ "time": 1 }
+					]
+				},
+				"right foot": {
+					"right foot": [
+						{ "time": 0 },
+						{
+							"time": 0.1333,
+							"offset": 2,
+							"vertices": [ -2.81, 2.63, -2.35, 3.89, -1.99, 4.86, -0.93, 5.57, -0.48, 5.09, -0.34, 3.42, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31, 1.91, -1.32, 3.65 ]
+						},
+						{
+							"time": 0.2333,
+							"offset": 2,
+							"vertices": [ -6.39, 6.41, -7.74, 8.27, -7.02, 11.35, -4.03, 13.93, -2.5, 12.62, -1.46, 7.58, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84, 2.61, -4.53, 7.92 ]
+						},
+						{
+							"time": 0.3,
+							"offset": 2,
+							"vertices": [ -8.27, 6.68, -9.29, 10.13, -8.62, 14.71, -4.58, 18.81, -2.2, 17.1, -0.07, 9.9, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94, 2.38, -4.59, 10.01 ]
+						},
+						{
+							"time": 0.3666,
+							"offset": 2,
+							"vertices": [ -10.47, 9.44, -13.36, 12.4, -14.32, 16.94, -9.24, 23.55, -5.51, 21.51, -1.19, 11.53, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14, 2.29, -6.63, 11.37 ]
+						},
+						{
+							"time": 0.5,
+							"offset": 2,
+							"vertices": [ -5.42, 4.36, -10.59, 7.04, -11.64, 11.55, -6.19, 20.12, -1.45, 18.05, 4.86, 6.41, 2.81, 0.27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96, 4.94 ]
+						},
+						{ "time": 0.6333 },
+						{
+							"time": 0.7333,
+							"offset": 4,
+							"vertices": [ 1.31, -6.84, -0.87, -12.54, -5.98, -14.08, -7.15, -11.63, -5.67, -4.83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06, -6.93 ]
+						},
+						{
+							"time": 0.8,
+							"offset": 4,
+							"vertices": [ 0.65, -3.42, -0.43, -6.27, -2.99, -7.04, -3.57, -5.81, -2.83, -2.41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79, -1.28, 0, 0, 0, 0, -1.03, -3.46 ]
+						},
+						{ "time": 0.8666 }
+					]
+				},
+				"right hand": {
+					"right hand": [
+						{
+							"time": 0,
+							"offset": 4,
+							"vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ]
+						},
+						{ "time": 0.5 },
+						{
+							"time": 1,
+							"offset": 4,
+							"vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ]
+						}
+					]
+				},
+				"right lower leg": {
+					"right lower leg": [
+						{ "time": 0 },
+						{
+							"time": 0.6,
+							"offset": 6,
+							"vertices": [ 1.8, -1.56 ]
+						},
+						{ "time": 1 }
+					]
+				},
+				"right upper leg": {
+					"right upper leg": [
+						{
+							"time": 0,
+							"vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ]
+						},
+						{ "time": 0.3333 },
+						{
+							"time": 0.8666,
+							"offset": 14,
+							"vertices": [ 0.13, -2.35, -1.33, -5.99, -1.35, -4.43 ]
+						},
+						{
+							"time": 1,
+							"vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ]
+						}
+					]
+				},
+				"torso": {
+					"torso": [
+						{
+							"time": 0,
+							"offset": 14,
+							"vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ]
+						},
+						{
+							"time": 0.1333,
+							"offset": 14,
+							"vertices": [ 1.31, -0.59, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ]
+						},
+						{
+							"time": 0.3,
+							"offset": 14,
+							"vertices": [ 6.03, -3.13, 7.55, -1.38, 6.79, 0.31, 4.23, 1.14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07, -5.16, 0, 0, 4, 0.27, 0, 0, 0, 0, 3.43, -3.52 ]
+						},
+						{
+							"time": 0.5,
+							"offset": 14,
+							"vertices": [ 2.25, -0.87, 2.57, -0.56, 3.17, -0.57, 1.48, 0.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22, -4.43, 0, 0, 1.48, 0.01, 0, 0, 0, 0, 0.31, -3.28, -1.53, 0.17 ]
+						},
+						{
+							"time": 0.6333,
+							"offset": 14,
+							"vertices": [ 0.75, -1.51, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ]
+						},
+						{
+							"time": 0.8666,
+							"offset": 14,
+							"vertices": [ 0.62, -1.26, 0.38, -2.2, 3.25, -0.5, 2.41, 2.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.66, -3.1, 0, 0, 2.3, -1.15, 0, 0, 0, 0, -0.07, -3.63, -0.93, 0.1 ]
+						},
+						{
+							"time": 1,
+							"offset": 14,
+							"vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ]
+						}
+					]
+				},
+				"undie straps": {
+					"undie straps": [
+						{
+							"time": 0,
+							"offset": 2,
+							"vertices": [ -1.77, 0.54, -0.96, -1.03, -0.39, -0.24, -1.77, 0.54 ]
+						},
+						{
+							"time": 0.1333,
+							"offset": 2,
+							"vertices": [ -2.25, -1.03, -1.49, -4.23, -0.74, -2.84, -1.9, 0.54 ]
+						},
+						{
+							"time": 0.3333,
+							"offset": 2,
+							"vertices": [ -2.37, -0.05, -0.49, 0.19, -0.9, 1.16, -1.6, 2.7, 0.96, 0.8 ]
+						},
+						{
+							"time": 0.7,
+							"offset": 2,
+							"vertices": [ -0.91, -2.76, -0.62, -3.63, -0.84, -2.26, -2.56, 0.52 ]
+						},
+						{
+							"time": 0.8666,
+							"offset": 2,
+							"vertices": [ -2.56, 0.52, -1.58, 0.32, -1.38, 0.32, -2.56, 0.52 ]
+						},
+						{
+							"time": 1,
+							"offset": 2,
+							"vertices": [ -1.77, 0.54, -0.8, 0.53, -0.8, 0.53, -1.77, 0.54 ]
+						}
+					]
+				},
+				"undies": {
+					"undies": [
+						{
+							"time": 0,
+							"vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ]
+						},
+						{
+							"time": 0.1333,
+							"vertices": [ 0.72, 0.43, 7.2, -0.16, 1.37, 0, 1.37, 0, 1.37, 0, 1.25, 0.04, -0.99, -2.95, -1.37, -3.07, 1.37, 0, 0.35, -0.29, 2.99, -0.07, 3.9, -0.14 ]
+						},
+						{
+							"time": 0.3333,
+							"vertices": [ 1.16, 0, 2.1, -0.23, 0, 0, 0, 0, 0, 0, 2.24, -0.24, -0.43, 0.6, -1.55, 0.48 ]
+						},
+						{
+							"time": 0.5333,
+							"vertices": [ 1.16, 0, -0.23, -0.93, -2.92, 0.35, 0, 0, 0, 0, 0.49, -0.24, -0.64, -2.07, -0.64, -2.07 ]
+						},
+						{
+							"time": 0.7,
+							"vertices": [ 1.86, -0.11, 4.66, -0.09, -1.76, 0.21, 0, 0, -0.56, 0.32, -1.13, -1.15, -2.19, -3.47, -1.29, -3.47, 0, 0, 0, 0, 1.58, -0.04, 2.65, 0.16 ]
+						},
+						{
+							"time": 0.8333,
+							"vertices": [ 2.41, -0.2, 8.58, 0.58, -0.83, 0.1, 0, 0, -1.02, 0.59, -2.44, -1.87, -1.62, 0, 0, 0, 0, 0, 0, 0, 2.85, -0.08, 4.78, 0.3 ]
+						},
+						{
+							"time": 0.8666,
+							"vertices": [ 2.01, -0.02, 8.98, 0.44, -0.2, 0.08, 0.45, 0, -0.35, 0.47, -1.84, -1.44, -0.79, 1.26, 0.53, 1.23, 0.45, 0, 0.11, -0.09, 3.28, -0.09, 5.13, 0.19 ]
+						},
+						{
+							"time": 1,
+							"vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ]
+						}
+					]
+				}
+			}
+		}
+	}
+}
+}

+ 0 - 499
spine-cocos2dx/example/Resources/common/goblins.json

@@ -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": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 },
-	{ "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 },
-	{ "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 },
-	{ "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 },
-	{ "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 },
-	{ "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 },
-	{ "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 },
-	{ "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 },
-	{ "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 },
-	{ "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 },
-	{ "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 },
-	{ "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 },
-	{ "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 },
-	{ "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 },
-	{ "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 }
-],
-"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": "dagger" },
-	{ "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": -35.5, "y": 3.85, "rotation": 10.47, "width": 156, "height": 238 },
-			"spear": { "x": -4.55, "y": 39.2, "rotation": 13.04, "width": 22, "height": 368 }
-		},
-		"right hand item": {
-			"dagger": { "x": -21.57, "y": 15.8, "rotation": -8.06, "width": 156, "height": 238 }
-		}
-	},
-	"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 }
-				]
-			}
-		}
-	}
-}
-}

+ 2179 - 769
spine-cocos2dx/example/Resources/common/spineboy.json

@@ -1,999 +1,2409 @@
 {
 "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 }
+	{ "name": "hip", "y": 247.47 },
+	{ "name": "front_thigh", "parent": "hip", "length": 74.8, "x": -17.45, "y": -11.64, "rotation": -95.51, "color": "00ff04ff" },
+	{ "name": "rear_thigh", "parent": "hip", "length": 85.71, "x": 8.91, "y": -5.62, "rotation": -72.54, "color": "ff000dff" },
+	{ "name": "torso", "parent": "hip", "length": 127.55, "x": -1.61, "y": 4.9, "rotation": 103.82, "color": "e0da19ff" },
+	{
+		"name": "front_shin",
+		"parent": "front_thigh",
+		"length": 128.76,
+		"x": 78.69,
+		"y": 1.6,
+		"rotation": -2.21,
+		"inheritScale": false,
+		"color": "00ff04ff"
+	},
+	{ "name": "front_upper_arm", "parent": "torso", "length": 69.45, "x": 103.75, "y": 19.32, "rotation": 168.37, "color": "00ff04ff" },
+	{ "name": "neck", "parent": "torso", "length": 25.45, "x": 127.49, "y": -0.3, "rotation": -31.53, "color": "e0da19ff" },
+	{ "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "x": 86.1, "y": -1.32, "rotation": -19.83, "color": "ff000dff" },
+	{ "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "x": 92.35, "y": -19.22, "rotation": -169.55, "color": "ff000dff" },
+	{
+		"name": "front_bracer",
+		"parent": "front_upper_arm",
+		"length": 40.57,
+		"x": 68.8,
+		"y": -0.68,
+		"rotation": 18.29,
+		"color": "00ff04ff"
+	},
+	{ "name": "front_foot", "parent": "front_shin", "length": 91.34, "x": 128.75, "y": -0.33, "rotation": 77.9, "color": "00ff04ff" },
+	{ "name": "head", "parent": "neck", "length": 263.57, "x": 27.66, "y": -0.25, "rotation": 23.18, "color": "e0da19ff" },
+	{ "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "x": 51.35, "rotation": 23.15, "color": "ff000dff" },
+	{ "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "x": 121.45, "y": -0.75, "rotation": 69.3, "color": "ff000dff" },
+	{ "name": "front_fist", "parent": "front_bracer", "length": 65.38, "x": 40.56, "y": 0.19, "rotation": 12.43, "color": "00ff04ff" },
+	{ "name": "gun", "parent": "rear_bracer", "length": 43.1, "x": 34.42, "y": -0.45, "rotation": 5.34, "color": "ff000dff" },
+	{ "name": "gunTip", "parent": "gun", "x": 201.04, "y": 52.13, "rotation": 6.83, "color": "ff000dff" }
 ],
 "slots": [
-	{ "name": "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": "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": "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" }
+	{ "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 }
 ],
 "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
-				]
-			}
+		"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 }
 		},
-		"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 }
+		"front_bracer": {
+			"front_bracer": { "x": 12.03, "y": -1.67, "rotation": 79.59, "width": 58, "height": 80 }
 		},
-		"head": {
-			"head": { "x": 53.94, "y": -5.75, "rotation": -86.9, "width": 121, "height": 132 }
+		"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 }
 		},
-		"left arm": {
-			"left-arm": { "x": 15.11, "y": -0.44, "rotation": 33.84, "width": 35, "height": 29 }
+		"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 }
 		},
-		"left foot": {
-			"left-foot": { "x": 24.35, "y": 8.88, "rotation": 3.32, "width": 65, "height": 30 }
+		"front_shin": {
+			"front_shin": { "x": 55.11, "y": -3.54, "rotation": 96.59, "width": 82, "height": 184 }
 		},
-		"left hand": {
-			"left-hand": { "x": 0.75, "y": 1.86, "rotation": 31.14, "width": 35, "height": 38 }
+		"front_thigh": {
+			"front_thigh": { "x": 42.47, "y": 4.44, "rotation": 84.86, "width": 48, "height": 112 }
 		},
-		"left lower leg": {
-			"left-lower-leg": { "x": 24.55, "y": -1.92, "rotation": 105.75, "width": 49, "height": 64 }
+		"front_upper_arm": {
+			"front_upper_arm": { "x": 28.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 }
 		},
-		"left shoulder": {
-			"left-shoulder": { "x": 23.74, "y": 0.11, "rotation": 62.01, "width": 34, "height": 53 }
+		"goggles": {
+			"goggles": { "x": 97.07, "y": 6.54, "rotation": -70.63, "width": 261, "height": 166 }
 		},
-		"left upper leg": {
-			"left-upper-leg": { "x": 26.12, "y": -1.85, "rotation": 89.09, "width": 33, "height": 67 }
+		"gun": {
+			"gun": { "x": 77.3, "y": 16.4, "rotation": 60.82, "width": 210, "height": 203 }
 		},
-		"neck": {
-			"neck": { "x": 9.42, "y": -3.66, "rotation": -100.15, "width": 34, "height": 28 }
+		"head": {
+			"head": { "x": 128.95, "y": 0.29, "rotation": -70.63, "width": 271, "height": 298 }
+		},
+		"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 }
 		},
-		"pelvis": {
-			"pelvis": { "x": -4.83, "y": 10.62, "width": 63, "height": 47 }
+		"muzzle": {
+			"muzzle": { "x": 18.25, "y": 5.44, "rotation": 0.15, "width": 462, "height": 400 }
 		},
-		"right arm": {
-			"right-arm": { "x": 18.34, "y": -2.64, "rotation": 94.32, "width": 21, "height": 45 }
+		"neck": {
+			"neck": { "x": 9.76, "y": -3.01, "rotation": -55.22, "width": 36, "height": 41 }
 		},
-		"right foot": {
-			"right-foot": { "x": 19.02, "y": 8.47, "rotation": 1.52, "width": 67, "height": 30 }
+		"rear_bracer": {
+			"rear_bracer": { "x": 11.15, "y": -2.2, "rotation": 66.17, "width": 56, "height": 72 }
 		},
-		"right hand": {
-			"right-hand": { "x": 6.82, "y": 1.25, "rotation": 91.96, "width": 32, "height": 32 }
+		"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 }
 		},
-		"right lower leg": {
-			"right-lower-leg": { "x": 23.28, "y": -2.59, "rotation": 111.83, "width": 51, "height": 64 }
+		"rear_shin": {
+			"rear_shin": { "x": 58.29, "y": -2.75, "rotation": 92.37, "width": 75, "height": 178 }
 		},
-		"right shoulder": {
-			"right-shoulder": { "x": 25.86, "y": 0.03, "rotation": 134.44, "width": 52, "height": 51 }
+		"rear_thigh": {
+			"rear_thigh": { "x": 33.1, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 }
 		},
-		"right upper leg": {
-			"right-upper-leg": { "x": 23.03, "y": 0.25, "rotation": 101.13, "width": 44, "height": 70 }
+		"rear_upper_arm": {
+			"rear_upper_arm": { "x": 21.12, "y": 4.08, "rotation": 89.32, "width": 47, "height": 87 }
 		},
 		"torso": {
-			"torso": { "x": 44.57, "y": -7.08, "rotation": -94.95, "width": 68, "height": 92 }
+			"torso": { "x": 63.61, "y": 7.12, "rotation": -94.53, "width": 98, "height": 180 }
 		}
 	}
 },
 "events": {
-	"behind": {},
-	"headAttach": {},
-	"headPop": {}
+	"footstep": {},
+	"headAttach": { "int": 3, "float": 4 },
+	"headBehind": { "int": 5, "float": 6, "string": "setup" },
+	"headPop": { "int": 1, "float": 2 }
 },
 "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 }
+	"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" }
 				]
 			},
-			{
-				"time": 1.7931,
-				"offsets": [
-					{ "slot": "head", "offset": 3 },
-					{ "slot": "eyes", "offset": 3 }
+			"front_fist": {
+				"attachment": [
+					{ "time": 0, "name": "front_fist_open" }
 				]
 			},
-			{
-				"time": 2.6206,
-				"offsets": [
-					{ "slot": "head", "offset": -12 },
-					{ "slot": "eyes", "offset": -12 }
+			"mouth": {
+				"attachment": [
+					{ "time": 0, "name": "mouth_oooo" },
+					{ "time": 2.2333, "name": "mouth_grind" },
+					{ "time": 4.5333, "name": "mouth_oooo" }
 				]
-			},
-			{ "time": 3.5862 }
-		]
-	},
-	"jump": {
+			}
+		},
 		"bones": {
-			"hip": {
+			"head": {
 				"rotate": [
-					{ "time": 0, "angle": 0, "curve": "stepped" },
-					{ "time": 0.9333, "angle": 0, "curve": "stepped" },
-					{ "time": 1.3666, "angle": 0 }
+					{ "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": -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 }
+					{ "time": 0, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"left upper leg": {
+			"neck": {
 				"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 }
+					{ "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": -3, "y": -2.25, "curve": "stepped" },
-					{ "time": 0.9333, "x": -3, "y": -2.25, "curve": "stepped" },
-					{ "time": 1.3666, "x": -3, "y": -2.25 }
+					{ "time": 0, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"left lower leg": {
+			"torso": {
 				"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 }
+					{ "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": 1.3666, "x": 0, "y": 0 }
+					{ "time": 2.2333, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"left foot": {
+			"front_upper_arm": {
 				"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 }
+					{ "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, "curve": "stepped" },
-					{ "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" },
-					{ "time": 1.3666, "x": 0, "y": 0 }
+					{ "time": 0, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"right upper leg": {
+			"rear_upper_arm": {
 				"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 }
+					{ "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": 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 }
+					{ "time": 0, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"right lower leg": {
+			"front_bracer": {
 				"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 }
+					{ "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, "curve": "stepped" },
-					{ "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" },
-					{ "time": 1.3666, "x": 0, "y": 0 }
+					{ "time": 0, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"right foot": {
+			"front_fist": {
 				"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 }
+					{ "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, "curve": "stepped" },
-					{ "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" },
-					{ "time": 1.3666, "x": 0, "y": 0 }
+					{ "time": 0, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"torso": {
+			"rear_bracer": {
 				"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 }
+					{ "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": -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 }
+					{ "time": 0, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"neck": {
+			"gun": {
 				"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 }
+					{ "time": 0, "angle": -2.78 },
+					{ "time": 0.1333, "angle": -24.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 }
+					{ "time": 0, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"head": {
+			"hip": {
 				"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 }
+					{ "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, "curve": "stepped" },
-					{ "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" },
-					{ "time": 1.3666, "x": 0, "y": 0 }
+					{ "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, "curve": "stepped" },
-					{ "time": 0.9333, "x": 1, "y": 1, "curve": "stepped" },
-					{ "time": 1.3666, "x": 1, "y": 1 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"left shoulder": {
+			"front_thigh": {
 				"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 }
+					{ "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": -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 }
+					{ "time": 0, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"left hand": {
+			"front_shin": {
 				"rotate": [
-					{ "time": 0, "angle": 11.58, "curve": "stepped" },
-					{ "time": 0.9333, "angle": 11.58, "curve": "stepped" },
-					{ "time": 1.3666, "angle": 11.58 }
+					{ "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, "curve": "stepped" },
-					{ "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" },
-					{ "time": 1.3666, "x": 0, "y": 0 }
+					{ "time": 0, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"left arm": {
+			"rear_thigh": {
 				"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 }
+					{ "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, "curve": "stepped" },
-					{ "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" },
-					{ "time": 1.3666, "x": 0, "y": 0 }
+					{ "time": 0, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"right shoulder": {
+			"rear_shin": {
 				"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 }
+					{ "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": -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 }
+					{ "time": 0, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"right arm": {
+			"rear_foot": {
 				"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 }
+					{ "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, "curve": "stepped" },
-					{ "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" },
-					{ "time": 1.3666, "x": 0, "y": 0 }
+					{ "time": 0, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"right hand": {
+			"front_foot": {
 				"rotate": [
-					{ "time": 0, "angle": 22.92, "curve": "stepped" },
-					{ "time": 0.9333, "angle": 22.92, "curve": "stepped" },
-					{ "time": 1.3666, "angle": 22.92 }
+					{ "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, "curve": "stepped" },
-					{ "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" },
-					{ "time": 1.3666, "x": 0, "y": 0 }
+					{ "time": 0, "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 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"root": {
+			"gunTip": {
 				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{ "time": 0.4333, "angle": -14.52 },
-					{ "time": 0.8, "angle": 9.86 },
-					{ "time": 1.3666, "angle": 0 }
+					{ "time": 0, "angle": 0 }
+				],
+				"translate": [
+					{ "time": 0, "x": 0, "y": 0 }
 				],
 				"scale": [
-					{ "time": 0, "x": 1, "y": 1, "curve": "stepped" },
-					{ "time": 1.3666, "x": 1, "y": 1 }
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			}
 		}
 	},
-	"walk": {
+	"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": {
-			"left upper leg": {
+			"torso": {
 				"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 }
+					{ "time": 0, "angle": 56.42 },
+					{ "time": 0.3333, "angle": 8.89 }
 				]
 			},
-			"right upper leg": {
+			"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": 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": 0,
+						"angle": -310.92,
+						"curve": [ 0.38, 0.53, 0.744, 1 ]
 					},
-					{ "time": 1.0666, "angle": 42.45 }
+					{ "time": 0.3333, "angle": -112.59 }
 				],
 				"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 }
+					{ "time": 0, "x": 7.23, "y": -13.13 }
 				]
 			},
-			"left lower leg": {
+			"front_bracer": {
 				"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 }
+					{ "time": 0, "angle": 36.99 },
+					{ "time": 0.3333, "angle": -28.64 }
 				]
 			},
-			"left foot": {
+			"front_fist": {
 				"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 }
+					{ "time": 0, "angle": 13.59 },
+					{ "time": 0.3333, "angle": 7.55 }
 				]
 			},
-			"right shoulder": {
+			"rear_upper_arm": {
 				"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 ]
+						"angle": 271.02,
+						"curve": [ 0.342, 0.36, 0.68, 0.71 ]
 					},
-					{ "time": 0.6666, "angle": -278.28 },
-					{ "time": 1.0666, "angle": 20.89 }
+					{ "time": 0.3333, "angle": -15.84 }
 				],
 				"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 }
+					{ "time": 0.3333, "x": -0.09, "y": -0.46 }
 				]
 			},
-			"right arm": {
+			"rear_bracer": {
 				"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 }
+					{ "time": 0, "angle": 0 },
+					{ "time": 0.3333, "angle": 40.03 }
 				]
 			},
-			"right hand": {
+			"gun": {
 				"rotate": [
-					{ "time": 0, "angle": 22.92 },
-					{ "time": 0.4, "angle": -8.97 },
-					{ "time": 0.6666, "angle": 0.51 },
-					{ "time": 1.0666, "angle": 22.92 }
+					{ "time": 0, "angle": 14.98 },
+					{ "time": 0.3333, "angle": 39.75 }
 				]
 			},
-			"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 }
-				],
+			"hip": {
 				"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 }
+					{ "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 }
 				]
 			},
-			"left hand": {
+			"front_thigh": {
 				"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 ]
+						"angle": 90.94,
+						"curve": [ 0.227, 0.26, 0.432, 1 ]
 					},
-					{
-						"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 }
+					{ "time": 0.3333, "angle": 32.02 }
+				],
+				"translate": [
+					{ "time": 0, "x": 7.21, "y": -4 }
 				]
 			},
-			"torso": {
+			"rear_thigh": {
 				"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,
+						"angle": 40.51,
+						"curve": [ 0.295, 0.3, 0.59, 0.99 ]
 					},
-					{ "time": 0.6666, "angle": -15.75 },
-					{ "time": 0.9333, "angle": -7.06 },
-					{ "time": 1.0666, "angle": -10.28 }
+					{ "time": 0.3333, "angle": 90.76 }
 				],
 				"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 }
+					{ "time": 0, "x": -1.96, "y": -0.32 }
 				]
 			},
-			"right foot": {
+			"front_shin": {
 				"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 }
+					{ "time": 0, "angle": -96.62 },
+					{ "time": 0.3333, "angle": -15.13 }
 				]
 			},
-			"right lower leg": {
+			"rear_shin": {
 				"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 }
+					{ "time": 0, "angle": 7.99 },
+					{ "time": 0.3333, "angle": -67.54 }
+				],
+				"scale": [
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"hip": {
+			"front_foot": {
 				"rotate": [
-					{ "time": 0, "angle": 0, "curve": "stepped" },
-					{ "time": 1.0666, "angle": 0 }
+					{ "time": 0, "angle": 5.4 },
+					{ "time": 0.3333, "angle": -16.26 }
 				],
 				"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 }
+					{ "time": 0, "x": 0, "y": 0 }
+				],
+				"scale": [
+					{ "time": 0, "x": 1, "y": 1 }
 				]
 			},
-			"neck": {
+			"rear_foot": {
 				"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 }
+					{ "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" }
 				]
 			},
-			"head": {
+			"mouth": {
+				"attachment": [
+					{ "time": 0, "name": "mouth_smile" },
+					{ "time": 1.6666, "name": "mouth_smile" }
+				]
+			}
+		},
+		"bones": {
+			"torso": {
 				"rotate": [
 					{
 						"time": 0,
-						"angle": 3.6,
-						"curve": [ 0, 0, 0.704, 1.61 ]
+						"angle": -5.61,
+						"curve": [ 0.25, 0, 0.75, 1 ]
 					},
-					{ "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.8333,
+						"angle": -9.65,
+						"curve": [ 0.25, 0, 0.75, 1 ]
 					},
-					{ "time": 0.7, "angle": 1.1 },
-					{ "time": 0.8, "angle": 6.09 },
-					{ "time": 0.9333, "angle": 2.28 },
-					{ "time": 1.0666, "angle": 3.6 }
+					{ "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 }
 				]
 			}
 		}

+ 180 - 173
spine-cocos2dx/example/Resources/iphone/goblins.atlas → spine-cocos2dx/example/Resources/ipad-retina/goblins-ffd.atlas

@@ -1,285 +1,292 @@
 
-goblins.png
+goblins-ffd.png
 format: RGBA8888
 filter: Linear,Linear
 repeat: none
-spear
-  rotate: true
-  xy: 2, 104
-  size: 22, 368
-  orig: 22, 368
+dagger
+  rotate: false
+  xy: 2, 28
+  size: 26, 108
+  orig: 26, 108
   offset: 0, 0
   index: -1
-goblingirl/head
+goblin/eyes-closed
   rotate: false
-  xy: 2, 23
-  size: 103, 79
-  orig: 103, 81
-  offset: 0, 2
+  xy: 137, 29
+  size: 34, 12
+  orig: 34, 12
+  offset: 0, 0
   index: -1
 goblin/head
   rotate: false
-  xy: 107, 38
-  size: 103, 64
+  xy: 26, 357
+  size: 103, 66
   orig: 103, 66
   offset: 0, 0
   index: -1
-goblin/torso
-  rotate: true
-  xy: 212, 34
-  size: 68, 96
-  orig: 68, 96
+goblin/left-arm
+  rotate: false
+  xy: 30, 28
+  size: 37, 35
+  orig: 37, 35
   offset: 0, 0
   index: -1
-goblin/right-upper-leg
-  rotate: true
-  xy: 107, 2
-  size: 34, 63
-  orig: 34, 63
+goblin/left-foot
+  rotate: false
+  xy: 134, 260
+  size: 65, 31
+  orig: 65, 31
   offset: 0, 0
   index: -1
-goblin/left-lower-leg
-  rotate: true
-  xy: 172, 2
-  size: 30, 70
-  orig: 33, 70
-  offset: 2, 0
-  index: -1
-goblingirl/left-lower-leg
-  rotate: true
-  xy: 244, 2
-  size: 30, 70
-  orig: 33, 70
-  offset: 2, 0
-  index: -1
-goblin/undie-straps
+goblin/left-hand
   rotate: false
-  xy: 2, 2
-  size: 55, 19
-  orig: 55, 19
+  xy: 69, 25
+  size: 36, 41
+  orig: 36, 41
   offset: 0, 0
   index: -1
-dagger
-  rotate: true
-  xy: 372, 100
-  size: 26, 108
-  orig: 156, 238
-  offset: 100, 30
-  index: -1
-goblingirl/torso
-  rotate: true
-  xy: 482, 60
-  size: 66, 96
-  orig: 68, 96
+goblin/left-lower-leg
+  rotate: false
+  xy: 134, 293
+  size: 33, 70
+  orig: 33, 70
   offset: 0, 0
   index: -1
-goblin/right-lower-leg
-  rotate: true
-  xy: 580, 91
-  size: 35, 76
-  orig: 36, 76
-  offset: 1, 0
-  index: -1
-goblingirl/right-lower-leg
-  rotate: true
-  xy: 658, 91
-  size: 35, 76
-  orig: 36, 76
-  offset: 1, 0
+goblin/left-shoulder
+  rotate: false
+  xy: 137, 43
+  size: 29, 44
+  orig: 29, 44
+  offset: 0, 0
   index: -1
 goblin/left-upper-leg
-  rotate: true
-  xy: 736, 93
+  rotate: false
+  xy: 30, 65
   size: 33, 73
   orig: 33, 73
   offset: 0, 0
   index: -1
-goblin/pelvis
-  rotate: true
-  xy: 310, 40
-  size: 62, 43
-  orig: 62, 43
-  offset: 0, 0
-  index: -1
-goblin/left-hand
-  rotate: true
-  xy: 316, 2
+goblin/neck
+  rotate: false
+  xy: 201, 387
   size: 36, 41
   orig: 36, 41
   offset: 0, 0
   index: -1
-goblingirl/left-upper-leg
-  rotate: true
-  xy: 811, 93
-  size: 33, 70
-  orig: 33, 70
-  offset: 0, 0
-  index: -1
-goblin/left-foot
+goblin/pelvis
   rotate: false
-  xy: 883, 95
-  size: 65, 31
-  orig: 65, 31
+  xy: 26, 140
+  size: 62, 43
+  orig: 62, 43
   offset: 0, 0
   index: -1
-goblingirl/left-foot
+goblin/right-arm
   rotate: false
-  xy: 950, 95
-  size: 65, 31
-  orig: 65, 31
+  xy: 171, 84
+  size: 23, 50
+  orig: 23, 50
   offset: 0, 0
   index: -1
 goblin/right-foot
   rotate: false
-  xy: 580, 56
+  xy: 134, 225
   size: 63, 33
   orig: 63, 33
   offset: 0, 0
   index: -1
-goblingirl/right-foot
+goblin/right-hand
   rotate: false
-  xy: 645, 56
-  size: 63, 33
-  orig: 63, 33
+  xy: 204, 258
+  size: 36, 37
+  orig: 36, 37
   offset: 0, 0
   index: -1
-goblingirl/pelvis
+goblin/right-lower-leg
   rotate: false
-  xy: 355, 55
-  size: 59, 43
-  orig: 62, 43
-  offset: 1, 0
+  xy: 201, 430
+  size: 36, 76
+  orig: 36, 76
+  offset: 0, 0
   index: -1
-goblingirl/right-upper-leg
-  rotate: true
-  xy: 416, 64
+goblin/right-shoulder
+  rotate: false
+  xy: 130, 89
+  size: 39, 45
+  orig: 39, 45
+  offset: 0, 0
+  index: -1
+goblin/right-upper-leg
+  rotate: false
+  xy: 98, 214
   size: 34, 63
   orig: 34, 63
   offset: 0, 0
   index: -1
-goblin/right-shoulder
+goblin/torso
   rotate: false
-  xy: 359, 11
-  size: 39, 42
-  orig: 39, 45
+  xy: 131, 410
+  size: 68, 96
+  orig: 68, 96
   offset: 0, 0
   index: -1
-goblingirl/undie-straps
+goblin/undie-straps
   rotate: false
-  xy: 416, 43
+  xy: 2, 7
   size: 55, 19
   orig: 55, 19
   offset: 0, 0
   index: -1
-goblingirl/right-shoulder
-  rotate: true
-  xy: 400, 2
-  size: 39, 42
-  orig: 39, 45
+goblin/undies
+  rotate: false
+  xy: 199, 227
+  size: 36, 29
+  orig: 36, 29
   offset: 0, 0
   index: -1
-goblin/left-arm
-  rotate: true
-  xy: 444, 4
+goblingirl/eyes-closed
+  rotate: false
+  xy: 59, 2
+  size: 37, 21
+  orig: 37, 21
+  offset: 0, 0
+  index: -1
+goblingirl/head
+  rotate: false
+  xy: 26, 425
+  size: 103, 81
+  orig: 103, 81
+  offset: 0, 0
+  index: -1
+goblingirl/left-arm
+  rotate: false
+  xy: 201, 190
   size: 37, 35
   orig: 37, 35
   offset: 0, 0
   index: -1
-goblin/neck
+goblingirl/left-foot
   rotate: false
-  xy: 481, 17
-  size: 36, 41
-  orig: 36, 41
+  xy: 134, 192
+  size: 65, 31
+  orig: 65, 31
   offset: 0, 0
   index: -1
 goblingirl/left-hand
   rotate: false
-  xy: 519, 18
+  xy: 196, 109
   size: 35, 40
   orig: 35, 40
   offset: 0, 0
   index: -1
-goblingirl/right-arm
+goblingirl/left-lower-leg
   rotate: false
-  xy: 556, 8
-  size: 22, 50
-  orig: 28, 50
-  offset: 3, 0
+  xy: 169, 293
+  size: 33, 70
+  orig: 33, 70
+  offset: 0, 0
+  index: -1
+goblingirl/left-shoulder
+  rotate: false
+  xy: 107, 30
+  size: 28, 46
+  orig: 28, 46
+  offset: 0, 0
+  index: -1
+goblingirl/left-upper-leg
+  rotate: false
+  xy: 65, 68
+  size: 33, 70
+  orig: 33, 70
+  offset: 0, 0
   index: -1
 goblingirl/neck
   rotate: false
-  xy: 580, 13
-  size: 33, 41
+  xy: 204, 297
+  size: 35, 41
   orig: 35, 41
   offset: 0, 0
   index: -1
-goblin/left-shoulder
-  rotate: true
-  xy: 615, 25
-  size: 29, 44
-  orig: 29, 44
+goblingirl/pelvis
+  rotate: false
+  xy: 131, 365
+  size: 62, 43
+  orig: 62, 43
   offset: 0, 0
   index: -1
-goblingirl/left-shoulder
-  rotate: true
-  xy: 661, 26
-  size: 28, 45
-  orig: 28, 46
-  offset: 0, 1
-  index: -1
-goblingirl/left-arm
+goblingirl/right-arm
   rotate: false
-  xy: 710, 54
-  size: 37, 35
-  orig: 37, 35
+  xy: 100, 97
+  size: 28, 50
+  orig: 28, 50
   offset: 0, 0
   index: -1
-goblin/right-arm
+goblingirl/right-foot
   rotate: false
-  xy: 708, 2
-  size: 23, 50
-  orig: 23, 50
+  xy: 134, 157
+  size: 63, 33
+  orig: 63, 33
   offset: 0, 0
   index: -1
-goblin/right-hand
+goblingirl/right-hand
   rotate: false
-  xy: 749, 54
+  xy: 199, 151
   size: 36, 37
   orig: 36, 37
   offset: 0, 0
   index: -1
-goblingirl/right-hand
+goblingirl/right-lower-leg
   rotate: false
-  xy: 733, 15
-  size: 35, 37
-  orig: 36, 37
-  offset: 1, 0
+  xy: 96, 279
+  size: 36, 76
+  orig: 36, 76
+  offset: 0, 0
   index: -1
-goblin/undies
+goblingirl/right-shoulder
   rotate: false
-  xy: 787, 62
-  size: 36, 29
-  orig: 36, 29
+  xy: 204, 340
+  size: 39, 45
+  orig: 39, 45
+  offset: 0, 0
+  index: -1
+goblingirl/right-upper-leg
+  rotate: false
+  xy: 98, 149
+  size: 34, 63
+  orig: 34, 63
+  offset: 0, 0
+  index: -1
+goblingirl/torso
+  rotate: false
+  xy: 26, 259
+  size: 68, 96
+  orig: 68, 96
+  offset: 0, 0
+  index: -1
+goblingirl/undie-straps
+  rotate: false
+  xy: 134, 136
+  size: 55, 19
+  orig: 55, 19
   offset: 0, 0
   index: -1
 goblingirl/undies
   rotate: false
-  xy: 825, 62
+  xy: 196, 78
   size: 36, 29
   orig: 36, 29
   offset: 0, 0
   index: -1
-goblingirl/eyes-closed
+shield
   rotate: false
-  xy: 59, 6
-  size: 37, 15
-  orig: 37, 21
+  xy: 26, 185
+  size: 70, 72
+  orig: 70, 72
   offset: 0, 0
   index: -1
-goblin/eyes-closed
-  rotate: true
-  xy: 770, 18
-  size: 34, 12
-  orig: 34, 12
+spear
+  rotate: false
+  xy: 2, 138
+  size: 22, 368
+  orig: 22, 368
   offset: 0, 0
   index: -1

BIN
spine-cocos2dx/example/Resources/ipad-retina/goblins-ffd.png


+ 194 - 0
spine-cocos2dx/example/Resources/ipad-retina/spineboy.atlas

@@ -0,0 +1,194 @@
+
+spineboy.png
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+eye_indifferent
+  rotate: true
+  xy: 389, 5
+  size: 56, 53
+  orig: 56, 53
+  offset: 0, 0
+  index: -1
+eye_surprised
+  rotate: false
+  xy: 580, 34
+  size: 56, 53
+  orig: 56, 53
+  offset: 0, 0
+  index: -1
+front_bracer
+  rotate: false
+  xy: 732, 85
+  size: 35, 48
+  orig: 35, 48
+  offset: 0, 0
+  index: -1
+front_fist_closed
+  rotate: false
+  xy: 556, 91
+  size: 45, 49
+  orig: 45, 49
+  offset: 0, 0
+  index: -1
+front_fist_open
+  rotate: false
+  xy: 668, 32
+  size: 52, 52
+  orig: 52, 52
+  offset: 0, 0
+  index: -1
+front_foot
+  rotate: false
+  xy: 924, 201
+  size: 76, 41
+  orig: 76, 41
+  offset: 0, 0
+  index: -1
+front_foot_bend1
+  rotate: false
+  xy: 845, 200
+  size: 77, 42
+  orig: 77, 42
+  offset: 0, 0
+  index: -1
+front_foot_bend2
+  rotate: false
+  xy: 778, 186
+  size: 65, 56
+  orig: 65, 56
+  offset: 0, 0
+  index: -1
+front_shin
+  rotate: true
+  xy: 444, 91
+  size: 49, 110
+  orig: 49, 110
+  offset: 0, 0
+  index: -1
+front_thigh
+  rotate: true
+  xy: 603, 89
+  size: 29, 67
+  orig: 29, 67
+  offset: 0, 0
+  index: -1
+front_upper_arm
+  rotate: true
+  xy: 672, 86
+  size: 32, 58
+  orig: 32, 58
+  offset: 0, 0
+  index: -1
+goggles
+  rotate: false
+  xy: 444, 142
+  size: 157, 100
+  orig: 157, 100
+  offset: 0, 0
+  index: -1
+gun
+  rotate: false
+  xy: 603, 120
+  size: 126, 122
+  orig: 126, 122
+  offset: 0, 0
+  index: -1
+head
+  rotate: false
+  xy: 279, 63
+  size: 163, 179
+  orig: 163, 179
+  offset: 0, 0
+  index: -1
+mouth_grind
+  rotate: false
+  xy: 845, 163
+  size: 56, 35
+  orig: 56, 35
+  offset: 0, 0
+  index: -1
+mouth_oooo
+  rotate: false
+  xy: 842, 126
+  size: 56, 35
+  orig: 56, 35
+  offset: 0, 0
+  index: -1
+mouth_smile
+  rotate: false
+  xy: 769, 97
+  size: 56, 35
+  orig: 56, 35
+  offset: 0, 0
+  index: -1
+muzzle
+  rotate: false
+  xy: 2, 2
+  size: 275, 240
+  orig: 277, 240
+  offset: 0, 0
+  index: -1
+neck
+  rotate: false
+  xy: 903, 173
+  size: 22, 25
+  orig: 22, 25
+  offset: 0, 0
+  index: -1
+rear_bracer
+  rotate: false
+  xy: 722, 40
+  size: 34, 43
+  orig: 34, 43
+  offset: 0, 0
+  index: -1
+rear_foot
+  rotate: false
+  xy: 444, 11
+  size: 68, 36
+  orig: 68, 36
+  offset: 0, 0
+  index: -1
+rear_foot_bend1
+  rotate: false
+  xy: 444, 49
+  size: 70, 40
+  orig: 70, 40
+  offset: 0, 0
+  index: -1
+rear_foot_bend2
+  rotate: false
+  xy: 778, 134
+  size: 62, 50
+  orig: 62, 50
+  offset: 0, 0
+  index: -1
+rear_shin
+  rotate: false
+  xy: 731, 135
+  size: 45, 107
+  orig: 45, 107
+  offset: 0, 0
+  index: -1
+rear_thigh
+  rotate: true
+  xy: 516, 50
+  size: 39, 62
+  orig: 39, 62
+  offset: 0, 0
+  index: -1
+rear_upper_arm
+  rotate: false
+  xy: 638, 35
+  size: 28, 52
+  orig: 28, 52
+  offset: 0, 0
+  index: -1
+torso
+  rotate: true
+  xy: 279, 2
+  size: 59, 108
+  orig: 59, 108
+  offset: 0, 0
+  index: -1

BIN
spine-cocos2dx/example/Resources/ipad-retina/spineboy.png


+ 180 - 173
spine-cocos2dx/example/Resources/ipad/goblins.atlas → spine-cocos2dx/example/Resources/ipad/goblins-ffd.atlas

@@ -1,285 +1,292 @@
 
-goblins.png
+goblins-ffd.png
 format: RGBA8888
 filter: Linear,Linear
 repeat: none
-spear
-  rotate: true
-  xy: 2, 104
-  size: 22, 368
-  orig: 22, 368
+dagger
+  rotate: false
+  xy: 2, 28
+  size: 26, 108
+  orig: 26, 108
   offset: 0, 0
   index: -1
-goblingirl/head
+goblin/eyes-closed
   rotate: false
-  xy: 2, 23
-  size: 103, 79
-  orig: 103, 81
-  offset: 0, 2
+  xy: 137, 29
+  size: 34, 12
+  orig: 34, 12
+  offset: 0, 0
   index: -1
 goblin/head
   rotate: false
-  xy: 107, 38
-  size: 103, 64
+  xy: 26, 357
+  size: 103, 66
   orig: 103, 66
   offset: 0, 0
   index: -1
-goblin/torso
-  rotate: true
-  xy: 212, 34
-  size: 68, 96
-  orig: 68, 96
+goblin/left-arm
+  rotate: false
+  xy: 30, 28
+  size: 37, 35
+  orig: 37, 35
   offset: 0, 0
   index: -1
-goblin/right-upper-leg
-  rotate: true
-  xy: 107, 2
-  size: 34, 63
-  orig: 34, 63
+goblin/left-foot
+  rotate: false
+  xy: 134, 260
+  size: 65, 31
+  orig: 65, 31
   offset: 0, 0
   index: -1
-goblin/left-lower-leg
-  rotate: true
-  xy: 172, 2
-  size: 30, 70
-  orig: 33, 70
-  offset: 2, 0
-  index: -1
-goblingirl/left-lower-leg
-  rotate: true
-  xy: 244, 2
-  size: 30, 70
-  orig: 33, 70
-  offset: 2, 0
-  index: -1
-goblin/undie-straps
+goblin/left-hand
   rotate: false
-  xy: 2, 2
-  size: 55, 19
-  orig: 55, 19
+  xy: 69, 25
+  size: 36, 41
+  orig: 36, 41
   offset: 0, 0
   index: -1
-dagger
-  rotate: true
-  xy: 372, 100
-  size: 26, 108
-  orig: 156, 238
-  offset: 100, 30
-  index: -1
-goblingirl/torso
-  rotate: true
-  xy: 482, 60
-  size: 66, 96
-  orig: 68, 96
+goblin/left-lower-leg
+  rotate: false
+  xy: 134, 293
+  size: 33, 70
+  orig: 33, 70
   offset: 0, 0
   index: -1
-goblin/right-lower-leg
-  rotate: true
-  xy: 580, 91
-  size: 35, 76
-  orig: 36, 76
-  offset: 1, 0
-  index: -1
-goblingirl/right-lower-leg
-  rotate: true
-  xy: 658, 91
-  size: 35, 76
-  orig: 36, 76
-  offset: 1, 0
+goblin/left-shoulder
+  rotate: false
+  xy: 137, 43
+  size: 29, 44
+  orig: 29, 44
+  offset: 0, 0
   index: -1
 goblin/left-upper-leg
-  rotate: true
-  xy: 736, 93
+  rotate: false
+  xy: 30, 65
   size: 33, 73
   orig: 33, 73
   offset: 0, 0
   index: -1
-goblin/pelvis
-  rotate: true
-  xy: 310, 40
-  size: 62, 43
-  orig: 62, 43
-  offset: 0, 0
-  index: -1
-goblin/left-hand
-  rotate: true
-  xy: 316, 2
+goblin/neck
+  rotate: false
+  xy: 201, 387
   size: 36, 41
   orig: 36, 41
   offset: 0, 0
   index: -1
-goblingirl/left-upper-leg
-  rotate: true
-  xy: 811, 93
-  size: 33, 70
-  orig: 33, 70
-  offset: 0, 0
-  index: -1
-goblin/left-foot
+goblin/pelvis
   rotate: false
-  xy: 883, 95
-  size: 65, 31
-  orig: 65, 31
+  xy: 26, 140
+  size: 62, 43
+  orig: 62, 43
   offset: 0, 0
   index: -1
-goblingirl/left-foot
+goblin/right-arm
   rotate: false
-  xy: 950, 95
-  size: 65, 31
-  orig: 65, 31
+  xy: 171, 84
+  size: 23, 50
+  orig: 23, 50
   offset: 0, 0
   index: -1
 goblin/right-foot
   rotate: false
-  xy: 580, 56
+  xy: 134, 225
   size: 63, 33
   orig: 63, 33
   offset: 0, 0
   index: -1
-goblingirl/right-foot
+goblin/right-hand
   rotate: false
-  xy: 645, 56
-  size: 63, 33
-  orig: 63, 33
+  xy: 204, 258
+  size: 36, 37
+  orig: 36, 37
   offset: 0, 0
   index: -1
-goblingirl/pelvis
+goblin/right-lower-leg
   rotate: false
-  xy: 355, 55
-  size: 59, 43
-  orig: 62, 43
-  offset: 1, 0
+  xy: 201, 430
+  size: 36, 76
+  orig: 36, 76
+  offset: 0, 0
   index: -1
-goblingirl/right-upper-leg
-  rotate: true
-  xy: 416, 64
+goblin/right-shoulder
+  rotate: false
+  xy: 130, 89
+  size: 39, 45
+  orig: 39, 45
+  offset: 0, 0
+  index: -1
+goblin/right-upper-leg
+  rotate: false
+  xy: 98, 214
   size: 34, 63
   orig: 34, 63
   offset: 0, 0
   index: -1
-goblin/right-shoulder
+goblin/torso
   rotate: false
-  xy: 359, 11
-  size: 39, 42
-  orig: 39, 45
+  xy: 131, 410
+  size: 68, 96
+  orig: 68, 96
   offset: 0, 0
   index: -1
-goblingirl/undie-straps
+goblin/undie-straps
   rotate: false
-  xy: 416, 43
+  xy: 2, 7
   size: 55, 19
   orig: 55, 19
   offset: 0, 0
   index: -1
-goblingirl/right-shoulder
-  rotate: true
-  xy: 400, 2
-  size: 39, 42
-  orig: 39, 45
+goblin/undies
+  rotate: false
+  xy: 199, 227
+  size: 36, 29
+  orig: 36, 29
   offset: 0, 0
   index: -1
-goblin/left-arm
-  rotate: true
-  xy: 444, 4
+goblingirl/eyes-closed
+  rotate: false
+  xy: 59, 2
+  size: 37, 21
+  orig: 37, 21
+  offset: 0, 0
+  index: -1
+goblingirl/head
+  rotate: false
+  xy: 26, 425
+  size: 103, 81
+  orig: 103, 81
+  offset: 0, 0
+  index: -1
+goblingirl/left-arm
+  rotate: false
+  xy: 201, 190
   size: 37, 35
   orig: 37, 35
   offset: 0, 0
   index: -1
-goblin/neck
+goblingirl/left-foot
   rotate: false
-  xy: 481, 17
-  size: 36, 41
-  orig: 36, 41
+  xy: 134, 192
+  size: 65, 31
+  orig: 65, 31
   offset: 0, 0
   index: -1
 goblingirl/left-hand
   rotate: false
-  xy: 519, 18
+  xy: 196, 109
   size: 35, 40
   orig: 35, 40
   offset: 0, 0
   index: -1
-goblingirl/right-arm
+goblingirl/left-lower-leg
   rotate: false
-  xy: 556, 8
-  size: 22, 50
-  orig: 28, 50
-  offset: 3, 0
+  xy: 169, 293
+  size: 33, 70
+  orig: 33, 70
+  offset: 0, 0
+  index: -1
+goblingirl/left-shoulder
+  rotate: false
+  xy: 107, 30
+  size: 28, 46
+  orig: 28, 46
+  offset: 0, 0
+  index: -1
+goblingirl/left-upper-leg
+  rotate: false
+  xy: 65, 68
+  size: 33, 70
+  orig: 33, 70
+  offset: 0, 0
   index: -1
 goblingirl/neck
   rotate: false
-  xy: 580, 13
-  size: 33, 41
+  xy: 204, 297
+  size: 35, 41
   orig: 35, 41
   offset: 0, 0
   index: -1
-goblin/left-shoulder
-  rotate: true
-  xy: 615, 25
-  size: 29, 44
-  orig: 29, 44
+goblingirl/pelvis
+  rotate: false
+  xy: 131, 365
+  size: 62, 43
+  orig: 62, 43
   offset: 0, 0
   index: -1
-goblingirl/left-shoulder
-  rotate: true
-  xy: 661, 26
-  size: 28, 45
-  orig: 28, 46
-  offset: 0, 1
-  index: -1
-goblingirl/left-arm
+goblingirl/right-arm
   rotate: false
-  xy: 710, 54
-  size: 37, 35
-  orig: 37, 35
+  xy: 100, 97
+  size: 28, 50
+  orig: 28, 50
   offset: 0, 0
   index: -1
-goblin/right-arm
+goblingirl/right-foot
   rotate: false
-  xy: 708, 2
-  size: 23, 50
-  orig: 23, 50
+  xy: 134, 157
+  size: 63, 33
+  orig: 63, 33
   offset: 0, 0
   index: -1
-goblin/right-hand
+goblingirl/right-hand
   rotate: false
-  xy: 749, 54
+  xy: 199, 151
   size: 36, 37
   orig: 36, 37
   offset: 0, 0
   index: -1
-goblingirl/right-hand
+goblingirl/right-lower-leg
   rotate: false
-  xy: 733, 15
-  size: 35, 37
-  orig: 36, 37
-  offset: 1, 0
+  xy: 96, 279
+  size: 36, 76
+  orig: 36, 76
+  offset: 0, 0
   index: -1
-goblin/undies
+goblingirl/right-shoulder
   rotate: false
-  xy: 787, 62
-  size: 36, 29
-  orig: 36, 29
+  xy: 204, 340
+  size: 39, 45
+  orig: 39, 45
+  offset: 0, 0
+  index: -1
+goblingirl/right-upper-leg
+  rotate: false
+  xy: 98, 149
+  size: 34, 63
+  orig: 34, 63
+  offset: 0, 0
+  index: -1
+goblingirl/torso
+  rotate: false
+  xy: 26, 259
+  size: 68, 96
+  orig: 68, 96
+  offset: 0, 0
+  index: -1
+goblingirl/undie-straps
+  rotate: false
+  xy: 134, 136
+  size: 55, 19
+  orig: 55, 19
   offset: 0, 0
   index: -1
 goblingirl/undies
   rotate: false
-  xy: 825, 62
+  xy: 196, 78
   size: 36, 29
   orig: 36, 29
   offset: 0, 0
   index: -1
-goblingirl/eyes-closed
+shield
   rotate: false
-  xy: 59, 6
-  size: 37, 15
-  orig: 37, 21
+  xy: 26, 185
+  size: 70, 72
+  orig: 70, 72
   offset: 0, 0
   index: -1
-goblin/eyes-closed
-  rotate: true
-  xy: 770, 18
-  size: 34, 12
-  orig: 34, 12
+spear
+  rotate: false
+  xy: 2, 138
+  size: 22, 368
+  orig: 22, 368
   offset: 0, 0
   index: -1

BIN
spine-cocos2dx/example/Resources/ipad/goblins-ffd.png


BIN
spine-cocos2dx/example/Resources/ipad/goblins.png


+ 122 - 94
spine-cocos2dx/example/Resources/ipad/spineboy.atlas

@@ -3,164 +3,192 @@ spineboy.png
 format: RGBA8888
 filter: Linear,Linear
 repeat: none
-head
-  rotate: false
-  xy: 1, 122
-  size: 121, 132
-  orig: 121, 132
+eye_indifferent
+  rotate: true
+  xy: 389, 5
+  size: 56, 53
+  orig: 56, 53
   offset: 0, 0
   index: -1
-torso
+eye_surprised
   rotate: false
-  xy: 1, 28
-  size: 68, 92
-  orig: 68, 92
+  xy: 580, 34
+  size: 56, 53
+  orig: 56, 53
   offset: 0, 0
   index: -1
-left-pant-bottom
+front_bracer
   rotate: false
-  xy: 1, 4
-  size: 44, 22
-  orig: 44, 22
+  xy: 732, 85
+  size: 35, 48
+  orig: 35, 48
   offset: 0, 0
   index: -1
-right-pant-bottom
+front_fist_closed
   rotate: false
-  xy: 47, 8
-  size: 46, 18
-  orig: 46, 18
+  xy: 556, 91
+  size: 45, 49
+  orig: 45, 49
   offset: 0, 0
   index: -1
-right-upper-leg
+front_fist_open
   rotate: false
-  xy: 71, 50
-  size: 44, 70
-  orig: 44, 70
+  xy: 668, 32
+  size: 52, 52
+  orig: 52, 52
   offset: 0, 0
   index: -1
-pelvis
+front_foot
   rotate: false
-  xy: 95, 1
-  size: 63, 47
-  orig: 63, 47
+  xy: 924, 201
+  size: 76, 41
+  orig: 76, 41
   offset: 0, 0
   index: -1
-left-upper-leg
+front_foot_bend1
   rotate: false
-  xy: 117, 53
-  size: 33, 67
-  orig: 33, 67
+  xy: 845, 200
+  size: 77, 42
+  orig: 77, 42
   offset: 0, 0
   index: -1
-right-foot
+front_foot_bend2
   rotate: false
-  xy: 160, 224
-  size: 67, 30
-  orig: 67, 30
+  xy: 778, 186
+  size: 65, 56
+  orig: 65, 56
   offset: 0, 0
   index: -1
-left-shoulder
-  rotate: false
-  xy: 124, 201
-  size: 34, 53
-  orig: 34, 53
+front_shin
+  rotate: true
+  xy: 444, 91
+  size: 49, 110
+  orig: 49, 110
+  offset: 0, 0
+  index: -1
+front_thigh
+  rotate: true
+  xy: 603, 89
+  size: 29, 67
+  orig: 29, 67
+  offset: 0, 0
+  index: -1
+front_upper_arm
+  rotate: true
+  xy: 672, 86
+  size: 32, 58
+  orig: 32, 58
   offset: 0, 0
   index: -1
-left-ankle
+goggles
   rotate: false
-  xy: 229, 222
-  size: 25, 32
-  orig: 25, 32
+  xy: 444, 142
+  size: 157, 100
+  orig: 157, 100
   offset: 0, 0
   index: -1
-left-foot
+gun
   rotate: false
-  xy: 160, 192
-  size: 65, 30
-  orig: 65, 30
+  xy: 603, 120
+  size: 126, 122
+  orig: 126, 122
   offset: 0, 0
   index: -1
-neck
+head
   rotate: false
-  xy: 124, 171
-  size: 34, 28
-  orig: 34, 28
+  xy: 279, 63
+  size: 163, 179
+  orig: 163, 179
   offset: 0, 0
   index: -1
-right-arm
+mouth_grind
   rotate: false
-  xy: 124, 124
-  size: 21, 45
-  orig: 21, 45
+  xy: 845, 163
+  size: 56, 35
+  orig: 56, 35
   offset: 0, 0
   index: -1
-right-ankle
+mouth_oooo
   rotate: false
-  xy: 227, 190
-  size: 25, 30
-  orig: 25, 30
+  xy: 842, 126
+  size: 56, 35
+  orig: 56, 35
   offset: 0, 0
   index: -1
-left-hand
+mouth_smile
   rotate: false
-  xy: 147, 131
-  size: 35, 38
-  orig: 35, 38
+  xy: 769, 97
+  size: 56, 35
+  orig: 56, 35
   offset: 0, 0
   index: -1
-left-arm
+muzzle
   rotate: false
-  xy: 184, 161
-  size: 35, 29
-  orig: 35, 29
+  xy: 2, 2
+  size: 275, 240
+  orig: 277, 240
   offset: 0, 0
   index: -1
-eyes-closed
+neck
   rotate: false
-  xy: 221, 161
-  size: 34, 27
-  orig: 34, 27
+  xy: 903, 173
+  size: 22, 25
+  orig: 22, 25
   offset: 0, 0
   index: -1
-right-lower-leg
+rear_bracer
   rotate: false
-  xy: 152, 65
-  size: 51, 64
-  orig: 51, 64
+  xy: 722, 40
+  size: 34, 43
+  orig: 34, 43
   offset: 0, 0
   index: -1
-right-foot-idle
+rear_foot
   rotate: false
-  xy: 184, 131
-  size: 53, 28
-  orig: 53, 28
+  xy: 444, 11
+  size: 68, 36
+  orig: 68, 36
   offset: 0, 0
   index: -1
-left-lower-leg
+rear_foot_bend1
   rotate: false
-  xy: 205, 65
-  size: 49, 64
-  orig: 49, 64
+  xy: 444, 49
+  size: 70, 40
+  orig: 70, 40
   offset: 0, 0
   index: -1
-right-shoulder
+rear_foot_bend2
   rotate: false
-  xy: 160, 12
-  size: 52, 51
-  orig: 52, 51
+  xy: 778, 134
+  size: 62, 50
+  orig: 62, 50
   offset: 0, 0
   index: -1
-eyes
+rear_shin
   rotate: false
-  xy: 214, 36
-  size: 34, 27
-  orig: 34, 27
+  xy: 731, 135
+  size: 45, 107
+  orig: 45, 107
+  offset: 0, 0
+  index: -1
+rear_thigh
+  rotate: true
+  xy: 516, 50
+  size: 39, 62
+  orig: 39, 62
   offset: 0, 0
   index: -1
-right-hand
+rear_upper_arm
   rotate: false
-  xy: 214, 2
-  size: 32, 32
-  orig: 32, 32
+  xy: 638, 35
+  size: 28, 52
+  orig: 28, 52
+  offset: 0, 0
+  index: -1
+torso
+  rotate: true
+  xy: 279, 2
+  size: 59, 108
+  orig: 59, 108
   offset: 0, 0
   index: -1

BIN
spine-cocos2dx/example/Resources/ipad/spineboy.png


BIN
spine-cocos2dx/example/Resources/ipadhd/goblins.png


+ 0 - 166
spine-cocos2dx/example/Resources/ipadhd/spineboy.atlas

@@ -1,166 +0,0 @@
-
-spineboy.png
-format: RGBA8888
-filter: Linear,Linear
-repeat: none
-head
-  rotate: false
-  xy: 1, 122
-  size: 121, 132
-  orig: 121, 132
-  offset: 0, 0
-  index: -1
-torso
-  rotate: false
-  xy: 1, 28
-  size: 68, 92
-  orig: 68, 92
-  offset: 0, 0
-  index: -1
-left-pant-bottom
-  rotate: false
-  xy: 1, 4
-  size: 44, 22
-  orig: 44, 22
-  offset: 0, 0
-  index: -1
-right-pant-bottom
-  rotate: false
-  xy: 47, 8
-  size: 46, 18
-  orig: 46, 18
-  offset: 0, 0
-  index: -1
-right-upper-leg
-  rotate: false
-  xy: 71, 50
-  size: 44, 70
-  orig: 44, 70
-  offset: 0, 0
-  index: -1
-pelvis
-  rotate: false
-  xy: 95, 1
-  size: 63, 47
-  orig: 63, 47
-  offset: 0, 0
-  index: -1
-left-upper-leg
-  rotate: false
-  xy: 117, 53
-  size: 33, 67
-  orig: 33, 67
-  offset: 0, 0
-  index: -1
-right-foot
-  rotate: false
-  xy: 160, 224
-  size: 67, 30
-  orig: 67, 30
-  offset: 0, 0
-  index: -1
-left-shoulder
-  rotate: false
-  xy: 124, 201
-  size: 34, 53
-  orig: 34, 53
-  offset: 0, 0
-  index: -1
-left-ankle
-  rotate: false
-  xy: 229, 222
-  size: 25, 32
-  orig: 25, 32
-  offset: 0, 0
-  index: -1
-left-foot
-  rotate: false
-  xy: 160, 192
-  size: 65, 30
-  orig: 65, 30
-  offset: 0, 0
-  index: -1
-neck
-  rotate: false
-  xy: 124, 171
-  size: 34, 28
-  orig: 34, 28
-  offset: 0, 0
-  index: -1
-right-arm
-  rotate: false
-  xy: 124, 124
-  size: 21, 45
-  orig: 21, 45
-  offset: 0, 0
-  index: -1
-right-ankle
-  rotate: false
-  xy: 227, 190
-  size: 25, 30
-  orig: 25, 30
-  offset: 0, 0
-  index: -1
-left-hand
-  rotate: false
-  xy: 147, 131
-  size: 35, 38
-  orig: 35, 38
-  offset: 0, 0
-  index: -1
-left-arm
-  rotate: false
-  xy: 184, 161
-  size: 35, 29
-  orig: 35, 29
-  offset: 0, 0
-  index: -1
-eyes-closed
-  rotate: false
-  xy: 221, 161
-  size: 34, 27
-  orig: 34, 27
-  offset: 0, 0
-  index: -1
-right-lower-leg
-  rotate: false
-  xy: 152, 65
-  size: 51, 64
-  orig: 51, 64
-  offset: 0, 0
-  index: -1
-right-foot-idle
-  rotate: false
-  xy: 184, 131
-  size: 53, 28
-  orig: 53, 28
-  offset: 0, 0
-  index: -1
-left-lower-leg
-  rotate: false
-  xy: 205, 65
-  size: 49, 64
-  orig: 49, 64
-  offset: 0, 0
-  index: -1
-right-shoulder
-  rotate: false
-  xy: 160, 12
-  size: 52, 51
-  orig: 52, 51
-  offset: 0, 0
-  index: -1
-eyes
-  rotate: false
-  xy: 214, 36
-  size: 34, 27
-  orig: 34, 27
-  offset: 0, 0
-  index: -1
-right-hand
-  rotate: false
-  xy: 214, 2
-  size: 32, 32
-  orig: 32, 32
-  offset: 0, 0
-  index: -1

BIN
spine-cocos2dx/example/Resources/ipadhd/spineboy.png


+ 180 - 173
spine-cocos2dx/example/Resources/iphone-retina/goblins.atlas → spine-cocos2dx/example/Resources/iphone-retina/goblins-ffd.atlas

@@ -1,285 +1,292 @@
 
-goblins.png
+goblins-ffd.png
 format: RGBA8888
 filter: Linear,Linear
 repeat: none
-spear
-  rotate: true
-  xy: 2, 104
-  size: 22, 368
-  orig: 22, 368
+dagger
+  rotate: false
+  xy: 2, 28
+  size: 26, 108
+  orig: 26, 108
   offset: 0, 0
   index: -1
-goblingirl/head
+goblin/eyes-closed
   rotate: false
-  xy: 2, 23
-  size: 103, 79
-  orig: 103, 81
-  offset: 0, 2
+  xy: 137, 29
+  size: 34, 12
+  orig: 34, 12
+  offset: 0, 0
   index: -1
 goblin/head
   rotate: false
-  xy: 107, 38
-  size: 103, 64
+  xy: 26, 357
+  size: 103, 66
   orig: 103, 66
   offset: 0, 0
   index: -1
-goblin/torso
-  rotate: true
-  xy: 212, 34
-  size: 68, 96
-  orig: 68, 96
+goblin/left-arm
+  rotate: false
+  xy: 30, 28
+  size: 37, 35
+  orig: 37, 35
   offset: 0, 0
   index: -1
-goblin/right-upper-leg
-  rotate: true
-  xy: 107, 2
-  size: 34, 63
-  orig: 34, 63
+goblin/left-foot
+  rotate: false
+  xy: 134, 260
+  size: 65, 31
+  orig: 65, 31
   offset: 0, 0
   index: -1
-goblin/left-lower-leg
-  rotate: true
-  xy: 172, 2
-  size: 30, 70
-  orig: 33, 70
-  offset: 2, 0
-  index: -1
-goblingirl/left-lower-leg
-  rotate: true
-  xy: 244, 2
-  size: 30, 70
-  orig: 33, 70
-  offset: 2, 0
-  index: -1
-goblin/undie-straps
+goblin/left-hand
   rotate: false
-  xy: 2, 2
-  size: 55, 19
-  orig: 55, 19
+  xy: 69, 25
+  size: 36, 41
+  orig: 36, 41
   offset: 0, 0
   index: -1
-dagger
-  rotate: true
-  xy: 372, 100
-  size: 26, 108
-  orig: 156, 238
-  offset: 100, 30
-  index: -1
-goblingirl/torso
-  rotate: true
-  xy: 482, 60
-  size: 66, 96
-  orig: 68, 96
+goblin/left-lower-leg
+  rotate: false
+  xy: 134, 293
+  size: 33, 70
+  orig: 33, 70
   offset: 0, 0
   index: -1
-goblin/right-lower-leg
-  rotate: true
-  xy: 580, 91
-  size: 35, 76
-  orig: 36, 76
-  offset: 1, 0
-  index: -1
-goblingirl/right-lower-leg
-  rotate: true
-  xy: 658, 91
-  size: 35, 76
-  orig: 36, 76
-  offset: 1, 0
+goblin/left-shoulder
+  rotate: false
+  xy: 137, 43
+  size: 29, 44
+  orig: 29, 44
+  offset: 0, 0
   index: -1
 goblin/left-upper-leg
-  rotate: true
-  xy: 736, 93
+  rotate: false
+  xy: 30, 65
   size: 33, 73
   orig: 33, 73
   offset: 0, 0
   index: -1
-goblin/pelvis
-  rotate: true
-  xy: 310, 40
-  size: 62, 43
-  orig: 62, 43
-  offset: 0, 0
-  index: -1
-goblin/left-hand
-  rotate: true
-  xy: 316, 2
+goblin/neck
+  rotate: false
+  xy: 201, 387
   size: 36, 41
   orig: 36, 41
   offset: 0, 0
   index: -1
-goblingirl/left-upper-leg
-  rotate: true
-  xy: 811, 93
-  size: 33, 70
-  orig: 33, 70
-  offset: 0, 0
-  index: -1
-goblin/left-foot
+goblin/pelvis
   rotate: false
-  xy: 883, 95
-  size: 65, 31
-  orig: 65, 31
+  xy: 26, 140
+  size: 62, 43
+  orig: 62, 43
   offset: 0, 0
   index: -1
-goblingirl/left-foot
+goblin/right-arm
   rotate: false
-  xy: 950, 95
-  size: 65, 31
-  orig: 65, 31
+  xy: 171, 84
+  size: 23, 50
+  orig: 23, 50
   offset: 0, 0
   index: -1
 goblin/right-foot
   rotate: false
-  xy: 580, 56
+  xy: 134, 225
   size: 63, 33
   orig: 63, 33
   offset: 0, 0
   index: -1
-goblingirl/right-foot
+goblin/right-hand
   rotate: false
-  xy: 645, 56
-  size: 63, 33
-  orig: 63, 33
+  xy: 204, 258
+  size: 36, 37
+  orig: 36, 37
   offset: 0, 0
   index: -1
-goblingirl/pelvis
+goblin/right-lower-leg
   rotate: false
-  xy: 355, 55
-  size: 59, 43
-  orig: 62, 43
-  offset: 1, 0
+  xy: 201, 430
+  size: 36, 76
+  orig: 36, 76
+  offset: 0, 0
   index: -1
-goblingirl/right-upper-leg
-  rotate: true
-  xy: 416, 64
+goblin/right-shoulder
+  rotate: false
+  xy: 130, 89
+  size: 39, 45
+  orig: 39, 45
+  offset: 0, 0
+  index: -1
+goblin/right-upper-leg
+  rotate: false
+  xy: 98, 214
   size: 34, 63
   orig: 34, 63
   offset: 0, 0
   index: -1
-goblin/right-shoulder
+goblin/torso
   rotate: false
-  xy: 359, 11
-  size: 39, 42
-  orig: 39, 45
+  xy: 131, 410
+  size: 68, 96
+  orig: 68, 96
   offset: 0, 0
   index: -1
-goblingirl/undie-straps
+goblin/undie-straps
   rotate: false
-  xy: 416, 43
+  xy: 2, 7
   size: 55, 19
   orig: 55, 19
   offset: 0, 0
   index: -1
-goblingirl/right-shoulder
-  rotate: true
-  xy: 400, 2
-  size: 39, 42
-  orig: 39, 45
+goblin/undies
+  rotate: false
+  xy: 199, 227
+  size: 36, 29
+  orig: 36, 29
   offset: 0, 0
   index: -1
-goblin/left-arm
-  rotate: true
-  xy: 444, 4
+goblingirl/eyes-closed
+  rotate: false
+  xy: 59, 2
+  size: 37, 21
+  orig: 37, 21
+  offset: 0, 0
+  index: -1
+goblingirl/head
+  rotate: false
+  xy: 26, 425
+  size: 103, 81
+  orig: 103, 81
+  offset: 0, 0
+  index: -1
+goblingirl/left-arm
+  rotate: false
+  xy: 201, 190
   size: 37, 35
   orig: 37, 35
   offset: 0, 0
   index: -1
-goblin/neck
+goblingirl/left-foot
   rotate: false
-  xy: 481, 17
-  size: 36, 41
-  orig: 36, 41
+  xy: 134, 192
+  size: 65, 31
+  orig: 65, 31
   offset: 0, 0
   index: -1
 goblingirl/left-hand
   rotate: false
-  xy: 519, 18
+  xy: 196, 109
   size: 35, 40
   orig: 35, 40
   offset: 0, 0
   index: -1
-goblingirl/right-arm
+goblingirl/left-lower-leg
   rotate: false
-  xy: 556, 8
-  size: 22, 50
-  orig: 28, 50
-  offset: 3, 0
+  xy: 169, 293
+  size: 33, 70
+  orig: 33, 70
+  offset: 0, 0
+  index: -1
+goblingirl/left-shoulder
+  rotate: false
+  xy: 107, 30
+  size: 28, 46
+  orig: 28, 46
+  offset: 0, 0
+  index: -1
+goblingirl/left-upper-leg
+  rotate: false
+  xy: 65, 68
+  size: 33, 70
+  orig: 33, 70
+  offset: 0, 0
   index: -1
 goblingirl/neck
   rotate: false
-  xy: 580, 13
-  size: 33, 41
+  xy: 204, 297
+  size: 35, 41
   orig: 35, 41
   offset: 0, 0
   index: -1
-goblin/left-shoulder
-  rotate: true
-  xy: 615, 25
-  size: 29, 44
-  orig: 29, 44
+goblingirl/pelvis
+  rotate: false
+  xy: 131, 365
+  size: 62, 43
+  orig: 62, 43
   offset: 0, 0
   index: -1
-goblingirl/left-shoulder
-  rotate: true
-  xy: 661, 26
-  size: 28, 45
-  orig: 28, 46
-  offset: 0, 1
-  index: -1
-goblingirl/left-arm
+goblingirl/right-arm
   rotate: false
-  xy: 710, 54
-  size: 37, 35
-  orig: 37, 35
+  xy: 100, 97
+  size: 28, 50
+  orig: 28, 50
   offset: 0, 0
   index: -1
-goblin/right-arm
+goblingirl/right-foot
   rotate: false
-  xy: 708, 2
-  size: 23, 50
-  orig: 23, 50
+  xy: 134, 157
+  size: 63, 33
+  orig: 63, 33
   offset: 0, 0
   index: -1
-goblin/right-hand
+goblingirl/right-hand
   rotate: false
-  xy: 749, 54
+  xy: 199, 151
   size: 36, 37
   orig: 36, 37
   offset: 0, 0
   index: -1
-goblingirl/right-hand
+goblingirl/right-lower-leg
   rotate: false
-  xy: 733, 15
-  size: 35, 37
-  orig: 36, 37
-  offset: 1, 0
+  xy: 96, 279
+  size: 36, 76
+  orig: 36, 76
+  offset: 0, 0
   index: -1
-goblin/undies
+goblingirl/right-shoulder
   rotate: false
-  xy: 787, 62
-  size: 36, 29
-  orig: 36, 29
+  xy: 204, 340
+  size: 39, 45
+  orig: 39, 45
+  offset: 0, 0
+  index: -1
+goblingirl/right-upper-leg
+  rotate: false
+  xy: 98, 149
+  size: 34, 63
+  orig: 34, 63
+  offset: 0, 0
+  index: -1
+goblingirl/torso
+  rotate: false
+  xy: 26, 259
+  size: 68, 96
+  orig: 68, 96
+  offset: 0, 0
+  index: -1
+goblingirl/undie-straps
+  rotate: false
+  xy: 134, 136
+  size: 55, 19
+  orig: 55, 19
   offset: 0, 0
   index: -1
 goblingirl/undies
   rotate: false
-  xy: 825, 62
+  xy: 196, 78
   size: 36, 29
   orig: 36, 29
   offset: 0, 0
   index: -1
-goblingirl/eyes-closed
+shield
   rotate: false
-  xy: 59, 6
-  size: 37, 15
-  orig: 37, 21
+  xy: 26, 185
+  size: 70, 72
+  orig: 70, 72
   offset: 0, 0
   index: -1
-goblin/eyes-closed
-  rotate: true
-  xy: 770, 18
-  size: 34, 12
-  orig: 34, 12
+spear
+  rotate: false
+  xy: 2, 138
+  size: 22, 368
+  orig: 22, 368
   offset: 0, 0
   index: -1

BIN
spine-cocos2dx/example/Resources/iphone-retina/goblins-ffd.png


BIN
spine-cocos2dx/example/Resources/iphone-retina/goblins.png


+ 122 - 94
spine-cocos2dx/example/Resources/iphone-retina/spineboy.atlas

@@ -3,164 +3,192 @@ spineboy.png
 format: RGBA8888
 filter: Linear,Linear
 repeat: none
-head
-  rotate: false
-  xy: 1, 122
-  size: 121, 132
-  orig: 121, 132
+eye_indifferent
+  rotate: true
+  xy: 389, 5
+  size: 56, 53
+  orig: 56, 53
   offset: 0, 0
   index: -1
-torso
+eye_surprised
   rotate: false
-  xy: 1, 28
-  size: 68, 92
-  orig: 68, 92
+  xy: 580, 34
+  size: 56, 53
+  orig: 56, 53
   offset: 0, 0
   index: -1
-left-pant-bottom
+front_bracer
   rotate: false
-  xy: 1, 4
-  size: 44, 22
-  orig: 44, 22
+  xy: 732, 85
+  size: 35, 48
+  orig: 35, 48
   offset: 0, 0
   index: -1
-right-pant-bottom
+front_fist_closed
   rotate: false
-  xy: 47, 8
-  size: 46, 18
-  orig: 46, 18
+  xy: 556, 91
+  size: 45, 49
+  orig: 45, 49
   offset: 0, 0
   index: -1
-right-upper-leg
+front_fist_open
   rotate: false
-  xy: 71, 50
-  size: 44, 70
-  orig: 44, 70
+  xy: 668, 32
+  size: 52, 52
+  orig: 52, 52
   offset: 0, 0
   index: -1
-pelvis
+front_foot
   rotate: false
-  xy: 95, 1
-  size: 63, 47
-  orig: 63, 47
+  xy: 924, 201
+  size: 76, 41
+  orig: 76, 41
   offset: 0, 0
   index: -1
-left-upper-leg
+front_foot_bend1
   rotate: false
-  xy: 117, 53
-  size: 33, 67
-  orig: 33, 67
+  xy: 845, 200
+  size: 77, 42
+  orig: 77, 42
   offset: 0, 0
   index: -1
-right-foot
+front_foot_bend2
   rotate: false
-  xy: 160, 224
-  size: 67, 30
-  orig: 67, 30
+  xy: 778, 186
+  size: 65, 56
+  orig: 65, 56
   offset: 0, 0
   index: -1
-left-shoulder
-  rotate: false
-  xy: 124, 201
-  size: 34, 53
-  orig: 34, 53
+front_shin
+  rotate: true
+  xy: 444, 91
+  size: 49, 110
+  orig: 49, 110
+  offset: 0, 0
+  index: -1
+front_thigh
+  rotate: true
+  xy: 603, 89
+  size: 29, 67
+  orig: 29, 67
+  offset: 0, 0
+  index: -1
+front_upper_arm
+  rotate: true
+  xy: 672, 86
+  size: 32, 58
+  orig: 32, 58
   offset: 0, 0
   index: -1
-left-ankle
+goggles
   rotate: false
-  xy: 229, 222
-  size: 25, 32
-  orig: 25, 32
+  xy: 444, 142
+  size: 157, 100
+  orig: 157, 100
   offset: 0, 0
   index: -1
-left-foot
+gun
   rotate: false
-  xy: 160, 192
-  size: 65, 30
-  orig: 65, 30
+  xy: 603, 120
+  size: 126, 122
+  orig: 126, 122
   offset: 0, 0
   index: -1
-neck
+head
   rotate: false
-  xy: 124, 171
-  size: 34, 28
-  orig: 34, 28
+  xy: 279, 63
+  size: 163, 179
+  orig: 163, 179
   offset: 0, 0
   index: -1
-right-arm
+mouth_grind
   rotate: false
-  xy: 124, 124
-  size: 21, 45
-  orig: 21, 45
+  xy: 845, 163
+  size: 56, 35
+  orig: 56, 35
   offset: 0, 0
   index: -1
-right-ankle
+mouth_oooo
   rotate: false
-  xy: 227, 190
-  size: 25, 30
-  orig: 25, 30
+  xy: 842, 126
+  size: 56, 35
+  orig: 56, 35
   offset: 0, 0
   index: -1
-left-hand
+mouth_smile
   rotate: false
-  xy: 147, 131
-  size: 35, 38
-  orig: 35, 38
+  xy: 769, 97
+  size: 56, 35
+  orig: 56, 35
   offset: 0, 0
   index: -1
-left-arm
+muzzle
   rotate: false
-  xy: 184, 161
-  size: 35, 29
-  orig: 35, 29
+  xy: 2, 2
+  size: 275, 240
+  orig: 277, 240
   offset: 0, 0
   index: -1
-eyes-closed
+neck
   rotate: false
-  xy: 221, 161
-  size: 34, 27
-  orig: 34, 27
+  xy: 903, 173
+  size: 22, 25
+  orig: 22, 25
   offset: 0, 0
   index: -1
-right-lower-leg
+rear_bracer
   rotate: false
-  xy: 152, 65
-  size: 51, 64
-  orig: 51, 64
+  xy: 722, 40
+  size: 34, 43
+  orig: 34, 43
   offset: 0, 0
   index: -1
-right-foot-idle
+rear_foot
   rotate: false
-  xy: 184, 131
-  size: 53, 28
-  orig: 53, 28
+  xy: 444, 11
+  size: 68, 36
+  orig: 68, 36
   offset: 0, 0
   index: -1
-left-lower-leg
+rear_foot_bend1
   rotate: false
-  xy: 205, 65
-  size: 49, 64
-  orig: 49, 64
+  xy: 444, 49
+  size: 70, 40
+  orig: 70, 40
   offset: 0, 0
   index: -1
-right-shoulder
+rear_foot_bend2
   rotate: false
-  xy: 160, 12
-  size: 52, 51
-  orig: 52, 51
+  xy: 778, 134
+  size: 62, 50
+  orig: 62, 50
   offset: 0, 0
   index: -1
-eyes
+rear_shin
   rotate: false
-  xy: 214, 36
-  size: 34, 27
-  orig: 34, 27
+  xy: 731, 135
+  size: 45, 107
+  orig: 45, 107
+  offset: 0, 0
+  index: -1
+rear_thigh
+  rotate: true
+  xy: 516, 50
+  size: 39, 62
+  orig: 39, 62
   offset: 0, 0
   index: -1
-right-hand
+rear_upper_arm
   rotate: false
-  xy: 214, 2
-  size: 32, 32
-  orig: 32, 32
+  xy: 638, 35
+  size: 28, 52
+  orig: 28, 52
+  offset: 0, 0
+  index: -1
+torso
+  rotate: true
+  xy: 279, 2
+  size: 59, 108
+  orig: 59, 108
   offset: 0, 0
   index: -1

BIN
spine-cocos2dx/example/Resources/iphone-retina/spineboy.png


+ 180 - 173
spine-cocos2dx/example/Resources/ipadhd/goblins.atlas → spine-cocos2dx/example/Resources/iphone/goblins-ffd.atlas

@@ -1,285 +1,292 @@
 
-goblins.png
+goblins-ffd.png
 format: RGBA8888
 filter: Linear,Linear
 repeat: none
-spear
-  rotate: true
-  xy: 2, 104
-  size: 22, 368
-  orig: 22, 368
+dagger
+  rotate: false
+  xy: 2, 28
+  size: 26, 108
+  orig: 26, 108
   offset: 0, 0
   index: -1
-goblingirl/head
+goblin/eyes-closed
   rotate: false
-  xy: 2, 23
-  size: 103, 79
-  orig: 103, 81
-  offset: 0, 2
+  xy: 137, 29
+  size: 34, 12
+  orig: 34, 12
+  offset: 0, 0
   index: -1
 goblin/head
   rotate: false
-  xy: 107, 38
-  size: 103, 64
+  xy: 26, 357
+  size: 103, 66
   orig: 103, 66
   offset: 0, 0
   index: -1
-goblin/torso
-  rotate: true
-  xy: 212, 34
-  size: 68, 96
-  orig: 68, 96
+goblin/left-arm
+  rotate: false
+  xy: 30, 28
+  size: 37, 35
+  orig: 37, 35
   offset: 0, 0
   index: -1
-goblin/right-upper-leg
-  rotate: true
-  xy: 107, 2
-  size: 34, 63
-  orig: 34, 63
+goblin/left-foot
+  rotate: false
+  xy: 134, 260
+  size: 65, 31
+  orig: 65, 31
   offset: 0, 0
   index: -1
-goblin/left-lower-leg
-  rotate: true
-  xy: 172, 2
-  size: 30, 70
-  orig: 33, 70
-  offset: 2, 0
-  index: -1
-goblingirl/left-lower-leg
-  rotate: true
-  xy: 244, 2
-  size: 30, 70
-  orig: 33, 70
-  offset: 2, 0
-  index: -1
-goblin/undie-straps
+goblin/left-hand
   rotate: false
-  xy: 2, 2
-  size: 55, 19
-  orig: 55, 19
+  xy: 69, 25
+  size: 36, 41
+  orig: 36, 41
   offset: 0, 0
   index: -1
-dagger
-  rotate: true
-  xy: 372, 100
-  size: 26, 108
-  orig: 156, 238
-  offset: 100, 30
-  index: -1
-goblingirl/torso
-  rotate: true
-  xy: 482, 60
-  size: 66, 96
-  orig: 68, 96
+goblin/left-lower-leg
+  rotate: false
+  xy: 134, 293
+  size: 33, 70
+  orig: 33, 70
   offset: 0, 0
   index: -1
-goblin/right-lower-leg
-  rotate: true
-  xy: 580, 91
-  size: 35, 76
-  orig: 36, 76
-  offset: 1, 0
-  index: -1
-goblingirl/right-lower-leg
-  rotate: true
-  xy: 658, 91
-  size: 35, 76
-  orig: 36, 76
-  offset: 1, 0
+goblin/left-shoulder
+  rotate: false
+  xy: 137, 43
+  size: 29, 44
+  orig: 29, 44
+  offset: 0, 0
   index: -1
 goblin/left-upper-leg
-  rotate: true
-  xy: 736, 93
+  rotate: false
+  xy: 30, 65
   size: 33, 73
   orig: 33, 73
   offset: 0, 0
   index: -1
-goblin/pelvis
-  rotate: true
-  xy: 310, 40
-  size: 62, 43
-  orig: 62, 43
-  offset: 0, 0
-  index: -1
-goblin/left-hand
-  rotate: true
-  xy: 316, 2
+goblin/neck
+  rotate: false
+  xy: 201, 387
   size: 36, 41
   orig: 36, 41
   offset: 0, 0
   index: -1
-goblingirl/left-upper-leg
-  rotate: true
-  xy: 811, 93
-  size: 33, 70
-  orig: 33, 70
-  offset: 0, 0
-  index: -1
-goblin/left-foot
+goblin/pelvis
   rotate: false
-  xy: 883, 95
-  size: 65, 31
-  orig: 65, 31
+  xy: 26, 140
+  size: 62, 43
+  orig: 62, 43
   offset: 0, 0
   index: -1
-goblingirl/left-foot
+goblin/right-arm
   rotate: false
-  xy: 950, 95
-  size: 65, 31
-  orig: 65, 31
+  xy: 171, 84
+  size: 23, 50
+  orig: 23, 50
   offset: 0, 0
   index: -1
 goblin/right-foot
   rotate: false
-  xy: 580, 56
+  xy: 134, 225
   size: 63, 33
   orig: 63, 33
   offset: 0, 0
   index: -1
-goblingirl/right-foot
+goblin/right-hand
   rotate: false
-  xy: 645, 56
-  size: 63, 33
-  orig: 63, 33
+  xy: 204, 258
+  size: 36, 37
+  orig: 36, 37
   offset: 0, 0
   index: -1
-goblingirl/pelvis
+goblin/right-lower-leg
   rotate: false
-  xy: 355, 55
-  size: 59, 43
-  orig: 62, 43
-  offset: 1, 0
+  xy: 201, 430
+  size: 36, 76
+  orig: 36, 76
+  offset: 0, 0
   index: -1
-goblingirl/right-upper-leg
-  rotate: true
-  xy: 416, 64
+goblin/right-shoulder
+  rotate: false
+  xy: 130, 89
+  size: 39, 45
+  orig: 39, 45
+  offset: 0, 0
+  index: -1
+goblin/right-upper-leg
+  rotate: false
+  xy: 98, 214
   size: 34, 63
   orig: 34, 63
   offset: 0, 0
   index: -1
-goblin/right-shoulder
+goblin/torso
   rotate: false
-  xy: 359, 11
-  size: 39, 42
-  orig: 39, 45
+  xy: 131, 410
+  size: 68, 96
+  orig: 68, 96
   offset: 0, 0
   index: -1
-goblingirl/undie-straps
+goblin/undie-straps
   rotate: false
-  xy: 416, 43
+  xy: 2, 7
   size: 55, 19
   orig: 55, 19
   offset: 0, 0
   index: -1
-goblingirl/right-shoulder
-  rotate: true
-  xy: 400, 2
-  size: 39, 42
-  orig: 39, 45
+goblin/undies
+  rotate: false
+  xy: 199, 227
+  size: 36, 29
+  orig: 36, 29
   offset: 0, 0
   index: -1
-goblin/left-arm
-  rotate: true
-  xy: 444, 4
+goblingirl/eyes-closed
+  rotate: false
+  xy: 59, 2
+  size: 37, 21
+  orig: 37, 21
+  offset: 0, 0
+  index: -1
+goblingirl/head
+  rotate: false
+  xy: 26, 425
+  size: 103, 81
+  orig: 103, 81
+  offset: 0, 0
+  index: -1
+goblingirl/left-arm
+  rotate: false
+  xy: 201, 190
   size: 37, 35
   orig: 37, 35
   offset: 0, 0
   index: -1
-goblin/neck
+goblingirl/left-foot
   rotate: false
-  xy: 481, 17
-  size: 36, 41
-  orig: 36, 41
+  xy: 134, 192
+  size: 65, 31
+  orig: 65, 31
   offset: 0, 0
   index: -1
 goblingirl/left-hand
   rotate: false
-  xy: 519, 18
+  xy: 196, 109
   size: 35, 40
   orig: 35, 40
   offset: 0, 0
   index: -1
-goblingirl/right-arm
+goblingirl/left-lower-leg
   rotate: false
-  xy: 556, 8
-  size: 22, 50
-  orig: 28, 50
-  offset: 3, 0
+  xy: 169, 293
+  size: 33, 70
+  orig: 33, 70
+  offset: 0, 0
+  index: -1
+goblingirl/left-shoulder
+  rotate: false
+  xy: 107, 30
+  size: 28, 46
+  orig: 28, 46
+  offset: 0, 0
+  index: -1
+goblingirl/left-upper-leg
+  rotate: false
+  xy: 65, 68
+  size: 33, 70
+  orig: 33, 70
+  offset: 0, 0
   index: -1
 goblingirl/neck
   rotate: false
-  xy: 580, 13
-  size: 33, 41
+  xy: 204, 297
+  size: 35, 41
   orig: 35, 41
   offset: 0, 0
   index: -1
-goblin/left-shoulder
-  rotate: true
-  xy: 615, 25
-  size: 29, 44
-  orig: 29, 44
+goblingirl/pelvis
+  rotate: false
+  xy: 131, 365
+  size: 62, 43
+  orig: 62, 43
   offset: 0, 0
   index: -1
-goblingirl/left-shoulder
-  rotate: true
-  xy: 661, 26
-  size: 28, 45
-  orig: 28, 46
-  offset: 0, 1
-  index: -1
-goblingirl/left-arm
+goblingirl/right-arm
   rotate: false
-  xy: 710, 54
-  size: 37, 35
-  orig: 37, 35
+  xy: 100, 97
+  size: 28, 50
+  orig: 28, 50
   offset: 0, 0
   index: -1
-goblin/right-arm
+goblingirl/right-foot
   rotate: false
-  xy: 708, 2
-  size: 23, 50
-  orig: 23, 50
+  xy: 134, 157
+  size: 63, 33
+  orig: 63, 33
   offset: 0, 0
   index: -1
-goblin/right-hand
+goblingirl/right-hand
   rotate: false
-  xy: 749, 54
+  xy: 199, 151
   size: 36, 37
   orig: 36, 37
   offset: 0, 0
   index: -1
-goblingirl/right-hand
+goblingirl/right-lower-leg
   rotate: false
-  xy: 733, 15
-  size: 35, 37
-  orig: 36, 37
-  offset: 1, 0
+  xy: 96, 279
+  size: 36, 76
+  orig: 36, 76
+  offset: 0, 0
   index: -1
-goblin/undies
+goblingirl/right-shoulder
   rotate: false
-  xy: 787, 62
-  size: 36, 29
-  orig: 36, 29
+  xy: 204, 340
+  size: 39, 45
+  orig: 39, 45
+  offset: 0, 0
+  index: -1
+goblingirl/right-upper-leg
+  rotate: false
+  xy: 98, 149
+  size: 34, 63
+  orig: 34, 63
+  offset: 0, 0
+  index: -1
+goblingirl/torso
+  rotate: false
+  xy: 26, 259
+  size: 68, 96
+  orig: 68, 96
+  offset: 0, 0
+  index: -1
+goblingirl/undie-straps
+  rotate: false
+  xy: 134, 136
+  size: 55, 19
+  orig: 55, 19
   offset: 0, 0
   index: -1
 goblingirl/undies
   rotate: false
-  xy: 825, 62
+  xy: 196, 78
   size: 36, 29
   orig: 36, 29
   offset: 0, 0
   index: -1
-goblingirl/eyes-closed
+shield
   rotate: false
-  xy: 59, 6
-  size: 37, 15
-  orig: 37, 21
+  xy: 26, 185
+  size: 70, 72
+  orig: 70, 72
   offset: 0, 0
   index: -1
-goblin/eyes-closed
-  rotate: true
-  xy: 770, 18
-  size: 34, 12
-  orig: 34, 12
+spear
+  rotate: false
+  xy: 2, 138
+  size: 22, 368
+  orig: 22, 368
   offset: 0, 0
   index: -1

BIN
spine-cocos2dx/example/Resources/iphone/goblins-ffd.png


BIN
spine-cocos2dx/example/Resources/iphone/goblins.png


+ 122 - 94
spine-cocos2dx/example/Resources/iphone/spineboy.atlas

@@ -3,164 +3,192 @@ spineboy.png
 format: RGBA8888
 filter: Linear,Linear
 repeat: none
-head
-  rotate: false
-  xy: 1, 122
-  size: 121, 132
-  orig: 121, 132
+eye_indifferent
+  rotate: true
+  xy: 389, 5
+  size: 56, 53
+  orig: 56, 53
   offset: 0, 0
   index: -1
-torso
+eye_surprised
   rotate: false
-  xy: 1, 28
-  size: 68, 92
-  orig: 68, 92
+  xy: 580, 34
+  size: 56, 53
+  orig: 56, 53
   offset: 0, 0
   index: -1
-left-pant-bottom
+front_bracer
   rotate: false
-  xy: 1, 4
-  size: 44, 22
-  orig: 44, 22
+  xy: 732, 85
+  size: 35, 48
+  orig: 35, 48
   offset: 0, 0
   index: -1
-right-pant-bottom
+front_fist_closed
   rotate: false
-  xy: 47, 8
-  size: 46, 18
-  orig: 46, 18
+  xy: 556, 91
+  size: 45, 49
+  orig: 45, 49
   offset: 0, 0
   index: -1
-right-upper-leg
+front_fist_open
   rotate: false
-  xy: 71, 50
-  size: 44, 70
-  orig: 44, 70
+  xy: 668, 32
+  size: 52, 52
+  orig: 52, 52
   offset: 0, 0
   index: -1
-pelvis
+front_foot
   rotate: false
-  xy: 95, 1
-  size: 63, 47
-  orig: 63, 47
+  xy: 924, 201
+  size: 76, 41
+  orig: 76, 41
   offset: 0, 0
   index: -1
-left-upper-leg
+front_foot_bend1
   rotate: false
-  xy: 117, 53
-  size: 33, 67
-  orig: 33, 67
+  xy: 845, 200
+  size: 77, 42
+  orig: 77, 42
   offset: 0, 0
   index: -1
-right-foot
+front_foot_bend2
   rotate: false
-  xy: 160, 224
-  size: 67, 30
-  orig: 67, 30
+  xy: 778, 186
+  size: 65, 56
+  orig: 65, 56
   offset: 0, 0
   index: -1
-left-shoulder
-  rotate: false
-  xy: 124, 201
-  size: 34, 53
-  orig: 34, 53
+front_shin
+  rotate: true
+  xy: 444, 91
+  size: 49, 110
+  orig: 49, 110
+  offset: 0, 0
+  index: -1
+front_thigh
+  rotate: true
+  xy: 603, 89
+  size: 29, 67
+  orig: 29, 67
+  offset: 0, 0
+  index: -1
+front_upper_arm
+  rotate: true
+  xy: 672, 86
+  size: 32, 58
+  orig: 32, 58
   offset: 0, 0
   index: -1
-left-ankle
+goggles
   rotate: false
-  xy: 229, 222
-  size: 25, 32
-  orig: 25, 32
+  xy: 444, 142
+  size: 157, 100
+  orig: 157, 100
   offset: 0, 0
   index: -1
-left-foot
+gun
   rotate: false
-  xy: 160, 192
-  size: 65, 30
-  orig: 65, 30
+  xy: 603, 120
+  size: 126, 122
+  orig: 126, 122
   offset: 0, 0
   index: -1
-neck
+head
   rotate: false
-  xy: 124, 171
-  size: 34, 28
-  orig: 34, 28
+  xy: 279, 63
+  size: 163, 179
+  orig: 163, 179
   offset: 0, 0
   index: -1
-right-arm
+mouth_grind
   rotate: false
-  xy: 124, 124
-  size: 21, 45
-  orig: 21, 45
+  xy: 845, 163
+  size: 56, 35
+  orig: 56, 35
   offset: 0, 0
   index: -1
-right-ankle
+mouth_oooo
   rotate: false
-  xy: 227, 190
-  size: 25, 30
-  orig: 25, 30
+  xy: 842, 126
+  size: 56, 35
+  orig: 56, 35
   offset: 0, 0
   index: -1
-left-hand
+mouth_smile
   rotate: false
-  xy: 147, 131
-  size: 35, 38
-  orig: 35, 38
+  xy: 769, 97
+  size: 56, 35
+  orig: 56, 35
   offset: 0, 0
   index: -1
-left-arm
+muzzle
   rotate: false
-  xy: 184, 161
-  size: 35, 29
-  orig: 35, 29
+  xy: 2, 2
+  size: 275, 240
+  orig: 277, 240
   offset: 0, 0
   index: -1
-eyes-closed
+neck
   rotate: false
-  xy: 221, 161
-  size: 34, 27
-  orig: 34, 27
+  xy: 903, 173
+  size: 22, 25
+  orig: 22, 25
   offset: 0, 0
   index: -1
-right-lower-leg
+rear_bracer
   rotate: false
-  xy: 152, 65
-  size: 51, 64
-  orig: 51, 64
+  xy: 722, 40
+  size: 34, 43
+  orig: 34, 43
   offset: 0, 0
   index: -1
-right-foot-idle
+rear_foot
   rotate: false
-  xy: 184, 131
-  size: 53, 28
-  orig: 53, 28
+  xy: 444, 11
+  size: 68, 36
+  orig: 68, 36
   offset: 0, 0
   index: -1
-left-lower-leg
+rear_foot_bend1
   rotate: false
-  xy: 205, 65
-  size: 49, 64
-  orig: 49, 64
+  xy: 444, 49
+  size: 70, 40
+  orig: 70, 40
   offset: 0, 0
   index: -1
-right-shoulder
+rear_foot_bend2
   rotate: false
-  xy: 160, 12
-  size: 52, 51
-  orig: 52, 51
+  xy: 778, 134
+  size: 62, 50
+  orig: 62, 50
   offset: 0, 0
   index: -1
-eyes
+rear_shin
   rotate: false
-  xy: 214, 36
-  size: 34, 27
-  orig: 34, 27
+  xy: 731, 135
+  size: 45, 107
+  orig: 45, 107
+  offset: 0, 0
+  index: -1
+rear_thigh
+  rotate: true
+  xy: 516, 50
+  size: 39, 62
+  orig: 39, 62
   offset: 0, 0
   index: -1
-right-hand
+rear_upper_arm
   rotate: false
-  xy: 214, 2
-  size: 32, 32
-  orig: 32, 32
+  xy: 638, 35
+  size: 28, 52
+  orig: 28, 52
+  offset: 0, 0
+  index: -1
+torso
+  rotate: true
+  xy: 279, 2
+  size: 59, 108
+  orig: 59, 108
   offset: 0, 0
   index: -1

BIN
spine-cocos2dx/example/Resources/iphone/spineboy.png


BIN
spine-cocos2dx/example/proj.win32/Debug/spine-c.lib


+ 6 - 5
spine-cocos2dx/example/proj.win32/main.cpp

@@ -1,6 +1,5 @@
 #include "main.h"
 #include "../Classes/AppDelegate.h"
-#include "CCEGLView.h"
 
 USING_NS_CC;
 
@@ -14,8 +13,10 @@ int APIENTRY _tWinMain(HINSTANCE hInstance,
 
 	// create the application instance
 	AppDelegate app;
-	CCEGLView* eglView = CCEGLView::sharedOpenGLView();
-	eglView->setViewName("SpineExample");
-	eglView->setFrameSize(960, 640);
-	return CCApplication::sharedApplication()->run();
+
+	auto director = Director::getInstance();
+	auto glview = GLView::create("Spine Example");
+	glview->setFrameSize(960, 640);
+	director->setOpenGLView(glview);
+	return Application::getInstance()->run();
 }

+ 0 - 2
spine-cocos2dx/example/proj.win32/main.h

@@ -6,6 +6,4 @@
 #include <windows.h>
 #include <tchar.h>
 
-#include "CCStdC.h"
-
 #endif    // __MAIN_H__

+ 27 - 6
spine-cocos2dx/example/proj.win32/spine-cocos2dx.sln

@@ -1,9 +1,16 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio Express 2012 for Windows Desktop
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcocos2d", "..\..\cocos2dx\proj.win32\cocos2d.vcxproj", "{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}"
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spine-cocos2dx", "spine-cocos2dx.vcxproj", "{DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}"
+	ProjectSection(ProjectDependencies) = postProject
+		{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E} = {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcocos2d", "..\..\cocos2dx\cocos\2d\cocos2d.vcxproj", "{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libchipmunk", "..\..\cocos2dx\external\chipmunk\proj.win32\chipmunk.vcxproj", "{207BC7A9-CCF1-4F2F-A04D-45F72242AE25}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spine-c", "..\..\..\spine-c\spine-c.vcxproj", "{5D74934A-7512-45EE-8402-7B95D3642E85}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -11,14 +18,22 @@ Global
 		Release|Win32 = Release|Win32
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Win32.ActiveCfg = Debug|Win32
-		{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Win32.Build.0 = Debug|Win32
-		{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Win32.ActiveCfg = Release|Win32
-		{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Win32.Build.0 = Release|Win32
 		{DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Debug|Win32.ActiveCfg = Debug|Win32
 		{DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Debug|Win32.Build.0 = Debug|Win32
 		{DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Release|Win32.ActiveCfg = Release|Win32
 		{DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Release|Win32.Build.0 = Release|Win32
+		{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Win32.Build.0 = Debug|Win32
+		{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Win32.ActiveCfg = Release|Win32
+		{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Win32.Build.0 = Release|Win32
+		{207BC7A9-CCF1-4F2F-A04D-45F72242AE25}.Debug|Win32.ActiveCfg = Debug|Win32
+		{207BC7A9-CCF1-4F2F-A04D-45F72242AE25}.Debug|Win32.Build.0 = Debug|Win32
+		{207BC7A9-CCF1-4F2F-A04D-45F72242AE25}.Release|Win32.ActiveCfg = Release|Win32
+		{207BC7A9-CCF1-4F2F-A04D-45F72242AE25}.Release|Win32.Build.0 = Release|Win32
+		{5D74934A-7512-45EE-8402-7B95D3642E85}.Debug|Win32.ActiveCfg = Debug|Win32
+		{5D74934A-7512-45EE-8402-7B95D3642E85}.Debug|Win32.Build.0 = Debug|Win32
+		{5D74934A-7512-45EE-8402-7B95D3642E85}.Release|Win32.ActiveCfg = Release|Win32
+		{5D74934A-7512-45EE-8402-7B95D3642E85}.Release|Win32.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -29,4 +44,10 @@ Global
 	GlobalSection(DPCodeReviewSolutionGUID) = preSolution
 		DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
 	EndGlobalSection
+	GlobalSection(DPCodeReviewSolutionGUID) = preSolution
+		DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
+	EndGlobalSection
+	GlobalSection(DPCodeReviewSolutionGUID) = preSolution
+		DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
+	EndGlobalSection
 EndGlobal

+ 23 - 52
spine-cocos2dx/example/proj.win32/spine-cocos2dx.vcxproj

@@ -37,9 +37,13 @@
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\..\cocos2dx\cocos\2d\cocos2dx.props" />
+    <Import Project="..\..\cocos2dx\cocos\2d\cocos2d_headers.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="..\..\cocos2dx\cocos\2d\cocos2dx.props" />
+    <Import Project="..\..\cocos2dx\cocos\2d\cocos2d_headers.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
@@ -66,7 +70,7 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>$(ProjectDir)..\..\cocos2dx;$(ProjectDir)..\..\cocos2dx\include;$(ProjectDir)..\..\cocos2dx\kazmath\include;$(ProjectDir)..\..\cocos2dx\platform\win32;$(ProjectDir)..\..\cocos2dx\platform\third_party\win32\OGLES;$(ProjectDir)..\Classes;$(ProjectDir)..\..\src;$(ProjectDir)..\..\..\spine-c\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>$(ProjectDir)..\Classes;$(ProjectDir)..\..\src;$(ProjectDir)..\..\..\spine-c\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;COCOS2D_DEBUG=1;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -79,7 +83,7 @@
       <CompileAs>CompileAsCpp</CompileAs>
     </ClCompile>
     <Link>
-      <AdditionalDependencies>opengl32.lib;glew32.lib;libcocos2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(ProjectName).exe</OutputFile>
       <AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <GenerateDebugInformation>true</GenerateDebugInformation>
@@ -88,6 +92,7 @@
       <EntryPointSymbol>
       </EntryPointSymbol>
       <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+      <IgnoreSpecificDefaultLibraries>libcmt.lib;msvcrt.lib;libcmtd.lib</IgnoreSpecificDefaultLibraries>
     </Link>
     <PostBuildEvent>
       <Command>
@@ -124,31 +129,8 @@
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClInclude Include="..\..\..\spine-c\include\spine\Animation.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\AnimationState.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\AnimationStateData.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\Atlas.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\AtlasAttachmentLoader.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\Attachment.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\AttachmentLoader.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\Bone.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\BoneData.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\BoundingBoxAttachment.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\Event.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\EventData.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\extension.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\RegionAttachment.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\Skeleton.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\SkeletonBounds.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\SkeletonData.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\SkeletonJson.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\Skin.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\Slot.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\SlotData.h" />
-    <ClInclude Include="..\..\..\spine-c\include\spine\spine.h" />
-    <ClInclude Include="..\..\..\spine-c\src\spine\Json.h" />
-    <ClInclude Include="..\..\src\spine\CCSkeleton.h" />
-    <ClInclude Include="..\..\src\spine\CCSkeletonAnimation.h" />
+    <ClInclude Include="..\..\src\spine\SkeletonAnimation.h" />
+    <ClInclude Include="..\..\src\spine\SkeletonRenderer.h" />
     <ClInclude Include="..\..\src\spine\spine-cocos2dx.h" />
     <ClInclude Include="..\Classes\AppDelegate.h" />
     <ClInclude Include="..\Classes\AppMacros.h" />
@@ -156,38 +138,27 @@
     <ClInclude Include="main.h" />
   </ItemGroup>
   <ItemGroup>
-    <ClCompile Include="..\..\..\spine-c\src\spine\Animation.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\AnimationState.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\AnimationStateData.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\Atlas.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\AtlasAttachmentLoader.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\Attachment.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\AttachmentLoader.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\Bone.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\BoneData.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\BoundingBoxAttachment.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\Event.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\EventData.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\extension.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\Json.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\RegionAttachment.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\Skeleton.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\SkeletonBounds.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\SkeletonData.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\SkeletonJson.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\Skin.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\Slot.c" />
-    <ClCompile Include="..\..\..\spine-c\src\spine\SlotData.c" />
-    <ClCompile Include="..\..\src\spine\CCSkeleton.cpp" />
-    <ClCompile Include="..\..\src\spine\CCSkeletonAnimation.cpp" />
+    <ClCompile Include="..\..\src\spine\SkeletonAnimation.cpp" />
+    <ClCompile Include="..\..\src\spine\SkeletonRenderer.cpp" />
     <ClCompile Include="..\..\src\spine\spine-cocos2dx.cpp" />
     <ClCompile Include="..\Classes\AppDelegate.cpp" />
     <ClCompile Include="..\Classes\ExampleLayer.cpp" />
     <ClCompile Include="main.cpp" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\cocos2dx\proj.win32\cocos2d.vcxproj">
+    <ProjectReference Include="..\..\..\spine-c\spine-c.vcxproj">
+      <Project>{5d74934a-7512-45ee-8402-7b95d3642e85}</Project>
+    </ProjectReference>
+    <ProjectReference Include="..\..\cocos2dx\cocos\2d\cocos2d.vcxproj">
       <Project>{98a51ba8-fc3a-415b-ac8f-8c7bd464e93e}</Project>
+      <Private>false</Private>
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
+      <LinkLibraryDependencies>true</LinkLibraryDependencies>
+      <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
+    </ProjectReference>
+    <ProjectReference Include="..\..\cocos2dx\external\chipmunk\proj.win32\chipmunk.vcxproj">
+      <Project>{207bc7a9-ccf1-4f2f-a04d-45f72242ae25}</Project>
     </ProjectReference>
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

+ 14 - 152
spine-cocos2dx/example/proj.win32/spine-cocos2dx.vcxproj.filters

@@ -7,11 +7,8 @@
     <Filter Include="Classes">
       <UniqueIdentifier>{0dcd52ca-d521-4ba1-a1fa-c0d58a2df402}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Classes\spine-cocos2dx">
-      <UniqueIdentifier>{7c460e6e-d4fb-452e-b75f-7a110b9dd9f6}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Classes\spine-c">
-      <UniqueIdentifier>{bce9df76-2682-4d32-a178-779e330d0ff1}</UniqueIdentifier>
+    <Filter Include="src">
+      <UniqueIdentifier>{54b66b2b-0990-4335-a821-332c44b6f83e}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
   <ItemGroup>
@@ -27,83 +24,14 @@
     <ClInclude Include="..\Classes\ExampleLayer.h">
       <Filter>Classes</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\src\spine\spine-cocos2dx.h">
-      <Filter>Classes\spine-cocos2dx</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\Animation.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\Atlas.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\AtlasAttachmentLoader.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\Attachment.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\AttachmentLoader.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\Bone.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\BoneData.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\extension.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\RegionAttachment.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\Skeleton.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\SkeletonData.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\SkeletonJson.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\Skin.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\Slot.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\SlotData.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\spine.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\src\spine\Json.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\AnimationState.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\AnimationStateData.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\src\spine\CCSkeleton.h">
-      <Filter>Classes\spine-cocos2dx</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\src\spine\CCSkeletonAnimation.h">
-      <Filter>Classes\spine-cocos2dx</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\BoundingBoxAttachment.h">
-      <Filter>Classes\spine-c</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\SkeletonBounds.h">
-      <Filter>Classes\spine-c</Filter>
+    <ClInclude Include="..\..\src\spine\SkeletonRenderer.h">
+      <Filter>src</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\Event.h">
-      <Filter>Classes\spine-c</Filter>
+    <ClInclude Include="..\..\src\spine\spine-cocos2dx.h">
+      <Filter>src</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\..\spine-c\include\spine\EventData.h">
-      <Filter>Classes\spine-c</Filter>
+    <ClInclude Include="..\..\src\spine\SkeletonAnimation.h">
+      <Filter>src</Filter>
     </ClInclude>
   </ItemGroup>
   <ItemGroup>
@@ -116,80 +44,14 @@
     <ClCompile Include="..\Classes\ExampleLayer.cpp">
       <Filter>Classes</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\src\spine\spine-cocos2dx.cpp">
-      <Filter>Classes\spine-cocos2dx</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\Animation.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\Atlas.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\AtlasAttachmentLoader.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\Attachment.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\AttachmentLoader.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\Bone.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\BoneData.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\extension.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\Json.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\RegionAttachment.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\Skeleton.c">
-      <Filter>Classes\spine-c</Filter>
+    <ClCompile Include="..\..\src\spine\SkeletonRenderer.cpp">
+      <Filter>src</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\SkeletonData.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\SkeletonJson.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\Skin.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\Slot.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\SlotData.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\AnimationStateData.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\AnimationState.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\src\spine\CCSkeleton.cpp">
-      <Filter>Classes\spine-cocos2dx</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\src\spine\CCSkeletonAnimation.cpp">
-      <Filter>Classes\spine-cocos2dx</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\BoundingBoxAttachment.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\SkeletonBounds.c">
-      <Filter>Classes\spine-c</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\Event.c">
-      <Filter>Classes\spine-c</Filter>
+    <ClCompile Include="..\..\src\spine\spine-cocos2dx.cpp">
+      <Filter>src</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\..\spine-c\src\spine\EventData.c">
-      <Filter>Classes\spine-c</Filter>
+    <ClCompile Include="..\..\src\spine\SkeletonAnimation.cpp">
+      <Filter>src</Filter>
     </ClCompile>
   </ItemGroup>
 </Project>

+ 0 - 304
spine-cocos2dx/src/spine/CCSkeleton.cpp

@@ -1,304 +0,0 @@
-/******************************************************************************
- * 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.
- *****************************************************************************/
-
-#include <spine/CCSkeleton.h>
-#include <spine/spine-cocos2dx.h>
-#include <algorithm>
-
-USING_NS_CC;
-using std::min;
-using std::max;
-
-namespace spine {
-
-CCSkeleton* CCSkeleton::createWithData (spSkeletonData* skeletonData, bool ownsSkeletonData) {
-	CCSkeleton* node = new CCSkeleton(skeletonData, ownsSkeletonData);
-	node->autorelease();
-	return node;
-}
-
-CCSkeleton* CCSkeleton::createWithFile (const char* skeletonDataFile, spAtlas* atlas, float scale) {
-	CCSkeleton* node = new CCSkeleton(skeletonDataFile, atlas, scale);
-	node->autorelease();
-	return node;
-}
-
-CCSkeleton* CCSkeleton::createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale) {
-	CCSkeleton* node = new CCSkeleton(skeletonDataFile, atlasFile, scale);
-	node->autorelease();
-	return node;
-}
-
-void CCSkeleton::initialize () {
-	atlas = 0;
-	debugSlots = false;
-	debugBones = false;
-	timeScale = 1;
-
-	blendFunc.src = GL_ONE;
-	blendFunc.dst = GL_ONE_MINUS_SRC_ALPHA;
-	setOpacityModifyRGB(true);
-
-	setShaderProgram(CCShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionTextureColor));
-	scheduleUpdate();
-}
-
-void CCSkeleton::setSkeletonData (spSkeletonData *skeletonData, bool ownsSkeletonData) {
-	skeleton = spSkeleton_create(skeletonData);
-	rootBone = skeleton->bones[0];
-	this->ownsSkeletonData = ownsSkeletonData;	
-}
-
-CCSkeleton::CCSkeleton () {
-	initialize();
-}
-
-CCSkeleton::CCSkeleton (spSkeletonData *skeletonData, bool ownsSkeletonData) {
-	initialize();
-
-	setSkeletonData(skeletonData, ownsSkeletonData);
-}
-
-CCSkeleton::CCSkeleton (const char* skeletonDataFile, spAtlas* atlas, float scale) {
-	initialize();
-
-	spSkeletonJson* json = spSkeletonJson_create(atlas);
-	json->scale = scale == 0 ? (1 / CCDirector::sharedDirector()->getContentScaleFactor()) : scale;
-	spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, skeletonDataFile);
-	CCAssert(skeletonData, json->error ? json->error : "Error reading skeleton data.");
-	spSkeletonJson_dispose(json);
-
-	setSkeletonData(skeletonData, true);
-}
-
-CCSkeleton::CCSkeleton (const char* skeletonDataFile, const char* atlasFile, float scale) {
-	initialize();
-
-	atlas = spAtlas_readAtlasFile(atlasFile);
-	CCAssert(atlas, "Error reading atlas file.");
-
-	spSkeletonJson* json = spSkeletonJson_create(atlas);
-	json->scale = scale == 0 ? (1 / CCDirector::sharedDirector()->getContentScaleFactor()) : scale;
-	spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, skeletonDataFile);
-	CCAssert(skeletonData, json->error ? json->error : "Error reading skeleton data file.");
-	spSkeletonJson_dispose(json);
-
-	setSkeletonData(skeletonData, true);
-}
-
-CCSkeleton::~CCSkeleton () {
-	if (ownsSkeletonData) spSkeletonData_dispose(skeleton->data);
-	if (atlas) spAtlas_dispose(atlas);
-	spSkeleton_dispose(skeleton);
-}
-
-void CCSkeleton::update (float deltaTime) {
-	spSkeleton_update(skeleton, deltaTime * timeScale);
-}
-
-void CCSkeleton::draw () {
-	CC_NODE_DRAW_SETUP();
-
-	ccGLBlendFunc(blendFunc.src, blendFunc.dst);
-	ccColor3B color = getColor();
-	skeleton->r = color.r / (float)255;
-	skeleton->g = color.g / (float)255;
-	skeleton->b = color.b / (float)255;
-	skeleton->a = getOpacity() / (float)255;
-
-	int additive = 0;
-	CCTextureAtlas* textureAtlas = 0;
-	ccV3F_C4B_T2F_Quad quad;
-	quad.tl.vertices.z = 0;
-	quad.tr.vertices.z = 0;
-	quad.bl.vertices.z = 0;
-	quad.br.vertices.z = 0;
-	for (int i = 0, n = skeleton->slotCount; i < n; i++) {
-		spSlot* slot = skeleton->drawOrder[i];
-		if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue;
-		spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment;
-		CCTextureAtlas* regionTextureAtlas = getTextureAtlas(attachment);
-
-		if (slot->data->additiveBlending != additive) {
-			if (textureAtlas) {
-				textureAtlas->drawQuads();
-				textureAtlas->removeAllQuads();
-			}
-			additive = !additive;
-			ccGLBlendFunc(blendFunc.src, additive ? GL_ONE : blendFunc.dst);
-		} else if (regionTextureAtlas != textureAtlas && textureAtlas) {
-			textureAtlas->drawQuads();
-			textureAtlas->removeAllQuads();
-		}
-		textureAtlas = regionTextureAtlas;
-
-		int quadCount = textureAtlas->getTotalQuads();
-		if (textureAtlas->getCapacity() == quadCount) {
-			textureAtlas->drawQuads();
-			textureAtlas->removeAllQuads();
-			if (!textureAtlas->resizeCapacity(textureAtlas->getCapacity() * 2)) return;
-		}
-
-		spRegionAttachment_updateQuad(attachment, slot, &quad, premultipliedAlpha);
-		textureAtlas->updateQuad(&quad, quadCount);
-	}
-	if (textureAtlas) {
-		textureAtlas->drawQuads();
-		textureAtlas->removeAllQuads();
-	}
-
-	if (debugSlots) {
-		// Slots.
-		ccDrawColor4B(0, 0, 255, 255);
-		glLineWidth(1);
-		CCPoint points[4];
-		ccV3F_C4B_T2F_Quad quad;
-		for (int i = 0, n = skeleton->slotCount; i < n; i++) {
-			spSlot* slot = skeleton->drawOrder[i];
-			if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue;
-			spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment;
-			spRegionAttachment_updateQuad(attachment, slot, &quad);
-			points[0] = ccp(quad.bl.vertices.x, quad.bl.vertices.y);
-			points[1] = ccp(quad.br.vertices.x, quad.br.vertices.y);
-			points[2] = ccp(quad.tr.vertices.x, quad.tr.vertices.y);
-			points[3] = ccp(quad.tl.vertices.x, quad.tl.vertices.y);
-			ccDrawPoly(points, 4, true);
-		}
-	}
-	if (debugBones) {
-		// Bone lengths.
-		glLineWidth(2);
-		ccDrawColor4B(255, 0, 0, 255);
-		for (int i = 0, n = skeleton->boneCount; i < n; i++) {
-			spBone *bone = skeleton->bones[i];
-			float x = bone->data->length * bone->m00 + bone->worldX;
-			float y = bone->data->length * bone->m10 + bone->worldY;
-			ccDrawLine(ccp(bone->worldX, bone->worldY), ccp(x, y));
-		}
-		// Bone origins.
-		ccPointSize(4);
-		ccDrawColor4B(0, 0, 255, 255); // Root bone is blue.
-		for (int i = 0, n = skeleton->boneCount; i < n; i++) {
-			spBone *bone = skeleton->bones[i];
-			ccDrawPoint(ccp(bone->worldX, bone->worldY));
-			if (i == 0) ccDrawColor4B(0, 255, 0, 255);
-		}
-	}
-}
-
-CCTextureAtlas* CCSkeleton::getTextureAtlas (spRegionAttachment* regionAttachment) const {
-	return (CCTextureAtlas*)((spAtlasRegion*)regionAttachment->rendererObject)->page->rendererObject;
-}
-
-CCRect CCSkeleton::boundingBox () {
-	float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN;
-	float scaleX = getScaleX();
-	float scaleY = getScaleY();
-	float vertices[8];
-	for (int i = 0; i < skeleton->slotCount; ++i) {
-		spSlot* slot = skeleton->slots[i];
-		if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue;
-		spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment;
-		spRegionAttachment_computeWorldVertices(attachment, slot->skeleton->x, slot->skeleton->y, slot->bone, vertices);
-		minX = min(minX, vertices[VERTEX_X1] * scaleX);
-		minY = min(minY, vertices[VERTEX_Y1] * scaleY);
-		maxX = max(maxX, vertices[VERTEX_X1] * scaleX);
-		maxY = max(maxY, vertices[VERTEX_Y1] * scaleY);
-		minX = min(minX, vertices[VERTEX_X4] * scaleX);
-		minY = min(minY, vertices[VERTEX_Y4] * scaleY);
-		maxX = max(maxX, vertices[VERTEX_X4] * scaleX);
-		maxY = max(maxY, vertices[VERTEX_Y4] * scaleY);
-		minX = min(minX, vertices[VERTEX_X2] * scaleX);
-		minY = min(minY, vertices[VERTEX_Y2] * scaleY);
-		maxX = max(maxX, vertices[VERTEX_X2] * scaleX);
-		maxY = max(maxY, vertices[VERTEX_Y2] * scaleY);
-		minX = min(minX, vertices[VERTEX_X3] * scaleX);
-		minY = min(minY, vertices[VERTEX_Y3] * scaleY);
-		maxX = max(maxX, vertices[VERTEX_X3] * scaleX);
-		maxY = max(maxY, vertices[VERTEX_Y3] * scaleY);
-	}
-	CCPoint position = getPosition();
-	return CCRectMake(position.x + minX, position.y + minY, maxX - minX, maxY - minY);
-}
-
-// --- Convenience methods for Skeleton_* functions.
-
-void CCSkeleton::updateWorldTransform () {
-	spSkeleton_updateWorldTransform(skeleton);
-}
-
-void CCSkeleton::setToSetupPose () {
-	spSkeleton_setToSetupPose(skeleton);
-}
-void CCSkeleton::setBonesToSetupPose () {
-	spSkeleton_setBonesToSetupPose(skeleton);
-}
-void CCSkeleton::setSlotsToSetupPose () {
-	spSkeleton_setSlotsToSetupPose(skeleton);
-}
-
-spBone* CCSkeleton::findBone (const char* boneName) const {
-	return spSkeleton_findBone(skeleton, boneName);
-}
-
-spSlot* CCSkeleton::findSlot (const char* slotName) const {
-	return spSkeleton_findSlot(skeleton, slotName);
-}
-
-bool CCSkeleton::setSkin (const char* skinName) {
-	return spSkeleton_setSkinByName(skeleton, skinName) ? true : false;
-}
-
-spAttachment* CCSkeleton::getAttachment (const char* slotName, const char* attachmentName) const {
-	return spSkeleton_getAttachmentForSlotName(skeleton, slotName, attachmentName);
-}
-bool CCSkeleton::setAttachment (const char* slotName, const char* attachmentName) {
-	return spSkeleton_setAttachment(skeleton, slotName, attachmentName) ? true : false;
-}
-
-// --- CCBlendProtocol
-
-ccBlendFunc CCSkeleton::getBlendFunc () {
-    return blendFunc;
-}
-
-void CCSkeleton::setBlendFunc (ccBlendFunc blendFunc) {
-    this->blendFunc = blendFunc;
-}
-
-void CCSkeleton::setOpacityModifyRGB (bool value) {
-	premultipliedAlpha = value;
-}
-
-bool CCSkeleton::isOpacityModifyRGB () {
-	return premultipliedAlpha;
-}
-
-}

+ 29 - 29
spine-cocos2dx/src/spine/CCSkeletonAnimation.cpp → spine-cocos2dx/src/spine/SkeletonAnimation.cpp

@@ -28,7 +28,7 @@
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *****************************************************************************/
 
-#include <spine/CCSkeletonAnimation.h>
+#include <spine/SkeletonAnimation.h>
 #include <spine/extension.h>
 #include <spine/spine-cocos2dx.h>
 #include <algorithm>
@@ -41,28 +41,28 @@ using std::vector;
 namespace spine {
 
 static void callback (spAnimationState* state, int trackIndex, spEventType type, spEvent* event, int loopCount) {
-	((CCSkeletonAnimation*)state->context)->onAnimationStateEvent(trackIndex, type, event, loopCount);
+	((SkeletonAnimation*)state->context)->onAnimationStateEvent(trackIndex, type, event, loopCount);
 }
 
-CCSkeletonAnimation* CCSkeletonAnimation::createWithData (spSkeletonData* skeletonData) {
-	CCSkeletonAnimation* node = new CCSkeletonAnimation(skeletonData);
+SkeletonAnimation* SkeletonAnimation::createWithData (spSkeletonData* skeletonData) {
+	SkeletonAnimation* node = new SkeletonAnimation(skeletonData);
 	node->autorelease();
 	return node;
 }
 
-CCSkeletonAnimation* CCSkeletonAnimation::createWithFile (const char* skeletonDataFile, spAtlas* atlas, float scale) {
-	CCSkeletonAnimation* node = new CCSkeletonAnimation(skeletonDataFile, atlas, scale);
+SkeletonAnimation* SkeletonAnimation::createWithFile (const char* skeletonDataFile, spAtlas* atlas, float scale) {
+	SkeletonAnimation* node = new SkeletonAnimation(skeletonDataFile, atlas, scale);
 	node->autorelease();
 	return node;
 }
 
-CCSkeletonAnimation* CCSkeletonAnimation::createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale) {
-	CCSkeletonAnimation* node = new CCSkeletonAnimation(skeletonDataFile, atlasFile, scale);
+SkeletonAnimation* SkeletonAnimation::createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale) {
+	SkeletonAnimation* node = new SkeletonAnimation(skeletonDataFile, atlasFile, scale);
 	node->autorelease();
 	return node;
 }
 
-void CCSkeletonAnimation::initialize () {
+void SkeletonAnimation::initialize () {
 	listenerInstance = 0;
 	listenerMethod = 0;
 
@@ -72,27 +72,27 @@ void CCSkeletonAnimation::initialize () {
 	state->listener = callback;
 }
 
-CCSkeletonAnimation::CCSkeletonAnimation (spSkeletonData *skeletonData)
-		: CCSkeleton(skeletonData) {
+SkeletonAnimation::SkeletonAnimation (spSkeletonData *skeletonData)
+		: SkeletonRenderer(skeletonData) {
 	initialize();
 }
 
-CCSkeletonAnimation::CCSkeletonAnimation (const char* skeletonDataFile, spAtlas* atlas, float scale)
-		: CCSkeleton(skeletonDataFile, atlas, scale) {
+SkeletonAnimation::SkeletonAnimation (const char* skeletonDataFile, spAtlas* atlas, float scale)
+		: SkeletonRenderer(skeletonDataFile, atlas, scale) {
 	initialize();
 }
 
-CCSkeletonAnimation::CCSkeletonAnimation (const char* skeletonDataFile, const char* atlasFile, float scale)
-		: CCSkeleton(skeletonDataFile, atlasFile, scale) {
+SkeletonAnimation::SkeletonAnimation (const char* skeletonDataFile, const char* atlasFile, float scale)
+		: SkeletonRenderer(skeletonDataFile, atlasFile, scale) {
 	initialize();
 }
 
-CCSkeletonAnimation::~CCSkeletonAnimation () {
+SkeletonAnimation::~SkeletonAnimation () {
 	if (ownsAnimationStateData) spAnimationStateData_dispose(state->data);
 	spAnimationState_dispose(state);
 }
 
-void CCSkeletonAnimation::update (float deltaTime) {
+void SkeletonAnimation::update (float deltaTime) {
 	super::update(deltaTime);
 
 	deltaTime *= timeScale;
@@ -101,8 +101,8 @@ void CCSkeletonAnimation::update (float deltaTime) {
 	spSkeleton_updateWorldTransform(skeleton);
 }
 
-void CCSkeletonAnimation::setAnimationStateData (spAnimationStateData* stateData) {
-	CCAssert(stateData, "stateData cannot be null.");
+void SkeletonAnimation::setAnimationStateData (spAnimationStateData* stateData) {
+	CCASSERT(stateData, "stateData cannot be null.");
 
 	if (ownsAnimationStateData) spAnimationStateData_dispose(state->data);
 	spAnimationState_dispose(state);
@@ -113,46 +113,46 @@ void CCSkeletonAnimation::setAnimationStateData (spAnimationStateData* stateData
 	state->listener = callback;
 }
 
-void CCSkeletonAnimation::setMix (const char* fromAnimation, const char* toAnimation, float duration) {
+void SkeletonAnimation::setMix (const char* fromAnimation, const char* toAnimation, float duration) {
 	spAnimationStateData_setMixByName(state->data, fromAnimation, toAnimation, duration);
 }
 
-void CCSkeletonAnimation::setAnimationListener (CCObject* instance, SEL_AnimationStateEvent method) {
+void SkeletonAnimation::setAnimationListener (Ref* instance, SEL_AnimationStateEvent method) {
 	listenerInstance = instance;
 	listenerMethod = method;
 }
 
-spTrackEntry* CCSkeletonAnimation::setAnimation (int trackIndex, const char* name, bool loop) {
+spTrackEntry* SkeletonAnimation::setAnimation (int trackIndex, const char* name, bool loop) {
 	spAnimation* animation = spSkeletonData_findAnimation(skeleton->data, name);
 	if (!animation) {
-		CCLog("Spine: Animation not found: %s", name);
+		log("Spine: Animation not found: %s", name);
 		return 0;
 	}
 	return spAnimationState_setAnimation(state, trackIndex, animation, loop);
 }
 
-spTrackEntry* CCSkeletonAnimation::addAnimation (int trackIndex, const char* name, bool loop, float delay) {
+spTrackEntry* SkeletonAnimation::addAnimation (int trackIndex, const char* name, bool loop, float delay) {
 	spAnimation* animation = spSkeletonData_findAnimation(skeleton->data, name);
 	if (!animation) {
-		CCLog("Spine: Animation not found: %s", name);
+		log("Spine: Animation not found: %s", name);
 		return 0;
 	}
 	return spAnimationState_addAnimation(state, trackIndex, animation, loop, delay);
 }
 
-spTrackEntry* CCSkeletonAnimation::getCurrent (int trackIndex) { 
+spTrackEntry* SkeletonAnimation::getCurrent (int trackIndex) { 
 	return spAnimationState_getCurrent(state, trackIndex);
 }
 
-void CCSkeletonAnimation::clearTracks () {
+void SkeletonAnimation::clearTracks () {
 	spAnimationState_clearTracks(state);
 }
 
-void CCSkeletonAnimation::clearTrack (int trackIndex) {
+void SkeletonAnimation::clearTrack (int trackIndex) {
 	spAnimationState_clearTrack(state, trackIndex);
 }
 
-void CCSkeletonAnimation::onAnimationStateEvent (int trackIndex, spEventType type, spEvent* event, int loopCount) {
+void SkeletonAnimation::onAnimationStateEvent (int trackIndex, spEventType type, spEvent* event, int loopCount) {
 	if (listenerInstance) (listenerInstance->*listenerMethod)(this, trackIndex, type, event, loopCount);
 }
 

+ 18 - 18
spine-cocos2dx/src/spine/CCSkeletonAnimation.h → spine-cocos2dx/src/spine/SkeletonAnimation.h

@@ -28,41 +28,41 @@
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *****************************************************************************/
 
-#ifndef SPINE_CCSKELETONANIMATION_H_
-#define SPINE_CCSKELETONANIMATION_H_
+#ifndef SPINE_SKELETONANIMATION_H_
+#define SPINE_SKELETONANIMATION_H_
 
 #include <spine/spine.h>
-#include <spine/CCSkeleton.h>
+#include <spine/SkeletonRenderer.h>
 #include "cocos2d.h"
 
 namespace spine {
 
-class CCSkeletonAnimation;
-typedef void (cocos2d::CCObject::*SEL_AnimationStateEvent)(spine::CCSkeletonAnimation* node, int trackIndex, spEventType type, spEvent* event, int loopCount);
+class SkeletonAnimation;
+typedef void (cocos2d::Ref::*SEL_AnimationStateEvent)(spine::SkeletonAnimation* node, int trackIndex, spEventType type, spEvent* event, int loopCount);
 #define animationStateEvent_selector(_SELECTOR) (SEL_AnimationStateEvent)(&_SELECTOR)
 
 /** Draws an animated skeleton, providing an AnimationState for applying one or more animations and queuing animations to be
   * played later. */
-class CCSkeletonAnimation: public CCSkeleton {
+class SkeletonAnimation: public SkeletonRenderer {
 public:
 	spAnimationState* state;
 
-	static CCSkeletonAnimation* createWithData (spSkeletonData* skeletonData);
-	static CCSkeletonAnimation* createWithFile (const char* skeletonDataFile, spAtlas* atlas, float scale = 0);
-	static CCSkeletonAnimation* createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale = 0);
+	static SkeletonAnimation* createWithData (spSkeletonData* skeletonData);
+	static SkeletonAnimation* createWithFile (const char* skeletonDataFile, spAtlas* atlas, float scale = 0);
+	static SkeletonAnimation* createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale = 0);
 
-	CCSkeletonAnimation (spSkeletonData* skeletonData);
-	CCSkeletonAnimation (const char* skeletonDataFile, spAtlas* atlas, float scale = 0);
-	CCSkeletonAnimation (const char* skeletonDataFile, const char* atlasFile, float scale = 0);
+	SkeletonAnimation (spSkeletonData* skeletonData);
+	SkeletonAnimation (const char* skeletonDataFile, spAtlas* atlas, float scale = 0);
+	SkeletonAnimation (const char* skeletonDataFile, const char* atlasFile, float scale = 0);
 
-	virtual ~CCSkeletonAnimation ();
+	virtual ~SkeletonAnimation ();
 
 	virtual void update (float deltaTime);
 
 	void setAnimationStateData (spAnimationStateData* stateData);
 	void setMix (const char* fromAnimation, const char* toAnimation, float duration);
 
-	void setAnimationListener (CCObject* instance, SEL_AnimationStateEvent method);
+	void setAnimationListener (cocos2d::Ref* instance, SEL_AnimationStateEvent method);
 	spTrackEntry* setAnimation (int trackIndex, const char* name, bool loop);
 	spTrackEntry* addAnimation (int trackIndex, const char* name, bool loop, float delay = 0);
 	spTrackEntry* getCurrent (int trackIndex = 0);
@@ -72,11 +72,11 @@ public:
 	virtual void onAnimationStateEvent (int trackIndex, spEventType type, spEvent* event, int loopCount);
 
 protected:
-	CCSkeletonAnimation ();
+	SkeletonAnimation ();
 
 private:
-	typedef CCSkeleton super;
-	CCObject* listenerInstance;
+	typedef SkeletonRenderer super;
+	cocos2d::Ref* listenerInstance;
 	SEL_AnimationStateEvent listenerMethod;
 	bool ownsAnimationStateData;
 
@@ -85,4 +85,4 @@ private:
 
 }
 
-#endif /* SPINE_CCSKELETONANIMATION_H_ */
+#endif /* SPINE_SKELETONANIMATION_H_ */

+ 318 - 0
spine-cocos2dx/src/spine/SkeletonRenderer.cpp

@@ -0,0 +1,318 @@
+/******************************************************************************
+ * 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.
+ *****************************************************************************/
+
+#include <spine/SkeletonRenderer.h>
+#include <spine/spine-cocos2dx.h>
+#include <algorithm>
+
+USING_NS_CC;
+using std::min;
+using std::max;
+
+namespace spine {
+
+SkeletonRenderer* SkeletonRenderer::createWithData (spSkeletonData* skeletonData, bool ownsSkeletonData) {
+	SkeletonRenderer* node = new SkeletonRenderer(skeletonData, ownsSkeletonData);
+	node->autorelease();
+	return node;
+}
+
+SkeletonRenderer* SkeletonRenderer::createWithFile (const char* skeletonDataFile, spAtlas* atlas, float scale) {
+	SkeletonRenderer* node = new SkeletonRenderer(skeletonDataFile, atlas, scale);
+	node->autorelease();
+	return node;
+}
+
+SkeletonRenderer* SkeletonRenderer::createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale) {
+	SkeletonRenderer* node = new SkeletonRenderer(skeletonDataFile, atlasFile, scale);
+	node->autorelease();
+	return node;
+}
+
+void SkeletonRenderer::initialize () {
+	atlas = 0;
+	debugSlots = false;
+	debugBones = false;
+	timeScale = 1;
+
+	blendFunc = BlendFunc::ALPHA_PREMULTIPLIED;
+	setOpacityModifyRGB(true);
+
+	setShaderProgram(ShaderCache::getInstance()->getProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR));
+	scheduleUpdate();
+}
+
+void SkeletonRenderer::setSkeletonData (spSkeletonData *skeletonData, bool ownsSkeletonData) {
+	skeleton = spSkeleton_create(skeletonData);
+	rootBone = skeleton->bones[0];
+	this->ownsSkeletonData = ownsSkeletonData;	
+}
+
+SkeletonRenderer::SkeletonRenderer () {
+	initialize();
+}
+
+SkeletonRenderer::SkeletonRenderer (spSkeletonData *skeletonData, bool ownsSkeletonData) {
+	initialize();
+
+	setSkeletonData(skeletonData, ownsSkeletonData);
+}
+
+SkeletonRenderer::SkeletonRenderer (const char* skeletonDataFile, spAtlas* atlas, float scale) {
+	initialize();
+
+	spSkeletonJson* json = spSkeletonJson_create(atlas);
+	json->scale = scale == 0 ? (1 / Director::getInstance()->getContentScaleFactor()) : scale;
+	spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, skeletonDataFile);
+	CCASSERT(skeletonData, json->error ? json->error : "Error reading skeleton data.");
+	spSkeletonJson_dispose(json);
+
+	setSkeletonData(skeletonData, true);
+}
+
+SkeletonRenderer::SkeletonRenderer (const char* skeletonDataFile, const char* atlasFile, float scale) {
+	initialize();
+
+	atlas = spAtlas_createFromFile(atlasFile, 0);
+	CCASSERT(atlas, "Error reading atlas file.");
+
+	spSkeletonJson* json = spSkeletonJson_create(atlas);
+	json->scale = scale == 0 ? (1 / Director::getInstance()->getContentScaleFactor()) : scale;
+	spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, skeletonDataFile);
+	CCASSERT(skeletonData, json->error ? json->error : "Error reading skeleton data file.");
+	spSkeletonJson_dispose(json);
+
+	setSkeletonData(skeletonData, true);
+}
+
+SkeletonRenderer::~SkeletonRenderer () {
+	if (ownsSkeletonData) spSkeletonData_dispose(skeleton->data);
+	if (atlas) spAtlas_dispose(atlas);
+	spSkeleton_dispose(skeleton);
+}
+
+void SkeletonRenderer::update (float deltaTime) {
+	spSkeleton_update(skeleton, deltaTime * timeScale);
+}
+
+void SkeletonRenderer::draw (Renderer* renderer, const Matrix& transform, bool transformUpdated) {
+    drawCommand.init(_globalZOrder);
+    drawCommand.func = CC_CALLBACK_0(SkeletonRenderer::drawSkeleton, this, transform, transformUpdated);
+    renderer->addCommand(&drawCommand);
+}
+
+void SkeletonRenderer::drawSkeleton (const Matrix &transform, bool transformUpdated) {
+	getShaderProgram()->use();
+	getShaderProgram()->setUniformsForBuiltins(transform);
+
+	GL::blendFunc(blendFunc.src, blendFunc.dst);
+	Color3B color = getColor();
+	skeleton->r = color.r / (float)255;
+	skeleton->g = color.g / (float)255;
+	skeleton->b = color.b / (float)255;
+	skeleton->a = getOpacity() / (float)255;
+
+	int additive = 0;
+	TextureAtlas* textureAtlas = 0;
+	V3F_C4B_T2F_Quad quad;
+	quad.tl.vertices.z = 0;
+	quad.tr.vertices.z = 0;
+	quad.bl.vertices.z = 0;
+	quad.br.vertices.z = 0;
+
+	for (int i = 0, n = skeleton->slotCount; i < n; i++) {
+		spSlot* slot = skeleton->drawOrder[i];
+		if (!slot->attachment || slot->attachment->type != SP_ATTACHMENT_REGION) continue;
+		spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment;
+		TextureAtlas* regionTextureAtlas = getTextureAtlas(attachment);
+
+		if (slot->data->additiveBlending != additive) {
+			if (textureAtlas) {
+				textureAtlas->drawQuads();
+				textureAtlas->removeAllQuads();
+			}
+			additive = !additive;
+			GL::blendFunc(blendFunc.src, additive ? GL_ONE : blendFunc.dst);
+		} else if (regionTextureAtlas != textureAtlas && textureAtlas) {
+			textureAtlas->drawQuads();
+			textureAtlas->removeAllQuads();
+		}
+		textureAtlas = regionTextureAtlas;
+
+		int quadCount = textureAtlas->getTotalQuads();
+		if (textureAtlas->getCapacity() == quadCount) {
+			textureAtlas->drawQuads();
+			textureAtlas->removeAllQuads();
+			if (!textureAtlas->resizeCapacity(textureAtlas->getCapacity() * 2)) return;
+		}
+
+		spRegionAttachment_updateQuad(attachment, slot, &quad, premultipliedAlpha);
+		textureAtlas->updateQuad(&quad, quadCount);
+	}
+	if (textureAtlas) {
+		textureAtlas->drawQuads();
+		textureAtlas->removeAllQuads();
+	}
+
+	if (debugSlots || debugBones) {
+		Director* director = Director::getInstance();
+		director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
+		director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, transform);
+
+		if (debugSlots) {
+			// Slots.
+			DrawPrimitives::setDrawColor4B(0, 0, 255, 255);
+			glLineWidth(1);
+			Vector2 points[4];
+			V3F_C4B_T2F_Quad quad;
+			for (int i = 0, n = skeleton->slotCount; i < n; i++) {
+				spSlot* slot = skeleton->drawOrder[i];
+				if (!slot->attachment || slot->attachment->type != SP_ATTACHMENT_REGION) continue;
+				spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment;
+				spRegionAttachment_updateQuad(attachment, slot, &quad);
+				points[0] = Vector2(quad.bl.vertices.x, quad.bl.vertices.y);
+				points[1] = Vector2(quad.br.vertices.x, quad.br.vertices.y);
+				points[2] = Vector2(quad.tr.vertices.x, quad.tr.vertices.y);
+				points[3] = Vector2(quad.tl.vertices.x, quad.tl.vertices.y);
+				DrawPrimitives::drawPoly(points, 4, true);
+			}
+		}
+		if (debugBones) {
+			// Bone lengths.
+			glLineWidth(2);
+			DrawPrimitives::setDrawColor4B(255, 0, 0, 255);
+			for (int i = 0, n = skeleton->boneCount; i < n; i++) {
+				spBone *bone = skeleton->bones[i];
+				float x = bone->data->length * bone->m00 + bone->worldX;
+				float y = bone->data->length * bone->m10 + bone->worldY;
+				DrawPrimitives::drawLine(Vector2(bone->worldX, bone->worldY), Vector2(x, y));
+			}
+			// Bone origins.
+			DrawPrimitives::setPointSize(4);
+			DrawPrimitives::setDrawColor4B(0, 0, 255, 255); // Root bone is blue.
+			for (int i = 0, n = skeleton->boneCount; i < n; i++) {
+				spBone *bone = skeleton->bones[i];
+				DrawPrimitives::drawPoint(Vector2(bone->worldX, bone->worldY));
+				if (i == 0) DrawPrimitives::setDrawColor4B(0, 255, 0, 255);
+			}
+		}
+		director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
+	}
+}
+
+TextureAtlas* SkeletonRenderer::getTextureAtlas (spRegionAttachment* regionAttachment) const {
+	return (TextureAtlas*)((spAtlasRegion*)regionAttachment->rendererObject)->page->rendererObject;
+}
+
+Rect SkeletonRenderer::boundingBox () {
+	float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN;
+	float scaleX = getScaleX();
+	float scaleY = getScaleY();
+	float vertices[8];
+	for (int i = 0; i < skeleton->slotCount; ++i) {
+		spSlot* slot = skeleton->slots[i];
+		if (!slot->attachment || slot->attachment->type != SP_ATTACHMENT_REGION) continue;
+		spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment;
+		spRegionAttachment_computeWorldVertices(attachment, slot->skeleton->x, slot->skeleton->y, slot->bone, vertices);
+		minX = min(minX, vertices[SP_VERTEX_X1] * scaleX);
+		minY = min(minY, vertices[SP_VERTEX_Y1] * scaleY);
+		maxX = max(maxX, vertices[SP_VERTEX_X1] * scaleX);
+		maxY = max(maxY, vertices[SP_VERTEX_Y1] * scaleY);
+		minX = min(minX, vertices[SP_VERTEX_X4] * scaleX);
+		minY = min(minY, vertices[SP_VERTEX_Y4] * scaleY);
+		maxX = max(maxX, vertices[SP_VERTEX_X4] * scaleX);
+		maxY = max(maxY, vertices[SP_VERTEX_Y4] * scaleY);
+		minX = min(minX, vertices[SP_VERTEX_X2] * scaleX);
+		minY = min(minY, vertices[SP_VERTEX_Y2] * scaleY);
+		maxX = max(maxX, vertices[SP_VERTEX_X2] * scaleX);
+		maxY = max(maxY, vertices[SP_VERTEX_Y2] * scaleY);
+		minX = min(minX, vertices[SP_VERTEX_X3] * scaleX);
+		minY = min(minY, vertices[SP_VERTEX_Y3] * scaleY);
+		maxX = max(maxX, vertices[SP_VERTEX_X3] * scaleX);
+		maxY = max(maxY, vertices[SP_VERTEX_Y3] * scaleY);
+	}
+	Vector2 position = getPosition();
+	return Rect(position.x + minX, position.y + minY, maxX - minX, maxY - minY);
+}
+
+// --- Convenience methods for Skeleton_* functions.
+
+void SkeletonRenderer::updateWorldTransform () {
+	spSkeleton_updateWorldTransform(skeleton);
+}
+
+void SkeletonRenderer::setToSetupPose () {
+	spSkeleton_setToSetupPose(skeleton);
+}
+void SkeletonRenderer::setBonesToSetupPose () {
+	spSkeleton_setBonesToSetupPose(skeleton);
+}
+void SkeletonRenderer::setSlotsToSetupPose () {
+	spSkeleton_setSlotsToSetupPose(skeleton);
+}
+
+spBone* SkeletonRenderer::findBone (const char* boneName) const {
+	return spSkeleton_findBone(skeleton, boneName);
+}
+
+spSlot* SkeletonRenderer::findSlot (const char* slotName) const {
+	return spSkeleton_findSlot(skeleton, slotName);
+}
+
+bool SkeletonRenderer::setSkin (const char* skinName) {
+	return spSkeleton_setSkinByName(skeleton, skinName) ? true : false;
+}
+
+spAttachment* SkeletonRenderer::getAttachment (const char* slotName, const char* attachmentName) const {
+	return spSkeleton_getAttachmentForSlotName(skeleton, slotName, attachmentName);
+}
+bool SkeletonRenderer::setAttachment (const char* slotName, const char* attachmentName) {
+	return spSkeleton_setAttachment(skeleton, slotName, attachmentName) ? true : false;
+}
+
+// --- CCBlendProtocol
+
+const BlendFunc& SkeletonRenderer::getBlendFunc () const {
+    return blendFunc;
+}
+
+void SkeletonRenderer::setBlendFunc (const cocos2d::BlendFunc &) {
+    this->blendFunc = blendFunc;
+}
+
+void SkeletonRenderer::setOpacityModifyRGB (bool value) {
+	premultipliedAlpha = value;
+}
+
+bool SkeletonRenderer::isOpacityModifyRGB () {
+	return premultipliedAlpha;
+}
+
+}

+ 21 - 17
spine-cocos2dx/src/spine/CCSkeleton.h → spine-cocos2dx/src/spine/SkeletonRenderer.h

@@ -28,8 +28,8 @@
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *****************************************************************************/
 
-#ifndef SPINE_CCSKELETON_H_
-#define SPINE_CCSKELETON_H_
+#ifndef SPINE_SKELETONRENDERER_H_
+#define SPINE_SKELETONRENDERER_H_
 
 #include <spine/spine.h>
 #include "cocos2d.h"
@@ -37,7 +37,7 @@
 namespace spine {
 
 /** Draws a skeleton. */
-class CCSkeleton: public cocos2d::CCNodeRGBA, public cocos2d::CCBlendProtocol {
+class SkeletonRenderer: public cocos2d::NodeRGBA, public cocos2d::BlendProtocol {
 public:
 	spSkeleton* skeleton;
 	spBone* rootBone;
@@ -46,19 +46,20 @@ public:
 	bool debugBones;
 	bool premultipliedAlpha;
 
-	static CCSkeleton* createWithData (spSkeletonData* skeletonData, bool ownsSkeletonData = false);
-	static CCSkeleton* createWithFile (const char* skeletonDataFile, spAtlas* atlas, float scale = 0);
-	static CCSkeleton* createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale = 0);
+	static SkeletonRenderer* createWithData (spSkeletonData* skeletonData, bool ownsSkeletonData = false);
+	static SkeletonRenderer* createWithFile (const char* skeletonDataFile, spAtlas* atlas, float scale = 0);
+	static SkeletonRenderer* createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale = 0);
 
-	CCSkeleton (spSkeletonData* skeletonData, bool ownsSkeletonData = false);
-	CCSkeleton (const char* skeletonDataFile, spAtlas* atlas, float scale = 0);
-	CCSkeleton (const char* skeletonDataFile, const char* atlasFile, float scale = 0);
+	SkeletonRenderer (spSkeletonData* skeletonData, bool ownsSkeletonData = false);
+	SkeletonRenderer (const char* skeletonDataFile, spAtlas* atlas, float scale = 0);
+	SkeletonRenderer (const char* skeletonDataFile, const char* atlasFile, float scale = 0);
 
-	virtual ~CCSkeleton ();
+	virtual ~SkeletonRenderer ();
 
 	virtual void update (float deltaTime);
-	virtual void draw ();
-	virtual cocos2d::CCRect boundingBox ();
+	virtual void draw (cocos2d::Renderer* renderer, const cocos2d::Matrix& transform, bool transformUpdated) override;
+	void drawSkeleton (const cocos2d::Matrix& transform, bool transformUpdated);
+	virtual cocos2d::Rect boundingBox ();
 
 	// --- Convenience methods for common Skeleton_* functions.
 	void updateWorldTransform ();
@@ -82,22 +83,25 @@ public:
 	/* Returns false if the slot or attachment was not found. */
 	bool setAttachment (const char* slotName, const char* attachmentName);
 
-	// --- CCBlendProtocol
-	CC_PROPERTY(cocos2d::ccBlendFunc, blendFunc, BlendFunc);
+	// --- BlendProtocol
+	virtual void setBlendFunc (const cocos2d::BlendFunc& blendFunc);
+	virtual const cocos2d::BlendFunc& getBlendFunc () const;
 	virtual void setOpacityModifyRGB (bool value);
 	virtual bool isOpacityModifyRGB ();
 
 protected:
-	CCSkeleton ();
+	SkeletonRenderer ();
 	void setSkeletonData (spSkeletonData* skeletonData, bool ownsSkeletonData);
-	virtual cocos2d::CCTextureAtlas* getTextureAtlas (spRegionAttachment* regionAttachment) const;
+	virtual cocos2d::TextureAtlas* getTextureAtlas (spRegionAttachment* regionAttachment) const;
 
 private:
 	bool ownsSkeletonData;
 	spAtlas* atlas;
+	cocos2d::BlendFunc blendFunc;
+	cocos2d::CustomCommand drawCommand;
 	void initialize ();
 };
 
 }
 
-#endif /* SPINE_CCSKELETON_H_ */
+#endif /* SPINE_SKELETONRENDERER_H_ */

+ 26 - 25
spine-cocos2dx/src/spine/spine-cocos2dx.cpp

@@ -34,8 +34,8 @@
 USING_NS_CC;
 
 void _spAtlasPage_createTexture (spAtlasPage* self, const char* path) {
-	CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage(path);
-	CCTextureAtlas* textureAtlas = CCTextureAtlas::createWithTexture(texture, 128);
+	Texture2D* texture = Director::getInstance()->getTextureCache()->addImage(path);
+	TextureAtlas* textureAtlas = TextureAtlas::createWithTexture(texture, 128);
 	textureAtlas->retain();
 	self->rendererObject = textureAtlas;
 	self->width = texture->getPixelsWide();
@@ -43,20 +43,21 @@ void _spAtlasPage_createTexture (spAtlasPage* self, const char* path) {
 }
 
 void _spAtlasPage_disposeTexture (spAtlasPage* self) {
-	((CCTextureAtlas*)self->rendererObject)->release();
+	((TextureAtlas*)self->rendererObject)->release();
 }
 
 char* _spUtil_readFile (const char* path, int* length) {
-	unsigned long size;
-	char* data = reinterpret_cast<char*>(CCFileUtils::sharedFileUtils()->getFileData(
-		CCFileUtils::sharedFileUtils()->fullPathForFilename(path).c_str(), "r", &size));
-	*length = size;
-	return data;
+	Data data = FileUtils::getInstance()->getDataFromFile(
+			FileUtils::getInstance()->fullPathForFilename(path).c_str());
+	*length = data.getSize();
+	char* bytes = MALLOC(char, *length);
+	memcpy(bytes, data.getBytes(), *length);
+	return bytes;
 }
 
 /**/
 
-void spRegionAttachment_updateQuad (spRegionAttachment* self, spSlot* slot, ccV3F_C4B_T2F_Quad* quad, bool premultipliedAlpha) {
+void spRegionAttachment_updateQuad (spRegionAttachment* self, spSlot* slot, V3F_C4B_T2F_Quad* quad, bool premultipliedAlpha) {
 	float vertices[8];
 	spRegionAttachment_computeWorldVertices(self, slot->skeleton->x, slot->skeleton->y, slot->bone, vertices);
 
@@ -87,21 +88,21 @@ void spRegionAttachment_updateQuad (spRegionAttachment* self, spSlot* slot, ccV3
 	quad->br.colors.b = b;
 	quad->br.colors.a = a;
 
-	quad->bl.vertices.x = vertices[VERTEX_X1];
-	quad->bl.vertices.y = vertices[VERTEX_Y1];
-	quad->tl.vertices.x = vertices[VERTEX_X2];
-	quad->tl.vertices.y = vertices[VERTEX_Y2];
-	quad->tr.vertices.x = vertices[VERTEX_X3];
-	quad->tr.vertices.y = vertices[VERTEX_Y3];
-	quad->br.vertices.x = vertices[VERTEX_X4];
-	quad->br.vertices.y = vertices[VERTEX_Y4];
+	quad->bl.vertices.x = vertices[SP_VERTEX_X1];
+	quad->bl.vertices.y = vertices[SP_VERTEX_Y1];
+	quad->tl.vertices.x = vertices[SP_VERTEX_X2];
+	quad->tl.vertices.y = vertices[SP_VERTEX_Y2];
+	quad->tr.vertices.x = vertices[SP_VERTEX_X3];
+	quad->tr.vertices.y = vertices[SP_VERTEX_Y3];
+	quad->br.vertices.x = vertices[SP_VERTEX_X4];
+	quad->br.vertices.y = vertices[SP_VERTEX_Y4];
 
-	quad->bl.texCoords.u = self->uvs[VERTEX_X1];
-	quad->bl.texCoords.v = self->uvs[VERTEX_Y1];
-	quad->tl.texCoords.u = self->uvs[VERTEX_X2];
-	quad->tl.texCoords.v = self->uvs[VERTEX_Y2];
-	quad->tr.texCoords.u = self->uvs[VERTEX_X3];
-	quad->tr.texCoords.v = self->uvs[VERTEX_Y3];
-	quad->br.texCoords.u = self->uvs[VERTEX_X4];
-	quad->br.texCoords.v = self->uvs[VERTEX_Y4];
+	quad->bl.texCoords.u = self->uvs[SP_VERTEX_X1];
+	quad->bl.texCoords.v = self->uvs[SP_VERTEX_Y1];
+	quad->tl.texCoords.u = self->uvs[SP_VERTEX_X2];
+	quad->tl.texCoords.v = self->uvs[SP_VERTEX_Y2];
+	quad->tr.texCoords.u = self->uvs[SP_VERTEX_X3];
+	quad->tr.texCoords.v = self->uvs[SP_VERTEX_Y3];
+	quad->br.texCoords.u = self->uvs[SP_VERTEX_X4];
+	quad->br.texCoords.v = self->uvs[SP_VERTEX_Y4];
 }

+ 3 - 3
spine-cocos2dx/src/spine/spine-cocos2dx.h

@@ -33,9 +33,9 @@
 
 #include <spine/spine.h>
 #include "cocos2d.h"
-#include <spine/CCSkeleton.h>
-#include <spine/CCSkeletonAnimation.h>
+#include <spine/SkeletonRenderer.h>
+#include <spine/SkeletonAnimation.h>
 
-void spRegionAttachment_updateQuad (spRegionAttachment* self, spSlot* slot, cocos2d::ccV3F_C4B_T2F_Quad* quad, bool premultiplied = false);
+void spRegionAttachment_updateQuad (spRegionAttachment* self, spSlot* slot, cocos2d::V3F_C4B_T2F_Quad* quad, bool premultiplied = false);
 
 #endif /* SPINE_COCOS2DX_H_ */