diff --git a/.github/workflows/spine-godot-v4.yml b/.github/workflows/spine-godot-v4.yml index f842aa0d8..818f600fa 100644 --- a/.github/workflows/spine-godot-v4.yml +++ b/.github/workflows/spine-godot-v4.yml @@ -13,8 +13,8 @@ env: AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_EC2_METADATA_DISABLED: true EM_VERSION: 3.1.18 - GODOT_TAG: master - GODOT_VERSION: 4.0.beta + GODOT_TAG: 4.0-stable + GODOT_VERSION: 4.0.stable jobs: diff --git a/spine-godot/README.md b/spine-godot/README.md index 464b33f87..ff718f062 100644 --- a/spine-godot/README.md +++ b/spine-godot/README.md @@ -1,6 +1,6 @@ # spine-godot -The spine-godot runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using [Godot](https://godotengine.org/). spine-godot is based on [spine-cpp](../spine-cpp). +The spine-godot runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using [Godot](https://godotengine.org/) 3.5.x and 4.0.x respectively. spine-godot is based on [spine-cpp](../spine-cpp). # See the [spine-godot documentation](http://esotericsoftware.com/spine-godot) for in-depth information. @@ -18,77 +18,4 @@ For the official legal terms governing the Spine Runtimes, please read the [Spin spine-godot works with data exported from Spine 4.1.xx. -spine-godot supports all Spine features, except two-color tinting and the screen blend mode. - -## Setup - -spine-godot works with the latest stable Godot 3.5 release. It requires compilation of Godot, as spine-godot is implemented as a module. - -> *NOTE:* spine-godot also compiles and works against Godot 4.x. However, we currently can not guarantee stability, as Godot 4.x is still heavily in flux. - -### Pre-built Godot editor and export template binaries - -We provide prebuilt Godot editor and export template binaries for Godot 3.5.1-stable: - -* [Godot Editor Windows](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/3.5.1-stable/godot-editor-windows.zip) -* [Godot Editor Linux](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/3.5.1-stable/godot-editor-linux.zip) -* [Godot Editor macOS](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/3.5.1-stable/godot-editor-macos.zip) -* [Godot export templates for Windows, Linux, macOS, Web, Android, iOS](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/3.5.1-stable/spine-godot-templates-4.1-3.5-stable.tpz) - -We also provide prebuilt Godot editor and export template binaries for the Godot master branch: - -* [Godot 4.0 Editor Windows](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/master/godot-editor-windows.zip) -* [Godot 4.0 Editor Linux](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/master/godot-editor-linux.zip) -* [Godot 4.0 Editor macOS](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/master/godot-editor-macos.zip) -* [Godot 4.0 Export templates for Windows, Linux, macOS, Web, Android, iOS](https://spine-godot.s3.eu-central-1.amazonaws.com/4.1/master/spine-godot-templates-4.1-master.tpz) - -Note that Godot 4.0 is unstable. Use Godot 3.5.1 for production for now. - -### Building the Godot editor and export templates locally - -If you want to build the Godot editor and export templates yourself, either because you want to add custom engine modules or for engine development, you can use the shell scripts in the `spine-godot/build` folder. - -> *NOTE:* Make sure you have all build dependencies installed before attempting this, as per the [official instructions by Godot](https://docs.godotengine.org/en/stable/development/compiling/index.html). - -To build a Godot editor binary, run the following in a Bash shell (use Git Bash on Windows): - -``` -cd spine-godot -./build/setup.sh 3.4.4-stable false -./build/build.sh release_debug -``` - -The first argument to `setup.sh` is the Godot repository branch or commit hash you want to build the Godot editor from. The second argument specifies whether you want to compile the editor for development, which will include support for Live++ on Windows, and disable many modules so compilation is faster. - -The first argument to `build.sh` specifies the optimization level of the resulting binary. Supported values are `debug`, which allows full debugging but may be slow due to missing optimizations, and `release_debug`, which is generally used for release builds of the Godot editor. - -The resulting Godot editor binary can then be found in `spine-godot/godot/bin`. - -To build the export template for a specific platform, run the following in a Bash shell (use Git Bash on Windows): - -``` -cd spine-godot -./build/setup.sh 3.5-stable false -./build/build-templates.sh windows -``` - -The first argument to `setup.sh` is the Godot repository branch or commit hash you want to build the Godot editor from. The second argument must be `false`. - -The first argument to `built-templates.sh` is the platform to compile the template for. Valid values are `windows`, `linux`, `macos`, `web`, `android`, and `ios`. Note that macOS and iOS export templates can only be build on a machine running macOS. See the [official instructions by Godot](https://docs.godotengine.org/en/stable/development/compiling/index.html). - -The resulting Godot export template binary can then be found in `spine-godot/godot/bin`. - -### Building the Godot editor and export templates via GitHub Actions -This repository contains a GitHub workflow in `.github/workflows/spine-godot.yml` and `.github/workflows/spine-godot-v4.yml` that allows building all Godot editor and export template binaries through GitHub actions for Godot 3.5.x and Godot 4.0. This may be simpler than compiling these artifacts locally. To use the GitHub workflow: - -1. Clone this repository -2. Enable GitHub workflows on the cloned repository -3. Manually trigger the `spine-godot` or `spine-godot-v4` workflow. - -The resulting binaries will be attached as artifacts to a successful workflow run. - -## Example -Sample projects for both Godot 3.5.x and Godot 4.x are provided in the `example/` and `example-v4/` folders respectively. They illustrate all spine-godot functionality and can be opened and exported with the pre-built or custom build Godot editor and export template binaries. - - - +spine-godot supports all Spine features, except two-color tinting and the screen blend mode. \ No newline at end of file diff --git a/spine-godot/example-v4/assets/mix-and-match/mix-and-match.png.import b/spine-godot/example-v4/assets/mix-and-match/mix-and-match.png.import index 761e2b425..3d913e7f0 100644 --- a/spine-godot/example-v4/assets/mix-and-match/mix-and-match.png.import +++ b/spine-godot/example-v4/assets/mix-and-match/mix-and-match.png.import @@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/mix-and-match.png-c2d8e28d9f2efc380ff8b95a22d [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 -compress/bptc_ldr=0 compress/normal_map=0 compress/channel_pack=0 mipmaps/generate=false diff --git a/spine-godot/example-v4/assets/raptor/light-sprite.png.import b/spine-godot/example-v4/assets/raptor/light-sprite.png.import index 60c836315..7b8550c98 100644 --- a/spine-godot/example-v4/assets/raptor/light-sprite.png.import +++ b/spine-godot/example-v4/assets/raptor/light-sprite.png.import @@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/light-sprite.png-346e910021b52658f1de723e4c80 [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 -compress/bptc_ldr=0 compress/normal_map=0 compress/channel_pack=0 mipmaps/generate=false diff --git a/spine-godot/example-v4/assets/raptor/n_raptor.png.import b/spine-godot/example-v4/assets/raptor/n_raptor.png.import index 1ac7c0eef..8f302b3bb 100644 --- a/spine-godot/example-v4/assets/raptor/n_raptor.png.import +++ b/spine-godot/example-v4/assets/raptor/n_raptor.png.import @@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/n_raptor.png-d9af68b4a56af2b4319bb485e366dc90 [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 -compress/bptc_ldr=0 compress/normal_map=0 compress/channel_pack=0 mipmaps/generate=false diff --git a/spine-godot/example-v4/assets/raptor/raptor.png.import b/spine-godot/example-v4/assets/raptor/raptor.png.import index cd8ee4280..2326b1429 100644 --- a/spine-godot/example-v4/assets/raptor/raptor.png.import +++ b/spine-godot/example-v4/assets/raptor/raptor.png.import @@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/raptor.png-505be50f63fd1d0fb9175a9efbb9776c.c [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 -compress/bptc_ldr=0 compress/normal_map=0 compress/channel_pack=0 mipmaps/generate=false diff --git a/spine-godot/example-v4/assets/spineboy/spineboy-data-res.tres b/spine-godot/example-v4/assets/spineboy/spineboy-data-res.tres index 4a356d2b6..a1acac5ce 100644 --- a/spine-godot/example-v4/assets/spineboy/spineboy-data-res.tres +++ b/spine-godot/example-v4/assets/spineboy/spineboy-data-res.tres @@ -1,20 +1,20 @@ -[gd_resource type="SpineSkeletonDataResource" load_steps=5 format=2] +[gd_resource type="SpineSkeletonDataResource" load_steps=5 format=3 uid="uid://cb6rn6vonqbx0"] -[ext_resource path="res://assets/spineboy/spineboy.atlas" type="SpineAtlasResource" id=1] -[ext_resource path="res://assets/spineboy/spineboy-pro.spine-json" type="SpineSkeletonFileResource" id=2] +[ext_resource type="SpineAtlasResource" uid="uid://dt2kctrit34y0" path="res://assets/spineboy/spineboy.atlas" id="1"] +[ext_resource type="SpineSkeletonFileResource" uid="uid://bngulrxfavqyn" path="res://assets/spineboy/spineboy-pro.spine-json" id="2"] -[sub_resource type="SpineAnimationMix" id=1] +[sub_resource type="SpineAnimationMix" id="1"] from = "idle" to = "run" mix = 0.2 -[sub_resource type="SpineAnimationMix" id=2] +[sub_resource type="SpineAnimationMix" id="2"] from = "run" to = "idle" mix = 0.2 [resource] -atlas_res = ExtResource( 1 ) -skeleton_file_res = ExtResource( 2 ) +atlas_res = ExtResource("1") +skeleton_file_res = ExtResource("2") default_mix = 0.1 -animation_mixes = [ SubResource( 1 ), SubResource( 2 ) ] +animation_mixes = [SubResource("1"), SubResource("2")] diff --git a/spine-godot/example-v4/assets/spineboy/spineboy.png.import b/spine-godot/example-v4/assets/spineboy/spineboy.png.import index b2d68597d..fd8195661 100644 --- a/spine-godot/example-v4/assets/spineboy/spineboy.png.import +++ b/spine-godot/example-v4/assets/spineboy/spineboy.png.import @@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/spineboy.png-436dbd6da2b707b6828ede17b7871f43 [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 -compress/bptc_ldr=0 compress/normal_map=0 compress/channel_pack=0 mipmaps/generate=false diff --git a/spine-godot/example-v4/examples/01-helloworld/helloworld.tscn b/spine-godot/example-v4/examples/01-helloworld/helloworld.tscn index 6c3e6105e..fe049696c 100644 --- a/spine-godot/example-v4/examples/01-helloworld/helloworld.tscn +++ b/spine-godot/example-v4/examples/01-helloworld/helloworld.tscn @@ -1,18 +1,19 @@ [gd_scene load_steps=3 format=3 uid="uid://d0v5rhv2ysej8"] [ext_resource type="Script" path="res://examples/01-helloworld/spineboy-helloworld.gd" id="1"] -[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spineboy-data-res.tres" id="3"] +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="3"] [node name="Node2D" type="Node2D"] [node name="Spineboy" type="SpineSprite" parent="."] position = Vector2(505, 466) scale = Vector2(0.466832, 0.466832) -skeleton_data_res = ExtResource( "3" ) +skeleton_data_res = ExtResource("3") bones_color = Color(0.968627, 1, 0, 0.501961) paths_color = Color(1, 0.498039, 0, 0.466667) paths_clipping = Color(0.8, 0, 0, 0.5) +preview_skin = "Default" preview_animation = "run" preview_frame = true preview_time = 0.24 -script = ExtResource( "1" ) +script = ExtResource("1") diff --git a/spine-godot/example-v4/examples/02-animation-state-listeners/animation-state-listeners.tscn b/spine-godot/example-v4/examples/02-animation-state-listeners/animation-state-listeners.tscn index 8f0faa9cf..fd698f759 100644 --- a/spine-godot/example-v4/examples/02-animation-state-listeners/animation-state-listeners.tscn +++ b/spine-godot/example-v4/examples/02-animation-state-listeners/animation-state-listeners.tscn @@ -1,19 +1,20 @@ [gd_scene load_steps=4 format=3 uid="uid://c738i3nbdkn0h"] [ext_resource type="Script" path="res://examples/02-animation-state-listeners/animation-state-listeners.gd" id="1"] -[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spineboy-data-res.tres" id="2"] +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="2"] [ext_resource type="AudioStream" uid="uid://can7k84o8svum" path="res://assets/footstep.ogg" id="3"] [node name="Node2D" type="Node2D"] -script = ExtResource( "1" ) +script = ExtResource("1") [node name="Spineboy" type="SpineSprite" parent="."] position = Vector2(473, 487) scale = Vector2(0.575051, 0.575051) -skeleton_data_res = ExtResource( "2" ) +skeleton_data_res = ExtResource("2") +preview_skin = "Default" preview_animation = "-- Empty --" preview_frame = false preview_time = 0.0 [node name="FootstepAudio" type="AudioStreamPlayer" parent="."] -stream = ExtResource( "3" ) +stream = ExtResource("3") diff --git a/spine-godot/example-v4/examples/03-mix-and-match/mix-and-match.tscn b/spine-godot/example-v4/examples/03-mix-and-match/mix-and-match.tscn index 7f14e428e..ae2338c89 100644 --- a/spine-godot/example-v4/examples/03-mix-and-match/mix-and-match.tscn +++ b/spine-godot/example-v4/examples/03-mix-and-match/mix-and-match.tscn @@ -8,8 +8,9 @@ [node name="MixAndMatch" type="SpineSprite" parent="."] position = Vector2(532.982, 480.287) scale = Vector2(0.441932, 0.441932) -skeleton_data_res = ExtResource( "1" ) +skeleton_data_res = ExtResource("1") +preview_skin = "Default" preview_animation = "-- Empty --" preview_frame = false preview_time = 0.0 -script = ExtResource( "2" ) +script = ExtResource("2") diff --git a/spine-godot/example-v4/examples/04-simple-input/simple-input.tscn b/spine-godot/example-v4/examples/04-simple-input/simple-input.tscn index 9028020f7..b818012fe 100644 --- a/spine-godot/example-v4/examples/04-simple-input/simple-input.tscn +++ b/spine-godot/example-v4/examples/04-simple-input/simple-input.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=3 uid="uid://bgdpghp11j3kg"] -[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spineboy-data-res.tres" id="1"] +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="1"] [ext_resource type="Script" path="res://examples/04-simple-input/spineboy-simple-input.gd" id="2"] [node name="Node2D" type="Node2D"] @@ -8,8 +8,9 @@ [node name="Spineboy" type="SpineSprite" parent="."] position = Vector2(501.503, 472.035) scale = Vector2(0.518624, 0.518624) -skeleton_data_res = ExtResource( "1" ) +skeleton_data_res = ExtResource("1") +preview_skin = "Default" preview_animation = "-- Empty --" preview_frame = false preview_time = 0.0 -script = ExtResource( "2" ) +script = ExtResource("2") diff --git a/spine-godot/example-v4/examples/05-mouse-following/mouse-following.tscn b/spine-godot/example-v4/examples/05-mouse-following/mouse-following.tscn index b28780a3a..777aa67b5 100644 --- a/spine-godot/example-v4/examples/05-mouse-following/mouse-following.tscn +++ b/spine-godot/example-v4/examples/05-mouse-following/mouse-following.tscn @@ -1,15 +1,16 @@ [gd_scene load_steps=3 format=3 uid="uid://borp2l17n5xw1"] [ext_resource type="Script" path="res://examples/05-mouse-following/mouse-following.gd" id="1"] -[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spineboy-data-res.tres" id="2"] +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="2"] [node name="Node2D" type="Node2D"] -script = ExtResource( "1" ) +script = ExtResource("1") [node name="Spineboy" type="SpineSprite" parent="."] position = Vector2(481, 457) scale = Vector2(0.5, 0.5) -skeleton_data_res = ExtResource( "2" ) +skeleton_data_res = ExtResource("2") +preview_skin = "Default" preview_animation = "-- Empty --" preview_frame = false preview_time = 0.0 diff --git a/spine-godot/example-v4/examples/06-bone-following/bone-following.tscn b/spine-godot/example-v4/examples/06-bone-following/bone-following.tscn index 5694deae2..21d9ec140 100644 --- a/spine-godot/example-v4/examples/06-bone-following/bone-following.tscn +++ b/spine-godot/example-v4/examples/06-bone-following/bone-following.tscn @@ -1,16 +1,17 @@ [gd_scene load_steps=4 format=3 uid="uid://bir7yvf0qwdge"] -[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spineboy-data-res.tres" id="1"] +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="1"] [ext_resource type="Script" path="res://examples/06-bone-following/bone-following.gd" id="2"] [ext_resource type="Texture2D" uid="uid://8ud5n2ywp5ba" path="res://icon.png" id="3"] [node name="Node2D" type="Node2D"] -script = ExtResource( "2" ) +script = ExtResource("2") [node name="Spineboy" type="SpineSprite" parent="."] position = Vector2(478, 483) scale = Vector2(0.58461, 0.58461) -skeleton_data_res = ExtResource( "1" ) +skeleton_data_res = ExtResource("1") +preview_skin = "Default" preview_animation = "" preview_frame = false preview_time = 0.0 @@ -19,7 +20,8 @@ preview_time = 0.0 show_behind_parent = true position = Vector2(214.298, -162.047) rotation = 0.713316 +scale = Vector2(1, 1) bone_name = "gun-tip" [node name="Sprite" type="Sprite2D" parent="Spineboy/GunTipBone"] -texture = ExtResource( "3" ) +texture = ExtResource("3") diff --git a/spine-godot/example-v4/examples/07-slot-node/slot-node.tscn b/spine-godot/example-v4/examples/07-slot-node/slot-node.tscn index 4eac5e614..e22aac825 100644 --- a/spine-godot/example-v4/examples/07-slot-node/slot-node.tscn +++ b/spine-godot/example-v4/examples/07-slot-node/slot-node.tscn @@ -1,17 +1,18 @@ [gd_scene load_steps=5 format=3 uid="uid://bhht8dees2pyq"] [ext_resource type="Script" path="res://examples/07-slot-node/slot-node.gd" id="1"] -[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spineboy-data-res.tres" id="2"] +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="2"] [ext_resource type="SpineSkeletonDataResource" path="res://assets/raptor/raptor-data.tres" id="3"] [ext_resource type="Texture2D" uid="uid://8ud5n2ywp5ba" path="res://icon.png" id="4"] [node name="Node2D" type="Node2D"] -script = ExtResource( "1" ) +script = ExtResource("1") [node name="Spineboy" type="SpineSprite" parent="."] position = Vector2(474, 506) scale = Vector2(0.560712, 0.560712) -skeleton_data_res = ExtResource( "2" ) +skeleton_data_res = ExtResource("2") +preview_skin = "Default" preview_animation = "-- Empty --" preview_frame = false preview_time = 0.0 @@ -20,12 +21,14 @@ preview_time = 0.0 show_behind_parent = true position = Vector2(40.8753, -276.036) rotation = 0.837234 +scale = Vector2(1, 1) slot_name = "gun" [node name="Raptor" type="SpineSprite" parent="Spineboy/GunSlot"] position = Vector2(84.6909, -67.9174) scale = Vector2(0.193472, 0.193472) -skeleton_data_res = ExtResource( "3" ) +skeleton_data_res = ExtResource("3") +preview_skin = "Default" preview_animation = "-- Empty --" preview_frame = false preview_time = 0.0 @@ -34,23 +37,26 @@ preview_time = 0.0 show_behind_parent = true position = Vector2(-23.4598, -402.301) rotation = -1.71793 +scale = Vector2(1, 1) slot_name = "eye" [node name="Sprite" type="Sprite2D" parent="Spineboy/EyeSlot"] position = Vector2(84.4734, 43.4469) rotation = 1.66344 -texture = ExtResource( "4" ) +texture = ExtResource("4") [node name="FrontFistSlot" type="SpineSlotNode" parent="Spineboy"] show_behind_parent = true position = Vector2(-29.0298, -241.577) rotation = 0.995187 +scale = Vector2(1, 1) slot_name = "front-fist" [node name="TinySpineboy" type="SpineSprite" parent="Spineboy/FrontFistSlot"] position = Vector2(-2.64624, -10.8111) scale = Vector2(0.193389, 0.193389) -skeleton_data_res = ExtResource( "2" ) +skeleton_data_res = ExtResource("2") +preview_skin = "Default" preview_animation = "-- Empty --" preview_frame = false preview_time = 0.0 diff --git a/spine-godot/example-v4/examples/08-animation-player/animation-player.tscn b/spine-godot/example-v4/examples/08-animation-player/animation-player.tscn index d0cf5249e..548ffc503 100644 --- a/spine-godot/example-v4/examples/08-animation-player/animation-player.tscn +++ b/spine-godot/example-v4/examples/08-animation-player/animation-player.tscn @@ -1,10 +1,10 @@ [gd_scene load_steps=68 format=3 uid="uid://dmddd1ll1y0bm"] -[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spineboy-data-res.tres" id="1"] +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="1"] [ext_resource type="Script" path="res://examples/08-animation-player/animation-player.gd" id="2"] [ext_resource type="SpineSkeletonDataResource" path="res://assets/raptor/raptor-data.tres" id="3"] -[sub_resource type="Animation" id="Animation_t6m4d"] +[sub_resource type="Animation" id="Animation_u8r30"] resource_name = "aim_looped" length = 0.5 tracks/0/type = "value" @@ -32,7 +32,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_njcku"] +[sub_resource type="Animation" id="Animation_pcd73"] resource_name = "aim" length = 0.5 tracks/0/type = "value" @@ -60,7 +60,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_uj85l"] +[sub_resource type="Animation" id="Animation_anfvj"] resource_name = "death_looped" length = 4.9333 tracks/0/type = "value" @@ -88,7 +88,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_irg42"] +[sub_resource type="Animation" id="Animation_se2p7"] resource_name = "death" length = 4.9333 tracks/0/type = "value" @@ -116,7 +116,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_u0h4m"] +[sub_resource type="Animation" id="Animation_g26yh"] resource_name = "hoverboard_looped" tracks/0/type = "value" tracks/0/imported = false @@ -143,7 +143,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_ksgd8"] +[sub_resource type="Animation" id="Animation_dx8qa"] resource_name = "hoverboard" tracks/0/type = "value" tracks/0/imported = false @@ -170,7 +170,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_onrph"] +[sub_resource type="Animation" id="Animation_vy3tq"] resource_name = "idle_looped" length = 1.6667 tracks/0/type = "value" @@ -198,7 +198,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_uq46m"] +[sub_resource type="Animation" id="Animation_urltx"] resource_name = "idle" length = 1.6667 tracks/0/type = "value" @@ -226,7 +226,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_vm3do"] +[sub_resource type="Animation" id="Animation_7xfju"] resource_name = "idle-turn_looped" length = 0.2667 tracks/0/type = "value" @@ -254,7 +254,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_tlrtt"] +[sub_resource type="Animation" id="Animation_bdf5o"] resource_name = "idle-turn" length = 0.2667 tracks/0/type = "value" @@ -282,7 +282,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_8gf4p"] +[sub_resource type="Animation" id="Animation_2orbb"] resource_name = "jump_looped" length = 1.3333 tracks/0/type = "value" @@ -310,7 +310,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_e3mt7"] +[sub_resource type="Animation" id="Animation_3iuuy"] resource_name = "jump" length = 1.3333 tracks/0/type = "value" @@ -338,7 +338,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_q7d0d"] +[sub_resource type="Animation" id="Animation_imcsw"] resource_name = "portal_looped" length = 3.1667 tracks/0/type = "value" @@ -366,7 +366,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_hu1qx"] +[sub_resource type="Animation" id="Animation_k3ycw"] resource_name = "portal" length = 3.1667 tracks/0/type = "value" @@ -394,7 +394,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_4qvwn"] +[sub_resource type="Animation" id="Animation_uxgvr"] resource_name = "run_looped" length = 0.6667 tracks/0/type = "value" @@ -422,7 +422,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_rcbj7"] +[sub_resource type="Animation" id="Animation_4rtac"] resource_name = "run" length = 0.6667 tracks/0/type = "value" @@ -450,7 +450,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_xaopv"] +[sub_resource type="Animation" id="Animation_jonld"] resource_name = "run-to-idle_looped" length = 0.2667 tracks/0/type = "value" @@ -478,7 +478,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_hhaj8"] +[sub_resource type="Animation" id="Animation_pc8cu"] resource_name = "run-to-idle" length = 0.2667 tracks/0/type = "value" @@ -506,7 +506,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_2epiy"] +[sub_resource type="Animation" id="Animation_je08p"] resource_name = "shoot_looped" length = 0.6333 tracks/0/type = "value" @@ -534,7 +534,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_xvf75"] +[sub_resource type="Animation" id="Animation_o7hy8"] resource_name = "shoot" length = 0.6333 tracks/0/type = "value" @@ -562,7 +562,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_ailgk"] +[sub_resource type="Animation" id="Animation_rfed2"] resource_name = "walk_looped" tracks/0/type = "value" tracks/0/imported = false @@ -589,7 +589,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_1ifml"] +[sub_resource type="Animation" id="Animation_6jfr5"] resource_name = "walk" tracks/0/type = "value" tracks/0/imported = false @@ -616,7 +616,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_13jvi"] +[sub_resource type="Animation" id="Animation_871iw"] resource_name = "RESET" length = 0.5 tracks/0/type = "value" @@ -644,35 +644,35 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="AnimationLibrary" id="AnimationLibrary_3juul"] +[sub_resource type="AnimationLibrary" id="AnimationLibrary_v5cr7"] _data = { -"-- Empty --": SubResource( "Animation_13jvi" ), -"RESET": SubResource( "Animation_13jvi" ), -"aim": SubResource( "Animation_njcku" ), -"aim_looped": SubResource( "Animation_t6m4d" ), -"death": SubResource( "Animation_irg42" ), -"death_looped": SubResource( "Animation_uj85l" ), -"hoverboard": SubResource( "Animation_ksgd8" ), -"hoverboard_looped": SubResource( "Animation_u0h4m" ), -"idle": SubResource( "Animation_uq46m" ), -"idle-turn": SubResource( "Animation_tlrtt" ), -"idle-turn_looped": SubResource( "Animation_vm3do" ), -"idle_looped": SubResource( "Animation_onrph" ), -"jump": SubResource( "Animation_e3mt7" ), -"jump_looped": SubResource( "Animation_8gf4p" ), -"portal": SubResource( "Animation_hu1qx" ), -"portal_looped": SubResource( "Animation_q7d0d" ), -"run": SubResource( "Animation_rcbj7" ), -"run-to-idle": SubResource( "Animation_hhaj8" ), -"run-to-idle_looped": SubResource( "Animation_xaopv" ), -"run_looped": SubResource( "Animation_4qvwn" ), -"shoot": SubResource( "Animation_xvf75" ), -"shoot_looped": SubResource( "Animation_2epiy" ), -"walk": SubResource( "Animation_1ifml" ), -"walk_looped": SubResource( "Animation_ailgk" ) +"-- Empty --": SubResource("Animation_871iw"), +"RESET": SubResource("Animation_871iw"), +"aim": SubResource("Animation_pcd73"), +"aim_looped": SubResource("Animation_u8r30"), +"death": SubResource("Animation_se2p7"), +"death_looped": SubResource("Animation_anfvj"), +"hoverboard": SubResource("Animation_dx8qa"), +"hoverboard_looped": SubResource("Animation_g26yh"), +"idle": SubResource("Animation_urltx"), +"idle-turn": SubResource("Animation_bdf5o"), +"idle-turn_looped": SubResource("Animation_7xfju"), +"idle_looped": SubResource("Animation_vy3tq"), +"jump": SubResource("Animation_3iuuy"), +"jump_looped": SubResource("Animation_2orbb"), +"portal": SubResource("Animation_k3ycw"), +"portal_looped": SubResource("Animation_imcsw"), +"run": SubResource("Animation_4rtac"), +"run-to-idle": SubResource("Animation_pc8cu"), +"run-to-idle_looped": SubResource("Animation_jonld"), +"run_looped": SubResource("Animation_uxgvr"), +"shoot": SubResource("Animation_o7hy8"), +"shoot_looped": SubResource("Animation_je08p"), +"walk": SubResource("Animation_6jfr5"), +"walk_looped": SubResource("Animation_rfed2") } -[sub_resource type="Animation" id="Animation_43jug"] +[sub_resource type="Animation" id="Animation_bqfyv"] resource_name = "aim_looped" length = 0.5 tracks/0/type = "value" @@ -700,7 +700,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_npdlv"] +[sub_resource type="Animation" id="Animation_wa8y8"] resource_name = "aim" length = 0.5 tracks/0/type = "value" @@ -728,7 +728,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_v5dry"] +[sub_resource type="Animation" id="Animation_lqflw"] resource_name = "death_looped" length = 4.9333 tracks/0/type = "value" @@ -756,7 +756,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_wthcu"] +[sub_resource type="Animation" id="Animation_mybt4"] resource_name = "death" length = 4.9333 tracks/0/type = "value" @@ -784,7 +784,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_0t4px"] +[sub_resource type="Animation" id="Animation_lgcur"] resource_name = "hoverboard_looped" tracks/0/type = "value" tracks/0/imported = false @@ -811,7 +811,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_cflga"] +[sub_resource type="Animation" id="Animation_qg507"] resource_name = "hoverboard" tracks/0/type = "value" tracks/0/imported = false @@ -838,7 +838,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_4l5af"] +[sub_resource type="Animation" id="Animation_gro4g"] resource_name = "idle_looped" length = 1.6667 tracks/0/type = "value" @@ -866,7 +866,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_3kd2q"] +[sub_resource type="Animation" id="Animation_r4l52"] resource_name = "idle" length = 1.6667 tracks/0/type = "value" @@ -894,7 +894,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_pcovu"] +[sub_resource type="Animation" id="Animation_dxou3"] resource_name = "idle-turn_looped" length = 0.2667 tracks/0/type = "value" @@ -922,7 +922,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_ji8c3"] +[sub_resource type="Animation" id="Animation_mtm0j"] resource_name = "idle-turn" length = 0.2667 tracks/0/type = "value" @@ -950,7 +950,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_hxqi7"] +[sub_resource type="Animation" id="Animation_57vbo"] resource_name = "jump_looped" length = 1.3333 tracks/0/type = "value" @@ -978,7 +978,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_h822y"] +[sub_resource type="Animation" id="Animation_jaxeo"] resource_name = "jump" length = 1.3333 tracks/0/type = "value" @@ -1006,7 +1006,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_8f1h5"] +[sub_resource type="Animation" id="Animation_p8eks"] resource_name = "portal_looped" length = 3.1667 tracks/0/type = "value" @@ -1034,7 +1034,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_i0wgj"] +[sub_resource type="Animation" id="Animation_gn2h2"] resource_name = "portal" length = 3.1667 tracks/0/type = "value" @@ -1062,7 +1062,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_0q41s"] +[sub_resource type="Animation" id="Animation_qyc51"] resource_name = "run_looped" length = 0.6667 tracks/0/type = "value" @@ -1090,7 +1090,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_og3lw"] +[sub_resource type="Animation" id="Animation_wimlj"] resource_name = "run" length = 0.6667 tracks/0/type = "value" @@ -1118,7 +1118,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_q7ndl"] +[sub_resource type="Animation" id="Animation_xpssf"] resource_name = "run-to-idle_looped" length = 0.2667 tracks/0/type = "value" @@ -1146,7 +1146,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_nxlcc"] +[sub_resource type="Animation" id="Animation_cv1an"] resource_name = "run-to-idle" length = 0.2667 tracks/0/type = "value" @@ -1174,7 +1174,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_riqly"] +[sub_resource type="Animation" id="Animation_y0ah7"] resource_name = "shoot_looped" length = 0.6333 tracks/0/type = "value" @@ -1202,7 +1202,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_e7tup"] +[sub_resource type="Animation" id="Animation_6lofo"] resource_name = "shoot" length = 0.6333 tracks/0/type = "value" @@ -1230,7 +1230,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_5q6ru"] +[sub_resource type="Animation" id="Animation_gpmbs"] resource_name = "walk_looped" tracks/0/type = "value" tracks/0/imported = false @@ -1257,7 +1257,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_rbpim"] +[sub_resource type="Animation" id="Animation_8kta1"] resource_name = "walk" tracks/0/type = "value" tracks/0/imported = false @@ -1284,7 +1284,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_n4owa"] +[sub_resource type="Animation" id="Animation_arooe"] resource_name = "RESET" length = 0.5 tracks/0/type = "value" @@ -1312,35 +1312,35 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="AnimationLibrary" id="AnimationLibrary_weodw"] +[sub_resource type="AnimationLibrary" id="AnimationLibrary_fa8i5"] _data = { -"-- Empty --": SubResource( "Animation_n4owa" ), -"RESET": SubResource( "Animation_n4owa" ), -"aim": SubResource( "Animation_npdlv" ), -"aim_looped": SubResource( "Animation_43jug" ), -"death": SubResource( "Animation_wthcu" ), -"death_looped": SubResource( "Animation_v5dry" ), -"hoverboard": SubResource( "Animation_cflga" ), -"hoverboard_looped": SubResource( "Animation_0t4px" ), -"idle": SubResource( "Animation_3kd2q" ), -"idle-turn": SubResource( "Animation_ji8c3" ), -"idle-turn_looped": SubResource( "Animation_pcovu" ), -"idle_looped": SubResource( "Animation_4l5af" ), -"jump": SubResource( "Animation_h822y" ), -"jump_looped": SubResource( "Animation_hxqi7" ), -"portal": SubResource( "Animation_i0wgj" ), -"portal_looped": SubResource( "Animation_8f1h5" ), -"run": SubResource( "Animation_og3lw" ), -"run-to-idle": SubResource( "Animation_nxlcc" ), -"run-to-idle_looped": SubResource( "Animation_q7ndl" ), -"run_looped": SubResource( "Animation_0q41s" ), -"shoot": SubResource( "Animation_e7tup" ), -"shoot_looped": SubResource( "Animation_riqly" ), -"walk": SubResource( "Animation_rbpim" ), -"walk_looped": SubResource( "Animation_5q6ru" ) +"-- Empty --": SubResource("Animation_arooe"), +"RESET": SubResource("Animation_arooe"), +"aim": SubResource("Animation_wa8y8"), +"aim_looped": SubResource("Animation_bqfyv"), +"death": SubResource("Animation_mybt4"), +"death_looped": SubResource("Animation_lqflw"), +"hoverboard": SubResource("Animation_qg507"), +"hoverboard_looped": SubResource("Animation_lgcur"), +"idle": SubResource("Animation_r4l52"), +"idle-turn": SubResource("Animation_mtm0j"), +"idle-turn_looped": SubResource("Animation_dxou3"), +"idle_looped": SubResource("Animation_gro4g"), +"jump": SubResource("Animation_jaxeo"), +"jump_looped": SubResource("Animation_57vbo"), +"portal": SubResource("Animation_gn2h2"), +"portal_looped": SubResource("Animation_p8eks"), +"run": SubResource("Animation_wimlj"), +"run-to-idle": SubResource("Animation_cv1an"), +"run-to-idle_looped": SubResource("Animation_xpssf"), +"run_looped": SubResource("Animation_qyc51"), +"shoot": SubResource("Animation_6lofo"), +"shoot_looped": SubResource("Animation_y0ah7"), +"walk": SubResource("Animation_8kta1"), +"walk_looped": SubResource("Animation_gpmbs") } -[sub_resource type="Animation" id="Animation_g0fba"] +[sub_resource type="Animation" id="Animation_hsvha"] resource_name = "gun-grab_looped" length = 0.666667 tracks/0/type = "value" @@ -1368,7 +1368,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_tnmwm"] +[sub_resource type="Animation" id="Animation_5dt73"] resource_name = "gun-grab" length = 0.666667 tracks/0/type = "value" @@ -1396,7 +1396,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_scefx"] +[sub_resource type="Animation" id="Animation_hsxuq"] resource_name = "gun-holster_looped" length = 0.666667 tracks/0/type = "value" @@ -1424,7 +1424,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_6lq4v"] +[sub_resource type="Animation" id="Animation_5hjd5"] resource_name = "gun-holster" length = 0.666667 tracks/0/type = "value" @@ -1452,7 +1452,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_b7ns0"] +[sub_resource type="Animation" id="Animation_304i6"] resource_name = "jump_looped" length = 1.53333 tracks/0/type = "value" @@ -1480,7 +1480,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_l4kgf"] +[sub_resource type="Animation" id="Animation_rn17q"] resource_name = "jump" length = 1.53333 tracks/0/type = "value" @@ -1508,7 +1508,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_jt8r5"] +[sub_resource type="Animation" id="Animation_qxmqu"] resource_name = "roar_looped" length = 2.13333 tracks/0/type = "value" @@ -1536,7 +1536,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_wlr0r"] +[sub_resource type="Animation" id="Animation_awgy1"] resource_name = "roar" length = 2.13333 tracks/0/type = "value" @@ -1564,7 +1564,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_0e04p"] +[sub_resource type="Animation" id="Animation_d43gs"] resource_name = "walk_looped" length = 1.26667 tracks/0/type = "value" @@ -1592,7 +1592,7 @@ tracks/1/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_ysb1x"] +[sub_resource type="Animation" id="Animation_g6qku"] resource_name = "walk" length = 1.26667 tracks/0/type = "value" @@ -1620,7 +1620,7 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="Animation" id="Animation_j5g3u"] +[sub_resource type="Animation" id="Animation_73tbf"] resource_name = "RESET" length = 0.5 tracks/0/type = "value" @@ -1648,20 +1648,20 @@ tracks/1/keys = { "values": [false] } -[sub_resource type="AnimationLibrary" id="AnimationLibrary_nir4m"] +[sub_resource type="AnimationLibrary" id="AnimationLibrary_to4p6"] _data = { -"-- Empty --": SubResource( "Animation_j5g3u" ), -"RESET": SubResource( "Animation_j5g3u" ), -"gun-grab": SubResource( "Animation_tnmwm" ), -"gun-grab_looped": SubResource( "Animation_g0fba" ), -"gun-holster": SubResource( "Animation_6lq4v" ), -"gun-holster_looped": SubResource( "Animation_scefx" ), -"jump": SubResource( "Animation_l4kgf" ), -"jump_looped": SubResource( "Animation_b7ns0" ), -"roar": SubResource( "Animation_wlr0r" ), -"roar_looped": SubResource( "Animation_jt8r5" ), -"walk": SubResource( "Animation_ysb1x" ), -"walk_looped": SubResource( "Animation_0e04p" ) +"-- Empty --": SubResource("Animation_73tbf"), +"RESET": SubResource("Animation_73tbf"), +"gun-grab": SubResource("Animation_5dt73"), +"gun-grab_looped": SubResource("Animation_hsvha"), +"gun-holster": SubResource("Animation_5hjd5"), +"gun-holster_looped": SubResource("Animation_hsxuq"), +"jump": SubResource("Animation_rn17q"), +"jump_looped": SubResource("Animation_304i6"), +"roar": SubResource("Animation_awgy1"), +"roar_looped": SubResource("Animation_qxmqu"), +"walk": SubResource("Animation_g6qku"), +"walk_looped": SubResource("Animation_d43gs") } [sub_resource type="Animation" id="25"] @@ -1885,18 +1885,19 @@ tracks/3/keys = { [sub_resource type="AnimationLibrary" id="AnimationLibrary_3lgey"] _data = { -"RESET": SubResource( "25" ), -"cutscene": SubResource( "1" ), -"slow-moonwalk": SubResource( "83" ) +"RESET": SubResource("25"), +"cutscene": SubResource("1"), +"slow-moonwalk": SubResource("83") } [node name="Node2D2" type="Node2D"] -script = ExtResource( "2" ) +script = ExtResource("2") [node name="Spineboy" type="SpineSprite" parent="."] position = Vector2(72.0001, 520) scale = Vector2(0.323942, 0.323942) -skeleton_data_res = ExtResource( "1" ) +skeleton_data_res = ExtResource("1") +preview_skin = "Default" preview_animation = "-- Empty --" preview_frame = false preview_time = 0.0 @@ -1907,7 +1908,7 @@ debug = true [node name="Spineboy Track 0" type="AnimationPlayer" parent="Spineboy/SpineAnimationTrack"] libraries = { -"": SubResource( "AnimationLibrary_3juul" ) +"": SubResource("AnimationLibrary_v5cr7") } [node name="SpineAnimationTrack2" type="SpineAnimationTrack" parent="Spineboy"] @@ -1917,13 +1918,14 @@ debug = true [node name="Spineboy Track 1" type="AnimationPlayer" parent="Spineboy/SpineAnimationTrack2"] libraries = { -"": SubResource( "AnimationLibrary_weodw" ) +"": SubResource("AnimationLibrary_fa8i5") } [node name="Raptor" type="SpineSprite" parent="."] position = Vector2(1284, 520) scale = Vector2(-0.328761, 0.328761) -skeleton_data_res = ExtResource( "3" ) +skeleton_data_res = ExtResource("3") +preview_skin = "Default" preview_animation = "-- Empty --" preview_frame = false preview_time = 0.0 @@ -1933,10 +1935,10 @@ track_index = 0 [node name="Raptor Track 0" type="AnimationPlayer" parent="Raptor/SpineAnimationTrack"] libraries = { -"": SubResource( "AnimationLibrary_nir4m" ) +"": SubResource("AnimationLibrary_to4p6") } [node name="AnimationPlayer" type="AnimationPlayer" parent="."] libraries = { -"": SubResource( "AnimationLibrary_3lgey" ) +"": SubResource("AnimationLibrary_3lgey") } diff --git a/spine-godot/example-v4/examples/09-custom-material/custom-material.tscn b/spine-godot/example-v4/examples/09-custom-material/custom-material.tscn index 5ef3dc06d..4ca51ec15 100644 --- a/spine-godot/example-v4/examples/09-custom-material/custom-material.tscn +++ b/spine-godot/example-v4/examples/09-custom-material/custom-material.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=6 format=3 uid="uid://b4p2vn7bwm52a"] -[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spineboy-data-res.tres" id="1"] +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="1"] [sub_resource type="Shader" id="1"] code = "shader_type canvas_item; @@ -11,7 +11,7 @@ void fragment() { }" [sub_resource type="ShaderMaterial" id="2"] -shader = SubResource( "1" ) +shader = SubResource("1") [sub_resource type="Shader" id="3"] code = "shader_type canvas_item; @@ -22,15 +22,16 @@ void fragment() { }" [sub_resource type="ShaderMaterial" id="4"] -shader = SubResource( "3" ) +shader = SubResource("3") [node name="Node2D" type="Node2D"] [node name="SpineSprite" type="SpineSprite" parent="."] position = Vector2(501, 507) scale = Vector2(0.546374, 0.546373) -skeleton_data_res = ExtResource( "1" ) -normal_material = SubResource( "2" ) +skeleton_data_res = ExtResource("1") +normal_material = SubResource("2") +preview_skin = "Default" preview_animation = "-- Empty --" preview_frame = false preview_time = 0.0 @@ -39,5 +40,6 @@ preview_time = 0.0 show_behind_parent = true position = Vector2(40.8753, -276.036) rotation = 0.837234 +scale = Vector2(1, 1) slot_name = "gun" -normal_material = SubResource( "4" ) +normal_material = SubResource("4") diff --git a/spine-godot/example-v4/examples/10-2d-lighting/2d-lighting.tscn b/spine-godot/example-v4/examples/10-2d-lighting/2d-lighting.tscn index 296b04007..16e7225a2 100644 --- a/spine-godot/example-v4/examples/10-2d-lighting/2d-lighting.tscn +++ b/spine-godot/example-v4/examples/10-2d-lighting/2d-lighting.tscn @@ -5,21 +5,23 @@ [ext_resource type="Script" path="res://examples/10-2d-lighting/2d-lighting.gd" id="3"] [node name="Node2D" type="Node2D"] -script = ExtResource( "3" ) +script = ExtResource("3") [node name="SpineSprite" type="SpineSprite" parent="."] position = Vector2(576, 506) scale = Vector2(0.458967, 0.458967) -skeleton_data_res = ExtResource( "1" ) +skeleton_data_res = ExtResource("1") +preview_skin = "Default" preview_animation = "-- Empty --" preview_frame = false preview_time = 0.0 [node name="Light2D" type="PointLight2D" parent="."] -position = Vector2(822, 270) +position = Vector2(691, 283) scale = Vector2(1.51563, 1.51563) color = Color(1, 0.0117647, 0.0117647, 1) -texture = ExtResource( "2" ) +texture = ExtResource("2") +height = 100.0 [node name="CanvasModulate" type="CanvasModulate" parent="."] -color = Color(0.145098, 0.0980392, 0.0980392, 1) +color = Color(0.223529, 0.160784, 0.160784, 1) diff --git a/spine-godot/example-v4/examples/11-bone-node/bone-node.gd b/spine-godot/example-v4/examples/11-bone-node/bone-node.gd index a5d721a3a..6d1e06173 100644 --- a/spine-godot/example-v4/examples/11-bone-node/bone-node.gd +++ b/spine-godot/example-v4/examples/11-bone-node/bone-node.gd @@ -2,18 +2,25 @@ extends Node2D @onready var spineboy = $SpineSprite @onready var center_bone = $SpineSprite/HoverboardCenterBone -@onready var center_ray = $SpineSprite/HoverboardCenterBone/RayCast2D +@onready var center_ray = $SpineSprite/HoverboardCenterBone/CenterRay @onready var target_bone = $SpineSprite/HoverboardTargetBone -@onready var target_ray = $SpineSprite/HoverboardTargetBone/RayCast2D +@onready var target_ray = $SpineSprite/HoverboardTargetBone/TargetRay +@onready var hip_bone = $SpineSprite/HipBone +var center_hip_distance = 0 func _ready(): spineboy.get_animation_state().set_animation("hoverboard", true, 0) + spineboy.update_skeleton(0); + center_hip_distance = hip_bone.global_position.y - center_bone.global_position.y func _physics_process(delta): if target_ray.is_colliding(): - target_bone.global_position.y = target_ray.get_collision_point().y - 50 - if center_ray.is_colliding(): - center_bone.global_position.y = center_ray.get_collision_point().y - 50 + target_bone.global_position.y = target_ray.get_collision_point().y - 30 + if center_ray.is_colliding(): + center_bone.global_position.y = center_ray.get_collision_point().y - 30 + + if abs(hip_bone.global_position.y - center_bone.global_position.y) - abs(center_hip_distance) < 20: + hip_bone.global_position.y = center_bone.global_position.y + center_hip_distance + spineboy.global_position.x += delta * 150; - spineboy.global_position.y = center_bone.global_position.y diff --git a/spine-godot/example-v4/examples/11-bone-node/bone-node.tscn b/spine-godot/example-v4/examples/11-bone-node/bone-node.tscn index 8a7a337d1..695f73b0b 100644 --- a/spine-godot/example-v4/examples/11-bone-node/bone-node.tscn +++ b/spine-godot/example-v4/examples/11-bone-node/bone-node.tscn @@ -1,39 +1,45 @@ [gd_scene load_steps=3 format=3 uid="uid://chrw4i0nksphn"] [ext_resource type="Script" path="res://examples/11-bone-node/bone-node.gd" id="1"] -[ext_resource type="SpineSkeletonDataResource" path="res://assets/spineboy/spineboy-data-res.tres" id="2"] +[ext_resource type="SpineSkeletonDataResource" uid="uid://cb6rn6vonqbx0" path="res://assets/spineboy/spineboy-data-res.tres" id="2"] [node name="Node2D" type="Node2D"] -script = ExtResource( "1" ) +script = ExtResource("1") [node name="SpineSprite" type="SpineSprite" parent="."] -position = Vector2(8, 553) +position = Vector2(13, 569) scale = Vector2(0.278096, 0.278096) -skeleton_data_res = ExtResource( "2" ) +skeleton_data_res = ExtResource("2") update_mode = 1 +preview_skin = "Default" preview_animation = "hoverboard" preview_frame = true preview_time = 0.0 [node name="HoverboardCenterBone" type="SpineBoneNode" parent="SpineSprite"] show_behind_parent = true +position = Vector2(-10.1996, -68.2213) +rotation = -0.00403465 bone_name = "hoverboard-controller" bone_mode = 1 -[node name="RayCast2D" type="RayCast2D" parent="SpineSprite/HoverboardCenterBone"] +[node name="CenterRay" type="RayCast2D" parent="SpineSprite/HoverboardCenterBone"] +target_position = Vector2(0, 10000) [node name="HoverboardTargetBone" type="SpineBoneNode" parent="SpineSprite"] show_behind_parent = true -position = Vector2(262.499, 0) +position = Vector2(258.903, -71.9176) rotation = -0.000872665 bone_name = "board-ik" bone_mode = 1 -[node name="RayCast2D" type="RayCast2D" parent="SpineSprite/HoverboardTargetBone"] +[node name="TargetRay" type="RayCast2D" parent="SpineSprite/HoverboardTargetBone"] +position = Vector2(-3.59872, 3.59277) +target_position = Vector2(0, 10000) [node name="HipBone" type="SpineBoneNode" parent="SpineSprite"] show_behind_parent = true -position = Vector2(0, -169.006) +position = Vector2(-53.7338, -279.363) rotation = -0.000872665 bone_name = "hip" bone_mode = 1 diff --git a/spine-godot/example-v4/icon.png.import b/spine-godot/example-v4/icon.png.import index 7bdb198b7..aab28cada 100644 --- a/spine-godot/example-v4/icon.png.import +++ b/spine-godot/example-v4/icon.png.import @@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.cte [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 -compress/bptc_ldr=0 compress/normal_map=0 compress/channel_pack=0 mipmaps/generate=false diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Common-URP.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Common-URP.hlsl index f338e29c1..d40855e2c 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Common-URP.hlsl +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Common-URP.hlsl @@ -1,6 +1,16 @@ #ifndef SPINE_COMMON_URP_INCLUDED #define SPINE_COMMON_URP_INCLUDED +#ifdef USE_FORWARD_PLUS +#define IS_URP_14_OR_NEWER 1 +#else +#define IS_URP_14_OR_NEWER 0 +#endif + +#if defined(_WRITE_RENDERING_LAYERS) && IS_URP_14_OR_NEWER +#define USE_WRITE_RENDERING_LAYERS +#endif + #ifdef _LIGHT_LAYERS uint GetMeshRenderingLayerBackwardsCompatible() { diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-SkeletonLit-ForwardPass-URP.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-SkeletonLit-ForwardPass-URP.hlsl index 98582e4ee..e40d392b2 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-SkeletonLit-ForwardPass-URP.hlsl +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-SkeletonLit-ForwardPass-URP.hlsl @@ -152,7 +152,7 @@ VertexOutput vert(appdata v) { } half4 frag(VertexOutput i -#ifdef _WRITE_RENDERING_LAYERS +#ifdef USE_WRITE_RENDERING_LAYERS , out float4 outRenderingLayers : SV_Target1 #endif ) : SV_Target0 diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-ForwardPass-URP.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-ForwardPass-URP.hlsl index 146be9be8..303fcd1fd 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-ForwardPass-URP.hlsl +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-ForwardPass-URP.hlsl @@ -285,7 +285,7 @@ VertexOutputLWRP ForwardPassVertexSprite(VertexInput input) } half4 ForwardPassFragmentSprite(VertexOutputLWRP input -#ifdef _WRITE_RENDERING_LAYERS +#ifdef USE_WRITE_RENDERING_LAYERS , out float4 outRenderingLayers : SV_Target1 #endif ) : SV_Target0 @@ -302,7 +302,7 @@ half4 ForwardPassFragmentSprite(VertexOutputLWRP input #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) inputData.shadowCoord = input.shadowCoord; #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) - inputData.shadowCoord = TransformWorldToShadowCoord(input.positionWS); + inputData.shadowCoord = TransformWorldToShadowCoord(input.positionWS.xyz); #elif defined(_MAIN_LIGHT_SHADOWS) inputData.shadowCoord = input.shadowCoord; #else @@ -352,7 +352,7 @@ half4 ForwardPassFragmentSprite(VertexOutputLWRP input COLORISE(pixel) APPLY_FOG_LWRP(pixel, input.fogFactorAndVertexLight.x) -#ifdef _WRITE_RENDERING_LAYERS +#ifdef USE_WRITE_RENDERING_LAYERS uint renderingLayers = GetMeshRenderingLayerBackwardsCompatible(); outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); #endif diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/package.json b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/package.json index 38dc2f4e2..b9cedf465 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/package.json +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.urp-shaders", "displayName": "Spine Universal RP Shaders", "description": "This plugin provides universal render pipeline (URP) shaders for the spine-unity runtime.\n\nPrerequisites:\nIt requires a working installation of the spine-unity runtime, version 4.1.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)", - "version": "4.1.9", + "version": "4.1.10", "unity": "2019.3", "author": { "name": "Esoteric Software",