[sfml] Clean-up and refactoring.

This commit is contained in:
Mario Zechner 2025-08-28 13:38:42 +02:00
parent 24c7ac0edd
commit 7d7d43843c
159 changed files with 508 additions and 106179 deletions

41
spine-sfml/CMakeLists.txt Normal file
View File

@ -0,0 +1,41 @@
cmake_minimum_required(VERSION 3.16)
project(spine-sfml VERSION 4.3.0 LANGUAGES C CXX)
option(BUILD_EXAMPLES "Build examples" ON)
# Default flags
include(${CMAKE_CURRENT_LIST_DIR}/../flags.cmake)
# SFML
include(FetchContent)
set(BUILD_SHARED_LIBS OFF)
FetchContent_Declare(
SFML
GIT_REPOSITORY https://github.com/SFML/SFML
GIT_TAG 2.6.1
)
FetchContent_MakeAvailable(SFML)
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../spine-cpp ${CMAKE_BINARY_DIR}/spine-cpp)
# spine-sfml library (C++ only since SFML is a C++ library)
add_library(spine-sfml STATIC
src/spine-sfml.cpp
src/spine-sfml.h)
target_include_directories(spine-sfml PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
$<INSTALL_INTERFACE:include>)
target_link_libraries(spine-sfml
PUBLIC spine-cpp sfml-graphics sfml-window sfml-system)
# Example
if(BUILD_EXAMPLES)
add_executable(spine-sfml-example example/main.cpp)
target_link_libraries(spine-sfml-example spine-sfml)
# 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)
endif()

View File

@ -0,0 +1,45 @@
{
"version": 3,
"configurePresets": [
{
"name": "default",
"hidden": true,
"cacheVariables": {
"CMAKE_EXPORT_COMPILE_COMMANDS": "YES",
"BUILD_EXAMPLES": "ON"
}
},
{
"name": "debug",
"inherits": "default",
"displayName": "Debug",
"description": "Debug build",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "release",
"inherits": "default",
"displayName": "Release",
"description": "Release build",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/release",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
}
],
"buildPresets": [
{
"name": "debug",
"configurePreset": "debug"
},
{
"name": "release",
"configurePreset": "release"
}
]
}

100
spine-sfml/README.md Normal file
View File

@ -0,0 +1,100 @@
# spine-sfml
The spine-sfml runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using [SFML](https://www.sfml-dev.org/). spine-sfml is based on [spine-cpp](../spine-cpp).
# See the [Spine Runtimes documentation](http://esotericsoftware.com/spine-documentation#runtimes) for in-depth information
## Licensing
You are welcome to evaluate the Spine Runtimes and the examples we provide in this repository free of charge.
You can integrate the Spine Runtimes into your software free of charge, but users of your software must have their own [Spine license](https://esotericsoftware.com/spine-purchase). Please make your users aware of this requirement! This option is often chosen by those making development tools, such as an SDK, game toolkit, or software library.
In order to distribute your software containing the Spine Runtimes to others that don't have a Spine license, you need a [Spine license](https://esotericsoftware.com/spine-purchase) at the time of integration. Then you can distribute your software containing the Spine Runtimes however you like, provided others don't modify it or use it to create new software. If others want to do that, they'll need their own Spine license.
For the official legal terms governing the Spine Runtimes, please read the [Spine Runtimes License Agreement](http://esotericsoftware.com/spine-runtimes-license) and Section 2 of the [Spine Editor License Agreement](http://esotericsoftware.com/spine-editor-license#s2).
## Spine version
spine-sfml works with data exported from Spine 4.3.xx.
spine-sfml supports all Spine features.
## Usage
### Integration with CMake (Recommended)
The easiest way to integrate spine-sfml into your project is via CMake FetchContent:
```cmake
include(FetchContent)
FetchContent_Declare(
spine-sfml
GIT_REPOSITORY https://github.com/esotericsoftware/spine-runtimes.git
GIT_TAG 4.3
SOURCE_SUBDIR spine-sfml
)
FetchContent_MakeAvailable(spine-sfml)
# Link against spine-sfml
target_link_libraries(your_target spine-sfml)
```
This will automatically fetch and build spine-sfml along with its dependencies (spine-cpp and SFML).
### Manual Integration
If you prefer manual integration:
1. Download the Spine Runtimes source using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it as a zip.
2. Add the required source files to your project:
- Add sources from `spine-cpp/src` and `spine-sfml/src/spine-sfml.cpp`
3. Add the include directories: `spine-cpp/include` and `spine-sfml/src`
4. Link against SFML libraries
See the [Spine Runtimes documentation](http://esotericsoftware.com/spine-documentation#runtimes) for detailed API usage.
## Examples
The repository includes example code:
- C++ example: [example/main.cpp](example/main.cpp)
### Building the Examples
### Windows
1. Install [Visual Studio Community](https://visualstudio.microsoft.com/downloads/). Make sure you install support for C++ and CMake.
2. Download the Spine Runtimes repository using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it as a zip.
3. Open Visual Studio Community, then open `spine-sfml/` via the **Open a local folder** button in the Visual Studio Community launcher.
4. Wait for CMake to finish, then select `spine-sfml-example.exe` as the start-up project and start debugging.
### Linux
1. Install dependencies:
```bash
sudo apt-get install cmake ninja-build libsfml-dev # Ubuntu/Debian
# or equivalent for your distribution
```
2. Clone the repository: `git clone https://github.com/esotericsoftware/spine-runtimes`
3. Build and run:
```bash
cd spine-runtimes/spine-sfml
./build.sh
./build/debug/spine-sfml-example
```
### macOS
1. Install [Xcode](https://developer.apple.com/xcode/)
2. Install [Homebrew](http://brew.sh/)
3. Install dependencies:
```bash
brew install cmake ninja
```
4. Clone the repository: `git clone https://github.com/esotericsoftware/spine-runtimes`
5. Build and run:
```bash
cd spine-runtimes/spine-sfml
./build.sh
./build/debug/spine-sfml-example
```

22
spine-sfml/build.sh Executable file
View File

@ -0,0 +1,22 @@
#!/bin/bash
set -e
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
cd "$script_dir"
if [ ! -f "CMakePresets.json" ]; then
echo "Error: CMakePresets.json not found"
exit 1
fi
# Default to debug build
preset=${1:-debug}
echo "Configuring with preset: $preset"
cmake --preset=$preset
echo "Building..."
cmake --build --preset=$preset
echo "Build complete!"
echo "Examples are in build/$preset/"

View File

@ -1,42 +0,0 @@
cmake_minimum_required(VERSION 3.10)
project(spine-sfml)
# Default flags
include(${CMAKE_CURRENT_LIST_DIR}/../../flags.cmake)
# SFML
include(FetchContent)
FetchContent_Declare(SFML GIT_REPOSITORY https://github.com/SFML/SFML GIT_TAG 2.6.1)
set(FETCHCONTENT_QUIET NO)
FetchContent_MakeAvailable(SFML)
# Add spine-c
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../../spine-c ${CMAKE_BINARY_DIR}/spine-c-build)
# Define spine-sfml-c library
include_directories(${CMAKE_CURRENT_LIST_DIR}/src ${SFML_SOURCE_DIR}/include)
file(GLOB INCLUDES "${CMAKE_CURRENT_LIST_DIR}/src/**/*.h")
file(GLOB SOURCES "${CMAKE_CURRENT_LIST_DIR}/src/**/*.cpp")
add_library(spine-sfml-c STATIC ${SOURCES} ${INCLUDES})
target_link_libraries(spine-sfml-c LINK_PUBLIC spine-c sfml-graphics sfml-window sfml-system)
# Define spine-sfml-c example executable
add_executable(spine-sfml-c-example example/main.cpp)
target_link_libraries(spine-sfml-c-example spine-c spine-sfml-c)
# Link in OS dependencies like OpenGL
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
find_library(COCOA_FRAMEWORK Cocoa)
find_library(OPENGL_FRAMEWORK OpenGL)
target_link_libraries(spine-sfml-c-example ${COCOA_FRAMEWORK} ${OPENGL_FRAMEWORK})
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
target_link_libraries(spine-sfml-c-example GL)
else()
target_link_libraries(spine-sfml-c-example opengl32 gdi32 winmm)
add_definitions(-DSFML_STATIC)
endif()
# copy data to build directory
add_custom_command(TARGET spine-sfml-c-example PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_CURRENT_LIST_DIR}/data $<TARGET_FILE_DIR:spine-sfml-c-example>/data)

View File

@ -1,26 +0,0 @@
Spine Runtimes License Agreement
Last updated April 5, 2025. Replaces all prior versions.
Copyright (c) 2013-2025, Esoteric Software LLC
Integration of the Spine Runtimes into software or otherwise creating
derivative works of the Spine Runtimes is permitted under the terms and
conditions of Section 2 of the Spine Editor License Agreement:
http://esotericsoftware.com/spine-editor-license
Otherwise, it is permitted to integrate the Spine Runtimes into software
or otherwise create derivative works of the Spine Runtimes (collectively,
"Products"), provided that each user of the Products must obtain their own
Spine Editor license and redistribution of the Products in any form must
include this license and copyright notice.
THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "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 LLC 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
THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,65 +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
You are welcome to evaluate the Spine Runtimes and the examples we provide in this repository free of charge.
You can integrate the Spine Runtimes into your software free of charge, but users of your software must have their own [Spine license](https://esotericsoftware.com/spine-purchase). Please make your users aware of this requirement! This option is often chosen by those making development tools, such as an SDK, game toolkit, or software library.
In order to distribute your software containing the Spine Runtimes to others that don't have a Spine license, you need a [Spine license](https://esotericsoftware.com/spine-purchase) at the time of integration. Then you can distribute your software containing the Spine Runtimes however you like, provided others don't modify it or use it to create new software. If others want to do that, they'll need their own Spine license.
For the official legal terms governing the Spine Runtimes, please read the [Spine Runtimes License Agreement](http://esotericsoftware.com/spine-runtimes-license) and Section 2 of the [Spine Editor License Agreement](http://esotericsoftware.com/spine-editor-license#s2).
## Spine version
spine-sfml works with data exported from Spine 4.2.xx.
spine-sfml supports all Spine features except two color tinting.
## Usage
1. Create a new SFML project. See the [SFML documentation](https://www.sfml-dev.org/tutorials/2.6/) 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/c/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#runtimes) 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 2022 Community](https://visualstudio.microsoft.com/downloads/). Make sure you install support for C++, CMake as well as th Windows SDK for XP/7/8.
1. Open Visual Studio and open the `spine-sfml/c` folder via the `Open a local folder` button
1. Let CMake finish, then select `spine-sfml-cpp-example.exe` as the start-up project
1. Start debugging to run the example
### 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/c` folder
5. Type `mkdir build && cd build && cmake ..` to generate Make files
6. Type `make -j8` to compile the example
7. Run the example via `./spine-sfml-c-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`
4. 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.
5. Open a terminal, and `cd` into the `spine-runtimes/spine-sfml/c` folder
6. Type `mkdir build && cd build && cmake -G Xcode ..` to generate an Xcode project called `spine-sfml.xcodeproj`
7. Type `open spine-sfml.xcodeproj` to open the Xcode project
8. In Xcode, set the active scheme to `spine-sfml-c-example`
9. Click the `Run` button or press `CMD+R` to run the example
## Notes
- Atlas images should not use premultiplied alpha.

View File

@ -1,158 +0,0 @@
celestial-circus-pma.png
size: 1024, 1024
filter: Linear, Linear
pma: true
scale: 0.4
arm-back-down
bounds: 971, 683, 38, 82
arm-back-up
bounds: 939, 44, 83, 116
arm-front-down
bounds: 971, 603, 36, 78
arm-front-up
bounds: 289, 22, 77, 116
rotate: 90
bench
bounds: 586, 47, 189, 48
body-bottom
bounds: 868, 270, 154, 124
body-top
bounds: 2, 156, 126, 132
offsets: 0, 0, 126, 133
rotate: 90
chest
bounds: 490, 267, 104, 93
rotate: 180
cloud-back
bounds: 804, 563, 202, 165
rotate: 90
cloud-front
bounds: 606, 440, 325, 196
rotate: 270
collar
bounds: 373, 739, 47, 26
ear
bounds: 106, 737, 20, 28
eye-back-shadow
bounds: 233, 755, 14, 10
eye-front-shadow
bounds: 128, 751, 24, 14
eye-reflex-back
bounds: 787, 758, 8, 7
eye-reflex-front
bounds: 154, 758, 10, 7
eye-white-back
bounds: 616, 749, 13, 16
eye-white-front
bounds: 477, 748, 22, 17
eyelashes-down-back
bounds: 655, 759, 11, 6
eyelashes-down-front
bounds: 549, 759, 15, 6
eyelashes-top-back
bounds: 353, 755, 18, 10
eyelashes-top-front
bounds: 749, 749, 30, 16
face
bounds: 775, 277, 91, 102
offsets: 2, 0, 93, 102
feathers-back
bounds: 192, 611, 46, 46
feathers-front
bounds: 415, 679, 72, 86
fringe-middle-back
bounds: 794, 509, 33, 52
fringe-middle-front
bounds: 679, 202, 60, 50
fringe-side-back
bounds: 407, 5, 27, 94
fringe-side-front
bounds: 14, 331, 26, 93
glove-bottom-back
bounds: 14, 681, 51, 41
glove-bottom-front
bounds: 313, 288, 47, 48
hair-back-1
bounds: 716, 91, 132, 306
rotate: 270
hair-back-2
bounds: 124, 100, 80, 285
rotate: 90
hair-back-3
bounds: 410, 78, 70, 268
rotate: 270
hair-back-4
bounds: 42, 250, 88, 262
rotate: 90
hair-back-5
bounds: 320, 141, 88, 279
rotate: 90
hair-back-6
bounds: 2, 36, 88, 286
rotate: 90
hair-hat-shadow
bounds: 14, 724, 90, 41
hand-back
bounds: 2, 42, 60, 47
hand-front
bounds: 909, 208, 53, 60
hat-back
bounds: 741, 189, 64, 45
hat-front
bounds: 926, 396, 96, 56
head-back
bounds: 777, 2, 102, 86
jabot
bounds: 692, 384, 70, 55
leg-back
bounds: 362, 164, 210, 333
rotate: 90
leg-front
bounds: 590, 181, 258, 320
rotate: 90
logo-brooch
bounds: 584, 740, 16, 25
mouth
bounds: 631, 759, 22, 6
neck
bounds: 597, 441, 39, 56
nose
bounds: 556, 750, 6, 7
nose-highlight
bounds: 166, 761, 4, 4
nose-shadow
bounds: 778, 757, 7, 8
pupil-back
bounds: 442, 751, 10, 14
pupil-front
bounds: 602, 747, 12, 18
rope-back
bounds: 2, 273, 10, 492
rope-front
bounds: 2, 273, 10, 492
rope-front-bottom
bounds: 895, 69, 42, 65
skirt
bounds: 14, 325, 440, 246
rotate: 90
sock-bow
bounds: 253, 733, 33, 32
spine-logo-body
bounds: 569, 733, 13, 32
star-big
bounds: 422, 741, 18, 24
star-medium
bounds: 1011, 757, 6, 8
star-small
bounds: 218, 761, 3, 4
underskirt
bounds: 212, 320, 445, 228
rotate: 270
underskirt-back
bounds: 434, 332, 433, 171
rotate: 270
wing-back
bounds: 137, 137, 146, 252
rotate: 270
wing-front
bounds: 718, 314, 304, 248

Binary file not shown.

Before

Width:  |  Height:  |  Size: 791 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,157 +0,0 @@
celestial-circus.png
size: 1024, 1024
filter: Linear, Linear
scale: 0.4
arm-back-down
bounds: 971, 683, 38, 82
arm-back-up
bounds: 939, 44, 83, 116
arm-front-down
bounds: 971, 603, 36, 78
arm-front-up
bounds: 289, 22, 77, 116
rotate: 90
bench
bounds: 586, 47, 189, 48
body-bottom
bounds: 868, 270, 154, 124
body-top
bounds: 2, 156, 126, 132
offsets: 0, 0, 126, 133
rotate: 90
chest
bounds: 490, 267, 104, 93
rotate: 180
cloud-back
bounds: 804, 563, 202, 165
rotate: 90
cloud-front
bounds: 606, 440, 325, 196
rotate: 270
collar
bounds: 373, 739, 47, 26
ear
bounds: 106, 737, 20, 28
eye-back-shadow
bounds: 233, 755, 14, 10
eye-front-shadow
bounds: 128, 751, 24, 14
eye-reflex-back
bounds: 787, 758, 8, 7
eye-reflex-front
bounds: 154, 758, 10, 7
eye-white-back
bounds: 616, 749, 13, 16
eye-white-front
bounds: 477, 748, 22, 17
eyelashes-down-back
bounds: 655, 759, 11, 6
eyelashes-down-front
bounds: 549, 759, 15, 6
eyelashes-top-back
bounds: 353, 755, 18, 10
eyelashes-top-front
bounds: 749, 749, 30, 16
face
bounds: 775, 277, 91, 102
offsets: 2, 0, 93, 102
feathers-back
bounds: 192, 611, 46, 46
feathers-front
bounds: 415, 679, 72, 86
fringe-middle-back
bounds: 794, 509, 33, 52
fringe-middle-front
bounds: 679, 202, 60, 50
fringe-side-back
bounds: 407, 5, 27, 94
fringe-side-front
bounds: 14, 331, 26, 93
glove-bottom-back
bounds: 14, 681, 51, 41
glove-bottom-front
bounds: 313, 288, 47, 48
hair-back-1
bounds: 716, 91, 132, 306
rotate: 270
hair-back-2
bounds: 124, 100, 80, 285
rotate: 90
hair-back-3
bounds: 410, 78, 70, 268
rotate: 270
hair-back-4
bounds: 42, 250, 88, 262
rotate: 90
hair-back-5
bounds: 320, 141, 88, 279
rotate: 90
hair-back-6
bounds: 2, 36, 88, 286
rotate: 90
hair-hat-shadow
bounds: 14, 724, 90, 41
hand-back
bounds: 2, 42, 60, 47
hand-front
bounds: 909, 208, 53, 60
hat-back
bounds: 741, 189, 64, 45
hat-front
bounds: 926, 396, 96, 56
head-back
bounds: 777, 2, 102, 86
jabot
bounds: 692, 384, 70, 55
leg-back
bounds: 362, 164, 210, 333
rotate: 90
leg-front
bounds: 590, 181, 258, 320
rotate: 90
logo-brooch
bounds: 584, 740, 16, 25
mouth
bounds: 631, 759, 22, 6
neck
bounds: 597, 441, 39, 56
nose
bounds: 556, 750, 6, 7
nose-highlight
bounds: 166, 761, 4, 4
nose-shadow
bounds: 778, 757, 7, 8
pupil-back
bounds: 442, 751, 10, 14
pupil-front
bounds: 602, 747, 12, 18
rope-back
bounds: 2, 273, 10, 492
rope-front
bounds: 2, 273, 10, 492
rope-front-bottom
bounds: 895, 69, 42, 65
skirt
bounds: 14, 325, 440, 246
rotate: 90
sock-bow
bounds: 253, 733, 33, 32
spine-logo-body
bounds: 569, 733, 13, 32
star-big
bounds: 422, 741, 18, 24
star-medium
bounds: 1011, 757, 6, 8
star-small
bounds: 218, 761, 3, 4
underskirt
bounds: 212, 320, 445, 228
rotate: 270
underskirt-back
bounds: 434, 332, 433, 171
rotate: 270
wing-back
bounds: 137, 137, 146, 252
rotate: 270
wing-front
bounds: 718, 314, 304, 248

Binary file not shown.

Before

Width:  |  Height:  |  Size: 784 KiB

View File

@ -1,84 +0,0 @@
cloud-pot-pma.png
size: 1024, 512
filter: Linear, Linear
pma: true
scale: 0.5
cloud-base-1
bounds: 548, 129, 233, 210
cloud-base-10
bounds: 448, 227, 97, 101
cloud-base-2
bounds: 783, 129, 210, 208
rotate: 90
cloud-base-3
bounds: 271, 156, 175, 164
cloud-base-4
bounds: 2, 148, 176, 163
cloud-base-5
bounds: 495, 2, 145, 125
cloud-base-6
bounds: 332, 18, 161, 136
cloud-base-7
bounds: 180, 5, 150, 149
cloud-base-8
bounds: 2, 18, 154, 128
cloud-base-9
bounds: 862, 19, 107, 108
cloud-cheeks
bounds: 642, 48, 218, 79
cloud-eyes-closed
bounds: 137, 317, 132, 22
cloud-eyes-open
bounds: 2, 313, 133, 26
cloud-eyes-reflex
bounds: 271, 322, 120, 17
cloud-mouth-closed
bounds: 180, 201, 49, 16
cloud-mouth-open
bounds: 180, 219, 59, 35
leaf-big
bounds: 448, 205, 20, 49
rotate: 90
leaf-small
bounds: 993, 278, 17, 30
petal-1
bounds: 241, 236, 26, 18
petal-2
bounds: 993, 248, 28, 17
rotate: 90
petal-3
bounds: 993, 310, 29, 21
rotate: 90
pot-base
bounds: 180, 256, 76, 59
pot-eyes-closed
bounds: 500, 330, 46, 9
pot-eyes-open
bounds: 499, 214, 40, 11
pot-mouth-open
bounds: 241, 220, 14, 16
rotate: 90
pot-mouth-pouty
bounds: 521, 202, 18, 10
pot-mouth-smile
bounds: 993, 198, 14, 10
pot-mouth-smile-big
bounds: 499, 203, 20, 9
rain-blue
bounds: 241, 206, 12, 18
rotate: 90
rain-color
bounds: 258, 298, 9, 17
rain-green
bounds: 993, 210, 12, 18
rotate: 90
rain-white
bounds: 993, 224, 12, 22
rain-white-reflex
bounds: 393, 324, 5, 10
rotate: 90
stem
bounds: 393, 331, 8, 105
rotate: 90
stem-end
bounds: 1007, 233, 13, 13

Binary file not shown.

Before

Width:  |  Height:  |  Size: 341 KiB

View File

@ -1,83 +0,0 @@
cloud-pot.png
size: 1024, 512
filter: Linear, Linear
scale: 0.5
cloud-base-1
bounds: 548, 129, 233, 210
cloud-base-10
bounds: 448, 227, 97, 101
cloud-base-2
bounds: 783, 129, 210, 208
rotate: 90
cloud-base-3
bounds: 271, 156, 175, 164
cloud-base-4
bounds: 2, 148, 176, 163
cloud-base-5
bounds: 495, 2, 145, 125
cloud-base-6
bounds: 332, 18, 161, 136
cloud-base-7
bounds: 180, 5, 150, 149
cloud-base-8
bounds: 2, 18, 154, 128
cloud-base-9
bounds: 862, 19, 107, 108
cloud-cheeks
bounds: 642, 48, 218, 79
cloud-eyes-closed
bounds: 137, 317, 132, 22
cloud-eyes-open
bounds: 2, 313, 133, 26
cloud-eyes-reflex
bounds: 271, 322, 120, 17
cloud-mouth-closed
bounds: 180, 201, 49, 16
cloud-mouth-open
bounds: 180, 219, 59, 35
leaf-big
bounds: 448, 205, 20, 49
rotate: 90
leaf-small
bounds: 993, 278, 17, 30
petal-1
bounds: 241, 236, 26, 18
petal-2
bounds: 993, 248, 28, 17
rotate: 90
petal-3
bounds: 993, 310, 29, 21
rotate: 90
pot-base
bounds: 180, 256, 76, 59
pot-eyes-closed
bounds: 500, 330, 46, 9
pot-eyes-open
bounds: 499, 214, 40, 11
pot-mouth-open
bounds: 241, 220, 14, 16
rotate: 90
pot-mouth-pouty
bounds: 521, 202, 18, 10
pot-mouth-smile
bounds: 993, 198, 14, 10
pot-mouth-smile-big
bounds: 499, 203, 20, 9
rain-blue
bounds: 241, 206, 12, 18
rotate: 90
rain-color
bounds: 258, 298, 9, 17
rain-green
bounds: 993, 210, 12, 18
rotate: 90
rain-white
bounds: 993, 224, 12, 22
rain-white-reflex
bounds: 393, 324, 5, 10
rotate: 90
stem
bounds: 393, 331, 8, 105
rotate: 90
stem-end
bounds: 1007, 233, 13, 13

View File

@ -1,846 +0,0 @@
{
"skeleton": {
"hash": "XPuWaTjiwek",
"spine": "4.3.37-beta",
"x": -345,
"y": -17,
"width": 756,
"height": 1098,
"images": "./images/",
"audio": ""
},
"bones": [
{ "name": "root" },
{ "name": "pot-control", "parent": "root", "x": 5, "y": 42, "color": "8828ffff", "icon": "arrowsB" },
{ "name": "cloud", "parent": "pot-control", "x": 26.5, "y": 772, "color": "1ee8c0ff", "icon": "circle" },
{ "name": "cloud-base-1", "parent": "cloud", "x": -4, "y": 57, "color": "b0d5eaff" },
{ "name": "cloud-base-2", "parent": "cloud-base-1", "x": 148.5, "y": -18.5, "color": "b0d5eaff" },
{ "name": "cloud-base-3", "parent": "cloud-base-1", "x": -182, "y": -87.5, "color": "b0d5eaff" },
{ "name": "cloud-base-4", "parent": "cloud", "x": -31.5, "y": -77, "color": "b0d5eaff" },
{ "name": "cloud-base-5", "parent": "cloud-base-4", "x": 177.5, "y": 8, "color": "b0d5eaff" },
{ "name": "cloud-base-6", "parent": "cloud-base-1", "x": -150.5, "y": 40, "color": "b0d5eaff" },
{ "name": "cloud-base-7", "parent": "cloud-base-1", "x": 8.5, "y": 36.5, "color": "b0d5eaff" },
{ "name": "cloud-base-8", "parent": "cloud-base-2", "x": 3.5, "y": 68.5, "color": "b0d5eaff" },
{ "name": "cloud-base-9", "parent": "cloud-base-3", "x": -83.5, "y": 30.5, "color": "b0d5eaff" },
{ "name": "cloud-base-10", "parent": "cloud-base-5", "x": 137, "y": 54.5, "color": "b0d5eaff" },
{ "name": "rain-blue", "parent": "cloud", "x": 102.49, "y": -26, "color": "2360e3ff", "icon": "diamond" },
{ "name": "rain-color", "parent": "cloud", "x": -39.42, "y": -26, "color": "2360e3ff", "icon": "diamond" },
{ "name": "rain-green", "parent": "cloud", "x": 35.08, "y": -26, "color": "2360e3ff", "icon": "diamond" },
{ "name": "rain-white", "parent": "cloud", "x": -103.92, "y": -26, "color": "2360e3ff", "icon": "diamond" },
{ "name": "pot", "parent": "pot-control", "x": -5, "y": -42, "color": "8828ffff" },
{ "name": "pot-face", "parent": "pot", "x": -1.06, "y": 28.16, "color": "f38383ff", "icon": "gear" },
{
"name": "leaf-big",
"parent": "pot",
"length": 46.73,
"rotation": 119.24,
"x": 4.04,
"y": 95.05,
"color": "abe323ff"
},
{ "name": "leaf-big-tip", "parent": "leaf-big", "length": 46.73, "x": 46.73, "color": "abe323ff" },
{
"name": "leaf-small",
"parent": "pot",
"length": 51.32,
"rotation": 50.93,
"x": 10.16,
"y": 96.81,
"color": "abe323ff"
},
{
"name": "stem",
"parent": "pot",
"length": 104.76,
"rotation": 90,
"x": 7.24,
"y": 92.61,
"color": "abe323ff"
},
{ "name": "stem2", "parent": "stem", "length": 69.84, "x": 104.76, "color": "abe323ff" },
{ "name": "stem3", "parent": "stem2", "length": 34.92, "x": 69.84, "color": "abe323ff" },
{
"name": "petal-3",
"parent": "stem3",
"length": 37.74,
"rotation": 1.03,
"x": 30.73,
"y": 0.64,
"color": "2381e3ff"
},
{
"name": "petal-1",
"parent": "stem3",
"length": 40.11,
"rotation": 70.18,
"x": 34.13,
"y": 3.02,
"color": "2381e3ff"
},
{
"name": "petal-2",
"parent": "stem3",
"length": 48.62,
"rotation": -80.34,
"x": 32.09,
"y": -4.46,
"color": "2381e3ff"
},
{ "name": "cloud-face", "parent": "cloud", "y": 14.93, "color": "9e82ffff", "icon": "arrowsB" }
],
"slots": [
{ "name": "rain/rain-green", "bone": "rain-green", "attachment": "rain-green" },
{ "name": "rain/rain-blue", "bone": "rain-blue", "attachment": "rain-blue" },
{ "name": "rain/rain-color", "bone": "rain-color", "attachment": "rain-color" },
{ "name": "rain/rain-white", "bone": "rain-white", "attachment": "rain-white" },
{ "name": "rain/rain-white-reflex", "bone": "rain-white", "attachment": "rain-white-reflex" },
{ "name": "flower/petal-1", "bone": "petal-1", "attachment": "petal-1" },
{ "name": "flower/petal-2", "bone": "petal-2", "attachment": "petal-2" },
{ "name": "flower/petal-3", "bone": "petal-3", "attachment": "petal-3" },
{ "name": "flower/stem", "bone": "stem", "attachment": "stem" },
{ "name": "flower/leaf-big", "bone": "leaf-big", "attachment": "leaf-big" },
{ "name": "flower/leaf-small", "bone": "leaf-small", "attachment": "leaf-small" },
{ "name": "flower/stem-end", "bone": "stem3", "attachment": "stem-end" },
{ "name": "pot/pot-base", "bone": "pot", "attachment": "pot-base" },
{ "name": "pot/pot-mouth", "bone": "pot-face", "attachment": "pot-mouth-smile-big" },
{ "name": "pot/pot-eyes", "bone": "pot-face", "attachment": "pot-eyes-open" },
{ "name": "cloud/cloud-base/cloud-base-1", "bone": "cloud-base-1", "attachment": "cloud-base-1" },
{ "name": "cloud/cloud-base/cloud-base-2", "bone": "cloud-base-2", "attachment": "cloud-base-2" },
{ "name": "cloud/cloud-base/cloud-base-3", "bone": "cloud-base-3", "attachment": "cloud-base-3" },
{ "name": "cloud/cloud-base/cloud-base-4", "bone": "cloud-base-4", "attachment": "cloud-base-4" },
{ "name": "cloud/cloud-base/cloud-base-5", "bone": "cloud-base-5", "attachment": "cloud-base-5" },
{ "name": "cloud/cloud-base/cloud-base-6", "bone": "cloud-base-6", "attachment": "cloud-base-6" },
{ "name": "cloud/cloud-base/cloud-base-7", "bone": "cloud-base-7", "attachment": "cloud-base-7" },
{ "name": "cloud/cloud-base/cloud-base-8", "bone": "cloud-base-8", "attachment": "cloud-base-8" },
{ "name": "cloud/cloud-base/cloud-base-9", "bone": "cloud-base-9", "attachment": "cloud-base-9" },
{ "name": "cloud/cloud-base/cloud-base-10", "bone": "cloud-base-10", "attachment": "cloud-base-10" },
{ "name": "cloud/cloud-cheeks", "bone": "cloud-face", "attachment": "cloud-cheeks" },
{ "name": "cloud/cloud-eyes", "bone": "cloud-face", "attachment": "cloud-eyes-open" },
{ "name": "cloud/cloud-eyes-reflex", "bone": "cloud-face", "attachment": "cloud-eyes-reflex" },
{ "name": "cloud/cloud-mouth", "bone": "cloud-face", "attachment": "cloud-mouth-closed" }
],
"constraints": [
{
"type": "physics",
"name": "cloud",
"bone": "cloud",
"x": 1,
"y": 1,
"strength": 172.8,
"damping": 0.8571,
"mass": 3
},
{
"type": "physics",
"name": "rain/rain-white",
"bone": "rain-white",
"x": 1,
"y": 1,
"inertia": 1,
"strength": 0,
"damping": 1,
"gravity": 70
},
{
"type": "physics",
"name": "rain/rain-green",
"bone": "rain-green",
"x": 1,
"y": 1,
"inertia": 1,
"strength": 0,
"damping": 1,
"gravity": 70
},
{
"type": "physics",
"name": "rain/rain-color",
"bone": "rain-color",
"x": 1,
"y": 1,
"inertia": 1,
"strength": 0,
"damping": 1,
"gravity": 70
},
{
"type": "physics",
"name": "rain/rain-blue",
"bone": "rain-blue",
"x": 1,
"y": 1,
"inertia": 1,
"strength": 0,
"damping": 1,
"gravity": 70
},
{
"type": "physics",
"name": "cloud-base/cloud-base-1",
"bone": "cloud-base-1",
"x": 1,
"y": 1,
"limit": 500,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-2",
"bone": "cloud-base-2",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-3",
"bone": "cloud-base-3",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-4",
"bone": "cloud-base-4",
"x": 1,
"y": 1,
"limit": 500,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-5",
"bone": "cloud-base-5",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-6",
"bone": "cloud-base-6",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-7",
"bone": "cloud-base-7",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-8",
"bone": "cloud-base-8",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-9",
"bone": "cloud-base-9",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-10",
"bone": "cloud-base-10",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "plant/leaf-big",
"bone": "leaf-big",
"rotate": 0.7532,
"shearX": 0.2468,
"limit": 500,
"strength": 160.5,
"damping": 0.8367,
"mass": 4
},
{
"type": "physics",
"name": "plant/leaf-small",
"bone": "leaf-small",
"rotate": 0.6026,
"limit": 500,
"strength": 160.5,
"damping": 0.8367,
"mass": 4
},
{
"type": "physics",
"name": "plant/stem",
"bone": "stem",
"rotate": 0.8205,
"limit": 700,
"strength": 152.4,
"damping": 0.9388,
"mass": 2.6
},
{
"type": "physics",
"name": "plant/stem2",
"bone": "stem2",
"rotate": 0.8205,
"limit": 700,
"strength": 152.4,
"damping": 0.9388,
"mass": 2.6
},
{
"type": "physics",
"name": "plant/stem3",
"bone": "stem3",
"rotate": 0.8205,
"limit": 700,
"strength": 152.4,
"damping": 0.9388,
"mass": 2.6
},
{
"type": "physics",
"name": "plant/petal-1",
"bone": "petal-1",
"rotate": 1,
"limit": 500,
"strength": 164.6,
"damping": 0.6531,
"mass": 2.6
},
{
"type": "physics",
"name": "plant/petal-3",
"bone": "petal-3",
"rotate": 1,
"limit": 500,
"strength": 164.6,
"damping": 0.7823,
"mass": 3.83
},
{
"type": "physics",
"name": "plant/petal-2",
"bone": "petal-2",
"rotate": 1,
"limit": 500,
"strength": 164.6,
"damping": 0.6531,
"mass": 2.6
},
{
"type": "physics",
"name": "plant/leaf-big-tip",
"bone": "leaf-big-tip",
"rotate": 1,
"limit": 500,
"strength": 160.5,
"damping": 0.8367,
"mass": 4
},
{
"type": "physics",
"name": "pot-face",
"bone": "pot-face",
"x": 0.1667,
"y": 0.1026,
"limit": 500,
"strength": 137.3,
"damping": 0.6078
},
{
"type": "physics",
"name": "cloud-face",
"bone": "cloud-face",
"x": 0.1923,
"y": 0.141,
"limit": 500,
"damping": 0.15
}
],
"skins": [
{
"name": "default",
"attachments": {
"cloud/cloud-base/cloud-base-1": {
"cloud-base-1": { "width": 465, "height": 420 }
},
"cloud/cloud-base/cloud-base-2": {
"cloud-base-2": { "width": 420, "height": 415 }
},
"cloud/cloud-base/cloud-base-3": {
"cloud-base-3": { "width": 349, "height": 327 }
},
"cloud/cloud-base/cloud-base-4": {
"cloud-base-4": { "width": 352, "height": 326 }
},
"cloud/cloud-base/cloud-base-5": {
"cloud-base-5": { "width": 289, "height": 250 }
},
"cloud/cloud-base/cloud-base-6": {
"cloud-base-6": { "width": 322, "height": 272 }
},
"cloud/cloud-base/cloud-base-7": {
"cloud-base-7": { "width": 300, "height": 297 }
},
"cloud/cloud-base/cloud-base-8": {
"cloud-base-8": { "width": 307, "height": 256 }
},
"cloud/cloud-base/cloud-base-9": {
"cloud-base-9": { "width": 214, "height": 216 }
},
"cloud/cloud-base/cloud-base-10": {
"cloud-base-10": { "width": 193, "height": 201 }
},
"cloud/cloud-cheeks": {
"cloud-cheeks": { "x": -19, "y": -53.93, "width": 435, "height": 158 }
},
"cloud/cloud-eyes": {
"cloud-eyes-closed": { "x": -10, "y": -5.43, "width": 263, "height": 43 },
"cloud-eyes-open": { "x": -8, "y": -4.43, "width": 265, "height": 51 }
},
"cloud/cloud-eyes-reflex": {
"cloud-eyes-reflex": { "x": -10, "y": 2.07, "width": 239, "height": 34 }
},
"cloud/cloud-mouth": {
"cloud-mouth-closed": { "y": -14.93, "width": 97, "height": 32 },
"cloud-mouth-open": { "x": -0.5, "y": -27.93, "width": 118, "height": 70 }
},
"flower/leaf-big": {
"leaf-big": {
"type": "mesh",
"uvs": [ 1, 1, 0, 1, 0, 0.75, 0, 0.5, 0, 0.25, 0, 0, 1, 0, 1, 0.25, 1, 0.5, 1, 0.75 ],
"triangles": [ 4, 5, 6, 7, 4, 6, 3, 4, 7, 8, 3, 7, 2, 3, 8, 9, 2, 8, 1, 2, 9, 0, 1, 9 ],
"vertices": [ 1, 19, -5.05, -21.72, 1, 1, 19, -5.05, 18.28, 1, 2, 19, 19.45, 18.28, 0.75483, 20, -27.28, 18.28, 0.24517, 2, 19, 43.95, 18.28, 0.50538, 20, -2.78, 18.28, 0.49462, 2, 19, 68.45, 18.28, 0.25278, 20, 21.72, 18.28, 0.74722, 1, 20, 46.22, 18.28, 1, 1, 20, 46.22, -21.72, 1, 2, 19, 68.45, -21.72, 0.24458, 20, 21.72, -21.72, 0.75542, 2, 19, 43.95, -21.72, 0.4937, 20, -2.78, -21.72, 0.5063, 2, 19, 19.45, -21.72, 0.74651, 20, -27.28, -21.72, 0.25349 ],
"hull": 10,
"edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 0 ],
"width": 40,
"height": 98
}
},
"flower/leaf-small": {
"leaf-small": { "x": 25.02, "y": 0.4, "rotation": -91.36, "width": 34, "height": 59 }
},
"flower/petal-1": {
"petal-1": { "x": 18.88, "y": -4.54, "rotation": -160.18, "width": 52, "height": 36 }
},
"flower/petal-2": {
"petal-2": { "x": 21.96, "y": 2.06, "rotation": -9.66, "width": 56, "height": 34 }
},
"flower/petal-3": {
"petal-3": { "x": 16.97, "y": -5.71, "rotation": -91.03, "width": 58, "height": 42 }
},
"flower/stem": {
"stem": {
"type": "mesh",
"uvs": [ 1, 1, 0, 1, 0, 0.90909, 0, 0.81818, 0, 0.72727, 0, 0.63636, 0, 0.54545, 0, 0.45455, 0, 0.36364, 0, 0.27273, 0, 0.18182, 0, 0.09091, 0, 0, 1, 0, 1, 0.09091, 1, 0.18182, 1, 0.27273, 1, 0.36364, 1, 0.45455, 1, 0.54545, 1, 0.63636, 1, 0.72727, 1, 0.81818, 1, 0.90909 ],
"triangles": [ 11, 12, 13, 14, 11, 13, 10, 11, 14, 15, 10, 14, 9, 10, 15, 16, 9, 15, 8, 9, 16, 17, 8, 16, 7, 8, 17, 18, 7, 17, 6, 7, 18, 19, 6, 18, 5, 6, 19, 20, 5, 19, 4, 5, 20, 21, 4, 20, 3, 4, 21, 22, 3, 21, 2, 3, 22, 23, 2, 22, 1, 2, 23, 0, 1, 23 ],
"vertices": [ 1, 22, -3.61, -6.76, 1, 1, 22, -3.61, 9.24, 1, 3, 22, 15.49, 9.24, 0.97258, 23, -89.27, 9.24, 0.02734, 24, -159.11, 9.24, 8.0E-5, 3, 22, 34.58, 9.24, 0.92758, 23, -70.18, 9.24, 0.07175, 24, -140.02, 9.24, 6.7E-4, 3, 22, 53.67, 9.24, 0.851, 23, -51.09, 9.24, 0.14565, 24, -120.93, 9.24, 0.00335, 3, 22, 72.76, 9.24, 0.73702, 23, -32, 9.24, 0.25075, 24, -101.84, 9.24, 0.01223, 3, 22, 91.85, 9.24, 0.59184, 23, -12.91, 9.24, 0.37282, 24, -82.74, 9.24, 0.03534, 3, 22, 110.94, 9.24, 0.43333, 23, 6.18, 9.24, 0.482, 24, -63.65, 9.24, 0.08467, 3, 22, 130.03, 9.24, 0.28467, 23, 25.27, 9.24, 0.54153, 24, -44.56, 9.24, 0.1738, 3, 22, 149.12, 9.24, 0.16502, 23, 44.37, 9.24, 0.52188, 24, -25.47, 9.24, 0.3131, 3, 22, 168.21, 9.24, 0.08234, 23, 63.46, 9.24, 0.4129, 24, -6.38, 9.24, 0.50477, 3, 22, 187.3, 9.24, 0.03198, 23, 82.55, 9.24, 0.228, 24, 12.71, 9.24, 0.74001, 1, 24, 31.8, 9.24, 1, 1, 24, 31.8, -6.76, 1, 3, 22, 187.3, -6.76, 0.02989, 23, 82.55, -6.76, 0.23389, 24, 12.71, -6.76, 0.73622, 3, 22, 168.21, -6.76, 0.07799, 23, 63.46, -6.76, 0.42357, 24, -6.38, -6.76, 0.49844, 3, 22, 149.12, -6.76, 0.1584, 23, 44.37, -6.76, 0.53549, 24, -25.47, -6.76, 0.30611, 3, 22, 130.03, -6.76, 0.27629, 23, 25.27, -6.76, 0.55594, 24, -44.56, -6.76, 0.16777, 3, 22, 110.94, -6.76, 0.42428, 23, 6.18, -6.76, 0.49529, 24, -63.65, -6.76, 0.08044, 3, 22, 91.85, -6.76, 0.58346, 23, -12.91, -6.76, 0.38366, 24, -82.74, -6.76, 0.03289, 3, 22, 72.76, -6.76, 0.73038, 23, -32, -6.76, 0.25856, 24, -101.84, -6.76, 0.01107, 3, 22, 53.67, -6.76, 0.84652, 23, -51.09, -6.76, 0.15057, 24, -120.93, -6.76, 0.00291, 3, 22, 34.58, -6.76, 0.92506, 23, -70.18, -6.76, 0.0744, 24, -140.02, -6.76, 5.4E-4, 3, 22, 15.49, -6.76, 0.97151, 23, -89.27, -6.76, 0.02843, 24, -159.11, -6.76, 6.0E-5 ],
"hull": 24,
"edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 0 ],
"width": 16,
"height": 210
}
},
"flower/stem-end": {
"stem-end": { "x": 25.8, "y": -0.26, "rotation": -90, "width": 25, "height": 26 }
},
"pot/pot-base": {
"pot-base": { "x": 5, "y": 42, "width": 152, "height": 118 }
},
"pot/pot-eyes": {
"pot-eyes-closed": { "x": -0.94, "y": 2.34, "width": 92, "height": 17 },
"pot-eyes-open": { "x": 0.06, "y": 3.84, "width": 80, "height": 22 }
},
"pot/pot-mouth": {
"pot-mouth-open": { "x": -1.44, "y": -13.66, "width": 27, "height": 31 },
"pot-mouth-pouty": { "x": 0.56, "y": -12.66, "width": 35, "height": 19 },
"pot-mouth-smile": { "x": 0.56, "y": -12.16, "width": 27, "height": 20 },
"pot-mouth-smile-big": { "x": 1.56, "y": -9.16, "width": 39, "height": 18 }
},
"rain/rain-blue": {
"rain-blue": { "width": 23, "height": 36 }
},
"rain/rain-color": {
"rain-color": { "width": 18, "height": 34 }
},
"rain/rain-green": {
"rain-green": { "width": 23, "height": 36 }
},
"rain/rain-white": {
"rain-white": { "width": 23, "height": 44 }
},
"rain/rain-white-reflex": {
"rain-white-reflex": { "x": -0.5, "y": 3.5, "width": 10, "height": 19 }
}
}
}
],
"animations": {
"playing-in-the-rain": {
"slots": {
"cloud/cloud-eyes": {
"attachment": [
{ "time": 0.2, "name": "cloud-eyes-closed" },
{ "time": 0.9, "name": "cloud-eyes-open" },
{ "time": 1.7667, "name": "cloud-eyes-closed" },
{ "time": 1.9333, "name": "cloud-eyes-open" },
{ "time": 2.4333, "name": "cloud-eyes-closed" },
{ "time": 2.6, "name": "cloud-eyes-open" },
{ "time": 3.9333, "name": "cloud-eyes-closed" },
{ "time": 4.1, "name": "cloud-eyes-open" }
]
},
"cloud/cloud-mouth": {
"attachment": [
{ "time": 0.2, "name": "cloud-mouth-open" },
{ "time": 0.9, "name": "cloud-mouth-closed" }
]
},
"pot/pot-eyes": {
"attachment": [
{ "time": 0.1333, "name": "pot-eyes-closed" },
{ "time": 0.3, "name": "pot-eyes-open" },
{ "time": 1.0667, "name": "pot-eyes-closed" },
{ "time": 1.5, "name": "pot-eyes-open" },
{ "time": 3.0333, "name": "pot-eyes-closed" },
{ "time": 3.2333, "name": "pot-eyes-open" },
{ "time": 3.4667, "name": "pot-eyes-closed" },
{ "time": 3.6667, "name": "pot-eyes-open" }
]
},
"pot/pot-mouth": {
"attachment": [
{ "time": 0.1333, "name": "pot-mouth-open" },
{ "time": 0.3, "name": "pot-mouth-smile-big" },
{ "time": 1.0667, "name": "pot-mouth-pouty" },
{ "time": 2.4, "name": "pot-mouth-smile" },
{ "time": 3.0333, "name": "pot-mouth-smile-big" }
]
}
},
"bones": {
"pot": {
"rotate": [
{ "time": 1.1 },
{ "time": 1.2, "value": -12.76 },
{ "time": 1.5333, "curve": "stepped" },
{ "time": 3.7667 },
{ "time": 3.9, "value": 8.28 },
{ "time": 4.2333, "value": -4.34 },
{ "time": 4.4333 }
],
"scale": [
{},
{ "time": 0.2, "y": 0.752 },
{ "time": 0.4, "x": 0.845, "y": 1.068 },
{ "time": 0.6333 }
]
},
"pot-control": {
"translatex": [
{
"time": 1.0667,
"curve": [ 1.222, -203.48, 1.378, -610.44 ]
},
{ "time": 1.5333, "value": -610.44, "curve": "stepped" },
{
"time": 2.2333,
"value": -610.44,
"curve": [ 2.389, -610.44, 2.544, -478.45 ]
},
{ "time": 2.7, "value": -478.45, "curve": "stepped" },
{
"time": 3.8333,
"value": -478.45,
"curve": [ 3.971, -478.45, 4.095, -135.56 ]
},
{ "time": 4.2333 }
],
"translatey": [
{
"time": 1.0333,
"curve": [ 1.089, 10.56, 1.144, 44.34 ]
},
{
"time": 1.2,
"value": 44.34,
"curve": [ 1.256, 44.34, 1.311, 0 ]
},
{ "time": 1.3667, "curve": "stepped" },
{
"time": 2.2333,
"curve": [ 2.408, 0, 2.392, 44.34 ]
},
{
"time": 2.4333,
"value": 44.34,
"curve": [ 2.455, 44.34, 2.51, 0 ]
},
{ "time": 2.6, "curve": "stepped" },
{
"time": 3.8,
"curve": [ 3.841, 14.78, 3.893, 44.34 ]
},
{
"time": 3.9333,
"value": 44.34,
"curve": [ 4.023, 44.34, 4.111, 14.78 ]
},
{ "time": 4.2 }
]
},
"cloud-base-1": {
"rotate": [
{
"curve": [ 0.144, -9.36, 0.289, -17.29 ]
},
{
"time": 0.4333,
"value": -17.29,
"curve": [ 0.5, -17.29, 0.567, -4.32 ]
},
{ "time": 0.6333 }
],
"scale": [
{
"curve": [ 0.089, 1, 0.178, 1.064, 0.089, 1, 0.178, 1.064 ]
},
{
"time": 0.2667,
"x": 1.064,
"y": 1.064,
"curve": [ 0.411, 1.064, 0.556, 1.021, 0.411, 1.064, 0.556, 1.021 ]
},
{ "time": 0.7 }
]
},
"cloud-base-4": {
"rotate": [
{
"curve": [ 0.1, 5.55, 0.2, 14.81 ]
},
{
"time": 0.3,
"value": 14.81,
"curve": [ 0.467, 14.81, 0.633, 9.25 ]
},
{ "time": 0.8 }
],
"scale": [
{
"curve": [ 0.089, 1, 0.178, 1.064, 0.089, 1, 0.178, 1.064 ]
},
{
"time": 0.2667,
"x": 1.064,
"y": 1.064,
"curve": [ 0.411, 1.064, 0.556, 1.021, 0.411, 1.064, 0.556, 1.021 ]
},
{ "time": 0.7 }
]
},
"cloud": {
"translate": [
{ "time": 0.2333 },
{ "time": 0.3333, "y": 30.43 },
{ "time": 0.4667 },
{ "time": 0.5667, "y": 30.43 },
{ "time": 0.6667 },
{ "time": 0.7667, "y": 30.43 },
{ "time": 0.9333 }
]
}
},
"physics": {
"rain/rain-blue": {
"reset": [
{ "time": 0.4667 },
{ "time": 0.9333 },
{ "time": 1.4 },
{ "time": 1.8667 },
{ "time": 2.3333 },
{ "time": 2.8 },
{ "time": 3.2667 },
{ "time": 3.7333 },
{ "time": 4.2 },
{ "time": 4.6667 }
]
},
"rain/rain-color": {
"reset": [
{ "time": 0.3 },
{ "time": 0.7667 },
{ "time": 1.2333 },
{ "time": 1.7 },
{ "time": 2.1667 },
{ "time": 2.6333 },
{ "time": 3.1 },
{ "time": 3.5667 },
{ "time": 4.0333 },
{ "time": 4.5 }
]
},
"rain/rain-green": {
"reset": [
{ "time": 0.1333 },
{ "time": 0.6 },
{ "time": 1.0667 },
{ "time": 1.5333 },
{ "time": 2 },
{ "time": 2.4667 },
{ "time": 2.9333 },
{ "time": 3.4 },
{ "time": 3.8667 },
{ "time": 4.3333 }
]
},
"rain/rain-white": {
"reset": [
{},
{ "time": 0.4667 },
{ "time": 0.9333 },
{ "time": 1.4 },
{ "time": 1.8667 },
{ "time": 2.3333 },
{ "time": 2.8 },
{ "time": 3.2667 },
{ "time": 3.7333 },
{ "time": 4.2 }
]
}
}
},
"pot-moving-followed-by-rain": {
"bones": {
"pot-control": {
"translate": [
{},
{ "time": 0.5667, "x": -389.34, "curve": "stepped" },
{ "time": 1.1667, "x": -389.34 },
{ "time": 2.2, "x": 463.88, "curve": "stepped" },
{ "time": 2.4667, "x": 463.88 },
{ "time": 3 }
]
}
},
"physics": {
"rain/rain-blue": {
"reset": [
{ "time": 0.4667 },
{ "time": 0.9333 },
{ "time": 1.4 },
{ "time": 1.8667 },
{ "time": 2.3333 },
{ "time": 2.8 },
{ "time": 3.2667 }
]
},
"rain/rain-color": {
"reset": [
{ "time": 0.3 },
{ "time": 0.7667 },
{ "time": 1.2333 },
{ "time": 1.7 },
{ "time": 2.1667 },
{ "time": 2.6333 },
{ "time": 3.1 }
]
},
"rain/rain-green": {
"reset": [
{ "time": 0.1333 },
{ "time": 0.6 },
{ "time": 1.0667 },
{ "time": 1.5333 },
{ "time": 2 },
{ "time": 2.4667 },
{ "time": 2.9333 }
]
},
"rain/rain-white": {
"reset": [
{},
{ "time": 0.4667 },
{ "time": 0.9333 },
{ "time": 1.4 },
{ "time": 1.8667 },
{ "time": 2.3333 },
{ "time": 2.8 }
]
}
}
},
"rain": {
"physics": {
"rain/rain-blue": {
"reset": [
{ "time": 0.4667 }
]
},
"rain/rain-color": {
"reset": [
{ "time": 0.3 }
]
},
"rain/rain-green": {
"reset": [
{ "time": 0.1333 }
]
},
"rain/rain-white": {
"reset": [
{}
]
}
}
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

View File

@ -1,20 +0,0 @@
coin-pma.png
size: 1024, 1024
filter: Linear, Linear
pma: true
coin-front-logo
bounds: 328, 266, 305, 302
coin-front-shine-logo
bounds: 635, 2, 282, 282
coin-front-shine-spineboy
bounds: 635, 286, 282, 282
coin-front-spineboy
bounds: 21, 266, 305, 302
coin-side-round
bounds: 2, 120, 144, 282
rotate: 90
coin-side-straight
bounds: 2, 286, 17, 282
shine
bounds: 286, 192, 72, 245
rotate: 90

Binary file not shown.

Before

Width:  |  Height:  |  Size: 289 KiB

View File

@ -1,259 +0,0 @@
{
"skeleton": {
"hash": "aqQIMNiF9ZY",
"spine": "4.3.37-beta",
"x": -152.5,
"y": -151,
"width": 305,
"height": 302,
"images": "./images/",
"audio": ""
},
"bones": [
{ "name": "root" },
{ "name": "coin-front", "parent": "root" },
{ "name": "clipping", "parent": "coin-front" },
{ "name": "coin-sides", "parent": "root" },
{ "name": "coin-side-round", "parent": "coin-sides" },
{ "name": "coin-side-straight", "parent": "coin-sides" },
{ "name": "shine", "parent": "root", "x": 243.14 }
],
"slots": [
{ "name": "coin-side", "bone": "coin-side-straight", "color": "ffdb2fff", "attachment": "coin-side-straight" },
{ "name": "coin-side-round", "bone": "coin-side-round", "color": "ffdb2fff", "attachment": "coin-side-round" },
{ "name": "coin-front-texture", "bone": "coin-front", "color": "868686ff", "attachment": "coin-front-logo" },
{ "name": "coin-front-shine", "bone": "coin-front", "color": "888888ff", "dark": "000000", "attachment": "coin-front-shine-logo", "blend": "additive" },
{ "name": "clipping", "bone": "clipping", "attachment": "clipping" },
{ "name": "shine", "bone": "shine", "color": "ffffff60", "attachment": "shine", "blend": "additive" }
],
"skins": [
{
"name": "default",
"attachments": {
"clipping": {
"clipping": {
"type": "clipping",
"end": "clipping",
"vertexCount": 39,
"vertices": [ 0.1, 140.26, -26.4, 138.14, -50.51, 131.25, -75.42, 119.06, -98.21, 101.04, -115.44, 82.22, -127.63, 62.08, -136.11, 39.03, -140.08, 19.68, -141.41, -0.19, -140.08, -22.98, -134.78, -45.5, -125.24, -66.44, -113.32, -84.19, -98.21, -101.95, -80.46, -116.52, -61.38, -127.39, -38.92, -134.81, -18.22, -139.27, -0.14, -140.58, 24.23, -138.48, 45.45, -132.46, 67.98, -122.5, 86.58, -110.19, 102.56, -95.25, 115.4, -78.75, 125.36, -61.72, 134, -42.33, 138.46, -22.15, 139.24, -0.15, 138.46, 20.29, 133.48, 39.94, 127.19, 58.54, 117.5, 76.1, 104.4, 92.86, 88.42, 108.32, 69.03, 121.42, 50.43, 130.85, 26.32, 137.4 ],
"color": "ce3a3aff"
}
},
"coin-front-shine": {
"coin-front-shine-logo": { "width": 282, "height": 282 },
"coin-front-shine-spineboy": { "width": 282, "height": 282 }
},
"coin-front-texture": {
"coin-front-logo": { "width": 305, "height": 302 },
"coin-front-spineboy": { "width": 305, "height": 302 }
},
"coin-side": {
"coin-side-straight": { "x": 0.5, "width": 17, "height": 282 }
},
"coin-side-round": {
"coin-side-round": { "x": -69.43, "width": 144, "height": 282 }
},
"shine": {
"shine": { "y": 0.5, "scaleX": 1.6004, "scaleY": 1.6004, "width": 72, "height": 245 }
}
}
}
],
"animations": {
"animation": {
"slots": {
"coin-front-shine": {
"rgba2": [
{ "light": "7d7d7dff", "dark": "000000" },
{ "time": 0.2667, "light": "000000ff", "dark": "7e7e7e" },
{ "time": 0.664, "light": "000000ff", "dark": "000000" },
{ "time": 1.0333, "light": "7f7f7fff", "dark": "000000" },
{ "time": 1.3333, "light": "404040ff", "dark": "000000" },
{ "time": 1.6, "light": "000000ff", "dark": "7e7e7e" },
{ "time": 2.0022, "light": "000000ff", "dark": "000000" },
{ "time": 2.4, "light": "7f7f7fff", "dark": "000000" },
{ "time": 2.6667, "light": "7d7d7dff", "dark": "000000" }
],
"attachment": [
{ "time": 0.6667, "name": "coin-front-shine-spineboy" },
{ "time": 2, "name": "coin-front-shine-logo" }
]
},
"coin-front-texture": {
"rgba": [
{ "color": "858585ff" },
{ "time": 0.4, "color": "ffffffff" },
{
"time": 0.6696,
"color": "858585ff",
"curve": [ 0.725, 0.59, 0.892, 1, 0.725, 0.59, 0.892, 1, 0.725, 0.59, 0.892, 1, 0.725, 1, 0.892, 1 ]
},
{ "time": 0.9667, "color": "ffffffff" },
{ "time": 1.3318, "color": "858585ff", "curve": "stepped" },
{ "time": 1.3333, "color": "858585ff" },
{ "time": 1.7333, "color": "ffffffff" },
{ "time": 1.9982, "color": "858585ff", "curve": "stepped" },
{ "time": 2.0022, "color": "858585ff" },
{ "time": 2.3, "color": "ffffffff" },
{ "time": 2.6667, "color": "858585ff" }
],
"attachment": [
{ "time": 0.6667, "name": "coin-front-spineboy" },
{ "time": 2, "name": "coin-front-logo" }
]
}
},
"bones": {
"coin-front": {
"translate": [
{},
{ "time": 0.664, "x": 8.3, "curve": "stepped" },
{
"time": 0.6696,
"x": -8.3,
"curve": [ 0.794, -7.08, 1.167, 0, 0.794, 0, 1.167, 0 ]
},
{ "time": 1.3333 },
{ "time": 1.9982, "x": 8.3, "curve": "stepped" },
{ "time": 2.0022, "x": -8.3 },
{ "time": 2.6667 }
],
"scale": [
{
"curve": [ 0.164, 1, 0.484, 0.091, 0.164, 1, 0.484, 1 ]
},
{ "time": 0.664, "x": 0, "curve": "stepped" },
{
"time": 0.6696,
"x": 0.003,
"curve": [ 0.786, 0.153, 1.167, 1, 0.786, 1, 1.167, 1 ]
},
{
"time": 1.3333,
"curve": [ 1.442, 0.992, 1.858, 0.098, 1.442, 1, 1.858, 1 ]
},
{ "time": 1.9982, "x": 0.003, "curve": "stepped" },
{
"time": 2.0022,
"x": 0.003,
"curve": [ 2.123, 0.151, 2.501, 1, 2.123, 1, 2.501, 1 ]
},
{ "time": 2.6667 }
]
},
"coin-side-round": {
"translate": [
{},
{ "time": 0.664, "x": -6.75, "curve": "stepped" },
{
"time": 0.6696,
"x": 7.03,
"curve": [ 0.794, 5.99, 1.167, 0, 0.794, 0, 1.167, 0 ]
},
{ "time": 1.3333 },
{ "time": 1.9982, "x": -6.75, "curve": "stepped" },
{ "time": 2.0022, "x": 7.03 },
{ "time": 2.6667 }
],
"scale": [
{
"curve": [ 0.085, 1, 0.207, 0.789, 0.085, 1, 0.207, 1 ]
},
{
"time": 0.3333,
"x": 0.555,
"curve": [ 0.449, 0.347, 0.567, 0.122, 0.449, 1, 0.567, 1 ]
},
{ "time": 0.664, "x": 0.014, "curve": "stepped" },
{
"time": 0.6696,
"x": -0.028,
"curve": [ 0.723, -0.126, 0.865, -0.367, 0.723, 1, 0.865, 1 ]
},
{
"time": 1,
"x": -0.609,
"curve": [ 1.053, -0.778, 1.29, -0.997, 1.053, 1, 1.29, 1 ]
},
{ "time": 1.3318, "x": -1, "curve": "stepped" },
{
"time": 1.3333,
"curve": [ 1.384, 0.997, 1.439, 0.94, 1.384, 1, 1.439, 1 ]
},
{
"time": 1.5,
"x": 0.852,
"curve": [ 1.564, 0.748, 1.703, 0.509, 1.564, 1, 1.703, 1 ]
},
{
"time": 1.8,
"x": 0.315,
"curve": [ 1.873, 0.13, 1.987, 0.015, 1.873, 1, 1.987, 1 ]
},
{ "time": 1.9982, "x": 0.014, "curve": "stepped" },
{
"time": 2.0022,
"x": -0.028,
"curve": [ 2.039, -0.072, 2.123, -0.239, 2.039, 1, 2.123, 1 ]
},
{
"time": 2.2018,
"x": -0.365,
"curve": [ 2.269, -0.513, 2.337, -0.635, 2.269, 1, 2.337, 1 ]
},
{
"time": 2.4,
"x": -0.731,
"curve": [ 2.503, -0.871, 2.596, -0.961, 2.503, 1, 2.596, 1 ]
},
{
"time": 2.6592,
"x": -1,
"curve": [ 2.661, -1, 2.665, 1, 2.661, 1, 2.665, 1 ]
},
{ "time": 2.6667 }
]
},
"shine": {
"translate": [
{
"curve": [ 0.167, 0, 0.5, -473.39, 0.167, 0, 0.5, 0 ]
},
{
"time": 0.6667,
"x": -473.39,
"curve": [ 0.833, -473.39, 1.167, -33.16, 0.833, 0, 1.167, 0 ]
},
{
"time": 1.3333,
"x": -33.16,
"curve": [ 1.5, -33.16, 1.833, -473.39, 1.5, 0, 1.833, 0 ]
},
{
"time": 2,
"x": -473.39,
"curve": [ 2.167, -473.39, 2.5, 0, 2.167, 0, 2.5, 0 ]
},
{ "time": 2.6667 }
]
}
},
"drawOrder": [
{
"time": 0.6667,
"offsets": [
{ "slot": "coin-side", "offset": 2 }
]
},
{ "time": 0.6696 },
{
"time": 1.9982,
"offsets": [
{ "slot": "coin-side", "offset": 2 }
]
},
{ "time": 2.0022 }
]
}
}
}

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,114 +0,0 @@
dragon-pma.png
size: 1024, 1024
filter: Linear, Linear
pma: true
front-toe-a
bounds: 300, 929, 29, 50
front-toe-b
bounds: 258, 660, 56, 57
head
bounds: 2, 719, 296, 260
left-front-leg
bounds: 99, 660, 84, 57
left-wing09
bounds: 2, 15, 264, 589
rotate: 90
right-wing07
bounds: 647, 2, 365, 643
right-wing08
bounds: 2, 281, 365, 643
rotate: 90
right-wing09
bounds: 354, 647, 365, 643
rotate: 90
tail04
bounds: 185, 661, 56, 71
rotate: 90
tail06
bounds: 2, 649, 95, 68
thiagobrayner
bounds: 2, 981, 350, 31
dragon-pma_2.png
size: 1024, 1024
filter: Linear, Linear
pma: true
back
bounds: 647, 57, 190, 185
chin
bounds: 839, 28, 214, 146
rotate: 90
left-rear-leg
bounds: 736, 244, 206, 177
left-wing08
bounds: 736, 423, 264, 589
right-rear-toe
bounds: 944, 312, 109, 77
rotate: 90
right-wing04
bounds: 2, 2, 365, 643
rotate: 90
right-wing05
bounds: 369, 369, 365, 643
right-wing06
bounds: 2, 369, 365, 643
tail03
bounds: 647, 275, 73, 92
tail05
bounds: 944, 251, 52, 59
dragon-pma_3.png
size: 1024, 1024
filter: Linear, Linear
pma: true
chest
bounds: 858, 299, 136, 122
left-front-thigh
bounds: 647, 295, 84, 72
left-rear-thigh
bounds: 647, 117, 91, 149
left-wing07
bounds: 736, 423, 264, 589
right-front-leg
bounds: 647, 14, 101, 89
rotate: 90
right-front-thigh
bounds: 740, 158, 108, 108
right-rear-leg
bounds: 740, 46, 116, 100
right-rear-thigh
bounds: 858, 148, 91, 149
right-wing01
bounds: 2, 2, 365, 643
rotate: 90
right-wing02
bounds: 369, 369, 365, 643
right-wing03
bounds: 2, 369, 365, 643
tail01
bounds: 736, 268, 120, 153
tail02
bounds: 858, 26, 95, 120
dragon-pma_4.png
size: 1024, 1024
filter: Linear, Linear
pma: true
left-wing03
bounds: 2, 2, 264, 589
rotate: 90
left-wing04
bounds: 534, 268, 264, 589
left-wing05
bounds: 268, 268, 264, 589
left-wing06
bounds: 2, 268, 264, 589
dragon-pma_5.png
size: 1024, 1024
filter: Linear, Linear
pma: true
left-wing01
bounds: 268, 2, 264, 589
left-wing02
bounds: 2, 2, 264, 589

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,106 +0,0 @@
goblins-pma.png
size: 1024, 128
filter: Linear, Linear
pma: true
dagger
bounds: 372, 99, 26, 108
rotate: 90
goblin/eyes-closed
bounds: 291, 13, 34, 12
goblin/head
bounds: 2, 35, 103, 66
goblin/left-arm
bounds: 900, 23, 37, 35
goblin/left-foot
bounds: 957, 60, 65, 31
rotate: 90
goblin/left-hand
bounds: 498, 6, 36, 41
rotate: 90
goblin/left-lower-leg
bounds: 747, 55, 33, 70
goblin/left-shoulder
bounds: 54, 4, 29, 44
rotate: 90
goblin/left-upper-leg
bounds: 587, 28, 33, 73
rotate: 90
goblin/neck
bounds: 455, 6, 36, 41
rotate: 90
goblin/pelvis
bounds: 632, 63, 62, 43
rotate: 90
goblin/right-arm
bounds: 455, 47, 23, 50
goblin/right-foot
bounds: 889, 62, 63, 33
rotate: 90
goblin/right-hand
bounds: 823, 23, 36, 37
goblin/right-lower-leg
bounds: 377, 23, 36, 76
rotate: 90
goblin/right-shoulder
bounds: 662, 8, 39, 45
goblin/right-upper-leg
bounds: 818, 62, 34, 63
goblin/torso
bounds: 205, 33, 68, 96
rotate: 90
goblin/undie-straps
bounds: 157, 12, 55, 19
goblin/undies
bounds: 214, 2, 36, 29
goblingirl/eyes-closed
bounds: 252, 10, 37, 21
goblingirl/head
bounds: 482, 44, 103, 81
goblingirl/left-arm
bounds: 861, 25, 37, 35
goblingirl/left-foot
bounds: 924, 60, 65, 31
rotate: 90
goblingirl/left-hand
bounds: 703, 13, 35, 40
goblingirl/left-lower-leg
bounds: 712, 55, 33, 70
goblingirl/left-shoulder
bounds: 939, 12, 28, 46
goblingirl/left-upper-leg
bounds: 677, 55, 33, 70
goblingirl/neck
bounds: 541, 7, 35, 41
rotate: 90
goblingirl/pelvis
bounds: 587, 63, 62, 43
rotate: 90
goblingirl/right-arm
bounds: 2, 5, 28, 50
rotate: 90
goblingirl/right-foot
bounds: 854, 62, 63, 33
rotate: 90
goblingirl/right-hand
bounds: 740, 16, 36, 37
goblingirl/right-lower-leg
bounds: 377, 61, 36, 76
rotate: 90
goblingirl/right-shoulder
bounds: 782, 15, 39, 45
goblingirl/right-upper-leg
bounds: 782, 62, 34, 63
goblingirl/torso
bounds: 107, 33, 68, 96
rotate: 90
goblingirl/undie-straps
bounds: 100, 12, 55, 19
goblingirl/undies
bounds: 969, 22, 36, 29
rotate: 90
shield
bounds: 303, 27, 70, 72
rotate: 90
spear
bounds: 2, 103, 22, 368
rotate: 90

Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,351 +0,0 @@
mix-and-match-pma.png
size: 1024, 512
filter: Linear, Linear
pma: true
scale: 0.5
base-head
bounds: 185, 123, 95, 73
boy/arm-front
bounds: 729, 92, 36, 115
rotate: 90
boy/backpack
bounds: 619, 218, 119, 153
boy/backpack-pocket
bounds: 626, 4, 34, 62
rotate: 90
boy/backpack-strap-front
bounds: 342, 26, 38, 88
rotate: 270
boy/backpack-up
bounds: 750, 12, 21, 70
rotate: 90
boy/body
bounds: 716, 125, 97, 132
rotate: 270
boy/boot-ribbon-front
bounds: 1012, 360, 9, 11
boy/collar
bounds: 764, 34, 73, 29
boy/ear
bounds: 878, 128, 19, 23
boy/eye-back-low-eyelid
bounds: 467, 245, 17, 6
boy/eye-back-pupil
bounds: 1012, 327, 8, 9
boy/eye-back-up-eyelid
bounds: 180, 348, 23, 5
rotate: 90
boy/eye-back-up-eyelid-back
bounds: 282, 255, 19, 10
boy/eye-front-low-eyelid
bounds: 366, 364, 22, 7
boy/eye-front-pupil
bounds: 1012, 349, 9, 9
boy/eye-front-up-eyelid
bounds: 155, 340, 31, 6
rotate: 270
boy/eye-front-up-eyelid-back
bounds: 338, 362, 26, 9
boy/eye-iris-back
bounds: 562, 12, 17, 17
boy/eye-iris-front
bounds: 807, 73, 18, 18
boy/eye-white-back
bounds: 317, 359, 20, 12
boy/eye-white-front
bounds: 499, 358, 27, 13
boy/eyebrow-back
bounds: 194, 360, 20, 11
boy/eyebrow-front
bounds: 290, 360, 25, 11
boy/hair-back
bounds: 929, 249, 122, 81
rotate: 90
boy/hair-bangs
bounds: 2, 2, 70, 37
boy/hair-side
bounds: 997, 237, 25, 43
boy/hand-backfingers
bounds: 376, 15, 19, 21
boy/hand-front-fingers
bounds: 786, 72, 19, 21
boy/hat
bounds: 68, 89, 93, 56
boy/leg-front
bounds: 90, 213, 31, 158
rotate: 180
boy/mouth-close
bounds: 187, 350, 21, 5
rotate: 90
girl-blue-cape/mouth-close
bounds: 187, 350, 21, 5
rotate: 90
girl-spring-dress/mouth-close
bounds: 187, 350, 21, 5
rotate: 90
girl/mouth-close
bounds: 187, 350, 21, 5
rotate: 90
boy/mouth-smile
bounds: 171, 342, 29, 7
rotate: 90
boy/nose
bounds: 1005, 225, 17, 10
boy/pompom
bounds: 157, 40, 48, 43
boy/zip
bounds: 883, 163, 14, 23
girl-blue-cape/back-eyebrow
bounds: 137, 52, 18, 12
girl-blue-cape/body-dress
bounds: 185, 262, 109, 241
offsets: 0, 0, 109, 246
rotate: 90
girl-blue-cape/body-ribbon
bounds: 881, 28, 50, 38
girl-blue-cape/cape-back
bounds: 427, 237, 134, 193
rotate: 90
girl-blue-cape/cape-back-up
bounds: 899, 126, 123, 106
rotate: 180
girl-blue-cape/cape-ribbon
bounds: 427, 353, 50, 18
girl-blue-cape/cape-shoulder-back
bounds: 510, 3, 49, 59
rotate: 90
girl-blue-cape/cape-shoulder-front
bounds: 310, 51, 62, 76
rotate: 270
girl-blue-cape/cape-up-front
bounds: 388, 72, 98, 117
rotate: 90
girl-blue-cape/ear
bounds: 376, 137, 19, 23
girl-spring-dress/ear
bounds: 376, 137, 19, 23
girl/ear
bounds: 376, 137, 19, 23
girl-blue-cape/eye-back-low-eyelid
bounds: 427, 345, 17, 6
girl-spring-dress/eye-back-low-eyelid
bounds: 427, 345, 17, 6
girl/eye-back-low-eyelid
bounds: 427, 345, 17, 6
girl-blue-cape/eye-back-pupil
bounds: 1012, 338, 8, 9
girl-spring-dress/eye-back-pupil
bounds: 1012, 338, 8, 9
girl/eye-back-pupil
bounds: 1012, 338, 8, 9
girl-blue-cape/eye-back-up-eyelid
bounds: 812, 210, 24, 12
girl-spring-dress/eye-back-up-eyelid
bounds: 812, 210, 24, 12
girl/eye-back-up-eyelid
bounds: 812, 210, 24, 12
girl-blue-cape/eye-back-up-eyelid-back
bounds: 427, 254, 17, 11
girl-spring-dress/eye-back-up-eyelid-back
bounds: 427, 254, 17, 11
girl/eye-back-up-eyelid-back
bounds: 427, 254, 17, 11
girl-blue-cape/eye-front-low-eyelid
bounds: 716, 365, 18, 6
girl-spring-dress/eye-front-low-eyelid
bounds: 716, 365, 18, 6
girl/eye-front-low-eyelid
bounds: 716, 365, 18, 6
girl-blue-cape/eye-front-pupil
bounds: 547, 362, 9, 9
girl-spring-dress/eye-front-pupil
bounds: 547, 362, 9, 9
girl/eye-front-pupil
bounds: 547, 362, 9, 9
girl-blue-cape/eye-front-up-eyelid
bounds: 74, 15, 30, 14
girl-spring-dress/eye-front-up-eyelid
bounds: 74, 15, 30, 14
girl/eye-front-up-eyelid
bounds: 74, 15, 30, 14
girl-blue-cape/eye-front-up-eyelid-back
bounds: 582, 149, 26, 11
girl-spring-dress/eye-front-up-eyelid-back
bounds: 582, 149, 26, 11
girl/eye-front-up-eyelid-back
bounds: 582, 149, 26, 11
girl-blue-cape/eye-iris-back
bounds: 442, 34, 17, 17
girl-blue-cape/eye-iris-front
bounds: 708, 95, 18, 18
girl-blue-cape/eye-white-back
bounds: 984, 232, 20, 16
girl-spring-dress/eye-white-back
bounds: 984, 232, 20, 16
girl-blue-cape/eye-white-front
bounds: 608, 224, 20, 16
girl-spring-dress/eye-white-front
bounds: 608, 224, 20, 16
girl/eye-white-front
bounds: 608, 224, 20, 16
girl-blue-cape/front-eyebrow
bounds: 424, 172, 18, 12
girl-blue-cape/hair-back
bounds: 305, 162, 117, 98
girl-blue-cape/hair-bangs
bounds: 694, 57, 91, 40
girl-blue-cape/hair-head-side-back
bounds: 397, 2, 30, 52
rotate: 90
girl-blue-cape/hair-head-side-front
bounds: 933, 14, 41, 42
rotate: 90
girl-blue-cape/hair-side
bounds: 203, 11, 36, 71
rotate: 270
girl-blue-cape/hand-front-fingers
bounds: 694, 115, 19, 21
girl-spring-dress/hand-front-fingers
bounds: 694, 115, 19, 21
girl-blue-cape/leg-front
bounds: 60, 213, 30, 158
rotate: 180
girl-blue-cape/mouth-smile
bounds: 162, 342, 29, 7
rotate: 90
girl-spring-dress/mouth-smile
bounds: 162, 342, 29, 7
rotate: 90
girl/mouth-smile
bounds: 162, 342, 29, 7
rotate: 90
girl-blue-cape/nose
bounds: 558, 364, 11, 7
girl-spring-dress/nose
bounds: 558, 364, 11, 7
girl/nose
bounds: 558, 364, 11, 7
girl-blue-cape/sleeve-back
bounds: 157, 9, 42, 29
girl-blue-cape/sleeve-front
bounds: 839, 103, 52, 119
girl-spring-dress/arm-front
bounds: 122, 260, 17, 111
girl-spring-dress/back-eyebrow
bounds: 2, 199, 18, 12
girl-spring-dress/body-up
bounds: 2, 79, 64, 66
girl-spring-dress/cloak-down
bounds: 459, 18, 50, 50
rotate: 180
girl-spring-dress/cloak-up
bounds: 247, 50, 61, 58
offsets: 0, 0, 64, 58
rotate: 270
girl-spring-dress/eye-iris-back
bounds: 875, 109, 17, 17
girl-spring-dress/eye-iris-front
bounds: 479, 353, 18, 18
girl-spring-dress/front-eyebrow
bounds: 893, 210, 18, 12
girl-spring-dress/hair-back
bounds: 834, 224, 147, 93
rotate: 90
girl-spring-dress/hair-bangs
bounds: 914, 57, 91, 40
girl-spring-dress/hair-head-side-back
bounds: 217, 341, 30, 52
rotate: 90
girl-spring-dress/hair-head-side-front
bounds: 582, 15, 41, 42
rotate: 90
girl-spring-dress/hair-side
bounds: 84, 14, 36, 71
rotate: 90
girl-spring-dress/leg-front
bounds: 30, 213, 30, 158
rotate: 180
girl-spring-dress/neck
bounds: 283, 176, 20, 32
girl-spring-dress/shoulder-ribbon
bounds: 207, 58, 36, 24
girl-spring-dress/skirt
bounds: 121, 198, 182, 81
rotate: 180
girl-spring-dress/underskirt
bounds: 8, 147, 175, 65
girl/arm-front
bounds: 907, 93, 36, 115
rotate: 90
girl/back-eyebrow
bounds: 948, 236, 18, 12
girl/bag-base
bounds: 418, 52, 62, 58
girl/bag-strap-front
bounds: 141, 276, 12, 95
offsets: 0, 1, 12, 96
girl/bag-top
bounds: 841, 7, 49, 50
girl/body
bounds: 476, 154, 97, 132
rotate: 270
girl/boot-ribbon-front
bounds: 968, 235, 13, 13
girl/eye-iris-back
bounds: 929, 231, 17, 17
girl/eye-iris-front
bounds: 270, 353, 18, 18
girl/eye-white-back
bounds: 162, 324, 20, 16
girl/front-eyebrow
bounds: 527, 359, 18, 12
girl/hair-back
bounds: 739, 224, 147, 93
rotate: 90
girl/hair-bangs
bounds: 534, 57, 91, 40
girl/hair-flap-down-front
bounds: 506, 31, 70, 65
rotate: 180
girl/hair-head-side-back
bounds: 155, 276, 30, 52
girl/hair-head-side-front
bounds: 980, 17, 41, 42
rotate: 90
girl/hair-patch
bounds: 424, 186, 66, 41
rotate: 90
girl/hair-side
bounds: 265, 17, 36, 71
rotate: 90
girl/hair-strand-back-1
bounds: 676, 24, 56, 74
offsets: 2, 0, 58, 74
rotate: 90
girl/hair-strand-back-2
bounds: 823, 54, 90, 53
offsets: 1, 0, 91, 58
girl/hair-strand-back-3
bounds: 610, 138, 92, 79
girl/hair-strand-front-1
bounds: 157, 83, 38, 94
rotate: 90
girl/hair-strand-front-2
bounds: 2, 27, 70, 50
girl/hair-strand-front-3
bounds: 74, 50, 44, 81
rotate: 270
girl/hand-front-fingers
bounds: 162, 124, 19, 21
girl/hat
bounds: 282, 78, 93, 82
girl/leg-front
bounds: 2, 213, 30, 158
girl/pompom
bounds: 626, 40, 48, 43
girl/scarf
bounds: 499, 98, 119, 51
girl/scarf-back
bounds: 620, 85, 72, 51
girl/zip
bounds: 455, 173, 19, 25

Binary file not shown.

Before

Width:  |  Height:  |  Size: 363 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,66 +0,0 @@
owl-pma.png
size: 1024, 512
filter: Linear, Linear
pma: true
scale: 0.5
L_eye-closed
bounds: 927, 317, 90, 86
rotate: 90
L_eye-iris
bounds: 835, 321, 90, 86
L_eye-light
bounds: 254, 479, 21, 20
L_eye-pupil
bounds: 611, 224, 63, 60
L_foot
bounds: 456, 225, 64, 48
L_wing
bounds: 752, 389, 81, 110
R_eye-closed
bounds: 923, 409, 90, 86
rotate: 90
R_eye-iris
bounds: 835, 409, 90, 86
rotate: 90
R_eye-light
bounds: 41, 479, 21, 20
R_eye-pupil
bounds: 747, 230, 63, 60
R_foot
bounds: 676, 236, 64, 48
R_wing
bounds: 669, 389, 81, 110
beak
bounds: 2, 458, 39, 41
beak-down
bounds: 280, 459, 37, 40
body
bounds: 302, 251, 248, 196
rotate: 90
feather-1
bounds: 128, 227, 59, 60
feather-2
bounds: 258, 226, 62, 65
feather-3
bounds: 905, 239, 56, 76
head-base
bounds: 2, 262, 299, 237
leaf-1
bounds: 669, 286, 76, 101
leaf-2
bounds: 747, 292, 65, 95
leaf-3
bounds: 590, 367, 132, 77
rotate: 90
leaf-4
bounds: 814, 270, 89, 49
leaf-5
bounds: 500, 275, 53, 106
leaf-6
bounds: 500, 383, 88, 116
leaf-7
bounds: 555, 279, 54, 86
wood
bounds: 34, 2, 617, 295
offsets: 0, 0, 617, 305
rotate: 180

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1,89 +0,0 @@
raptor-pma.png
size: 1024, 512
filter: Linear, Linear
pma: true
scale: 0.5
back-arm
bounds: 130, 32, 46, 25
back-bracer
bounds: 215, 11, 39, 28
back-hand
bounds: 847, 25, 36, 34
back-knee
bounds: 2, 8, 49, 67
back-thigh
bounds: 327, 8, 39, 24
eyes-open
bounds: 232, 309, 47, 45
front-arm
bounds: 421, 99, 48, 26
front-bracer
bounds: 885, 30, 41, 29
front-hand
bounds: 784, 184, 41, 38
front-open-hand
bounds: 771, 310, 43, 44
front-thigh
bounds: 635, 192, 57, 29
gun
bounds: 636, 83, 107, 103
gun-nohand
bounds: 174, 83, 105, 102
head
bounds: 291, 71, 136, 149
rotate: 270
lower-leg
bounds: 930, 123, 73, 98
mouth-grind
bounds: 798, 29, 47, 30
mouth-smile
bounds: 749, 29, 47, 30
neck
bounds: 281, 333, 18, 21
raptor-back-arm
bounds: 470, 11, 82, 86
rotate: 180
raptor-body
bounds: 2, 121, 632, 233
raptor-front-arm
bounds: 415, 18, 81, 102
raptor-front-leg
bounds: 525, 163, 191, 257
rotate: 90
raptor-hindleg-back
bounds: 746, 139, 169, 215
rotate: 180
raptor-horn
bounds: 2, 274, 182, 80
raptor-horn-back
bounds: 752, 61, 176, 77
raptor-jaw
bounds: 553, 2, 126, 138
rotate: 270
raptor-jaw-tooth
bounds: 687, 223, 37, 48
raptor-mouth-inside
bounds: 178, 12, 36, 41
raptor-saddle-strap-back
bounds: 693, 7, 54, 74
raptor-saddle-strap-front
bounds: 2, 77, 57, 95
raptor-saddle-w-shadow
bounds: 2, 69, 162, 171
rotate: 90
raptor-tail-shadow
bounds: 150, 25, 189, 63
raptor-tongue
bounds: 63, 13, 86, 64
stirrup-back
bounds: 341, 34, 44, 35
stirrup-front
bounds: 185, 304, 45, 50
stirrup-strap
bounds: 533, 221, 49, 46
rotate: 90
torso
bounds: 930, 30, 54, 91
visor
bounds: 917, 223, 131, 84
rotate: 90

Binary file not shown.

Before

Width:  |  Height:  |  Size: 404 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1,12 +0,0 @@
sack-pma.png
size: 512, 512
filter: Linear, Linear
pma: true
scale: 0.5
cape-back
bounds: 229, 149, 260, 260
rotate: 270
cape-front
bounds: 310, 58, 200, 104
sack
bounds: 2, 2, 233, 407

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1,201 +0,0 @@
snowglobe-pma.png
size: 1024, 1024
filter: Linear, Linear
pma: true
scale: 0.5
blue-present-decoration
bounds: 905, 377, 41, 40
rotate: 180
green-present-decoration
bounds: 905, 377, 41, 40
rotate: 180
elf-shadow
bounds: 846, 626, 395, 158
rotate: 90
eye-reflex-l
bounds: 1006, 954, 12, 13
eye-reflex-r
bounds: 1006, 940, 10, 12
globe-reflections
bounds: 9, 375, 646, 835
rotate: 90
globe-shadow
bounds: 2, 7, 920, 366
glove-fingers-l
bounds: 983, 448, 39, 51
glove-shadow-l
bounds: 990, 169, 28, 57
hair-side
bounds: 994, 571, 27, 53
hair-strand-2
bounds: 988, 228, 26, 66
hair-strand-5
bounds: 997, 27, 25, 47
hair-strand-6
bounds: 1006, 986, 14, 35
hat
bounds: 846, 403, 153, 221
leg-up-l
bounds: 924, 147, 65, 147
mouth
bounds: 846, 389, 39, 13
nose
bounds: 846, 610, 17, 14
nose-shadow
bounds: 1006, 969, 15, 15
red-present-decoration
bounds: 924, 105, 41, 40
scarf-end-r
bounds: 935, 2, 151, 87
rotate: 270
scarf-shadow
bounds: 948, 296, 149, 74
rotate: 90
shoelace
bounds: 1001, 551, 21, 18
snow
bounds: 846, 468, 27, 28
string
bounds: 2, 968, 5, 53
snowglobe-pma_2.png
size: 1024, 1024
filter: Linear, Linear
pma: true
scale: 0.5
arm-down-l
bounds: 80, 8, 56, 54
arm-down-l-fuzzy
bounds: 944, 19, 57, 59
arm-down-r
bounds: 2, 44, 76, 53
arm-down-r-fuzzy
bounds: 675, 17, 61, 66
rotate: 90
arm-up-l
bounds: 94, 64, 49, 114
rotate: 90
arm-up-r
bounds: 569, 20, 58, 104
rotate: 90
blue-present-base
bounds: 676, 555, 126, 139
body
bounds: 709, 829, 139, 151
ear-l
bounds: 464, 11, 55, 50
ear-r
bounds: 389, 560, 45, 66
rotate: 90
eye-white-l
bounds: 521, 4, 35, 43
rotate: 90
eye-white-r
bounds: 754, 525, 34, 48
rotate: 90
eyelashes-l
bounds: 804, 788, 32, 40
eyelashes-r
bounds: 703, 805, 32, 47
gift-base
bounds: 24, 400, 125, 105
rotate: 90
gift-decoration
bounds: 457, 558, 48, 40
globe-base-front
bounds: 2, 522, 706, 458
globe-borders
bounds: 573, 80, 440, 441
rotate: 90
globe-texture
bounds: 130, 115, 440, 441
rotate: 90
glove-fingers-r
bounds: 305, 5, 41, 56
rotate: 90
glove-l
bounds: 469, 940, 40, 61
rotate: 90
glove-r
bounds: 214, 557, 44, 65
rotate: 90
glove-shadow-r
bounds: 138, 24, 38, 62
rotate: 90
green-present-base
bounds: 698, 689, 126, 139
hair-front
bounds: 27, 248, 150, 101
rotate: 90
hair-strand-1
bounds: 656, 524, 37, 65
rotate: 90
hair-strand-3
bounds: 363, 6, 40, 53
rotate: 90
hair-strand-4
bounds: 398, 943, 37, 69
rotate: 90
head-base
bounds: 850, 729, 134, 135
iris-l
bounds: 2, 2, 40, 41
rotate: 90
iris-r
bounds: 418, 5, 40, 41
leg-down-l
bounds: 850, 27, 92, 51
leg-down-r
bounds: 464, 41, 72, 103
rotate: 90
leg-up-l-fuzzy
bounds: 316, 48, 73, 65
leg-up-r
bounds: 927, 610, 83, 118
offsets: 0, 22, 83, 140
rotate: 180
leg-up-r-fuzzy
bounds: 391, 48, 65, 71
rotate: 90
neck-scarf
bounds: 850, 866, 142, 114
pupil-l
bounds: 986, 798, 32, 32
pupil-r
bounds: 986, 832, 32, 32
red-present-base
bounds: 803, 599, 126, 139
scarf-end-l
bounds: 2, 163, 126, 109
rotate: 90
scarf-pompom-l
bounds: 253, 8, 50, 46
scarf-pompom-r
bounds: 202, 7, 49, 47
scarf-ribbon-bottom-l
bounds: 743, 25, 106, 53
scarf-ribbon-bottom-r
bounds: 210, 56, 105, 57
scarf-ribbon-middle-l
bounds: 2, 99, 63, 90
rotate: 90
scarf-ribbon-middle-r
bounds: 804, 536, 62, 89
rotate: 90
scarf-ribbon-top-l
bounds: 895, 551, 105, 58
scarf-ribbon-top-r
bounds: 281, 561, 106, 53
shoe-l
bounds: 155, 931, 49, 95
rotate: 90
shoe-r
bounds: 2, 521, 44, 93
snowglobe-pma_3.png
size: 1024, 512
filter: Linear, Linear
pma: true
scale: 0.5
globe-base-back
bounds: 2, 2, 606, 258

Binary file not shown.

Before

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 875 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,198 +0,0 @@
snowglobe.png
size: 1024, 1024
filter: Linear, Linear
scale: 0.5
blue-present-decoration
bounds: 905, 377, 41, 40
rotate: 180
green-present-decoration
bounds: 905, 377, 41, 40
rotate: 180
elf-shadow
bounds: 846, 626, 395, 158
rotate: 90
eye-reflex-l
bounds: 1006, 954, 12, 13
eye-reflex-r
bounds: 1006, 940, 10, 12
globe-reflections
bounds: 9, 375, 646, 835
rotate: 90
globe-shadow
bounds: 2, 7, 920, 366
glove-fingers-l
bounds: 983, 448, 39, 51
glove-shadow-l
bounds: 990, 169, 28, 57
hair-side
bounds: 994, 571, 27, 53
hair-strand-2
bounds: 988, 228, 26, 66
hair-strand-5
bounds: 997, 27, 25, 47
hair-strand-6
bounds: 1006, 986, 14, 35
hat
bounds: 846, 403, 153, 221
leg-up-l
bounds: 924, 147, 65, 147
mouth
bounds: 846, 389, 39, 13
nose
bounds: 846, 610, 17, 14
nose-shadow
bounds: 1006, 969, 15, 15
red-present-decoration
bounds: 924, 105, 41, 40
scarf-end-r
bounds: 935, 2, 151, 87
rotate: 270
scarf-shadow
bounds: 948, 296, 149, 74
rotate: 90
shoelace
bounds: 1001, 551, 21, 18
snow
bounds: 846, 468, 27, 28
string
bounds: 2, 968, 5, 53
snowglobe_2.png
size: 1024, 1024
filter: Linear, Linear
scale: 0.5
arm-down-l
bounds: 80, 8, 56, 54
arm-down-l-fuzzy
bounds: 944, 19, 57, 59
arm-down-r
bounds: 2, 44, 76, 53
arm-down-r-fuzzy
bounds: 675, 17, 61, 66
rotate: 90
arm-up-l
bounds: 94, 64, 49, 114
rotate: 90
arm-up-r
bounds: 569, 20, 58, 104
rotate: 90
blue-present-base
bounds: 676, 555, 126, 139
body
bounds: 709, 829, 139, 151
ear-l
bounds: 464, 11, 55, 50
ear-r
bounds: 389, 560, 45, 66
rotate: 90
eye-white-l
bounds: 521, 4, 35, 43
rotate: 90
eye-white-r
bounds: 754, 525, 34, 48
rotate: 90
eyelashes-l
bounds: 804, 788, 32, 40
eyelashes-r
bounds: 703, 805, 32, 47
gift-base
bounds: 24, 400, 125, 105
rotate: 90
gift-decoration
bounds: 457, 558, 48, 40
globe-base-front
bounds: 2, 522, 706, 458
globe-borders
bounds: 573, 80, 440, 441
rotate: 90
globe-texture
bounds: 130, 115, 440, 441
rotate: 90
glove-fingers-r
bounds: 305, 5, 41, 56
rotate: 90
glove-l
bounds: 469, 940, 40, 61
rotate: 90
glove-r
bounds: 214, 557, 44, 65
rotate: 90
glove-shadow-r
bounds: 138, 24, 38, 62
rotate: 90
green-present-base
bounds: 698, 689, 126, 139
hair-front
bounds: 27, 248, 150, 101
rotate: 90
hair-strand-1
bounds: 656, 524, 37, 65
rotate: 90
hair-strand-3
bounds: 363, 6, 40, 53
rotate: 90
hair-strand-4
bounds: 398, 943, 37, 69
rotate: 90
head-base
bounds: 850, 729, 134, 135
iris-l
bounds: 2, 2, 40, 41
rotate: 90
iris-r
bounds: 418, 5, 40, 41
leg-down-l
bounds: 850, 27, 92, 51
leg-down-r
bounds: 464, 41, 72, 103
rotate: 90
leg-up-l-fuzzy
bounds: 316, 48, 73, 65
leg-up-r
bounds: 927, 610, 83, 118
offsets: 0, 22, 83, 140
rotate: 180
leg-up-r-fuzzy
bounds: 391, 48, 65, 71
rotate: 90
neck-scarf
bounds: 850, 866, 142, 114
pupil-l
bounds: 986, 798, 32, 32
pupil-r
bounds: 986, 832, 32, 32
red-present-base
bounds: 803, 599, 126, 139
scarf-end-l
bounds: 2, 163, 126, 109
rotate: 90
scarf-pompom-l
bounds: 253, 8, 50, 46
scarf-pompom-r
bounds: 202, 7, 49, 47
scarf-ribbon-bottom-l
bounds: 743, 25, 106, 53
scarf-ribbon-bottom-r
bounds: 210, 56, 105, 57
scarf-ribbon-middle-l
bounds: 2, 99, 63, 90
rotate: 90
scarf-ribbon-middle-r
bounds: 804, 536, 62, 89
rotate: 90
scarf-ribbon-top-l
bounds: 895, 551, 105, 58
scarf-ribbon-top-r
bounds: 281, 561, 106, 53
shoe-l
bounds: 155, 931, 49, 95
rotate: 90
shoe-r
bounds: 2, 521, 44, 93
snowglobe_3.png
size: 1024, 512
filter: Linear, Linear
scale: 0.5
globe-base-back
bounds: 2, 2, 606, 258

Binary file not shown.

Before

Width:  |  Height:  |  Size: 580 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +0,0 @@
stretchyman-pma.png
size: 512, 256
filter: Linear, Linear
pma: true
back-arm
bounds: 2, 10, 70, 199
offsets: 1, 2, 72, 202
rotate: 90
back-leg
bounds: 2, 50, 100, 316
offsets: 0, 1, 100, 318
rotate: 90
body
bounds: 2, 104, 139, 448
offsets: 0, 0, 141, 452
rotate: 90
front-arm
bounds: 280, 2, 145, 221
rotate: 270
head
bounds: 319, 70, 87, 102

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

File diff suppressed because one or more lines are too long

View File

@ -1,56 +0,0 @@
tank-pma.png
size: 1024, 1024
filter: Linear, Linear
pma: true
scale: 0.5
antenna
bounds: 804, 452, 11, 152
cannon
bounds: 2, 322, 466, 29
cannon-connector
bounds: 647, 423, 56, 68
ground
bounds: 817, 92, 512, 177
rotate: 90
guntower
bounds: 2, 2, 365, 145
machinegun
bounds: 773, 438, 166, 29
rotate: 90
machinegun-mount
bounds: 773, 388, 36, 48
rock
bounds: 707, 314, 290, 64
rotate: 90
smoke-glow
bounds: 647, 372, 50, 50
smoke-puff01-bg
bounds: 557, 57, 92, 62
smoke-puff01-fg
bounds: 651, 60, 88, 59
smoke-puff02-fg
bounds: 463, 85, 92, 62
smoke-puff03-fg
bounds: 369, 85, 92, 62
smoke-puff04-fg
bounds: 815, 42, 78, 48
tank-bottom
bounds: 2, 353, 643, 138
tank-bottom-shadow
bounds: 2, 149, 646, 171
tank-top
bounds: 2, 493, 704, 111
tread
bounds: 647, 355, 48, 15
tread-inside
bounds: 996, 590, 13, 14
wheel-big
bounds: 650, 216, 96, 96
wheel-big-overlay
bounds: 650, 121, 93, 93
wheel-mid
bounds: 745, 146, 68, 68
wheel-mid-overlay
bounds: 745, 76, 68, 68
wheel-small
bounds: 773, 350, 36, 36

Binary file not shown.

Before

Width:  |  Height:  |  Size: 446 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,6 +0,0 @@
vine-pma.png
size: 128, 1024
filter: Linear, Linear
pma: true
vine
bounds: 2, 2, 68, 962

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1,805 +0,0 @@
/******************************************************************************
* Spine Runtimes License Agreement
* Last updated April 5, 2025. Replaces all prior versions.
*
* Copyright (c) 2013-2025, Esoteric Software LLC
*
* Integration of the Spine Runtimes into software or otherwise creating
* derivative works of the Spine Runtimes is permitted under the terms and
* conditions of Section 2 of the Spine Editor License Agreement:
* http://esotericsoftware.com/spine-editor-license
*
* Otherwise, it is permitted to integrate the Spine Runtimes into software
* or otherwise create derivative works of the Spine Runtimes (collectively,
* "Products"), provided that each user of the Products must obtain their own
* Spine Editor license and redistribution of the Products in any form must
* include this license and copyright notice.
*
* THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "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 LLC 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
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#include <SFML/Graphics.hpp>
#include <SFML/Window/Mouse.hpp>
#include <iostream>
#include <spine/Debug.h>
#include <spine/spine-sfml.h>
using namespace std;
using namespace spine;
#include <stdio.h>
#include <stdlib.h>
void callback(spAnimationState *state, spEventType type, spTrackEntry *entry, spEvent *event) {
UNUSED(state);
const char *animationName = (entry && entry->animation) ? entry->animation->name : 0;
switch (type) {
case SP_ANIMATION_START:
printf("%d start: %s\n", entry->trackIndex, animationName);
break;
case SP_ANIMATION_INTERRUPT:
printf("%d interrupt: %s\n", entry->trackIndex, animationName);
break;
case SP_ANIMATION_END:
printf("%d end: %s\n", entry->trackIndex, animationName);
break;
case SP_ANIMATION_COMPLETE:
printf("%d complete: %s\n", entry->trackIndex, animationName);
break;
case SP_ANIMATION_DISPOSE:
printf("%d dispose: %s\n", entry->trackIndex, animationName);
break;
case SP_ANIMATION_EVENT:
printf("%d event: %s, %s: %d, %f, %s %f %f\n", entry->trackIndex, animationName, event->data->name, event->intValue, event->floatValue,
event->stringValue, event->volume, event->balance);
break;
}
fflush(stdout);
}
spSkeletonData *readSkeletonJsonData(const char *filename, spAtlas *atlas, float scale) {
spSkeletonJson *json = spSkeletonJson_create(atlas);
json->scale = scale;
spSkeletonData *skeletonData = spSkeletonJson_readSkeletonDataFile(json, filename);
if (!skeletonData) {
printf("%s\n", json->error);
exit(0);
}
spSkeletonJson_dispose(json);
return skeletonData;
}
spSkeletonData *readSkeletonBinaryData(const char *filename, spAtlas *atlas, float scale) {
spSkeletonBinary *binary = spSkeletonBinary_create(atlas);
binary->scale = scale;
spSkeletonData *skeletonData = spSkeletonBinary_readSkeletonDataFile(binary, filename);
if (!skeletonData) {
printf("%s\n", binary->error);
exit(0);
}
spSkeletonBinary_dispose(binary);
return skeletonData;
}
void testcase(void func(spSkeletonData *skeletonData, spAtlas *atlas), const char *jsonName, const char *binaryName, const char *atlasName,
float scale) {
spAtlas *atlas = spAtlas_createFromFile(atlasName, 0);
spSkeletonData *skeletonData = readSkeletonJsonData(jsonName, atlas, scale);
func(skeletonData, atlas);
spSkeletonData_dispose(skeletonData);
skeletonData = readSkeletonBinaryData(binaryName, atlas, scale);
func(skeletonData, atlas);
spSkeletonData_dispose(skeletonData);
spAtlas_dispose(atlas);
UNUSED(jsonName);
}
void spineboy(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
spSkeletonBounds *bounds = spSkeletonBounds_create();
// Configure mixing.
spAnimationStateData *stateData = spAnimationStateData_create(skeletonData);
spAnimationStateData_setMixByName(stateData, "walk", "jump", 0.2f);
spAnimationStateData_setMixByName(stateData, "jump", "run", 0.2f);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData, stateData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
spSkeleton_setToSetupPose(skeleton);
skeleton->x = 320;
skeleton->y = 590;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spSlot *headSlot = spSkeleton_findSlot(skeleton, "head");
drawable->state->listener = callback;
spAnimationState_addAnimationByName(drawable->state, 0, "walk", true, 0);
spAnimationState_addAnimationByName(drawable->state, 0, "jump", false, 3);
spAnimationState_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();
spSkeletonBounds_update(bounds, skeleton, true);
sf::Vector2i position = sf::Mouse::getPosition(window);
if (spSkeletonBounds_containsPoint(bounds, (float) position.x, (float) position.y)) {
headSlot->color.g = 0;
headSlot->color.b = 0;
} else {
headSlot->color.g = 1;
headSlot->color.b = 1;
}
drawable->update(delta, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
spSkeletonBounds_dispose(bounds);
}
void ikDemo(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
// Create the SkeletonDrawable and position it
spAnimationStateData *stateData = spAnimationStateData_create(skeletonData);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData, stateData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
skeleton->x = 320;
skeleton->y = 590;
// Queue the "walk" animation on the first track.
spAnimationState_setAnimationByName(drawable->state, 0, "walk", true);
// Queue the "aim" animation on a higher track.
// It consists of a single frame that positions
// the back arm and gun such that they point at
// the "crosshair" bone. By setting this
// animation on a higher track, it overrides
// any changes to the back arm and gun made
// by the walk animation, allowing us to
// mix the two. The mouse position following
// is performed in the render() method below.
spAnimationState_setAnimationByName(drawable->state, 1, "aim", true);
sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - IK Demo");
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();
// Update and apply the animations to the skeleton,
// then calculate the world transforms of every bone.
// This is needed so we can call Bone#worldToLocal()
// later.
drawable->update(delta, SP_PHYSICS_UPDATE);
// Position the "crosshair" bone at the mouse
// location. We do this before calling
// skeleton.updateWorldTransform() below, so
// our change is incorporated before the IK
// constraint is applied.
//
// When setting the crosshair bone position
// to the mouse position, we need to translate
// from "mouse space" to "local bone space". Note that the local
// bone space is calculated using the bone's parent
// worldToLocal() function!
sf::Vector2i mouseCoords = sf::Mouse::getPosition(window);
float boneCoordsX = 0, boneCoordsY = 0;
spBone *crosshair = spSkeleton_findBone(drawable->skeleton, "crosshair");// Should be cached.
spBone_worldToLocal(crosshair->parent, mouseCoords.x, mouseCoords.y, &boneCoordsX, &boneCoordsY);
crosshair->x = boneCoordsX;
crosshair->y = boneCoordsY;
// Calculate final world transform with the
// crosshair bone set to the mouse cursor
// position.
spSkeleton_updateWorldTransform(drawable->skeleton, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
}
void goblins(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
spSkeleton_setSkinByName(skeleton, "goblingirl");
spSkeleton_setSlotsToSetupPose(skeleton);
skeleton->x = 320;
skeleton->y = 590;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spAnimationState_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, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
}
void raptor(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
skeleton->x = 320;
skeleton->y = 590;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spAnimationState_setAnimationByName(drawable->state, 0, "walk", true);
spAnimationState_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;
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, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
}
void tank(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
skeleton->x = 500;
skeleton->y = 590;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spAnimationState_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, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
}
void vine(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
skeleton->x = 320;
skeleton->y = 590;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spAnimationState_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, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
}
void stretchyman(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
skeleton->x = 100;
skeleton->y = 590;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spAnimationState_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, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
}
void coin(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
skeleton->x = 320;
skeleton->y = 320;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spAnimationState_setAnimationByName(drawable->state, 0, "animation", true);
sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - vine");
window.setFramerateLimit(60);
sf::Event event;
sf::Clock deltaClock;
while (window.isOpen()) {
while (window.pollEvent(event))
if (event.type == sf::Event::Closed) window.close();
float delta = deltaClock.getElapsedTime().asSeconds();
deltaClock.restart();
drawable->update(delta, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
}
void dragon(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
skeleton->x = 320;
skeleton->y = 320;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spAnimationState_setAnimationByName(drawable->state, 0, "flying", true);
sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - dragon");
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, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
}
void owl(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
skeleton->x = 320;
skeleton->y = 400;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spAnimationState_setAnimationByName(drawable->state, 0, "idle", true);
spAnimationState_setAnimationByName(drawable->state, 1, "blink", true);
spTrackEntry *left = spAnimationState_setAnimationByName(drawable->state, 2, "left", true);
spTrackEntry *right = spAnimationState_setAnimationByName(drawable->state, 3, "right", true);
spTrackEntry *up = spAnimationState_setAnimationByName(drawable->state, 4, "up", true);
spTrackEntry *down = spAnimationState_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.5f - MIN(x, 0.5f)) * 2;
float y = event.mouseMove.y / 640.0f;
down->alpha = (MAX(y, 0.5f) - 0.5f) * 2;
up->alpha = (0.5f - MIN(y, 0.5f)) * 2;
}
}
float delta = deltaClock.getElapsedTime().asSeconds();
deltaClock.restart();
spSkeleton_setToSetupPose(drawable->skeleton);
drawable->update(delta, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
}
/**
* Used for debugging purposes during runtime development
*/
void test(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
spSkeleton *skeleton = spSkeleton_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++) {
spAnimationState_update(animState, d);
spAnimationState_apply(animState, skeleton);
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
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;
}
spSkeleton_dispose(skeleton);
}
void testSkinsApi(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
spSkin *skin = spSkin_create("test-skin");
spSkin_copySkin(skin, spSkeletonData_findSkin(skeletonData, "goblingirl"));
// spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "goblingirl"));
spSkeleton_setSkin(skeleton, skin);
spSkeleton_setSlotsToSetupPose(skeleton);
skeleton->x = 320;
skeleton->y = 590;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spAnimationState_setAnimationByName(drawable->state, 0, "walk", true);
sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - skins api");
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, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
spSkin_clear(skin);
spSkin_dispose(skin);
}
void testMixAndMatch(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
// Create a new skin, by mixing and matching other skins
// that fit together. Items making up the girl are individual
// skins. Using the skin API, a new skin is created which is
// a combination of all these individual item skins.
spSkin *skin = spSkin_create("mix-and-match");
spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "skin-base"));
spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "nose/short"));
spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "eyelids/girly"));
spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "eyes/violet"));
spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "hair/brown"));
spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "clothes/hoodie-orange"));
spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "legs/pants-jeans"));
spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "accessories/bag"));
spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "accessories/hat-red-yellow"));
spSkeleton_setSkin(skeleton, skin);
spSkeleton_setSlotsToSetupPose(skeleton);
skeleton->x = 320;
skeleton->y = 590;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spAnimationState_setAnimationByName(drawable->state, 0, "dance", true);
sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - mix and match");
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, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
spSkin_clear(skin);
spSkin_dispose(skin);
}
void cloudpot(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
skeleton->x = 320;
skeleton->y = 480;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spAnimationState_setAnimationByName(drawable->state, 0, "playing-in-the-rain", true);
sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - cloudpot");
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, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
}
void sack(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
skeleton->x = 320;
skeleton->y = 480;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spAnimationState_setAnimationByName(drawable->state, 0, "walk", true);
sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - sack");
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, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
}
void snowglobe(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
skeleton->x = 320;
skeleton->y = 480;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spAnimationState_setAnimationByName(drawable->state, 0, "shake", true);
sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - snowglobe");
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, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
}
void celestialCircus(spSkeletonData *skeletonData, spAtlas *atlas) {
UNUSED(atlas);
SkeletonDrawable *drawable = new SkeletonDrawable(skeletonData);
drawable->timeScale = 1;
drawable->setUsePremultipliedAlpha(true);
spSkeleton *skeleton = drawable->skeleton;
skeleton->x = 320;
skeleton->y = 480;
skeleton->scaleX = skeleton->scaleY = 0.2f;
spSkeleton_updateWorldTransform(skeleton, SP_PHYSICS_UPDATE);
spAnimationState_setAnimationByName(drawable->state, 0, "swing", true);
sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - celestrial circus");
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, SP_PHYSICS_UPDATE);
window.clear();
window.draw(*drawable);
window.display();
}
}
int main() {
testcase(celestialCircus, "data/celestial-circus-pro.json", "data/celestial-circus-pro.skel", "data/celestial-circus-pma.atlas", 1);
testcase(cloudpot, "data/cloud-pot.json", "data/cloud-pot.skel", "data/cloud-pot-pma.atlas", 0.2);
testcase(sack, "data/sack-pro.json", "data/sack-pro.skel", "data/sack-pma.atlas", 0.2f);
testcase(snowglobe, "data/snowglobe-pro.json", "data/snowglobe-pro.skel", "data/snowglobe-pma.atlas", 0.2f);
testcase(raptor, "data/raptor-pro.json", "data/raptor-pro.skel", "data/raptor-pma.atlas", 0.5f);
testcase(dragon, "data/dragon-ess.json", "data/dragon-ess.skel", "data/dragon-pma.atlas", 0.6f);
testcase(ikDemo, "data/spineboy-pro.json", "data/spineboy-pro.skel", "data/spineboy-pma.atlas", 0.6f);
testcase(spineboy, "data/spineboy-pro.json", "data/spineboy-pro.skel", "data/spineboy-pma.atlas", 0.6f);
testcase(coin, "data/coin-pro.json", "data/coin-pro.skel", "data/coin-pma.atlas", 0.5f);
testcase(testMixAndMatch, "data/mix-and-match-pro.json", "data/mix-and-match-pro.skel", "data/mix-and-match-pma.atlas", 0.5f);
testcase(test, "data/tank-pro.json", "data/tank-pro.skel", "data/tank-pma.atlas", 1.0f);
testcase(owl, "data/owl-pro.json", "data/owl-pro.skel", "data/owl-pma.atlas", 0.5f);
testcase(vine, "data/vine-pro.json", "data/vine-pro.skel", "data/vine-pma.atlas", 0.5f);
testcase(tank, "data/tank-pro.json", "data/tank-pro.skel", "data/tank-pma.atlas", 0.2f);
testcase(goblins, "data/goblins-pro.json", "data/goblins-pro.skel", "data/goblins-pma.atlas", 1.4f);
testcase(stretchyman, "data/stretchyman-pro.json", "data/stretchyman-pro.skel", "data/stretchyman-pma.atlas", 0.6f);
testcase(testSkinsApi, "data/goblins-pro.json", "data/goblins-pro.skel", "data/goblins-pma.atlas", 1.4f);
return 0;
}

View File

@ -1,326 +0,0 @@
/******************************************************************************
* Spine Runtimes License Agreement
* Last updated April 5, 2025. Replaces all prior versions.
*
* Copyright (c) 2013-2025, Esoteric Software LLC
*
* Integration of the Spine Runtimes into software or otherwise creating
* derivative works of the Spine Runtimes is permitted under the terms and
* conditions of Section 2 of the Spine Editor License Agreement:
* http://esotericsoftware.com/spine-editor-license
*
* Otherwise, it is permitted to integrate the Spine Runtimes into software
* or otherwise create derivative works of the Spine Runtimes (collectively,
* "Products"), provided that each user of the Products must obtain their own
* Spine Editor license and redistribution of the Products in any form must
* include this license and copyright notice.
*
* THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "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 LLC 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
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#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);
spColorArray *spColorArray_create(int initialCapacity) {
spColorArray *array = ((spColorArray *) _spCalloc(1, sizeof(spColorArray), "_file_name_", 48));
array->size = 0;
array->capacity = initialCapacity;
array->items = ((spColor *) _spCalloc(initialCapacity, sizeof(spColor), "_file_name_", 48));
return array;
}
void spColorArray_dispose(spColorArray *self) {
_spFree((void *) self->items);
_spFree((void *) self);
}
void spColorArray_clear(spColorArray *self) {
self->size = 0;
}
spColorArray *spColorArray_setSize(spColorArray *self, int newSize) {
self->size = newSize;
if (self->capacity < newSize) {
self->capacity = ((8) > ((int) (self->size * 1.75f)) ? (8) : ((int) (self->size * 1.75f)));
self->items = ((spColor *) _spRealloc(self->items, sizeof(spColor) * (self->capacity)));
}
return self;
}
void spColorArray_ensureCapacity(spColorArray *self, int newCapacity) {
if (self->capacity >= newCapacity) return;
self->capacity = newCapacity;
self->items = ((spColor *) _spRealloc(self->items, sizeof(spColor) * (self->capacity)));
}
void spColorArray_add(spColorArray *self, spColor value) {
if (self->size == self->capacity) {
self->capacity = ((8) > ((int) (self->size * 1.75f)) ? (8) : ((int) (self->size * 1.75f)));
self->items = ((spColor *) _spRealloc(self->items, sizeof(spColor) * (self->capacity)));
}
self->items[self->size++] = value;
}
void spColorArray_addAll(spColorArray *self, spColorArray *other) {
int i = 0;
for (; i < other->size; i++) {
spColorArray_add(self, other->items[i]);
}
}
void spColorArray_addAllValues(spColorArray *self, spColor *values, int offset, int count) {
int i = offset, n = offset + count;
for (; i < n; i++) {
spColorArray_add(self, values[i]);
}
}
void spColorArray_removeAt(spColorArray *self, int index) {
self->size--;
memmove(self->items + index, self->items + index + 1, sizeof(spColor) * (self->size - index));
}
spColor spColorArray_pop(spColorArray *self) {
spColor item = self->items[--self->size];
return item;
}
spColor spColorArray_peek(spColorArray *self) {
return self->items[self->size - 1];
}
void _spAtlasPage_createTexture(spAtlasPage *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 _spAtlasPage_disposeTexture(spAtlasPage *self) {
delete (Texture *) self->rendererObject;
}
char *_spUtil_readFile(const char *path, int *length) {
return _spReadFile(path, length);
}
/**/
namespace spine {
SkeletonDrawable::SkeletonDrawable(spSkeletonData *skeletonData, spAnimationStateData *stateData)
: timeScale(1), vertexArray(new VertexArray(Triangles, skeletonData->bonesCount * 4)), worldVertices(0), clipper(0) {
spBone_setYDown(true);
worldVertices = MALLOC(float, SPINE_MESH_VERTEX_COUNT_MAX);
skeleton = spSkeleton_create(skeletonData);
tempUvs = spFloatArray_create(16);
tempColors = spColorArray_create(16);
ownsAnimationStateData = stateData == 0;
if (ownsAnimationStateData) stateData = spAnimationStateData_create(skeletonData);
state = spAnimationState_create(stateData);
clipper = spSkeletonClipping_create();
}
SkeletonDrawable::~SkeletonDrawable() {
delete vertexArray;
FREE(worldVertices);
if (ownsAnimationStateData) spAnimationStateData_dispose(state->data);
spAnimationState_dispose(state);
spSkeleton_dispose(skeleton);
spSkeletonClipping_dispose(clipper);
spFloatArray_dispose(tempUvs);
spColorArray_dispose(tempColors);
}
void SkeletonDrawable::update(float deltaTime, spPhysics physics) {
spAnimationState_update(state, deltaTime * timeScale);
spAnimationState_apply(state, skeleton);
spSkeleton_update(skeleton, deltaTime * timeScale);
spSkeleton_updateWorldTransform(skeleton, physics);
}
void SkeletonDrawable::draw(RenderTarget &target, RenderStates states) const {
vertexArray->clear();
states.texture = 0;
unsigned short quadIndices[6] = {0, 1, 2, 2, 3, 0};
// Early out if skeleton is invisible
if (skeleton->color.a == 0) return;
sf::Vertex vertex;
Texture *texture = 0;
for (int i = 0; i < skeleton->slotsCount; ++i) {
spSlot *slot = skeleton->drawOrder[i];
spAttachment *attachment = slot->attachment;
if (!attachment) {
spSkeletonClipping_clipEnd(clipper, slot);
continue;
}
// Early out if slot is invisible
if (slot->color.a == 0 || !slot->bone->active) {
spSkeletonClipping_clipEnd(clipper, slot);
continue;
}
float *vertices = worldVertices;
int verticesCount = 0;
float *uvs = 0;
unsigned short *indices = 0;
int indicesCount = 0;
spColor *attachmentColor;
if (attachment->type == SP_ATTACHMENT_REGION) {
spRegionAttachment *regionAttachment = (spRegionAttachment *) attachment;
attachmentColor = &regionAttachment->color;
// Early out if slot is invisible
if (attachmentColor->a == 0) {
spSkeletonClipping_clipEnd(clipper, slot);
continue;
}
spRegionAttachment_computeWorldVertices(regionAttachment, slot, vertices, 0, 2);
verticesCount = 4;
uvs = regionAttachment->uvs;
indices = quadIndices;
indicesCount = 6;
texture = (Texture *) ((spAtlasRegion *) regionAttachment->rendererObject)->page->rendererObject;
} else if (attachment->type == SP_ATTACHMENT_MESH) {
spMeshAttachment *mesh = (spMeshAttachment *) attachment;
attachmentColor = &mesh->color;
// Early out if slot is invisible
if (attachmentColor->a == 0) {
spSkeletonClipping_clipEnd(clipper, slot);
continue;
}
if (mesh->super.worldVerticesLength > SPINE_MESH_VERTEX_COUNT_MAX) continue;
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;
texture = (Texture *) ((spAtlasRegion *) mesh->rendererObject)->page->rendererObject;
} 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 SP_BLEND_MODE_NORMAL:
blend = normal;
break;
case SP_BLEND_MODE_ADDITIVE:
blend = additive;
break;
case SP_BLEND_MODE_MULTIPLY:
blend = multiply;
break;
case SP_BLEND_MODE_SCREEN:
blend = screen;
break;
default:
blend = normal;
}
} else {
switch (slot->data->blendMode) {
case SP_BLEND_MODE_NORMAL:
blend = normalPma;
break;
case SP_BLEND_MODE_ADDITIVE:
blend = additivePma;
break;
case SP_BLEND_MODE_MULTIPLY:
blend = multiplyPma;
break;
case SP_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();
for (int j = 0; j < indicesCount; ++j) {
int index = indices[j] << 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);
}
} /* namespace spine */

View File

@ -1,53 +0,0 @@
cmake_minimum_required(VERSION 3.10)
project(spine-sfml)
# Default flags
include(${CMAKE_CURRENT_LIST_DIR}/../../flags.cmake)
# SFML
include(FetchContent)
FetchContent_Declare(SFML GIT_REPOSITORY https://github.com/SFML/SFML GIT_TAG 2.6.1)
set(FETCHCONTENT_QUIET NO)
FetchContent_MakeAvailable(SFML)
# Add spine-cpp
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../../spine-cpp ${CMAKE_BINARY_DIR}/spine-cpp-build)
# Define spine-sfml-cpp library
include_directories(${CMAKE_CURRENT_LIST_DIR}/src ${SFML_SOURCE_DIR}/include)
file(GLOB INCLUDES "${CMAKE_CURRENT_LIST_DIR}/src/**/*.h")
file(GLOB SOURCES "${CMAKE_CURRENT_LIST_DIR}/src/**/*.cpp")
add_library(spine-sfml-cpp STATIC ${SOURCES} ${INCLUDES})
target_link_libraries(spine-sfml-cpp LINK_PUBLIC spine-cpp sfml-graphics sfml-window sfml-system)
# Define spine-sfml example executable
add_executable(spine-sfml-cpp-example ${CMAKE_CURRENT_LIST_DIR}/example/main.cpp)
target_link_libraries(spine-sfml-cpp-example spine-cpp spine-sfml-cpp sfml-graphics sfml-window sfml-system)
# Define spine-sfml testbed executable
add_executable(spine-sfml-cpp-testbed ${CMAKE_CURRENT_LIST_DIR}/example/testbed.cpp)
target_link_libraries(spine-sfml-cpp-testbed spine-cpp spine-sfml-cpp sfml-graphics sfml-window sfml-system)
# Link in OS dependencies like OpenGL
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
find_library(COCOA_FRAMEWORK Cocoa)
find_library(OPENGL_FRAMEWORK OpenGL)
target_link_libraries(spine-sfml-cpp-example ${COCOA_FRAMEWORK} ${OPENGL_FRAMEWORK})
target_link_libraries(spine-sfml-cpp-testbed ${COCOA_FRAMEWORK} ${OPENGL_FRAMEWORK})
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
target_link_libraries(spine-sfml-cpp-example GL)
target_link_libraries(spine-sfml-cpp-testbed GL)
else()
target_link_libraries(spine-sfml-cpp-example opengl32 gdi32 winmm)
target_link_libraries(spine-sfml-cpp-testbed opengl32 gdi32 winmm)
add_definitions(-DSFML_STATIC)
endif()
# Copy data to build directory
add_custom_command(TARGET spine-sfml-cpp-example
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_CURRENT_LIST_DIR}/data $<TARGET_FILE_DIR:spine-sfml-cpp-example>/data)
add_custom_command(TARGET spine-sfml-cpp-testbed
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_CURRENT_LIST_DIR}/data $<TARGET_FILE_DIR:spine-sfml-cpp-testbed>/data)

View File

@ -1,26 +0,0 @@
Spine Runtimes License Agreement
Last updated April 5, 2025. Replaces all prior versions.
Copyright (c) 2013-2025, Esoteric Software LLC
Integration of the Spine Runtimes into software or otherwise creating
derivative works of the Spine Runtimes is permitted under the terms and
conditions of Section 2 of the Spine Editor License Agreement:
http://esotericsoftware.com/spine-editor-license
Otherwise, it is permitted to integrate the Spine Runtimes into software
or otherwise create derivative works of the Spine Runtimes (collectively,
"Products"), provided that each user of the Products must obtain their own
Spine Editor license and redistribution of the Products in any form must
include this license and copyright notice.
THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "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 LLC 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
THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,65 +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-cpp](../../spine-cpp).
## Licensing
You are welcome to evaluate the Spine Runtimes and the examples we provide in this repository free of charge.
You can integrate the Spine Runtimes into your software free of charge, but users of your software must have their own [Spine license](https://esotericsoftware.com/spine-purchase). Please make your users aware of this requirement! This option is often chosen by those making development tools, such as an SDK, game toolkit, or software library.
In order to distribute your software containing the Spine Runtimes to others that don't have a Spine license, you need a [Spine license](https://esotericsoftware.com/spine-purchase) at the time of integration. Then you can distribute your software containing the Spine Runtimes however you like, provided others don't modify it or use it to create new software. If others want to do that, they'll need their own Spine license.
For the official legal terms governing the Spine Runtimes, please read the [Spine Runtimes License Agreement](http://esotericsoftware.com/spine-runtimes-license) and Section 2 of the [Spine Editor License Agreement](http://esotericsoftware.com/spine-editor-license#s2).
## Spine version
spine-sfml works with data exported from Spine 4.2.xx.
spine-sfml supports all Spine features except two color tinting.
## Usage
1. Create a new SFML project. See the [SFML documentation](https://www.sfml-dev.org/tutorials/2.6/) 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-cpp/spine-cpp/src/spine` and `spine-sfml/cpp/src/spine` to your project
4. Add the folder `spine-cpp/spine-cpp/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#runtimes) 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 2022 Community](https://visualstudio.microsoft.com/downloads/). Make sure you install support for C++, CMake as well as th Windows SDK for XP/7/8.
1. Open Visual Studio and open the `spine-sfml/cpp` folder via the `Open a local folder` button
1. Let CMake finish, then select `spine-sfml-cpp-example.exe` as the start-up project
1. Start debugging to run the example
### 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/cpp` folder
5. Type `mkdir build && cd build && cmake ../..` to generate Make files
6. Type `make` to compile the example
7. Run the example via `./spine-sfml-cpp-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`
4. 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.
5. Open a terminal, and `cd` into the `spine-runtimes/spine-sfml/cpp` folder
6. Type `mkdir build && cd build && cmake -G Xcode ..` to generate an Xcode project called `spine-sfml.xcodeproj`
7. Type `open spine-sfml.xcodeproj` to open the Xcode project
8. In Xcode, set the active scheme to `spine-sfml-cpp-example`
9. Click the `Run` button or press `CMD+R` to run the example
## Notes
- Atlas images should not use premultiplied alpha.

View File

@ -1,158 +0,0 @@
celestial-circus-pma.png
size: 1024, 1024
filter: Linear, Linear
pma: true
scale: 0.4
arm-back-down
bounds: 971, 683, 38, 82
arm-back-up
bounds: 939, 44, 83, 116
arm-front-down
bounds: 971, 603, 36, 78
arm-front-up
bounds: 289, 22, 77, 116
rotate: 90
bench
bounds: 586, 47, 189, 48
body-bottom
bounds: 868, 270, 154, 124
body-top
bounds: 2, 156, 126, 132
offsets: 0, 0, 126, 133
rotate: 90
chest
bounds: 490, 267, 104, 93
rotate: 180
cloud-back
bounds: 804, 563, 202, 165
rotate: 90
cloud-front
bounds: 606, 440, 325, 196
rotate: 270
collar
bounds: 373, 739, 47, 26
ear
bounds: 106, 737, 20, 28
eye-back-shadow
bounds: 233, 755, 14, 10
eye-front-shadow
bounds: 128, 751, 24, 14
eye-reflex-back
bounds: 787, 758, 8, 7
eye-reflex-front
bounds: 154, 758, 10, 7
eye-white-back
bounds: 616, 749, 13, 16
eye-white-front
bounds: 477, 748, 22, 17
eyelashes-down-back
bounds: 655, 759, 11, 6
eyelashes-down-front
bounds: 549, 759, 15, 6
eyelashes-top-back
bounds: 353, 755, 18, 10
eyelashes-top-front
bounds: 749, 749, 30, 16
face
bounds: 775, 277, 91, 102
offsets: 2, 0, 93, 102
feathers-back
bounds: 192, 611, 46, 46
feathers-front
bounds: 415, 679, 72, 86
fringe-middle-back
bounds: 794, 509, 33, 52
fringe-middle-front
bounds: 679, 202, 60, 50
fringe-side-back
bounds: 407, 5, 27, 94
fringe-side-front
bounds: 14, 331, 26, 93
glove-bottom-back
bounds: 14, 681, 51, 41
glove-bottom-front
bounds: 313, 288, 47, 48
hair-back-1
bounds: 716, 91, 132, 306
rotate: 270
hair-back-2
bounds: 124, 100, 80, 285
rotate: 90
hair-back-3
bounds: 410, 78, 70, 268
rotate: 270
hair-back-4
bounds: 42, 250, 88, 262
rotate: 90
hair-back-5
bounds: 320, 141, 88, 279
rotate: 90
hair-back-6
bounds: 2, 36, 88, 286
rotate: 90
hair-hat-shadow
bounds: 14, 724, 90, 41
hand-back
bounds: 2, 42, 60, 47
hand-front
bounds: 909, 208, 53, 60
hat-back
bounds: 741, 189, 64, 45
hat-front
bounds: 926, 396, 96, 56
head-back
bounds: 777, 2, 102, 86
jabot
bounds: 692, 384, 70, 55
leg-back
bounds: 362, 164, 210, 333
rotate: 90
leg-front
bounds: 590, 181, 258, 320
rotate: 90
logo-brooch
bounds: 584, 740, 16, 25
mouth
bounds: 631, 759, 22, 6
neck
bounds: 597, 441, 39, 56
nose
bounds: 556, 750, 6, 7
nose-highlight
bounds: 166, 761, 4, 4
nose-shadow
bounds: 778, 757, 7, 8
pupil-back
bounds: 442, 751, 10, 14
pupil-front
bounds: 602, 747, 12, 18
rope-back
bounds: 2, 273, 10, 492
rope-front
bounds: 2, 273, 10, 492
rope-front-bottom
bounds: 895, 69, 42, 65
skirt
bounds: 14, 325, 440, 246
rotate: 90
sock-bow
bounds: 253, 733, 33, 32
spine-logo-body
bounds: 569, 733, 13, 32
star-big
bounds: 422, 741, 18, 24
star-medium
bounds: 1011, 757, 6, 8
star-small
bounds: 218, 761, 3, 4
underskirt
bounds: 212, 320, 445, 228
rotate: 270
underskirt-back
bounds: 434, 332, 433, 171
rotate: 270
wing-back
bounds: 137, 137, 146, 252
rotate: 270
wing-front
bounds: 718, 314, 304, 248

Binary file not shown.

Before

Width:  |  Height:  |  Size: 791 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,157 +0,0 @@
celestial-circus.png
size: 1024, 1024
filter: Linear, Linear
scale: 0.4
arm-back-down
bounds: 971, 683, 38, 82
arm-back-up
bounds: 939, 44, 83, 116
arm-front-down
bounds: 971, 603, 36, 78
arm-front-up
bounds: 289, 22, 77, 116
rotate: 90
bench
bounds: 586, 47, 189, 48
body-bottom
bounds: 868, 270, 154, 124
body-top
bounds: 2, 156, 126, 132
offsets: 0, 0, 126, 133
rotate: 90
chest
bounds: 490, 267, 104, 93
rotate: 180
cloud-back
bounds: 804, 563, 202, 165
rotate: 90
cloud-front
bounds: 606, 440, 325, 196
rotate: 270
collar
bounds: 373, 739, 47, 26
ear
bounds: 106, 737, 20, 28
eye-back-shadow
bounds: 233, 755, 14, 10
eye-front-shadow
bounds: 128, 751, 24, 14
eye-reflex-back
bounds: 787, 758, 8, 7
eye-reflex-front
bounds: 154, 758, 10, 7
eye-white-back
bounds: 616, 749, 13, 16
eye-white-front
bounds: 477, 748, 22, 17
eyelashes-down-back
bounds: 655, 759, 11, 6
eyelashes-down-front
bounds: 549, 759, 15, 6
eyelashes-top-back
bounds: 353, 755, 18, 10
eyelashes-top-front
bounds: 749, 749, 30, 16
face
bounds: 775, 277, 91, 102
offsets: 2, 0, 93, 102
feathers-back
bounds: 192, 611, 46, 46
feathers-front
bounds: 415, 679, 72, 86
fringe-middle-back
bounds: 794, 509, 33, 52
fringe-middle-front
bounds: 679, 202, 60, 50
fringe-side-back
bounds: 407, 5, 27, 94
fringe-side-front
bounds: 14, 331, 26, 93
glove-bottom-back
bounds: 14, 681, 51, 41
glove-bottom-front
bounds: 313, 288, 47, 48
hair-back-1
bounds: 716, 91, 132, 306
rotate: 270
hair-back-2
bounds: 124, 100, 80, 285
rotate: 90
hair-back-3
bounds: 410, 78, 70, 268
rotate: 270
hair-back-4
bounds: 42, 250, 88, 262
rotate: 90
hair-back-5
bounds: 320, 141, 88, 279
rotate: 90
hair-back-6
bounds: 2, 36, 88, 286
rotate: 90
hair-hat-shadow
bounds: 14, 724, 90, 41
hand-back
bounds: 2, 42, 60, 47
hand-front
bounds: 909, 208, 53, 60
hat-back
bounds: 741, 189, 64, 45
hat-front
bounds: 926, 396, 96, 56
head-back
bounds: 777, 2, 102, 86
jabot
bounds: 692, 384, 70, 55
leg-back
bounds: 362, 164, 210, 333
rotate: 90
leg-front
bounds: 590, 181, 258, 320
rotate: 90
logo-brooch
bounds: 584, 740, 16, 25
mouth
bounds: 631, 759, 22, 6
neck
bounds: 597, 441, 39, 56
nose
bounds: 556, 750, 6, 7
nose-highlight
bounds: 166, 761, 4, 4
nose-shadow
bounds: 778, 757, 7, 8
pupil-back
bounds: 442, 751, 10, 14
pupil-front
bounds: 602, 747, 12, 18
rope-back
bounds: 2, 273, 10, 492
rope-front
bounds: 2, 273, 10, 492
rope-front-bottom
bounds: 895, 69, 42, 65
skirt
bounds: 14, 325, 440, 246
rotate: 90
sock-bow
bounds: 253, 733, 33, 32
spine-logo-body
bounds: 569, 733, 13, 32
star-big
bounds: 422, 741, 18, 24
star-medium
bounds: 1011, 757, 6, 8
star-small
bounds: 218, 761, 3, 4
underskirt
bounds: 212, 320, 445, 228
rotate: 270
underskirt-back
bounds: 434, 332, 433, 171
rotate: 270
wing-back
bounds: 137, 137, 146, 252
rotate: 270
wing-front
bounds: 718, 314, 304, 248

Binary file not shown.

Before

Width:  |  Height:  |  Size: 784 KiB

View File

@ -1,84 +0,0 @@
cloud-pot-pma.png
size: 1024, 512
filter: Linear, Linear
pma: true
scale: 0.5
cloud-base-1
bounds: 548, 129, 233, 210
cloud-base-10
bounds: 448, 227, 97, 101
cloud-base-2
bounds: 783, 129, 210, 208
rotate: 90
cloud-base-3
bounds: 271, 156, 175, 164
cloud-base-4
bounds: 2, 148, 176, 163
cloud-base-5
bounds: 495, 2, 145, 125
cloud-base-6
bounds: 332, 18, 161, 136
cloud-base-7
bounds: 180, 5, 150, 149
cloud-base-8
bounds: 2, 18, 154, 128
cloud-base-9
bounds: 862, 19, 107, 108
cloud-cheeks
bounds: 642, 48, 218, 79
cloud-eyes-closed
bounds: 137, 317, 132, 22
cloud-eyes-open
bounds: 2, 313, 133, 26
cloud-eyes-reflex
bounds: 271, 322, 120, 17
cloud-mouth-closed
bounds: 180, 201, 49, 16
cloud-mouth-open
bounds: 180, 219, 59, 35
leaf-big
bounds: 448, 205, 20, 49
rotate: 90
leaf-small
bounds: 993, 278, 17, 30
petal-1
bounds: 241, 236, 26, 18
petal-2
bounds: 993, 248, 28, 17
rotate: 90
petal-3
bounds: 993, 310, 29, 21
rotate: 90
pot-base
bounds: 180, 256, 76, 59
pot-eyes-closed
bounds: 500, 330, 46, 9
pot-eyes-open
bounds: 499, 214, 40, 11
pot-mouth-open
bounds: 241, 220, 14, 16
rotate: 90
pot-mouth-pouty
bounds: 521, 202, 18, 10
pot-mouth-smile
bounds: 993, 198, 14, 10
pot-mouth-smile-big
bounds: 499, 203, 20, 9
rain-blue
bounds: 241, 206, 12, 18
rotate: 90
rain-color
bounds: 258, 298, 9, 17
rain-green
bounds: 993, 210, 12, 18
rotate: 90
rain-white
bounds: 993, 224, 12, 22
rain-white-reflex
bounds: 393, 324, 5, 10
rotate: 90
stem
bounds: 393, 331, 8, 105
rotate: 90
stem-end
bounds: 1007, 233, 13, 13

Binary file not shown.

Before

Width:  |  Height:  |  Size: 341 KiB

View File

@ -1,83 +0,0 @@
cloud-pot.png
size: 1024, 512
filter: Linear, Linear
scale: 0.5
cloud-base-1
bounds: 548, 129, 233, 210
cloud-base-10
bounds: 448, 227, 97, 101
cloud-base-2
bounds: 783, 129, 210, 208
rotate: 90
cloud-base-3
bounds: 271, 156, 175, 164
cloud-base-4
bounds: 2, 148, 176, 163
cloud-base-5
bounds: 495, 2, 145, 125
cloud-base-6
bounds: 332, 18, 161, 136
cloud-base-7
bounds: 180, 5, 150, 149
cloud-base-8
bounds: 2, 18, 154, 128
cloud-base-9
bounds: 862, 19, 107, 108
cloud-cheeks
bounds: 642, 48, 218, 79
cloud-eyes-closed
bounds: 137, 317, 132, 22
cloud-eyes-open
bounds: 2, 313, 133, 26
cloud-eyes-reflex
bounds: 271, 322, 120, 17
cloud-mouth-closed
bounds: 180, 201, 49, 16
cloud-mouth-open
bounds: 180, 219, 59, 35
leaf-big
bounds: 448, 205, 20, 49
rotate: 90
leaf-small
bounds: 993, 278, 17, 30
petal-1
bounds: 241, 236, 26, 18
petal-2
bounds: 993, 248, 28, 17
rotate: 90
petal-3
bounds: 993, 310, 29, 21
rotate: 90
pot-base
bounds: 180, 256, 76, 59
pot-eyes-closed
bounds: 500, 330, 46, 9
pot-eyes-open
bounds: 499, 214, 40, 11
pot-mouth-open
bounds: 241, 220, 14, 16
rotate: 90
pot-mouth-pouty
bounds: 521, 202, 18, 10
pot-mouth-smile
bounds: 993, 198, 14, 10
pot-mouth-smile-big
bounds: 499, 203, 20, 9
rain-blue
bounds: 241, 206, 12, 18
rotate: 90
rain-color
bounds: 258, 298, 9, 17
rain-green
bounds: 993, 210, 12, 18
rotate: 90
rain-white
bounds: 993, 224, 12, 22
rain-white-reflex
bounds: 393, 324, 5, 10
rotate: 90
stem
bounds: 393, 331, 8, 105
rotate: 90
stem-end
bounds: 1007, 233, 13, 13

View File

@ -1,846 +0,0 @@
{
"skeleton": {
"hash": "XPuWaTjiwek",
"spine": "4.3.37-beta",
"x": -345,
"y": -17,
"width": 756,
"height": 1098,
"images": "./images/",
"audio": ""
},
"bones": [
{ "name": "root" },
{ "name": "pot-control", "parent": "root", "x": 5, "y": 42, "color": "8828ffff", "icon": "arrowsB" },
{ "name": "cloud", "parent": "pot-control", "x": 26.5, "y": 772, "color": "1ee8c0ff", "icon": "circle" },
{ "name": "cloud-base-1", "parent": "cloud", "x": -4, "y": 57, "color": "b0d5eaff" },
{ "name": "cloud-base-2", "parent": "cloud-base-1", "x": 148.5, "y": -18.5, "color": "b0d5eaff" },
{ "name": "cloud-base-3", "parent": "cloud-base-1", "x": -182, "y": -87.5, "color": "b0d5eaff" },
{ "name": "cloud-base-4", "parent": "cloud", "x": -31.5, "y": -77, "color": "b0d5eaff" },
{ "name": "cloud-base-5", "parent": "cloud-base-4", "x": 177.5, "y": 8, "color": "b0d5eaff" },
{ "name": "cloud-base-6", "parent": "cloud-base-1", "x": -150.5, "y": 40, "color": "b0d5eaff" },
{ "name": "cloud-base-7", "parent": "cloud-base-1", "x": 8.5, "y": 36.5, "color": "b0d5eaff" },
{ "name": "cloud-base-8", "parent": "cloud-base-2", "x": 3.5, "y": 68.5, "color": "b0d5eaff" },
{ "name": "cloud-base-9", "parent": "cloud-base-3", "x": -83.5, "y": 30.5, "color": "b0d5eaff" },
{ "name": "cloud-base-10", "parent": "cloud-base-5", "x": 137, "y": 54.5, "color": "b0d5eaff" },
{ "name": "rain-blue", "parent": "cloud", "x": 102.49, "y": -26, "color": "2360e3ff", "icon": "diamond" },
{ "name": "rain-color", "parent": "cloud", "x": -39.42, "y": -26, "color": "2360e3ff", "icon": "diamond" },
{ "name": "rain-green", "parent": "cloud", "x": 35.08, "y": -26, "color": "2360e3ff", "icon": "diamond" },
{ "name": "rain-white", "parent": "cloud", "x": -103.92, "y": -26, "color": "2360e3ff", "icon": "diamond" },
{ "name": "pot", "parent": "pot-control", "x": -5, "y": -42, "color": "8828ffff" },
{ "name": "pot-face", "parent": "pot", "x": -1.06, "y": 28.16, "color": "f38383ff", "icon": "gear" },
{
"name": "leaf-big",
"parent": "pot",
"length": 46.73,
"rotation": 119.24,
"x": 4.04,
"y": 95.05,
"color": "abe323ff"
},
{ "name": "leaf-big-tip", "parent": "leaf-big", "length": 46.73, "x": 46.73, "color": "abe323ff" },
{
"name": "leaf-small",
"parent": "pot",
"length": 51.32,
"rotation": 50.93,
"x": 10.16,
"y": 96.81,
"color": "abe323ff"
},
{
"name": "stem",
"parent": "pot",
"length": 104.76,
"rotation": 90,
"x": 7.24,
"y": 92.61,
"color": "abe323ff"
},
{ "name": "stem2", "parent": "stem", "length": 69.84, "x": 104.76, "color": "abe323ff" },
{ "name": "stem3", "parent": "stem2", "length": 34.92, "x": 69.84, "color": "abe323ff" },
{
"name": "petal-3",
"parent": "stem3",
"length": 37.74,
"rotation": 1.03,
"x": 30.73,
"y": 0.64,
"color": "2381e3ff"
},
{
"name": "petal-1",
"parent": "stem3",
"length": 40.11,
"rotation": 70.18,
"x": 34.13,
"y": 3.02,
"color": "2381e3ff"
},
{
"name": "petal-2",
"parent": "stem3",
"length": 48.62,
"rotation": -80.34,
"x": 32.09,
"y": -4.46,
"color": "2381e3ff"
},
{ "name": "cloud-face", "parent": "cloud", "y": 14.93, "color": "9e82ffff", "icon": "arrowsB" }
],
"slots": [
{ "name": "rain/rain-green", "bone": "rain-green", "attachment": "rain-green" },
{ "name": "rain/rain-blue", "bone": "rain-blue", "attachment": "rain-blue" },
{ "name": "rain/rain-color", "bone": "rain-color", "attachment": "rain-color" },
{ "name": "rain/rain-white", "bone": "rain-white", "attachment": "rain-white" },
{ "name": "rain/rain-white-reflex", "bone": "rain-white", "attachment": "rain-white-reflex" },
{ "name": "flower/petal-1", "bone": "petal-1", "attachment": "petal-1" },
{ "name": "flower/petal-2", "bone": "petal-2", "attachment": "petal-2" },
{ "name": "flower/petal-3", "bone": "petal-3", "attachment": "petal-3" },
{ "name": "flower/stem", "bone": "stem", "attachment": "stem" },
{ "name": "flower/leaf-big", "bone": "leaf-big", "attachment": "leaf-big" },
{ "name": "flower/leaf-small", "bone": "leaf-small", "attachment": "leaf-small" },
{ "name": "flower/stem-end", "bone": "stem3", "attachment": "stem-end" },
{ "name": "pot/pot-base", "bone": "pot", "attachment": "pot-base" },
{ "name": "pot/pot-mouth", "bone": "pot-face", "attachment": "pot-mouth-smile-big" },
{ "name": "pot/pot-eyes", "bone": "pot-face", "attachment": "pot-eyes-open" },
{ "name": "cloud/cloud-base/cloud-base-1", "bone": "cloud-base-1", "attachment": "cloud-base-1" },
{ "name": "cloud/cloud-base/cloud-base-2", "bone": "cloud-base-2", "attachment": "cloud-base-2" },
{ "name": "cloud/cloud-base/cloud-base-3", "bone": "cloud-base-3", "attachment": "cloud-base-3" },
{ "name": "cloud/cloud-base/cloud-base-4", "bone": "cloud-base-4", "attachment": "cloud-base-4" },
{ "name": "cloud/cloud-base/cloud-base-5", "bone": "cloud-base-5", "attachment": "cloud-base-5" },
{ "name": "cloud/cloud-base/cloud-base-6", "bone": "cloud-base-6", "attachment": "cloud-base-6" },
{ "name": "cloud/cloud-base/cloud-base-7", "bone": "cloud-base-7", "attachment": "cloud-base-7" },
{ "name": "cloud/cloud-base/cloud-base-8", "bone": "cloud-base-8", "attachment": "cloud-base-8" },
{ "name": "cloud/cloud-base/cloud-base-9", "bone": "cloud-base-9", "attachment": "cloud-base-9" },
{ "name": "cloud/cloud-base/cloud-base-10", "bone": "cloud-base-10", "attachment": "cloud-base-10" },
{ "name": "cloud/cloud-cheeks", "bone": "cloud-face", "attachment": "cloud-cheeks" },
{ "name": "cloud/cloud-eyes", "bone": "cloud-face", "attachment": "cloud-eyes-open" },
{ "name": "cloud/cloud-eyes-reflex", "bone": "cloud-face", "attachment": "cloud-eyes-reflex" },
{ "name": "cloud/cloud-mouth", "bone": "cloud-face", "attachment": "cloud-mouth-closed" }
],
"constraints": [
{
"type": "physics",
"name": "cloud",
"bone": "cloud",
"x": 1,
"y": 1,
"strength": 172.8,
"damping": 0.8571,
"mass": 3
},
{
"type": "physics",
"name": "rain/rain-white",
"bone": "rain-white",
"x": 1,
"y": 1,
"inertia": 1,
"strength": 0,
"damping": 1,
"gravity": 70
},
{
"type": "physics",
"name": "rain/rain-green",
"bone": "rain-green",
"x": 1,
"y": 1,
"inertia": 1,
"strength": 0,
"damping": 1,
"gravity": 70
},
{
"type": "physics",
"name": "rain/rain-color",
"bone": "rain-color",
"x": 1,
"y": 1,
"inertia": 1,
"strength": 0,
"damping": 1,
"gravity": 70
},
{
"type": "physics",
"name": "rain/rain-blue",
"bone": "rain-blue",
"x": 1,
"y": 1,
"inertia": 1,
"strength": 0,
"damping": 1,
"gravity": 70
},
{
"type": "physics",
"name": "cloud-base/cloud-base-1",
"bone": "cloud-base-1",
"x": 1,
"y": 1,
"limit": 500,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-2",
"bone": "cloud-base-2",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-3",
"bone": "cloud-base-3",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-4",
"bone": "cloud-base-4",
"x": 1,
"y": 1,
"limit": 500,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-5",
"bone": "cloud-base-5",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-6",
"bone": "cloud-base-6",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-7",
"bone": "cloud-base-7",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-8",
"bone": "cloud-base-8",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-9",
"bone": "cloud-base-9",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "cloud-base/cloud-base-10",
"bone": "cloud-base-10",
"x": 1,
"y": 1,
"limit": 300,
"inertia": 0.3741,
"strength": 134.7,
"damping": 0.8163,
"mass": 2.8
},
{
"type": "physics",
"name": "plant/leaf-big",
"bone": "leaf-big",
"rotate": 0.7532,
"shearX": 0.2468,
"limit": 500,
"strength": 160.5,
"damping": 0.8367,
"mass": 4
},
{
"type": "physics",
"name": "plant/leaf-small",
"bone": "leaf-small",
"rotate": 0.6026,
"limit": 500,
"strength": 160.5,
"damping": 0.8367,
"mass": 4
},
{
"type": "physics",
"name": "plant/stem",
"bone": "stem",
"rotate": 0.8205,
"limit": 700,
"strength": 152.4,
"damping": 0.9388,
"mass": 2.6
},
{
"type": "physics",
"name": "plant/stem2",
"bone": "stem2",
"rotate": 0.8205,
"limit": 700,
"strength": 152.4,
"damping": 0.9388,
"mass": 2.6
},
{
"type": "physics",
"name": "plant/stem3",
"bone": "stem3",
"rotate": 0.8205,
"limit": 700,
"strength": 152.4,
"damping": 0.9388,
"mass": 2.6
},
{
"type": "physics",
"name": "plant/petal-1",
"bone": "petal-1",
"rotate": 1,
"limit": 500,
"strength": 164.6,
"damping": 0.6531,
"mass": 2.6
},
{
"type": "physics",
"name": "plant/petal-3",
"bone": "petal-3",
"rotate": 1,
"limit": 500,
"strength": 164.6,
"damping": 0.7823,
"mass": 3.83
},
{
"type": "physics",
"name": "plant/petal-2",
"bone": "petal-2",
"rotate": 1,
"limit": 500,
"strength": 164.6,
"damping": 0.6531,
"mass": 2.6
},
{
"type": "physics",
"name": "plant/leaf-big-tip",
"bone": "leaf-big-tip",
"rotate": 1,
"limit": 500,
"strength": 160.5,
"damping": 0.8367,
"mass": 4
},
{
"type": "physics",
"name": "pot-face",
"bone": "pot-face",
"x": 0.1667,
"y": 0.1026,
"limit": 500,
"strength": 137.3,
"damping": 0.6078
},
{
"type": "physics",
"name": "cloud-face",
"bone": "cloud-face",
"x": 0.1923,
"y": 0.141,
"limit": 500,
"damping": 0.15
}
],
"skins": [
{
"name": "default",
"attachments": {
"cloud/cloud-base/cloud-base-1": {
"cloud-base-1": { "width": 465, "height": 420 }
},
"cloud/cloud-base/cloud-base-2": {
"cloud-base-2": { "width": 420, "height": 415 }
},
"cloud/cloud-base/cloud-base-3": {
"cloud-base-3": { "width": 349, "height": 327 }
},
"cloud/cloud-base/cloud-base-4": {
"cloud-base-4": { "width": 352, "height": 326 }
},
"cloud/cloud-base/cloud-base-5": {
"cloud-base-5": { "width": 289, "height": 250 }
},
"cloud/cloud-base/cloud-base-6": {
"cloud-base-6": { "width": 322, "height": 272 }
},
"cloud/cloud-base/cloud-base-7": {
"cloud-base-7": { "width": 300, "height": 297 }
},
"cloud/cloud-base/cloud-base-8": {
"cloud-base-8": { "width": 307, "height": 256 }
},
"cloud/cloud-base/cloud-base-9": {
"cloud-base-9": { "width": 214, "height": 216 }
},
"cloud/cloud-base/cloud-base-10": {
"cloud-base-10": { "width": 193, "height": 201 }
},
"cloud/cloud-cheeks": {
"cloud-cheeks": { "x": -19, "y": -53.93, "width": 435, "height": 158 }
},
"cloud/cloud-eyes": {
"cloud-eyes-closed": { "x": -10, "y": -5.43, "width": 263, "height": 43 },
"cloud-eyes-open": { "x": -8, "y": -4.43, "width": 265, "height": 51 }
},
"cloud/cloud-eyes-reflex": {
"cloud-eyes-reflex": { "x": -10, "y": 2.07, "width": 239, "height": 34 }
},
"cloud/cloud-mouth": {
"cloud-mouth-closed": { "y": -14.93, "width": 97, "height": 32 },
"cloud-mouth-open": { "x": -0.5, "y": -27.93, "width": 118, "height": 70 }
},
"flower/leaf-big": {
"leaf-big": {
"type": "mesh",
"uvs": [ 1, 1, 0, 1, 0, 0.75, 0, 0.5, 0, 0.25, 0, 0, 1, 0, 1, 0.25, 1, 0.5, 1, 0.75 ],
"triangles": [ 4, 5, 6, 7, 4, 6, 3, 4, 7, 8, 3, 7, 2, 3, 8, 9, 2, 8, 1, 2, 9, 0, 1, 9 ],
"vertices": [ 1, 19, -5.05, -21.72, 1, 1, 19, -5.05, 18.28, 1, 2, 19, 19.45, 18.28, 0.75483, 20, -27.28, 18.28, 0.24517, 2, 19, 43.95, 18.28, 0.50538, 20, -2.78, 18.28, 0.49462, 2, 19, 68.45, 18.28, 0.25278, 20, 21.72, 18.28, 0.74722, 1, 20, 46.22, 18.28, 1, 1, 20, 46.22, -21.72, 1, 2, 19, 68.45, -21.72, 0.24458, 20, 21.72, -21.72, 0.75542, 2, 19, 43.95, -21.72, 0.4937, 20, -2.78, -21.72, 0.5063, 2, 19, 19.45, -21.72, 0.74651, 20, -27.28, -21.72, 0.25349 ],
"hull": 10,
"edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 0 ],
"width": 40,
"height": 98
}
},
"flower/leaf-small": {
"leaf-small": { "x": 25.02, "y": 0.4, "rotation": -91.36, "width": 34, "height": 59 }
},
"flower/petal-1": {
"petal-1": { "x": 18.88, "y": -4.54, "rotation": -160.18, "width": 52, "height": 36 }
},
"flower/petal-2": {
"petal-2": { "x": 21.96, "y": 2.06, "rotation": -9.66, "width": 56, "height": 34 }
},
"flower/petal-3": {
"petal-3": { "x": 16.97, "y": -5.71, "rotation": -91.03, "width": 58, "height": 42 }
},
"flower/stem": {
"stem": {
"type": "mesh",
"uvs": [ 1, 1, 0, 1, 0, 0.90909, 0, 0.81818, 0, 0.72727, 0, 0.63636, 0, 0.54545, 0, 0.45455, 0, 0.36364, 0, 0.27273, 0, 0.18182, 0, 0.09091, 0, 0, 1, 0, 1, 0.09091, 1, 0.18182, 1, 0.27273, 1, 0.36364, 1, 0.45455, 1, 0.54545, 1, 0.63636, 1, 0.72727, 1, 0.81818, 1, 0.90909 ],
"triangles": [ 11, 12, 13, 14, 11, 13, 10, 11, 14, 15, 10, 14, 9, 10, 15, 16, 9, 15, 8, 9, 16, 17, 8, 16, 7, 8, 17, 18, 7, 17, 6, 7, 18, 19, 6, 18, 5, 6, 19, 20, 5, 19, 4, 5, 20, 21, 4, 20, 3, 4, 21, 22, 3, 21, 2, 3, 22, 23, 2, 22, 1, 2, 23, 0, 1, 23 ],
"vertices": [ 1, 22, -3.61, -6.76, 1, 1, 22, -3.61, 9.24, 1, 3, 22, 15.49, 9.24, 0.97258, 23, -89.27, 9.24, 0.02734, 24, -159.11, 9.24, 8.0E-5, 3, 22, 34.58, 9.24, 0.92758, 23, -70.18, 9.24, 0.07175, 24, -140.02, 9.24, 6.7E-4, 3, 22, 53.67, 9.24, 0.851, 23, -51.09, 9.24, 0.14565, 24, -120.93, 9.24, 0.00335, 3, 22, 72.76, 9.24, 0.73702, 23, -32, 9.24, 0.25075, 24, -101.84, 9.24, 0.01223, 3, 22, 91.85, 9.24, 0.59184, 23, -12.91, 9.24, 0.37282, 24, -82.74, 9.24, 0.03534, 3, 22, 110.94, 9.24, 0.43333, 23, 6.18, 9.24, 0.482, 24, -63.65, 9.24, 0.08467, 3, 22, 130.03, 9.24, 0.28467, 23, 25.27, 9.24, 0.54153, 24, -44.56, 9.24, 0.1738, 3, 22, 149.12, 9.24, 0.16502, 23, 44.37, 9.24, 0.52188, 24, -25.47, 9.24, 0.3131, 3, 22, 168.21, 9.24, 0.08234, 23, 63.46, 9.24, 0.4129, 24, -6.38, 9.24, 0.50477, 3, 22, 187.3, 9.24, 0.03198, 23, 82.55, 9.24, 0.228, 24, 12.71, 9.24, 0.74001, 1, 24, 31.8, 9.24, 1, 1, 24, 31.8, -6.76, 1, 3, 22, 187.3, -6.76, 0.02989, 23, 82.55, -6.76, 0.23389, 24, 12.71, -6.76, 0.73622, 3, 22, 168.21, -6.76, 0.07799, 23, 63.46, -6.76, 0.42357, 24, -6.38, -6.76, 0.49844, 3, 22, 149.12, -6.76, 0.1584, 23, 44.37, -6.76, 0.53549, 24, -25.47, -6.76, 0.30611, 3, 22, 130.03, -6.76, 0.27629, 23, 25.27, -6.76, 0.55594, 24, -44.56, -6.76, 0.16777, 3, 22, 110.94, -6.76, 0.42428, 23, 6.18, -6.76, 0.49529, 24, -63.65, -6.76, 0.08044, 3, 22, 91.85, -6.76, 0.58346, 23, -12.91, -6.76, 0.38366, 24, -82.74, -6.76, 0.03289, 3, 22, 72.76, -6.76, 0.73038, 23, -32, -6.76, 0.25856, 24, -101.84, -6.76, 0.01107, 3, 22, 53.67, -6.76, 0.84652, 23, -51.09, -6.76, 0.15057, 24, -120.93, -6.76, 0.00291, 3, 22, 34.58, -6.76, 0.92506, 23, -70.18, -6.76, 0.0744, 24, -140.02, -6.76, 5.4E-4, 3, 22, 15.49, -6.76, 0.97151, 23, -89.27, -6.76, 0.02843, 24, -159.11, -6.76, 6.0E-5 ],
"hull": 24,
"edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 0 ],
"width": 16,
"height": 210
}
},
"flower/stem-end": {
"stem-end": { "x": 25.8, "y": -0.26, "rotation": -90, "width": 25, "height": 26 }
},
"pot/pot-base": {
"pot-base": { "x": 5, "y": 42, "width": 152, "height": 118 }
},
"pot/pot-eyes": {
"pot-eyes-closed": { "x": -0.94, "y": 2.34, "width": 92, "height": 17 },
"pot-eyes-open": { "x": 0.06, "y": 3.84, "width": 80, "height": 22 }
},
"pot/pot-mouth": {
"pot-mouth-open": { "x": -1.44, "y": -13.66, "width": 27, "height": 31 },
"pot-mouth-pouty": { "x": 0.56, "y": -12.66, "width": 35, "height": 19 },
"pot-mouth-smile": { "x": 0.56, "y": -12.16, "width": 27, "height": 20 },
"pot-mouth-smile-big": { "x": 1.56, "y": -9.16, "width": 39, "height": 18 }
},
"rain/rain-blue": {
"rain-blue": { "width": 23, "height": 36 }
},
"rain/rain-color": {
"rain-color": { "width": 18, "height": 34 }
},
"rain/rain-green": {
"rain-green": { "width": 23, "height": 36 }
},
"rain/rain-white": {
"rain-white": { "width": 23, "height": 44 }
},
"rain/rain-white-reflex": {
"rain-white-reflex": { "x": -0.5, "y": 3.5, "width": 10, "height": 19 }
}
}
}
],
"animations": {
"playing-in-the-rain": {
"slots": {
"cloud/cloud-eyes": {
"attachment": [
{ "time": 0.2, "name": "cloud-eyes-closed" },
{ "time": 0.9, "name": "cloud-eyes-open" },
{ "time": 1.7667, "name": "cloud-eyes-closed" },
{ "time": 1.9333, "name": "cloud-eyes-open" },
{ "time": 2.4333, "name": "cloud-eyes-closed" },
{ "time": 2.6, "name": "cloud-eyes-open" },
{ "time": 3.9333, "name": "cloud-eyes-closed" },
{ "time": 4.1, "name": "cloud-eyes-open" }
]
},
"cloud/cloud-mouth": {
"attachment": [
{ "time": 0.2, "name": "cloud-mouth-open" },
{ "time": 0.9, "name": "cloud-mouth-closed" }
]
},
"pot/pot-eyes": {
"attachment": [
{ "time": 0.1333, "name": "pot-eyes-closed" },
{ "time": 0.3, "name": "pot-eyes-open" },
{ "time": 1.0667, "name": "pot-eyes-closed" },
{ "time": 1.5, "name": "pot-eyes-open" },
{ "time": 3.0333, "name": "pot-eyes-closed" },
{ "time": 3.2333, "name": "pot-eyes-open" },
{ "time": 3.4667, "name": "pot-eyes-closed" },
{ "time": 3.6667, "name": "pot-eyes-open" }
]
},
"pot/pot-mouth": {
"attachment": [
{ "time": 0.1333, "name": "pot-mouth-open" },
{ "time": 0.3, "name": "pot-mouth-smile-big" },
{ "time": 1.0667, "name": "pot-mouth-pouty" },
{ "time": 2.4, "name": "pot-mouth-smile" },
{ "time": 3.0333, "name": "pot-mouth-smile-big" }
]
}
},
"bones": {
"pot": {
"rotate": [
{ "time": 1.1 },
{ "time": 1.2, "value": -12.76 },
{ "time": 1.5333, "curve": "stepped" },
{ "time": 3.7667 },
{ "time": 3.9, "value": 8.28 },
{ "time": 4.2333, "value": -4.34 },
{ "time": 4.4333 }
],
"scale": [
{},
{ "time": 0.2, "y": 0.752 },
{ "time": 0.4, "x": 0.845, "y": 1.068 },
{ "time": 0.6333 }
]
},
"pot-control": {
"translatex": [
{
"time": 1.0667,
"curve": [ 1.222, -203.48, 1.378, -610.44 ]
},
{ "time": 1.5333, "value": -610.44, "curve": "stepped" },
{
"time": 2.2333,
"value": -610.44,
"curve": [ 2.389, -610.44, 2.544, -478.45 ]
},
{ "time": 2.7, "value": -478.45, "curve": "stepped" },
{
"time": 3.8333,
"value": -478.45,
"curve": [ 3.971, -478.45, 4.095, -135.56 ]
},
{ "time": 4.2333 }
],
"translatey": [
{
"time": 1.0333,
"curve": [ 1.089, 10.56, 1.144, 44.34 ]
},
{
"time": 1.2,
"value": 44.34,
"curve": [ 1.256, 44.34, 1.311, 0 ]
},
{ "time": 1.3667, "curve": "stepped" },
{
"time": 2.2333,
"curve": [ 2.408, 0, 2.392, 44.34 ]
},
{
"time": 2.4333,
"value": 44.34,
"curve": [ 2.455, 44.34, 2.51, 0 ]
},
{ "time": 2.6, "curve": "stepped" },
{
"time": 3.8,
"curve": [ 3.841, 14.78, 3.893, 44.34 ]
},
{
"time": 3.9333,
"value": 44.34,
"curve": [ 4.023, 44.34, 4.111, 14.78 ]
},
{ "time": 4.2 }
]
},
"cloud-base-1": {
"rotate": [
{
"curve": [ 0.144, -9.36, 0.289, -17.29 ]
},
{
"time": 0.4333,
"value": -17.29,
"curve": [ 0.5, -17.29, 0.567, -4.32 ]
},
{ "time": 0.6333 }
],
"scale": [
{
"curve": [ 0.089, 1, 0.178, 1.064, 0.089, 1, 0.178, 1.064 ]
},
{
"time": 0.2667,
"x": 1.064,
"y": 1.064,
"curve": [ 0.411, 1.064, 0.556, 1.021, 0.411, 1.064, 0.556, 1.021 ]
},
{ "time": 0.7 }
]
},
"cloud-base-4": {
"rotate": [
{
"curve": [ 0.1, 5.55, 0.2, 14.81 ]
},
{
"time": 0.3,
"value": 14.81,
"curve": [ 0.467, 14.81, 0.633, 9.25 ]
},
{ "time": 0.8 }
],
"scale": [
{
"curve": [ 0.089, 1, 0.178, 1.064, 0.089, 1, 0.178, 1.064 ]
},
{
"time": 0.2667,
"x": 1.064,
"y": 1.064,
"curve": [ 0.411, 1.064, 0.556, 1.021, 0.411, 1.064, 0.556, 1.021 ]
},
{ "time": 0.7 }
]
},
"cloud": {
"translate": [
{ "time": 0.2333 },
{ "time": 0.3333, "y": 30.43 },
{ "time": 0.4667 },
{ "time": 0.5667, "y": 30.43 },
{ "time": 0.6667 },
{ "time": 0.7667, "y": 30.43 },
{ "time": 0.9333 }
]
}
},
"physics": {
"rain/rain-blue": {
"reset": [
{ "time": 0.4667 },
{ "time": 0.9333 },
{ "time": 1.4 },
{ "time": 1.8667 },
{ "time": 2.3333 },
{ "time": 2.8 },
{ "time": 3.2667 },
{ "time": 3.7333 },
{ "time": 4.2 },
{ "time": 4.6667 }
]
},
"rain/rain-color": {
"reset": [
{ "time": 0.3 },
{ "time": 0.7667 },
{ "time": 1.2333 },
{ "time": 1.7 },
{ "time": 2.1667 },
{ "time": 2.6333 },
{ "time": 3.1 },
{ "time": 3.5667 },
{ "time": 4.0333 },
{ "time": 4.5 }
]
},
"rain/rain-green": {
"reset": [
{ "time": 0.1333 },
{ "time": 0.6 },
{ "time": 1.0667 },
{ "time": 1.5333 },
{ "time": 2 },
{ "time": 2.4667 },
{ "time": 2.9333 },
{ "time": 3.4 },
{ "time": 3.8667 },
{ "time": 4.3333 }
]
},
"rain/rain-white": {
"reset": [
{},
{ "time": 0.4667 },
{ "time": 0.9333 },
{ "time": 1.4 },
{ "time": 1.8667 },
{ "time": 2.3333 },
{ "time": 2.8 },
{ "time": 3.2667 },
{ "time": 3.7333 },
{ "time": 4.2 }
]
}
}
},
"pot-moving-followed-by-rain": {
"bones": {
"pot-control": {
"translate": [
{},
{ "time": 0.5667, "x": -389.34, "curve": "stepped" },
{ "time": 1.1667, "x": -389.34 },
{ "time": 2.2, "x": 463.88, "curve": "stepped" },
{ "time": 2.4667, "x": 463.88 },
{ "time": 3 }
]
}
},
"physics": {
"rain/rain-blue": {
"reset": [
{ "time": 0.4667 },
{ "time": 0.9333 },
{ "time": 1.4 },
{ "time": 1.8667 },
{ "time": 2.3333 },
{ "time": 2.8 },
{ "time": 3.2667 }
]
},
"rain/rain-color": {
"reset": [
{ "time": 0.3 },
{ "time": 0.7667 },
{ "time": 1.2333 },
{ "time": 1.7 },
{ "time": 2.1667 },
{ "time": 2.6333 },
{ "time": 3.1 }
]
},
"rain/rain-green": {
"reset": [
{ "time": 0.1333 },
{ "time": 0.6 },
{ "time": 1.0667 },
{ "time": 1.5333 },
{ "time": 2 },
{ "time": 2.4667 },
{ "time": 2.9333 }
]
},
"rain/rain-white": {
"reset": [
{},
{ "time": 0.4667 },
{ "time": 0.9333 },
{ "time": 1.4 },
{ "time": 1.8667 },
{ "time": 2.3333 },
{ "time": 2.8 }
]
}
}
},
"rain": {
"physics": {
"rain/rain-blue": {
"reset": [
{ "time": 0.4667 }
]
},
"rain/rain-color": {
"reset": [
{ "time": 0.3 }
]
},
"rain/rain-green": {
"reset": [
{ "time": 0.1333 }
]
},
"rain/rain-white": {
"reset": [
{}
]
}
}
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

View File

@ -1,20 +0,0 @@
coin-pma.png
size: 1024, 1024
filter: Linear, Linear
pma: true
coin-front-logo
bounds: 328, 266, 305, 302
coin-front-shine-logo
bounds: 635, 2, 282, 282
coin-front-shine-spineboy
bounds: 635, 286, 282, 282
coin-front-spineboy
bounds: 21, 266, 305, 302
coin-side-round
bounds: 2, 120, 144, 282
rotate: 90
coin-side-straight
bounds: 2, 286, 17, 282
shine
bounds: 286, 192, 72, 245
rotate: 90

Binary file not shown.

Before

Width:  |  Height:  |  Size: 289 KiB

View File

@ -1,259 +0,0 @@
{
"skeleton": {
"hash": "aqQIMNiF9ZY",
"spine": "4.3.37-beta",
"x": -152.5,
"y": -151,
"width": 305,
"height": 302,
"images": "./images/",
"audio": ""
},
"bones": [
{ "name": "root" },
{ "name": "coin-front", "parent": "root" },
{ "name": "clipping", "parent": "coin-front" },
{ "name": "coin-sides", "parent": "root" },
{ "name": "coin-side-round", "parent": "coin-sides" },
{ "name": "coin-side-straight", "parent": "coin-sides" },
{ "name": "shine", "parent": "root", "x": 243.14 }
],
"slots": [
{ "name": "coin-side", "bone": "coin-side-straight", "color": "ffdb2fff", "attachment": "coin-side-straight" },
{ "name": "coin-side-round", "bone": "coin-side-round", "color": "ffdb2fff", "attachment": "coin-side-round" },
{ "name": "coin-front-texture", "bone": "coin-front", "color": "868686ff", "attachment": "coin-front-logo" },
{ "name": "coin-front-shine", "bone": "coin-front", "color": "888888ff", "dark": "000000", "attachment": "coin-front-shine-logo", "blend": "additive" },
{ "name": "clipping", "bone": "clipping", "attachment": "clipping" },
{ "name": "shine", "bone": "shine", "color": "ffffff60", "attachment": "shine", "blend": "additive" }
],
"skins": [
{
"name": "default",
"attachments": {
"clipping": {
"clipping": {
"type": "clipping",
"end": "clipping",
"vertexCount": 39,
"vertices": [ 0.1, 140.26, -26.4, 138.14, -50.51, 131.25, -75.42, 119.06, -98.21, 101.04, -115.44, 82.22, -127.63, 62.08, -136.11, 39.03, -140.08, 19.68, -141.41, -0.19, -140.08, -22.98, -134.78, -45.5, -125.24, -66.44, -113.32, -84.19, -98.21, -101.95, -80.46, -116.52, -61.38, -127.39, -38.92, -134.81, -18.22, -139.27, -0.14, -140.58, 24.23, -138.48, 45.45, -132.46, 67.98, -122.5, 86.58, -110.19, 102.56, -95.25, 115.4, -78.75, 125.36, -61.72, 134, -42.33, 138.46, -22.15, 139.24, -0.15, 138.46, 20.29, 133.48, 39.94, 127.19, 58.54, 117.5, 76.1, 104.4, 92.86, 88.42, 108.32, 69.03, 121.42, 50.43, 130.85, 26.32, 137.4 ],
"color": "ce3a3aff"
}
},
"coin-front-shine": {
"coin-front-shine-logo": { "width": 282, "height": 282 },
"coin-front-shine-spineboy": { "width": 282, "height": 282 }
},
"coin-front-texture": {
"coin-front-logo": { "width": 305, "height": 302 },
"coin-front-spineboy": { "width": 305, "height": 302 }
},
"coin-side": {
"coin-side-straight": { "x": 0.5, "width": 17, "height": 282 }
},
"coin-side-round": {
"coin-side-round": { "x": -69.43, "width": 144, "height": 282 }
},
"shine": {
"shine": { "y": 0.5, "scaleX": 1.6004, "scaleY": 1.6004, "width": 72, "height": 245 }
}
}
}
],
"animations": {
"animation": {
"slots": {
"coin-front-shine": {
"rgba2": [
{ "light": "7d7d7dff", "dark": "000000" },
{ "time": 0.2667, "light": "000000ff", "dark": "7e7e7e" },
{ "time": 0.664, "light": "000000ff", "dark": "000000" },
{ "time": 1.0333, "light": "7f7f7fff", "dark": "000000" },
{ "time": 1.3333, "light": "404040ff", "dark": "000000" },
{ "time": 1.6, "light": "000000ff", "dark": "7e7e7e" },
{ "time": 2.0022, "light": "000000ff", "dark": "000000" },
{ "time": 2.4, "light": "7f7f7fff", "dark": "000000" },
{ "time": 2.6667, "light": "7d7d7dff", "dark": "000000" }
],
"attachment": [
{ "time": 0.6667, "name": "coin-front-shine-spineboy" },
{ "time": 2, "name": "coin-front-shine-logo" }
]
},
"coin-front-texture": {
"rgba": [
{ "color": "858585ff" },
{ "time": 0.4, "color": "ffffffff" },
{
"time": 0.6696,
"color": "858585ff",
"curve": [ 0.725, 0.59, 0.892, 1, 0.725, 0.59, 0.892, 1, 0.725, 0.59, 0.892, 1, 0.725, 1, 0.892, 1 ]
},
{ "time": 0.9667, "color": "ffffffff" },
{ "time": 1.3318, "color": "858585ff", "curve": "stepped" },
{ "time": 1.3333, "color": "858585ff" },
{ "time": 1.7333, "color": "ffffffff" },
{ "time": 1.9982, "color": "858585ff", "curve": "stepped" },
{ "time": 2.0022, "color": "858585ff" },
{ "time": 2.3, "color": "ffffffff" },
{ "time": 2.6667, "color": "858585ff" }
],
"attachment": [
{ "time": 0.6667, "name": "coin-front-spineboy" },
{ "time": 2, "name": "coin-front-logo" }
]
}
},
"bones": {
"coin-front": {
"translate": [
{},
{ "time": 0.664, "x": 8.3, "curve": "stepped" },
{
"time": 0.6696,
"x": -8.3,
"curve": [ 0.794, -7.08, 1.167, 0, 0.794, 0, 1.167, 0 ]
},
{ "time": 1.3333 },
{ "time": 1.9982, "x": 8.3, "curve": "stepped" },
{ "time": 2.0022, "x": -8.3 },
{ "time": 2.6667 }
],
"scale": [
{
"curve": [ 0.164, 1, 0.484, 0.091, 0.164, 1, 0.484, 1 ]
},
{ "time": 0.664, "x": 0, "curve": "stepped" },
{
"time": 0.6696,
"x": 0.003,
"curve": [ 0.786, 0.153, 1.167, 1, 0.786, 1, 1.167, 1 ]
},
{
"time": 1.3333,
"curve": [ 1.442, 0.992, 1.858, 0.098, 1.442, 1, 1.858, 1 ]
},
{ "time": 1.9982, "x": 0.003, "curve": "stepped" },
{
"time": 2.0022,
"x": 0.003,
"curve": [ 2.123, 0.151, 2.501, 1, 2.123, 1, 2.501, 1 ]
},
{ "time": 2.6667 }
]
},
"coin-side-round": {
"translate": [
{},
{ "time": 0.664, "x": -6.75, "curve": "stepped" },
{
"time": 0.6696,
"x": 7.03,
"curve": [ 0.794, 5.99, 1.167, 0, 0.794, 0, 1.167, 0 ]
},
{ "time": 1.3333 },
{ "time": 1.9982, "x": -6.75, "curve": "stepped" },
{ "time": 2.0022, "x": 7.03 },
{ "time": 2.6667 }
],
"scale": [
{
"curve": [ 0.085, 1, 0.207, 0.789, 0.085, 1, 0.207, 1 ]
},
{
"time": 0.3333,
"x": 0.555,
"curve": [ 0.449, 0.347, 0.567, 0.122, 0.449, 1, 0.567, 1 ]
},
{ "time": 0.664, "x": 0.014, "curve": "stepped" },
{
"time": 0.6696,
"x": -0.028,
"curve": [ 0.723, -0.126, 0.865, -0.367, 0.723, 1, 0.865, 1 ]
},
{
"time": 1,
"x": -0.609,
"curve": [ 1.053, -0.778, 1.29, -0.997, 1.053, 1, 1.29, 1 ]
},
{ "time": 1.3318, "x": -1, "curve": "stepped" },
{
"time": 1.3333,
"curve": [ 1.384, 0.997, 1.439, 0.94, 1.384, 1, 1.439, 1 ]
},
{
"time": 1.5,
"x": 0.852,
"curve": [ 1.564, 0.748, 1.703, 0.509, 1.564, 1, 1.703, 1 ]
},
{
"time": 1.8,
"x": 0.315,
"curve": [ 1.873, 0.13, 1.987, 0.015, 1.873, 1, 1.987, 1 ]
},
{ "time": 1.9982, "x": 0.014, "curve": "stepped" },
{
"time": 2.0022,
"x": -0.028,
"curve": [ 2.039, -0.072, 2.123, -0.239, 2.039, 1, 2.123, 1 ]
},
{
"time": 2.2018,
"x": -0.365,
"curve": [ 2.269, -0.513, 2.337, -0.635, 2.269, 1, 2.337, 1 ]
},
{
"time": 2.4,
"x": -0.731,
"curve": [ 2.503, -0.871, 2.596, -0.961, 2.503, 1, 2.596, 1 ]
},
{
"time": 2.6592,
"x": -1,
"curve": [ 2.661, -1, 2.665, 1, 2.661, 1, 2.665, 1 ]
},
{ "time": 2.6667 }
]
},
"shine": {
"translate": [
{
"curve": [ 0.167, 0, 0.5, -473.39, 0.167, 0, 0.5, 0 ]
},
{
"time": 0.6667,
"x": -473.39,
"curve": [ 0.833, -473.39, 1.167, -33.16, 0.833, 0, 1.167, 0 ]
},
{
"time": 1.3333,
"x": -33.16,
"curve": [ 1.5, -33.16, 1.833, -473.39, 1.5, 0, 1.833, 0 ]
},
{
"time": 2,
"x": -473.39,
"curve": [ 2.167, -473.39, 2.5, 0, 2.167, 0, 2.5, 0 ]
},
{ "time": 2.6667 }
]
}
},
"drawOrder": [
{
"time": 0.6667,
"offsets": [
{ "slot": "coin-side", "offset": 2 }
]
},
{ "time": 0.6696 },
{
"time": 1.9982,
"offsets": [
{ "slot": "coin-side", "offset": 2 }
]
},
{ "time": 2.0022 }
]
}
}
}

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,114 +0,0 @@
dragon-pma.png
size: 1024, 1024
filter: Linear, Linear
pma: true
front-toe-a
bounds: 300, 929, 29, 50
front-toe-b
bounds: 258, 660, 56, 57
head
bounds: 2, 719, 296, 260
left-front-leg
bounds: 99, 660, 84, 57
left-wing09
bounds: 2, 15, 264, 589
rotate: 90
right-wing07
bounds: 647, 2, 365, 643
right-wing08
bounds: 2, 281, 365, 643
rotate: 90
right-wing09
bounds: 354, 647, 365, 643
rotate: 90
tail04
bounds: 185, 661, 56, 71
rotate: 90
tail06
bounds: 2, 649, 95, 68
thiagobrayner
bounds: 2, 981, 350, 31
dragon-pma_2.png
size: 1024, 1024
filter: Linear, Linear
pma: true
back
bounds: 647, 57, 190, 185
chin
bounds: 839, 28, 214, 146
rotate: 90
left-rear-leg
bounds: 736, 244, 206, 177
left-wing08
bounds: 736, 423, 264, 589
right-rear-toe
bounds: 944, 312, 109, 77
rotate: 90
right-wing04
bounds: 2, 2, 365, 643
rotate: 90
right-wing05
bounds: 369, 369, 365, 643
right-wing06
bounds: 2, 369, 365, 643
tail03
bounds: 647, 275, 73, 92
tail05
bounds: 944, 251, 52, 59
dragon-pma_3.png
size: 1024, 1024
filter: Linear, Linear
pma: true
chest
bounds: 858, 299, 136, 122
left-front-thigh
bounds: 647, 295, 84, 72
left-rear-thigh
bounds: 647, 117, 91, 149
left-wing07
bounds: 736, 423, 264, 589
right-front-leg
bounds: 647, 14, 101, 89
rotate: 90
right-front-thigh
bounds: 740, 158, 108, 108
right-rear-leg
bounds: 740, 46, 116, 100
right-rear-thigh
bounds: 858, 148, 91, 149
right-wing01
bounds: 2, 2, 365, 643
rotate: 90
right-wing02
bounds: 369, 369, 365, 643
right-wing03
bounds: 2, 369, 365, 643
tail01
bounds: 736, 268, 120, 153
tail02
bounds: 858, 26, 95, 120
dragon-pma_4.png
size: 1024, 1024
filter: Linear, Linear
pma: true
left-wing03
bounds: 2, 2, 264, 589
rotate: 90
left-wing04
bounds: 534, 268, 264, 589
left-wing05
bounds: 268, 268, 264, 589
left-wing06
bounds: 2, 268, 264, 589
dragon-pma_5.png
size: 1024, 1024
filter: Linear, Linear
pma: true
left-wing01
bounds: 268, 2, 264, 589
left-wing02
bounds: 2, 2, 264, 589

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

Some files were not shown because too many files have changed in this diff Show More