Răsfoiți Sursa

[cpp] All Spine objects derrive from SpineObject so we can override new/delete, which in turn calls SpineExtension allocation methods (not implemented yet). Refactored SpineExtension, removing use of macros, introducing use of templated static methods for more comfort. Rewired all allocation code throughout the runtime. See #1046.

badlogic 7 ani în urmă
părinte
comite
7180f17af2
95 a modificat fișierele cu 470 adăugiri și 11059 ștergeri
  1. 5 2
      CMakeLists.txt
  2. 9 9
      spine-cpp/spine-cpp-unit-tests/CMakeLists.txt
  3. 68 68
      spine-cpp/spine-cpp-unit-tests/tests/C_InterfaceTestFixture.cpp
  4. 0 0
      spine-cpp/spine-cpp-unit-tests/tests/MemoryTest.h
  5. 0 339
      spine-cpp/spine-cpp-unit-tests/tests/MemoryTestFixture.cpp
  6. 0 50
      spine-cpp/spine-cpp-unit-tests/tests/MemoryTestFixture.h
  7. 0 0
      spine-cpp/spine-cpp-unit-tests/tests/SimpleTest.h
  8. 0 0
      spine-cpp/spine-cpp-unit-tests/tests/main.cpp
  9. 2 1
      spine-cpp/spine-cpp/include/spine/Animation.h
  10. 5 4
      spine-cpp/spine-cpp/include/spine/AnimationState.h
  11. 4 3
      spine-cpp/spine-cpp/include/spine/AnimationStateData.h
  12. 4 3
      spine-cpp/spine-cpp/include/spine/Atlas.h
  13. 3 3
      spine-cpp/spine-cpp/include/spine/AtlasAttachmentLoader.h
  14. 2 2
      spine-cpp/spine-cpp/include/spine/Attachment.h
  15. 2 2
      spine-cpp/spine-cpp/include/spine/AttachmentLoader.h
  16. 1 1
      spine-cpp/spine-cpp/include/spine/AttachmentTimeline.h
  17. 1 1
      spine-cpp/spine-cpp/include/spine/Bone.h
  18. 2 2
      spine-cpp/spine-cpp/include/spine/BoneData.h
  19. 1 0
      spine-cpp/spine-cpp/include/spine/BoundingBoxAttachment.h
  20. 3 2
      spine-cpp/spine-cpp/include/spine/ContainerUtil.h
  21. 3 1
      spine-cpp/spine-cpp/include/spine/Event.h
  22. 3 1
      spine-cpp/spine-cpp/include/spine/EventData.h
  23. 43 23
      spine-cpp/spine-cpp/include/spine/Extension.h
  24. 9 9
      spine-cpp/spine-cpp/include/spine/HashMap.h
  25. 2 1
      spine-cpp/spine-cpp/include/spine/IkConstraintData.h
  26. 3 1
      spine-cpp/spine-cpp/include/spine/Json.h
  27. 3 1
      spine-cpp/spine-cpp/include/spine/LinkedMesh.h
  28. 3 1
      spine-cpp/spine-cpp/include/spine/MathUtil.h
  29. 2 1
      spine-cpp/spine-cpp/include/spine/PathConstraintData.h
  30. 3 3
      spine-cpp/spine-cpp/include/spine/Pool.h
  31. 2 1
      spine-cpp/spine-cpp/include/spine/RTTI.h
  32. 2 1
      spine-cpp/spine-cpp/include/spine/Skeleton.h
  33. 4 3
      spine-cpp/spine-cpp/include/spine/SkeletonBinary.h
  34. 3 2
      spine-cpp/spine-cpp/include/spine/SkeletonBounds.h
  35. 1 1
      spine-cpp/spine-cpp/include/spine/SkeletonClipping.h
  36. 1 1
      spine-cpp/spine-cpp/include/spine/SkeletonData.h
  37. 3 2
      spine-cpp/spine-cpp/include/spine/SkeletonJson.h
  38. 3 3
      spine-cpp/spine-cpp/include/spine/Skin.h
  39. 2 1
      spine-cpp/spine-cpp/include/spine/Slot.h
  40. 2 1
      spine-cpp/spine-cpp/include/spine/SlotData.h
  41. 45 73
      spine-cpp/spine-cpp/include/spine/SpineObject.h
  42. 3 1
      spine-cpp/spine-cpp/include/spine/TextureLoader.h
  43. 2 1
      spine-cpp/spine-cpp/include/spine/Timeline.h
  44. 2 1
      spine-cpp/spine-cpp/include/spine/TransformConstraintData.h
  45. 1 1
      spine-cpp/spine-cpp/include/spine/Triangulator.h
  46. 2 1
      spine-cpp/spine-cpp/include/spine/Updatable.h
  47. 5 4
      spine-cpp/spine-cpp/include/spine/Vector.h
  48. 1 1
      spine-cpp/spine-cpp/include/spine/Vertices.h
  49. 3 9
      spine-cpp/spine-cpp/src/spine/AnimationState.cpp
  50. 10 12
      spine-cpp/spine-cpp/src/spine/Atlas.cpp
  51. 8 30
      spine-cpp/spine-cpp/src/spine/AtlasAttachmentLoader.cpp
  52. 10 15
      spine-cpp/spine-cpp/src/spine/Extension.cpp
  53. 10 14
      spine-cpp/spine-cpp/src/spine/Json.cpp
  54. 6 12
      spine-cpp/spine-cpp/src/spine/Skeleton.cpp
  55. 70 98
      spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp
  56. 1 2
      spine-cpp/spine-cpp/src/spine/SkeletonBounds.cpp
  57. 47 77
      spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp
  58. 35 0
      spine-cpp/spine-cpp/src/spine/SpineObject.cpp
  59. 0 87
      spine-sfml/CMakeLists.txt
  60. 0 27
      spine-sfml/LICENSE
  61. 0 68
      spine-sfml/README.md
  62. 0 178
      spine-sfml/data/coin-pro.json
  63. BIN
      spine-sfml/data/coin-pro.skel
  64. 0 27
      spine-sfml/data/coin.atlas
  65. BIN
      spine-sfml/data/coin.png
  66. 0 1107
      spine-sfml/data/goblins-pro.json
  67. BIN
      spine-sfml/data/goblins-pro.skel
  68. 0 293
      spine-sfml/data/goblins.atlas
  69. BIN
      spine-sfml/data/goblins.png
  70. 0 240
      spine-sfml/data/owl-pro.json
  71. BIN
      spine-sfml/data/owl-pro.skel
  72. 0 195
      spine-sfml/data/owl.atlas
  73. BIN
      spine-sfml/data/owl.png
  74. 0 397
      spine-sfml/data/raptor-pro.json
  75. BIN
      spine-sfml/data/raptor-pro.skel
  76. 0 300
      spine-sfml/data/raptor.atlas
  77. BIN
      spine-sfml/data/raptor.png
  78. 0 1783
      spine-sfml/data/spineboy-ess.json
  79. BIN
      spine-sfml/data/spineboy-ess.skel
  80. 0 307
      spine-sfml/data/spineboy.atlas
  81. BIN
      spine-sfml/data/spineboy.png
  82. 0 283
      spine-sfml/data/stretchyman-pro.json
  83. BIN
      spine-sfml/data/stretchyman-pro.skel
  84. 0 41
      spine-sfml/data/stretchyman.atlas
  85. BIN
      spine-sfml/data/stretchyman.png
  86. 0 3842
      spine-sfml/data/tank-pro.json
  87. BIN
      spine-sfml/data/tank-pro.skel
  88. 0 174
      spine-sfml/data/tank.atlas
  89. BIN
      spine-sfml/data/tank.png
  90. 0 49
      spine-sfml/data/vine-pro.json
  91. BIN
      spine-sfml/data/vine-pro.skel
  92. 0 13
      spine-sfml/data/vine.atlas
  93. BIN
      spine-sfml/data/vine.png
  94. 0 461
      spine-sfml/example/main.cpp
  95. 0 285
      spine-sfml/src/spine/spine-sfml.cpp

+ 5 - 2
CMakeLists.txt

@@ -9,7 +9,9 @@ set(SPINE_COCOS2D_X FALSE CACHE BOOL FALSE)
 
 if((${SPINE_SFML}) OR (${CMAKE_CURRENT_BINARY_DIR} MATCHES "spine-sfml"))
 	add_subdirectory(spine-c)
-	add_subdirectory(spine-sfml)
+	add_subdirectory(spine-sfml/c)
+	add_subdirectory(spine-cpp)
+	add_subdirectory(spine-sfml/cpp)
 endif()
 
 if((${SPINE_COCOS2D_OBJC}) OR (${CMAKE_CURRENT_BINARY_DIR} MATCHES "spine-cocos2d-objc"))
@@ -22,4 +24,5 @@ if((${SPINE_COCOS2D_X}) OR (${CMAKE_CURRENT_BINARY_DIR} MATCHES "spine-cocos2dx"
 	add_subdirectory(spine-cocos2dx)
 endif()
 
-add_subdirectory(spine-c/spine-c-unit-tests)
+add_subdirectory(spine-c/spine-c-unit-tests)
+add_subdirectory(spine-cpp/spine-cpp-unit-tests)

+ 9 - 9
spine-cpp/spine-cpp-unit-tests/CMakeLists.txt

@@ -1,5 +1,5 @@
 cmake_minimum_required(VERSION 2.8.9)
-project(spine_unit_test)
+project(spine_cpp_unit_test)
 
 set(CMAKE_INSTALL_PREFIX "./")
 set(CMAKE_VERBOSE_MAKEFILE ON)
@@ -38,21 +38,21 @@ set(MEMLEAK_SRC
 #########################################################
 # setup main project
 #########################################################
-add_executable(spine_unit_test main.cpp ${MINICPP_SRC} ${TEAMCITY_SRC} ${TEST_SRC} ${MEMLEAK_SRC})
-target_link_libraries(spine_unit_test spine-cpp)
+add_executable(spine_cpp_unit_test main.cpp ${MINICPP_SRC} ${TEAMCITY_SRC} ${TEST_SRC} ${MEMLEAK_SRC})
+target_link_libraries(spine_cpp_unit_test spine-cpp)
 
 
 #########################################################
 # copy resources to build output directory
 #########################################################
-add_custom_command(TARGET spine_unit_test PRE_BUILD
+add_custom_command(TARGET spine_cpp_unit_test PRE_BUILD
 		COMMAND ${CMAKE_COMMAND} -E copy_directory
-		${CMAKE_CURRENT_LIST_DIR}/../../examples/spineboy/export $<TARGET_FILE_DIR:spine_unit_test>/testdata/spineboy)
+		${CMAKE_CURRENT_LIST_DIR}/../../examples/spineboy/export $<TARGET_FILE_DIR:spine_cpp_unit_test>/testdata/spineboy)
 
-add_custom_command(TARGET spine_unit_test PRE_BUILD
+add_custom_command(TARGET spine_cpp_unit_test PRE_BUILD
 		COMMAND ${CMAKE_COMMAND} -E copy_directory
-		${CMAKE_CURRENT_LIST_DIR}/../../examples/raptor/export $<TARGET_FILE_DIR:spine_unit_test>/testdata/raptor)
+		${CMAKE_CURRENT_LIST_DIR}/../../examples/raptor/export $<TARGET_FILE_DIR:spine_cpp_unit_test>/testdata/raptor)
 
-add_custom_command(TARGET spine_unit_test PRE_BUILD
+add_custom_command(TARGET spine_cpp_unit_test PRE_BUILD
 		COMMAND ${CMAKE_COMMAND} -E copy_directory
-		${CMAKE_CURRENT_LIST_DIR}/../../examples/goblins/export $<TARGET_FILE_DIR:spine_unit_test>/testdata/goblins)
+		${CMAKE_CURRENT_LIST_DIR}/../../examples/goblins/export $<TARGET_FILE_DIR:spine_cpp_unit_test>/testdata/goblins)

+ 68 - 68
spine-cpp/spine-cpp-unit-tests/tests/C_InterfaceTestFixture.cpp

@@ -1,28 +1,28 @@
 #include "C_InterfaceTestFixture.h" 
 #include "SpineEventMonitor.h" 
-
-#include <spine/SkeletonJson.h>
-#include <spine/SkeletonData.h>
-#include <spine/Atlas.h>
-#include <spine/AnimationStateData.h>
-#include <spine/Skeleton.h>
-#include <spine/AnimationState.h>
-#include <spine/Animation.h>
-
-#include <vector>
-#include <spine/Extension.h>
-#include <spine/TextureLoader.h>
-#include <spine/Vector.h>
-
-#include <spine/CurveTimeline.h>
-#include <spine/VertexAttachment.h>
-#include <spine/Json.h>
-
-#include <spine/AttachmentLoader.h>
-#include <spine/AtlasAttachmentLoader.h>
+
+#include <spine/SkeletonJson.h>
+#include <spine/SkeletonData.h>
+#include <spine/Atlas.h>
+#include <spine/AnimationStateData.h>
+#include <spine/Skeleton.h>
+#include <spine/AnimationState.h>
+#include <spine/Animation.h>
+
+#include <vector>
+#include <spine/Extension.h>
+#include <spine/TextureLoader.h>
+#include <spine/Vector.h>
+
+#include <spine/CurveTimeline.h>
+#include <spine/VertexAttachment.h>
+#include <spine/Json.h>
+
+#include <spine/AttachmentLoader.h>
+#include <spine/AtlasAttachmentLoader.h>
 #include <spine/LinkedMesh.h>
-
-#include <new>
+
+#include <new>
 
 #include "KMemory.h" // last include
 
@@ -35,7 +35,7 @@
 #define GOBLINS_JSON "testdata/goblins/goblins-pro.json"
 #define GOBLINS_ATLAS "testdata/goblins/goblins.atlas"
 
-#define MAX_RUN_TIME 6000 // equal to about 100 seconds of execution
+#define MAX_RUN_TIME 6000 // equal to about 100 seconds of execution
 
 void C_InterfaceTestFixture::setUp()
 {
@@ -45,21 +45,21 @@ void C_InterfaceTestFixture::tearDown()
 {
 }
 
-static Spine::SkeletonData* readSkeletonJsonData(const char* filename, Atlas* atlas)
-{
-    using namespace Spine;
-    
-    Vector<Atlas*> atlasArray;
-    atlasArray.push_back(atlas);
+static Spine::SkeletonData* readSkeletonJsonData(const char* filename, Atlas* atlas)
+{
+    using namespace Spine;
+
+    Vector<Atlas*> atlasArray;
+    atlasArray.push_back(atlas);
     
-    SkeletonJson* skeletonJson = NEW(SkeletonJson);
-    new (skeletonJson) SkeletonJson(atlasArray);
-	ASSERT(skeletonJson != 0);
+    SkeletonJson* skeletonJson = NEW(SkeletonJson);
+    new (skeletonJson) SkeletonJson(atlasArray);
+	ASSERT(skeletonJson != 0);
 
 	SkeletonData* skeletonData = skeletonJson->readSkeletonDataFile(filename);
 	ASSERT(skeletonData != 0);
 
-    DESTROY(SkeletonJson, skeletonJson);
+    DESTROY(SkeletonJson, skeletonJson);
     
 	return skeletonData;
 }
@@ -68,78 +68,78 @@ typedef std::vector<std::string> AnimList;
 
 static size_t enumerateAnimations(AnimList& outList, SkeletonData* skeletonData)
 {
-	if (skeletonData)
+	if (skeletonData)
     {
 		for (int n = 0; n < skeletonData->getAnimations().size(); n++)
-        {
-            outList.push_back(skeletonData->getAnimations()[n]->getName());
+        {
+            outList.push_back(skeletonData->getAnimations()[n]->getName());
         }
 	}
 
 	return outList.size();
-}
-
-class MyTextureLoader : public TextureLoader
-{
-    virtual void load(AtlasPage& page, std::string path)
-    {
-        page.rendererObject = NULL;
-        page.width = 2048;
-        page.height = 2048;
-    }
-    
-    virtual void unload(void* texture)
-    {
-        // TODO
-    }
+}
+
+class MyTextureLoader : public TextureLoader
+{
+    virtual void load(AtlasPage& page, std::string path)
+    {
+        page.rendererObject = NULL;
+        page.width = 2048;
+        page.height = 2048;
+    }
+    
+    virtual void unload(void* texture)
+    {
+        // TODO
+    }
 };
 
 static void testRunner(const char* jsonName, const char* atlasName)
 {    
 	///////////////////////////////////////////////////////////////////////////
-	// Global Animation Information
+	// Global Animation Information
     MyTextureLoader myTextureLoader;
-    Atlas* atlas = NEW(Atlas);
+    Atlas* atlas = NEW(Atlas);
     new (atlas) Atlas(atlasName, myTextureLoader);
 	ASSERT(atlas != 0);
 
 	SkeletonData* skeletonData = readSkeletonJsonData(jsonName, atlas);
 	ASSERT(skeletonData != 0);
 
-    AnimationStateData* stateData = NEW(AnimationStateData);
+    AnimationStateData* stateData = NEW(AnimationStateData);
     new (stateData) AnimationStateData(skeletonData);
 	ASSERT(stateData != 0);
 	stateData->setDefaultMix(0.2f); // force mixing
 
 	///////////////////////////////////////////////////////////////////////////
 	// Animation Instance 
-    Skeleton* skeleton = NEW(Skeleton);
+    Skeleton* skeleton = NEW(Skeleton);
     new (skeleton) Skeleton(skeletonData);
 	ASSERT(skeleton != 0);
 
-    AnimationState* state = NEW(AnimationState);
+    AnimationState* state = NEW(AnimationState);
     new (state) AnimationState(stateData);
 	ASSERT(state != 0);
 
 	///////////////////////////////////////////////////////////////////////////
 	// Run animation
 	skeleton->setToSetupPose();
-    SpineEventMonitor eventMonitor(state);
+    SpineEventMonitor eventMonitor(state);
 
 	AnimList anims; // Let's chain all the animations together as a test
 	size_t count = enumerateAnimations(anims, skeletonData);
-	if (count > 0)
-    {
-        state->setAnimation(0, anims[0].c_str(), false);
-    }
+	if (count > 0)
+    {
+        state->setAnimation(0, anims[0].c_str(), false);
+    }
     
-	for (size_t i = 1; i < count; ++i)
-    {
+	for (size_t i = 1; i < count; ++i)
+    {
         state->addAnimation(0, anims[i].c_str(), false, 0.0f);
 	}
 
 	// Run Loop
-	for (int i = 0; i < MAX_RUN_TIME && eventMonitor.isAnimationPlaying(); ++i)
+	for (int i = 0; i < MAX_RUN_TIME && eventMonitor.isAnimationPlaying(); ++i)
     {
 		const float timeSlice = 1.0f / 60.0f;
 		skeleton->update(timeSlice);
@@ -149,13 +149,13 @@ static void testRunner(const char* jsonName, const char* atlasName)
 	
 	///////////////////////////////////////////////////////////////////////////
 	// Dispose Instance
-    DESTROY(Skeleton, skeleton);
+    DESTROY(Skeleton, skeleton);
     DESTROY(AnimationState, state);
 
 	///////////////////////////////////////////////////////////////////////////
-	// Dispose Global
-    DESTROY(AnimationStateData, stateData);
-    DESTROY(SkeletonData, skeletonData);
+	// Dispose Global
+    DESTROY(AnimationStateData, stateData);
+    DESTROY(SkeletonData, skeletonData);
     DESTROY(Atlas, atlas);
 }
 

+ 0 - 0
spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test/MemoryTest.h → spine-cpp/spine-cpp-unit-tests/tests/MemoryTest.h


+ 0 - 339
spine-cpp/spine-cpp-unit-tests/tests/MemoryTestFixture.cpp

@@ -1,339 +0,0 @@
-#include <spine/Extension.h>
-#include "MemoryTestFixture.h"
-#include "SpineEventMonitor.h"
-
-#include "KMemory.h" // last include
-
-#define SPINEBOY_JSON "testdata/spineboy/spineboy-ess.json"
-#define SPINEBOY_ATLAS "testdata/spineboy/spineboy.atlas"
-
-#define MAX_RUN_TIME 6000 // equal to about 100 seconds of execution
-
-MemoryTestFixture::~MemoryTestFixture()
-{
-    finalize();
-}
-
-void MemoryTestFixture::initialize()
-{
-    // on a Per- Fixture Basis, before Test execution
-}
-
-void MemoryTestFixture::finalize()
-{
-    // on a Per- Fixture Basis, after all tests pass/fail
-}
-
-void MemoryTestFixture::setUp()
-{
-    // Setup on Per-Test Basis
-}
-
-void MemoryTestFixture::tearDown()
-{
-    // Tear Down on Per-Test Basis
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-// Helper methods
-static spSkeletonData* readSkeletonJsonData(const char* filename, spAtlas* atlas) {
-    spSkeletonJson* json = spSkeletonJson_create(atlas);
-    ASSERT(json != 0);
-
-    spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, filename);
-    ASSERT(skeletonData != 0);
-
-    spSkeletonJson_dispose(json);
-    return skeletonData;
-}
-
-static void LoadSpineboyExample(spAtlas* &atlas, spSkeletonData* &skeletonData, spAnimationStateData* &stateData, spSkeleton* &skeleton, spAnimationState* &state)
-{
-    ///////////////////////////////////////////////////////////////////////////
-    // Global Animation Information
-    atlas = spAtlas_createFromFile(SPINEBOY_ATLAS, 0);
-    ASSERT(atlas != 0);
-
-    skeletonData = readSkeletonJsonData(SPINEBOY_JSON, atlas);
-    ASSERT(skeletonData != 0);
-
-    stateData = spAnimationStateData_create(skeletonData);
-    ASSERT(stateData != 0);
-    stateData->defaultMix = 0.4f; // force mixing
-
-    ///////////////////////////////////////////////////////////////////////////
-    // Animation Instance 
-    skeleton = spSkeleton_create(skeletonData);
-    ASSERT(skeleton != 0);
-
-    state = spAnimationState_create(stateData);
-    ASSERT(state != 0);
-}
-
-static void DisposeAll(spSkeleton* skeleton, spAnimationState* state, spAnimationStateData* stateData, spSkeletonData* skeletonData, spAtlas* atlas)
-{
-    ///////////////////////////////////////////////////////////////////////////
-    // Dispose Instance
-    spSkeleton_dispose(skeleton);
-    spAnimationState_dispose(state);
-
-    ///////////////////////////////////////////////////////////////////////////
-    // Dispose Global
-    spAnimationStateData_dispose(stateData);
-    spSkeletonData_dispose(skeletonData);
-    spAtlas_dispose(atlas);
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-// Reproduce Memory leak as described in Issue #776
-// https://github.com/EsotericSoftware/spine-runtimes/issues/776
-void MemoryTestFixture::reproduceIssue_776()
-{
-    spAtlas* atlas = 0;
-    spSkeletonData* skeletonData = 0;
-    spAnimationStateData* stateData = 0;
-    spSkeleton* skeleton = 0;
-    spAnimationState* state = 0;
-
-    //////////////////////////////////////////////////////////////////////////
-    // Initialize Animations
-    LoadSpineboyExample(atlas, skeletonData, stateData, skeleton, state);
-
-    ///////////////////////////////////////////////////////////////////////////
-    // Run animation
-    spSkeleton_setToSetupPose(skeleton);
-    InterruptMonitor eventMonitor(state);
-    //eventMonitor.SetDebugLogging(true);
-
-    // Interrupt the animation on this specific sequence of spEventType(s)
-    eventMonitor
-        .AddInterruptEvent(SP_ANIMATION_INTERRUPT, "jump")
-        .AddInterruptEvent(SP_ANIMATION_START);
-
-    spAnimationState_setAnimationByName(state, 0, "walk", true);
-    spAnimationState_addAnimationByName(state, 0, "jump", false, 0.0f);
-    spAnimationState_addAnimationByName(state, 0, "run",  true,  0.0f);
-    spAnimationState_addAnimationByName(state, 0, "jump", false, 3.0f);
-    spAnimationState_addAnimationByName(state, 0, "walk", true,  0.0f);
-    spAnimationState_addAnimationByName(state, 0, "idle", false, 1.0f);
-
-    for (int i = 0; i < MAX_RUN_TIME && eventMonitor.isAnimationPlaying(); ++i) {
-        const float timeSlice = 1.0f / 60.0f;
-        spSkeleton_update(skeleton, timeSlice);
-        spAnimationState_update(state, timeSlice);
-        spAnimationState_apply(state, skeleton);
-    }
-
-    //////////////////////////////////////////////////////////////////////////
-    // Cleanup Animations
-    DisposeAll(skeleton, state, stateData, skeletonData, atlas);
-}
-
-void MemoryTestFixture::reproduceIssue_777()
-{
-    spAtlas* atlas = 0;
-    spSkeletonData* skeletonData = 0;
-    spAnimationStateData* stateData = 0;
-    spSkeleton* skeleton = 0;
-    spAnimationState* state = 0;
-
-    //////////////////////////////////////////////////////////////////////////
-    // Initialize Animations
-    LoadSpineboyExample(atlas, skeletonData, stateData, skeleton, state);
-
-    ///////////////////////////////////////////////////////////////////////////
-    // Run animation
-    spSkeleton_setToSetupPose(skeleton);
-    SpineEventMonitor eventMonitor(state);
-    //eventMonitor.SetDebugLogging(true);
-
-    // Set Animation and Play for 5 frames
-    spAnimationState_setAnimationByName(state, 0, "walk", true);
-    for (int i = 0; i < 5; ++i) {
-        const float timeSlice = 1.0f / 60.0f;
-        spSkeleton_update(skeleton, timeSlice);
-        spAnimationState_update(state, timeSlice);
-        spAnimationState_apply(state, skeleton);
-    }
-
-    // Change animation twice in a row
-    spAnimationState_setAnimationByName(state, 0, "walk", false);
-    spAnimationState_setAnimationByName(state, 0, "run", false);
-
-    // run normal update
-    for (int i = 0; i < 5; ++i) {
-        const float timeSlice = 1.0f / 60.0f;
-        spSkeleton_update(skeleton, timeSlice);
-        spAnimationState_update(state, timeSlice);
-        spAnimationState_apply(state, skeleton);
-    }
-
-    // Now we'd lose mixingFrom (the first "walk" entry we set above) and should leak
-    spAnimationState_setAnimationByName(state, 0, "run", false);
-
-    //////////////////////////////////////////////////////////////////////////
-    // Cleanup Animations
-    DisposeAll(skeleton, state, stateData, skeletonData, atlas);
-}
-
-spSkeleton* skeleton = 0;
-static void  spineAnimStateHandler(spAnimationState* state, int type, spTrackEntry* entry, spEvent* event)
-{
-    if (type == SP_ANIMATION_COMPLETE)
-    {
-        spAnimationState_setAnimationByName(state, 0, "walk", false);
-        spAnimationState_update(state, 0);
-        spAnimationState_apply(state, skeleton);
-    }
-}
-
-void MemoryTestFixture::reproduceIssue_Loop()
-{
-    spAtlas* atlas = 0;
-    spSkeletonData* skeletonData = 0;
-    spAnimationStateData* stateData = 0;
-    spAnimationState* state = 0;
-
-    //////////////////////////////////////////////////////////////////////////
-    // Initialize Animations
-    LoadSpineboyExample(atlas, skeletonData, stateData, skeleton, state);
-
-    ///////////////////////////////////////////////////////////////////////////
-
-    if (state)
-        state->listener = (spAnimationStateListener)&spineAnimStateHandler;
-
-    spAnimationState_setAnimationByName(state, 0, "walk", false);
-
-    // run normal update
-    for (int i = 0; i < 50; ++i) {
-        const float timeSlice = 1.0f / 60.0f;
-        spSkeleton_update(skeleton, timeSlice);
-        spAnimationState_update(state, timeSlice);
-        spAnimationState_apply(state, skeleton);
-    }
-
-    DisposeAll(skeleton, state, stateData, skeletonData, atlas);
-}
-
-void MemoryTestFixture::triangulator() {
-    spTriangulator* triangulator = spTriangulator_create();
-    spFloatArray* polygon = spFloatArray_create(16);
-    spFloatArray_add(polygon, 0);
-    spFloatArray_add(polygon, 0);
-    spFloatArray_add(polygon, 100);
-    spFloatArray_add(polygon, 0);
-    spFloatArray_add(polygon, 100);
-    spFloatArray_add(polygon, 100);
-    spFloatArray_add(polygon, 0);
-    spFloatArray_add(polygon, 100);
-
-    spShortArray* triangles = spTriangulator_triangulate(triangulator, polygon);
-    ASSERT(triangles->size == 6);
-    ASSERT(triangles->items[0] == 3);
-    ASSERT(triangles->items[1] == 0);
-    ASSERT(triangles->items[2] == 1);
-    ASSERT(triangles->items[3] == 3);
-    ASSERT(triangles->items[4] == 1);
-    ASSERT(triangles->items[5] == 2);
-
-    spArrayFloatArray* polys = spTriangulator_decompose(triangulator, polygon, triangles);
-    ASSERT(polys->size == 1);
-    ASSERT(polys->items[0]->size == 8);
-    ASSERT(polys->items[0]->items[0] == 0);
-    ASSERT(polys->items[0]->items[1] == 100);
-    ASSERT(polys->items[0]->items[2] == 0);
-    ASSERT(polys->items[0]->items[3] == 0);
-    ASSERT(polys->items[0]->items[4] == 100);
-    ASSERT(polys->items[0]->items[5] == 0);
-    ASSERT(polys->items[0]->items[6] == 100);
-    ASSERT(polys->items[0]->items[7] == 100);
-
-    spFloatArray_dispose(polygon);
-    spTriangulator_dispose(triangulator);
-}
-
-void MemoryTestFixture::skeletonClipper() {
-    spSkeletonClipping* clipping = spSkeletonClipping_create();
-
-    spBoneData* boneData = spBoneData_create(0, "bone", 0);
-    spBone* bone = spBone_create(boneData, 0, 0);
-    CONST_CAST(float, bone->a) = 1;
-    CONST_CAST(float, bone->b) = 0;
-    CONST_CAST(float, bone->c) = 0;
-    CONST_CAST(float, bone->d) = 1;
-    CONST_CAST(float, bone->worldX) = 0;
-    CONST_CAST(float, bone->worldY) = 0;
-    spSlotData* slotData = spSlotData_create(0, "slot", 0);
-    spSlot* slot = spSlot_create(slotData, bone);
-    spClippingAttachment* clip = spClippingAttachment_create("clipping");
-    clip->endSlot = slotData;
-    clip->super.worldVerticesLength = 4 * 2;
-    clip->super.verticesCount = 4;
-    clip->super.vertices = MALLOC(float, 4 * 8);
-    clip->super.vertices[0] = 0;
-    clip->super.vertices[1] = 50;
-    clip->super.vertices[2] = 100;
-    clip->super.vertices[3] = 50;
-    clip->super.vertices[4] = 100;
-    clip->super.vertices[5] = 70;
-    clip->super.vertices[6] = 0;
-    clip->super.vertices[7] = 70;
-
-    spSkeletonClipping_clipStart(clipping, slot, clip);
-
-    spFloatArray* vertices = spFloatArray_create(16);
-    spFloatArray_add(vertices, 0);
-    spFloatArray_add(vertices, 0);
-    spFloatArray_add(vertices, 100);
-    spFloatArray_add(vertices, 0);
-    spFloatArray_add(vertices, 50);
-    spFloatArray_add(vertices, 150);
-    spFloatArray* uvs = spFloatArray_create(16);
-    spFloatArray_add(uvs, 0);
-    spFloatArray_add(uvs, 0);
-    spFloatArray_add(uvs, 1);
-    spFloatArray_add(uvs, 0);
-    spFloatArray_add(uvs, 0.5f);
-    spFloatArray_add(uvs, 1);
-    spUnsignedShortArray* indices = spUnsignedShortArray_create(16);
-    spUnsignedShortArray_add(indices, 0);
-    spUnsignedShortArray_add(indices, 1);
-    spUnsignedShortArray_add(indices, 2);
-
-    spSkeletonClipping_clipTriangles(clipping, vertices->items, vertices->size, indices->items, indices->size, uvs->items, 2);
-
-    float expectedVertices[8] = { 83.333328, 50.000000, 76.666664, 70.000000, 23.333334, 70.000000, 16.666672, 50.000000 };
-    ASSERT(clipping->clippedVertices->size == 8);
-    for (int i = 0; i < clipping->clippedVertices->size; i++) {
-        ASSERT(ABS(clipping->clippedVertices->items[i] - expectedVertices[i]) < 0.001);
-    }
-
-    float expectedUVs[8] = { 0.833333f, 0.333333, 0.766667, 0.466667, 0.233333, 0.466667, 0.166667, 0.333333 };
-    ASSERT(clipping->clippedUVs->size == 8);
-    for (int i = 0; i < clipping->clippedUVs->size; i++) {
-        ASSERT(ABS(clipping->clippedUVs->items[i] - expectedUVs[i]) < 0.001);
-    }
-
-    short expectedIndices[6] = { 0, 1, 2, 0, 2, 3 };
-    ASSERT(clipping->clippedTriangles->size == 6);
-    for (int i = 0; i < clipping->clippedTriangles->size; i++) {
-        ASSERT(clipping->clippedTriangles->items[i] == expectedIndices[i]);
-    }
-
-    spFloatArray_dispose(vertices);
-    spFloatArray_dispose(uvs);
-    spUnsignedShortArray_dispose(indices);
-
-    spSlotData_dispose(slotData);
-    spSlot_dispose(slot);
-    spBoneData_dispose(boneData);
-    spBone_dispose(bone);
-    _spClippingAttachment_dispose(SUPER(SUPER(clip)));
-    spSkeletonClipping_dispose(clipping);
-}
-
-
-

+ 0 - 50
spine-cpp/spine-cpp-unit-tests/tests/MemoryTestFixture.h

@@ -1,50 +0,0 @@
-//////////////////////////////////////////////////////////////////////
-//	filename: 	MemoryTestFixture.h
-//	
-//	purpose:	Reproduce Memory Error/Leak Bugs to help debug
-//				and for regression testing
-/////////////////////////////////////////////////////////////////////
-
-#pragma once 
-#include "MiniCppUnit.hxx"
-#include "TestOptions.h"
-
-class MemoryTestFixture : public TestFixture < MemoryTestFixture >
-{
-public:
-	TEST_FIXTURE(MemoryTestFixture){
-
-		// Comment out here to disable individual test cases 
-		TEST_CASE(reproduceIssue_776);
-		TEST_CASE(reproduceIssue_777);
-		TEST_CASE(reproduceIssue_Loop);
-		TEST_CASE(triangulator);
-		TEST_CASE(skeletonClipper);
-
-		initialize();
-	}
-
-	virtual ~MemoryTestFixture();
-
-	//////////////////////////////////////////////////////////////////////////
-	// Test Cases
-	//////////////////////////////////////////////////////////////////////////
-public:
-	void reproduceIssue_776();
-	void reproduceIssue_777();
-	void reproduceIssue_Loop(); // http://esotericsoftware.com/forum/spine-c-3-5-animation-jerking-7451
-	void triangulator();
-	void skeletonClipper();
-
-	//////////////////////////////////////////////////////////////////////////
-	// test fixture setup
-	//////////////////////////////////////////////////////////////////////////
-	void initialize();
-	void finalize();
-public:
-	virtual void setUp();
-	virtual void tearDown();
-};
-#if defined(gForceAllTests) || defined(gMemoryTestFixture)
-REGISTER_FIXTURE(MemoryTestFixture);
-#endif

+ 0 - 0
spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test/SimpleTest.h → spine-cpp/spine-cpp-unit-tests/tests/SimpleTest.h


+ 0 - 0
spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test/main.cpp → spine-cpp/spine-cpp-unit-tests/tests/main.cpp


+ 2 - 1
spine-cpp/spine-cpp/include/spine/Animation.h

@@ -34,6 +34,7 @@
 #include <spine/Vector.h>
 #include <spine/MixPose.h>
 #include <spine/MixDirection.h>
+#include <spine/SpineObject.h>
 
 #include <string>
 
@@ -42,7 +43,7 @@ namespace Spine {
     class Skeleton;
     class Event;
     
-    class Animation {
+    class Animation : public SpineObject {
         friend class AnimationState;
         friend class TrackEntry;
         friend class AnimationStateData;

+ 5 - 4
spine-cpp/spine-cpp/include/spine/AnimationState.h

@@ -34,6 +34,7 @@
 #include <spine/Vector.h>
 #include <spine/Pool.h>
 #include <spine/MixPose.h>
+#include <spine/SpineObject.h>
 
 namespace Spine {
     enum EventType {
@@ -57,7 +58,7 @@ namespace Spine {
     typedef void (*OnAnimationEventFunc) (AnimationState* state, EventType type, TrackEntry* entry, Event* event);
     
     /// State for the playback of an animation
-    class TrackEntry {
+    class TrackEntry : public SpineObject {
         friend class EventQueue;
         friend class AnimationState;
         
@@ -238,7 +239,7 @@ namespace Spine {
         void reset();
     };
     
-    class EventQueueEntry {
+    class EventQueueEntry : public SpineObject {
         friend class EventQueue;
         
     public:
@@ -249,7 +250,7 @@ namespace Spine {
         EventQueueEntry(EventType eventType, TrackEntry* trackEntry, Event* event = NULL);
     };
     
-    class EventQueue {
+    class EventQueue : public SpineObject {
         friend class AnimationState;
         
     private:
@@ -282,7 +283,7 @@ namespace Spine {
         void drain();
     };
     
-    class AnimationState {
+    class AnimationState : public SpineObject {
         friend class TrackEntry;
         friend class EventQueue;
         

+ 4 - 3
spine-cpp/spine-cpp/include/spine/AnimationStateData.h

@@ -32,6 +32,7 @@
 #define Spine_AnimationStateData_h
 
 #include <spine/HashMap.h>
+#include <spine/SpineObject.h>
 
 #include <assert.h>
 #include <string>
@@ -41,7 +42,7 @@ namespace Spine {
     class Animation;
     
     /// Stores mix (crossfade) durations to be applied when AnimationState animations are changed.
-    class AnimationStateData {
+    class AnimationStateData : public SpineObject {
         friend class AnimationState;
         
     public:
@@ -68,7 +69,7 @@ namespace Spine {
         float getMix(Animation* from, Animation* to);
         
     private:
-        class AnimationPair {
+        class AnimationPair : public SpineObject {
         public:
             Animation* _a1;
             Animation* _a2;
@@ -78,7 +79,7 @@ namespace Spine {
             bool operator==(const AnimationPair &other) const;
         };
         
-        struct HashAnimationPair {
+        struct HashAnimationPair : public SpineObject {
             std::size_t operator()(const Spine::AnimationStateData::AnimationPair& val) const;
         };
         

+ 4 - 3
spine-cpp/spine-cpp/include/spine/Atlas.h

@@ -33,6 +33,7 @@
 
 #include <spine/Vector.h>
 #include <spine/Extension.h>
+#include <spine/SpineObject.h>
 
 #include <string>
 
@@ -63,7 +64,7 @@ namespace Spine {
         TextureWrap_Repeat
     };
     
-    class AtlasPage {
+    class AtlasPage : public SpineObject {
     public:
         std::string name;
         Format format;
@@ -77,7 +78,7 @@ namespace Spine {
         AtlasPage(std::string inName) : name(inName) {}
     };
     
-    class AtlasRegion {
+    class AtlasRegion : public SpineObject {
     public:
         AtlasPage* page;
         std::string name;
@@ -93,7 +94,7 @@ namespace Spine {
     
     class TextureLoader;
     
-    class Atlas {
+    class Atlas : SpineObject {
     public:
         Atlas(const char* path, TextureLoader& textureLoader);
         

+ 3 - 3
spine-cpp/spine-cpp/include/spine/AtlasAttachmentLoader.h

@@ -32,9 +32,9 @@
 #define Spine_AtlasAttachmentLoader_h
 
 #include <spine/AttachmentLoader.h>
-
 #include <spine/Vector.h>
 
+
 namespace Spine {
     class Atlas;
     class AtlasRegion;
@@ -47,7 +47,7 @@ namespace Spine {
         RTTI_DECL;
         
     public:
-        AtlasAttachmentLoader(Vector<Atlas*>& inAtlasArray);
+        AtlasAttachmentLoader(Atlas& atlas);
         
         virtual RegionAttachment* newRegionAttachment(Skin& skin, std::string name, std::string path);
         
@@ -64,7 +64,7 @@ namespace Spine {
         AtlasRegion* findRegion(std::string name);
         
     private:
-        Vector<Atlas*> _atlasArray;
+        Atlas& _atlas;
     };
 }
 

+ 2 - 2
spine-cpp/spine-cpp/include/spine/Attachment.h

@@ -32,11 +32,11 @@
 #define Spine_Attachment_h
 
 #include <spine/RTTI.h>
-
+#include <spine/SpineObject.h>
 #include <string>
 
 namespace Spine {
-    class Attachment {
+    class Attachment : public SpineObject {
         RTTI_DECL;
         
     public:

+ 2 - 2
spine-cpp/spine-cpp/include/spine/AttachmentLoader.h

@@ -32,7 +32,7 @@
 #define Spine_AttachmentLoader_h
 
 #include <spine/RTTI.h>
-
+#include <spine/SpineObject.h>
 #include <string>
 
 namespace Spine {
@@ -44,7 +44,7 @@ namespace Spine {
     class PointAttachment;
     class ClippingAttachment;
     
-    class AttachmentLoader {
+    class AttachmentLoader : public SpineObject {
         RTTI_DECL;
         
         AttachmentLoader();

+ 1 - 1
spine-cpp/spine-cpp/include/spine/AttachmentTimeline.h

@@ -32,7 +32,7 @@
 #define Spine_AttachmentTimeline_h
 
 #include <spine/Timeline.h>
-
+#include <spine/SpineObject.h>
 #include <spine/Vector.h>
 #include <spine/MixPose.h>
 #include <spine/MixDirection.h>

+ 1 - 1
spine-cpp/spine-cpp/include/spine/Bone.h

@@ -32,7 +32,7 @@
 #define Spine_Bone_h
 
 #include <spine/Updatable.h>
-
+#include <spine/SpineObject.h>
 #include <spine/Vector.h>
 
 namespace Spine {

+ 2 - 2
spine-cpp/spine-cpp/include/spine/BoneData.h

@@ -32,11 +32,11 @@
 #define Spine_BoneData_h
 
 #include <spine/TransformMode.h>
-
+#include <spine/SpineObject.h>
 #include <string>
 
 namespace Spine {
-    class BoneData {
+    class BoneData : public SpineObject {
         friend class SkeletonBinary;
         friend class SkeletonJson;
         

+ 1 - 0
spine-cpp/spine-cpp/include/spine/BoundingBoxAttachment.h

@@ -32,6 +32,7 @@
 #define Spine_BoundingBoxAttachment_h
 
 #include <spine/VertexAttachment.h>
+#include <spine/SpineObject.h>
 
 namespace Spine {
     /// Attachment that has a polygon for bounds checking.

+ 3 - 2
spine-cpp/spine-cpp/include/spine/ContainerUtil.h

@@ -34,12 +34,13 @@
 #include <spine/Extension.h>
 #include <spine/Vector.h>
 #include <spine/HashMap.h>
+#include <spine/SpineObject.h>
 
 #include <string>
 #include <assert.h>
 
 namespace Spine {
-    class ContainerUtil {
+    class ContainerUtil : public SpineObject {
     public:
         /// Finds an item by comparing each item's name.
         /// It is more efficient to cache the results of this method than to call it multiple times.
@@ -110,7 +111,7 @@ namespace Spine {
             for (size_t i = 0; i < items.size(); ) {
                 T* item = items[i];
                 
-                DESTROY(T, item);
+                delete item;
                 
                 items.erase(i);
             }

+ 3 - 1
spine-cpp/spine-cpp/include/spine/Event.h

@@ -31,13 +31,15 @@
 #ifndef Spine_Event_h
 #define Spine_Event_h
 
+#include <spine/SpineObject.h>
+
 #include <string>
 
 namespace Spine {
     class EventData;
     
     /// Stores the current pose values for an Event.
-    class Event {
+    class Event : public SpineObject {
         friend class SkeletonBinary;
         friend class SkeletonJson;
         friend class AnimationState;

+ 3 - 1
spine-cpp/spine-cpp/include/spine/EventData.h

@@ -31,11 +31,13 @@
 #ifndef Spine_EventData_h
 #define Spine_EventData_h
 
+#include <spine/SpineObject.h>
+
 #include <string>
 
 namespace Spine {
     /// Stores the setup pose values for an Event.
-    class EventData {
+    class EventData : public SpineObject {
         friend class SkeletonBinary;
         friend class SkeletonJson;
         friend class Event;

+ 43 - 23
spine-cpp/spine-cpp/include/spine/Extension.h

@@ -33,42 +33,64 @@
 
 #include <stdlib.h>
 
-#define SPINE_EXTENSION (SpineExtension::getInstance())
+// #define SPINE_EXTENSION (SpineExtension::getInstance())
 
 /* All allocation uses these. */
+/*
 #define MALLOC(TYPE,COUNT) ((TYPE*)SPINE_EXTENSION->spineAlloc(sizeof(TYPE) * (COUNT), __FILE__, __LINE__))
 #define CALLOC(TYPE,COUNT) ((TYPE*)SPINE_EXTENSION->spineCalloc(COUNT, sizeof(TYPE), __FILE__, __LINE__))
 #define NEW(TYPE) CALLOC(TYPE,1)
 #define REALLOC(PTR,TYPE,COUNT) ((TYPE*)SPINE_EXTENSION->spineRealloc(PTR, sizeof(TYPE) * (COUNT), __FILE__, __LINE__))
+*/
 
 /* Frees memory. Can be used on const types. */
-#define FREE(VALUE) SPINE_EXTENSION->spineFree((void*)VALUE)
+// #define FREE(VALUE) SPINE_EXTENSION->spinefree(VALUE)
 
 /* Call destructor and then frees memory. Can be used on const types. */
-#define DESTROY(TYPE,VALUE) VALUE->~TYPE(); SPINE_EXTENSION->spineFree((void*)VALUE)
+// #define DESTROY(TYPE,VALUE) VALUE->~TYPE(); SPINE_EXTENSION->spinefree(VALUE)
 
 namespace Spine {
     class SpineExtension {
     public:
+        template <typename T> static T* alloc(size_t num, const char* file, int line) {
+            return (T*)getInstance()->_alloc(sizeof(T) * num, file, line);
+        }
+
+        template <typename T> static T* calloc(size_t num, const char* file, int line) {
+            return (T*)getInstance()->_calloc(sizeof(T) * num, file, line);
+        }
+
+        template <typename T> static T* realloc(T* ptr, size_t num, const char* file, int line) {
+            return (T*)getInstance()->_realloc(ptr, sizeof(T) * num, file, line);
+        }
+
+        template <typename T> static void free(T* ptr) {
+            getInstance()->_free((void*)ptr);
+        }
+
+        static char* readFile(const char* path, int* length) {
+            return getInstance()->_readFile(path, length);
+        }
+
         static void setInstance(SpineExtension* inSpineExtension);
-        
+
         static SpineExtension* getInstance();
-        
+
         virtual ~SpineExtension();
-        
+
+    protected:
         /// Implement this function to use your own memory allocator
-        virtual void* spineAlloc(size_t size, const char* file, int line) = 0;
+        virtual void* _alloc(size_t size, const char* file, int line) = 0;
         
-        virtual void* spineCalloc(size_t num, size_t size, const char* file, int line) = 0;
+        virtual void* _calloc(size_t size, const char* file, int line) = 0;
         
-        virtual void* spineRealloc(void* ptr, size_t size, const char* file, int line) = 0;
+        virtual void* _realloc(void* ptr, size_t size, const char* file, int line) = 0;
         
         /// If you provide a spineAllocFunc, you should also provide a spineFreeFunc
-        virtual void spineFree(void* mem) = 0;
+        virtual void _free(void* mem) = 0;
         
-        virtual char* spineReadFile(const char* path, int* length);
-        
-    protected:
+        virtual char* _readFile(const char* path, int* length);
+
         SpineExtension();
         
     private:
@@ -77,19 +99,17 @@ namespace Spine {
     
     class DefaultSpineExtension : public SpineExtension {
     public:
-        static DefaultSpineExtension* getInstance();
-        
         virtual ~DefaultSpineExtension();
+
+    protected:
+        virtual void* _alloc(size_t size, const char* file, int line);
         
-        virtual void* spineAlloc(size_t size, const char* file, int line);
-        
-        virtual void* spineCalloc(size_t num, size_t size, const char* file, int line);
-        
-        virtual void* spineRealloc(void* ptr, size_t size, const char* file, int line);
-        
-        virtual void spineFree(void* mem);
+        virtual void* _calloc(size_t size, const char* file, int line);
         
-    protected:
+        virtual void* _realloc(void* ptr, size_t size, const char* file, int line);
+
+        virtual void _free(void* mem);
+
         DefaultSpineExtension();
     };
 }

+ 9 - 9
spine-cpp/spine-cpp/include/spine/HashMap.h

@@ -33,15 +33,16 @@
 
 #include <spine/Extension.h>
 #include <spine/Vector.h>
+#include <spine/SpineObject.h>
 
 namespace Spine {
     template <typename K, typename V, typename H>
-    class HashMap {
+    class HashMap : public SpineObject {
     private:
         class Entry;
         
     public:
-        class Iterator {
+        class Iterator : public SpineObject {
             friend class HashMap;
             
         public:
@@ -129,8 +130,7 @@ namespace Spine {
             
             size_t index = hash(key);
             
-            Entry* entry = NEW(Entry);
-            new (entry) Entry();
+            Entry* entry = new Entry();
             entry->_key = key;
             entry->_value = value;
             
@@ -222,7 +222,7 @@ namespace Spine {
                         pos._entry->next->prev = pos._entry->prev;
                     }
                     
-                    DESTROY(Entry, pos._entry);
+                    delete pos._entry;
                 }
                 else if (_hashTable[index].next == pos._entry) {
                     _hashTable[index].next = pos._entry->next;
@@ -235,7 +235,7 @@ namespace Spine {
                         pos._entry->next->prev = pos._entry->prev;
                     }
                     
-                    DESTROY(Entry, pos._entry);
+                    delete pos._entry;
                 }
                 else if (_hashTable[index].prev == pos._entry) {
                     _hashTable[index].prev = pos._entry->prev;
@@ -248,13 +248,13 @@ namespace Spine {
                         pos._entry->next->prev = pos._entry->prev;
                     }
                     
-                    DESTROY(Entry, pos._entry);
+                    delete pos._entry;
                 }
                 else {
                     pos._entry->prev->next = pos._entry->next;
                     pos._entry->next->prev = pos._entry->prev;
                     
-                    DESTROY(Entry, pos._entry);
+                    delete pos._entry;
                 }
                 
                 _hashSize--;
@@ -276,7 +276,7 @@ namespace Spine {
         }
         
     private:
-        class Entry {
+        class Entry : public SpineObject {
         public:
             K _key;
             V _value;

+ 2 - 1
spine-cpp/spine-cpp/include/spine/IkConstraintData.h

@@ -32,13 +32,14 @@
 #define Spine_IkConstraintData_h
 
 #include <spine/Vector.h>
+#include <spine/SpineObject.h>
 
 #include <string>
 
 namespace Spine {
     class BoneData;
     
-    class IkConstraintData {
+    class IkConstraintData : public SpineObject {
         friend class SkeletonBinary;
         friend class SkeletonJson;
         friend class IkConstraint;

+ 3 - 1
spine-cpp/spine-cpp/include/spine/Json.h

@@ -31,13 +31,15 @@
 #ifndef Spine_Json_h
 #define Spine_Json_h
 
+#include <spine/SpineObject.h>
+
 #ifndef SPINE_JSON_HAVE_PREV
 /* Spine doesn't use the "prev" link in the Json sibling lists. */
 #define SPINE_JSON_HAVE_PREV 0
 #endif
 
 namespace Spine {
-    class Json {
+    class Json : public SpineObject {
         friend class SkeletonJson;
         
     public:

+ 3 - 1
spine-cpp/spine-cpp/include/spine/LinkedMesh.h

@@ -31,12 +31,14 @@
 #ifndef Spine_LinkedMesh_h
 #define Spine_LinkedMesh_h
 
+#include <spine/SpineObject.h>
+
 #include <string>
 
 namespace Spine {
     class MeshAttachment;
     
-    class LinkedMesh {
+    class LinkedMesh : public SpineObject {
         friend class SkeletonBinary;
         friend class SkeletonJson;
         

+ 3 - 1
spine-cpp/spine-cpp/include/spine/MathUtil.h

@@ -31,6 +31,8 @@
 #ifndef Spine_MathUtil_h
 #define Spine_MathUtil_h
 
+#include <spine/SpineObject.h>
+
 #include <math.h>
 #include <float.h>
 
@@ -78,7 +80,7 @@ namespace Spine {
         return fminf(upper, fmaxf(x, lower));
     }
     
-    class MathUtil {
+    class MathUtil : public SpineObject {
     public:
         MathUtil();
         

+ 2 - 1
spine-cpp/spine-cpp/include/spine/PathConstraintData.h

@@ -35,6 +35,7 @@
 #include <spine/SpacingMode.h>
 #include <spine/RotateMode.h>
 #include <spine/Vector.h>
+#include <spine/SpineObject.h>
 
 #include <string>
 
@@ -42,7 +43,7 @@ namespace Spine {
     class BoneData;
     class SlotData;
     
-    class PathConstraintData {
+    class PathConstraintData : public SpineObject {
         friend class SkeletonBinary;
         friend class SkeletonJson;
         

+ 3 - 3
spine-cpp/spine-cpp/include/spine/Pool.h

@@ -34,10 +34,11 @@
 #include <spine/Extension.h>
 #include <spine/Vector.h>
 #include <spine/ContainerUtil.h>
+#include <spine/SpineObject.h>
 
 namespace Spine {
     template <typename T>
-    class Pool {
+    class Pool : public SpineObject {
     public:
         Pool() {
             // Empty
@@ -56,8 +57,7 @@ namespace Spine {
                 return ret;
             }
             else {
-                T* ret = NEW(T);
-                new (ret) T();
+                T* ret = new T();
                 
                 return ret;
             }

+ 2 - 1
spine-cpp/spine-cpp/include/spine/RTTI.h

@@ -31,10 +31,11 @@
 #ifndef Spine_RTTI_h
 #define Spine_RTTI_h
 
+#include <spine/SpineObject.h>
 #include <string>
 
 namespace Spine {
-    class RTTI {
+    class RTTI : public SpineObject {
     public:
         RTTI(const std::string& className);
         

+ 2 - 1
spine-cpp/spine-cpp/include/spine/Skeleton.h

@@ -33,6 +33,7 @@
 
 #include <spine/Vector.h>
 #include <spine/MathUtil.h>
+#include <spine/SpineObject.h>
 
 #include <string>
 #include <limits> // std::numeric_limits
@@ -48,7 +49,7 @@ namespace Spine {
     class Skin;
     class Attachment;
     
-    class Skeleton {
+    class Skeleton : public SpineObject {
         friend class AnimationState;
         friend class SkeletonBounds;
         friend class SkeletonClipping;

+ 4 - 3
spine-cpp/spine-cpp/include/spine/SkeletonBinary.h

@@ -33,6 +33,7 @@
 
 #include <spine/TransformMode.h>
 #include <spine/Vector.h>
+#include <spine/SpineObject.h>
 
 #include <string>
 
@@ -47,7 +48,7 @@ namespace Spine {
     class Animation;
     class CurveTimeline;
     
-    class SkeletonBinary {
+    class SkeletonBinary : public SpineObject {
     public:
         static const int BONE_ROTATE;
         static const int BONE_TRANSLATE;
@@ -68,7 +69,7 @@ namespace Spine {
         
         static const TransformMode TRANSFORM_MODE_VALUES[5];
         
-        SkeletonBinary(Vector<Atlas*>& atlasArray);
+        SkeletonBinary(Atlas& atlasArray);
         
         SkeletonBinary(AttachmentLoader* attachmentLoader);
         
@@ -79,7 +80,7 @@ namespace Spine {
         SkeletonData* readSkeletonDataFile(const char* path);
         
     private:
-        struct DataInput {
+        struct DataInput : public SpineObject {
             const unsigned char* cursor;
             const unsigned char* end;
         };

+ 3 - 2
spine-cpp/spine-cpp/include/spine/SkeletonBounds.h

@@ -32,6 +32,7 @@
 #define Spine_SkeletonBounds_h
 
 #include <spine/Vector.h>
+#include <spine/SpineObject.h>
 
 namespace Spine {
     class Skeleton;
@@ -43,7 +44,7 @@ namespace Spine {
     /// Collects each BoundingBoxAttachment that is visible and computes the world vertices for its polygon.
     /// The polygon vertices are provided along with convenience methods for doing hit detection.
     ///
-    class SkeletonBounds {
+    class SkeletonBounds : public SpineObject {
     public:
         SkeletonBounds();
         
@@ -94,7 +95,7 @@ namespace Spine {
         void aabbCompute();
     };
     
-    class Polygon {
+    class Polygon : public SpineObject {
     public:
         Vector<float> _vertices;
         int _count;

+ 1 - 1
spine-cpp/spine-cpp/include/spine/SkeletonClipping.h

@@ -38,7 +38,7 @@ namespace Spine {
     class Slot;
     class ClippingAttachment;
     
-    class SkeletonClipping {
+    class SkeletonClipping : public SpineObject {
     public:
         SkeletonClipping();
         

+ 1 - 1
spine-cpp/spine-cpp/include/spine/SkeletonData.h

@@ -46,7 +46,7 @@ namespace Spine {
     class PathConstraintData;
     
     /// Stores the setup pose and all of the stateless data for a skeleton.
-    class SkeletonData {
+    class SkeletonData : public SpineObject {
         friend class SkeletonBinary;
         friend class SkeletonJson;
         friend class Skeleton;

+ 3 - 2
spine-cpp/spine-cpp/include/spine/SkeletonJson.h

@@ -32,6 +32,7 @@
 #define Spine_SkeletonJson_h
 
 #include <spine/Vector.h>
+#include <spine/SpineObject.h>
 
 #include <string>
 
@@ -45,9 +46,9 @@ namespace Spine {
     class AttachmentLoader;
     class LinkedMesh;
     
-    class SkeletonJson {
+    class SkeletonJson : public SpineObject {
     public:
-        SkeletonJson(Vector<Atlas*>& atlasArray);
+        SkeletonJson(Atlas& atlas);
         
         SkeletonJson(AttachmentLoader* attachmentLoader);
         

+ 3 - 3
spine-cpp/spine-cpp/include/spine/Skin.h

@@ -42,11 +42,11 @@ namespace Spine {
     /// Stores attachments by slot index and attachment name.
     /// See SkeletonData::getDefaultSkin, Skeleton::getSkin, and
     /// http://esotericsoftware.com/spine-runtime-skins in the Spine Runtimes Guide.
-    class Skin {
+    class Skin : public SpineObject {
         friend class Skeleton;
         
     public:
-        class AttachmentKey {
+        class AttachmentKey : public SpineObject {
         public:
             int _slotIndex;
             std::string _name;
@@ -56,7 +56,7 @@ namespace Spine {
             bool operator==(const AttachmentKey &other) const;
         };
         
-        struct HashAttachmentKey {
+        struct HashAttachmentKey : public SpineObject {
             std::size_t operator()(const Spine::Skin::AttachmentKey& val) const;
         };
         

+ 2 - 1
spine-cpp/spine-cpp/include/spine/Slot.h

@@ -32,6 +32,7 @@
 #define Spine_Slot_h
 
 #include <spine/Vector.h>
+#include <spine/SpineObject.h>
 
 #include <string>
 
@@ -41,7 +42,7 @@ namespace Spine {
     class Skeleton;
     class Attachment;
     
-    class Slot {
+    class Slot : public SpineObject {
         friend class VertexAttachment;
         friend class Skeleton;
         friend class SkeletonBounds;

+ 2 - 1
spine-cpp/spine-cpp/include/spine/SlotData.h

@@ -32,13 +32,14 @@
 #define Spine_SlotData_h
 
 #include <spine/BlendMode.h>
+#include <spine/SpineObject.h>
 
 #include <string>
 
 namespace Spine {
     class BoneData;
     
-    class SlotData {
+    class SlotData : public SpineObject {
         friend class SkeletonBinary;
         friend class SkeletonJson;
         

+ 45 - 73
spine-sfml/src/spine/spine-sfml.h → spine-cpp/spine-cpp/include/spine/SpineObject.h

@@ -1,73 +1,45 @@
-/******************************************************************************
- * Spine Runtimes Software License v2.5
- *
- * Copyright (c) 2013-2016, Esoteric Software
- * All rights reserved.
- *
- * You are granted a perpetual, non-exclusive, non-sublicensable, and
- * non-transferable license to use, install, execute, and perform the Spine
- * Runtimes software and derivative works solely for personal or internal
- * use. Without the written permission of Esoteric Software (see Section 2 of
- * the Spine Software License Agreement), you may not (a) modify, translate,
- * adapt, or develop new applications using the Spine Runtimes or otherwise
- * create derivative works or improvements of the Spine Runtimes or (b) remove,
- * delete, alter, or obscure any trademarks or any copyright, trademark, patent,
- * or other intellectual property or proprietary rights notices on or in the
- * Software, including any copy thereof. Redistributions in binary or source
- * form must include this license and terms.
- *
- * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF
- * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#ifndef SPINE_SFML_H_
-#define SPINE_SFML_H_
-
-#include <spine/spine.h>
-#include <spine/extension.h>
-#include <SFML/Graphics/Vertex.hpp>
-#include <SFML/Graphics/VertexArray.hpp>
-#include <SFML/Graphics/Texture.hpp>
-#include <SFML/Graphics/RenderTarget.hpp>
-#include <SFML/Graphics/RenderStates.hpp>
-
-_SP_ARRAY_DECLARE_TYPE(spColorArray, spColor)
-
-namespace spine {
-
-class SkeletonDrawable: public sf::Drawable {
-public:
-	spSkeleton* skeleton;
-	spAnimationState* state;
-	float timeScale;
-	sf::VertexArray* vertexArray;
-	spVertexEffect* vertexEffect;
-
-	SkeletonDrawable (spSkeletonData* skeleton, spAnimationStateData* stateData = 0);
-	~SkeletonDrawable ();
-
-	void update (float deltaTime);
-
-	virtual void draw (sf::RenderTarget& target, sf::RenderStates states) const;
-
-	void setUsePremultipliedAlpha(bool usePMA) { usePremultipliedAlpha = usePMA; };
-	bool getUsePremultipliedAlpha() { return usePremultipliedAlpha; };
-private:
-	bool ownsAnimationStateData;
-	float* worldVertices;
-	spFloatArray* tempUvs;
-	spColorArray* tempColors;
-	spSkeletonClipping* clipper;
-	bool usePremultipliedAlpha;
-};
-
-} /* namespace spine */
-#endif /* SPINE_SFML_H_ */
+/******************************************************************************
+ * Spine Runtimes Software License v2.5
+ *
+ * Copyright (c) 2013-2016, Esoteric Software
+ * All rights reserved.
+ *
+ * You are granted a perpetual, non-exclusive, non-sublicensable, and
+ * non-transferable license to use, install, execute, and perform the Spine
+ * Runtimes software and derivative works solely for personal or internal
+ * use. Without the written permission of Esoteric Software (see Section 2 of
+ * the Spine Software License Agreement), you may not (a) modify, translate,
+ * adapt, or develop new applications using the Spine Runtimes or otherwise
+ * create derivative works or improvements of the Spine Runtimes or (b) remove,
+ * delete, alter, or obscure any trademarks or any copyright, trademark, patent,
+ * or other intellectual property or proprietary rights notices on or in the
+ * Software, including any copy thereof. Redistributions in binary or source
+ * form must include this license and terms.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF
+ * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *****************************************************************************/
+
+#ifndef Spine_Object_h
+#define Spine_Object_h
+
+#include <new>
+
+namespace Spine {
+	class SpineObject {
+	public:
+		void* operator new(size_t sz);
+		void* operator new(size_t sz, void* p);
+		void operator delete(void* p);
+	};
+}
+
+#endif

+ 3 - 1
spine-cpp/spine-cpp/include/spine/TextureLoader.h

@@ -31,12 +31,14 @@
 #ifndef Spine_TextureLoader_h
 #define Spine_TextureLoader_h
 
+#include <spine/SpineObject.h>
+
 #include <string>
 
 namespace Spine {
     class AtlasPage;
     
-    class TextureLoader {
+    class TextureLoader : public SpineObject {
     public:
         TextureLoader();
         

+ 2 - 1
spine-cpp/spine-cpp/include/spine/Timeline.h

@@ -35,12 +35,13 @@
 #include <spine/Vector.h>
 #include <spine/MixPose.h>
 #include <spine/MixDirection.h>
+#include <spine/SpineObject.h>
 
 namespace Spine {
     class Skeleton;
     class Event;
     
-    class Timeline {
+    class Timeline : public SpineObject {
         RTTI_DECL;
         
     public:

+ 2 - 1
spine-cpp/spine-cpp/include/spine/TransformConstraintData.h

@@ -32,13 +32,14 @@
 #define Spine_TransformConstraintData_h
 
 #include <spine/Vector.h>
+#include <spine/SpineObject.h>
 
 #include <string>
 
 namespace Spine {
     class BoneData;
     
-    class TransformConstraintData {
+    class TransformConstraintData : public SpineObject {
         friend class SkeletonBinary;
         friend class SkeletonJson;
         

+ 1 - 1
spine-cpp/spine-cpp/include/spine/Triangulator.h

@@ -35,7 +35,7 @@
 #include <spine/Pool.h>
 
 namespace Spine {
-    class Triangulator {
+    class Triangulator : public SpineObject {
     public:
         Vector<int>& triangulate(Vector<float>& vertices);
         

+ 2 - 1
spine-cpp/spine-cpp/include/spine/Updatable.h

@@ -32,9 +32,10 @@
 #define Spine_Updatable_h
 
 #include <spine/RTTI.h>
+#include <spine/SpineObject.h>
 
 namespace Spine {
-    class Updatable {
+    class Updatable : public SpineObject {
         RTTI_DECL;
         
     public:

+ 5 - 4
spine-cpp/spine-cpp/include/spine/Vector.h

@@ -32,6 +32,7 @@
 #define Spine_Vector_h
 
 #include <spine/Extension.h>
+#include <spine/SpineObject.h>
 
 #include <stdlib.h>
 #include <memory>
@@ -39,7 +40,7 @@
 
 namespace Spine {
     template <typename T>
-    class Vector {
+    class Vector : public SpineObject {
     public:
         Vector() : _size(0), _capacity(0), _buffer(NULL) {
             // Empty
@@ -157,7 +158,7 @@ namespace Spine {
         void reserve(size_t inCapacity = 0) {
             size_t newCapacity = inCapacity > 0 ? inCapacity : _capacity > 0 ? _capacity * 2 : 1;
             if (newCapacity > _capacity) {
-                _buffer = REALLOC(_buffer, T, newCapacity);
+                _buffer = (T*)SpineExtension::realloc<T>(_buffer, newCapacity, __FILE__, __LINE__);
                 _capacity = newCapacity;
             }
         }
@@ -202,7 +203,7 @@ namespace Spine {
         T* allocate(size_t n) {
             assert(n > 0);
             
-            T* ptr = MALLOC(T, n);
+            T* ptr = (T*)SpineExtension::alloc<T>(n, __FILE__, __LINE__);
             
             assert(ptr);
             
@@ -211,7 +212,7 @@ namespace Spine {
         
         void deallocate(T* buffer) {
             if (_buffer) {
-                FREE(buffer);
+                SpineExtension::free<T>(buffer);
             }
         }
         

+ 1 - 1
spine-cpp/spine-cpp/include/spine/Vertices.h

@@ -34,7 +34,7 @@
 #include <spine/Vector.h>
 
 namespace Spine {
-    class Vertices {
+    class Vertices : public SpineObject {
     public:
         Vector<int> _bones;
         Vector<float> _vertices;

+ 3 - 9
spine-cpp/spine-cpp/src/spine/AnimationState.cpp

@@ -216,17 +216,11 @@ namespace Spine {
     }
     
     EventQueue* EventQueue::newEventQueue(AnimationState& state, Pool<TrackEntry>& trackEntryPool) {
-        EventQueue* ret = NEW(EventQueue);
-        new (ret) EventQueue(state, trackEntryPool);
-        
-        return ret;
+        return new EventQueue(state, trackEntryPool);
     }
     
     EventQueueEntry* EventQueue::newEventQueueEntry(EventType eventType, TrackEntry* entry, Event* event) {
-        EventQueueEntry* ret = NEW(EventQueueEntry);
-        new (ret) EventQueueEntry(eventType, entry, event);
-        
-        return ret;
+        return new EventQueueEntry(eventType, entry, event);
     }
     
     EventQueue::EventQueue(AnimationState& state, Pool<TrackEntry>& trackEntryPool) : _state(state), _trackEntryPool(trackEntryPool), _drainDisabled(false) {
@@ -321,7 +315,7 @@ namespace Spine {
     }
     
     AnimationState::~AnimationState() {
-        DESTROY(EventQueue, _queue);
+        delete _queue;
     }
     
     void AnimationState::update(float delta) {

+ 10 - 12
spine-cpp/spine-cpp/src/spine/Atlas.cpp

@@ -49,17 +49,17 @@ namespace Spine {
         const char* lastSlash = lastForwardSlash > lastBackwardSlash ? lastForwardSlash : lastBackwardSlash;
         if (lastSlash == path) lastSlash++; /* Never drop starting slash. */
         dirLength = (int)(lastSlash ? lastSlash - path : 0);
-        dir = MALLOC(char, dirLength + 1);
+        dir = SpineExtension::alloc<char>(dirLength + 1, __FILE__, __LINE__);
         memcpy(dir, path, dirLength);
         dir[dirLength] = '\0';
 
-        data = SPINE_EXTENSION->spineReadFile(path, &length);
+        data = SpineExtension::readFile(path, &length);
         if (data) {
             load(data, length, dir);
         }
 
-        FREE(data);
-        FREE(dir);
+        SpineExtension::free(data);
+        SpineExtension::free(dir);
     }
 
     Atlas::Atlas(const char* data, int length, const char* dir, TextureLoader& textureLoader) : _textureLoader(textureLoader) {
@@ -116,17 +116,16 @@ namespace Spine {
             }
             else if (!page) {
                 char* name = mallocString(&str);
-                char* path = MALLOC(char, dirLength + needsSlash + strlen(name) + 1);
+                char* path = SpineExtension::alloc<char>(dirLength + needsSlash + strlen(name) + 1, __FILE__, __LINE__);
                 memcpy(path, dir, dirLength);
                 if (needsSlash) {
                     path[dirLength] = '/';
                 }
                 strcpy(path + dirLength + needsSlash, name);
 
-                page = NEW(AtlasPage);
-                new (page) AtlasPage(std::string(name));
+                page = new AtlasPage(std::string(name));
 
-                FREE(name);
+                SpineExtension::free(name);
 
                 int tupleVal = readTuple(&begin, end, tuple);
                 assert(tupleVal == 2);
@@ -163,13 +162,12 @@ namespace Spine {
 
                 _textureLoader.load(*page, std::string(path));
 
-                FREE(path);
+                SpineExtension::free(path);
 
                 _pages.push_back(page);
             }
             else {
-                AtlasRegion* region = NEW(AtlasRegion);
-                new (region) AtlasRegion();
+                AtlasRegion* region = new AtlasRegion();
 
                 region->page = page;
                 region->name = mallocString(&str);
@@ -333,7 +331,7 @@ namespace Spine {
 
     char* Atlas::mallocString(Str* str) {
         int length = (int)(str->end - str->begin);
-        char* string = MALLOC(char, length + 1);
+        char* string = SpineExtension::alloc<char>(length + 1, __FILE__, __LINE__);
         memcpy(string, str->begin, length);
         string[length] = '\0';
         return string;

+ 8 - 30
spine-cpp/spine-cpp/src/spine/AtlasAttachmentLoader.cpp

@@ -43,7 +43,7 @@
 namespace Spine {
     RTTI_IMPL(AtlasAttachmentLoader, AttachmentLoader);
     
-    AtlasAttachmentLoader::AtlasAttachmentLoader(Vector<Atlas*>& inAtlasArray) : AttachmentLoader(), _atlasArray(inAtlasArray) {
+    AtlasAttachmentLoader::AtlasAttachmentLoader(Atlas& atlas) : AttachmentLoader(), _atlas(atlas) {
         // Empty
     }
     
@@ -53,8 +53,7 @@ namespace Spine {
         
         AtlasRegion& region = *regionP;
         
-        RegionAttachment* attachmentP = NEW(RegionAttachment);
-        new (attachmentP) RegionAttachment(name);
+        RegionAttachment* attachmentP = new RegionAttachment(name);
         
         RegionAttachment& attachment = *attachmentP;
         attachment._rendererObject = regionP;
@@ -75,8 +74,7 @@ namespace Spine {
         
         AtlasRegion& region = *regionP;
         
-        MeshAttachment* attachmentP = NEW(MeshAttachment);
-        new (attachmentP) MeshAttachment(name);
+        MeshAttachment* attachmentP = new MeshAttachment(name);
         
         MeshAttachment& attachment = *attachmentP;
         attachment._rendererObject = regionP;
@@ -96,43 +94,23 @@ namespace Spine {
     }
     
     BoundingBoxAttachment* AtlasAttachmentLoader::newBoundingBoxAttachment(Skin& skin, std::string name) {
-        BoundingBoxAttachment* attachmentP = NEW(BoundingBoxAttachment);
-        new (attachmentP) BoundingBoxAttachment(name);
-        
-        return attachmentP;
+        return new BoundingBoxAttachment(name);
     }
     
     PathAttachment* AtlasAttachmentLoader::newPathAttachment(Skin& skin, std::string name) {
-        PathAttachment* attachmentP = NEW(PathAttachment);
-        new (attachmentP) PathAttachment(name);
-        
-        return attachmentP;
+        return new PathAttachment(name);
     }
     
     PointAttachment* AtlasAttachmentLoader::newPointAttachment(Skin& skin, std::string name) {
-        PointAttachment* attachmentP = NEW(PointAttachment);
-        new (attachmentP) PointAttachment(name);
-        
-        return attachmentP;
+        return new PointAttachment(name);
     }
     
     ClippingAttachment* AtlasAttachmentLoader::newClippingAttachment(Skin& skin, std::string name) {
-        ClippingAttachment* attachmentP = NEW(ClippingAttachment);
-        new (attachmentP) ClippingAttachment(name);
-        
-        return attachmentP;
+        return new ClippingAttachment(name);
     }
     
     AtlasRegion* AtlasAttachmentLoader::findRegion(std::string name) {
         AtlasRegion* ret;
-        
-        for (int i = 0; i < _atlasArray.size(); i++) {
-            ret = _atlasArray[i]->findRegion(name);
-            if (ret != NULL) {
-                return ret;
-            }
-        }
-        
-        return NULL;
+        return _atlas.findRegion(name);
     }
 }

+ 10 - 15
spine-cpp/spine-cpp/src/spine/Extension.cpp

@@ -53,7 +53,7 @@ namespace Spine {
         // Empty
     }
     
-    char* SpineExtension::spineReadFile(const char* path, int* length) {
+    char* SpineExtension::_readFile(const char* path, int* length) {
         char *data;
         FILE *file = fopen(path, "rb");
         if (!file) return 0;
@@ -62,7 +62,7 @@ namespace Spine {
         *length = (int)ftell(file);
         fseek(file, 0, SEEK_SET);
         
-        data = MALLOC(char, *length);
+        data = SpineExtension::alloc<char>(*length, __FILE__, __LINE__);
         fread(data, 1, *length, file);
         fclose(file);
         
@@ -73,33 +73,28 @@ namespace Spine {
         // Empty
     }
     
-    DefaultSpineExtension* DefaultSpineExtension::getInstance() {
-        static DefaultSpineExtension ret;
-        return &ret;
-    }
-    
     DefaultSpineExtension::~DefaultSpineExtension() {
         // Empty
     }
     
-    void* DefaultSpineExtension::spineAlloc(size_t size, const char* file, int line) {
-        return malloc(size);
+    void* DefaultSpineExtension::_alloc(size_t size, const char* file, int line) {
+        return ::malloc(size);
     }
     
-    void* DefaultSpineExtension::spineCalloc(size_t num, size_t size, const char* file, int line) {
-        void* ptr = spineAlloc(num * size, file, line);
+    void* DefaultSpineExtension::_calloc(size_t size, const char* file, int line) {
+        void* ptr = _alloc(size, file, line);
         if (ptr) {
-            memset(ptr, 0, num * size);
+            memset(ptr, 0, size);
         }
         
         return ptr;
     }
     
-    void* DefaultSpineExtension::spineRealloc(void* ptr, size_t size, const char* file, int line) {
-        return realloc(ptr, size);
+    void* DefaultSpineExtension::_realloc(void* ptr, size_t size, const char* file, int line) {
+        return ::realloc(ptr, size);
     }
     
-    void DefaultSpineExtension::spineFree(void* mem) {
+    void DefaultSpineExtension::_free(void* mem) {
         free(mem);
     }
     

+ 10 - 14
spine-cpp/spine-cpp/src/spine/Json.cpp

@@ -115,19 +115,19 @@ namespace Spine {
     
     Json::~Json() {
         if (_child) {
-            DESTROY(Json, _child);
+            delete _child;
         }
         
         if (_valueString) {
-            FREE(_valueString);
+            SpineExtension::free(_valueString);
         }
         
         if (_name) {
-            FREE(_name);
+            SpineExtension::free(_name);
         }
         
         if (_next) {
-            DESTROY(Json, _next);
+            delete _next;
         }
     }
     
@@ -223,7 +223,7 @@ namespace Spine {
             }
         }
         
-        out = MALLOC(char, len + 1); /* The length needed for the string, roughly. */
+        out = (char*)SpineExtension::alloc<char>(len + 1, __FILE__, __LINE__); /* The length needed for the string, roughly. */
         if (!out) {
             return 0;
         }
@@ -313,7 +313,7 @@ namespace Spine {
             }
         }
         
-        *ptr2 = NULL;
+        *ptr2 = 0;
         
         if (*ptr == '\"') {
             ptr++; /* TODO error handling if not \" or \0 ? */
@@ -415,8 +415,7 @@ namespace Spine {
             return value + 1; /* empty array. */
         }
         
-        item->_child = child = NEW(Json);
-        new (item->_child) Json(NULL);
+        item->_child = child = new Json(NULL);
         if (!item->_child) {
             return NULL; /* memory fail */
         }
@@ -430,8 +429,7 @@ namespace Spine {
         item->_size = 1;
         
         while (*value == ',') {
-            Json *new_item = NEW(Json);
-            new (new_item) Json(NULL);
+            Json *new_item = new Json(NULL);
             if (!new_item) {
                 return NULL; /* memory fail */
             }
@@ -473,8 +471,7 @@ namespace Spine {
             return value + 1; /* empty array. */
         }
         
-        item->_child = child = NEW(Json);
-        new (item->_child) Json(NULL);
+        item->_child = child = new Json(NULL);
         if (!item->_child) {
             return NULL;
         }
@@ -497,8 +494,7 @@ namespace Spine {
         item->_size = 1;
         
         while (*value == ',') {
-            Json *new_item = NEW(Json);
-            new (new_item) Json(NULL);
+            Json *new_item = new Json(NULL);
             if (!new_item) {
                 return NULL; /* memory fail */
             }

+ 6 - 12
spine-cpp/spine-cpp/src/spine/Skeleton.cpp

@@ -71,13 +71,11 @@ namespace Spine {
             
             Bone* bone;
             if (data->getParent() == NULL) {
-                bone = NEW(Bone);
-                new (bone) Bone(*data, *this, NULL);
+                bone = new Bone(*data, *this, NULL);
             }
             else {
                 Bone* parent = _bones[data->getParent()->getIndex()];
-                bone = NEW(Bone);
-                new (bone) Bone(*data, *this, parent);
+                bone = new Bone(*data, *this, parent);
                 parent->getChildren().push_back(bone);
             }
             
@@ -90,8 +88,7 @@ namespace Spine {
             SlotData* data = (*i);
             
             Bone* bone = _bones[data->getBoneData().getIndex()];
-            Slot* slot = NEW(Slot);
-            new (slot) Slot(*data, *bone);
+            Slot* slot = new Slot(*data, *bone);
             
             _slots.push_back(slot);
             _drawOrder.push_back(slot);
@@ -101,8 +98,7 @@ namespace Spine {
         for (IkConstraintData** i = _data.getIkConstraints().begin(); i != _data.getIkConstraints().end(); ++i) {
             IkConstraintData* data = (*i);
             
-            IkConstraint* constraint = NEW(IkConstraint);
-            new (constraint) IkConstraint(*data, *this);
+            IkConstraint* constraint = new IkConstraint(*data, *this);
             
             _ikConstraints.push_back(constraint);
         }
@@ -111,8 +107,7 @@ namespace Spine {
         for (TransformConstraintData** i = _data.getTransformConstraints().begin(); i != _data.getTransformConstraints().end(); ++i) {
             TransformConstraintData* data = (*i);
             
-            TransformConstraint* constraint = NEW(TransformConstraint);
-            new (constraint) TransformConstraint(*data, *this);
+            TransformConstraint* constraint = new TransformConstraint(*data, *this);
             
             _transformConstraints.push_back(constraint);
         }
@@ -121,8 +116,7 @@ namespace Spine {
         for (PathConstraintData** i = _data.getPathConstraints().begin(); i != _data.getPathConstraints().end(); ++i) {
             PathConstraintData* data = (*i);
             
-            PathConstraint* constraint = NEW(PathConstraint);
-            new (constraint) PathConstraint(*data, *this);
+            PathConstraint* constraint = new PathConstraint(*data, *this);
             
             _pathConstraints.push_back(constraint);
         }

+ 70 - 98
spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp

@@ -106,8 +106,8 @@ namespace Spine {
         TransformMode_NoScaleOrReflection
     };
     
-    SkeletonBinary::SkeletonBinary(Vector<Atlas*>& atlasArray) : _attachmentLoader(NEW(AtlasAttachmentLoader)), _error(), _scale(1), _ownsLoader(true) {
-        new (_attachmentLoader) AtlasAttachmentLoader(atlasArray);
+    SkeletonBinary::SkeletonBinary(Atlas& atlasArray) : _attachmentLoader(new AtlasAttachmentLoader(atlasArray)), _error(), _scale(1), _ownsLoader(true) {
+
     }
     
     SkeletonBinary::SkeletonBinary(AttachmentLoader* attachmentLoader) : _attachmentLoader(attachmentLoader), _error(), _scale(1), _ownsLoader(false) {
@@ -118,7 +118,7 @@ namespace Spine {
         ContainerUtil::cleanUpVectorOfPointers(_linkedMeshes);
         
         if (_ownsLoader) {
-            DESTROY(AttachmentLoader, _attachmentLoader);
+            delete _attachmentLoader;
         }
     }
     
@@ -126,22 +126,21 @@ namespace Spine {
         int i, ii, nonessential;
         SkeletonData* skeletonData;
         
-        DataInput* input = CALLOC(DataInput, 1);
+        DataInput* input = new DataInput();
         input->cursor = binary;
         input->end = binary + length;
         
         _linkedMeshes.clear();
         
-        skeletonData = NEW(SkeletonData);
-        new (skeletonData) SkeletonData();
+        skeletonData = new SkeletonData();
         
         char* skeletonData_hash = readString(input);
         skeletonData->_hash = std::string(skeletonData_hash);
-        FREE(skeletonData_hash);
+        SpineExtension::free(skeletonData_hash);
         
         char* skeletonData_version = readString(input);
         skeletonData->_version = std::string(skeletonData_version);
-        FREE(skeletonData_version);
+        SpineExtension::free(skeletonData_version);
         
         skeletonData->_width = readFloat(input);
         skeletonData->_height = readFloat(input);
@@ -151,7 +150,7 @@ namespace Spine {
         if (nonessential) {
             /* Skip images path & fps */
             readFloat(input);
-            FREE(readString(input));
+            SpineExtension::free(readString(input));
         }
         
         /* Bones. */
@@ -164,10 +163,9 @@ namespace Spine {
             const char* name = readString(input);
             BoneData* parent = i == 0 ? 0 : skeletonData->_bones[readVarint(input, 1)];
             
-            data = NEW(BoneData);
-            new (data) BoneData(i, std::string(name), parent);
-            
-            FREE(name);
+            data = new BoneData(i, std::string(name), parent);
+
+            SpineExtension::free(name);
             
             data->_rotation = readFloat(input);
             data->_x = readFloat(input) * _scale;
@@ -214,10 +212,9 @@ namespace Spine {
             const char* slotName = readString(input);
             BoneData* boneData = skeletonData->_bones[readVarint(input, 1)];
             
-            SlotData* slotData = NEW(SlotData);
-            new (slotData) SlotData(i, std::string(slotName), *boneData);
-            
-            FREE(slotName);
+            SlotData* slotData = new SlotData(i, std::string(slotName), *boneData);
+
+            SpineExtension::free(slotName);
             readColor(input, &slotData->_r, &slotData->_g, &slotData->_b, &slotData->_a);
             r = readByte(input);
             g = readByte(input);
@@ -230,7 +227,7 @@ namespace Spine {
             }
             char* slotData_attachmentName = readString(input);
             slotData->_attachmentName = std::string(slotData_attachmentName);
-            FREE(slotData_attachmentName);
+            SpineExtension::free(slotData_attachmentName);
             slotData->_blendMode = static_cast<BlendMode>(readVarint(input, 1));
             
             skeletonData->_slots[i] = slotData;
@@ -243,12 +240,11 @@ namespace Spine {
         for (i = 0; i < ikConstraintsCount; ++i) {
             const char* name = readString(input);
             
-            IkConstraintData* data = NEW(IkConstraintData);
-            new (data) IkConstraintData(std::string(name));
+            IkConstraintData* data = new IkConstraintData(std::string(name));
             
             data->_order = readVarint(input, 1);
-            
-            FREE(name);
+
+            SpineExtension::free(name);
             int bonesCount = readVarint(input, 1);
             data->_bones.reserve(bonesCount);
             data->_bones.setSize(bonesCount);
@@ -269,11 +265,10 @@ namespace Spine {
         for (i = 0; i < transformConstraintsCount; ++i) {
             const char* name = readString(input);
             
-            TransformConstraintData* data = NEW(TransformConstraintData);
-            new (data) TransformConstraintData(std::string(name));
+            TransformConstraintData* data = new TransformConstraintData(std::string(name));
             
             data->_order = readVarint(input, 1);
-            FREE(name);
+            SpineExtension::free(name);
             int bonesCount = readVarint(input, 1);
             data->_bones.reserve(bonesCount);
             data->_bones.setSize(bonesCount);
@@ -304,11 +299,10 @@ namespace Spine {
         for (i = 0; i < pathConstraintsCount; ++i) {
             const char* name = readString(input);
             
-            PathConstraintData* data = NEW(PathConstraintData);
-            new (data) PathConstraintData(std::string(name));
+            PathConstraintData* data = new PathConstraintData(std::string(name));
             
             data->_order = readVarint(input, 1);
-            FREE(name);
+            SpineExtension::free(name);
             
             int bonesCount = readVarint(input, 1);
             data->_bones.reserve(bonesCount);
@@ -355,7 +349,7 @@ namespace Spine {
         for (i = skeletonData->_defaultSkin ? 1 : 0; i < skeletonData->_skins.size(); ++i) {
             const char* skinName = readString(input);
             skeletonData->_skins[i] = readSkin(input, skinName, skeletonData, nonessential);
-            FREE(skinName);
+            SpineExtension::free(skinName);
         }
 
         /* Linked meshes. */
@@ -363,15 +357,15 @@ namespace Spine {
             LinkedMesh* linkedMesh = _linkedMeshes[i];
             Skin* skin = linkedMesh->_skin.length() == 0 ? skeletonData->getDefaultSkin() : skeletonData->findSkin(linkedMesh->_skin);
             if (skin == NULL) {
-                FREE(input);
-                DESTROY(SkeletonData, skeletonData);
+                delete input;
+                delete skeletonData;
                 setError("Skin not found: ", linkedMesh->_skin.c_str());
                 return NULL;
             }
             Attachment* parent = skin->getAttachment(linkedMesh->_slotIndex, linkedMesh->_parent);
             if (parent == NULL) {
-                FREE(input);
-                DESTROY(SkeletonData, skeletonData);
+                delete input;
+                delete skeletonData;
                 setError("Parent mesh not found: ", linkedMesh->_parent.c_str());
                 return NULL;
             }
@@ -386,14 +380,13 @@ namespace Spine {
         skeletonData->_events.setSize(eventsCount);
         for (i = 0; i < eventsCount; ++i) {
             const char* name = readString(input);
-            EventData* eventData = NEW(EventData);
-            new (eventData) EventData(std::string(name));
-            FREE(name);
+            EventData* eventData = new EventData(std::string(name));
+            SpineExtension::free(name);
             eventData->_intValue = readVarint(input, 0);
             eventData->_floatValue = readFloat(input);
             const char* eventData_stringValue = readString(input);
             eventData->_stringValue = std::string(eventData_stringValue);
-            FREE(eventData_stringValue);
+            SpineExtension::free(eventData_stringValue);
             skeletonData->_events[i] = eventData;
         }
 
@@ -404,16 +397,16 @@ namespace Spine {
         for (i = 0; i < animationsCount; ++i) {
             const char* name = readString(input);
             Animation* animation = readAnimation(name, input, skeletonData);
-            FREE(name);
+            SpineExtension::free(name);
             if (!animation) {
-                FREE(input);
-                DESTROY(SkeletonData, skeletonData);
+                delete input;
+                delete skeletonData;
                 return NULL;
             }
             skeletonData->_animations[i] = animation;
         }
 
-        FREE(input);
+        delete input;
         
         return skeletonData;
     }
@@ -421,13 +414,13 @@ namespace Spine {
     SkeletonData* SkeletonBinary::readSkeletonDataFile(const char* path) {
         int length;
         SkeletonData* skeletonData;
-        const char* binary = SPINE_EXTENSION->spineReadFile(path, &length);
+        const char* binary = SpineExtension::readFile(path, &length);
         if (length == 0 || !binary) {
             setError("Unable to read skeleton file: ", path);
             return NULL;
         }
         skeletonData = readSkeletonData((unsigned char*)binary, length);
-        FREE(binary);
+        SpineExtension::free(binary);
         return skeletonData;
     }
     
@@ -449,7 +442,7 @@ namespace Spine {
         if (length == 0) {
             return NULL;
         }
-        string = MALLOC(char, length);
+        string = SpineExtension::alloc<char>(length, __FILE__, __LINE__);
         memcpy(string, input->cursor, length - 1);
         input->cursor += length - 1;
         string[length - 1] = '\0';
@@ -529,8 +522,7 @@ namespace Spine {
             return NULL;
         }
         
-        skin = NEW(Skin);
-        new (skin) Skin(std::string(skinName));
+        skin = new Skin(std::string(skinName));
         
         for (i = 0; i < slotCount; ++i) {
             int slotIndex = readVarint(input, 1);
@@ -540,7 +532,7 @@ namespace Spine {
                 if (attachment) {
                     skin->addAttachment(slotIndex, std::string(name), attachment);
                 }
-                FREE(name);
+                SpineExtension::free(name);
             }
         }
         
@@ -579,7 +571,7 @@ namespace Spine {
                 region->updateOffset();
                 
                 if (freeName) {
-                    FREE(name);
+                    SpineExtension::free(name);
                 }
                 
                 return region;
@@ -593,7 +585,7 @@ namespace Spine {
                     readInt(input);
                 }
                 if (freeName) {
-                    FREE(name);
+                    SpineExtension::free(name);
                 }
                 
                 return box;
@@ -628,7 +620,7 @@ namespace Spine {
                 }
                 
                 if (freeName) {
-                    FREE(name);
+                    SpineExtension::free(name);
                 }
                 
                 return mesh;
@@ -653,16 +645,15 @@ namespace Spine {
                     mesh->_height = readFloat(input) * _scale;
                 }
                 
-                LinkedMesh* linkedMesh = NEW(LinkedMesh);
-                new (linkedMesh) LinkedMesh(mesh, std::string(skinName), slotIndex, std::string(parent));
+                LinkedMesh* linkedMesh = new LinkedMesh(mesh, std::string(skinName), slotIndex, std::string(parent));
                 _linkedMeshes.push_back(linkedMesh);
                 
                 if (freeName) {
-                    FREE(name);
+                    SpineExtension::free(name);
                 }
                 
-                FREE(skinName);
-                FREE(parent);
+                SpineExtension::free(skinName);
+                SpineExtension::free(parent);
                 
                 return mesh;
             }
@@ -686,7 +677,7 @@ namespace Spine {
                 }
                 
                 if (freeName) {
-                    FREE(name);
+                    SpineExtension::free(name);
                 }
                 
                 return path;
@@ -718,7 +709,7 @@ namespace Spine {
                 clip->_endSlot = skeletonData->_slots[endSlotIndex];
                 
                 if (freeName) {
-                    FREE(name);
+                    SpineExtension::free(name);
                 }
                 
                 return clip;
@@ -726,7 +717,7 @@ namespace Spine {
         }
         
         if (freeName) {
-            FREE(name);
+            SpineExtension::free(name);
         }
         
         return NULL;
@@ -809,21 +800,19 @@ namespace Spine {
                 int frameCount = readVarint(input, true);
                 switch (timelineType) {
                     case SLOT_ATTACHMENT: {
-                        AttachmentTimeline* timeline = NEW(AttachmentTimeline);
-                        new(timeline) AttachmentTimeline(frameCount);
+                        AttachmentTimeline* timeline = new AttachmentTimeline(frameCount);
                         timeline->_slotIndex = slotIndex;
                         for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) {
                             const char* attachmentName = readString(input);
                             timeline->setFrame(frameIndex, readFloat(input), std::string(attachmentName));
-                            FREE(attachmentName);
+                            SpineExtension::free(attachmentName);
                         }
                         timelines.push_back(timeline);
                         duration = MAX(duration, timeline->_frames[frameCount - 1]);
                         break;
                     }
                     case SLOT_COLOR: {
-                        ColorTimeline* timeline = NEW(ColorTimeline);
-                        new(timeline) ColorTimeline(frameCount);
+                        ColorTimeline* timeline = new ColorTimeline(frameCount);
                         timeline->_slotIndex = slotIndex;
                         for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) {
                             float time = readFloat(input);
@@ -842,8 +831,7 @@ namespace Spine {
                         break;
                     }
                     case SLOT_TWO_COLOR: {
-                        TwoColorTimeline* timeline = NEW(TwoColorTimeline);
-                        new(timeline) TwoColorTimeline(frameCount);
+                        TwoColorTimeline* timeline = new TwoColorTimeline(frameCount);
                         timeline->_slotIndex = slotIndex;
                         for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) {
                             float time = readFloat(input);
@@ -883,8 +871,7 @@ namespace Spine {
                 int frameCount = readVarint(input, true);
                 switch (timelineType) {
                     case BONE_ROTATE: {
-                        RotateTimeline* timeline = NEW(RotateTimeline);
-                        new(timeline) RotateTimeline(frameCount);
+                        RotateTimeline* timeline = new RotateTimeline(frameCount);
                         timeline->_boneIndex = boneIndex;
                         for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) {
                             timeline->setFrame(frameIndex, readFloat(input), readFloat(input));
@@ -902,16 +889,13 @@ namespace Spine {
                         TranslateTimeline* timeline;
                         float timelineScale = 1;
                         if (timelineType == BONE_SCALE) {
-                            timeline = NEW(ScaleTimeline);
-                            new(timeline) ScaleTimeline(frameCount);
+                            timeline = new ScaleTimeline(frameCount);
                         }
                         else if (timelineType == BONE_SHEAR) {
-                            timeline = NEW(ShearTimeline);
-                            new(timeline) ShearTimeline(frameCount);
+                            timeline = new ShearTimeline(frameCount);
                         }
                         else {
-                            timeline = NEW(TranslateTimeline);
-                            new(timeline) TranslateTimeline(frameCount);
+                            timeline = new TranslateTimeline(frameCount);
                             timelineScale = scale;
                         }
                         timeline->_boneIndex = boneIndex;
@@ -938,8 +922,7 @@ namespace Spine {
         for (int i = 0, n = readVarint(input, true); i < n; ++i) {
             int index = readVarint(input, true);
             int frameCount = readVarint(input, true);
-            IkConstraintTimeline* timeline = NEW(IkConstraintTimeline);
-            new(timeline) IkConstraintTimeline(frameCount);
+            IkConstraintTimeline* timeline = new IkConstraintTimeline(frameCount);
             timeline->_ikConstraintIndex = index;
             for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) {
                 timeline->setFrame(frameIndex, readFloat(input), readFloat(input), readSByte(input));
@@ -955,8 +938,7 @@ namespace Spine {
         for (int i = 0, n = readVarint(input, true); i < n; ++i) {
             int index = readVarint(input, true);
             int frameCount = readVarint(input, true);
-            TransformConstraintTimeline* timeline = NEW(TransformConstraintTimeline);
-            new(timeline) TransformConstraintTimeline(frameCount);
+            TransformConstraintTimeline* timeline = new TransformConstraintTimeline(frameCount);
             timeline->_transformConstraintIndex = index;
             for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) {
                 timeline->setFrame(frameIndex, readFloat(input), readFloat(input), readFloat(input), readFloat(input), readFloat(input));
@@ -981,16 +963,14 @@ namespace Spine {
                         PathConstraintPositionTimeline* timeline;
                         float timelineScale = 1;
                         if (timelineType == PATH_SPACING) {
-                            timeline = NEW(PathConstraintSpacingTimeline);
-                            new(timeline) PathConstraintSpacingTimeline(frameCount);
+                            timeline = new PathConstraintSpacingTimeline(frameCount);
                             
                             if (data->_spacingMode == SpacingMode_Length || data->_spacingMode == SpacingMode_Fixed) {
                                 timelineScale = scale;
                             }
                         }
                         else {
-                            timeline = NEW(PathConstraintPositionTimeline);
-                            new(timeline) PathConstraintPositionTimeline(frameCount);
+                            timeline = new PathConstraintPositionTimeline(frameCount);
                             
                             if (data->_positionMode == PositionMode_Fixed) {
                                 timelineScale = scale;
@@ -1008,8 +988,7 @@ namespace Spine {
                         break;
                     }
                     case PATH_MIX: {
-                        PathConstraintMixTimeline* timeline = NEW(PathConstraintMixTimeline);
-                        new(timeline) PathConstraintMixTimeline(frameCount);
+                        PathConstraintMixTimeline* timeline = new PathConstraintMixTimeline(frameCount);
                         
                         timeline->_pathConstraintIndex = index;
                         for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) {
@@ -1038,11 +1017,11 @@ namespace Spine {
                     if (!baseAttachment) {
                         ContainerUtil::cleanUpVectorOfPointers(timelines);
                         setError("Attachment not found: ", attachmentName);
-                        FREE(attachmentName);
+                        SpineExtension::free(attachmentName);
                         return NULL;
                     }
                     
-                    FREE(attachmentName);
+                    SpineExtension::free(attachmentName);
                     
                     VertexAttachment* attachment = static_cast<VertexAttachment*>(baseAttachment);
                     
@@ -1052,8 +1031,7 @@ namespace Spine {
 
                     int frameCount = readVarint(input, true);
                     
-                    DeformTimeline* timeline = NEW(DeformTimeline);
-                    new(timeline) DeformTimeline(frameCount);
+                    DeformTimeline* timeline = new DeformTimeline(frameCount);
                     
                     timeline->_slotIndex = slotIndex;
                     timeline->_attachment = attachment;
@@ -1110,8 +1088,7 @@ namespace Spine {
         // Draw order timeline.
         int drawOrderCount = readVarint(input, true);
         if (drawOrderCount > 0) {
-            DrawOrderTimeline* timeline = NEW(DrawOrderTimeline);
-            new(timeline) DrawOrderTimeline(drawOrderCount);
+            DrawOrderTimeline* timeline = new DrawOrderTimeline(drawOrderCount);
             
             int slotCount = static_cast<int>(skeletonData->_slots.size());
             for (int i = 0; i < drawOrderCount; ++i) {
@@ -1158,14 +1135,12 @@ namespace Spine {
         // Event timeline.
         int eventCount = readVarint(input, true);
         if (eventCount > 0) {
-            EventTimeline* timeline = NEW(EventTimeline);
-            new(timeline) EventTimeline(eventCount);
+            EventTimeline* timeline =new EventTimeline(eventCount);
             
             for (int i = 0; i < eventCount; ++i) {
                 float time = readFloat(input);
                 EventData* eventData = skeletonData->_events[readVarint(input, true)];
-                Event* event = NEW(Event);
-                new(event) Event(time, *eventData);
+                Event* event = new Event(time, *eventData);
                 
                 event->_intValue = readVarint(input, false);
                 event->_floatValue = readFloat(input);
@@ -1173,7 +1148,7 @@ namespace Spine {
                 const char* event_stringValue = freeString ? readString(input) : eventData->_stringValue.c_str();
                 event->_stringValue = std::string(event_stringValue);
                 if (freeString) {
-                    FREE(event_stringValue);
+                    SpineExtension::free(event_stringValue);
                 }
                 timeline->setFrame(i, event);
             }
@@ -1182,10 +1157,7 @@ namespace Spine {
             duration = MAX(duration, timeline->_frames[eventCount - 1]);
         }
 
-        Animation* ret = NEW(Animation);
-        new (ret) Animation(std::string(name), timelines, duration);
-        
-        return ret;
+        return new Animation(std::string(name), timelines, duration);
     }
     
     void SkeletonBinary::readCurve(DataInput* input, int frameIndex, CurveTimeline* timeline) {

+ 1 - 2
spine-cpp/spine-cpp/src/spine/SkeletonBounds.cpp

@@ -68,8 +68,7 @@ namespace Spine {
                 _polygonPool.erase(poolCount - 1);
             }
             else {
-                Polygon* polygonP = NEW(Polygon);
-                new (polygonP) Polygon();
+                Polygon* polygonP = new Polygon();
             }
 
             _polygons.push_back(polygonP);

+ 47 - 77
spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp

@@ -86,8 +86,7 @@
 #endif
 
 namespace Spine {
-    SkeletonJson::SkeletonJson(Vector<Atlas*>& atlasArray) : _attachmentLoader(NEW(AtlasAttachmentLoader)), _scale(1), _ownsLoader(true) {
-        new (_attachmentLoader) AtlasAttachmentLoader(atlasArray);
+    SkeletonJson::SkeletonJson(Atlas& atlas) : _attachmentLoader(new AtlasAttachmentLoader(atlas)), _scale(1), _ownsLoader(true) {
     }
     
     SkeletonJson::SkeletonJson(AttachmentLoader* attachmentLoader) : _attachmentLoader(attachmentLoader), _scale(1), _ownsLoader(false) {
@@ -98,14 +97,14 @@ namespace Spine {
         ContainerUtil::cleanUpVectorOfPointers(_linkedMeshes);
         
         if (_ownsLoader) {
-            DESTROY(AttachmentLoader, _attachmentLoader);
+            delete _attachmentLoader;
         }
     }
     
     SkeletonData* SkeletonJson::readSkeletonDataFile(const char* path) {
         int length;
         SkeletonData* skeletonData;
-        const char* json = SPINE_EXTENSION->spineReadFile(path, &length);
+        const char* json = SpineExtension::readFile(path, &length);
         if (length == 0 || !json) {
             setError(NULL, "Unable to read skeleton file: ", path);
             return NULL;
@@ -113,7 +112,7 @@ namespace Spine {
         
         skeletonData = readSkeletonData(json);
         
-        FREE(json);
+        SpineExtension::free(json);
         
         return skeletonData;
     }
@@ -126,16 +125,14 @@ namespace Spine {
         _error.clear();
         _linkedMeshes.clear();
 
-        root = NEW(Json);
-        new (root) Json(json);
+        root = new Json(json);
         
         if (!root) {
             setError(NULL, "Invalid skeleton JSON: ", Json::getError());
             return NULL;
         }
 
-        skeletonData = NEW(SkeletonData);
-        new (skeletonData) SkeletonData();
+        skeletonData = new SkeletonData();
 
         skeleton = Json::getItem(root, "skeleton");
         if (skeleton) {
@@ -159,14 +156,13 @@ namespace Spine {
             if (parentName) {
                 parent = skeletonData->findBone(parentName);
                 if (!parent) {
-                    DESTROY(SkeletonData, skeletonData);
+                    delete skeletonData;
                     setError(root, "Parent bone not found: ", parentName);
                     return NULL;
                 }
             }
 
-            data = NEW(BoneData);
-            new (data) BoneData(bonesCount, Json::getString(boneMap, "name", 0), parent);
+            data = new BoneData(bonesCount, Json::getString(boneMap, "name", 0), parent);
             
             data->_length = Json::getFloat(boneMap, "length", 0) * _scale;
             data->_x = Json::getFloat(boneMap, "x", 0) * _scale;
@@ -213,13 +209,12 @@ namespace Spine {
                 const char* boneName = Json::getString(slotMap, "bone", 0);
                 BoneData* boneData = skeletonData->findBone(boneName);
                 if (!boneData) {
-                    DESTROY(SkeletonData, skeletonData);
+                    delete skeletonData;
                     setError(root, "Slot bone not found: ", boneName);
                     return NULL;
                 }
 
-                data = NEW(SlotData);
-                new (data) SlotData(i, Json::getString(slotMap, "name", 0), *boneData);
+                data = new SlotData(i, Json::getString(slotMap, "name", 0), *boneData);
 
                 color = Json::getString(slotMap, "color", 0);
                 if (color) {
@@ -269,8 +264,7 @@ namespace Spine {
             for (constraintMap = ik->_child, i = 0; constraintMap; constraintMap = constraintMap->_next, ++i) {
                 const char* targetName;
 
-                IkConstraintData* data = NEW(IkConstraintData);
-                new (data) IkConstraintData(Json::getString(constraintMap, "name", 0));
+                IkConstraintData* data = new IkConstraintData(Json::getString(constraintMap, "name", 0));
                 
                 data->_order = Json::getInt(constraintMap, "order", 0);
 
@@ -280,7 +274,7 @@ namespace Spine {
                 for (boneMap = boneMap->_child, ii = 0; boneMap; boneMap = boneMap->_next, ++ii) {
                     data->_bones[ii] = skeletonData->findBone(boneMap->_valueString);
                     if (!data->_bones[ii]) {
-                        DESTROY(SkeletonData, skeletonData);
+                        delete skeletonData;
                         setError(root, "IK bone not found: ", boneMap->_valueString);
                         return NULL;
                     }
@@ -289,7 +283,7 @@ namespace Spine {
                 targetName = Json::getString(constraintMap, "target", 0);
                 data->_target = skeletonData->findBone(targetName);
                 if (!data->_target) {
-                    DESTROY(SkeletonData, skeletonData);
+                    delete skeletonData;
                     setError(root, "Target bone not found: ", targetName);
                     return NULL;
                 }
@@ -310,8 +304,7 @@ namespace Spine {
             for (constraintMap = transform->_child, i = 0; constraintMap; constraintMap = constraintMap->_next, ++i) {
                 const char* name;
 
-                TransformConstraintData* data = NEW(TransformConstraintData);
-                new (data) TransformConstraintData(Json::getString(constraintMap, "name", 0));
+                TransformConstraintData* data = new TransformConstraintData(Json::getString(constraintMap, "name", 0));
                 
                 data->_order = Json::getInt(constraintMap, "order", 0);
 
@@ -321,7 +314,7 @@ namespace Spine {
                 for (boneMap = boneMap->_child, ii = 0; boneMap; boneMap = boneMap->_next, ++ii) {
                     data->_bones[ii] = skeletonData->findBone(boneMap->_valueString);
                     if (!data->_bones[ii]) {
-                        DESTROY(SkeletonData, skeletonData);
+                        delete skeletonData;
                         setError(root, "Transform bone not found: ", boneMap->_valueString);
                         return NULL;
                     }
@@ -330,7 +323,7 @@ namespace Spine {
                 name = Json::getString(constraintMap, "target", 0);
                 data->_target = skeletonData->findBone(name);
                 if (!data->_target) {
-                    DESTROY(SkeletonData, skeletonData);
+                    delete skeletonData;
                     setError(root, "Target bone not found: ", name);
                     return NULL;
                 }
@@ -363,8 +356,7 @@ namespace Spine {
                 const char* name;
                 const char* item;
 
-                PathConstraintData* data = NEW(PathConstraintData);
-                new (data) PathConstraintData(Json::getString(constraintMap, "name", 0));
+                PathConstraintData* data = new PathConstraintData(Json::getString(constraintMap, "name", 0));
                 
                 data->_order = Json::getInt(constraintMap, "order", 0);
 
@@ -374,7 +366,7 @@ namespace Spine {
                 for (boneMap = boneMap->_child, ii = 0; boneMap; boneMap = boneMap->_next, ++ii) {
                     data->_bones[ii] = skeletonData->findBone(boneMap->_valueString);
                     if (!data->_bones[ii]) {
-                        DESTROY(SkeletonData, skeletonData);
+                        delete skeletonData;
                         setError(root, "Path bone not found: ", boneMap->_valueString);
                         return NULL;
                     }
@@ -383,7 +375,7 @@ namespace Spine {
                 name = Json::getString(constraintMap, "target", 0);
                 data->_target = skeletonData->findSlot(name);
                 if (!data->_target) {
-                    DESTROY(SkeletonData, skeletonData);
+                    delete skeletonData;
                     setError(root, "Target slot not found: ", name);
                     return NULL;
                 }
@@ -445,8 +437,7 @@ namespace Spine {
                 Json *attachmentsMap;
                 Json *curves;
                 
-                Skin* skin = NEW(Skin);
-                new (skin) Skin(skinMap->_name);
+                Skin* skin = new Skin(skinMap->_name);
 
                 skeletonData->_skins[skinsIndex++] = skin;
                 if (strcmp(skinMap->_name, "default") == 0) {
@@ -486,7 +477,7 @@ namespace Spine {
                             type = AttachmentType_Clipping;
                         }
                         else {
-                            DESTROY(SkeletonData, skeletonData);
+                            delete skeletonData;
                             setError(root, "Unknown attachment type: ", typeString);
                             return NULL;
                         }
@@ -495,7 +486,7 @@ namespace Spine {
                             case AttachmentType_Region: {
                                 attachment = _attachmentLoader->newRegionAttachment(*skin, attachmentName, attachmentPath);
                                 if (!attachment) {
-                                    DESTROY(SkeletonData, skeletonData);
+                                    delete skeletonData;
                                     setError(root, "Error reading attachment: ", skinAttachmentName);
                                     return NULL;
                                 }
@@ -576,8 +567,7 @@ namespace Spine {
                                 }
                                 else {
                                     mesh->_inheritDeform = Json::getInt(attachmentMap, "deform", 1);
-                                    LinkedMesh* linkedMesh = NEW(LinkedMesh);
-                                    new (linkedMesh) LinkedMesh(mesh, std::string(Json::getString(attachmentMap, "skin", 0)), slotIndex, std::string(entry->_valueString));
+                                    LinkedMesh* linkedMesh = new LinkedMesh(mesh, std::string(Json::getString(attachmentMap, "skin", 0)), slotIndex, std::string(entry->_valueString));
                                     _linkedMeshes.push_back(linkedMesh);
                                 }
                                 break;
@@ -649,13 +639,13 @@ namespace Spine {
             LinkedMesh* linkedMesh = _linkedMeshes[i];
             Skin* skin = linkedMesh->_skin.length() == 0 ? skeletonData->getDefaultSkin() : skeletonData->findSkin(linkedMesh->_skin);
             if (skin == NULL) {
-                DESTROY(SkeletonData, skeletonData);
+                delete skeletonData;
                 setError(root, "Skin not found: ", linkedMesh->_skin.c_str());
                 return NULL;
             }
             Attachment* parent = skin->getAttachment(linkedMesh->_slotIndex, linkedMesh->_parent);
             if (parent == NULL) {
-                DESTROY(SkeletonData, skeletonData);
+                delete skeletonData;
                 setError(root, "Parent mesh not found: ", linkedMesh->_parent.c_str());
                 return NULL;
             }
@@ -671,8 +661,7 @@ namespace Spine {
             skeletonData->_events.reserve(events->_size);
             skeletonData->_events.setSize(events->_size);
             for (eventMap = events->_child, i = 0; eventMap; eventMap = eventMap->_next, ++i) {
-                EventData* eventData = NEW(EventData);
-                new (eventData) EventData(std::string(eventMap->_name));
+                EventData* eventData = new EventData(std::string(eventMap->_name));
                 
                 eventData->_intValue = Json::getInt(eventMap, "int", 0);
                 eventData->_floatValue = Json::getFloat(eventMap, "float", 0);
@@ -692,15 +681,15 @@ namespace Spine {
             for (animationMap = animations->_child; animationMap; animationMap = animationMap->_next) {
                 Animation* animation = readAnimation(animationMap, skeletonData);
                 if (!animation) {
-                    DESTROY(SkeletonData, skeletonData);
-                    DESTROY(Json, root);
+                    delete skeletonData;
+                    delete root;
                     return NULL;
                 }
                 skeletonData->_animations[animationsIndex++] = animation;
             }
         }
 
-        DESTROY(Json, root);
+        delete root;
         
         return skeletonData;
     }
@@ -807,8 +796,7 @@ namespace Spine {
 
             for (timelineMap = slotMap->_child; timelineMap; timelineMap = timelineMap->_next) {
                 if (strcmp(timelineMap->_name, "attachment") == 0) {
-                    AttachmentTimeline *timeline = NEW(AttachmentTimeline);
-                    new (timeline) AttachmentTimeline(timelineMap->_size);
+                    AttachmentTimeline *timeline = new AttachmentTimeline(timelineMap->_size);
                     
                     timeline->_slotIndex = slotIndex;
 
@@ -823,8 +811,7 @@ namespace Spine {
 
                 }
                 else if (strcmp(timelineMap->_name, "color") == 0) {
-                    ColorTimeline *timeline = NEW(ColorTimeline);
-                    new (timeline) ColorTimeline(timelineMap->_size);
+                    ColorTimeline *timeline = new ColorTimeline(timelineMap->_size);
                     
                     timeline->_slotIndex = slotIndex;
 
@@ -839,8 +826,7 @@ namespace Spine {
 
                 }
                 else if (strcmp(timelineMap->_name, "twoColor") == 0) {
-                    TwoColorTimeline *timeline = NEW(TwoColorTimeline);
-                    new (timeline) TwoColorTimeline(timelineMap->_size);
+                    TwoColorTimeline *timeline = new TwoColorTimeline(timelineMap->_size);
                     
                     timeline->_slotIndex = slotIndex;
 
@@ -876,8 +862,7 @@ namespace Spine {
 
             for (timelineMap = boneMap->_child; timelineMap; timelineMap = timelineMap->_next) {
                 if (strcmp(timelineMap->_name, "rotate") == 0) {
-                    RotateTimeline *timeline = NEW(RotateTimeline);
-                    new (timeline) RotateTimeline(timelineMap->_size);
+                    RotateTimeline *timeline = new RotateTimeline(timelineMap->_size);
                     
                     timeline->_boneIndex = boneIndex;
 
@@ -897,16 +882,13 @@ namespace Spine {
                         float timelineScale = isTranslate ? _scale: 1;
                         TranslateTimeline *timeline = 0;
                         if (isScale) {
-                            timeline = NEW(ScaleTimeline);
-                            new (timeline) ScaleTimeline(timelineMap->_size);
+                            timeline = new ScaleTimeline(timelineMap->_size);
                         }
                         else if (isTranslate) {
-                            timeline = NEW(TranslateTimeline);
-                            new (timeline) TranslateTimeline(timelineMap->_size);
+                            timeline = new TranslateTimeline(timelineMap->_size);
                         }
                         else if (isShear) {
-                            timeline = NEW(ShearTimeline);
-                            new (timeline) ShearTimeline(timelineMap->_size);
+                            timeline = new ShearTimeline(timelineMap->_size);
                         }
                         timeline->_boneIndex = boneIndex;
 
@@ -931,8 +913,7 @@ namespace Spine {
         /** IK constraint timelines. */
         for (constraintMap = ik ? ik->_child : 0; constraintMap; constraintMap = constraintMap->_next) {
             IkConstraintData* constraint = skeletonData->findIkConstraint(constraintMap->_name);
-            IkConstraintTimeline *timeline = NEW(IkConstraintTimeline);
-            new (timeline) IkConstraintTimeline(constraintMap->_size);
+            IkConstraintTimeline *timeline = new IkConstraintTimeline(constraintMap->_size);
             
             for (frameIndex = 0; frameIndex < static_cast<int>(skeletonData->_ikConstraints.size()); ++frameIndex) {
                 if (constraint == skeletonData->_ikConstraints[frameIndex]) {
@@ -952,8 +933,7 @@ namespace Spine {
         /** Transform constraint timelines. */
         for (constraintMap = transform ? transform->_child : 0; constraintMap; constraintMap = constraintMap->_next) {
             TransformConstraintData* constraint = skeletonData->findTransformConstraint(constraintMap->_name);
-            TransformConstraintTimeline *timeline = NEW(TransformConstraintTimeline);
-            new (timeline) TransformConstraintTimeline(constraintMap->_size);
+            TransformConstraintTimeline *timeline = new TransformConstraintTimeline(constraintMap->_size);
             
             for (frameIndex = 0; frameIndex < skeletonData->_transformConstraints.size(); ++frameIndex) {
                 if (constraint == skeletonData->_transformConstraints[frameIndex]) {
@@ -995,16 +975,14 @@ namespace Spine {
                     PathConstraintPositionTimeline* timeline;
                     float timelineScale = 1;
                     if (strcmp(timelineName, "spacing") == 0) {
-                        timeline = NEW(PathConstraintSpacingTimeline);
-                        new (timeline) PathConstraintSpacingTimeline(timelineMap->_size);
+                        timeline = new PathConstraintSpacingTimeline(timelineMap->_size);
                         
                         if (data->_spacingMode == SpacingMode_Length || data->_spacingMode == SpacingMode_Fixed) {
                             timelineScale = _scale;
                         }
                     }
                     else {
-                        timeline = NEW(PathConstraintPositionTimeline);
-                        new (timeline) PathConstraintPositionTimeline(timelineMap->_size);
+                        timeline = new PathConstraintPositionTimeline(timelineMap->_size);
                         
                         if (data->_positionMode == PositionMode_Fixed) {
                             timelineScale = _scale;
@@ -1021,8 +999,7 @@ namespace Spine {
                     duration = MAX(duration, timeline->_frames[(timelineMap->_size - 1) * PathConstraintPositionTimeline::ENTRIES]);
                 }
                 else if (strcmp(timelineName, "mix") == 0) {
-                    PathConstraintMixTimeline* timeline = NEW(PathConstraintMixTimeline);
-                    new (timeline) PathConstraintMixTimeline(timelineMap->_size);
+                    PathConstraintMixTimeline* timeline = new PathConstraintMixTimeline(timelineMap->_size);
                     timeline->_pathConstraintIndex = constraintIndex;
                     for (valueMap = timelineMap->_child, frameIndex = 0; valueMap; valueMap = valueMap->_next, ++frameIndex) {
                         timeline->setFrame(frameIndex, Json::getFloat(valueMap, "time", 0), Json::getFloat(valueMap, "rotateMix", 1), Json::getFloat(valueMap, "translateMix", 1));
@@ -1064,8 +1041,7 @@ namespace Spine {
                         tempDeform.push_back(0);
                     }
 
-                    timeline = NEW(DeformTimeline);
-                    new (timeline) DeformTimeline(timelineMap->_size);
+                    timeline = new DeformTimeline(timelineMap->_size);
                     
                     timeline->_slotIndex = slotIndex;
                     timeline->_attachment = attachment;
@@ -1115,8 +1091,7 @@ namespace Spine {
 
         /** Draw order timeline. */
         if (drawOrder) {
-            DrawOrderTimeline* timeline = NEW(DrawOrderTimeline);
-            new (timeline) DrawOrderTimeline(drawOrder->_size);
+            DrawOrderTimeline* timeline = new DrawOrderTimeline(drawOrder->_size);
             
             for (valueMap = drawOrder->_child, frameIndex = 0; valueMap; valueMap = valueMap->_next, ++frameIndex) {
                 int ii;
@@ -1170,8 +1145,7 @@ namespace Spine {
 
         /** Event timeline. */
         if (events) {
-            EventTimeline* timeline = NEW(EventTimeline);
-            new (timeline) EventTimeline(events->_size);
+            EventTimeline* timeline = new EventTimeline(events->_size);
             
             for (valueMap = events->_child, frameIndex = 0; valueMap; valueMap = valueMap->_next, ++frameIndex) {
                 Event* event;
@@ -1182,8 +1156,7 @@ namespace Spine {
                     return NULL;
                 }
                 
-                event = NEW(Event);
-                new (event) Event(Json::getFloat(valueMap, "time", 0), *eventData);
+                event = new Event(Json::getFloat(valueMap, "time", 0), *eventData);
                 event->_intValue = Json::getInt(valueMap, "int", eventData->_intValue);
                 event->_floatValue = Json::getFloat(valueMap, "float", eventData->_floatValue);
                 event->_stringValue = Json::getString(valueMap, "string", eventData->_stringValue.c_str());
@@ -1194,10 +1167,7 @@ namespace Spine {
             duration = MAX(duration, timeline->_frames[events->_size - 1]);
         }
         
-        Animation* ret = NEW(Animation);
-        new (ret) Animation(std::string(root->_name), timelines, duration);
-
-        return ret;
+        return new Animation(std::string(root->_name), timelines, duration);
     }
     
     void SkeletonJson::readVertices(Json* attachmentMap, VertexAttachment* attachment, int verticesLength) {
@@ -1257,7 +1227,7 @@ namespace Spine {
         _error = std::string(message);
         
         if (root) {
-            DESTROY(Json, root);
+            delete root;
         }
     }
 }

+ 35 - 0
spine-cpp/spine-cpp/src/spine/SpineObject.cpp

@@ -0,0 +1,35 @@
+/******************************************************************************
+* Spine Runtimes Software License v2.5
+*
+* Copyright (c) 2013-2016, Esoteric Software
+* All rights reserved.
+*
+* You are granted a perpetual, non-exclusive, non-sublicensable, and
+* non-transferable license to use, install, execute, and perform the Spine
+* Runtimes software and derivative works solely for personal or internal
+* use. Without the written permission of Esoteric Software (see Section 2 of
+* the Spine Software License Agreement), you may not (a) modify, translate,
+* adapt, or develop new applications using the Spine Runtimes or otherwise
+* create derivative works or improvements of the Spine Runtimes or (b) remove,
+* delete, alter, or obscure any trademarks or any copyright, trademark, patent,
+* or other intellectual property or proprietary rights notices on or in the
+* Software, including any copy thereof. Redistributions in binary or source
+* form must include this license and terms.
+*
+* THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
+* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+* EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF
+* USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+* POSSIBILITY OF SUCH DAMAGE.
+*****************************************************************************/
+
+#include <spine/SpineObject.h>
+
+namespace Spine {
+
+}

+ 0 - 87
spine-sfml/CMakeLists.txt

@@ -1,87 +0,0 @@
-cmake_minimum_required(VERSION 2.8.9)
-#
-# First download and extract SFML 2.3.2 for the respective OS we are on
-#
-set(DEPS_DIR "${CMAKE_CURRENT_LIST_DIR}/dependencies/")
-if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
-    set(SFML_URL "http://www.sfml-dev.org/files/SFML-2.4.1-osx-clang.tar.gz")
-    set(SFML_DIR ${DEPS_DIR}/SFML-2.4.1-osx-clang)
-	if (NOT EXISTS "${SFML_DIR}")
-		message("Downloading SFML for Mac OS X")
-		file(DOWNLOAD "${SFML_URL}" "${DEPS_DIR}/sfml.tar.gz")
-		execute_process(
-			COMMAND ${CMAKE_COMMAND} -E tar xzf  ${DEPS_DIR}/sfml.tar.gz
-			WORKING_DIRECTORY ${DEPS_DIR}
-    	)
-		# copy freetype over to Frameworks/ so rpath resoultion works
-		execute_process(
-				COMMAND ${CMAKE_COMMAND} -E copy_directory ${SFML_DIR}/extlibs/freetype.framework ${SFML_DIR}/Frameworks/freetype.framework
-				WORKING_DIRECTORY ${SFML_DIR}
-		)
-	endif()
-elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
-    set(SFML_URL "http://www.sfml-dev.org/files/SFML-2.4.1-linux-gcc-64-bit.tar.gz")
-    set(SFML_DIR ${DEPS_DIR}/SFML-2.4.1)
-	if (NOT EXISTS ${SFML_DIR})
-		message("Downloading SFML for Linux 64-bit")
-		file(DOWNLOAD "${SFML_URL}" "${DEPS_DIR}/sfml.tar.gz")
-		execute_process(
-			COMMAND ${CMAKE_COMMAND} -E tar xzf  ${DEPS_DIR}/sfml.tar.gz
-			WORKING_DIRECTORY ${DEPS_DIR}
-    	)
-	endif()
-else()
-	set(SFML_URL "http://www.sfml-dev.org/files/SFML-2.4.1-windows-vc14-32-bit.zip")
-	set(SFML_DIR ${DEPS_DIR}/SFML-2.4.1)
-	if (NOT EXISTS ${SFML_DIR})
-		message("Downloading SFML for Windows 32-bit")
-		file(DOWNLOAD "${SFML_URL}" "${DEPS_DIR}/sfml.zip")
-		execute_process(
-			COMMAND ${CMAKE_COMMAND} -E tar x  ${DEPS_DIR}/sfml.zip
-			WORKING_DIRECTORY ${DEPS_DIR}
-    	)
-	endif()
-endif()
-
-# Define spine-sfml library
-include_directories(src ${SFML_DIR}/include)
-file(GLOB INCLUDES "src/**/*.h")
-file(GLOB SOURCES "src/**/*.cpp")
-add_library(spine-sfml STATIC ${SOURCES} ${INCLUDES})
-target_link_libraries(spine-sfml LINK_PUBLIC spine-c)
-install(TARGETS spine-sfml DESTINATION dist/lib)
-install(FILES ${INCLUDES} DESTINATION dist/include)
-
-# Define spine-sfml example executable
-add_executable(spine-sfml-example example/main.cpp)
-
-# Link in SFML libraries and OS dependencies like OpenGL
-if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")	
-	find_library(SFML SFML PATHS ${SFML_DIR}/Frameworks)	
-	find_library(SFML_SYSTEM "sfml-system" PATHS ${SFML_DIR}/Frameworks)	
-	find_library(SFML_WINDOW sfml-window PATHS ${SFML_DIR}/Frameworks)	
-	find_library(SFML_GRAPHICS sfml-graphics PATHS ${SFML_DIR}/Frameworks)
-	target_link_libraries(spine-sfml-example ${SFML} ${SFML_SYSTEM} ${SFML_WINDOW} ${SFML_GRAPHICS})
-elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
-	target_link_libraries(spine-sfml-example sfml-graphics sfml-window sfml-system)
-else()	
-	set(SFML_LIBS ${SFML_DIR}/lib)
-	target_link_libraries(spine-sfml-example ${SFML_LIBS}/sfml-main-d.lib)
-	target_link_libraries(spine-sfml-example ${SFML_LIBS}/sfml-graphics-s-d.lib)
-	target_link_libraries(spine-sfml-example ${SFML_LIBS}/sfml-window-s-d.lib)	
-	target_link_libraries(spine-sfml-example ${SFML_LIBS}/sfml-system-s-d.lib)
-	target_link_libraries(spine-sfml-example ${SFML_LIBS}/freetype.lib)
-	target_link_libraries(spine-sfml-example ${SFML_LIBS}/jpeg.lib)
-	target_link_libraries(spine-sfml-example opengl32)
-	target_link_libraries(spine-sfml-example gdi32)
-	target_link_libraries(spine-sfml-example winmm)
-	add_definitions(-DSFML_STATIC)
-endif()
-
-# copy data to build directory
-add_custom_command(TARGET spine-sfml-example PRE_BUILD
-		COMMAND ${CMAKE_COMMAND} -E copy_directory
-		${CMAKE_CURRENT_LIST_DIR}/data $<TARGET_FILE_DIR:spine-sfml-example>/data)
-
-target_link_libraries(spine-sfml-example spine-c)
-target_link_libraries(spine-sfml-example spine-sfml)

+ 0 - 27
spine-sfml/LICENSE

@@ -1,27 +0,0 @@
-Spine Runtimes Software License v2.5
-
-Copyright (c) 2013-2016, Esoteric Software
-All rights reserved.
-
-You are granted a perpetual, non-exclusive, non-sublicensable, and
-non-transferable license to use, install, execute, and perform the Spine
-Runtimes software and derivative works solely for personal or internal
-use. Without the written permission of Esoteric Software (see Section 2 of
-the Spine Software License Agreement), you may not (a) modify, translate,
-adapt, or develop new applications using the Spine Runtimes or otherwise
-create derivative works or improvements of the Spine Runtimes or (b) remove,
-delete, alter, or obscure any trademarks or any copyright, trademark, patent,
-or other intellectual property or proprietary rights notices on or in the
-Software, including any copy thereof. Redistributions in binary or source
-form must include this license and terms.
-
-THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF
-USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.

+ 0 - 68
spine-sfml/README.md

@@ -1,68 +0,0 @@
-# spine-sfml
-
-The spine-sfml runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using [SFML](http://www.sfml-dev.org/). spine-sfml is based on [spine-c](../spine-c).
-
-## Licensing
-
-This Spine Runtime may only be used for personal or internal use, typically to evaluate Spine before purchasing. If you would like to incorporate a Spine Runtime into your applications, distribute software containing a Spine Runtime, or modify a Spine Runtime, then you will need a valid [Spine license](https://esotericsoftware.com/spine-purchase). Please see the [Spine Runtimes Software License](http://esotericsoftware.com/git/spine-runtimes/blob/LICENSE) for detailed information.
-
-The Spine Runtimes are developed with the intent to be used with data exported from Spine. By purchasing Spine, `Section 2` of the [Spine Software License](https://esotericsoftware.com/files/license.txt) grants the right to create and distribute derivative works of the Spine Runtimes.
-
-## Spine version
-
-spine-sfml works with data exported from Spine 3.6.xx.
-
-spine-sfml supports all Spine features.
-
-spine-sfml does not yet support loading the binary format.
-
-## Usage
-1. Create a new SFML project. See the [SFML documentation](http://www.sfml-dev.org/tutorials/2.1/) or have a look at the example in this repository.
-2. Download the Spine Runtimes source using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it as a zip via the download button above.
-3. Add the sources from `spine-c/spine-c/src/spine` and `spine-sfml/src/spine` to your project
-4. Add the folder `spine-c/spine-c/include` to your header search path. Note that includes are specified as `#inclue <spine/file.h>`, so the `spine` directory cannot be omitted when copying the source files.
-
-See the [Spine Runtimes documentation](http://esotericsoftware.com/spine-documentation#runtimesTitle) on how to use the APIs or check out the Spine SFML example.
-
-## Example
-The Spine SFML example works on Windows, Linux and Mac OS X.
-
-### Windows
-1. Install [Visual Studio 2015 Community](https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx). Make sure you install support for C++ as well as th Windows SDK for XP/7/8.
-2. Install CMake via the [Windows installer package](https://cmake.org/download/).
-3. Download the Spine Runtimes repository using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it as a zip via the download button above.
-4. Run CMake GUI from the start menu
-5. Click `Browse Source` and select the directory `spine-runtimes`
-6. Click `Browse Build` and select the `spine-runtimes/spine-sfml/build` directory. You can create the `build` folder directly in the file dialog via `New Folder`.
-7. Click `Configure`. Then click `Generate`. This will create a Visual Studio 2015 solution file called `spine.sln` in `spine-runtimes/spine-sfml/build` and also download the SFML dependencies.
-8. Open the `spine.sln` file in Visual Studio 2015
-9. Right click the `spine-sfml-example` project in the solution explorer and select `Set as Startup Project` from the context menu
-10. Right click the `spine-sfml-example` project in the solution explorer and select `Properties` from the context menu
-11. Select `Debugging` in the left-hand list, then set `Working Directory` to `$(OutputPath)`
-12. Click `Local Windows Debugger` to run the example
-
-The entire example code is contained in [main.cpp](example/main.cpp#L61)
-
-### Linux
-1. Install the SFML dependencies, e.g. on Ubuntu/Debian via `sudo apt install libsfml-dev`
-2. Install CMake, e.g. on Ubuntu/Debian via `sudo apt-get install -y cmake`
-3. Download the Spine Runtimes repository using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it as a zip via the download button above.
-4. Open a terminal, and `cd` into the `spine-runtimes/spine-sfml` folder
-5. Type `mkdir build && cd build && cmake ../..` to generate Make files
-6. Type `make` to compile the example
-7. Run the example by `cd spine-sfml && ./spine-sfml-example`
-
-### Mac OS X
-1. Install [Xcode](https://developer.apple.com/xcode/)
-2. Install [Homebrew](http://brew.sh/)
-3. Open a terminal and install CMake via `brew install cmake`
-3. Download the Spine Runtimes repository using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it as a zip via the download button above.
-4. Open a terminal, and `cd` into the `spine-runtimes/spine-sfml` folder
-5. Type `mkdir build && cd build && cmake -G Xcode ../..` to generate an Xcode project called `spine.xcodeproj`
-6. Open the Xcode project in `spine-runtimes/spine-sfml/build/`
-7. In Xcode, set the active scheme from `ALL_BUILD` to `spine-sfml-example`
-8. Click the `Run` button or type `CMD+R` to run the example
-
-## Notes
-
-- Atlas images should not use premultiplied alpha.

+ 0 - 178
spine-sfml/data/coin-pro.json

@@ -1,178 +0,0 @@
-{
-"skeleton": {
-	"hash": "lfmnIwRt8cjfHaBQWvT0v4odYdY",
-	"spine": "3.7.08-beta",
-	"width": 260,
-	"height": 359.92,
-	"images": "./images/",
-	"audio": ""
-},
-"bones": [
-	{ "name": "root" },
-	{ "name": "coin-root", "parent": "root", "y": 300, "color": "ff0000ff" },
-	{ "name": "coin", "parent": "coin-root", "color": "ffe037ff" },
-	{ "name": "clipping", "parent": "coin", "x": 7.25, "scaleX": 0.96, "scaleY": 0.967, "color": "ffe037ff" },
-	{ "name": "shine", "parent": "coin-root", "rotation": -24.17, "scaleY": 1.478, "color": "ffffffff" }
-],
-"slots": [
-	{ "name": "images/coin", "bone": "coin", "attachment": "coin" },
-	{ "name": "clipping", "bone": "clipping", "attachment": "clipping" },
-	{ "name": "images/shine", "bone": "shine", "color": "ffffff93", "attachment": "shine", "blend": "additive" }
-],
-"skins": {
-	"default": {
-		"clipping": {
-			"clipping": {
-				"type": "clipping",
-				"end": "images/coin",
-				"vertexCount": 36,
-				"vertices": [ 0.82, 120.87, 25.27, 118.4, 49.23, 110.99, 71.46, 98.15, 88.25, 83.08, 102.58, 64.8, 112.21, 46.03, 117.89, 28, 121.35, 9.23, 120.61, -11.52, 117.65, -30.29, 111.72, -48.08, 102.33, -65.61, 89.47, -82.23, 76.24, -94.71, 61.33, -105.13, 46.26, -112.54, 28.73, -118.22, 8.73, -120.89, -12.27, -120.89, -32.03, -116.94, -51.04, -110.27, -67.59, -101.63, -82.91, -88.78, -96.25, -74.21, -108.35, -55.68, -116.5, -35.43, -120.7, -14.19, -121.69, 5.57, -118.97, 27.56, -111.56, 49.04, -100.43, 69.69, -84.38, 87.47, -66.1, 102.29, -45.6, 112.67, -23.62, 118.59 ],
-				"color": "ce3a3aff"
-			}
-		},
-		"images/coin": {
-			"coin": {
-				"type": "mesh",
-				"uvs": [ 1, 1, 0.51662, 0.99661, 0.38311, 0.99567, 0.29957, 0.96664, 0.22817, 0.93237, 0.16736, 0.88777, 0.11597, 0.83202, 0.06732, 0.76058, 0.03288, 0.69072, 0.00816, 0.61391, 0, 0.52843, 0, 0.43778, 0.02307, 0.33992, 0.06544, 0.24204, 0.11924, 0.16659, 0.17691, 0.10919, 0.24399, 0.06252, 0.31853, 0.02742, 0.41818, 0.0076, 0.52609, 1.0E-5, 1, 0, 0.45994, 0.99066, 0.37873, 0.97119, 0.30719, 0.94057, 0.24626, 0.89841, 0.19491, 0.85157, 0.14893, 0.79961, 0.11299, 0.73943, 0.08595, 0.67565, 0.06609, 0.60105, 0.05753, 0.52647, 0.05856, 0.44906, 0.07176, 0.36094, 0.10407, 0.28078, 0.15657, 0.19211, 0.22811, 0.1162, 0.29907, 0.0658, 0.38388, 0.02814, 0.46119, 0.00993 ],
-				"triangles": [ 38, 18, 19, 37, 17, 18, 37, 18, 38, 36, 16, 17, 36, 17, 37, 35, 15, 16, 35, 16, 36, 34, 14, 15, 34, 15, 35, 34, 33, 13, 34, 13, 14, 12, 13, 33, 32, 12, 33, 11, 12, 32, 31, 11, 32, 31, 10, 11, 30, 10, 31, 31, 33, 30, 29, 30, 33, 29, 9, 10, 29, 10, 30, 32, 33, 31, 34, 28, 29, 8, 9, 29, 8, 29, 28, 33, 34, 29, 25, 26, 27, 7, 8, 28, 7, 28, 27, 27, 28, 25, 26, 7, 27, 6, 7, 26, 34, 36, 28, 28, 36, 25, 6, 26, 25, 5, 6, 25, 34, 35, 36, 37, 24, 25, 5, 25, 24, 4, 5, 24, 36, 37, 25, 22, 23, 24, 4, 24, 23, 3, 4, 23, 24, 21, 22, 3, 23, 22, 38, 24, 37, 24, 1, 21, 2, 22, 21, 3, 22, 2, 1, 38, 19, 1, 24, 38, 2, 21, 1, 19, 20, 0, 1, 19, 0 ],
-				"vertices": [ 130, -123.5, 4.32, -122.66, -30.39, -122.43, -52.11, -115.26, -70.68, -106.8, -86.49, -95.78, -99.85, -82.01, -112.5, -64.36, -121.45, -47.11, -127.88, -28.14, -130, -7.02, -130, 15.37, -124, 39.54, -112.99, 63.72, -99, 82.35, -84, 96.53, -66.56, 108.06, -47.18, 116.73, -21.27, 121.62, 6.78, 123.5, 130, 123.5, -10.42, -121.19, -31.53, -116.39, -50.13, -108.82, -65.97, -98.41, -79.32, -86.84, -91.28, -74, -100.62, -59.14, -107.65, -43.39, -112.82, -24.96, -115.04, -6.54, -114.77, 12.58, -111.34, 34.35, -102.94, 54.15, -89.29, 76.05, -70.69, 94.8, -52.24, 107.25, -30.19, 116.55, -10.09, 121.05 ],
-				"hull": 21,
-				"edges": [ 0, 40, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 20, 22, 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 0, 2, 2, 4, 42, 2, 38, 40, 36, 38, 76, 38, 2, 38 ],
-				"width": 259,
-				"height": 245
-			},
-			"coin-invert": {
-				"type": "mesh",
-				"uvs": [ 0.61921, 0.00932, 0.70137, 0.03058, 0.76675, 0.06301, 0.82357, 0.10192, 0.86533, 0.14084, 0.90128, 0.1866, 0.92763, 0.22768, 0.95707, 0.28353, 0.97795, 0.33937, 0.99074, 0.38663, 1, 0.45194, 1, 0.50671, 1, 0.56148, 0.98993, 0.62238, 0.97282, 0.6757, 0.95125, 0.73083, 0.91771, 0.78704, 0.88283, 0.83498, 0.84141, 0.87966, 0.79349, 0.91785, 0.73701, 0.95172, 0.65999, 0.98127, 0.60659, 0.991, 0.51662, 0.99661, 0, 1, 0, 0, 0.52609, 1.0E-5, 0.57849, 0.98348, 0.64806, 0.96162, 0.70899, 0.92882, 0.75987, 0.89639, 0.80219, 0.85685, 0.83745, 0.81722, 0.86381, 0.77794, 0.89445, 0.72582, 0.9167, 0.67213, 0.93142, 0.61628, 0.94164, 0.56011, 0.94506, 0.50823, 0.9437, 0.45454, 0.93514, 0.39905, 0.91905, 0.34031, 0.89748, 0.28194, 0.8691, 0.2284, 0.83932, 0.18768, 0.79995, 0.143, 0.76298, 0.10841, 0.71814, 0.07598, 0.66748, 0.04824, 0.61408, 0.0277, 0.5665, 0.01437 ],
-				"triangles": [ 50, 26, 0, 49, 50, 0, 48, 0, 1, 49, 0, 48, 47, 1, 2, 48, 1, 47, 46, 47, 2, 46, 2, 3, 45, 46, 3, 45, 3, 4, 44, 45, 4, 44, 4, 5, 43, 44, 5, 43, 5, 6, 42, 43, 6, 42, 6, 7, 41, 42, 7, 41, 7, 8, 40, 41, 8, 40, 8, 9, 39, 40, 9, 10, 39, 9, 39, 10, 11, 38, 39, 11, 41, 40, 38, 38, 40, 39, 38, 11, 12, 37, 38, 12, 38, 36, 41, 37, 36, 38, 13, 37, 12, 36, 37, 13, 36, 43, 41, 41, 43, 42, 14, 36, 13, 35, 36, 14, 44, 43, 36, 35, 34, 36, 15, 35, 14, 34, 35, 15, 44, 36, 45, 34, 33, 36, 16, 34, 15, 33, 34, 16, 48, 47, 49, 36, 33, 45, 17, 33, 16, 32, 33, 17, 32, 31, 33, 18, 32, 17, 31, 32, 18, 33, 29, 45, 45, 47, 46, 31, 30, 33, 19, 30, 31, 19, 31, 18, 49, 47, 45, 30, 29, 33, 20, 29, 30, 20, 30, 19, 50, 49, 29, 45, 29, 49, 21, 28, 29, 21, 29, 20, 29, 27, 50, 28, 27, 29, 22, 27, 28, 22, 28, 21, 23, 25, 26, 23, 26, 50, 23, 50, 27, 23, 27, 22, 24, 25, 23 ],
-				"vertices": [ 42.18, 121.2, 63.54, 115.95, 80.54, 107.94, 95.31, 98.32, 106.17, 88.71, 115.51, 77.41, 122.37, 67.26, 130.02, 53.47, 135.45, 39.68, 138.77, 28, 141.18, 11.87, 141.18, -1.66, 141.18, -15.19, 138.56, -30.23, 134.11, -43.4, 128.51, -57.02, 119.79, -70.9, 110.72, -82.74, 99.95, -93.78, 87.49, -103.21, 72.8, -111.58, 52.78, -118.87, 38.9, -121.28, 15.5, -122.66, -118.82, -123.5, -118.82, 123.5, 17.97, 123.5, 31.59, -119.42, 49.68, -114.02, 65.52, -105.92, 78.75, -97.91, 89.75, -88.14, 98.92, -78.35, 105.77, -68.65, 113.74, -55.78, 119.52, -42.52, 123.35, -28.72, 126.01, -14.85, 126.9, -2.03, 126.54, 11.23, 124.32, 24.94, 120.13, 39.44, 114.53, 53.86, 107.15, 67.09, 99.4, 77.14, 89.17, 88.18, 79.56, 96.72, 67.9, 104.73, 54.73, 111.59, 40.84, 116.66, 28.47, 119.95 ],
-				"hull": 27,
-				"edges": [ 46, 52, 46, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 92, 92, 94, 94, 96, 96, 98, 98, 100, 100, 52, 52, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 48, 50, 50, 52, 46, 48, 16, 18, 18, 20 ],
-				"width": 259,
-				"height": 245
-			}
-		},
-		"images/shine": {
-			"shine": { "width": 72, "height": 245 }
-		}
-	}
-},
-"animations": {
-	"rotate": {
-		"slots": {
-			"images/coin": {
-				"attachment": [
-					{ "time": 0.5, "name": "coin-invert" }
-				]
-			},
-			"images/shine": {
-				"color": [
-					{ "time": 0, "color": "ffffff00" },
-					{ "time": 0.2667, "color": "ffffffbc" },
-					{ "time": 0.5, "color": "ffffff00" },
-					{ "time": 0.7333, "color": "ffffffbc" },
-					{ "time": 1, "color": "ffffff00" }
-				]
-			}
-		},
-		"bones": {
-			"shine": {
-				"translate": [
-					{
-						"time": 0,
-						"x": 175.08,
-						"y": 0,
-						"curve": [ 0.213, 0.65, 0.931, 0.67 ]
-					},
-					{
-						"time": 0.5,
-						"x": -127.2,
-						"y": 0,
-						"curve": [ 0.55, 0.09, 0.931, 0.67 ]
-					},
-					{ "time": 1, "x": 175.08, "y": 0 }
-				],
-				"scale": [
-					{
-						"time": 0,
-						"x": 1,
-						"y": 1,
-						"curve": [ 0.213, 0.65, 0.931, 0.67 ]
-					},
-					{
-						"time": 0.5,
-						"x": 2,
-						"y": 1,
-						"curve": [ 0.55, 0.09, 0.931, 0.67 ]
-					},
-					{ "time": 1, "x": 1, "y": 1 }
-				]
-			},
-			"coin": {
-				"translate": [
-					{ "time": 0, "x": 0, "y": 0 },
-					{ "time": 0.5, "x": 0.93, "y": 0 },
-					{ "time": 0.5011, "x": -9.18, "y": 0 },
-					{ "time": 1, "x": 2, "y": 0 }
-				]
-			},
-			"clipping": {
-				"translate": [
-					{ "time": 0, "x": -0.41, "y": 0 },
-					{ "time": 0.2667, "x": 1.2, "y": 1.21 },
-					{ "time": 0.5, "x": 0, "y": 0 },
-					{ "time": 0.7333, "x": -4.15, "y": 0 },
-					{ "time": 1, "x": -3.16, "y": 0 }
-				],
-				"scale": [
-					{ "time": 0, "x": 1, "y": 1 },
-					{ "time": 0.2667, "x": 0.464, "y": 1.014 },
-					{ "time": 0.4667, "x": 0.067, "y": 1.002 },
-					{ "time": 0.5, "x": 0.033, "y": 1 },
-					{ "time": 0.7333, "x": 0.492, "y": 1.014 },
-					{ "time": 1, "x": 1, "y": 1 }
-				]
-			}
-		},
-		"deform": {
-			"default": {
-				"images/coin": {
-					"coin": [
-						{
-							"time": 0,
-							"offset": 4,
-							"vertices": [ 15.75598, 0, 15.75598, 0, 15.75598, 0, 15.75598, 0, 15.75598, 0, 15.75598, 0, 15.75598, 0, 15.75598, 0, 15.75598, 0, 15.75598, 0, 15.75598, 0, 15.75598, 0, 15.75598, 0, 15.75598, 0, 15.75598, 0, 15.75598, 0, 15.75598 ]
-						},
-						{
-							"time": 0.2333,
-							"vertices": [ -57.61087, 0, 1.15225, 0, 15.20888, 0, 24.26007, 0, 31.99586, 0, 38.58396, 0, 44.15197, 0, 49.42246, 0, 53.15465, 0, 55.83239, 0, 56.71656, 0, 56.71656, 0, 54.21722, 0, 49.62682, 0, 43.79747, 0, 37.5494, 0, 30.28123, 0, 22.2055, 0, 11.40953, 0, 0, 0, -57.61087, 0, 8.04186, 0, 17.91416, 0, 26.61125, 0, 34.01835, 0, 40.26029, 0, 45.85036, 0, 50.21972, 0, 53.50714, 0, 55.9207, 0, 56.96101, 0, 56.83617, 0, 55.23131, 0, 51.30379, 0, 44.9216, 0, 36.22496, 0, 27.59846, 0, 17.28874, 0, 7.89076 ]
-						},
-						{
-							"time": 0.4667,
-							"vertices": [ -115.22174, 0, 2.3045, 0, 20.08046, 0, 40.51821, 0, 57.98577, 0, 72.86182, 0, 85.43448, 0, 97.33535, 0, 105.76271, 0, 111.80908, 0, 113.80557, 0, 113.80557, 0, 108.16202, 0, 97.7968, 0, 84.63402, 0, 70.52576, 0, 54.11411, 0, 35.87894, 0, 11.50145, 1.74997, 0, 0, -115.22174, 0, 16.08371, 0, 35.82832, 0, 53.2225, 0, 68.0367, 0, 80.52058, 0, 91.70073, 0, 100.43944, 0, 107.01427, 0, 111.84139, 0, 113.92201, 0, 113.67234, 0, 110.46262, 0, 102.60757, 0, 89.84319, 0, 72.44992, 0, 55.19692, 0, 34.57748, 0, 15.78153 ]
-						},
-						{
-							"time": 0.5,
-							"vertices": [ -123.45187, 0, 2.46911, 0, 21.49595, 0, 43.40345, 0, 62.12716, 0, 78.07299, 0, 91.54979, 0, 104.3065, 0, 113.33989, 0, 119.82108, 0, 121.96114, 0, 121.96114, 0, 115.91174, 0, 104.80113, 0, 90.69177, 0, 75.56894, 0, 57.97707, 0, 38.43056, 0, 12.3, 0, 0, 0, -123.45187, 0, 17.23255, 0, 38.38749, 0, 57.02411, 0, 72.89646, 0, 86.27205, 0, 98.25078, 0, 107.61369, 0, 114.65815, 0, 119.83006, 0, 122.0593, 0, 121.79179, 0, 118.35281, 0, 109.93669, 0, 96.26056, 0, 77.62492, 0, 59.13956, 0, 37.0473, 0, 16.90878 ]
-						}
-					],
-					"coin-invert": [
-						{
-							"time": 0.5,
-							"vertices": [ -23.47706, 1.27002, -43.40744, 0, -59.7846, 0, -74.77602, 0, -85.79382, 0, -95.27632, 0, -102.23021, 0, -109.99683, 0, -115.50598, 0, -118.87909, 0, -121.32259, 0, -121.32259, 0, -121.32258, 0, -118.66653, 0, -114.15101, 0, -108.4615, 0, -99.61115, 0, -90.41013, 0, -79.48267, 0, -66.83928, 0, -51.93813, 0, -31.61855, 0, -19.56224, -1.52396, -12.52719, 0, 120.72772, 0, 120.72777, 0, -14.97203, 0, -28.48602, 0, -46.43241, 0, -62.14667, 0, -75.27165, 0, -86.18799, 0, -95.28229, 0, -102.08092, 0, -109.98608, 0, -115.7252, 0, -119.52184, 0, -122.15746, 0, -123.04041, 0, -122.68725, 0, -120.4799, 0, -116.33008, 0, -110.76754, 0, -103.44593, 0, -95.76433, 0, -85.61052, 0, -76.07477, 0, -64.50826, 0, -51.44074, 0, -37.66688, 0, -25.39402 ]
-						},
-						{
-							"time": 0.7667,
-							"vertices": [ -12.2558, 0, -21.82668, 0, -29.4435, 0, -36.06335, 0, -40.92855, 0, -45.1158, 0, -48.18647, 0, -51.61602, 0, -54.04874, 0, -55.53822, 0, -56.61722, 0, -56.61722, 0, -56.61721, 0, -55.44436, 0, -53.45041, 0, -50.93806, 0, -47.02994, 0, -42.967, 0, -38.1417, 0, -32.55868, 0, -25.97868, 0, -17.00604, 0, -10.78498, 0, -5.84602, 0, 56.33961, 0, 56.33963, 0, -6.98695, 0, -13.29348, 0, -21.66846, 0, -29.00178, 0, -35.12677, 0, -40.22107, 0, -44.46507, 0, -47.63776, 0, -51.32684, 0, -54.0051, 0, -55.77686, 0, -57.00682, 0, -57.41886, 0, -57.25405, 0, -56.22396, 0, -54.28737, 0, -51.69152, 0, -48.27477, 0, -44.69002, 0, -39.95158, 0, -35.50156, 0, -30.10386, 0, -24.00568, 0, -17.57788, 0, -11.85054 ]
-						},
-						{
-							"time": 1,
-							"vertices": [ -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001, 0, -17.76001 ]
-						}
-					]
-				}
-			}
-		}
-	}
-}
-}

BIN
spine-sfml/data/coin-pro.skel


+ 0 - 27
spine-sfml/data/coin.atlas

@@ -1,27 +0,0 @@
-
-coin.png
-size: 1024,256
-format: RGBA8888
-filter: Linear,Linear
-repeat: none
-coin
-  rotate: false
-  xy: 2, 2
-  size: 259, 245
-  orig: 259, 245
-  offset: 0, 0
-  index: -1
-coin-invert
-  rotate: false
-  xy: 263, 2
-  size: 259, 245
-  orig: 259, 245
-  offset: 0, 0
-  index: -1
-shine
-  rotate: false
-  xy: 524, 2
-  size: 72, 245
-  orig: 72, 245
-  offset: 0, 0
-  index: -1

BIN
spine-sfml/data/coin.png


+ 0 - 1107
spine-sfml/data/goblins-pro.json

@@ -1,1107 +0,0 @@
-{
-"skeleton": {
-	"hash": "GEt0/K+46aqD75ngNEZOztV899k",
-	"spine": "3.7.08-beta",
-	"width": 266.94,
-	"height": 349.61,
-	"images": "./images/",
-	"audio": ""
-},
-"bones": [
-	{ "name": "root" },
-	{ "name": "hip", "parent": "root", "x": 0.65, "y": 114.41, "color": "ffcf00ff" },
-	{ "name": "torso", "parent": "hip", "length": 85.83, "rotation": 93.93, "x": -6.42, "y": 1.98, "color": "ffcf00ff" },
-	{ "name": "neck", "parent": "torso", "length": 18.38, "rotation": -1.52, "x": 81.68, "y": -6.35, "color": "ffcf00ff" },
-	{ "name": "head", "parent": "neck", "length": 68.29, "rotation": -13.92, "x": 20.94, "y": 11.59, "color": "ffcf00ff" },
-	{ "name": "left-shoulder", "parent": "torso", "length": 35.43, "rotation": -156.96, "x": 74.05, "y": -20.39, "color": "ff0000ff" },
-	{ "name": "left-arm", "parent": "left-shoulder", "length": 35.62, "rotation": 28.17, "x": 37.86, "y": -2.35, "color": "ff0000ff" },
-	{ "name": "left-upper-leg", "parent": "hip", "length": 50.4, "rotation": -89.1, "x": 14.45, "y": 2.81, "color": "ff0000ff" },
-	{
-		"name": "left-lower-leg",
-		"parent": "left-upper-leg",
-		"length": 49.9,
-		"rotation": -16.66,
-		"x": 56.34,
-		"y": 0.99,
-		"color": "ff0000ff"
-	},
-	{
-		"name": "left-foot",
-		"parent": "left-lower-leg",
-		"length": 46.5,
-		"rotation": 102.43,
-		"x": 58.94,
-		"y": -7.61,
-		"color": "ff0000ff"
-	},
-	{ "name": "left-hand", "parent": "left-arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.08, "color": "ff0000ff" },
-	{ "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.58, "color": "ffcf00ff" },
-	{ "name": "right-shoulder", "parent": "torso", "length": 37.25, "rotation": 133.89, "x": 76.02, "y": 18.15, "color": "62ff00ff" },
-	{ "name": "right-arm", "parent": "right-shoulder", "length": 36.75, "rotation": 36.33, "x": 37.61, "y": 0.31, "color": "62ff00ff" },
-	{ "name": "right-upper-leg", "parent": "hip", "length": 42.46, "rotation": -97.5, "x": -20.08, "y": -6.84, "color": "62ff00ff" },
-	{
-		"name": "right-lower-leg",
-		"parent": "right-upper-leg",
-		"length": 58.53,
-		"rotation": -14.34,
-		"x": 43,
-		"y": -0.62,
-		"color": "62ff00ff"
-	},
-	{
-		"name": "right-foot",
-		"parent": "right-lower-leg",
-		"length": 45.46,
-		"rotation": 110.31,
-		"x": 64.89,
-		"y": 0.04,
-		"color": "62ff00ff"
-	},
-	{ "name": "right-hand", "parent": "right-arm", "length": 15.32, "rotation": 2.36, "x": 36.9, "y": 0.35, "color": "62ff00ff" },
-	{ "name": "spear1", "parent": "left-hand", "length": 65.07, "rotation": 102.43, "x": 0.48, "y": 17.03, "color": "ffcf00ff" },
-	{ "name": "spear2", "parent": "spear1", "length": 61.42, "rotation": 0.9, "x": 65.06, "y": 0.04, "color": "ffcf00ff" },
-	{ "name": "spear3", "parent": "spear2", "length": 76.8, "rotation": -0.9, "x": 61.89, "y": 0.57, "color": "ffcf00ff" }
-],
-"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-item2", "bone": "right-hand", "attachment": "shield" }
-],
-"skins": {
-	"default": {
-		"left-hand-item": {
-			"dagger": { "x": 7.88, "y": -23.46, "rotation": 10.48, "width": 26, "height": 108 },
-			"spear": {
-				"type": "mesh",
-				"uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.76608, 0.21781, 0.75642, 0.386, 0.74723, 0.54607, 0.72117, 1, 0.28838, 1, 0.24208, 0.54328, 0.2259, 0.38362, 0.20891, 0.21605, 0.20043, 0.13243, 0, 0.1152, 0.4527, 0, 0.58399, 0 ],
-				"triangles": [ 4, 7, 3, 6, 7, 4, 5, 6, 4, 10, 11, 12, 1, 13, 0, 12, 13, 1, 10, 12, 1, 9, 10, 1, 2, 9, 1, 8, 9, 2, 3, 8, 2, 7, 8, 3 ],
-				"vertices": [ 1, 20, 38.54, -10.89, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.59, 0.5116, 20, -0.31, -6.16, 0.4884, 2, 18, 64.73, -5.03, 0.50272, 19, -0.4, -5.07, 0.49728, 1, 10, 4.57, 23.91, 1, 1, 10, 41.7, -138.95, 1, 1, 10, 32.43, -141.1, 1, 1, 10, -6.49, 22.41, 1, 2, 18, 65.48, 6.65, 0.50272, 19, 0.53, 6.6, 0.49728, 2, 19, 62.19, 6.67, 0.5116, 20, 0.2, 6.1, 0.4884, 1, 20, 30.97, 6.62, 1, 1, 20, 37.26, 11.09, 1, 1, 20, 79.75, 1.6, 1, 1, 20, 79.78, -1.29, 1 ],
-				"hull": 14,
-				"edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ],
-				"width": 22,
-				"height": 368
-			}
-		},
-		"right-hand-item": {
-			"dagger": {
-				"type": "mesh",
-				"uvs": [ 0.78092, 0.38453, 1, 0.38406, 1, 0.44882, 0.73954, 0.4687, 0.74642, 0.81344, 0.34023, 1, 0.15434, 1, 0.11304, 0.78858, 0.23007, 0.47368, 0, 0.45047, 0, 0.38622, 0.22368, 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.83, 21.14, -13.57, 20.16, -20.5, 13.16, -21.68, 8.13, -58.57, -5.14, -77.04, -9.92, -76.37, -7.8, -53.61, -0.03, -20.36, -5.61, -17.04, -4.64, -10.17, 1.13, -10.93, 7.47, 30.24, 26.93, 27.5 ],
-				"hull": 14,
-				"edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ],
-				"width": 26,
-				"height": 108
-			}
-		},
-		"right-hand-item2": {
-			"shield": { "rotation": 93.5, "width": 70, "height": 72 }
-		}
-	},
-	"goblin": {
-		"eyes": {
-			"eyes-closed": { "name": "goblin/eyes-closed", "x": 29.19, "y": -24.9, "rotation": -88.93, "width": 34, "height": 12 }
-		},
-		"head": {
-			"head": {
-				"name": "goblin/head",
-				"type": "mesh",
-				"uvs": [ 0, 0.60495, 0.14172, 0.51451, 0.24218, 0.55229, 0.32668, 0.67807, 0.37969, 0.79352, 0.53505, 0.93015, 0.86057, 1, 0.94071, 0.94169, 0.92099, 0.69924, 0.9888, 0.65498, 0.99003, 0.51643, 0.89633, 0.43562, 0.94487, 0.41917, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80755, 0.16045, 0.66699, 0.01998, 0.4734, 0.01806, 0.29215, 0.19893, 0.25393, 0.31824, 0.09117, 0.32401, 0, 0.44331, 0.43271, 0.69154, 0.46601, 0.47795, 0.35997, 0.31246, 0.73474, 0.68594, 0.72216, 0.57426, 0.8818, 0.5583, 0.80268, 0.51016 ],
-				"triangles": [ 5, 27, 6, 7, 27, 8, 7, 6, 27, 4, 24, 5, 5, 24, 27, 4, 3, 24, 27, 29, 8, 8, 29, 9, 24, 28, 27, 24, 25, 28, 24, 3, 25, 29, 28, 30, 29, 27, 28, 25, 2, 26, 25, 3, 2, 9, 29, 10, 0, 23, 1, 28, 25, 30, 29, 11, 10, 29, 30, 11, 2, 21, 26, 2, 1, 21, 23, 22, 1, 1, 22, 21, 30, 16, 11, 30, 17, 16, 30, 25, 17, 17, 26, 18, 18, 26, 19, 26, 17, 25, 11, 15, 12, 11, 16, 15, 12, 15, 13, 15, 14, 13, 21, 20, 26, 26, 20, 19 ],
-				"vertices": [ 14.56, 50.42, 23.12, 35.48, 17.47, 26.36, 11.58, 16.87, 3.75, 11.71, -5.9, -3.92, -11.83, -37.24, -8.32, -45.64, 7.75, -44.24, 10.4, -51.34, 19.53, -51.83, 25.21, -43.16, 26.13, -47.43, 27.36, -53.16, 34.84, -53.46, 35.97, -47.34, 37.11, -41.09, 43.75, -33.98, 53.59, -19.88, 54.51, 0.04, 43.32, 19.17, 35.61, 23.41, 35.89, 40.18, 28.4, 49.87, 10.26, 5.99, 24.21, 2, 35.55, 12.48, 9.39, -25.11, 16.8, -24.31, 17.21, -40.66, 20.69, -33.02 ],
-				"hull": 24,
-				"edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ],
-				"width": 103,
-				"height": 66
-			}
-		},
-		"left-arm": {
-			"left-arm": {
-				"name": "goblin/left-arm",
-				"type": "mesh",
-				"uvs": [ 0.68993, 0.29284, 1, 0.46364, 1, 0.74644, 0.8409, 1, 0.66344, 1, 0.33766, 0.64284, 0, 0.44124, 0, 0, 0.34296, 0 ],
-				"triangles": [ 3, 4, 2, 4, 5, 2, 5, 0, 2, 0, 1, 2, 0, 5, 8, 5, 6, 8, 6, 7, 8 ],
-				"vertices": [ 18.6, 8.81, 32.2, 10.32, 38.02, 1.63, 38.08, -9.63, 32.32, -13.5, 14.37, -9.62, -0.76, -10.78, -9.85, 2.78, 1.29, 10.25 ],
-				"hull": 9,
-				"edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ],
-				"width": 37,
-				"height": 35
-			}
-		},
-		"left-foot": {
-			"left-foot": {
-				"name": "goblin/left-foot",
-				"type": "mesh",
-				"uvs": [ 0.15734, 0.31874, 0.08195, 0.78503, 0.15884, 0.99367, 0.41633, 0.96805, 0.68823, 0.97637, 1, 0.96388, 0.99386, 0.73501, 0.85295, 0.51863, 0.61479, 0.31056, 0.46992, 0, 0.48033, 0.75604, 0.75995, 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.77, -1.64, 3.6, -7.81, 20.26, -6.04, 37.92, -5.28, 58.13, -3.71, 57.32, 3.35, 47.78, 9.51, 31.95, 15.05, 21.99, 24.12, 24.03, 0.76, 42.21, 1.16 ],
-				"hull": 10,
-				"edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ],
-				"width": 65,
-				"height": 31
-			}
-		},
-		"left-hand": {
-			"left-hand": {
-				"name": "goblin/left-hand",
-				"type": "mesh",
-				"uvs": [ 0.51801, 0.12578, 1, 0.16286, 0.99789, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42793, 0.17601, 0, 0.43568, 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.43, 10.84, 22.27, 15.5, 14.56, 18.36, -8.96, 9.48, -14.33, -4.59, -14.3, -11.64, -2.64, -14.89, 13.68, -7.76, 18 ],
-				"hull": 9,
-				"edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ],
-				"width": 36,
-				"height": 41
-			}
-		},
-		"left-lower-leg": {
-			"left-lower-leg": {
-				"name": "goblin/left-lower-leg",
-				"type": "mesh",
-				"uvs": [ 0.95509, 0.2075, 0.81927, 0.65214, 0.94754, 0.77308, 0.67842, 0.97347, 0.46464, 1, 0.26845, 1, 0.04964, 0.90707, 0.21061, 0.60115, 0.07479, 0.40195, 0.18545, 0, 0.28858, 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.2, 6.82, 30.97, 10.96, 37.97, 17.34, 53.88, 12.6, 57.59, 6.32, 59.35, 0.09, 55.05, -8.63, 33, -9.34, 20.8, -17.44, -7.28, -21.57, -8.2, -18.29 ],
-				"hull": 11,
-				"edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ],
-				"width": 33,
-				"height": 70
-			}
-		},
-		"left-shoulder": {
-			"left-shoulder": {
-				"name": "goblin/left-shoulder",
-				"type": "mesh",
-				"uvs": [ 0.7377, 0.40692, 1, 0.75238, 1, 1, 0.62046, 1, 0.26184, 0.56602, 0, 0.29783, 0, 0, 0.44115, 0 ],
-				"triangles": [ 3, 1, 2, 3, 0, 1, 3, 4, 0, 4, 7, 0, 4, 5, 7, 5, 6, 7 ],
-				"vertices": [ 15.18, 5.74, 32.17, 5.33, 41.79, 0.22, 36.63, -9.5, 14.89, -9.73, 0.9, -10.9, -10.67, -4.75, -4.67, 6.55 ],
-				"hull": 8,
-				"edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ],
-				"width": 29,
-				"height": 44
-			}
-		},
-		"left-upper-leg": {
-			"left-upper-leg": {
-				"name": "goblin/left-upper-leg",
-				"type": "mesh",
-				"uvs": [ 1, 0.12168, 1, 0.54873, 0.91067, 0.78907, 0.76568, 1, 0.30871, 0.95791, 0, 0.68777, 0, 0.21901, 0.51962, 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.34, 13.07, 33.51, 12.57, 51, 9.34, 66.32, 4.31, 63.01, -10.71, 43.13, -20.59, 8.91, -20.04, -6.8, -2.64, -6.61, 9.1 ],
-				"hull": 9,
-				"edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ],
-				"width": 33,
-				"height": 73
-			}
-		},
-		"neck": {
-			"neck": {
-				"name": "goblin/neck",
-				"type": "mesh",
-				"uvs": [ 0.81968, 0.27365, 0.92101, 0.82048, 0.47135, 1, 0.15679, 0.93541, 0, 0.7556, 0.19268, 0.51834, 0.15468, 0.35707, 0, 0.2199, 0.13568, 0, 0.68879, 0, 0.70146, 0.53873 ],
-				"triangles": [ 3, 5, 2, 2, 10, 1, 2, 5, 10, 3, 4, 5, 10, 0, 1, 0, 10, 6, 10, 5, 6, 7, 8, 6, 6, 9, 0, 6, 8, 9 ],
-				"vertices": [ 18.63, -11.66, -3.98, -13.86, -10.29, 2.77, -6.92, 13.9, 0.8, 19.06, 10.06, 11.51, 16.75, 12.45, 22.72, 17.65, 31.4, 12.2, 30.12, -7.68, 8.05, -6.71 ],
-				"hull": 10,
-				"edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ],
-				"width": 36,
-				"height": 41
-			}
-		},
-		"pelvis": {
-			"pelvis": {
-				"name": "goblin/pelvis",
-				"type": "mesh",
-				"uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ],
-				"triangles": [ 1, 2, 3, 1, 3, 0 ],
-				"vertices": [ 25.38, -20.73, -36.62, -20.73, -36.62, 22.27, 25.38, 22.27 ],
-				"hull": 4,
-				"edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ],
-				"width": 62,
-				"height": 43
-			}
-		},
-		"right-arm": {
-			"right-arm": {
-				"name": "goblin/right-arm",
-				"type": "mesh",
-				"uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24385, 1, 0, 0.86559, 0.20823, 0.1092, 0.50903, 0, 0.85342, 0 ],
-				"triangles": [ 1, 2, 6, 6, 2, 5, 1, 6, 0, 4, 5, 3, 2, 3, 5, 6, 7, 0 ],
-				"vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.9, 41.82, -5.03, 35.54, -11.13, -2.54, -9.2, -8.5, -2.72, -9.1, 5.18 ],
-				"hull": 8,
-				"edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ],
-				"width": 23,
-				"height": 50
-			}
-		},
-		"right-foot": {
-			"right-foot": {
-				"name": "goblin/right-foot",
-				"type": "mesh",
-				"uvs": [ 0.40851, 0.00471, 0.59088, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97533, 0.89392, 0.90386, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65985, 0, 0.46578, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71258, 0.71501, 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, 26, 29.14, 15.44, 39.89, 10.81, 48.15, 7.25, 53.84, -2.38, 49.43, -6, 34.85, -6.39, 16.84, -6.87, -2.4, -7.38, -7.59, -3.87, -7.79, 3.7, -7.96, 10.1, -2.57, 22.36, 10.84, 25.98, 22.15, 2.76, 37.32, 2.03 ],
-				"hull": 14,
-				"edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ],
-				"width": 63,
-				"height": 33
-			}
-		},
-		"right-hand": {
-			"right-hand": {
-				"name": "goblin/right-hand",
-				"type": "mesh",
-				"uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89824, 0.82005, 0.8259, 0.74286, 0.84224, 0.49994, 0.96357, 0.34102, 0.66024, 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.83, -9.45, 5.95, -15.35, 18.88, -14.9, 24.01, -7.5, 25.69, 5.16, 25.32, 16.08, 18.61, 17.44, 15.85, 14.74, 6.84, 15.02, 0.82, 19.19, -11.42, 7.84 ],
-				"hull": 11,
-				"edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ],
-				"width": 36,
-				"height": 37
-			}
-		},
-		"right-hand-thumb": {
-			"right-hand-thumb": {
-				"name": "goblin/right-hand",
-				"type": "mesh",
-				"uvs": [ 0.88538, 0.22263, 0.76168, 0.3594, 0.75089, 0.78308, 0.95326, 0.84981, 1, 0.60303 ],
-				"triangles": [ 1, 0, 4, 2, 1, 4, 3, 2, 4 ],
-				"vertices": [ -2.82, 15.98, 2.4, 11.72, 18.08, 11.91, 20.28, 19.28, 11.09, 20.62 ],
-				"hull": 5,
-				"edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ],
-				"width": 36,
-				"height": 37
-			}
-		},
-		"right-lower-leg": {
-			"right-lower-leg": {
-				"name": "goblin/right-lower-leg",
-				"type": "mesh",
-				"uvs": [ 1, 0.27261, 0.81312, 0.52593, 0.79587, 0.71796, 0.95544, 0.80989, 0.85194, 0.95493, 0.47242, 1, 0.14034, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30326, 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.27, 8.46, 23.32, 8.05, 37.1, 12.9, 41.45, 20.83, 53.07, 21.47, 61.33, 10.06, 65.78, -1.04, 59, -9.19, 43.02, -9.82, 16.33, -20.01, -12.8, -9.26 ],
-				"hull": 11,
-				"edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ],
-				"width": 36,
-				"height": 76
-			}
-		},
-		"right-shoulder": {
-			"right-shoulder": {
-				"name": "goblin/right-shoulder",
-				"type": "mesh",
-				"uvs": [ 0.62008, 0.03709, 0.92131, 0.09049, 1, 0.3832, 0.72049, 0.69371, 0.31657, 1, 0, 1, 0, 0.75106, 0.28234, 0.49989 ],
-				"triangles": [ 4, 6, 7, 4, 7, 3, 4, 5, 6, 7, 0, 3, 2, 0, 1, 2, 3, 0 ],
-				"vertices": [ -3.17, -11.05, -9, -0.58, -1.01, 10.34, 16.69, 11.17, 37.41, 8.2, 45.46, -1.16, 36.96, -8.46, 21.21, -7.48 ],
-				"hull": 8,
-				"edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ],
-				"width": 39,
-				"height": 45
-			}
-		},
-		"right-upper-leg": {
-			"right-upper-leg": {
-				"name": "goblin/right-upper-leg",
-				"type": "mesh",
-				"uvs": [ 0.27019, 0, 0.11619, 0.18177, 0, 0.70688, 0, 0.89577, 0.26669, 1, 0.48719, 1, 0.67619, 0.83533, 1, 0.5161, 1, 0.25544, 0.74619, 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.86, -10.37, 2.18, -14.07, 35.49, -13.67, 47.29, -12.11, 52.62, -2.27, 51.64, 5.17, 40.51, 10.18, 19.14, 18.47, 2.85, 16.33, -8.41, 6.14 ],
-				"hull": 10,
-				"edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ],
-				"width": 34,
-				"height": 63
-			}
-		},
-		"torso": {
-			"torso": {
-				"name": "goblin/torso",
-				"type": "mesh",
-				"uvs": [ 0, 0.33288, 0.15946, 0.46489, 0.15762, 0.60314, 0.15502, 0.79806, 0.32808, 0.93479, 0.68751, 1, 0.80732, 1, 1, 0.77763, 1, 0.66148, 1, 0.56704, 0.93208, 0.4771, 0.86944, 0.39417, 0.83838, 0.22601, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78735, 0.8625, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38317, 0.77692, 0.73447, 0.66479, 0.51012 ],
-				"triangles": [ 5, 16, 6, 6, 16, 7, 4, 17, 5, 5, 17, 16, 4, 3, 17, 17, 21, 16, 16, 21, 7, 3, 2, 17, 21, 19, 18, 21, 17, 19, 17, 2, 19, 21, 8, 7, 21, 18, 8, 18, 9, 8, 19, 22, 18, 18, 10, 9, 18, 22, 10, 2, 1, 19, 19, 20, 22, 19, 1, 20, 22, 11, 10, 22, 20, 11, 20, 1, 14, 20, 12, 11, 1, 0, 14, 20, 13, 12, 20, 14, 13, 0, 15, 14 ],
-				"vertices": [ 56.93, 27.95, 43.37, 18.24, 30.16, 19.5, 11.53, 21.29, -2.55, 10.69, -10.89, -13.12, -11.59, -21.24, 8.55, -36.13, 19.66, -37.09, 28.69, -37.86, 37.69, -34.01, 45.99, -30.45, 56.4, -29.07, 84.79, -20.92, 87.9, 15.15, 81.89, 25.8, 1.67, -21.02, 10.04, 2.19, 25.23, -18.25, 29.99, 0.01, 48.54, -8.4, 13.98, -21.37, 35.91, -15.6 ],
-				"hull": 16,
-				"edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ],
-				"width": 68,
-				"height": 96
-			}
-		},
-		"undie-straps": {
-			"undie-straps": {
-				"name": "goblin/undie-straps",
-				"type": "mesh",
-				"uvs": [ 0.36098, 0.4496, 0.66298, 0.60591, 1, 0.19486, 1, 0.57118, 0.75898, 1, 0.38698, 1, 0, 0.26433, 0, 0, 0.12498, 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.88, 6.54, 9.91, 25.62, 17.72, 25.62, 10.57, 11.97, 2.42, -9.09, 2.42, -31, 16.4, -31, 21.42, -23.93, 21.42 ],
-				"hull": 9,
-				"edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ],
-				"width": 55,
-				"height": 19
-			}
-		},
-		"undies": {
-			"undies": {
-				"name": "goblin/undies",
-				"type": "mesh",
-				"uvs": [ 0, 0.3203, 0.14893, 0.59457, 0.22438, 1, 0.3591, 1, 0.50999, 1, 0.7956, 0.58454, 0.98421, 0.28016, 1, 0.00588, 0.46957, 0.17647, 0, 0.03933, 0.48843, 0.59123, 0.48115, 0.431 ],
-				"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.57, -8, -2.48, -5.49, -14.28, -0.64, -14.36, 4.79, -14.46, 15.28, -2.59, 22.22, 6.12, 22.93, 14.06, 3.75, 9.45, -13.08, 13.72, 4.22, -2.59, 4.04, 2.06 ],
-				"hull": 10,
-				"edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ],
-				"width": 36,
-				"height": 29
-			}
-		}
-	},
-	"goblingirl": {
-		"eyes": {
-			"eyes-closed": { "name": "goblingirl/eyes-closed", "x": 28, "y": -25.55, "rotation": -87.05, "width": 37, "height": 21 }
-		},
-		"head": {
-			"head": { "name": "goblingirl/head", "x": 27.72, "y": -4.32, "rotation": -85.58, "width": 103, "height": 81 }
-		},
-		"left-arm": {
-			"left-arm": { "name": "goblingirl/left-arm", "x": 19.64, "y": -2.43, "rotation": 33.05, "width": 37, "height": 35 }
-		},
-		"left-foot": {
-			"left-foot": { "name": "goblingirl/left-foot", "type": "linkedmesh", "skin": "goblin", "parent": "left-foot", "width": 65, "height": 31 }
-		},
-		"left-hand": {
-			"left-hand": {
-				"name": "goblingirl/left-hand",
-				"x": 4.34,
-				"y": 2.39,
-				"scaleX": 0.896,
-				"scaleY": 0.896,
-				"rotation": 30.35,
-				"width": 35,
-				"height": 40
-			}
-		},
-		"left-lower-leg": {
-			"left-lower-leg": { "name": "goblingirl/left-lower-leg", "x": 25.02, "y": -0.61, "rotation": 105.76, "width": 33, "height": 70 }
-		},
-		"left-shoulder": {
-			"left-shoulder": { "name": "goblingirl/left-shoulder", "x": 19.81, "y": -0.43, "rotation": 61.22, "width": 28, "height": 46 }
-		},
-		"left-upper-leg": {
-			"left-upper-leg": { "name": "goblingirl/left-upper-leg", "x": 30.22, "y": -2.95, "rotation": 89.1, "width": 33, "height": 70 }
-		},
-		"neck": {
-			"neck": { "name": "goblingirl/neck", "x": 6.16, "y": -3.15, "rotation": -98.86, "width": 35, "height": 41 }
-		},
-		"pelvis": {
-			"pelvis": { "name": "goblingirl/pelvis", "x": -3.88, "y": 3.19, "width": 62, "height": 43 }
-		},
-		"right-arm": {
-			"right-arm": { "name": "goblingirl/right-arm", "x": 16.85, "y": -0.66, "rotation": 93.53, "width": 28, "height": 50 }
-		},
-		"right-foot": {
-			"right-foot": { "name": "goblingirl/right-foot", "type": "linkedmesh", "skin": "goblin", "parent": "right-foot", "width": 63, "height": 33 }
-		},
-		"right-hand": {
-			"right-hand": { "name": "goblingirl/right-hand", "x": 7.22, "y": 3.44, "rotation": 91.17, "width": 36, "height": 37 }
-		},
-		"right-hand-thumb": {
-			"right-hand-thumb": { "name": "goblingirl/right-hand", "x": 7.22, "y": 3.44, "rotation": 91.17, "width": 36, "height": 37 }
-		},
-		"right-lower-leg": {
-			"right-lower-leg": { "name": "goblingirl/right-lower-leg", "x": 26.15, "y": -3.28, "rotation": 111.84, "width": 36, "height": 76 }
-		},
-		"right-shoulder": {
-			"right-shoulder": { "name": "goblingirl/right-shoulder", "x": 14.46, "y": 0.46, "rotation": 129.85, "width": 39, "height": 45 }
-		},
-		"right-upper-leg": {
-			"right-upper-leg": { "name": "goblingirl/right-upper-leg", "x": 19.7, "y": 2.13, "rotation": 97.5, "width": 34, "height": 63 }
-		},
-		"torso": {
-			"torso": { "name": "goblingirl/torso", "x": 36.28, "y": -5.14, "rotation": -95.75, "width": 68, "height": 96 }
-		},
-		"undie-straps": {
-			"undie-straps": { "name": "goblingirl/undie-straps", "x": -1.52, "y": 14.19, "width": 55, "height": 19 }
-		},
-		"undies": {
-			"undies": { "name": "goblingirl/undies", "x": 5.4, "y": 1.71, "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.56 },
-					{ "time": 0.1333, "angle": -8.79 },
-					{ "time": 0.2333, "angle": 9.51 },
-					{ "time": 0.3667, "angle": 30.74 },
-					{ "time": 0.5, "angle": 25.34 },
-					{ "time": 0.6333, "angle": 26.12 },
-					{ "time": 0.7333, "angle": 7.45 },
-					{ "time": 0.8667, "angle": -21.19 },
-					{ "time": 1, "angle": -26.56 }
-				],
-				"translate": [
-					{ "time": 0, "x": -1.32, "y": 1.71 },
-					{ "time": 0.3667, "x": -0.06, "y": 2.43 },
-					{ "time": 1, "x": -1.32, "y": 1.71 }
-				]
-			},
-			"right-upper-leg": {
-				"rotate": [
-					{ "time": 0, "angle": 42.45 },
-					{
-						"time": 0.1333,
-						"angle": 49.86,
-						"curve": [ 0.414, 0, 0.706, 0.99 ]
-					},
-					{ "time": 0.2333, "angle": 22.51 },
-					{ "time": 0.5, "angle": -16.94 },
-					{ "time": 0.6333, "angle": 1.9 },
-					{
-						"time": 0.7333,
-						"angle": 34.87,
-						"curve": [ 0.463, 0.12, 1, 1 ]
-					},
-					{
-						"time": 0.8667,
-						"angle": 58.69,
-						"curve": [ 0.5, 0.02, 1, 1 ]
-					},
-					{ "time": 1, "angle": 42.45 }
-				],
-				"translate": [
-					{ "time": 0, "x": 6.24, "y": 0 },
-					{ "time": 0.2333, "x": 2.14, "y": 2.4 },
-					{ "time": 0.5, "x": 2.44, "y": 4.8 },
-					{ "time": 1, "x": 6.24, "y": 0 }
-				]
-			},
-			"left-lower-leg": {
-				"rotate": [
-					{ "time": 0, "angle": -18.05 },
-					{ "time": 0.1333, "angle": -63.51 },
-					{ "time": 0.2333, "angle": -83.02 },
-					{ "time": 0.5, "angle": 5.12 },
-					{ "time": 0.6333, "angle": -28.3 },
-					{ "time": 0.7333, "angle": -27.52 },
-					{ "time": 0.8667, "angle": 3.53 },
-					{ "time": 1, "angle": -18.05 }
-				],
-				"translate": [
-					{ "time": 0, "x": 0, "y": 0 },
-					{ "time": 0.2333, "x": 2.56, "y": -0.47 },
-					{ "time": 0.5, "x": 0, "y": 0 }
-				]
-			},
-			"left-foot": {
-				"rotate": [
-					{ "time": 0, "angle": -14.57 },
-					{ "time": 0.1333, "angle": -10.42 },
-					{ "time": 0.2333, "angle": -5.01 },
-					{ "time": 0.3, "angle": 6.67 },
-					{ "time": 0.3667, "angle": 3.87 },
-					{ "time": 0.5, "angle": -3.88 },
-					{ "time": 0.6333, "angle": 2.78 },
-					{ "time": 0.7333, "angle": -12 },
-					{ "time": 0.8667, "angle": -12.45 },
-					{ "time": 1, "angle": -14.57 }
-				]
-			},
-			"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.03,
-						"curve": [ 0.267, 0.01, 0.805, 0.99 ]
-					},
-					{
-						"time": 0.6333,
-						"angle": 19.79,
-						"curve": [ 0.307, 0, 0.787, 0.99 ]
-					},
-					{ "time": 1, "angle": -4.03 }
-				]
-			},
-			"right-hand": {
-				"rotate": [
-					{ "time": 0, "angle": 8.99 },
-					{ "time": 0.6333, "angle": 0.51 },
-					{ "time": 1, "angle": 8.99 }
-				]
-			},
-			"left-shoulder": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 6.26,
-						"curve": [ 0.339, 0, 0.684, 1 ]
-					},
-					{
-						"time": 0.5,
-						"angle": -11.79,
-						"curve": [ 0.282, 0, 0.687, 0.99 ]
-					},
-					{ "time": 1, "angle": 6.26 }
-				],
-				"translate": [
-					{ "time": 0, "x": 1.15, "y": 0.24 }
-				]
-			},
-			"left-hand": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": -21.24,
-						"curve": [ 0.296, 0, 0.756, 0.99 ]
-					},
-					{
-						"time": 0.5,
-						"angle": -27.28,
-						"curve": [ 0.241, 0, 0.75, 0.97 ]
-					},
-					{ "time": 1, "angle": -21.24 }
-				]
-			},
-			"left-arm": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 28.38,
-						"curve": [ 0.339, 0, 0.684, 1 ]
-					},
-					{
-						"time": 0.5,
-						"angle": 60.09,
-						"curve": [ 0.282, 0, 0.687, 0.99 ]
-					},
-					{ "time": 1, "angle": 28.38 }
-				]
-			},
-			"torso": {
-				"rotate": [
-					{ "time": 0, "angle": -10.28 },
-					{
-						"time": 0.1333,
-						"angle": -15.39,
-						"curve": [ 0.546, 0.01, 0.819, 1 ]
-					},
-					{
-						"time": 0.3667,
-						"angle": -9.78,
-						"curve": [ 0.58, 0.17, 0.67, 0.99 ]
-					},
-					{
-						"time": 0.6333,
-						"angle": -15.75,
-						"curve": [ 0.236, 0.01, 0.796, 1 ]
-					},
-					{
-						"time": 0.8667,
-						"angle": -7.07,
-						"curve": [ 0.21, 0, 0.816, 0.99 ]
-					},
-					{ "time": 1, "angle": -10.28 }
-				]
-			},
-			"right-foot": {
-				"rotate": [
-					{ "time": 0, "angle": -5.25 },
-					{ "time": 0.2333, "angle": -17.77 },
-					{ "time": 0.3667, "angle": -20.1 },
-					{ "time": 0.5, "angle": -19.74 },
-					{ "time": 0.7333, "angle": -11.69 },
-					{ "time": 0.8, "angle": 4.47 },
-					{ "time": 0.8667, "angle": 0.46 },
-					{ "time": 1, "angle": -5.25 }
-				]
-			},
-			"right-lower-leg": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": -3.39,
-						"curve": [ 0.316, 0.02, 0.741, 0.99 ]
-					},
-					{
-						"time": 0.1333,
-						"angle": -43.22,
-						"curve": [ 0.414, 0, 0.706, 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.5, "x": 0, "y": 0 },
-					{ "time": 0.6333, "x": 2.19, "y": 0.21 },
-					{ "time": 1, "x": 0, "y": 0 }
-				]
-			},
-			"hip": {
-				"translate": [
-					{ "time": 0, "x": 0, "y": -8.4 },
-					{
-						"time": 0.1333,
-						"x": 0,
-						"y": -9.35,
-						"curve": [ 0.327, 0.05, 0.675, 0.94 ]
-					},
-					{
-						"time": 0.2333,
-						"x": 0,
-						"y": -0.59,
-						"curve": [ 0.326, 0.39, 0.644, 0.7 ]
-					},
-					{ "time": 0.3667, "x": 0, "y": -3.97 },
-					{ "time": 0.5, "x": 0, "y": -8.4 },
-					{
-						"time": 0.6333,
-						"x": 0,
-						"y": -10.01,
-						"curve": [ 0.359, 0.47, 0.647, 0.75 ]
-					},
-					{
-						"time": 0.7333,
-						"x": 0,
-						"y": -5.3,
-						"curve": [ 0.333, 0.37, 0.663, 0.69 ]
-					},
-					{
-						"time": 0.8,
-						"x": 0,
-						"y": -2.5,
-						"curve": [ 0.322, 0.35, 0.652, 0.68 ]
-					},
-					{ "time": 0.8667, "x": 0, "y": -3.97 },
-					{ "time": 1, "x": 0, "y": -8.4 }
-				]
-			},
-			"neck": {
-				"rotate": [
-					{ "time": 0, "angle": 3.6 },
-					{ "time": 0.1333, "angle": 17.5 },
-					{ "time": 0.2333, "angle": 6.11 },
-					{ "time": 0.3667, "angle": 3.46 },
-					{ "time": 0.5, "angle": 5.18 },
-					{ "time": 0.6333, "angle": 18.36 },
-					{ "time": 0.7333, "angle": 6.09 },
-					{ "time": 0.8667, "angle": 2.29 },
-					{ "time": 1, "angle": 3.6 }
-				]
-			},
-			"head": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 3.6,
-						"curve": [ 0, 0, 0.704, 1.18 ]
-					},
-					{ "time": 0.1333, "angle": -0.21 },
-					{ "time": 0.2333, "angle": 6.11 },
-					{ "time": 0.3667, "angle": 3.46 },
-					{
-						"time": 0.5,
-						"angle": 5.18,
-						"curve": [ 0, 0, 0.704, 1.62 ]
-					},
-					{ "time": 0.6667, "angle": 1.11 },
-					{ "time": 0.7333, "angle": 6.09 },
-					{ "time": 0.8667, "angle": 2.29 },
-					{ "time": 1, "angle": 3.6 }
-				]
-			},
-			"pelvis": {
-				"rotate": [
-					{ "time": 0, "angle": -1.34 }
-				],
-				"translate": [
-					{ "time": 0, "x": 0.39, "y": -0.78 }
-				]
-			},
-			"spear1": {
-				"rotate": [
-					{ "time": 0, "angle": 1.85 },
-					{ "time": 0.2, "angle": -5.39 },
-					{ "time": 0.5, "angle": 2.95 },
-					{ "time": 0.7333, "angle": -3.67 },
-					{ "time": 1, "angle": 1.85 }
-				]
-			},
-			"spear2": {
-				"rotate": [
-					{ "time": 0, "angle": 1.85 },
-					{ "time": 0.2, "angle": -5.39 },
-					{ "time": 0.5, "angle": 2.95 },
-					{ "time": 0.7333, "angle": -3.67 },
-					{ "time": 1, "angle": 1.85 }
-				]
-			},
-			"spear3": {
-				"rotate": [
-					{ "time": 0, "angle": 3.64 },
-					{ "time": 0.2, "angle": -3.6 },
-					{ "time": 0.5, "angle": 4.74 },
-					{ "time": 0.7333, "angle": -1.88 },
-					{ "time": 1, "angle": 3.64 }
-				]
-			}
-		},
-		"deform": {
-			"default": {
-				"right-hand-item": {
-					"dagger": [
-						{
-							"time": 0,
-							"offset": 26,
-							"vertices": [ 2.34755, 0.1447 ],
-							"curve": [ 0.25, 0, 0.75, 1 ]
-						},
-						{
-							"time": 0.5,
-							"offset": 8,
-							"vertices": [ -1.19415, 4.31532, 0.07279, 6.41351, 1.66048, 6.18883, 1.75233, 3.59555 ],
-							"curve": [ 0.25, 0, 0.75, 1 ]
-						},
-						{
-							"time": 1,
-							"offset": 26,
-							"vertices": [ 2.34755, 0.1447 ]
-						}
-					]
-				}
-			},
-			"goblin": {
-				"head": {
-					"head": [
-						{
-							"time": 0,
-							"curve": [ 0.633, 0, 0.75, 1 ]
-						},
-						{
-							"time": 0.2,
-							"vertices": [ -10.97827, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08392, -1.08534, 0.08392, -1.08534, 0.08392, 0, 0, -2.22325, 2.66465, -4.83295, 2.70085, -5.70553, -0.51941, -3.15962, -1.61502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64742, 0.81612, -11.82286, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08534, 0.08392 ],
-							"curve": [ 0.25, 0, 0.75, 1 ]
-						},
-						{
-							"time": 0.3667,
-							"vertices": [ 10.69276, 4.05949, 3.66373, 1.85427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09018, 1.47305, 0.09018, 1.47305, 0.09018, 0, 0, 2.69653, -0.22738, 3.77135, 0.11418, 3.6893, 1.55352, 2.49595, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45881, -3.9113, 9.19594, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47305, 0.09018 ],
-							"curve": [ 0.621, 0, 0.75, 1 ]
-						},
-						{
-							"time": 0.7,
-							"vertices": [ -10.97827, -6.68962, -4.68015, -2.46175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17551, -0.17183, -1.17551, -0.17183, -1.17551, -0.17183, 0, 0, -2.22325, 2.66465, -4.83295, 2.70085, -5.70553, -0.51941, -3.15962, -1.61502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64742, 0.81612, -11.82286, -1.34955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17551, -0.17183 ],
-							"curve": [ 0.25, 0, 0.75, 1 ]
-						},
-						{
-							"time": 0.8667,
-							"vertices": [ 10.69276, 4.05949, 3.66373, 1.85427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446, 0.38687, 0.08446, 0.38687, 0.08446, 0, 0, 2.69653, -0.22738, 3.77135, 0.11418, 3.6893, 1.55352, 2.49595, 1.65501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45881, -3.9113, 9.19594, -1.66854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38687, 0.08446 ],
-							"curve": [ 0.25, 0, 0.75, 1 ]
-						},
-						{ "time": 1 }
-					]
-				},
-				"left-foot": {
-					"left-foot": [
-						{
-							"time": 0,
-							"offset": 8,
-							"vertices": [ 3.69298, 2.37573, -7.16969, 18.79733, -12.78162, 14.7778, -12.75776, 6.50514, -3.13476, 1.98906, -0.44402, 0.36629, 0, 0, -3.80085, 2.98474 ]
-						},
-						{ "time": 0.1333 },
-						{
-							"time": 0.2333,
-							"offset": 8,
-							"vertices": [ -3.96073, -2.34594, -5.80446, -12.47629, -2.2313, -12.99038, 2.02942, -9.1036, 0, 0, 0, 0, 0, 0, -1.35254, -5.2883 ]
-						},
-						{
-							"time": 0.3667,
-							"offset": 8,
-							"vertices": [ 0.66505, 0.33548, 0.33902, 2.69014, -0.48171, 2.54524, -1.13593, 1.38562, 0, 0, 0, 0, 0, 0, -0.11908, 0.79273 ]
-						},
-						{ "time": 0.5, "curve": "stepped" },
-						{ "time": 0.6333 },
-						{
-							"time": 0.7333,
-							"offset": 8,
-							"vertices": [ -2.97738, 9.40254, -6.91661, 19.92794, -10.55287, 18.41085, -12.37161, 12.38473, -4.72607, 6.30799, 0, 0, -1.48902, 4.88944, -7.06773, 10.70102 ]
-						},
-						{
-							"time": 0.8333,
-							"offset": 6,
-							"vertices": [ 1.05319, 1.56362, -2.52723, 7.9974, -5.52031, 17.14137, -8.93317, 15.79635, -10.73748, 10.22056, -4.23801, 5.36992, 0, 0, 0, 0, -5.83148, 8.55532 ]
-						},
-						{
-							"time": 1,
-							"offset": 8,
-							"vertices": [ 3.69298, 2.37573, -7.16969, 18.79733, -12.78162, 14.7778, -12.75776, 6.50514, -3.13476, 1.98906, -0.44402, 0.36629, 0, 0, -3.80085, 2.98474 ]
-						}
-					]
-				},
-				"pelvis": {
-					"pelvis": [
-						{ "time": 0 },
-						{
-							"time": 0.1333,
-							"offset": 6,
-							"vertices": [ -0.6899, -4.13284 ]
-						},
-						{
-							"time": 0.3333,
-							"offset": 6,
-							"vertices": [ -1.04945, -3.10477 ]
-						},
-						{
-							"time": 0.7,
-							"offset": 6,
-							"vertices": [ -1.4245, -6.30617 ]
-						},
-						{
-							"time": 0.8667,
-							"offset": 6,
-							"vertices": [ -1.13542, -1.79036 ]
-						},
-						{ "time": 1 }
-					]
-				},
-				"right-foot": {
-					"right-foot": [
-						{ "time": 0 },
-						{
-							"time": 0.1333,
-							"offset": 2,
-							"vertices": [ -2.81259, 2.63115, -2.35238, 3.89441, -1.99921, 4.8639, -0.93273, 5.57982, -0.48886, 5.09855, -0.34813, 3.42912, -0.17446, 1.36899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31305, 1.91372, -1.32986, 3.65703 ]
-						},
-						{
-							"time": 0.2333,
-							"offset": 2,
-							"vertices": [ -6.39088, 6.41246, -7.74575, 8.27192, -7.02471, 11.35894, -4.03471, 13.93454, -2.50399, 12.62963, -1.46125, 7.58915, -0.17446, 1.36899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84766, 2.61216, -4.53956, 7.92358 ]
-						},
-						{
-							"time": 0.3,
-							"offset": 2,
-							"vertices": [ -8.27185, 6.68822, -9.29764, 10.13797, -8.62231, 14.7134, -4.5863, 18.81939, -2.20304, 17.10709, -0.07795, 9.9046, 2.54452, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94625, 2.38008, -4.59399, 10.01888 ]
-						},
-						{
-							"time": 0.3667,
-							"offset": 2,
-							"vertices": [ -10.47684, 9.44176, -13.36883, 12.40983, -14.32569, 16.94392, -9.24463, 23.55674, -5.51712, 21.51378, -1.19582, 11.53193, 2.54452, 1.01642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14848, 2.29389, -6.63419, 11.37127 ]
-						},
-						{
-							"time": 0.5,
-							"offset": 2,
-							"vertices": [ -5.42474, 4.36854, -10.59004, 7.04468, -11.64251, 11.55845, -6.19665, 20.12806, -1.45498, 18.05411, 4.8662, 6.41679, 2.81463, 0.27601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96412, 4.9483 ]
-						},
-						{ "time": 0.6333 },
-						{
-							"time": 0.7333,
-							"offset": 4,
-							"vertices": [ 1.31462, -6.84099, -0.87905, -12.54479, -5.9851, -14.08368, -7.15892, -11.63194, -5.6792, -4.83545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06164, -6.93844 ]
-						},
-						{
-							"time": 0.8,
-							"offset": 4,
-							"vertices": [ 0.65731, -3.4205, -0.43953, -6.2724, -2.99255, -7.04184, -3.57946, -5.81597, -2.8396, -2.41772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79688, -1.28021, 0, 0, 0, 0, -1.03082, -3.46922 ]
-						},
-						{ "time": 0.8667 }
-					]
-				},
-				"right-hand": {
-					"right-hand": [
-						{
-							"time": 0,
-							"offset": 4,
-							"vertices": [ -1.48417, 0.34736, 0, 0, 1.31152, 0.08085, 1.60296, 0.09882, 0.13673, 0.15471, 0, 0, 0, 0, -0.72862, -0.0449 ]
-						},
-						{ "time": 0.5 },
-						{
-							"time": 1,
-							"offset": 4,
-							"vertices": [ -1.48417, 0.34736, 0, 0, 1.31152, 0.08085, 1.60296, 0.09882, 0.13673, 0.15471, 0, 0, 0, 0, -0.72862, -0.0449 ]
-						}
-					]
-				},
-				"right-lower-leg": {
-					"right-lower-leg": [
-						{ "time": 0 },
-						{
-							"time": 0.6,
-							"offset": 6,
-							"vertices": [ 1.80396, -1.56553 ]
-						},
-						{ "time": 1 }
-					]
-				},
-				"right-upper-leg": {
-					"right-upper-leg": [
-						{
-							"time": 0,
-							"vertices": [ -6.03857, -1.46325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34685, -1.93102, -1.86047, -5.05266, -2.5014, -3.09985 ]
-						},
-						{ "time": 0.3333 },
-						{
-							"time": 0.8667,
-							"offset": 14,
-							"vertices": [ 0.13425, -2.35378, -1.33318, -5.99573, -1.35862, -4.43324 ]
-						},
-						{
-							"time": 1,
-							"vertices": [ -6.03857, -1.46325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34685, -1.93102, -1.86047, -5.05266, -2.5014, -3.09985 ]
-						}
-					]
-				},
-				"torso": {
-					"torso": [
-						{
-							"time": 0,
-							"offset": 2,
-							"vertices": [ 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, 0.24821, 2.86673, -1.24131, 2.62652, -2.47492, 0.71183, -0.26363, -0.5308, 0.24821, 2.86673, 0.24821, 2.86673, 0, 0, 0, 0, 0, 0, 0, 0, 1.34461, 0.25215, 0.24821, 2.86673, 0.82507, 1.61798, 0.24821, 2.86673, 0, 0, -1.86431, -0.4326, 0.24821, 2.86673 ]
-						},
-						{
-							"time": 0.1333,
-							"offset": 2,
-							"vertices": [ 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 0.35589, 4.10914, 1.66908, 3.51187, -0.62355, 2.47979, 1.1045, 3.49684, -1.09009, 6.08429, 0.35589, 4.10914, 0, 0, 0, 0, 0, 0, 0, 0, 3.01291, 0.15693, 0.35589, 4.10914, -1.11398, 3.7954, 0.35589, 4.10914, 0, 0, -2.96167, 0.55563, -2.20741, 4.40587 ]
-						},
-						{
-							"time": 0.3,
-							"offset": 2,
-							"vertices": [ 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 0.2884, 3.32948, 6.32601, 0.19387, 7.84315, 1.94837, 7.08587, 3.64119, 4.52343, 4.46961, 0.2884, 3.32948, 0, 0, 0, 0, 0, 0, 0, 0, 4.36416, -1.83876, 0.2884, 3.32948, 4.2925, 3.60194, 0.2884, 3.32948, 0, 0, 3.72601, -0.19338, 0.2884, 3.32948 ]
-						},
-						{
-							"time": 0.5,
-							"offset": 2,
-							"vertices": [ 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 0.3133, 3.61659, 2.57273, 2.74457, 2.88831, 3.04797, 3.48442, 3.04655, 1.80035, 4.609, 0.3133, 3.61659, 0, 0, 0, 0, 0, 0, 0, 0, 3.53782, -0.82203, 0.3133, 3.61659, 1.80022, 3.63246, 0.3133, 3.61659, 0, 0, 0.62718, 0.33564, -1.22467, 3.79463 ]
-						},
-						{
-							"time": 0.6333,
-							"offset": 2,
-							"vertices": [ 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 0.44398, 5.125, 1.19401, 3.60798, -0.53546, 3.49565, 1.1926, 4.5127, -1.002, 7.10015, 0.44398, 5.125, 0, 0, 0, 0, 0, 0, 0, 0, 3.101, 1.17278, 0.44398, 5.125, -1.02589, 4.81126, 0.44398, 5.125, 0, 0, -2.87358, 1.57149, -2.11931, 5.42173 ]
-						},
-						{
-							"time": 0.8667,
-							"offset": 2,
-							"vertices": [ 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.30385, 3.50647, 0.92587, 2.24385, 0.68874, 1.29945, 3.55433, 3.00604, 2.71494, 5.89962, 0.30385, 3.50647, 0, 0, 0, 0, 0, 0, 0, 0, 1.96775, 0.40548, 0.30385, 3.50647, 2.6104, 2.3545, 0.30385, 3.50647, 0, 0, 0.22709, -0.12851, -0.62826, 3.61437 ]
-						},
-						{
-							"time": 1,
-							"offset": 2,
-							"vertices": [ 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, 0.32802, 3.78826, -1.1615, 3.54805, -2.39511, 1.63336, -0.18382, 0.39073, 0.32802, 3.78826, 0.32802, 3.78826, 0, 0, 0, 0, 0, 0, 0, 0, 1.42442, 1.17368, 0.32802, 3.78826, 0.90488, 2.53951, 0.32802, 3.78826, 0, 0, -1.7845, 0.48894, 0.32802, 3.78826 ]
-						}
-					]
-				},
-				"undie-straps": {
-					"undie-straps": [
-						{
-							"time": 0,
-							"offset": 2,
-							"vertices": [ -1.77697, 0.5476, -0.96145, -1.03793, -0.39148, -0.24072, -1.77697, 0.5476 ]
-						},
-						{
-							"time": 0.1333,
-							"offset": 2,
-							"vertices": [ -2.25684, -1.03177, -1.49719, -4.23862, -0.7447, -2.84907, -1.90072, 0.54478 ]
-						},
-						{
-							"time": 0.3333,
-							"offset": 2,
-							"vertices": [ -2.37974, -0.05432, -0.49433, 0.19437, -0.90861, 1.16519, -1.60956, 2.70799, 0.96186, 0.80615 ]
-						},
-						{
-							"time": 0.7,
-							"offset": 2,
-							"vertices": [ -0.91715, -2.76567, -0.62215, -3.63489, -0.84941, -2.26772, -2.56077, 0.52971 ]
-						},
-						{
-							"time": 0.8667,
-							"offset": 2,
-							"vertices": [ -2.56077, 0.52971, -1.58065, 0.32031, -1.3847, 0.32476, -2.56077, 0.52971 ]
-						},
-						{
-							"time": 1,
-							"offset": 2,
-							"vertices": [ -1.77697, 0.5476, -0.80128, 0.53413, -0.80128, 0.53413, -1.77697, 0.5476 ]
-						}
-					]
-				},
-				"undies": {
-					"undies": [
-						{
-							"time": 0,
-							"vertices": [ 0.43099, 0.722, 10.60295, -0.117, 2.29599, 0, 2.29599, 0, 2.29599, 0, 0.58799, 0.244, -2.40018, -0.65335, -2.2782, -0.77534, 2.29599, 0, 0.58799, -0.488, 4.98698, -0.117, 6.50797, -0.23399 ]
-						},
-						{
-							"time": 0.1333,
-							"vertices": [ 0.72659, 0.4332, 7.20417, -0.1638, 1.37759, 0, 1.37759, 0, 1.37759, 0, 1.25279, 0.0464, -0.99862, -2.95085, -1.37543, -3.07404, 1.37759, 0, 0.35279, -0.2928, 2.99219, -0.0702, 3.90478, -0.1404 ]
-						},
-						{
-							"time": 0.3333,
-							"vertices": [ 1.16999, 0, 2.10599, -0.23401, 0, 0, 0, 0, 0, 0, 2.24999, -0.24999, -0.4344, 0.60551, -1.55939, 0.48051 ]
-						},
-						{
-							"time": 0.5333,
-							"vertices": [ 1.16999, 0, -0.234, -0.936, -2.92499, 0.351, 0, 0, 0, 0, 0.5, -0.24999, -0.64079, -2.07915, -0.64079, -2.07915 ]
-						},
-						{
-							"time": 0.7,
-							"vertices": [ 1.86271, -0.11514, 4.66327, -0.091, -1.76428, 0.21171, 0, 0, -0.56833, 0.32833, -1.13833, -1.15111, -2.19996, -3.47068, -1.29719, -3.47068, 0, 0, 0, 0, 1.58785, -0.04643, 2.65942, 0.16715 ]
-						},
-						{
-							"time": 0.8333,
-							"vertices": [ 2.41688, -0.20726, 8.58108, 0.585, -0.83571, 0.10029, 0, 0, -1.02299, 0.59099, -2.449, -1.872, -1.625, 0, 0, 0, 0, 0, 0, 0, 2.85813, -0.08357, 4.78695, 0.30086 ]
-						},
-						{
-							"time": 0.8667,
-							"vertices": [ 2.0197, -0.02141, 8.98546, 0.4446, -0.20937, 0.08023, 0.4592, 0, -0.3592, 0.47279, -1.8416, -1.4488, -0.79153, 1.26421, 0.53286, 1.23981, 0.4592, 0, 0.1176, -0.0976, 3.2839, -0.09025, 5.13116, 0.19389 ]
-						},
-						{
-							"time": 1,
-							"vertices": [ 0.43099, 0.722, 10.60295, -0.117, 2.29599, 0, 2.29599, 0, 2.29599, 0, 0.58799, 0.244, -2.40018, -0.65335, -2.2782, -0.77534, 2.29599, 0, 0.58799, -0.488, 4.98698, -0.117, 6.50797, -0.23399 ]
-						}
-					]
-				}
-			}
-		}
-	}
-}
-}

BIN
spine-sfml/data/goblins-pro.skel


+ 0 - 293
spine-sfml/data/goblins.atlas

@@ -1,293 +0,0 @@
-
-goblins.png
-size: 1024,128
-format: RGBA8888
-filter: Linear,Linear
-repeat: none
-dagger
-  rotate: true
-  xy: 372, 100
-  size: 26, 108
-  orig: 26, 108
-  offset: 0, 0
-  index: -1
-goblin/eyes-closed
-  rotate: false
-  xy: 2, 7
-  size: 34, 12
-  orig: 34, 12
-  offset: 0, 0
-  index: -1
-goblin/head
-  rotate: false
-  xy: 107, 36
-  size: 103, 66
-  orig: 103, 66
-  offset: 0, 0
-  index: -1
-goblin/left-arm
-  rotate: false
-  xy: 901, 56
-  size: 37, 35
-  orig: 37, 35
-  offset: 0, 0
-  index: -1
-goblin/left-foot
-  rotate: false
-  xy: 929, 95
-  size: 65, 31
-  orig: 65, 31
-  offset: 0, 0
-  index: -1
-goblin/left-hand
-  rotate: false
-  xy: 452, 2
-  size: 36, 41
-  orig: 36, 41
-  offset: 0, 0
-  index: -1
-goblin/left-lower-leg
-  rotate: true
-  xy: 713, 93
-  size: 33, 70
-  orig: 33, 70
-  offset: 0, 0
-  index: -1
-goblin/left-shoulder
-  rotate: false
-  xy: 610, 44
-  size: 29, 44
-  orig: 29, 44
-  offset: 0, 0
-  index: -1
-goblin/left-upper-leg
-  rotate: true
-  xy: 638, 93
-  size: 33, 73
-  orig: 33, 73
-  offset: 0, 0
-  index: -1
-goblin/neck
-  rotate: false
-  xy: 490, 2
-  size: 36, 41
-  orig: 36, 41
-  offset: 0, 0
-  index: -1
-goblin/pelvis
-  rotate: false
-  xy: 482, 45
-  size: 62, 43
-  orig: 62, 43
-  offset: 0, 0
-  index: -1
-goblin/right-arm
-  rotate: true
-  xy: 690, 2
-  size: 23, 50
-  orig: 23, 50
-  offset: 0, 0
-  index: -1
-goblin/right-foot
-  rotate: false
-  xy: 771, 58
-  size: 63, 33
-  orig: 63, 33
-  offset: 0, 0
-  index: -1
-goblin/right-hand
-  rotate: false
-  xy: 940, 56
-  size: 36, 37
-  orig: 36, 37
-  offset: 0, 0
-  index: -1
-goblin/right-lower-leg
-  rotate: true
-  xy: 482, 90
-  size: 36, 76
-  orig: 36, 76
-  offset: 0, 0
-  index: -1
-goblin/right-shoulder
-  rotate: true
-  xy: 602, 3
-  size: 39, 45
-  orig: 39, 45
-  offset: 0, 0
-  index: -1
-goblin/right-upper-leg
-  rotate: true
-  xy: 641, 57
-  size: 34, 63
-  orig: 34, 63
-  offset: 0, 0
-  index: -1
-goblin/torso
-  rotate: true
-  xy: 212, 34
-  size: 68, 96
-  orig: 68, 96
-  offset: 0, 0
-  index: -1
-goblin/undie-straps
-  rotate: false
-  xy: 380, 5
-  size: 55, 19
-  orig: 55, 19
-  offset: 0, 0
-  index: -1
-goblin/undies
-  rotate: false
-  xy: 174, 5
-  size: 36, 29
-  orig: 36, 29
-  offset: 0, 0
-  index: -1
-goblingirl/eyes-closed
-  rotate: false
-  xy: 269, 11
-  size: 37, 21
-  orig: 37, 21
-  offset: 0, 0
-  index: -1
-goblingirl/head
-  rotate: false
-  xy: 2, 21
-  size: 103, 81
-  orig: 103, 81
-  offset: 0, 0
-  index: -1
-goblingirl/left-arm
-  rotate: true
-  xy: 978, 56
-  size: 37, 35
-  orig: 37, 35
-  offset: 0, 0
-  index: -1
-goblingirl/left-foot
-  rotate: false
-  xy: 107, 3
-  size: 65, 31
-  orig: 65, 31
-  offset: 0, 0
-  index: -1
-goblingirl/left-hand
-  rotate: false
-  xy: 565, 2
-  size: 35, 40
-  orig: 35, 40
-  offset: 0, 0
-  index: -1
-goblingirl/left-lower-leg
-  rotate: true
-  xy: 785, 93
-  size: 33, 70
-  orig: 33, 70
-  offset: 0, 0
-  index: -1
-goblingirl/left-shoulder
-  rotate: true
-  xy: 690, 27
-  size: 28, 46
-  orig: 28, 46
-  offset: 0, 0
-  index: -1
-goblingirl/left-upper-leg
-  rotate: true
-  xy: 857, 93
-  size: 33, 70
-  orig: 33, 70
-  offset: 0, 0
-  index: -1
-goblingirl/neck
-  rotate: false
-  xy: 528, 2
-  size: 35, 41
-  orig: 35, 41
-  offset: 0, 0
-  index: -1
-goblingirl/pelvis
-  rotate: false
-  xy: 546, 45
-  size: 62, 43
-  orig: 62, 43
-  offset: 0, 0
-  index: -1
-goblingirl/right-arm
-  rotate: false
-  xy: 452, 48
-  size: 28, 50
-  orig: 28, 50
-  offset: 0, 0
-  index: -1
-goblingirl/right-foot
-  rotate: false
-  xy: 836, 58
-  size: 63, 33
-  orig: 63, 33
-  offset: 0, 0
-  index: -1
-goblingirl/right-hand
-  rotate: true
-  xy: 771, 20
-  size: 36, 37
-  orig: 36, 37
-  offset: 0, 0
-  index: -1
-goblingirl/right-lower-leg
-  rotate: true
-  xy: 560, 90
-  size: 36, 76
-  orig: 36, 76
-  offset: 0, 0
-  index: -1
-goblingirl/right-shoulder
-  rotate: false
-  xy: 649, 10
-  size: 39, 45
-  orig: 39, 45
-  offset: 0, 0
-  index: -1
-goblingirl/right-upper-leg
-  rotate: true
-  xy: 706, 57
-  size: 34, 63
-  orig: 34, 63
-  offset: 0, 0
-  index: -1
-goblingirl/torso
-  rotate: false
-  xy: 310, 2
-  size: 68, 96
-  orig: 68, 96
-  offset: 0, 0
-  index: -1
-goblingirl/undie-straps
-  rotate: false
-  xy: 212, 13
-  size: 55, 19
-  orig: 55, 19
-  offset: 0, 0
-  index: -1
-goblingirl/undies
-  rotate: false
-  xy: 810, 27
-  size: 36, 29
-  orig: 36, 29
-  offset: 0, 0
-  index: -1
-shield
-  rotate: false
-  xy: 380, 26
-  size: 70, 72
-  orig: 70, 72
-  offset: 0, 0
-  index: -1
-spear
-  rotate: true
-  xy: 2, 104
-  size: 22, 368
-  orig: 22, 368
-  offset: 0, 0
-  index: -1

BIN
spine-sfml/data/goblins.png


Fișier diff suprimat deoarece este prea mare
+ 0 - 240
spine-sfml/data/owl-pro.json


BIN
spine-sfml/data/owl-pro.skel


+ 0 - 195
spine-sfml/data/owl.atlas

@@ -1,195 +0,0 @@
-
-owl.png
-size: 1024,512
-format: RGBA8888
-filter: Linear,Linear
-repeat: none
-L_eye-closed
-  rotate: false
-  xy: 508, 115
-  size: 90, 86
-  orig: 90, 86
-  offset: 0, 0
-  index: -1
-L_eye-iris
-  rotate: false
-  xy: 826, 183
-  size: 90, 86
-  orig: 90, 86
-  offset: 0, 0
-  index: -1
-L_eye-light
-  rotate: false
-  xy: 1001, 488
-  size: 21, 20
-  orig: 21, 20
-  offset: 0, 0
-  index: -1
-L_eye-pupil
-  rotate: false
-  xy: 752, 154
-  size: 63, 60
-  orig: 63, 60
-  offset: 0, 0
-  index: -1
-L_foot
-  rotate: false
-  xy: 817, 133
-  size: 64, 48
-  orig: 64, 48
-  offset: 0, 0
-  index: -1
-L_wing
-  rotate: false
-  xy: 342, 91
-  size: 81, 110
-  orig: 81, 110
-  offset: 0, 0
-  index: -1
-R_eye-closed
-  rotate: false
-  xy: 508, 27
-  size: 90, 86
-  orig: 90, 86
-  offset: 0, 0
-  index: -1
-R_eye-iris
-  rotate: true
-  xy: 600, 111
-  size: 90, 86
-  orig: 90, 86
-  offset: 0, 0
-  index: -1
-R_eye-light
-  rotate: false
-  xy: 1001, 466
-  size: 21, 20
-  orig: 21, 20
-  offset: 0, 0
-  index: -1
-R_eye-pupil
-  rotate: true
-  xy: 691, 72
-  size: 63, 60
-  orig: 63, 60
-  offset: 0, 0
-  index: -1
-R_foot
-  rotate: false
-  xy: 814, 83
-  size: 64, 48
-  orig: 64, 48
-  offset: 0, 0
-  index: -1
-R_wing
-  rotate: false
-  xy: 425, 91
-  size: 81, 110
-  orig: 81, 110
-  offset: 0, 0
-  index: -1
-beak
-  rotate: false
-  xy: 883, 140
-  size: 39, 41
-  orig: 39, 41
-  offset: 0, 0
-  index: -1
-beak-down
-  rotate: true
-  xy: 753, 53
-  size: 37, 40
-  orig: 37, 40
-  offset: 0, 0
-  index: -1
-body
-  rotate: false
-  xy: 2, 5
-  size: 248, 196
-  orig: 248, 196
-  offset: 0, 0
-  index: -1
-feather-1
-  rotate: false
-  xy: 753, 92
-  size: 59, 60
-  orig: 59, 60
-  offset: 0, 0
-  index: -1
-feather-2
-  rotate: false
-  xy: 688, 137
-  size: 62, 65
-  orig: 62, 65
-  offset: 0, 0
-  index: -1
-feather-3
-  rotate: true
-  xy: 600, 2
-  size: 56, 76
-  orig: 56, 76
-  offset: 0, 0
-  index: -1
-head-base
-  rotate: false
-  xy: 621, 271
-  size: 299, 237
-  orig: 299, 237
-  offset: 0, 0
-  index: -1
-leaf-1
-  rotate: false
-  xy: 922, 273
-  size: 76, 101
-  orig: 76, 101
-  offset: 0, 0
-  index: -1
-leaf-2
-  rotate: true
-  xy: 621, 204
-  size: 65, 95
-  orig: 65, 95
-  offset: 0, 0
-  index: -1
-leaf-3
-  rotate: true
-  xy: 922, 376
-  size: 132, 77
-  orig: 132, 77
-  offset: 0, 0
-  index: -1
-leaf-4
-  rotate: false
-  xy: 600, 60
-  size: 89, 49
-  orig: 89, 49
-  offset: 0, 0
-  index: -1
-leaf-5
-  rotate: true
-  xy: 718, 216
-  size: 53, 106
-  orig: 53, 106
-  offset: 0, 0
-  index: -1
-leaf-6
-  rotate: false
-  xy: 252, 85
-  size: 88, 116
-  orig: 88, 116
-  offset: 0, 0
-  index: -1
-leaf-7
-  rotate: true
-  xy: 252, 29
-  size: 54, 86
-  orig: 54, 86
-  offset: 0, 0
-  index: -1
-wood
-  rotate: false
-  xy: 2, 203
-  size: 617, 305
-  orig: 617, 305
-  offset: 0, 0
-  index: -1

BIN
spine-sfml/data/owl.png


Fișier diff suprimat deoarece este prea mare
+ 0 - 397
spine-sfml/data/raptor-pro.json


BIN
spine-sfml/data/raptor-pro.skel


+ 0 - 300
spine-sfml/data/raptor.atlas

@@ -1,300 +0,0 @@
-
-raptor.png
-size: 1024,1024
-format: RGBA8888
-filter: Linear,Linear
-repeat: none
-back-arm
-  rotate: true
-  xy: 274, 394
-  size: 46, 29
-  orig: 46, 29
-  offset: 0, 0
-  index: -1
-back-bracer
-  rotate: true
-  xy: 140, 247
-  size: 39, 28
-  orig: 39, 28
-  offset: 0, 0
-  index: -1
-back-hand
-  rotate: false
-  xy: 824, 699
-  size: 36, 34
-  orig: 36, 34
-  offset: 0, 0
-  index: -1
-back-knee
-  rotate: false
-  xy: 360, 507
-  size: 49, 67
-  orig: 49, 67
-  offset: 0, 0
-  index: -1
-back-thigh
-  rotate: true
-  xy: 140, 206
-  size: 39, 24
-  orig: 39, 24
-  offset: 0, 0
-  index: -1
-dust01
-  rotate: false
-  xy: 219, 299
-  size: 48, 37
-  orig: 48, 37
-  offset: 0, 0
-  index: -1
-dust02
-  rotate: false
-  xy: 895, 833
-  size: 43, 44
-  orig: 43, 44
-  offset: 0, 0
-  index: -1
-dust03
-  rotate: true
-  xy: 167, 445
-  size: 31, 26
-  orig: 31, 26
-  offset: 0, 0
-  index: -1
-eyes-open
-  rotate: true
-  xy: 2, 2
-  size: 47, 45
-  orig: 47, 45
-  offset: 0, 0
-  index: -1
-front-arm
-  rotate: false
-  xy: 470, 544
-  size: 48, 30
-  orig: 48, 30
-  offset: 0, 0
-  index: -1
-front-bracer
-  rotate: true
-  xy: 274, 351
-  size: 41, 29
-  orig: 41, 29
-  offset: 0, 0
-  index: -1
-front-hand
-  rotate: false
-  xy: 827, 773
-  size: 41, 38
-  orig: 41, 38
-  offset: 0, 0
-  index: -1
-front-open-hand
-  rotate: false
-  xy: 360, 461
-  size: 43, 44
-  orig: 43, 44
-  offset: 0, 0
-  index: -1
-front-thigh
-  rotate: false
-  xy: 411, 545
-  size: 57, 29
-  orig: 57, 29
-  offset: 0, 0
-  index: -1
-gun
-  rotate: false
-  xy: 195, 442
-  size: 107, 103
-  orig: 107, 103
-  offset: 0, 0
-  index: -1
-gun-nohand
-  rotate: false
-  xy: 167, 338
-  size: 105, 102
-  orig: 105, 102
-  offset: 0, 0
-  index: -1
-head
-  rotate: false
-  xy: 2, 137
-  size: 136, 149
-  orig: 136, 149
-  offset: 0, 0
-  index: -1
-lower-leg
-  rotate: true
-  xy: 648, 667
-  size: 73, 98
-  orig: 73, 98
-  offset: 0, 0
-  index: -1
-mouth-grind
-  rotate: true
-  xy: 49, 2
-  size: 47, 30
-  orig: 47, 30
-  offset: 0, 0
-  index: -1
-mouth-smile
-  rotate: true
-  xy: 81, 2
-  size: 47, 30
-  orig: 47, 30
-  offset: 0, 0
-  index: -1
-neck
-  rotate: false
-  xy: 626, 631
-  size: 18, 21
-  orig: 18, 21
-  offset: 0, 0
-  index: -1
-raptor-arm-back
-  rotate: true
-  xy: 538, 570
-  size: 82, 86
-  orig: 82, 86
-  offset: 0, 0
-  index: -1
-raptor-body
-  rotate: false
-  xy: 2, 737
-  size: 632, 285
-  orig: 632, 285
-  offset: 0, 0
-  index: -1
-raptor-front-arm
-  rotate: true
-  xy: 544, 654
-  size: 81, 102
-  orig: 81, 102
-  offset: 0, 0
-  index: -1
-raptor-front-leg
-  rotate: false
-  xy: 2, 478
-  size: 191, 257
-  orig: 191, 257
-  offset: 0, 0
-  index: -1
-raptor-hindleg-back
-  rotate: false
-  xy: 636, 807
-  size: 169, 215
-  orig: 169, 215
-  offset: 0, 0
-  index: -1
-raptor-horn
-  rotate: false
-  xy: 360, 655
-  size: 182, 80
-  orig: 182, 80
-  offset: 0, 0
-  index: -1
-raptor-horn-back
-  rotate: false
-  xy: 360, 576
-  size: 176, 77
-  orig: 176, 77
-  offset: 0, 0
-  index: -1
-raptor-jaw
-  rotate: false
-  xy: 807, 879
-  size: 153, 143
-  orig: 153, 143
-  offset: 0, 0
-  index: -1
-raptor-jaw-tooth
-  rotate: true
-  xy: 940, 840
-  size: 37, 48
-  orig: 37, 48
-  offset: 0, 0
-  index: -1
-raptor-mouth-inside
-  rotate: true
-  xy: 827, 735
-  size: 36, 41
-  orig: 36, 41
-  offset: 0, 0
-  index: -1
-raptor-saddle-noshadow
-  rotate: false
-  xy: 2, 288
-  size: 163, 188
-  orig: 163, 188
-  offset: 0, 0
-  index: -1
-raptor-saddle-strap-front
-  rotate: false
-  xy: 962, 927
-  size: 57, 95
-  orig: 57, 95
-  offset: 0, 0
-  index: -1
-raptor-saddle-strap-rear
-  rotate: true
-  xy: 748, 686
-  size: 54, 74
-  orig: 54, 74
-  offset: 0, 0
-  index: -1
-raptor-saddle-w-shadow
-  rotate: false
-  xy: 195, 547
-  size: 163, 188
-  orig: 163, 188
-  offset: 0, 0
-  index: -1
-raptor-tail-shadow
-  rotate: false
-  xy: 636, 742
-  size: 189, 63
-  orig: 189, 63
-  offset: 0, 0
-  index: -1
-raptor-tongue
-  rotate: false
-  xy: 807, 813
-  size: 86, 64
-  orig: 86, 64
-  offset: 0, 0
-  index: -1
-stirrup-back
-  rotate: false
-  xy: 411, 508
-  size: 44, 35
-  orig: 44, 35
-  offset: 0, 0
-  index: -1
-stirrup-front
-  rotate: true
-  xy: 167, 291
-  size: 45, 50
-  orig: 45, 50
-  offset: 0, 0
-  index: -1
-stirrup-strap
-  rotate: false
-  xy: 962, 879
-  size: 49, 46
-  orig: 49, 46
-  offset: 0, 0
-  index: -1
-torso
-  rotate: false
-  xy: 304, 454
-  size: 54, 91
-  orig: 54, 91
-  offset: 0, 0
-  index: -1
-visor
-  rotate: false
-  xy: 2, 51
-  size: 131, 84
-  orig: 131, 84
-  offset: 0, 0
-  index: -1

BIN
spine-sfml/data/raptor.png


+ 0 - 1783
spine-sfml/data/spineboy-ess.json

@@ -1,1783 +0,0 @@
-{
-"skeleton": {
-	"hash": "0DoQUqP6ATLL322RHY3r98lgFr8",
-	"spine": "3.7.08-beta",
-	"width": 470.72,
-	"height": 731.57,
-	"images": "./images/",
-	"audio": ""
-},
-"bones": [
-	{ "name": "root" },
-	{ "name": "dust", "parent": "root", "x": -303.6, "y": 32.64, "scaleX": 1.457 },
-	{ "name": "hip", "parent": "root", "y": 247.47 },
-	{ "name": "torso", "parent": "hip", "length": 127.56, "rotation": 103.82, "x": -1.62, "y": 4.9, "color": "e0da19ff" },
-	{ "name": "front-upper-arm", "parent": "torso", "length": 69.45, "rotation": 168.38, "x": 103.76, "y": 19.33, "color": "00ff04ff" },
-	{
-		"name": "front-bracer",
-		"parent": "front-upper-arm",
-		"length": 40.57,
-		"rotation": 18.3,
-		"x": 68.8,
-		"y": -0.68,
-		"color": "00ff04ff"
-	},
-	{ "name": "front-fist", "parent": "front-bracer", "length": 65.39, "rotation": 12.43, "x": 40.57, "y": 0.2, "color": "00ff04ff" },
-	{ "name": "front-thigh", "parent": "hip", "length": 74.81, "rotation": -95.51, "x": -17.46, "y": -11.64, "color": "00ff04ff" },
-	{ "name": "front-shin", "parent": "front-thigh", "length": 128.77, "rotation": -2.21, "x": 78.69, "y": 1.6, "color": "00ff04ff" },
-	{ "name": "front-foot", "parent": "front-shin", "length": 91.34, "rotation": 77.91, "x": 128.76, "y": -0.34, "color": "00ff04ff" },
-	{ "name": "rear-upper-arm", "parent": "torso", "length": 51.94, "rotation": -169.56, "x": 92.36, "y": -19.22, "color": "ff000dff" },
-	{ "name": "rear-bracer", "parent": "rear-upper-arm", "length": 34.56, "rotation": 23.15, "x": 51.36, "color": "ff000dff" },
-	{ "name": "gun", "parent": "rear-bracer", "length": 43.11, "rotation": 5.35, "x": 34.42, "y": -0.45, "color": "ff000dff" },
-	{ "name": "gun-tip", "parent": "gun", "rotation": 6.83, "x": 201.05, "y": 52.14, "color": "ff000dff" },
-	{ "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.54, "x": 127.5, "y": -0.31, "color": "e0da19ff" },
-	{ "name": "head", "parent": "neck", "length": 263.58, "rotation": 23.18, "x": 27.66, "y": -0.26, "color": "e0da19ff" },
-	{ "name": "rear-thigh", "parent": "hip", "length": 85.72, "rotation": -72.54, "x": 8.91, "y": -5.63, "color": "ff000dff" },
-	{ "name": "rear-shin", "parent": "rear-thigh", "length": 121.88, "rotation": -19.83, "x": 86.1, "y": -1.33, "color": "ff000dff" },
-	{ "name": "rear-foot", "parent": "rear-shin", "length": 82.57, "rotation": 69.3, "x": 121.46, "y": -0.76, "color": "ff000dff" }
-],
-"slots": [
-	{ "name": "rear-upper-arm", "bone": "rear-upper-arm", "attachment": "rear-upper-arm" },
-	{ "name": "rear-bracer", "bone": "rear-bracer", "attachment": "rear-bracer" },
-	{ "name": "gun", "bone": "gun", "attachment": "gun" },
-	{ "name": "rear-foot", "bone": "rear-foot", "attachment": "rear-foot" },
-	{ "name": "rear-thigh", "bone": "rear-thigh", "attachment": "rear-thigh" },
-	{ "name": "rear-shin", "bone": "rear-shin", "attachment": "rear-shin" },
-	{ "name": "neck", "bone": "neck", "attachment": "neck" },
-	{ "name": "torso", "bone": "torso", "attachment": "torso" },
-	{ "name": "front-upper-arm", "bone": "front-upper-arm", "attachment": "front-upper-arm" },
-	{ "name": "head", "bone": "head", "attachment": "head" },
-	{ "name": "eye", "bone": "head", "attachment": "eye-indifferent" },
-	{ "name": "front-thigh", "bone": "front-thigh", "attachment": "front-thigh" },
-	{ "name": "front-foot", "bone": "front-foot", "attachment": "front-foot" },
-	{ "name": "front-shin", "bone": "front-shin", "attachment": "front-shin" },
-	{ "name": "mouth", "bone": "head", "attachment": "mouth-smile" },
-	{ "name": "goggles", "bone": "head", "attachment": "goggles" },
-	{ "name": "front-bracer", "bone": "front-bracer", "attachment": "front-bracer" },
-	{ "name": "front-fist", "bone": "front-fist", "attachment": "front-fist-closed" },
-	{ "name": "muzzle", "bone": "gun-tip", "blend": "additive" },
-	{ "name": "head-bb", "bone": "head" },
-	{ "name": "dust01", "bone": "dust" }
-],
-"skins": {
-	"default": {
-		"dust01": {
-			"dust01": { "width": 96, "height": 73 },
-			"dust02": { "x": -8.12, "y": 20.56, "width": 86, "height": 88 },
-			"dust03": { "x": -5.49, "y": 34.26, "width": 62, "height": 52 }
-		},
-		"eye": {
-			"eye-indifferent": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 },
-			"eye-surprised": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 }
-		},
-		"front-bracer": {
-			"front-bracer": { "x": 12.03, "y": -1.68, "rotation": 79.6, "width": 58, "height": 80 }
-		},
-		"front-fist": {
-			"front-fist-closed": { "x": 35.5, "y": 6, "rotation": 67.16, "width": 75, "height": 82 },
-			"front-fist-open": { "x": 39.57, "y": 7.76, "rotation": 67.16, "width": 86, "height": 87 }
-		},
-		"front-foot": {
-			"front-foot": { "x": 29.52, "y": 7.84, "rotation": 18.69, "width": 126, "height": 69 }
-		},
-		"front-shin": {
-			"front-shin": { "x": 55.12, "y": -3.54, "rotation": 96.59, "width": 82, "height": 184 }
-		},
-		"front-thigh": {
-			"front-thigh": { "x": 42.48, "y": 4.45, "rotation": 84.87, "width": 48, "height": 112 }
-		},
-		"front-upper-arm": {
-			"front-upper-arm": { "x": 28.31, "y": 7.37, "rotation": 97.9, "width": 54, "height": 97 }
-		},
-		"goggles": {
-			"goggles": { "x": 97.08, "y": 6.54, "rotation": -70.63, "width": 261, "height": 166 }
-		},
-		"gun": {
-			"gun": { "x": 77.3, "y": 16.4, "rotation": 60.83, "width": 210, "height": 203 }
-		},
-		"head": {
-			"head": { "x": 128.96, "y": 0.3, "rotation": -70.63, "width": 271, "height": 298 }
-		},
-		"head-bb": {
-			"head": {
-				"type": "boundingbox",
-				"vertexCount": 6,
-				"vertices": [ -19.14, -70.3, 40.8, -118.07, 257.77, -115.62, 285.16, 57.18, 120.77, 164.95, -5.07, 76.95 ]
-			}
-		},
-		"mouth": {
-			"mouth-grind": { "x": 23.69, "y": -32.24, "rotation": -70.63, "width": 93, "height": 59 },
-			"mouth-oooo": { "x": 23.69, "y": -32.24, "rotation": -70.63, "width": 93, "height": 59 },
-			"mouth-smile": { "x": 23.69, "y": -32.24, "rotation": -70.63, "width": 93, "height": 59 }
-		},
-		"muzzle": {
-			"muzzle01": { "x": 159.26, "y": 5.83, "rotation": 0.15, "width": 542, "height": 349 },
-			"muzzle02": { "x": 191.23, "y": 5.91, "rotation": 0.15, "width": 540, "height": 337 },
-			"muzzle03": { "x": 230.67, "y": 6.02, "rotation": 0.15, "width": 663, "height": 425 },
-			"muzzle04": { "x": 218.54, "y": 5.99, "rotation": 0.15, "width": 596, "height": 358 }
-		},
-		"neck": {
-			"neck": { "x": 9.77, "y": -3.01, "rotation": -55.22, "width": 36, "height": 41 }
-		},
-		"rear-bracer": {
-			"rear-bracer": { "x": 11.15, "y": -2.2, "rotation": 66.17, "width": 56, "height": 72 }
-		},
-		"rear-foot": {
-			"rear-foot": { "x": 31.51, "y": 3.58, "rotation": 23.07, "width": 113, "height": 60 }
-		},
-		"rear-shin": {
-			"rear-shin": { "x": 58.29, "y": -2.75, "rotation": 92.37, "width": 75, "height": 178 }
-		},
-		"rear-thigh": {
-			"rear-thigh": { "x": 33.11, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 }
-		},
-		"rear-upper-arm": {
-			"rear-upper-arm": { "x": 21.13, "y": 4.09, "rotation": 89.33, "width": 47, "height": 87 }
-		},
-		"torso": {
-			"torso": { "x": 63.61, "y": 7.12, "rotation": -94.54, "width": 98, "height": 180 }
-		}
-	}
-},
-"events": {
-	"footstep": {}
-},
-"animations": {
-	"death": {
-		"slots": {
-			"eye": {
-				"attachment": [
-					{ "time": 0, "name": "eye-surprised" },
-					{ "time": 0.4667, "name": "eye-indifferent" },
-					{ "time": 2.2333, "name": "eye-surprised" },
-					{ "time": 4.5333, "name": "eye-indifferent" }
-				]
-			},
-			"front-fist": {
-				"attachment": [
-					{ "time": 0, "name": "front-fist-open" }
-				]
-			},
-			"mouth": {
-				"attachment": [
-					{ "time": 0, "name": "mouth-oooo" },
-					{ "time": 2.2333, "name": "mouth-grind" },
-					{ "time": 4.5333, "name": "mouth-oooo" }
-				]
-			}
-		},
-		"bones": {
-			"head": {
-				"rotate": [
-					{ "time": 0, "angle": -2.83 },
-					{ "time": 0.1333, "angle": -28.74 },
-					{ "time": 0.2333, "angle": 11.43 },
-					{ "time": 0.3333, "angle": -50.25 },
-					{ "time": 0.4, "angle": -72.67, "curve": "stepped" },
-					{ "time": 0.4333, "angle": -72.67 },
-					{ "time": 0.5, "angle": -20.25 },
-					{ "time": 0.5667, "angle": -85.29, "curve": "stepped" },
-					{ "time": 2.2333, "angle": -85.29 },
-					{ "time": 2.5, "angle": -51.96, "curve": "stepped" },
-					{ "time": 4.5333, "angle": -51.96 },
-					{ "time": 4.6667, "angle": -85.29 }
-				]
-			},
-			"neck": {
-				"rotate": [
-					{ "time": 0, "angle": -2.83 },
-					{ "time": 0.1333, "angle": 12.35 },
-					{ "time": 0.2333, "angle": 29.89 },
-					{ "time": 0.3, "angle": 70.36 },
-					{ "time": 0.4, "angle": -10.22, "curve": "stepped" },
-					{ "time": 0.4333, "angle": -10.22 },
-					{ "time": 0.5, "angle": 2.93 },
-					{ "time": 0.5667, "angle": 47.95, "curve": "stepped" },
-					{ "time": 2.2333, "angle": 47.95 },
-					{ "time": 2.5, "angle": 18.51, "curve": "stepped" },
-					{ "time": 4.5333, "angle": 18.51 },
-					{ "time": 4.6667, "angle": 47.95 }
-				]
-			},
-			"torso": {
-				"rotate": [
-					{ "time": 0, "angle": -8.62 },
-					{ "time": 0.1333, "angle": 28.2 },
-					{ "time": 0.2667, "angle": -280.19 },
-					{ "time": 0.4, "angle": -237.23, "curve": "stepped" },
-					{ "time": 0.4333, "angle": -237.23 },
-					{ "time": 0.5, "angle": 76.03 }
-				]
-			},
-			"front-upper-arm": {
-				"rotate": [
-					{ "time": 0, "angle": -38.86 },
-					{ "time": 0.1333, "angle": -299.59 },
-					{ "time": 0.2667, "angle": -244.75 },
-					{ "time": 0.4, "angle": -292.36 },
-					{ "time": 0.4333, "angle": -315.85 },
-					{ "time": 0.5, "angle": -347.94 },
-					{ "time": 0.7, "angle": -347.33, "curve": "stepped" },
-					{ "time": 2.2333, "angle": -347.33 },
-					{ "time": 2.7, "angle": -290.68 },
-					{ "time": 2.7667, "angle": -285.11 },
-					{ "time": 4.6667, "angle": -290.68 },
-					{ "time": 4.8, "angle": 8.61 },
-					{ "time": 4.8667, "angle": 10.94 }
-				]
-			},
-			"rear-upper-arm": {
-				"rotate": [
-					{ "time": 0, "angle": -44.7 },
-					{ "time": 0.1333, "angle": 112.26 },
-					{ "time": 0.2667, "angle": 129.08 },
-					{ "time": 0.4, "angle": 134.94, "curve": "stepped" },
-					{ "time": 0.4333, "angle": 134.94 },
-					{ "time": 0.5667, "angle": 172.6 }
-				]
-			},
-			"front-bracer": {
-				"rotate": [
-					{ "time": 0, "angle": 21.88 },
-					{ "time": 0.1333, "angle": 11.49 },
-					{ "time": 0.2667, "angle": -18.82 },
-					{ "time": 0.4, "angle": -18.93 },
-					{ "time": 0.4333, "angle": -18.28 },
-					{ "time": 0.5, "angle": 60.62 },
-					{ "time": 0.7, "angle": -18.88, "curve": "stepped" },
-					{ "time": 2.2333, "angle": -18.88 },
-					{ "time": 2.7, "angle": -1.96, "curve": "stepped" },
-					{ "time": 4.6667, "angle": -1.96 },
-					{ "time": 4.8, "angle": 34.55 },
-					{ "time": 4.9333, "angle": -18.75 }
-				]
-			},
-			"front-fist": {
-				"rotate": [
-					{ "time": 0, "angle": -2.33 },
-					{ "time": 0.2667, "angle": 26.35 },
-					{ "time": 0.7, "angle": -6.08, "curve": "stepped" },
-					{ "time": 2.2333, "angle": -6.08 },
-					{ "time": 2.7, "angle": 5.73, "curve": "stepped" },
-					{ "time": 4.6667, "angle": 5.73 },
-					{ "time": 4.8667, "angle": -6.52 }
-				]
-			},
-			"rear-bracer": {
-				"rotate": [
-					{ "time": 0, "angle": 10.36 },
-					{ "time": 0.1333, "angle": -23.12 },
-					{ "time": 0.2667, "angle": -23.12 },
-					{ "time": 0.4, "angle": -23.16, "curve": "stepped" },
-					{ "time": 0.4333, "angle": -23.16 },
-					{ "time": 0.5667, "angle": -23.2 }
-				]
-			},
-			"gun": {
-				"rotate": [
-					{ "time": 0, "angle": -2.79 },
-					{ "time": 0.1333, "angle": -24.58 }
-				]
-			},
-			"front-thigh": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{ "time": 0.1333, "angle": 8.47 },
-					{ "time": 0.2667, "angle": 115.96 },
-					{ "time": 0.4, "angle": 180.66, "curve": "stepped" },
-					{ "time": 0.4333, "angle": 180.66 },
-					{ "time": 0.5, "angle": 155.22 },
-					{ "time": 0.6, "angle": 97.74 }
-				]
-			},
-			"front-shin": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{ "time": 0.1333, "angle": -27.37 },
-					{ "time": 0.2667, "angle": -35.1 },
-					{ "time": 0.4, "angle": -37.73, "curve": "stepped" },
-					{ "time": 0.4333, "angle": -37.73 },
-					{ "time": 0.5, "angle": -40.07 },
-					{ "time": 0.6, "angle": 2.76 }
-				]
-			},
-			"rear-thigh": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{ "time": 0.1333, "angle": 70.45 },
-					{ "time": 0.2667, "angle": 155.35 },
-					{ "time": 0.4, "angle": 214.31, "curve": "stepped" },
-					{ "time": 0.4333, "angle": 214.31 },
-					{ "time": 0.5, "angle": 169.67 },
-					{ "time": 0.8, "angle": 83.27 }
-				]
-			},
-			"rear-shin": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{ "time": 0.1333, "angle": 18.94 },
-					{ "time": 0.2667, "angle": -21.04 },
-					{ "time": 0.4, "angle": -29.94, "curve": "stepped" },
-					{ "time": 0.4333, "angle": -29.94 },
-					{ "time": 0.5, "angle": -16.79 },
-					{ "time": 0.8, "angle": 7.78 }
-				]
-			},
-			"rear-foot": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{ "time": 0.1333, "angle": -11.63 },
-					{ "time": 0.4, "angle": -45.6 }
-				]
-			},
-			"front-foot": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{ "time": 0.4, "angle": -48.75 }
-				]
-			},
-			"hip": {
-				"translate": [
-					{ "time": 0, "x": 0, "y": 0 },
-					{ "time": 0.2, "x": 50.35, "y": 151.73 },
-					{ "time": 0.4, "x": 5.17, "y": -119.65, "curve": "stepped" },
-					{ "time": 0.4333, "x": 5.17, "y": -119.65 },
-					{ "time": 0.5, "x": 50.35, "y": -205.19 }
-				]
-			}
-		}
-	},
-	"hit": {
-		"slots": {
-			"front-fist": {
-				"attachment": [
-					{ "time": 0.1667, "name": "front-fist-open" }
-				]
-			},
-			"mouth": {
-				"attachment": [
-					{ "time": 0, "name": "mouth-grind" },
-					{ "time": 0.3333, "name": "mouth-smile" }
-				]
-			}
-		},
-		"bones": {
-			"torso": {
-				"rotate": [
-					{ "time": 0, "angle": 56.42 },
-					{ "time": 0.3333, "angle": 8.89 }
-				]
-			},
-			"neck": {
-				"rotate": [
-					{ "time": 0, "angle": 35.39 },
-					{ "time": 0.2333, "angle": 24.95 }
-				]
-			},
-			"head": {
-				"rotate": [
-					{ "time": 0, "angle": 10.22 },
-					{ "time": 0.3333, "angle": -41.3 }
-				]
-			},
-			"front-upper-arm": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": -310.93,
-						"curve": [ 0.38, 0.53, 0.745, 1 ]
-					},
-					{ "time": 0.3333, "angle": -112.6 }
-				],
-				"translate": [
-					{ "time": 0, "x": 7.23, "y": -13.13 }
-				]
-			},
-			"front-bracer": {
-				"rotate": [
-					{ "time": 0, "angle": 36.99 },
-					{ "time": 0.3333, "angle": -28.65 }
-				]
-			},
-			"front-fist": {
-				"rotate": [
-					{ "time": 0, "angle": 13.59 },
-					{ "time": 0.3333, "angle": 7.56 }
-				]
-			},
-			"rear-upper-arm": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 271.02,
-						"curve": [ 0.343, 0.36, 0.68, 0.71 ]
-					},
-					{ "time": 0.3333, "angle": -15.84 }
-				],
-				"translate": [
-					{ "time": 0.3333, "x": -0.1, "y": -0.46 }
-				]
-			},
-			"rear-bracer": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{ "time": 0.3333, "angle": 40.03 }
-				]
-			},
-			"gun": {
-				"rotate": [
-					{ "time": 0, "angle": 14.98 },
-					{ "time": 0.3333, "angle": 39.76 }
-				]
-			},
-			"front-thigh": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 90.94,
-						"curve": [ 0.227, 0.27, 0.433, 1 ]
-					},
-					{ "time": 0.3333, "angle": 32.03 }
-				],
-				"translate": [
-					{ "time": 0, "x": 7.21, "y": -4 }
-				]
-			},
-			"rear-thigh": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 40.52,
-						"curve": [ 0.296, 0.3, 0.59, 1 ]
-					},
-					{ "time": 0.3333, "angle": 90.77 }
-				],
-				"translate": [
-					{ "time": 0, "x": -1.96, "y": -0.32 }
-				]
-			},
-			"front-shin": {
-				"rotate": [
-					{ "time": 0, "angle": -96.63 },
-					{ "time": 0.3333, "angle": -15.13 }
-				]
-			},
-			"rear-shin": {
-				"rotate": [
-					{ "time": 0, "angle": 8 },
-					{ "time": 0.3333, "angle": -67.54 }
-				]
-			},
-			"front-foot": {
-				"rotate": [
-					{ "time": 0, "angle": 5.4 },
-					{ "time": 0.3333, "angle": -16.27 }
-				]
-			},
-			"rear-foot": {
-				"rotate": [
-					{ "time": 0, "angle": 2.67 },
-					{ "time": 0.3333, "angle": -10.31 }
-				]
-			},
-			"hip": {
-				"translate": [
-					{ "time": 0, "x": -75.55, "y": -78.04 },
-					{ "time": 0.2333, "x": -36.48, "y": 12.42 },
-					{ "time": 0.3333, "x": -36.48, "y": -3 }
-				]
-			}
-		}
-	},
-	"idle": {
-		"slots": {
-			"front-fist": {
-				"attachment": [
-					{ "time": 0, "name": "front-fist-open" }
-				]
-			}
-		},
-		"bones": {
-			"torso": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": -5.62,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{
-						"time": 0.8333,
-						"angle": -9.66,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 1.6667, "angle": -5.62 }
-				],
-				"translate": [
-					{ "time": 0, "x": -6.5, "y": 0 }
-				]
-			},
-			"front-upper-arm": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": -59.85,
-						"curve": [ 0.493, 0, 0.75, 1 ]
-					},
-					{
-						"time": 0.6667,
-						"angle": -54.32,
-						"curve": [ 0.324, 0.11, 0.75, 1 ]
-					},
-					{ "time": 1.6667, "angle": -59.85 }
-				],
-				"translate": [
-					{ "time": 0, "x": -7.12, "y": -8.24 },
-					{ "time": 0.6667, "x": -6.32, "y": -8.31 },
-					{ "time": 1.6667, "x": -7.12, "y": -8.24 }
-				]
-			},
-			"rear-upper-arm": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 62.42,
-						"curve": [ 0.504, 0.02, 0.75, 1 ]
-					},
-					{
-						"time": 0.7333,
-						"angle": 43.83,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 1.6667, "angle": 62.42 }
-				],
-				"translate": [
-					{ "time": 0, "x": -1.83, "y": -16.79 },
-					{ "time": 0.6667, "x": 0.35, "y": -15.23 },
-					{ "time": 1.6667, "x": -1.83, "y": -16.79 }
-				]
-			},
-			"neck": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{ "time": 0.6667, "angle": 2.39 },
-					{ "time": 1.6667, "angle": 0 }
-				],
-				"translate": [
-					{ "time": 0, "x": -1.89, "y": -4.76 }
-				]
-			},
-			"front-thigh": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 0.65,
-						"curve": [ 0.236, 0.01, 0.559, 0.99 ]
-					},
-					{
-						"time": 0.6667,
-						"angle": -4.34,
-						"curve": [ 0.595, 0, 0.653, 1 ]
-					},
-					{ "time": 1.6667, "angle": 0.65 }
-				],
-				"translate": [
-					{ "time": 0, "x": -13.4, "y": 6.7 }
-				],
-				"scale": [
-					{
-						"time": 0,
-						"x": 0.945,
-						"y": 1,
-						"curve": [ 0.236, 0.01, 0.559, 0.99 ]
-					},
-					{
-						"time": 0.6667,
-						"x": 0.917,
-						"y": 1,
-						"curve": [ 0.595, 0, 0.653, 1 ]
-					},
-					{ "time": 1.6667, "x": 0.945, "y": 1 }
-				]
-			},
-			"front-shin": {
-				"rotate": [
-					{ "time": 0, "angle": -19.29 }
-				],
-				"scale": [
-					{
-						"time": 0,
-						"x": 1,
-						"y": 1,
-						"curve": [ 0.236, 0.01, 0.559, 0.99 ]
-					},
-					{
-						"time": 0.6667,
-						"x": 0.994,
-						"y": 1,
-						"curve": [ 0.595, 0, 0.653, 1 ]
-					},
-					{ "time": 1.6667, "x": 1, "y": 1 }
-				]
-			},
-			"rear-thigh": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 30.51,
-						"curve": [ 0.236, 0.01, 0.559, 0.99 ]
-					},
-					{
-						"time": 0.6667,
-						"angle": 40.15,
-						"curve": [ 0.595, 0, 0.653, 1 ]
-					},
-					{ "time": 1.6667, "angle": 30.51 }
-				]
-			},
-			"rear-shin": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": -23.83,
-						"curve": [ 0.236, 0.01, 0.559, 0.99 ]
-					},
-					{
-						"time": 0.6667,
-						"angle": -43.77,
-						"curve": [ 0.595, 0, 0.653, 1 ]
-					},
-					{ "time": 1.6667, "angle": -23.83 }
-				]
-			},
-			"front-foot": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 5.14,
-						"curve": [ 0.236, 0.01, 0.559, 0.99 ]
-					},
-					{
-						"time": 0.6667,
-						"angle": 10.05,
-						"curve": [ 0.595, 0, 0.653, 1 ]
-					},
-					{ "time": 1.6667, "angle": 5.14 }
-				],
-				"scale": [
-					{ "time": 0, "x": 0.755, "y": 1.31 }
-				]
-			},
-			"rear-foot": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": -7.34,
-						"curve": [ 0.236, 0.01, 0.559, 0.99 ]
-					},
-					{
-						"time": 0.6667,
-						"angle": 3.85,
-						"curve": [ 0.595, 0, 0.653, 1 ]
-					},
-					{ "time": 1.6667, "angle": -7.34 }
-				]
-			},
-			"rear-bracer": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": -17.16,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{
-						"time": 0.6667,
-						"angle": 12.53,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 1.6667, "angle": -17.16 }
-				]
-			},
-			"head": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": -5.51,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{
-						"time": 0.6667,
-						"angle": -3.12,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 1.6667, "angle": -5.51 }
-				]
-			},
-			"front-bracer": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 45.47,
-						"curve": [ 0.493, 0, 0.75, 1 ]
-					},
-					{
-						"time": 0.6667,
-						"angle": 41.34,
-						"curve": [ 0.321, 0.11, 0.736, 0.92 ]
-					},
-					{ "time": 1.6667, "angle": 45.47 }
-				]
-			},
-			"gun": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 0,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{
-						"time": 0.6667,
-						"angle": -15.59,
-						"curve": [ 0.733, 0, 0.77, 0.99 ]
-					},
-					{ "time": 1.6667, "angle": 0 }
-				]
-			},
-			"front-fist": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": -6.85,
-						"curve": [ 0.493, 0, 0.75, 1 ]
-					},
-					{
-						"time": 0.6667,
-						"angle": -14.63,
-						"curve": [ 0.324, 0.11, 0.75, 1 ]
-					},
-					{ "time": 1.6667, "angle": -6.85 }
-				],
-				"scale": [
-					{
-						"time": 0,
-						"x": 1,
-						"y": 1,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{
-						"time": 0.6667,
-						"x": 0.689,
-						"y": 1.101,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 1.6667, "x": 1, "y": 1 }
-				]
-			},
-			"hip": {
-				"translate": [
-					{
-						"time": 0,
-						"x": -6.64,
-						"y": -23.02,
-						"curve": [ 0.236, 0.01, 0.559, 0.99 ]
-					},
-					{
-						"time": 0.6667,
-						"x": 6.28,
-						"y": -35.01,
-						"curve": [ 0.595, 0, 0.653, 1 ]
-					},
-					{ "time": 1.6667, "x": -6.64, "y": -23.02 }
-				]
-			}
-		}
-	},
-	"jump": {
-		"slots": {
-			"front-fist": {
-				"attachment": [
-					{ "time": 0, "name": "front-fist-open" },
-					{ "time": 0.2, "name": "front-fist-closed" },
-					{ "time": 0.6667, "name": "front-fist-open" }
-				]
-			},
-			"mouth": {
-				"attachment": [
-					{ "time": 0, "name": "mouth-grind" }
-				]
-			}
-		},
-		"bones": {
-			"front-thigh": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 91.53,
-						"curve": [ 0.278, 0.46, 0.764, 1 ]
-					},
-					{
-						"time": 0.2,
-						"angle": -35.84,
-						"curve": [ 0.761, 0, 0.75, 1 ]
-					},
-					{ "time": 0.4333, "angle": 127.74 },
-					{
-						"time": 0.7333,
-						"angle": 48.18,
-						"curve": [ 0.227, 0.27, 0.433, 1 ]
-					},
-					{ "time": 0.8333, "angle": 25.35 },
-					{ "time": 0.9333, "angle": 45.38 },
-					{ "time": 1.0333, "angle": 38.12 },
-					{ "time": 1.1333, "angle": 25.35 },
-					{ "time": 1.3333, "angle": 91.53 }
-				],
-				"translate": [
-					{ "time": 0, "x": -2.57, "y": 5.78 },
-					{ "time": 0.4333, "x": 8.3, "y": 7.99 },
-					{ "time": 0.7333, "x": 7.21, "y": -4 },
-					{ "time": 1.3333, "x": -2.57, "y": 5.78 }
-				]
-			},
-			"torso": {
-				"rotate": [
-					{ "time": 0, "angle": -42.64 },
-					{ "time": 0.2, "angle": -5.74 },
-					{ "time": 0.4333, "angle": -50.76 },
-					{ "time": 0.7333, "angle": 1.9 },
-					{ "time": 0.8333, "angle": 11.59 },
-					{ "time": 0.9667, "angle": -1.9 },
-					{ "time": 1.1333, "angle": 11.59 },
-					{ "time": 1.3333, "angle": -42.64 }
-				]
-			},
-			"rear-thigh": {
-				"rotate": [
-					{ "time": 0, "angle": -26.32 },
-					{ "time": 0.2, "angle": 121.44 },
-					{ "time": 0.4333, "angle": 70.55 },
-					{
-						"time": 0.7333,
-						"angle": 79.9,
-						"curve": [ 0.296, 0.3, 0.59, 1 ]
-					},
-					{ "time": 0.8333, "angle": 99.12 },
-					{ "time": 0.9333, "angle": 74.06 },
-					{ "time": 1.0333, "angle": 98.05 },
-					{ "time": 1.1333, "angle": 99.12 },
-					{ "time": 1.3333, "angle": -26.32 }
-				],
-				"translate": [
-					{ "time": 0, "x": -0.56, "y": -0.32 },
-					{ "time": 0.4333, "x": -8.5, "y": 10.58 },
-					{ "time": 0.7333, "x": -1.96, "y": -0.32 },
-					{ "time": 1.3333, "x": -0.56, "y": -0.32 }
-				]
-			},
-			"rear-shin": {
-				"rotate": [
-					{ "time": 0, "angle": -78.69 },
-					{ "time": 0.4333, "angle": -55.56 },
-					{ "time": 0.7333, "angle": -62.84 },
-					{ "time": 0.8333, "angle": -80.75 },
-					{ "time": 0.9333, "angle": -41.13 },
-					{ "time": 1.0333, "angle": -77.4 },
-					{ "time": 1.1333, "angle": -80.75 },
-					{ "time": 1.3333, "angle": -78.69 }
-				]
-			},
-			"front-upper-arm": {
-				"rotate": [
-					{ "time": 0, "angle": -22.62 },
-					{ "time": 0.2, "angle": -246.69 },
-					{
-						"time": 0.6,
-						"angle": 11.28,
-						"curve": [ 0.246, 0, 0.633, 0.54 ]
-					},
-					{
-						"time": 0.7333,
-						"angle": -57.46,
-						"curve": [ 0.38, 0.53, 0.745, 1 ]
-					},
-					{ "time": 0.8667, "angle": -112.6 },
-					{ "time": 0.9333, "angle": -102.17 },
-					{ "time": 1.0333, "angle": -108.61 },
-					{ "time": 1.1333, "angle": -112.6 },
-					{ "time": 1.3333, "angle": -22.62 }
-				],
-				"translate": [
-					{ "time": 0, "x": 6.08, "y": 7.15 },
-					{ "time": 0.2, "x": 7.23, "y": -13.13, "curve": "stepped" },
-					{ "time": 0.7333, "x": 7.23, "y": -13.13 },
-					{ "time": 1.3333, "x": 6.08, "y": 7.15 }
-				]
-			},
-			"front-bracer": {
-				"rotate": [
-					{ "time": 0, "angle": 66.47 },
-					{ "time": 0.2, "angle": 42.4 },
-					{ "time": 0.4333, "angle": 26.06 },
-					{ "time": 0.7333, "angle": 13.28 },
-					{ "time": 0.8667, "angle": -28.65 },
-					{ "time": 0.9333, "angle": -22.31 },
-					{ "time": 1.0333, "angle": -35.39 },
-					{ "time": 1.1333, "angle": -28.65 },
-					{ "time": 1.3333, "angle": 66.47 }
-				]
-			},
-			"front-fist": {
-				"rotate": [
-					{ "time": 0, "angle": -28.43 },
-					{ "time": 0.4333, "angle": -45.61 },
-					{ "time": 0.7333, "angle": -53.66 },
-					{ "time": 0.8667, "angle": 7.56 },
-					{ "time": 0.9333, "angle": 31.16 },
-					{ "time": 1.0333, "angle": -32.59 },
-					{ "time": 1.1333, "angle": 7.56 },
-					{ "time": 1.3333, "angle": -28.43 }
-				]
-			},
-			"rear-upper-arm": {
-				"rotate": [
-					{ "time": 0, "angle": 39.69 },
-					{ "time": 0.2, "angle": 276.58 },
-					{ "time": 0.3, "angle": 17.74 },
-					{ "time": 0.4333, "angle": 83.38 },
-					{
-						"time": 0.6,
-						"angle": -4.72,
-						"curve": [ 0.246, 0, 0.633, 0.54 ]
-					},
-					{
-						"time": 0.7333,
-						"angle": -69.63,
-						"curve": [ 0.343, 0.36, 0.68, 0.71 ]
-					},
-					{
-						"time": 0.7667,
-						"angle": 321.47,
-						"curve": [ 0.334, 0.33, 0.667, 0.67 ]
-					},
-					{
-						"time": 0.8,
-						"angle": 33.71,
-						"curve": [ 0.359, 0.64, 0.694, 1 ]
-					},
-					{ "time": 0.8667, "angle": 34.56 },
-					{ "time": 1.0333, "angle": 71.97 },
-					{ "time": 1.1333, "angle": 34.56 },
-					{ "time": 1.3333, "angle": 39.69 }
-				],
-				"translate": [
-					{ "time": 0, "x": -3.1, "y": -4.87 },
-					{ "time": 0.2, "x": 23.33, "y": 49.07 },
-					{ "time": 0.4333, "x": 20.78, "y": 40.21 },
-					{ "time": 1.3333, "x": -3.1, "y": -4.87 }
-				]
-			},
-			"rear-bracer": {
-				"rotate": [
-					{ "time": 0, "angle": 29.67 },
-					{ "time": 0.2, "angle": 45.07 },
-					{ "time": 0.4333, "angle": -4.35 },
-					{ "time": 0.7667, "angle": 61.69 },
-					{ "time": 0.8, "angle": 82.6 },
-					{ "time": 0.8667, "angle": 80.06 },
-					{ "time": 1.0333, "angle": 57.56 },
-					{ "time": 1.1333, "angle": 80.06 },
-					{ "time": 1.3333, "angle": 29.67 }
-				]
-			},
-			"neck": {
-				"rotate": [
-					{ "time": 0, "angle": 24.91 },
-					{ "time": 0.2, "angle": 16.32 },
-					{ "time": 0.4333, "angle": 7.45 },
-					{ "time": 0.7333, "angle": -20.35 },
-					{ "time": 0.8333, "angle": -0.69, "curve": "stepped" },
-					{ "time": 1.1333, "angle": -0.69 },
-					{ "time": 1.3333, "angle": 24.91 }
-				]
-			},
-			"head": {
-				"rotate": [
-					{ "time": 0, "angle": 24.92 },
-					{ "time": 0.2, "angle": 10.36 },
-					{ "time": 0.4333, "angle": 28.65 },
-					{ "time": 0.7333, "angle": -2.66 },
-					{ "time": 0.8333, "angle": -28.94, "curve": "stepped" },
-					{ "time": 1.1333, "angle": -28.94 },
-					{ "time": 1.3333, "angle": 24.92 }
-				]
-			},
-			"front-shin": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": -90.63,
-						"curve": [ 0.416, 0.55, 0.743, 1 ]
-					},
-					{
-						"time": 0.2,
-						"angle": -10.52,
-						"curve": [ 0.644, 0.01, 0.75, 1 ]
-					},
-					{ "time": 0.4333, "angle": -127.72 },
-					{ "time": 0.7333, "angle": -19.92 },
-					{ "time": 0.8333, "angle": -5.17 },
-					{ "time": 0.9333, "angle": -35.06 },
-					{ "time": 1.0333, "angle": -43.97 },
-					{ "time": 1.1333, "angle": -5.17 },
-					{ "time": 1.3333, "angle": -90.63 }
-				]
-			},
-			"front-foot": {
-				"rotate": [
-					{ "time": 0, "angle": -0.8 },
-					{ "time": 0.0333, "angle": 16.28 },
-					{ "time": 0.0667, "angle": 23.52 },
-					{ "time": 0.1, "angle": 21.02 },
-					{ "time": 0.1333, "angle": 10.93 },
-					{ "time": 0.2, "angle": -38.46 },
-					{ "time": 0.4333, "angle": 6.62 },
-					{ "time": 0.7333, "angle": -11.52 },
-					{ "time": 1.0333, "angle": -22.92 },
-					{ "time": 1.3333, "angle": -0.8 }
-				]
-			},
-			"rear-foot": {
-				"rotate": [
-					{ "time": 0, "angle": -12.78 },
-					{ "time": 0.2, "angle": 17.06 },
-					{ "time": 0.4333, "angle": 19.45 },
-					{ "time": 0.7333, "angle": 2.67 },
-					{ "time": 1.0333, "angle": -28.5 },
-					{ "time": 1.3333, "angle": -12.78 }
-				]
-			},
-			"gun": {
-				"rotate": [
-					{ "time": 0, "angle": 6.18 },
-					{ "time": 0.2, "angle": 30.81 },
-					{ "time": 0.4333, "angle": 13.26 },
-					{ "time": 0.7333, "angle": 14.98 },
-					{ "time": 0.7667, "angle": 25.65 },
-					{ "time": 0.8, "angle": 20.62 },
-					{ "time": 0.8667, "angle": 64.53 },
-					{ "time": 1.0333, "angle": 8.6 },
-					{ "time": 1.1333, "angle": 64.53 },
-					{ "time": 1.3333, "angle": 6.18 }
-				]
-			},
-			"hip": {
-				"translate": [
-					{
-						"time": 0,
-						"x": -34.52,
-						"y": -78.63,
-						"curve": [ 0.233, 1.01, 0.75, 1 ]
-					},
-					{
-						"time": 0.2,
-						"x": -34.52,
-						"y": 182.51,
-						"curve": [ 0.232, 0.48, 0.599, 0.79 ]
-					},
-					{
-						"time": 0.7667,
-						"x": -34.52,
-						"y": 596.22,
-						"curve": [ 0.33, 0.17, 0.661, 0.22 ]
-					},
-					{ "time": 1.1333, "x": -34.52, "y": 2.5 },
-					{ "time": 1.3333, "x": -34.52, "y": -78.63 }
-				]
-			}
-		}
-	},
-	"run": {
-		"slots": {
-			"dust01": {
-				"color": [
-					{ "time": 0, "color": "ffffff1e" },
-					{ "time": 0.0333, "color": "ffffff00", "curve": "stepped" },
-					{ "time": 0.1667, "color": "ffffff00" },
-					{ "time": 0.2, "color": "ffffffff" },
-					{ "time": 0.4667, "color": "ffffff00", "curve": "stepped" },
-					{ "time": 0.5333, "color": "ffffff00" },
-					{ "time": 0.5667, "color": "ffffffff" },
-					{ "time": 0.8, "color": "ffffff1e" }
-				],
-				"attachment": [
-					{ "time": 0.1667, "name": "dust01" },
-					{ "time": 0.2333, "name": "dust02" },
-					{ "time": 0.3333, "name": "dust03" },
-					{ "time": 0.5333, "name": "dust01" },
-					{ "time": 0.6, "name": "dust02" },
-					{ "time": 0.7, "name": "dust03" }
-				]
-			},
-			"mouth": {
-				"attachment": [
-					{ "time": 0, "name": "mouth-grind" }
-				]
-			}
-		},
-		"bones": {
-			"front-thigh": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 42.05,
-						"curve": [ 0.196, 0.86, 0.75, 1 ]
-					},
-					{ "time": 0.0667, "angle": 46.08 },
-					{ "time": 0.1333, "angle": -20.29 },
-					{ "time": 0.2, "angle": -27.24 },
-					{ "time": 0.2667, "angle": -47.17 },
-					{ "time": 0.3333, "angle": -39.79 },
-					{ "time": 0.4, "angle": -25.86 },
-					{ "time": 0.4667, "angle": 14.35 },
-					{ "time": 0.5333, "angle": 55.63 },
-					{ "time": 0.6, "angle": 69.65 },
-					{ "time": 0.6667, "angle": 86.41 },
-					{ "time": 0.7333, "angle": 65.88 },
-					{ "time": 0.8, "angle": 42.05 }
-				],
-				"translate": [
-					{ "time": 0, "x": 0, "y": 0 },
-					{ "time": 0.0333, "x": -5.8, "y": 11.16 },
-					{ "time": 0.0667, "x": -5.13, "y": 11.55 },
-					{ "time": 0.1333, "x": -7.7, "y": 8.99 },
-					{ "time": 0.5333, "x": -1.26, "y": 3.83 },
-					{ "time": 0.8, "x": 0, "y": 0 }
-				]
-			},
-			"torso": {
-				"rotate": [
-					{ "time": 0, "angle": -39.71 },
-					{ "time": 0.2, "angle": -57.29 },
-					{ "time": 0.4, "angle": -39.71 },
-					{ "time": 0.6, "angle": -57.29 },
-					{ "time": 0.8, "angle": -39.71 }
-				]
-			},
-			"rear-thigh": {
-				"rotate": [
-					{ "time": 0, "angle": -56.59 },
-					{ "time": 0.0667, "angle": -21.57 },
-					{ "time": 0.1333, "angle": 27.95 },
-					{ "time": 0.2, "angle": 42.43 },
-					{ "time": 0.2667, "angle": 62.37 },
-					{ "time": 0.3333, "angle": 45.43 },
-					{ "time": 0.4, "angle": 15.67 },
-					{ "time": 0.4667, "angle": 28.22 },
-					{ "time": 0.5333, "angle": -38.62 },
-					{ "time": 0.6, "angle": -53.27 },
-					{ "time": 0.6667, "angle": -79.31 },
-					{ "time": 0.7333, "angle": -86.47 },
-					{ "time": 0.8, "angle": -56.59 }
-				],
-				"translate": [
-					{ "time": 0, "x": 0, "y": 0 },
-					{ "time": 0.4, "x": -6.76, "y": -3.86 },
-					{ "time": 0.4333, "x": -15.85, "y": 7.28 },
-					{ "time": 0.4667, "x": -13.05, "y": 4.05 },
-					{ "time": 0.5, "x": -10.25, "y": 7.11 },
-					{ "time": 0.5333, "x": -9.02, "y": -5.15 },
-					{ "time": 0.6667, "x": -23.18, "y": -2.58 },
-					{ "time": 0.8, "x": 0, "y": 0 }
-				]
-			},
-			"rear-shin": {
-				"rotate": [
-					{ "time": 0, "angle": -74 },
-					{ "time": 0.0667, "angle": -83.38 },
-					{ "time": 0.1333, "angle": -106.7 },
-					{ "time": 0.2, "angle": -66.01 },
-					{ "time": 0.2667, "angle": -55.22 },
-					{ "time": 0.3333, "angle": -24.8 },
-					{
-						"time": 0.4,
-						"angle": 18.44,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 0.4667, "angle": -56.65 },
-					{
-						"time": 0.5333,
-						"angle": -11.95,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 0.6667, "angle": -41.27 },
-					{ "time": 0.7333, "angle": -43.61 },
-					{ "time": 0.8, "angle": -74 }
-				]
-			},
-			"front-upper-arm": {
-				"rotate": [
-					{ "time": 0, "angle": -89.37 },
-					{ "time": 0.0667, "angle": -95.67 },
-					{ "time": 0.1333, "angle": -22.01 },
-					{ "time": 0.2, "angle": -316.04 },
-					{ "time": 0.2667, "angle": -274.94 },
-					{ "time": 0.3333, "angle": -273.74 },
-					{ "time": 0.4, "angle": -272.09 },
-					{ "time": 0.4667, "angle": -264.9 },
-					{ "time": 0.5333, "angle": -320.1 },
-					{ "time": 0.6, "angle": -50.84 },
-					{ "time": 0.6667, "angle": -81.73 },
-					{ "time": 0.7333, "angle": -83.92 },
-					{ "time": 0.8, "angle": -89.37 }
-				],
-				"translate": [
-					{ "time": 0, "x": 6.25, "y": 10.05 },
-					{ "time": 0.2667, "x": 4.96, "y": -13.13 },
-					{ "time": 0.6, "x": -2.43, "y": 1.95 },
-					{ "time": 0.8, "x": 6.25, "y": 10.05 }
-				]
-			},
-			"front-bracer": {
-				"rotate": [
-					{ "time": 0, "angle": 33.44 },
-					{ "time": 0.0667, "angle": 20.54 },
-					{ "time": 0.1333, "angle": 15.26 },
-					{ "time": 0.2, "angle": 19.29 },
-					{ "time": 0.2667, "angle": 22.62 },
-					{ "time": 0.3333, "angle": 37.29 },
-					{ "time": 0.4, "angle": 41.53 },
-					{ "time": 0.4667, "angle": 31.74 },
-					{ "time": 0.5333, "angle": 67.45 },
-					{ "time": 0.6667, "angle": 39.77 },
-					{ "time": 0.7333, "angle": 30.95 },
-					{ "time": 0.8, "angle": 33.44 }
-				]
-			},
-			"front-fist": {
-				"rotate": [
-					{ "time": 0, "angle": -19.76 },
-					{ "time": 0.0667, "angle": -37.11 },
-					{ "time": 0.1333, "angle": -50.8 },
-					{ "time": 0.2667, "angle": -12.69 },
-					{ "time": 0.3333, "angle": 3.01 },
-					{ "time": 0.4333, "angle": 12.06 },
-					{ "time": 0.5333, "angle": 13.26 },
-					{ "time": 0.8, "angle": -19.76 }
-				]
-			},
-			"rear-upper-arm": {
-				"rotate": [
-					{ "time": 0, "angle": 68.68 },
-					{ "time": 0.0667, "angle": 73.89 },
-					{ "time": 0.1333, "angle": -9.64 },
-					{ "time": 0.2, "angle": 284.28 },
-					{ "time": 0.2667, "angle": 283.29 },
-					{ "time": 0.3333, "angle": 278.29 },
-					{ "time": 0.4, "angle": 271.03 },
-					{ "time": 0.4667, "angle": 263.2 },
-					{ "time": 0.5333, "angle": 314.26 },
-					{ "time": 0.6, "angle": 16.83 },
-					{ "time": 0.6667, "angle": 70.35 },
-					{ "time": 0.7333, "angle": 73.54 },
-					{ "time": 0.8, "angle": 68.68 }
-				],
-				"translate": [
-					{ "time": 0, "x": -2.57, "y": -8.89 },
-					{ "time": 0.1333, "x": -4.68, "y": 7.21 },
-					{ "time": 0.2, "x": 21.73, "y": 51.18 },
-					{ "time": 0.6, "x": 4.33, "y": 2.06 },
-					{ "time": 0.8, "x": -2.57, "y": -8.89 }
-				]
-			},
-			"rear-bracer": {
-				"rotate": [
-					{ "time": 0, "angle": 31.05 },
-					{ "time": 0.0667, "angle": 28.28 },
-					{ "time": 0.1333, "angle": 49.36 },
-					{ "time": 0.2, "angle": 59.37 },
-					{ "time": 0.2667, "angle": 8.56 },
-					{ "time": 0.3333, "angle": 9.39 },
-					{ "time": 0.4, "angle": 11.51 },
-					{ "time": 0.4667, "angle": 7.22 },
-					{ "time": 0.5333, "angle": -18.44 },
-					{ "time": 0.6, "angle": 11.45 },
-					{ "time": 0.6667, "angle": 9.99 },
-					{ "time": 0.7333, "angle": 8.29 },
-					{ "time": 0.8, "angle": 31.05 }
-				]
-			},
-			"neck": {
-				"rotate": [
-					{ "time": 0, "angle": 11.03 },
-					{ "time": 0.2, "angle": 13.59 },
-					{ "time": 0.4, "angle": 11.03 },
-					{ "time": 0.6, "angle": 13.59 },
-					{ "time": 0.8, "angle": 11.03 }
-				]
-			},
-			"head": {
-				"rotate": [
-					{ "time": 0, "angle": 11.03 },
-					{ "time": 0.1, "angle": 12.35 },
-					{ "time": 0.2, "angle": 25.55 },
-					{ "time": 0.4, "angle": 11.03 },
-					{ "time": 0.5, "angle": 12.35 },
-					{ "time": 0.6, "angle": 25.55 },
-					{ "time": 0.8, "angle": 11.03 }
-				]
-			},
-			"front-shin": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 0,
-						"curve": [ 0.481, 0.01, 0.75, 1 ]
-					},
-					{ "time": 0.0667, "angle": -64.42 },
-					{
-						"time": 0.1333,
-						"angle": -20.6,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 0.2667, "angle": -62.52 },
-					{ "time": 0.3333, "angle": -79.75 },
-					{ "time": 0.4, "angle": -78.28 },
-					{
-						"time": 0.4667,
-						"angle": -118.96,
-						"curve": [ 0.93, 0.01, 0.953, 0.95 ]
-					},
-					{ "time": 0.6, "angle": -88.96 },
-					{ "time": 0.6667, "angle": -79.1 },
-					{ "time": 0.7333, "angle": -47.78 },
-					{ "time": 0.8, "angle": 0 }
-				]
-			},
-			"front-foot": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{
-						"time": 0.0333,
-						"angle": -21.13,
-						"curve": [ 0.121, 0.24, 0.75, 1 ]
-					},
-					{ "time": 0.0667, "angle": 17.64 },
-					{ "time": 0.1, "angle": 29.93 },
-					{ "time": 0.1333, "angle": 16.45 },
-					{ "time": 0.2, "angle": -29.23 },
-					{ "time": 0.2667, "angle": -1.62 },
-					{ "time": 0.3333, "angle": -10.23 },
-					{ "time": 0.4667, "angle": -15.99 },
-					{ "time": 0.6, "angle": 9.03 },
-					{ "time": 0.7333, "angle": 17.33 },
-					{ "time": 0.8, "angle": 0 }
-				]
-			},
-			"rear-foot": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{ "time": 0.0667, "angle": -12.04 },
-					{ "time": 0.1333, "angle": -0.87 },
-					{ "time": 0.2, "angle": 25.81 },
-					{ "time": 0.2667, "angle": 4.71 },
-					{
-						"time": 0.4,
-						"angle": 18.09,
-						"curve": [ 0.281, 0.74, 0.75, 1 ]
-					},
-					{ "time": 0.4333, "angle": -1.71 },
-					{ "time": 0.4667, "angle": 27.13 },
-					{ "time": 0.5, "angle": 38.84 },
-					{ "time": 0.5333, "angle": 30.77 },
-					{ "time": 0.5667, "angle": -20.49 },
-					{ "time": 0.6, "angle": -30.81 },
-					{ "time": 0.6667, "angle": -1.32 },
-					{ "time": 0.8, "angle": 0 }
-				]
-			},
-			"gun": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{ "time": 0.1333, "angle": 24.73 },
-					{ "time": 0.5, "angle": -11.88 },
-					{ "time": 0.8, "angle": 0 }
-				]
-			},
-			"hip": {
-				"translate": [
-					{ "time": 0, "x": -62.48, "y": -23.11 },
-					{
-						"time": 0.0667,
-						"x": -62.48,
-						"y": -38.51,
-						"curve": [ 0.244, 0.04, 0.75, 1 ]
-					},
-					{
-						"time": 0.2667,
-						"x": -62.48,
-						"y": 22.29,
-						"curve": [ 0.17, 0.53, 0.75, 1 ]
-					},
-					{ "time": 0.4, "x": -62.48, "y": -23.11 },
-					{ "time": 0.4333, "x": -62.48, "y": -24.59 },
-					{
-						"time": 0.4667,
-						"x": -62.48,
-						"y": -43.29,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 0.6667, "x": -62.48, "y": 22.29 },
-					{ "time": 0.8, "x": -62.48, "y": -23.11 }
-				]
-			},
-			"dust": {
-				"translate": [
-					{
-						"time": 0,
-						"x": -243.52,
-						"y": 0,
-						"curve": [ 0.366, 0.64, 0.703, 1 ]
-					},
-					{ "time": 0.0333, "x": -253.13, "y": 0, "curve": "stepped" },
-					{
-						"time": 0.1667,
-						"x": 0,
-						"y": 0,
-						"curve": [ 0.201, 0.25, 0.75, 1 ]
-					},
-					{ "time": 0.4667, "x": -253.13, "y": 0, "curve": "stepped" },
-					{
-						"time": 0.5333,
-						"x": 0,
-						"y": 0,
-						"curve": [ 0.198, 0.23, 0.698, 0.86 ]
-					},
-					{ "time": 0.8, "x": -243.52, "y": 0 }
-				],
-				"scale": [
-					{ "time": 0, "x": 0.77, "y": 0.77 },
-					{ "time": 0.0333, "x": 0.741, "y": 0.741 },
-					{ "time": 0.1667, "x": 1, "y": 1 },
-					{ "time": 0.4667, "x": 0.741, "y": 0.741 },
-					{ "time": 0.5333, "x": 1, "y": 1 },
-					{ "time": 0.8, "x": 0.77, "y": 0.77 }
-				]
-			}
-		},
-		"events": [
-			{ "time": 0, "name": "footstep" },
-			{ "time": 0.4333, "name": "footstep", "int": 1 }
-		]
-	},
-	"shoot": {
-		"slots": {
-			"muzzle": {
-				"color": [
-					{ "time": 0.3667, "color": "ffffff00" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "muzzle01" },
-					{ "time": 0.2, "name": "muzzle02" },
-					{ "time": 0.2667, "name": "muzzle03" },
-					{ "time": 0.3333, "name": "muzzle04" },
-					{ "time": 0.3667, "name": null }
-				]
-			}
-		},
-		"bones": {
-			"gun-tip": {
-				"translate": [
-					{ "time": 0.1333, "x": 0, "y": 0 },
-					{ "time": 0.2333, "x": 32.31, "y": 2.94 }
-				]
-			},
-			"gun": {
-				"rotate": [
-					{ "time": 0, "angle": 1.91 }
-				],
-				"translate": [
-					{
-						"time": 0,
-						"x": 7.95,
-						"y": 5.85,
-						"curve": [ 0, 0.3, 0.679, 1 ]
-					},
-					{ "time": 0.3, "x": -9.3, "y": -1.41 },
-					{ "time": 0.4, "x": 0, "y": 0 }
-				]
-			},
-			"rear-bracer": {
-				"rotate": [
-					{ "time": 0, "angle": -30.47 }
-				],
-				"translate": [
-					{
-						"time": 0,
-						"x": 0,
-						"y": 0,
-						"curve": [ 0, 0.3, 0.679, 1 ]
-					},
-					{ "time": 0.3, "x": -6, "y": -3.72 },
-					{ "time": 0.4, "x": 0, "y": 0 }
-				]
-			},
-			"rear-upper-arm": {
-				"rotate": [
-					{ "time": 0, "angle": 62.31 }
-				],
-				"translate": [
-					{
-						"time": 0,
-						"x": 0,
-						"y": 0,
-						"curve": [ 0, 0.3, 0.679, 1 ]
-					},
-					{ "time": 0.3, "x": 2.81, "y": 11.42 },
-					{ "time": 0.4, "x": 0, "y": 0 }
-				]
-			}
-		}
-	},
-	"walk": {
-		"bones": {
-			"front-thigh": {
-				"rotate": [
-					{ "time": 0, "angle": 15.79 },
-					{ "time": 0.1, "angle": 27.4 },
-					{ "time": 0.2, "angle": -7.95 },
-					{ "time": 0.3, "angle": -16.95 },
-					{ "time": 0.4, "angle": -28.62 },
-					{ "time": 0.5, "angle": -19.31 },
-					{ "time": 0.6, "angle": -3.09 },
-					{ "time": 0.7, "angle": 29.52 },
-					{ "time": 0.8, "angle": 15.79 }
-				],
-				"translate": [
-					{ "time": 0, "x": 0, "y": 0 },
-					{ "time": 0.4, "x": -1.19, "y": 0.55 },
-					{ "time": 0.5, "x": 0.12, "y": 0.41 },
-					{ "time": 0.6, "x": 9.49, "y": 0.27 },
-					{ "time": 0.8, "x": 0, "y": 0 }
-				]
-			},
-			"front-shin": {
-				"rotate": [
-					{ "time": 0, "angle": 5.13 },
-					{ "time": 0.1, "angle": -20.88 },
-					{ "time": 0.2, "angle": 13.37 },
-					{ "time": 0.3, "angle": 15.99 },
-					{ "time": 0.4, "angle": 5.95 },
-					{ "time": 0.5, "angle": -26.77 },
-					{ "time": 0.7, "angle": -55.44 },
-					{ "time": 0.8, "angle": 5.13 }
-				]
-			},
-			"rear-thigh": {
-				"rotate": [
-					{ "time": 0, "angle": -34.38 },
-					{ "time": 0.1, "angle": -30.33 },
-					{ "time": 0.2, "angle": -37.22 },
-					{ "time": 0.3, "angle": 20.73 },
-					{ "time": 0.4, "angle": 8.69 },
-					{ "time": 0.5, "angle": 12.16 },
-					{ "time": 0.6, "angle": -24.62 },
-					{ "time": 0.7, "angle": -27.27 },
-					{ "time": 0.8, "angle": -34.38 }
-				],
-				"translate": [
-					{ "time": 0, "x": 0, "y": 0 },
-					{ "time": 0.4, "x": 4.09, "y": -9.53 },
-					{ "time": 0.5, "x": 0, "y": 0 },
-					{ "time": 0.7, "x": -21.14, "y": -9.61 },
-					{ "time": 0.8, "x": 0, "y": 0 }
-				]
-			},
-			"rear-shin": {
-				"rotate": [
-					{ "time": 0, "angle": 14.26 },
-					{ "time": 0.1, "angle": -17.3 },
-					{ "time": 0.2, "angle": -12.68 },
-					{ "time": 0.3, "angle": -58.9 },
-					{ "time": 0.4, "angle": 15.95 },
-					{ "time": 0.5, "angle": -9.01 },
-					{ "time": 0.6, "angle": 26.07 },
-					{ "time": 0.7, "angle": 21.86 },
-					{ "time": 0.8, "angle": 14.26 }
-				],
-				"scale": [
-					{ "time": 0, "x": 1, "y": 1 },
-					{ "time": 0.1, "x": 0.952, "y": 1 },
-					{ "time": 0.5, "x": 0.976, "y": 1 },
-					{ "time": 0.8, "x": 1, "y": 1 }
-				]
-			},
-			"rear-foot": {
-				"rotate": [
-					{ "time": 0, "angle": 10.13 },
-					{ "time": 0.1, "angle": 12.28 },
-					{ "time": 0.2, "angle": -2.95 },
-					{ "time": 0.3, "angle": 6.29 },
-					{ "time": 0.4, "angle": 13.46 },
-					{ "time": 0.5, "angle": -3.57 },
-					{ "time": 0.6, "angle": -0.97 },
-					{ "time": 0.7, "angle": 2.98 },
-					{ "time": 0.8, "angle": 10.13 }
-				]
-			},
-			"front-upper-arm": {
-				"rotate": [
-					{ "time": 0, "angle": -23.74 },
-					{ "time": 0.4, "angle": -320.57 },
-					{ "time": 0.8, "angle": -23.74 }
-				]
-			},
-			"rear-upper-arm": {
-				"rotate": [
-					{ "time": 0, "angle": 11.63 },
-					{ "time": 0.1, "angle": 19.37 },
-					{ "time": 0.4, "angle": 345.27 },
-					{ "time": 0.5, "angle": 343.44 },
-					{ "time": 0.8, "angle": 11.63 }
-				]
-			},
-			"torso": {
-				"rotate": [
-					{ "time": 0, "angle": -12.11 },
-					{ "time": 0.1667, "angle": -17.16 },
-					{ "time": 0.4, "angle": -12.11 },
-					{ "time": 0.5667, "angle": -15.81 },
-					{ "time": 0.8, "angle": -12.11 }
-				]
-			},
-			"neck": {
-				"rotate": [
-					{ "time": 0, "angle": 1.41 },
-					{ "time": 0.2333, "angle": -3.04 },
-					{ "time": 0.4, "angle": 1.41 },
-					{ "time": 0.6333, "angle": -3.04 },
-					{ "time": 0.8, "angle": 1.41 }
-				]
-			},
-			"head": {
-				"rotate": [
-					{ "time": 0, "angle": 6.98 },
-					{ "time": 0.1667, "angle": 8.02 },
-					{ "time": 0.2667, "angle": 12.65 },
-					{ "time": 0.4, "angle": 6.98 },
-					{ "time": 0.5667, "angle": 8.02 },
-					{ "time": 0.6667, "angle": 12.65 },
-					{ "time": 0.8, "angle": 6.98 }
-				]
-			},
-			"front-bracer": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{ "time": 0.4, "angle": 20.6 },
-					{ "time": 0.8, "angle": 0 }
-				]
-			},
-			"front-foot": {
-				"rotate": [
-					{ "time": 0, "angle": 12.49 },
-					{ "time": 0.1, "angle": -6.36 },
-					{ "time": 0.2, "angle": -6.18 },
-					{ "time": 0.3, "angle": -0.76 },
-					{ "time": 0.3333, "angle": 3.89 },
-					{ "time": 0.4, "angle": 10.22 },
-					{ "time": 0.5, "angle": 11.44 },
-					{ "time": 0.6, "angle": -0.34 },
-					{ "time": 0.7, "angle": 0.15 },
-					{ "time": 0.8, "angle": 12.49 }
-				]
-			},
-			"rear-bracer": {
-				"rotate": [
-					{ "time": 0, "angle": 3.59 },
-					{ "time": 0.1, "angle": 5.51 },
-					{ "time": 0.4, "angle": -22.78 },
-					{ "time": 0.5, "angle": -9.65 },
-					{ "time": 0.8, "angle": 3.59 }
-				]
-			},
-			"front-fist": {
-				"rotate": [
-					{ "time": 0, "angle": -15.22 },
-					{ "time": 0.1, "angle": -51.4 },
-					{ "time": 0.4, "angle": -39.4 },
-					{ "time": 0.5, "angle": 19.26 },
-					{ "time": 0.8, "angle": -15.22 }
-				]
-			},
-			"gun": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": -24.07,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{
-						"time": 0.1,
-						"angle": -10.95,
-						"curve": [ 0.381, 0.55, 0.742, 1 ]
-					},
-					{
-						"time": 0.4,
-						"angle": 25.34,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{
-						"time": 0.6667,
-						"angle": -27.48,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 0.8, "angle": -24.07 }
-				]
-			},
-			"hip": {
-				"translate": [
-					{
-						"time": 0,
-						"x": -23.93,
-						"y": 3.22,
-						"curve": [ 0.519, 0.04, 0.807, 0.61 ]
-					},
-					{ "time": 0.1, "x": -23.93, "y": -3.36 },
-					{ "time": 0.1333, "x": -23.93, "y": 1.44 },
-					{ "time": 0.1667, "x": -23.93, "y": 2.88 },
-					{ "time": 0.2, "x": -23.93, "y": 0.99 },
-					{
-						"time": 0.3,
-						"x": -23.93,
-						"y": -3.5,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{
-						"time": 0.4,
-						"x": -23.93,
-						"y": -2.5,
-						"curve": [ 0.693, 0.02, 0.75, 1 ]
-					},
-					{
-						"time": 0.5,
-						"x": -23.93,
-						"y": -10.32,
-						"curve": [ 0.236, 0.78, 0.75, 1 ]
-					},
-					{
-						"time": 0.6,
-						"x": -23.93,
-						"y": 4.36,
-						"curve": [ 0.287, 0.38, 0.719, 0.77 ]
-					},
-					{
-						"time": 0.7,
-						"x": -23.93,
-						"y": 10.35,
-						"curve": [ 0.616, 0, 0.75, 1 ]
-					},
-					{ "time": 0.8, "x": -23.93, "y": 3.22 }
-				]
-			}
-		}
-	}
-}
-}

BIN
spine-sfml/data/spineboy-ess.skel


+ 0 - 307
spine-sfml/data/spineboy.atlas

@@ -1,307 +0,0 @@
-
-spineboy.png
-size: 1024,512
-format: RGBA8888
-filter: Linear,Linear
-repeat: none
-crosshair
-  rotate: false
-  xy: 794, 167
-  size: 45, 45
-  orig: 45, 45
-  offset: 0, 0
-  index: -1
-dust01
-  rotate: false
-  xy: 960, 190
-  size: 48, 37
-  orig: 48, 37
-  offset: 0, 0
-  index: -1
-dust02
-  rotate: false
-  xy: 392, 2
-  size: 43, 44
-  orig: 43, 44
-  offset: 0, 0
-  index: -1
-dust03
-  rotate: false
-  xy: 841, 163
-  size: 31, 26
-  orig: 31, 26
-  offset: 0, 0
-  index: -1
-eye-indifferent
-  rotate: false
-  xy: 960, 229
-  size: 47, 45
-  orig: 47, 45
-  offset: 0, 0
-  index: -1
-eye-surprised
-  rotate: false
-  xy: 745, 167
-  size: 47, 45
-  orig: 47, 45
-  offset: 0, 0
-  index: -1
-front-bracer
-  rotate: false
-  xy: 547, 2
-  size: 29, 40
-  orig: 29, 40
-  offset: 0, 0
-  index: -1
-front-fist-closed
-  rotate: false
-  xy: 920, 190
-  size: 38, 41
-  orig: 38, 41
-  offset: 0, 0
-  index: -1
-front-fist-open
-  rotate: false
-  xy: 437, 2
-  size: 43, 44
-  orig: 43, 44
-  offset: 0, 0
-  index: -1
-front-foot
-  rotate: false
-  xy: 482, 11
-  size: 63, 35
-  orig: 63, 35
-  offset: 0, 0
-  index: -1
-front-shin
-  rotate: true
-  xy: 866, 233
-  size: 41, 92
-  orig: 41, 92
-  offset: 0, 0
-  index: -1
-front-thigh
-  rotate: false
-  xy: 719, 155
-  size: 24, 56
-  orig: 24, 56
-  offset: 0, 0
-  index: -1
-front-upper-arm
-  rotate: false
-  xy: 719, 104
-  size: 27, 49
-  orig: 27, 49
-  offset: 0, 0
-  index: -1
-goggles
-  rotate: false
-  xy: 881, 276
-  size: 131, 83
-  orig: 131, 83
-  offset: 0, 0
-  index: -1
-gun
-  rotate: false
-  xy: 612, 109
-  size: 105, 102
-  orig: 105, 102
-  offset: 0, 0
-  index: -1
-head
-  rotate: false
-  xy: 881, 361
-  size: 136, 149
-  orig: 136, 149
-  offset: 0, 0
-  index: -1
-hoverboard-board
-  rotate: false
-  xy: 2, 38
-  size: 246, 76
-  orig: 246, 76
-  offset: 0, 0
-  index: -1
-hoverboard-thruster
-  rotate: true
-  xy: 578, 12
-  size: 30, 32
-  orig: 30, 32
-  offset: 0, 0
-  index: -1
-hoverglow-small
-  rotate: true
-  xy: 572, 44
-  size: 137, 38
-  orig: 137, 38
-  offset: 0, 0
-  index: -1
-mouth-grind
-  rotate: true
-  xy: 713, 55
-  size: 47, 30
-  orig: 47, 30
-  offset: 0, 0
-  index: -1
-mouth-oooo
-  rotate: true
-  xy: 713, 6
-  size: 47, 30
-  orig: 47, 30
-  offset: 0, 0
-  index: -1
-mouth-smile
-  rotate: false
-  xy: 748, 135
-  size: 47, 30
-  orig: 47, 30
-  offset: 0, 0
-  index: -1
-muzzle-glow
-  rotate: false
-  xy: 612, 8
-  size: 99, 99
-  orig: 99, 99
-  offset: 0, 0
-  index: -1
-muzzle-ring
-  rotate: false
-  xy: 302, 190
-  size: 25, 105
-  orig: 25, 105
-  offset: 0, 0
-  index: -1
-muzzle01
-  rotate: false
-  xy: 336, 335
-  size: 271, 175
-  orig: 271, 175
-  offset: 0, 0
-  index: -1
-muzzle02
-  rotate: false
-  xy: 609, 341
-  size: 270, 169
-  orig: 270, 169
-  offset: 0, 0
-  index: -1
-muzzle03
-  rotate: false
-  xy: 2, 297
-  size: 332, 213
-  orig: 332, 213
-  offset: 0, 0
-  index: -1
-muzzle04
-  rotate: false
-  xy: 2, 116
-  size: 298, 179
-  orig: 298, 179
-  offset: 0, 0
-  index: -1
-muzzle05
-  rotate: false
-  xy: 336, 183
-  size: 269, 150
-  orig: 269, 150
-  offset: 0, 0
-  index: -1
-neck
-  rotate: false
-  xy: 841, 191
-  size: 18, 21
-  orig: 18, 21
-  offset: 0, 0
-  index: -1
-portal-bg
-  rotate: false
-  xy: 302, 48
-  size: 133, 133
-  orig: 133, 133
-  offset: 0, 0
-  index: -1
-portal-flare1
-  rotate: false
-  xy: 180, 6
-  size: 56, 30
-  orig: 56, 30
-  offset: 0, 0
-  index: -1
-portal-flare2
-  rotate: false
-  xy: 2, 5
-  size: 57, 31
-  orig: 57, 31
-  offset: 0, 0
-  index: -1
-portal-flare3
-  rotate: false
-  xy: 61, 6
-  size: 58, 30
-  orig: 58, 30
-  offset: 0, 0
-  index: -1
-portal-shade
-  rotate: false
-  xy: 437, 48
-  size: 133, 133
-  orig: 133, 133
-  offset: 0, 0
-  index: -1
-portal-streaks1
-  rotate: true
-  xy: 609, 213
-  size: 126, 128
-  orig: 126, 128
-  offset: 0, 0
-  index: -1
-portsl-streaks2
-  rotate: false
-  xy: 739, 214
-  size: 125, 125
-  orig: 125, 125
-  offset: 0, 0
-  index: -1
-rear-bracer
-  rotate: true
-  xy: 797, 137
-  size: 28, 36
-  orig: 28, 36
-  offset: 0, 0
-  index: -1
-rear-foot
-  rotate: false
-  xy: 121, 6
-  size: 57, 30
-  orig: 57, 30
-  offset: 0, 0
-  index: -1
-rear-shin
-  rotate: true
-  xy: 301, 8
-  size: 38, 89
-  orig: 38, 89
-  offset: 0, 0
-  index: -1
-rear-thigh
-  rotate: true
-  xy: 866, 198
-  size: 33, 52
-  orig: 33, 52
-  offset: 0, 0
-  index: -1
-rear-upper-arm
-  rotate: true
-  xy: 748, 109
-  size: 24, 44
-  orig: 24, 44
-  offset: 0, 0
-  index: -1
-torso
-  rotate: false
-  xy: 250, 24
-  size: 49, 90
-  orig: 49, 90
-  offset: 0, 0
-  index: -1

BIN
spine-sfml/data/spineboy.png


Fișier diff suprimat deoarece este prea mare
+ 0 - 283
spine-sfml/data/stretchyman-pro.json


BIN
spine-sfml/data/stretchyman-pro.skel


+ 0 - 41
spine-sfml/data/stretchyman.atlas

@@ -1,41 +0,0 @@
-
-stretchyman.png
-size: 1024,256
-format: RGBA8888
-filter: Linear,Linear
-repeat: none
-back-arm
-  rotate: true
-  xy: 679, 173
-  size: 72, 202
-  orig: 72, 202
-  offset: 0, 0
-  index: -1
-back-leg
-  rotate: true
-  xy: 2, 2
-  size: 100, 318
-  orig: 100, 318
-  offset: 0, 0
-  index: -1
-body
-  rotate: true
-  xy: 2, 104
-  size: 141, 452
-  orig: 141, 452
-  offset: 0, 0
-  index: -1
-front-arm
-  rotate: true
-  xy: 456, 100
-  size: 145, 221
-  orig: 145, 221
-  offset: 0, 0
-  index: -1
-head
-  rotate: true
-  xy: 322, 15
-  size: 87, 102
-  orig: 87, 102
-  offset: 0, 0
-  index: -1

BIN
spine-sfml/data/stretchyman.png


+ 0 - 3842
spine-sfml/data/tank-pro.json

@@ -1,3842 +0,0 @@
-{
-"skeleton": {
-	"hash": "JWZpG/bZaODL9WMrHd/eWznhkD0",
-	"spine": "3.7.08-beta",
-	"width": 7202.61,
-	"height": 1298.88,
-	"images": "./images/",
-	"audio": ""
-},
-"bones": [
-	{ "name": "root" },
-	{ "name": "tank-root", "parent": "root", "y": 146.79 },
-	{ "name": "tank-treads", "parent": "tank-root", "y": 48.35 },
-	{ "name": "tank-body", "parent": "tank-treads", "y": 10 },
-	{ "name": "guntower", "parent": "tank-body", "x": -21.72, "y": 245.48 },
-	{ "name": "antenna-root", "parent": "guntower", "x": 164.61, "y": 202.53 },
-	{ "name": "antenna1", "parent": "antenna-root", "length": 40, "rotation": 90, "y": 40, "color": "ffee00ff" },
-	{ "name": "antenna2", "parent": "antenna1", "length": 42, "x": 42, "color": "ffee00ff" },
-	{ "name": "antenna3", "parent": "antenna2", "length": 42, "x": 42, "color": "ffee00ff" },
-	{ "name": "antenna4", "parent": "antenna3", "length": 42, "x": 42, "color": "ffee00ff" },
-	{ "name": "antenna5", "parent": "antenna4", "length": 42, "x": 42, "color": "ffee00ff" },
-	{ "name": "antenna6", "parent": "antenna5", "length": 42, "x": 42, "color": "ffee00ff" },
-	{ "name": "cannon-connector", "parent": "guntower", "x": -235.05, "y": 96.07 },
-	{ "name": "cannon-target", "parent": "tank-root", "x": -2276.67, "y": 400.17, "color": "0096ffff" },
-	{ "name": "cannon", "parent": "cannon-connector", "length": 946.68, "rotation": 180, "color": "ff4000ff" },
-	{
-		"name": "machinegun-mount",
-		"parent": "guntower",
-		"length": 90.98,
-		"rotation": 90,
-		"x": -123.73,
-		"y": 218.33,
-		"color": "15ff00ff"
-	},
-	{ "name": "machinegun-target", "parent": "tank-root", "x": -2272.76, "y": 607.77, "color": "0096ffff" },
-	{
-		"name": "machinegun",
-		"parent": "machinegun-mount",
-		"length": 208.95,
-		"rotation": 90,
-		"x": 91.52,
-		"y": -1.03,
-		"color": "15ff00ff"
-	},
-	{ "name": "machinegun-tip", "parent": "machinegun", "x": 210.43, "y": -12.21 },
-	{ "name": "rock", "parent": "root", "x": -1925.2, "y": 33.17 },
-	{ "name": "smoke-root", "parent": "tank-root", "x": -1200.38, "y": 405.76, "scaleX": -6.5, "scaleY": 6.5, "color": "ff4000ff" },
-	{
-		"name": "smoke1",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke2",
-		"parent": "smoke-root",
-		"rotation": -84.14,
-		"x": 45.06,
-		"y": 29.7,
-		"scaleX": 3.334,
-		"scaleY": 3.334,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke3",
-		"parent": "smoke-root",
-		"rotation": -87.91,
-		"x": 55.15,
-		"y": -17.5,
-		"scaleX": 3.041,
-		"scaleY": 4.157,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke4",
-		"parent": "smoke-root",
-		"rotation": -87.91,
-		"x": 69.25,
-		"y": 8.01,
-		"scaleX": 2.181,
-		"scaleY": 2.981,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke5",
-		"parent": "smoke-root",
-		"rotation": -87.91,
-		"x": 80.63,
-		"y": 59.88,
-		"scaleX": 4.512,
-		"scaleY": 2.972,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke6",
-		"parent": "smoke-root",
-		"rotation": -87.91,
-		"x": 96.19,
-		"y": 25.65,
-		"scaleX": 3.791,
-		"scaleY": 3.055,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke7",
-		"parent": "smoke-root",
-		"rotation": 153.68,
-		"x": 85.65,
-		"y": -50.47,
-		"scaleX": 4.852,
-		"scaleY": 3.653,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke8",
-		"parent": "smoke-root",
-		"rotation": 67.58,
-		"x": 47.85,
-		"y": -42.55,
-		"scaleX": 4.001,
-		"scaleY": 3.48,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke9",
-		"parent": "smoke-root",
-		"rotation": 150.05,
-		"x": 104.02,
-		"y": -8.73,
-		"scaleX": 4.207,
-		"scaleY": 3.076,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke10",
-		"parent": "smoke-root",
-		"rotation": -103.52,
-		"x": 25.45,
-		"y": 2.48,
-		"scaleX": 3.901,
-		"scaleY": 2.852,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke11",
-		"parent": "smoke-root",
-		"rotation": -103.52,
-		"x": 25.45,
-		"y": 2.48,
-		"scaleX": 3.901,
-		"scaleY": 2.852,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke12",
-		"parent": "smoke-root",
-		"rotation": -103.52,
-		"x": 25.45,
-		"y": 2.48,
-		"scaleX": 3.901,
-		"scaleY": 2.852,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke13",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke14",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke15",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke16",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke17",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke18",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke20",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke21",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke22",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke23",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke24",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke25",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke26",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{
-		"name": "smoke27",
-		"parent": "smoke-root",
-		"rotation": -179.99,
-		"x": 14.75,
-		"y": -1.55,
-		"scaleX": 1.648,
-		"scaleY": 1.648,
-		"color": "ff4000ff"
-	},
-	{ "name": "smoke-glow", "parent": "smoke-root", "x": 62.92, "y": -0.71, "color": "ff4000ff" },
-	{ "name": "tank-glow", "parent": "tank-root", "x": -247.72, "y": 404.37, "scaleX": 1.058, "scaleY": 0.678 },
-	{
-		"name": "tread",
-		"parent": "tank-root",
-		"length": 82,
-		"rotation": 180,
-		"x": -22.9,
-		"y": 213.86,
-		"scaleX": 0.993,
-		"color": "e64344ff"
-	},
-	{ "name": "tread2", "parent": "tread", "length": 82, "x": 82, "color": "e64344ff" },
-	{ "name": "tread3", "parent": "tread", "length": 82, "rotation": -8.91, "x": 163.01, "y": -12.61, "color": "e64344ff" },
-	{ "name": "tread4", "parent": "tread", "length": 82, "rotation": -29.27, "x": 234.55, "y": -52.43, "color": "e64344ff" },
-	{ "name": "tread5", "parent": "tread", "length": 82, "rotation": -45.26, "x": 292.26, "y": -110.28, "color": "e64344ff" },
-	{ "name": "tread6", "parent": "tread", "length": 82, "rotation": -15.29, "x": 371.36, "y": -131.76, "color": "e64344ff" },
-	{ "name": "tread7", "parent": "tread", "length": 82, "rotation": -5.49, "x": 452.98, "y": -139.55, "color": "e64344ff" },
-	{ "name": "tread8", "parent": "tread", "length": 82, "rotation": -24.99, "x": 527.31, "y": -173.95, "color": "e64344ff" },
-	{ "name": "tread9", "parent": "tread", "length": 82, "rotation": -5.44, "x": 608.94, "y": -181.68, "color": "e64344ff" },
-	{ "name": "tread10", "parent": "tread", "length": 82, "rotation": 48.85, "x": 662.9, "y": -120.35, "color": "e64344ff" },
-	{ "name": "tread11", "parent": "tread", "length": 82, "rotation": 97.99, "x": 651.5, "y": -39.69, "color": "e64344ff" },
-	{ "name": "tread12", "parent": "tread", "length": 82, "rotation": 113.79, "x": 618.43, "y": 34.83, "color": "e64344ff" },
-	{ "name": "tread13", "parent": "tread", "length": 82, "rotation": 122.96, "x": 573.82, "y": 103.18, "color": "e64344ff" },
-	{ "name": "tread14", "parent": "tread", "length": 82, "rotation": 142.01, "x": 509.19, "y": 153.3, "color": "e64344ff" },
-	{ "name": "tread15", "parent": "tread", "length": 82, "rotation": 157.84, "x": 433.25, "y": 184.02, "color": "e64344ff" },
-	{ "name": "tread16", "parent": "tread", "length": 82, "rotation": 157.37, "x": 357.56, "y": 215.37, "color": "e64344ff" },
-	{ "name": "tread17", "parent": "tread", "length": 82, "rotation": 157.29, "x": 281.92, "y": 246.8, "color": "e64344ff" },
-	{ "name": "tread18", "parent": "tread", "length": 82, "rotation": 157.19, "x": 206.33, "y": 278.38, "color": "e64344ff" },
-	{ "name": "tread19", "parent": "tread", "length": 82, "rotation": 157.14, "x": 130.77, "y": 310.02, "color": "e64344ff" },
-	{ "name": "tread20", "parent": "tread", "length": 82, "rotation": 157.34, "x": 55.1, "y": 341.41, "color": "e64344ff" },
-	{ "name": "tread21", "parent": "tread", "length": 82, "rotation": 158.11, "x": -20.99, "y": 371.77, "color": "e64344ff" },
-	{ "name": "tread22", "parent": "tread", "length": 82, "rotation": 157.99, "x": -97.02, "y": 402.28, "color": "e64344ff" },
-	{ "name": "tread23", "parent": "tread", "length": 82, "rotation": 157.59, "x": -172.83, "y": 433.33, "color": "e64344ff" },
-	{ "name": "tread24", "parent": "tread", "length": 82, "rotation": 156.86, "x": -248.23, "y": 465.34, "color": "e64344ff" },
-	{ "name": "tread25", "parent": "tread", "length": 82, "rotation": 177.94, "x": -330.17, "y": 468.27, "color": "e64344ff" },
-	{ "name": "tread26", "parent": "tread", "length": 82, "rotation": -169.55, "x": -410.81, "y": 453.5, "color": "e64344ff" },
-	{ "name": "tread27", "parent": "tread", "length": 82, "rotation": -163.86, "x": -489.58, "y": 430.86, "color": "e64344ff" },
-	{ "name": "tread28", "parent": "tread", "length": 82, "rotation": -139.13, "x": -551.59, "y": 377.57, "color": "e64344ff" },
-	{ "name": "tread29", "parent": "tread", "length": 82, "rotation": -89.04, "x": -550.21, "y": 296.14, "color": "e64344ff" },
-	{ "name": "tread30", "parent": "tread", "length": 82, "rotation": -38.99, "x": -486.48, "y": 244.89, "color": "e64344ff" },
-	{ "name": "tread31", "parent": "tread", "length": 82, "rotation": -20.04, "x": -409.45, "y": 216.98, "color": "e64344ff" },
-	{ "name": "tread32", "parent": "tread", "length": 82, "rotation": -46.24, "x": -352.74, "y": 158.15, "color": "e64344ff" },
-	{ "name": "tread33", "parent": "tread", "length": 82, "rotation": -27.95, "x": -280.3, "y": 119.98, "color": "e64344ff" },
-	{ "name": "tread34", "parent": "tread", "length": 82, "rotation": 10.46, "x": -199.66, "y": 134.77, "color": "e64344ff" },
-	{ "name": "tread35", "parent": "tread", "length": 82, "rotation": -17.9, "x": -121.63, "y": 109.73, "color": "e64344ff" },
-	{ "name": "tread36", "parent": "tread", "length": 82, "rotation": -36.82, "x": -55.99, "y": 60.92, "color": "fbff00ff" },
-	{ "name": "wheel-mid-center", "parent": "tank-root", "y": -66.21 },
-	{ "name": "tread-collider1", "parent": "wheel-mid-center", "x": -329.58, "y": -85.44, "color": "ff00fbff" },
-	{ "name": "tread-collider2", "parent": "wheel-mid-center", "x": -165.95, "y": -85.44, "color": "ff00fbff" },
-	{ "name": "tread-collider3", "parent": "wheel-mid-center", "y": -85.44, "color": "ff00fbff" },
-	{ "name": "tread-collider4", "parent": "wheel-mid-center", "x": 163.56, "y": -85.44, "color": "ff00fbff" },
-	{ "name": "tread-collider5", "parent": "wheel-mid-center", "x": 329.12, "y": -85.44, "color": "ff00fbff" },
-	{ "name": "tread-gravity1", "parent": "tank-root", "rotation": 180, "x": -175.35, "y": 149.31, "color": "ff00fbff" },
-	{ "name": "tread-gravity2", "parent": "tank-root", "rotation": 180, "x": 177.89, "y": 144.78, "color": "ff00fbff" },
-	{ "name": "wheel-big-root1", "parent": "tank-treads", "x": -549.6, "y": 14.4, "color": "abe323ff" },
-	{ "name": "wheel-big1", "parent": "wheel-big-root1", "x": -0.02, "color": "abe323ff" },
-	{ "name": "wheel-big-root2", "parent": "tank-treads", "x": 547.34, "y": 14.4 },
-	{ "name": "wheel-big2", "parent": "wheel-big-root2" },
-	{ "name": "wheel-mid-root1", "parent": "wheel-mid-center", "x": -410.57, "color": "abe323ff" },
-	{ "name": "wheel-mid1", "parent": "wheel-mid-root1", "color": "abe323ff" },
-	{ "name": "wheel-mid-root2", "parent": "wheel-mid-center", "x": -246.95 },
-	{ "name": "wheel-mid2", "parent": "wheel-mid-root2" },
-	{ "name": "wheel-mid-root3", "parent": "wheel-mid-center", "x": -82.73 },
-	{ "name": "wheel-mid3", "parent": "wheel-mid-root3" },
-	{ "name": "wheel-mid-root4", "parent": "wheel-mid-center", "x": 80.89 },
-	{ "name": "wheel-mid4", "parent": "wheel-mid-root4" },
-	{ "name": "wheel-mid-root5", "parent": "wheel-mid-center", "x": 244.51 },
-	{ "name": "wheel-mid5", "parent": "wheel-mid-root5" },
-	{ "name": "wheel-mid-root6", "parent": "wheel-mid-center", "x": 408.74 },
-	{ "name": "wheel-mid6", "parent": "wheel-mid-root6" },
-	{ "name": "wheel-small-root1", "parent": "tank-treads", "x": -337.39, "y": 109.43 },
-	{ "name": "wheel-small1", "parent": "wheel-small-root1", "color": "abe323ff" },
-	{ "name": "wheel-small-root2", "parent": "tank-treads", "x": 0.09, "y": 109.43 },
-	{ "name": "wheel-small2", "parent": "wheel-small-root2" },
-	{ "name": "wheel-small-root3", "parent": "tank-treads", "x": 334.69, "y": 109.43 },
-	{ "name": "wheel-small3", "parent": "wheel-small-root3" }
-],
-"slots": [
-	{ "name": "rock", "bone": "rock", "attachment": "rock" },
-	{ "name": "ground", "bone": "root", "attachment": "ground" },
-	{ "name": "ground2", "bone": "root", "attachment": "ground" },
-	{ "name": "ground3", "bone": "root", "attachment": "ground" },
-	{ "name": "ground4", "bone": "root", "attachment": "ground" },
-	{ "name": "ground5", "bone": "root", "attachment": "ground" },
-	{ "name": "ground6", "bone": "root", "attachment": "ground" },
-	{ "name": "ground7", "bone": "root", "attachment": "ground" },
-	{ "name": "tank-body-shadow", "bone": "tank-body", "color": "ffffffb9", "attachment": "tank-bottom-shadow" },
-	{ "name": "bottom", "bone": "tank-body", "attachment": "tank-bottom" },
-	{ "name": "tread-inside1", "bone": "tread", "attachment": "tread-inside" },
-	{ "name": "tread-inside53", "bone": "tread27", "attachment": "tread-inside" },
-	{ "name": "tread-inside27", "bone": "tread14", "attachment": "tread-inside" },
-	{ "name": "tread-inside3", "bone": "tread2", "attachment": "tread-inside" },
-	{ "name": "tread-inside55", "bone": "tread28", "attachment": "tread-inside" },
-	{ "name": "tread-inside29", "bone": "tread15", "attachment": "tread-inside" },
-	{ "name": "tread-inside5", "bone": "tread3", "attachment": "tread-inside" },
-	{ "name": "tread-inside57", "bone": "tread29", "attachment": "tread-inside" },
-	{ "name": "tread-inside31", "bone": "tread16", "attachment": "tread-inside" },
-	{ "name": "tread-inside7", "bone": "tread4", "attachment": "tread-inside" },
-	{ "name": "tread-inside59", "bone": "tread30", "attachment": "tread-inside" },
-	{ "name": "tread-inside33", "bone": "tread17", "attachment": "tread-inside" },
-	{ "name": "tread-inside9", "bone": "tread5", "attachment": "tread-inside" },
-	{ "name": "tread-inside61", "bone": "tread31", "attachment": "tread-inside" },
-	{ "name": "tread-inside35", "bone": "tread18", "attachment": "tread-inside" },
-	{ "name": "tread-inside11", "bone": "tread6", "attachment": "tread-inside" },
-	{ "name": "tread-inside63", "bone": "tread32", "attachment": "tread-inside" },
-	{ "name": "tread-inside37", "bone": "tread19", "attachment": "tread-inside" },
-	{ "name": "tread-inside13", "bone": "tread7", "attachment": "tread-inside" },
-	{ "name": "tread-inside65", "bone": "tread33", "attachment": "tread-inside" },
-	{ "name": "tread-inside39", "bone": "tread20", "attachment": "tread-inside" },
-	{ "name": "tread-inside15", "bone": "tread8", "attachment": "tread-inside" },
-	{ "name": "tread-inside67", "bone": "tread34", "attachment": "tread-inside" },
-	{ "name": "tread-inside69", "bone": "tread35", "attachment": "tread-inside" },
-	{ "name": "tread-inside71", "bone": "tread36", "attachment": "tread-inside" },
-	{ "name": "tread-inside41", "bone": "tread21", "attachment": "tread-inside" },
-	{ "name": "tread-inside17", "bone": "tread9", "attachment": "tread-inside" },
-	{ "name": "tread-inside43", "bone": "tread22", "attachment": "tread-inside" },
-	{ "name": "tread-inside19", "bone": "tread10", "attachment": "tread-inside" },
-	{ "name": "tread-inside45", "bone": "tread23", "attachment": "tread-inside" },
-	{ "name": "tread-inside21", "bone": "tread11", "attachment": "tread-inside" },
-	{ "name": "tread-inside47", "bone": "tread24", "attachment": "tread-inside" },
-	{ "name": "tread-inside23", "bone": "tread12", "attachment": "tread-inside" },
-	{ "name": "tread-inside49", "bone": "tread25", "attachment": "tread-inside" },
-	{ "name": "tread-inside25", "bone": "tread13", "attachment": "tread-inside" },
-	{ "name": "tread-inside51", "bone": "tread26", "attachment": "tread-inside" },
-	{ "name": "tread-inside2", "bone": "tread", "attachment": "tread-inside" },
-	{ "name": "tread-inside54", "bone": "tread27", "attachment": "tread-inside" },
-	{ "name": "tread-inside28", "bone": "tread14", "attachment": "tread-inside" },
-	{ "name": "tread-inside4", "bone": "tread2", "attachment": "tread-inside" },
-	{ "name": "tread-inside56", "bone": "tread28", "attachment": "tread-inside" },
-	{ "name": "tread-inside30", "bone": "tread15", "attachment": "tread-inside" },
-	{ "name": "tread-inside6", "bone": "tread3", "attachment": "tread-inside" },
-	{ "name": "tread-inside58", "bone": "tread29", "attachment": "tread-inside" },
-	{ "name": "tread-inside32", "bone": "tread16", "attachment": "tread-inside" },
-	{ "name": "tread-inside8", "bone": "tread4", "attachment": "tread-inside" },
-	{ "name": "tread-inside60", "bone": "tread30", "attachment": "tread-inside" },
-	{ "name": "tread-inside34", "bone": "tread17", "attachment": "tread-inside" },
-	{ "name": "tread-inside10", "bone": "tread5", "attachment": "tread-inside" },
-	{ "name": "tread-inside62", "bone": "tread31", "attachment": "tread-inside" },
-	{ "name": "tread-inside36", "bone": "tread18", "attachment": "tread-inside" },
-	{ "name": "tread-inside12", "bone": "tread6", "attachment": "tread-inside" },
-	{ "name": "tread-inside64", "bone": "tread32", "attachment": "tread-inside" },
-	{ "name": "tread-inside38", "bone": "tread19", "attachment": "tread-inside" },
-	{ "name": "tread-inside14", "bone": "tread7", "attachment": "tread-inside" },
-	{ "name": "tread-inside66", "bone": "tread33", "attachment": "tread-inside" },
-	{ "name": "tread-inside40", "bone": "tread20", "attachment": "tread-inside" },
-	{ "name": "tread-inside16", "bone": "tread8", "attachment": "tread-inside" },
-	{ "name": "tread-inside68", "bone": "tread34", "attachment": "tread-inside" },
-	{ "name": "tread-inside70", "bone": "tread35", "attachment": "tread-inside" },
-	{ "name": "tread-inside72", "bone": "tread36", "attachment": "tread-inside" },
-	{ "name": "tread-inside42", "bone": "tread21", "attachment": "tread-inside" },
-	{ "name": "tread-inside18", "bone": "tread9", "attachment": "tread-inside" },
-	{ "name": "tread-inside44", "bone": "tread22", "attachment": "tread-inside" },
-	{ "name": "tread-inside20", "bone": "tread10", "attachment": "tread-inside" },
-	{ "name": "tread-inside46", "bone": "tread23", "attachment": "tread-inside" },
-	{ "name": "tread-inside22", "bone": "tread11", "attachment": "tread-inside" },
-	{ "name": "tread-inside48", "bone": "tread24", "attachment": "tread-inside" },
-	{ "name": "tread-inside24", "bone": "tread12", "attachment": "tread-inside" },
-	{ "name": "tread-inside50", "bone": "tread25", "attachment": "tread-inside" },
-	{ "name": "tread-inside26", "bone": "tread13", "attachment": "tread-inside" },
-	{ "name": "tread-inside52", "bone": "tread26", "attachment": "tread-inside" },
-	{ "name": "wheel-big", "bone": "wheel-big1", "color": "dbdbdbff", "attachment": "wheel-big" },
-	{ "name": "wheel-big2", "bone": "wheel-big2", "color": "dbdbdbff", "attachment": "wheel-big" },
-	{ "name": "wheel-mid", "bone": "wheel-mid1", "attachment": "wheel-mid" },
-	{ "name": "wheel-mid2", "bone": "wheel-mid2", "attachment": "wheel-mid" },
-	{ "name": "wheel-mid3", "bone": "wheel-mid3", "attachment": "wheel-mid" },
-	{ "name": "wheel-mid4", "bone": "wheel-mid4", "attachment": "wheel-mid" },
-	{ "name": "wheel-mid5", "bone": "wheel-mid5", "attachment": "wheel-mid" },
-	{ "name": "wheel-mid6", "bone": "wheel-mid6", "attachment": "wheel-mid" },
-	{ "name": "wheel-small", "bone": "wheel-small1", "attachment": "wheel-small" },
-	{ "name": "wheel-small2", "bone": "wheel-small2", "attachment": "wheel-small" },
-	{ "name": "wheel-small3", "bone": "wheel-small3", "attachment": "wheel-small" },
-	{
-		"name": "wheel-mid-overlay",
-		"bone": "wheel-mid-root1",
-		"color": "ffffffec",
-		"attachment": "wheel-mid-overlay",
-		"blend": "multiply"
-	},
-	{
-		"name": "wheel-mid-overlay2",
-		"bone": "wheel-mid-root2",
-		"color": "ffffffec",
-		"attachment": "wheel-mid-overlay",
-		"blend": "multiply"
-	},
-	{
-		"name": "wheel-mid-overlay3",
-		"bone": "wheel-mid-root3",
-		"color": "ffffffec",
-		"attachment": "wheel-mid-overlay",
-		"blend": "multiply"
-	},
-	{
-		"name": "wheel-mid-overlay4",
-		"bone": "wheel-mid-root4",
-		"color": "ffffffec",
-		"attachment": "wheel-mid-overlay",
-		"blend": "multiply"
-	},
-	{
-		"name": "wheel-mid-overlay5",
-		"bone": "wheel-mid-root5",
-		"color": "ffffffec",
-		"attachment": "wheel-mid-overlay",
-		"blend": "multiply"
-	},
-	{
-		"name": "wheel-mid-overlay6",
-		"bone": "wheel-mid-root6",
-		"color": "ffffffec",
-		"attachment": "wheel-mid-overlay",
-		"blend": "multiply"
-	},
-	{
-		"name": "wheel-big-overlay1",
-		"bone": "wheel-big-root1",
-		"color": "ffffffe9",
-		"attachment": "wheel-big-overlay",
-		"blend": "multiply"
-	},
-	{
-		"name": "wheel-big-overlay2",
-		"bone": "wheel-big-root2",
-		"color": "ffffffe9",
-		"attachment": "wheel-big-overlay",
-		"blend": "multiply"
-	},
-	{ "name": "treads", "bone": "tank-root", "attachment": "treads" },
-	{ "name": "tread", "bone": "tread", "attachment": "tread" },
-	{ "name": "tread27", "bone": "tread27", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread14", "bone": "tread14", "attachment": "tread" },
-	{ "name": "tread2", "bone": "tread2", "attachment": "tread" },
-	{ "name": "tread28", "bone": "tread28", "attachment": "tread" },
-	{ "name": "tread15", "bone": "tread15", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread3", "bone": "tread3", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread29", "bone": "tread29", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread16", "bone": "tread16", "attachment": "tread" },
-	{ "name": "tread4", "bone": "tread4", "attachment": "tread" },
-	{ "name": "tread30", "bone": "tread30", "attachment": "tread" },
-	{ "name": "tread17", "bone": "tread17", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread5", "bone": "tread5", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread31", "bone": "tread31", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread18", "bone": "tread18", "attachment": "tread" },
-	{ "name": "tread6", "bone": "tread6", "attachment": "tread" },
-	{ "name": "tread32", "bone": "tread32", "attachment": "tread" },
-	{ "name": "tread19", "bone": "tread19", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread7", "bone": "tread7", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread33", "bone": "tread33", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread20", "bone": "tread20", "attachment": "tread" },
-	{ "name": "tread8", "bone": "tread8", "attachment": "tread" },
-	{ "name": "tread34", "bone": "tread34", "attachment": "tread" },
-	{ "name": "tread35", "bone": "tread35", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread36", "bone": "tread36", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread21", "bone": "tread21", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread9", "bone": "tread9", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread22", "bone": "tread22", "attachment": "tread" },
-	{ "name": "tread10", "bone": "tread10", "attachment": "tread" },
-	{ "name": "tread23", "bone": "tread23", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread11", "bone": "tread11", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread24", "bone": "tread24", "attachment": "tread" },
-	{ "name": "tread12", "bone": "tread12", "attachment": "tread" },
-	{ "name": "tread25", "bone": "tread25", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread13", "bone": "tread13", "color": "adc9b8ff", "attachment": "tread" },
-	{ "name": "tread26", "bone": "tread26", "attachment": "tread" },
-	{ "name": "machinegun", "bone": "machinegun", "attachment": "machinegun" },
-	{ "name": "machinegun-mount", "bone": "machinegun-mount", "attachment": "machinegun-mount" },
-	{ "name": "tank-top", "bone": "tank-body", "attachment": "tank-top" },
-	{ "name": "guntower", "bone": "guntower", "attachment": "guntower" },
-	{ "name": "cannon", "bone": "cannon", "attachment": "cannon" },
-	{ "name": "cannon-connector", "bone": "cannon-connector", "attachment": "cannon-connector" },
-	{ "name": "antenna", "bone": "antenna-root", "attachment": "antenna" },
-	{ "name": "smoke-puff1-bg", "bone": "smoke1", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg13", "bone": "smoke13", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg14", "bone": "smoke14", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg15", "bone": "smoke15", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg16", "bone": "smoke16", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg17", "bone": "smoke17", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg18", "bone": "smoke18", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg20", "bone": "smoke20", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg21", "bone": "smoke21", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg22", "bone": "smoke22", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg23", "bone": "smoke23", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg24", "bone": "smoke24", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg25", "bone": "smoke25", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg26", "bone": "smoke26", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg27", "bone": "smoke27", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg2", "bone": "smoke2", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg5", "bone": "smoke5", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg6", "bone": "smoke6", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg7", "bone": "smoke7", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg10", "bone": "smoke10", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg11", "bone": "smoke11", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg12", "bone": "smoke12", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg8", "bone": "smoke8", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg9", "bone": "smoke9", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg4", "bone": "smoke4", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-bg3", "bone": "smoke3", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg", "bone": "smoke1", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg13", "bone": "smoke13", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg14", "bone": "smoke14", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg15", "bone": "smoke15", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg16", "bone": "smoke16", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg17", "bone": "smoke17", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg18", "bone": "smoke18", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg20", "bone": "smoke20", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg21", "bone": "smoke21", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg22", "bone": "smoke22", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg23", "bone": "smoke23", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg24", "bone": "smoke24", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg25", "bone": "smoke25", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg26", "bone": "smoke26", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg27", "bone": "smoke27", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg2", "bone": "smoke2", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg5", "bone": "smoke5", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg6", "bone": "smoke6", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg7", "bone": "smoke7", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg10", "bone": "smoke10", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg11", "bone": "smoke11", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg12", "bone": "smoke12", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg8", "bone": "smoke8", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg9", "bone": "smoke9", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg4", "bone": "smoke4", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-puff1-fg3", "bone": "smoke3", "color": "ecececff", "dark": "000000" },
-	{ "name": "smoke-glow", "bone": "smoke-glow", "blend": "additive" },
-	{ "name": "clipping", "bone": "tank-body", "attachment": "clipping" },
-	{ "name": "tank-glow", "bone": "tank-glow", "color": "fcdc6da7", "blend": "additive" }
-],
-"ik": [
-	{
-		"name": "cannonTarget",
-		"order": 0,
-		"bones": [ "cannon" ],
-		"target": "cannon-target"
-	},
-	{
-		"name": "machineGunTarget",
-		"order": 1,
-		"bones": [ "machinegun" ],
-		"target": "machinegun-target",
-		"mix": 0
-	}
-],
-"transform": [
-	{
-		"name": "wheel-big",
-		"order": 8,
-		"bones": [ "wheel-big2" ],
-		"target": "wheel-big1",
-		"rotation": 65.6,
-		"translateMix": 0,
-		"scaleMix": 0,
-		"shearMix": 0
-	},
-	{
-		"name": "wheel-mid1",
-		"order": 3,
-		"bones": [ "wheel-mid2", "wheel-mid4" ],
-		"target": "wheel-mid1",
-		"rotation": 93,
-		"translateMix": 0,
-		"scaleMix": 0,
-		"shearMix": 0
-	},
-	{
-		"name": "wheel-mid2",
-		"order": 4,
-		"bones": [ "wheel-mid3", "wheel-mid5" ],
-		"target": "wheel-mid1",
-		"rotation": -89,
-		"translateMix": 0,
-		"scaleMix": 0,
-		"shearMix": 0
-	},
-	{
-		"name": "wheel-mid3",
-		"order": 5,
-		"bones": [ "wheel-mid6" ],
-		"target": "wheel-mid1",
-		"rotation": -152.6,
-		"translateMix": 0,
-		"scaleMix": 0,
-		"shearMix": 0
-	},
-	{
-		"name": "wheel-small1",
-		"order": 6,
-		"bones": [ "wheel-small2" ],
-		"target": "wheel-small1",
-		"rotation": 87,
-		"translateMix": 0,
-		"scaleMix": 0,
-		"shearMix": 0
-	},
-	{
-		"name": "wheel-small2",
-		"order": 7,
-		"bones": [ "wheel-small3" ],
-		"target": "wheel-small1",
-		"rotation": 54.9,
-		"translateMix": 0,
-		"scaleMix": 0,
-		"shearMix": 0
-	}
-],
-"path": [
-	{
-		"name": "treads",
-		"order": 2,
-		"bones": [
-			"tread",
-			"tread2",
-			"tread3",
-			"tread4",
-			"tread5",
-			"tread6",
-			"tread7",
-			"tread8",
-			"tread9",
-			"tread10",
-			"tread11",
-			"tread12",
-			"tread13",
-			"tread14",
-			"tread15",
-			"tread16",
-			"tread17",
-			"tread18",
-			"tread19",
-			"tread20",
-			"tread21",
-			"tread22",
-			"tread23",
-			"tread24",
-			"tread25",
-			"tread26",
-			"tread27",
-			"tread28",
-			"tread29",
-			"tread30",
-			"tread31",
-			"tread32",
-			"tread33",
-			"tread34",
-			"tread35",
-			"tread36"
-		],
-		"target": "treads",
-		"rotateMode": "chain"
-	}
-],
-"skins": {
-	"default": {
-		"antenna": {
-			"antenna": {
-				"type": "mesh",
-				"uvs": [ 0.64286, 0.07876, 0.65354, 0.1535, 0.66325, 0.22138, 0.67367, 0.29433, 0.68383, 0.36543, 0.6936, 0.43374, 0.70311, 0.5003, 0.71311, 0.57031, 0.72327, 0.64139, 0.73406, 0.71689, 0.74441, 0.7893, 0.75614, 0.87141, 0.76905, 0.94311, 1, 0.94311, 1, 1, 0, 1, 0, 0.94311, 0.20106, 0.94311, 0.20106, 0.87094, 0.21461, 0.78847, 0.22651, 0.71607, 0.23886, 0.64099, 0.25036, 0.57105, 0.26206, 0.49983, 0.27306, 0.43291, 0.2843, 0.36454, 0.29593, 0.29382, 0.308, 0.22038, 0.319, 0.15345, 0.33142, 0.07796, 0.34423, 0, 0.63161, 0 ],
-				"triangles": [ 30, 31, 0, 29, 30, 0, 29, 0, 1, 28, 29, 1, 28, 1, 2, 27, 28, 2, 27, 2, 3, 26, 3, 4, 25, 26, 4, 25, 4, 5, 26, 27, 3, 24, 5, 6, 23, 24, 6, 7, 23, 6, 24, 25, 5, 22, 7, 8, 21, 22, 8, 21, 8, 9, 7, 22, 23, 20, 9, 10, 19, 20, 10, 20, 21, 9, 19, 10, 11, 18, 19, 11, 17, 18, 11, 17, 11, 12, 15, 16, 17, 12, 13, 14, 15, 17, 12, 14, 15, 12 ],
-				"vertices": [ 2, 10, 65.38, -3.14, 0.3125, 11, 23.38, -3.14, 0.6875, 2, 10, 42.73, -3.38, 0.66667, 11, 0.73, -3.38, 0.33333, 2, 9, 64.17, -3.59, 0.33333, 10, 22.17, -3.59, 0.66667, 2, 9, 42.06, -3.82, 0.66667, 10, 0.06, -3.82, 0.33333, 2, 8, 62.52, -4.04, 0.33333, 9, 20.52, -4.04, 0.66667, 2, 8, 41.82, -4.26, 0.66667, 9, -0.18, -4.26, 0.33333, 2, 7, 63.65, -4.47, 0.33333, 8, 21.65, -4.47, 0.66667, 2, 7, 42.44, -4.69, 0.66667, 8, 0.44, -4.69, 0.33333, 2, 6, 62.9, -4.91, 0.33333, 7, 20.9, -4.91, 0.66667, 2, 6, 40.03, -5.15, 0.66667, 7, -1.97, -5.15, 0.33333, 2, 5, 5.38, 58.09, 0.4, 6, 18.09, -5.38, 0.6, 1, 5, 5.64, 33.21, 1, 1, 5, 5.92, 11.48, 1, 1, 5, 11, 11.48, 1, 1, 5, 11, -5.76, 1, 1, 5, -11, -5.76, 1, 1, 5, -11, 11.48, 1, 1, 5, -6.58, 11.48, 1, 1, 5, -6.58, 33.35, 1, 2, 5, -6.28, 58.34, 0.4, 6, 18.34, 6.28, 0.6, 2, 6, 40.27, 6.02, 0.66667, 7, -1.73, 6.02, 0.33333, 2, 6, 63.03, 5.75, 0.33333, 7, 21.03, 5.75, 0.66667, 2, 7, 42.22, 5.49, 0.66667, 8, 0.22, 5.49, 0.33333, 2, 7, 63.8, 5.23, 0.33333, 8, 21.8, 5.23, 0.66667, 2, 8, 42.07, 4.99, 0.66667, 9, 0.07, 4.99, 0.33333, 2, 8, 62.79, 4.75, 0.33333, 9, 20.79, 4.75, 0.66667, 2, 9, 42.22, 4.49, 0.66667, 10, 0.22, 4.49, 0.33333, 2, 9, 64.47, 4.22, 0.33333, 10, 22.47, 4.22, 0.66667, 2, 10, 42.75, 3.98, 0.66667, 11, 0.75, 3.98, 0.33333, 2, 10, 65.62, 3.71, 0.3125, 11, 23.62, 3.71, 0.6875, 1, 11, 47.24, 3.43, 1, 1, 11, 47.24, -2.9, 1 ],
-				"hull": 32,
-				"edges": [ 28, 30, 28, 26, 30, 32, 26, 24, 24, 22, 32, 34, 34, 24, 34, 36, 36, 22, 60, 62, 38, 36, 20, 22, 38, 20, 40, 38, 18, 20, 40, 18, 42, 40, 16, 18, 42, 16, 44, 42, 14, 16, 44, 14, 46, 44, 12, 14, 46, 12, 48, 46, 10, 12, 48, 10, 50, 48, 8, 10, 50, 8, 52, 50, 6, 8, 52, 6, 54, 52, 4, 6, 54, 4, 56, 54, 2, 4, 56, 2, 60, 58, 58, 56, 62, 0, 0, 2, 58, 0 ],
-				"width": 22,
-				"height": 303
-			}
-		},
-		"bottom": {
-			"tank-bottom": { "x": -16.67, "y": 9.89, "width": 1285, "height": 276 }
-		},
-		"cannon": {
-			"cannon": { "x": 481.95, "y": -0.03, "rotation": 180, "width": 931, "height": 58 }
-		},
-		"cannon-connector": {
-			"cannon-connector": {
-				"type": "mesh",
-				"uvs": [ 1, 0.03237, 1, 0.10603, 0.90988, 0.32859, 0.81975, 0.55116, 0.72963, 0.77373, 0.6395, 0.9963, 0.42157, 0.9963, 0.20364, 0.9963, 0, 0.85434, 0, 0.69902, 0.02268, 0.52884, 0, 0.31444, 0.21602, 0.12998, 0.43368, 0, 0.63547, 0.0037, 0.48408, 0.77059, 0.31496, 0.52497, 0.64133, 0.19648, 0.21516, 0.76766, 0.58346, 0.56471, 0.68444, 0.40146, 0.46758, 0.36649, 0.28935, 0.34604 ],
-				"triangles": [ 21, 22, 12, 11, 12, 22, 17, 21, 13, 17, 13, 14, 21, 12, 13, 21, 17, 20, 16, 22, 21, 10, 11, 22, 10, 22, 16, 19, 21, 20, 16, 21, 19, 18, 10, 16, 9, 10, 18, 15, 16, 19, 18, 16, 15, 8, 9, 18, 7, 8, 18, 6, 18, 15, 7, 18, 6, 14, 0, 1, 17, 14, 1, 2, 17, 1, 20, 17, 2, 3, 20, 2, 19, 20, 3, 4, 19, 3, 15, 19, 4, 5, 15, 4, 6, 15, 5 ],
-				"vertices": [ 1, 12, 35.91, 69.08, 1, 1, 12, 35.91, 59.14, 1, 1, 12, 25.82, 29.09, 1, 1, 12, 15.72, -0.95, 1, 1, 12, 5.63, -31, 1, 1, 12, -4.46, -61.05, 1, 2, 12, -28.87, -61.05, 0.33333, 14, 28.87, 61.03, 0.66667, 1, 14, 53.28, 61.02, 1, 1, 14, 76.09, 41.84, 1, 1, 14, 71.17, 21.63, 1, 1, 14, 72.83, -1.62, 1, 1, 14, 70.38, -29.12, 1, 1, 14, 50.67, -56.14, 1, 2, 12, -28.43, 74.38, 0.41, 14, 28.43, -74.4, 0.59, 2, 12, -4.92, 72.95, 0.52, 14, 4.92, -72.95, 0.48, 2, 12, -21.87, -30.58, 0.49, 14, 21.87, 30.57, 0.51, 1, 14, 40.81, -2.6, 1, 2, 12, -4.26, 46.93, 0.49, 14, 4.26, -46.93, 0.51, 1, 14, 51.99, 30.15, 1, 2, 12, -10.74, -2.78, 0.49, 14, 10.74, 2.78, 0.51, 2, 12, 0.57, 19.25, 0.49, 14, -0.57, -19.25, 0.51, 1, 14, 23.72, -23.99, 1, 1, 14, 43.68, -26.76, 1 ],
-				"hull": 15,
-				"edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 0 ],
-				"width": 112,
-				"height": 135
-			}
-		},
-		"clipping": {
-			"clipping": {
-				"type": "clipping",
-				"end": "tank-glow",
-				"vertexCount": 32,
-				"vertices": [ 1, 3, 165.84, 455.67, 1, 1, 3, 114.21, 493.01, 1, 1, 3, -38.53, 492.23, 1, 1, 3, -193.4, 464.18, 1, 2, 3, -280.85, 415.48, 0.752, 14, 24.09, -73.93, 0.248, 1, 14, 70.34, -27.32, 1, 1, 14, 412.56, -22.02, 1, 1, 14, 412.82, -29.21, 1, 1, 14, 539.26, -29.34, 1, 1, 14, 539.52, -17.09, 1, 1, 14, 894.02, -16.8, 1, 1, 14, 902.99, -28.89, 1, 1, 14, 942.06, -28.58, 1, 1, 14, 948.14, -16.64, 1, 1, 14, 947.9, 14.29, 1, 1, 14, 539.3, 14.55, 1, 1, 14, 539, 29.22, 1, 1, 14, 412.51, 29.88, 1, 1, 14, 412.51, 21.73, 1, 1, 14, 74.24, 27.28, 1, 1, 3, -296.64, 281.2, 1, 1, 3, -316.06, 225.71, 1, 1, 3, -521.69, 190.74, 1, 1, 3, -610.03, 141.02, 1, 1, 3, -671.84, 87.13, 1, 1, 3, -652.23, -11.24, 1, 1, 3, -618.53, -71.36, 1, 1, 3, -478.77, -114.21, 1, 1, 3, -274.11, -116.26, 1, 1, 3, 1.38, -45.75, 1, 1, 3, 189.67, 148.78, 1, 1, 3, 215.75, 276.59, 1 ],
-				"color": "ce3a3aff"
-			}
-		},
-		"ground": {
-			"ground": { "x": 837.96, "y": -172, "width": 1024, "height": 353 }
-		},
-		"ground2": {
-			"ground": { "x": -179.89, "y": -172, "width": 1024, "height": 353 }
-		},
-		"ground3": {
-			"ground": { "x": -1213.48, "y": -172, "scaleX": 1.035, "width": 1024, "height": 353 }
-		},
-		"ground4": {
-			"ground": { "x": -2268.51, "y": -172, "scaleX": 1.04, "width": 1024, "height": 353 }
-		},
-		"ground5": {
-			"ground": { "x": -3306.54, "y": -172, "width": 1024, "height": 353 }
-		},
-		"ground6": {
-			"ground": { "x": -4322.71, "y": -172, "width": 1024, "height": 353 }
-		},
-		"ground7": {
-			"ground": { "x": -5340.65, "y": -172, "width": 1024, "height": 353 }
-		},
-		"guntower": {
-			"guntower": { "x": 77.22, "y": 122.59, "width": 730, "height": 289 }
-		},
-		"machinegun": {
-			"machinegun": { "x": 44.85, "y": -5.72, "rotation": -180, "width": 331, "height": 57 }
-		},
-		"machinegun-mount": {
-			"machinegun-mount": { "x": 47.42, "y": -1.54, "rotation": -90, "width": 72, "height": 96 }
-		},
-		"rock": {
-			"rock": { "x": 25.24, "y": 27.35, "width": 580, "height": 127 }
-		},
-		"smoke-glow": {
-			"smoke-glow": {
-				"type": "mesh",
-				"uvs": [ 1, 0.24906, 1, 0.51991, 1, 0.73165, 0.70776, 1, 0.49012, 1, 0.24373, 1, 0, 0.71158, 0, 0.50308, 0, 0.26235, 0.28107, 0, 0.47435, 0, 0.73345, 0, 0.48858, 0.51759 ],
-				"triangles": [ 12, 7, 8, 12, 10, 11, 12, 11, 0, 9, 10, 12, 12, 8, 9, 12, 0, 1, 6, 7, 12, 12, 1, 2, 5, 6, 12, 3, 4, 12, 5, 12, 4, 2, 3, 12 ],
-				"vertices": [ 49.99, 25.1, 50, -1.98, 50.01, -23.15, 20.79, -50, -0.98, -50, -25.62, -50.01, -50, -21.17, -50, -0.32, -50.01, 23.75, -21.9, 50, -2.58, 50, 23.33, 50.01, -1.14, -1.76 ],
-				"hull": 12,
-				"edges": [ 2, 24, 24, 14, 20, 24, 24, 8, 2, 0, 20, 22, 0, 22, 18, 20, 14, 16, 18, 16, 12, 14, 8, 10, 12, 10, 6, 8, 2, 4, 6, 4 ],
-				"width": 100,
-				"height": 100
-			}
-		},
-		"smoke-puff1-bg": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg10": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg11": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg12": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg13": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg14": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg15": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg16": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg17": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg18": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg2": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg20": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg21": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg22": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg23": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg24": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg25": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg26": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg27": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg3": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg4": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg5": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg6": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg7": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg8": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-bg9": {
-			"smoke-puff01-bg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 }
-		},
-		"smoke-puff1-fg": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg10": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.27, "y": -0.37, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.27, "y": -0.37, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.27, "y": -0.37, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg11": {
-			"smoke-puff04-fg": { "x": -1.27, "y": -0.37, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg12": {
-			"smoke-puff04-fg": { "x": -1.27, "y": -0.37, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg13": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg14": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg15": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg16": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg17": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg18": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg2": {
-			"smoke-puff01-fg": { "x": -1.01, "y": -0.07, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.82, "y": -0.39, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.82, "y": -0.39, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.82, "y": -0.39, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg20": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg21": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg22": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg23": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg24": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg25": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg26": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg27": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.38, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg3": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.02, "y": -0.25, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.115, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.03, "y": -0.43, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg4": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.63, "y": -0.09, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.63, "y": -0.09, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.63, "y": -0.09, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg5": {
-			"smoke-puff01-fg": { "x": -1.21, "y": -0.08, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.89, "y": -0.04, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.89, "y": -0.04, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.89, "y": -0.04, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg6": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.48, "y": -0.07, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.48, "y": -0.07, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -1.48, "y": -0.07, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg7": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -0.7, "y": -0.36, "scaleX": 0.122, "scaleY": 0.121, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -0.56, "y": -0.15, "scaleX": 0.122, "scaleY": 0.122, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -0.56, "y": -0.15, "scaleX": 0.122, "scaleY": 0.122, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg8": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -0.65, "y": 0.01, "scaleX": 0.123, "scaleY": 0.123, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -0.75, "y": -0.15, "scaleX": 0.121, "scaleY": 0.121, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -0.75, "y": -0.15, "scaleX": 0.121, "scaleY": 0.121, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"smoke-puff1-fg9": {
-			"smoke-puff01-fg": { "x": -0.5, "y": -0.12, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 175, "height": 118 },
-			"smoke-puff02-fg": { "x": -1.99, "y": -0.09, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff03-fg": { "x": -1.99, "y": -0.09, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 184, "height": 123 },
-			"smoke-puff04-fg": { "x": -0.95, "y": -0.48, "scaleX": 0.111, "scaleY": 0.111, "rotation": 88.58, "width": 155, "height": 96 }
-		},
-		"tank-body-shadow": {
-			"tank-bottom-shadow": { "x": -11.44, "y": -42.89, "width": 1291, "height": 341 }
-		},
-		"tank-glow": {
-			"smoke-glow": {
-				"type": "mesh",
-				"uvs": [ 1, 1, 0, 1, 1, 0 ],
-				"triangles": [ 1, 2, 0 ],
-				"vertices": [ 469.64, -738.08, -1660.32, -738.08, 469.64, 1391.88 ],
-				"hull": 3,
-				"edges": [ 0, 2, 0, 4, 2, 4 ],
-				"width": 100,
-				"height": 100
-			}
-		},
-		"tank-top": {
-			"tank-top": { "x": 6.8, "y": 168.71, "width": 1407, "height": 222 }
-		},
-		"tread": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread-inside1": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside10": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside11": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside12": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside13": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside14": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside15": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside16": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside17": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside18": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside19": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside2": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside20": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside21": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside22": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside23": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside24": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside25": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside26": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside27": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside28": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside29": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside3": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside30": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside31": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside32": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside33": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside34": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside35": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside36": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside37": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside38": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside39": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside4": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside40": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside41": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside42": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside43": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside44": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside45": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside46": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside47": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside48": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside49": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside5": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside50": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside51": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside52": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside53": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside54": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside55": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside56": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside57": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside58": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside59": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside6": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside60": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside61": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside62": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside63": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside64": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside65": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside66": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside67": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside68": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside69": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside7": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside70": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside71": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside72": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside8": {
-			"tread-inside": { "x": 20.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread-inside9": {
-			"tread-inside": { "x": 60.1, "y": 12.56, "rotation": -180, "width": 25, "height": 28 }
-		},
-		"tread10": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread11": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread12": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread13": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread14": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread15": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread16": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread17": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread18": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread19": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread2": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread20": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread21": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread22": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread23": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread24": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread25": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread26": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread27": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread28": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread29": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread3": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread30": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread31": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread32": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread33": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread34": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread35": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread36": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread4": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread5": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread6": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread7": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread8": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"tread9": {
-			"tread": { "x": 45.47, "y": -8.28, "rotation": -180, "width": 96, "height": 30 }
-		},
-		"treads": {
-			"treads": {
-				"type": "path",
-				"closed": true,
-				"lengths": [ 185.21, 354.53, 478.3, 608.52, 786, 1058.49, 1138.97, 1223.96, 1303.87, 1388.23, 1471.11, 1551.64, 1633.55, 1713.27, 1799.89, 1882.28, 2164.2, 2326.85, 2444.07, 2584.91, 2754.15, 2931.25 ],
-				"vertexCount": 66,
-				"vertices": [ 1, 111, 11.23, 41.87, 1, 1, 111, 0.79, 41.95, 1, 1, 111, -34.72, 42.24, 1, 1, 91, -104.22, 0.41, 1, 1, 91, 0.07, 0.55, 1, 1, 91, 68.8, 0.65, 1, 1, 109, 20.5, 43.47, 1, 1, 109, 1.14, 40.82, 1, 1, 109, -27.38, 36.85, 1, 1, 93, 147.07, 105.01, 1, 1, 93, 96.21, 96.63, 1, 1, 93, 43.87, 87.72, 1, 1, 93, 16.18, 103.35, 1, 1, 93, -33.67, 94.21, 1, 1, 93, -99.36, 81.25, 1, 1, 93, -122.05, -1.7, 1, 1, 93, -83.58, -47.93, 1, 1, 93, -33.53, -109.37, 1, 1, 97, -83.57, -66.1, 1, 1, 97, -2.17, -67.9, 1, 2, 97, 56.68, -41.49, 0.68, 86, -24.31, -41.49, 0.32, 1, 86, -26.59, 16.7, 1, 1, 86, -2.69, 16.7, 1, 1, 86, 13.52, 16.7, 1, 2, 99, -52.42, -46.51, 0.744, 86, 30.21, -46.52, 0.256, 1, 99, -0.32, -68.92, 1, 2, 99, 52.09, -44.73, 0.712, 87, -28.91, -44.73, 0.288, 1, 87, -22.81, 16.24, 1, 1, 87, -1.42, 16.24, 1, 1, 87, 20.48, 16.24, 1, 2, 101, -47.21, -47.46, 0.744, 87, 36.01, -47.46, 0.256, 1, 101, -0.29, -69.66, 1, 2, 101, 45.24, -47.26, 0.736, 88, -37.49, -47.26, 0.264, 1, 88, -23.76, 15.28, 1, 1, 88, -0.14, 15.28, 1, 1, 88, 24.45, 15.28, 1, 2, 103, -47.37, -48.7, 0.744, 88, 33.53, -48.7, 0.256, 1, 103, -0.5, -70.4, 1, 2, 103, 49.09, -48.34, 0.744, 89, -33.58, -48.34, 0.256, 1, 89, -20.89, 15.84, 1, 1, 89, -1.26, 15.84, 1, 1, 89, 15.78, 15.84, 1, 2, 105, -52.5, -48.21, 0.76, 89, 28.45, -48.22, 0.24, 1, 105, -2.5, -68.92, 1, 2, 105, 55.72, -47.82, 0.752, 90, -28.88, -47.83, 0.248, 1, 90, -21.64, 16.7, 1, 1, 90, -0.48, 16.7, 1, 1, 90, 20.74, 16.7, 1, 2, 107, -53.65, -48.9, 0.76, 90, 25.97, -48.9, 0.24, 1, 107, 2.28, -69.66, 1, 1, 107, 44.95, -69.74, 1, 1, 95, 76.03, -85.61, 1, 1, 95, 93.58, -42.24, 1, 1, 95, 118.67, 19.75, 1, 1, 95, 78.59, 76.62, 1, 1, 95, 37.27, 95.07, 1, 1, 95, 31.45, 97.67, 1, 1, 95, -15.16, 87.48, 1, 1, 95, -79.8, 92.52, 1, 1, 95, -119.06, 95.58, 1, 1, 113, 47.07, 42.29, 1, 1, 113, 0.25, 42.75, 1, 1, 113, -29.64, 43.29, 1, 1, 92, -86.65, 1.35, 1, 1, 92, 0.49, 0.26, 1, 1, 92, 92.42, -0.9, 1 ],
-				"color": "ff8819ff"
-			}
-		},
-		"wheel-big": {
-			"wheel-big": { "width": 191, "height": 191 }
-		},
-		"wheel-big-overlay1": {
-			"wheel-big-overlay": { "width": 186, "height": 186 }
-		},
-		"wheel-big-overlay2": {
-			"wheel-big-overlay": { "width": 186, "height": 186 }
-		},
-		"wheel-big2": {
-			"wheel-big": { "width": 191, "height": 191 }
-		},
-		"wheel-mid": {
-			"wheel-mid": { "width": 136, "height": 136 }
-		},
-		"wheel-mid-overlay": {
-			"wheel-mid-overlay": { "width": 136, "height": 136 }
-		},
-		"wheel-mid-overlay2": {
-			"wheel-mid-overlay": { "width": 136, "height": 136 }
-		},
-		"wheel-mid-overlay3": {
-			"wheel-mid-overlay": { "width": 136, "height": 136 }
-		},
-		"wheel-mid-overlay4": {
-			"wheel-mid-overlay": { "width": 136, "height": 136 }
-		},
-		"wheel-mid-overlay5": {
-			"wheel-mid-overlay": { "width": 136, "height": 136 }
-		},
-		"wheel-mid-overlay6": {
-			"wheel-mid-overlay": { "width": 136, "height": 136 }
-		},
-		"wheel-mid2": {
-			"wheel-mid": { "width": 136, "height": 136 }
-		},
-		"wheel-mid3": {
-			"wheel-mid": { "width": 136, "height": 136 }
-		},
-		"wheel-mid4": {
-			"wheel-mid": { "width": 136, "height": 136 }
-		},
-		"wheel-mid5": {
-			"wheel-mid": { "width": 136, "height": 136 }
-		},
-		"wheel-mid6": {
-			"wheel-mid": { "width": 136, "height": 136 }
-		},
-		"wheel-small": {
-			"wheel-small": { "width": 71, "height": 71 }
-		},
-		"wheel-small2": {
-			"wheel-small": { "width": 71, "height": 71 }
-		},
-		"wheel-small3": {
-			"wheel-small": { "width": 71, "height": 71 }
-		}
-	}
-},
-"animations": {
-	"drive": {
-		"bones": {
-			"tank-root": {
-				"rotate": [
-					{ "time": 2, "angle": 0 },
-					{ "time": 2.0667, "angle": 1.99 },
-					{ "time": 2.5, "angle": -15.63 },
-					{
-						"time": 2.6667,
-						"angle": -10.37,
-						"curve": [ 0.306, 0, 0.677, 0.48 ]
-					},
-					{
-						"time": 2.8333,
-						"angle": -6.13,
-						"curve": [ 0.457, 0.42, 0.844, 0.87 ]
-					},
-					{ "time": 3, "angle": 1.84 },
-					{ "time": 3.0667, "angle": 5.32 },
-					{ "time": 3.1667, "angle": 10.99 },
-					{ "time": 3.2333, "angle": 9.73 },
-					{
-						"time": 3.4333,
-						"angle": -4.52,
-						"curve": [ 0.173, 0.12, 0.75, 1 ]
-					},
-					{ "time": 3.6667, "angle": 0.01 }
-				],
-				"translate": [
-					{
-						"time": 0,
-						"x": 0,
-						"y": 0,
-						"curve": [ 0.51, 0, 0.804, 0.48 ]
-					},
-					{ "time": 2, "x": -1209.75, "y": 0 },
-					{ "time": 2.3333, "x": -1652.84, "y": 26.05 },
-					{ "time": 2.5, "x": -1877.69, "y": 71.5 },
-					{ "time": 2.6667, "x": -2053.37, "y": 100.44 },
-					{ "time": 2.8333, "x": -2183.86, "y": 97.42 },
-					{ "time": 3, "x": -2312.32, "y": 74.12 },
-					{ "time": 3.0667, "x": -2340.68, "y": 45.94 },
-					{ "time": 3.1333, "x": -2403.04, "y": 17.04 },
-					{ "time": 3.1667, "x": -2439.84, "y": 5.45 },
-					{ "time": 3.2333, "x": -2523.34, "y": -3.31 },
-					{ "time": 3.4333, "x": -2728.27, "y": -12.73 },
-					{
-						"time": 3.5,
-						"x": -2795.65,
-						"y": -6.14,
-						"curve": [ 0.287, 0.24, 0.622, 0.58 ]
-					},
-					{
-						"time": 3.6333,
-						"x": -2938.53,
-						"y": -1.09,
-						"curve": [ 0.214, 0.27, 0.642, 1 ]
-					},
-					{ "time": 4.8333, "x": -3972.02, "y": 0 },
-					{ "time": 5, "x": -3991.31, "y": 0 },
-					{ "time": 5.3667, "x": -3973.94, "y": 0 }
-				]
-			},
-			"tread-collider1": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.0667, "x": 0, "y": 9.99 },
-					{ "time": 2.1667, "x": 0, "y": 37.69 },
-					{ "time": 2.3333, "x": 0, "y": 53.45 },
-					{ "time": 2.5, "x": 0, "y": 30.97 },
-					{ "time": 2.6667, "x": 0, "y": -2.89 },
-					{ "time": 2.8333, "x": 0, "y": -0.71 },
-					{ "time": 3.0667, "x": 0, "y": -13.64 },
-					{ "time": 3.1667, "x": 0, "y": 59.3 },
-					{ "time": 3.2333, "x": 0, "y": 48.2 },
-					{ "time": 3.4333, "x": 0, "y": -11.27 },
-					{ "time": 3.6333, "x": 0, "y": 4.15 }
-				]
-			},
-			"tread-collider2": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.0667, "x": 0, "y": -2.83 },
-					{ "time": 2.1667, "x": 0, "y": -17.44 },
-					{ "time": 2.3333, "x": 0, "y": 46.07 },
-					{ "time": 2.5, "x": 0, "y": 19.45 },
-					{ "time": 2.6667, "x": 0, "y": 13.46 },
-					{ "time": 2.8333, "x": 0, "y": -1.92, "curve": "stepped" },
-					{ "time": 2.9667, "x": 0, "y": -1.92 },
-					{ "time": 3, "x": 0, "y": -13.17 },
-					{ "time": 3.0667, "x": 0, "y": -23.25 },
-					{ "time": 3.1667, "x": 0, "y": 28.13 },
-					{ "time": 3.2333, "x": 0, "y": 25.63 },
-					{ "time": 3.4333, "x": 0, "y": -1.52 },
-					{ "time": 3.6333, "x": 0, "y": 1.15 }
-				]
-			},
-			"tread-collider3": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.0667, "x": 0, "y": -7.76 },
-					{ "time": 2.1667, "x": 0, "y": -16.61 },
-					{ "time": 2.5, "x": 0, "y": 29.05 },
-					{ "time": 2.6667, "x": 0, "y": 30.12 },
-					{ "time": 2.8333, "x": 0, "y": 5.3 },
-					{ "time": 3, "x": 0, "y": -0.38 },
-					{ "time": 3.1667, "x": 0, "y": 2.6 },
-					{ "time": 3.4333, "x": 0, "y": 15.41 },
-					{ "time": 3.6333, "x": 0, "y": 1.44 }
-				]
-			},
-			"tread-collider4": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.1667, "x": 0, "y": -6.72 },
-					{ "time": 2.3333, "x": 0, "y": -0.92 },
-					{ "time": 2.5, "x": 0, "y": 18.37 },
-					{ "time": 2.6667, "x": 0, "y": 38.77 },
-					{ "time": 2.8333, "x": 0, "y": 30.6 },
-					{ "time": 3.1667, "x": 0, "y": 12.61 },
-					{ "time": 3.2333, "x": 0, "y": -16 },
-					{ "time": 3.4333, "x": 0, "y": 25.62 },
-					{ "time": 3.6333, "x": 0, "y": -0.68 }
-				]
-			},
-			"tread-collider5": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.1667, "x": 0, "y": 3.35 },
-					{ "time": 2.3333, "x": 0, "y": 22.17 },
-					{ "time": 2.6667, "x": 0, "y": 13.35 },
-					{ "time": 2.8333, "x": 0, "y": 39 },
-					{ "time": 3, "x": 0, "y": 39.88 },
-					{ "time": 3.1667, "x": 0, "y": 26.57 },
-					{ "time": 3.2333, "x": 0, "y": -10.15 },
-					{ "time": 3.4333, "x": 0, "y": 35.98 },
-					{ "time": 3.6333, "x": 0, "y": -1.36 }
-				]
-			},
-			"wheel-mid-root6": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.1667, "x": 0, "y": 5.61 },
-					{ "time": 2.3333, "x": 0, "y": 27.21 },
-					{ "time": 2.5, "x": 0, "y": 30.28 },
-					{ "time": 2.6667, "x": 0, "y": -2.81 },
-					{ "time": 2.8333, "x": 0, "y": 19.59 },
-					{ "time": 3, "x": 0, "y": 29.11 },
-					{ "time": 3.1667, "x": 0, "y": 32.55 },
-					{ "time": 3.2333, "x": 0, "y": 3.55 },
-					{ "time": 3.4333, "x": 0, "y": 40.54 },
-					{ "time": 3.6333, "x": 0, "y": 0 }
-				]
-			},
-			"wheel-mid-root5": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.1667, "x": 0, "y": -7.46 },
-					{ "time": 2.3333, "x": 0, "y": 9.53 },
-					{ "time": 2.6667, "x": 0, "y": 36.78 },
-					{ "time": 2.8333, "x": 0, "y": 46.11 },
-					{ "time": 3.1667, "x": 0, "y": 7.55 },
-					{ "time": 3.2333, "x": 0, "y": -16.28 },
-					{ "time": 3.4333, "x": 0, "y": 26.21 },
-					{ "time": 3.6333, "x": 0, "y": 0 }
-				]
-			},
-			"wheel-mid-root4": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.1667, "x": 0, "y": -13.98 },
-					{ "time": 2.3333, "x": 0, "y": -8.26 },
-					{ "time": 2.5, "x": 0, "y": 24.27 },
-					{ "time": 2.6667, "x": 0, "y": 34.42 },
-					{ "time": 2.8333, "x": 0, "y": 8.88 },
-					{ "time": 3.1667, "x": 0, "y": 10.32 },
-					{ "time": 3.2333, "x": 0, "y": -7.63 },
-					{ "time": 3.4333, "x": 0, "y": 19.69 },
-					{ "time": 3.6333, "x": 0, "y": 0 }
-				]
-			},
-			"wheel-mid-root3": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.1667, "x": 0, "y": -21.14 },
-					{ "time": 2.3333, "x": 0, "y": 22.83 },
-					{ "time": 2.5, "x": 0, "y": 23.34 },
-					{ "time": 2.6667, "x": 0, "y": 18.07 },
-					{ "time": 2.8333, "x": 0, "y": 1.2 },
-					{ "time": 3.0667, "x": 0, "y": -13.36 },
-					{ "time": 3.1667, "x": 0, "y": 15.48 },
-					{ "time": 3.2333, "x": 0, "y": 13.34 },
-					{ "time": 3.4333, "x": 0, "y": 6.4 },
-					{ "time": 3.6333, "x": 0, "y": 0 }
-				]
-			},
-			"wheel-mid-root2": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.0667, "x": 0, "y": -4.39 },
-					{ "time": 2.1667, "x": 0, "y": 3.13 },
-					{ "time": 2.3333, "x": 0, "y": 53.56 },
-					{ "time": 2.5, "x": 0, "y": 16.65 },
-					{ "time": 2.6667, "x": 0, "y": 8.39 },
-					{ "time": 3.0667, "x": 0, "y": -19.16 },
-					{ "time": 3.1667, "x": 0, "y": 43.25 },
-					{ "time": 3.2333, "x": 0, "y": 39.04 },
-					{ "time": 3.4333, "x": 0, "y": -8.61 },
-					{ "time": 3.6333, "x": 0, "y": 0 }
-				]
-			},
-			"wheel-mid-root1": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.0333, "x": 0, "y": 22.64 },
-					{ "time": 2.0667, "x": 0, "y": 53.65 },
-					{ "time": 2.1667, "x": 0, "y": 71.18 },
-					{ "time": 2.5, "x": 0, "y": 46.83 },
-					{ "time": 2.6667, "x": 0, "y": 8.38 },
-					{ "time": 3.0667, "x": 0, "y": -10.03 },
-					{ "time": 3.1667, "x": 0, "y": 72.71 },
-					{ "time": 3.2333, "x": 0, "y": 64.74 },
-					{ "time": 3.4333, "x": 0, "y": -17.65 },
-					{ "time": 3.6333, "x": 0, "y": 0 }
-				]
-			},
-			"tank-body": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 0,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 0.8333, "angle": -4.39 },
-					{ "time": 2, "angle": 0 },
-					{ "time": 2.1667, "angle": -1.34 },
-					{ "time": 2.3333, "angle": -6.23 },
-					{ "time": 2.5, "angle": -5.45 },
-					{ "time": 2.9667, "angle": -5.07 },
-					{ "time": 3.0667, "angle": -2.39 },
-					{ "time": 3.1667, "angle": -0.98 },
-					{ "time": 3.2333, "angle": -1.1 },
-					{
-						"time": 3.4,
-						"angle": 0.43,
-						"curve": [ 0.25, 0, 0.625, 0.5 ]
-					},
-					{
-						"time": 3.5333,
-						"angle": -3.55,
-						"curve": [ 0.473, 0.01, 0.735, 0.92 ]
-					},
-					{ "time": 3.8333, "angle": 1.93 },
-					{ "time": 4, "angle": 0.48 },
-					{
-						"time": 4.3333,
-						"angle": 0,
-						"curve": [ 0.215, 0.16, 0.75, 1 ]
-					},
-					{
-						"time": 5,
-						"angle": 3.8,
-						"curve": [ 0.612, 0, 0.75, 1 ]
-					},
-					{ "time": 5.4667, "angle": -2.17 },
-					{ "time": 5.6, "angle": -0.61 }
-				]
-			},
-			"wheel-big-root1": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.0667, "x": 0, "y": 20.07 },
-					{ "time": 2.3333, "x": 0, "y": 67.24 },
-					{ "time": 2.6667, "x": 0, "y": 21.04 },
-					{ "time": 3, "x": 0, "y": 10.28 },
-					{ "time": 3.1, "x": 0, "y": 11.28 },
-					{ "time": 3.1667, "x": 0, "y": 29.43 },
-					{ "time": 3.2333, "x": 0, "y": 35.31 },
-					{ "time": 3.4333, "x": 0, "y": 18.38 },
-					{ "time": 3.5, "x": 0, "y": 0 }
-				]
-			},
-			"tank-treads": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{ "time": 0.8333, "angle": -2.4 },
-					{ "time": 2, "angle": 0 },
-					{ "time": 2.0667, "angle": 1.72 },
-					{ "time": 2.4333, "angle": -0.37 },
-					{ "time": 2.8, "angle": 0 },
-					{ "time": 3, "angle": -1.41 },
-					{ "time": 3.1667, "angle": 0.54 },
-					{
-						"time": 3.2667,
-						"angle": 2.22,
-						"curve": [ 0.485, 0, 0.75, 1 ]
-					},
-					{ "time": 3.4333, "angle": -1.31 },
-					{ "time": 3.7333, "angle": -1.14 },
-					{
-						"time": 4.3333,
-						"angle": 0,
-						"curve": [ 0.215, 0.16, 0.75, 1 ]
-					},
-					{
-						"time": 5,
-						"angle": 2.24,
-						"curve": [ 0.612, 0, 0.75, 1 ]
-					},
-					{ "time": 5.4667, "angle": 0 }
-				]
-			},
-			"cannon-target": {
-				"translate": [
-					{ "time": 0, "x": 0, "y": 0 },
-					{ "time": 0.8333, "x": 0, "y": 121.95 },
-					{ "time": 2, "x": 0, "y": 45.73 }
-				]
-			},
-			"wheel-big-root2": {
-				"translate": [
-					{ "time": 3.4333, "x": 0, "y": 13.01 }
-				]
-			},
-			"wheel-big1": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 0,
-						"curve": [ 0.51, 0, 0.804, 0.48 ]
-					},
-					{ "time": 1, "angle": 120 },
-					{ "time": 1.2667, "angle": 240 },
-					{ "time": 1.5333, "angle": 360 },
-					{ "time": 1.7667, "angle": 120 },
-					{ "time": 2.0333, "angle": 240 },
-					{ "time": 2.2, "angle": 360 },
-					{ "time": 2.4, "angle": 120 },
-					{ "time": 2.5667, "angle": 240 },
-					{ "time": 2.7333, "angle": 360 },
-					{ "time": 2.9333, "angle": 120 },
-					{ "time": 3.1333, "angle": 240 },
-					{ "time": 3.3333, "angle": 360 },
-					{ "time": 3.5, "angle": 120 },
-					{ "time": 3.6667, "angle": 240 },
-					{ "time": 3.8667, "angle": 0 },
-					{ "time": 4.0667, "angle": 120 },
-					{ "time": 4.2667, "angle": 240 },
-					{
-						"time": 4.5,
-						"angle": 0,
-						"curve": [ 0.189, 0.39, 0.585, 0.74 ]
-					},
-					{ "time": 4.8333, "angle": 87.67 }
-				]
-			},
-			"wheel-mid1": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 0,
-						"curve": [ 0.51, 0, 0.804, 0.48 ]
-					},
-					{ "time": 0.9, "angle": 120 },
-					{ "time": 1.1667, "angle": 240 },
-					{ "time": 1.4333, "angle": 360 },
-					{ "time": 1.6333, "angle": 120 },
-					{ "time": 1.8333, "angle": 240 },
-					{ "time": 2, "angle": 360 },
-					{ "time": 2.1333, "angle": 120 },
-					{ "time": 2.2667, "angle": 240 },
-					{ "time": 2.4, "angle": 360 },
-					{ "time": 2.5333, "angle": 120 },
-					{ "time": 2.6667, "angle": 240 },
-					{ "time": 2.8333, "angle": 360 },
-					{ "time": 2.9667, "angle": 120 },
-					{ "time": 3.1, "angle": 240 },
-					{ "time": 3.2333, "angle": 360 },
-					{ "time": 3.3667, "angle": 120 },
-					{ "time": 3.5, "angle": 240 },
-					{ "time": 3.6333, "angle": 360 },
-					{ "time": 3.7667, "angle": 120 },
-					{ "time": 3.9, "angle": 240 },
-					{ "time": 4.0333, "angle": 360 },
-					{ "time": 4.1667, "angle": 120 },
-					{ "time": 4.3, "angle": 240 },
-					{
-						"time": 4.4667,
-						"angle": 360,
-						"curve": [ 0.194, 0.58, 0.75, 1 ]
-					},
-					{ "time": 4.8333, "angle": 120 }
-				]
-			},
-			"wheel-small1": {
-				"rotate": [
-					{
-						"time": 0,
-						"angle": 0,
-						"curve": [ 0.51, 0, 0.804, 0.48 ]
-					},
-					{ "time": 0.6667, "angle": 120 },
-					{ "time": 0.8667, "angle": 240 },
-					{ "time": 1.0333, "angle": 0 },
-					{ "time": 1.1667, "angle": 120 },
-					{ "time": 1.3, "angle": 240 },
-					{ "time": 1.4333, "angle": 0 },
-					{ "time": 1.5333, "angle": 120 },
-					{ "time": 1.6333, "angle": 240 },
-					{ "time": 1.7333, "angle": 0 },
-					{ "time": 1.8333, "angle": 120 },
-					{ "time": 1.9333, "angle": 240 },
-					{ "time": 2.0333, "angle": 0 },
-					{ "time": 2.1333, "angle": 120 },
-					{ "time": 2.2333, "angle": 240 },
-					{ "time": 2.3333, "angle": 0 },
-					{ "time": 2.4333, "angle": 120 },
-					{ "time": 2.5333, "angle": 240 },
-					{ "time": 2.6333, "angle": 0 },
-					{ "time": 2.7333, "angle": 120 },
-					{ "time": 2.8333, "angle": 240 },
-					{ "time": 2.9333, "angle": 0 },
-					{ "time": 3.0333, "angle": 120 },
-					{ "time": 3.1333, "angle": 240 },
-					{ "time": 3.2333, "angle": 0 },
-					{ "time": 3.3333, "angle": 120 },
-					{ "time": 3.4333, "angle": 240 },
-					{ "time": 3.5333, "angle": 0 },
-					{ "time": 3.6333, "angle": 120 },
-					{ "time": 3.7333, "angle": 240 },
-					{ "time": 3.8333, "angle": 0 },
-					{ "time": 3.9333, "angle": 120 },
-					{ "time": 4.0333, "angle": 240 },
-					{ "time": 4.1333, "angle": 0 },
-					{ "time": 4.2333, "angle": 120 },
-					{ "time": 4.3333, "angle": 240 },
-					{ "time": 4.4333, "angle": 0 },
-					{ "time": 4.6667, "angle": 120 },
-					{ "time": 4.9, "angle": 170 }
-				]
-			},
-			"wheel-small-root1": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.1333, "x": 0, "y": 12.37 },
-					{ "time": 2.4667, "x": 0, "y": 32.37 },
-					{ "time": 2.7333, "x": 0, "y": -5.27 },
-					{ "time": 2.9667, "x": 0, "y": 14.31 },
-					{ "time": 3.1667, "x": 0, "y": 19.54 },
-					{ "time": 3.4667, "x": 0, "y": 7.5 },
-					{ "time": 4.3667, "x": 0, "y": -2.4 }
-				]
-			},
-			"wheel-small-root2": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.9, "x": 0, "y": 5.26 },
-					{ "time": 3.1667, "x": 0, "y": 10.67 },
-					{ "time": 3.4667, "x": 0, "y": -4.71 }
-				]
-			},
-			"wheel-small-root3": {
-				"translate": [
-					{ "time": 2, "x": 0, "y": 0 },
-					{ "time": 2.4667, "x": 0, "y": -10.56 },
-					{ "time": 2.9, "x": 0, "y": -16.08 },
-					{ "time": 3.1667, "x": 0, "y": 10.12 },
-					{ "time": 3.4667, "x": 0, "y": 4.1 },
-					{ "time": 4.3667, "x": 0, "y": -0.03 }
-				]
-			},
-			"antenna1": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{
-						"time": 0.3333,
-						"angle": 1.05,
-						"curve": [ 0.442, 0, 0.75, 1 ]
-					},
-					{
-						"time": 1.2333,
-						"angle": -4.55,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 1.7, "angle": 0.53 },
-					{ "time": 2, "angle": -2.13 },
-					{ "time": 2.2, "angle": 4.71 },
-					{ "time": 2.3667, "angle": -7.26 },
-					{ "time": 2.5667, "angle": 2.26 },
-					{ "time": 2.7333, "angle": -3.39 },
-					{ "time": 3.0667, "angle": -5.53 },
-					{ "time": 3.2333, "angle": 7.78 },
-					{ "time": 3.4667, "angle": -5.99 },
-					{ "time": 3.7, "angle": 3.11 },
-					{ "time": 3.9, "angle": -3.05 },
-					{ "time": 4.1, "angle": 0.31 },
-					{ "time": 4.3, "angle": -3.06 },
-					{ "time": 4.5333, "angle": 0.36 },
-					{
-						"time": 4.8667,
-						"angle": 4.94,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 5.1, "angle": -2.38 },
-					{ "time": 5.2667, "angle": 3.65 },
-					{ "time": 5.4, "angle": -3.04 },
-					{ "time": 5.5, "angle": 1.49 },
-					{ "time": 5.6, "angle": -1.86 },
-					{ "time": 5.7, "angle": 0.42 }
-				]
-			},
-			"antenna2": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{
-						"time": 0.3333,
-						"angle": 1.05,
-						"curve": [ 0.442, 0, 0.75, 1 ]
-					},
-					{
-						"time": 1.2333,
-						"angle": -4.55,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 1.7, "angle": 0.53 },
-					{ "time": 2, "angle": -2.13 },
-					{ "time": 2.2, "angle": 4.71 },
-					{ "time": 2.3667, "angle": -7.26 },
-					{ "time": 2.5667, "angle": 2.26 },
-					{ "time": 2.7333, "angle": -3.39 },
-					{ "time": 3.0667, "angle": -5.53 },
-					{ "time": 3.2333, "angle": 7.78 },
-					{ "time": 3.4667, "angle": -5.99 },
-					{ "time": 3.7, "angle": 3.11 },
-					{ "time": 3.9, "angle": -3.05 },
-					{ "time": 4.1, "angle": 0.31 },
-					{ "time": 4.3, "angle": -3.06 },
-					{ "time": 4.5333, "angle": 0.36 },
-					{
-						"time": 4.8667,
-						"angle": 4.94,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 5.1, "angle": -2.38 },
-					{ "time": 5.2667, "angle": 3.65 },
-					{ "time": 5.4, "angle": -3.04 },
-					{ "time": 5.5, "angle": 1.49 },
-					{ "time": 5.6, "angle": -1.86 },
-					{ "time": 5.7, "angle": 0.42 }
-				]
-			},
-			"antenna3": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{
-						"time": 0.3333,
-						"angle": 1.05,
-						"curve": [ 0.442, 0, 0.75, 1 ]
-					},
-					{
-						"time": 1.2333,
-						"angle": -4.55,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 1.7, "angle": 0.53 },
-					{ "time": 2, "angle": -2.13 },
-					{ "time": 2.2, "angle": 4.71 },
-					{ "time": 2.3667, "angle": -7.26 },
-					{ "time": 2.5667, "angle": 2.26 },
-					{ "time": 2.7333, "angle": -3.39 },
-					{ "time": 3.0667, "angle": -5.53 },
-					{ "time": 3.2333, "angle": 7.78 },
-					{ "time": 3.4667, "angle": -5.99 },
-					{ "time": 3.7, "angle": 3.11 },
-					{ "time": 3.9, "angle": -3.05 },
-					{ "time": 4.1, "angle": 0.31 },
-					{ "time": 4.3, "angle": -3.06 },
-					{ "time": 4.5333, "angle": 0.36 },
-					{
-						"time": 4.8667,
-						"angle": 4.94,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 5.1, "angle": -2.38 },
-					{ "time": 5.2667, "angle": 3.65 },
-					{ "time": 5.4, "angle": -3.04 },
-					{ "time": 5.5, "angle": 1.49 },
-					{ "time": 5.6, "angle": -1.86 },
-					{ "time": 5.7, "angle": 0.42 }
-				]
-			},
-			"antenna4": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{
-						"time": 0.3333,
-						"angle": 1.05,
-						"curve": [ 0.442, 0, 0.75, 1 ]
-					},
-					{
-						"time": 1.2333,
-						"angle": -4.55,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 1.7, "angle": 0.53 },
-					{ "time": 2, "angle": -2.13 },
-					{ "time": 2.2, "angle": 4.71 },
-					{ "time": 2.3667, "angle": -7.26 },
-					{ "time": 2.5667, "angle": 2.26 },
-					{ "time": 2.7333, "angle": -3.39 },
-					{ "time": 3.0667, "angle": -5.53 },
-					{ "time": 3.2333, "angle": 7.78 },
-					{ "time": 3.4667, "angle": -5.99 },
-					{ "time": 3.7, "angle": 3.11 },
-					{ "time": 3.9, "angle": -3.05 },
-					{ "time": 4.1, "angle": 0.31 },
-					{ "time": 4.3, "angle": -3.06 },
-					{ "time": 4.5333, "angle": 0.36 },
-					{
-						"time": 4.8667,
-						"angle": 4.94,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 5.1, "angle": -2.38 },
-					{ "time": 5.2667, "angle": 3.65 },
-					{ "time": 5.4, "angle": -3.04 },
-					{ "time": 5.5, "angle": 1.49 },
-					{ "time": 5.6, "angle": -1.86 },
-					{ "time": 5.7, "angle": 0.42 }
-				]
-			},
-			"antenna5": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{
-						"time": 0.3333,
-						"angle": 1.05,
-						"curve": [ 0.442, 0, 0.75, 1 ]
-					},
-					{
-						"time": 1.2333,
-						"angle": -4.55,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 1.7, "angle": 0.53 },
-					{ "time": 2, "angle": -2.13 },
-					{ "time": 2.2, "angle": 4.71 },
-					{ "time": 2.3667, "angle": -7.26 },
-					{ "time": 2.5667, "angle": 2.26 },
-					{ "time": 2.7333, "angle": -3.39 },
-					{ "time": 3.0667, "angle": -5.53 },
-					{ "time": 3.2333, "angle": 7.78 },
-					{ "time": 3.4667, "angle": -5.99 },
-					{ "time": 3.7, "angle": 3.11 },
-					{ "time": 3.9, "angle": -3.05 },
-					{ "time": 4.1, "angle": 0.31 },
-					{ "time": 4.3, "angle": -3.06 },
-					{ "time": 4.5333, "angle": 0.36 },
-					{
-						"time": 4.8667,
-						"angle": 4.94,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 5.1, "angle": -2.38 },
-					{ "time": 5.2667, "angle": 3.65 },
-					{ "time": 5.4, "angle": -3.04 },
-					{ "time": 5.5, "angle": 1.49 },
-					{ "time": 5.6, "angle": -1.86 },
-					{ "time": 5.7, "angle": 0.42 }
-				]
-			},
-			"antenna6": {
-				"rotate": [
-					{ "time": 0, "angle": 0 },
-					{
-						"time": 0.3333,
-						"angle": 1.05,
-						"curve": [ 0.442, 0, 0.75, 1 ]
-					},
-					{
-						"time": 1.2333,
-						"angle": -4.55,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 1.7, "angle": 0.53 },
-					{ "time": 2, "angle": -2.13 },
-					{ "time": 2.2, "angle": 4.71 },
-					{ "time": 2.3667, "angle": -7.26 },
-					{ "time": 2.5667, "angle": 2.26 },
-					{ "time": 2.7333, "angle": -3.39 },
-					{ "time": 3.0667, "angle": -5.53 },
-					{ "time": 3.2333, "angle": 7.78 },
-					{ "time": 3.4667, "angle": -5.99 },
-					{ "time": 3.7, "angle": 3.11 },
-					{ "time": 3.9, "angle": -3.05 },
-					{ "time": 4.1, "angle": 0.31 },
-					{ "time": 4.3, "angle": -3.06 },
-					{ "time": 4.5333, "angle": 0.36 },
-					{
-						"time": 4.8667,
-						"angle": 4.94,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 5.1, "angle": -2.38 },
-					{ "time": 5.2667, "angle": 3.65 },
-					{ "time": 5.4, "angle": -3.04 },
-					{ "time": 5.5, "angle": 1.49 },
-					{ "time": 5.6, "angle": -1.86 },
-					{ "time": 5.7, "angle": 0.42 }
-				]
-			},
-			"machinegun": {
-				"rotate": [
-					{ "time": 0, "angle": 8.07, "curve": "stepped" },
-					{ "time": 2.0667, "angle": 8.07 },
-					{ "time": 2.1667, "angle": 3.11 },
-					{ "time": 2.5667, "angle": -10.99, "curve": "stepped" },
-					{ "time": 3.1333, "angle": -10.99 },
-					{ "time": 3.2667, "angle": 18.18 },
-					{ "time": 3.4333, "angle": 2.75, "curve": "stepped" },
-					{ "time": 4.7, "angle": 2.75 },
-					{ "time": 4.9, "angle": 8.07 }
-				]
-			}
-		},
-		"paths": {
-			"treads": {
-				"position": [
-					{
-						"time": 0,
-						"curve": [ 0.492, 0, 0.794, 0.46 ]
-					},
-					{
-						"time": 2,
-						"position": 0.385,
-						"curve": [ 0.348, 0.33, 0.681, 0.66 ]
-					},
-					{ "time": 2.0667, "position": 0.405 },
-					{ "time": 2.3333, "position": 0.555 },
-					{ "time": 2.5, "position": 0.605 },
-					{ "time": 2.6667, "position": 0.685 },
-					{ "time": 2.8333, "position": 0.745 },
-					{ "time": 3, "position": 0.785 },
-					{ "time": 3.0667, "position": 0.8 },
-					{ "time": 3.1333, "position": 0.825 },
-					{ "time": 3.1667, "position": 0.835 },
-					{ "time": 3.2333, "position": 0.87 },
-					{
-						"time": 3.5,
-						"position": 0.98,
-						"curve": [ 0.17, 0.16, 0.626, 1 ]
-					},
-					{ "time": 4.8333, "position": 1.4 }
-				]
-			}
-		}
-	},
-	"shoot": {
-		"slots": {
-			"rock": {
-				"attachment": [
-					{ "time": 0, "name": null }
-				]
-			},
-			"smoke-glow": {
-				"color": [
-					{ "time": 0.1333, "color": "ffffffff" },
-					{ "time": 0.1667, "color": "ffbc8af4" },
-					{ "time": 0.2, "color": "fc8e8e90" },
-					{ "time": 0.2667, "color": "fa3e3e1e" }
-				],
-				"attachment": [
-					{ "time": 0.0667, "name": "smoke-glow" },
-					{ "time": 0.3, "name": null }
-				]
-			},
-			"smoke-puff1-bg": {
-				"twoColor": [
-					{ "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.6, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 1.0333, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.0667, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg2": {
-				"twoColor": [
-					{ "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.8333, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg3": {
-				"twoColor": [
-					{ "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.8333, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg4": {
-				"twoColor": [
-					{ "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.6, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.9, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg5": {
-				"twoColor": [
-					{ "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.6, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.9, "light": "ffd50c00", "dark": "604a3f" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg6": {
-				"twoColor": [
-					{ "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.7, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg7": {
-				"twoColor": [
-					{ "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3333, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.8333, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg8": {
-				"twoColor": [
-					{ "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4333, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.9333, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg9": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.5333, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.8333, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg10": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.5333, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.8333, "light": "ffd50c00", "dark": "604a3f" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg11": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.7667, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.3333, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg12": {
-				"twoColor": [
-					{ "time": 0.3333, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.6, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.8667, "light": "ffd50c00", "dark": "604a3f" }
-				],
-				"attachment": [
-					{ "time": 0.3667, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg13": {
-				"twoColor": [
-					{ "time": 0.3667, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 1, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.3667, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg14": {
-				"twoColor": [
-					{ "time": 0.4333, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.6, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 1.0667, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.4333, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg15": {
-				"twoColor": [
-					{ "time": 0.4, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.8333, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.4, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg16": {
-				"twoColor": [
-					{ "time": 0.4, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.7, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.4, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg17": {
-				"twoColor": [
-					{ "time": 0.2333, "light": "ffd50cff", "dark": "534035" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.6667, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.2333, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg18": {
-				"twoColor": [
-					{ "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.5, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.8, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.2333, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg20": {
-				"twoColor": [
-					{ "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.8, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.3333, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg21": {
-				"twoColor": [
-					{ "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.7, "light": "ffd50c00", "dark": "604b3f" }
-				]
-			},
-			"smoke-puff1-bg22": {
-				"twoColor": [
-					{ "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.7, "light": "ffd50c00", "dark": "604b3f" }
-				]
-			},
-			"smoke-puff1-bg23": {
-				"twoColor": [
-					{ "time": 0.0667, "light": "ffd50cff", "dark": "3b2c23" },
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.5, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.7667, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.3, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg24": {
-				"twoColor": [
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.7, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.3, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg25": {
-				"twoColor": [
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 1, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.3667, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg26": {
-				"twoColor": [
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.6, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.9333, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.3667, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-bg27": {
-				"twoColor": [
-					{ "time": 0.3, "light": "ffd50cff", "dark": "604b3f", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ffd50cff", "dark": "604b3f" },
-					{ "time": 0.7333, "light": "ffd50c00", "dark": "604b3f" }
-				],
-				"attachment": [
-					{ "time": 0.3667, "name": "smoke-puff01-bg" }
-				]
-			},
-			"smoke-puff1-fg": {
-				"twoColor": [
-					{ "time": 0.0667, "light": "ffdf31ff", "dark": "ff0000" },
-					{ "time": 0.1333, "light": "fde252ff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.6, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 1.0333, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.0667, "name": "smoke-puff01-fg" },
-					{ "time": 0.1667, "name": "smoke-puff02-fg" },
-					{ "time": 0.2, "name": "smoke-puff03-fg" },
-					{ "time": 0.2333, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg2": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.8333, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-fg" },
-					{ "time": 0.1667, "name": "smoke-puff02-fg" },
-					{ "time": 0.2, "name": "smoke-puff03-fg" },
-					{ "time": 0.2333, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg3": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffe457ff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.8333, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-fg" },
-					{ "time": 0.1667, "name": "smoke-puff02-fg" },
-					{ "time": 0.2, "name": "smoke-puff03-fg" },
-					{ "time": 0.2667, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg4": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "fae781ff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.6, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.9, "light": "ac8c7500", "dark": "604a3f" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-fg" },
-					{ "time": 0.1667, "name": "smoke-puff02-fg" },
-					{ "time": 0.2, "name": "smoke-puff03-fg" },
-					{ "time": 0.2667, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg5": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.6, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.9, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-fg" },
-					{ "time": 0.1667, "name": "smoke-puff02-fg" },
-					{ "time": 0.2, "name": "smoke-puff03-fg" },
-					{ "time": 0.2667, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg6": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.7, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-fg" },
-					{ "time": 0.1667, "name": "smoke-puff02-fg" },
-					{ "time": 0.2, "name": "smoke-puff03-fg" },
-					{ "time": 0.2667, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg7": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3333, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.8333, "light": "ac8c7500", "dark": "604a3f" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-fg" },
-					{ "time": 0.1667, "name": "smoke-puff02-fg" },
-					{ "time": 0.2, "name": "smoke-puff03-fg" },
-					{ "time": 0.2333, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg8": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4333, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.9333, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-fg" },
-					{ "time": 0.1667, "name": "smoke-puff02-fg" },
-					{ "time": 0.2, "name": "smoke-puff03-fg" },
-					{ "time": 0.2333, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg9": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.5333, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.8333, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-fg" },
-					{ "time": 0.1667, "name": "smoke-puff02-fg" },
-					{ "time": 0.2, "name": "smoke-puff03-fg" },
-					{ "time": 0.2333, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg10": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "fce35dff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.5333, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.8333, "light": "ac8c7500", "dark": "604a3f" }
-				],
-				"attachment": [
-					{ "time": 0.1333, "name": "smoke-puff01-fg" },
-					{ "time": 0.1667, "name": "smoke-puff02-fg" },
-					{ "time": 0.2, "name": "smoke-puff03-fg" },
-					{ "time": 0.2667, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg11": {
-				"twoColor": [
-					{ "time": 0.3333, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.7667, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.3333, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg12": {
-				"twoColor": [
-					{ "time": 0.3667, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.6, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.8667, "light": "ac8c7500", "dark": "604a3f" }
-				],
-				"attachment": [
-					{ "time": 0.3667, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg13": {
-				"twoColor": [
-					{ "time": 0.3667, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 1, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.3667, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg14": {
-				"twoColor": [
-					{ "time": 0.4333, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.6, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 1.0667, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.4333, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg15": {
-				"twoColor": [
-					{ "time": 0.4, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.8333, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.4, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg16": {
-				"twoColor": [
-					{ "time": 0.4, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.7, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.4, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg17": {
-				"twoColor": [
-					{ "time": 0.2333, "light": "e3c05eff", "dark": "ab7e59" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.6667, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.2333, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg18": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.5, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.7667, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.2333, "name": "smoke-puff03-fg" },
-					{ "time": 0.2667, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg20": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.8, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.3333, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg21": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.7, "light": "ab764c00", "dark": "ac8d75" }
-				]
-			},
-			"smoke-puff1-fg22": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.7, "light": "ab764c00", "dark": "ac8d75" }
-				]
-			},
-			"smoke-puff1-fg23": {
-				"twoColor": [
-					{ "time": 0.1333, "light": "ffdf31ff", "dark": "ff0000" },
-					{ "time": 0.1667, "light": "ffe568ff", "dark": "e26425" },
-					{ "time": 0.2, "light": "ffe568ff", "dark": "ab774c" },
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.5, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.7667, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.3, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg24": {
-				"twoColor": [
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.7, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.3, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg25": {
-				"twoColor": [
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 1, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.3667, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg26": {
-				"twoColor": [
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.6, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.9333, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.3667, "name": "smoke-puff04-fg" }
-				]
-			},
-			"smoke-puff1-fg27": {
-				"twoColor": [
-					{ "time": 0.3, "light": "ab764cff", "dark": "ac8d75", "curve": "stepped" },
-					{ "time": 0.4667, "light": "ab764cff", "dark": "ac8d75" },
-					{ "time": 0.7333, "light": "ab764c00", "dark": "ac8d75" }
-				],
-				"attachment": [
-					{ "time": 0.3667, "name": "smoke-puff04-fg" }
-				]
-			},
-			"tank-glow": {
-				"color": [
-					{ "time": 0.0667, "color": "fc994d84" },
-					{
-						"time": 0.1333,
-						"color": "f5b16bc8",
-						"curve": [ 0.658, 0.01, 0.89, 0.77 ]
-					},
-					{ "time": 0.2667, "color": "fc994c30" }
-				],
-				"attachment": [
-					{ "time": 0.0667, "name": "smoke-glow" },
-					{ "time": 0.2667, "name": null }
-				]
-			}
-		},
-		"bones": {
-			"cannon": {
-				"translate": [
-					{ "time": 0.0667, "x": 0, "y": 0 },
-					{ "time": 0.1667, "x": 34.77, "y": 0.9 },
-					{ "time": 0.2667, "x": 1.3, "y": 0 }
-				]
-			},
-			"tank-body": {
-				"rotate": [
-					{ "time": 0.0667, "angle": 0 },
-					{
-						"time": 0.1667,
-						"angle": -4.29,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{
-						"time": 0.3,
-						"angle": 2.37,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 0.4333, "angle": 0 }
-				],
-				"translate": [
-					{ "time": 0.0667, "x": 0, "y": 0 },
-					{
-						"time": 0.1667,
-						"x": 31.04,
-						"y": 1.67,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 0.3, "x": -12.05, "y": -0.23 },
-					{ "time": 0.3667, "x": 0, "y": 0 }
-				]
-			},
-			"tank-treads": {
-				"rotate": [
-					{ "time": 0.0667, "angle": 0 },
-					{ "time": 0.1667, "angle": -3.08 },
-					{ "time": 0.3, "angle": -0.42 }
-				]
-			},
-			"smoke1": {
-				"rotate": [
-					{ "time": 0.0667, "angle": 0 },
-					{ "time": 0.1333, "angle": 2.88 },
-					{ "time": 0.1667, "angle": 2.34 },
-					{ "time": 0.2, "angle": 124.36 },
-					{ "time": 0.2667, "angle": 142.26 },
-					{ "time": 0.3333, "angle": 86.78 },
-					{ "time": 0.4667, "angle": 128.79 },
-					{ "time": 0.6333, "angle": 146.22 },
-					{ "time": 1.0333, "angle": 210.7 }
-				],
-				"translate": [
-					{ "time": 0.0667, "x": -9.69, "y": 1.05 },
-					{ "time": 0.1333, "x": 7.53, "y": 1.21 },
-					{ "time": 0.1667, "x": 3.26, "y": 4.07 },
-					{ "time": 0.2, "x": 29.64, "y": -17.46 },
-					{ "time": 0.2667, "x": 86.97, "y": 17.83 },
-					{ "time": 0.3333, "x": 193.74, "y": -38.98 },
-					{ "time": 0.4, "x": 341.67, "y": -39.52 },
-					{ "time": 0.6333, "x": 393.24, "y": -4.01 },
-					{ "time": 1.0333, "x": 410.76, "y": 6.35 }
-				],
-				"scale": [
-					{ "time": 0.0667, "x": 1, "y": 1 },
-					{ "time": 0.1333, "x": 3.171, "y": 0.756 },
-					{ "time": 0.1667, "x": 3.488, "y": 1.279 },
-					{ "time": 0.2, "x": 5.151, "y": 2.369 },
-					{ "time": 0.2667, "x": 4.735, "y": 3.622 },
-					{ "time": 0.3, "x": 4.735, "y": 4.019 },
-					{ "time": 0.3333, "x": 4.613, "y": 3.339 },
-					{ "time": 0.3667, "x": 4.918, "y": 3.561 },
-					{ "time": 0.4, "x": 4.6, "y": 4.263 },
-					{ "time": 0.6333, "x": 4.449, "y": 2.62 },
-					{ "time": 1.0333, "x": 3.09, "y": 1.447 }
-				]
-			},
-			"smoke2": {
-				"rotate": [
-					{ "time": 0.1667, "angle": 31.55 },
-					{ "time": 0.3, "angle": -22.63 },
-					{ "time": 0.4667, "angle": 142.89 },
-					{ "time": 0.6, "angle": 253.78 },
-					{ "time": 0.8333, "angle": -60.72 }
-				],
-				"translate": [
-					{ "time": 0.1667, "x": 17.26, "y": 4.86 },
-					{ "time": 0.2333, "x": 141.22, "y": 27.27 },
-					{ "time": 0.3, "x": 178.86, "y": 56.63 },
-					{ "time": 0.3667, "x": 200.46, "y": 71.05 },
-					{ "time": 0.4333, "x": 213.12, "y": 78.39 },
-					{ "time": 0.6333, "x": 221.44, "y": 73.1 },
-					{ "time": 0.8333, "x": 223.32, "y": 73.74 }
-				],
-				"scale": [
-					{ "time": 0.1667, "x": 1.34, "y": 1.34 },
-					{ "time": 0.2333, "x": 2.81, "y": 1.317 },
-					{ "time": 0.3, "x": 2.932, "y": 1.374 },
-					{ "time": 0.4667, "x": 1.247, "y": 0.639 },
-					{ "time": 0.8333, "x": 0.778, "y": 0.515 }
-				]
-			},
-			"smoke3": {
-				"rotate": [
-					{ "time": 0.1667, "angle": -5.54 },
-					{ "time": 0.2333, "angle": 0.2 },
-					{ "time": 0.3333, "angle": 20.27 },
-					{ "time": 0.4, "angle": 31.36 },
-					{ "time": 0.4667, "angle": 68.52 },
-					{ "time": 0.5333, "angle": 99.74 },
-					{ "time": 0.6333, "angle": 145.8 },
-					{ "time": 0.8333, "angle": 193.28 }
-				],
-				"translate": [
-					{ "time": 0.1333, "x": 1.17, "y": 8.53 },
-					{ "time": 0.1667, "x": 37.53, "y": 4.84 },
-					{ "time": 0.2, "x": 67.99, "y": 9.85 },
-					{ "time": 0.2333, "x": 134.14, "y": -13.5 },
-					{ "time": 0.2667, "x": 181.31, "y": -19.93 },
-					{ "time": 0.3, "x": 238.28, "y": -8.82 },
-					{ "time": 0.3333, "x": 268.51, "y": -25.75 },
-					{ "time": 0.3667, "x": 359.06, "y": -28.49 },
-					{ "time": 0.4, "x": 432.96, "y": -24.11 },
-					{ "time": 0.4667, "x": 452.16, "y": -16.73 },
-					{ "time": 0.6333, "x": 456.28, "y": -0.41 },
-					{ "time": 0.8333, "x": 454.14, "y": 16.41 }
-				],
-				"scale": [
-					{ "time": 0.1333, "x": 2.258, "y": 1.366 },
-					{ "time": 0.1667, "x": 2.656, "y": 1.47 },
-					{ "time": 0.2, "x": 3.202, "y": 1.772 },
-					{ "time": 0.2333, "x": 3.202, "y": 1.93 },
-					{ "time": 0.2667, "x": 3.124, "y": 1.896 },
-					{ "time": 0.3, "x": 3.593, "y": 1.896 },
-					{ "time": 0.3333, "x": 2.363, "y": 1.247 },
-					{ "time": 0.3667, "x": 1.845, "y": 0.973 },
-					{ "time": 0.4, "x": 1.754, "y": 0.926 },
-					{ "time": 0.4333, "x": 1.448, "y": 0.695 },
-					{ "time": 0.4667, "x": 1.441, "y": 0.688 },
-					{ "time": 0.5333, "x": 0.865, "y": 0.456 },
-					{ "time": 0.7, "x": 0.86, "y": 0.454 },
-					{ "time": 0.8333, "x": 0.211, "y": 0.111 }
-				]
-			},
-			"smoke4": {
-				"rotate": [
-					{ "time": 0.1667, "angle": -20.35 },
-					{ "time": 0.2333, "angle": 18.5 },
-					{ "time": 0.3, "angle": 57.77 },
-					{ "time": 0.4, "angle": 105.85 },
-					{ "time": 0.6, "angle": 161.28 },
-					{ "time": 0.9, "angle": 208.43 }
-				],
-				"translate": [
-					{ "time": 0.1667, "x": 35.95, "y": 25.54 },
-					{ "time": 0.2333, "x": 34.17, "y": 1.87 },
-					{ "time": 0.3, "x": 136.7, "y": 21.5 },
-					{ "time": 0.4, "x": 138.61, "y": 34.8 },
-					{ "time": 0.6, "x": 160.38, "y": 37.13 },
-					{ "time": 0.9, "x": 196.41, "y": 30.36 }
-				],
-				"scale": [
-					{ "time": 0.1667, "x": 2.751, "y": 1.754 },
-					{ "time": 0.2333, "x": 3.486, "y": 2.224 },
-					{ "time": 0.2667, "x": 3.486, "y": 2.586 },
-					{ "time": 0.3, "x": 3.847, "y": 2.109 },
-					{ "time": 0.4, "x": 1.96, "y": 1.074 },
-					{ "time": 0.9, "x": 0.825, "y": 0.452 }
-				]
-			},
-			"smoke5": {
-				"rotate": [
-					{ "time": 0.2, "angle": 23.09 },
-					{ "time": 0.2667, "angle": 12.24 },
-					{ "time": 0.3333, "angle": 36.92 },
-					{ "time": 0.4333, "angle": -37.33 },
-					{ "time": 0.5333, "angle": -0.66 },
-					{ "time": 0.9, "angle": 64.02 }
-				],
-				"translate": [
-					{ "time": 0.1333, "x": 0, "y": 0 },
-					{ "time": 0.2333, "x": 123.76, "y": 19.44 },
-					{ "time": 0.3, "x": 239.08, "y": -49.72 },
-					{ "time": 0.3667, "x": 280.23, "y": -51.46 },
-					{ "time": 0.7, "x": 340.62, "y": -20.09 },
-					{ "time": 0.9, "x": 349.18, "y": -5.25 }
-				],
-				"scale": [
-					{ "time": 0.1333, "x": 1, "y": 1 },
-					{ "time": 0.1667, "x": 1.718, "y": 1.718 },
-					{ "time": 0.2, "x": 2.109, "y": 2.109 },
-					{ "time": 0.2333, "x": 1.781, "y": 2.183 },
-					{ "time": 0.2667, "x": 2.148, "y": 2.633 },
-					{ "time": 0.3333, "x": 2.234, "y": 2.738 },
-					{ "time": 0.3667, "x": 1.366, "y": 2.148 },
-					{ "time": 0.4, "x": 0.97, "y": 1.524 },
-					{ "time": 0.4333, "x": 1.078, "y": 1.157 },
-					{ "time": 0.4667, "x": 1.126, "y": 1.005 },
-					{ "time": 0.7, "x": 1.241, "y": 1.301 },
-					{ "time": 0.9, "x": 0.709, "y": 0.893 }
-				]
-			},
-			"smoke6": {
-				"rotate": [
-					{ "time": 0.1667, "angle": -37.43 },
-					{ "time": 0.2333, "angle": -18.36 },
-					{ "time": 0.3333, "angle": 28.58 },
-					{ "time": 0.4, "angle": 150.54 },
-					{ "time": 0.7, "angle": -58.41 }
-				],
-				"translate": [
-					{ "time": 0.1333, "x": 0, "y": 0 },
-					{ "time": 0.2, "x": 68.04, "y": 16.15 },
-					{ "time": 0.2667, "x": 214.52, "y": 13.25 },
-					{ "time": 0.3333, "x": 285.4, "y": 17.95 },
-					{ "time": 0.4, "x": 202.91, "y": 101.43 },
-					{ "time": 0.4667, "x": 189.25, "y": 116.39 },
-					{ "time": 0.7, "x": 182.77, "y": 137.4 }
-				],
-				"scale": [
-					{ "time": 0.1333, "x": 1, "y": 1 },
-					{ "time": 0.1667, "x": 1.152, "y": 1.288 },
-					{ "time": 0.2, "x": 1.939, "y": 2.168 },
-					{ "time": 0.2333, "x": 2.278, "y": 2.223 },
-					{ "time": 0.2667, "x": 2.023, "y": 1.974 },
-					{ "time": 0.3, "x": 2.644, "y": 1.974 },
-					{ "time": 0.4, "x": 1.539, "y": 1.425 },
-					{ "time": 0.4667, "x": 1.14, "y": 0.939 },
-					{ "time": 0.7, "x": 0.215, "y": 0.161 }
-				]
-			},
-			"smoke7": {
-				"rotate": [
-					{ "time": 0.1667, "angle": -243.11 },
-					{ "time": 0.4, "angle": -182.02 },
-					{ "time": 0.8333, "angle": -83.02 }
-				],
-				"translate": [
-					{ "time": 0.1333, "x": 3.19, "y": -6.53 },
-					{ "time": 0.1667, "x": 44.54, "y": 1.12 },
-					{ "time": 0.2, "x": 65.84, "y": 6.02 },
-					{ "time": 0.2333, "x": 173.84, "y": 97.51 },
-					{ "time": 0.4, "x": 167.39, "y": 74.58 },
-					{ "time": 0.8333, "x": 227.77, "y": 84.64 }
-				],
-				"scale": [
-					{ "time": 0.1333, "x": 0.878, "y": 0.878 },
-					{ "time": 0.1667, "x": 1.235, "y": 1.235 },
-					{ "time": 0.2, "x": 1.461, "y": 1.461 },
-					{ "time": 0.2333, "x": 1.114, "y": 1.114 },
-					{ "time": 0.3333, "x": 1.067, "y": 1.067 },
-					{ "time": 0.4667, "x": 0.81, "y": 0.753 },
-					{ "time": 0.8333, "x": 0.52, "y": 0.484 }
-				]
-			},
-			"smoke8": {
-				"rotate": [
-					{ "time": 0.1667, "angle": -156.52 },
-					{ "time": 0.2667, "angle": -154.05 },
-					{ "time": 0.3333, "angle": -108.35 },
-					{ "time": 0.6, "angle": -93.14 },
-					{ "time": 0.9333, "angle": -70.89 }
-				],
-				"translate": [
-					{ "time": 0.1667, "x": 20.72, "y": 0.25 },
-					{ "time": 0.2333, "x": 46.1, "y": -10.06 },
-					{ "time": 0.3, "x": 149.77, "y": 0.92 },
-					{ "time": 0.3667, "x": 241.21, "y": 49.01 },
-					{ "time": 0.5333, "x": 276, "y": 58.76 },
-					{ "time": 0.7, "x": 292.02, "y": 65.91 },
-					{ "time": 0.9333, "x": 308.7, "y": 69.51 }
-				],
-				"scale": [
-					{ "time": 0.1333, "x": 1, "y": 1.174 },
-					{ "time": 0.1667, "x": 1.813, "y": 1.438 },
-					{ "time": 0.2, "x": 1.813, "y": 1.878 },
-					{ "time": 0.2333, "x": 1.211, "y": 1.878 },
-					{ "time": 0.2667, "x": 1.584, "y": 1.596 },
-					{ "time": 0.3, "x": 1.958, "y": 1.878 },
-					{ "time": 0.4667, "x": 1.139, "y": 0.958 },
-					{ "time": 0.9333, "x": 0.839, "y": 0.591 }
-				]
-			},
-			"smoke9": {
-				"rotate": [
-					{ "time": 0.1333, "angle": -44.34 },
-					{ "time": 0.1667, "angle": 14.73 },
-					{ "time": 0.2333, "angle": -243.93 },
-					{ "time": 0.2667, "angle": -241.71 },
-					{ "time": 0.3333, "angle": -211.87 },
-					{ "time": 0.3667, "angle": -187.26 },
-					{ "time": 0.4, "angle": -124.31 },
-					{ "time": 0.4333, "angle": -76.64 },
-					{ "time": 0.7667, "angle": -1.24 }
-				],
-				"translate": [
-					{ "time": 0.1333, "x": -3.49, "y": 0.04 },
-					{ "time": 0.2, "x": 87.4, "y": -7.97 },
-					{ "time": 0.2667, "x": 233.69, "y": -33.86 },
-					{ "time": 0.3333, "x": 296.44, "y": -30.87 },
-					{ "time": 0.4, "x": 390.8, "y": 4 },
-					{ "time": 0.4667, "x": 391.42, "y": 13.17 },
-					{ "time": 0.6333, "x": 413.3, "y": 36.13 },
-					{ "time": 0.7667, "x": 408.59, "y": 40.75 }
-				],
-				"scale": [
-					{ "time": 0.1333, "x": 1.289, "y": 1.501 },
-					{ "time": 0.2, "x": 1.751, "y": 2.039 },
-					{ "time": 0.2667, "x": 2.064, "y": 2.347 },
-					{ "time": 0.3333, "x": 1.822, "y": 2.072 },
-					{ "time": 0.4, "x": 1.296, "y": 1.045 },
-					{ "time": 0.4667, "x": 1.872, "y": 1.526 },
-					{ "time": 0.6333, "x": 1.181, "y": 1.037 },
-					{ "time": 0.7667, "x": 0.716, "y": 0.615 }
-				]
-			},
-			"smoke10": {
-				"rotate": [
-					{ "time": 0.1333, "angle": 12.16 },
-					{ "time": 0.2, "angle": 49.19 },
-					{ "time": 0.2667, "angle": 33.17 },
-					{ "time": 0.3333, "angle": 42.23 },
-					{ "time": 0.4, "angle": 11.69 },
-					{ "time": 0.4667, "angle": 41.83 },
-					{ "time": 0.5333, "angle": 54.86 },
-					{ "time": 0.6333, "angle": 75.25 },
-					{ "time": 0.8333, "angle": 126.4 }
-				],
-				"translate": [
-					{ "time": 0.1333, "x": 7.74, "y": 10.25 },
-					{ "time": 0.2, "x": 42.9, "y": 72.89 },
-					{ "time": 0.2667, "x": 221.58, "y": 82.27 },
-					{ "time": 0.3333, "x": 297.31, "y": 85.39 },
-					{ "time": 0.4, "x": 322.91, "y": 81.04 },
-					{ "time": 0.4667, "x": 346.62, "y": 76.68 },
-					{ "time": 0.6667, "x": 377.46, "y": 81.85 },
-					{ "time": 0.8333, "x": 402.18, "y": 101.03 }
-				],
-				"scale": [
-					{ "time": 0.1333, "x": 0.537, "y": 1.062 },
-					{ "time": 0.1667, "x": 1.042, "y": 0.841 },
-					{ "time": 0.2, "x": 1.937, "y": 1.563 },
-					{ "time": 0.2333, "x": 1.937, "y": 2.176 },
-					{ "time": 0.2667, "x": 2.254, "y": 2.532 },
-					{ "time": 0.3, "x": 2.24, "y": 2.516 },
-					{ "time": 0.5333, "x": 1.731, "y": 1.882 },
-					{ "time": 0.8333, "x": 0.855, "y": 0.867 }
-				]
-			},
-			"smoke-glow": {
-				"translate": [
-					{ "time": 0.0667, "x": -57.08, "y": 0.01 },
-					{ "time": 0.1, "x": -49.68, "y": -1.46 },
-					{ "time": 0.1333, "x": 6.3, "y": -2.92 },
-					{ "time": 0.1667, "x": 31.57, "y": 0.44 },
-					{ "time": 0.2, "x": 34.04, "y": 0.27 },
-					{ "time": 0.2333, "x": 109.29, "y": 1.02 },
-					{ "time": 0.4, "x": 119.89, "y": 1.01 },
-					{ "time": 0.4333, "x": 135.2, "y": 1.03 },
-					{ "time": 0.4667, "x": 152.86, "y": 1.06 },
-					{ "time": 0.5333, "x": 164.64, "y": 1.07 },
-					{ "time": 0.6, "x": 179.94, "y": 1.09 },
-					{ "time": 0.6333, "x": 190.54, "y": 1.1 }
-				],
-				"scale": [
-					{ "time": 0.0667, "x": 0.233, "y": 0.233 },
-					{ "time": 0.1, "x": 0.42, "y": 0.288 },
-					{ "time": 0.1333, "x": 1.669, "y": 1.072 },
-					{ "time": 0.1667, "x": 1.669, "y": 1.785, "curve": "stepped" },
-					{ "time": 0.2, "x": 1.669, "y": 1.785 },
-					{ "time": 0.2333, "x": 2.544, "y": 1.785 },
-					{ "time": 0.4333, "x": 3.48, "y": 2.22 },
-					{ "time": 0.4667, "x": 4.337, "y": 2.655 }
-				]
-			},
-			"smoke11": {
-				"rotate": [
-					{ "time": 0.4, "angle": 47.07 },
-					{ "time": 0.4333, "angle": 109.71 },
-					{ "time": 0.4667, "angle": 164.62 },
-					{ "time": 0.8333, "angle": 276.93 }
-				],
-				"translate": [
-					{ "time": 0.3333, "x": 280.31, "y": 126.85 },
-					{ "time": 0.4, "x": 296.27, "y": 125.62 },
-					{ "time": 0.4667, "x": 312.45, "y": 131.57 },
-					{ "time": 0.6667, "x": 310.5, "y": 149.67 },
-					{ "time": 0.8333, "x": 307.08, "y": 153.94 }
-				],
-				"scale": [
-					{ "time": 0.3333, "x": 1.491, "y": 1.491 },
-					{ "time": 0.4667, "x": 1.144, "y": 0.948 },
-					{ "time": 0.5667, "x": 0.491, "y": 0.491 },
-					{ "time": 0.8333, "x": 0.985, "y": 0.91 }
-				]
-			},
-			"smoke12": {
-				"rotate": [
-					{ "time": 0.3667, "angle": -37.96 },
-					{ "time": 0.4333, "angle": 28.55 },
-					{ "time": 0.5333, "angle": 108.53 },
-					{ "time": 0.8667, "angle": 191.85 }
-				],
-				"translate": [
-					{ "time": 0.3667, "x": 390.22, "y": -1.06 },
-					{ "time": 0.4333, "x": 411.78, "y": 26.39 },
-					{ "time": 0.5333, "x": 428.12, "y": 56.28 },
-					{ "time": 0.8667, "x": 444.34, "y": 68.06 }
-				],
-				"scale": [
-					{ "time": 0.3667, "x": 2.006, "y": 1.821 },
-					{ "time": 0.5333, "x": 1.719, "y": 1.293 },
-					{ "time": 0.7333, "x": 1.562, "y": 1.304 },
-					{ "time": 0.8667, "x": 0.727, "y": 0.637 }
-				]
-			},
-			"smoke13": {
-				"rotate": [
-					{ "time": 0.3667, "angle": 305.8 },
-					{ "time": 0.4, "angle": 118.49 },
-					{ "time": 0.4333, "angle": 177.45 },
-					{ "time": 0.4667, "angle": 213.84 },
-					{ "time": 0.5333, "angle": 236.4 },
-					{ "time": 0.7, "angle": 262.3 },
-					{ "time": 1, "angle": 297.95 }
-				],
-				"translate": [
-					{ "time": 0.3667, "x": 331.84, "y": -25.82 },
-					{ "time": 0.4, "x": 417.88, "y": -42.62 },
-					{ "time": 0.4667, "x": 451.61, "y": -42.21 },
-					{ "time": 0.5333, "x": 453.81, "y": -37.03 },
-					{ "time": 0.6, "x": 451.86, "y": -31.89 },
-					{ "time": 0.7, "x": 453.37, "y": -27.28 },
-					{ "time": 1, "x": 454.04, "y": -17.89 }
-				],
-				"scale": [
-					{ "time": 0.3667, "x": 4.509, "y": 3.114 },
-					{ "time": 0.4, "x": 3.673, "y": 2.537 },
-					{ "time": 0.4333, "x": 4.201, "y": 2.638 },
-					{ "time": 0.4667, "x": 4.27, "y": 2.399 },
-					{ "time": 0.6, "x": 2.798, "y": 1.932 },
-					{ "time": 0.8333, "x": 2.316, "y": 1.599 },
-					{ "time": 1, "x": 1.081, "y": 0.746 }
-				]
-			},
-			"smoke14": {
-				"rotate": [
-					{ "time": 0.4333, "angle": 271.03 },
-					{ "time": 0.7, "angle": 299.97 },
-					{ "time": 1.0667, "angle": 331.16 }
-				],
-				"translate": [
-					{ "time": 0.4333, "x": 371.68, "y": -29.8 },
-					{ "time": 0.7667, "x": 400.59, "y": -44.36 },
-					{ "time": 1.0667, "x": 432.26, "y": -44.79 }
-				],
-				"scale": [
-					{ "time": 0.4333, "x": 4.011, "y": 3.366 },
-					{ "time": 0.7667, "x": 2.071, "y": 1.624 },
-					{ "time": 1.0667, "x": 1.798, "y": 1.111 }
-				]
-			},
-			"smoke15": {
-				"rotate": [
-					{ "time": 0.4, "angle": 111.75 },
-					{ "time": 0.4667, "angle": 171.93 },
-					{ "time": 0.6, "angle": 256.95 },
-					{ "time": 0.8333, "angle": 299.15 }
-				],
-				"translate": [
-					{ "time": 0.4, "x": 266.71, "y": -53.04 },
-					{ "time": 0.4333, "x": 290.84, "y": -51.43 },
-					{ "time": 0.5333, "x": 305.65, "y": -44.32 },
-					{ "time": 0.6667, "x": 318.96, "y": -38.95 },
-					{ "time": 0.8333, "x": 342.65, "y": -27.33 }
-				],
-				"scale": [
-					{ "time": 0.4, "x": 2.749, "y": 2.095 },
-					{ "time": 0.4333, "x": 3.302, "y": 2.289 },
-					{ "time": 0.4667, "x": 2.591, "y": 1.895 },
-					{ "time": 0.5333, "x": 1.777, "y": 1.354 },
-					{ "time": 0.7, "x": 1.932, "y": 1.267 },
-					{ "time": 0.8333, "x": 1.002, "y": 1.546 }
-				]
-			},
-			"smoke16": {
-				"rotate": [
-					{ "time": 0.4, "angle": 89.78 },
-					{ "time": 0.4667, "angle": 137.83 },
-					{ "time": 0.5333, "angle": 193.49 },
-					{ "time": 0.6, "angle": 235.26 },
-					{ "time": 0.6333, "angle": 286.8 }
-				],
-				"translate": [
-					{ "time": 0.4, "x": 217.23, "y": -21.45 },
-					{ "time": 0.4667, "x": 249.95, "y": -13.73 },
-					{ "time": 0.5333, "x": 264.96, "y": -9.87 },
-					{ "time": 0.6, "x": 278.95, "y": 6.37 },
-					{ "time": 0.6333, "x": 245.65, "y": 11.77 }
-				],
-				"scale": [
-					{ "time": 0.4, "x": 2.265, "y": 1.859 },
-					{ "time": 0.4333, "x": 2.621, "y": 1.955 },
-					{ "time": 0.4667, "x": 1.953, "y": 1.538 },
-					{ "time": 0.6, "x": 1.005, "y": 0.825 },
-					{ "time": 0.6333, "x": 0.387, "y": 0.318 }
-				]
-			},
-			"smoke17": {
-				"rotate": [
-					{ "time": 0.2333, "angle": 99.02 },
-					{ "time": 0.3, "angle": 58.06 },
-					{ "time": 0.3333, "angle": 34.05 },
-					{ "time": 0.3667, "angle": 342.66 },
-					{ "time": 0.6667, "angle": 297.64 }
-				],
-				"translate": [
-					{ "time": 0.2333, "x": 18.91, "y": -62.91 },
-					{ "time": 0.3, "x": 2.43, "y": -61.54 },
-					{ "time": 0.3333, "x": 1.89, "y": -36.55 },
-					{ "time": 0.3667, "x": 6.97, "y": -29.52 },
-					{ "time": 0.4333, "x": 10.78, "y": -20.55 },
-					{ "time": 0.6667, "x": 18.65, "y": -13.19 }
-				],
-				"scale": [
-					{ "time": 0.2333, "x": 1.915, "y": 1.915 },
-					{ "time": 0.3, "x": 1.509, "y": 1.509 },
-					{ "time": 0.3333, "x": 1.01, "y": 1.01 },
-					{ "time": 0.3667, "x": 0.715, "y": 0.715 },
-					{ "time": 0.4333, "x": 0.949, "y": 0.721 },
-					{ "time": 0.5667, "x": 0.785, "y": 0.74 }
-				]
-			},
-			"smoke18": {
-				"rotate": [
-					{ "time": 0.2333, "angle": 141.75 },
-					{ "time": 0.2667, "angle": 134.51 },
-					{ "time": 0.3333, "angle": 249.12 },
-					{ "time": 0.5, "angle": 3.82 },
-					{ "time": 0.7333, "angle": 90.54 }
-				],
-				"translate": [
-					{ "time": 0.2333, "x": 60.81, "y": 56.17 },
-					{ "time": 0.2667, "x": 68.74, "y": 69.4 },
-					{ "time": 0.3333, "x": 76.85, "y": 69.07 },
-					{ "time": 0.5, "x": 101.49, "y": 89.87 },
-					{ "time": 0.7333, "x": 118.58, "y": 101.16 }
-				],
-				"scale": [
-					{ "time": 0.2333, "x": 2.288, "y": 2.288 },
-					{ "time": 0.2667, "x": 2.288, "y": 1.628 },
-					{ "time": 0.3, "x": 1.524, "y": 1.308 },
-					{ "time": 0.5, "x": 1.757, "y": 1.385 },
-					{ "time": 0.5333, "x": 2.08, "y": 1.51 },
-					{ "time": 0.7333, "x": 1.405, "y": 0.896 }
-				]
-			},
-			"smoke20": {
-				"rotate": [
-					{ "time": 0.3333, "angle": 95.16 },
-					{ "time": 0.3667, "angle": 130.42 },
-					{ "time": 0.4, "angle": 170.7 },
-					{ "time": 0.4333, "angle": 266.75 },
-					{ "time": 0.4667, "angle": 299.82 },
-					{ "time": 0.5333, "angle": 326.88 },
-					{ "time": 0.6, "angle": 350.8 },
-					{ "time": 0.9, "angle": 43.14 }
-				],
-				"translate": [
-					{ "time": 0.3333, "x": 124.61, "y": -46.55 },
-					{ "time": 0.5333, "x": 173.8, "y": -36.62 },
-					{ "time": 0.7, "x": 186.5, "y": -35.41 },
-					{ "time": 0.9, "x": 188.56, "y": -37.75 }
-				],
-				"scale": [
-					{ "time": 0.3333, "x": 3.346, "y": 2.654 },
-					{ "time": 0.3667, "x": 2.661, "y": 2.111 },
-					{ "time": 0.4333, "x": 2.751, "y": 1.984 },
-					{ "time": 0.4667, "x": 3.059, "y": 2.21 },
-					{ "time": 0.5333, "x": 2.159, "y": 1.712 },
-					{ "time": 0.7, "x": 1.601, "y": 1.27 },
-					{ "time": 0.9, "x": 1.679, "y": 0.856 }
-				]
-			},
-			"smoke23": {
-				"rotate": [
-					{ "time": 0.3, "angle": 115.12 },
-					{ "time": 0.3667, "angle": 79.01 },
-					{ "time": 0.7667, "angle": 6.96 }
-				],
-				"translate": [
-					{ "time": 0.3, "x": 75.15, "y": -50.92 },
-					{ "time": 0.3667, "x": 59.33, "y": -53.52 },
-					{ "time": 0.7667, "x": 39.68, "y": -48.64 }
-				],
-				"scale": [
-					{ "time": 0.3, "x": 3.331, "y": 2.096 },
-					{ "time": 0.4333, "x": 2.4, "y": 2.006 },
-					{ "time": 0.5, "x": 2.555, "y": 2.094 },
-					{ "time": 0.7667, "x": 1.35, "y": 1.241 }
-				]
-			},
-			"antenna1": {
-				"rotate": [
-					{ "time": 0.0667, "angle": 0 },
-					{ "time": 0.2, "angle": 11.78 },
-					{ "time": 0.3, "angle": -9.52 },
-					{ "time": 0.4, "angle": 8.07 },
-					{ "time": 0.5, "angle": -4.45 },
-					{ "time": 0.6, "angle": 1.54 },
-					{ "time": 0.7, "angle": -0.34 }
-				]
-			},
-			"antenna2": {
-				"rotate": [
-					{ "time": 0.0667, "angle": 0 },
-					{ "time": 0.2, "angle": 11.78 },
-					{ "time": 0.3, "angle": -9.52 },
-					{ "time": 0.4, "angle": 8.07 },
-					{ "time": 0.5, "angle": -4.45 },
-					{ "time": 0.6, "angle": 1.54 },
-					{ "time": 0.7, "angle": -0.34 }
-				]
-			},
-			"antenna3": {
-				"rotate": [
-					{ "time": 0.0667, "angle": 0 },
-					{ "time": 0.2, "angle": 11.78 },
-					{ "time": 0.3, "angle": -9.52 },
-					{ "time": 0.4, "angle": 8.07 },
-					{ "time": 0.5, "angle": -4.45 },
-					{ "time": 0.6, "angle": 1.54 },
-					{ "time": 0.7, "angle": -0.34 }
-				]
-			},
-			"antenna4": {
-				"rotate": [
-					{ "time": 0.0667, "angle": 0 },
-					{ "time": 0.2, "angle": 11.78 },
-					{ "time": 0.3, "angle": -9.52 },
-					{ "time": 0.4, "angle": 8.07 },
-					{ "time": 0.5, "angle": -4.45 },
-					{ "time": 0.6, "angle": 1.54 },
-					{ "time": 0.7, "angle": -0.34 }
-				]
-			},
-			"antenna5": {
-				"rotate": [
-					{ "time": 0.0667, "angle": 0 },
-					{ "time": 0.2, "angle": 11.78 },
-					{ "time": 0.3, "angle": -9.52 },
-					{ "time": 0.4, "angle": 8.07 },
-					{ "time": 0.5, "angle": -4.45 },
-					{ "time": 0.6, "angle": 1.54 },
-					{ "time": 0.7, "angle": -0.34 }
-				]
-			},
-			"antenna6": {
-				"rotate": [
-					{ "time": 0.0667, "angle": 0 },
-					{ "time": 0.2, "angle": 11.78 },
-					{ "time": 0.3, "angle": -9.52 },
-					{ "time": 0.4, "angle": 8.07 },
-					{ "time": 0.5, "angle": -4.45 },
-					{ "time": 0.6, "angle": 1.54 },
-					{ "time": 0.7, "angle": -0.34 }
-				]
-			},
-			"smoke24": {
-				"rotate": [
-					{ "time": 0.3, "angle": 71.32 },
-					{ "time": 0.3667, "angle": 112.39 },
-					{ "time": 0.4667, "angle": 159.56 },
-					{ "time": 0.7, "angle": 224.21 }
-				],
-				"translate": [
-					{ "time": 0.3, "x": 90.72, "y": -18.79 },
-					{ "time": 0.3667, "x": 149.69, "y": -7.78 },
-					{ "time": 0.4667, "x": 176.26, "y": 12.31 },
-					{ "time": 0.7, "x": 184.07, "y": 31.75 }
-				],
-				"scale": [
-					{ "time": 0.3, "x": 2.906, "y": 2.311 },
-					{ "time": 0.4333, "x": 3.567, "y": 2.58 },
-					{ "time": 0.4667, "x": 3.157, "y": 2.41 },
-					{ "time": 0.7, "x": 1.705, "y": 1.356 }
-				]
-			},
-			"smoke25": {
-				"rotate": [
-					{ "time": 0.3667, "angle": 91.25 },
-					{ "time": 0.4333, "angle": 117.56 },
-					{ "time": 0.6333, "angle": 150.9 },
-					{ "time": 1, "angle": 189.47 }
-				],
-				"translate": [
-					{ "time": 0.3667, "x": 187.21, "y": -51.18 },
-					{ "time": 0.5333, "x": 245.48, "y": -46.28 },
-					{ "time": 0.6667, "x": 277.36, "y": -43.12 },
-					{ "time": 1, "x": 313.27, "y": -38.14 }
-				],
-				"scale": [
-					{ "time": 0.3667, "x": 3.606, "y": 2.657 },
-					{ "time": 0.4333, "x": 4.166, "y": 2.792 },
-					{ "time": 0.5333, "x": 3.09, "y": 2.091 },
-					{ "time": 1, "x": 3.062, "y": 1.801 }
-				]
-			},
-			"smoke26": {
-				"rotate": [
-					{ "time": 0.3667, "angle": 10.64 },
-					{ "time": 0.4, "angle": 60.85 },
-					{ "time": 0.4667, "angle": 89.45 },
-					{ "time": 0.7, "angle": 125.01 },
-					{ "time": 0.9333, "angle": 155.24 }
-				],
-				"translate": [
-					{ "time": 0.3667, "x": 442.07, "y": -13.19 },
-					{ "time": 0.4, "x": 453.7, "y": 0.81 },
-					{ "time": 0.4667, "x": 443.57, "y": -6.95 },
-					{ "time": 0.7, "x": 460.97, "y": 15.79 },
-					{ "time": 0.9333, "x": 465.22, "y": 20.92 }
-				],
-				"scale": [
-					{ "time": 0.3667, "x": 2.726, "y": 2.726 },
-					{ "time": 0.4333, "x": 3.729, "y": 2.822 },
-					{ "time": 0.4667, "x": 3.398, "y": 2.441 },
-					{ "time": 0.7, "x": 4.324, "y": 3.159 },
-					{ "time": 0.9, "x": 1.977, "y": 1.48 }
-				]
-			},
-			"smoke27": {
-				"rotate": [
-					{ "time": 0.3667, "angle": 24.75 },
-					{ "time": 0.4333, "angle": 354.57 },
-					{ "time": 0.5333, "angle": 320.24 },
-					{ "time": 0.8333, "angle": 303.75 }
-				],
-				"translate": [
-					{ "time": 0.3667, "x": 92.98, "y": -49.06 },
-					{ "time": 0.5333, "x": 129.81, "y": -33.09 },
-					{ "time": 0.8333, "x": 143.68, "y": -25.27 }
-				],
-				"scale": [
-					{ "time": 0.3667, "x": 3.633, "y": 2.223 },
-					{ "time": 0.4333, "x": 2.745, "y": 2.283 },
-					{ "time": 0.4667, "x": 2.962, "y": 2.122 },
-					{ "time": 0.5333, "x": 2.007, "y": 1.266 }
-				]
-			},
-			"cannon-target": {
-				"translate": [
-					{ "time": 0.1333, "x": 0, "y": 0 },
-					{
-						"time": 0.2,
-						"x": 0,
-						"y": 128.38,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 1, "x": 0, "y": 0 }
-				],
-				"scale": [
-					{ "time": 0.4333, "x": 0.632, "y": 1.244 },
-					{ "time": 0.4667, "x": 0.477, "y": 1.487 }
-				]
-			},
-			"machinegun-target": {
-				"scale": [
-					{ "time": 0.4333, "x": 0.632, "y": 1.244 },
-					{ "time": 0.4667, "x": 0.477, "y": 1.487 }
-				]
-			},
-			"machinegun": {
-				"rotate": [
-					{ "time": 0, "angle": 8.07, "curve": "stepped" },
-					{ "time": 0.0667, "angle": 8.07 },
-					{
-						"time": 0.2333,
-						"angle": -18.67,
-						"curve": [ 0.992, 0.01, 0.898, 0.98 ]
-					},
-					{ "time": 0.9, "angle": 8.07 }
-				]
-			},
-			"tank-root": {
-				"translate": [
-					{ "time": 0.0667, "x": 0, "y": 0 },
-					{
-						"time": 0.1667,
-						"x": 46.59,
-						"y": 0,
-						"curve": [ 0.25, 0, 0.75, 1 ]
-					},
-					{ "time": 0.2667, "x": 0, "y": 0 }
-				]
-			},
-			"tank-glow": {
-				"translate": [
-					{
-						"time": 0.1333,
-						"x": 198.14,
-						"y": 0,
-						"curve": [ 0.658, 0.01, 0.89, 0.77 ]
-					},
-					{ "time": 0.2333, "x": -390, "y": 0 }
-				],
-				"scale": [
-					{ "time": 0.0667, "x": 1, "y": 1 },
-					{
-						"time": 0.1333,
-						"x": 1.185,
-						"y": 0.945,
-						"curve": [ 0.658, 0.01, 0.89, 0.77 ]
-					},
-					{ "time": 0.2333, "x": 1.008, "y": 0.471 }
-				]
-			}
-		},
-		"deform": {
-			"default": {
-				"clipping": {
-					"clipping": [
-						{
-							"time": 0.0667,
-							"offset": 54,
-							"vertices": [ 4.59198, -4.59192 ]
-						},
-						{
-							"time": 0.1333,
-							"offset": 8,
-							"vertices": [ -8.97369, -1.88211, 9.11177, 1.02258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14.73321, -45.16878, -30.31448, -84.4631, -32.24969, -108.78421, 70.26825, -36.90201 ]
-						},
-						{
-							"time": 0.1667,
-							"offset": 8,
-							"vertices": [ -11.32373, -1.65065, 11.42179, 0.53259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15.36503, -69.18713, -4.45626, -121.90839, 5.46554, -115.23274, 71.78526, -33.85687 ]
-						},
-						{
-							"time": 0.2,
-							"offset": 8,
-							"vertices": [ -8.70522, 1.02196, 8.65102, -1.4101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.59198, -4.59192 ]
-						},
-						{
-							"time": 0.2333,
-							"offset": 8,
-							"vertices": [ -5.23146, 0.85796, 5.23882, -0.81519 ]
-						},
-						{
-							"time": 0.2667,
-							"offset": 54,
-							"vertices": [ 4.59198, -4.59192 ]
-						}
-					]
-				},
-				"smoke-glow": {
-					"smoke-glow": [
-						{
-							"time": 0.1333,
-							"vertices": [ -14.17073, 19.14352, 0, 0, -10.97961, -15.09065, -5.79558, -24.82121, 0.68117, -17.78759, -1.1179, -5.4463, 0, 0, 0, 0, 17.52957, 6.89397, -0.33841, -2.21582, 5.51004, 18.88118, -6.80153, 20.91101 ]
-						},
-						{
-							"time": 0.1667,
-							"vertices": [ -4.34264, 39.78125, 5.6649, -2.42686, -8.39346, -22.52338, -2.66431, 5.08595, -19.28093, 3.98568, -11.21397, 10.2879, 4.56749, 4.1329, -19.50706, -2.28786, 11.35747, 4.55941, 9.04341, -11.72194, 2.15381, 5.14344, -12.82158, 16.08209, -23.19814, 1.81836 ]
-						},
-						{
-							"time": 0.2,
-							"vertices": [ -3.95581, 36.12203, 37.20779, -0.87419, 21.29579, -15.76854, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 7.70584, -0.7169, -6.69733, -2.62048, 17.91826, 7.77333, -12.2858, 3.25454, -12.75876, 3.71516, 9.67891, 15.48546 ]
-						},
-						{
-							"time": 0.2333,
-							"vertices": [ -11.9371, 26.01078, 2.91821, -0.27533, 7.69899, -17.45375, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 7.70584, -0.7169, -6.69733, -2.62048, 17.91826, 7.77333, -4.30551, -6.01406, -12.75876, 3.71516, -5.10017, 17.59191 ]
-						},
-						{
-							"time": 0.2667,
-							"vertices": [ 0.5959, 23.58176, 20.74303, 0.93943, 7.69899, -17.45375, -2.02438, 6.16526, -5.92201, 4.19709, -1.39027, 9.92793, 20.51733, 2.52203, 13.35544, 2.64274, 24.32408, -1.94308, 8.50604, -20.99353, 13.14276, 5.73959, 6.31876, 19.2114, 16.98909, 0.80981 ]
-						}
-					]
-				}
-			}
-		},
-		"drawOrder": [
-			{
-				"time": 0.3,
-				"offsets": [
-					{ "slot": "smoke-puff1-bg2", "offset": 24 },
-					{ "slot": "smoke-puff1-bg8", "offset": 19 },
-					{ "slot": "smoke-puff1-bg9", "offset": 22 },
-					{ "slot": "smoke-puff1-bg3", "offset": 17 },
-					{ "slot": "smoke-puff1-fg17", "offset": 13 },
-					{ "slot": "smoke-puff1-fg2", "offset": 2 },
-					{ "slot": "smoke-puff1-fg5", "offset": 8 },
-					{ "slot": "smoke-puff1-fg6", "offset": 4 },
-					{ "slot": "smoke-puff1-fg7", "offset": -4 },
-					{ "slot": "smoke-puff1-fg4", "offset": -4 }
-				]
-			},
-			{
-				"time": 0.3333,
-				"offsets": [
-					{ "slot": "smoke-puff1-bg2", "offset": 8 },
-					{ "slot": "smoke-puff1-bg8", "offset": 5 },
-					{ "slot": "smoke-puff1-bg9", "offset": 3 },
-					{ "slot": "smoke-puff1-fg", "offset": 24 },
-					{ "slot": "smoke-puff1-fg5", "offset": -14 },
-					{ "slot": "smoke-puff1-fg6", "offset": -21 },
-					{ "slot": "smoke-puff1-fg7", "offset": -19 },
-					{ "slot": "smoke-puff1-fg10", "offset": -21 }
-				]
-			},
-			{
-				"time": 0.3667,
-				"offsets": [
-					{ "slot": "smoke-puff1-bg2", "offset": 7 },
-					{ "slot": "smoke-puff1-bg9", "offset": 4 },
-					{ "slot": "smoke-puff1-fg", "offset": 24 },
-					{ "slot": "smoke-puff1-fg2", "offset": 5 },
-					{ "slot": "smoke-puff1-fg6", "offset": -22 },
-					{ "slot": "smoke-puff1-fg7", "offset": -18 },
-					{ "slot": "smoke-puff1-fg10", "offset": -20 }
-				]
-			},
-			{
-				"time": 0.4,
-				"offsets": [
-					{ "slot": "smoke-puff1-bg2", "offset": 5 },
-					{ "slot": "smoke-puff1-bg4", "offset": 0 },
-					{ "slot": "smoke-puff1-fg", "offset": 24 },
-					{ "slot": "smoke-puff1-fg2", "offset": 5 },
-					{ "slot": "smoke-puff1-fg6", "offset": -21 },
-					{ "slot": "smoke-puff1-fg7", "offset": -18 },
-					{ "slot": "smoke-puff1-fg10", "offset": -22 }
-				]
-			},
-			{
-				"time": 0.4333,
-				"offsets": [
-					{ "slot": "smoke-puff1-bg2", "offset": 4 },
-					{ "slot": "smoke-puff1-bg9", "offset": 4 },
-					{ "slot": "smoke-puff1-fg", "offset": 24 },
-					{ "slot": "smoke-puff1-fg2", "offset": 5 },
-					{ "slot": "smoke-puff1-fg6", "offset": -17 },
-					{ "slot": "smoke-puff1-fg7", "offset": -19 },
-					{ "slot": "smoke-puff1-fg10", "offset": -23 }
-				]
-			},
-			{
-				"time": 0.5333,
-				"offsets": [
-					{ "slot": "smoke-puff1-bg2", "offset": 9 },
-					{ "slot": "smoke-puff1-bg12", "offset": 0 },
-					{ "slot": "smoke-puff1-fg", "offset": 24 },
-					{ "slot": "smoke-puff1-fg2", "offset": 6 },
-					{ "slot": "smoke-puff1-fg6", "offset": -20 },
-					{ "slot": "smoke-puff1-fg7", "offset": -19 },
-					{ "slot": "smoke-puff1-fg10", "offset": -23 },
-					{ "slot": "smoke-puff1-fg4", "offset": -5 }
-				]
-			}
-		]
-	}
-}
-}

BIN
spine-sfml/data/tank-pro.skel


+ 0 - 174
spine-sfml/data/tank.atlas

@@ -1,174 +0,0 @@
-
-tank.png
-size: 1024,1024
-format: RGBA8888
-filter: Linear,Linear
-repeat: none
-antenna
-  rotate: true
-  xy: 650, 857
-  size: 11, 152
-  orig: 11, 152
-  offset: 0, 0
-  index: -1
-cannon
-  rotate: true
-  xy: 434, 376
-  size: 466, 29
-  orig: 466, 29
-  offset: 0, 0
-  index: -1
-cannon-connector
-  rotate: true
-  xy: 349, 241
-  size: 56, 68
-  orig: 56, 68
-  offset: 0, 0
-  index: -1
-ground
-  rotate: true
-  xy: 255, 330
-  size: 512, 177
-  orig: 512, 177
-  offset: 0, 0
-  index: -1
-guntower
-  rotate: false
-  xy: 650, 870
-  size: 365, 145
-  orig: 365, 145
-  offset: 0, 0
-  index: -1
-machinegun
-  rotate: false
-  xy: 255, 299
-  size: 166, 29
-  orig: 166, 29
-  offset: 0, 0
-  index: -1
-machinegun-mount
-  rotate: true
-  xy: 2, 2
-  size: 36, 48
-  orig: 36, 48
-  offset: 0, 0
-  index: -1
-rock
-  rotate: true
-  xy: 465, 552
-  size: 290, 64
-  orig: 290, 64
-  offset: 0, 0
-  index: -1
-smoke-glow
-  rotate: false
-  xy: 531, 563
-  size: 50, 50
-  orig: 50, 50
-  offset: 0, 0
-  index: -1
-smoke-puff01-bg
-  rotate: true
-  xy: 465, 458
-  size: 92, 62
-  orig: 92, 62
-  offset: 0, 0
-  index: -1
-smoke-puff01-fg
-  rotate: false
-  xy: 115, 138
-  size: 88, 59
-  orig: 88, 59
-  offset: 0, 0
-  index: -1
-smoke-puff02-fg
-  rotate: false
-  xy: 255, 235
-  size: 92, 62
-  orig: 92, 62
-  offset: 0, 0
-  index: -1
-smoke-puff03-fg
-  rotate: false
-  xy: 531, 685
-  size: 92, 62
-  orig: 92, 62
-  offset: 0, 0
-  index: -1
-smoke-puff04-fg
-  rotate: true
-  xy: 465, 378
-  size: 78, 48
-  orig: 78, 48
-  offset: 0, 0
-  index: -1
-tank-bottom
-  rotate: true
-  xy: 115, 199
-  size: 643, 138
-  orig: 643, 138
-  offset: 0, 0
-  index: -1
-tank-bottom-shadow
-  rotate: false
-  xy: 2, 844
-  size: 646, 171
-  orig: 646, 171
-  offset: 0, 0
-  index: -1
-tank-top
-  rotate: true
-  xy: 2, 138
-  size: 704, 111
-  orig: 704, 111
-  offset: 0, 0
-  index: -1
-tread
-  rotate: true
-  xy: 626, 794
-  size: 48, 15
-  orig: 48, 15
-  offset: 0, 0
-  index: -1
-tread-inside
-  rotate: false
-  xy: 434, 360
-  size: 13, 14
-  orig: 13, 14
-  offset: 0, 0
-  index: -1
-wheel-big
-  rotate: false
-  xy: 2, 40
-  size: 96, 96
-  orig: 96, 96
-  offset: 0, 0
-  index: -1
-wheel-big-overlay
-  rotate: false
-  xy: 531, 749
-  size: 93, 93
-  orig: 93, 93
-  offset: 0, 0
-  index: -1
-wheel-mid
-  rotate: false
-  xy: 100, 68
-  size: 68, 68
-  orig: 68, 68
-  offset: 0, 0
-  index: -1
-wheel-mid-overlay
-  rotate: false
-  xy: 531, 615
-  size: 68, 68
-  orig: 68, 68
-  offset: 0, 0
-  index: -1
-wheel-small
-  rotate: false
-  xy: 205, 161
-  size: 36, 36
-  orig: 36, 36
-  offset: 0, 0
-  index: -1

BIN
spine-sfml/data/tank.png


Fișier diff suprimat deoarece este prea mare
+ 0 - 49
spine-sfml/data/vine-pro.json


BIN
spine-sfml/data/vine-pro.skel


+ 0 - 13
spine-sfml/data/vine.atlas

@@ -1,13 +0,0 @@
-
-vine.png
-size: 128,1024
-format: RGBA8888
-filter: Linear,Linear
-repeat: none
-vine
-  rotate: false
-  xy: 2, 2
-  size: 68, 962
-  orig: 68, 962
-  offset: 0, 0
-  index: -1

BIN
spine-sfml/data/vine.png


+ 0 - 461
spine-sfml/example/main.cpp

@@ -1,461 +0,0 @@
-/******************************************************************************
- * Spine Runtimes Software License v2.5
- *
- * Copyright (c) 2013-2016, Esoteric Software
- * All rights reserved.
- *
- * You are granted a perpetual, non-exclusive, non-sublicensable, and
- * non-transferable license to use, install, execute, and perform the Spine
- * Runtimes software and derivative works solely for personal or internal
- * use. Without the written permission of Esoteric Software (see Section 2 of
- * the Spine Software License Agreement), you may not (a) modify, translate,
- * adapt, or develop new applications using the Spine Runtimes or otherwise
- * create derivative works or improvements of the Spine Runtimes or (b) remove,
- * delete, alter, or obscure any trademarks or any copyright, trademark, patent,
- * or other intellectual property or proprietary rights notices on or in the
- * Software, including any copy thereof. Redistributions in binary or source
- * form must include this license and terms.
- *
- * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF
- * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <iostream>
-#include <string.h>
-#define SPINE_SHORT_NAMES
-#include <spine/spine-sfml.h>
-#include <SFML/Graphics.hpp>
-#include <SFML/Window/Mouse.hpp>
-
-using namespace std;
-using namespace spine;
-#include <stdio.h>
-#include <stdlib.h>
-
-void callback (AnimationState* state, EventType type, TrackEntry* entry, Event* event) {
-	const char* animationName = (entry && entry->animation) ? entry->animation->name : 0;
-
-	switch (type) {
-	case ANIMATION_START:
-		printf("%d start: %s\n", entry->trackIndex, animationName);
-		break;
-	case ANIMATION_INTERRUPT:
-		printf("%d interrupt: %s\n", entry->trackIndex, animationName);
-		break;
-	case ANIMATION_END:
-		printf("%d end: %s\n", entry->trackIndex, animationName);
-		break;
-	case ANIMATION_COMPLETE:
-		printf("%d complete: %s\n", entry->trackIndex, animationName);
-		break;
-	case ANIMATION_DISPOSE:
-		printf("%d dispose: %s\n", entry->trackIndex, animationName);
-		break;
-	case ANIMATION_EVENT:
-		printf("%d event: %s, %s: %d, %f, %s\n", entry->trackIndex, animationName, event->data->name, event->intValue, event->floatValue,
-				event->stringValue);
-		break;
-	}
-	fflush(stdout);
-}
-
-SkeletonData* readSkeletonJsonData (const char* filename, Atlas* atlas, float scale) {
-	SkeletonJson* json = SkeletonJson_create(atlas);
-	json->scale = scale;
-	SkeletonData* skeletonData = SkeletonJson_readSkeletonDataFile(json, filename);
-	if (!skeletonData) {
-		printf("%s\n", json->error);
-		exit(0);
-	}
-	SkeletonJson_dispose(json);
-	return skeletonData;
-}
-
-SkeletonData* readSkeletonBinaryData (const char* filename, Atlas* atlas, float scale) {
-	SkeletonBinary* binary = SkeletonBinary_create(atlas);
-	binary->scale = scale;
-	SkeletonData *skeletonData = SkeletonBinary_readSkeletonDataFile(binary, filename);
-	if (!skeletonData) {
-		printf("%s\n", binary->error);
-		exit(0);
-	}
-	SkeletonBinary_dispose(binary);
-	return skeletonData;
-}
-
-void testcase (void func(SkeletonData* skeletonData, Atlas* atlas),
-		const char* jsonName, const char* binaryName, const char* atlasName,
-		float scale) {
-	Atlas* atlas = Atlas_createFromFile(atlasName, 0);
-
-	SkeletonData* skeletonData = readSkeletonJsonData(jsonName, atlas, scale);
-	func(skeletonData, atlas);
-	SkeletonData_dispose(skeletonData);
-
-	skeletonData = readSkeletonBinaryData(binaryName, atlas, scale);
-	func(skeletonData, atlas);
-	SkeletonData_dispose(skeletonData);
-
-	Atlas_dispose(atlas);
-}
-
-void spineboy (SkeletonData* skeletonData, Atlas* atlas) {
-	SkeletonBounds* bounds = SkeletonBounds_create();
-
-	// Configure mixing.
-	AnimationStateData* stateData = AnimationStateData_create(skeletonData);
-	AnimationStateData_setMixByName(stateData, "walk", "jump", 0.2f);
-	AnimationStateData_setMixByName(stateData, "jump", "run", 0.2f);
-
-	SkeletonDrawable* drawable = new SkeletonDrawable(skeletonData, stateData);
-	drawable->timeScale = 1;
-
-	Skeleton* skeleton = drawable->skeleton;
-	skeleton->flipX = false;
-	skeleton->flipY = false;
-	Skeleton_setToSetupPose(skeleton);
-
-	skeleton->x = 320;
-	skeleton->y = 590;
-	Skeleton_updateWorldTransform(skeleton);
-
-	Slot* headSlot = Skeleton_findSlot(skeleton, "head");
-
-	drawable->state->listener = callback;
-	AnimationState_addAnimationByName(drawable->state, 0, "walk", true, 0);
-	AnimationState_addAnimationByName(drawable->state, 0, "jump", false, 3);
-	AnimationState_addAnimationByName(drawable->state, 0, "run", true, 0);
-
-	sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - spineboy");
-	window.setFramerateLimit(60);
-	sf::Event event;
-	sf::Clock deltaClock;
-	while (window.isOpen()) {
-		while (window.pollEvent(event))
-			if (event.type == sf::Event::Closed) window.close();
-
-		float delta = deltaClock.getElapsedTime().asSeconds();
-		deltaClock.restart();
-
-		SkeletonBounds_update(bounds, skeleton, true);
-		sf::Vector2i position = sf::Mouse::getPosition(window);
-		if (SkeletonBounds_containsPoint(bounds, position.x, position.y)) {
-			headSlot->color.g = 0;
-			headSlot->color.b = 0;
-		} else {
-			headSlot->color.g = 1;
-			headSlot->color.b = 1;
-		}
-
-		drawable->update(delta);
-
-		window.clear();
-		window.draw(*drawable);
-		window.display();
-	}
-
-	SkeletonBounds_dispose(bounds);
-}
-
-void goblins (SkeletonData* skeletonData, Atlas* atlas) {
-	SkeletonDrawable* drawable = new SkeletonDrawable(skeletonData);
-	drawable->timeScale = 1;
-
-	Skeleton* skeleton = drawable->skeleton;
-	skeleton->flipX = false;
-	skeleton->flipY = false;
-	Skeleton_setSkinByName(skeleton, "goblin");
-	Skeleton_setSlotsToSetupPose(skeleton);
-	//Skeleton_setAttachment(skeleton, "left hand item", "dagger");
-
-	skeleton->x = 320;
-	skeleton->y = 590;
-	Skeleton_updateWorldTransform(skeleton);
-
-	AnimationState_setAnimationByName(drawable->state, 0, "walk", true);
-
-	sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - goblins");
-	window.setFramerateLimit(60);
-	sf::Event event;
-	sf::Clock deltaClock;
-	while (window.isOpen()) {
-		while (window.pollEvent(event))
-			if (event.type == sf::Event::Closed) window.close();
-
-		float delta = deltaClock.getElapsedTime().asSeconds();
-		deltaClock.restart();
-
-		drawable->update(delta);
-
-		window.clear();
-		window.draw(*drawable);
-		window.display();
-	}
-}
-
-void raptor (SkeletonData* skeletonData, Atlas* atlas) {
-	SkeletonDrawable* drawable = new SkeletonDrawable(skeletonData);
-	drawable->timeScale = 1;
-
-	spSwirlVertexEffect* effect = spSwirlVertexEffect_create(400);
-	effect->centerY = -200;
-	drawable->vertexEffect = &effect->super;
-
-	Skeleton* skeleton = drawable->skeleton;
-	skeleton->x = 320;
-	skeleton->y = 590;
-	Skeleton_updateWorldTransform(skeleton);
-
-	AnimationState_setAnimationByName(drawable->state, 0, "walk", true);
-	AnimationState_addAnimationByName(drawable->state, 1, "gun-grab", false, 2);
-
-	sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - raptor");
-	window.setFramerateLimit(60);
-	sf::Event event;
-	sf::Clock deltaClock;
-	float swirlTime = 0;
-	while (window.isOpen()) {
-		while (window.pollEvent(event))
-			if (event.type == sf::Event::Closed) window.close();
-
-		float delta = deltaClock.getElapsedTime().asSeconds();
-		deltaClock.restart();
-
-		swirlTime += delta;
-		float percent = fmod(swirlTime, 2);
-		if (percent > 1) percent = 1 - (percent - 1);
-		effect->angle = _spMath_interpolate(_spMath_pow2_apply, -60, 60, percent);
-
-		drawable->update(delta);
-
-		window.clear();
-		window.draw(*drawable);
-		window.display();
-	}
-	spSwirlVertexEffect_dispose(effect);
-}
-
-void tank (SkeletonData* skeletonData, Atlas* atlas) {
-	SkeletonDrawable* drawable = new SkeletonDrawable(skeletonData);
-	drawable->timeScale = 1;
-
-	Skeleton* skeleton = drawable->skeleton;
-	skeleton->x = 500;
-	skeleton->y = 590;
-	Skeleton_updateWorldTransform(skeleton);
-
-	AnimationState_setAnimationByName(drawable->state, 0, "drive", true);
-
-	sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - tank");
-	window.setFramerateLimit(60);
-	sf::Event event;
-	sf::Clock deltaClock;
-
-	while (window.isOpen()) {
-		while (window.pollEvent(event))
-			if (event.type == sf::Event::Closed) window.close();
-
-		float delta = deltaClock.getElapsedTime().asSeconds();
-		deltaClock.restart();
-		drawable->update(delta);
-		window.clear();
-		window.draw(*drawable);
-		window.display();
-	}
-}
-
-void vine (SkeletonData* skeletonData, Atlas* atlas) {
-	SkeletonDrawable* drawable = new SkeletonDrawable(skeletonData);
-	drawable->timeScale = 1;
-
-	Skeleton* skeleton = drawable->skeleton;
-	skeleton->x = 320;
-	skeleton->y = 590;
-	Skeleton_updateWorldTransform(skeleton);
-
-	AnimationState_setAnimationByName(drawable->state, 0, "grow", true);
-
-	sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - vine");
-	window.setFramerateLimit(60);
-	sf::Event event;
-	sf::Clock deltaClock;
-	while (window.isOpen()) {
-		while (window.pollEvent(event))
-			if (event.type == sf::Event::Closed) window.close();
-
-		float delta = deltaClock.getElapsedTime().asSeconds();
-		deltaClock.restart();
-
-		drawable->update(delta);
-
-		window.clear();
-		window.draw(*drawable);
-		window.display();
-	}
-}
-
-void stretchyman (SkeletonData* skeletonData, Atlas* atlas) {
-	SkeletonDrawable* drawable = new SkeletonDrawable(skeletonData);
-	drawable->timeScale = 1;
-
-	Skeleton* skeleton = drawable->skeleton;
-	skeleton->flipX = false;
-	skeleton->flipY = false;
-
-	skeleton->x = 100;
-	skeleton->y = 590;
-	Skeleton_updateWorldTransform(skeleton);
-
-	AnimationState_setAnimationByName(drawable->state, 0, "sneak", true);
-
-	sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - Streatchyman");
-	window.setFramerateLimit(60);
-	sf::Event event;
-	sf::Clock deltaClock;
-	while (window.isOpen()) {
-		while (window.pollEvent(event))
-			if (event.type == sf::Event::Closed) window.close();
-
-		float delta = deltaClock.getElapsedTime().asSeconds();
-		deltaClock.restart();
-
-		drawable->update(delta);
-
-		window.clear();
-		window.draw(*drawable);
-		window.display();
-	}
-}
-
-void coin (SkeletonData* skeletonData, Atlas* atlas) {
-	SkeletonDrawable* drawable = new SkeletonDrawable(skeletonData);
-	drawable->timeScale = 1;
-
-	Skeleton* skeleton = drawable->skeleton;
-	skeleton->x = 320;
-	skeleton->y = 590;
-	Skeleton_updateWorldTransform(skeleton);
-
-	AnimationState_setAnimationByName(drawable->state, 0, "rotate", true);
-
-	sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - vine");
-	window.setFramerateLimit(60);
-	sf::Event event;
-	sf::Clock deltaClock;
-	float swirlTime = 0;
-	while (window.isOpen()) {
-		while (window.pollEvent(event))
-			if (event.type == sf::Event::Closed) window.close();
-
-		float delta = deltaClock.getElapsedTime().asSeconds();
-		deltaClock.restart();
-
-		drawable->update(delta);
-
-		window.clear();
-		window.draw(*drawable);
-		window.display();
-	}
-}
-
-void owl (SkeletonData* skeletonData, Atlas* atlas) {
-	SkeletonDrawable* drawable = new SkeletonDrawable(skeletonData);
-	drawable->timeScale = 1;
-
-	Skeleton* skeleton = drawable->skeleton;
-	skeleton->x = 320;
-	skeleton->y = 400;
-	Skeleton_updateWorldTransform(skeleton);
-
-	AnimationState_setAnimationByName(drawable->state, 0, "idle", true);
-	AnimationState_setAnimationByName(drawable->state, 1, "blink", true);
-	spTrackEntry* left = AnimationState_setAnimationByName(drawable->state, 2, "left", true);
-	spTrackEntry* right = AnimationState_setAnimationByName(drawable->state, 3, "right", true);
-	spTrackEntry* up = AnimationState_setAnimationByName(drawable->state, 4, "up", true);
-	spTrackEntry* down = AnimationState_setAnimationByName(drawable->state, 5, "down", true);
-
-	left->alpha = 0;
-	left->mixBlend = SP_MIX_BLEND_ADD;
-	right->alpha = 0;
-	right->mixBlend = SP_MIX_BLEND_ADD;
-	up->alpha = 0;
-	up->mixBlend = SP_MIX_BLEND_ADD;
-	down->alpha = 0;
-	down->mixBlend = SP_MIX_BLEND_ADD;
-
-	sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - owl");
-	window.setFramerateLimit(60);
-	sf::Event event;
-	sf::Clock deltaClock;
-	while (window.isOpen()) {
-		while (window.pollEvent(event)) {
-			if (event.type == sf::Event::Closed) window.close();
-			if (event.type == sf::Event::MouseMoved) {
-				float x = event.mouseMove.x / 640.0f;
-				left->alpha = (MAX(x, 0.5f) - 0.5f) * 2;
-				right->alpha = (0.5 - MIN(x, 0.5)) * 2;
-
-				float y = event.mouseMove.y / 640.0f;
-				down->alpha = (MAX(y, 0.5f) - 0.5f) * 2;
-				up->alpha = (0.5 - MIN(y, 0.5)) * 2;
-			}
-		}
-
-		float delta = deltaClock.getElapsedTime().asSeconds();
-		deltaClock.restart();
-
-		drawable->update(delta);
-
-		window.clear();
-		window.draw(*drawable);
-		window.display();
-	}
-}
-
-/**
- * Used for debugging purposes during runtime development
- */
-void test (SkeletonData* skeletonData, Atlas* atlas) {
-	spSkeleton* skeleton = Skeleton_create(skeletonData);
-	spAnimationStateData* animData = spAnimationStateData_create(skeletonData);
-	spAnimationState* animState = spAnimationState_create(animData);
-	spAnimationState_setAnimationByName(animState, 0, "drive", true);
-
-
-	float d = 3;
-	for (int i = 0; i < 1; i++) {
-		spSkeleton_update(skeleton, d);
-		spAnimationState_update(animState, d);
-		spAnimationState_apply(animState, skeleton);
-		spSkeleton_updateWorldTransform(skeleton);
-		for (int ii = 0; ii < skeleton->bonesCount; ii++) {
-			spBone* bone = skeleton->bones[ii];
-			printf("%s %f %f %f %f %f %f\n", bone->data->name, bone->a, bone->b, bone->c, bone->d, bone->worldX, bone->worldY);
-		}
-		printf("========================================\n");
-		d += 0.1f;
-	}
-
-	Skeleton_dispose(skeleton);
-}
-
-int main () {
-	testcase(test, "data/tank-pro.json", "data/tank-pro.skel", "data/tank.atlas", 1.0f);
-	testcase(owl, "data/owl-pro.json", "data/owl-pro.skel", "data/owl.atlas", 0.5f);
-	testcase(coin, "data/coin-pro.json", "data/coin-pro.skel", "data/coin.atlas", 0.5f);
-	testcase(vine, "data/vine-pro.json", "data/vine-pro.skel", "data/vine.atlas", 0.5f);
-	testcase(tank, "data/tank-pro.json", "data/tank-pro.skel", "data/tank.atlas", 0.2f);
-	testcase(raptor, "data/raptor-pro.json", "data/raptor-pro.skel", "data/raptor.atlas", 0.5f);
-	testcase(spineboy, "data/spineboy-ess.json", "data/spineboy-ess.skel", "data/spineboy.atlas", 0.6f);
-	testcase(goblins, "data/goblins-pro.json", "data/goblins-pro.skel", "data/goblins.atlas", 1.4f);
-	testcase(stretchyman, "data/stretchyman-pro.json", "data/stretchyman-pro.skel", "data/stretchyman.atlas", 0.6f);
-	return 0;
-}

+ 0 - 285
spine-sfml/src/spine/spine-sfml.cpp

@@ -1,285 +0,0 @@
-/******************************************************************************
- * Spine Runtimes Software License v2.5
- *
- * Copyright (c) 2013-2016, Esoteric Software
- * All rights reserved.
- *
- * You are granted a perpetual, non-exclusive, non-sublicensable, and
- * non-transferable license to use, install, execute, and perform the Spine
- * Runtimes software and derivative works solely for personal or internal
- * use. Without the written permission of Esoteric Software (see Section 2 of
- * the Spine Software License Agreement), you may not (a) modify, translate,
- * adapt, or develop new applications using the Spine Runtimes or otherwise
- * create derivative works or improvements of the Spine Runtimes or (b) remove,
- * delete, alter, or obscure any trademarks or any copyright, trademark, patent,
- * or other intellectual property or proprietary rights notices on or in the
- * Software, including any copy thereof. Redistributions in binary or source
- * form must include this license and terms.
- *
- * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF
- * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#define SPINE_SHORT_NAMES
-#include <spine/spine-sfml.h>
-
-#ifndef SPINE_MESH_VERTEX_COUNT_MAX
-#define SPINE_MESH_VERTEX_COUNT_MAX 1000
-#endif
-
-using namespace sf;
-
-sf::BlendMode normal = sf::BlendMode(sf::BlendMode::SrcAlpha, sf::BlendMode::OneMinusSrcAlpha);
-sf::BlendMode additive = sf::BlendMode(sf::BlendMode::SrcAlpha, sf::BlendMode::One);
-sf::BlendMode multiply = sf::BlendMode(sf::BlendMode::DstColor, sf::BlendMode::OneMinusSrcAlpha);
-sf::BlendMode screen = sf::BlendMode(sf::BlendMode::One, sf::BlendMode::OneMinusSrcColor);
-
-sf::BlendMode normalPma = sf::BlendMode(sf::BlendMode::One, sf::BlendMode::OneMinusSrcAlpha);
-sf::BlendMode additivePma = sf::BlendMode(sf::BlendMode::One, sf::BlendMode::One);
-sf::BlendMode multiplyPma = sf::BlendMode(sf::BlendMode::DstColor, sf::BlendMode::OneMinusSrcAlpha);
-sf::BlendMode screenPma = sf::BlendMode(sf::BlendMode::One, sf::BlendMode::OneMinusSrcColor);
-
-_SP_ARRAY_IMPLEMENT_TYPE(spColorArray, spColor)
-
-void _AtlasPage_createTexture (AtlasPage* self, const char* path){
-	Texture* texture = new Texture();
-	if (!texture->loadFromFile(path)) return;
-
-	if (self->magFilter == SP_ATLAS_LINEAR) texture->setSmooth(true);
-	if (self->uWrap == SP_ATLAS_REPEAT && self->vWrap == SP_ATLAS_REPEAT) texture->setRepeated(true);
-
-	self->rendererObject = texture;
-	Vector2u size = texture->getSize();
-	self->width = size.x;
-	self->height = size.y;
-}
-
-void _AtlasPage_disposeTexture (AtlasPage* self){
-	delete (Texture*)self->rendererObject;
-}
-
-char* _Util_readFile (const char* path, int* length){
-	return _spReadFile(path, length);
-}
-
-/**/
-
-namespace spine {
-
-SkeletonDrawable::SkeletonDrawable (SkeletonData* skeletonData, AnimationStateData* stateData) :
-		timeScale(1),
-		vertexArray(new VertexArray(Triangles, skeletonData->bonesCount * 4)),
-		vertexEffect(0),
-		worldVertices(0), clipper(0) {
-	Bone_setYDown(true);
-	worldVertices = MALLOC(float, SPINE_MESH_VERTEX_COUNT_MAX);
-	skeleton = Skeleton_create(skeletonData);
-	tempUvs = spFloatArray_create(16);
-	tempColors = spColorArray_create(16);
-
-	ownsAnimationStateData = stateData == 0;
-	if (ownsAnimationStateData) stateData = AnimationStateData_create(skeletonData);
-
-	state = AnimationState_create(stateData);
-
-	clipper = spSkeletonClipping_create();
-}
-
-SkeletonDrawable::~SkeletonDrawable () {
-	delete vertexArray;
-	FREE(worldVertices);
-	if (ownsAnimationStateData) AnimationStateData_dispose(state->data);
-	AnimationState_dispose(state);
-	Skeleton_dispose(skeleton);
-	spSkeletonClipping_dispose(clipper);
-	spFloatArray_dispose(tempUvs);
-	spColorArray_dispose(tempColors);
-}
-
-void SkeletonDrawable::update (float deltaTime) {
-	Skeleton_update(skeleton, deltaTime);
-	AnimationState_update(state, deltaTime * timeScale);
-	AnimationState_apply(state, skeleton);
-	Skeleton_updateWorldTransform(skeleton);
-}
-
-void SkeletonDrawable::draw (RenderTarget& target, RenderStates states) const {
-	vertexArray->clear();
-	states.texture = 0;
-	unsigned short quadIndices[6] = { 0, 1, 2, 2, 3, 0 };
-
-	if (vertexEffect != 0) vertexEffect->begin(vertexEffect, skeleton);
-
-	sf::Vertex vertex;
-	Texture* texture = 0;
-	for (int i = 0; i < skeleton->slotsCount; ++i) {
-		Slot* slot = skeleton->drawOrder[i];
-		Attachment* attachment = slot->attachment;
-		if (!attachment) continue;
-
-		float* vertices = worldVertices;
-		int verticesCount = 0;
-		float* uvs = 0;
-		unsigned short* indices = 0;
-		int indicesCount = 0;
-		spColor* attachmentColor;
-
-		if (attachment->type == ATTACHMENT_REGION) {
-			RegionAttachment* regionAttachment = (RegionAttachment*)attachment;
-			spRegionAttachment_computeWorldVertices(regionAttachment, slot->bone, vertices, 0, 2);
-			verticesCount = 4;
-			uvs = regionAttachment->uvs;
-			indices = quadIndices;
-			indicesCount = 6;
-			texture = (Texture*)((AtlasRegion*)regionAttachment->rendererObject)->page->rendererObject;
-			attachmentColor = &regionAttachment->color;
-
-		} else if (attachment->type == ATTACHMENT_MESH) {
-			MeshAttachment* mesh = (MeshAttachment*)attachment;
-			if (mesh->super.worldVerticesLength > SPINE_MESH_VERTEX_COUNT_MAX) continue;
-			texture = (Texture*)((AtlasRegion*)mesh->rendererObject)->page->rendererObject;
-			spVertexAttachment_computeWorldVertices(SUPER(mesh), slot, 0, mesh->super.worldVerticesLength, worldVertices, 0, 2);
-			verticesCount = mesh->super.worldVerticesLength >> 1;
-			uvs = mesh->uvs;
-			indices = mesh->triangles;
-			indicesCount = mesh->trianglesCount;
-			attachmentColor = &mesh->color;
-		} else if (attachment->type == SP_ATTACHMENT_CLIPPING) {
-			spClippingAttachment* clip = (spClippingAttachment*)slot->attachment;
-			spSkeletonClipping_clipStart(clipper, slot, clip);
-			continue;
-		} else continue;
-
-		Uint8 r = static_cast<Uint8>(skeleton->color.r * slot->color.r * attachmentColor->r * 255);
-		Uint8 g = static_cast<Uint8>(skeleton->color.g * slot->color.g * attachmentColor->g * 255);
-		Uint8 b = static_cast<Uint8>(skeleton->color.b * slot->color.b * attachmentColor->b * 255);
-		Uint8 a = static_cast<Uint8>(skeleton->color.a * slot->color.a * attachmentColor->a * 255);
-		vertex.color.r = r;
-		vertex.color.g = g;
-		vertex.color.b = b;
-		vertex.color.a = a;
-
-		spColor light;
-		light.r = r / 255.0f;
-		light.g = g / 255.0f;
-		light.b = b / 255.0f;
-		light.a = a / 255.0f;
-
-		sf::BlendMode blend;
-		if (!usePremultipliedAlpha) {
-			switch (slot->data->blendMode) {
-				case BLEND_MODE_NORMAL:
-					blend = normal;
-					break;
-				case BLEND_MODE_ADDITIVE:
-					blend = additive;
-					break;
-				case BLEND_MODE_MULTIPLY:
-					blend = multiply;
-					break;
-				case BLEND_MODE_SCREEN:
-					blend = screen;
-					break;
-				default:
-					blend = normal;
-			}
-		} else {
-			switch (slot->data->blendMode) {
-				case BLEND_MODE_NORMAL:
-					blend = normalPma;
-					break;
-				case BLEND_MODE_ADDITIVE:
-					blend = additivePma;
-					break;
-				case BLEND_MODE_MULTIPLY:
-					blend = multiplyPma;
-					break;
-				case BLEND_MODE_SCREEN:
-					blend = screenPma;
-					break;
-				default:
-					blend = normalPma;
-			}
-		}
-
-		if (states.texture == 0) states.texture = texture;
-
-		if (states.blendMode != blend || states.texture != texture) {
-			target.draw(*vertexArray, states);
-			vertexArray->clear();
-			states.blendMode = blend;
-			states.texture = texture;
-		}
-
-		if (spSkeletonClipping_isClipping(clipper)) {
-			spSkeletonClipping_clipTriangles(clipper, vertices, verticesCount << 1, indices, indicesCount, uvs, 2);
-			vertices = clipper->clippedVertices->items;
-			verticesCount = clipper->clippedVertices->size >> 1;
-			uvs = clipper->clippedUVs->items;
-			indices = clipper->clippedTriangles->items;
-			indicesCount = clipper->clippedTriangles->size;
-		}
-
-		Vector2u size = texture->getSize();
-
-		if (vertexEffect != 0) {
-			spFloatArray_clear(tempUvs);
-			spColorArray_clear(tempColors);
-			for (int i = 0; i < verticesCount; i++) {
-				spColor vertexColor = light;
-				spColor dark;
-				dark.r = dark.g = dark.b = dark.a = 0;
-				int index = i << 1;
-				float x = vertices[index];
-				float y = vertices[index + 1];
-				float u = uvs[index];
-				float v = uvs[index + 1];
-				vertexEffect->transform(vertexEffect, &x, &y, &u, &v, &vertexColor, &dark);
-				vertices[index] = x;
-				vertices[index + 1] = y;
-				spFloatArray_add(tempUvs, u);
-				spFloatArray_add(tempUvs, v);
-				spColorArray_add(tempColors, vertexColor);
-			}
-
-			for (int i = 0; i < indicesCount; ++i) {
-				int index = indices[i] << 1;
-				vertex.position.x = vertices[index];
-				vertex.position.y = vertices[index + 1];
-				vertex.texCoords.x = uvs[index] * size.x;
-				vertex.texCoords.y = uvs[index + 1] * size.y;
-				spColor vertexColor = tempColors->items[index >> 1];
-				vertex.color.r = static_cast<Uint8>(vertexColor.r * 255);
-				vertex.color.g = static_cast<Uint8>(vertexColor.g * 255);
-				vertex.color.b = static_cast<Uint8>(vertexColor.b * 255);
-				vertex.color.a = static_cast<Uint8>(vertexColor.a * 255);
-				vertexArray->append(vertex);
-			}
-		} else {
-			for (int i = 0; i < indicesCount; ++i) {
-				int index = indices[i] << 1;
-				vertex.position.x = vertices[index];
-				vertex.position.y = vertices[index + 1];
-				vertex.texCoords.x = uvs[index] * size.x;
-				vertex.texCoords.y = uvs[index + 1] * size.y;
-				vertexArray->append(vertex);
-			}
-		}
-
-		spSkeletonClipping_clipEnd(clipper, slot);
-	}
-	target.draw(*vertexArray, states);
-	spSkeletonClipping_clipEnd2(clipper);
-
-	if (vertexEffect != 0) vertexEffect->end(vertexEffect);
-}
-
-} /* namespace spine */

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff