diff --git a/assets/first_party/collectibles/shadow.png b/assets/first_party/collectibles/shadow.png new file mode 100644 index 000000000..1c1519880 --- /dev/null +++ b/assets/first_party/collectibles/shadow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a4b4b75a28d5bc5b92908a3ceb0e4b3d7abb4e73953bff55bbbb6bdba68804d +size 412 diff --git a/assets/first_party/collectibles/shadow.png.import b/assets/first_party/collectibles/shadow.png.import new file mode 100644 index 000000000..5ff4fe016 --- /dev/null +++ b/assets/first_party/collectibles/shadow.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://citmjvrcgwqry" +path="res://.godot/imported/shadow.png-4d62fcb07299652455dbb4fb900860e2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/first_party/collectibles/shadow.png" +dest_files=["res://.godot/imported/shadow.png-4d62fcb07299652455dbb4fb900860e2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/first_party/collectibles/world_imagination.png b/assets/first_party/collectibles/world_imagination.png index 82ad1c5a1..4ec0ad582 100644 --- a/assets/first_party/collectibles/world_imagination.png +++ b/assets/first_party/collectibles/world_imagination.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a377a17cf72ec91033cbadbd96f68ff8c854309d6ae0b240ae1f0bb1a28440b -size 3879 +oid sha256:2639b04a75ad2a74d597cf6a6b4dbf60caca528b5108707e618b82841c978bce +size 3378 diff --git a/assets/first_party/collectibles/world_memory.png b/assets/first_party/collectibles/world_memory.png index c23ca3020..13f2805cf 100644 --- a/assets/first_party/collectibles/world_memory.png +++ b/assets/first_party/collectibles/world_memory.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:21fca4f1826b9c99f395e3dbd4b6ca8d55551422148c0cb1b404be14e22f0f29 -size 3790 +oid sha256:b78001c60ee65737876f923fbef6454a763009ebe7f45e0a8e6f9af271d9aebd +size 3335 diff --git a/assets/first_party/collectibles/world_spirit.png b/assets/first_party/collectibles/world_spirit.png index cf3faa2b9..ca3e5a642 100644 --- a/assets/first_party/collectibles/world_spirit.png +++ b/assets/first_party/collectibles/world_spirit.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:03889ee0568db410e09b20e5fa2eeb72cb6ed16a6704d25d11b4b757f406e12f -size 3668 +oid sha256:e41872f5f08d350f24436bdb3c12589993886ff43db365b9e3ad6879cc8aa549 +size 3164 diff --git a/assets/first_party/collectibles/world_threads.aseprite b/assets/first_party/collectibles/world_threads.aseprite new file mode 100644 index 000000000..7fb86ba93 --- /dev/null +++ b/assets/first_party/collectibles/world_threads.aseprite @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c080add19845342f6e34be58fd1ede5279ca00fae66ad84a5b2758096126cfc2 +size 10102 diff --git a/scenes/game_elements/props/collectible_item/collectible_item.tscn b/scenes/game_elements/props/collectible_item/collectible_item.tscn index a5d08033c..bf7e06bc4 100644 --- a/scenes/game_elements/props/collectible_item/collectible_item.tscn +++ b/scenes/game_elements/props/collectible_item/collectible_item.tscn @@ -2,18 +2,159 @@ [ext_resource type="Script" uid="uid://be7lr8ty24cix" path="res://scenes/game_elements/props/collectible_item/components/collectible_item.gd" id="1_7ff3m"] [ext_resource type="Script" uid="uid://du8wfijr35r35" path="res://scenes/game_elements/props/interact_area/interact_area.gd" id="2_1kegn"] +[ext_resource type="SpriteFrames" uid="uid://cy1nj4pl81x8c" path="res://scenes/game_elements/props/collectible_item/components/highlight_sprite_frames.tres" id="5_0m1fb"] [ext_resource type="AudioStream" uid="uid://bhgpds38q0j4r" path="res://assets/third_party/sounds/collectibles/MemoryCollectable.ogg" id="5_hhgm5"] [ext_resource type="AudioStream" uid="uid://38xwdjm46478" path="res://assets/third_party/sounds/collectibles/CollectibleAppear.ogg" id="5_oh62b"] +[ext_resource type="Texture2D" uid="uid://citmjvrcgwqry" path="res://assets/first_party/collectibles/shadow.png" id="5_owoci"] +[ext_resource type="SpriteFrames" uid="uid://bpfr6xaq4t8xv" path="res://scenes/game_elements/props/collectible_item/components/tail_sprite_frames.tres" id="6_oh62b"] +[ext_resource type="Texture2D" uid="uid://5wscjc8yqqts" path="res://assets/first_party/collectibles/world_memory.png" id="7_jaiup"] [sub_resource type="CircleShape2D" id="CircleShape2D_ghwae"] radius = 20.0 +[sub_resource type="Animation" id="Animation_owoci"] +resource_name = "Default" +length = 2.0 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Visuals/Sprite2D:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1, 2), +"transitions": PackedFloat32Array(-2, -2, -2), +"update": 0, +"values": [Vector2(0, 0), Vector2(0, -10), Vector2(0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Visuals/Highlight:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 1, 2), +"transitions": PackedFloat32Array(-2, -2, -2), +"update": 0, +"values": [Vector2(0, 0), Vector2(0, -10), Vector2(0, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Visuals/Tail:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 1, 2), +"transitions": PackedFloat32Array(-2, -2, -2), +"update": 0, +"values": [Vector2(0, 0), Vector2(0, -10), Vector2(0, 0)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Visuals/Shadow:modulate") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(0, 0, 0, 0.32156864)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Visuals/Shadow:visible") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Visuals/Highlight:visible") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Visuals/Sprite2D:visible") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Visuals/Tail:visible") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Visuals/Highlight:modulate") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Visuals/Sprite2D:modulate") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Visuals/Tail:modulate") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} + [sub_resource type="Animation" id="Animation_i0615"] length = 0.001 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("Sprite2D:position") +tracks/0/path = NodePath("Visuals/Sprite2D:position") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { @@ -25,7 +166,7 @@ tracks/0/keys = { tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("Sprite2D:scale") +tracks/1/path = NodePath("Visuals/Sprite2D:scale") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { @@ -37,7 +178,7 @@ tracks/1/keys = { tracks/2/type = "value" tracks/2/imported = false tracks/2/enabled = true -tracks/2/path = NodePath("Sprite2D:modulate") +tracks/2/path = NodePath("Visuals/Sprite2D:modulate") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { @@ -49,19 +190,19 @@ tracks/2/keys = { tracks/3/type = "value" tracks/3/imported = false tracks/3/enabled = true -tracks/3/path = NodePath("Sprite2D:visible") +tracks/3/path = NodePath("Visuals/Sprite2D:visible") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, -"values": [false] +"values": [true] } tracks/4/type = "value" tracks/4/imported = false tracks/4/enabled = true -tracks/4/path = NodePath("Sprite2D:rotation") +tracks/4/path = NodePath("Visuals/Sprite2D:rotation") tracks/4/interp = 1 tracks/4/loop_wrap = true tracks/4/keys = { @@ -106,6 +247,114 @@ tracks/7/keys = { "update": 1, "values": [false] } +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Visuals/Shadow:visible") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Visuals/Shadow:modulate") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0, 0, 0, 0)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Visuals/Highlight:visible") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Visuals/Highlight:modulate") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Visuals/Highlight:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Visuals/Tail:position") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Visuals/Tail:visible") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Visuals/Tail:modulate") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Visuals:visible") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} [sub_resource type="Animation" id="Animation_7ff3m"] resource_name = "collected" @@ -113,7 +362,7 @@ length = 1.2 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("Sprite2D:position") +tracks/0/path = NodePath("Visuals/Sprite2D:position") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { @@ -125,7 +374,7 @@ tracks/0/keys = { tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("Sprite2D:rotation") +tracks/1/path = NodePath("Visuals/Sprite2D:rotation") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { @@ -137,7 +386,7 @@ tracks/1/keys = { tracks/2/type = "value" tracks/2/imported = false tracks/2/enabled = true -tracks/2/path = NodePath("Sprite2D:scale") +tracks/2/path = NodePath("Visuals/Sprite2D:scale") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { @@ -149,19 +398,19 @@ tracks/2/keys = { tracks/3/type = "value" tracks/3/imported = false tracks/3/enabled = true -tracks/3/path = NodePath("Sprite2D:visible") +tracks/3/path = NodePath("Visuals/Sprite2D:visible") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/keys = { -"times": PackedFloat32Array(0, 0.566667, 0.6), -"transitions": PackedFloat32Array(1, 1, 1), +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), "update": 1, -"values": [true, true, false] +"values": [true] } tracks/4/type = "value" tracks/4/imported = false tracks/4/enabled = true -tracks/4/path = NodePath("Sprite2D:modulate") +tracks/4/path = NodePath("Visuals/Sprite2D:modulate") tracks/4/interp = 1 tracks/4/loop_wrap = true tracks/4/keys = { @@ -221,15 +470,86 @@ tracks/8/keys = { "update": 1, "values": [true] } +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Visuals/Shadow:visible") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Visuals/Shadow:modulate") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.4, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(0, 0, 0, 0.32156864), Color(0, 0, 0, 0.32156864), Color(0, 0, 0, 0)] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Visuals/Tail:visible") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Visuals/Tail:modulate") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.4, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Visuals/Highlight:visible") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Visuals/Highlight:modulate") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.23333333), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} [sub_resource type="Animation" id="Animation_qy0vu"] resource_name = "reveal" -length = 0.5 step = 0.1 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("Sprite2D:position") +tracks/0/path = NodePath("Visuals/Sprite2D:position") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { @@ -241,19 +561,19 @@ tracks/0/keys = { tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("Sprite2D:visible") +tracks/1/path = NodePath("Visuals/Sprite2D:visible") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { -"times": PackedFloat32Array(0, 0.1, 0.5), -"transitions": PackedFloat32Array(1, 1, 1), +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), "update": 1, -"values": [false, true, true] +"values": [true] } tracks/2/type = "value" tracks/2/imported = false tracks/2/enabled = true -tracks/2/path = NodePath("Sprite2D:modulate") +tracks/2/path = NodePath("Visuals/Sprite2D:modulate") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { @@ -265,7 +585,7 @@ tracks/2/keys = { tracks/3/type = "value" tracks/3/imported = false tracks/3/enabled = true -tracks/3/path = NodePath("Sprite2D:scale") +tracks/3/path = NodePath("Visuals/Sprite2D:scale") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/keys = { @@ -277,7 +597,7 @@ tracks/3/keys = { tracks/4/type = "value" tracks/4/imported = false tracks/4/enabled = true -tracks/4/path = NodePath("Sprite2D:rotation") +tracks/4/path = NodePath("Visuals/Sprite2D:rotation") tracks/4/interp = 1 tracks/4/loop_wrap = true tracks/4/keys = { @@ -286,9 +606,94 @@ tracks/4/keys = { "update": 0, "values": [0.0, -0.122173, 0.122173, -0.0523599, 0.0] } +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Visuals/Shadow:visible") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Visuals/Shadow:modulate") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 0.32156864)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Visuals/Highlight:visible") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Visuals/Highlight:modulate") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0.5, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Visuals/Tail:visible") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Visuals/Tail:modulate") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Visuals:visible") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} [sub_resource type="AnimationLibrary" id="AnimationLibrary_8dm1m"] _data = { +&"Default": SubResource("Animation_owoci"), &"RESET": SubResource("Animation_i0615"), &"collected": SubResource("Animation_7ff3m"), &"reveal": SubResource("Animation_qy0vu") @@ -302,11 +707,12 @@ height = 28.0 script = ExtResource("1_7ff3m") [node name="InteractArea" type="Area2D" parent="." unique_id=1327503985 node_paths=PackedStringArray("marker")] +unique_name_in_owner = true collision_layer = 32 collision_mask = 0 script = ExtResource("2_1kegn") marker = NodePath("Marker") -action_text = "Collect" +action_text = "Collect Memory" metadata/_custom_type_script = "uid://du8wfijr35r35" [node name="CollisionShape2D" type="CollisionShape2D" parent="InteractArea" unique_id=1121983883] @@ -316,12 +722,42 @@ debug_color = Color(0.6, 0.545, 0, 0.42) [node name="Marker" type="Marker2D" parent="InteractArea" unique_id=1961850851] position = Vector2(0, -48) -[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1869284545] -libraries/ = SubResource("AnimationLibrary_8dm1m") +[node name="Visuals" type="Node2D" parent="." unique_id=933866851] +unique_name_in_owner = true + +[node name="Shadow" type="Sprite2D" parent="Visuals" unique_id=733059184] +modulate = Color(0, 0, 0, 0) +position = Vector2(-2.3841858e-07, 24) +scale = Vector2(0.5411221, 0.90519166) +texture = ExtResource("5_owoci") +vframes = 3 +frame = 2 + +[node name="Highlight" type="AnimatedSprite2D" parent="Visuals" unique_id=1920697038] +unique_name_in_owner = true +modulate = Color(1, 1, 1, 0) +sprite_frames = ExtResource("5_0m1fb") +animation = &"Default" +frame_progress = 0.15411454 -[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1620327010] -visible = false +[node name="Sprite2D" type="Sprite2D" parent="Visuals" unique_id=1620327010] +unique_name_in_owner = true +modulate = Color(1, 1, 1, 0) +texture = ExtResource("7_jaiup") + +[node name="Tail" type="AnimatedSprite2D" parent="Visuals" unique_id=2039386539] +unique_name_in_owner = true modulate = Color(1, 1, 1, 0) +sprite_frames = ExtResource("6_oh62b") +animation = &"Memory" +frame_progress = 0.9600635 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1869284545] +libraries/ = SubResource("AnimationLibrary_8dm1m") +autoplay = &"Default" +movie_quit_on_finish = true +next/reveal = &"Default" +blend_times = [&"reveal", &"Default", 0.2] [node name="CollectedSound" type="AudioStreamPlayer" parent="." unique_id=420528907] unique_name_in_owner = true @@ -336,8 +772,9 @@ bus = &"SFX" collision_layer = 16 collision_mask = 0 -[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D" unique_id=1204681631] -position = Vector2(1, 14) +[node name="PhysicalCollider" type="CollisionShape2D" parent="StaticBody2D" unique_id=1204681631] +unique_name_in_owner = true +position = Vector2(0, 14) rotation = 1.5708 shape = SubResource("CapsuleShape2D_hhgm5") debug_color = Color(0.976711, 0, 0.409753, 0.42) diff --git a/scenes/game_elements/props/collectible_item/components/collectible_item.gd b/scenes/game_elements/props/collectible_item/components/collectible_item.gd index aa16eede2..abb2fac68 100644 --- a/scenes/game_elements/props/collectible_item/components/collectible_item.gd +++ b/scenes/game_elements/props/collectible_item/components/collectible_item.gd @@ -13,6 +13,8 @@ extends SceneLink @export var revealed: bool = true: set(new_value): revealed = new_value + if not is_node_ready(): + return _update_based_on_revealed() ## [InventoryItem] provided by this collectible when interacted with. @@ -30,11 +32,17 @@ extends SceneLink ## The dialogue title from where [member collected_dialogue] will start. @export var dialogue_title: StringName = "" -@onready var interact_area: InteractArea = $InteractArea +@onready var interact_area: InteractArea = %InteractArea + @onready var animation_player: AnimationPlayer = $AnimationPlayer -@onready var sprite_2d: Sprite2D = $Sprite2D + +@onready var visuals: Node2D = %Visuals +@onready var sprite_2d: Sprite2D = %Sprite2D +@onready var highlight: AnimatedSprite2D = %Highlight +@onready var tail: AnimatedSprite2D = %Tail + @onready var appear_sound: AudioStreamPlayer = %AppearSound -@onready var physical_collider: CollisionShape2D = $StaticBody2D/CollisionShape2D +@onready var physical_collider: CollisionShape2D = %PhysicalCollider func _validate_property(property: Dictionary) -> void: @@ -54,12 +62,16 @@ func _get_configuration_warnings() -> PackedStringArray: func _set_item(new_value: InventoryItem) -> void: item = new_value + if not is_node_ready(): + return + if not item: + return - if sprite_2d: - sprite_2d.texture = item.get_world_texture() if item else null + sprite_2d.texture = item.get_world_texture() + tail.play(item.type_name()) + highlight.play(&"Default") - if interact_area: - interact_area.action_text = (tr("Collect %s") % item.type_name() if item else tr("Collect")) + interact_area.action_text = (tr("Collect %s") % item.type_name() if item else tr("Collect")) update_configuration_warnings() @@ -88,7 +100,7 @@ func reveal() -> void: return appear_sound.play() - animation_player.play("reveal") + animation_player.play(&"reveal") await animation_player.animation_finished revealed = true @@ -120,10 +132,6 @@ func _on_interacted(player: Player, _from_right: bool) -> void: func _update_based_on_revealed() -> void: - if interact_area: - interact_area.disabled = not revealed - if sprite_2d: - sprite_2d.visible = revealed - sprite_2d.modulate = Color.WHITE if revealed else Color.TRANSPARENT - if physical_collider: - physical_collider.disabled = not revealed + interact_area.disabled = not revealed + physical_collider.disabled = not revealed + visuals.visible = revealed diff --git a/scenes/game_elements/props/collectible_item/components/collectible_item_test.gd b/scenes/game_elements/props/collectible_item/components/collectible_item_test.gd new file mode 100644 index 000000000..79e19b358 --- /dev/null +++ b/scenes/game_elements/props/collectible_item/components/collectible_item_test.gd @@ -0,0 +1,16 @@ +# SPDX-FileCopyrightText: The Threadbare Authors +# SPDX-License-Identifier: MPL-2.0 +extends Node2D + +@onready var memory_unrevealed: CollectibleItem = %MemoryUnrevealed +@onready var imagination_unrevealed: CollectibleItem = %ImaginationUnrevealed +@onready var spirit_unrevealed: CollectibleItem = %SpiritUnrevealed + + +func _ready() -> void: + await get_tree().create_timer(5.0).timeout + memory_unrevealed.reveal() + await get_tree().create_timer(5.0).timeout + imagination_unrevealed.reveal() + await get_tree().create_timer(5.0).timeout + spirit_unrevealed.reveal() diff --git a/scenes/game_elements/props/collectible_item/components/collectible_item_test.gd.uid b/scenes/game_elements/props/collectible_item/components/collectible_item_test.gd.uid new file mode 100644 index 000000000..8bb3c0d50 --- /dev/null +++ b/scenes/game_elements/props/collectible_item/components/collectible_item_test.gd.uid @@ -0,0 +1 @@ +uid://cbpwad3e0l1tc diff --git a/scenes/game_elements/props/collectible_item/components/collectible_item_test.tscn b/scenes/game_elements/props/collectible_item/components/collectible_item_test.tscn new file mode 100644 index 000000000..3df54b2f7 --- /dev/null +++ b/scenes/game_elements/props/collectible_item/components/collectible_item_test.tscn @@ -0,0 +1,75 @@ +[gd_scene format=3 uid="uid://bjpbpn8vy73c1"] + +[ext_resource type="PackedScene" uid="uid://fuhl3l6gxq5k" path="res://scenes/game_elements/props/collectible_item/collectible_item.tscn" id="1_4150e"] +[ext_resource type="Script" uid="uid://cbpwad3e0l1tc" path="res://scenes/game_elements/props/collectible_item/components/collectible_item_test.gd" id="1_fdx8g"] +[ext_resource type="Script" uid="uid://bgmwplmj3bfls" path="res://scenes/globals/game_state/inventory/inventory_item.gd" id="2_bmfww"] +[ext_resource type="PackedScene" uid="uid://iu2q66clupc6" path="res://scenes/game_elements/characters/player/player.tscn" id="3_bmfww"] +[ext_resource type="SpriteFrames" uid="uid://cxjwwgm86d6it" path="res://scenes/game_elements/characters/components/sprite_frames/storyweaver_red.tres" id="5_xa2ih"] + +[sub_resource type="Resource" id="Resource_kig3j"] +script = ExtResource("2_bmfww") +metadata/_custom_type_script = "uid://bgmwplmj3bfls" + +[sub_resource type="Resource" id="Resource_xa2ih"] +script = ExtResource("2_bmfww") +type = 1 +metadata/_custom_type_script = "uid://bgmwplmj3bfls" + +[sub_resource type="Resource" id="Resource_qfadu"] +script = ExtResource("2_bmfww") +type = 2 +metadata/_custom_type_script = "uid://bgmwplmj3bfls" + +[sub_resource type="Resource" id="Resource_fdx8g"] +script = ExtResource("2_bmfww") +metadata/_custom_type_script = "uid://bgmwplmj3bfls" + +[sub_resource type="Resource" id="Resource_bmfww"] +script = ExtResource("2_bmfww") +type = 1 +metadata/_custom_type_script = "uid://bgmwplmj3bfls" + +[sub_resource type="Resource" id="Resource_3p18x"] +script = ExtResource("2_bmfww") +type = 2 +metadata/_custom_type_script = "uid://bgmwplmj3bfls" + +[node name="CollectibleItemTest" type="Node2D" unique_id=394070177] +script = ExtResource("1_fdx8g") + +[node name="OnTheGround" type="Node2D" parent="." unique_id=726634965] +y_sort_enabled = true + +[node name="CollectibleItem" parent="OnTheGround" unique_id=327991066 instance=ExtResource("1_4150e")] +position = Vector2(488, 320) +item = SubResource("Resource_kig3j") + +[node name="CollectibleItem2" parent="OnTheGround" unique_id=1434036424 instance=ExtResource("1_4150e")] +position = Vector2(556, 336) +item = SubResource("Resource_xa2ih") + +[node name="CollectibleItem3" parent="OnTheGround" unique_id=1308002417 instance=ExtResource("1_4150e")] +position = Vector2(619, 318) +item = SubResource("Resource_qfadu") + +[node name="Player" parent="OnTheGround" unique_id=296354958 instance=ExtResource("3_bmfww")] +position = Vector2(632, 413) +sprite_frames = ExtResource("5_xa2ih") + +[node name="MemoryUnrevealed" parent="OnTheGround" unique_id=1303878678 instance=ExtResource("1_4150e")] +unique_name_in_owner = true +position = Vector2(686, 334) +revealed = false +item = SubResource("Resource_fdx8g") + +[node name="ImaginationUnrevealed" parent="OnTheGround" unique_id=971916377 instance=ExtResource("1_4150e")] +unique_name_in_owner = true +position = Vector2(754, 316) +revealed = false +item = SubResource("Resource_bmfww") + +[node name="SpiritUnrevealed" parent="OnTheGround" unique_id=669196187 instance=ExtResource("1_4150e")] +unique_name_in_owner = true +position = Vector2(815, 336) +revealed = false +item = SubResource("Resource_3p18x") diff --git a/scenes/game_elements/props/collectible_item/components/highlight_sprite_frames.tres b/scenes/game_elements/props/collectible_item/components/highlight_sprite_frames.tres new file mode 100644 index 000000000..458520bf9 --- /dev/null +++ b/scenes/game_elements/props/collectible_item/components/highlight_sprite_frames.tres @@ -0,0 +1,81 @@ +[gd_resource type="SpriteFrames" format=3 uid="uid://cy1nj4pl81x8c"] + +[ext_resource type="Texture2D" uid="uid://cg650xa1uk78h" path="res://assets/first_party/collectibles/thread_highlight.png" id="2_dyxua"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_d7l42"] +atlas = ExtResource("2_dyxua") +region = Rect2(0, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3iq7s"] +atlas = ExtResource("2_dyxua") +region = Rect2(64, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_pxmlh"] +atlas = ExtResource("2_dyxua") +region = Rect2(128, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_os3oc"] +atlas = ExtResource("2_dyxua") +region = Rect2(0, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y205f"] +atlas = ExtResource("2_dyxua") +region = Rect2(64, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y8xlj"] +atlas = ExtResource("2_dyxua") +region = Rect2(128, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jv526"] +atlas = ExtResource("2_dyxua") +region = Rect2(0, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_co8jl"] +atlas = ExtResource("2_dyxua") +region = Rect2(64, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y1381"] +atlas = ExtResource("2_dyxua") +region = Rect2(128, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_215sm"] +atlas = ExtResource("2_dyxua") +region = Rect2(0, 192, 64, 64) + +[resource] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_d7l42") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3iq7s") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_pxmlh") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_os3oc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_y205f") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_y8xlj") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jv526") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_co8jl") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_y1381") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_215sm") +}], +"loop": 1, +"name": &"Default", +"speed": 10.0 +}] diff --git a/scenes/game_elements/props/collectible_item/components/tail_sprite_frames.tres b/scenes/game_elements/props/collectible_item/components/tail_sprite_frames.tres new file mode 100644 index 000000000..12e2f77c3 --- /dev/null +++ b/scenes/game_elements/props/collectible_item/components/tail_sprite_frames.tres @@ -0,0 +1,233 @@ +[gd_resource type="SpriteFrames" format=3 uid="uid://bpfr6xaq4t8xv"] + +[ext_resource type="Texture2D" uid="uid://cwxjno4tkqbff" path="res://assets/first_party/collectibles/thread_imagination_tail.png" id="1_imagination"] +[ext_resource type="Texture2D" uid="uid://cm74qqtogplbm" path="res://assets/first_party/collectibles/thread_memory_tail.png" id="2_memory"] +[ext_resource type="Texture2D" uid="uid://bebnwci47fajp" path="res://assets/first_party/collectibles/thread_spirit_tail.png" id="3_spirit"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_lp8by"] +atlas = ExtResource("1_imagination") +region = Rect2(0, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_218lm"] +atlas = ExtResource("1_imagination") +region = Rect2(64, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_tumec"] +atlas = ExtResource("1_imagination") +region = Rect2(128, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1sjuc"] +atlas = ExtResource("1_imagination") +region = Rect2(0, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4wto8"] +atlas = ExtResource("1_imagination") +region = Rect2(64, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_d6ne3"] +atlas = ExtResource("1_imagination") +region = Rect2(128, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ja11m"] +atlas = ExtResource("1_imagination") +region = Rect2(0, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_bjpwi"] +atlas = ExtResource("1_imagination") +region = Rect2(64, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l6h4g"] +atlas = ExtResource("1_imagination") +region = Rect2(128, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4j3jt"] +atlas = ExtResource("1_imagination") +region = Rect2(0, 192, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_mujug"] +atlas = ExtResource("2_memory") +region = Rect2(0, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0yxr2"] +atlas = ExtResource("2_memory") +region = Rect2(64, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_cep73"] +atlas = ExtResource("2_memory") +region = Rect2(128, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_71m4h"] +atlas = ExtResource("2_memory") +region = Rect2(0, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ayro3"] +atlas = ExtResource("2_memory") +region = Rect2(64, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_nf64e"] +atlas = ExtResource("2_memory") +region = Rect2(128, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xqgb8"] +atlas = ExtResource("2_memory") +region = Rect2(0, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_k265j"] +atlas = ExtResource("2_memory") +region = Rect2(64, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_op5ea"] +atlas = ExtResource("2_memory") +region = Rect2(128, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_upnun"] +atlas = ExtResource("2_memory") +region = Rect2(0, 192, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1dctl"] +atlas = ExtResource("3_spirit") +region = Rect2(0, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_eoo78"] +atlas = ExtResource("3_spirit") +region = Rect2(64, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vtbrx"] +atlas = ExtResource("3_spirit") +region = Rect2(128, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_7h5of"] +atlas = ExtResource("3_spirit") +region = Rect2(0, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_pibra"] +atlas = ExtResource("3_spirit") +region = Rect2(64, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fnf0f"] +atlas = ExtResource("3_spirit") +region = Rect2(128, 64, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_etqnl"] +atlas = ExtResource("3_spirit") +region = Rect2(0, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ennag"] +atlas = ExtResource("3_spirit") +region = Rect2(64, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2k051"] +atlas = ExtResource("3_spirit") +region = Rect2(128, 128, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_veu3q"] +atlas = ExtResource("3_spirit") +region = Rect2(0, 192, 64, 64) + +[resource] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_lp8by") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_218lm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_tumec") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1sjuc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4wto8") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_d6ne3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ja11m") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_bjpwi") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_l6h4g") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4j3jt") +}], +"loop": 1, +"name": &"Imagination", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_mujug") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0yxr2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_cep73") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_71m4h") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ayro3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_nf64e") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xqgb8") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_k265j") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_op5ea") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_upnun") +}], +"loop": 1, +"name": &"Memory", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_1dctl") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_eoo78") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vtbrx") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7h5of") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_pibra") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fnf0f") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_etqnl") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ennag") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2k051") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_veu3q") +}], +"loop": 1, +"name": &"Spirit", +"speed": 10.0 +}]