diff --git a/TestScene.tscn b/TestScene.tscn index bb56518..e092b82 100644 --- a/TestScene.tscn +++ b/TestScene.tscn @@ -1,27 +1,54 @@ -[gd_scene load_steps=4 format=3 uid="uid://datin7yogkbf3"] +[gd_scene load_steps=6 format=3 uid="uid://datin7yogkbf3"] [ext_resource type="Material" uid="uid://bjhdc2pxcui3" path="res://content/cardboard_material.tres" id="1_64ce8"] [ext_resource type="PackedScene" uid="uid://ctu0cdqcefrwg" path="res://prefabs/player.tscn" id="2_k3l6b"] +[ext_resource type="PackedScene" uid="uid://b1l8fvlceolf8" path="res://content/enemies/enemy.tscn" id="3_1edqv"] + +[sub_resource type="NavigationMesh" id="NavigationMesh_qn8f1"] +vertices = PackedVector3Array(-169.26, 0.02, -115.898, -169.26, 0.02, 59.6022, 77.9896, 0.02, 59.6022, 77.9896, 0.02, -115.898) +polygons = [PackedInt32Array(3, 2, 0), PackedInt32Array(0, 2, 1)] +cell_height = 0.01 [sub_resource type="BoxShape3D" id="BoxShape3D_jbkga"] size = Vector3(248.301, 1, 176.535) [node name="TestScene" type="Node3D"] -[node name="StaticBody3D" type="StaticBody3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -45.5868, -0.5, -28.2159) - -[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"] -shape = SubResource("BoxShape3D_jbkga") - -[node name="CSGBox3D" type="CSGBox3D" parent="StaticBody3D"] -material_override = ExtResource("1_64ce8") -size = Vector3(248.301, 1, 176.535) - [node name="Node3D" parent="." instance=ExtResource("2_k3l6b")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0230917, 0, -0.0855939) [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] transform = Transform3D(0.951466, 0.283282, -0.120267, 0.221829, -0.360404, 0.906036, 0.213319, -0.888741, -0.405752, 0, 39.7095, 0) -light_energy = 1.861 +light_energy = 0.0 +shadow_enabled = true +shadow_opacity = 0.46 directional_shadow_pancake_size = 12.9 + +[node name="Enemy" parent="." instance=ExtResource("3_1edqv")] +transform = Transform3D(-0.294991, 0, -0.9555, 0, 1, 0, 0.9555, 0, -0.294991, 7.75343, 0, 4.05556) + +[node name="Enemy2" parent="." instance=ExtResource("3_1edqv")] +transform = Transform3D(-0.294991, 0, -0.9555, 0, 1, 0, 0.9555, 0, -0.294991, 7.75343, 0, -1.44918) + +[node name="Enemy3" parent="." instance=ExtResource("3_1edqv")] +transform = Transform3D(-0.294991, 0, -0.9555, 0, 1, 0, 0.9555, 0, -0.294991, 7.75343, 0, -8.40638) + +[node name="Enemy4" parent="." instance=ExtResource("3_1edqv")] +transform = Transform3D(-0.294991, 0, -0.9555, 0, 1, 0, 0.9555, 0, -0.294991, 11.7836, -4.76837e-07, -1.21838) + +[node name="Enemy5" parent="." instance=ExtResource("3_1edqv")] +transform = Transform3D(-0.294991, 0, -0.9555, 0, 1, 0, 0.9555, 0, -0.294991, 12.7053, 0, 4.63715) + +[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0230917, 0, -0.0855939) +navigation_mesh = SubResource("NavigationMesh_qn8f1") + +[node name="StaticBody3D" type="StaticBody3D" parent="NavigationRegion3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -45.6099, -0.5, -28.1303) + +[node name="CollisionShape3D" type="CollisionShape3D" parent="NavigationRegion3D/StaticBody3D"] +shape = SubResource("BoxShape3D_jbkga") + +[node name="CSGBox3D" type="CSGBox3D" parent="NavigationRegion3D/StaticBody3D"] +material_override = ExtResource("1_64ce8") +size = Vector3(248.301, 1, 176.535) diff --git a/addons/limboai/LICENSE.md b/addons/limboai/LICENSE.md new file mode 100644 index 0000000..07c690f --- /dev/null +++ b/addons/limboai/LICENSE.md @@ -0,0 +1,7 @@ +Copyright (c) 2023-2025 Serhii Snitsaruk and the LimboAI contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the β€œSoftware”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED β€œAS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/addons/limboai/LOGO_LICENSE.md b/addons/limboai/LOGO_LICENSE.md new file mode 100644 index 0000000..cd0de07 --- /dev/null +++ b/addons/limboai/LOGO_LICENSE.md @@ -0,0 +1,5 @@ +LimboAI Logo +Copyright (c) 2023 Aleksandra Snitsaruk + +This work is licensed under the Creative Commons Attribution 4.0 International +license (CC BY 4.0 International): https://creativecommons.org/licenses/by/4.0/ \ No newline at end of file diff --git a/addons/limboai/README.md b/addons/limboai/README.md new file mode 100644 index 0000000..186c676 --- /dev/null +++ b/addons/limboai/README.md @@ -0,0 +1,139 @@ +

+ LimboAI logo +

+ +# LimboAI - Behavior Trees & State Machines for Godot 4 + +[![πŸ”— All builds](https://github.com/limbonaut/limboai/actions/workflows/all_builds.yml/badge.svg)](https://github.com/limbonaut/limboai/actions/workflows/all_builds.yml) +[![πŸ”Ž Unit Tests](https://github.com/limbonaut/limboai/actions/workflows/test_builds.yml/badge.svg)](https://github.com/limbonaut/limboai/actions/workflows/test_builds.yml) +[![Documentation Status](https://readthedocs.org/projects/limboai/badge/?version=latest)](https://limboai.readthedocs.io/en/latest/?badge=latest) +[![GitHub License](https://img.shields.io/github/license/limbonaut/limboai)](https://github.com/limbonaut/limboai/blob/master/LICENSE.md) +[![Discord](https://img.shields.io/discord/1185664967379267774?logo=discord&link=https%3A%2F%2Fdiscord.gg%2FN5MGC95GpP)](https://discord.gg/N5MGC95GpP) +[![Mastodon Follow](https://img.shields.io/mastodon/follow/109346796150895359?domain=https%3A%2F%2Fmastodon.gamedev.place)](https://mastodon.gamedev.place/@limbo) + +>**πŸ›ˆ Supported Godot Engine:** **4.3** (v1.2.0+) | **4.2** (v1.1.x releases) + +**LimboAI** is an open-source C++ plugin for **Godot Engine 4** providing a combination of +**Behavior Trees** and **State Machines**, which can be used together to create complex AI behaviors. +It comes with a behavior tree editor, built-in documentation, visual debugger, extensive demo project with a tutorial, and more! +While it is implemented in C++, it fully supports GDScript for [creating your own tasks](https://limboai.readthedocs.io/en/stable/getting-started/custom-tasks.html) and [states](https://limboai.readthedocs.io/en/stable/getting-started/hsm.html). + +If you enjoy using LimboAI, please **consider supporting** my efforts with a donation on Ko-fi 😊 Your contribution will help me continue developing and improving it. + +[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/Y8Y2TCNH0) + +![Textured screenshot](doc/images/behavior-tree-editor-debugger.png) + +Behavior Trees are powerful hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies). They are designed to make it easier to create rich and highly modular behaviors for your games. To learn more about behavior trees, check out [Introduction to Behavior Trees](https://limboai.readthedocs.io/en/stable/getting-started/introduction.html) and our demo project, which includes a tutorial. + +## Demonstration + +![Charger from Demo](doc/images/demo_charger.gif) + +>**πŸ›ˆ Demo project** lives in the `demo` folder and is available separately in [**Releases**](https://github.com/limbonaut/limboai/releases). +> Run `demo/scenes/showcase.tscn` to get started. +> It also includes a tutorial that introduces behavior trees through illustrative examples. + +### Videos + +> **πŸ›ˆ** YouTube videos produced by various creators + + + + + + +## Features + +- **Behavior Trees (BT):** + - Easily create, edit, and save `BehaviorTree` resources in the editor. + - Execute `BehaviorTree` resources using the `BTPlayer` node. + - Create complex behaviors by combining and nesting tasks in a hierarchy. + - Control execution flow using composite, decorator, and condition tasks. + - [Create custom tasks](https://limboai.readthedocs.io/en/stable/getting-started/custom-tasks.html) by extending core classes: `BTAction`, `BTCondition`, `BTDecorator`, and `BTComposite`. + - Built-in class documentation. + - Blackboard system: Share data seamlessly between tasks using the `Blackboard`. + - Blackboard plans: Define variables in the BehaviorTree resource and override their values in the BTPlayer node. + - Plan editor: Manage variables, their data types and property hints. + - Blackboard scopes: Prevent name conflicts and enable advanced techniques like [sharing data between several agents](https://limboai.readthedocs.io/en/stable/getting-started/using-blackboard.html#sharing-data-between-several-agents). + - Blackboard parameters: [Export a BB parameter](https://limboai.readthedocs.io/en/stable/getting-started/using-blackboard.html#task-parameters), for which user can provide a value or bind it to a blackboard variable (can be used in custom tasks). + - Inspector support for specifying blackboard variables (custom editor for exported `StringName` properties ending with "_var"). + - Use the `BTSubtree` task to execute a tree from a different resource file, promoting organization and reusability. + - Visual Debugger: Inspect the execution of any BT in a running scene to identify and troubleshoot issues. + - Visualize BT in-game using `BehaviorTreeView` node (for custom in-game tools). + - Monitor tree performance with custom performance monitors. + +- **Hierarchical State Machines (HSM):** + - Extend the `LimboState` class to implement state logic. + - `LimboHSM` node serves as a state machine that manages `LimboState` instances and transitions. + - `LimboHSM` is a state itself and can be nested within other `LimboHSM` instances. + - [Event-based](https://limboai.readthedocs.io/en/stable/getting-started/hsm.html#events-and-transitions): Transitions are associated with events and are triggered by the state machine when the relevant event is dispatched, allowing for better decoupling of transitions from state logic. + - Combine state machines with behavior trees using `BTState` for advanced reactive AI. + - Delegation Option: Using the vanilla `LimboState`, [delegate the implementation](https://limboai.readthedocs.io/en/stable/getting-started/hsm.html#single-file-state-machine-setup) to your callback functions, making it perfect for rapid prototyping and game jams. + - πŸ›ˆ Note: State machine setup and initialization require code; there is no GUI editor. + +- **Tested:** Behavior tree tasks and HSM are covered by unit tests. + +- **GDExtension:** LimboAI can be [used as extension](https://limboai.readthedocs.io/en/stable/getting-started/gdextension.html). Custom engine builds are not necessary. + +- **Demo + Tutorial:** Check out our extensive demo project, which includes an introduction to behavior trees using examples. + +## First steps + +Follow the [First steps](https://limboai.readthedocs.io/en/stable/index.html#first-steps) guide to learn how to get started with LimboAI and the demo project. + +## Getting LimboAI + +LimboAI can be used as either a C++ module or as a GDExtension shared library. GDExtension version is more convenient to use but somewhat limited in features. Whichever you choose to use, your project will stay compatible with both and you can switch from one to the other any time. See [Using GDExtension](https://limboai.readthedocs.io/en/stable/getting-started/gdextension.html). + +### Precompiled builds + +- For the most recent builds, navigate to **Actions** β†’ [**All Builds**](https://github.com/limbonaut/limboai/actions/workflows/all_builds.yml), select a build from the list, and scroll down until you find the **Artifacts** section. +- For release builds, check [**Releases**](https://github.com/limbonaut/limboai/releases). + +### Compiling from source + +- Download the Godot Engine source code and put this module source into the `modules/limboai` directory. +- Consult the Godot Engine documentation for instructions on [how to build from source code](https://docs.godotengine.org/en/stable/contributing/development/compiling/index.html). +- If you plan to export a game utilizing the LimboAI module, you'll also need to build export templates. +- To execute unit tests, compile the engine with `tests=yes` and run it with `--test --tc="*[LimboAI]*"`. + +#### For GDExtension + +- You'll need SCons build tool and a C++ compiler. See also [Compiling](https://docs.godotengine.org/en/stable/contributing/development/compiling/index.html). +- Run `scons target=editor` to build the plugin library for your current platform. + - SCons will automatically clone the godot-cpp/ repository if it doesn't already exist in the `limboai/godot-cpp` directory. + - By default, built targets are placed in the demo project: `demo/addons/limboai/bin/` +- Check `scons -h` for other options and targets. + +## Using the plugin + +- Online Documentation: [stable](https://limboai.readthedocs.io/en/stable/index.html), [latest](https://limboai.readthedocs.io/en/latest/index.html) +- [First steps](https://limboai.readthedocs.io/en/stable/index.html#first-steps) +- [Introduction to Behavior Trees](https://limboai.readthedocs.io/en/stable/getting-started/introduction.html) +- [Creating custom tasks in GDScript](https://limboai.readthedocs.io/en/stable/getting-started/custom-tasks.html) +- [Sharing data using Blackboard](https://limboai.readthedocs.io/en/stable/getting-started/using-blackboard.html) +- [Accessing nodes in the scene tree](https://limboai.readthedocs.io/en/stable/getting-started/accessing-nodes.html) +- [State machines](https://limboai.readthedocs.io/en/stable/getting-started/hsm.html) +- [Using GDExtension](https://limboai.readthedocs.io/en/stable/getting-started/gdextension.html) +- [Using LimboAI with C#](https://limboai.readthedocs.io/en/stable/getting-started/c-sharp.html) +- [Class reference](https://limboai.readthedocs.io/en/stable/getting-started/featured-classes.html) + +## Contributing + +Contributions are welcome! Please open issues for bug reports, feature requests, or code changes. +For detailed guidelines on contributing to code or documentation, check out our [Contributing](https://limboai.readthedocs.io/en/latest/getting-started/contributing.html) page. + +If you have an idea for a behavior tree task or a feature that could be useful in a variety of projects, open an issue to discuss it. + +## Social + +Need help? We have a Discord server: https://discord.gg/N5MGC95GpP + +I write about LimboAI development on Mastodon: https://mastodon.gamedev.place/@limbo. + +## License + +Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT + +LimboAI logo and demo project art assets are licensed under the Creative Commons Attribution 4.0 International license that can be found at https://creativecommons.org/licenses/by/4.0/ diff --git a/addons/limboai/bin/libliblimboai.windows.editor.x86_64.a b/addons/limboai/bin/libliblimboai.windows.editor.x86_64.a new file mode 100644 index 0000000..d2631b4 Binary files /dev/null and b/addons/limboai/bin/libliblimboai.windows.editor.x86_64.a differ diff --git a/addons/limboai/bin/libliblimboai.windows.template_release.x86_64.a b/addons/limboai/bin/libliblimboai.windows.template_release.x86_64.a new file mode 100644 index 0000000..b51ed53 Binary files /dev/null and b/addons/limboai/bin/libliblimboai.windows.template_release.x86_64.a differ diff --git a/addons/limboai/bin/liblimboai.android.template_debug.arm32.so b/addons/limboai/bin/liblimboai.android.template_debug.arm32.so new file mode 100644 index 0000000..6e22804 Binary files /dev/null and b/addons/limboai/bin/liblimboai.android.template_debug.arm32.so differ diff --git a/addons/limboai/bin/liblimboai.android.template_debug.arm64.so b/addons/limboai/bin/liblimboai.android.template_debug.arm64.so new file mode 100644 index 0000000..c5cceb2 Binary files /dev/null and b/addons/limboai/bin/liblimboai.android.template_debug.arm64.so differ diff --git a/addons/limboai/bin/liblimboai.android.template_debug.x86_32.so b/addons/limboai/bin/liblimboai.android.template_debug.x86_32.so new file mode 100644 index 0000000..6d8eab7 Binary files /dev/null and b/addons/limboai/bin/liblimboai.android.template_debug.x86_32.so differ diff --git a/addons/limboai/bin/liblimboai.android.template_debug.x86_64.so b/addons/limboai/bin/liblimboai.android.template_debug.x86_64.so new file mode 100644 index 0000000..ab0def7 Binary files /dev/null and b/addons/limboai/bin/liblimboai.android.template_debug.x86_64.so differ diff --git a/addons/limboai/bin/liblimboai.android.template_release.arm32.so b/addons/limboai/bin/liblimboai.android.template_release.arm32.so new file mode 100644 index 0000000..4db8355 Binary files /dev/null and b/addons/limboai/bin/liblimboai.android.template_release.arm32.so differ diff --git a/addons/limboai/bin/liblimboai.android.template_release.arm64.so b/addons/limboai/bin/liblimboai.android.template_release.arm64.so new file mode 100644 index 0000000..2b739dc Binary files /dev/null and b/addons/limboai/bin/liblimboai.android.template_release.arm64.so differ diff --git a/addons/limboai/bin/liblimboai.android.template_release.x86_32.so b/addons/limboai/bin/liblimboai.android.template_release.x86_32.so new file mode 100644 index 0000000..12cf743 Binary files /dev/null and b/addons/limboai/bin/liblimboai.android.template_release.x86_32.so differ diff --git a/addons/limboai/bin/liblimboai.android.template_release.x86_64.so b/addons/limboai/bin/liblimboai.android.template_release.x86_64.so new file mode 100644 index 0000000..9a4291d Binary files /dev/null and b/addons/limboai/bin/liblimboai.android.template_release.x86_64.so differ diff --git a/addons/limboai/bin/liblimboai.ios.template_debug.arm64.dylib b/addons/limboai/bin/liblimboai.ios.template_debug.arm64.dylib new file mode 100644 index 0000000..6cbbacd Binary files /dev/null and b/addons/limboai/bin/liblimboai.ios.template_debug.arm64.dylib differ diff --git a/addons/limboai/bin/liblimboai.ios.template_debug.universal.simulator.dylib b/addons/limboai/bin/liblimboai.ios.template_debug.universal.simulator.dylib new file mode 100644 index 0000000..f0bd59d Binary files /dev/null and b/addons/limboai/bin/liblimboai.ios.template_debug.universal.simulator.dylib differ diff --git a/addons/limboai/bin/liblimboai.ios.template_release.arm64.dylib b/addons/limboai/bin/liblimboai.ios.template_release.arm64.dylib new file mode 100644 index 0000000..8a1e4f8 Binary files /dev/null and b/addons/limboai/bin/liblimboai.ios.template_release.arm64.dylib differ diff --git a/addons/limboai/bin/liblimboai.ios.template_release.universal.simulator.dylib b/addons/limboai/bin/liblimboai.ios.template_release.universal.simulator.dylib new file mode 100644 index 0000000..92a4f68 Binary files /dev/null and b/addons/limboai/bin/liblimboai.ios.template_release.universal.simulator.dylib differ diff --git a/addons/limboai/bin/liblimboai.linux.editor.x86_64.so b/addons/limboai/bin/liblimboai.linux.editor.x86_64.so new file mode 100644 index 0000000..caa8dc5 Binary files /dev/null and b/addons/limboai/bin/liblimboai.linux.editor.x86_64.so differ diff --git a/addons/limboai/bin/liblimboai.linux.template_release.x86_64.so b/addons/limboai/bin/liblimboai.linux.template_release.x86_64.so new file mode 100644 index 0000000..ec6348f Binary files /dev/null and b/addons/limboai/bin/liblimboai.linux.template_release.x86_64.so differ diff --git a/addons/limboai/bin/liblimboai.macos.editor.framework/liblimboai.macos.editor b/addons/limboai/bin/liblimboai.macos.editor.framework/liblimboai.macos.editor new file mode 100644 index 0000000..718c609 Binary files /dev/null and b/addons/limboai/bin/liblimboai.macos.editor.framework/liblimboai.macos.editor differ diff --git a/addons/limboai/bin/liblimboai.macos.template_release.framework/liblimboai.macos.template_release b/addons/limboai/bin/liblimboai.macos.template_release.framework/liblimboai.macos.template_release new file mode 100644 index 0000000..3dfa508 Binary files /dev/null and b/addons/limboai/bin/liblimboai.macos.template_release.framework/liblimboai.macos.template_release differ diff --git a/addons/limboai/bin/liblimboai.web.template_debug.wasm32.wasm b/addons/limboai/bin/liblimboai.web.template_debug.wasm32.wasm new file mode 100644 index 0000000..dd4fe80 Binary files /dev/null and b/addons/limboai/bin/liblimboai.web.template_debug.wasm32.wasm differ diff --git a/addons/limboai/bin/liblimboai.web.template_release.wasm32.wasm b/addons/limboai/bin/liblimboai.web.template_release.wasm32.wasm new file mode 100644 index 0000000..3f9986f Binary files /dev/null and b/addons/limboai/bin/liblimboai.web.template_release.wasm32.wasm differ diff --git a/addons/limboai/bin/liblimboai.windows.editor.x86_64.dll b/addons/limboai/bin/liblimboai.windows.editor.x86_64.dll new file mode 100644 index 0000000..a4435cc Binary files /dev/null and b/addons/limboai/bin/liblimboai.windows.editor.x86_64.dll differ diff --git a/addons/limboai/bin/liblimboai.windows.template_release.x86_64.dll b/addons/limboai/bin/liblimboai.windows.template_release.x86_64.dll new file mode 100644 index 0000000..242b0cc Binary files /dev/null and b/addons/limboai/bin/liblimboai.windows.template_release.x86_64.dll differ diff --git a/addons/limboai/bin/limboai.gdextension b/addons/limboai/bin/limboai.gdextension new file mode 100644 index 0000000..50915a5 --- /dev/null +++ b/addons/limboai/bin/limboai.gdextension @@ -0,0 +1,100 @@ +[configuration] + +entry_symbol = "limboai_init" +compatibility_minimum = "4.2" + +[libraries] + +macos.debug = "res://addons/limboai/bin/liblimboai.macos.editor.framework" +macos.release = "res://addons/limboai/bin/liblimboai.macos.template_release.framework" +windows.debug.x86_32 = "res://addons/limboai/bin/liblimboai.windows.editor.x86_32.dll" +windows.release.x86_32 = "res://addons/limboai/bin/liblimboai.windows.template_release.x86_32.dll" +windows.debug.x86_64 = "res://addons/limboai/bin/liblimboai.windows.editor.x86_64.dll" +windows.release.x86_64 = "res://addons/limboai/bin/liblimboai.windows.template_release.x86_64.dll" +linux.debug.x86_64 = "res://addons/limboai/bin/liblimboai.linux.editor.x86_64.so" +linux.release.x86_64 = "res://addons/limboai/bin/liblimboai.linux.template_release.x86_64.so" +linux.debug.arm64 = "res://addons/limboai/bin/liblimboai.linux.editor.arm64.so" +linux.release.arm64 = "res://addons/limboai/bin/liblimboai.linux.template_release.arm64.so" +linux.debug.rv64 = "res://addons/limboai/bin/liblimboai.linux.editor.rv64.so" +linux.release.rv64 = "res://addons/limboai/bin/liblimboai.linux.template_release.rv64.so" +android.debug.arm64 = "res://addons/limboai/bin/liblimboai.android.template_debug.arm64.so" +android.release.arm64 = "res://addons/limboai/bin/liblimboai.android.template_release.arm64.so" +android.debug.arm32 = "res://addons/limboai/bin/liblimboai.android.template_debug.arm32.so" +android.release.arm32 = "res://addons/limboai/bin/liblimboai.android.template_release.arm32.so" +android.debug.x86_64 = "res://addons/limboai/bin/liblimboai.android.template_debug.x86_64.so" +android.release.x86_64 = "res://addons/limboai/bin/liblimboai.android.template_release.x86_64.so" +android.debug.x86_32 = "res://addons/limboai/bin/liblimboai.android.template_debug.x86_32.so" +android.release.x86_32 = "res://addons/limboai/bin/liblimboai.android.template_release.x86_32.so" +ios.release.arm64 = "res://addons/limboai/bin/liblimboai.ios.template_release.arm64.dylib" +ios.debug.arm64 = "res://addons/limboai/bin/liblimboai.ios.template_debug.arm64.dylib" +ios.release.simulator = "res://addons/limboai/bin/liblimboai.ios.template_release.universal.dylib" +ios.debug.simulator = "res://addons/limboai/bin/liblimboai.ios.template_debug.universal.dylib" +web.debug.wasm32 = "res://addons/limboai/bin/liblimboai.web.template_debug.wasm32.wasm" +web.release.wasm32 = "res://addons/limboai/bin/liblimboai.web.template_release.wasm32.wasm" + +[icons] + +BTAction = "res://addons/limboai/icons/BTAction.svg" +BTAlwaysFail = "res://addons/limboai/icons/BTAlwaysFail.svg" +BTAlwaysSucceed = "res://addons/limboai/icons/BTAlwaysSucceed.svg" +BTAwaitAnimation = "res://addons/limboai/icons/BTAwaitAnimation.svg" +BTCallMethod = "res://addons/limboai/icons/BTCallMethod.svg" +BTCheckAgentProperty = "res://addons/limboai/icons/BTCheckAgentProperty.svg" +BTCheckTrigger = "res://addons/limboai/icons/BTCheckTrigger.svg" +BTCheckVar = "res://addons/limboai/icons/BTCheckVar.svg" +BTComment = "res://addons/limboai/icons/BTComment.svg" +BTCondition = "res://addons/limboai/icons/BTCondition.svg" +BTConsolePrint = "res://addons/limboai/icons/BTConsolePrint.svg" +BTCooldown = "res://addons/limboai/icons/BTCooldown.svg" +BTDecorator = "res://addons/limboai/icons/BTDecorator.svg" +BTDelay = "res://addons/limboai/icons/BTDelay.svg" +BTDynamicSelector = "res://addons/limboai/icons/BTDynamicSelector.svg" +BTDynamicSequence = "res://addons/limboai/icons/BTDynamicSequence.svg" +BTEvaluateExpression = "res://addons/limboai/icons/BTEvaluateExpression.svg" +BTFail = "res://addons/limboai/icons/BTFail.svg" +BTForEach = "res://addons/limboai/icons/BTForEach.svg" +BTInvert = "res://addons/limboai/icons/BTInvert.svg" +BTNewScope = "res://addons/limboai/icons/BTNewScope.svg" +BTParallel = "res://addons/limboai/icons/BTParallel.svg" +BTPauseAnimation = "res://addons/limboai/icons/BTPauseAnimation.svg" +BTPlayAnimation = "res://addons/limboai/icons/BTPlayAnimation.svg" +BTPlayer = "res://addons/limboai/icons/BTPlayer.svg" +BTProbability = "res://addons/limboai/icons/BTProbability.svg" +BTProbabilitySelector = "res://addons/limboai/icons/BTProbabilitySelector.svg" +BTRandomSelector = "res://addons/limboai/icons/BTRandomSelector.svg" +BTRandomSequence = "res://addons/limboai/icons/BTRandomSequence.svg" +BTRandomWait = "res://addons/limboai/icons/BTRandomWait.svg" +BTRepeat = "res://addons/limboai/icons/BTRepeat.svg" +BTRepeatUntilFailure = "res://addons/limboai/icons/BTRepeatUntilFailure.svg" +BTRepeatUntilSuccess = "res://addons/limboai/icons/BTRepeatUntilSuccess.svg" +BTRunLimit = "res://addons/limboai/icons/BTRunLimit.svg" +BTSelector = "res://addons/limboai/icons/BTSelector.svg" +BTSequence = "res://addons/limboai/icons/BTSequence.svg" +BTSetAgentProperty = "res://addons/limboai/icons/BTSetAgentProperty.svg" +BTSetVar = "res://addons/limboai/icons/BTSetVar.svg" +BTState = "res://addons/limboai/icons/BTState.svg" +BTStopAnimation = "res://addons/limboai/icons/BTStopAnimation.svg" +BTSubtree = "res://addons/limboai/icons/BTSubtree.svg" +BTTimeLimit = "res://addons/limboai/icons/BTTimeLimit.svg" +BTWait = "res://addons/limboai/icons/BTWait.svg" +BTWaitTicks = "res://addons/limboai/icons/BTWaitTicks.svg" +BehaviorTree = "res://addons/limboai/icons/BehaviorTree.svg" +BehaviorTreeView = "res://addons/limboai/icons/BehaviorTreeView.svg" +BlackboardPlan = "res://addons/limboai/icons/BlackboardPlan.svg" +LimboAI = "res://addons/limboai/icons/LimboAI.svg" +LimboDeselectAll = "res://addons/limboai/icons/LimboDeselectAll.svg" +LimboEditBlackboard = "res://addons/limboai/icons/LimboEditBlackboard.svg" +LimboExtraBlackboard = "res://addons/limboai/icons/LimboExtraBlackboard.svg" +LimboExtraClock = "res://addons/limboai/icons/LimboExtraClock.svg" +LimboExtraVariable = "res://addons/limboai/icons/LimboExtraVariable.svg" +LimboExtractSubtree = "res://addons/limboai/icons/LimboExtractSubtree.svg" +LimboHSM = "res://addons/limboai/icons/LimboHSM.svg" +LimboPercent = "res://addons/limboai/icons/LimboPercent.svg" +LimboSelectAll = "res://addons/limboai/icons/LimboSelectAll.svg" +LimboState = "res://addons/limboai/icons/LimboState.svg" +LimboVarAdd = "res://addons/limboai/icons/LimboVarAdd.svg" +LimboVarEmpty = "res://addons/limboai/icons/LimboVarEmpty.svg" +LimboVarError = "res://addons/limboai/icons/LimboVarError.svg" +LimboVarExists = "res://addons/limboai/icons/LimboVarExists.svg" +LimboVarNotFound = "res://addons/limboai/icons/LimboVarNotFound.svg" +LimboVarPrivate = "res://addons/limboai/icons/LimboVarPrivate.svg" diff --git a/addons/limboai/icons/BTAction.svg b/addons/limboai/icons/BTAction.svg new file mode 100644 index 0000000..997ebbc --- /dev/null +++ b/addons/limboai/icons/BTAction.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTAction.svg.import b/addons/limboai/icons/BTAction.svg.import new file mode 100644 index 0000000..936f5b1 --- /dev/null +++ b/addons/limboai/icons/BTAction.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://csifn6ib3bfag" +path="res://.godot/imported/BTAction.svg-a43c04a25802778fc1e8d98b5915e67c.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTAction.svg" +dest_files=["res://.godot/imported/BTAction.svg-a43c04a25802778fc1e8d98b5915e67c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTAlwaysFail.svg b/addons/limboai/icons/BTAlwaysFail.svg new file mode 100644 index 0000000..7be2920 --- /dev/null +++ b/addons/limboai/icons/BTAlwaysFail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTAlwaysFail.svg.import b/addons/limboai/icons/BTAlwaysFail.svg.import new file mode 100644 index 0000000..e69460f --- /dev/null +++ b/addons/limboai/icons/BTAlwaysFail.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://drn04uxowwp8j" +path="res://.godot/imported/BTAlwaysFail.svg-9a4e083bd8ff0d6d8240b50ae0d4cea0.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTAlwaysFail.svg" +dest_files=["res://.godot/imported/BTAlwaysFail.svg-9a4e083bd8ff0d6d8240b50ae0d4cea0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTAlwaysSucceed.svg b/addons/limboai/icons/BTAlwaysSucceed.svg new file mode 100644 index 0000000..248882f --- /dev/null +++ b/addons/limboai/icons/BTAlwaysSucceed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTAlwaysSucceed.svg.import b/addons/limboai/icons/BTAlwaysSucceed.svg.import new file mode 100644 index 0000000..3bdb9b0 --- /dev/null +++ b/addons/limboai/icons/BTAlwaysSucceed.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bjj8rrfviour3" +path="res://.godot/imported/BTAlwaysSucceed.svg-c8181e2fd85d1e2ad00a6c8e813e7a94.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTAlwaysSucceed.svg" +dest_files=["res://.godot/imported/BTAlwaysSucceed.svg-c8181e2fd85d1e2ad00a6c8e813e7a94.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTAwaitAnimation.svg b/addons/limboai/icons/BTAwaitAnimation.svg new file mode 100644 index 0000000..6bb4cd1 --- /dev/null +++ b/addons/limboai/icons/BTAwaitAnimation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTAwaitAnimation.svg.import b/addons/limboai/icons/BTAwaitAnimation.svg.import new file mode 100644 index 0000000..9af8912 --- /dev/null +++ b/addons/limboai/icons/BTAwaitAnimation.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cl86rct18wlng" +path="res://.godot/imported/BTAwaitAnimation.svg-d8d736b3e349e2f77119fde575996909.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTAwaitAnimation.svg" +dest_files=["res://.godot/imported/BTAwaitAnimation.svg-d8d736b3e349e2f77119fde575996909.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTCallMethod.svg b/addons/limboai/icons/BTCallMethod.svg new file mode 100644 index 0000000..8ed7e65 --- /dev/null +++ b/addons/limboai/icons/BTCallMethod.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTCallMethod.svg.import b/addons/limboai/icons/BTCallMethod.svg.import new file mode 100644 index 0000000..1c78694 --- /dev/null +++ b/addons/limboai/icons/BTCallMethod.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dkm3ixamy3vh0" +path="res://.godot/imported/BTCallMethod.svg-f41bac2a2119be3591af9424d2c32d9a.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTCallMethod.svg" +dest_files=["res://.godot/imported/BTCallMethod.svg-f41bac2a2119be3591af9424d2c32d9a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTCheckAgentProperty.svg b/addons/limboai/icons/BTCheckAgentProperty.svg new file mode 100644 index 0000000..6c869c3 --- /dev/null +++ b/addons/limboai/icons/BTCheckAgentProperty.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTCheckAgentProperty.svg.import b/addons/limboai/icons/BTCheckAgentProperty.svg.import new file mode 100644 index 0000000..60433ac --- /dev/null +++ b/addons/limboai/icons/BTCheckAgentProperty.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://vl3g7c882dui" +path="res://.godot/imported/BTCheckAgentProperty.svg-2ed4c1d109d23a5287ed6f1262e23f15.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTCheckAgentProperty.svg" +dest_files=["res://.godot/imported/BTCheckAgentProperty.svg-2ed4c1d109d23a5287ed6f1262e23f15.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTCheckTrigger.svg b/addons/limboai/icons/BTCheckTrigger.svg new file mode 100644 index 0000000..2a59673 --- /dev/null +++ b/addons/limboai/icons/BTCheckTrigger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTCheckTrigger.svg.import b/addons/limboai/icons/BTCheckTrigger.svg.import new file mode 100644 index 0000000..6b7f101 --- /dev/null +++ b/addons/limboai/icons/BTCheckTrigger.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cncibjaw3hb64" +path="res://.godot/imported/BTCheckTrigger.svg-79349468c66ee41b0a126720f8ecda55.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTCheckTrigger.svg" +dest_files=["res://.godot/imported/BTCheckTrigger.svg-79349468c66ee41b0a126720f8ecda55.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTCheckVar.svg b/addons/limboai/icons/BTCheckVar.svg new file mode 100644 index 0000000..150a4f2 --- /dev/null +++ b/addons/limboai/icons/BTCheckVar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTCheckVar.svg.import b/addons/limboai/icons/BTCheckVar.svg.import new file mode 100644 index 0000000..be6a890 --- /dev/null +++ b/addons/limboai/icons/BTCheckVar.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dogme2t8olgoi" +path="res://.godot/imported/BTCheckVar.svg-7b3af543bb4450e9a6d56df48f06064e.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTCheckVar.svg" +dest_files=["res://.godot/imported/BTCheckVar.svg-7b3af543bb4450e9a6d56df48f06064e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTComment.svg b/addons/limboai/icons/BTComment.svg new file mode 100644 index 0000000..66699d4 --- /dev/null +++ b/addons/limboai/icons/BTComment.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTComment.svg.import b/addons/limboai/icons/BTComment.svg.import new file mode 100644 index 0000000..f55d9ac --- /dev/null +++ b/addons/limboai/icons/BTComment.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://q8ybo6jn3qtu" +path="res://.godot/imported/BTComment.svg-84a811fb1f7563bc02c1f584b4085d5c.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTComment.svg" +dest_files=["res://.godot/imported/BTComment.svg-84a811fb1f7563bc02c1f584b4085d5c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTCondition.svg b/addons/limboai/icons/BTCondition.svg new file mode 100644 index 0000000..7c00015 --- /dev/null +++ b/addons/limboai/icons/BTCondition.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTCondition.svg.import b/addons/limboai/icons/BTCondition.svg.import new file mode 100644 index 0000000..c4e0f2b --- /dev/null +++ b/addons/limboai/icons/BTCondition.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ja68qegww6v1" +path="res://.godot/imported/BTCondition.svg-546aa4361ccfe650098b5f6867299d1a.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTCondition.svg" +dest_files=["res://.godot/imported/BTCondition.svg-546aa4361ccfe650098b5f6867299d1a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTConsolePrint.svg b/addons/limboai/icons/BTConsolePrint.svg new file mode 100644 index 0000000..cee42eb --- /dev/null +++ b/addons/limboai/icons/BTConsolePrint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTConsolePrint.svg.import b/addons/limboai/icons/BTConsolePrint.svg.import new file mode 100644 index 0000000..de62f8b --- /dev/null +++ b/addons/limboai/icons/BTConsolePrint.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://vd438ornqlag" +path="res://.godot/imported/BTConsolePrint.svg-4190426bb73da16c143878c233af4bc3.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTConsolePrint.svg" +dest_files=["res://.godot/imported/BTConsolePrint.svg-4190426bb73da16c143878c233af4bc3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTCooldown.svg b/addons/limboai/icons/BTCooldown.svg new file mode 100644 index 0000000..2c6a237 --- /dev/null +++ b/addons/limboai/icons/BTCooldown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTCooldown.svg.import b/addons/limboai/icons/BTCooldown.svg.import new file mode 100644 index 0000000..79f0cfb --- /dev/null +++ b/addons/limboai/icons/BTCooldown.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c1ctsvvi5pb4o" +path="res://.godot/imported/BTCooldown.svg-b168adee5e8762abc08102408ea327d5.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTCooldown.svg" +dest_files=["res://.godot/imported/BTCooldown.svg-b168adee5e8762abc08102408ea327d5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTDecorator.svg b/addons/limboai/icons/BTDecorator.svg new file mode 100644 index 0000000..faac1ab --- /dev/null +++ b/addons/limboai/icons/BTDecorator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTDecorator.svg.import b/addons/limboai/icons/BTDecorator.svg.import new file mode 100644 index 0000000..c99a967 --- /dev/null +++ b/addons/limboai/icons/BTDecorator.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://du7tqnydsy4dl" +path="res://.godot/imported/BTDecorator.svg-dae9ebd6f4667ba4d2ac62518ef141d6.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTDecorator.svg" +dest_files=["res://.godot/imported/BTDecorator.svg-dae9ebd6f4667ba4d2ac62518ef141d6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTDelay.svg b/addons/limboai/icons/BTDelay.svg new file mode 100644 index 0000000..2c6a237 --- /dev/null +++ b/addons/limboai/icons/BTDelay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTDelay.svg.import b/addons/limboai/icons/BTDelay.svg.import new file mode 100644 index 0000000..826f0a0 --- /dev/null +++ b/addons/limboai/icons/BTDelay.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c1pwxmpud32mm" +path="res://.godot/imported/BTDelay.svg-1eb814224ebee27c668e10a73d85b845.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTDelay.svg" +dest_files=["res://.godot/imported/BTDelay.svg-1eb814224ebee27c668e10a73d85b845.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTDynamicSelector.svg b/addons/limboai/icons/BTDynamicSelector.svg new file mode 100644 index 0000000..b9c8f02 --- /dev/null +++ b/addons/limboai/icons/BTDynamicSelector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTDynamicSelector.svg.import b/addons/limboai/icons/BTDynamicSelector.svg.import new file mode 100644 index 0000000..e36a81c --- /dev/null +++ b/addons/limboai/icons/BTDynamicSelector.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dl2e6h2n41774" +path="res://.godot/imported/BTDynamicSelector.svg-d88a1aa9fb8d8826b74e69dad4c99f54.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTDynamicSelector.svg" +dest_files=["res://.godot/imported/BTDynamicSelector.svg-d88a1aa9fb8d8826b74e69dad4c99f54.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTDynamicSequence.svg b/addons/limboai/icons/BTDynamicSequence.svg new file mode 100644 index 0000000..86c8f54 --- /dev/null +++ b/addons/limboai/icons/BTDynamicSequence.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTDynamicSequence.svg.import b/addons/limboai/icons/BTDynamicSequence.svg.import new file mode 100644 index 0000000..f9fb440 --- /dev/null +++ b/addons/limboai/icons/BTDynamicSequence.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c6tkjss41nlxn" +path="res://.godot/imported/BTDynamicSequence.svg-d2b6a83c37a1553bc168a9837ae0cb1d.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTDynamicSequence.svg" +dest_files=["res://.godot/imported/BTDynamicSequence.svg-d2b6a83c37a1553bc168a9837ae0cb1d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTEvaluateExpression.svg b/addons/limboai/icons/BTEvaluateExpression.svg new file mode 100644 index 0000000..d1cf36f --- /dev/null +++ b/addons/limboai/icons/BTEvaluateExpression.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTEvaluateExpression.svg.import b/addons/limboai/icons/BTEvaluateExpression.svg.import new file mode 100644 index 0000000..1b1a48d --- /dev/null +++ b/addons/limboai/icons/BTEvaluateExpression.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bfug5mtpo1orw" +path="res://.godot/imported/BTEvaluateExpression.svg-d9edc0d3cf9dd54c6a34ffc8a23bf8e3.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTEvaluateExpression.svg" +dest_files=["res://.godot/imported/BTEvaluateExpression.svg-d9edc0d3cf9dd54c6a34ffc8a23bf8e3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTFail.svg b/addons/limboai/icons/BTFail.svg new file mode 100644 index 0000000..7be2920 --- /dev/null +++ b/addons/limboai/icons/BTFail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTFail.svg.import b/addons/limboai/icons/BTFail.svg.import new file mode 100644 index 0000000..51c0940 --- /dev/null +++ b/addons/limboai/icons/BTFail.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bxkdnsya4y3hr" +path="res://.godot/imported/BTFail.svg-0440819265455ee47b2cf2ca8f1b8018.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTFail.svg" +dest_files=["res://.godot/imported/BTFail.svg-0440819265455ee47b2cf2ca8f1b8018.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTForEach.svg b/addons/limboai/icons/BTForEach.svg new file mode 100644 index 0000000..819c0ed --- /dev/null +++ b/addons/limboai/icons/BTForEach.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTForEach.svg.import b/addons/limboai/icons/BTForEach.svg.import new file mode 100644 index 0000000..1d6bf2c --- /dev/null +++ b/addons/limboai/icons/BTForEach.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bh2tp63bmvyku" +path="res://.godot/imported/BTForEach.svg-4ca6daee422cda100144e3414286df7f.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTForEach.svg" +dest_files=["res://.godot/imported/BTForEach.svg-4ca6daee422cda100144e3414286df7f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTInvert.svg b/addons/limboai/icons/BTInvert.svg new file mode 100644 index 0000000..31be0d5 --- /dev/null +++ b/addons/limboai/icons/BTInvert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTInvert.svg.import b/addons/limboai/icons/BTInvert.svg.import new file mode 100644 index 0000000..91a97a2 --- /dev/null +++ b/addons/limboai/icons/BTInvert.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bf1qwuavp48o5" +path="res://.godot/imported/BTInvert.svg-19687b5c798f968b9610763066baa2a0.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTInvert.svg" +dest_files=["res://.godot/imported/BTInvert.svg-19687b5c798f968b9610763066baa2a0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTNewScope.svg b/addons/limboai/icons/BTNewScope.svg new file mode 100644 index 0000000..598d39b --- /dev/null +++ b/addons/limboai/icons/BTNewScope.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTNewScope.svg.import b/addons/limboai/icons/BTNewScope.svg.import new file mode 100644 index 0000000..8875406 --- /dev/null +++ b/addons/limboai/icons/BTNewScope.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dkblguri8go3t" +path="res://.godot/imported/BTNewScope.svg-d536a90c30773badb76653d8c928cfe0.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTNewScope.svg" +dest_files=["res://.godot/imported/BTNewScope.svg-d536a90c30773badb76653d8c928cfe0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTParallel.svg b/addons/limboai/icons/BTParallel.svg new file mode 100644 index 0000000..7ee727a --- /dev/null +++ b/addons/limboai/icons/BTParallel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTParallel.svg.import b/addons/limboai/icons/BTParallel.svg.import new file mode 100644 index 0000000..ac64865 --- /dev/null +++ b/addons/limboai/icons/BTParallel.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ddjgkxq6rbwu5" +path="res://.godot/imported/BTParallel.svg-54126e7f374b26a890ddd82c580db45c.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTParallel.svg" +dest_files=["res://.godot/imported/BTParallel.svg-54126e7f374b26a890ddd82c580db45c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTPauseAnimation.svg b/addons/limboai/icons/BTPauseAnimation.svg new file mode 100644 index 0000000..d0878cd --- /dev/null +++ b/addons/limboai/icons/BTPauseAnimation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTPauseAnimation.svg.import b/addons/limboai/icons/BTPauseAnimation.svg.import new file mode 100644 index 0000000..88f20f4 --- /dev/null +++ b/addons/limboai/icons/BTPauseAnimation.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c4lv2cus21ys0" +path="res://.godot/imported/BTPauseAnimation.svg-e1bc0cf7bcd45a0faa047192242d174b.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTPauseAnimation.svg" +dest_files=["res://.godot/imported/BTPauseAnimation.svg-e1bc0cf7bcd45a0faa047192242d174b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTPlayAnimation.svg b/addons/limboai/icons/BTPlayAnimation.svg new file mode 100644 index 0000000..d387bf6 --- /dev/null +++ b/addons/limboai/icons/BTPlayAnimation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTPlayAnimation.svg.import b/addons/limboai/icons/BTPlayAnimation.svg.import new file mode 100644 index 0000000..c2138c3 --- /dev/null +++ b/addons/limboai/icons/BTPlayAnimation.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://o4vi45kokhkm" +path="res://.godot/imported/BTPlayAnimation.svg-8821f3b3413b9b328414add0e843468c.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTPlayAnimation.svg" +dest_files=["res://.godot/imported/BTPlayAnimation.svg-8821f3b3413b9b328414add0e843468c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTPlayer.svg b/addons/limboai/icons/BTPlayer.svg new file mode 100644 index 0000000..7a874c7 --- /dev/null +++ b/addons/limboai/icons/BTPlayer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTPlayer.svg.import b/addons/limboai/icons/BTPlayer.svg.import new file mode 100644 index 0000000..6b695d1 --- /dev/null +++ b/addons/limboai/icons/BTPlayer.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b6qnuqqrpv8k" +path="res://.godot/imported/BTPlayer.svg-ed7adc3cf4a0f3daa1e17a1a77e9a3a2.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTPlayer.svg" +dest_files=["res://.godot/imported/BTPlayer.svg-ed7adc3cf4a0f3daa1e17a1a77e9a3a2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTProbability.svg b/addons/limboai/icons/BTProbability.svg new file mode 100644 index 0000000..b1a90d9 --- /dev/null +++ b/addons/limboai/icons/BTProbability.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTProbability.svg.import b/addons/limboai/icons/BTProbability.svg.import new file mode 100644 index 0000000..a968465 --- /dev/null +++ b/addons/limboai/icons/BTProbability.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://m0efsybbpsek" +path="res://.godot/imported/BTProbability.svg-f691fbf51ca49bc268a17742b1e04985.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTProbability.svg" +dest_files=["res://.godot/imported/BTProbability.svg-f691fbf51ca49bc268a17742b1e04985.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTProbabilitySelector.svg b/addons/limboai/icons/BTProbabilitySelector.svg new file mode 100644 index 0000000..f9516a1 --- /dev/null +++ b/addons/limboai/icons/BTProbabilitySelector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTProbabilitySelector.svg.import b/addons/limboai/icons/BTProbabilitySelector.svg.import new file mode 100644 index 0000000..dbc8001 --- /dev/null +++ b/addons/limboai/icons/BTProbabilitySelector.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d10xv0ps7u44a" +path="res://.godot/imported/BTProbabilitySelector.svg-30f59f4e802f72a701d9d31f605a64f2.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTProbabilitySelector.svg" +dest_files=["res://.godot/imported/BTProbabilitySelector.svg-30f59f4e802f72a701d9d31f605a64f2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTRandomSelector.svg b/addons/limboai/icons/BTRandomSelector.svg new file mode 100644 index 0000000..6dd87d1 --- /dev/null +++ b/addons/limboai/icons/BTRandomSelector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTRandomSelector.svg.import b/addons/limboai/icons/BTRandomSelector.svg.import new file mode 100644 index 0000000..1a9dc4e --- /dev/null +++ b/addons/limboai/icons/BTRandomSelector.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dsjtxqxmv7iv2" +path="res://.godot/imported/BTRandomSelector.svg-4bae5a6e3e1affdd4952e8bff4c018ff.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTRandomSelector.svg" +dest_files=["res://.godot/imported/BTRandomSelector.svg-4bae5a6e3e1affdd4952e8bff4c018ff.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTRandomSequence.svg b/addons/limboai/icons/BTRandomSequence.svg new file mode 100644 index 0000000..ff21602 --- /dev/null +++ b/addons/limboai/icons/BTRandomSequence.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTRandomSequence.svg.import b/addons/limboai/icons/BTRandomSequence.svg.import new file mode 100644 index 0000000..da82ecb --- /dev/null +++ b/addons/limboai/icons/BTRandomSequence.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dk1wj7syve67c" +path="res://.godot/imported/BTRandomSequence.svg-85ce4b080ec904d340a807de2669110d.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTRandomSequence.svg" +dest_files=["res://.godot/imported/BTRandomSequence.svg-85ce4b080ec904d340a807de2669110d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTRandomWait.svg b/addons/limboai/icons/BTRandomWait.svg new file mode 100644 index 0000000..8174e2a --- /dev/null +++ b/addons/limboai/icons/BTRandomWait.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTRandomWait.svg.import b/addons/limboai/icons/BTRandomWait.svg.import new file mode 100644 index 0000000..7b0c485 --- /dev/null +++ b/addons/limboai/icons/BTRandomWait.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://0d54chkcu8tl" +path="res://.godot/imported/BTRandomWait.svg-14f03a0fb52c993ec1cdbb780d9dfea3.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTRandomWait.svg" +dest_files=["res://.godot/imported/BTRandomWait.svg-14f03a0fb52c993ec1cdbb780d9dfea3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTRepeat.svg b/addons/limboai/icons/BTRepeat.svg new file mode 100644 index 0000000..d937bcf --- /dev/null +++ b/addons/limboai/icons/BTRepeat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTRepeat.svg.import b/addons/limboai/icons/BTRepeat.svg.import new file mode 100644 index 0000000..4b7f7d5 --- /dev/null +++ b/addons/limboai/icons/BTRepeat.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cufqqr4t7wynk" +path="res://.godot/imported/BTRepeat.svg-ca1efcf8bdef890d4575f2bf66ba0a8d.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTRepeat.svg" +dest_files=["res://.godot/imported/BTRepeat.svg-ca1efcf8bdef890d4575f2bf66ba0a8d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTRepeatUntilFailure.svg b/addons/limboai/icons/BTRepeatUntilFailure.svg new file mode 100644 index 0000000..88b1261 --- /dev/null +++ b/addons/limboai/icons/BTRepeatUntilFailure.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTRepeatUntilFailure.svg.import b/addons/limboai/icons/BTRepeatUntilFailure.svg.import new file mode 100644 index 0000000..3261b7d --- /dev/null +++ b/addons/limboai/icons/BTRepeatUntilFailure.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d2qnqeffikk74" +path="res://.godot/imported/BTRepeatUntilFailure.svg-97ff99132cb6b229bb78050959a89118.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTRepeatUntilFailure.svg" +dest_files=["res://.godot/imported/BTRepeatUntilFailure.svg-97ff99132cb6b229bb78050959a89118.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTRepeatUntilSuccess.svg b/addons/limboai/icons/BTRepeatUntilSuccess.svg new file mode 100644 index 0000000..9087ce4 --- /dev/null +++ b/addons/limboai/icons/BTRepeatUntilSuccess.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTRepeatUntilSuccess.svg.import b/addons/limboai/icons/BTRepeatUntilSuccess.svg.import new file mode 100644 index 0000000..bfe9d0e --- /dev/null +++ b/addons/limboai/icons/BTRepeatUntilSuccess.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://1hecy64mwa4s" +path="res://.godot/imported/BTRepeatUntilSuccess.svg-160e74b6885a57a745db349d6f7004a8.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTRepeatUntilSuccess.svg" +dest_files=["res://.godot/imported/BTRepeatUntilSuccess.svg-160e74b6885a57a745db349d6f7004a8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTRunLimit.svg b/addons/limboai/icons/BTRunLimit.svg new file mode 100644 index 0000000..1ac7fa1 --- /dev/null +++ b/addons/limboai/icons/BTRunLimit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTRunLimit.svg.import b/addons/limboai/icons/BTRunLimit.svg.import new file mode 100644 index 0000000..0f14f39 --- /dev/null +++ b/addons/limboai/icons/BTRunLimit.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bc8dnsep3dpio" +path="res://.godot/imported/BTRunLimit.svg-eb80a597bf9102a626f8c0e9663703d1.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTRunLimit.svg" +dest_files=["res://.godot/imported/BTRunLimit.svg-eb80a597bf9102a626f8c0e9663703d1.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTSelector.svg b/addons/limboai/icons/BTSelector.svg new file mode 100644 index 0000000..d7cafe5 --- /dev/null +++ b/addons/limboai/icons/BTSelector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTSelector.svg.import b/addons/limboai/icons/BTSelector.svg.import new file mode 100644 index 0000000..fe49e20 --- /dev/null +++ b/addons/limboai/icons/BTSelector.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://brx2og56pgjdm" +path="res://.godot/imported/BTSelector.svg-859c7746bc77c632d2a60052d2e96cf0.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTSelector.svg" +dest_files=["res://.godot/imported/BTSelector.svg-859c7746bc77c632d2a60052d2e96cf0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTSequence.svg b/addons/limboai/icons/BTSequence.svg new file mode 100644 index 0000000..7eb8f6f --- /dev/null +++ b/addons/limboai/icons/BTSequence.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTSequence.svg.import b/addons/limboai/icons/BTSequence.svg.import new file mode 100644 index 0000000..d06180c --- /dev/null +++ b/addons/limboai/icons/BTSequence.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b76g8k2lwsiql" +path="res://.godot/imported/BTSequence.svg-3dfd257b3424273ac1ea2f8a48dab7b6.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTSequence.svg" +dest_files=["res://.godot/imported/BTSequence.svg-3dfd257b3424273ac1ea2f8a48dab7b6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTSetAgentProperty.svg b/addons/limboai/icons/BTSetAgentProperty.svg new file mode 100644 index 0000000..c92a710 --- /dev/null +++ b/addons/limboai/icons/BTSetAgentProperty.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTSetAgentProperty.svg.import b/addons/limboai/icons/BTSetAgentProperty.svg.import new file mode 100644 index 0000000..aca90cc --- /dev/null +++ b/addons/limboai/icons/BTSetAgentProperty.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dejxmdjrlxw4p" +path="res://.godot/imported/BTSetAgentProperty.svg-8183ecffb47d990ae67daaad34563dc5.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTSetAgentProperty.svg" +dest_files=["res://.godot/imported/BTSetAgentProperty.svg-8183ecffb47d990ae67daaad34563dc5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTSetVar.svg b/addons/limboai/icons/BTSetVar.svg new file mode 100644 index 0000000..09f6822 --- /dev/null +++ b/addons/limboai/icons/BTSetVar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTSetVar.svg.import b/addons/limboai/icons/BTSetVar.svg.import new file mode 100644 index 0000000..25bae43 --- /dev/null +++ b/addons/limboai/icons/BTSetVar.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c7hpnuoq5ysre" +path="res://.godot/imported/BTSetVar.svg-a8c4f135c2df6bc3f587cbd9f1fe2d95.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTSetVar.svg" +dest_files=["res://.godot/imported/BTSetVar.svg-a8c4f135c2df6bc3f587cbd9f1fe2d95.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTState.svg b/addons/limboai/icons/BTState.svg new file mode 100644 index 0000000..7a874c7 --- /dev/null +++ b/addons/limboai/icons/BTState.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTState.svg.import b/addons/limboai/icons/BTState.svg.import new file mode 100644 index 0000000..dc98758 --- /dev/null +++ b/addons/limboai/icons/BTState.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://baruouu456oos" +path="res://.godot/imported/BTState.svg-71220d904fcc42cc20dd0af8145f86a0.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTState.svg" +dest_files=["res://.godot/imported/BTState.svg-71220d904fcc42cc20dd0af8145f86a0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTStopAnimation.svg b/addons/limboai/icons/BTStopAnimation.svg new file mode 100644 index 0000000..973b542 --- /dev/null +++ b/addons/limboai/icons/BTStopAnimation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTStopAnimation.svg.import b/addons/limboai/icons/BTStopAnimation.svg.import new file mode 100644 index 0000000..41f0ec7 --- /dev/null +++ b/addons/limboai/icons/BTStopAnimation.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://by2uf64rd4d0j" +path="res://.godot/imported/BTStopAnimation.svg-ea88498cd747a6218f7853f6be3ded34.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTStopAnimation.svg" +dest_files=["res://.godot/imported/BTStopAnimation.svg-ea88498cd747a6218f7853f6be3ded34.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTSubtree.svg b/addons/limboai/icons/BTSubtree.svg new file mode 100644 index 0000000..e95ffee --- /dev/null +++ b/addons/limboai/icons/BTSubtree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTSubtree.svg.import b/addons/limboai/icons/BTSubtree.svg.import new file mode 100644 index 0000000..9fc91d8 --- /dev/null +++ b/addons/limboai/icons/BTSubtree.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://nyw10tyoiuns" +path="res://.godot/imported/BTSubtree.svg-aa8f2ece5e71aca9132a08c7af1c1ce5.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTSubtree.svg" +dest_files=["res://.godot/imported/BTSubtree.svg-aa8f2ece5e71aca9132a08c7af1c1ce5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTTimeLimit.svg b/addons/limboai/icons/BTTimeLimit.svg new file mode 100644 index 0000000..2c6a237 --- /dev/null +++ b/addons/limboai/icons/BTTimeLimit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTTimeLimit.svg.import b/addons/limboai/icons/BTTimeLimit.svg.import new file mode 100644 index 0000000..12cf285 --- /dev/null +++ b/addons/limboai/icons/BTTimeLimit.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cu3jkagvctvi3" +path="res://.godot/imported/BTTimeLimit.svg-ea3ca26eeb5c2b59f3fdb6e806985f3b.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTTimeLimit.svg" +dest_files=["res://.godot/imported/BTTimeLimit.svg-ea3ca26eeb5c2b59f3fdb6e806985f3b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTWait.svg b/addons/limboai/icons/BTWait.svg new file mode 100644 index 0000000..8174e2a --- /dev/null +++ b/addons/limboai/icons/BTWait.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTWait.svg.import b/addons/limboai/icons/BTWait.svg.import new file mode 100644 index 0000000..66cabb3 --- /dev/null +++ b/addons/limboai/icons/BTWait.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c4dxqgds4k5mo" +path="res://.godot/imported/BTWait.svg-2a5d27d0c617861f027b2e66516aa5bf.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTWait.svg" +dest_files=["res://.godot/imported/BTWait.svg-2a5d27d0c617861f027b2e66516aa5bf.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BTWaitTicks.svg b/addons/limboai/icons/BTWaitTicks.svg new file mode 100644 index 0000000..8174e2a --- /dev/null +++ b/addons/limboai/icons/BTWaitTicks.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BTWaitTicks.svg.import b/addons/limboai/icons/BTWaitTicks.svg.import new file mode 100644 index 0000000..bbd31e3 --- /dev/null +++ b/addons/limboai/icons/BTWaitTicks.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cj4wkocu2jc3" +path="res://.godot/imported/BTWaitTicks.svg-85a005f86874f6811423163f3f5673b2.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BTWaitTicks.svg" +dest_files=["res://.godot/imported/BTWaitTicks.svg-85a005f86874f6811423163f3f5673b2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BehaviorTree.svg b/addons/limboai/icons/BehaviorTree.svg new file mode 100644 index 0000000..e95ffee --- /dev/null +++ b/addons/limboai/icons/BehaviorTree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BehaviorTree.svg.import b/addons/limboai/icons/BehaviorTree.svg.import new file mode 100644 index 0000000..491dd99 --- /dev/null +++ b/addons/limboai/icons/BehaviorTree.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b4q36mvgvosow" +path="res://.godot/imported/BehaviorTree.svg-9b40a8b5e1feb368d9f11b0fb1785cca.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BehaviorTree.svg" +dest_files=["res://.godot/imported/BehaviorTree.svg-9b40a8b5e1feb368d9f11b0fb1785cca.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BehaviorTreeView.svg b/addons/limboai/icons/BehaviorTreeView.svg new file mode 100644 index 0000000..8deff60 --- /dev/null +++ b/addons/limboai/icons/BehaviorTreeView.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BehaviorTreeView.svg.import b/addons/limboai/icons/BehaviorTreeView.svg.import new file mode 100644 index 0000000..e8fa962 --- /dev/null +++ b/addons/limboai/icons/BehaviorTreeView.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cq0glhq4ee4uj" +path="res://.godot/imported/BehaviorTreeView.svg-15f9bfa321ed4a264ed8404fd13b53fc.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BehaviorTreeView.svg" +dest_files=["res://.godot/imported/BehaviorTreeView.svg-15f9bfa321ed4a264ed8404fd13b53fc.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/BlackboardPlan.svg b/addons/limboai/icons/BlackboardPlan.svg new file mode 100644 index 0000000..958fba3 --- /dev/null +++ b/addons/limboai/icons/BlackboardPlan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/BlackboardPlan.svg.import b/addons/limboai/icons/BlackboardPlan.svg.import new file mode 100644 index 0000000..1ec8e4d --- /dev/null +++ b/addons/limboai/icons/BlackboardPlan.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dqescemdcf0do" +path="res://.godot/imported/BlackboardPlan.svg-9029b7aa87de8b935d9cad63480a6a16.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/BlackboardPlan.svg" +dest_files=["res://.godot/imported/BlackboardPlan.svg-9029b7aa87de8b935d9cad63480a6a16.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboAI.svg b/addons/limboai/icons/LimboAI.svg new file mode 100644 index 0000000..54b042a --- /dev/null +++ b/addons/limboai/icons/LimboAI.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboAI.svg.import b/addons/limboai/icons/LimboAI.svg.import new file mode 100644 index 0000000..2891848 --- /dev/null +++ b/addons/limboai/icons/LimboAI.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cfoo4u2hlrscn" +path="res://.godot/imported/LimboAI.svg-06efe3b51f2fc280e33c37672e174b5e.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboAI.svg" +dest_files=["res://.godot/imported/LimboAI.svg-06efe3b51f2fc280e33c37672e174b5e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboDeselectAll.svg b/addons/limboai/icons/LimboDeselectAll.svg new file mode 100644 index 0000000..2047080 --- /dev/null +++ b/addons/limboai/icons/LimboDeselectAll.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboDeselectAll.svg.import b/addons/limboai/icons/LimboDeselectAll.svg.import new file mode 100644 index 0000000..4867777 --- /dev/null +++ b/addons/limboai/icons/LimboDeselectAll.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://darlh30k514tp" +path="res://.godot/imported/LimboDeselectAll.svg-72ebb41c0238cae163a7bf3fc821e6ad.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboDeselectAll.svg" +dest_files=["res://.godot/imported/LimboDeselectAll.svg-72ebb41c0238cae163a7bf3fc821e6ad.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboEditBlackboard.svg b/addons/limboai/icons/LimboEditBlackboard.svg new file mode 100644 index 0000000..45ffb92 --- /dev/null +++ b/addons/limboai/icons/LimboEditBlackboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboEditBlackboard.svg.import b/addons/limboai/icons/LimboEditBlackboard.svg.import new file mode 100644 index 0000000..0a6e4bc --- /dev/null +++ b/addons/limboai/icons/LimboEditBlackboard.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://osq7kym6q22m" +path="res://.godot/imported/LimboEditBlackboard.svg-eacd7cf985d654974a99a4009ffcc125.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboEditBlackboard.svg" +dest_files=["res://.godot/imported/LimboEditBlackboard.svg-eacd7cf985d654974a99a4009ffcc125.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboExtraBlackboard.svg b/addons/limboai/icons/LimboExtraBlackboard.svg new file mode 100644 index 0000000..09f6822 --- /dev/null +++ b/addons/limboai/icons/LimboExtraBlackboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboExtraBlackboard.svg.import b/addons/limboai/icons/LimboExtraBlackboard.svg.import new file mode 100644 index 0000000..8925540 --- /dev/null +++ b/addons/limboai/icons/LimboExtraBlackboard.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bolwxy28idi8n" +path="res://.godot/imported/LimboExtraBlackboard.svg-45ef3f1dea682b1da438186cfcc0f47b.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboExtraBlackboard.svg" +dest_files=["res://.godot/imported/LimboExtraBlackboard.svg-45ef3f1dea682b1da438186cfcc0f47b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboExtraClock.svg b/addons/limboai/icons/LimboExtraClock.svg new file mode 100644 index 0000000..a3f536a --- /dev/null +++ b/addons/limboai/icons/LimboExtraClock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboExtraClock.svg.import b/addons/limboai/icons/LimboExtraClock.svg.import new file mode 100644 index 0000000..f1f3b74 --- /dev/null +++ b/addons/limboai/icons/LimboExtraClock.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bhut3tokd1621" +path="res://.godot/imported/LimboExtraClock.svg-840321103249948265bce58e6fb69483.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboExtraClock.svg" +dest_files=["res://.godot/imported/LimboExtraClock.svg-840321103249948265bce58e6fb69483.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboExtraVariable.svg b/addons/limboai/icons/LimboExtraVariable.svg new file mode 100644 index 0000000..06780f0 --- /dev/null +++ b/addons/limboai/icons/LimboExtraVariable.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboExtraVariable.svg.import b/addons/limboai/icons/LimboExtraVariable.svg.import new file mode 100644 index 0000000..c35e79e --- /dev/null +++ b/addons/limboai/icons/LimboExtraVariable.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c3xj2ji3knnkr" +path="res://.godot/imported/LimboExtraVariable.svg-dc718672cf9e469886aa48452fdda7b0.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboExtraVariable.svg" +dest_files=["res://.godot/imported/LimboExtraVariable.svg-dc718672cf9e469886aa48452fdda7b0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboExtractSubtree.svg b/addons/limboai/icons/LimboExtractSubtree.svg new file mode 100644 index 0000000..c3c83a2 --- /dev/null +++ b/addons/limboai/icons/LimboExtractSubtree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboExtractSubtree.svg.import b/addons/limboai/icons/LimboExtractSubtree.svg.import new file mode 100644 index 0000000..9019338 --- /dev/null +++ b/addons/limboai/icons/LimboExtractSubtree.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bnbvo3g0ei4i3" +path="res://.godot/imported/LimboExtractSubtree.svg-84e8d198d3be4b2b8d625d3621368079.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboExtractSubtree.svg" +dest_files=["res://.godot/imported/LimboExtractSubtree.svg-84e8d198d3be4b2b8d625d3621368079.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboHSM.svg b/addons/limboai/icons/LimboHSM.svg new file mode 100644 index 0000000..095cfd4 --- /dev/null +++ b/addons/limboai/icons/LimboHSM.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboHSM.svg.import b/addons/limboai/icons/LimboHSM.svg.import new file mode 100644 index 0000000..d2bb8bf --- /dev/null +++ b/addons/limboai/icons/LimboHSM.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dhvo1gpde1wr7" +path="res://.godot/imported/LimboHSM.svg-28cca67d246d589dd15402abd78a1ec2.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboHSM.svg" +dest_files=["res://.godot/imported/LimboHSM.svg-28cca67d246d589dd15402abd78a1ec2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboPercent.svg b/addons/limboai/icons/LimboPercent.svg new file mode 100644 index 0000000..8f60917 --- /dev/null +++ b/addons/limboai/icons/LimboPercent.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboPercent.svg.import b/addons/limboai/icons/LimboPercent.svg.import new file mode 100644 index 0000000..b461ec2 --- /dev/null +++ b/addons/limboai/icons/LimboPercent.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ch7j58ffmyw1q" +path="res://.godot/imported/LimboPercent.svg-00733fc19fb3bbe7f8396b1f07a89da0.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboPercent.svg" +dest_files=["res://.godot/imported/LimboPercent.svg-00733fc19fb3bbe7f8396b1f07a89da0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboSelectAll.svg b/addons/limboai/icons/LimboSelectAll.svg new file mode 100644 index 0000000..fd3df37 --- /dev/null +++ b/addons/limboai/icons/LimboSelectAll.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboSelectAll.svg.import b/addons/limboai/icons/LimboSelectAll.svg.import new file mode 100644 index 0000000..f98d88f --- /dev/null +++ b/addons/limboai/icons/LimboSelectAll.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bi2fdmdrka5ni" +path="res://.godot/imported/LimboSelectAll.svg-db7b91d0d0b530b8e41c9d3772e60fab.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboSelectAll.svg" +dest_files=["res://.godot/imported/LimboSelectAll.svg-db7b91d0d0b530b8e41c9d3772e60fab.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboState.svg b/addons/limboai/icons/LimboState.svg new file mode 100644 index 0000000..dd8e765 --- /dev/null +++ b/addons/limboai/icons/LimboState.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboState.svg.import b/addons/limboai/icons/LimboState.svg.import new file mode 100644 index 0000000..e15d444 --- /dev/null +++ b/addons/limboai/icons/LimboState.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://web03dtqqdv2" +path="res://.godot/imported/LimboState.svg-b1db06d5ed3101ee6256deae4330f6b7.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboState.svg" +dest_files=["res://.godot/imported/LimboState.svg-b1db06d5ed3101ee6256deae4330f6b7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboVarAdd.svg b/addons/limboai/icons/LimboVarAdd.svg new file mode 100644 index 0000000..b2910a0 --- /dev/null +++ b/addons/limboai/icons/LimboVarAdd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboVarAdd.svg.import b/addons/limboai/icons/LimboVarAdd.svg.import new file mode 100644 index 0000000..3964493 --- /dev/null +++ b/addons/limboai/icons/LimboVarAdd.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bnqt520rudfxk" +path="res://.godot/imported/LimboVarAdd.svg-101bcdd036315254e4b61e13747c0788.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboVarAdd.svg" +dest_files=["res://.godot/imported/LimboVarAdd.svg-101bcdd036315254e4b61e13747c0788.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboVarEmpty.svg b/addons/limboai/icons/LimboVarEmpty.svg new file mode 100644 index 0000000..24f5088 --- /dev/null +++ b/addons/limboai/icons/LimboVarEmpty.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboVarEmpty.svg.import b/addons/limboai/icons/LimboVarEmpty.svg.import new file mode 100644 index 0000000..3a9934b --- /dev/null +++ b/addons/limboai/icons/LimboVarEmpty.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b3wdl8jgith3i" +path="res://.godot/imported/LimboVarEmpty.svg-3014256fb5cd566cab45b3327d98988d.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboVarEmpty.svg" +dest_files=["res://.godot/imported/LimboVarEmpty.svg-3014256fb5cd566cab45b3327d98988d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboVarError.svg b/addons/limboai/icons/LimboVarError.svg new file mode 100644 index 0000000..563d762 --- /dev/null +++ b/addons/limboai/icons/LimboVarError.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboVarError.svg.import b/addons/limboai/icons/LimboVarError.svg.import new file mode 100644 index 0000000..0dbdc0b --- /dev/null +++ b/addons/limboai/icons/LimboVarError.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://qnlrj2hvxp58" +path="res://.godot/imported/LimboVarError.svg-d9f1ab3e5b2cbb6e0013b65ddb23c1cf.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboVarError.svg" +dest_files=["res://.godot/imported/LimboVarError.svg-d9f1ab3e5b2cbb6e0013b65ddb23c1cf.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboVarExists.svg b/addons/limboai/icons/LimboVarExists.svg new file mode 100644 index 0000000..3509c64 --- /dev/null +++ b/addons/limboai/icons/LimboVarExists.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboVarExists.svg.import b/addons/limboai/icons/LimboVarExists.svg.import new file mode 100644 index 0000000..c87481a --- /dev/null +++ b/addons/limboai/icons/LimboVarExists.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://v3llyfnghlbr" +path="res://.godot/imported/LimboVarExists.svg-20d2e0b4a7a064b9c6d2cc44711570dd.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboVarExists.svg" +dest_files=["res://.godot/imported/LimboVarExists.svg-20d2e0b4a7a064b9c6d2cc44711570dd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboVarNotFound.svg b/addons/limboai/icons/LimboVarNotFound.svg new file mode 100644 index 0000000..049f6cf --- /dev/null +++ b/addons/limboai/icons/LimboVarNotFound.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboVarNotFound.svg.import b/addons/limboai/icons/LimboVarNotFound.svg.import new file mode 100644 index 0000000..4000a4d --- /dev/null +++ b/addons/limboai/icons/LimboVarNotFound.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cc8wltkxchlpl" +path="res://.godot/imported/LimboVarNotFound.svg-fce88dc2c01e17a54455124e43955f9d.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboVarNotFound.svg" +dest_files=["res://.godot/imported/LimboVarNotFound.svg-fce88dc2c01e17a54455124e43955f9d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/icons/LimboVarPrivate.svg b/addons/limboai/icons/LimboVarPrivate.svg new file mode 100644 index 0000000..87b2c0f --- /dev/null +++ b/addons/limboai/icons/LimboVarPrivate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/limboai/icons/LimboVarPrivate.svg.import b/addons/limboai/icons/LimboVarPrivate.svg.import new file mode 100644 index 0000000..f450e57 --- /dev/null +++ b/addons/limboai/icons/LimboVarPrivate.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://de0674bsqwfl6" +path="res://.godot/imported/LimboVarPrivate.svg-99b4229567f7f98cdabf892099c91da2.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/limboai/icons/LimboVarPrivate.svg" +dest_files=["res://.godot/imported/LimboVarPrivate.svg-99b4229567f7f98cdabf892099c91da2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/addons/limboai/version.txt b/addons/limboai/version.txt new file mode 100644 index 0000000..18fa8e7 --- /dev/null +++ b/addons/limboai/version.txt @@ -0,0 +1 @@ +v1.3.0 diff --git a/ai/enemy.tres b/ai/enemy.tres new file mode 100644 index 0000000..80ec026 --- /dev/null +++ b/ai/enemy.tres @@ -0,0 +1,126 @@ +[gd_resource type="BehaviorTree" load_steps=28 format=3 uid="uid://db7m2p0at5kmq"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_aewef"] +var/PlayerDistance/name = &"PlayerDistance" +var/PlayerDistance/type = 3 +var/PlayerDistance/value = 0.0 +var/PlayerDistance/hint = 0 +var/PlayerDistance/hint_string = "" +var/LookingAngleToPlayer/name = &"LookingAngleToPlayer" +var/LookingAngleToPlayer/type = 3 +var/LookingAngleToPlayer/value = 0.0 +var/LookingAngleToPlayer/hint = 0 +var/LookingAngleToPlayer/hint_string = "" + +[sub_resource type="BBVariant" id="BBVariant_xy1ol"] +type = 3 +saved_value = 20.0 +resource_name = "20" + +[sub_resource type="BTCheckVar" id="BTCheckVar_7t8wr"] +variable = &"PlayerDistance" +check_type = 1 +value = SubResource("BBVariant_xy1ol") + +[sub_resource type="BBVariant" id="BBVariant_b57jb"] +type = 3 +saved_value = 0.75 +resource_name = "0.75" + +[sub_resource type="BTCheckVar" id="BTCheckVar_75gjs"] +variable = &"LookingAngleToPlayer" +check_type = 3 +value = SubResource("BBVariant_b57jb") + +[sub_resource type="BBVariant" id="BBVariant_fnoth"] +type = 1 +saved_value = true +resource_name = "true" + +[sub_resource type="BBNode" id="BBNode_g13ub"] +saved_value = NodePath("BTPlayer") +resource_name = "BTPlayer" + +[sub_resource type="BTCallMethod" id="BTCallMethod_esnfv"] +node = SubResource("BBNode_g13ub") +method = &"setAggressive" +args = Array[BBVariant]([SubResource("BBVariant_fnoth")]) + +[sub_resource type="BBNode" id="BBNode_33tkl"] +saved_value = NodePath("BTPlayer") +resource_name = "BTPlayer" + +[sub_resource type="BTCallMethod" id="BTCallMethod_rf34d"] +node = SubResource("BBNode_33tkl") +method = &"moveToPlayer" + +[sub_resource type="BBNode" id="BBNode_qn8c3"] +saved_value = NodePath("BTPlayer") +resource_name = "BTPlayer" + +[sub_resource type="BTCallMethod" id="BTCallMethod_1c0iq"] +node = SubResource("BBNode_qn8c3") +method = &"Fire" + +[sub_resource type="BTProbability" id="BTProbability_3bm4s"] +run_chance = 0.33 +children = [SubResource("BTCallMethod_1c0iq")] + +[sub_resource type="BTCooldown" id="BTCooldown_3g17e"] +duration = 5.0 +process_pause = true +trigger_on_failure = true +children = [SubResource("BTProbability_3bm4s")] + +[sub_resource type="BTAlwaysSucceed" id="BTAlwaysSucceed_5xj25"] +children = [SubResource("BTCooldown_3g17e")] + +[sub_resource type="BTSequence" id="BTSequence_wtx4r"] +custom_name = "Enemy Sees Player" +children = [SubResource("BTCheckVar_7t8wr"), SubResource("BTCheckVar_75gjs"), SubResource("BTCallMethod_esnfv"), SubResource("BTCallMethod_rf34d"), SubResource("BTAlwaysSucceed_5xj25")] + +[sub_resource type="BBVariant" id="BBVariant_mxhbj"] +type = 1 +saved_value = false +resource_name = "false" + +[sub_resource type="BBNode" id="BBNode_sh8d3"] +saved_value = NodePath("BTPlayer") +resource_name = "BTPlayer" + +[sub_resource type="BTCallMethod" id="BTCallMethod_ns46c"] +node = SubResource("BBNode_sh8d3") +method = &"setAggressive" +args = Array[BBVariant]([SubResource("BBVariant_mxhbj")]) + +[sub_resource type="BBNode" id="BBNode_dskfg"] +saved_value = NodePath("BTPlayer") +resource_name = "BTPlayer" + +[sub_resource type="BTCallMethod" id="BTCallMethod_2jcfh"] +node = SubResource("BBNode_dskfg") +method = &"roam" + +[sub_resource type="BTWait" id="BTWait_4jytf"] +duration = 4.0 + +[sub_resource type="BTSequence" id="BTSequence_wkk7c"] +children = [SubResource("BTCallMethod_2jcfh"), SubResource("BTWait_4jytf")] + +[sub_resource type="BTProbability" id="BTProbability_3yptl"] +run_chance = 0.25 +children = [SubResource("BTSequence_wkk7c")] + +[sub_resource type="BTWait" id="BTWait_xq0e8"] +duration = 4.0 + +[sub_resource type="BTDynamicSequence" id="BTDynamicSequence_phkns"] +custom_name = "Enemy doesn't see Player, Roaming" +children = [SubResource("BTCallMethod_ns46c"), SubResource("BTProbability_3yptl"), SubResource("BTWait_xq0e8")] + +[sub_resource type="BTDynamicSelector" id="BTDynamicSelector_28yhc"] +children = [SubResource("BTSequence_wtx4r"), SubResource("BTDynamicSequence_phkns")] + +[resource] +blackboard_plan = SubResource("BlackboardPlan_aewef") +root_task = SubResource("BTDynamicSelector_28yhc") diff --git a/content/cardboard_material.tres b/content/cardboard_material.tres index e227a85..c416821 100644 --- a/content/cardboard_material.tres +++ b/content/cardboard_material.tres @@ -8,6 +8,7 @@ [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_4ny28"] [resource] +cull_mode = 2 diffuse_mode = 3 specular_mode = 1 albedo_color = Color(0.521141, 0.521141, 0.521141, 1) diff --git a/content/enemies/animations/Vert_Fire.res b/content/enemies/animations/Vert_Fire.res new file mode 100644 index 0000000..023a2c4 Binary files /dev/null and b/content/enemies/animations/Vert_Fire.res differ diff --git a/content/enemies/animations/Vert_Idle.res b/content/enemies/animations/Vert_Idle.res new file mode 100644 index 0000000..32dcdc1 Binary files /dev/null and b/content/enemies/animations/Vert_Idle.res differ diff --git a/content/enemies/animations/Vert_Move.res b/content/enemies/animations/Vert_Move.res new file mode 100644 index 0000000..9145ef7 Binary files /dev/null and b/content/enemies/animations/Vert_Move.res differ diff --git a/content/enemies/animations/Vert_Move_001.res b/content/enemies/animations/Vert_Move_001.res new file mode 100644 index 0000000..4d87853 Binary files /dev/null and b/content/enemies/animations/Vert_Move_001.res differ diff --git a/content/enemies/enemies.fbx b/content/enemies/enemies.fbx new file mode 100644 index 0000000..3256421 Binary files /dev/null and b/content/enemies/enemies.fbx differ diff --git a/content/enemies/enemies.fbx.import b/content/enemies/enemies.fbx.import new file mode 100644 index 0000000..cd7a9e8 --- /dev/null +++ b/content/enemies/enemies.fbx.import @@ -0,0 +1,7242 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://o3oir3w6cs1y" +path="res://.godot/imported/enemies.fbx-69eea5c1d365f745fe45a252a663f2f8.scn" + +[deps] + +source_file="res://content/enemies/enemies.fbx" +dest_files=["res://.godot/imported/enemies.fbx-69eea5c1d365f745fe45a252a663f2f8.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={ +"animations": { +"Vert|Fire": { +"save_to_file/enabled": true, +"save_to_file/keep_custom_tracks": "", +"save_to_file/path": "res://content/enemies/animations/Vert_Fire.res", +"settings/loop_mode": 0, +"slice_1/end_frame": 0, +"slice_1/loop_mode": 0, +"slice_1/name": "", +"slice_1/save_to_file/enabled": false, +"slice_1/save_to_file/keep_custom_tracks": false, +"slice_1/save_to_file/path": "", +"slice_1/start_frame": 0, +"slice_10/end_frame": 0, +"slice_10/loop_mode": 0, +"slice_10/name": "", +"slice_10/save_to_file/enabled": false, +"slice_10/save_to_file/keep_custom_tracks": false, +"slice_10/save_to_file/path": "", +"slice_10/start_frame": 0, +"slice_100/end_frame": 0, +"slice_100/loop_mode": 0, +"slice_100/name": "", +"slice_100/save_to_file/enabled": false, +"slice_100/save_to_file/keep_custom_tracks": false, +"slice_100/save_to_file/path": "", +"slice_100/start_frame": 0, +"slice_101/end_frame": 0, +"slice_101/loop_mode": 0, +"slice_101/name": "", +"slice_101/save_to_file/enabled": false, +"slice_101/save_to_file/keep_custom_tracks": false, +"slice_101/save_to_file/path": "", +"slice_101/start_frame": 0, +"slice_102/end_frame": 0, +"slice_102/loop_mode": 0, +"slice_102/name": "", +"slice_102/save_to_file/enabled": false, +"slice_102/save_to_file/keep_custom_tracks": false, +"slice_102/save_to_file/path": "", +"slice_102/start_frame": 0, +"slice_103/end_frame": 0, +"slice_103/loop_mode": 0, +"slice_103/name": "", +"slice_103/save_to_file/enabled": false, +"slice_103/save_to_file/keep_custom_tracks": false, +"slice_103/save_to_file/path": "", +"slice_103/start_frame": 0, +"slice_104/end_frame": 0, +"slice_104/loop_mode": 0, +"slice_104/name": "", +"slice_104/save_to_file/enabled": false, +"slice_104/save_to_file/keep_custom_tracks": false, +"slice_104/save_to_file/path": "", +"slice_104/start_frame": 0, +"slice_105/end_frame": 0, +"slice_105/loop_mode": 0, +"slice_105/name": "", +"slice_105/save_to_file/enabled": false, +"slice_105/save_to_file/keep_custom_tracks": false, +"slice_105/save_to_file/path": "", +"slice_105/start_frame": 0, +"slice_106/end_frame": 0, +"slice_106/loop_mode": 0, +"slice_106/name": "", +"slice_106/save_to_file/enabled": false, +"slice_106/save_to_file/keep_custom_tracks": false, +"slice_106/save_to_file/path": "", +"slice_106/start_frame": 0, +"slice_107/end_frame": 0, +"slice_107/loop_mode": 0, +"slice_107/name": "", +"slice_107/save_to_file/enabled": false, +"slice_107/save_to_file/keep_custom_tracks": false, +"slice_107/save_to_file/path": "", +"slice_107/start_frame": 0, +"slice_108/end_frame": 0, +"slice_108/loop_mode": 0, +"slice_108/name": "", +"slice_108/save_to_file/enabled": false, +"slice_108/save_to_file/keep_custom_tracks": false, +"slice_108/save_to_file/path": "", +"slice_108/start_frame": 0, +"slice_109/end_frame": 0, +"slice_109/loop_mode": 0, +"slice_109/name": "", +"slice_109/save_to_file/enabled": false, +"slice_109/save_to_file/keep_custom_tracks": false, +"slice_109/save_to_file/path": "", +"slice_109/start_frame": 0, +"slice_11/end_frame": 0, +"slice_11/loop_mode": 0, +"slice_11/name": "", +"slice_11/save_to_file/enabled": false, +"slice_11/save_to_file/keep_custom_tracks": false, +"slice_11/save_to_file/path": "", +"slice_11/start_frame": 0, +"slice_110/end_frame": 0, +"slice_110/loop_mode": 0, +"slice_110/name": "", +"slice_110/save_to_file/enabled": false, +"slice_110/save_to_file/keep_custom_tracks": false, +"slice_110/save_to_file/path": "", +"slice_110/start_frame": 0, +"slice_111/end_frame": 0, +"slice_111/loop_mode": 0, +"slice_111/name": "", +"slice_111/save_to_file/enabled": false, +"slice_111/save_to_file/keep_custom_tracks": false, +"slice_111/save_to_file/path": "", +"slice_111/start_frame": 0, +"slice_112/end_frame": 0, +"slice_112/loop_mode": 0, +"slice_112/name": "", +"slice_112/save_to_file/enabled": false, +"slice_112/save_to_file/keep_custom_tracks": false, +"slice_112/save_to_file/path": "", +"slice_112/start_frame": 0, +"slice_113/end_frame": 0, +"slice_113/loop_mode": 0, +"slice_113/name": "", +"slice_113/save_to_file/enabled": false, +"slice_113/save_to_file/keep_custom_tracks": false, +"slice_113/save_to_file/path": "", +"slice_113/start_frame": 0, +"slice_114/end_frame": 0, +"slice_114/loop_mode": 0, +"slice_114/name": "", +"slice_114/save_to_file/enabled": false, +"slice_114/save_to_file/keep_custom_tracks": false, +"slice_114/save_to_file/path": "", +"slice_114/start_frame": 0, +"slice_115/end_frame": 0, +"slice_115/loop_mode": 0, +"slice_115/name": "", +"slice_115/save_to_file/enabled": false, +"slice_115/save_to_file/keep_custom_tracks": false, +"slice_115/save_to_file/path": "", +"slice_115/start_frame": 0, +"slice_116/end_frame": 0, +"slice_116/loop_mode": 0, +"slice_116/name": "", +"slice_116/save_to_file/enabled": false, +"slice_116/save_to_file/keep_custom_tracks": false, +"slice_116/save_to_file/path": "", +"slice_116/start_frame": 0, +"slice_117/end_frame": 0, +"slice_117/loop_mode": 0, +"slice_117/name": "", +"slice_117/save_to_file/enabled": false, +"slice_117/save_to_file/keep_custom_tracks": false, +"slice_117/save_to_file/path": "", +"slice_117/start_frame": 0, +"slice_118/end_frame": 0, +"slice_118/loop_mode": 0, +"slice_118/name": "", +"slice_118/save_to_file/enabled": false, +"slice_118/save_to_file/keep_custom_tracks": false, +"slice_118/save_to_file/path": "", +"slice_118/start_frame": 0, +"slice_119/end_frame": 0, +"slice_119/loop_mode": 0, +"slice_119/name": "", +"slice_119/save_to_file/enabled": false, +"slice_119/save_to_file/keep_custom_tracks": false, +"slice_119/save_to_file/path": "", +"slice_119/start_frame": 0, +"slice_12/end_frame": 0, +"slice_12/loop_mode": 0, +"slice_12/name": "", +"slice_12/save_to_file/enabled": false, +"slice_12/save_to_file/keep_custom_tracks": false, +"slice_12/save_to_file/path": "", +"slice_12/start_frame": 0, +"slice_120/end_frame": 0, +"slice_120/loop_mode": 0, +"slice_120/name": "", +"slice_120/save_to_file/enabled": false, +"slice_120/save_to_file/keep_custom_tracks": false, +"slice_120/save_to_file/path": "", +"slice_120/start_frame": 0, +"slice_121/end_frame": 0, +"slice_121/loop_mode": 0, +"slice_121/name": "", +"slice_121/save_to_file/enabled": false, +"slice_121/save_to_file/keep_custom_tracks": false, +"slice_121/save_to_file/path": "", +"slice_121/start_frame": 0, +"slice_122/end_frame": 0, +"slice_122/loop_mode": 0, +"slice_122/name": "", +"slice_122/save_to_file/enabled": false, +"slice_122/save_to_file/keep_custom_tracks": false, +"slice_122/save_to_file/path": "", +"slice_122/start_frame": 0, +"slice_123/end_frame": 0, +"slice_123/loop_mode": 0, +"slice_123/name": "", +"slice_123/save_to_file/enabled": false, +"slice_123/save_to_file/keep_custom_tracks": false, +"slice_123/save_to_file/path": "", +"slice_123/start_frame": 0, +"slice_124/end_frame": 0, +"slice_124/loop_mode": 0, +"slice_124/name": "", +"slice_124/save_to_file/enabled": false, +"slice_124/save_to_file/keep_custom_tracks": false, +"slice_124/save_to_file/path": "", +"slice_124/start_frame": 0, +"slice_125/end_frame": 0, +"slice_125/loop_mode": 0, +"slice_125/name": "", +"slice_125/save_to_file/enabled": false, +"slice_125/save_to_file/keep_custom_tracks": false, +"slice_125/save_to_file/path": "", +"slice_125/start_frame": 0, +"slice_126/end_frame": 0, +"slice_126/loop_mode": 0, +"slice_126/name": "", +"slice_126/save_to_file/enabled": false, +"slice_126/save_to_file/keep_custom_tracks": false, +"slice_126/save_to_file/path": "", +"slice_126/start_frame": 0, +"slice_127/end_frame": 0, +"slice_127/loop_mode": 0, +"slice_127/name": "", +"slice_127/save_to_file/enabled": false, +"slice_127/save_to_file/keep_custom_tracks": false, +"slice_127/save_to_file/path": "", +"slice_127/start_frame": 0, +"slice_128/end_frame": 0, +"slice_128/loop_mode": 0, +"slice_128/name": "", +"slice_128/save_to_file/enabled": false, +"slice_128/save_to_file/keep_custom_tracks": false, +"slice_128/save_to_file/path": "", +"slice_128/start_frame": 0, +"slice_129/end_frame": 0, +"slice_129/loop_mode": 0, +"slice_129/name": "", +"slice_129/save_to_file/enabled": false, +"slice_129/save_to_file/keep_custom_tracks": false, +"slice_129/save_to_file/path": "", +"slice_129/start_frame": 0, +"slice_13/end_frame": 0, +"slice_13/loop_mode": 0, +"slice_13/name": "", +"slice_13/save_to_file/enabled": false, +"slice_13/save_to_file/keep_custom_tracks": false, +"slice_13/save_to_file/path": "", +"slice_13/start_frame": 0, +"slice_130/end_frame": 0, +"slice_130/loop_mode": 0, +"slice_130/name": "", +"slice_130/save_to_file/enabled": false, +"slice_130/save_to_file/keep_custom_tracks": false, +"slice_130/save_to_file/path": "", +"slice_130/start_frame": 0, +"slice_131/end_frame": 0, +"slice_131/loop_mode": 0, +"slice_131/name": "", +"slice_131/save_to_file/enabled": false, +"slice_131/save_to_file/keep_custom_tracks": false, +"slice_131/save_to_file/path": "", +"slice_131/start_frame": 0, +"slice_132/end_frame": 0, +"slice_132/loop_mode": 0, +"slice_132/name": "", +"slice_132/save_to_file/enabled": false, +"slice_132/save_to_file/keep_custom_tracks": false, +"slice_132/save_to_file/path": "", +"slice_132/start_frame": 0, +"slice_133/end_frame": 0, +"slice_133/loop_mode": 0, +"slice_133/name": "", +"slice_133/save_to_file/enabled": false, +"slice_133/save_to_file/keep_custom_tracks": false, +"slice_133/save_to_file/path": "", +"slice_133/start_frame": 0, +"slice_134/end_frame": 0, +"slice_134/loop_mode": 0, +"slice_134/name": "", +"slice_134/save_to_file/enabled": false, +"slice_134/save_to_file/keep_custom_tracks": false, +"slice_134/save_to_file/path": "", +"slice_134/start_frame": 0, +"slice_135/end_frame": 0, +"slice_135/loop_mode": 0, +"slice_135/name": "", +"slice_135/save_to_file/enabled": false, +"slice_135/save_to_file/keep_custom_tracks": false, +"slice_135/save_to_file/path": "", +"slice_135/start_frame": 0, +"slice_136/end_frame": 0, +"slice_136/loop_mode": 0, +"slice_136/name": "", +"slice_136/save_to_file/enabled": false, +"slice_136/save_to_file/keep_custom_tracks": false, +"slice_136/save_to_file/path": "", +"slice_136/start_frame": 0, +"slice_137/end_frame": 0, +"slice_137/loop_mode": 0, +"slice_137/name": "", +"slice_137/save_to_file/enabled": false, +"slice_137/save_to_file/keep_custom_tracks": false, +"slice_137/save_to_file/path": "", +"slice_137/start_frame": 0, +"slice_138/end_frame": 0, +"slice_138/loop_mode": 0, +"slice_138/name": "", +"slice_138/save_to_file/enabled": false, +"slice_138/save_to_file/keep_custom_tracks": false, +"slice_138/save_to_file/path": "", +"slice_138/start_frame": 0, +"slice_139/end_frame": 0, +"slice_139/loop_mode": 0, +"slice_139/name": "", +"slice_139/save_to_file/enabled": false, +"slice_139/save_to_file/keep_custom_tracks": false, +"slice_139/save_to_file/path": "", +"slice_139/start_frame": 0, +"slice_14/end_frame": 0, +"slice_14/loop_mode": 0, +"slice_14/name": "", +"slice_14/save_to_file/enabled": false, +"slice_14/save_to_file/keep_custom_tracks": false, +"slice_14/save_to_file/path": "", +"slice_14/start_frame": 0, +"slice_140/end_frame": 0, +"slice_140/loop_mode": 0, +"slice_140/name": "", +"slice_140/save_to_file/enabled": false, +"slice_140/save_to_file/keep_custom_tracks": false, +"slice_140/save_to_file/path": "", +"slice_140/start_frame": 0, +"slice_141/end_frame": 0, +"slice_141/loop_mode": 0, +"slice_141/name": "", +"slice_141/save_to_file/enabled": false, +"slice_141/save_to_file/keep_custom_tracks": false, +"slice_141/save_to_file/path": "", +"slice_141/start_frame": 0, +"slice_142/end_frame": 0, +"slice_142/loop_mode": 0, +"slice_142/name": "", +"slice_142/save_to_file/enabled": false, +"slice_142/save_to_file/keep_custom_tracks": false, +"slice_142/save_to_file/path": "", +"slice_142/start_frame": 0, +"slice_143/end_frame": 0, +"slice_143/loop_mode": 0, +"slice_143/name": "", +"slice_143/save_to_file/enabled": false, +"slice_143/save_to_file/keep_custom_tracks": false, +"slice_143/save_to_file/path": "", +"slice_143/start_frame": 0, +"slice_144/end_frame": 0, +"slice_144/loop_mode": 0, +"slice_144/name": "", +"slice_144/save_to_file/enabled": false, +"slice_144/save_to_file/keep_custom_tracks": false, +"slice_144/save_to_file/path": "", +"slice_144/start_frame": 0, +"slice_145/end_frame": 0, +"slice_145/loop_mode": 0, +"slice_145/name": "", +"slice_145/save_to_file/enabled": false, +"slice_145/save_to_file/keep_custom_tracks": false, +"slice_145/save_to_file/path": "", +"slice_145/start_frame": 0, +"slice_146/end_frame": 0, +"slice_146/loop_mode": 0, +"slice_146/name": "", +"slice_146/save_to_file/enabled": false, +"slice_146/save_to_file/keep_custom_tracks": false, +"slice_146/save_to_file/path": "", +"slice_146/start_frame": 0, +"slice_147/end_frame": 0, +"slice_147/loop_mode": 0, +"slice_147/name": "", +"slice_147/save_to_file/enabled": false, +"slice_147/save_to_file/keep_custom_tracks": false, +"slice_147/save_to_file/path": "", +"slice_147/start_frame": 0, +"slice_148/end_frame": 0, +"slice_148/loop_mode": 0, +"slice_148/name": "", +"slice_148/save_to_file/enabled": false, +"slice_148/save_to_file/keep_custom_tracks": false, +"slice_148/save_to_file/path": "", +"slice_148/start_frame": 0, +"slice_149/end_frame": 0, +"slice_149/loop_mode": 0, +"slice_149/name": "", +"slice_149/save_to_file/enabled": false, +"slice_149/save_to_file/keep_custom_tracks": false, +"slice_149/save_to_file/path": "", +"slice_149/start_frame": 0, +"slice_15/end_frame": 0, +"slice_15/loop_mode": 0, +"slice_15/name": "", +"slice_15/save_to_file/enabled": false, +"slice_15/save_to_file/keep_custom_tracks": false, +"slice_15/save_to_file/path": "", +"slice_15/start_frame": 0, +"slice_150/end_frame": 0, +"slice_150/loop_mode": 0, +"slice_150/name": "", +"slice_150/save_to_file/enabled": false, +"slice_150/save_to_file/keep_custom_tracks": false, +"slice_150/save_to_file/path": "", +"slice_150/start_frame": 0, +"slice_151/end_frame": 0, +"slice_151/loop_mode": 0, +"slice_151/name": "", +"slice_151/save_to_file/enabled": false, +"slice_151/save_to_file/keep_custom_tracks": false, +"slice_151/save_to_file/path": "", +"slice_151/start_frame": 0, +"slice_152/end_frame": 0, +"slice_152/loop_mode": 0, +"slice_152/name": "", +"slice_152/save_to_file/enabled": false, +"slice_152/save_to_file/keep_custom_tracks": false, +"slice_152/save_to_file/path": "", +"slice_152/start_frame": 0, +"slice_153/end_frame": 0, +"slice_153/loop_mode": 0, +"slice_153/name": "", +"slice_153/save_to_file/enabled": false, +"slice_153/save_to_file/keep_custom_tracks": false, +"slice_153/save_to_file/path": "", +"slice_153/start_frame": 0, +"slice_154/end_frame": 0, +"slice_154/loop_mode": 0, +"slice_154/name": "", +"slice_154/save_to_file/enabled": false, +"slice_154/save_to_file/keep_custom_tracks": false, +"slice_154/save_to_file/path": "", +"slice_154/start_frame": 0, +"slice_155/end_frame": 0, +"slice_155/loop_mode": 0, +"slice_155/name": "", +"slice_155/save_to_file/enabled": false, +"slice_155/save_to_file/keep_custom_tracks": false, +"slice_155/save_to_file/path": "", +"slice_155/start_frame": 0, +"slice_156/end_frame": 0, +"slice_156/loop_mode": 0, +"slice_156/name": "", +"slice_156/save_to_file/enabled": false, +"slice_156/save_to_file/keep_custom_tracks": false, +"slice_156/save_to_file/path": "", +"slice_156/start_frame": 0, +"slice_157/end_frame": 0, +"slice_157/loop_mode": 0, +"slice_157/name": "", +"slice_157/save_to_file/enabled": false, +"slice_157/save_to_file/keep_custom_tracks": false, +"slice_157/save_to_file/path": "", +"slice_157/start_frame": 0, +"slice_158/end_frame": 0, +"slice_158/loop_mode": 0, +"slice_158/name": "", +"slice_158/save_to_file/enabled": false, +"slice_158/save_to_file/keep_custom_tracks": false, +"slice_158/save_to_file/path": "", +"slice_158/start_frame": 0, +"slice_159/end_frame": 0, +"slice_159/loop_mode": 0, +"slice_159/name": "", +"slice_159/save_to_file/enabled": false, +"slice_159/save_to_file/keep_custom_tracks": false, +"slice_159/save_to_file/path": "", +"slice_159/start_frame": 0, +"slice_16/end_frame": 0, +"slice_16/loop_mode": 0, +"slice_16/name": "", +"slice_16/save_to_file/enabled": false, +"slice_16/save_to_file/keep_custom_tracks": false, +"slice_16/save_to_file/path": "", +"slice_16/start_frame": 0, +"slice_160/end_frame": 0, +"slice_160/loop_mode": 0, +"slice_160/name": "", +"slice_160/save_to_file/enabled": false, +"slice_160/save_to_file/keep_custom_tracks": false, +"slice_160/save_to_file/path": "", +"slice_160/start_frame": 0, +"slice_161/end_frame": 0, +"slice_161/loop_mode": 0, +"slice_161/name": "", +"slice_161/save_to_file/enabled": false, +"slice_161/save_to_file/keep_custom_tracks": false, +"slice_161/save_to_file/path": "", +"slice_161/start_frame": 0, +"slice_162/end_frame": 0, +"slice_162/loop_mode": 0, +"slice_162/name": "", +"slice_162/save_to_file/enabled": false, +"slice_162/save_to_file/keep_custom_tracks": false, +"slice_162/save_to_file/path": "", +"slice_162/start_frame": 0, +"slice_163/end_frame": 0, +"slice_163/loop_mode": 0, +"slice_163/name": "", +"slice_163/save_to_file/enabled": false, +"slice_163/save_to_file/keep_custom_tracks": false, +"slice_163/save_to_file/path": "", +"slice_163/start_frame": 0, +"slice_164/end_frame": 0, +"slice_164/loop_mode": 0, +"slice_164/name": "", +"slice_164/save_to_file/enabled": false, +"slice_164/save_to_file/keep_custom_tracks": false, +"slice_164/save_to_file/path": "", +"slice_164/start_frame": 0, +"slice_165/end_frame": 0, +"slice_165/loop_mode": 0, +"slice_165/name": "", +"slice_165/save_to_file/enabled": false, +"slice_165/save_to_file/keep_custom_tracks": false, +"slice_165/save_to_file/path": "", +"slice_165/start_frame": 0, +"slice_166/end_frame": 0, +"slice_166/loop_mode": 0, +"slice_166/name": "", +"slice_166/save_to_file/enabled": false, +"slice_166/save_to_file/keep_custom_tracks": false, +"slice_166/save_to_file/path": "", +"slice_166/start_frame": 0, +"slice_167/end_frame": 0, +"slice_167/loop_mode": 0, +"slice_167/name": "", +"slice_167/save_to_file/enabled": false, +"slice_167/save_to_file/keep_custom_tracks": false, +"slice_167/save_to_file/path": "", +"slice_167/start_frame": 0, +"slice_168/end_frame": 0, +"slice_168/loop_mode": 0, +"slice_168/name": "", +"slice_168/save_to_file/enabled": false, +"slice_168/save_to_file/keep_custom_tracks": false, +"slice_168/save_to_file/path": "", +"slice_168/start_frame": 0, +"slice_169/end_frame": 0, +"slice_169/loop_mode": 0, +"slice_169/name": "", +"slice_169/save_to_file/enabled": false, +"slice_169/save_to_file/keep_custom_tracks": false, +"slice_169/save_to_file/path": "", +"slice_169/start_frame": 0, +"slice_17/end_frame": 0, +"slice_17/loop_mode": 0, +"slice_17/name": "", +"slice_17/save_to_file/enabled": false, +"slice_17/save_to_file/keep_custom_tracks": false, +"slice_17/save_to_file/path": "", +"slice_17/start_frame": 0, +"slice_170/end_frame": 0, +"slice_170/loop_mode": 0, +"slice_170/name": "", +"slice_170/save_to_file/enabled": false, +"slice_170/save_to_file/keep_custom_tracks": false, +"slice_170/save_to_file/path": "", +"slice_170/start_frame": 0, +"slice_171/end_frame": 0, +"slice_171/loop_mode": 0, +"slice_171/name": "", +"slice_171/save_to_file/enabled": false, +"slice_171/save_to_file/keep_custom_tracks": false, +"slice_171/save_to_file/path": "", +"slice_171/start_frame": 0, +"slice_172/end_frame": 0, +"slice_172/loop_mode": 0, +"slice_172/name": "", +"slice_172/save_to_file/enabled": false, +"slice_172/save_to_file/keep_custom_tracks": false, +"slice_172/save_to_file/path": "", +"slice_172/start_frame": 0, +"slice_173/end_frame": 0, +"slice_173/loop_mode": 0, +"slice_173/name": "", +"slice_173/save_to_file/enabled": false, +"slice_173/save_to_file/keep_custom_tracks": false, +"slice_173/save_to_file/path": "", +"slice_173/start_frame": 0, +"slice_174/end_frame": 0, +"slice_174/loop_mode": 0, +"slice_174/name": "", +"slice_174/save_to_file/enabled": false, +"slice_174/save_to_file/keep_custom_tracks": false, +"slice_174/save_to_file/path": "", +"slice_174/start_frame": 0, +"slice_175/end_frame": 0, +"slice_175/loop_mode": 0, +"slice_175/name": "", +"slice_175/save_to_file/enabled": false, +"slice_175/save_to_file/keep_custom_tracks": false, +"slice_175/save_to_file/path": "", +"slice_175/start_frame": 0, +"slice_176/end_frame": 0, +"slice_176/loop_mode": 0, +"slice_176/name": "", +"slice_176/save_to_file/enabled": false, +"slice_176/save_to_file/keep_custom_tracks": false, +"slice_176/save_to_file/path": "", +"slice_176/start_frame": 0, +"slice_177/end_frame": 0, +"slice_177/loop_mode": 0, +"slice_177/name": "", +"slice_177/save_to_file/enabled": false, +"slice_177/save_to_file/keep_custom_tracks": false, +"slice_177/save_to_file/path": "", +"slice_177/start_frame": 0, +"slice_178/end_frame": 0, +"slice_178/loop_mode": 0, +"slice_178/name": "", +"slice_178/save_to_file/enabled": false, +"slice_178/save_to_file/keep_custom_tracks": false, +"slice_178/save_to_file/path": "", +"slice_178/start_frame": 0, +"slice_179/end_frame": 0, +"slice_179/loop_mode": 0, +"slice_179/name": "", +"slice_179/save_to_file/enabled": false, +"slice_179/save_to_file/keep_custom_tracks": false, +"slice_179/save_to_file/path": "", +"slice_179/start_frame": 0, +"slice_18/end_frame": 0, +"slice_18/loop_mode": 0, +"slice_18/name": "", +"slice_18/save_to_file/enabled": false, +"slice_18/save_to_file/keep_custom_tracks": false, +"slice_18/save_to_file/path": "", +"slice_18/start_frame": 0, +"slice_180/end_frame": 0, +"slice_180/loop_mode": 0, +"slice_180/name": "", +"slice_180/save_to_file/enabled": false, +"slice_180/save_to_file/keep_custom_tracks": false, +"slice_180/save_to_file/path": "", +"slice_180/start_frame": 0, +"slice_181/end_frame": 0, +"slice_181/loop_mode": 0, +"slice_181/name": "", +"slice_181/save_to_file/enabled": false, +"slice_181/save_to_file/keep_custom_tracks": false, +"slice_181/save_to_file/path": "", +"slice_181/start_frame": 0, +"slice_182/end_frame": 0, +"slice_182/loop_mode": 0, +"slice_182/name": "", +"slice_182/save_to_file/enabled": false, +"slice_182/save_to_file/keep_custom_tracks": false, +"slice_182/save_to_file/path": "", +"slice_182/start_frame": 0, +"slice_183/end_frame": 0, +"slice_183/loop_mode": 0, +"slice_183/name": "", +"slice_183/save_to_file/enabled": false, +"slice_183/save_to_file/keep_custom_tracks": false, +"slice_183/save_to_file/path": "", +"slice_183/start_frame": 0, +"slice_184/end_frame": 0, +"slice_184/loop_mode": 0, +"slice_184/name": "", +"slice_184/save_to_file/enabled": false, +"slice_184/save_to_file/keep_custom_tracks": false, +"slice_184/save_to_file/path": "", +"slice_184/start_frame": 0, +"slice_185/end_frame": 0, +"slice_185/loop_mode": 0, +"slice_185/name": "", +"slice_185/save_to_file/enabled": false, +"slice_185/save_to_file/keep_custom_tracks": false, +"slice_185/save_to_file/path": "", +"slice_185/start_frame": 0, +"slice_186/end_frame": 0, +"slice_186/loop_mode": 0, +"slice_186/name": "", +"slice_186/save_to_file/enabled": false, +"slice_186/save_to_file/keep_custom_tracks": false, +"slice_186/save_to_file/path": "", +"slice_186/start_frame": 0, +"slice_187/end_frame": 0, +"slice_187/loop_mode": 0, +"slice_187/name": "", +"slice_187/save_to_file/enabled": false, +"slice_187/save_to_file/keep_custom_tracks": false, +"slice_187/save_to_file/path": "", +"slice_187/start_frame": 0, +"slice_188/end_frame": 0, +"slice_188/loop_mode": 0, +"slice_188/name": "", +"slice_188/save_to_file/enabled": false, +"slice_188/save_to_file/keep_custom_tracks": false, +"slice_188/save_to_file/path": "", +"slice_188/start_frame": 0, +"slice_189/end_frame": 0, +"slice_189/loop_mode": 0, +"slice_189/name": "", +"slice_189/save_to_file/enabled": false, +"slice_189/save_to_file/keep_custom_tracks": false, +"slice_189/save_to_file/path": "", +"slice_189/start_frame": 0, +"slice_19/end_frame": 0, +"slice_19/loop_mode": 0, +"slice_19/name": "", +"slice_19/save_to_file/enabled": false, +"slice_19/save_to_file/keep_custom_tracks": false, +"slice_19/save_to_file/path": "", +"slice_19/start_frame": 0, +"slice_190/end_frame": 0, +"slice_190/loop_mode": 0, +"slice_190/name": "", +"slice_190/save_to_file/enabled": false, +"slice_190/save_to_file/keep_custom_tracks": false, +"slice_190/save_to_file/path": "", +"slice_190/start_frame": 0, +"slice_191/end_frame": 0, +"slice_191/loop_mode": 0, +"slice_191/name": "", +"slice_191/save_to_file/enabled": false, +"slice_191/save_to_file/keep_custom_tracks": false, +"slice_191/save_to_file/path": "", +"slice_191/start_frame": 0, +"slice_192/end_frame": 0, +"slice_192/loop_mode": 0, +"slice_192/name": "", +"slice_192/save_to_file/enabled": false, +"slice_192/save_to_file/keep_custom_tracks": false, +"slice_192/save_to_file/path": "", +"slice_192/start_frame": 0, +"slice_193/end_frame": 0, +"slice_193/loop_mode": 0, +"slice_193/name": "", +"slice_193/save_to_file/enabled": false, +"slice_193/save_to_file/keep_custom_tracks": false, +"slice_193/save_to_file/path": "", +"slice_193/start_frame": 0, +"slice_194/end_frame": 0, +"slice_194/loop_mode": 0, +"slice_194/name": "", +"slice_194/save_to_file/enabled": false, +"slice_194/save_to_file/keep_custom_tracks": false, +"slice_194/save_to_file/path": "", +"slice_194/start_frame": 0, +"slice_195/end_frame": 0, +"slice_195/loop_mode": 0, +"slice_195/name": "", +"slice_195/save_to_file/enabled": false, +"slice_195/save_to_file/keep_custom_tracks": false, +"slice_195/save_to_file/path": "", +"slice_195/start_frame": 0, +"slice_196/end_frame": 0, +"slice_196/loop_mode": 0, +"slice_196/name": "", +"slice_196/save_to_file/enabled": false, +"slice_196/save_to_file/keep_custom_tracks": false, +"slice_196/save_to_file/path": "", +"slice_196/start_frame": 0, +"slice_197/end_frame": 0, +"slice_197/loop_mode": 0, +"slice_197/name": "", +"slice_197/save_to_file/enabled": false, +"slice_197/save_to_file/keep_custom_tracks": false, +"slice_197/save_to_file/path": "", +"slice_197/start_frame": 0, +"slice_198/end_frame": 0, +"slice_198/loop_mode": 0, +"slice_198/name": "", +"slice_198/save_to_file/enabled": false, +"slice_198/save_to_file/keep_custom_tracks": false, +"slice_198/save_to_file/path": "", +"slice_198/start_frame": 0, +"slice_199/end_frame": 0, +"slice_199/loop_mode": 0, +"slice_199/name": "", +"slice_199/save_to_file/enabled": false, +"slice_199/save_to_file/keep_custom_tracks": false, +"slice_199/save_to_file/path": "", +"slice_199/start_frame": 0, +"slice_2/end_frame": 0, +"slice_2/loop_mode": 0, +"slice_2/name": "", +"slice_2/save_to_file/enabled": false, +"slice_2/save_to_file/keep_custom_tracks": false, +"slice_2/save_to_file/path": "", +"slice_2/start_frame": 0, +"slice_20/end_frame": 0, +"slice_20/loop_mode": 0, +"slice_20/name": "", +"slice_20/save_to_file/enabled": false, +"slice_20/save_to_file/keep_custom_tracks": false, +"slice_20/save_to_file/path": "", +"slice_20/start_frame": 0, +"slice_200/end_frame": 0, +"slice_200/loop_mode": 0, +"slice_200/name": "", +"slice_200/save_to_file/enabled": false, +"slice_200/save_to_file/keep_custom_tracks": false, +"slice_200/save_to_file/path": "", +"slice_200/start_frame": 0, +"slice_201/end_frame": 0, +"slice_201/loop_mode": 0, +"slice_201/name": "", +"slice_201/save_to_file/enabled": false, +"slice_201/save_to_file/keep_custom_tracks": false, +"slice_201/save_to_file/path": "", +"slice_201/start_frame": 0, +"slice_202/end_frame": 0, +"slice_202/loop_mode": 0, +"slice_202/name": "", +"slice_202/save_to_file/enabled": false, +"slice_202/save_to_file/keep_custom_tracks": false, +"slice_202/save_to_file/path": "", +"slice_202/start_frame": 0, +"slice_203/end_frame": 0, +"slice_203/loop_mode": 0, +"slice_203/name": "", +"slice_203/save_to_file/enabled": false, +"slice_203/save_to_file/keep_custom_tracks": false, +"slice_203/save_to_file/path": "", +"slice_203/start_frame": 0, +"slice_204/end_frame": 0, +"slice_204/loop_mode": 0, +"slice_204/name": "", +"slice_204/save_to_file/enabled": false, +"slice_204/save_to_file/keep_custom_tracks": false, +"slice_204/save_to_file/path": "", +"slice_204/start_frame": 0, +"slice_205/end_frame": 0, +"slice_205/loop_mode": 0, +"slice_205/name": "", +"slice_205/save_to_file/enabled": false, +"slice_205/save_to_file/keep_custom_tracks": false, +"slice_205/save_to_file/path": "", +"slice_205/start_frame": 0, +"slice_206/end_frame": 0, +"slice_206/loop_mode": 0, +"slice_206/name": "", +"slice_206/save_to_file/enabled": false, +"slice_206/save_to_file/keep_custom_tracks": false, +"slice_206/save_to_file/path": "", +"slice_206/start_frame": 0, +"slice_207/end_frame": 0, +"slice_207/loop_mode": 0, +"slice_207/name": "", +"slice_207/save_to_file/enabled": false, +"slice_207/save_to_file/keep_custom_tracks": false, +"slice_207/save_to_file/path": "", +"slice_207/start_frame": 0, +"slice_208/end_frame": 0, +"slice_208/loop_mode": 0, +"slice_208/name": "", +"slice_208/save_to_file/enabled": false, +"slice_208/save_to_file/keep_custom_tracks": false, +"slice_208/save_to_file/path": "", +"slice_208/start_frame": 0, +"slice_209/end_frame": 0, +"slice_209/loop_mode": 0, +"slice_209/name": "", +"slice_209/save_to_file/enabled": false, +"slice_209/save_to_file/keep_custom_tracks": false, +"slice_209/save_to_file/path": "", +"slice_209/start_frame": 0, +"slice_21/end_frame": 0, +"slice_21/loop_mode": 0, +"slice_21/name": "", +"slice_21/save_to_file/enabled": false, +"slice_21/save_to_file/keep_custom_tracks": false, +"slice_21/save_to_file/path": "", +"slice_21/start_frame": 0, +"slice_210/end_frame": 0, +"slice_210/loop_mode": 0, +"slice_210/name": "", +"slice_210/save_to_file/enabled": false, +"slice_210/save_to_file/keep_custom_tracks": false, +"slice_210/save_to_file/path": "", +"slice_210/start_frame": 0, +"slice_211/end_frame": 0, +"slice_211/loop_mode": 0, +"slice_211/name": "", +"slice_211/save_to_file/enabled": false, +"slice_211/save_to_file/keep_custom_tracks": false, +"slice_211/save_to_file/path": "", +"slice_211/start_frame": 0, +"slice_212/end_frame": 0, +"slice_212/loop_mode": 0, +"slice_212/name": "", +"slice_212/save_to_file/enabled": false, +"slice_212/save_to_file/keep_custom_tracks": false, +"slice_212/save_to_file/path": "", +"slice_212/start_frame": 0, +"slice_213/end_frame": 0, +"slice_213/loop_mode": 0, +"slice_213/name": "", +"slice_213/save_to_file/enabled": false, +"slice_213/save_to_file/keep_custom_tracks": false, +"slice_213/save_to_file/path": "", +"slice_213/start_frame": 0, +"slice_214/end_frame": 0, +"slice_214/loop_mode": 0, +"slice_214/name": "", +"slice_214/save_to_file/enabled": false, +"slice_214/save_to_file/keep_custom_tracks": false, +"slice_214/save_to_file/path": "", +"slice_214/start_frame": 0, +"slice_215/end_frame": 0, +"slice_215/loop_mode": 0, +"slice_215/name": "", +"slice_215/save_to_file/enabled": false, +"slice_215/save_to_file/keep_custom_tracks": false, +"slice_215/save_to_file/path": "", +"slice_215/start_frame": 0, +"slice_216/end_frame": 0, +"slice_216/loop_mode": 0, +"slice_216/name": "", +"slice_216/save_to_file/enabled": false, +"slice_216/save_to_file/keep_custom_tracks": false, +"slice_216/save_to_file/path": "", +"slice_216/start_frame": 0, +"slice_217/end_frame": 0, +"slice_217/loop_mode": 0, +"slice_217/name": "", +"slice_217/save_to_file/enabled": false, +"slice_217/save_to_file/keep_custom_tracks": false, +"slice_217/save_to_file/path": "", +"slice_217/start_frame": 0, +"slice_218/end_frame": 0, +"slice_218/loop_mode": 0, +"slice_218/name": "", +"slice_218/save_to_file/enabled": false, +"slice_218/save_to_file/keep_custom_tracks": false, +"slice_218/save_to_file/path": "", +"slice_218/start_frame": 0, +"slice_219/end_frame": 0, +"slice_219/loop_mode": 0, +"slice_219/name": "", +"slice_219/save_to_file/enabled": false, +"slice_219/save_to_file/keep_custom_tracks": false, +"slice_219/save_to_file/path": "", +"slice_219/start_frame": 0, +"slice_22/end_frame": 0, +"slice_22/loop_mode": 0, +"slice_22/name": "", +"slice_22/save_to_file/enabled": false, +"slice_22/save_to_file/keep_custom_tracks": false, +"slice_22/save_to_file/path": "", +"slice_22/start_frame": 0, +"slice_220/end_frame": 0, +"slice_220/loop_mode": 0, +"slice_220/name": "", +"slice_220/save_to_file/enabled": false, +"slice_220/save_to_file/keep_custom_tracks": false, +"slice_220/save_to_file/path": "", +"slice_220/start_frame": 0, +"slice_221/end_frame": 0, +"slice_221/loop_mode": 0, +"slice_221/name": "", +"slice_221/save_to_file/enabled": false, +"slice_221/save_to_file/keep_custom_tracks": false, +"slice_221/save_to_file/path": "", +"slice_221/start_frame": 0, +"slice_222/end_frame": 0, +"slice_222/loop_mode": 0, +"slice_222/name": "", +"slice_222/save_to_file/enabled": false, +"slice_222/save_to_file/keep_custom_tracks": false, +"slice_222/save_to_file/path": "", +"slice_222/start_frame": 0, +"slice_223/end_frame": 0, +"slice_223/loop_mode": 0, +"slice_223/name": "", +"slice_223/save_to_file/enabled": false, +"slice_223/save_to_file/keep_custom_tracks": false, +"slice_223/save_to_file/path": "", +"slice_223/start_frame": 0, +"slice_224/end_frame": 0, +"slice_224/loop_mode": 0, +"slice_224/name": "", +"slice_224/save_to_file/enabled": false, +"slice_224/save_to_file/keep_custom_tracks": false, +"slice_224/save_to_file/path": "", +"slice_224/start_frame": 0, +"slice_225/end_frame": 0, +"slice_225/loop_mode": 0, +"slice_225/name": "", +"slice_225/save_to_file/enabled": false, +"slice_225/save_to_file/keep_custom_tracks": false, +"slice_225/save_to_file/path": "", +"slice_225/start_frame": 0, +"slice_226/end_frame": 0, +"slice_226/loop_mode": 0, +"slice_226/name": "", +"slice_226/save_to_file/enabled": false, +"slice_226/save_to_file/keep_custom_tracks": false, +"slice_226/save_to_file/path": "", +"slice_226/start_frame": 0, +"slice_227/end_frame": 0, +"slice_227/loop_mode": 0, +"slice_227/name": "", +"slice_227/save_to_file/enabled": false, +"slice_227/save_to_file/keep_custom_tracks": false, +"slice_227/save_to_file/path": "", +"slice_227/start_frame": 0, +"slice_228/end_frame": 0, +"slice_228/loop_mode": 0, +"slice_228/name": "", +"slice_228/save_to_file/enabled": false, +"slice_228/save_to_file/keep_custom_tracks": false, +"slice_228/save_to_file/path": "", +"slice_228/start_frame": 0, +"slice_229/end_frame": 0, +"slice_229/loop_mode": 0, +"slice_229/name": "", +"slice_229/save_to_file/enabled": false, +"slice_229/save_to_file/keep_custom_tracks": false, +"slice_229/save_to_file/path": "", +"slice_229/start_frame": 0, +"slice_23/end_frame": 0, +"slice_23/loop_mode": 0, +"slice_23/name": "", +"slice_23/save_to_file/enabled": false, +"slice_23/save_to_file/keep_custom_tracks": false, +"slice_23/save_to_file/path": "", +"slice_23/start_frame": 0, +"slice_230/end_frame": 0, +"slice_230/loop_mode": 0, +"slice_230/name": "", +"slice_230/save_to_file/enabled": false, +"slice_230/save_to_file/keep_custom_tracks": false, +"slice_230/save_to_file/path": "", +"slice_230/start_frame": 0, +"slice_231/end_frame": 0, +"slice_231/loop_mode": 0, +"slice_231/name": "", +"slice_231/save_to_file/enabled": false, +"slice_231/save_to_file/keep_custom_tracks": false, +"slice_231/save_to_file/path": "", +"slice_231/start_frame": 0, +"slice_232/end_frame": 0, +"slice_232/loop_mode": 0, +"slice_232/name": "", +"slice_232/save_to_file/enabled": false, +"slice_232/save_to_file/keep_custom_tracks": false, +"slice_232/save_to_file/path": "", +"slice_232/start_frame": 0, +"slice_233/end_frame": 0, +"slice_233/loop_mode": 0, +"slice_233/name": "", +"slice_233/save_to_file/enabled": false, +"slice_233/save_to_file/keep_custom_tracks": false, +"slice_233/save_to_file/path": "", +"slice_233/start_frame": 0, +"slice_234/end_frame": 0, +"slice_234/loop_mode": 0, +"slice_234/name": "", +"slice_234/save_to_file/enabled": false, +"slice_234/save_to_file/keep_custom_tracks": false, +"slice_234/save_to_file/path": "", +"slice_234/start_frame": 0, +"slice_235/end_frame": 0, +"slice_235/loop_mode": 0, +"slice_235/name": "", +"slice_235/save_to_file/enabled": false, +"slice_235/save_to_file/keep_custom_tracks": false, +"slice_235/save_to_file/path": "", +"slice_235/start_frame": 0, +"slice_236/end_frame": 0, +"slice_236/loop_mode": 0, +"slice_236/name": "", +"slice_236/save_to_file/enabled": false, +"slice_236/save_to_file/keep_custom_tracks": false, +"slice_236/save_to_file/path": "", +"slice_236/start_frame": 0, +"slice_237/end_frame": 0, +"slice_237/loop_mode": 0, +"slice_237/name": "", +"slice_237/save_to_file/enabled": false, +"slice_237/save_to_file/keep_custom_tracks": false, +"slice_237/save_to_file/path": "", +"slice_237/start_frame": 0, +"slice_238/end_frame": 0, +"slice_238/loop_mode": 0, +"slice_238/name": "", +"slice_238/save_to_file/enabled": false, +"slice_238/save_to_file/keep_custom_tracks": false, +"slice_238/save_to_file/path": "", +"slice_238/start_frame": 0, +"slice_239/end_frame": 0, +"slice_239/loop_mode": 0, +"slice_239/name": "", +"slice_239/save_to_file/enabled": false, +"slice_239/save_to_file/keep_custom_tracks": false, +"slice_239/save_to_file/path": "", +"slice_239/start_frame": 0, +"slice_24/end_frame": 0, +"slice_24/loop_mode": 0, +"slice_24/name": "", +"slice_24/save_to_file/enabled": false, +"slice_24/save_to_file/keep_custom_tracks": false, +"slice_24/save_to_file/path": "", +"slice_24/start_frame": 0, +"slice_240/end_frame": 0, +"slice_240/loop_mode": 0, +"slice_240/name": "", +"slice_240/save_to_file/enabled": false, +"slice_240/save_to_file/keep_custom_tracks": false, +"slice_240/save_to_file/path": "", +"slice_240/start_frame": 0, +"slice_241/end_frame": 0, +"slice_241/loop_mode": 0, +"slice_241/name": "", +"slice_241/save_to_file/enabled": false, +"slice_241/save_to_file/keep_custom_tracks": false, +"slice_241/save_to_file/path": "", +"slice_241/start_frame": 0, +"slice_242/end_frame": 0, +"slice_242/loop_mode": 0, +"slice_242/name": "", +"slice_242/save_to_file/enabled": false, +"slice_242/save_to_file/keep_custom_tracks": false, +"slice_242/save_to_file/path": "", +"slice_242/start_frame": 0, +"slice_243/end_frame": 0, +"slice_243/loop_mode": 0, +"slice_243/name": "", +"slice_243/save_to_file/enabled": false, +"slice_243/save_to_file/keep_custom_tracks": false, +"slice_243/save_to_file/path": "", +"slice_243/start_frame": 0, +"slice_244/end_frame": 0, +"slice_244/loop_mode": 0, +"slice_244/name": "", +"slice_244/save_to_file/enabled": false, +"slice_244/save_to_file/keep_custom_tracks": false, +"slice_244/save_to_file/path": "", +"slice_244/start_frame": 0, +"slice_245/end_frame": 0, +"slice_245/loop_mode": 0, +"slice_245/name": "", +"slice_245/save_to_file/enabled": false, +"slice_245/save_to_file/keep_custom_tracks": false, +"slice_245/save_to_file/path": "", +"slice_245/start_frame": 0, +"slice_246/end_frame": 0, +"slice_246/loop_mode": 0, +"slice_246/name": "", +"slice_246/save_to_file/enabled": false, +"slice_246/save_to_file/keep_custom_tracks": false, +"slice_246/save_to_file/path": "", +"slice_246/start_frame": 0, +"slice_247/end_frame": 0, +"slice_247/loop_mode": 0, +"slice_247/name": "", +"slice_247/save_to_file/enabled": false, +"slice_247/save_to_file/keep_custom_tracks": false, +"slice_247/save_to_file/path": "", +"slice_247/start_frame": 0, +"slice_248/end_frame": 0, +"slice_248/loop_mode": 0, +"slice_248/name": "", +"slice_248/save_to_file/enabled": false, +"slice_248/save_to_file/keep_custom_tracks": false, +"slice_248/save_to_file/path": "", +"slice_248/start_frame": 0, +"slice_249/end_frame": 0, +"slice_249/loop_mode": 0, +"slice_249/name": "", +"slice_249/save_to_file/enabled": false, +"slice_249/save_to_file/keep_custom_tracks": false, +"slice_249/save_to_file/path": "", +"slice_249/start_frame": 0, +"slice_25/end_frame": 0, +"slice_25/loop_mode": 0, +"slice_25/name": "", +"slice_25/save_to_file/enabled": false, +"slice_25/save_to_file/keep_custom_tracks": false, +"slice_25/save_to_file/path": "", +"slice_25/start_frame": 0, +"slice_250/end_frame": 0, +"slice_250/loop_mode": 0, +"slice_250/name": "", +"slice_250/save_to_file/enabled": false, +"slice_250/save_to_file/keep_custom_tracks": false, +"slice_250/save_to_file/path": "", +"slice_250/start_frame": 0, +"slice_251/end_frame": 0, +"slice_251/loop_mode": 0, +"slice_251/name": "", +"slice_251/save_to_file/enabled": false, +"slice_251/save_to_file/keep_custom_tracks": false, +"slice_251/save_to_file/path": "", +"slice_251/start_frame": 0, +"slice_252/end_frame": 0, +"slice_252/loop_mode": 0, +"slice_252/name": "", +"slice_252/save_to_file/enabled": false, +"slice_252/save_to_file/keep_custom_tracks": false, +"slice_252/save_to_file/path": "", +"slice_252/start_frame": 0, +"slice_253/end_frame": 0, +"slice_253/loop_mode": 0, +"slice_253/name": "", +"slice_253/save_to_file/enabled": false, +"slice_253/save_to_file/keep_custom_tracks": false, +"slice_253/save_to_file/path": "", +"slice_253/start_frame": 0, +"slice_254/end_frame": 0, +"slice_254/loop_mode": 0, +"slice_254/name": "", +"slice_254/save_to_file/enabled": false, +"slice_254/save_to_file/keep_custom_tracks": false, +"slice_254/save_to_file/path": "", +"slice_254/start_frame": 0, +"slice_255/end_frame": 0, +"slice_255/loop_mode": 0, +"slice_255/name": "", +"slice_255/save_to_file/enabled": false, +"slice_255/save_to_file/keep_custom_tracks": false, +"slice_255/save_to_file/path": "", +"slice_255/start_frame": 0, +"slice_256/end_frame": 0, +"slice_256/loop_mode": 0, +"slice_256/name": "", +"slice_256/save_to_file/enabled": false, +"slice_256/save_to_file/keep_custom_tracks": false, +"slice_256/save_to_file/path": "", +"slice_256/start_frame": 0, +"slice_26/end_frame": 0, +"slice_26/loop_mode": 0, +"slice_26/name": "", +"slice_26/save_to_file/enabled": false, +"slice_26/save_to_file/keep_custom_tracks": false, +"slice_26/save_to_file/path": "", +"slice_26/start_frame": 0, +"slice_27/end_frame": 0, +"slice_27/loop_mode": 0, +"slice_27/name": "", +"slice_27/save_to_file/enabled": false, +"slice_27/save_to_file/keep_custom_tracks": false, +"slice_27/save_to_file/path": "", +"slice_27/start_frame": 0, +"slice_28/end_frame": 0, +"slice_28/loop_mode": 0, +"slice_28/name": "", +"slice_28/save_to_file/enabled": false, +"slice_28/save_to_file/keep_custom_tracks": false, +"slice_28/save_to_file/path": "", +"slice_28/start_frame": 0, +"slice_29/end_frame": 0, +"slice_29/loop_mode": 0, +"slice_29/name": "", +"slice_29/save_to_file/enabled": false, +"slice_29/save_to_file/keep_custom_tracks": false, +"slice_29/save_to_file/path": "", +"slice_29/start_frame": 0, +"slice_3/end_frame": 0, +"slice_3/loop_mode": 0, +"slice_3/name": "", +"slice_3/save_to_file/enabled": false, +"slice_3/save_to_file/keep_custom_tracks": false, +"slice_3/save_to_file/path": "", +"slice_3/start_frame": 0, +"slice_30/end_frame": 0, +"slice_30/loop_mode": 0, +"slice_30/name": "", +"slice_30/save_to_file/enabled": false, +"slice_30/save_to_file/keep_custom_tracks": false, +"slice_30/save_to_file/path": "", +"slice_30/start_frame": 0, +"slice_31/end_frame": 0, +"slice_31/loop_mode": 0, +"slice_31/name": "", +"slice_31/save_to_file/enabled": false, +"slice_31/save_to_file/keep_custom_tracks": false, +"slice_31/save_to_file/path": "", +"slice_31/start_frame": 0, +"slice_32/end_frame": 0, +"slice_32/loop_mode": 0, +"slice_32/name": "", +"slice_32/save_to_file/enabled": false, +"slice_32/save_to_file/keep_custom_tracks": false, +"slice_32/save_to_file/path": "", +"slice_32/start_frame": 0, +"slice_33/end_frame": 0, +"slice_33/loop_mode": 0, +"slice_33/name": "", +"slice_33/save_to_file/enabled": false, +"slice_33/save_to_file/keep_custom_tracks": false, +"slice_33/save_to_file/path": "", +"slice_33/start_frame": 0, +"slice_34/end_frame": 0, +"slice_34/loop_mode": 0, +"slice_34/name": "", +"slice_34/save_to_file/enabled": false, +"slice_34/save_to_file/keep_custom_tracks": false, +"slice_34/save_to_file/path": "", +"slice_34/start_frame": 0, +"slice_35/end_frame": 0, +"slice_35/loop_mode": 0, +"slice_35/name": "", +"slice_35/save_to_file/enabled": false, +"slice_35/save_to_file/keep_custom_tracks": false, +"slice_35/save_to_file/path": "", +"slice_35/start_frame": 0, +"slice_36/end_frame": 0, +"slice_36/loop_mode": 0, +"slice_36/name": "", +"slice_36/save_to_file/enabled": false, +"slice_36/save_to_file/keep_custom_tracks": false, +"slice_36/save_to_file/path": "", +"slice_36/start_frame": 0, +"slice_37/end_frame": 0, +"slice_37/loop_mode": 0, +"slice_37/name": "", +"slice_37/save_to_file/enabled": false, +"slice_37/save_to_file/keep_custom_tracks": false, +"slice_37/save_to_file/path": "", +"slice_37/start_frame": 0, +"slice_38/end_frame": 0, +"slice_38/loop_mode": 0, +"slice_38/name": "", +"slice_38/save_to_file/enabled": false, +"slice_38/save_to_file/keep_custom_tracks": false, +"slice_38/save_to_file/path": "", +"slice_38/start_frame": 0, +"slice_39/end_frame": 0, +"slice_39/loop_mode": 0, +"slice_39/name": "", +"slice_39/save_to_file/enabled": false, +"slice_39/save_to_file/keep_custom_tracks": false, +"slice_39/save_to_file/path": "", +"slice_39/start_frame": 0, +"slice_4/end_frame": 0, +"slice_4/loop_mode": 0, +"slice_4/name": "", +"slice_4/save_to_file/enabled": false, +"slice_4/save_to_file/keep_custom_tracks": false, +"slice_4/save_to_file/path": "", +"slice_4/start_frame": 0, +"slice_40/end_frame": 0, +"slice_40/loop_mode": 0, +"slice_40/name": "", +"slice_40/save_to_file/enabled": false, +"slice_40/save_to_file/keep_custom_tracks": false, +"slice_40/save_to_file/path": "", +"slice_40/start_frame": 0, +"slice_41/end_frame": 0, +"slice_41/loop_mode": 0, +"slice_41/name": "", +"slice_41/save_to_file/enabled": false, +"slice_41/save_to_file/keep_custom_tracks": false, +"slice_41/save_to_file/path": "", +"slice_41/start_frame": 0, +"slice_42/end_frame": 0, +"slice_42/loop_mode": 0, +"slice_42/name": "", +"slice_42/save_to_file/enabled": false, +"slice_42/save_to_file/keep_custom_tracks": false, +"slice_42/save_to_file/path": "", +"slice_42/start_frame": 0, +"slice_43/end_frame": 0, +"slice_43/loop_mode": 0, +"slice_43/name": "", +"slice_43/save_to_file/enabled": false, +"slice_43/save_to_file/keep_custom_tracks": false, +"slice_43/save_to_file/path": "", +"slice_43/start_frame": 0, +"slice_44/end_frame": 0, +"slice_44/loop_mode": 0, +"slice_44/name": "", +"slice_44/save_to_file/enabled": false, +"slice_44/save_to_file/keep_custom_tracks": false, +"slice_44/save_to_file/path": "", +"slice_44/start_frame": 0, +"slice_45/end_frame": 0, +"slice_45/loop_mode": 0, +"slice_45/name": "", +"slice_45/save_to_file/enabled": false, +"slice_45/save_to_file/keep_custom_tracks": false, +"slice_45/save_to_file/path": "", +"slice_45/start_frame": 0, +"slice_46/end_frame": 0, +"slice_46/loop_mode": 0, +"slice_46/name": "", +"slice_46/save_to_file/enabled": false, +"slice_46/save_to_file/keep_custom_tracks": false, +"slice_46/save_to_file/path": "", +"slice_46/start_frame": 0, +"slice_47/end_frame": 0, +"slice_47/loop_mode": 0, +"slice_47/name": "", +"slice_47/save_to_file/enabled": false, +"slice_47/save_to_file/keep_custom_tracks": false, +"slice_47/save_to_file/path": "", +"slice_47/start_frame": 0, +"slice_48/end_frame": 0, +"slice_48/loop_mode": 0, +"slice_48/name": "", +"slice_48/save_to_file/enabled": false, +"slice_48/save_to_file/keep_custom_tracks": false, +"slice_48/save_to_file/path": "", +"slice_48/start_frame": 0, +"slice_49/end_frame": 0, +"slice_49/loop_mode": 0, +"slice_49/name": "", +"slice_49/save_to_file/enabled": false, +"slice_49/save_to_file/keep_custom_tracks": false, +"slice_49/save_to_file/path": "", +"slice_49/start_frame": 0, +"slice_5/end_frame": 0, +"slice_5/loop_mode": 0, +"slice_5/name": "", +"slice_5/save_to_file/enabled": false, +"slice_5/save_to_file/keep_custom_tracks": false, +"slice_5/save_to_file/path": "", +"slice_5/start_frame": 0, +"slice_50/end_frame": 0, +"slice_50/loop_mode": 0, +"slice_50/name": "", +"slice_50/save_to_file/enabled": false, +"slice_50/save_to_file/keep_custom_tracks": false, +"slice_50/save_to_file/path": "", +"slice_50/start_frame": 0, +"slice_51/end_frame": 0, +"slice_51/loop_mode": 0, +"slice_51/name": "", +"slice_51/save_to_file/enabled": false, +"slice_51/save_to_file/keep_custom_tracks": false, +"slice_51/save_to_file/path": "", +"slice_51/start_frame": 0, +"slice_52/end_frame": 0, +"slice_52/loop_mode": 0, +"slice_52/name": "", +"slice_52/save_to_file/enabled": false, +"slice_52/save_to_file/keep_custom_tracks": false, +"slice_52/save_to_file/path": "", +"slice_52/start_frame": 0, +"slice_53/end_frame": 0, +"slice_53/loop_mode": 0, +"slice_53/name": "", +"slice_53/save_to_file/enabled": false, +"slice_53/save_to_file/keep_custom_tracks": false, +"slice_53/save_to_file/path": "", +"slice_53/start_frame": 0, +"slice_54/end_frame": 0, +"slice_54/loop_mode": 0, +"slice_54/name": "", +"slice_54/save_to_file/enabled": false, +"slice_54/save_to_file/keep_custom_tracks": false, +"slice_54/save_to_file/path": "", +"slice_54/start_frame": 0, +"slice_55/end_frame": 0, +"slice_55/loop_mode": 0, +"slice_55/name": "", +"slice_55/save_to_file/enabled": false, +"slice_55/save_to_file/keep_custom_tracks": false, +"slice_55/save_to_file/path": "", +"slice_55/start_frame": 0, +"slice_56/end_frame": 0, +"slice_56/loop_mode": 0, +"slice_56/name": "", +"slice_56/save_to_file/enabled": false, +"slice_56/save_to_file/keep_custom_tracks": false, +"slice_56/save_to_file/path": "", +"slice_56/start_frame": 0, +"slice_57/end_frame": 0, +"slice_57/loop_mode": 0, +"slice_57/name": "", +"slice_57/save_to_file/enabled": false, +"slice_57/save_to_file/keep_custom_tracks": false, +"slice_57/save_to_file/path": "", +"slice_57/start_frame": 0, +"slice_58/end_frame": 0, +"slice_58/loop_mode": 0, +"slice_58/name": "", +"slice_58/save_to_file/enabled": false, +"slice_58/save_to_file/keep_custom_tracks": false, +"slice_58/save_to_file/path": "", +"slice_58/start_frame": 0, +"slice_59/end_frame": 0, +"slice_59/loop_mode": 0, +"slice_59/name": "", +"slice_59/save_to_file/enabled": false, +"slice_59/save_to_file/keep_custom_tracks": false, +"slice_59/save_to_file/path": "", +"slice_59/start_frame": 0, +"slice_6/end_frame": 0, +"slice_6/loop_mode": 0, +"slice_6/name": "", +"slice_6/save_to_file/enabled": false, +"slice_6/save_to_file/keep_custom_tracks": false, +"slice_6/save_to_file/path": "", +"slice_6/start_frame": 0, +"slice_60/end_frame": 0, +"slice_60/loop_mode": 0, +"slice_60/name": "", +"slice_60/save_to_file/enabled": false, +"slice_60/save_to_file/keep_custom_tracks": false, +"slice_60/save_to_file/path": "", +"slice_60/start_frame": 0, +"slice_61/end_frame": 0, +"slice_61/loop_mode": 0, +"slice_61/name": "", +"slice_61/save_to_file/enabled": false, +"slice_61/save_to_file/keep_custom_tracks": false, +"slice_61/save_to_file/path": "", +"slice_61/start_frame": 0, +"slice_62/end_frame": 0, +"slice_62/loop_mode": 0, +"slice_62/name": "", +"slice_62/save_to_file/enabled": false, +"slice_62/save_to_file/keep_custom_tracks": false, +"slice_62/save_to_file/path": "", +"slice_62/start_frame": 0, +"slice_63/end_frame": 0, +"slice_63/loop_mode": 0, +"slice_63/name": "", +"slice_63/save_to_file/enabled": false, +"slice_63/save_to_file/keep_custom_tracks": false, +"slice_63/save_to_file/path": "", +"slice_63/start_frame": 0, +"slice_64/end_frame": 0, +"slice_64/loop_mode": 0, +"slice_64/name": "", +"slice_64/save_to_file/enabled": false, +"slice_64/save_to_file/keep_custom_tracks": false, +"slice_64/save_to_file/path": "", +"slice_64/start_frame": 0, +"slice_65/end_frame": 0, +"slice_65/loop_mode": 0, +"slice_65/name": "", +"slice_65/save_to_file/enabled": false, +"slice_65/save_to_file/keep_custom_tracks": false, +"slice_65/save_to_file/path": "", +"slice_65/start_frame": 0, +"slice_66/end_frame": 0, +"slice_66/loop_mode": 0, +"slice_66/name": "", +"slice_66/save_to_file/enabled": false, +"slice_66/save_to_file/keep_custom_tracks": false, +"slice_66/save_to_file/path": "", +"slice_66/start_frame": 0, +"slice_67/end_frame": 0, +"slice_67/loop_mode": 0, +"slice_67/name": "", +"slice_67/save_to_file/enabled": false, +"slice_67/save_to_file/keep_custom_tracks": false, +"slice_67/save_to_file/path": "", +"slice_67/start_frame": 0, +"slice_68/end_frame": 0, +"slice_68/loop_mode": 0, +"slice_68/name": "", +"slice_68/save_to_file/enabled": false, +"slice_68/save_to_file/keep_custom_tracks": false, +"slice_68/save_to_file/path": "", +"slice_68/start_frame": 0, +"slice_69/end_frame": 0, +"slice_69/loop_mode": 0, +"slice_69/name": "", +"slice_69/save_to_file/enabled": false, +"slice_69/save_to_file/keep_custom_tracks": false, +"slice_69/save_to_file/path": "", +"slice_69/start_frame": 0, +"slice_7/end_frame": 0, +"slice_7/loop_mode": 0, +"slice_7/name": "", +"slice_7/save_to_file/enabled": false, +"slice_7/save_to_file/keep_custom_tracks": false, +"slice_7/save_to_file/path": "", +"slice_7/start_frame": 0, +"slice_70/end_frame": 0, +"slice_70/loop_mode": 0, +"slice_70/name": "", +"slice_70/save_to_file/enabled": false, +"slice_70/save_to_file/keep_custom_tracks": false, +"slice_70/save_to_file/path": "", +"slice_70/start_frame": 0, +"slice_71/end_frame": 0, +"slice_71/loop_mode": 0, +"slice_71/name": "", +"slice_71/save_to_file/enabled": false, +"slice_71/save_to_file/keep_custom_tracks": false, +"slice_71/save_to_file/path": "", +"slice_71/start_frame": 0, +"slice_72/end_frame": 0, +"slice_72/loop_mode": 0, +"slice_72/name": "", +"slice_72/save_to_file/enabled": false, +"slice_72/save_to_file/keep_custom_tracks": false, +"slice_72/save_to_file/path": "", +"slice_72/start_frame": 0, +"slice_73/end_frame": 0, +"slice_73/loop_mode": 0, +"slice_73/name": "", +"slice_73/save_to_file/enabled": false, +"slice_73/save_to_file/keep_custom_tracks": false, +"slice_73/save_to_file/path": "", +"slice_73/start_frame": 0, +"slice_74/end_frame": 0, +"slice_74/loop_mode": 0, +"slice_74/name": "", +"slice_74/save_to_file/enabled": false, +"slice_74/save_to_file/keep_custom_tracks": false, +"slice_74/save_to_file/path": "", +"slice_74/start_frame": 0, +"slice_75/end_frame": 0, +"slice_75/loop_mode": 0, +"slice_75/name": "", +"slice_75/save_to_file/enabled": false, +"slice_75/save_to_file/keep_custom_tracks": false, +"slice_75/save_to_file/path": "", +"slice_75/start_frame": 0, +"slice_76/end_frame": 0, +"slice_76/loop_mode": 0, +"slice_76/name": "", +"slice_76/save_to_file/enabled": false, +"slice_76/save_to_file/keep_custom_tracks": false, +"slice_76/save_to_file/path": "", +"slice_76/start_frame": 0, +"slice_77/end_frame": 0, +"slice_77/loop_mode": 0, +"slice_77/name": "", +"slice_77/save_to_file/enabled": false, +"slice_77/save_to_file/keep_custom_tracks": false, +"slice_77/save_to_file/path": "", +"slice_77/start_frame": 0, +"slice_78/end_frame": 0, +"slice_78/loop_mode": 0, +"slice_78/name": "", +"slice_78/save_to_file/enabled": false, +"slice_78/save_to_file/keep_custom_tracks": false, +"slice_78/save_to_file/path": "", +"slice_78/start_frame": 0, +"slice_79/end_frame": 0, +"slice_79/loop_mode": 0, +"slice_79/name": "", +"slice_79/save_to_file/enabled": false, +"slice_79/save_to_file/keep_custom_tracks": false, +"slice_79/save_to_file/path": "", +"slice_79/start_frame": 0, +"slice_8/end_frame": 0, +"slice_8/loop_mode": 0, +"slice_8/name": "", +"slice_8/save_to_file/enabled": false, +"slice_8/save_to_file/keep_custom_tracks": false, +"slice_8/save_to_file/path": "", +"slice_8/start_frame": 0, +"slice_80/end_frame": 0, +"slice_80/loop_mode": 0, +"slice_80/name": "", +"slice_80/save_to_file/enabled": false, +"slice_80/save_to_file/keep_custom_tracks": false, +"slice_80/save_to_file/path": "", +"slice_80/start_frame": 0, +"slice_81/end_frame": 0, +"slice_81/loop_mode": 0, +"slice_81/name": "", +"slice_81/save_to_file/enabled": false, +"slice_81/save_to_file/keep_custom_tracks": false, +"slice_81/save_to_file/path": "", +"slice_81/start_frame": 0, +"slice_82/end_frame": 0, +"slice_82/loop_mode": 0, +"slice_82/name": "", +"slice_82/save_to_file/enabled": false, +"slice_82/save_to_file/keep_custom_tracks": false, +"slice_82/save_to_file/path": "", +"slice_82/start_frame": 0, +"slice_83/end_frame": 0, +"slice_83/loop_mode": 0, +"slice_83/name": "", +"slice_83/save_to_file/enabled": false, +"slice_83/save_to_file/keep_custom_tracks": false, +"slice_83/save_to_file/path": "", +"slice_83/start_frame": 0, +"slice_84/end_frame": 0, +"slice_84/loop_mode": 0, +"slice_84/name": "", +"slice_84/save_to_file/enabled": false, +"slice_84/save_to_file/keep_custom_tracks": false, +"slice_84/save_to_file/path": "", +"slice_84/start_frame": 0, +"slice_85/end_frame": 0, +"slice_85/loop_mode": 0, +"slice_85/name": "", +"slice_85/save_to_file/enabled": false, +"slice_85/save_to_file/keep_custom_tracks": false, +"slice_85/save_to_file/path": "", +"slice_85/start_frame": 0, +"slice_86/end_frame": 0, +"slice_86/loop_mode": 0, +"slice_86/name": "", +"slice_86/save_to_file/enabled": false, +"slice_86/save_to_file/keep_custom_tracks": false, +"slice_86/save_to_file/path": "", +"slice_86/start_frame": 0, +"slice_87/end_frame": 0, +"slice_87/loop_mode": 0, +"slice_87/name": "", +"slice_87/save_to_file/enabled": false, +"slice_87/save_to_file/keep_custom_tracks": false, +"slice_87/save_to_file/path": "", +"slice_87/start_frame": 0, +"slice_88/end_frame": 0, +"slice_88/loop_mode": 0, +"slice_88/name": "", +"slice_88/save_to_file/enabled": false, +"slice_88/save_to_file/keep_custom_tracks": false, +"slice_88/save_to_file/path": "", +"slice_88/start_frame": 0, +"slice_89/end_frame": 0, +"slice_89/loop_mode": 0, +"slice_89/name": "", +"slice_89/save_to_file/enabled": false, +"slice_89/save_to_file/keep_custom_tracks": false, +"slice_89/save_to_file/path": "", +"slice_89/start_frame": 0, +"slice_9/end_frame": 0, +"slice_9/loop_mode": 0, +"slice_9/name": "", +"slice_9/save_to_file/enabled": false, +"slice_9/save_to_file/keep_custom_tracks": false, +"slice_9/save_to_file/path": "", +"slice_9/start_frame": 0, +"slice_90/end_frame": 0, +"slice_90/loop_mode": 0, +"slice_90/name": "", +"slice_90/save_to_file/enabled": false, +"slice_90/save_to_file/keep_custom_tracks": false, +"slice_90/save_to_file/path": "", +"slice_90/start_frame": 0, +"slice_91/end_frame": 0, +"slice_91/loop_mode": 0, +"slice_91/name": "", +"slice_91/save_to_file/enabled": false, +"slice_91/save_to_file/keep_custom_tracks": false, +"slice_91/save_to_file/path": "", +"slice_91/start_frame": 0, +"slice_92/end_frame": 0, +"slice_92/loop_mode": 0, +"slice_92/name": "", +"slice_92/save_to_file/enabled": false, +"slice_92/save_to_file/keep_custom_tracks": false, +"slice_92/save_to_file/path": "", +"slice_92/start_frame": 0, +"slice_93/end_frame": 0, +"slice_93/loop_mode": 0, +"slice_93/name": "", +"slice_93/save_to_file/enabled": false, +"slice_93/save_to_file/keep_custom_tracks": false, +"slice_93/save_to_file/path": "", +"slice_93/start_frame": 0, +"slice_94/end_frame": 0, +"slice_94/loop_mode": 0, +"slice_94/name": "", +"slice_94/save_to_file/enabled": false, +"slice_94/save_to_file/keep_custom_tracks": false, +"slice_94/save_to_file/path": "", +"slice_94/start_frame": 0, +"slice_95/end_frame": 0, +"slice_95/loop_mode": 0, +"slice_95/name": "", +"slice_95/save_to_file/enabled": false, +"slice_95/save_to_file/keep_custom_tracks": false, +"slice_95/save_to_file/path": "", +"slice_95/start_frame": 0, +"slice_96/end_frame": 0, +"slice_96/loop_mode": 0, +"slice_96/name": "", +"slice_96/save_to_file/enabled": false, +"slice_96/save_to_file/keep_custom_tracks": false, +"slice_96/save_to_file/path": "", +"slice_96/start_frame": 0, +"slice_97/end_frame": 0, +"slice_97/loop_mode": 0, +"slice_97/name": "", +"slice_97/save_to_file/enabled": false, +"slice_97/save_to_file/keep_custom_tracks": false, +"slice_97/save_to_file/path": "", +"slice_97/start_frame": 0, +"slice_98/end_frame": 0, +"slice_98/loop_mode": 0, +"slice_98/name": "", +"slice_98/save_to_file/enabled": false, +"slice_98/save_to_file/keep_custom_tracks": false, +"slice_98/save_to_file/path": "", +"slice_98/start_frame": 0, +"slice_99/end_frame": 0, +"slice_99/loop_mode": 0, +"slice_99/name": "", +"slice_99/save_to_file/enabled": false, +"slice_99/save_to_file/keep_custom_tracks": false, +"slice_99/save_to_file/path": "", +"slice_99/start_frame": 0, +"slices/amount": 0 +}, +"Vert|Idle": { +"save_to_file/enabled": true, +"save_to_file/keep_custom_tracks": "", +"save_to_file/path": "res://content/enemies/animations/Vert_Idle.res", +"settings/loop_mode": 1, +"slice_1/end_frame": 0, +"slice_1/loop_mode": 0, +"slice_1/name": "", +"slice_1/save_to_file/enabled": false, +"slice_1/save_to_file/keep_custom_tracks": false, +"slice_1/save_to_file/path": "", +"slice_1/start_frame": 0, +"slice_10/end_frame": 0, +"slice_10/loop_mode": 0, +"slice_10/name": "", +"slice_10/save_to_file/enabled": false, +"slice_10/save_to_file/keep_custom_tracks": false, +"slice_10/save_to_file/path": "", +"slice_10/start_frame": 0, +"slice_100/end_frame": 0, +"slice_100/loop_mode": 0, +"slice_100/name": "", +"slice_100/save_to_file/enabled": false, +"slice_100/save_to_file/keep_custom_tracks": false, +"slice_100/save_to_file/path": "", +"slice_100/start_frame": 0, +"slice_101/end_frame": 0, +"slice_101/loop_mode": 0, +"slice_101/name": "", +"slice_101/save_to_file/enabled": false, +"slice_101/save_to_file/keep_custom_tracks": false, +"slice_101/save_to_file/path": "", +"slice_101/start_frame": 0, +"slice_102/end_frame": 0, +"slice_102/loop_mode": 0, +"slice_102/name": "", +"slice_102/save_to_file/enabled": false, +"slice_102/save_to_file/keep_custom_tracks": false, +"slice_102/save_to_file/path": "", +"slice_102/start_frame": 0, +"slice_103/end_frame": 0, +"slice_103/loop_mode": 0, +"slice_103/name": "", +"slice_103/save_to_file/enabled": false, +"slice_103/save_to_file/keep_custom_tracks": false, +"slice_103/save_to_file/path": "", +"slice_103/start_frame": 0, +"slice_104/end_frame": 0, +"slice_104/loop_mode": 0, +"slice_104/name": "", +"slice_104/save_to_file/enabled": false, +"slice_104/save_to_file/keep_custom_tracks": false, +"slice_104/save_to_file/path": "", +"slice_104/start_frame": 0, +"slice_105/end_frame": 0, +"slice_105/loop_mode": 0, +"slice_105/name": "", +"slice_105/save_to_file/enabled": false, +"slice_105/save_to_file/keep_custom_tracks": false, +"slice_105/save_to_file/path": "", +"slice_105/start_frame": 0, +"slice_106/end_frame": 0, +"slice_106/loop_mode": 0, +"slice_106/name": "", +"slice_106/save_to_file/enabled": false, +"slice_106/save_to_file/keep_custom_tracks": false, +"slice_106/save_to_file/path": "", +"slice_106/start_frame": 0, +"slice_107/end_frame": 0, +"slice_107/loop_mode": 0, +"slice_107/name": "", +"slice_107/save_to_file/enabled": false, +"slice_107/save_to_file/keep_custom_tracks": false, +"slice_107/save_to_file/path": "", +"slice_107/start_frame": 0, +"slice_108/end_frame": 0, +"slice_108/loop_mode": 0, +"slice_108/name": "", +"slice_108/save_to_file/enabled": false, +"slice_108/save_to_file/keep_custom_tracks": false, +"slice_108/save_to_file/path": "", +"slice_108/start_frame": 0, +"slice_109/end_frame": 0, +"slice_109/loop_mode": 0, +"slice_109/name": "", +"slice_109/save_to_file/enabled": false, +"slice_109/save_to_file/keep_custom_tracks": false, +"slice_109/save_to_file/path": "", +"slice_109/start_frame": 0, +"slice_11/end_frame": 0, +"slice_11/loop_mode": 0, +"slice_11/name": "", +"slice_11/save_to_file/enabled": false, +"slice_11/save_to_file/keep_custom_tracks": false, +"slice_11/save_to_file/path": "", +"slice_11/start_frame": 0, +"slice_110/end_frame": 0, +"slice_110/loop_mode": 0, +"slice_110/name": "", +"slice_110/save_to_file/enabled": false, +"slice_110/save_to_file/keep_custom_tracks": false, +"slice_110/save_to_file/path": "", +"slice_110/start_frame": 0, +"slice_111/end_frame": 0, +"slice_111/loop_mode": 0, +"slice_111/name": "", +"slice_111/save_to_file/enabled": false, +"slice_111/save_to_file/keep_custom_tracks": false, +"slice_111/save_to_file/path": "", +"slice_111/start_frame": 0, +"slice_112/end_frame": 0, +"slice_112/loop_mode": 0, +"slice_112/name": "", +"slice_112/save_to_file/enabled": false, +"slice_112/save_to_file/keep_custom_tracks": false, +"slice_112/save_to_file/path": "", +"slice_112/start_frame": 0, +"slice_113/end_frame": 0, +"slice_113/loop_mode": 0, +"slice_113/name": "", +"slice_113/save_to_file/enabled": false, +"slice_113/save_to_file/keep_custom_tracks": false, +"slice_113/save_to_file/path": "", +"slice_113/start_frame": 0, +"slice_114/end_frame": 0, +"slice_114/loop_mode": 0, +"slice_114/name": "", +"slice_114/save_to_file/enabled": false, +"slice_114/save_to_file/keep_custom_tracks": false, +"slice_114/save_to_file/path": "", +"slice_114/start_frame": 0, +"slice_115/end_frame": 0, +"slice_115/loop_mode": 0, +"slice_115/name": "", +"slice_115/save_to_file/enabled": false, +"slice_115/save_to_file/keep_custom_tracks": false, +"slice_115/save_to_file/path": "", +"slice_115/start_frame": 0, +"slice_116/end_frame": 0, +"slice_116/loop_mode": 0, +"slice_116/name": "", +"slice_116/save_to_file/enabled": false, +"slice_116/save_to_file/keep_custom_tracks": false, +"slice_116/save_to_file/path": "", +"slice_116/start_frame": 0, +"slice_117/end_frame": 0, +"slice_117/loop_mode": 0, +"slice_117/name": "", +"slice_117/save_to_file/enabled": false, +"slice_117/save_to_file/keep_custom_tracks": false, +"slice_117/save_to_file/path": "", +"slice_117/start_frame": 0, +"slice_118/end_frame": 0, +"slice_118/loop_mode": 0, +"slice_118/name": "", +"slice_118/save_to_file/enabled": false, +"slice_118/save_to_file/keep_custom_tracks": false, +"slice_118/save_to_file/path": "", +"slice_118/start_frame": 0, +"slice_119/end_frame": 0, +"slice_119/loop_mode": 0, +"slice_119/name": "", +"slice_119/save_to_file/enabled": false, +"slice_119/save_to_file/keep_custom_tracks": false, +"slice_119/save_to_file/path": "", +"slice_119/start_frame": 0, +"slice_12/end_frame": 0, +"slice_12/loop_mode": 0, +"slice_12/name": "", +"slice_12/save_to_file/enabled": false, +"slice_12/save_to_file/keep_custom_tracks": false, +"slice_12/save_to_file/path": "", +"slice_12/start_frame": 0, +"slice_120/end_frame": 0, +"slice_120/loop_mode": 0, +"slice_120/name": "", +"slice_120/save_to_file/enabled": false, +"slice_120/save_to_file/keep_custom_tracks": false, +"slice_120/save_to_file/path": "", +"slice_120/start_frame": 0, +"slice_121/end_frame": 0, +"slice_121/loop_mode": 0, +"slice_121/name": "", +"slice_121/save_to_file/enabled": false, +"slice_121/save_to_file/keep_custom_tracks": false, +"slice_121/save_to_file/path": "", +"slice_121/start_frame": 0, +"slice_122/end_frame": 0, +"slice_122/loop_mode": 0, +"slice_122/name": "", +"slice_122/save_to_file/enabled": false, +"slice_122/save_to_file/keep_custom_tracks": false, +"slice_122/save_to_file/path": "", +"slice_122/start_frame": 0, +"slice_123/end_frame": 0, +"slice_123/loop_mode": 0, +"slice_123/name": "", +"slice_123/save_to_file/enabled": false, +"slice_123/save_to_file/keep_custom_tracks": false, +"slice_123/save_to_file/path": "", +"slice_123/start_frame": 0, +"slice_124/end_frame": 0, +"slice_124/loop_mode": 0, +"slice_124/name": "", +"slice_124/save_to_file/enabled": false, +"slice_124/save_to_file/keep_custom_tracks": false, +"slice_124/save_to_file/path": "", +"slice_124/start_frame": 0, +"slice_125/end_frame": 0, +"slice_125/loop_mode": 0, +"slice_125/name": "", +"slice_125/save_to_file/enabled": false, +"slice_125/save_to_file/keep_custom_tracks": false, +"slice_125/save_to_file/path": "", +"slice_125/start_frame": 0, +"slice_126/end_frame": 0, +"slice_126/loop_mode": 0, +"slice_126/name": "", +"slice_126/save_to_file/enabled": false, +"slice_126/save_to_file/keep_custom_tracks": false, +"slice_126/save_to_file/path": "", +"slice_126/start_frame": 0, +"slice_127/end_frame": 0, +"slice_127/loop_mode": 0, +"slice_127/name": "", +"slice_127/save_to_file/enabled": false, +"slice_127/save_to_file/keep_custom_tracks": false, +"slice_127/save_to_file/path": "", +"slice_127/start_frame": 0, +"slice_128/end_frame": 0, +"slice_128/loop_mode": 0, +"slice_128/name": "", +"slice_128/save_to_file/enabled": false, +"slice_128/save_to_file/keep_custom_tracks": false, +"slice_128/save_to_file/path": "", +"slice_128/start_frame": 0, +"slice_129/end_frame": 0, +"slice_129/loop_mode": 0, +"slice_129/name": "", +"slice_129/save_to_file/enabled": false, +"slice_129/save_to_file/keep_custom_tracks": false, +"slice_129/save_to_file/path": "", +"slice_129/start_frame": 0, +"slice_13/end_frame": 0, +"slice_13/loop_mode": 0, +"slice_13/name": "", +"slice_13/save_to_file/enabled": false, +"slice_13/save_to_file/keep_custom_tracks": false, +"slice_13/save_to_file/path": "", +"slice_13/start_frame": 0, +"slice_130/end_frame": 0, +"slice_130/loop_mode": 0, +"slice_130/name": "", +"slice_130/save_to_file/enabled": false, +"slice_130/save_to_file/keep_custom_tracks": false, +"slice_130/save_to_file/path": "", +"slice_130/start_frame": 0, +"slice_131/end_frame": 0, +"slice_131/loop_mode": 0, +"slice_131/name": "", +"slice_131/save_to_file/enabled": false, +"slice_131/save_to_file/keep_custom_tracks": false, +"slice_131/save_to_file/path": "", +"slice_131/start_frame": 0, +"slice_132/end_frame": 0, +"slice_132/loop_mode": 0, +"slice_132/name": "", +"slice_132/save_to_file/enabled": false, +"slice_132/save_to_file/keep_custom_tracks": false, +"slice_132/save_to_file/path": "", +"slice_132/start_frame": 0, +"slice_133/end_frame": 0, +"slice_133/loop_mode": 0, +"slice_133/name": "", +"slice_133/save_to_file/enabled": false, +"slice_133/save_to_file/keep_custom_tracks": false, +"slice_133/save_to_file/path": "", +"slice_133/start_frame": 0, +"slice_134/end_frame": 0, +"slice_134/loop_mode": 0, +"slice_134/name": "", +"slice_134/save_to_file/enabled": false, +"slice_134/save_to_file/keep_custom_tracks": false, +"slice_134/save_to_file/path": "", +"slice_134/start_frame": 0, +"slice_135/end_frame": 0, +"slice_135/loop_mode": 0, +"slice_135/name": "", +"slice_135/save_to_file/enabled": false, +"slice_135/save_to_file/keep_custom_tracks": false, +"slice_135/save_to_file/path": "", +"slice_135/start_frame": 0, +"slice_136/end_frame": 0, +"slice_136/loop_mode": 0, +"slice_136/name": "", +"slice_136/save_to_file/enabled": false, +"slice_136/save_to_file/keep_custom_tracks": false, +"slice_136/save_to_file/path": "", +"slice_136/start_frame": 0, +"slice_137/end_frame": 0, +"slice_137/loop_mode": 0, +"slice_137/name": "", +"slice_137/save_to_file/enabled": false, +"slice_137/save_to_file/keep_custom_tracks": false, +"slice_137/save_to_file/path": "", +"slice_137/start_frame": 0, +"slice_138/end_frame": 0, +"slice_138/loop_mode": 0, +"slice_138/name": "", +"slice_138/save_to_file/enabled": false, +"slice_138/save_to_file/keep_custom_tracks": false, +"slice_138/save_to_file/path": "", +"slice_138/start_frame": 0, +"slice_139/end_frame": 0, +"slice_139/loop_mode": 0, +"slice_139/name": "", +"slice_139/save_to_file/enabled": false, +"slice_139/save_to_file/keep_custom_tracks": false, +"slice_139/save_to_file/path": "", +"slice_139/start_frame": 0, +"slice_14/end_frame": 0, +"slice_14/loop_mode": 0, +"slice_14/name": "", +"slice_14/save_to_file/enabled": false, +"slice_14/save_to_file/keep_custom_tracks": false, +"slice_14/save_to_file/path": "", +"slice_14/start_frame": 0, +"slice_140/end_frame": 0, +"slice_140/loop_mode": 0, +"slice_140/name": "", +"slice_140/save_to_file/enabled": false, +"slice_140/save_to_file/keep_custom_tracks": false, +"slice_140/save_to_file/path": "", +"slice_140/start_frame": 0, +"slice_141/end_frame": 0, +"slice_141/loop_mode": 0, +"slice_141/name": "", +"slice_141/save_to_file/enabled": false, +"slice_141/save_to_file/keep_custom_tracks": false, +"slice_141/save_to_file/path": "", +"slice_141/start_frame": 0, +"slice_142/end_frame": 0, +"slice_142/loop_mode": 0, +"slice_142/name": "", +"slice_142/save_to_file/enabled": false, +"slice_142/save_to_file/keep_custom_tracks": false, +"slice_142/save_to_file/path": "", +"slice_142/start_frame": 0, +"slice_143/end_frame": 0, +"slice_143/loop_mode": 0, +"slice_143/name": "", +"slice_143/save_to_file/enabled": false, +"slice_143/save_to_file/keep_custom_tracks": false, +"slice_143/save_to_file/path": "", +"slice_143/start_frame": 0, +"slice_144/end_frame": 0, +"slice_144/loop_mode": 0, +"slice_144/name": "", +"slice_144/save_to_file/enabled": false, +"slice_144/save_to_file/keep_custom_tracks": false, +"slice_144/save_to_file/path": "", +"slice_144/start_frame": 0, +"slice_145/end_frame": 0, +"slice_145/loop_mode": 0, +"slice_145/name": "", +"slice_145/save_to_file/enabled": false, +"slice_145/save_to_file/keep_custom_tracks": false, +"slice_145/save_to_file/path": "", +"slice_145/start_frame": 0, +"slice_146/end_frame": 0, +"slice_146/loop_mode": 0, +"slice_146/name": "", +"slice_146/save_to_file/enabled": false, +"slice_146/save_to_file/keep_custom_tracks": false, +"slice_146/save_to_file/path": "", +"slice_146/start_frame": 0, +"slice_147/end_frame": 0, +"slice_147/loop_mode": 0, +"slice_147/name": "", +"slice_147/save_to_file/enabled": false, +"slice_147/save_to_file/keep_custom_tracks": false, +"slice_147/save_to_file/path": "", +"slice_147/start_frame": 0, +"slice_148/end_frame": 0, +"slice_148/loop_mode": 0, +"slice_148/name": "", +"slice_148/save_to_file/enabled": false, +"slice_148/save_to_file/keep_custom_tracks": false, +"slice_148/save_to_file/path": "", +"slice_148/start_frame": 0, +"slice_149/end_frame": 0, +"slice_149/loop_mode": 0, +"slice_149/name": "", +"slice_149/save_to_file/enabled": false, +"slice_149/save_to_file/keep_custom_tracks": false, +"slice_149/save_to_file/path": "", +"slice_149/start_frame": 0, +"slice_15/end_frame": 0, +"slice_15/loop_mode": 0, +"slice_15/name": "", +"slice_15/save_to_file/enabled": false, +"slice_15/save_to_file/keep_custom_tracks": false, +"slice_15/save_to_file/path": "", +"slice_15/start_frame": 0, +"slice_150/end_frame": 0, +"slice_150/loop_mode": 0, +"slice_150/name": "", +"slice_150/save_to_file/enabled": false, +"slice_150/save_to_file/keep_custom_tracks": false, +"slice_150/save_to_file/path": "", +"slice_150/start_frame": 0, +"slice_151/end_frame": 0, +"slice_151/loop_mode": 0, +"slice_151/name": "", +"slice_151/save_to_file/enabled": false, +"slice_151/save_to_file/keep_custom_tracks": false, +"slice_151/save_to_file/path": "", +"slice_151/start_frame": 0, +"slice_152/end_frame": 0, +"slice_152/loop_mode": 0, +"slice_152/name": "", +"slice_152/save_to_file/enabled": false, +"slice_152/save_to_file/keep_custom_tracks": false, +"slice_152/save_to_file/path": "", +"slice_152/start_frame": 0, +"slice_153/end_frame": 0, +"slice_153/loop_mode": 0, +"slice_153/name": "", +"slice_153/save_to_file/enabled": false, +"slice_153/save_to_file/keep_custom_tracks": false, +"slice_153/save_to_file/path": "", +"slice_153/start_frame": 0, +"slice_154/end_frame": 0, +"slice_154/loop_mode": 0, +"slice_154/name": "", +"slice_154/save_to_file/enabled": false, +"slice_154/save_to_file/keep_custom_tracks": false, +"slice_154/save_to_file/path": "", +"slice_154/start_frame": 0, +"slice_155/end_frame": 0, +"slice_155/loop_mode": 0, +"slice_155/name": "", +"slice_155/save_to_file/enabled": false, +"slice_155/save_to_file/keep_custom_tracks": false, +"slice_155/save_to_file/path": "", +"slice_155/start_frame": 0, +"slice_156/end_frame": 0, +"slice_156/loop_mode": 0, +"slice_156/name": "", +"slice_156/save_to_file/enabled": false, +"slice_156/save_to_file/keep_custom_tracks": false, +"slice_156/save_to_file/path": "", +"slice_156/start_frame": 0, +"slice_157/end_frame": 0, +"slice_157/loop_mode": 0, +"slice_157/name": "", +"slice_157/save_to_file/enabled": false, +"slice_157/save_to_file/keep_custom_tracks": false, +"slice_157/save_to_file/path": "", +"slice_157/start_frame": 0, +"slice_158/end_frame": 0, +"slice_158/loop_mode": 0, +"slice_158/name": "", +"slice_158/save_to_file/enabled": false, +"slice_158/save_to_file/keep_custom_tracks": false, +"slice_158/save_to_file/path": "", +"slice_158/start_frame": 0, +"slice_159/end_frame": 0, +"slice_159/loop_mode": 0, +"slice_159/name": "", +"slice_159/save_to_file/enabled": false, +"slice_159/save_to_file/keep_custom_tracks": false, +"slice_159/save_to_file/path": "", +"slice_159/start_frame": 0, +"slice_16/end_frame": 0, +"slice_16/loop_mode": 0, +"slice_16/name": "", +"slice_16/save_to_file/enabled": false, +"slice_16/save_to_file/keep_custom_tracks": false, +"slice_16/save_to_file/path": "", +"slice_16/start_frame": 0, +"slice_160/end_frame": 0, +"slice_160/loop_mode": 0, +"slice_160/name": "", +"slice_160/save_to_file/enabled": false, +"slice_160/save_to_file/keep_custom_tracks": false, +"slice_160/save_to_file/path": "", +"slice_160/start_frame": 0, +"slice_161/end_frame": 0, +"slice_161/loop_mode": 0, +"slice_161/name": "", +"slice_161/save_to_file/enabled": false, +"slice_161/save_to_file/keep_custom_tracks": false, +"slice_161/save_to_file/path": "", +"slice_161/start_frame": 0, +"slice_162/end_frame": 0, +"slice_162/loop_mode": 0, +"slice_162/name": "", +"slice_162/save_to_file/enabled": false, +"slice_162/save_to_file/keep_custom_tracks": false, +"slice_162/save_to_file/path": "", +"slice_162/start_frame": 0, +"slice_163/end_frame": 0, +"slice_163/loop_mode": 0, +"slice_163/name": "", +"slice_163/save_to_file/enabled": false, +"slice_163/save_to_file/keep_custom_tracks": false, +"slice_163/save_to_file/path": "", +"slice_163/start_frame": 0, +"slice_164/end_frame": 0, +"slice_164/loop_mode": 0, +"slice_164/name": "", +"slice_164/save_to_file/enabled": false, +"slice_164/save_to_file/keep_custom_tracks": false, +"slice_164/save_to_file/path": "", +"slice_164/start_frame": 0, +"slice_165/end_frame": 0, +"slice_165/loop_mode": 0, +"slice_165/name": "", +"slice_165/save_to_file/enabled": false, +"slice_165/save_to_file/keep_custom_tracks": false, +"slice_165/save_to_file/path": "", +"slice_165/start_frame": 0, +"slice_166/end_frame": 0, +"slice_166/loop_mode": 0, +"slice_166/name": "", +"slice_166/save_to_file/enabled": false, +"slice_166/save_to_file/keep_custom_tracks": false, +"slice_166/save_to_file/path": "", +"slice_166/start_frame": 0, +"slice_167/end_frame": 0, +"slice_167/loop_mode": 0, +"slice_167/name": "", +"slice_167/save_to_file/enabled": false, +"slice_167/save_to_file/keep_custom_tracks": false, +"slice_167/save_to_file/path": "", +"slice_167/start_frame": 0, +"slice_168/end_frame": 0, +"slice_168/loop_mode": 0, +"slice_168/name": "", +"slice_168/save_to_file/enabled": false, +"slice_168/save_to_file/keep_custom_tracks": false, +"slice_168/save_to_file/path": "", +"slice_168/start_frame": 0, +"slice_169/end_frame": 0, +"slice_169/loop_mode": 0, +"slice_169/name": "", +"slice_169/save_to_file/enabled": false, +"slice_169/save_to_file/keep_custom_tracks": false, +"slice_169/save_to_file/path": "", +"slice_169/start_frame": 0, +"slice_17/end_frame": 0, +"slice_17/loop_mode": 0, +"slice_17/name": "", +"slice_17/save_to_file/enabled": false, +"slice_17/save_to_file/keep_custom_tracks": false, +"slice_17/save_to_file/path": "", +"slice_17/start_frame": 0, +"slice_170/end_frame": 0, +"slice_170/loop_mode": 0, +"slice_170/name": "", +"slice_170/save_to_file/enabled": false, +"slice_170/save_to_file/keep_custom_tracks": false, +"slice_170/save_to_file/path": "", +"slice_170/start_frame": 0, +"slice_171/end_frame": 0, +"slice_171/loop_mode": 0, +"slice_171/name": "", +"slice_171/save_to_file/enabled": false, +"slice_171/save_to_file/keep_custom_tracks": false, +"slice_171/save_to_file/path": "", +"slice_171/start_frame": 0, +"slice_172/end_frame": 0, +"slice_172/loop_mode": 0, +"slice_172/name": "", +"slice_172/save_to_file/enabled": false, +"slice_172/save_to_file/keep_custom_tracks": false, +"slice_172/save_to_file/path": "", +"slice_172/start_frame": 0, +"slice_173/end_frame": 0, +"slice_173/loop_mode": 0, +"slice_173/name": "", +"slice_173/save_to_file/enabled": false, +"slice_173/save_to_file/keep_custom_tracks": false, +"slice_173/save_to_file/path": "", +"slice_173/start_frame": 0, +"slice_174/end_frame": 0, +"slice_174/loop_mode": 0, +"slice_174/name": "", +"slice_174/save_to_file/enabled": false, +"slice_174/save_to_file/keep_custom_tracks": false, +"slice_174/save_to_file/path": "", +"slice_174/start_frame": 0, +"slice_175/end_frame": 0, +"slice_175/loop_mode": 0, +"slice_175/name": "", +"slice_175/save_to_file/enabled": false, +"slice_175/save_to_file/keep_custom_tracks": false, +"slice_175/save_to_file/path": "", +"slice_175/start_frame": 0, +"slice_176/end_frame": 0, +"slice_176/loop_mode": 0, +"slice_176/name": "", +"slice_176/save_to_file/enabled": false, +"slice_176/save_to_file/keep_custom_tracks": false, +"slice_176/save_to_file/path": "", +"slice_176/start_frame": 0, +"slice_177/end_frame": 0, +"slice_177/loop_mode": 0, +"slice_177/name": "", +"slice_177/save_to_file/enabled": false, +"slice_177/save_to_file/keep_custom_tracks": false, +"slice_177/save_to_file/path": "", +"slice_177/start_frame": 0, +"slice_178/end_frame": 0, +"slice_178/loop_mode": 0, +"slice_178/name": "", +"slice_178/save_to_file/enabled": false, +"slice_178/save_to_file/keep_custom_tracks": false, +"slice_178/save_to_file/path": "", +"slice_178/start_frame": 0, +"slice_179/end_frame": 0, +"slice_179/loop_mode": 0, +"slice_179/name": "", +"slice_179/save_to_file/enabled": false, +"slice_179/save_to_file/keep_custom_tracks": false, +"slice_179/save_to_file/path": "", +"slice_179/start_frame": 0, +"slice_18/end_frame": 0, +"slice_18/loop_mode": 0, +"slice_18/name": "", +"slice_18/save_to_file/enabled": false, +"slice_18/save_to_file/keep_custom_tracks": false, +"slice_18/save_to_file/path": "", +"slice_18/start_frame": 0, +"slice_180/end_frame": 0, +"slice_180/loop_mode": 0, +"slice_180/name": "", +"slice_180/save_to_file/enabled": false, +"slice_180/save_to_file/keep_custom_tracks": false, +"slice_180/save_to_file/path": "", +"slice_180/start_frame": 0, +"slice_181/end_frame": 0, +"slice_181/loop_mode": 0, +"slice_181/name": "", +"slice_181/save_to_file/enabled": false, +"slice_181/save_to_file/keep_custom_tracks": false, +"slice_181/save_to_file/path": "", +"slice_181/start_frame": 0, +"slice_182/end_frame": 0, +"slice_182/loop_mode": 0, +"slice_182/name": "", +"slice_182/save_to_file/enabled": false, +"slice_182/save_to_file/keep_custom_tracks": false, +"slice_182/save_to_file/path": "", +"slice_182/start_frame": 0, +"slice_183/end_frame": 0, +"slice_183/loop_mode": 0, +"slice_183/name": "", +"slice_183/save_to_file/enabled": false, +"slice_183/save_to_file/keep_custom_tracks": false, +"slice_183/save_to_file/path": "", +"slice_183/start_frame": 0, +"slice_184/end_frame": 0, +"slice_184/loop_mode": 0, +"slice_184/name": "", +"slice_184/save_to_file/enabled": false, +"slice_184/save_to_file/keep_custom_tracks": false, +"slice_184/save_to_file/path": "", +"slice_184/start_frame": 0, +"slice_185/end_frame": 0, +"slice_185/loop_mode": 0, +"slice_185/name": "", +"slice_185/save_to_file/enabled": false, +"slice_185/save_to_file/keep_custom_tracks": false, +"slice_185/save_to_file/path": "", +"slice_185/start_frame": 0, +"slice_186/end_frame": 0, +"slice_186/loop_mode": 0, +"slice_186/name": "", +"slice_186/save_to_file/enabled": false, +"slice_186/save_to_file/keep_custom_tracks": false, +"slice_186/save_to_file/path": "", +"slice_186/start_frame": 0, +"slice_187/end_frame": 0, +"slice_187/loop_mode": 0, +"slice_187/name": "", +"slice_187/save_to_file/enabled": false, +"slice_187/save_to_file/keep_custom_tracks": false, +"slice_187/save_to_file/path": "", +"slice_187/start_frame": 0, +"slice_188/end_frame": 0, +"slice_188/loop_mode": 0, +"slice_188/name": "", +"slice_188/save_to_file/enabled": false, +"slice_188/save_to_file/keep_custom_tracks": false, +"slice_188/save_to_file/path": "", +"slice_188/start_frame": 0, +"slice_189/end_frame": 0, +"slice_189/loop_mode": 0, +"slice_189/name": "", +"slice_189/save_to_file/enabled": false, +"slice_189/save_to_file/keep_custom_tracks": false, +"slice_189/save_to_file/path": "", +"slice_189/start_frame": 0, +"slice_19/end_frame": 0, +"slice_19/loop_mode": 0, +"slice_19/name": "", +"slice_19/save_to_file/enabled": false, +"slice_19/save_to_file/keep_custom_tracks": false, +"slice_19/save_to_file/path": "", +"slice_19/start_frame": 0, +"slice_190/end_frame": 0, +"slice_190/loop_mode": 0, +"slice_190/name": "", +"slice_190/save_to_file/enabled": false, +"slice_190/save_to_file/keep_custom_tracks": false, +"slice_190/save_to_file/path": "", +"slice_190/start_frame": 0, +"slice_191/end_frame": 0, +"slice_191/loop_mode": 0, +"slice_191/name": "", +"slice_191/save_to_file/enabled": false, +"slice_191/save_to_file/keep_custom_tracks": false, +"slice_191/save_to_file/path": "", +"slice_191/start_frame": 0, +"slice_192/end_frame": 0, +"slice_192/loop_mode": 0, +"slice_192/name": "", +"slice_192/save_to_file/enabled": false, +"slice_192/save_to_file/keep_custom_tracks": false, +"slice_192/save_to_file/path": "", +"slice_192/start_frame": 0, +"slice_193/end_frame": 0, +"slice_193/loop_mode": 0, +"slice_193/name": "", +"slice_193/save_to_file/enabled": false, +"slice_193/save_to_file/keep_custom_tracks": false, +"slice_193/save_to_file/path": "", +"slice_193/start_frame": 0, +"slice_194/end_frame": 0, +"slice_194/loop_mode": 0, +"slice_194/name": "", +"slice_194/save_to_file/enabled": false, +"slice_194/save_to_file/keep_custom_tracks": false, +"slice_194/save_to_file/path": "", +"slice_194/start_frame": 0, +"slice_195/end_frame": 0, +"slice_195/loop_mode": 0, +"slice_195/name": "", +"slice_195/save_to_file/enabled": false, +"slice_195/save_to_file/keep_custom_tracks": false, +"slice_195/save_to_file/path": "", +"slice_195/start_frame": 0, +"slice_196/end_frame": 0, +"slice_196/loop_mode": 0, +"slice_196/name": "", +"slice_196/save_to_file/enabled": false, +"slice_196/save_to_file/keep_custom_tracks": false, +"slice_196/save_to_file/path": "", +"slice_196/start_frame": 0, +"slice_197/end_frame": 0, +"slice_197/loop_mode": 0, +"slice_197/name": "", +"slice_197/save_to_file/enabled": false, +"slice_197/save_to_file/keep_custom_tracks": false, +"slice_197/save_to_file/path": "", +"slice_197/start_frame": 0, +"slice_198/end_frame": 0, +"slice_198/loop_mode": 0, +"slice_198/name": "", +"slice_198/save_to_file/enabled": false, +"slice_198/save_to_file/keep_custom_tracks": false, +"slice_198/save_to_file/path": "", +"slice_198/start_frame": 0, +"slice_199/end_frame": 0, +"slice_199/loop_mode": 0, +"slice_199/name": "", +"slice_199/save_to_file/enabled": false, +"slice_199/save_to_file/keep_custom_tracks": false, +"slice_199/save_to_file/path": "", +"slice_199/start_frame": 0, +"slice_2/end_frame": 0, +"slice_2/loop_mode": 0, +"slice_2/name": "", +"slice_2/save_to_file/enabled": false, +"slice_2/save_to_file/keep_custom_tracks": false, +"slice_2/save_to_file/path": "", +"slice_2/start_frame": 0, +"slice_20/end_frame": 0, +"slice_20/loop_mode": 0, +"slice_20/name": "", +"slice_20/save_to_file/enabled": false, +"slice_20/save_to_file/keep_custom_tracks": false, +"slice_20/save_to_file/path": "", +"slice_20/start_frame": 0, +"slice_200/end_frame": 0, +"slice_200/loop_mode": 0, +"slice_200/name": "", +"slice_200/save_to_file/enabled": false, +"slice_200/save_to_file/keep_custom_tracks": false, +"slice_200/save_to_file/path": "", +"slice_200/start_frame": 0, +"slice_201/end_frame": 0, +"slice_201/loop_mode": 0, +"slice_201/name": "", +"slice_201/save_to_file/enabled": false, +"slice_201/save_to_file/keep_custom_tracks": false, +"slice_201/save_to_file/path": "", +"slice_201/start_frame": 0, +"slice_202/end_frame": 0, +"slice_202/loop_mode": 0, +"slice_202/name": "", +"slice_202/save_to_file/enabled": false, +"slice_202/save_to_file/keep_custom_tracks": false, +"slice_202/save_to_file/path": "", +"slice_202/start_frame": 0, +"slice_203/end_frame": 0, +"slice_203/loop_mode": 0, +"slice_203/name": "", +"slice_203/save_to_file/enabled": false, +"slice_203/save_to_file/keep_custom_tracks": false, +"slice_203/save_to_file/path": "", +"slice_203/start_frame": 0, +"slice_204/end_frame": 0, +"slice_204/loop_mode": 0, +"slice_204/name": "", +"slice_204/save_to_file/enabled": false, +"slice_204/save_to_file/keep_custom_tracks": false, +"slice_204/save_to_file/path": "", +"slice_204/start_frame": 0, +"slice_205/end_frame": 0, +"slice_205/loop_mode": 0, +"slice_205/name": "", +"slice_205/save_to_file/enabled": false, +"slice_205/save_to_file/keep_custom_tracks": false, +"slice_205/save_to_file/path": "", +"slice_205/start_frame": 0, +"slice_206/end_frame": 0, +"slice_206/loop_mode": 0, +"slice_206/name": "", +"slice_206/save_to_file/enabled": false, +"slice_206/save_to_file/keep_custom_tracks": false, +"slice_206/save_to_file/path": "", +"slice_206/start_frame": 0, +"slice_207/end_frame": 0, +"slice_207/loop_mode": 0, +"slice_207/name": "", +"slice_207/save_to_file/enabled": false, +"slice_207/save_to_file/keep_custom_tracks": false, +"slice_207/save_to_file/path": "", +"slice_207/start_frame": 0, +"slice_208/end_frame": 0, +"slice_208/loop_mode": 0, +"slice_208/name": "", +"slice_208/save_to_file/enabled": false, +"slice_208/save_to_file/keep_custom_tracks": false, +"slice_208/save_to_file/path": "", +"slice_208/start_frame": 0, +"slice_209/end_frame": 0, +"slice_209/loop_mode": 0, +"slice_209/name": "", +"slice_209/save_to_file/enabled": false, +"slice_209/save_to_file/keep_custom_tracks": false, +"slice_209/save_to_file/path": "", +"slice_209/start_frame": 0, +"slice_21/end_frame": 0, +"slice_21/loop_mode": 0, +"slice_21/name": "", +"slice_21/save_to_file/enabled": false, +"slice_21/save_to_file/keep_custom_tracks": false, +"slice_21/save_to_file/path": "", +"slice_21/start_frame": 0, +"slice_210/end_frame": 0, +"slice_210/loop_mode": 0, +"slice_210/name": "", +"slice_210/save_to_file/enabled": false, +"slice_210/save_to_file/keep_custom_tracks": false, +"slice_210/save_to_file/path": "", +"slice_210/start_frame": 0, +"slice_211/end_frame": 0, +"slice_211/loop_mode": 0, +"slice_211/name": "", +"slice_211/save_to_file/enabled": false, +"slice_211/save_to_file/keep_custom_tracks": false, +"slice_211/save_to_file/path": "", +"slice_211/start_frame": 0, +"slice_212/end_frame": 0, +"slice_212/loop_mode": 0, +"slice_212/name": "", +"slice_212/save_to_file/enabled": false, +"slice_212/save_to_file/keep_custom_tracks": false, +"slice_212/save_to_file/path": "", +"slice_212/start_frame": 0, +"slice_213/end_frame": 0, +"slice_213/loop_mode": 0, +"slice_213/name": "", +"slice_213/save_to_file/enabled": false, +"slice_213/save_to_file/keep_custom_tracks": false, +"slice_213/save_to_file/path": "", +"slice_213/start_frame": 0, +"slice_214/end_frame": 0, +"slice_214/loop_mode": 0, +"slice_214/name": "", +"slice_214/save_to_file/enabled": false, +"slice_214/save_to_file/keep_custom_tracks": false, +"slice_214/save_to_file/path": "", +"slice_214/start_frame": 0, +"slice_215/end_frame": 0, +"slice_215/loop_mode": 0, +"slice_215/name": "", +"slice_215/save_to_file/enabled": false, +"slice_215/save_to_file/keep_custom_tracks": false, +"slice_215/save_to_file/path": "", +"slice_215/start_frame": 0, +"slice_216/end_frame": 0, +"slice_216/loop_mode": 0, +"slice_216/name": "", +"slice_216/save_to_file/enabled": false, +"slice_216/save_to_file/keep_custom_tracks": false, +"slice_216/save_to_file/path": "", +"slice_216/start_frame": 0, +"slice_217/end_frame": 0, +"slice_217/loop_mode": 0, +"slice_217/name": "", +"slice_217/save_to_file/enabled": false, +"slice_217/save_to_file/keep_custom_tracks": false, +"slice_217/save_to_file/path": "", +"slice_217/start_frame": 0, +"slice_218/end_frame": 0, +"slice_218/loop_mode": 0, +"slice_218/name": "", +"slice_218/save_to_file/enabled": false, +"slice_218/save_to_file/keep_custom_tracks": false, +"slice_218/save_to_file/path": "", +"slice_218/start_frame": 0, +"slice_219/end_frame": 0, +"slice_219/loop_mode": 0, +"slice_219/name": "", +"slice_219/save_to_file/enabled": false, +"slice_219/save_to_file/keep_custom_tracks": false, +"slice_219/save_to_file/path": "", +"slice_219/start_frame": 0, +"slice_22/end_frame": 0, +"slice_22/loop_mode": 0, +"slice_22/name": "", +"slice_22/save_to_file/enabled": false, +"slice_22/save_to_file/keep_custom_tracks": false, +"slice_22/save_to_file/path": "", +"slice_22/start_frame": 0, +"slice_220/end_frame": 0, +"slice_220/loop_mode": 0, +"slice_220/name": "", +"slice_220/save_to_file/enabled": false, +"slice_220/save_to_file/keep_custom_tracks": false, +"slice_220/save_to_file/path": "", +"slice_220/start_frame": 0, +"slice_221/end_frame": 0, +"slice_221/loop_mode": 0, +"slice_221/name": "", +"slice_221/save_to_file/enabled": false, +"slice_221/save_to_file/keep_custom_tracks": false, +"slice_221/save_to_file/path": "", +"slice_221/start_frame": 0, +"slice_222/end_frame": 0, +"slice_222/loop_mode": 0, +"slice_222/name": "", +"slice_222/save_to_file/enabled": false, +"slice_222/save_to_file/keep_custom_tracks": false, +"slice_222/save_to_file/path": "", +"slice_222/start_frame": 0, +"slice_223/end_frame": 0, +"slice_223/loop_mode": 0, +"slice_223/name": "", +"slice_223/save_to_file/enabled": false, +"slice_223/save_to_file/keep_custom_tracks": false, +"slice_223/save_to_file/path": "", +"slice_223/start_frame": 0, +"slice_224/end_frame": 0, +"slice_224/loop_mode": 0, +"slice_224/name": "", +"slice_224/save_to_file/enabled": false, +"slice_224/save_to_file/keep_custom_tracks": false, +"slice_224/save_to_file/path": "", +"slice_224/start_frame": 0, +"slice_225/end_frame": 0, +"slice_225/loop_mode": 0, +"slice_225/name": "", +"slice_225/save_to_file/enabled": false, +"slice_225/save_to_file/keep_custom_tracks": false, +"slice_225/save_to_file/path": "", +"slice_225/start_frame": 0, +"slice_226/end_frame": 0, +"slice_226/loop_mode": 0, +"slice_226/name": "", +"slice_226/save_to_file/enabled": false, +"slice_226/save_to_file/keep_custom_tracks": false, +"slice_226/save_to_file/path": "", +"slice_226/start_frame": 0, +"slice_227/end_frame": 0, +"slice_227/loop_mode": 0, +"slice_227/name": "", +"slice_227/save_to_file/enabled": false, +"slice_227/save_to_file/keep_custom_tracks": false, +"slice_227/save_to_file/path": "", +"slice_227/start_frame": 0, +"slice_228/end_frame": 0, +"slice_228/loop_mode": 0, +"slice_228/name": "", +"slice_228/save_to_file/enabled": false, +"slice_228/save_to_file/keep_custom_tracks": false, +"slice_228/save_to_file/path": "", +"slice_228/start_frame": 0, +"slice_229/end_frame": 0, +"slice_229/loop_mode": 0, +"slice_229/name": "", +"slice_229/save_to_file/enabled": false, +"slice_229/save_to_file/keep_custom_tracks": false, +"slice_229/save_to_file/path": "", +"slice_229/start_frame": 0, +"slice_23/end_frame": 0, +"slice_23/loop_mode": 0, +"slice_23/name": "", +"slice_23/save_to_file/enabled": false, +"slice_23/save_to_file/keep_custom_tracks": false, +"slice_23/save_to_file/path": "", +"slice_23/start_frame": 0, +"slice_230/end_frame": 0, +"slice_230/loop_mode": 0, +"slice_230/name": "", +"slice_230/save_to_file/enabled": false, +"slice_230/save_to_file/keep_custom_tracks": false, +"slice_230/save_to_file/path": "", +"slice_230/start_frame": 0, +"slice_231/end_frame": 0, +"slice_231/loop_mode": 0, +"slice_231/name": "", +"slice_231/save_to_file/enabled": false, +"slice_231/save_to_file/keep_custom_tracks": false, +"slice_231/save_to_file/path": "", +"slice_231/start_frame": 0, +"slice_232/end_frame": 0, +"slice_232/loop_mode": 0, +"slice_232/name": "", +"slice_232/save_to_file/enabled": false, +"slice_232/save_to_file/keep_custom_tracks": false, +"slice_232/save_to_file/path": "", +"slice_232/start_frame": 0, +"slice_233/end_frame": 0, +"slice_233/loop_mode": 0, +"slice_233/name": "", +"slice_233/save_to_file/enabled": false, +"slice_233/save_to_file/keep_custom_tracks": false, +"slice_233/save_to_file/path": "", +"slice_233/start_frame": 0, +"slice_234/end_frame": 0, +"slice_234/loop_mode": 0, +"slice_234/name": "", +"slice_234/save_to_file/enabled": false, +"slice_234/save_to_file/keep_custom_tracks": false, +"slice_234/save_to_file/path": "", +"slice_234/start_frame": 0, +"slice_235/end_frame": 0, +"slice_235/loop_mode": 0, +"slice_235/name": "", +"slice_235/save_to_file/enabled": false, +"slice_235/save_to_file/keep_custom_tracks": false, +"slice_235/save_to_file/path": "", +"slice_235/start_frame": 0, +"slice_236/end_frame": 0, +"slice_236/loop_mode": 0, +"slice_236/name": "", +"slice_236/save_to_file/enabled": false, +"slice_236/save_to_file/keep_custom_tracks": false, +"slice_236/save_to_file/path": "", +"slice_236/start_frame": 0, +"slice_237/end_frame": 0, +"slice_237/loop_mode": 0, +"slice_237/name": "", +"slice_237/save_to_file/enabled": false, +"slice_237/save_to_file/keep_custom_tracks": false, +"slice_237/save_to_file/path": "", +"slice_237/start_frame": 0, +"slice_238/end_frame": 0, +"slice_238/loop_mode": 0, +"slice_238/name": "", +"slice_238/save_to_file/enabled": false, +"slice_238/save_to_file/keep_custom_tracks": false, +"slice_238/save_to_file/path": "", +"slice_238/start_frame": 0, +"slice_239/end_frame": 0, +"slice_239/loop_mode": 0, +"slice_239/name": "", +"slice_239/save_to_file/enabled": false, +"slice_239/save_to_file/keep_custom_tracks": false, +"slice_239/save_to_file/path": "", +"slice_239/start_frame": 0, +"slice_24/end_frame": 0, +"slice_24/loop_mode": 0, +"slice_24/name": "", +"slice_24/save_to_file/enabled": false, +"slice_24/save_to_file/keep_custom_tracks": false, +"slice_24/save_to_file/path": "", +"slice_24/start_frame": 0, +"slice_240/end_frame": 0, +"slice_240/loop_mode": 0, +"slice_240/name": "", +"slice_240/save_to_file/enabled": false, +"slice_240/save_to_file/keep_custom_tracks": false, +"slice_240/save_to_file/path": "", +"slice_240/start_frame": 0, +"slice_241/end_frame": 0, +"slice_241/loop_mode": 0, +"slice_241/name": "", +"slice_241/save_to_file/enabled": false, +"slice_241/save_to_file/keep_custom_tracks": false, +"slice_241/save_to_file/path": "", +"slice_241/start_frame": 0, +"slice_242/end_frame": 0, +"slice_242/loop_mode": 0, +"slice_242/name": "", +"slice_242/save_to_file/enabled": false, +"slice_242/save_to_file/keep_custom_tracks": false, +"slice_242/save_to_file/path": "", +"slice_242/start_frame": 0, +"slice_243/end_frame": 0, +"slice_243/loop_mode": 0, +"slice_243/name": "", +"slice_243/save_to_file/enabled": false, +"slice_243/save_to_file/keep_custom_tracks": false, +"slice_243/save_to_file/path": "", +"slice_243/start_frame": 0, +"slice_244/end_frame": 0, +"slice_244/loop_mode": 0, +"slice_244/name": "", +"slice_244/save_to_file/enabled": false, +"slice_244/save_to_file/keep_custom_tracks": false, +"slice_244/save_to_file/path": "", +"slice_244/start_frame": 0, +"slice_245/end_frame": 0, +"slice_245/loop_mode": 0, +"slice_245/name": "", +"slice_245/save_to_file/enabled": false, +"slice_245/save_to_file/keep_custom_tracks": false, +"slice_245/save_to_file/path": "", +"slice_245/start_frame": 0, +"slice_246/end_frame": 0, +"slice_246/loop_mode": 0, +"slice_246/name": "", +"slice_246/save_to_file/enabled": false, +"slice_246/save_to_file/keep_custom_tracks": false, +"slice_246/save_to_file/path": "", +"slice_246/start_frame": 0, +"slice_247/end_frame": 0, +"slice_247/loop_mode": 0, +"slice_247/name": "", +"slice_247/save_to_file/enabled": false, +"slice_247/save_to_file/keep_custom_tracks": false, +"slice_247/save_to_file/path": "", +"slice_247/start_frame": 0, +"slice_248/end_frame": 0, +"slice_248/loop_mode": 0, +"slice_248/name": "", +"slice_248/save_to_file/enabled": false, +"slice_248/save_to_file/keep_custom_tracks": false, +"slice_248/save_to_file/path": "", +"slice_248/start_frame": 0, +"slice_249/end_frame": 0, +"slice_249/loop_mode": 0, +"slice_249/name": "", +"slice_249/save_to_file/enabled": false, +"slice_249/save_to_file/keep_custom_tracks": false, +"slice_249/save_to_file/path": "", +"slice_249/start_frame": 0, +"slice_25/end_frame": 0, +"slice_25/loop_mode": 0, +"slice_25/name": "", +"slice_25/save_to_file/enabled": false, +"slice_25/save_to_file/keep_custom_tracks": false, +"slice_25/save_to_file/path": "", +"slice_25/start_frame": 0, +"slice_250/end_frame": 0, +"slice_250/loop_mode": 0, +"slice_250/name": "", +"slice_250/save_to_file/enabled": false, +"slice_250/save_to_file/keep_custom_tracks": false, +"slice_250/save_to_file/path": "", +"slice_250/start_frame": 0, +"slice_251/end_frame": 0, +"slice_251/loop_mode": 0, +"slice_251/name": "", +"slice_251/save_to_file/enabled": false, +"slice_251/save_to_file/keep_custom_tracks": false, +"slice_251/save_to_file/path": "", +"slice_251/start_frame": 0, +"slice_252/end_frame": 0, +"slice_252/loop_mode": 0, +"slice_252/name": "", +"slice_252/save_to_file/enabled": false, +"slice_252/save_to_file/keep_custom_tracks": false, +"slice_252/save_to_file/path": "", +"slice_252/start_frame": 0, +"slice_253/end_frame": 0, +"slice_253/loop_mode": 0, +"slice_253/name": "", +"slice_253/save_to_file/enabled": false, +"slice_253/save_to_file/keep_custom_tracks": false, +"slice_253/save_to_file/path": "", +"slice_253/start_frame": 0, +"slice_254/end_frame": 0, +"slice_254/loop_mode": 0, +"slice_254/name": "", +"slice_254/save_to_file/enabled": false, +"slice_254/save_to_file/keep_custom_tracks": false, +"slice_254/save_to_file/path": "", +"slice_254/start_frame": 0, +"slice_255/end_frame": 0, +"slice_255/loop_mode": 0, +"slice_255/name": "", +"slice_255/save_to_file/enabled": false, +"slice_255/save_to_file/keep_custom_tracks": false, +"slice_255/save_to_file/path": "", +"slice_255/start_frame": 0, +"slice_256/end_frame": 0, +"slice_256/loop_mode": 0, +"slice_256/name": "", +"slice_256/save_to_file/enabled": false, +"slice_256/save_to_file/keep_custom_tracks": false, +"slice_256/save_to_file/path": "", +"slice_256/start_frame": 0, +"slice_26/end_frame": 0, +"slice_26/loop_mode": 0, +"slice_26/name": "", +"slice_26/save_to_file/enabled": false, +"slice_26/save_to_file/keep_custom_tracks": false, +"slice_26/save_to_file/path": "", +"slice_26/start_frame": 0, +"slice_27/end_frame": 0, +"slice_27/loop_mode": 0, +"slice_27/name": "", +"slice_27/save_to_file/enabled": false, +"slice_27/save_to_file/keep_custom_tracks": false, +"slice_27/save_to_file/path": "", +"slice_27/start_frame": 0, +"slice_28/end_frame": 0, +"slice_28/loop_mode": 0, +"slice_28/name": "", +"slice_28/save_to_file/enabled": false, +"slice_28/save_to_file/keep_custom_tracks": false, +"slice_28/save_to_file/path": "", +"slice_28/start_frame": 0, +"slice_29/end_frame": 0, +"slice_29/loop_mode": 0, +"slice_29/name": "", +"slice_29/save_to_file/enabled": false, +"slice_29/save_to_file/keep_custom_tracks": false, +"slice_29/save_to_file/path": "", +"slice_29/start_frame": 0, +"slice_3/end_frame": 0, +"slice_3/loop_mode": 0, +"slice_3/name": "", +"slice_3/save_to_file/enabled": false, +"slice_3/save_to_file/keep_custom_tracks": false, +"slice_3/save_to_file/path": "", +"slice_3/start_frame": 0, +"slice_30/end_frame": 0, +"slice_30/loop_mode": 0, +"slice_30/name": "", +"slice_30/save_to_file/enabled": false, +"slice_30/save_to_file/keep_custom_tracks": false, +"slice_30/save_to_file/path": "", +"slice_30/start_frame": 0, +"slice_31/end_frame": 0, +"slice_31/loop_mode": 0, +"slice_31/name": "", +"slice_31/save_to_file/enabled": false, +"slice_31/save_to_file/keep_custom_tracks": false, +"slice_31/save_to_file/path": "", +"slice_31/start_frame": 0, +"slice_32/end_frame": 0, +"slice_32/loop_mode": 0, +"slice_32/name": "", +"slice_32/save_to_file/enabled": false, +"slice_32/save_to_file/keep_custom_tracks": false, +"slice_32/save_to_file/path": "", +"slice_32/start_frame": 0, +"slice_33/end_frame": 0, +"slice_33/loop_mode": 0, +"slice_33/name": "", +"slice_33/save_to_file/enabled": false, +"slice_33/save_to_file/keep_custom_tracks": false, +"slice_33/save_to_file/path": "", +"slice_33/start_frame": 0, +"slice_34/end_frame": 0, +"slice_34/loop_mode": 0, +"slice_34/name": "", +"slice_34/save_to_file/enabled": false, +"slice_34/save_to_file/keep_custom_tracks": false, +"slice_34/save_to_file/path": "", +"slice_34/start_frame": 0, +"slice_35/end_frame": 0, +"slice_35/loop_mode": 0, +"slice_35/name": "", +"slice_35/save_to_file/enabled": false, +"slice_35/save_to_file/keep_custom_tracks": false, +"slice_35/save_to_file/path": "", +"slice_35/start_frame": 0, +"slice_36/end_frame": 0, +"slice_36/loop_mode": 0, +"slice_36/name": "", +"slice_36/save_to_file/enabled": false, +"slice_36/save_to_file/keep_custom_tracks": false, +"slice_36/save_to_file/path": "", +"slice_36/start_frame": 0, +"slice_37/end_frame": 0, +"slice_37/loop_mode": 0, +"slice_37/name": "", +"slice_37/save_to_file/enabled": false, +"slice_37/save_to_file/keep_custom_tracks": false, +"slice_37/save_to_file/path": "", +"slice_37/start_frame": 0, +"slice_38/end_frame": 0, +"slice_38/loop_mode": 0, +"slice_38/name": "", +"slice_38/save_to_file/enabled": false, +"slice_38/save_to_file/keep_custom_tracks": false, +"slice_38/save_to_file/path": "", +"slice_38/start_frame": 0, +"slice_39/end_frame": 0, +"slice_39/loop_mode": 0, +"slice_39/name": "", +"slice_39/save_to_file/enabled": false, +"slice_39/save_to_file/keep_custom_tracks": false, +"slice_39/save_to_file/path": "", +"slice_39/start_frame": 0, +"slice_4/end_frame": 0, +"slice_4/loop_mode": 0, +"slice_4/name": "", +"slice_4/save_to_file/enabled": false, +"slice_4/save_to_file/keep_custom_tracks": false, +"slice_4/save_to_file/path": "", +"slice_4/start_frame": 0, +"slice_40/end_frame": 0, +"slice_40/loop_mode": 0, +"slice_40/name": "", +"slice_40/save_to_file/enabled": false, +"slice_40/save_to_file/keep_custom_tracks": false, +"slice_40/save_to_file/path": "", +"slice_40/start_frame": 0, +"slice_41/end_frame": 0, +"slice_41/loop_mode": 0, +"slice_41/name": "", +"slice_41/save_to_file/enabled": false, +"slice_41/save_to_file/keep_custom_tracks": false, +"slice_41/save_to_file/path": "", +"slice_41/start_frame": 0, +"slice_42/end_frame": 0, +"slice_42/loop_mode": 0, +"slice_42/name": "", +"slice_42/save_to_file/enabled": false, +"slice_42/save_to_file/keep_custom_tracks": false, +"slice_42/save_to_file/path": "", +"slice_42/start_frame": 0, +"slice_43/end_frame": 0, +"slice_43/loop_mode": 0, +"slice_43/name": "", +"slice_43/save_to_file/enabled": false, +"slice_43/save_to_file/keep_custom_tracks": false, +"slice_43/save_to_file/path": "", +"slice_43/start_frame": 0, +"slice_44/end_frame": 0, +"slice_44/loop_mode": 0, +"slice_44/name": "", +"slice_44/save_to_file/enabled": false, +"slice_44/save_to_file/keep_custom_tracks": false, +"slice_44/save_to_file/path": "", +"slice_44/start_frame": 0, +"slice_45/end_frame": 0, +"slice_45/loop_mode": 0, +"slice_45/name": "", +"slice_45/save_to_file/enabled": false, +"slice_45/save_to_file/keep_custom_tracks": false, +"slice_45/save_to_file/path": "", +"slice_45/start_frame": 0, +"slice_46/end_frame": 0, +"slice_46/loop_mode": 0, +"slice_46/name": "", +"slice_46/save_to_file/enabled": false, +"slice_46/save_to_file/keep_custom_tracks": false, +"slice_46/save_to_file/path": "", +"slice_46/start_frame": 0, +"slice_47/end_frame": 0, +"slice_47/loop_mode": 0, +"slice_47/name": "", +"slice_47/save_to_file/enabled": false, +"slice_47/save_to_file/keep_custom_tracks": false, +"slice_47/save_to_file/path": "", +"slice_47/start_frame": 0, +"slice_48/end_frame": 0, +"slice_48/loop_mode": 0, +"slice_48/name": "", +"slice_48/save_to_file/enabled": false, +"slice_48/save_to_file/keep_custom_tracks": false, +"slice_48/save_to_file/path": "", +"slice_48/start_frame": 0, +"slice_49/end_frame": 0, +"slice_49/loop_mode": 0, +"slice_49/name": "", +"slice_49/save_to_file/enabled": false, +"slice_49/save_to_file/keep_custom_tracks": false, +"slice_49/save_to_file/path": "", +"slice_49/start_frame": 0, +"slice_5/end_frame": 0, +"slice_5/loop_mode": 0, +"slice_5/name": "", +"slice_5/save_to_file/enabled": false, +"slice_5/save_to_file/keep_custom_tracks": false, +"slice_5/save_to_file/path": "", +"slice_5/start_frame": 0, +"slice_50/end_frame": 0, +"slice_50/loop_mode": 0, +"slice_50/name": "", +"slice_50/save_to_file/enabled": false, +"slice_50/save_to_file/keep_custom_tracks": false, +"slice_50/save_to_file/path": "", +"slice_50/start_frame": 0, +"slice_51/end_frame": 0, +"slice_51/loop_mode": 0, +"slice_51/name": "", +"slice_51/save_to_file/enabled": false, +"slice_51/save_to_file/keep_custom_tracks": false, +"slice_51/save_to_file/path": "", +"slice_51/start_frame": 0, +"slice_52/end_frame": 0, +"slice_52/loop_mode": 0, +"slice_52/name": "", +"slice_52/save_to_file/enabled": false, +"slice_52/save_to_file/keep_custom_tracks": false, +"slice_52/save_to_file/path": "", +"slice_52/start_frame": 0, +"slice_53/end_frame": 0, +"slice_53/loop_mode": 0, +"slice_53/name": "", +"slice_53/save_to_file/enabled": false, +"slice_53/save_to_file/keep_custom_tracks": false, +"slice_53/save_to_file/path": "", +"slice_53/start_frame": 0, +"slice_54/end_frame": 0, +"slice_54/loop_mode": 0, +"slice_54/name": "", +"slice_54/save_to_file/enabled": false, +"slice_54/save_to_file/keep_custom_tracks": false, +"slice_54/save_to_file/path": "", +"slice_54/start_frame": 0, +"slice_55/end_frame": 0, +"slice_55/loop_mode": 0, +"slice_55/name": "", +"slice_55/save_to_file/enabled": false, +"slice_55/save_to_file/keep_custom_tracks": false, +"slice_55/save_to_file/path": "", +"slice_55/start_frame": 0, +"slice_56/end_frame": 0, +"slice_56/loop_mode": 0, +"slice_56/name": "", +"slice_56/save_to_file/enabled": false, +"slice_56/save_to_file/keep_custom_tracks": false, +"slice_56/save_to_file/path": "", +"slice_56/start_frame": 0, +"slice_57/end_frame": 0, +"slice_57/loop_mode": 0, +"slice_57/name": "", +"slice_57/save_to_file/enabled": false, +"slice_57/save_to_file/keep_custom_tracks": false, +"slice_57/save_to_file/path": "", +"slice_57/start_frame": 0, +"slice_58/end_frame": 0, +"slice_58/loop_mode": 0, +"slice_58/name": "", +"slice_58/save_to_file/enabled": false, +"slice_58/save_to_file/keep_custom_tracks": false, +"slice_58/save_to_file/path": "", +"slice_58/start_frame": 0, +"slice_59/end_frame": 0, +"slice_59/loop_mode": 0, +"slice_59/name": "", +"slice_59/save_to_file/enabled": false, +"slice_59/save_to_file/keep_custom_tracks": false, +"slice_59/save_to_file/path": "", +"slice_59/start_frame": 0, +"slice_6/end_frame": 0, +"slice_6/loop_mode": 0, +"slice_6/name": "", +"slice_6/save_to_file/enabled": false, +"slice_6/save_to_file/keep_custom_tracks": false, +"slice_6/save_to_file/path": "", +"slice_6/start_frame": 0, +"slice_60/end_frame": 0, +"slice_60/loop_mode": 0, +"slice_60/name": "", +"slice_60/save_to_file/enabled": false, +"slice_60/save_to_file/keep_custom_tracks": false, +"slice_60/save_to_file/path": "", +"slice_60/start_frame": 0, +"slice_61/end_frame": 0, +"slice_61/loop_mode": 0, +"slice_61/name": "", +"slice_61/save_to_file/enabled": false, +"slice_61/save_to_file/keep_custom_tracks": false, +"slice_61/save_to_file/path": "", +"slice_61/start_frame": 0, +"slice_62/end_frame": 0, +"slice_62/loop_mode": 0, +"slice_62/name": "", +"slice_62/save_to_file/enabled": false, +"slice_62/save_to_file/keep_custom_tracks": false, +"slice_62/save_to_file/path": "", +"slice_62/start_frame": 0, +"slice_63/end_frame": 0, +"slice_63/loop_mode": 0, +"slice_63/name": "", +"slice_63/save_to_file/enabled": false, +"slice_63/save_to_file/keep_custom_tracks": false, +"slice_63/save_to_file/path": "", +"slice_63/start_frame": 0, +"slice_64/end_frame": 0, +"slice_64/loop_mode": 0, +"slice_64/name": "", +"slice_64/save_to_file/enabled": false, +"slice_64/save_to_file/keep_custom_tracks": false, +"slice_64/save_to_file/path": "", +"slice_64/start_frame": 0, +"slice_65/end_frame": 0, +"slice_65/loop_mode": 0, +"slice_65/name": "", +"slice_65/save_to_file/enabled": false, +"slice_65/save_to_file/keep_custom_tracks": false, +"slice_65/save_to_file/path": "", +"slice_65/start_frame": 0, +"slice_66/end_frame": 0, +"slice_66/loop_mode": 0, +"slice_66/name": "", +"slice_66/save_to_file/enabled": false, +"slice_66/save_to_file/keep_custom_tracks": false, +"slice_66/save_to_file/path": "", +"slice_66/start_frame": 0, +"slice_67/end_frame": 0, +"slice_67/loop_mode": 0, +"slice_67/name": "", +"slice_67/save_to_file/enabled": false, +"slice_67/save_to_file/keep_custom_tracks": false, +"slice_67/save_to_file/path": "", +"slice_67/start_frame": 0, +"slice_68/end_frame": 0, +"slice_68/loop_mode": 0, +"slice_68/name": "", +"slice_68/save_to_file/enabled": false, +"slice_68/save_to_file/keep_custom_tracks": false, +"slice_68/save_to_file/path": "", +"slice_68/start_frame": 0, +"slice_69/end_frame": 0, +"slice_69/loop_mode": 0, +"slice_69/name": "", +"slice_69/save_to_file/enabled": false, +"slice_69/save_to_file/keep_custom_tracks": false, +"slice_69/save_to_file/path": "", +"slice_69/start_frame": 0, +"slice_7/end_frame": 0, +"slice_7/loop_mode": 0, +"slice_7/name": "", +"slice_7/save_to_file/enabled": false, +"slice_7/save_to_file/keep_custom_tracks": false, +"slice_7/save_to_file/path": "", +"slice_7/start_frame": 0, +"slice_70/end_frame": 0, +"slice_70/loop_mode": 0, +"slice_70/name": "", +"slice_70/save_to_file/enabled": false, +"slice_70/save_to_file/keep_custom_tracks": false, +"slice_70/save_to_file/path": "", +"slice_70/start_frame": 0, +"slice_71/end_frame": 0, +"slice_71/loop_mode": 0, +"slice_71/name": "", +"slice_71/save_to_file/enabled": false, +"slice_71/save_to_file/keep_custom_tracks": false, +"slice_71/save_to_file/path": "", +"slice_71/start_frame": 0, +"slice_72/end_frame": 0, +"slice_72/loop_mode": 0, +"slice_72/name": "", +"slice_72/save_to_file/enabled": false, +"slice_72/save_to_file/keep_custom_tracks": false, +"slice_72/save_to_file/path": "", +"slice_72/start_frame": 0, +"slice_73/end_frame": 0, +"slice_73/loop_mode": 0, +"slice_73/name": "", +"slice_73/save_to_file/enabled": false, +"slice_73/save_to_file/keep_custom_tracks": false, +"slice_73/save_to_file/path": "", +"slice_73/start_frame": 0, +"slice_74/end_frame": 0, +"slice_74/loop_mode": 0, +"slice_74/name": "", +"slice_74/save_to_file/enabled": false, +"slice_74/save_to_file/keep_custom_tracks": false, +"slice_74/save_to_file/path": "", +"slice_74/start_frame": 0, +"slice_75/end_frame": 0, +"slice_75/loop_mode": 0, +"slice_75/name": "", +"slice_75/save_to_file/enabled": false, +"slice_75/save_to_file/keep_custom_tracks": false, +"slice_75/save_to_file/path": "", +"slice_75/start_frame": 0, +"slice_76/end_frame": 0, +"slice_76/loop_mode": 0, +"slice_76/name": "", +"slice_76/save_to_file/enabled": false, +"slice_76/save_to_file/keep_custom_tracks": false, +"slice_76/save_to_file/path": "", +"slice_76/start_frame": 0, +"slice_77/end_frame": 0, +"slice_77/loop_mode": 0, +"slice_77/name": "", +"slice_77/save_to_file/enabled": false, +"slice_77/save_to_file/keep_custom_tracks": false, +"slice_77/save_to_file/path": "", +"slice_77/start_frame": 0, +"slice_78/end_frame": 0, +"slice_78/loop_mode": 0, +"slice_78/name": "", +"slice_78/save_to_file/enabled": false, +"slice_78/save_to_file/keep_custom_tracks": false, +"slice_78/save_to_file/path": "", +"slice_78/start_frame": 0, +"slice_79/end_frame": 0, +"slice_79/loop_mode": 0, +"slice_79/name": "", +"slice_79/save_to_file/enabled": false, +"slice_79/save_to_file/keep_custom_tracks": false, +"slice_79/save_to_file/path": "", +"slice_79/start_frame": 0, +"slice_8/end_frame": 0, +"slice_8/loop_mode": 0, +"slice_8/name": "", +"slice_8/save_to_file/enabled": false, +"slice_8/save_to_file/keep_custom_tracks": false, +"slice_8/save_to_file/path": "", +"slice_8/start_frame": 0, +"slice_80/end_frame": 0, +"slice_80/loop_mode": 0, +"slice_80/name": "", +"slice_80/save_to_file/enabled": false, +"slice_80/save_to_file/keep_custom_tracks": false, +"slice_80/save_to_file/path": "", +"slice_80/start_frame": 0, +"slice_81/end_frame": 0, +"slice_81/loop_mode": 0, +"slice_81/name": "", +"slice_81/save_to_file/enabled": false, +"slice_81/save_to_file/keep_custom_tracks": false, +"slice_81/save_to_file/path": "", +"slice_81/start_frame": 0, +"slice_82/end_frame": 0, +"slice_82/loop_mode": 0, +"slice_82/name": "", +"slice_82/save_to_file/enabled": false, +"slice_82/save_to_file/keep_custom_tracks": false, +"slice_82/save_to_file/path": "", +"slice_82/start_frame": 0, +"slice_83/end_frame": 0, +"slice_83/loop_mode": 0, +"slice_83/name": "", +"slice_83/save_to_file/enabled": false, +"slice_83/save_to_file/keep_custom_tracks": false, +"slice_83/save_to_file/path": "", +"slice_83/start_frame": 0, +"slice_84/end_frame": 0, +"slice_84/loop_mode": 0, +"slice_84/name": "", +"slice_84/save_to_file/enabled": false, +"slice_84/save_to_file/keep_custom_tracks": false, +"slice_84/save_to_file/path": "", +"slice_84/start_frame": 0, +"slice_85/end_frame": 0, +"slice_85/loop_mode": 0, +"slice_85/name": "", +"slice_85/save_to_file/enabled": false, +"slice_85/save_to_file/keep_custom_tracks": false, +"slice_85/save_to_file/path": "", +"slice_85/start_frame": 0, +"slice_86/end_frame": 0, +"slice_86/loop_mode": 0, +"slice_86/name": "", +"slice_86/save_to_file/enabled": false, +"slice_86/save_to_file/keep_custom_tracks": false, +"slice_86/save_to_file/path": "", +"slice_86/start_frame": 0, +"slice_87/end_frame": 0, +"slice_87/loop_mode": 0, +"slice_87/name": "", +"slice_87/save_to_file/enabled": false, +"slice_87/save_to_file/keep_custom_tracks": false, +"slice_87/save_to_file/path": "", +"slice_87/start_frame": 0, +"slice_88/end_frame": 0, +"slice_88/loop_mode": 0, +"slice_88/name": "", +"slice_88/save_to_file/enabled": false, +"slice_88/save_to_file/keep_custom_tracks": false, +"slice_88/save_to_file/path": "", +"slice_88/start_frame": 0, +"slice_89/end_frame": 0, +"slice_89/loop_mode": 0, +"slice_89/name": "", +"slice_89/save_to_file/enabled": false, +"slice_89/save_to_file/keep_custom_tracks": false, +"slice_89/save_to_file/path": "", +"slice_89/start_frame": 0, +"slice_9/end_frame": 0, +"slice_9/loop_mode": 0, +"slice_9/name": "", +"slice_9/save_to_file/enabled": false, +"slice_9/save_to_file/keep_custom_tracks": false, +"slice_9/save_to_file/path": "", +"slice_9/start_frame": 0, +"slice_90/end_frame": 0, +"slice_90/loop_mode": 0, +"slice_90/name": "", +"slice_90/save_to_file/enabled": false, +"slice_90/save_to_file/keep_custom_tracks": false, +"slice_90/save_to_file/path": "", +"slice_90/start_frame": 0, +"slice_91/end_frame": 0, +"slice_91/loop_mode": 0, +"slice_91/name": "", +"slice_91/save_to_file/enabled": false, +"slice_91/save_to_file/keep_custom_tracks": false, +"slice_91/save_to_file/path": "", +"slice_91/start_frame": 0, +"slice_92/end_frame": 0, +"slice_92/loop_mode": 0, +"slice_92/name": "", +"slice_92/save_to_file/enabled": false, +"slice_92/save_to_file/keep_custom_tracks": false, +"slice_92/save_to_file/path": "", +"slice_92/start_frame": 0, +"slice_93/end_frame": 0, +"slice_93/loop_mode": 0, +"slice_93/name": "", +"slice_93/save_to_file/enabled": false, +"slice_93/save_to_file/keep_custom_tracks": false, +"slice_93/save_to_file/path": "", +"slice_93/start_frame": 0, +"slice_94/end_frame": 0, +"slice_94/loop_mode": 0, +"slice_94/name": "", +"slice_94/save_to_file/enabled": false, +"slice_94/save_to_file/keep_custom_tracks": false, +"slice_94/save_to_file/path": "", +"slice_94/start_frame": 0, +"slice_95/end_frame": 0, +"slice_95/loop_mode": 0, +"slice_95/name": "", +"slice_95/save_to_file/enabled": false, +"slice_95/save_to_file/keep_custom_tracks": false, +"slice_95/save_to_file/path": "", +"slice_95/start_frame": 0, +"slice_96/end_frame": 0, +"slice_96/loop_mode": 0, +"slice_96/name": "", +"slice_96/save_to_file/enabled": false, +"slice_96/save_to_file/keep_custom_tracks": false, +"slice_96/save_to_file/path": "", +"slice_96/start_frame": 0, +"slice_97/end_frame": 0, +"slice_97/loop_mode": 0, +"slice_97/name": "", +"slice_97/save_to_file/enabled": false, +"slice_97/save_to_file/keep_custom_tracks": false, +"slice_97/save_to_file/path": "", +"slice_97/start_frame": 0, +"slice_98/end_frame": 0, +"slice_98/loop_mode": 0, +"slice_98/name": "", +"slice_98/save_to_file/enabled": false, +"slice_98/save_to_file/keep_custom_tracks": false, +"slice_98/save_to_file/path": "", +"slice_98/start_frame": 0, +"slice_99/end_frame": 0, +"slice_99/loop_mode": 0, +"slice_99/name": "", +"slice_99/save_to_file/enabled": false, +"slice_99/save_to_file/keep_custom_tracks": false, +"slice_99/save_to_file/path": "", +"slice_99/start_frame": 0, +"slices/amount": 0 +}, +"Vert|Move": { +"save_to_file/enabled": true, +"save_to_file/keep_custom_tracks": "", +"save_to_file/path": "res://content/enemies/animations/Vert_Move.res", +"settings/loop_mode": 1, +"slice_1/end_frame": 0, +"slice_1/loop_mode": 0, +"slice_1/name": "", +"slice_1/save_to_file/enabled": false, +"slice_1/save_to_file/keep_custom_tracks": false, +"slice_1/save_to_file/path": "", +"slice_1/start_frame": 0, +"slice_10/end_frame": 0, +"slice_10/loop_mode": 0, +"slice_10/name": "", +"slice_10/save_to_file/enabled": false, +"slice_10/save_to_file/keep_custom_tracks": false, +"slice_10/save_to_file/path": "", +"slice_10/start_frame": 0, +"slice_100/end_frame": 0, +"slice_100/loop_mode": 0, +"slice_100/name": "", +"slice_100/save_to_file/enabled": false, +"slice_100/save_to_file/keep_custom_tracks": false, +"slice_100/save_to_file/path": "", +"slice_100/start_frame": 0, +"slice_101/end_frame": 0, +"slice_101/loop_mode": 0, +"slice_101/name": "", +"slice_101/save_to_file/enabled": false, +"slice_101/save_to_file/keep_custom_tracks": false, +"slice_101/save_to_file/path": "", +"slice_101/start_frame": 0, +"slice_102/end_frame": 0, +"slice_102/loop_mode": 0, +"slice_102/name": "", +"slice_102/save_to_file/enabled": false, +"slice_102/save_to_file/keep_custom_tracks": false, +"slice_102/save_to_file/path": "", +"slice_102/start_frame": 0, +"slice_103/end_frame": 0, +"slice_103/loop_mode": 0, +"slice_103/name": "", +"slice_103/save_to_file/enabled": false, +"slice_103/save_to_file/keep_custom_tracks": false, +"slice_103/save_to_file/path": "", +"slice_103/start_frame": 0, +"slice_104/end_frame": 0, +"slice_104/loop_mode": 0, +"slice_104/name": "", +"slice_104/save_to_file/enabled": false, +"slice_104/save_to_file/keep_custom_tracks": false, +"slice_104/save_to_file/path": "", +"slice_104/start_frame": 0, +"slice_105/end_frame": 0, +"slice_105/loop_mode": 0, +"slice_105/name": "", +"slice_105/save_to_file/enabled": false, +"slice_105/save_to_file/keep_custom_tracks": false, +"slice_105/save_to_file/path": "", +"slice_105/start_frame": 0, +"slice_106/end_frame": 0, +"slice_106/loop_mode": 0, +"slice_106/name": "", +"slice_106/save_to_file/enabled": false, +"slice_106/save_to_file/keep_custom_tracks": false, +"slice_106/save_to_file/path": "", +"slice_106/start_frame": 0, +"slice_107/end_frame": 0, +"slice_107/loop_mode": 0, +"slice_107/name": "", +"slice_107/save_to_file/enabled": false, +"slice_107/save_to_file/keep_custom_tracks": false, +"slice_107/save_to_file/path": "", +"slice_107/start_frame": 0, +"slice_108/end_frame": 0, +"slice_108/loop_mode": 0, +"slice_108/name": "", +"slice_108/save_to_file/enabled": false, +"slice_108/save_to_file/keep_custom_tracks": false, +"slice_108/save_to_file/path": "", +"slice_108/start_frame": 0, +"slice_109/end_frame": 0, +"slice_109/loop_mode": 0, +"slice_109/name": "", +"slice_109/save_to_file/enabled": false, +"slice_109/save_to_file/keep_custom_tracks": false, +"slice_109/save_to_file/path": "", +"slice_109/start_frame": 0, +"slice_11/end_frame": 0, +"slice_11/loop_mode": 0, +"slice_11/name": "", +"slice_11/save_to_file/enabled": false, +"slice_11/save_to_file/keep_custom_tracks": false, +"slice_11/save_to_file/path": "", +"slice_11/start_frame": 0, +"slice_110/end_frame": 0, +"slice_110/loop_mode": 0, +"slice_110/name": "", +"slice_110/save_to_file/enabled": false, +"slice_110/save_to_file/keep_custom_tracks": false, +"slice_110/save_to_file/path": "", +"slice_110/start_frame": 0, +"slice_111/end_frame": 0, +"slice_111/loop_mode": 0, +"slice_111/name": "", +"slice_111/save_to_file/enabled": false, +"slice_111/save_to_file/keep_custom_tracks": false, +"slice_111/save_to_file/path": "", +"slice_111/start_frame": 0, +"slice_112/end_frame": 0, +"slice_112/loop_mode": 0, +"slice_112/name": "", +"slice_112/save_to_file/enabled": false, +"slice_112/save_to_file/keep_custom_tracks": false, +"slice_112/save_to_file/path": "", +"slice_112/start_frame": 0, +"slice_113/end_frame": 0, +"slice_113/loop_mode": 0, +"slice_113/name": "", +"slice_113/save_to_file/enabled": false, +"slice_113/save_to_file/keep_custom_tracks": false, +"slice_113/save_to_file/path": "", +"slice_113/start_frame": 0, +"slice_114/end_frame": 0, +"slice_114/loop_mode": 0, +"slice_114/name": "", +"slice_114/save_to_file/enabled": false, +"slice_114/save_to_file/keep_custom_tracks": false, +"slice_114/save_to_file/path": "", +"slice_114/start_frame": 0, +"slice_115/end_frame": 0, +"slice_115/loop_mode": 0, +"slice_115/name": "", +"slice_115/save_to_file/enabled": false, +"slice_115/save_to_file/keep_custom_tracks": false, +"slice_115/save_to_file/path": "", +"slice_115/start_frame": 0, +"slice_116/end_frame": 0, +"slice_116/loop_mode": 0, +"slice_116/name": "", +"slice_116/save_to_file/enabled": false, +"slice_116/save_to_file/keep_custom_tracks": false, +"slice_116/save_to_file/path": "", +"slice_116/start_frame": 0, +"slice_117/end_frame": 0, +"slice_117/loop_mode": 0, +"slice_117/name": "", +"slice_117/save_to_file/enabled": false, +"slice_117/save_to_file/keep_custom_tracks": false, +"slice_117/save_to_file/path": "", +"slice_117/start_frame": 0, +"slice_118/end_frame": 0, +"slice_118/loop_mode": 0, +"slice_118/name": "", +"slice_118/save_to_file/enabled": false, +"slice_118/save_to_file/keep_custom_tracks": false, +"slice_118/save_to_file/path": "", +"slice_118/start_frame": 0, +"slice_119/end_frame": 0, +"slice_119/loop_mode": 0, +"slice_119/name": "", +"slice_119/save_to_file/enabled": false, +"slice_119/save_to_file/keep_custom_tracks": false, +"slice_119/save_to_file/path": "", +"slice_119/start_frame": 0, +"slice_12/end_frame": 0, +"slice_12/loop_mode": 0, +"slice_12/name": "", +"slice_12/save_to_file/enabled": false, +"slice_12/save_to_file/keep_custom_tracks": false, +"slice_12/save_to_file/path": "", +"slice_12/start_frame": 0, +"slice_120/end_frame": 0, +"slice_120/loop_mode": 0, +"slice_120/name": "", +"slice_120/save_to_file/enabled": false, +"slice_120/save_to_file/keep_custom_tracks": false, +"slice_120/save_to_file/path": "", +"slice_120/start_frame": 0, +"slice_121/end_frame": 0, +"slice_121/loop_mode": 0, +"slice_121/name": "", +"slice_121/save_to_file/enabled": false, +"slice_121/save_to_file/keep_custom_tracks": false, +"slice_121/save_to_file/path": "", +"slice_121/start_frame": 0, +"slice_122/end_frame": 0, +"slice_122/loop_mode": 0, +"slice_122/name": "", +"slice_122/save_to_file/enabled": false, +"slice_122/save_to_file/keep_custom_tracks": false, +"slice_122/save_to_file/path": "", +"slice_122/start_frame": 0, +"slice_123/end_frame": 0, +"slice_123/loop_mode": 0, +"slice_123/name": "", +"slice_123/save_to_file/enabled": false, +"slice_123/save_to_file/keep_custom_tracks": false, +"slice_123/save_to_file/path": "", +"slice_123/start_frame": 0, +"slice_124/end_frame": 0, +"slice_124/loop_mode": 0, +"slice_124/name": "", +"slice_124/save_to_file/enabled": false, +"slice_124/save_to_file/keep_custom_tracks": false, +"slice_124/save_to_file/path": "", +"slice_124/start_frame": 0, +"slice_125/end_frame": 0, +"slice_125/loop_mode": 0, +"slice_125/name": "", +"slice_125/save_to_file/enabled": false, +"slice_125/save_to_file/keep_custom_tracks": false, +"slice_125/save_to_file/path": "", +"slice_125/start_frame": 0, +"slice_126/end_frame": 0, +"slice_126/loop_mode": 0, +"slice_126/name": "", +"slice_126/save_to_file/enabled": false, +"slice_126/save_to_file/keep_custom_tracks": false, +"slice_126/save_to_file/path": "", +"slice_126/start_frame": 0, +"slice_127/end_frame": 0, +"slice_127/loop_mode": 0, +"slice_127/name": "", +"slice_127/save_to_file/enabled": false, +"slice_127/save_to_file/keep_custom_tracks": false, +"slice_127/save_to_file/path": "", +"slice_127/start_frame": 0, +"slice_128/end_frame": 0, +"slice_128/loop_mode": 0, +"slice_128/name": "", +"slice_128/save_to_file/enabled": false, +"slice_128/save_to_file/keep_custom_tracks": false, +"slice_128/save_to_file/path": "", +"slice_128/start_frame": 0, +"slice_129/end_frame": 0, +"slice_129/loop_mode": 0, +"slice_129/name": "", +"slice_129/save_to_file/enabled": false, +"slice_129/save_to_file/keep_custom_tracks": false, +"slice_129/save_to_file/path": "", +"slice_129/start_frame": 0, +"slice_13/end_frame": 0, +"slice_13/loop_mode": 0, +"slice_13/name": "", +"slice_13/save_to_file/enabled": false, +"slice_13/save_to_file/keep_custom_tracks": false, +"slice_13/save_to_file/path": "", +"slice_13/start_frame": 0, +"slice_130/end_frame": 0, +"slice_130/loop_mode": 0, +"slice_130/name": "", +"slice_130/save_to_file/enabled": false, +"slice_130/save_to_file/keep_custom_tracks": false, +"slice_130/save_to_file/path": "", +"slice_130/start_frame": 0, +"slice_131/end_frame": 0, +"slice_131/loop_mode": 0, +"slice_131/name": "", +"slice_131/save_to_file/enabled": false, +"slice_131/save_to_file/keep_custom_tracks": false, +"slice_131/save_to_file/path": "", +"slice_131/start_frame": 0, +"slice_132/end_frame": 0, +"slice_132/loop_mode": 0, +"slice_132/name": "", +"slice_132/save_to_file/enabled": false, +"slice_132/save_to_file/keep_custom_tracks": false, +"slice_132/save_to_file/path": "", +"slice_132/start_frame": 0, +"slice_133/end_frame": 0, +"slice_133/loop_mode": 0, +"slice_133/name": "", +"slice_133/save_to_file/enabled": false, +"slice_133/save_to_file/keep_custom_tracks": false, +"slice_133/save_to_file/path": "", +"slice_133/start_frame": 0, +"slice_134/end_frame": 0, +"slice_134/loop_mode": 0, +"slice_134/name": "", +"slice_134/save_to_file/enabled": false, +"slice_134/save_to_file/keep_custom_tracks": false, +"slice_134/save_to_file/path": "", +"slice_134/start_frame": 0, +"slice_135/end_frame": 0, +"slice_135/loop_mode": 0, +"slice_135/name": "", +"slice_135/save_to_file/enabled": false, +"slice_135/save_to_file/keep_custom_tracks": false, +"slice_135/save_to_file/path": "", +"slice_135/start_frame": 0, +"slice_136/end_frame": 0, +"slice_136/loop_mode": 0, +"slice_136/name": "", +"slice_136/save_to_file/enabled": false, +"slice_136/save_to_file/keep_custom_tracks": false, +"slice_136/save_to_file/path": "", +"slice_136/start_frame": 0, +"slice_137/end_frame": 0, +"slice_137/loop_mode": 0, +"slice_137/name": "", +"slice_137/save_to_file/enabled": false, +"slice_137/save_to_file/keep_custom_tracks": false, +"slice_137/save_to_file/path": "", +"slice_137/start_frame": 0, +"slice_138/end_frame": 0, +"slice_138/loop_mode": 0, +"slice_138/name": "", +"slice_138/save_to_file/enabled": false, +"slice_138/save_to_file/keep_custom_tracks": false, +"slice_138/save_to_file/path": "", +"slice_138/start_frame": 0, +"slice_139/end_frame": 0, +"slice_139/loop_mode": 0, +"slice_139/name": "", +"slice_139/save_to_file/enabled": false, +"slice_139/save_to_file/keep_custom_tracks": false, +"slice_139/save_to_file/path": "", +"slice_139/start_frame": 0, +"slice_14/end_frame": 0, +"slice_14/loop_mode": 0, +"slice_14/name": "", +"slice_14/save_to_file/enabled": false, +"slice_14/save_to_file/keep_custom_tracks": false, +"slice_14/save_to_file/path": "", +"slice_14/start_frame": 0, +"slice_140/end_frame": 0, +"slice_140/loop_mode": 0, +"slice_140/name": "", +"slice_140/save_to_file/enabled": false, +"slice_140/save_to_file/keep_custom_tracks": false, +"slice_140/save_to_file/path": "", +"slice_140/start_frame": 0, +"slice_141/end_frame": 0, +"slice_141/loop_mode": 0, +"slice_141/name": "", +"slice_141/save_to_file/enabled": false, +"slice_141/save_to_file/keep_custom_tracks": false, +"slice_141/save_to_file/path": "", +"slice_141/start_frame": 0, +"slice_142/end_frame": 0, +"slice_142/loop_mode": 0, +"slice_142/name": "", +"slice_142/save_to_file/enabled": false, +"slice_142/save_to_file/keep_custom_tracks": false, +"slice_142/save_to_file/path": "", +"slice_142/start_frame": 0, +"slice_143/end_frame": 0, +"slice_143/loop_mode": 0, +"slice_143/name": "", +"slice_143/save_to_file/enabled": false, +"slice_143/save_to_file/keep_custom_tracks": false, +"slice_143/save_to_file/path": "", +"slice_143/start_frame": 0, +"slice_144/end_frame": 0, +"slice_144/loop_mode": 0, +"slice_144/name": "", +"slice_144/save_to_file/enabled": false, +"slice_144/save_to_file/keep_custom_tracks": false, +"slice_144/save_to_file/path": "", +"slice_144/start_frame": 0, +"slice_145/end_frame": 0, +"slice_145/loop_mode": 0, +"slice_145/name": "", +"slice_145/save_to_file/enabled": false, +"slice_145/save_to_file/keep_custom_tracks": false, +"slice_145/save_to_file/path": "", +"slice_145/start_frame": 0, +"slice_146/end_frame": 0, +"slice_146/loop_mode": 0, +"slice_146/name": "", +"slice_146/save_to_file/enabled": false, +"slice_146/save_to_file/keep_custom_tracks": false, +"slice_146/save_to_file/path": "", +"slice_146/start_frame": 0, +"slice_147/end_frame": 0, +"slice_147/loop_mode": 0, +"slice_147/name": "", +"slice_147/save_to_file/enabled": false, +"slice_147/save_to_file/keep_custom_tracks": false, +"slice_147/save_to_file/path": "", +"slice_147/start_frame": 0, +"slice_148/end_frame": 0, +"slice_148/loop_mode": 0, +"slice_148/name": "", +"slice_148/save_to_file/enabled": false, +"slice_148/save_to_file/keep_custom_tracks": false, +"slice_148/save_to_file/path": "", +"slice_148/start_frame": 0, +"slice_149/end_frame": 0, +"slice_149/loop_mode": 0, +"slice_149/name": "", +"slice_149/save_to_file/enabled": false, +"slice_149/save_to_file/keep_custom_tracks": false, +"slice_149/save_to_file/path": "", +"slice_149/start_frame": 0, +"slice_15/end_frame": 0, +"slice_15/loop_mode": 0, +"slice_15/name": "", +"slice_15/save_to_file/enabled": false, +"slice_15/save_to_file/keep_custom_tracks": false, +"slice_15/save_to_file/path": "", +"slice_15/start_frame": 0, +"slice_150/end_frame": 0, +"slice_150/loop_mode": 0, +"slice_150/name": "", +"slice_150/save_to_file/enabled": false, +"slice_150/save_to_file/keep_custom_tracks": false, +"slice_150/save_to_file/path": "", +"slice_150/start_frame": 0, +"slice_151/end_frame": 0, +"slice_151/loop_mode": 0, +"slice_151/name": "", +"slice_151/save_to_file/enabled": false, +"slice_151/save_to_file/keep_custom_tracks": false, +"slice_151/save_to_file/path": "", +"slice_151/start_frame": 0, +"slice_152/end_frame": 0, +"slice_152/loop_mode": 0, +"slice_152/name": "", +"slice_152/save_to_file/enabled": false, +"slice_152/save_to_file/keep_custom_tracks": false, +"slice_152/save_to_file/path": "", +"slice_152/start_frame": 0, +"slice_153/end_frame": 0, +"slice_153/loop_mode": 0, +"slice_153/name": "", +"slice_153/save_to_file/enabled": false, +"slice_153/save_to_file/keep_custom_tracks": false, +"slice_153/save_to_file/path": "", +"slice_153/start_frame": 0, +"slice_154/end_frame": 0, +"slice_154/loop_mode": 0, +"slice_154/name": "", +"slice_154/save_to_file/enabled": false, +"slice_154/save_to_file/keep_custom_tracks": false, +"slice_154/save_to_file/path": "", +"slice_154/start_frame": 0, +"slice_155/end_frame": 0, +"slice_155/loop_mode": 0, +"slice_155/name": "", +"slice_155/save_to_file/enabled": false, +"slice_155/save_to_file/keep_custom_tracks": false, +"slice_155/save_to_file/path": "", +"slice_155/start_frame": 0, +"slice_156/end_frame": 0, +"slice_156/loop_mode": 0, +"slice_156/name": "", +"slice_156/save_to_file/enabled": false, +"slice_156/save_to_file/keep_custom_tracks": false, +"slice_156/save_to_file/path": "", +"slice_156/start_frame": 0, +"slice_157/end_frame": 0, +"slice_157/loop_mode": 0, +"slice_157/name": "", +"slice_157/save_to_file/enabled": false, +"slice_157/save_to_file/keep_custom_tracks": false, +"slice_157/save_to_file/path": "", +"slice_157/start_frame": 0, +"slice_158/end_frame": 0, +"slice_158/loop_mode": 0, +"slice_158/name": "", +"slice_158/save_to_file/enabled": false, +"slice_158/save_to_file/keep_custom_tracks": false, +"slice_158/save_to_file/path": "", +"slice_158/start_frame": 0, +"slice_159/end_frame": 0, +"slice_159/loop_mode": 0, +"slice_159/name": "", +"slice_159/save_to_file/enabled": false, +"slice_159/save_to_file/keep_custom_tracks": false, +"slice_159/save_to_file/path": "", +"slice_159/start_frame": 0, +"slice_16/end_frame": 0, +"slice_16/loop_mode": 0, +"slice_16/name": "", +"slice_16/save_to_file/enabled": false, +"slice_16/save_to_file/keep_custom_tracks": false, +"slice_16/save_to_file/path": "", +"slice_16/start_frame": 0, +"slice_160/end_frame": 0, +"slice_160/loop_mode": 0, +"slice_160/name": "", +"slice_160/save_to_file/enabled": false, +"slice_160/save_to_file/keep_custom_tracks": false, +"slice_160/save_to_file/path": "", +"slice_160/start_frame": 0, +"slice_161/end_frame": 0, +"slice_161/loop_mode": 0, +"slice_161/name": "", +"slice_161/save_to_file/enabled": false, +"slice_161/save_to_file/keep_custom_tracks": false, +"slice_161/save_to_file/path": "", +"slice_161/start_frame": 0, +"slice_162/end_frame": 0, +"slice_162/loop_mode": 0, +"slice_162/name": "", +"slice_162/save_to_file/enabled": false, +"slice_162/save_to_file/keep_custom_tracks": false, +"slice_162/save_to_file/path": "", +"slice_162/start_frame": 0, +"slice_163/end_frame": 0, +"slice_163/loop_mode": 0, +"slice_163/name": "", +"slice_163/save_to_file/enabled": false, +"slice_163/save_to_file/keep_custom_tracks": false, +"slice_163/save_to_file/path": "", +"slice_163/start_frame": 0, +"slice_164/end_frame": 0, +"slice_164/loop_mode": 0, +"slice_164/name": "", +"slice_164/save_to_file/enabled": false, +"slice_164/save_to_file/keep_custom_tracks": false, +"slice_164/save_to_file/path": "", +"slice_164/start_frame": 0, +"slice_165/end_frame": 0, +"slice_165/loop_mode": 0, +"slice_165/name": "", +"slice_165/save_to_file/enabled": false, +"slice_165/save_to_file/keep_custom_tracks": false, +"slice_165/save_to_file/path": "", +"slice_165/start_frame": 0, +"slice_166/end_frame": 0, +"slice_166/loop_mode": 0, +"slice_166/name": "", +"slice_166/save_to_file/enabled": false, +"slice_166/save_to_file/keep_custom_tracks": false, +"slice_166/save_to_file/path": "", +"slice_166/start_frame": 0, +"slice_167/end_frame": 0, +"slice_167/loop_mode": 0, +"slice_167/name": "", +"slice_167/save_to_file/enabled": false, +"slice_167/save_to_file/keep_custom_tracks": false, +"slice_167/save_to_file/path": "", +"slice_167/start_frame": 0, +"slice_168/end_frame": 0, +"slice_168/loop_mode": 0, +"slice_168/name": "", +"slice_168/save_to_file/enabled": false, +"slice_168/save_to_file/keep_custom_tracks": false, +"slice_168/save_to_file/path": "", +"slice_168/start_frame": 0, +"slice_169/end_frame": 0, +"slice_169/loop_mode": 0, +"slice_169/name": "", +"slice_169/save_to_file/enabled": false, +"slice_169/save_to_file/keep_custom_tracks": false, +"slice_169/save_to_file/path": "", +"slice_169/start_frame": 0, +"slice_17/end_frame": 0, +"slice_17/loop_mode": 0, +"slice_17/name": "", +"slice_17/save_to_file/enabled": false, +"slice_17/save_to_file/keep_custom_tracks": false, +"slice_17/save_to_file/path": "", +"slice_17/start_frame": 0, +"slice_170/end_frame": 0, +"slice_170/loop_mode": 0, +"slice_170/name": "", +"slice_170/save_to_file/enabled": false, +"slice_170/save_to_file/keep_custom_tracks": false, +"slice_170/save_to_file/path": "", +"slice_170/start_frame": 0, +"slice_171/end_frame": 0, +"slice_171/loop_mode": 0, +"slice_171/name": "", +"slice_171/save_to_file/enabled": false, +"slice_171/save_to_file/keep_custom_tracks": false, +"slice_171/save_to_file/path": "", +"slice_171/start_frame": 0, +"slice_172/end_frame": 0, +"slice_172/loop_mode": 0, +"slice_172/name": "", +"slice_172/save_to_file/enabled": false, +"slice_172/save_to_file/keep_custom_tracks": false, +"slice_172/save_to_file/path": "", +"slice_172/start_frame": 0, +"slice_173/end_frame": 0, +"slice_173/loop_mode": 0, +"slice_173/name": "", +"slice_173/save_to_file/enabled": false, +"slice_173/save_to_file/keep_custom_tracks": false, +"slice_173/save_to_file/path": "", +"slice_173/start_frame": 0, +"slice_174/end_frame": 0, +"slice_174/loop_mode": 0, +"slice_174/name": "", +"slice_174/save_to_file/enabled": false, +"slice_174/save_to_file/keep_custom_tracks": false, +"slice_174/save_to_file/path": "", +"slice_174/start_frame": 0, +"slice_175/end_frame": 0, +"slice_175/loop_mode": 0, +"slice_175/name": "", +"slice_175/save_to_file/enabled": false, +"slice_175/save_to_file/keep_custom_tracks": false, +"slice_175/save_to_file/path": "", +"slice_175/start_frame": 0, +"slice_176/end_frame": 0, +"slice_176/loop_mode": 0, +"slice_176/name": "", +"slice_176/save_to_file/enabled": false, +"slice_176/save_to_file/keep_custom_tracks": false, +"slice_176/save_to_file/path": "", +"slice_176/start_frame": 0, +"slice_177/end_frame": 0, +"slice_177/loop_mode": 0, +"slice_177/name": "", +"slice_177/save_to_file/enabled": false, +"slice_177/save_to_file/keep_custom_tracks": false, +"slice_177/save_to_file/path": "", +"slice_177/start_frame": 0, +"slice_178/end_frame": 0, +"slice_178/loop_mode": 0, +"slice_178/name": "", +"slice_178/save_to_file/enabled": false, +"slice_178/save_to_file/keep_custom_tracks": false, +"slice_178/save_to_file/path": "", +"slice_178/start_frame": 0, +"slice_179/end_frame": 0, +"slice_179/loop_mode": 0, +"slice_179/name": "", +"slice_179/save_to_file/enabled": false, +"slice_179/save_to_file/keep_custom_tracks": false, +"slice_179/save_to_file/path": "", +"slice_179/start_frame": 0, +"slice_18/end_frame": 0, +"slice_18/loop_mode": 0, +"slice_18/name": "", +"slice_18/save_to_file/enabled": false, +"slice_18/save_to_file/keep_custom_tracks": false, +"slice_18/save_to_file/path": "", +"slice_18/start_frame": 0, +"slice_180/end_frame": 0, +"slice_180/loop_mode": 0, +"slice_180/name": "", +"slice_180/save_to_file/enabled": false, +"slice_180/save_to_file/keep_custom_tracks": false, +"slice_180/save_to_file/path": "", +"slice_180/start_frame": 0, +"slice_181/end_frame": 0, +"slice_181/loop_mode": 0, +"slice_181/name": "", +"slice_181/save_to_file/enabled": false, +"slice_181/save_to_file/keep_custom_tracks": false, +"slice_181/save_to_file/path": "", +"slice_181/start_frame": 0, +"slice_182/end_frame": 0, +"slice_182/loop_mode": 0, +"slice_182/name": "", +"slice_182/save_to_file/enabled": false, +"slice_182/save_to_file/keep_custom_tracks": false, +"slice_182/save_to_file/path": "", +"slice_182/start_frame": 0, +"slice_183/end_frame": 0, +"slice_183/loop_mode": 0, +"slice_183/name": "", +"slice_183/save_to_file/enabled": false, +"slice_183/save_to_file/keep_custom_tracks": false, +"slice_183/save_to_file/path": "", +"slice_183/start_frame": 0, +"slice_184/end_frame": 0, +"slice_184/loop_mode": 0, +"slice_184/name": "", +"slice_184/save_to_file/enabled": false, +"slice_184/save_to_file/keep_custom_tracks": false, +"slice_184/save_to_file/path": "", +"slice_184/start_frame": 0, +"slice_185/end_frame": 0, +"slice_185/loop_mode": 0, +"slice_185/name": "", +"slice_185/save_to_file/enabled": false, +"slice_185/save_to_file/keep_custom_tracks": false, +"slice_185/save_to_file/path": "", +"slice_185/start_frame": 0, +"slice_186/end_frame": 0, +"slice_186/loop_mode": 0, +"slice_186/name": "", +"slice_186/save_to_file/enabled": false, +"slice_186/save_to_file/keep_custom_tracks": false, +"slice_186/save_to_file/path": "", +"slice_186/start_frame": 0, +"slice_187/end_frame": 0, +"slice_187/loop_mode": 0, +"slice_187/name": "", +"slice_187/save_to_file/enabled": false, +"slice_187/save_to_file/keep_custom_tracks": false, +"slice_187/save_to_file/path": "", +"slice_187/start_frame": 0, +"slice_188/end_frame": 0, +"slice_188/loop_mode": 0, +"slice_188/name": "", +"slice_188/save_to_file/enabled": false, +"slice_188/save_to_file/keep_custom_tracks": false, +"slice_188/save_to_file/path": "", +"slice_188/start_frame": 0, +"slice_189/end_frame": 0, +"slice_189/loop_mode": 0, +"slice_189/name": "", +"slice_189/save_to_file/enabled": false, +"slice_189/save_to_file/keep_custom_tracks": false, +"slice_189/save_to_file/path": "", +"slice_189/start_frame": 0, +"slice_19/end_frame": 0, +"slice_19/loop_mode": 0, +"slice_19/name": "", +"slice_19/save_to_file/enabled": false, +"slice_19/save_to_file/keep_custom_tracks": false, +"slice_19/save_to_file/path": "", +"slice_19/start_frame": 0, +"slice_190/end_frame": 0, +"slice_190/loop_mode": 0, +"slice_190/name": "", +"slice_190/save_to_file/enabled": false, +"slice_190/save_to_file/keep_custom_tracks": false, +"slice_190/save_to_file/path": "", +"slice_190/start_frame": 0, +"slice_191/end_frame": 0, +"slice_191/loop_mode": 0, +"slice_191/name": "", +"slice_191/save_to_file/enabled": false, +"slice_191/save_to_file/keep_custom_tracks": false, +"slice_191/save_to_file/path": "", +"slice_191/start_frame": 0, +"slice_192/end_frame": 0, +"slice_192/loop_mode": 0, +"slice_192/name": "", +"slice_192/save_to_file/enabled": false, +"slice_192/save_to_file/keep_custom_tracks": false, +"slice_192/save_to_file/path": "", +"slice_192/start_frame": 0, +"slice_193/end_frame": 0, +"slice_193/loop_mode": 0, +"slice_193/name": "", +"slice_193/save_to_file/enabled": false, +"slice_193/save_to_file/keep_custom_tracks": false, +"slice_193/save_to_file/path": "", +"slice_193/start_frame": 0, +"slice_194/end_frame": 0, +"slice_194/loop_mode": 0, +"slice_194/name": "", +"slice_194/save_to_file/enabled": false, +"slice_194/save_to_file/keep_custom_tracks": false, +"slice_194/save_to_file/path": "", +"slice_194/start_frame": 0, +"slice_195/end_frame": 0, +"slice_195/loop_mode": 0, +"slice_195/name": "", +"slice_195/save_to_file/enabled": false, +"slice_195/save_to_file/keep_custom_tracks": false, +"slice_195/save_to_file/path": "", +"slice_195/start_frame": 0, +"slice_196/end_frame": 0, +"slice_196/loop_mode": 0, +"slice_196/name": "", +"slice_196/save_to_file/enabled": false, +"slice_196/save_to_file/keep_custom_tracks": false, +"slice_196/save_to_file/path": "", +"slice_196/start_frame": 0, +"slice_197/end_frame": 0, +"slice_197/loop_mode": 0, +"slice_197/name": "", +"slice_197/save_to_file/enabled": false, +"slice_197/save_to_file/keep_custom_tracks": false, +"slice_197/save_to_file/path": "", +"slice_197/start_frame": 0, +"slice_198/end_frame": 0, +"slice_198/loop_mode": 0, +"slice_198/name": "", +"slice_198/save_to_file/enabled": false, +"slice_198/save_to_file/keep_custom_tracks": false, +"slice_198/save_to_file/path": "", +"slice_198/start_frame": 0, +"slice_199/end_frame": 0, +"slice_199/loop_mode": 0, +"slice_199/name": "", +"slice_199/save_to_file/enabled": false, +"slice_199/save_to_file/keep_custom_tracks": false, +"slice_199/save_to_file/path": "", +"slice_199/start_frame": 0, +"slice_2/end_frame": 0, +"slice_2/loop_mode": 0, +"slice_2/name": "", +"slice_2/save_to_file/enabled": false, +"slice_2/save_to_file/keep_custom_tracks": false, +"slice_2/save_to_file/path": "", +"slice_2/start_frame": 0, +"slice_20/end_frame": 0, +"slice_20/loop_mode": 0, +"slice_20/name": "", +"slice_20/save_to_file/enabled": false, +"slice_20/save_to_file/keep_custom_tracks": false, +"slice_20/save_to_file/path": "", +"slice_20/start_frame": 0, +"slice_200/end_frame": 0, +"slice_200/loop_mode": 0, +"slice_200/name": "", +"slice_200/save_to_file/enabled": false, +"slice_200/save_to_file/keep_custom_tracks": false, +"slice_200/save_to_file/path": "", +"slice_200/start_frame": 0, +"slice_201/end_frame": 0, +"slice_201/loop_mode": 0, +"slice_201/name": "", +"slice_201/save_to_file/enabled": false, +"slice_201/save_to_file/keep_custom_tracks": false, +"slice_201/save_to_file/path": "", +"slice_201/start_frame": 0, +"slice_202/end_frame": 0, +"slice_202/loop_mode": 0, +"slice_202/name": "", +"slice_202/save_to_file/enabled": false, +"slice_202/save_to_file/keep_custom_tracks": false, +"slice_202/save_to_file/path": "", +"slice_202/start_frame": 0, +"slice_203/end_frame": 0, +"slice_203/loop_mode": 0, +"slice_203/name": "", +"slice_203/save_to_file/enabled": false, +"slice_203/save_to_file/keep_custom_tracks": false, +"slice_203/save_to_file/path": "", +"slice_203/start_frame": 0, +"slice_204/end_frame": 0, +"slice_204/loop_mode": 0, +"slice_204/name": "", +"slice_204/save_to_file/enabled": false, +"slice_204/save_to_file/keep_custom_tracks": false, +"slice_204/save_to_file/path": "", +"slice_204/start_frame": 0, +"slice_205/end_frame": 0, +"slice_205/loop_mode": 0, +"slice_205/name": "", +"slice_205/save_to_file/enabled": false, +"slice_205/save_to_file/keep_custom_tracks": false, +"slice_205/save_to_file/path": "", +"slice_205/start_frame": 0, +"slice_206/end_frame": 0, +"slice_206/loop_mode": 0, +"slice_206/name": "", +"slice_206/save_to_file/enabled": false, +"slice_206/save_to_file/keep_custom_tracks": false, +"slice_206/save_to_file/path": "", +"slice_206/start_frame": 0, +"slice_207/end_frame": 0, +"slice_207/loop_mode": 0, +"slice_207/name": "", +"slice_207/save_to_file/enabled": false, +"slice_207/save_to_file/keep_custom_tracks": false, +"slice_207/save_to_file/path": "", +"slice_207/start_frame": 0, +"slice_208/end_frame": 0, +"slice_208/loop_mode": 0, +"slice_208/name": "", +"slice_208/save_to_file/enabled": false, +"slice_208/save_to_file/keep_custom_tracks": false, +"slice_208/save_to_file/path": "", +"slice_208/start_frame": 0, +"slice_209/end_frame": 0, +"slice_209/loop_mode": 0, +"slice_209/name": "", +"slice_209/save_to_file/enabled": false, +"slice_209/save_to_file/keep_custom_tracks": false, +"slice_209/save_to_file/path": "", +"slice_209/start_frame": 0, +"slice_21/end_frame": 0, +"slice_21/loop_mode": 0, +"slice_21/name": "", +"slice_21/save_to_file/enabled": false, +"slice_21/save_to_file/keep_custom_tracks": false, +"slice_21/save_to_file/path": "", +"slice_21/start_frame": 0, +"slice_210/end_frame": 0, +"slice_210/loop_mode": 0, +"slice_210/name": "", +"slice_210/save_to_file/enabled": false, +"slice_210/save_to_file/keep_custom_tracks": false, +"slice_210/save_to_file/path": "", +"slice_210/start_frame": 0, +"slice_211/end_frame": 0, +"slice_211/loop_mode": 0, +"slice_211/name": "", +"slice_211/save_to_file/enabled": false, +"slice_211/save_to_file/keep_custom_tracks": false, +"slice_211/save_to_file/path": "", +"slice_211/start_frame": 0, +"slice_212/end_frame": 0, +"slice_212/loop_mode": 0, +"slice_212/name": "", +"slice_212/save_to_file/enabled": false, +"slice_212/save_to_file/keep_custom_tracks": false, +"slice_212/save_to_file/path": "", +"slice_212/start_frame": 0, +"slice_213/end_frame": 0, +"slice_213/loop_mode": 0, +"slice_213/name": "", +"slice_213/save_to_file/enabled": false, +"slice_213/save_to_file/keep_custom_tracks": false, +"slice_213/save_to_file/path": "", +"slice_213/start_frame": 0, +"slice_214/end_frame": 0, +"slice_214/loop_mode": 0, +"slice_214/name": "", +"slice_214/save_to_file/enabled": false, +"slice_214/save_to_file/keep_custom_tracks": false, +"slice_214/save_to_file/path": "", +"slice_214/start_frame": 0, +"slice_215/end_frame": 0, +"slice_215/loop_mode": 0, +"slice_215/name": "", +"slice_215/save_to_file/enabled": false, +"slice_215/save_to_file/keep_custom_tracks": false, +"slice_215/save_to_file/path": "", +"slice_215/start_frame": 0, +"slice_216/end_frame": 0, +"slice_216/loop_mode": 0, +"slice_216/name": "", +"slice_216/save_to_file/enabled": false, +"slice_216/save_to_file/keep_custom_tracks": false, +"slice_216/save_to_file/path": "", +"slice_216/start_frame": 0, +"slice_217/end_frame": 0, +"slice_217/loop_mode": 0, +"slice_217/name": "", +"slice_217/save_to_file/enabled": false, +"slice_217/save_to_file/keep_custom_tracks": false, +"slice_217/save_to_file/path": "", +"slice_217/start_frame": 0, +"slice_218/end_frame": 0, +"slice_218/loop_mode": 0, +"slice_218/name": "", +"slice_218/save_to_file/enabled": false, +"slice_218/save_to_file/keep_custom_tracks": false, +"slice_218/save_to_file/path": "", +"slice_218/start_frame": 0, +"slice_219/end_frame": 0, +"slice_219/loop_mode": 0, +"slice_219/name": "", +"slice_219/save_to_file/enabled": false, +"slice_219/save_to_file/keep_custom_tracks": false, +"slice_219/save_to_file/path": "", +"slice_219/start_frame": 0, +"slice_22/end_frame": 0, +"slice_22/loop_mode": 0, +"slice_22/name": "", +"slice_22/save_to_file/enabled": false, +"slice_22/save_to_file/keep_custom_tracks": false, +"slice_22/save_to_file/path": "", +"slice_22/start_frame": 0, +"slice_220/end_frame": 0, +"slice_220/loop_mode": 0, +"slice_220/name": "", +"slice_220/save_to_file/enabled": false, +"slice_220/save_to_file/keep_custom_tracks": false, +"slice_220/save_to_file/path": "", +"slice_220/start_frame": 0, +"slice_221/end_frame": 0, +"slice_221/loop_mode": 0, +"slice_221/name": "", +"slice_221/save_to_file/enabled": false, +"slice_221/save_to_file/keep_custom_tracks": false, +"slice_221/save_to_file/path": "", +"slice_221/start_frame": 0, +"slice_222/end_frame": 0, +"slice_222/loop_mode": 0, +"slice_222/name": "", +"slice_222/save_to_file/enabled": false, +"slice_222/save_to_file/keep_custom_tracks": false, +"slice_222/save_to_file/path": "", +"slice_222/start_frame": 0, +"slice_223/end_frame": 0, +"slice_223/loop_mode": 0, +"slice_223/name": "", +"slice_223/save_to_file/enabled": false, +"slice_223/save_to_file/keep_custom_tracks": false, +"slice_223/save_to_file/path": "", +"slice_223/start_frame": 0, +"slice_224/end_frame": 0, +"slice_224/loop_mode": 0, +"slice_224/name": "", +"slice_224/save_to_file/enabled": false, +"slice_224/save_to_file/keep_custom_tracks": false, +"slice_224/save_to_file/path": "", +"slice_224/start_frame": 0, +"slice_225/end_frame": 0, +"slice_225/loop_mode": 0, +"slice_225/name": "", +"slice_225/save_to_file/enabled": false, +"slice_225/save_to_file/keep_custom_tracks": false, +"slice_225/save_to_file/path": "", +"slice_225/start_frame": 0, +"slice_226/end_frame": 0, +"slice_226/loop_mode": 0, +"slice_226/name": "", +"slice_226/save_to_file/enabled": false, +"slice_226/save_to_file/keep_custom_tracks": false, +"slice_226/save_to_file/path": "", +"slice_226/start_frame": 0, +"slice_227/end_frame": 0, +"slice_227/loop_mode": 0, +"slice_227/name": "", +"slice_227/save_to_file/enabled": false, +"slice_227/save_to_file/keep_custom_tracks": false, +"slice_227/save_to_file/path": "", +"slice_227/start_frame": 0, +"slice_228/end_frame": 0, +"slice_228/loop_mode": 0, +"slice_228/name": "", +"slice_228/save_to_file/enabled": false, +"slice_228/save_to_file/keep_custom_tracks": false, +"slice_228/save_to_file/path": "", +"slice_228/start_frame": 0, +"slice_229/end_frame": 0, +"slice_229/loop_mode": 0, +"slice_229/name": "", +"slice_229/save_to_file/enabled": false, +"slice_229/save_to_file/keep_custom_tracks": false, +"slice_229/save_to_file/path": "", +"slice_229/start_frame": 0, +"slice_23/end_frame": 0, +"slice_23/loop_mode": 0, +"slice_23/name": "", +"slice_23/save_to_file/enabled": false, +"slice_23/save_to_file/keep_custom_tracks": false, +"slice_23/save_to_file/path": "", +"slice_23/start_frame": 0, +"slice_230/end_frame": 0, +"slice_230/loop_mode": 0, +"slice_230/name": "", +"slice_230/save_to_file/enabled": false, +"slice_230/save_to_file/keep_custom_tracks": false, +"slice_230/save_to_file/path": "", +"slice_230/start_frame": 0, +"slice_231/end_frame": 0, +"slice_231/loop_mode": 0, +"slice_231/name": "", +"slice_231/save_to_file/enabled": false, +"slice_231/save_to_file/keep_custom_tracks": false, +"slice_231/save_to_file/path": "", +"slice_231/start_frame": 0, +"slice_232/end_frame": 0, +"slice_232/loop_mode": 0, +"slice_232/name": "", +"slice_232/save_to_file/enabled": false, +"slice_232/save_to_file/keep_custom_tracks": false, +"slice_232/save_to_file/path": "", +"slice_232/start_frame": 0, +"slice_233/end_frame": 0, +"slice_233/loop_mode": 0, +"slice_233/name": "", +"slice_233/save_to_file/enabled": false, +"slice_233/save_to_file/keep_custom_tracks": false, +"slice_233/save_to_file/path": "", +"slice_233/start_frame": 0, +"slice_234/end_frame": 0, +"slice_234/loop_mode": 0, +"slice_234/name": "", +"slice_234/save_to_file/enabled": false, +"slice_234/save_to_file/keep_custom_tracks": false, +"slice_234/save_to_file/path": "", +"slice_234/start_frame": 0, +"slice_235/end_frame": 0, +"slice_235/loop_mode": 0, +"slice_235/name": "", +"slice_235/save_to_file/enabled": false, +"slice_235/save_to_file/keep_custom_tracks": false, +"slice_235/save_to_file/path": "", +"slice_235/start_frame": 0, +"slice_236/end_frame": 0, +"slice_236/loop_mode": 0, +"slice_236/name": "", +"slice_236/save_to_file/enabled": false, +"slice_236/save_to_file/keep_custom_tracks": false, +"slice_236/save_to_file/path": "", +"slice_236/start_frame": 0, +"slice_237/end_frame": 0, +"slice_237/loop_mode": 0, +"slice_237/name": "", +"slice_237/save_to_file/enabled": false, +"slice_237/save_to_file/keep_custom_tracks": false, +"slice_237/save_to_file/path": "", +"slice_237/start_frame": 0, +"slice_238/end_frame": 0, +"slice_238/loop_mode": 0, +"slice_238/name": "", +"slice_238/save_to_file/enabled": false, +"slice_238/save_to_file/keep_custom_tracks": false, +"slice_238/save_to_file/path": "", +"slice_238/start_frame": 0, +"slice_239/end_frame": 0, +"slice_239/loop_mode": 0, +"slice_239/name": "", +"slice_239/save_to_file/enabled": false, +"slice_239/save_to_file/keep_custom_tracks": false, +"slice_239/save_to_file/path": "", +"slice_239/start_frame": 0, +"slice_24/end_frame": 0, +"slice_24/loop_mode": 0, +"slice_24/name": "", +"slice_24/save_to_file/enabled": false, +"slice_24/save_to_file/keep_custom_tracks": false, +"slice_24/save_to_file/path": "", +"slice_24/start_frame": 0, +"slice_240/end_frame": 0, +"slice_240/loop_mode": 0, +"slice_240/name": "", +"slice_240/save_to_file/enabled": false, +"slice_240/save_to_file/keep_custom_tracks": false, +"slice_240/save_to_file/path": "", +"slice_240/start_frame": 0, +"slice_241/end_frame": 0, +"slice_241/loop_mode": 0, +"slice_241/name": "", +"slice_241/save_to_file/enabled": false, +"slice_241/save_to_file/keep_custom_tracks": false, +"slice_241/save_to_file/path": "", +"slice_241/start_frame": 0, +"slice_242/end_frame": 0, +"slice_242/loop_mode": 0, +"slice_242/name": "", +"slice_242/save_to_file/enabled": false, +"slice_242/save_to_file/keep_custom_tracks": false, +"slice_242/save_to_file/path": "", +"slice_242/start_frame": 0, +"slice_243/end_frame": 0, +"slice_243/loop_mode": 0, +"slice_243/name": "", +"slice_243/save_to_file/enabled": false, +"slice_243/save_to_file/keep_custom_tracks": false, +"slice_243/save_to_file/path": "", +"slice_243/start_frame": 0, +"slice_244/end_frame": 0, +"slice_244/loop_mode": 0, +"slice_244/name": "", +"slice_244/save_to_file/enabled": false, +"slice_244/save_to_file/keep_custom_tracks": false, +"slice_244/save_to_file/path": "", +"slice_244/start_frame": 0, +"slice_245/end_frame": 0, +"slice_245/loop_mode": 0, +"slice_245/name": "", +"slice_245/save_to_file/enabled": false, +"slice_245/save_to_file/keep_custom_tracks": false, +"slice_245/save_to_file/path": "", +"slice_245/start_frame": 0, +"slice_246/end_frame": 0, +"slice_246/loop_mode": 0, +"slice_246/name": "", +"slice_246/save_to_file/enabled": false, +"slice_246/save_to_file/keep_custom_tracks": false, +"slice_246/save_to_file/path": "", +"slice_246/start_frame": 0, +"slice_247/end_frame": 0, +"slice_247/loop_mode": 0, +"slice_247/name": "", +"slice_247/save_to_file/enabled": false, +"slice_247/save_to_file/keep_custom_tracks": false, +"slice_247/save_to_file/path": "", +"slice_247/start_frame": 0, +"slice_248/end_frame": 0, +"slice_248/loop_mode": 0, +"slice_248/name": "", +"slice_248/save_to_file/enabled": false, +"slice_248/save_to_file/keep_custom_tracks": false, +"slice_248/save_to_file/path": "", +"slice_248/start_frame": 0, +"slice_249/end_frame": 0, +"slice_249/loop_mode": 0, +"slice_249/name": "", +"slice_249/save_to_file/enabled": false, +"slice_249/save_to_file/keep_custom_tracks": false, +"slice_249/save_to_file/path": "", +"slice_249/start_frame": 0, +"slice_25/end_frame": 0, +"slice_25/loop_mode": 0, +"slice_25/name": "", +"slice_25/save_to_file/enabled": false, +"slice_25/save_to_file/keep_custom_tracks": false, +"slice_25/save_to_file/path": "", +"slice_25/start_frame": 0, +"slice_250/end_frame": 0, +"slice_250/loop_mode": 0, +"slice_250/name": "", +"slice_250/save_to_file/enabled": false, +"slice_250/save_to_file/keep_custom_tracks": false, +"slice_250/save_to_file/path": "", +"slice_250/start_frame": 0, +"slice_251/end_frame": 0, +"slice_251/loop_mode": 0, +"slice_251/name": "", +"slice_251/save_to_file/enabled": false, +"slice_251/save_to_file/keep_custom_tracks": false, +"slice_251/save_to_file/path": "", +"slice_251/start_frame": 0, +"slice_252/end_frame": 0, +"slice_252/loop_mode": 0, +"slice_252/name": "", +"slice_252/save_to_file/enabled": false, +"slice_252/save_to_file/keep_custom_tracks": false, +"slice_252/save_to_file/path": "", +"slice_252/start_frame": 0, +"slice_253/end_frame": 0, +"slice_253/loop_mode": 0, +"slice_253/name": "", +"slice_253/save_to_file/enabled": false, +"slice_253/save_to_file/keep_custom_tracks": false, +"slice_253/save_to_file/path": "", +"slice_253/start_frame": 0, +"slice_254/end_frame": 0, +"slice_254/loop_mode": 0, +"slice_254/name": "", +"slice_254/save_to_file/enabled": false, +"slice_254/save_to_file/keep_custom_tracks": false, +"slice_254/save_to_file/path": "", +"slice_254/start_frame": 0, +"slice_255/end_frame": 0, +"slice_255/loop_mode": 0, +"slice_255/name": "", +"slice_255/save_to_file/enabled": false, +"slice_255/save_to_file/keep_custom_tracks": false, +"slice_255/save_to_file/path": "", +"slice_255/start_frame": 0, +"slice_256/end_frame": 0, +"slice_256/loop_mode": 0, +"slice_256/name": "", +"slice_256/save_to_file/enabled": false, +"slice_256/save_to_file/keep_custom_tracks": false, +"slice_256/save_to_file/path": "", +"slice_256/start_frame": 0, +"slice_26/end_frame": 0, +"slice_26/loop_mode": 0, +"slice_26/name": "", +"slice_26/save_to_file/enabled": false, +"slice_26/save_to_file/keep_custom_tracks": false, +"slice_26/save_to_file/path": "", +"slice_26/start_frame": 0, +"slice_27/end_frame": 0, +"slice_27/loop_mode": 0, +"slice_27/name": "", +"slice_27/save_to_file/enabled": false, +"slice_27/save_to_file/keep_custom_tracks": false, +"slice_27/save_to_file/path": "", +"slice_27/start_frame": 0, +"slice_28/end_frame": 0, +"slice_28/loop_mode": 0, +"slice_28/name": "", +"slice_28/save_to_file/enabled": false, +"slice_28/save_to_file/keep_custom_tracks": false, +"slice_28/save_to_file/path": "", +"slice_28/start_frame": 0, +"slice_29/end_frame": 0, +"slice_29/loop_mode": 0, +"slice_29/name": "", +"slice_29/save_to_file/enabled": false, +"slice_29/save_to_file/keep_custom_tracks": false, +"slice_29/save_to_file/path": "", +"slice_29/start_frame": 0, +"slice_3/end_frame": 0, +"slice_3/loop_mode": 0, +"slice_3/name": "", +"slice_3/save_to_file/enabled": false, +"slice_3/save_to_file/keep_custom_tracks": false, +"slice_3/save_to_file/path": "", +"slice_3/start_frame": 0, +"slice_30/end_frame": 0, +"slice_30/loop_mode": 0, +"slice_30/name": "", +"slice_30/save_to_file/enabled": false, +"slice_30/save_to_file/keep_custom_tracks": false, +"slice_30/save_to_file/path": "", +"slice_30/start_frame": 0, +"slice_31/end_frame": 0, +"slice_31/loop_mode": 0, +"slice_31/name": "", +"slice_31/save_to_file/enabled": false, +"slice_31/save_to_file/keep_custom_tracks": false, +"slice_31/save_to_file/path": "", +"slice_31/start_frame": 0, +"slice_32/end_frame": 0, +"slice_32/loop_mode": 0, +"slice_32/name": "", +"slice_32/save_to_file/enabled": false, +"slice_32/save_to_file/keep_custom_tracks": false, +"slice_32/save_to_file/path": "", +"slice_32/start_frame": 0, +"slice_33/end_frame": 0, +"slice_33/loop_mode": 0, +"slice_33/name": "", +"slice_33/save_to_file/enabled": false, +"slice_33/save_to_file/keep_custom_tracks": false, +"slice_33/save_to_file/path": "", +"slice_33/start_frame": 0, +"slice_34/end_frame": 0, +"slice_34/loop_mode": 0, +"slice_34/name": "", +"slice_34/save_to_file/enabled": false, +"slice_34/save_to_file/keep_custom_tracks": false, +"slice_34/save_to_file/path": "", +"slice_34/start_frame": 0, +"slice_35/end_frame": 0, +"slice_35/loop_mode": 0, +"slice_35/name": "", +"slice_35/save_to_file/enabled": false, +"slice_35/save_to_file/keep_custom_tracks": false, +"slice_35/save_to_file/path": "", +"slice_35/start_frame": 0, +"slice_36/end_frame": 0, +"slice_36/loop_mode": 0, +"slice_36/name": "", +"slice_36/save_to_file/enabled": false, +"slice_36/save_to_file/keep_custom_tracks": false, +"slice_36/save_to_file/path": "", +"slice_36/start_frame": 0, +"slice_37/end_frame": 0, +"slice_37/loop_mode": 0, +"slice_37/name": "", +"slice_37/save_to_file/enabled": false, +"slice_37/save_to_file/keep_custom_tracks": false, +"slice_37/save_to_file/path": "", +"slice_37/start_frame": 0, +"slice_38/end_frame": 0, +"slice_38/loop_mode": 0, +"slice_38/name": "", +"slice_38/save_to_file/enabled": false, +"slice_38/save_to_file/keep_custom_tracks": false, +"slice_38/save_to_file/path": "", +"slice_38/start_frame": 0, +"slice_39/end_frame": 0, +"slice_39/loop_mode": 0, +"slice_39/name": "", +"slice_39/save_to_file/enabled": false, +"slice_39/save_to_file/keep_custom_tracks": false, +"slice_39/save_to_file/path": "", +"slice_39/start_frame": 0, +"slice_4/end_frame": 0, +"slice_4/loop_mode": 0, +"slice_4/name": "", +"slice_4/save_to_file/enabled": false, +"slice_4/save_to_file/keep_custom_tracks": false, +"slice_4/save_to_file/path": "", +"slice_4/start_frame": 0, +"slice_40/end_frame": 0, +"slice_40/loop_mode": 0, +"slice_40/name": "", +"slice_40/save_to_file/enabled": false, +"slice_40/save_to_file/keep_custom_tracks": false, +"slice_40/save_to_file/path": "", +"slice_40/start_frame": 0, +"slice_41/end_frame": 0, +"slice_41/loop_mode": 0, +"slice_41/name": "", +"slice_41/save_to_file/enabled": false, +"slice_41/save_to_file/keep_custom_tracks": false, +"slice_41/save_to_file/path": "", +"slice_41/start_frame": 0, +"slice_42/end_frame": 0, +"slice_42/loop_mode": 0, +"slice_42/name": "", +"slice_42/save_to_file/enabled": false, +"slice_42/save_to_file/keep_custom_tracks": false, +"slice_42/save_to_file/path": "", +"slice_42/start_frame": 0, +"slice_43/end_frame": 0, +"slice_43/loop_mode": 0, +"slice_43/name": "", +"slice_43/save_to_file/enabled": false, +"slice_43/save_to_file/keep_custom_tracks": false, +"slice_43/save_to_file/path": "", +"slice_43/start_frame": 0, +"slice_44/end_frame": 0, +"slice_44/loop_mode": 0, +"slice_44/name": "", +"slice_44/save_to_file/enabled": false, +"slice_44/save_to_file/keep_custom_tracks": false, +"slice_44/save_to_file/path": "", +"slice_44/start_frame": 0, +"slice_45/end_frame": 0, +"slice_45/loop_mode": 0, +"slice_45/name": "", +"slice_45/save_to_file/enabled": false, +"slice_45/save_to_file/keep_custom_tracks": false, +"slice_45/save_to_file/path": "", +"slice_45/start_frame": 0, +"slice_46/end_frame": 0, +"slice_46/loop_mode": 0, +"slice_46/name": "", +"slice_46/save_to_file/enabled": false, +"slice_46/save_to_file/keep_custom_tracks": false, +"slice_46/save_to_file/path": "", +"slice_46/start_frame": 0, +"slice_47/end_frame": 0, +"slice_47/loop_mode": 0, +"slice_47/name": "", +"slice_47/save_to_file/enabled": false, +"slice_47/save_to_file/keep_custom_tracks": false, +"slice_47/save_to_file/path": "", +"slice_47/start_frame": 0, +"slice_48/end_frame": 0, +"slice_48/loop_mode": 0, +"slice_48/name": "", +"slice_48/save_to_file/enabled": false, +"slice_48/save_to_file/keep_custom_tracks": false, +"slice_48/save_to_file/path": "", +"slice_48/start_frame": 0, +"slice_49/end_frame": 0, +"slice_49/loop_mode": 0, +"slice_49/name": "", +"slice_49/save_to_file/enabled": false, +"slice_49/save_to_file/keep_custom_tracks": false, +"slice_49/save_to_file/path": "", +"slice_49/start_frame": 0, +"slice_5/end_frame": 0, +"slice_5/loop_mode": 0, +"slice_5/name": "", +"slice_5/save_to_file/enabled": false, +"slice_5/save_to_file/keep_custom_tracks": false, +"slice_5/save_to_file/path": "", +"slice_5/start_frame": 0, +"slice_50/end_frame": 0, +"slice_50/loop_mode": 0, +"slice_50/name": "", +"slice_50/save_to_file/enabled": false, +"slice_50/save_to_file/keep_custom_tracks": false, +"slice_50/save_to_file/path": "", +"slice_50/start_frame": 0, +"slice_51/end_frame": 0, +"slice_51/loop_mode": 0, +"slice_51/name": "", +"slice_51/save_to_file/enabled": false, +"slice_51/save_to_file/keep_custom_tracks": false, +"slice_51/save_to_file/path": "", +"slice_51/start_frame": 0, +"slice_52/end_frame": 0, +"slice_52/loop_mode": 0, +"slice_52/name": "", +"slice_52/save_to_file/enabled": false, +"slice_52/save_to_file/keep_custom_tracks": false, +"slice_52/save_to_file/path": "", +"slice_52/start_frame": 0, +"slice_53/end_frame": 0, +"slice_53/loop_mode": 0, +"slice_53/name": "", +"slice_53/save_to_file/enabled": false, +"slice_53/save_to_file/keep_custom_tracks": false, +"slice_53/save_to_file/path": "", +"slice_53/start_frame": 0, +"slice_54/end_frame": 0, +"slice_54/loop_mode": 0, +"slice_54/name": "", +"slice_54/save_to_file/enabled": false, +"slice_54/save_to_file/keep_custom_tracks": false, +"slice_54/save_to_file/path": "", +"slice_54/start_frame": 0, +"slice_55/end_frame": 0, +"slice_55/loop_mode": 0, +"slice_55/name": "", +"slice_55/save_to_file/enabled": false, +"slice_55/save_to_file/keep_custom_tracks": false, +"slice_55/save_to_file/path": "", +"slice_55/start_frame": 0, +"slice_56/end_frame": 0, +"slice_56/loop_mode": 0, +"slice_56/name": "", +"slice_56/save_to_file/enabled": false, +"slice_56/save_to_file/keep_custom_tracks": false, +"slice_56/save_to_file/path": "", +"slice_56/start_frame": 0, +"slice_57/end_frame": 0, +"slice_57/loop_mode": 0, +"slice_57/name": "", +"slice_57/save_to_file/enabled": false, +"slice_57/save_to_file/keep_custom_tracks": false, +"slice_57/save_to_file/path": "", +"slice_57/start_frame": 0, +"slice_58/end_frame": 0, +"slice_58/loop_mode": 0, +"slice_58/name": "", +"slice_58/save_to_file/enabled": false, +"slice_58/save_to_file/keep_custom_tracks": false, +"slice_58/save_to_file/path": "", +"slice_58/start_frame": 0, +"slice_59/end_frame": 0, +"slice_59/loop_mode": 0, +"slice_59/name": "", +"slice_59/save_to_file/enabled": false, +"slice_59/save_to_file/keep_custom_tracks": false, +"slice_59/save_to_file/path": "", +"slice_59/start_frame": 0, +"slice_6/end_frame": 0, +"slice_6/loop_mode": 0, +"slice_6/name": "", +"slice_6/save_to_file/enabled": false, +"slice_6/save_to_file/keep_custom_tracks": false, +"slice_6/save_to_file/path": "", +"slice_6/start_frame": 0, +"slice_60/end_frame": 0, +"slice_60/loop_mode": 0, +"slice_60/name": "", +"slice_60/save_to_file/enabled": false, +"slice_60/save_to_file/keep_custom_tracks": false, +"slice_60/save_to_file/path": "", +"slice_60/start_frame": 0, +"slice_61/end_frame": 0, +"slice_61/loop_mode": 0, +"slice_61/name": "", +"slice_61/save_to_file/enabled": false, +"slice_61/save_to_file/keep_custom_tracks": false, +"slice_61/save_to_file/path": "", +"slice_61/start_frame": 0, +"slice_62/end_frame": 0, +"slice_62/loop_mode": 0, +"slice_62/name": "", +"slice_62/save_to_file/enabled": false, +"slice_62/save_to_file/keep_custom_tracks": false, +"slice_62/save_to_file/path": "", +"slice_62/start_frame": 0, +"slice_63/end_frame": 0, +"slice_63/loop_mode": 0, +"slice_63/name": "", +"slice_63/save_to_file/enabled": false, +"slice_63/save_to_file/keep_custom_tracks": false, +"slice_63/save_to_file/path": "", +"slice_63/start_frame": 0, +"slice_64/end_frame": 0, +"slice_64/loop_mode": 0, +"slice_64/name": "", +"slice_64/save_to_file/enabled": false, +"slice_64/save_to_file/keep_custom_tracks": false, +"slice_64/save_to_file/path": "", +"slice_64/start_frame": 0, +"slice_65/end_frame": 0, +"slice_65/loop_mode": 0, +"slice_65/name": "", +"slice_65/save_to_file/enabled": false, +"slice_65/save_to_file/keep_custom_tracks": false, +"slice_65/save_to_file/path": "", +"slice_65/start_frame": 0, +"slice_66/end_frame": 0, +"slice_66/loop_mode": 0, +"slice_66/name": "", +"slice_66/save_to_file/enabled": false, +"slice_66/save_to_file/keep_custom_tracks": false, +"slice_66/save_to_file/path": "", +"slice_66/start_frame": 0, +"slice_67/end_frame": 0, +"slice_67/loop_mode": 0, +"slice_67/name": "", +"slice_67/save_to_file/enabled": false, +"slice_67/save_to_file/keep_custom_tracks": false, +"slice_67/save_to_file/path": "", +"slice_67/start_frame": 0, +"slice_68/end_frame": 0, +"slice_68/loop_mode": 0, +"slice_68/name": "", +"slice_68/save_to_file/enabled": false, +"slice_68/save_to_file/keep_custom_tracks": false, +"slice_68/save_to_file/path": "", +"slice_68/start_frame": 0, +"slice_69/end_frame": 0, +"slice_69/loop_mode": 0, +"slice_69/name": "", +"slice_69/save_to_file/enabled": false, +"slice_69/save_to_file/keep_custom_tracks": false, +"slice_69/save_to_file/path": "", +"slice_69/start_frame": 0, +"slice_7/end_frame": 0, +"slice_7/loop_mode": 0, +"slice_7/name": "", +"slice_7/save_to_file/enabled": false, +"slice_7/save_to_file/keep_custom_tracks": false, +"slice_7/save_to_file/path": "", +"slice_7/start_frame": 0, +"slice_70/end_frame": 0, +"slice_70/loop_mode": 0, +"slice_70/name": "", +"slice_70/save_to_file/enabled": false, +"slice_70/save_to_file/keep_custom_tracks": false, +"slice_70/save_to_file/path": "", +"slice_70/start_frame": 0, +"slice_71/end_frame": 0, +"slice_71/loop_mode": 0, +"slice_71/name": "", +"slice_71/save_to_file/enabled": false, +"slice_71/save_to_file/keep_custom_tracks": false, +"slice_71/save_to_file/path": "", +"slice_71/start_frame": 0, +"slice_72/end_frame": 0, +"slice_72/loop_mode": 0, +"slice_72/name": "", +"slice_72/save_to_file/enabled": false, +"slice_72/save_to_file/keep_custom_tracks": false, +"slice_72/save_to_file/path": "", +"slice_72/start_frame": 0, +"slice_73/end_frame": 0, +"slice_73/loop_mode": 0, +"slice_73/name": "", +"slice_73/save_to_file/enabled": false, +"slice_73/save_to_file/keep_custom_tracks": false, +"slice_73/save_to_file/path": "", +"slice_73/start_frame": 0, +"slice_74/end_frame": 0, +"slice_74/loop_mode": 0, +"slice_74/name": "", +"slice_74/save_to_file/enabled": false, +"slice_74/save_to_file/keep_custom_tracks": false, +"slice_74/save_to_file/path": "", +"slice_74/start_frame": 0, +"slice_75/end_frame": 0, +"slice_75/loop_mode": 0, +"slice_75/name": "", +"slice_75/save_to_file/enabled": false, +"slice_75/save_to_file/keep_custom_tracks": false, +"slice_75/save_to_file/path": "", +"slice_75/start_frame": 0, +"slice_76/end_frame": 0, +"slice_76/loop_mode": 0, +"slice_76/name": "", +"slice_76/save_to_file/enabled": false, +"slice_76/save_to_file/keep_custom_tracks": false, +"slice_76/save_to_file/path": "", +"slice_76/start_frame": 0, +"slice_77/end_frame": 0, +"slice_77/loop_mode": 0, +"slice_77/name": "", +"slice_77/save_to_file/enabled": false, +"slice_77/save_to_file/keep_custom_tracks": false, +"slice_77/save_to_file/path": "", +"slice_77/start_frame": 0, +"slice_78/end_frame": 0, +"slice_78/loop_mode": 0, +"slice_78/name": "", +"slice_78/save_to_file/enabled": false, +"slice_78/save_to_file/keep_custom_tracks": false, +"slice_78/save_to_file/path": "", +"slice_78/start_frame": 0, +"slice_79/end_frame": 0, +"slice_79/loop_mode": 0, +"slice_79/name": "", +"slice_79/save_to_file/enabled": false, +"slice_79/save_to_file/keep_custom_tracks": false, +"slice_79/save_to_file/path": "", +"slice_79/start_frame": 0, +"slice_8/end_frame": 0, +"slice_8/loop_mode": 0, +"slice_8/name": "", +"slice_8/save_to_file/enabled": false, +"slice_8/save_to_file/keep_custom_tracks": false, +"slice_8/save_to_file/path": "", +"slice_8/start_frame": 0, +"slice_80/end_frame": 0, +"slice_80/loop_mode": 0, +"slice_80/name": "", +"slice_80/save_to_file/enabled": false, +"slice_80/save_to_file/keep_custom_tracks": false, +"slice_80/save_to_file/path": "", +"slice_80/start_frame": 0, +"slice_81/end_frame": 0, +"slice_81/loop_mode": 0, +"slice_81/name": "", +"slice_81/save_to_file/enabled": false, +"slice_81/save_to_file/keep_custom_tracks": false, +"slice_81/save_to_file/path": "", +"slice_81/start_frame": 0, +"slice_82/end_frame": 0, +"slice_82/loop_mode": 0, +"slice_82/name": "", +"slice_82/save_to_file/enabled": false, +"slice_82/save_to_file/keep_custom_tracks": false, +"slice_82/save_to_file/path": "", +"slice_82/start_frame": 0, +"slice_83/end_frame": 0, +"slice_83/loop_mode": 0, +"slice_83/name": "", +"slice_83/save_to_file/enabled": false, +"slice_83/save_to_file/keep_custom_tracks": false, +"slice_83/save_to_file/path": "", +"slice_83/start_frame": 0, +"slice_84/end_frame": 0, +"slice_84/loop_mode": 0, +"slice_84/name": "", +"slice_84/save_to_file/enabled": false, +"slice_84/save_to_file/keep_custom_tracks": false, +"slice_84/save_to_file/path": "", +"slice_84/start_frame": 0, +"slice_85/end_frame": 0, +"slice_85/loop_mode": 0, +"slice_85/name": "", +"slice_85/save_to_file/enabled": false, +"slice_85/save_to_file/keep_custom_tracks": false, +"slice_85/save_to_file/path": "", +"slice_85/start_frame": 0, +"slice_86/end_frame": 0, +"slice_86/loop_mode": 0, +"slice_86/name": "", +"slice_86/save_to_file/enabled": false, +"slice_86/save_to_file/keep_custom_tracks": false, +"slice_86/save_to_file/path": "", +"slice_86/start_frame": 0, +"slice_87/end_frame": 0, +"slice_87/loop_mode": 0, +"slice_87/name": "", +"slice_87/save_to_file/enabled": false, +"slice_87/save_to_file/keep_custom_tracks": false, +"slice_87/save_to_file/path": "", +"slice_87/start_frame": 0, +"slice_88/end_frame": 0, +"slice_88/loop_mode": 0, +"slice_88/name": "", +"slice_88/save_to_file/enabled": false, +"slice_88/save_to_file/keep_custom_tracks": false, +"slice_88/save_to_file/path": "", +"slice_88/start_frame": 0, +"slice_89/end_frame": 0, +"slice_89/loop_mode": 0, +"slice_89/name": "", +"slice_89/save_to_file/enabled": false, +"slice_89/save_to_file/keep_custom_tracks": false, +"slice_89/save_to_file/path": "", +"slice_89/start_frame": 0, +"slice_9/end_frame": 0, +"slice_9/loop_mode": 0, +"slice_9/name": "", +"slice_9/save_to_file/enabled": false, +"slice_9/save_to_file/keep_custom_tracks": false, +"slice_9/save_to_file/path": "", +"slice_9/start_frame": 0, +"slice_90/end_frame": 0, +"slice_90/loop_mode": 0, +"slice_90/name": "", +"slice_90/save_to_file/enabled": false, +"slice_90/save_to_file/keep_custom_tracks": false, +"slice_90/save_to_file/path": "", +"slice_90/start_frame": 0, +"slice_91/end_frame": 0, +"slice_91/loop_mode": 0, +"slice_91/name": "", +"slice_91/save_to_file/enabled": false, +"slice_91/save_to_file/keep_custom_tracks": false, +"slice_91/save_to_file/path": "", +"slice_91/start_frame": 0, +"slice_92/end_frame": 0, +"slice_92/loop_mode": 0, +"slice_92/name": "", +"slice_92/save_to_file/enabled": false, +"slice_92/save_to_file/keep_custom_tracks": false, +"slice_92/save_to_file/path": "", +"slice_92/start_frame": 0, +"slice_93/end_frame": 0, +"slice_93/loop_mode": 0, +"slice_93/name": "", +"slice_93/save_to_file/enabled": false, +"slice_93/save_to_file/keep_custom_tracks": false, +"slice_93/save_to_file/path": "", +"slice_93/start_frame": 0, +"slice_94/end_frame": 0, +"slice_94/loop_mode": 0, +"slice_94/name": "", +"slice_94/save_to_file/enabled": false, +"slice_94/save_to_file/keep_custom_tracks": false, +"slice_94/save_to_file/path": "", +"slice_94/start_frame": 0, +"slice_95/end_frame": 0, +"slice_95/loop_mode": 0, +"slice_95/name": "", +"slice_95/save_to_file/enabled": false, +"slice_95/save_to_file/keep_custom_tracks": false, +"slice_95/save_to_file/path": "", +"slice_95/start_frame": 0, +"slice_96/end_frame": 0, +"slice_96/loop_mode": 0, +"slice_96/name": "", +"slice_96/save_to_file/enabled": false, +"slice_96/save_to_file/keep_custom_tracks": false, +"slice_96/save_to_file/path": "", +"slice_96/start_frame": 0, +"slice_97/end_frame": 0, +"slice_97/loop_mode": 0, +"slice_97/name": "", +"slice_97/save_to_file/enabled": false, +"slice_97/save_to_file/keep_custom_tracks": false, +"slice_97/save_to_file/path": "", +"slice_97/start_frame": 0, +"slice_98/end_frame": 0, +"slice_98/loop_mode": 0, +"slice_98/name": "", +"slice_98/save_to_file/enabled": false, +"slice_98/save_to_file/keep_custom_tracks": false, +"slice_98/save_to_file/path": "", +"slice_98/start_frame": 0, +"slice_99/end_frame": 0, +"slice_99/loop_mode": 0, +"slice_99/name": "", +"slice_99/save_to_file/enabled": false, +"slice_99/save_to_file/keep_custom_tracks": false, +"slice_99/save_to_file/path": "", +"slice_99/start_frame": 0, +"slices/amount": 0 +}, +"Vert|Move_001": { +"save_to_file/enabled": true, +"save_to_file/keep_custom_tracks": "", +"save_to_file/path": "res://content/enemies/animations/Vert_Move_001.res", +"settings/loop_mode": 0, +"slice_1/end_frame": 0, +"slice_1/loop_mode": 0, +"slice_1/name": "", +"slice_1/save_to_file/enabled": false, +"slice_1/save_to_file/keep_custom_tracks": false, +"slice_1/save_to_file/path": "", +"slice_1/start_frame": 0, +"slice_10/end_frame": 0, +"slice_10/loop_mode": 0, +"slice_10/name": "", +"slice_10/save_to_file/enabled": false, +"slice_10/save_to_file/keep_custom_tracks": false, +"slice_10/save_to_file/path": "", +"slice_10/start_frame": 0, +"slice_100/end_frame": 0, +"slice_100/loop_mode": 0, +"slice_100/name": "", +"slice_100/save_to_file/enabled": false, +"slice_100/save_to_file/keep_custom_tracks": false, +"slice_100/save_to_file/path": "", +"slice_100/start_frame": 0, +"slice_101/end_frame": 0, +"slice_101/loop_mode": 0, +"slice_101/name": "", +"slice_101/save_to_file/enabled": false, +"slice_101/save_to_file/keep_custom_tracks": false, +"slice_101/save_to_file/path": "", +"slice_101/start_frame": 0, +"slice_102/end_frame": 0, +"slice_102/loop_mode": 0, +"slice_102/name": "", +"slice_102/save_to_file/enabled": false, +"slice_102/save_to_file/keep_custom_tracks": false, +"slice_102/save_to_file/path": "", +"slice_102/start_frame": 0, +"slice_103/end_frame": 0, +"slice_103/loop_mode": 0, +"slice_103/name": "", +"slice_103/save_to_file/enabled": false, +"slice_103/save_to_file/keep_custom_tracks": false, +"slice_103/save_to_file/path": "", +"slice_103/start_frame": 0, +"slice_104/end_frame": 0, +"slice_104/loop_mode": 0, +"slice_104/name": "", +"slice_104/save_to_file/enabled": false, +"slice_104/save_to_file/keep_custom_tracks": false, +"slice_104/save_to_file/path": "", +"slice_104/start_frame": 0, +"slice_105/end_frame": 0, +"slice_105/loop_mode": 0, +"slice_105/name": "", +"slice_105/save_to_file/enabled": false, +"slice_105/save_to_file/keep_custom_tracks": false, +"slice_105/save_to_file/path": "", +"slice_105/start_frame": 0, +"slice_106/end_frame": 0, +"slice_106/loop_mode": 0, +"slice_106/name": "", +"slice_106/save_to_file/enabled": false, +"slice_106/save_to_file/keep_custom_tracks": false, +"slice_106/save_to_file/path": "", +"slice_106/start_frame": 0, +"slice_107/end_frame": 0, +"slice_107/loop_mode": 0, +"slice_107/name": "", +"slice_107/save_to_file/enabled": false, +"slice_107/save_to_file/keep_custom_tracks": false, +"slice_107/save_to_file/path": "", +"slice_107/start_frame": 0, +"slice_108/end_frame": 0, +"slice_108/loop_mode": 0, +"slice_108/name": "", +"slice_108/save_to_file/enabled": false, +"slice_108/save_to_file/keep_custom_tracks": false, +"slice_108/save_to_file/path": "", +"slice_108/start_frame": 0, +"slice_109/end_frame": 0, +"slice_109/loop_mode": 0, +"slice_109/name": "", +"slice_109/save_to_file/enabled": false, +"slice_109/save_to_file/keep_custom_tracks": false, +"slice_109/save_to_file/path": "", +"slice_109/start_frame": 0, +"slice_11/end_frame": 0, +"slice_11/loop_mode": 0, +"slice_11/name": "", +"slice_11/save_to_file/enabled": false, +"slice_11/save_to_file/keep_custom_tracks": false, +"slice_11/save_to_file/path": "", +"slice_11/start_frame": 0, +"slice_110/end_frame": 0, +"slice_110/loop_mode": 0, +"slice_110/name": "", +"slice_110/save_to_file/enabled": false, +"slice_110/save_to_file/keep_custom_tracks": false, +"slice_110/save_to_file/path": "", +"slice_110/start_frame": 0, +"slice_111/end_frame": 0, +"slice_111/loop_mode": 0, +"slice_111/name": "", +"slice_111/save_to_file/enabled": false, +"slice_111/save_to_file/keep_custom_tracks": false, +"slice_111/save_to_file/path": "", +"slice_111/start_frame": 0, +"slice_112/end_frame": 0, +"slice_112/loop_mode": 0, +"slice_112/name": "", +"slice_112/save_to_file/enabled": false, +"slice_112/save_to_file/keep_custom_tracks": false, +"slice_112/save_to_file/path": "", +"slice_112/start_frame": 0, +"slice_113/end_frame": 0, +"slice_113/loop_mode": 0, +"slice_113/name": "", +"slice_113/save_to_file/enabled": false, +"slice_113/save_to_file/keep_custom_tracks": false, +"slice_113/save_to_file/path": "", +"slice_113/start_frame": 0, +"slice_114/end_frame": 0, +"slice_114/loop_mode": 0, +"slice_114/name": "", +"slice_114/save_to_file/enabled": false, +"slice_114/save_to_file/keep_custom_tracks": false, +"slice_114/save_to_file/path": "", +"slice_114/start_frame": 0, +"slice_115/end_frame": 0, +"slice_115/loop_mode": 0, +"slice_115/name": "", +"slice_115/save_to_file/enabled": false, +"slice_115/save_to_file/keep_custom_tracks": false, +"slice_115/save_to_file/path": "", +"slice_115/start_frame": 0, +"slice_116/end_frame": 0, +"slice_116/loop_mode": 0, +"slice_116/name": "", +"slice_116/save_to_file/enabled": false, +"slice_116/save_to_file/keep_custom_tracks": false, +"slice_116/save_to_file/path": "", +"slice_116/start_frame": 0, +"slice_117/end_frame": 0, +"slice_117/loop_mode": 0, +"slice_117/name": "", +"slice_117/save_to_file/enabled": false, +"slice_117/save_to_file/keep_custom_tracks": false, +"slice_117/save_to_file/path": "", +"slice_117/start_frame": 0, +"slice_118/end_frame": 0, +"slice_118/loop_mode": 0, +"slice_118/name": "", +"slice_118/save_to_file/enabled": false, +"slice_118/save_to_file/keep_custom_tracks": false, +"slice_118/save_to_file/path": "", +"slice_118/start_frame": 0, +"slice_119/end_frame": 0, +"slice_119/loop_mode": 0, +"slice_119/name": "", +"slice_119/save_to_file/enabled": false, +"slice_119/save_to_file/keep_custom_tracks": false, +"slice_119/save_to_file/path": "", +"slice_119/start_frame": 0, +"slice_12/end_frame": 0, +"slice_12/loop_mode": 0, +"slice_12/name": "", +"slice_12/save_to_file/enabled": false, +"slice_12/save_to_file/keep_custom_tracks": false, +"slice_12/save_to_file/path": "", +"slice_12/start_frame": 0, +"slice_120/end_frame": 0, +"slice_120/loop_mode": 0, +"slice_120/name": "", +"slice_120/save_to_file/enabled": false, +"slice_120/save_to_file/keep_custom_tracks": false, +"slice_120/save_to_file/path": "", +"slice_120/start_frame": 0, +"slice_121/end_frame": 0, +"slice_121/loop_mode": 0, +"slice_121/name": "", +"slice_121/save_to_file/enabled": false, +"slice_121/save_to_file/keep_custom_tracks": false, +"slice_121/save_to_file/path": "", +"slice_121/start_frame": 0, +"slice_122/end_frame": 0, +"slice_122/loop_mode": 0, +"slice_122/name": "", +"slice_122/save_to_file/enabled": false, +"slice_122/save_to_file/keep_custom_tracks": false, +"slice_122/save_to_file/path": "", +"slice_122/start_frame": 0, +"slice_123/end_frame": 0, +"slice_123/loop_mode": 0, +"slice_123/name": "", +"slice_123/save_to_file/enabled": false, +"slice_123/save_to_file/keep_custom_tracks": false, +"slice_123/save_to_file/path": "", +"slice_123/start_frame": 0, +"slice_124/end_frame": 0, +"slice_124/loop_mode": 0, +"slice_124/name": "", +"slice_124/save_to_file/enabled": false, +"slice_124/save_to_file/keep_custom_tracks": false, +"slice_124/save_to_file/path": "", +"slice_124/start_frame": 0, +"slice_125/end_frame": 0, +"slice_125/loop_mode": 0, +"slice_125/name": "", +"slice_125/save_to_file/enabled": false, +"slice_125/save_to_file/keep_custom_tracks": false, +"slice_125/save_to_file/path": "", +"slice_125/start_frame": 0, +"slice_126/end_frame": 0, +"slice_126/loop_mode": 0, +"slice_126/name": "", +"slice_126/save_to_file/enabled": false, +"slice_126/save_to_file/keep_custom_tracks": false, +"slice_126/save_to_file/path": "", +"slice_126/start_frame": 0, +"slice_127/end_frame": 0, +"slice_127/loop_mode": 0, +"slice_127/name": "", +"slice_127/save_to_file/enabled": false, +"slice_127/save_to_file/keep_custom_tracks": false, +"slice_127/save_to_file/path": "", +"slice_127/start_frame": 0, +"slice_128/end_frame": 0, +"slice_128/loop_mode": 0, +"slice_128/name": "", +"slice_128/save_to_file/enabled": false, +"slice_128/save_to_file/keep_custom_tracks": false, +"slice_128/save_to_file/path": "", +"slice_128/start_frame": 0, +"slice_129/end_frame": 0, +"slice_129/loop_mode": 0, +"slice_129/name": "", +"slice_129/save_to_file/enabled": false, +"slice_129/save_to_file/keep_custom_tracks": false, +"slice_129/save_to_file/path": "", +"slice_129/start_frame": 0, +"slice_13/end_frame": 0, +"slice_13/loop_mode": 0, +"slice_13/name": "", +"slice_13/save_to_file/enabled": false, +"slice_13/save_to_file/keep_custom_tracks": false, +"slice_13/save_to_file/path": "", +"slice_13/start_frame": 0, +"slice_130/end_frame": 0, +"slice_130/loop_mode": 0, +"slice_130/name": "", +"slice_130/save_to_file/enabled": false, +"slice_130/save_to_file/keep_custom_tracks": false, +"slice_130/save_to_file/path": "", +"slice_130/start_frame": 0, +"slice_131/end_frame": 0, +"slice_131/loop_mode": 0, +"slice_131/name": "", +"slice_131/save_to_file/enabled": false, +"slice_131/save_to_file/keep_custom_tracks": false, +"slice_131/save_to_file/path": "", +"slice_131/start_frame": 0, +"slice_132/end_frame": 0, +"slice_132/loop_mode": 0, +"slice_132/name": "", +"slice_132/save_to_file/enabled": false, +"slice_132/save_to_file/keep_custom_tracks": false, +"slice_132/save_to_file/path": "", +"slice_132/start_frame": 0, +"slice_133/end_frame": 0, +"slice_133/loop_mode": 0, +"slice_133/name": "", +"slice_133/save_to_file/enabled": false, +"slice_133/save_to_file/keep_custom_tracks": false, +"slice_133/save_to_file/path": "", +"slice_133/start_frame": 0, +"slice_134/end_frame": 0, +"slice_134/loop_mode": 0, +"slice_134/name": "", +"slice_134/save_to_file/enabled": false, +"slice_134/save_to_file/keep_custom_tracks": false, +"slice_134/save_to_file/path": "", +"slice_134/start_frame": 0, +"slice_135/end_frame": 0, +"slice_135/loop_mode": 0, +"slice_135/name": "", +"slice_135/save_to_file/enabled": false, +"slice_135/save_to_file/keep_custom_tracks": false, +"slice_135/save_to_file/path": "", +"slice_135/start_frame": 0, +"slice_136/end_frame": 0, +"slice_136/loop_mode": 0, +"slice_136/name": "", +"slice_136/save_to_file/enabled": false, +"slice_136/save_to_file/keep_custom_tracks": false, +"slice_136/save_to_file/path": "", +"slice_136/start_frame": 0, +"slice_137/end_frame": 0, +"slice_137/loop_mode": 0, +"slice_137/name": "", +"slice_137/save_to_file/enabled": false, +"slice_137/save_to_file/keep_custom_tracks": false, +"slice_137/save_to_file/path": "", +"slice_137/start_frame": 0, +"slice_138/end_frame": 0, +"slice_138/loop_mode": 0, +"slice_138/name": "", +"slice_138/save_to_file/enabled": false, +"slice_138/save_to_file/keep_custom_tracks": false, +"slice_138/save_to_file/path": "", +"slice_138/start_frame": 0, +"slice_139/end_frame": 0, +"slice_139/loop_mode": 0, +"slice_139/name": "", +"slice_139/save_to_file/enabled": false, +"slice_139/save_to_file/keep_custom_tracks": false, +"slice_139/save_to_file/path": "", +"slice_139/start_frame": 0, +"slice_14/end_frame": 0, +"slice_14/loop_mode": 0, +"slice_14/name": "", +"slice_14/save_to_file/enabled": false, +"slice_14/save_to_file/keep_custom_tracks": false, +"slice_14/save_to_file/path": "", +"slice_14/start_frame": 0, +"slice_140/end_frame": 0, +"slice_140/loop_mode": 0, +"slice_140/name": "", +"slice_140/save_to_file/enabled": false, +"slice_140/save_to_file/keep_custom_tracks": false, +"slice_140/save_to_file/path": "", +"slice_140/start_frame": 0, +"slice_141/end_frame": 0, +"slice_141/loop_mode": 0, +"slice_141/name": "", +"slice_141/save_to_file/enabled": false, +"slice_141/save_to_file/keep_custom_tracks": false, +"slice_141/save_to_file/path": "", +"slice_141/start_frame": 0, +"slice_142/end_frame": 0, +"slice_142/loop_mode": 0, +"slice_142/name": "", +"slice_142/save_to_file/enabled": false, +"slice_142/save_to_file/keep_custom_tracks": false, +"slice_142/save_to_file/path": "", +"slice_142/start_frame": 0, +"slice_143/end_frame": 0, +"slice_143/loop_mode": 0, +"slice_143/name": "", +"slice_143/save_to_file/enabled": false, +"slice_143/save_to_file/keep_custom_tracks": false, +"slice_143/save_to_file/path": "", +"slice_143/start_frame": 0, +"slice_144/end_frame": 0, +"slice_144/loop_mode": 0, +"slice_144/name": "", +"slice_144/save_to_file/enabled": false, +"slice_144/save_to_file/keep_custom_tracks": false, +"slice_144/save_to_file/path": "", +"slice_144/start_frame": 0, +"slice_145/end_frame": 0, +"slice_145/loop_mode": 0, +"slice_145/name": "", +"slice_145/save_to_file/enabled": false, +"slice_145/save_to_file/keep_custom_tracks": false, +"slice_145/save_to_file/path": "", +"slice_145/start_frame": 0, +"slice_146/end_frame": 0, +"slice_146/loop_mode": 0, +"slice_146/name": "", +"slice_146/save_to_file/enabled": false, +"slice_146/save_to_file/keep_custom_tracks": false, +"slice_146/save_to_file/path": "", +"slice_146/start_frame": 0, +"slice_147/end_frame": 0, +"slice_147/loop_mode": 0, +"slice_147/name": "", +"slice_147/save_to_file/enabled": false, +"slice_147/save_to_file/keep_custom_tracks": false, +"slice_147/save_to_file/path": "", +"slice_147/start_frame": 0, +"slice_148/end_frame": 0, +"slice_148/loop_mode": 0, +"slice_148/name": "", +"slice_148/save_to_file/enabled": false, +"slice_148/save_to_file/keep_custom_tracks": false, +"slice_148/save_to_file/path": "", +"slice_148/start_frame": 0, +"slice_149/end_frame": 0, +"slice_149/loop_mode": 0, +"slice_149/name": "", +"slice_149/save_to_file/enabled": false, +"slice_149/save_to_file/keep_custom_tracks": false, +"slice_149/save_to_file/path": "", +"slice_149/start_frame": 0, +"slice_15/end_frame": 0, +"slice_15/loop_mode": 0, +"slice_15/name": "", +"slice_15/save_to_file/enabled": false, +"slice_15/save_to_file/keep_custom_tracks": false, +"slice_15/save_to_file/path": "", +"slice_15/start_frame": 0, +"slice_150/end_frame": 0, +"slice_150/loop_mode": 0, +"slice_150/name": "", +"slice_150/save_to_file/enabled": false, +"slice_150/save_to_file/keep_custom_tracks": false, +"slice_150/save_to_file/path": "", +"slice_150/start_frame": 0, +"slice_151/end_frame": 0, +"slice_151/loop_mode": 0, +"slice_151/name": "", +"slice_151/save_to_file/enabled": false, +"slice_151/save_to_file/keep_custom_tracks": false, +"slice_151/save_to_file/path": "", +"slice_151/start_frame": 0, +"slice_152/end_frame": 0, +"slice_152/loop_mode": 0, +"slice_152/name": "", +"slice_152/save_to_file/enabled": false, +"slice_152/save_to_file/keep_custom_tracks": false, +"slice_152/save_to_file/path": "", +"slice_152/start_frame": 0, +"slice_153/end_frame": 0, +"slice_153/loop_mode": 0, +"slice_153/name": "", +"slice_153/save_to_file/enabled": false, +"slice_153/save_to_file/keep_custom_tracks": false, +"slice_153/save_to_file/path": "", +"slice_153/start_frame": 0, +"slice_154/end_frame": 0, +"slice_154/loop_mode": 0, +"slice_154/name": "", +"slice_154/save_to_file/enabled": false, +"slice_154/save_to_file/keep_custom_tracks": false, +"slice_154/save_to_file/path": "", +"slice_154/start_frame": 0, +"slice_155/end_frame": 0, +"slice_155/loop_mode": 0, +"slice_155/name": "", +"slice_155/save_to_file/enabled": false, +"slice_155/save_to_file/keep_custom_tracks": false, +"slice_155/save_to_file/path": "", +"slice_155/start_frame": 0, +"slice_156/end_frame": 0, +"slice_156/loop_mode": 0, +"slice_156/name": "", +"slice_156/save_to_file/enabled": false, +"slice_156/save_to_file/keep_custom_tracks": false, +"slice_156/save_to_file/path": "", +"slice_156/start_frame": 0, +"slice_157/end_frame": 0, +"slice_157/loop_mode": 0, +"slice_157/name": "", +"slice_157/save_to_file/enabled": false, +"slice_157/save_to_file/keep_custom_tracks": false, +"slice_157/save_to_file/path": "", +"slice_157/start_frame": 0, +"slice_158/end_frame": 0, +"slice_158/loop_mode": 0, +"slice_158/name": "", +"slice_158/save_to_file/enabled": false, +"slice_158/save_to_file/keep_custom_tracks": false, +"slice_158/save_to_file/path": "", +"slice_158/start_frame": 0, +"slice_159/end_frame": 0, +"slice_159/loop_mode": 0, +"slice_159/name": "", +"slice_159/save_to_file/enabled": false, +"slice_159/save_to_file/keep_custom_tracks": false, +"slice_159/save_to_file/path": "", +"slice_159/start_frame": 0, +"slice_16/end_frame": 0, +"slice_16/loop_mode": 0, +"slice_16/name": "", +"slice_16/save_to_file/enabled": false, +"slice_16/save_to_file/keep_custom_tracks": false, +"slice_16/save_to_file/path": "", +"slice_16/start_frame": 0, +"slice_160/end_frame": 0, +"slice_160/loop_mode": 0, +"slice_160/name": "", +"slice_160/save_to_file/enabled": false, +"slice_160/save_to_file/keep_custom_tracks": false, +"slice_160/save_to_file/path": "", +"slice_160/start_frame": 0, +"slice_161/end_frame": 0, +"slice_161/loop_mode": 0, +"slice_161/name": "", +"slice_161/save_to_file/enabled": false, +"slice_161/save_to_file/keep_custom_tracks": false, +"slice_161/save_to_file/path": "", +"slice_161/start_frame": 0, +"slice_162/end_frame": 0, +"slice_162/loop_mode": 0, +"slice_162/name": "", +"slice_162/save_to_file/enabled": false, +"slice_162/save_to_file/keep_custom_tracks": false, +"slice_162/save_to_file/path": "", +"slice_162/start_frame": 0, +"slice_163/end_frame": 0, +"slice_163/loop_mode": 0, +"slice_163/name": "", +"slice_163/save_to_file/enabled": false, +"slice_163/save_to_file/keep_custom_tracks": false, +"slice_163/save_to_file/path": "", +"slice_163/start_frame": 0, +"slice_164/end_frame": 0, +"slice_164/loop_mode": 0, +"slice_164/name": "", +"slice_164/save_to_file/enabled": false, +"slice_164/save_to_file/keep_custom_tracks": false, +"slice_164/save_to_file/path": "", +"slice_164/start_frame": 0, +"slice_165/end_frame": 0, +"slice_165/loop_mode": 0, +"slice_165/name": "", +"slice_165/save_to_file/enabled": false, +"slice_165/save_to_file/keep_custom_tracks": false, +"slice_165/save_to_file/path": "", +"slice_165/start_frame": 0, +"slice_166/end_frame": 0, +"slice_166/loop_mode": 0, +"slice_166/name": "", +"slice_166/save_to_file/enabled": false, +"slice_166/save_to_file/keep_custom_tracks": false, +"slice_166/save_to_file/path": "", +"slice_166/start_frame": 0, +"slice_167/end_frame": 0, +"slice_167/loop_mode": 0, +"slice_167/name": "", +"slice_167/save_to_file/enabled": false, +"slice_167/save_to_file/keep_custom_tracks": false, +"slice_167/save_to_file/path": "", +"slice_167/start_frame": 0, +"slice_168/end_frame": 0, +"slice_168/loop_mode": 0, +"slice_168/name": "", +"slice_168/save_to_file/enabled": false, +"slice_168/save_to_file/keep_custom_tracks": false, +"slice_168/save_to_file/path": "", +"slice_168/start_frame": 0, +"slice_169/end_frame": 0, +"slice_169/loop_mode": 0, +"slice_169/name": "", +"slice_169/save_to_file/enabled": false, +"slice_169/save_to_file/keep_custom_tracks": false, +"slice_169/save_to_file/path": "", +"slice_169/start_frame": 0, +"slice_17/end_frame": 0, +"slice_17/loop_mode": 0, +"slice_17/name": "", +"slice_17/save_to_file/enabled": false, +"slice_17/save_to_file/keep_custom_tracks": false, +"slice_17/save_to_file/path": "", +"slice_17/start_frame": 0, +"slice_170/end_frame": 0, +"slice_170/loop_mode": 0, +"slice_170/name": "", +"slice_170/save_to_file/enabled": false, +"slice_170/save_to_file/keep_custom_tracks": false, +"slice_170/save_to_file/path": "", +"slice_170/start_frame": 0, +"slice_171/end_frame": 0, +"slice_171/loop_mode": 0, +"slice_171/name": "", +"slice_171/save_to_file/enabled": false, +"slice_171/save_to_file/keep_custom_tracks": false, +"slice_171/save_to_file/path": "", +"slice_171/start_frame": 0, +"slice_172/end_frame": 0, +"slice_172/loop_mode": 0, +"slice_172/name": "", +"slice_172/save_to_file/enabled": false, +"slice_172/save_to_file/keep_custom_tracks": false, +"slice_172/save_to_file/path": "", +"slice_172/start_frame": 0, +"slice_173/end_frame": 0, +"slice_173/loop_mode": 0, +"slice_173/name": "", +"slice_173/save_to_file/enabled": false, +"slice_173/save_to_file/keep_custom_tracks": false, +"slice_173/save_to_file/path": "", +"slice_173/start_frame": 0, +"slice_174/end_frame": 0, +"slice_174/loop_mode": 0, +"slice_174/name": "", +"slice_174/save_to_file/enabled": false, +"slice_174/save_to_file/keep_custom_tracks": false, +"slice_174/save_to_file/path": "", +"slice_174/start_frame": 0, +"slice_175/end_frame": 0, +"slice_175/loop_mode": 0, +"slice_175/name": "", +"slice_175/save_to_file/enabled": false, +"slice_175/save_to_file/keep_custom_tracks": false, +"slice_175/save_to_file/path": "", +"slice_175/start_frame": 0, +"slice_176/end_frame": 0, +"slice_176/loop_mode": 0, +"slice_176/name": "", +"slice_176/save_to_file/enabled": false, +"slice_176/save_to_file/keep_custom_tracks": false, +"slice_176/save_to_file/path": "", +"slice_176/start_frame": 0, +"slice_177/end_frame": 0, +"slice_177/loop_mode": 0, +"slice_177/name": "", +"slice_177/save_to_file/enabled": false, +"slice_177/save_to_file/keep_custom_tracks": false, +"slice_177/save_to_file/path": "", +"slice_177/start_frame": 0, +"slice_178/end_frame": 0, +"slice_178/loop_mode": 0, +"slice_178/name": "", +"slice_178/save_to_file/enabled": false, +"slice_178/save_to_file/keep_custom_tracks": false, +"slice_178/save_to_file/path": "", +"slice_178/start_frame": 0, +"slice_179/end_frame": 0, +"slice_179/loop_mode": 0, +"slice_179/name": "", +"slice_179/save_to_file/enabled": false, +"slice_179/save_to_file/keep_custom_tracks": false, +"slice_179/save_to_file/path": "", +"slice_179/start_frame": 0, +"slice_18/end_frame": 0, +"slice_18/loop_mode": 0, +"slice_18/name": "", +"slice_18/save_to_file/enabled": false, +"slice_18/save_to_file/keep_custom_tracks": false, +"slice_18/save_to_file/path": "", +"slice_18/start_frame": 0, +"slice_180/end_frame": 0, +"slice_180/loop_mode": 0, +"slice_180/name": "", +"slice_180/save_to_file/enabled": false, +"slice_180/save_to_file/keep_custom_tracks": false, +"slice_180/save_to_file/path": "", +"slice_180/start_frame": 0, +"slice_181/end_frame": 0, +"slice_181/loop_mode": 0, +"slice_181/name": "", +"slice_181/save_to_file/enabled": false, +"slice_181/save_to_file/keep_custom_tracks": false, +"slice_181/save_to_file/path": "", +"slice_181/start_frame": 0, +"slice_182/end_frame": 0, +"slice_182/loop_mode": 0, +"slice_182/name": "", +"slice_182/save_to_file/enabled": false, +"slice_182/save_to_file/keep_custom_tracks": false, +"slice_182/save_to_file/path": "", +"slice_182/start_frame": 0, +"slice_183/end_frame": 0, +"slice_183/loop_mode": 0, +"slice_183/name": "", +"slice_183/save_to_file/enabled": false, +"slice_183/save_to_file/keep_custom_tracks": false, +"slice_183/save_to_file/path": "", +"slice_183/start_frame": 0, +"slice_184/end_frame": 0, +"slice_184/loop_mode": 0, +"slice_184/name": "", +"slice_184/save_to_file/enabled": false, +"slice_184/save_to_file/keep_custom_tracks": false, +"slice_184/save_to_file/path": "", +"slice_184/start_frame": 0, +"slice_185/end_frame": 0, +"slice_185/loop_mode": 0, +"slice_185/name": "", +"slice_185/save_to_file/enabled": false, +"slice_185/save_to_file/keep_custom_tracks": false, +"slice_185/save_to_file/path": "", +"slice_185/start_frame": 0, +"slice_186/end_frame": 0, +"slice_186/loop_mode": 0, +"slice_186/name": "", +"slice_186/save_to_file/enabled": false, +"slice_186/save_to_file/keep_custom_tracks": false, +"slice_186/save_to_file/path": "", +"slice_186/start_frame": 0, +"slice_187/end_frame": 0, +"slice_187/loop_mode": 0, +"slice_187/name": "", +"slice_187/save_to_file/enabled": false, +"slice_187/save_to_file/keep_custom_tracks": false, +"slice_187/save_to_file/path": "", +"slice_187/start_frame": 0, +"slice_188/end_frame": 0, +"slice_188/loop_mode": 0, +"slice_188/name": "", +"slice_188/save_to_file/enabled": false, +"slice_188/save_to_file/keep_custom_tracks": false, +"slice_188/save_to_file/path": "", +"slice_188/start_frame": 0, +"slice_189/end_frame": 0, +"slice_189/loop_mode": 0, +"slice_189/name": "", +"slice_189/save_to_file/enabled": false, +"slice_189/save_to_file/keep_custom_tracks": false, +"slice_189/save_to_file/path": "", +"slice_189/start_frame": 0, +"slice_19/end_frame": 0, +"slice_19/loop_mode": 0, +"slice_19/name": "", +"slice_19/save_to_file/enabled": false, +"slice_19/save_to_file/keep_custom_tracks": false, +"slice_19/save_to_file/path": "", +"slice_19/start_frame": 0, +"slice_190/end_frame": 0, +"slice_190/loop_mode": 0, +"slice_190/name": "", +"slice_190/save_to_file/enabled": false, +"slice_190/save_to_file/keep_custom_tracks": false, +"slice_190/save_to_file/path": "", +"slice_190/start_frame": 0, +"slice_191/end_frame": 0, +"slice_191/loop_mode": 0, +"slice_191/name": "", +"slice_191/save_to_file/enabled": false, +"slice_191/save_to_file/keep_custom_tracks": false, +"slice_191/save_to_file/path": "", +"slice_191/start_frame": 0, +"slice_192/end_frame": 0, +"slice_192/loop_mode": 0, +"slice_192/name": "", +"slice_192/save_to_file/enabled": false, +"slice_192/save_to_file/keep_custom_tracks": false, +"slice_192/save_to_file/path": "", +"slice_192/start_frame": 0, +"slice_193/end_frame": 0, +"slice_193/loop_mode": 0, +"slice_193/name": "", +"slice_193/save_to_file/enabled": false, +"slice_193/save_to_file/keep_custom_tracks": false, +"slice_193/save_to_file/path": "", +"slice_193/start_frame": 0, +"slice_194/end_frame": 0, +"slice_194/loop_mode": 0, +"slice_194/name": "", +"slice_194/save_to_file/enabled": false, +"slice_194/save_to_file/keep_custom_tracks": false, +"slice_194/save_to_file/path": "", +"slice_194/start_frame": 0, +"slice_195/end_frame": 0, +"slice_195/loop_mode": 0, +"slice_195/name": "", +"slice_195/save_to_file/enabled": false, +"slice_195/save_to_file/keep_custom_tracks": false, +"slice_195/save_to_file/path": "", +"slice_195/start_frame": 0, +"slice_196/end_frame": 0, +"slice_196/loop_mode": 0, +"slice_196/name": "", +"slice_196/save_to_file/enabled": false, +"slice_196/save_to_file/keep_custom_tracks": false, +"slice_196/save_to_file/path": "", +"slice_196/start_frame": 0, +"slice_197/end_frame": 0, +"slice_197/loop_mode": 0, +"slice_197/name": "", +"slice_197/save_to_file/enabled": false, +"slice_197/save_to_file/keep_custom_tracks": false, +"slice_197/save_to_file/path": "", +"slice_197/start_frame": 0, +"slice_198/end_frame": 0, +"slice_198/loop_mode": 0, +"slice_198/name": "", +"slice_198/save_to_file/enabled": false, +"slice_198/save_to_file/keep_custom_tracks": false, +"slice_198/save_to_file/path": "", +"slice_198/start_frame": 0, +"slice_199/end_frame": 0, +"slice_199/loop_mode": 0, +"slice_199/name": "", +"slice_199/save_to_file/enabled": false, +"slice_199/save_to_file/keep_custom_tracks": false, +"slice_199/save_to_file/path": "", +"slice_199/start_frame": 0, +"slice_2/end_frame": 0, +"slice_2/loop_mode": 0, +"slice_2/name": "", +"slice_2/save_to_file/enabled": false, +"slice_2/save_to_file/keep_custom_tracks": false, +"slice_2/save_to_file/path": "", +"slice_2/start_frame": 0, +"slice_20/end_frame": 0, +"slice_20/loop_mode": 0, +"slice_20/name": "", +"slice_20/save_to_file/enabled": false, +"slice_20/save_to_file/keep_custom_tracks": false, +"slice_20/save_to_file/path": "", +"slice_20/start_frame": 0, +"slice_200/end_frame": 0, +"slice_200/loop_mode": 0, +"slice_200/name": "", +"slice_200/save_to_file/enabled": false, +"slice_200/save_to_file/keep_custom_tracks": false, +"slice_200/save_to_file/path": "", +"slice_200/start_frame": 0, +"slice_201/end_frame": 0, +"slice_201/loop_mode": 0, +"slice_201/name": "", +"slice_201/save_to_file/enabled": false, +"slice_201/save_to_file/keep_custom_tracks": false, +"slice_201/save_to_file/path": "", +"slice_201/start_frame": 0, +"slice_202/end_frame": 0, +"slice_202/loop_mode": 0, +"slice_202/name": "", +"slice_202/save_to_file/enabled": false, +"slice_202/save_to_file/keep_custom_tracks": false, +"slice_202/save_to_file/path": "", +"slice_202/start_frame": 0, +"slice_203/end_frame": 0, +"slice_203/loop_mode": 0, +"slice_203/name": "", +"slice_203/save_to_file/enabled": false, +"slice_203/save_to_file/keep_custom_tracks": false, +"slice_203/save_to_file/path": "", +"slice_203/start_frame": 0, +"slice_204/end_frame": 0, +"slice_204/loop_mode": 0, +"slice_204/name": "", +"slice_204/save_to_file/enabled": false, +"slice_204/save_to_file/keep_custom_tracks": false, +"slice_204/save_to_file/path": "", +"slice_204/start_frame": 0, +"slice_205/end_frame": 0, +"slice_205/loop_mode": 0, +"slice_205/name": "", +"slice_205/save_to_file/enabled": false, +"slice_205/save_to_file/keep_custom_tracks": false, +"slice_205/save_to_file/path": "", +"slice_205/start_frame": 0, +"slice_206/end_frame": 0, +"slice_206/loop_mode": 0, +"slice_206/name": "", +"slice_206/save_to_file/enabled": false, +"slice_206/save_to_file/keep_custom_tracks": false, +"slice_206/save_to_file/path": "", +"slice_206/start_frame": 0, +"slice_207/end_frame": 0, +"slice_207/loop_mode": 0, +"slice_207/name": "", +"slice_207/save_to_file/enabled": false, +"slice_207/save_to_file/keep_custom_tracks": false, +"slice_207/save_to_file/path": "", +"slice_207/start_frame": 0, +"slice_208/end_frame": 0, +"slice_208/loop_mode": 0, +"slice_208/name": "", +"slice_208/save_to_file/enabled": false, +"slice_208/save_to_file/keep_custom_tracks": false, +"slice_208/save_to_file/path": "", +"slice_208/start_frame": 0, +"slice_209/end_frame": 0, +"slice_209/loop_mode": 0, +"slice_209/name": "", +"slice_209/save_to_file/enabled": false, +"slice_209/save_to_file/keep_custom_tracks": false, +"slice_209/save_to_file/path": "", +"slice_209/start_frame": 0, +"slice_21/end_frame": 0, +"slice_21/loop_mode": 0, +"slice_21/name": "", +"slice_21/save_to_file/enabled": false, +"slice_21/save_to_file/keep_custom_tracks": false, +"slice_21/save_to_file/path": "", +"slice_21/start_frame": 0, +"slice_210/end_frame": 0, +"slice_210/loop_mode": 0, +"slice_210/name": "", +"slice_210/save_to_file/enabled": false, +"slice_210/save_to_file/keep_custom_tracks": false, +"slice_210/save_to_file/path": "", +"slice_210/start_frame": 0, +"slice_211/end_frame": 0, +"slice_211/loop_mode": 0, +"slice_211/name": "", +"slice_211/save_to_file/enabled": false, +"slice_211/save_to_file/keep_custom_tracks": false, +"slice_211/save_to_file/path": "", +"slice_211/start_frame": 0, +"slice_212/end_frame": 0, +"slice_212/loop_mode": 0, +"slice_212/name": "", +"slice_212/save_to_file/enabled": false, +"slice_212/save_to_file/keep_custom_tracks": false, +"slice_212/save_to_file/path": "", +"slice_212/start_frame": 0, +"slice_213/end_frame": 0, +"slice_213/loop_mode": 0, +"slice_213/name": "", +"slice_213/save_to_file/enabled": false, +"slice_213/save_to_file/keep_custom_tracks": false, +"slice_213/save_to_file/path": "", +"slice_213/start_frame": 0, +"slice_214/end_frame": 0, +"slice_214/loop_mode": 0, +"slice_214/name": "", +"slice_214/save_to_file/enabled": false, +"slice_214/save_to_file/keep_custom_tracks": false, +"slice_214/save_to_file/path": "", +"slice_214/start_frame": 0, +"slice_215/end_frame": 0, +"slice_215/loop_mode": 0, +"slice_215/name": "", +"slice_215/save_to_file/enabled": false, +"slice_215/save_to_file/keep_custom_tracks": false, +"slice_215/save_to_file/path": "", +"slice_215/start_frame": 0, +"slice_216/end_frame": 0, +"slice_216/loop_mode": 0, +"slice_216/name": "", +"slice_216/save_to_file/enabled": false, +"slice_216/save_to_file/keep_custom_tracks": false, +"slice_216/save_to_file/path": "", +"slice_216/start_frame": 0, +"slice_217/end_frame": 0, +"slice_217/loop_mode": 0, +"slice_217/name": "", +"slice_217/save_to_file/enabled": false, +"slice_217/save_to_file/keep_custom_tracks": false, +"slice_217/save_to_file/path": "", +"slice_217/start_frame": 0, +"slice_218/end_frame": 0, +"slice_218/loop_mode": 0, +"slice_218/name": "", +"slice_218/save_to_file/enabled": false, +"slice_218/save_to_file/keep_custom_tracks": false, +"slice_218/save_to_file/path": "", +"slice_218/start_frame": 0, +"slice_219/end_frame": 0, +"slice_219/loop_mode": 0, +"slice_219/name": "", +"slice_219/save_to_file/enabled": false, +"slice_219/save_to_file/keep_custom_tracks": false, +"slice_219/save_to_file/path": "", +"slice_219/start_frame": 0, +"slice_22/end_frame": 0, +"slice_22/loop_mode": 0, +"slice_22/name": "", +"slice_22/save_to_file/enabled": false, +"slice_22/save_to_file/keep_custom_tracks": false, +"slice_22/save_to_file/path": "", +"slice_22/start_frame": 0, +"slice_220/end_frame": 0, +"slice_220/loop_mode": 0, +"slice_220/name": "", +"slice_220/save_to_file/enabled": false, +"slice_220/save_to_file/keep_custom_tracks": false, +"slice_220/save_to_file/path": "", +"slice_220/start_frame": 0, +"slice_221/end_frame": 0, +"slice_221/loop_mode": 0, +"slice_221/name": "", +"slice_221/save_to_file/enabled": false, +"slice_221/save_to_file/keep_custom_tracks": false, +"slice_221/save_to_file/path": "", +"slice_221/start_frame": 0, +"slice_222/end_frame": 0, +"slice_222/loop_mode": 0, +"slice_222/name": "", +"slice_222/save_to_file/enabled": false, +"slice_222/save_to_file/keep_custom_tracks": false, +"slice_222/save_to_file/path": "", +"slice_222/start_frame": 0, +"slice_223/end_frame": 0, +"slice_223/loop_mode": 0, +"slice_223/name": "", +"slice_223/save_to_file/enabled": false, +"slice_223/save_to_file/keep_custom_tracks": false, +"slice_223/save_to_file/path": "", +"slice_223/start_frame": 0, +"slice_224/end_frame": 0, +"slice_224/loop_mode": 0, +"slice_224/name": "", +"slice_224/save_to_file/enabled": false, +"slice_224/save_to_file/keep_custom_tracks": false, +"slice_224/save_to_file/path": "", +"slice_224/start_frame": 0, +"slice_225/end_frame": 0, +"slice_225/loop_mode": 0, +"slice_225/name": "", +"slice_225/save_to_file/enabled": false, +"slice_225/save_to_file/keep_custom_tracks": false, +"slice_225/save_to_file/path": "", +"slice_225/start_frame": 0, +"slice_226/end_frame": 0, +"slice_226/loop_mode": 0, +"slice_226/name": "", +"slice_226/save_to_file/enabled": false, +"slice_226/save_to_file/keep_custom_tracks": false, +"slice_226/save_to_file/path": "", +"slice_226/start_frame": 0, +"slice_227/end_frame": 0, +"slice_227/loop_mode": 0, +"slice_227/name": "", +"slice_227/save_to_file/enabled": false, +"slice_227/save_to_file/keep_custom_tracks": false, +"slice_227/save_to_file/path": "", +"slice_227/start_frame": 0, +"slice_228/end_frame": 0, +"slice_228/loop_mode": 0, +"slice_228/name": "", +"slice_228/save_to_file/enabled": false, +"slice_228/save_to_file/keep_custom_tracks": false, +"slice_228/save_to_file/path": "", +"slice_228/start_frame": 0, +"slice_229/end_frame": 0, +"slice_229/loop_mode": 0, +"slice_229/name": "", +"slice_229/save_to_file/enabled": false, +"slice_229/save_to_file/keep_custom_tracks": false, +"slice_229/save_to_file/path": "", +"slice_229/start_frame": 0, +"slice_23/end_frame": 0, +"slice_23/loop_mode": 0, +"slice_23/name": "", +"slice_23/save_to_file/enabled": false, +"slice_23/save_to_file/keep_custom_tracks": false, +"slice_23/save_to_file/path": "", +"slice_23/start_frame": 0, +"slice_230/end_frame": 0, +"slice_230/loop_mode": 0, +"slice_230/name": "", +"slice_230/save_to_file/enabled": false, +"slice_230/save_to_file/keep_custom_tracks": false, +"slice_230/save_to_file/path": "", +"slice_230/start_frame": 0, +"slice_231/end_frame": 0, +"slice_231/loop_mode": 0, +"slice_231/name": "", +"slice_231/save_to_file/enabled": false, +"slice_231/save_to_file/keep_custom_tracks": false, +"slice_231/save_to_file/path": "", +"slice_231/start_frame": 0, +"slice_232/end_frame": 0, +"slice_232/loop_mode": 0, +"slice_232/name": "", +"slice_232/save_to_file/enabled": false, +"slice_232/save_to_file/keep_custom_tracks": false, +"slice_232/save_to_file/path": "", +"slice_232/start_frame": 0, +"slice_233/end_frame": 0, +"slice_233/loop_mode": 0, +"slice_233/name": "", +"slice_233/save_to_file/enabled": false, +"slice_233/save_to_file/keep_custom_tracks": false, +"slice_233/save_to_file/path": "", +"slice_233/start_frame": 0, +"slice_234/end_frame": 0, +"slice_234/loop_mode": 0, +"slice_234/name": "", +"slice_234/save_to_file/enabled": false, +"slice_234/save_to_file/keep_custom_tracks": false, +"slice_234/save_to_file/path": "", +"slice_234/start_frame": 0, +"slice_235/end_frame": 0, +"slice_235/loop_mode": 0, +"slice_235/name": "", +"slice_235/save_to_file/enabled": false, +"slice_235/save_to_file/keep_custom_tracks": false, +"slice_235/save_to_file/path": "", +"slice_235/start_frame": 0, +"slice_236/end_frame": 0, +"slice_236/loop_mode": 0, +"slice_236/name": "", +"slice_236/save_to_file/enabled": false, +"slice_236/save_to_file/keep_custom_tracks": false, +"slice_236/save_to_file/path": "", +"slice_236/start_frame": 0, +"slice_237/end_frame": 0, +"slice_237/loop_mode": 0, +"slice_237/name": "", +"slice_237/save_to_file/enabled": false, +"slice_237/save_to_file/keep_custom_tracks": false, +"slice_237/save_to_file/path": "", +"slice_237/start_frame": 0, +"slice_238/end_frame": 0, +"slice_238/loop_mode": 0, +"slice_238/name": "", +"slice_238/save_to_file/enabled": false, +"slice_238/save_to_file/keep_custom_tracks": false, +"slice_238/save_to_file/path": "", +"slice_238/start_frame": 0, +"slice_239/end_frame": 0, +"slice_239/loop_mode": 0, +"slice_239/name": "", +"slice_239/save_to_file/enabled": false, +"slice_239/save_to_file/keep_custom_tracks": false, +"slice_239/save_to_file/path": "", +"slice_239/start_frame": 0, +"slice_24/end_frame": 0, +"slice_24/loop_mode": 0, +"slice_24/name": "", +"slice_24/save_to_file/enabled": false, +"slice_24/save_to_file/keep_custom_tracks": false, +"slice_24/save_to_file/path": "", +"slice_24/start_frame": 0, +"slice_240/end_frame": 0, +"slice_240/loop_mode": 0, +"slice_240/name": "", +"slice_240/save_to_file/enabled": false, +"slice_240/save_to_file/keep_custom_tracks": false, +"slice_240/save_to_file/path": "", +"slice_240/start_frame": 0, +"slice_241/end_frame": 0, +"slice_241/loop_mode": 0, +"slice_241/name": "", +"slice_241/save_to_file/enabled": false, +"slice_241/save_to_file/keep_custom_tracks": false, +"slice_241/save_to_file/path": "", +"slice_241/start_frame": 0, +"slice_242/end_frame": 0, +"slice_242/loop_mode": 0, +"slice_242/name": "", +"slice_242/save_to_file/enabled": false, +"slice_242/save_to_file/keep_custom_tracks": false, +"slice_242/save_to_file/path": "", +"slice_242/start_frame": 0, +"slice_243/end_frame": 0, +"slice_243/loop_mode": 0, +"slice_243/name": "", +"slice_243/save_to_file/enabled": false, +"slice_243/save_to_file/keep_custom_tracks": false, +"slice_243/save_to_file/path": "", +"slice_243/start_frame": 0, +"slice_244/end_frame": 0, +"slice_244/loop_mode": 0, +"slice_244/name": "", +"slice_244/save_to_file/enabled": false, +"slice_244/save_to_file/keep_custom_tracks": false, +"slice_244/save_to_file/path": "", +"slice_244/start_frame": 0, +"slice_245/end_frame": 0, +"slice_245/loop_mode": 0, +"slice_245/name": "", +"slice_245/save_to_file/enabled": false, +"slice_245/save_to_file/keep_custom_tracks": false, +"slice_245/save_to_file/path": "", +"slice_245/start_frame": 0, +"slice_246/end_frame": 0, +"slice_246/loop_mode": 0, +"slice_246/name": "", +"slice_246/save_to_file/enabled": false, +"slice_246/save_to_file/keep_custom_tracks": false, +"slice_246/save_to_file/path": "", +"slice_246/start_frame": 0, +"slice_247/end_frame": 0, +"slice_247/loop_mode": 0, +"slice_247/name": "", +"slice_247/save_to_file/enabled": false, +"slice_247/save_to_file/keep_custom_tracks": false, +"slice_247/save_to_file/path": "", +"slice_247/start_frame": 0, +"slice_248/end_frame": 0, +"slice_248/loop_mode": 0, +"slice_248/name": "", +"slice_248/save_to_file/enabled": false, +"slice_248/save_to_file/keep_custom_tracks": false, +"slice_248/save_to_file/path": "", +"slice_248/start_frame": 0, +"slice_249/end_frame": 0, +"slice_249/loop_mode": 0, +"slice_249/name": "", +"slice_249/save_to_file/enabled": false, +"slice_249/save_to_file/keep_custom_tracks": false, +"slice_249/save_to_file/path": "", +"slice_249/start_frame": 0, +"slice_25/end_frame": 0, +"slice_25/loop_mode": 0, +"slice_25/name": "", +"slice_25/save_to_file/enabled": false, +"slice_25/save_to_file/keep_custom_tracks": false, +"slice_25/save_to_file/path": "", +"slice_25/start_frame": 0, +"slice_250/end_frame": 0, +"slice_250/loop_mode": 0, +"slice_250/name": "", +"slice_250/save_to_file/enabled": false, +"slice_250/save_to_file/keep_custom_tracks": false, +"slice_250/save_to_file/path": "", +"slice_250/start_frame": 0, +"slice_251/end_frame": 0, +"slice_251/loop_mode": 0, +"slice_251/name": "", +"slice_251/save_to_file/enabled": false, +"slice_251/save_to_file/keep_custom_tracks": false, +"slice_251/save_to_file/path": "", +"slice_251/start_frame": 0, +"slice_252/end_frame": 0, +"slice_252/loop_mode": 0, +"slice_252/name": "", +"slice_252/save_to_file/enabled": false, +"slice_252/save_to_file/keep_custom_tracks": false, +"slice_252/save_to_file/path": "", +"slice_252/start_frame": 0, +"slice_253/end_frame": 0, +"slice_253/loop_mode": 0, +"slice_253/name": "", +"slice_253/save_to_file/enabled": false, +"slice_253/save_to_file/keep_custom_tracks": false, +"slice_253/save_to_file/path": "", +"slice_253/start_frame": 0, +"slice_254/end_frame": 0, +"slice_254/loop_mode": 0, +"slice_254/name": "", +"slice_254/save_to_file/enabled": false, +"slice_254/save_to_file/keep_custom_tracks": false, +"slice_254/save_to_file/path": "", +"slice_254/start_frame": 0, +"slice_255/end_frame": 0, +"slice_255/loop_mode": 0, +"slice_255/name": "", +"slice_255/save_to_file/enabled": false, +"slice_255/save_to_file/keep_custom_tracks": false, +"slice_255/save_to_file/path": "", +"slice_255/start_frame": 0, +"slice_256/end_frame": 0, +"slice_256/loop_mode": 0, +"slice_256/name": "", +"slice_256/save_to_file/enabled": false, +"slice_256/save_to_file/keep_custom_tracks": false, +"slice_256/save_to_file/path": "", +"slice_256/start_frame": 0, +"slice_26/end_frame": 0, +"slice_26/loop_mode": 0, +"slice_26/name": "", +"slice_26/save_to_file/enabled": false, +"slice_26/save_to_file/keep_custom_tracks": false, +"slice_26/save_to_file/path": "", +"slice_26/start_frame": 0, +"slice_27/end_frame": 0, +"slice_27/loop_mode": 0, +"slice_27/name": "", +"slice_27/save_to_file/enabled": false, +"slice_27/save_to_file/keep_custom_tracks": false, +"slice_27/save_to_file/path": "", +"slice_27/start_frame": 0, +"slice_28/end_frame": 0, +"slice_28/loop_mode": 0, +"slice_28/name": "", +"slice_28/save_to_file/enabled": false, +"slice_28/save_to_file/keep_custom_tracks": false, +"slice_28/save_to_file/path": "", +"slice_28/start_frame": 0, +"slice_29/end_frame": 0, +"slice_29/loop_mode": 0, +"slice_29/name": "", +"slice_29/save_to_file/enabled": false, +"slice_29/save_to_file/keep_custom_tracks": false, +"slice_29/save_to_file/path": "", +"slice_29/start_frame": 0, +"slice_3/end_frame": 0, +"slice_3/loop_mode": 0, +"slice_3/name": "", +"slice_3/save_to_file/enabled": false, +"slice_3/save_to_file/keep_custom_tracks": false, +"slice_3/save_to_file/path": "", +"slice_3/start_frame": 0, +"slice_30/end_frame": 0, +"slice_30/loop_mode": 0, +"slice_30/name": "", +"slice_30/save_to_file/enabled": false, +"slice_30/save_to_file/keep_custom_tracks": false, +"slice_30/save_to_file/path": "", +"slice_30/start_frame": 0, +"slice_31/end_frame": 0, +"slice_31/loop_mode": 0, +"slice_31/name": "", +"slice_31/save_to_file/enabled": false, +"slice_31/save_to_file/keep_custom_tracks": false, +"slice_31/save_to_file/path": "", +"slice_31/start_frame": 0, +"slice_32/end_frame": 0, +"slice_32/loop_mode": 0, +"slice_32/name": "", +"slice_32/save_to_file/enabled": false, +"slice_32/save_to_file/keep_custom_tracks": false, +"slice_32/save_to_file/path": "", +"slice_32/start_frame": 0, +"slice_33/end_frame": 0, +"slice_33/loop_mode": 0, +"slice_33/name": "", +"slice_33/save_to_file/enabled": false, +"slice_33/save_to_file/keep_custom_tracks": false, +"slice_33/save_to_file/path": "", +"slice_33/start_frame": 0, +"slice_34/end_frame": 0, +"slice_34/loop_mode": 0, +"slice_34/name": "", +"slice_34/save_to_file/enabled": false, +"slice_34/save_to_file/keep_custom_tracks": false, +"slice_34/save_to_file/path": "", +"slice_34/start_frame": 0, +"slice_35/end_frame": 0, +"slice_35/loop_mode": 0, +"slice_35/name": "", +"slice_35/save_to_file/enabled": false, +"slice_35/save_to_file/keep_custom_tracks": false, +"slice_35/save_to_file/path": "", +"slice_35/start_frame": 0, +"slice_36/end_frame": 0, +"slice_36/loop_mode": 0, +"slice_36/name": "", +"slice_36/save_to_file/enabled": false, +"slice_36/save_to_file/keep_custom_tracks": false, +"slice_36/save_to_file/path": "", +"slice_36/start_frame": 0, +"slice_37/end_frame": 0, +"slice_37/loop_mode": 0, +"slice_37/name": "", +"slice_37/save_to_file/enabled": false, +"slice_37/save_to_file/keep_custom_tracks": false, +"slice_37/save_to_file/path": "", +"slice_37/start_frame": 0, +"slice_38/end_frame": 0, +"slice_38/loop_mode": 0, +"slice_38/name": "", +"slice_38/save_to_file/enabled": false, +"slice_38/save_to_file/keep_custom_tracks": false, +"slice_38/save_to_file/path": "", +"slice_38/start_frame": 0, +"slice_39/end_frame": 0, +"slice_39/loop_mode": 0, +"slice_39/name": "", +"slice_39/save_to_file/enabled": false, +"slice_39/save_to_file/keep_custom_tracks": false, +"slice_39/save_to_file/path": "", +"slice_39/start_frame": 0, +"slice_4/end_frame": 0, +"slice_4/loop_mode": 0, +"slice_4/name": "", +"slice_4/save_to_file/enabled": false, +"slice_4/save_to_file/keep_custom_tracks": false, +"slice_4/save_to_file/path": "", +"slice_4/start_frame": 0, +"slice_40/end_frame": 0, +"slice_40/loop_mode": 0, +"slice_40/name": "", +"slice_40/save_to_file/enabled": false, +"slice_40/save_to_file/keep_custom_tracks": false, +"slice_40/save_to_file/path": "", +"slice_40/start_frame": 0, +"slice_41/end_frame": 0, +"slice_41/loop_mode": 0, +"slice_41/name": "", +"slice_41/save_to_file/enabled": false, +"slice_41/save_to_file/keep_custom_tracks": false, +"slice_41/save_to_file/path": "", +"slice_41/start_frame": 0, +"slice_42/end_frame": 0, +"slice_42/loop_mode": 0, +"slice_42/name": "", +"slice_42/save_to_file/enabled": false, +"slice_42/save_to_file/keep_custom_tracks": false, +"slice_42/save_to_file/path": "", +"slice_42/start_frame": 0, +"slice_43/end_frame": 0, +"slice_43/loop_mode": 0, +"slice_43/name": "", +"slice_43/save_to_file/enabled": false, +"slice_43/save_to_file/keep_custom_tracks": false, +"slice_43/save_to_file/path": "", +"slice_43/start_frame": 0, +"slice_44/end_frame": 0, +"slice_44/loop_mode": 0, +"slice_44/name": "", +"slice_44/save_to_file/enabled": false, +"slice_44/save_to_file/keep_custom_tracks": false, +"slice_44/save_to_file/path": "", +"slice_44/start_frame": 0, +"slice_45/end_frame": 0, +"slice_45/loop_mode": 0, +"slice_45/name": "", +"slice_45/save_to_file/enabled": false, +"slice_45/save_to_file/keep_custom_tracks": false, +"slice_45/save_to_file/path": "", +"slice_45/start_frame": 0, +"slice_46/end_frame": 0, +"slice_46/loop_mode": 0, +"slice_46/name": "", +"slice_46/save_to_file/enabled": false, +"slice_46/save_to_file/keep_custom_tracks": false, +"slice_46/save_to_file/path": "", +"slice_46/start_frame": 0, +"slice_47/end_frame": 0, +"slice_47/loop_mode": 0, +"slice_47/name": "", +"slice_47/save_to_file/enabled": false, +"slice_47/save_to_file/keep_custom_tracks": false, +"slice_47/save_to_file/path": "", +"slice_47/start_frame": 0, +"slice_48/end_frame": 0, +"slice_48/loop_mode": 0, +"slice_48/name": "", +"slice_48/save_to_file/enabled": false, +"slice_48/save_to_file/keep_custom_tracks": false, +"slice_48/save_to_file/path": "", +"slice_48/start_frame": 0, +"slice_49/end_frame": 0, +"slice_49/loop_mode": 0, +"slice_49/name": "", +"slice_49/save_to_file/enabled": false, +"slice_49/save_to_file/keep_custom_tracks": false, +"slice_49/save_to_file/path": "", +"slice_49/start_frame": 0, +"slice_5/end_frame": 0, +"slice_5/loop_mode": 0, +"slice_5/name": "", +"slice_5/save_to_file/enabled": false, +"slice_5/save_to_file/keep_custom_tracks": false, +"slice_5/save_to_file/path": "", +"slice_5/start_frame": 0, +"slice_50/end_frame": 0, +"slice_50/loop_mode": 0, +"slice_50/name": "", +"slice_50/save_to_file/enabled": false, +"slice_50/save_to_file/keep_custom_tracks": false, +"slice_50/save_to_file/path": "", +"slice_50/start_frame": 0, +"slice_51/end_frame": 0, +"slice_51/loop_mode": 0, +"slice_51/name": "", +"slice_51/save_to_file/enabled": false, +"slice_51/save_to_file/keep_custom_tracks": false, +"slice_51/save_to_file/path": "", +"slice_51/start_frame": 0, +"slice_52/end_frame": 0, +"slice_52/loop_mode": 0, +"slice_52/name": "", +"slice_52/save_to_file/enabled": false, +"slice_52/save_to_file/keep_custom_tracks": false, +"slice_52/save_to_file/path": "", +"slice_52/start_frame": 0, +"slice_53/end_frame": 0, +"slice_53/loop_mode": 0, +"slice_53/name": "", +"slice_53/save_to_file/enabled": false, +"slice_53/save_to_file/keep_custom_tracks": false, +"slice_53/save_to_file/path": "", +"slice_53/start_frame": 0, +"slice_54/end_frame": 0, +"slice_54/loop_mode": 0, +"slice_54/name": "", +"slice_54/save_to_file/enabled": false, +"slice_54/save_to_file/keep_custom_tracks": false, +"slice_54/save_to_file/path": "", +"slice_54/start_frame": 0, +"slice_55/end_frame": 0, +"slice_55/loop_mode": 0, +"slice_55/name": "", +"slice_55/save_to_file/enabled": false, +"slice_55/save_to_file/keep_custom_tracks": false, +"slice_55/save_to_file/path": "", +"slice_55/start_frame": 0, +"slice_56/end_frame": 0, +"slice_56/loop_mode": 0, +"slice_56/name": "", +"slice_56/save_to_file/enabled": false, +"slice_56/save_to_file/keep_custom_tracks": false, +"slice_56/save_to_file/path": "", +"slice_56/start_frame": 0, +"slice_57/end_frame": 0, +"slice_57/loop_mode": 0, +"slice_57/name": "", +"slice_57/save_to_file/enabled": false, +"slice_57/save_to_file/keep_custom_tracks": false, +"slice_57/save_to_file/path": "", +"slice_57/start_frame": 0, +"slice_58/end_frame": 0, +"slice_58/loop_mode": 0, +"slice_58/name": "", +"slice_58/save_to_file/enabled": false, +"slice_58/save_to_file/keep_custom_tracks": false, +"slice_58/save_to_file/path": "", +"slice_58/start_frame": 0, +"slice_59/end_frame": 0, +"slice_59/loop_mode": 0, +"slice_59/name": "", +"slice_59/save_to_file/enabled": false, +"slice_59/save_to_file/keep_custom_tracks": false, +"slice_59/save_to_file/path": "", +"slice_59/start_frame": 0, +"slice_6/end_frame": 0, +"slice_6/loop_mode": 0, +"slice_6/name": "", +"slice_6/save_to_file/enabled": false, +"slice_6/save_to_file/keep_custom_tracks": false, +"slice_6/save_to_file/path": "", +"slice_6/start_frame": 0, +"slice_60/end_frame": 0, +"slice_60/loop_mode": 0, +"slice_60/name": "", +"slice_60/save_to_file/enabled": false, +"slice_60/save_to_file/keep_custom_tracks": false, +"slice_60/save_to_file/path": "", +"slice_60/start_frame": 0, +"slice_61/end_frame": 0, +"slice_61/loop_mode": 0, +"slice_61/name": "", +"slice_61/save_to_file/enabled": false, +"slice_61/save_to_file/keep_custom_tracks": false, +"slice_61/save_to_file/path": "", +"slice_61/start_frame": 0, +"slice_62/end_frame": 0, +"slice_62/loop_mode": 0, +"slice_62/name": "", +"slice_62/save_to_file/enabled": false, +"slice_62/save_to_file/keep_custom_tracks": false, +"slice_62/save_to_file/path": "", +"slice_62/start_frame": 0, +"slice_63/end_frame": 0, +"slice_63/loop_mode": 0, +"slice_63/name": "", +"slice_63/save_to_file/enabled": false, +"slice_63/save_to_file/keep_custom_tracks": false, +"slice_63/save_to_file/path": "", +"slice_63/start_frame": 0, +"slice_64/end_frame": 0, +"slice_64/loop_mode": 0, +"slice_64/name": "", +"slice_64/save_to_file/enabled": false, +"slice_64/save_to_file/keep_custom_tracks": false, +"slice_64/save_to_file/path": "", +"slice_64/start_frame": 0, +"slice_65/end_frame": 0, +"slice_65/loop_mode": 0, +"slice_65/name": "", +"slice_65/save_to_file/enabled": false, +"slice_65/save_to_file/keep_custom_tracks": false, +"slice_65/save_to_file/path": "", +"slice_65/start_frame": 0, +"slice_66/end_frame": 0, +"slice_66/loop_mode": 0, +"slice_66/name": "", +"slice_66/save_to_file/enabled": false, +"slice_66/save_to_file/keep_custom_tracks": false, +"slice_66/save_to_file/path": "", +"slice_66/start_frame": 0, +"slice_67/end_frame": 0, +"slice_67/loop_mode": 0, +"slice_67/name": "", +"slice_67/save_to_file/enabled": false, +"slice_67/save_to_file/keep_custom_tracks": false, +"slice_67/save_to_file/path": "", +"slice_67/start_frame": 0, +"slice_68/end_frame": 0, +"slice_68/loop_mode": 0, +"slice_68/name": "", +"slice_68/save_to_file/enabled": false, +"slice_68/save_to_file/keep_custom_tracks": false, +"slice_68/save_to_file/path": "", +"slice_68/start_frame": 0, +"slice_69/end_frame": 0, +"slice_69/loop_mode": 0, +"slice_69/name": "", +"slice_69/save_to_file/enabled": false, +"slice_69/save_to_file/keep_custom_tracks": false, +"slice_69/save_to_file/path": "", +"slice_69/start_frame": 0, +"slice_7/end_frame": 0, +"slice_7/loop_mode": 0, +"slice_7/name": "", +"slice_7/save_to_file/enabled": false, +"slice_7/save_to_file/keep_custom_tracks": false, +"slice_7/save_to_file/path": "", +"slice_7/start_frame": 0, +"slice_70/end_frame": 0, +"slice_70/loop_mode": 0, +"slice_70/name": "", +"slice_70/save_to_file/enabled": false, +"slice_70/save_to_file/keep_custom_tracks": false, +"slice_70/save_to_file/path": "", +"slice_70/start_frame": 0, +"slice_71/end_frame": 0, +"slice_71/loop_mode": 0, +"slice_71/name": "", +"slice_71/save_to_file/enabled": false, +"slice_71/save_to_file/keep_custom_tracks": false, +"slice_71/save_to_file/path": "", +"slice_71/start_frame": 0, +"slice_72/end_frame": 0, +"slice_72/loop_mode": 0, +"slice_72/name": "", +"slice_72/save_to_file/enabled": false, +"slice_72/save_to_file/keep_custom_tracks": false, +"slice_72/save_to_file/path": "", +"slice_72/start_frame": 0, +"slice_73/end_frame": 0, +"slice_73/loop_mode": 0, +"slice_73/name": "", +"slice_73/save_to_file/enabled": false, +"slice_73/save_to_file/keep_custom_tracks": false, +"slice_73/save_to_file/path": "", +"slice_73/start_frame": 0, +"slice_74/end_frame": 0, +"slice_74/loop_mode": 0, +"slice_74/name": "", +"slice_74/save_to_file/enabled": false, +"slice_74/save_to_file/keep_custom_tracks": false, +"slice_74/save_to_file/path": "", +"slice_74/start_frame": 0, +"slice_75/end_frame": 0, +"slice_75/loop_mode": 0, +"slice_75/name": "", +"slice_75/save_to_file/enabled": false, +"slice_75/save_to_file/keep_custom_tracks": false, +"slice_75/save_to_file/path": "", +"slice_75/start_frame": 0, +"slice_76/end_frame": 0, +"slice_76/loop_mode": 0, +"slice_76/name": "", +"slice_76/save_to_file/enabled": false, +"slice_76/save_to_file/keep_custom_tracks": false, +"slice_76/save_to_file/path": "", +"slice_76/start_frame": 0, +"slice_77/end_frame": 0, +"slice_77/loop_mode": 0, +"slice_77/name": "", +"slice_77/save_to_file/enabled": false, +"slice_77/save_to_file/keep_custom_tracks": false, +"slice_77/save_to_file/path": "", +"slice_77/start_frame": 0, +"slice_78/end_frame": 0, +"slice_78/loop_mode": 0, +"slice_78/name": "", +"slice_78/save_to_file/enabled": false, +"slice_78/save_to_file/keep_custom_tracks": false, +"slice_78/save_to_file/path": "", +"slice_78/start_frame": 0, +"slice_79/end_frame": 0, +"slice_79/loop_mode": 0, +"slice_79/name": "", +"slice_79/save_to_file/enabled": false, +"slice_79/save_to_file/keep_custom_tracks": false, +"slice_79/save_to_file/path": "", +"slice_79/start_frame": 0, +"slice_8/end_frame": 0, +"slice_8/loop_mode": 0, +"slice_8/name": "", +"slice_8/save_to_file/enabled": false, +"slice_8/save_to_file/keep_custom_tracks": false, +"slice_8/save_to_file/path": "", +"slice_8/start_frame": 0, +"slice_80/end_frame": 0, +"slice_80/loop_mode": 0, +"slice_80/name": "", +"slice_80/save_to_file/enabled": false, +"slice_80/save_to_file/keep_custom_tracks": false, +"slice_80/save_to_file/path": "", +"slice_80/start_frame": 0, +"slice_81/end_frame": 0, +"slice_81/loop_mode": 0, +"slice_81/name": "", +"slice_81/save_to_file/enabled": false, +"slice_81/save_to_file/keep_custom_tracks": false, +"slice_81/save_to_file/path": "", +"slice_81/start_frame": 0, +"slice_82/end_frame": 0, +"slice_82/loop_mode": 0, +"slice_82/name": "", +"slice_82/save_to_file/enabled": false, +"slice_82/save_to_file/keep_custom_tracks": false, +"slice_82/save_to_file/path": "", +"slice_82/start_frame": 0, +"slice_83/end_frame": 0, +"slice_83/loop_mode": 0, +"slice_83/name": "", +"slice_83/save_to_file/enabled": false, +"slice_83/save_to_file/keep_custom_tracks": false, +"slice_83/save_to_file/path": "", +"slice_83/start_frame": 0, +"slice_84/end_frame": 0, +"slice_84/loop_mode": 0, +"slice_84/name": "", +"slice_84/save_to_file/enabled": false, +"slice_84/save_to_file/keep_custom_tracks": false, +"slice_84/save_to_file/path": "", +"slice_84/start_frame": 0, +"slice_85/end_frame": 0, +"slice_85/loop_mode": 0, +"slice_85/name": "", +"slice_85/save_to_file/enabled": false, +"slice_85/save_to_file/keep_custom_tracks": false, +"slice_85/save_to_file/path": "", +"slice_85/start_frame": 0, +"slice_86/end_frame": 0, +"slice_86/loop_mode": 0, +"slice_86/name": "", +"slice_86/save_to_file/enabled": false, +"slice_86/save_to_file/keep_custom_tracks": false, +"slice_86/save_to_file/path": "", +"slice_86/start_frame": 0, +"slice_87/end_frame": 0, +"slice_87/loop_mode": 0, +"slice_87/name": "", +"slice_87/save_to_file/enabled": false, +"slice_87/save_to_file/keep_custom_tracks": false, +"slice_87/save_to_file/path": "", +"slice_87/start_frame": 0, +"slice_88/end_frame": 0, +"slice_88/loop_mode": 0, +"slice_88/name": "", +"slice_88/save_to_file/enabled": false, +"slice_88/save_to_file/keep_custom_tracks": false, +"slice_88/save_to_file/path": "", +"slice_88/start_frame": 0, +"slice_89/end_frame": 0, +"slice_89/loop_mode": 0, +"slice_89/name": "", +"slice_89/save_to_file/enabled": false, +"slice_89/save_to_file/keep_custom_tracks": false, +"slice_89/save_to_file/path": "", +"slice_89/start_frame": 0, +"slice_9/end_frame": 0, +"slice_9/loop_mode": 0, +"slice_9/name": "", +"slice_9/save_to_file/enabled": false, +"slice_9/save_to_file/keep_custom_tracks": false, +"slice_9/save_to_file/path": "", +"slice_9/start_frame": 0, +"slice_90/end_frame": 0, +"slice_90/loop_mode": 0, +"slice_90/name": "", +"slice_90/save_to_file/enabled": false, +"slice_90/save_to_file/keep_custom_tracks": false, +"slice_90/save_to_file/path": "", +"slice_90/start_frame": 0, +"slice_91/end_frame": 0, +"slice_91/loop_mode": 0, +"slice_91/name": "", +"slice_91/save_to_file/enabled": false, +"slice_91/save_to_file/keep_custom_tracks": false, +"slice_91/save_to_file/path": "", +"slice_91/start_frame": 0, +"slice_92/end_frame": 0, +"slice_92/loop_mode": 0, +"slice_92/name": "", +"slice_92/save_to_file/enabled": false, +"slice_92/save_to_file/keep_custom_tracks": false, +"slice_92/save_to_file/path": "", +"slice_92/start_frame": 0, +"slice_93/end_frame": 0, +"slice_93/loop_mode": 0, +"slice_93/name": "", +"slice_93/save_to_file/enabled": false, +"slice_93/save_to_file/keep_custom_tracks": false, +"slice_93/save_to_file/path": "", +"slice_93/start_frame": 0, +"slice_94/end_frame": 0, +"slice_94/loop_mode": 0, +"slice_94/name": "", +"slice_94/save_to_file/enabled": false, +"slice_94/save_to_file/keep_custom_tracks": false, +"slice_94/save_to_file/path": "", +"slice_94/start_frame": 0, +"slice_95/end_frame": 0, +"slice_95/loop_mode": 0, +"slice_95/name": "", +"slice_95/save_to_file/enabled": false, +"slice_95/save_to_file/keep_custom_tracks": false, +"slice_95/save_to_file/path": "", +"slice_95/start_frame": 0, +"slice_96/end_frame": 0, +"slice_96/loop_mode": 0, +"slice_96/name": "", +"slice_96/save_to_file/enabled": false, +"slice_96/save_to_file/keep_custom_tracks": false, +"slice_96/save_to_file/path": "", +"slice_96/start_frame": 0, +"slice_97/end_frame": 0, +"slice_97/loop_mode": 0, +"slice_97/name": "", +"slice_97/save_to_file/enabled": false, +"slice_97/save_to_file/keep_custom_tracks": false, +"slice_97/save_to_file/path": "", +"slice_97/start_frame": 0, +"slice_98/end_frame": 0, +"slice_98/loop_mode": 0, +"slice_98/name": "", +"slice_98/save_to_file/enabled": false, +"slice_98/save_to_file/keep_custom_tracks": false, +"slice_98/save_to_file/path": "", +"slice_98/start_frame": 0, +"slice_99/end_frame": 0, +"slice_99/loop_mode": 0, +"slice_99/name": "", +"slice_99/save_to_file/enabled": false, +"slice_99/save_to_file/keep_custom_tracks": false, +"slice_99/save_to_file/path": "", +"slice_99/start_frame": 0, +"slices/amount": 0 +} +}, +"materials": { +"Material.001": { +"use_external/enabled": true, +"use_external/path": "res://content/enemies/enemy_material.tres" +} +} +} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/content/enemies/enemy.tscn b/content/enemies/enemy.tscn new file mode 100644 index 0000000..f6876cc --- /dev/null +++ b/content/enemies/enemy.tscn @@ -0,0 +1,120 @@ +[gd_scene load_steps=24 format=3 uid="uid://b1l8fvlceolf8"] + +[ext_resource type="Script" path="res://scripts/enemies/enemy.gd" id="1_n8jwt"] +[ext_resource type="PackedScene" uid="uid://o3oir3w6cs1y" path="res://content/enemies/enemies.fbx" id="1_nxu6l"] +[ext_resource type="Texture2D" uid="uid://csn8uoefcbua6" path="res://content/enemies/sprites/idle sprite.png" id="2_r5jpp"] +[ext_resource type="Animation" uid="uid://cguc5g4xb3ukw" path="res://content/enemies/animations/Vert_Fire.res" id="3_c2uq0"] +[ext_resource type="BehaviorTree" uid="uid://db7m2p0at5kmq" path="res://ai/enemy.tres" id="3_laok7"] +[ext_resource type="Animation" uid="uid://c4ko34bx2fw2a" path="res://content/enemies/animations/Vert_Idle.res" id="4_ldm0s"] +[ext_resource type="Script" path="res://scripts/enemies/enemy_ai.gd" id="4_uu6te"] +[ext_resource type="Texture2D" uid="uid://buebtm6i0whgb" path="res://content/enemies/sprites/fire sprite.png" id="5_1c5tu"] +[ext_resource type="Animation" uid="uid://bkg0my1x3pao4" path="res://content/enemies/animations/Vert_Move.res" id="5_saiyq"] +[ext_resource type="PackedScene" uid="uid://bnwuklgcmgyw8" path="res://content/muzzleflash/muzzleflash.tscn" id="10_dtmwf"] +[ext_resource type="Script" path="res://demo/agents/scripts/health.gd" id="11_o71in"] + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_jm6ft"] +_data = { +"Vert_Fire": ExtResource("3_c2uq0"), +"Vert_Idle": ExtResource("4_ldm0s"), +"Vert_Move": ExtResource("5_saiyq") +} + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_ri6g6"] +animation = &"Vert_Fire" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_otyax"] +animation = &"Vert_Idle" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_7uoxm"] +animation = &"Vert_Move" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_qm74y"] +animation = &"Vert_Move" +play_mode = 1 + +[sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_1qala"] +blend_point_0/node = SubResource("AnimationNodeAnimation_otyax") +blend_point_0/pos = 0.0 +blend_point_1/node = SubResource("AnimationNodeAnimation_7uoxm") +blend_point_1/pos = 1.0 +blend_point_2/node = SubResource("AnimationNodeAnimation_qm74y") +blend_point_2/pos = -1.0 + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_b6owp"] +advance_mode = 2 + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_flqbt"] +xfade_time = 0.1 + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_icsoj"] +xfade_time = 0.1 +switch_mode = 2 +advance_mode = 2 + +[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_rdhva"] +states/Fire/node = SubResource("AnimationNodeAnimation_ri6g6") +states/Fire/position = Vector2(405, 185) +states/Movement/node = SubResource("AnimationNodeBlendSpace1D_1qala") +states/Movement/position = Vector2(405, 100) +transitions = ["Start", "Movement", SubResource("AnimationNodeStateMachineTransition_b6owp"), "Movement", "Fire", SubResource("AnimationNodeStateMachineTransition_flqbt"), "Fire", "Movement", SubResource("AnimationNodeStateMachineTransition_icsoj")] +graph_offset = Vector2(-376, -32) + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_hf7lk"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_ov0pa"] +size = Vector3(1, 2.08771, 0.126) + +[node name="Enemy" type="CharacterBody3D"] +script = ExtResource("1_n8jwt") + +[node name="enemies" parent="." instance=ExtResource("1_nxu6l")] +transform = Transform3D(0.42, 0, 0, 0, 0.42, 0, 0, 0, 0.42, 0, 0, 0) + +[node name="Vert" parent="enemies" index="0"] +transform = Transform3D(98.6026, -0.0322576, 16.6591, 0.0327155, 100, -4.37121e-06, -16.6591, 0.00545441, 98.6026, 0, 0.000652267, 0) + +[node name="Sprite3D" type="Sprite3D" parent="enemies/Vert" index="0"] +transform = Transform3D(0.01, 0, 0, 0, 0.01, 4.37114e-10, 0, -4.37114e-10, 0.01, 0, 0.0260873, 0.000118641) +modulate = Color(1, 0.66, 0.66, 1) +texture = ExtResource("2_r5jpp") + +[node name="Shoot Marker" type="Node3D" parent="enemies/Vert" index="1"] +transform = Transform3D(0.025, 0, 0, 0, 0.025, 0, 0, 0, 0.025, -0.00423838, 0.0391859, 0.000117709) + +[node name="AnimationPlayer" parent="enemies" index="1"] +libraries = { +"": SubResource("AnimationLibrary_jm6ft") +} + +[node name="AnimationTree" type="AnimationTree" parent="enemies/AnimationPlayer" index="0"] +root_node = NodePath("../..") +tree_root = SubResource("AnimationNodeStateMachine_rdhva") +anim_player = NodePath("..") +parameters/Movement/blend_position = 0.00270998 + +[node name="BTPlayer" type="BTPlayer" parent="." node_paths=PackedStringArray("character", "sprite", "agent", "animationTree", "Origin")] +behavior_tree = ExtResource("3_laok7") +blackboard_plan = SubResource("BlackboardPlan_hf7lk") +script = ExtResource("4_uu6te") +character = NodePath("..") +sprite = NodePath("../enemies/Vert/Sprite3D") +idleTexture = ExtResource("2_r5jpp") +aggressiveTexture = ExtResource("5_1c5tu") +agent = NodePath("../NavigationAgent") +animationTree = NodePath("../enemies/AnimationPlayer/AnimationTree") +MuzzleFlash = ExtResource("10_dtmwf") +Origin = NodePath("../enemies/Vert/Shoot Marker") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.02066, -0.00598145) +shape = SubResource("BoxShape3D_ov0pa") + +[node name="NavigationAgent" type="NavigationAgent3D" parent="."] +path_desired_distance = 0.5 +target_desired_distance = 0.5 + +[node name="Health" type="Node" parent="."] +script = ExtResource("11_o71in") +max_health = 1.0 + +[editable path="enemies"] diff --git a/content/enemies/enemy_material.tres b/content/enemies/enemy_material.tres new file mode 100644 index 0000000..168d917 --- /dev/null +++ b/content/enemies/enemy_material.tres @@ -0,0 +1,33 @@ +[gd_resource type="StandardMaterial3D" load_steps=6 format=3 uid="uid://c7gkxl8ldm4o1"] + +[ext_resource type="Texture2D" uid="uid://dnavx8bsrg2cp" path="res://content/rifle/Cardboard001_2K-PNG/Cardboard001_2K-PNG_Color.png" id="1_jli10"] +[ext_resource type="Texture2D" uid="uid://cpmhd8ni4r5lu" path="res://content/rifle/Cardboard001_2K-PNG/Cardboard001_2K-PNG_Roughness.png" id="2_g6sro"] +[ext_resource type="Texture2D" uid="uid://w1qjoj4t60pe" path="res://content/rifle/Cardboard001_2K-PNG/Cardboard001_2K-PNG_Displacement.png" id="3_ufh2e"] +[ext_resource type="Texture2D" uid="uid://dku7f5fijokpn" path="res://content/rifle/Cardboard001_2K-PNG/Cardboard001_2K-PNG_NormalGL.png" id="5_ttwgb"] + +[sub_resource type="CurveTexture" id="CurveTexture_oq5c5"] + +[resource] +diffuse_mode = 3 +specular_mode = 1 +albedo_color = Color(0.669713, 1.09979e-05, 0.0924059, 1) +albedo_texture = ExtResource("1_jli10") +metallic_specular = 0.02 +roughness_texture = ExtResource("2_g6sro") +normal_enabled = true +normal_scale = 1.7 +normal_texture = ExtResource("5_ttwgb") +heightmap_enabled = true +heightmap_scale = 2.658 +heightmap_deep_parallax = true +heightmap_min_layers = 8 +heightmap_max_layers = 32 +heightmap_texture = ExtResource("3_ufh2e") +heightmap_flip_texture = true +backlight_enabled = true +backlight = Color(0.666569, 0.666569, 0.666569, 1) +refraction_scale = -0.25 +detail_mask = ExtResource("2_g6sro") +detail_albedo = SubResource("CurveTexture_oq5c5") +uv1_scale = Vector3(4, 4, 4) +grow_amount = -0.103 diff --git a/content/enemies/sprites/fire sprite.png b/content/enemies/sprites/fire sprite.png new file mode 100644 index 0000000..25f983f Binary files /dev/null and b/content/enemies/sprites/fire sprite.png differ diff --git a/content/enemies/sprites/fire sprite.png.import b/content/enemies/sprites/fire sprite.png.import new file mode 100644 index 0000000..2c106c4 --- /dev/null +++ b/content/enemies/sprites/fire sprite.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://buebtm6i0whgb" +path.s3tc="res://.godot/imported/fire sprite.png-82c64dfdb65271f8a6b6d31d9da241f6.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://content/enemies/sprites/fire sprite.png" +dest_files=["res://.godot/imported/fire sprite.png-82c64dfdb65271f8a6b6d31d9da241f6.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=0 diff --git a/content/enemies/sprites/idle sprite.png b/content/enemies/sprites/idle sprite.png new file mode 100644 index 0000000..d2f339d Binary files /dev/null and b/content/enemies/sprites/idle sprite.png differ diff --git a/content/enemies/sprites/idle sprite.png.import b/content/enemies/sprites/idle sprite.png.import new file mode 100644 index 0000000..2cbaed2 --- /dev/null +++ b/content/enemies/sprites/idle sprite.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://csn8uoefcbua6" +path.s3tc="res://.godot/imported/idle sprite.png-05c74c10a916b3f6a2d57cb04a5a2bd2.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://content/enemies/sprites/idle sprite.png" +dest_files=["res://.godot/imported/idle sprite.png-05c74c10a916b3f6a2d57cb04a5a2bd2.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=0 diff --git a/content/muzzleflash/m_14.png b/content/muzzleflash/m_14.png new file mode 100644 index 0000000..3b8e7b9 Binary files /dev/null and b/content/muzzleflash/m_14.png differ diff --git a/content/muzzleflash/m_14.png.import b/content/muzzleflash/m_14.png.import new file mode 100644 index 0000000..944cea1 --- /dev/null +++ b/content/muzzleflash/m_14.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bsemt7rxclix5" +path.s3tc="res://.godot/imported/m_14.png-c6f6794dd70ddfaac10596bc3403eb13.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://content/muzzleflash/m_14.png" +dest_files=["res://.godot/imported/m_14.png-c6f6794dd70ddfaac10596bc3403eb13.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=0 diff --git a/content/muzzleflash/muzzleflash.fbx b/content/muzzleflash/muzzleflash.fbx new file mode 100644 index 0000000..3168fca Binary files /dev/null and b/content/muzzleflash/muzzleflash.fbx differ diff --git a/content/muzzleflash/muzzleflash.fbx.import b/content/muzzleflash/muzzleflash.fbx.import new file mode 100644 index 0000000..3930c97 --- /dev/null +++ b/content/muzzleflash/muzzleflash.fbx.import @@ -0,0 +1,44 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b70dt80hbe1fn" +path="res://.godot/imported/muzzleflash.fbx-743c1da679ec8c4b45f9dfc547624e43.scn" + +[deps] + +source_file="res://content/muzzleflash/muzzleflash.fbx" +dest_files=["res://.godot/imported/muzzleflash.fbx-743c1da679ec8c4b45f9dfc547624e43.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={ +"materials": { +"@MATERIAL:0": { +"use_external/enabled": true, +"use_external/path": "res://content/muzzleflash/muzzleflash_material.tres" +} +} +} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 diff --git a/content/muzzleflash/muzzleflash.tscn b/content/muzzleflash/muzzleflash.tscn new file mode 100644 index 0000000..8a6e23b --- /dev/null +++ b/content/muzzleflash/muzzleflash.tscn @@ -0,0 +1,100 @@ +[gd_scene load_steps=9 format=4 uid="uid://bnwuklgcmgyw8"] + +[ext_resource type="Script" path="res://scripts/muzzleflash.gd" id="2_3yxq0"] +[ext_resource type="Material" uid="uid://dqp4e2wn3lp1e" path="res://content/muzzleflash/muzzleflash_material.tres" id="2_c664a"] + +[sub_resource type="Animation" id="Animation_44h7b"] +resource_name = "muzzleflash" +length = 0.1 +tracks/0/type = "scale_3d" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Node3D") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = PackedFloat32Array(0, 1, 1.5234, 1.59234, 0.307491, 0.1, 1, 0.584257, 0.815035, 1.26645) + +[sub_resource type="Animation" id="Animation_inf8h"] +length = 0.001 +tracks/0/type = "scale_3d" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Node3D") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = PackedFloat32Array(0, 1, 1.5234, 1.59234, 0.307491) + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_hlj70"] +_data = { +"RESET": SubResource("Animation_inf8h"), +"muzzleflash": SubResource("Animation_44h7b") +} + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nddbk"] + +[sub_resource type="ArrayMesh" id="ArrayMesh_f7cot"] +_surfaces = [{ +"aabb": AABB(-0.00401187, -0.0172638, -0.00109, 0.0479929, 0.0345121, 0.00109), +"format": 34359742465, +"index_count": 420, +"index_data": PackedByteArray("AAABAAIAAAADAAEABAAAAAUABgAEAAUABwAGAAUACAAHAAUACQAIAAoACwAMAAgADQAOAAwADwANAAwACwAPAAwACQALAAgAEAAJAAoAEQASAAkAEwARAAkAEAATAAkAFAAQABUAFAAVABYAEAAKABUACAAXAAoACAAYABcACAAZABgACAAaABkACAAbABoACAAcABsACAAdABwACAAeAB0ACAAfAB4ACAAgAB8ACAAhACAACAAFACEAAAAiAAUAAAAjACIAAAACACMAJAAlACYAJwAoACUAJAAnACUAKQAkACYAKgApACsALAAqACsALQAsACsALgAtACsALwAuACsAMAAvACsAMQAwACsAMgAxACsAMwAyACsANAAzACsANQA0ACsANgA1ACsANwA2ACsAOAA5ADYAOgA4ADYAOwA6ADYANwA7ADYAPAA9ADsANwA8ADsANwA+ADwANwA/AEAANwBBAD8ANwBCAEEANwBDAEIANwArAEMAKQBEACsAKQBFAEQAKQBGAEUAKQBHAEYAKQAmAEcAKAACAAEAAQAlACgAJQABAAMAAwAmACUAJgADAAAAAABHACYARwAAAAQABABGAEcARgAEAAYABgBFAEYARQAGAAcABwBEAEUARAAHAAgACAArAEQAKwAIAAwADABDACsAQwAMAA4ADgBCAEMAQgAOAA0ADQBBAEIAQQANAA8ADwA/AEEAPwAPAAsACwBAAD8AQAALAAkACQA3AEAANwAJABIAEgA+ADcAPgASABEAEQA8AD4APAARABMAEwA9ADwAPQATABAAEAA7AD0AOwAQABQAFAA6ADsAOgAUABYAFgA4ADoAOAAWABUAFQA5ADgAOQAVAAoACgA2ADkANgAKABcAFwA1ADYANQAXABgAGAA0ADUANAAYABkAGQAzADQAMwAZABoAGgAyADMAMgAaABsAGwAxADIAMQAbABwAHAAwADEAMAAcAB0AHQAvADAALwAdAB4AHgAuAC8ALgAeAB8AHwAtAC4ALQAfACAAIAAsAC0ALAAgACEAIQAqACwAKgAhAAUABQApACoAKQAFACIAIgAkACkAJAAiACMAIwAnACQAJwAjAAIAAgAoACcA"), +"lods": [0.00347681, PackedByteArray("BgAAAAUAAAAiAAUAAAACACIACAAGAAUACAAFACAACAAgAB0ACAAdABoACAAaAAoAEAAKABUAEAAJAAoACQAIAAoACQAPAAgADwAOAAgAJAAoACYAKQAkACYAKQAmAEUAKQBFAEQALAApAEQALwAsAEQAMQAvAEQANgAxAEQANwA2AEQANwA4ADYANwA8ADgANwBEAEIANwBCAD8AKAACAAAAAAAmACgAJgAAAAYABgBFACYARQAGAAgACABEAEUARAAIAA4ADgBCAEQAQgAOAA8ADwA/AEIAPwAPAAkACQA3AD8ANwAJABAAEAA8ADcAEAA4ADwAOAAQABUAOAAVAAoACgA2ADgANgAKABoAGgAxADYAMQAaAB0AHQAvADEALwAdACAAIAAsAC8ALAAgAAUABQApACwAKQAFACIAIgAkACkAJAAiAAIAAgAoACQA")], +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 72, +"vertex_data": PackedByteArray("vZIEuwPUqbtV3o66/XWDu6XQcbxV3o66dutAu+JsjbxV3o66dutAu8PYDrxV3o66cbLdulfR9LpV3o66Sle2O8TYDrxV3o66uO7VOeyxMjdV3o669keVunZ15DtV3o66M6CLumlRRzxV3o66V//iOzbnITxV3o66bCU0PbfHhbpV3o66yHrOO7IKOjxV3o66uH3/upbwbTxV3o66FLvAulFMjTxV3o66lBc8u+7dhzxV3o66ihdjO003ezxV3o66iLO7PF03ujtV3o66SolgPB0yDzxV3o66yogaPHGTLjxV3o66LYedPGnf5jtV3o66bzrjPPZ0njtV3o66k+csPfq1oDpV3o66VHwPPa7XajtV3o66jigcPTQiELtV3o66gyT3POPKgLtV3o66mHPEPDQ+z7tV3o66zkKjPPNP27tV3o66rcKRPEPUzLtV3o66FjFqPDob/btV3o663PtFPDNQ/rtV3o661jBHPJVLF7xV3o66TABJPLbLKLxV3o66JbU4PNZLOrxV3o66t54GPATZMbxV3o667OohO3i6YrxV3o66CkiVukh8hrxV3o667OohO3i6YrwAAAAA/XWDu6XQcbwAAAAAdutAu8PYDrwAAAAACkiVukh8hrwAAAAAdutAu+JsjbwAAAAASle2O8TYDrwAAAAAt54GPATZMbwAAAAAM6CLumlRRzwAAAAAJbU4PNZLOrwAAAAATABJPLbLKLwAAAAA1jBHPJVLF7wAAAAA3PtFPDNQ/rsAAAAAFjFqPDob/bsAAAAArcKRPEPUzLsAAAAAzkKjPPNP27sAAAAAmHPEPDQ+z7sAAAAAgyT3POPKgLsAAAAAjigcPTQiELsAAAAAbCU0PbfHhboAAAAAV//iOzbnITwAAAAAVHwPPa7XajsAAAAAk+csPfq1oDoAAAAAbzrjPPZ0njsAAAAAiLO7PF03ujsAAAAASolgPB0yDzwAAAAALYedPGnf5jsAAAAAyogaPHGTLjwAAAAAihdjO003ezwAAAAAyHrOO7IKOjwAAAAAFLvAulFMjTwAAAAAlBc8u+7dhzwAAAAAuH3/upbwbTwAAAAA9keVunZ15DsAAAAAuO7VOeyxMjcAAAAAcbLdulfR9LoAAAAAvZIEuwPUqbsAAAAA") +}] +blend_shape_mode = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_1p3cm"] +resource_name = "Vert_001" +_surfaces = [{ +"aabb": AABB(-0.00401187, -0.0172638, -0.00109, 0.0479929, 0.0345121, 0.00109), +"attribute_data": PackedByteArray("n4JpPWUdGz8Ogo08rBdMP/8oHj3q5lg//ygePekyLT94UYI9OSkKP1iZVT7pMi0/qDfYPcuNAD9g7Jg92ua5PvTvmz2mx4Q+iHpxPnIjnD4d4Hk/EdQFP0arZD6EEY0+34lvPfBVWT40XIs9kJMhPh8wJD24Iy8+QqYqPjDCSD7nHw4/ihbHPr4Pvj5W0ac+vluSPgY6lD78kvY+9iW5PkXNJj/cwM8+XNVwP8qs9D6mGUw/GJDcPnrsWz892ws/ETwzP8a1FD9nlhM/WPQgP4K7/T6V1iI/gOHnPuSTID/rFsQ+3BwoPwR8rT4WTSg/6DyuPg3WLz9CXq8+jUw1PygypT4Nwzo/8+yFPuofOD8KThY+EmJHP2DsmD3CkVQ/Ck4WPhJiRz8Ogo08rBdMP/8oHj3pMi0/YOyYPcKRVD//KB496uZYP1iZVT7pMi0/8+yFPuofOD/075s9pseEPigypT4Nwzo/Ql6vPo1MNT/oPK4+DdYvPwR8rT4WTSg/6xbEPtwcKD+A4ec+5JMgP4K7/T6V1iI/Z5YTP1j0ID8RPDM/xrUUP3rsWz892ws/HeB5PxHUBT+IenE+ciOcPqYZTD8YkNw+XNVwP8qs9D5FzSY/3MDPPucfDj+KFsc+vg++PlbRpz78kvY+9iW5Pr5bkj4GOpQ+QqYqPjDCSD5Gq2Q+hBGNPjRciz2QkyE+HzAkPbgjLz7fiW898FVZPmDsmD3a5rk+qDfYPcuNAD94UYI9OSkKP5+CaT1lHRs//ygePermWD//KB496uZYPw6CjTysF0w/DoKNPKwXTD8Ogo08rBdMPw6CjTysF0w//ygePekyLT//KB496TItP/8oHj3pMi0//ygePekyLT+fgmk9ZR0bP5+CaT1lHRs/n4JpPWUdGz+fgmk9ZR0bP3hRgj05KQo/eFGCPTkpCj94UYI9OSkKP3hRgj05KQo/qDfYPcuNAD+oN9g9y40AP6g32D3LjQA/qDfYPcuNAD9g7Jg92ua5PmDsmD3a5rk+YOyYPdrmuT5g7Jg92ua5PvTvmz2mx4Q+9O+bPabHhD7075s9pseEPvTvmz2mx4Q+34lvPfBVWT7fiW898FVZPt+Jbz3wVVk+34lvPfBVWT4fMCQ9uCMvPh8wJD24Iy8+HzAkPbgjLz4fMCQ9uCMvPjRciz2QkyE+NFyLPZCTIT40XIs9kJMhPjRciz2QkyE+QqYqPjDCSD5Cpio+MMJIPkKmKj4wwkg+QqYqPjDCSD5Gq2Q+hBGNPkarZD6EEY0+RqtkPoQRjT5Gq2Q+hBGNPoh6cT5yI5w+iHpxPnIjnD6IenE+ciOcPoh6cT5yI5w+vluSPgY6lD6+W5I+BjqUPr5bkj4GOpQ+vluSPgY6lD6+D74+VtGnPr4Pvj5W0ac+vg++PlbRpz6+D74+VtGnPvyS9j72Jbk+/JL2PvYluT78kvY+9iW5PvyS9j72Jbk+5x8OP4oWxz7nHw4/ihbHPucfDj+KFsc+5x8OP4oWxz5FzSY/3MDPPkXNJj/cwM8+Rc0mP9zAzz5FzSY/3MDPPqYZTD8YkNw+phlMPxiQ3D6mGUw/GJDcPqYZTD8YkNw+XNVwP8qs9D5c1XA/yqz0PlzVcD/KrPQ+XNVwP8qs9D4d4Hk/EdQFPx3geT8R1AU/HeB5PxHUBT8d4Hk/EdQFP3rsWz892ws/euxbPz3bCz967Fs/PdsLP3rsWz892ws/ETwzP8a1FD8RPDM/xrUUPxE8Mz/GtRQ/ETwzP8a1FD9nlhM/WPQgP2eWEz9Y9CA/Z5YTP1j0ID9nlhM/WPQgP4K7/T6V1iI/grv9PpXWIj+Cu/0+ldYiP4K7/T6V1iI/gOHnPuSTID+A4ec+5JMgP4Dh5z7kkyA/gOHnPuSTID/rFsQ+3BwoP+sWxD7cHCg/6xbEPtwcKD/rFsQ+3BwoPwR8rT4WTSg/BHytPhZNKD8EfK0+Fk0oPwR8rT4WTSg/6DyuPg3WLz/oPK4+DdYvP+g8rj4N1i8/6DyuPg3WLz9CXq8+jUw1P0Jerz6NTDU/Ql6vPo1MNT9CXq8+jUw1PygypT4Nwzo/KDKlPg3DOj8oMqU+DcM6PygypT4Nwzo/8+yFPuofOD/z7IU+6h84P/PshT7qHzg/8+yFPuofOD9YmVU+6TItP1iZVT7pMi0/WJlVPukyLT9YmVU+6TItPwpOFj4SYkc/Ck4WPhJiRz8KThY+EmJHPwpOFj4SYkc/YOyYPcKRVD9g7Jg9wpFUP2DsmD3CkVQ/YOyYPcKRVD//KB496uZYP/8oHj3q5lg/"), +"format": 34359742487, +"index_count": 420, +"index_data": PackedByteArray("AAABAAIAAAADAAEABAAAAAUABgAEAAUABwAGAAUACAAHAAUACQAIAAoACwAMAAgADQAOAAwADwANAAwACwAPAAwACQALAAgAEAAJAAoAEQASAAkAEwARAAkAEAATAAkAFAAQABUAFAAVABYAEAAKABUACAAXAAoACAAYABcACAAZABgACAAaABkACAAbABoACAAcABsACAAdABwACAAeAB0ACAAfAB4ACAAgAB8ACAAhACAACAAFACEAAAAiAAUAAAAjACIAAAACACMAJAAlACYAJwAoACUAJAAnACUAKQAkACYAKgApACsALAAqACsALQAsACsALgAtACsALwAuACsAMAAvACsAMQAwACsAMgAxACsAMwAyACsANAAzACsANQA0ACsANgA1ACsANwA2ACsAOAA5ADYAOgA4ADYAOwA6ADYANwA7ADYAPAA9ADsANwA8ADsANwA+ADwANwA/AEAANwBBAD8ANwBCAEEANwBDAEIANwArAEMAKQBEACsAKQBFAEQAKQBGAEUAKQBHAEYAKQAmAEcASABJAEoASgBLAEgATABNAE4ATgBPAEwAUABRAFIAUgBTAFAAVABVAFYAVgBXAFQAWABZAFoAWgBbAFgAXABdAF4AXgBfAFwAYABhAGIAYgBjAGAAZABlAGYAZgBnAGQAaABpAGoAagBrAGgAbABtAG4AbgBvAGwAcABxAHIAcgBzAHAAdAB1AHYAdgB3AHQAeAB5AHoAegB7AHgAfAB9AH4AfgB/AHwAgACBAIIAggCDAIAAhACFAIYAhgCHAIQAiACJAIoAigCLAIgAjACNAI4AjgCPAIwAkACRAJIAkgCTAJAAlACVAJYAlgCXAJQAmACZAJoAmgCbAJgAnACdAJ4AngCfAJwAoAChAKIAogCjAKAApAClAKYApgCnAKQAqACpAKoAqgCrAKgArACtAK4ArgCvAKwAsACxALIAsgCzALAAtAC1ALYAtgC3ALQAuAC5ALoAugC7ALgAvAC9AL4AvgC/ALwAwADBAMIAwgDDAMAAxADFAMYAxgDHAMQAyADJAMoAygDLAMgAzADNAM4AzgDPAMwA0ADRANIA0gDTANAA1ADVANYA1gDXANQA"), +"lods": [0.00347681, PackedByteArray("BgAAAAUAAAAiAAUAAAACACIACAAGAAUACAAFACAACAAgAB0ACAAdABoACAAaAAoAEAAKABUAEAAJAAoACQAIAAoACQAPAAgADwAOAAgAJAAoACYAKQAkACYAKQAmAEUAKQBFAEQALAApAEQALwAsAEQAMQAvAEQANgAxAEQANwA2AEQANwA4ADYANwA8ADgANwBEAEIANwBCAD8ASABJAFIAUgBPAEgATwBSAFoAWgBbAE8AXABdAGIAYgBfAFwAXwBiAGoAagBrAF8AbABtAHIAcgBzAGwAcwByAHoAegB7AHMAfAB9AIoAigCDAHwAigCTAIMAkwCKAJYAkwCWAJoAmgCbAJMAnACdAKoAqgCvAJwArwCqALYAtgC3AK8AuAC5AMIAwgDDALgAwwDCAMoAygDLAMMAzADNAM4AzgDPAMwAzwDOANYA1gDXAM8A")], +"material": SubResource("StandardMaterial3D_nddbk"), +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 216, +"vertex_data": PackedByteArray("vZIEuwPUqbtV3o66/XWDu6XQcbxV3o66dutAu+JsjbxV3o66dutAu8PYDrxV3o66cbLdulfR9LpV3o66Sle2O8TYDrxV3o66uO7VOeyxMjdV3o669keVunZ15DtV3o66M6CLumlRRzxV3o66V//iOzbnITxV3o66bCU0PbfHhbpV3o66yHrOO7IKOjxV3o66uH3/upbwbTxV3o66FLvAulFMjTxV3o66lBc8u+7dhzxV3o66ihdjO003ezxV3o66iLO7PF03ujtV3o66SolgPB0yDzxV3o66yogaPHGTLjxV3o66LYedPGnf5jtV3o66bzrjPPZ0njtV3o66k+csPfq1oDpV3o66VHwPPa7XajtV3o66jigcPTQiELtV3o66gyT3POPKgLtV3o66mHPEPDQ+z7tV3o66zkKjPPNP27tV3o66rcKRPEPUzLtV3o66FjFqPDob/btV3o663PtFPDNQ/rtV3o661jBHPJVLF7xV3o66TABJPLbLKLxV3o66JbU4PNZLOrxV3o66t54GPATZMbxV3o667OohO3i6YrxV3o66CkiVukh8hrxV3o667OohO3i6YrwAAAAA/XWDu6XQcbwAAAAAdutAu8PYDrwAAAAACkiVukh8hrwAAAAAdutAu+JsjbwAAAAASle2O8TYDrwAAAAAt54GPATZMbwAAAAAM6CLumlRRzwAAAAAJbU4PNZLOrwAAAAATABJPLbLKLwAAAAA1jBHPJVLF7wAAAAA3PtFPDNQ/rsAAAAAFjFqPDob/bsAAAAArcKRPEPUzLsAAAAAzkKjPPNP27sAAAAAmHPEPDQ+z7sAAAAAgyT3POPKgLsAAAAAjigcPTQiELsAAAAAbCU0PbfHhboAAAAAV//iOzbnITwAAAAAVHwPPa7XajsAAAAAk+csPfq1oDoAAAAAbzrjPPZ0njsAAAAAiLO7PF03ujsAAAAASolgPB0yDzwAAAAALYedPGnf5jsAAAAAyogaPHGTLjwAAAAAihdjO003ezwAAAAAyHrOO7IKOjwAAAAAFLvAulFMjTwAAAAAlBc8u+7dhzwAAAAAuH3/upbwbTwAAAAA9keVunZ15DsAAAAAuO7VOeyxMjcAAAAAcbLdulfR9LoAAAAAvZIEuwPUqbsAAAAAdutAu+JsjbwAAAAAdutAu+JsjbxV3o66/XWDu6XQcbxV3o66/XWDu6XQcbwAAAAA/XWDu6XQcbwAAAAA/XWDu6XQcbxV3o66dutAu8PYDrxV3o66dutAu8PYDrwAAAAAdutAu8PYDrwAAAAAdutAu8PYDrxV3o66vZIEuwPUqbtV3o66vZIEuwPUqbsAAAAAvZIEuwPUqbsAAAAAvZIEuwPUqbtV3o66cbLdulfR9LpV3o66cbLdulfR9LoAAAAAcbLdulfR9LoAAAAAcbLdulfR9LpV3o66uO7VOeyxMjdV3o66uO7VOeyxMjcAAAAAuO7VOeyxMjcAAAAAuO7VOeyxMjdV3o669keVunZ15DtV3o669keVunZ15DsAAAAA9keVunZ15DsAAAAA9keVunZ15DtV3o66M6CLumlRRzxV3o66M6CLumlRRzwAAAAAM6CLumlRRzwAAAAAM6CLumlRRzxV3o66uH3/upbwbTxV3o66uH3/upbwbTwAAAAAuH3/upbwbTwAAAAAuH3/upbwbTxV3o66lBc8u+7dhzxV3o66lBc8u+7dhzwAAAAAlBc8u+7dhzwAAAAAlBc8u+7dhzxV3o66FLvAulFMjTxV3o66FLvAulFMjTwAAAAAFLvAulFMjTwAAAAAFLvAulFMjTxV3o66ihdjO003ezxV3o66ihdjO003ezwAAAAAihdjO003ezwAAAAAihdjO003ezxV3o66yHrOO7IKOjxV3o66yHrOO7IKOjwAAAAAyHrOO7IKOjwAAAAAyHrOO7IKOjxV3o66V//iOzbnITxV3o66V//iOzbnITwAAAAAV//iOzbnITwAAAAAV//iOzbnITxV3o66yogaPHGTLjxV3o66yogaPHGTLjwAAAAAyogaPHGTLjwAAAAAyogaPHGTLjxV3o66SolgPB0yDzxV3o66SolgPB0yDzwAAAAASolgPB0yDzwAAAAASolgPB0yDzxV3o66LYedPGnf5jtV3o66LYedPGnf5jsAAAAALYedPGnf5jsAAAAALYedPGnf5jtV3o66iLO7PF03ujtV3o66iLO7PF03ujsAAAAAiLO7PF03ujsAAAAAiLO7PF03ujtV3o66bzrjPPZ0njtV3o66bzrjPPZ0njsAAAAAbzrjPPZ0njsAAAAAbzrjPPZ0njtV3o66VHwPPa7XajtV3o66VHwPPa7XajsAAAAAVHwPPa7XajsAAAAAVHwPPa7XajtV3o66k+csPfq1oDpV3o66k+csPfq1oDoAAAAAk+csPfq1oDoAAAAAk+csPfq1oDpV3o66bCU0PbfHhbpV3o66bCU0PbfHhboAAAAAbCU0PbfHhboAAAAAbCU0PbfHhbpV3o66jigcPTQiELtV3o66jigcPTQiELsAAAAAjigcPTQiELsAAAAAjigcPTQiELtV3o66gyT3POPKgLtV3o66gyT3POPKgLsAAAAAgyT3POPKgLsAAAAAgyT3POPKgLtV3o66mHPEPDQ+z7tV3o66mHPEPDQ+z7sAAAAAmHPEPDQ+z7sAAAAAmHPEPDQ+z7tV3o66zkKjPPNP27tV3o66zkKjPPNP27sAAAAAzkKjPPNP27sAAAAAzkKjPPNP27tV3o66rcKRPEPUzLtV3o66rcKRPEPUzLsAAAAArcKRPEPUzLsAAAAArcKRPEPUzLtV3o66FjFqPDob/btV3o66FjFqPDob/bsAAAAAFjFqPDob/bsAAAAAFjFqPDob/btV3o663PtFPDNQ/rtV3o663PtFPDNQ/rsAAAAA3PtFPDNQ/rsAAAAA3PtFPDNQ/rtV3o661jBHPJVLF7xV3o661jBHPJVLF7wAAAAA1jBHPJVLF7wAAAAA1jBHPJVLF7xV3o66TABJPLbLKLxV3o66TABJPLbLKLwAAAAATABJPLbLKLwAAAAATABJPLbLKLxV3o66JbU4PNZLOrxV3o66JbU4PNZLOrwAAAAAJbU4PNZLOrwAAAAAJbU4PNZLOrxV3o66t54GPATZMbxV3o66t54GPATZMbwAAAAAt54GPATZMbwAAAAAt54GPATZMbxV3o66Sle2O8TYDrxV3o66Sle2O8TYDrwAAAAASle2O8TYDrwAAAAASle2O8TYDrxV3o667OohO3i6YrxV3o667OohO3i6YrwAAAAA7OohO3i6YrwAAAAA7OohO3i6YrxV3o66CkiVukh8hrxV3o66CkiVukh8hrwAAAAACkiVukh8hrwAAAAACkiVukh8hrxV3o66dutAu+JsjbxV3o66dutAu+JsjbwAAAAAAAD//////z8AAP///v//PwAA///+//8/AAD///7//z8AAP//////PwAA///+//8/AAD///7//z8AAP///v//PwAA///+//8/AAD///7//z8AAP///v//PwAA///+//8/AAD///7//z8AAP///v//PwAA///+//8/AAD///7//z8AAP///v//PwAA///+//8/AAD///7//z8AAP///v//PwAA///+//8/AAD///7//z8AAP///v//PwAA//////8/AAD//////z8AAP///v//PwAA///+//8/AAD///7//z8AAP///v//PwAA///+//8/AAD///7//z8AAP///v//PwAA///+//8/AAD///7//z8AAP//////PwAA///+//8//3//f////7//f/9//v//v/9//3////+//3//f////7//f/9//v//v/9//3/+//+//3//f////7//f/9//v//v/9//3/+//+//3//f/7//7//f/9//v//v/9//3/+//+//3//f/7//7//f/9//v//v/9//3/+//+//3//f/7//7//f/9/////v/9//3////+//3//f/7//7//f/9//v//v/9//3/+//+//3//f/7//7//f/9//v//v/9//3/+//+//3//f/7//7//f/9//v//v/9//3/+//+//3//f/7//7//f/9//v//v/9//3/+//+//3//f/7//7//f/9//v//v/9//3////+//3//f/7//7//f/9//v//v/9//3/+//+/RCa7Wf///79EJrtZ////v0Qmu1n///+/RCa7Wf///787EzuT////vzsTO5P///+/OxM7k////787EzuT////v3IacZr///+/chpxmv///79yGnGa////v3IacZr///+/oguii////7+iC6KL////v6ILoov///+/oguii////7+NQ43D////v41DjcP///+/jUONw////7+NQ43D////v0UXuWj///+/RRe5aP///79FF7lo////v0UXuWj///+/ygHJgf///7/KAcmB////v8oByYH///+/ygHJgf///7/oIhZd////v+giFl3///+/6CIWXf///7/oIhZd////v4Enflj///+/gSd+WP///7+BJ35Y////v4Enflj///+/21ba1v///7/bVtrW////v9tW2tb///+/21ba1v///7/Iozbc////v8ijNtz///+/yKM23P///7/Iozbc////v7jKRbX///+/uMpFtf///7+4ykW1////v7jKRbX///+/0tkspv///7/S2Sym////v9LZLKb///+/0tkspv///7/LYcvh////v8thy+H///+/y2HL4f///7/LYcvh////v52nYNj///+/nadg2P///7+dp2DY////v52nYNj///+/CZ704f///78JnvTh////vwme9OH///+/CZ704f///7+Rom3d////v5Gibd3///+/kaJt3f///7+Rom3d////vx2T4ez///+/HZPh7P///78dk+Hs////vx2T4ez///+/wZI87f///7/Bkjzt////v8GSPO3///+/wZI87f///7+gn17g////v6CfXuD///+/oJ9e4P///7+gn17g////v6HHXbj///+/ocdduP///7+hx124////v6HHXbj///+/cZVxFf///79xlXEV////v3GVcRX///+/cZVxFf///7/flt8W////v9+W3xb///+/35bfFv///7/flt8W////v7SjtSP///+/tKO1I////7+0o7Uj////v7SjtSP///+/qoqqCv///7+qiqoK////v6qKqgr///+/qoqqCv///78OavEV////vw5q8RX///+/DmrxFf///78OavEV////v+yl7CX///+/7KXsJf///7/spewl////v+yl7CX///+/GIIZAv///78YghkC////vxiCGQL///+/GIIZAv///7/m+ReG////v+b5F4b///+/5vkXhv///7/m+ReG////v//z/4v///+///P/i////7//8/+L////v//z/4v///+/SMJIQv///79IwkhC////v0jCSEL///+/SMJIQv///7+GbXkS////v4ZteRL///+/hm15Ev///7+GbXkS////v+RGGzn///+/5EYbOf///7/kRhs5////v+RGGzn///+/yM/IT////7/Iz8hP////v8jPyE////+/yM/IT////79UtVU1////v1S1VTX///+/VLVVNf///79UtVU1////v+Ko4yj///+/4qjjKP///7/iqOMo////v+Ko4yj///+/") +}] +blend_shape_mode = 0 +shadow_mesh = SubResource("ArrayMesh_f7cot") + +[node name="muzzleflash" type="Node3D"] +script = ExtResource("2_3yxq0") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_hlj70") +} +autoplay = "muzzleflash" +movie_quit_on_finish = true + +[node name="OmniLight3D" type="OmniLight3D" parent="."] +transform = Transform3D(1, -7.52316e-37, -3.55271e-15, 0, 1, -2.11758e-22, 3.55271e-15, 2.11758e-22, 1, 0, 0, 0) +light_color = Color(1, 0.3, 0, 1) +light_energy = 2.215 + +[node name="Timer" type="Timer" parent="."] +wait_time = 0.1 +one_shot = true +autostart = true + +[node name="Node3D" type="Node3D" parent="."] +transform = Transform3D(1.5234, 0, 0, 0, 1.59234, 0, 0, 0, 0.307491, 0, 0, 0) + +[node name="Vert" type="MeshInstance3D" parent="Node3D"] +transform = Transform3D(-4.37179e-07, 10.0015, 4.37179e-07, 0, -4.37179e-07, 10.0015, 10.0015, 4.37179e-07, 1.91097e-14, 0, 0, 0) +material_override = ExtResource("2_c664a") +mesh = SubResource("ArrayMesh_1p3cm") +skeleton = NodePath("") + +[node name="Vert2" type="MeshInstance3D" parent="Node3D"] +transform = Transform3D(1.91097e-14, 2.84217e-14, -10.0015, -4.37179e-07, 10.0015, 2.84217e-14, 10.0015, 4.37179e-07, 1.91097e-14, 0, 0, 0) +material_override = ExtResource("2_c664a") +mesh = SubResource("ArrayMesh_1p3cm") +skeleton = NodePath("") diff --git a/content/muzzleflash/muzzleflash_material.tres b/content/muzzleflash/muzzleflash_material.tres new file mode 100644 index 0000000..11792c2 --- /dev/null +++ b/content/muzzleflash/muzzleflash_material.tres @@ -0,0 +1,46 @@ +[gd_resource type="StandardMaterial3D" load_steps=8 format=3 uid="uid://dqp4e2wn3lp1e"] + +[ext_resource type="Texture2D" uid="uid://dnavx8bsrg2cp" path="res://content/rifle/Cardboard001_2K-PNG/Cardboard001_2K-PNG_Color.png" id="1_gksjt"] +[ext_resource type="Texture2D" uid="uid://cpmhd8ni4r5lu" path="res://content/rifle/Cardboard001_2K-PNG/Cardboard001_2K-PNG_Roughness.png" id="2_jh5sx"] +[ext_resource type="Texture2D" uid="uid://w1qjoj4t60pe" path="res://content/rifle/Cardboard001_2K-PNG/Cardboard001_2K-PNG_Displacement.png" id="3_eyjbo"] +[ext_resource type="Texture2D" uid="uid://bsemt7rxclix5" path="res://content/muzzleflash/m_14.png" id="4_xci3n"] +[ext_resource type="Texture2D" uid="uid://dku7f5fijokpn" path="res://content/rifle/Cardboard001_2K-PNG/Cardboard001_2K-PNG_NormalGL.png" id="5_kdn7j"] + +[sub_resource type="CurveTexture" id="CurveTexture_oq5c5"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_e1on6"] +render_priority = 1 +transparency = 2 +alpha_scissor_threshold = 0.5 +alpha_antialiasing_mode = 0 +diffuse_mode = 3 +specular_mode = 1 +albedo_texture = ExtResource("4_xci3n") +roughness_texture = ExtResource("2_jh5sx") +normal_enabled = true +normal_texture = ExtResource("5_kdn7j") +heightmap_texture = ExtResource("3_eyjbo") + +[resource] +next_pass = SubResource("StandardMaterial3D_e1on6") +albedo_color = Color(0.56, 0, 0, 1) +albedo_texture = ExtResource("1_gksjt") +metallic_specular = 0.02 +roughness_texture = ExtResource("2_jh5sx") +normal_enabled = true +normal_scale = 1.7 +normal_texture = ExtResource("5_kdn7j") +heightmap_enabled = true +heightmap_scale = 2.658 +heightmap_deep_parallax = true +heightmap_min_layers = 8 +heightmap_max_layers = 32 +heightmap_texture = ExtResource("3_eyjbo") +heightmap_flip_texture = true +backlight_enabled = true +backlight = Color(0.666569, 0.666569, 0.666569, 1) +refraction_scale = -0.25 +detail_mask = ExtResource("2_jh5sx") +detail_albedo = SubResource("CurveTexture_oq5c5") +uv1_scale = Vector3(4, 4, 4) +grow_amount = -0.103 diff --git a/content/rifle/animation/animationfiles/LVA4_Armature_Move_Right.res b/content/rifle/animation/animationfiles/LVA4_Armature_Move_Right.res index 33b7bb7..d00b2cf 100644 Binary files a/content/rifle/animation/animationfiles/LVA4_Armature_Move_Right.res and b/content/rifle/animation/animationfiles/LVA4_Armature_Move_Right.res differ diff --git a/content/rifle/animation/movement.tres b/content/rifle/animation/movement.tres index 960a154..5eb1ba0 100644 --- a/content/rifle/animation/movement.tres +++ b/content/rifle/animation/movement.tres @@ -1,4 +1,4 @@ -[gd_resource type="AnimationNodeBlendSpace2D" load_steps=7 format=3 uid="uid://dh5bnb5xvmv0f"] +[gd_resource type="AnimationNodeBlendSpace2D" load_steps=6 format=3 uid="uid://dh5bnb5xvmv0f"] [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_glk57"] animation = &"LVA4_Armature_Idle" @@ -16,9 +16,6 @@ animation = &"LVA4_Armature_Courched_Move_Right" animation = &"LVA4_Armature_Move_Forward" play_mode = 1 -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_hmil4"] -animation = &"LVA4_Armature_Sprint_Forward" - [resource] blend_point_0/node = SubResource("AnimationNodeAnimation_glk57") blend_point_0/pos = Vector2(0, 0) @@ -30,6 +27,4 @@ blend_point_3/node = SubResource("AnimationNodeAnimation_hwjyc") blend_point_3/pos = Vector2(-1, 0) blend_point_4/node = SubResource("AnimationNodeAnimation_owips") blend_point_4/pos = Vector2(0, -1) -blend_point_5/node = SubResource("AnimationNodeAnimation_hmil4") -blend_point_5/pos = Vector2(0, 2) -max_space = Vector2(1, 2) +max_space = Vector2(1, 3) diff --git a/content/rifle/animations.fbx b/content/rifle/animations.fbx new file mode 100644 index 0000000..0c3b08c Binary files /dev/null and b/content/rifle/animations.fbx differ diff --git a/content/rifle/animations.fbx.import b/content/rifle/animations.fbx.import index 528c5c9..14d395e 100644 --- a/content/rifle/animations.fbx.import +++ b/content/rifle/animations.fbx.import @@ -34,7 +34,7 @@ import_script/path="" _subresources={ "animations": { "LVA4_Armature|Fire_1": { -"save_to_file/enabled": true, +"save_to_file/enabled": false, "save_to_file/keep_custom_tracks": "", "save_to_file/path": "res://content/rifle/animation/Fire1.res", "settings/loop_mode": 0, @@ -1833,7 +1833,7 @@ _subresources={ "slices/amount": 0 }, "LVA4_Armature|Fire_2": { -"save_to_file/enabled": true, +"save_to_file/enabled": false, "save_to_file/keep_custom_tracks": "", "save_to_file/path": "res://content/rifle/animation/Fire2.res", "settings/loop_mode": 0, @@ -3632,7 +3632,7 @@ _subresources={ "slices/amount": 0 }, "LVA4_Armature|Fire_3": { -"save_to_file/enabled": true, +"save_to_file/enabled": false, "save_to_file/keep_custom_tracks": "", "save_to_file/path": "res://content/rifle/animation/Fire3.res", "settings/loop_mode": 0, @@ -5431,7 +5431,7 @@ _subresources={ "slices/amount": 0 }, "LVA4_Armature|Idle": { -"save_to_file/enabled": true, +"save_to_file/enabled": false, "save_to_file/keep_custom_tracks": "", "save_to_file/path": "res://content/rifle/animation/Idle.res", "settings/loop_mode": 0, @@ -7230,7 +7230,7 @@ _subresources={ "slices/amount": 0 }, "LVA4_Armature|Move_Forward": { -"save_to_file/enabled": true, +"save_to_file/enabled": false, "save_to_file/keep_custom_tracks": "", "save_to_file/path": "res://content/rifle/animation/Movement_Forward.res", "settings/loop_mode": 0, @@ -9029,7 +9029,7 @@ _subresources={ "slices/amount": 0 }, "LVA4_Armature|Move_Left": { -"save_to_file/enabled": true, +"save_to_file/enabled": false, "save_to_file/keep_custom_tracks": "", "save_to_file/path": "res://content/rifle/animation/Move_Left.res", "settings/loop_mode": 0, @@ -10830,7 +10830,7 @@ _subresources={ "LVA4_Armature|Move_Right": { "save_to_file/enabled": true, "save_to_file/keep_custom_tracks": "", -"save_to_file/path": "res://content/rifle/animation/Move_Right.res", +"save_to_file/path": "res://content/rifle/animation/animationfiles/LVA4_Armature_Move_Right.res", "settings/loop_mode": 0, "slice_1/end_frame": 0, "slice_1/loop_mode": 0, diff --git a/content/rifle/weapon.tscn b/content/rifle/weapon.tscn index f06093d..4c69fe3 100644 --- a/content/rifle/weapon.tscn +++ b/content/rifle/weapon.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=46 format=4 uid="uid://c2x0xjb2ypfpq"] +[gd_scene load_steps=48 format=4 uid="uid://c2x0xjb2ypfpq"] [ext_resource type="Material" uid="uid://bmawvuomui06g" path="res://content/rifle/rifle_material.tres" id="1_sj5w7"] [ext_resource type="AnimationNodeBlendSpace1D" uid="uid://belbtf6saao12" path="res://content/rifle/animation/fire.tres" id="2_s8w6i"] @@ -371,26 +371,33 @@ blend_point_3/pos = Vector2(-1, 0) blend_point_4/node = SubResource("AnimationNodeAnimation_ljxg2") blend_point_4/pos = Vector2(0, -1) -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_boujg"] -advance_mode = 2 +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_cunv4"] +animation = &"LVA4_Armature_Sprint_Forward" -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_3sv20"] +[sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_esd4g"] +blend_point_0/node = ExtResource("3_b1dmw") +blend_point_0/pos = 0.0 +blend_point_1/node = SubResource("AnimationNodeAnimation_cunv4") +blend_point_1/pos = 1.0 -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_7g41v"] +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_n5r6e"] + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_y1127"] switch_mode = 2 advance_mode = 2 -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_17ytt"] -xfade_time = 0.3 +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_1c7xu"] +advance_mode = 2 -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_xlhkk"] -xfade_time = 0.3 +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_nrl4s"] -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_n5r6e"] -xfade_time = 0.1 +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_d50tw"] -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_y1127"] -xfade_time = 0.1 +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_yxl34"] +xfade_time = 0.01 + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_hwg5x"] +xfade_time = 0.01 switch_mode = 2 advance_mode = 2 @@ -401,10 +408,10 @@ advance_mode = 2 "states/Crouched Movement/position" = Vector2(639, 100) states/Fire/node = ExtResource("2_s8w6i") states/Fire/position = Vector2(394, 203) -states/Movement/node = ExtResource("3_b1dmw") +states/Movement/node = SubResource("AnimationNodeBlendSpace1D_esd4g") states/Movement/position = Vector2(394, 100) -transitions = ["Start", "Movement", SubResource("AnimationNodeStateMachineTransition_boujg"), "Movement", "Fire", SubResource("AnimationNodeStateMachineTransition_3sv20"), "Fire", "Movement", SubResource("AnimationNodeStateMachineTransition_7g41v"), "Movement", "Crouched Movement", SubResource("AnimationNodeStateMachineTransition_17ytt"), "Crouched Movement", "Movement", SubResource("AnimationNodeStateMachineTransition_xlhkk"), "Crouched Movement", "Crouched Fire", SubResource("AnimationNodeStateMachineTransition_n5r6e"), "Crouched Fire", "Crouched Movement", SubResource("AnimationNodeStateMachineTransition_y1127")] -graph_offset = Vector2(-130, 34) +transitions = ["Crouched Movement", "Crouched Fire", SubResource("AnimationNodeStateMachineTransition_n5r6e"), "Crouched Fire", "Crouched Movement", SubResource("AnimationNodeStateMachineTransition_y1127"), "Start", "Movement", SubResource("AnimationNodeStateMachineTransition_1c7xu"), "Movement", "Crouched Movement", SubResource("AnimationNodeStateMachineTransition_nrl4s"), "Crouched Movement", "Movement", SubResource("AnimationNodeStateMachineTransition_d50tw"), "Movement", "Fire", SubResource("AnimationNodeStateMachineTransition_yxl34"), "Fire", "Movement", SubResource("AnimationNodeStateMachineTransition_hwg5x")] +graph_offset = Vector2(-195, -47) [node name="weaponAnim" type="Node3D"] @@ -459,8 +466,8 @@ bones/6/parent = 5 bones/6/rest = Transform3D(0.999755, -0.0152834, 0.0159934, 0.0152834, -0.0454936, -0.998848, 0.0159934, 0.998848, -0.0452489, 0, 4.76836e-11, -7.62939e-10) bones/6/enabled = true bones/6/position = Vector3(0, 4.76836e-11, -7.62939e-10) -bones/6/rotation = Quaternion(0.697307, -0.0240621, 0.0348939, 0.715518) -bones/6/scale = Vector3(1.01594, 0.973981, 1.01634) +bones/6/rotation = Quaternion(0.722928, -4.71839e-09, 0.0110615, 0.690835) +bones/6/scale = Vector3(1, 1, 1) bones/7/name = "pole_line.R_end" bones/7/parent = 6 bones/7/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.00391025, 0) @@ -480,8 +487,8 @@ bones/9/parent = 8 bones/9/rest = Transform3D(0.999755, 0.0152834, -0.0159934, -0.0152834, -0.0454936, -0.998848, -0.0159934, 0.998848, -0.0452489, 0, 4.76836e-11, -7.62939e-10) bones/9/enabled = true bones/9/position = Vector3(0, 4.76836e-11, -7.62939e-10) -bones/9/rotation = Quaternion(0.598726, 0.0962081, -0.103502, 0.78839) -bones/9/scale = Vector3(0.881553, 1.28953, 0.881557) +bones/9/rotation = Quaternion(0.722928, 4.71839e-09, -0.0110615, 0.690835) +bones/9/scale = Vector3(1, 1, 1) bones/10/name = "pole_line.L_end" bones/10/parent = 9 bones/10/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.00391025, 0) @@ -508,21 +515,21 @@ bones/13/parent = 12 bones/13/rest = Transform3D(0.289313, -0.201567, -0.935772, 0.93034, 0.289312, 0.225315, 0.225315, -0.935772, 0.271228, 0, 0.00139584, 0) bones/13/enabled = true bones/13/position = Vector3(0, 0.00139584, 0) -bones/13/rotation = Quaternion(-0.318315, -0.558796, 0.558771, 0.523639) +bones/13/rotation = Quaternion(-0.426841, -0.426841, 0.416113, 0.680046) bones/13/scale = Vector3(1, 1, 1) bones/14/name = "forearm.R" bones/14/parent = 13 bones/14/rest = Transform3D(0.967755, 0.113719, 0.224763, 0.180815, 0.307618, -0.934172, -0.175374, 0.94469, 0.277137, 3.1834e-10, 0.00266141, -1.26107e-11) bones/14/enabled = true bones/14/position = Vector3(3.1834e-10, 0.00266141, -1.26107e-11) -bones/14/rotation = Quaternion(0.846854, 0.123844, -0.0280195, 0.516445) +bones/14/rotation = Quaternion(0.588005, 0.125226, 0.0209983, 0.798829) bones/14/scale = Vector3(1, 1, 1) bones/15/name = "hand.R" bones/15/parent = 14 bones/15/rest = Transform3D(0.998803, -0.0473205, -0.0123773, 0.0478966, 0.997532, 0.0513467, 0.00991698, -0.0518781, 0.998604, -1.36696e-10, 0.00253111, 1.61345e-10) bones/15/enabled = true bones/15/position = Vector3(-1.36696e-10, 0.00253111, 1.61345e-10) -bones/15/rotation = Quaternion(-0.305498, -0.131573, 0.0891728, 0.938833) +bones/15/rotation = Quaternion(-0.0258225, -0.0055771, 0.0238194, 0.999367) bones/15/scale = Vector3(1, 1, 1) bones/16/name = "index_meta.R" bones/16/parent = 15 @@ -536,21 +543,21 @@ bones/17/parent = 16 bones/17/rest = Transform3D(0.917378, -0.395351, -0.0459933, 0.396836, 0.899629, 0.18218, -0.0306483, -0.18538, 0.982189, 4.75825e-10, 0.000649227, 3.51402e-10) bones/17/enabled = true bones/17/position = Vector3(4.75825e-10, 0.000649227, 3.51402e-10) -bones/17/rotation = Quaternion(-0.0979801, -0.0112315, 0.138692, 0.985413) +bones/17/rotation = Quaternion(-0.0942872, -0.00393634, 0.203213, 0.974576) bones/17/scale = Vector3(1, 1, 1) bones/18/name = "index2.R" bones/18/parent = 17 bones/18/rest = Transform3D(0.932415, -0.327099, -0.153652, 0.332346, 0.943114, 0.00906678, 0.141946, -0.0595196, 0.988084, -5.00436e-13, 0.000399634, -1.3235e-10) bones/18/enabled = true bones/18/position = Vector3(-5.00436e-13, 0.000399634, -1.3235e-10) -bones/18/rotation = Quaternion(0.00285997, -0.0771369, -0.0955664, 0.992426) +bones/18/rotation = Quaternion(-0.0174465, -0.0751926, 0.167746, 0.982804) bones/18/scale = Vector3(1, 1, 1) bones/19/name = "index3.R" bones/19/parent = 18 bones/19/rest = Transform3D(0.930111, -0.359594, 0.0747373, 0.358462, 0.933109, 0.0285086, -0.0799896, 0.000274406, 0.996796, 6.75992e-10, 0.000217569, 6.78151e-11) bones/19/enabled = true bones/19/position = Vector3(6.75992e-10, 0.000217569, 6.78151e-11) -bones/19/rotation = Quaternion(-0.014737, 0.0372155, -0.0126211, 0.999119) +bones/19/rotation = Quaternion(-0.00718539, 0.0393769, 0.18274, 0.982346) bones/19/scale = Vector3(1, 1, 1) bones/20/name = "index3.R_end" bones/20/parent = 19 @@ -578,14 +585,14 @@ bones/23/parent = 22 bones/23/rest = Transform3D(0.745321, -0.659727, 0.0962067, 0.665133, 0.745686, -0.0393761, -0.0457625, 0.0933381, 0.994582, 1.45929e-10, 0.000428075, 4.40949e-11) bones/23/enabled = true bones/23/position = Vector3(1.45929e-10, 0.000428075, 4.40949e-11) -bones/23/rotation = Quaternion(0.0470606, 0.0222304, 0.674114, 0.736792) +bones/23/rotation = Quaternion(0.0355426, 0.0380212, 0.354815, 0.933487) bones/23/scale = Vector3(1, 1, 1) bones/24/name = "middle3.R" bones/24/parent = 23 bones/24/rest = Transform3D(0.927281, -0.373308, -0.028122, 0.373945, 0.927184, 0.0222794, 0.0177572, -0.0311754, 0.999356, -7.29711e-10, 0.000267549, 1.92479e-10) bones/24/enabled = true bones/24/position = Vector3(-7.29711e-10, 0.000267549, 1.92479e-10) -bones/24/rotation = Quaternion(-0.0161526, -0.00781051, 0.43526, 0.900126) +bones/24/rotation = Quaternion(-0.0136148, -0.0116853, 0.190323, 0.981557) bones/24/scale = Vector3(1, 1, 1) bones/25/name = "middle3.R_end" bones/25/parent = 24 @@ -613,14 +620,14 @@ bones/28/parent = 27 bones/28/rest = Transform3D(0.875576, -0.421953, 0.235207, 0.445166, 0.89384, -0.0536474, -0.187601, 0.151679, 0.970463, 1.72083e-10, 0.00041303, 3.68731e-11) bones/28/enabled = true bones/28/position = Vector3(1.72083e-10, 0.00041303, 3.68731e-11) -bones/28/rotation = Quaternion(0.102228, 0.0657092, 0.694722, 0.708938) +bones/28/rotation = Quaternion(0.0530868, 0.109316, 0.224192, 0.966938) bones/28/scale = Vector3(1, 1, 1) bones/29/name = "ring3.R" bones/29/parent = 28 bones/29/rest = Transform3D(0.896325, -0.442626, -0.0261395, 0.443333, 0.893629, 0.0698765, -0.00757009, -0.0742205, 0.997213, -1.47222e-10, 0.0002467, -4.93319e-11) bones/29/enabled = true bones/29/position = Vector3(-1.47222e-10, 0.0002467, -4.93319e-11) -bones/29/rotation = Quaternion(-0.0349312, -0.0131626, -0.00239495, 0.9993) +bones/29/rotation = Quaternion(-0.0370227, -0.00477103, 0.227628, 0.973032) bones/29/scale = Vector3(1, 1, 1) bones/30/name = "ring3.R_end" bones/30/parent = 29 @@ -648,7 +655,7 @@ bones/33/parent = 32 bones/33/rest = Transform3D(0.900206, -0.418934, 0.118847, 0.430854, 0.896472, -0.103453, -0.0632026, 0.144335, 0.987509, 3.57407e-10, 0.000294327, -1.2612e-10) bones/33/enabled = true bones/33/position = Vector3(3.57407e-10, 0.000294327, -1.2612e-10) -bones/33/rotation = Quaternion(0.0718133, 0.0329945, 0.409986, 0.908662) +bones/33/rotation = Quaternion(0.063689, 0.0467921, 0.218421, 0.972649) bones/33/scale = Vector3(1, 1, 1) bones/34/name = "pinky3.R" bones/34/parent = 33 @@ -676,14 +683,14 @@ bones/37/parent = 36 bones/37/rest = Transform3D(0.81243, -0.582946, -0.0114595, 0.582738, 0.811175, 0.0491062, -0.0193306, -0.0465732, 0.998728, 3.87094e-10, 0.000535015, -2.64585e-10) bones/37/enabled = true bones/37/position = Vector3(3.87094e-10, 0.000535015, -2.64585e-10) -bones/37/rotation = Quaternion(-0.0719948, 0.0990852, 0.535014, 0.835918) +bones/37/rotation = Quaternion(-0.0251359, 0.00206782, 0.306236, 0.951621) bones/37/scale = Vector3(1, 1, 1) bones/38/name = "thumb2.R" bones/38/parent = 37 bones/38/rest = Transform3D(0.997504, -0.0704799, -0.00439951, 0.0704634, 0.989289, 0.127834, -0.00465736, -0.127825, 0.991786, 3.60323e-12, 0.000226731, -4.33635e-10) bones/38/enabled = true bones/38/position = Vector3(3.60323e-12, 0.000226731, -4.33635e-10) -bones/38/rotation = Quaternion(0.0321199, 0.0582583, 0.363318, 0.929287) +bones/38/rotation = Quaternion(-0.0640866, 6.46356e-05, 0.0353305, 0.997319) bones/38/scale = Vector3(1, 1, 1) bones/39/name = "thumb2.R_end" bones/39/parent = 38 @@ -697,7 +704,7 @@ bones/40/parent = 14 bones/40/rest = Transform3D(0.999974, 0.00428396, 0.00580153, -0.00412317, 0.999615, -0.0274478, -0.00591688, 0.0274232, 0.999606, -8.46418e-06, 0.000215645, -6.06698e-05) bones/40/enabled = true bones/40/position = Vector3(-8.46418e-06, 0.000215645, -6.06698e-05) -bones/40/rotation = Quaternion(0.0136277, -0.0359603, -0.00263419, 0.999257) +bones/40/rotation = Quaternion(0.0137191, 0.0029299, -0.00210199, 0.999899) bones/40/scale = Vector3(1, 1, 1) bones/41/name = "twist1.R_end" bones/41/parent = 40 @@ -711,7 +718,7 @@ bones/42/parent = 14 bones/42/rest = Transform3D(0.999974, 0.00428394, 0.00580145, -0.00412316, 0.999615, -0.0274474, -0.0059168, 0.0274228, 0.999606, -2.00581e-06, 0.00172259, -1.93289e-05) bones/42/enabled = true bones/42/position = Vector3(-2.00581e-06, 0.00172259, -1.93289e-05) -bones/42/rotation = Quaternion(0.0134053, -0.108761, -0.00362036, 0.993971) +bones/42/rotation = Quaternion(0.0137189, 0.00292986, -0.00210199, 0.999899) bones/42/scale = Vector3(1, 1, 1) bones/43/name = "twist3.R_end" bones/43/parent = 42 @@ -725,7 +732,7 @@ bones/44/parent = 14 bones/44/rest = Transform3D(0.999974, 0.00428412, 0.00580153, -0.00412334, 0.999615, -0.0274478, -0.00591688, 0.0274232, 0.999606, -5.23504e-06, 0.000969117, -3.99994e-05) bones/44/enabled = true bones/44/position = Vector3(-5.23504e-06, 0.000969117, -3.99994e-05) -bones/44/rotation = Quaternion(0.0135139, -0.0780607, -0.00320548, 0.996852) +bones/44/rotation = Quaternion(0.0137191, 0.0029299, -0.00210208, 0.999899) bones/44/scale = Vector3(1, 1, 1) bones/45/name = "twist2.R_end" bones/45/parent = 44 @@ -753,7 +760,7 @@ bones/48/parent = 14 bones/48/rest = Transform3D(0.999974, 0.00428436, 0.00580146, -0.00412358, 0.999615, -0.0274474, -0.00591682, 0.0274228, 0.999606, -2.00581e-06, 0.00172259, -1.93289e-05) bones/48/enabled = true bones/48/position = Vector3(-2.00581e-06, 0.00172259, -1.93289e-05) -bones/48/rotation = Quaternion(0.0136276, -0.0359604, -0.00263438, 0.999257) +bones/48/rotation = Quaternion(0.0137189, 0.00292986, -0.0021022, 0.999899) bones/48/scale = Vector3(1, 1, 1) bones/49/name = "armweartwist.R_end" bones/49/parent = 48 @@ -767,7 +774,7 @@ bones/50/parent = 14 bones/50/rest = Transform3D(0.998924, -0.0448829, -0.0116821, 0.0454014, 0.99778, 0.0487276, 0.00946913, -0.0492056, 0.998744, 1.22313e-06, 0.00247606, 1.34137e-06) bones/50/enabled = true bones/50/position = Vector3(1.22313e-06, 0.00247606, 1.34137e-06) -bones/50/rotation = Quaternion(-0.0236133, -0.0440068, 0.0235166, 0.998475) +bones/50/rotation = Quaternion(-0.0244973, -0.00529082, 0.0225839, 0.999431) bones/50/scale = Vector3(1, 1, 1) bones/51/name = "cuff.R_end" bones/51/parent = 50 @@ -781,7 +788,7 @@ bones/52/parent = 14 bones/52/rest = Transform3D(1, -2.01654e-09, 3.1474e-08, 2.01654e-09, 1, 7.23308e-08, -3.1474e-08, -7.23308e-08, 1, -1.54241e-10, -1.23587e-10, 3.80932e-10) bones/52/enabled = true bones/52/position = Vector3(-1.54241e-10, -1.23587e-10, 3.80932e-10) -bones/52/rotation = Quaternion(-9.58074e-09, -0.0973133, 2.21099e-08, 0.995254) +bones/52/rotation = Quaternion(-3.61654e-08, 1.5737e-08, 1.00827e-09, 1) bones/52/scale = Vector3(1, 1, 1) bones/53/name = "blouse.R_end" bones/53/parent = 52 @@ -802,21 +809,21 @@ bones/55/parent = 54 bones/55/rest = Transform3D(0.289313, 0.201567, 0.935772, -0.93034, 0.289312, 0.225315, -0.225315, -0.935772, 0.271228, 0, 0.00139584, 0) bones/55/enabled = true bones/55/position = Vector3(0, 0.00139584, 0) -bones/55/rotation = Quaternion(0.00863805, 0.407284, -0.804323, 0.432561) +bones/55/rotation = Quaternion(-0.426841, 0.426841, -0.416113, 0.680046) bones/55/scale = Vector3(1, 1, 1) bones/56/name = "forearm.L" bones/56/parent = 55 bones/56/rest = Transform3D(0.967755, -0.113719, -0.224763, -0.180815, 0.307618, -0.934172, 0.175374, 0.94469, 0.277137, -3.1834e-10, 0.00266141, -1.26107e-11) bones/56/enabled = true bones/56/position = Vector3(-3.1834e-10, 0.00266141, -1.26107e-11) -bones/56/rotation = Quaternion(0.506861, -0.122564, -0.0331734, 0.852625) +bones/56/rotation = Quaternion(0.588005, -0.125226, -0.0209983, 0.798829) bones/56/scale = Vector3(1, 1, 1) bones/57/name = "hand.L" bones/57/parent = 56 bones/57/rest = Transform3D(0.998803, 0.0473205, 0.0123773, -0.0478966, 0.997532, 0.0513467, -0.00991698, -0.0518781, 0.998604, 1.36696e-10, 0.00253111, 1.61345e-10) bones/57/enabled = true bones/57/position = Vector3(1.36696e-10, 0.00253111, 1.61345e-10) -bones/57/rotation = Quaternion(-0.121411, -0.114958, 0.149965, 0.974451) +bones/57/rotation = Quaternion(-0.0258225, 0.0055771, -0.0238194, 0.999367) bones/57/scale = Vector3(1, 1, 1) bones/58/name = "index_meta.L" bones/58/parent = 57 @@ -829,22 +836,22 @@ bones/59/name = "index1.L" bones/59/parent = 58 bones/59/rest = Transform3D(0.917378, 0.395351, 0.0459933, -0.396836, 0.899629, 0.18218, 0.0306483, -0.18538, 0.982189, -4.75825e-10, 0.000649227, 3.51402e-10) bones/59/enabled = true -bones/59/position = Vector3(5.26129e-06, 0.00062688, 4.61317e-06) -bones/59/rotation = Quaternion(-0.0921515, 0.0504243, 0.195935, 0.974974) +bones/59/position = Vector3(-4.75825e-10, 0.000649227, 3.51402e-10) +bones/59/rotation = Quaternion(-0.0942872, 0.00393634, -0.203213, 0.974576) bones/59/scale = Vector3(1, 1, 1) bones/60/name = "index2.L" bones/60/parent = 59 bones/60/rest = Transform3D(0.932415, 0.327099, 0.153652, -0.332346, 0.943114, 0.00906678, -0.141946, -0.0595196, 0.988084, 5.00436e-13, 0.000399634, -1.3235e-10) bones/60/enabled = true bones/60/position = Vector3(5.00436e-13, 0.000399634, -1.3235e-10) -bones/60/rotation = Quaternion(-0.0504229, 0.0584449, -0.605684, 0.791952) +bones/60/rotation = Quaternion(-0.0174465, 0.0751926, -0.167746, 0.982804) bones/60/scale = Vector3(1, 1, 1) bones/61/name = "index3.L" bones/61/parent = 60 bones/61/rest = Transform3D(0.930111, 0.359594, -0.0747373, -0.358462, 0.933109, 0.0285086, 0.0799896, 0.000274406, 0.996796, -6.75992e-10, 0.000217569, 6.78151e-11) bones/61/enabled = true bones/61/position = Vector3(-6.75992e-10, 0.000217569, 6.78151e-11) -bones/61/rotation = Quaternion(0.0114703, -0.0383484, -0.608711, 0.792382) +bones/61/rotation = Quaternion(-0.00718539, -0.0393769, -0.18274, 0.982346) bones/61/scale = Vector3(1, 1, 1) bones/62/name = "index3.L_end" bones/62/parent = 61 @@ -864,22 +871,22 @@ bones/64/name = "middle1.L" bones/64/parent = 63 bones/64/rest = Transform3D(0.897312, 0.438301, 0.0521827, -0.441346, 0.892693, 0.0911681, -0.00662413, -0.104837, 0.994467, -7.31031e-10, 0.00064664, 2.63282e-10) bones/64/enabled = true -bones/64/position = Vector3(-1.39904e-05, 0.000607789, 8.6803e-07) -bones/64/rotation = Quaternion(-0.0560437, 0.00556503, 0.0915036, 0.994211) +bones/64/position = Vector3(-7.31031e-10, 0.00064664, 2.63282e-10) +bones/64/rotation = Quaternion(-0.0503773, 0.0151146, -0.226087, 0.972686) bones/64/scale = Vector3(1, 1, 1) bones/65/name = "middle2.L" bones/65/parent = 64 bones/65/rest = Transform3D(0.745321, 0.659727, -0.0962067, -0.665133, 0.745686, -0.0393761, 0.0457625, 0.0933381, 0.994582, -1.45929e-10, 0.000428075, 4.40949e-11) bones/65/enabled = true bones/65/position = Vector3(-1.45929e-10, 0.000428075, 4.40949e-11) -bones/65/rotation = Quaternion(0.0483554, -0.0192523, -0.71875, 0.693318) +bones/65/rotation = Quaternion(0.0355426, -0.0380212, -0.354815, 0.933487) bones/65/scale = Vector3(1, 1, 1) bones/66/name = "middle3.L" bones/66/parent = 65 bones/66/rest = Transform3D(0.927281, 0.373308, 0.028122, -0.373945, 0.927184, 0.0222794, -0.0177572, -0.0311754, 0.999356, 7.29711e-10, 0.000267549, 1.92479e-10) bones/66/enabled = true bones/66/position = Vector3(7.29711e-10, 0.000267549, 1.92479e-10) -bones/66/rotation = Quaternion(-0.0173623, 0.00452312, -0.601864, 0.798397) +bones/66/rotation = Quaternion(-0.0136148, 0.0116853, -0.190323, 0.981557) bones/66/scale = Vector3(1, 1, 1) bones/67/name = "middle3.L_end" bones/67/parent = 66 @@ -899,22 +906,22 @@ bones/69/name = "ring1.L" bones/69/parent = 68 bones/69/rest = Transform3D(0.786512, 0.617183, 0.0219931, -0.611213, 0.783015, -0.115352, -0.0884141, 0.0772832, 0.993081, -7.66656e-10, 0.000618599, -1.41676e-10) bones/69/enabled = true -bones/69/position = Vector3(1.30436e-06, 0.000602323, -2.71003e-06) -bones/69/rotation = Quaternion(0.0409456, -0.0210825, 0.0696472, 0.996508) +bones/69/position = Vector3(-7.66656e-10, 0.000618599, -1.41676e-10) +bones/69/rotation = Quaternion(0.0510295, 0.0292471, -0.325405, 0.943744) bones/69/scale = Vector3(1, 1, 1) bones/70/name = "ring2.L" bones/70/parent = 69 bones/70/rest = Transform3D(0.875576, 0.421953, -0.235207, -0.445166, 0.89384, -0.0536474, 0.187601, 0.151679, 0.970463, -1.72083e-10, 0.00041303, 3.68731e-11) bones/70/enabled = true bones/70/position = Vector3(-1.72083e-10, 0.00041303, 3.68731e-11) -bones/70/rotation = Quaternion(0.0377608, -0.115509, -0.0908998, 0.988417) +bones/70/rotation = Quaternion(0.0530868, -0.109316, -0.224192, 0.966938) bones/70/scale = Vector3(1, 1, 1) bones/71/name = "ring3.L" bones/71/parent = 70 bones/71/rest = Transform3D(0.896325, 0.442626, 0.0261395, -0.443333, 0.893629, 0.0698765, 0.00757009, -0.0742205, 0.997213, 1.47222e-10, 0.0002467, -4.93319e-11) bones/71/enabled = true bones/71/position = Vector3(1.47222e-10, 0.0002467, -4.93319e-11) -bones/71/rotation = Quaternion(-0.0354375, -0.0117314, -0.626531, 0.778502) +bones/71/rotation = Quaternion(-0.0370227, 0.00477103, -0.227628, 0.973032) bones/71/scale = Vector3(1, 1, 1) bones/72/name = "ring3.L_end" bones/72/parent = 71 @@ -934,22 +941,22 @@ bones/74/name = "pinky1.L" bones/74/parent = 73 bones/74/rest = Transform3D(0.884728, 0.463521, -0.049038, -0.464454, 0.867839, -0.176462, -0.0392369, 0.178897, 0.983085, -1.94544e-10, 0.000594951, 7.62025e-11) bones/74/enabled = true -bones/74/position = Vector3(-8.65005e-06, 0.000669554, 2.38656e-05) -bones/74/rotation = Quaternion(0.0945839, -0.108202, 0.236727, 0.960889) +bones/74/position = Vector3(-1.94544e-10, 0.000594951, 7.62025e-11) +bones/74/rotation = Quaternion(0.0919294, -0.00253551, -0.240062, 0.966392) bones/74/scale = Vector3(1, 1, 1) bones/75/name = "pinky2.L" bones/75/parent = 74 bones/75/rest = Transform3D(0.900206, 0.418934, -0.118847, -0.430854, 0.896472, -0.103453, 0.0632026, 0.144335, 0.987509, -3.57407e-10, 0.000294327, -1.2612e-10) bones/75/enabled = true bones/75/position = Vector3(-3.57407e-10, 0.000294327, -1.2612e-10) -bones/75/rotation = Quaternion(0.0550313, -0.0567217, -0.0538148, 0.995419) +bones/75/rotation = Quaternion(0.063689, -0.0467921, -0.218421, 0.972649) bones/75/scale = Vector3(1, 1, 1) bones/76/name = "pinky3.L" bones/76/parent = 75 bones/76/rest = Transform3D(0.886375, 0.455138, -0.0847801, -0.450338, 0.890097, 0.0701647, 0.107397, -0.0240126, 0.993926, 7.28884e-10, 0.000161741, 2.67904e-10) bones/76/enabled = true bones/76/position = Vector3(7.28884e-10, 0.000161741, 2.67904e-10) -bones/76/rotation = Quaternion(-0.0284049, -0.0472237, -0.149045, 0.987294) +bones/76/rotation = Quaternion(-0.0242506, -0.0494855, -0.23316, 0.970876) bones/76/scale = Vector3(1, 1, 1) bones/77/name = "pinky3.L_end" bones/77/parent = 76 @@ -962,22 +969,22 @@ bones/78/name = "thumb_meta.L" bones/78/parent = 57 bones/78/rest = Transform3D(0.240535, 0.343136, 0.907965, 0.585873, 0.694485, -0.417665, -0.773884, 0.632415, -0.0339863, 7.71225e-05, 0.000177085, 8.39641e-05) bones/78/enabled = true -bones/78/position = Vector3(-8.8677e-05, 0.000149522, 3.81399e-05) -bones/78/rotation = Quaternion(0.293949, 0.638458, 0.159887, 0.69311) +bones/78/position = Vector3(7.71225e-05, 0.000177085, 8.39641e-05) +bones/78/rotation = Quaternion(0.380801, 0.609905, 0.088026, 0.68939) bones/78/scale = Vector3(1, 1, 1) bones/79/name = "thumb1.L" bones/79/parent = 78 bones/79/rest = Transform3D(0.81243, 0.582946, 0.0114595, -0.582738, 0.811175, 0.0491062, 0.0193306, -0.0465732, 0.998728, -3.87094e-10, 0.000535015, -2.64585e-10) bones/79/enabled = true bones/79/position = Vector3(-3.87094e-10, 0.000535015, -2.64585e-10) -bones/79/rotation = Quaternion(-0.24679, -0.068873, -0.208296, 0.943909) +bones/79/rotation = Quaternion(-0.0251359, -0.00206782, -0.306236, 0.951621) bones/79/scale = Vector3(1, 1, 1) bones/80/name = "thumb2.L" bones/80/parent = 79 bones/80/rest = Transform3D(0.997504, 0.0704799, 0.00439951, -0.0704634, 0.989289, 0.127834, 0.00465736, -0.127825, 0.991786, -3.60323e-12, 0.000226731, -4.33635e-10) bones/80/enabled = true bones/80/position = Vector3(-3.60323e-12, 0.000226731, -4.33635e-10) -bones/80/rotation = Quaternion(0.0181542, -0.258237, 0.0705999, 0.963327) +bones/80/rotation = Quaternion(-0.0640866, -6.46356e-05, -0.0353305, 0.997319) bones/80/scale = Vector3(1, 1, 1) bones/81/name = "thumb2.L_end" bones/81/parent = 80 @@ -991,7 +998,7 @@ bones/82/parent = 56 bones/82/rest = Transform3D(0.999974, -0.00428396, -0.00580153, 0.00412317, 0.999615, -0.0274478, 0.00591688, 0.0274232, 0.999606, 8.46418e-06, 0.000215645, -6.06698e-05) bones/82/enabled = true bones/82/position = Vector3(8.46418e-06, 0.000215645, -6.06698e-05) -bones/82/rotation = Quaternion(0.0137831, -0.030308, 0.00172569, 0.999444) +bones/82/rotation = Quaternion(0.0137191, -0.0029299, 0.00210199, 0.999899) bones/82/scale = Vector3(1, 1, 1) bones/83/name = "twist1.L_end" bones/83/parent = 82 @@ -1005,7 +1012,7 @@ bones/84/parent = 56 bones/84/rest = Transform3D(0.999974, -0.00428394, -0.00580145, 0.00412316, 0.999615, -0.0274474, 0.0059168, 0.0274228, 0.999606, 2.00581e-06, 0.00172259, -1.93289e-05) bones/84/enabled = true bones/84/position = Vector3(2.00581e-06, 0.00172259, -1.93289e-05) -bones/84/rotation = Quaternion(0.013851, -0.0842436, 0.000979795, 0.996349) +bones/84/rotation = Quaternion(0.0137189, -0.00292986, 0.00210199, 0.999899) bones/84/scale = Vector3(1, 1, 1) bones/85/name = "twist3.L_end" bones/85/parent = 84 @@ -1019,7 +1026,7 @@ bones/86/parent = 56 bones/86/rest = Transform3D(0.999974, -0.00428412, -0.00580153, 0.00412334, 0.999615, -0.0274478, 0.00591688, 0.0274232, 0.999606, 5.23504e-06, 0.000969117, -3.99994e-05) bones/86/enabled = true bones/86/position = Vector3(5.23504e-06, 0.000969117, -3.99994e-05) -bones/86/rotation = Quaternion(0.0138271, -0.0613429, 0.00129754, 0.99802) +bones/86/rotation = Quaternion(0.0137191, -0.0029299, 0.00210208, 0.999899) bones/86/scale = Vector3(1, 1, 1) bones/87/name = "twist2.L_end" bones/87/parent = 86 @@ -1047,7 +1054,7 @@ bones/90/parent = 56 bones/90/rest = Transform3D(0.999974, -0.00428436, -0.00580146, 0.00412358, 0.999615, -0.0274474, 0.00591682, 0.0274228, 0.999606, 2.00581e-06, 0.00172259, -1.93289e-05) bones/90/enabled = true bones/90/position = Vector3(2.00581e-06, 0.00172259, -1.93289e-05) -bones/90/rotation = Quaternion(0.0137829, -0.0303079, 0.0017259, 0.999444) +bones/90/rotation = Quaternion(0.0137189, -0.00292986, 0.0021022, 0.999899) bones/90/scale = Vector3(1, 1, 1) bones/91/name = "armweartwist.L_end" bones/91/parent = 90 @@ -1061,7 +1068,7 @@ bones/92/parent = 56 bones/92/rest = Transform3D(0.998924, 0.0448829, 0.0116821, -0.0454014, 0.99778, 0.0487276, -0.00946913, -0.0492056, 0.998744, -1.22313e-06, 0.00247606, 1.34137e-06) bones/92/enabled = true bones/92/position = Vector3(-1.22313e-06, 0.00247606, 1.34137e-06) -bones/92/rotation = Quaternion(-0.0251143, -0.021956, -0.0219075, 0.999203) +bones/92/rotation = Quaternion(-0.0244973, 0.00529082, -0.0225839, 0.999431) bones/92/scale = Vector3(1, 1, 1) bones/93/name = "cuff.L_end" bones/93/parent = 92 @@ -1075,7 +1082,7 @@ bones/94/parent = 56 bones/94/rest = Transform3D(1, 2.01654e-09, -3.1474e-08, -2.01654e-09, 1, 7.23308e-08, 3.1474e-08, -7.23308e-08, 1, 1.54241e-10, -1.23587e-10, 3.80932e-10) bones/94/enabled = true bones/94/position = Vector3(1.54241e-10, -1.23587e-10, 3.80932e-10) -bones/94/rotation = Quaternion(6.39691e-09, 0.0116381, 2.94161e-08, 0.999932) +bones/94/rotation = Quaternion(-3.61654e-08, -1.5737e-08, -1.00827e-09, 1) bones/94/scale = Vector3(1, 1, 1) bones/95/name = "blouse.L_end" bones/95/parent = 94 @@ -1088,8 +1095,8 @@ bones/96/name = "handIK.R" bones/96/parent = 0 bones/96/rest = Transform3D(0.931583, 0.363365, 0.0109084, 0.0109083, -0.0579345, 0.998261, 0.363365, -0.929844, -0.0579345, 0.00338212, 0.00270377, -0.00286581) bones/96/enabled = true -bones/96/position = Vector3(0.00140233, 0.00416331, -0.00257247) -bones/96/rotation = Quaternion(-0.677046, -0.0368381, 0.19077, 0.70983) +bones/96/position = Vector3(0.00338212, 0.00270377, -0.00286581) +bones/96/rotation = Quaternion(-0.715446, -0.130783, -0.130783, 0.673742) bones/96/scale = Vector3(1, 1, 1) bones/97/name = "handIK.R_end" bones/97/parent = 96 @@ -1102,8 +1109,8 @@ bones/98/name = "handIK.L" bones/98/parent = 0 bones/98/rest = Transform3D(0.931583, -0.363365, -0.0109084, -0.0109083, -0.0579345, 0.998261, -0.363365, -0.929844, -0.0579345, -0.00338212, 0.00270377, -0.00286581) bones/98/enabled = true -bones/98/position = Vector3(0.000569891, 0.00432948, -0.00361386) -bones/98/rotation = Quaternion(-0.654644, -0.206583, -0.11025, 0.718755) +bones/98/position = Vector3(-0.00338212, 0.00270377, -0.00286581) +bones/98/rotation = Quaternion(-0.715446, 0.130783, 0.130783, 0.673742) bones/98/scale = Vector3(1, 1, 1) bones/99/name = "handIK.L_end" bones/99/parent = 98 @@ -1146,7 +1153,7 @@ mesh = SubResource("ArrayMesh_lxa88") skin = SubResource("Skin_1i0dj") [node name="BoneAttachment3D" type="BoneAttachment3D" parent="LVA4_Armature/Skeleton3D"] -transform = Transform3D(0.928412, -0.203886, -0.310614, 0.184412, 0.978612, -0.0911602, 0.322557, 0.0273536, 0.946155, 0.00177882, 0.00259276, -0.000976985) +transform = Transform3D(0.931583, 0.363365, 0.0109077, -0.363365, 0.929844, 0.0579351, 0.010909, -0.0579348, 0.998261, 0.00338212, 0.0028658, -0.00250854) bone_name = "hand.R" bone_idx = 15 @@ -1170,4 +1177,5 @@ anim_player = NodePath("..") "parameters/Crouched Fire/blend_position" = 0 "parameters/Crouched Movement/blend_position" = Vector2(-0.531895, -0.033419) parameters/Fire/blend_position = 0.0 -parameters/Movement/blend_position = Vector2(0.0347092, 0.657754) +parameters/Movement/blend_position = 0 +parameters/Movement/0/blend_position = Vector2(0, 0) diff --git a/content/ui/UI.tscn b/content/ui/UI.tscn new file mode 100644 index 0000000..489b729 --- /dev/null +++ b/content/ui/UI.tscn @@ -0,0 +1,23 @@ +[gd_scene format=3 uid="uid://bwnlcxfwxyj7j"] + +[node name="Ui" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="ColorRect" type="ColorRect" parent="."] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -4.5 +offset_top = -4.5 +offset_right = 4.5 +offset_bottom = 4.5 +grow_horizontal = 2 +grow_vertical = 2 diff --git a/demo/LICENSE_ASSETS.md b/demo/LICENSE_ASSETS.md new file mode 100644 index 0000000..f2760dc --- /dev/null +++ b/demo/LICENSE_ASSETS.md @@ -0,0 +1,5 @@ +LimboAI Demo project graphical assets (PNG & SVG files in the "assets/" folder) +Copyright (c) 2024 Aleksandra Snitsaruk + +This work is licensed under the Creative Commons Attribution 4.0 International +license (CC BY 4.0 International): https://creativecommons.org/licenses/by/4.0/ diff --git a/demo/agents/01_agent_melee_simple.tscn b/demo/agents/01_agent_melee_simple.tscn new file mode 100644 index 0000000..228640a --- /dev/null +++ b/demo/agents/01_agent_melee_simple.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=5 format=3 uid="uid://1dnm7tuik8xo"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_l180o"] +[ext_resource type="Texture2D" uid="uid://cw8s50856x8ct" path="res://demo/assets/agent_melee_simple.png" id="2_bvbes"] +[ext_resource type="BehaviorTree" uid="uid://bpdm5jnegi38" path="res://demo/ai/trees/01_agent_melee_simple.tres" id="3_tb7cx"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_s08ac"] + +[node name="AgentMeleeSimple" instance=ExtResource("1_l180o")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_bvbes") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_bvbes") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_bvbes") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_bvbes") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_bvbes") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_bvbes") + +[node name="Health" parent="." index="3"] +max_health = 3.0 + +[node name="BTPlayer" type="BTPlayer" parent="." index="5"] +behavior_tree = ExtResource("3_tb7cx") +blackboard_plan = SubResource("BlackboardPlan_s08ac") diff --git a/demo/agents/02_agent_charger.tscn b/demo/agents/02_agent_charger.tscn new file mode 100644 index 0000000..5a5b780 --- /dev/null +++ b/demo/agents/02_agent_charger.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=5 format=3 uid="uid://g1pnvanyxcpa"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_n83hi"] +[ext_resource type="Texture2D" uid="uid://ce16nc0wy2s8" path="res://demo/assets/agent_charger.png" id="2_y7pic"] +[ext_resource type="BehaviorTree" uid="uid://ylife72ym5et" path="res://demo/ai/trees/02_agent_charger.tres" id="3_nacc3"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_pmyhf"] + +[node name="AgentCharger" instance=ExtResource("1_n83hi")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_y7pic") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_y7pic") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_y7pic") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_y7pic") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_y7pic") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_y7pic") + +[node name="Hitbox" parent="Root" index="1"] +damage = 2.0 + +[node name="Health" parent="." index="3"] +max_health = 8.0 + +[node name="BTPlayer" type="BTPlayer" parent="." index="4"] +behavior_tree = ExtResource("3_nacc3") +blackboard_plan = SubResource("BlackboardPlan_pmyhf") diff --git a/demo/agents/03_agent_imp.tscn b/demo/agents/03_agent_imp.tscn new file mode 100644 index 0000000..e3533c9 --- /dev/null +++ b/demo/agents/03_agent_imp.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=5 format=3 uid="uid://730bthc0ywhd"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_13xup"] +[ext_resource type="Texture2D" uid="uid://h70okn6hmxum" path="res://demo/assets/agent_imp.png" id="2_xd5s8"] +[ext_resource type="BehaviorTree" uid="uid://c2bxoo68ywb27" path="res://demo/ai/trees/03_agent_imp.tres" id="3_furh3"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_aog23"] + +[node name="AgentImp" instance=ExtResource("1_13xup")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_xd5s8") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_xd5s8") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_xd5s8") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_xd5s8") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_xd5s8") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_xd5s8") + +[node name="Health" parent="." index="3"] +max_health = 4.0 + +[node name="BTPlayer" type="BTPlayer" parent="." index="5"] +behavior_tree = ExtResource("3_furh3") +blackboard_plan = SubResource("BlackboardPlan_aog23") diff --git a/demo/agents/04_agent_skirmisher.tscn b/demo/agents/04_agent_skirmisher.tscn new file mode 100644 index 0000000..2a71d9f --- /dev/null +++ b/demo/agents/04_agent_skirmisher.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=5 format=3 uid="uid://co6yeafaljbq0"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_2ir76"] +[ext_resource type="Texture2D" uid="uid://l042ovqqsy3l" path="res://demo/assets/agent_skirmisher.png" id="2_w8tqw"] +[ext_resource type="BehaviorTree" uid="uid://qqmjvbeibatn" path="res://demo/ai/trees/04_agent_skirmisher.tres" id="3_bhfkv"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_vjbry"] + +[node name="AgentSkirmisher" instance=ExtResource("1_2ir76")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_w8tqw") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_w8tqw") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_w8tqw") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_w8tqw") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_w8tqw") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_w8tqw") + +[node name="Health" parent="." index="3"] +max_health = 7.0 + +[node name="BTPlayer" type="BTPlayer" parent="." index="4"] +behavior_tree = ExtResource("3_bhfkv") +blackboard_plan = SubResource("BlackboardPlan_vjbry") diff --git a/demo/agents/05_agent_ranged.tscn b/demo/agents/05_agent_ranged.tscn new file mode 100644 index 0000000..04e4eb8 --- /dev/null +++ b/demo/agents/05_agent_ranged.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=5 format=3 uid="uid://ci3x5esepbu5v"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_oa4xm"] +[ext_resource type="Texture2D" uid="uid://cjts4ennjtepg" path="res://demo/assets/agent_ranged.png" id="2_37lvn"] +[ext_resource type="BehaviorTree" uid="uid://cqluon1y1hnn5" path="res://demo/ai/trees/05_agent_ranged.tres" id="3_f7r5w"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_2kwy7"] + +[node name="AgentRanged" instance=ExtResource("1_oa4xm")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_37lvn") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_37lvn") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_37lvn") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_37lvn") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_37lvn") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_37lvn") + +[node name="Health" parent="." index="3"] +max_health = 6.0 + +[node name="BTPlayer" type="BTPlayer" parent="." index="4"] +behavior_tree = ExtResource("3_f7r5w") +blackboard_plan = SubResource("BlackboardPlan_2kwy7") diff --git a/demo/agents/06_agent_melee_combo.tscn b/demo/agents/06_agent_melee_combo.tscn new file mode 100644 index 0000000..242845b --- /dev/null +++ b/demo/agents/06_agent_melee_combo.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=5 format=3 uid="uid://blxmw2w1h2s0s"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_dny3b"] +[ext_resource type="Texture2D" uid="uid://bo0ibp7tvjbba" path="res://demo/assets/agent_combo.png" id="2_4rqld"] +[ext_resource type="BehaviorTree" uid="uid://cpncl1db8j12f" path="res://demo/ai/trees/06_agent_melee_combo.tres" id="3_l805q"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_67ric"] + +[node name="AgentMeleeCombo" instance=ExtResource("1_dny3b")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_4rqld") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_4rqld") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_4rqld") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_4rqld") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_4rqld") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_4rqld") + +[node name="Health" parent="." index="3"] +max_health = 6.0 + +[node name="BTPlayer" type="BTPlayer" parent="." index="4"] +behavior_tree = ExtResource("3_l805q") +blackboard_plan = SubResource("BlackboardPlan_67ric") diff --git a/demo/agents/07_agent_melee_nuanced.tscn b/demo/agents/07_agent_melee_nuanced.tscn new file mode 100644 index 0000000..57f9bfa --- /dev/null +++ b/demo/agents/07_agent_melee_nuanced.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=5 format=3 uid="uid://2e4ohaqjaawb"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_afx5l"] +[ext_resource type="Texture2D" uid="uid://usu3j55d6dgc" path="res://demo/assets/agent_melee_nuanced.png" id="2_e51r0"] +[ext_resource type="BehaviorTree" uid="uid://c2u6sljqkim0n" path="res://demo/ai/trees/07_agent_melee_nuanced.tres" id="3_b8kcf"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_tnf02"] + +[node name="AgentMeleeNuanced" instance=ExtResource("1_afx5l")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_e51r0") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_e51r0") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_e51r0") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_e51r0") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_e51r0") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_e51r0") + +[node name="Health" parent="." index="3"] +max_health = 6.0 + +[node name="BTPlayer" type="BTPlayer" parent="." index="4"] +behavior_tree = ExtResource("3_b8kcf") +blackboard_plan = SubResource("BlackboardPlan_tnf02") diff --git a/demo/agents/08_agent_demon.tscn b/demo/agents/08_agent_demon.tscn new file mode 100644 index 0000000..5bbd3cb --- /dev/null +++ b/demo/agents/08_agent_demon.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=5 format=3 uid="uid://dbmcufef0cc4b"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_115kp"] +[ext_resource type="Texture2D" uid="uid://d1tx7u8ho0r4v" path="res://demo/assets/agent_demon.png" id="2_cb5f2"] +[ext_resource type="BehaviorTree" uid="uid://cpcnbi81jqge4" path="res://demo/ai/trees/08_agent_demon.tres" id="3_ebd57"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_5sr4g"] + +[node name="AgentDemon" instance=ExtResource("1_115kp")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_cb5f2") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_cb5f2") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_cb5f2") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_cb5f2") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_cb5f2") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_cb5f2") + +[node name="Health" parent="." index="3"] +max_health = 8.0 + +[node name="BTPlayer" type="BTPlayer" parent="." index="5"] +behavior_tree = ExtResource("3_ebd57") +blackboard_plan = SubResource("BlackboardPlan_5sr4g") diff --git a/demo/agents/09_agent_summoner.tscn b/demo/agents/09_agent_summoner.tscn new file mode 100644 index 0000000..c8362d3 --- /dev/null +++ b/demo/agents/09_agent_summoner.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=5 format=3 uid="uid://bycvi2fb0f7ue"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_neifu"] +[ext_resource type="Texture2D" uid="uid://ombnpn2edldt" path="res://demo/assets/agent_summoner.png" id="2_fcti4"] +[ext_resource type="BehaviorTree" uid="uid://cpxk7jnqpwwlc" path="res://demo/ai/trees/09_agent_summoner.tres" id="3_bunpq"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_bqv3d"] + +[node name="AgentSummoner" instance=ExtResource("1_neifu")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_fcti4") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_fcti4") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_fcti4") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_fcti4") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_fcti4") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_fcti4") + +[node name="Health" parent="." index="3"] +max_health = 8.0 + +[node name="BTPlayer" type="BTPlayer" parent="." index="5"] +behavior_tree = ExtResource("3_bunpq") +blackboard_plan = SubResource("BlackboardPlan_bqv3d") diff --git a/demo/agents/agent_base.tscn b/demo/agents/agent_base.tscn new file mode 100644 index 0000000..84650b5 --- /dev/null +++ b/demo/agents/agent_base.tscn @@ -0,0 +1,4528 @@ +[gd_scene load_steps=36 format=3 uid="uid://ooigbfhfy4wa"] + +[ext_resource type="Texture2D" uid="uid://dlo1ine6p5di4" path="res://demo/assets/agent_bobby.png" id="1_1u51b"] +[ext_resource type="Script" path="res://demo/agents/scripts/agent_base.gd" id="1_n8vy2"] +[ext_resource type="Texture2D" uid="uid://dj4oayt5ttvh8" path="res://demo/assets/fx.png" id="2_lv102"] +[ext_resource type="Texture2D" uid="uid://dwhhxj5557qrb" path="res://demo/assets/shadow.png" id="2_vr0jo"] +[ext_resource type="Texture2D" uid="uid://2uyxh7sy8qny" path="res://demo/assets/weapon_ninja_star.png" id="4_1c5xq"] +[ext_resource type="Texture2D" uid="uid://bdusy0qqtw0th" path="res://demo/assets/smoke.png" id="4_mnb6v"] +[ext_resource type="Script" path="res://demo/agents/scripts/health.gd" id="4_qwtrf"] +[ext_resource type="Script" path="res://demo/agents/scripts/hitbox.gd" id="5_taq6b"] +[ext_resource type="Script" path="res://demo/agents/scripts/hurtbox.gd" id="6_jnvxm"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_2k81i"] +size = Vector2(140, 40) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_26abe"] +size = Vector2(88, 40) + +[sub_resource type="Curve" id="Curve_noh01"] +_data = [Vector2(0, 0.010989), 0.0, 0.0, 0, 0, Vector2(0.151111, 1), 1.3559, 1.3559, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="CurveTexture" id="CurveTexture_sb0wp"] +curve = SubResource("Curve_noh01") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_f5i1x"] +lifetime_randomness = 0.5 +particle_flag_disable_z = true +emission_shape = 3 +emission_box_extents = Vector3(40, 1, 1) +direction = Vector3(0, -1, 0) +spread = 90.0 +initial_velocity_min = 150.0 +initial_velocity_max = 250.0 +angular_velocity_min = -90.0 +angular_velocity_max = 90.0 +gravity = Vector3(0, 0, 0) +radial_accel_min = -90.0 +radial_accel_max = 90.0 +damping_min = 200.0 +damping_max = 200.0 +scale_min = 0.8 +scale_max = 1.2 +scale_curve = SubResource("CurveTexture_sb0wp") + +[sub_resource type="Curve" id="Curve_e33mb"] +_data = [Vector2(0, 0.010989), 0.0, 0.0, 0, 0, Vector2(0.151111, 1), 1.3559, 1.3559, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="CurveTexture" id="CurveTexture_qti8k"] +curve = SubResource("Curve_e33mb") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_gmal1"] +lifetime_randomness = 0.5 +particle_flag_disable_z = true +emission_shape = 3 +emission_box_extents = Vector3(40, 1, 1) +direction = Vector3(0, -1, 0) +spread = 90.0 +initial_velocity_min = 150.0 +initial_velocity_max = 250.0 +angular_velocity_min = -90.0 +angular_velocity_max = 90.0 +gravity = Vector3(0, 0, 0) +radial_accel_min = -90.0 +radial_accel_max = 90.0 +damping_min = 200.0 +damping_max = 200.0 +scale_min = 0.8 +scale_max = 1.2 +scale_curve = SubResource("CurveTexture_qti8k") +color = Color(0.913725, 0.8, 0.898039, 1) + +[sub_resource type="CircleShape2D" id="CircleShape2D_0c228"] + +[sub_resource type="Animation" id="Animation_nvm4d"] +resource_name = "RESET" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig/LegR:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(31, 65)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig/LegR:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig/LegR:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/Body:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(5, 53)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/Body:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/Body:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/Body/Hat:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(2, -91)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body/HandL:position") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-60, -53)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/Body/HandR:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(51, -51)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/LegL:position") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-29, 65)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/LegL:rotation") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/LegL:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("FX/Cloud:visible") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Hitbox/HitboxCollisionShape2D:disabled") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Root/Rig:modulate") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Root/Rig:position") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -76)] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Root/Rig:rotation") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/23/type = "value" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("Root/Rig:scale") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/24/type = "value" +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/path = NodePath("FX/Death:emitting") +tracks/24/interp = 1 +tracks/24/loop_wrap = true +tracks/24/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/25/type = "value" +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/path = NodePath("Root/Rig/Body/HandL/WeaponNinjaStar:visible") +tracks/25/interp = 1 +tracks/25/loop_wrap = true +tracks/25/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/26/type = "value" +tracks/26/imported = false +tracks/26/enabled = true +tracks/26/path = NodePath("Root/Hitbox:knockback_enabled") +tracks/26/interp = 1 +tracks/26/loop_wrap = true +tracks/26/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/27/type = "value" +tracks/27/imported = false +tracks/27/enabled = true +tracks/27/path = NodePath("Root/Hurtbox/HurtboxCollisionShape2D:disabled") +tracks/27/interp = 1 +tracks/27/loop_wrap = true +tracks/27/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_8wj70"] +resource_name = "attack_1" +length = 0.28 +step = 0.01 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0, -76), Vector2(0, -76)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/LegL:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-48, 48), Vector2(-55, 35), Vector2(-55, 35), Vector2(-29, 65)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/LegL:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.918872, 1.36873, 1.36873, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/LegL:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/LegR:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(35, 68), Vector2(31, 65)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/LegR:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [-0.125403, 0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/LegR:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body:position") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(5, 53), Vector2(5, 53), Vector2(5, 53)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body:rotation") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.204683, 0.274184, 0.274184, 0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1.1, 0.9), Vector2(1.1, 0.9), Vector2(1.1, 0.9), Vector2(1, 1)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/Body/Hat:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(2, -91), Vector2(2, -91)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/Body/HandL:position") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-77.4704, -36.9794), Vector2(71.4321, -75.3422), Vector2(71.4321, -75.3422), Vector2(-60, -53)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1.8, 1.8), Vector2(1.8, 1.8), Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Root/Rig/Body/HandR:position") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(71.4504, -76.2001), Vector2(-47.4494, -37.9368), Vector2(-47.4494, -37.9368), Vector2(51, -51)] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1.6, 1.6), Vector2(1.6, 1.6), Vector2(1.6, 1.6), Vector2(1, 1)] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Root/Hitbox/HitboxCollisionShape2D:disabled") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.3), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [true, false, true, true] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Root/Hitbox:knockback_enabled") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, false, false] +} + +[sub_resource type="Animation" id="Animation_s1dey"] +resource_name = "attack_2" +length = 0.3 +step = 0.01 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -76)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/LegL:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-29, 65), Vector2(-29, 65), Vector2(-48, 48)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/LegL:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.397498, 0.918872] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/LegL:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/LegR:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(31, 65), Vector2(50, 51), Vector2(35, 68)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/LegR:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -0.401688, -0.125403] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/LegR:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body:position") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(5, 53), Vector2(5, 53)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body:rotation") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -0.278326, 0.204683] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.9, 1.1), Vector2(1.1, 0.9)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/Body/Hat:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(2, -91)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/Body/HandL:position") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-60, -53), Vector2(-1.7771, -44.1117), Vector2(-77.4704, -36.9794)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Root/Rig/Body/HandR:position") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(51, -51), Vector2(-70.2132, -64.2738), Vector2(71.4504, -76.2001)] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.15, 0.25), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1.6, 1.6)] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Root/Hitbox/HitboxCollisionShape2D:disabled") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 0.25, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Root/Hitbox:knockback_enabled") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, false, false] +} + +[sub_resource type="Animation" id="Animation_g7a0r"] +resource_name = "attack_3" +length = 0.35 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig/Body:position") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(-5, 40), Vector2(-5, 40)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig/Body:rotation") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -0.349066, 0.436332] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig/Body:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.9, 1.1), Vector2(1.1, 0.9)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/Body/Hat:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(2, -91)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/Body/HandL:position") +tracks/6/interp = 2 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.2, 0.25, 0.3), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-60, -53), Vector2(-93.4894, -42.3521), Vector2(6.40698, 1.6281), Vector2(68.5276, -75.9627)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/7/interp = 2 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.2, 0.25, 0.3), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 1.70101, 0.0, 0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(2, 2), Vector2(3, 3)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body/HandR:position") +tracks/9/interp = 2 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(51, -51), Vector2(-1.40495, -52.6598), Vector2(-66.8689, -27.8787)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/10/interp = 2 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/LegL:position") +tracks/12/interp = 2 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-29, 65), Vector2(-57, 59), Vector2(37, 63)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/LegL:rotation") +tracks/13/interp = 2 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.706805, -0.742333] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/LegL:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/LegR:position") +tracks/15/interp = 2 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(31, 65), Vector2(31, 65), Vector2(-45, 39)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/LegR:rotation") +tracks/16/interp = 2 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -0.477383, 1.06217] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/LegR:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("FX/Cloud:visible") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Hitbox/HitboxCollisionShape2D:disabled") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.25, 0.35), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Root/Hitbox:knockback_enabled") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0.2, 0.35), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="Animation" id="Animation_jcwlt"] +resource_name = "charge" +length = 0.2 +loop_mode = 1 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -76)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/LegL:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(-16, 67), Vector2(-43, 30), Vector2(17, 26), Vector2(51, 50), Vector2(-16, 67)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/LegL:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.518326, 0.991314, 0.518326, -1.96385, 0.518326] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/LegL:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/LegR:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(23, 69), Vector2(74, 43), Vector2(6, 23), Vector2(-35, 47), Vector2(23, 69)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/LegR:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.811128, -0.351373, 0.811128, 1.40327, 0.811128] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/LegR:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body:position") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(5, 53), Vector2(5, 53), Vector2(5, 53), Vector2(5, 53)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body:rotation") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.553472, 0.61588, 0.553472, 0.61588, 0.553472] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/Body/Hat:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(2, -91)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1.1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/Body/HandL:position") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(8.86381, -27.008), Vector2(17.3173, -25.7316), Vector2(8.86381, -27.008), Vector2(17.3173, -25.7316), Vector2(8.86381, -27.008)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Root/Rig/Body/HandR:position") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(22.4758, -47.2741)] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Root/Hitbox/HitboxCollisionShape2D:disabled") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, false] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Root/Hitbox:knockback_enabled") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, true] +} + +[sub_resource type="Animation" id="Animation_sva81"] +resource_name = "charge_prepare" +length = 0.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -76)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/LegL:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-29, 65), Vector2(-46, 66), Vector2(-16, 67)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/LegL:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.518326, 0.518326] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/LegL:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/LegR:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(31, 65), Vector2(55, 35), Vector2(23, 69)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/LegR:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -1.03322, 0.811128] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/LegR:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body:position") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(5, 53), Vector2(5, 53)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body:rotation") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -0.455647, 0.553472] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1.1, 0.9), Vector2(0.9, 1.1)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/Body/Hat:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(2, -91), Vector2(2, -91), Vector2(2, -91)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0872665] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/Body/HandL:position") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-60, -53), Vector2(-77.6176, -56.3868), Vector2(36.6639, -43.1139)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Root/Rig/Body/HandR:position") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(51, -51), Vector2(-42.71, -65.1758), Vector2(48.1987, -60.7003)] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} + +[sub_resource type="Animation" id="Animation_5k1rd"] +resource_name = "dance" +length = 1.8 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig/Body/Hat:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 1.8), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(2, -91), Vector2(2, -91), Vector2(2, -91)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.1, 1.8), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 1.8), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/Body/HandR:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(47.3684, -50.4762), Vector2(36, -51), Vector2(66, -51), Vector2(36, -51), Vector2(66, -51), Vector2(66, -21), Vector2(66, -81), Vector2(66, -21), Vector2(66, -81), Vector2(66, -21), Vector2(47.3684, -50.4762)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/Body:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.1, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(5, 53), Vector2(5, 53), Vector2(5, 56), Vector2(5, 53), Vector2(5, 56), Vector2(5, 53), Vector2(5, 56), Vector2(5, 53)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/Body:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.1, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/Body:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(0.95, 1.05), Vector2(0.95, 1.05), Vector2(1.05, 0.95), Vector2(0.95, 1.05), Vector2(1.05, 0.95), Vector2(0.95, 1.05), Vector2(1.05, 0.95), Vector2(0.95, 1.05), Vector2(1.05, 0.95), Vector2(0.95, 1.05), Vector2(0.95, 1.05)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/LegR:position") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(31, 65), Vector2(46, 65), Vector2(16, 65), Vector2(46, 65), Vector2(16, 65), Vector2(31, 65), Vector2(31, 65), Vector2(31, 65)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/LegR:rotation") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/LegR:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/LegL:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(-29, 65), Vector2(-14, 65), Vector2(-44, 65), Vector2(-14, 65), Vector2(-44, 65), Vector2(-29, 65), Vector2(-29, 65), Vector2(-29, 65)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/LegL:rotation") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/LegL:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig:position") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.1, 1.8), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0, -76), Vector2(0, -76), Vector2(0, -76)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig:rotation") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.1, 1.8), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.1, 1.8), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Root/Rig/Body/HandL:position") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(-31.5789, -50.4762), Vector2(-75, -53), Vector2(-15, -53), Vector2(-75, -53), Vector2(-15, -53), Vector2(-15, -83), Vector2(-15, -23), Vector2(-15, -83), Vector2(-15, -23), Vector2(-15, -83), Vector2(-31.5789, -50.4762)] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} + +[sub_resource type="Animation" id="Animation_wei72"] +resource_name = "death" +length = 0.5 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig/LegL:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-29, 65), Vector2(-29, 65), Vector2(-29, 65)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig/LegL:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, -1.0566] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig/LegL:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/LegR:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(31, 65), Vector2(31, 65), Vector2(-12.2578, 72.9572)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/LegR:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, -0.693514] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/LegR:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/Body:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(5, 53)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/Body:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/Body:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body/Hat:position") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(2, -91)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/Body/HandL:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-60, -53), Vector2(-60, -53), Vector2(-34.0705, -33.1026)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/Body/HandR:position") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(51, -51), Vector2(51, -51), Vector2(27.9362, -34.8835)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = false +tracks/18/path = NodePath("FX/Cloud:visible") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Rig:position") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0, -76), Vector2(-5, -120), Vector2(0, -40)] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Root/Rig:rotation") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -0.801138, -1.60228] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Root/Rig:scale") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Root/Rig:modulate") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3, 0.4, 0.5), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0.321569), Color(1, 1, 1, 0.588235), Color(1, 1, 1, 0)] +} +tracks/23/type = "value" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("FX/Death:emitting") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/keys = { +"times": PackedFloat32Array(0, 0.3, 0.5), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, true, false] +} +tracks/24/type = "value" +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/path = NodePath("Root/Rig/Body/HandL/WeaponNinjaStar:visible") +tracks/24/interp = 1 +tracks/24/loop_wrap = true +tracks/24/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, false] +} + +[sub_resource type="Animation" id="Animation_msfb2"] +resource_name = "dodge" +length = 0.4 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0, -76), Vector2(0, -38), Vector2(0, -76)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig:rotation") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 2, +"values": [0.0, 2.35619, 6.28319, 12.5664] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 0.5), Vector2(1, 0.5), Vector2(1, 0.5), Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/LegL:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-29, 65), Vector2(-24.8287, 40.1066), Vector2(-24.8287, 40.1066), Vector2(-29, 65)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/LegL:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/LegL:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/LegR:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(31, 65), Vector2(26.1794, 41.8884), Vector2(26.1794, 41.8884), Vector2(31, 65)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/LegR:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/LegR:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body:position") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(5, 53), Vector2(5, 53), Vector2(5, 53)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body:rotation") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/Body/Hat:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(2, -91), Vector2(2, -91), Vector2(2, -91), Vector2(2, -91)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/Body/HandL:position") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-60, -53), Vector2(-19.9999, -52.9358), Vector2(-19.9999, -52.9358), Vector2(-60, -53)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Root/Rig/Body/HandR:position") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(51, -51), Vector2(21.9955, -54.1155), Vector2(21.9955, -54.1155), Vector2(51, -51)] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Root/Hitbox/HitboxCollisionShape2D:disabled") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 0.0001, 0.1, 0.2, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [true, true, true, true, true, true] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Root/Hurtbox/HurtboxCollisionShape2D:disabled") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="Animation" id="Animation_gowr5"] +resource_name = "hurt" +length = 0.25 +step = 0.01 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig/Body:position") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(-9, 29)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig/Body:rotation") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 2), +"update": 0, +"values": [0.0, -0.459832] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig/Body:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.9, 1.1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = false +tracks/3/path = NodePath("Root/Rig/Body/Hat:position") +tracks/3/interp = 2 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(2, -91), Vector2(-23.375, -110.918)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/4/interp = 2 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, -0.169267] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/Body/HandL:position") +tracks/6/interp = 2 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(-60, -53), Vector2(-86.123, -33.8822)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/7/interp = 2 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body/HandR:position") +tracks/9/interp = 2 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(51, -51), Vector2(-4.62756, -33.3235)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/10/interp = 2 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/LegL:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-29, 65)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/LegL:rotation") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/LegL:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/LegR:position") +tracks/15/interp = 2 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(31, 65), Vector2(37, 14)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/LegR:rotation") +tracks/16/interp = 2 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, -0.896359] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/LegR:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("FX/Cloud:visible") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Hitbox/HitboxCollisionShape2D:disabled") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.25), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, true] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Root/Rig:modulate") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.11, 0.22), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(0.721569, 0, 0.0352941, 1), Color(1, 1, 1, 1)] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Root/Rig/Body/HandL/WeaponNinjaStar:visible") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 0.25), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, false] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Root/Hitbox:knockback_enabled") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 0.25), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, false] +} + +[sub_resource type="Animation" id="Animation_gnqgt"] +resource_name = "idle" +length = 0.4 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig/LegR:position") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(31, 65), Vector2(31, 65), Vector2(31, 65)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig/LegR:rotation") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig/LegR:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.9, 1.1), Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/Body:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(5, 49), Vector2(5, 53)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/Body:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/Body:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.95, 1.05), Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/Body/Hat:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(2, -91)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body/HandL:position") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-60, -53), Vector2(-62, -55), Vector2(-60, -53)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/10/interp = 2 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/Body/HandR:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(51, -51), Vector2(49, -53), Vector2(51, -51)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/13/interp = 2 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/LegL:position") +tracks/15/interp = 2 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-29, 65), Vector2(-29, 65), Vector2(-29, 65)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/LegL:rotation") +tracks/16/interp = 2 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/LegL:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.9, 1.1), Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("FX/Cloud:visible") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Hitbox/HitboxCollisionShape2D:disabled") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, true] +} + +[sub_resource type="Animation" id="Animation_uow76"] +resource_name = "spit" +length = 0.3 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig/LegL:position") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(-29, 65), Vector2(-57, 44)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig/LegL:rotation") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.730707] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig/LegL:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/LegR:position") +tracks/3/interp = 2 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(31, 65), Vector2(46, 48), Vector2(31, 65)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/LegR:rotation") +tracks/4/interp = 2 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -0.718681, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/LegR:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/Body:position") +tracks/6/interp = 2 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(4, 46), Vector2(4, 46)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/Body:rotation") +tracks/7/interp = 2 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -0.330061, 0.363712] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/Body:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.8, 1.2), Vector2(1.1, 0.9)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body/Hat:position") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(2, -91)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/Body/HandL:position") +tracks/12/interp = 2 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-60, -53), Vector2(-53.8926, -21.1176), Vector2(-19.8796, -43.7927)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/13/interp = 2 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/Body/HandR:position") +tracks/15/interp = 2 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(51, -51), Vector2(47.6296, -15.5481), Vector2(47.0064, -56.4127)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/16/interp = 2 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} + +[sub_resource type="Animation" id="Animation_5mxvi"] +resource_name = "summon" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig/LegL:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(-29, 65), Vector2(-29, 65)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig/LegL:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig/LegL:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/LegR:position") +tracks/3/interp = 2 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6, 0.8, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(31, 65), Vector2(47, 54), Vector2(43, 56.75), Vector2(47, 54), Vector2(43, 56.75), Vector2(31, 65)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/LegR:rotation") +tracks/4/interp = 2 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6, 0.8, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, -0.40126, -0.768424, -0.40126, -0.768424, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/LegR:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6, 0.8, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/Body:position") +tracks/6/interp = 2 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.2, 0.6, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(5, 53), Vector2(5, 53), Vector2(5, 53)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/Body:rotation") +tracks/7/interp = 2 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.2, 0.6, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, -0.179614, -0.179614, 0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/Body:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6, 0.8, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(0.9, 1.1), Vector2(1, 1), Vector2(0.9, 1.1), Vector2(1, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body/Hat:position") +tracks/9/interp = 2 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(2, -91), Vector2(2, -91)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/10/interp = 2 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/Body/HandL:position") +tracks/12/interp = 2 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6, 0.8, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(-60, -53), Vector2(-71.1271, -84.0591), Vector2(-76.1533, -94.4691), Vector2(-71.1271, -84.0591), Vector2(-76.1533, -94.4691), Vector2(-60, -53)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/13/interp = 2 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6, 0.8, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, -0.836345, 0.0, -0.836345, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6, 0.8, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/Body/HandR:position") +tracks/15/interp = 2 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6, 0.8, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(51, -51), Vector2(61.8744, -83.286), Vector2(62.8802, -95.0655), Vector2(61.8744, -83.286), Vector2(62.8802, -95.0655), Vector2(51, -51)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/16/interp = 2 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6, 0.8, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, -0.887813, 0.0, -0.887813, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6, 0.8, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} + +[sub_resource type="Animation" id="Animation_yn0t6"] +resource_name = "throw" +length = 0.1 +step = 0.01 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -76)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig/LegL:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(-48, 64), Vector2(45, 67)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/LegL:rotation") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.862915, -0.786391] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/LegR:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(31, 65), Vector2(-27, 64)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/LegR:rotation") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.899266] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/Body:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(5, 53)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/Body:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [-0.250268, 0.250549] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/Body/Hat:position") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(2, -91)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body/HandR:position") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(37.6892, -51.6964), Vector2(-36.284, -25.5073)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig:scale") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/LegL:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/LegR:scale") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/Body:scale") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0.9, 1.1), Vector2(1.1, 0.9)] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Root/Rig/Body/HandL:position") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-70.3036, -52.0327), Vector2(-5.01252, -88.9993), Vector2(66.2323, -78.0635)] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.05, 0.1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1.5, 1.5)] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Root/Rig/Body/HandL/WeaponNinjaStar:visible") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 0.09, 0.1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, true, false] +} + +[sub_resource type="Animation" id="Animation_kb56n"] +resource_name = "throw_prepare" +length = 0.2 +loop_mode = 1 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -76)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig/LegL:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-48, 64), Vector2(-48, 64), Vector2(-48, 64)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/LegL:rotation") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.644548, 0.862915, 0.644548] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/LegR:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(31, 65)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/LegR:rotation") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/Body:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(5, 53), Vector2(5, 53)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/Body:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [-0.194275, -0.250268, -0.194275] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/Body/Hat:position") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(2, -91)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body/HandL:position") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-27.2463, -58.3579), Vector2(-70.3036, -52.0327), Vector2(-27.2463, -58.3579)] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/Body/HandR:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(37.6892, -51.6964)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/LegL:scale") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/LegR:scale") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/Body:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Root/Rig/Body/HandL/WeaponNinjaStar:visible") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, true] +} + +[sub_resource type="Animation" id="Animation_fh06e"] +resource_name = "walk" +length = 0.6 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig/Body:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(5, 47), Vector2(5, 53)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig/Body:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig/Body:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.92, 1.08), Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/Body/Hat:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.6), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(2, -91), Vector2(2, -91)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.6), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.6), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/Body/HandL:position") +tracks/6/interp = 2 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-60, -53), Vector2(17, -22), Vector2(-60, -53)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body/HandR:position") +tracks/9/interp = 2 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(51, -51), Vector2(-26, -29), Vector2(51, -51)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/LegL:position") +tracks/12/interp = 2 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-29, 65), Vector2(33, 65), Vector2(-29, 65)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/LegL:rotation") +tracks/13/interp = 2 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, -0.991068, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/LegL:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1.1, 1.1), Vector2(1, 1), Vector2(1.1, 1.1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/LegR:position") +tracks/15/interp = 2 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(31, 65), Vector2(-30, 65), Vector2(31, 65)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/LegR:rotation") +tracks/16/interp = 2 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 1.13756, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/LegR:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1.1, 1.1), Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("FX/Cloud:visible") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Hitbox/HitboxCollisionShape2D:disabled") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.6), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, true] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Root/Hurtbox/HurtboxCollisionShape2D:disabled") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.6), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, false] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_ws2ti"] +_data = { +"RESET": SubResource("Animation_nvm4d"), +"attack_1": SubResource("Animation_8wj70"), +"attack_2": SubResource("Animation_s1dey"), +"attack_3": SubResource("Animation_g7a0r"), +"charge": SubResource("Animation_jcwlt"), +"charge_prepare": SubResource("Animation_sva81"), +"dance": SubResource("Animation_5k1rd"), +"death": SubResource("Animation_wei72"), +"dodge": SubResource("Animation_msfb2"), +"hurt": SubResource("Animation_gowr5"), +"idle": SubResource("Animation_gnqgt"), +"spit": SubResource("Animation_uow76"), +"summon": SubResource("Animation_5mxvi"), +"throw": SubResource("Animation_yn0t6"), +"throw_prepare": SubResource("Animation_kb56n"), +"walk": SubResource("Animation_fh06e") +} + +[node name="AgentBase" type="CharacterBody2D"] +collision_layer = 2 +collision_mask = 3 +motion_mode = 1 +wall_min_slide_angle = 0.0174533 +safe_margin = 0.001 +script = ExtResource("1_n8vy2") + +[node name="Root" type="Node2D" parent="."] +metadata/_edit_lock_ = true + +[node name="Rig" type="Node2D" parent="Root"] +position = Vector2(0, -76) + +[node name="Shadow" type="Sprite2D" parent="Root/Rig"] +modulate = Color(1, 1, 1, 0.258824) +position = Vector2(0, 76) +texture = ExtResource("2_vr0jo") + +[node name="LegL" type="Sprite2D" parent="Root/Rig"] +position = Vector2(-29, 65) +texture = ExtResource("1_1u51b") +region_enabled = true +region_rect = Rect2(104, 67, 35, 28) + +[node name="LegR" type="Sprite2D" parent="Root/Rig"] +position = Vector2(31, 65) +texture = ExtResource("1_1u51b") +region_enabled = true +region_rect = Rect2(105, 97, 34, 27) + +[node name="Body" type="Sprite2D" parent="Root/Rig"] +position = Vector2(5, 53) +texture = ExtResource("1_1u51b") +offset = Vector2(-5, -53) +region_enabled = true +region_rect = Rect2(4.03712, 4.21556, 94.9839, 121.271) + +[node name="Hat" type="Sprite2D" parent="Root/Rig/Body"] +position = Vector2(2, -91) +texture = ExtResource("1_1u51b") +offset = Vector2(-1, -20) +region_enabled = true +region_rect = Rect2(163, 20, 170, 102) + +[node name="HandL" type="Sprite2D" parent="Root/Rig/Body"] +position = Vector2(-60, -53) +texture = ExtResource("1_1u51b") +region_enabled = true +region_rect = Rect2(111.022, 6.27016, 27.6329, 27.1423) + +[node name="WeaponNinjaStar" type="Sprite2D" parent="Root/Rig/Body/HandL"] +visible = false +texture = ExtResource("4_1c5xq") + +[node name="HandR" type="Sprite2D" parent="Root/Rig/Body"] +show_behind_parent = true +position = Vector2(51, -51) +texture = ExtResource("1_1u51b") +region_enabled = true +region_rect = Rect2(111, 34, 26.9272, 26.6298) + +[node name="Hitbox" type="Area2D" parent="Root"] +position = Vector2(50, 0) +collision_layer = 0 +collision_mask = 4 +script = ExtResource("5_taq6b") +knockback_strength = 1000.0 + +[node name="HitboxCollisionShape2D" type="CollisionShape2D" parent="Root/Hitbox"] +shape = SubResource("RectangleShape2D_2k81i") +disabled = true +debug_color = Color(0.933131, 0.0801983, 0.605982, 0.42) +metadata/_edit_lock_ = true + +[node name="Hurtbox" type="Area2D" parent="Root" node_paths=PackedStringArray("health")] +collision_layer = 8 +collision_mask = 0 +script = ExtResource("6_jnvxm") +health = NodePath("../../Health") + +[node name="HurtboxCollisionShape2D" type="CollisionShape2D" parent="Root/Hurtbox"] +shape = SubResource("RectangleShape2D_26abe") +debug_color = Color(0.466325, 0.590206, 0.107862, 0.42) +metadata/_edit_lock_ = true + +[node name="FX" type="Node2D" parent="."] +position = Vector2(0, -68) +metadata/_edit_lock_ = true + +[node name="Cloud" type="Sprite2D" parent="FX"] +visible = false +scale = Vector2(0.5, 0.5) +texture = ExtResource("2_lv102") +region_enabled = true +region_rect = Rect2(300, 0, 100, 70) + +[node name="Death" type="GPUParticles2D" parent="FX"] +position = Vector2(0, 52) +emitting = false +amount = 16 +process_material = SubResource("ParticleProcessMaterial_f5i1x") +texture = ExtResource("4_mnb6v") +lifetime = 0.7 +one_shot = true +explosiveness = 0.7 +fixed_fps = 60 + +[node name="Summoned" type="GPUParticles2D" parent="FX"] +position = Vector2(0, 83) +emitting = false +amount = 16 +process_material = SubResource("ParticleProcessMaterial_gmal1") +texture = ExtResource("4_mnb6v") +lifetime = 1.4 +one_shot = true +explosiveness = 0.5 +fixed_fps = 60 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +visible = false +position = Vector2(-1, -7) +rotation = 1.5708 +shape = SubResource("CircleShape2D_0c228") + +[node name="Health" type="Node" parent="."] +script = ExtResource("4_qwtrf") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +callback_mode_method = 1 +libraries = { +"": SubResource("AnimationLibrary_ws2ti") +} +autoplay = "idle" diff --git a/demo/agents/fireball/fireball.gd b/demo/agents/fireball/fireball.gd new file mode 100644 index 0000000..513a722 --- /dev/null +++ b/demo/agents/fireball/fireball.gd @@ -0,0 +1,56 @@ +#* +#* fireball.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +extends Node2D +## Fireball + +const SPEED := 800.0 +const DEAD_SPEED := 400.0 + +@export var dir: float = 1.0 + +var _is_dead: bool = false + +@onready var fireball_sprite: Sprite2D = $Root/Fireball +@onready var death: GPUParticles2D = $FX/Death +@onready var collision_shape_2d: CollisionShape2D = $Hitbox/CollisionShape2D +@onready var root: Node2D = $Root +@onready var trail: GPUParticles2D = $FX/Trail + + +func _ready() -> void: + var tween := create_tween().set_loops() + tween.tween_property(fireball_sprite, ^"rotation", PI * signf(dir), 1.0).as_relative() + + var tween2 := create_tween().set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN) + tween2.tween_property(fireball_sprite, "position:y", -10.0, 0.5).as_relative().set_ease(Tween.EASE_OUT) + tween2.tween_property(fireball_sprite, "position:y", 0.0, 1.0) + tween2.tween_callback(_die) + + +func _physics_process(delta: float) -> void: + var speed: float = SPEED if not _is_dead else DEAD_SPEED + position += Vector2.RIGHT * speed * dir * delta + + +func _die() -> void: + if _is_dead: + return + _is_dead = true + trail.emitting = false + root.hide() + collision_shape_2d.set_deferred(&"disabled", true) + death.emitting = true + await death.finished + queue_free() + + +func _on_hitbox_area_entered(_area: Area2D) -> void: + _die() diff --git a/demo/agents/fireball/fireball.tscn b/demo/agents/fireball/fireball.tscn new file mode 100644 index 0000000..160c015 --- /dev/null +++ b/demo/agents/fireball/fireball.tscn @@ -0,0 +1,169 @@ +[gd_scene load_steps=18 format=3 uid="uid://wdauoepicegb"] + +[ext_resource type="Script" path="res://demo/agents/fireball/fireball.gd" id="1_ituf4"] +[ext_resource type="Texture2D" uid="uid://dwhhxj5557qrb" path="res://demo/assets/shadow.png" id="2_6n8mx"] +[ext_resource type="Texture2D" uid="uid://235liwnxn1n5" path="res://demo/assets/fireball.png" id="3_1an0e"] +[ext_resource type="Script" path="res://demo/agents/scripts/hitbox.gd" id="4_rjhgc"] +[ext_resource type="Texture2D" uid="uid://bdusy0qqtw0th" path="res://demo/assets/smoke.png" id="5_dcbp6"] + +[sub_resource type="Curve" id="Curve_mukra"] +_data = [Vector2(0, 0), 0.0, 4.81319, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="CurveTexture" id="CurveTexture_56342"] +curve = SubResource("Curve_mukra") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_gbya7"] +lifetime_randomness = 0.5 +particle_flag_disable_z = true +direction = Vector3(0, -1, 0) +spread = 90.0 +initial_velocity_min = 150.0 +initial_velocity_max = 250.0 +angular_velocity_min = -90.0 +angular_velocity_max = 90.0 +gravity = Vector3(0, 0, 0) +radial_accel_min = -90.0 +radial_accel_max = 90.0 +damping_min = 200.0 +damping_max = 200.0 +scale_min = 0.8 +scale_max = 1.2 +scale_curve = SubResource("CurveTexture_56342") +color = Color(0.552941, 0.552941, 0.552941, 1) + +[sub_resource type="Gradient" id="Gradient_c08h3"] +offsets = PackedFloat32Array(0, 0.549738, 1) +colors = PackedColorArray(0.980453, 0.717632, 0.282353, 1, 0.960906, 0.211521, 0.0390784, 1, 0.201527, 0.201527, 0.201527, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fhxvw"] +gradient = SubResource("Gradient_c08h3") + +[sub_resource type="Curve" id="Curve_ugmtv"] +_data = [Vector2(0, 0.010989), 0.0, 0.0, 0, 0, Vector2(0.151111, 1), 1.3559, 1.3559, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="CurveTexture" id="CurveTexture_1f5jp"] +curve = SubResource("Curve_ugmtv") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_gilhy"] +lifetime_randomness = 0.5 +particle_flag_disable_z = true +emission_shape = 3 +emission_box_extents = Vector3(40, 1, 1) +direction = Vector3(0, -1, 0) +spread = 90.0 +initial_velocity_min = 150.0 +initial_velocity_max = 250.0 +angular_velocity_min = -90.0 +angular_velocity_max = 90.0 +gravity = Vector3(0, 0, 0) +radial_accel_min = -90.0 +radial_accel_max = 90.0 +damping_min = 200.0 +damping_max = 200.0 +scale_min = 0.8 +scale_max = 1.2 +scale_curve = SubResource("CurveTexture_1f5jp") +color_ramp = SubResource("GradientTexture1D_fhxvw") + +[sub_resource type="CircleShape2D" id="CircleShape2D_7uc1b"] +radius = 25.13 + +[sub_resource type="Animation" id="Animation_wr7y0"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Fireball:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_ey8it"] +resource_name = "default" +length = 0.3 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Fireball:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [0, 1, 2, 0] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_cphpk"] +_data = { +"RESET": SubResource("Animation_wr7y0"), +"default": SubResource("Animation_ey8it") +} + +[node name="Fireball" type="Node2D"] +script = ExtResource("1_ituf4") + +[node name="FX" type="Node2D" parent="."] +position = Vector2(0, -92) + +[node name="Trail" type="GPUParticles2D" parent="FX"] +show_behind_parent = true +amount = 6 +process_material = SubResource("ParticleProcessMaterial_gbya7") +texture = ExtResource("5_dcbp6") +lifetime = 0.4 +fixed_fps = 60 + +[node name="Death" type="GPUParticles2D" parent="FX"] +emitting = false +amount = 6 +process_material = SubResource("ParticleProcessMaterial_gilhy") +texture = ExtResource("5_dcbp6") +lifetime = 0.7 +one_shot = true +explosiveness = 0.7 +fixed_fps = 60 +local_coords = true + +[node name="Root" type="Node2D" parent="."] + +[node name="Shadow" type="Sprite2D" parent="Root"] +modulate = Color(1, 1, 1, 0.686275) +position = Vector2(0, -1) +scale = Vector2(0.382, 0.297) +texture = ExtResource("2_6n8mx") + +[node name="Fireball" type="Sprite2D" parent="Root"] +position = Vector2(0, -92) +texture = ExtResource("3_1an0e") +hframes = 3 + +[node name="RemoteTransform2D" type="RemoteTransform2D" parent="Root/Fireball"] +remote_path = NodePath("../../../FX") +update_rotation = false +update_scale = false + +[node name="Hitbox" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 4 +script = ExtResource("4_rjhgc") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"] +shape = SubResource("CircleShape2D_7uc1b") +debug_color = Color(0.839216, 0.192157, 0.815686, 0.419608) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_cphpk") +} +autoplay = "default" + +[connection signal="area_entered" from="Hitbox" to="." method="_on_hitbox_area_entered"] diff --git a/demo/agents/ninja_star/ninja_star.gd b/demo/agents/ninja_star/ninja_star.gd new file mode 100644 index 0000000..0a1713e --- /dev/null +++ b/demo/agents/ninja_star/ninja_star.gd @@ -0,0 +1,53 @@ +#* +#* ninja_star.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +extends Node2D + +const SPEED := 800.0 +const DEAD_SPEED := 400.0 + +@export var dir: float = 1.0 + +var _is_dead: bool = false + +@onready var ninja_star: Sprite2D = $Root/NinjaStar +@onready var death: GPUParticles2D = $Death +@onready var collision_shape_2d: CollisionShape2D = $Hitbox/CollisionShape2D +@onready var root: Node2D = $Root + + +func _ready() -> void: + var tween := create_tween().set_loops() + tween.tween_property(ninja_star, ^"rotation", TAU * signf(dir), 1.0).as_relative() + + var tween2 := create_tween().set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN) + tween2.tween_property(ninja_star, "position:y", -10.0, 0.5).as_relative().set_ease(Tween.EASE_OUT) + tween2.tween_property(ninja_star, "position:y", 0.0, 1.0) + tween2.tween_callback(_die) + + +func _physics_process(delta: float) -> void: + var speed: float = SPEED if not _is_dead else DEAD_SPEED + position += Vector2.RIGHT * speed * dir * delta + + +func _die() -> void: + if _is_dead: + return + _is_dead = true + root.hide() + collision_shape_2d.set_deferred(&"disabled", true) + death.emitting = true + await death.finished + queue_free() + + +func _on_hitbox_area_entered(_area: Area2D) -> void: + _die() diff --git a/demo/agents/ninja_star/ninja_star.tscn b/demo/agents/ninja_star/ninja_star.tscn new file mode 100644 index 0000000..58aab69 --- /dev/null +++ b/demo/agents/ninja_star/ninja_star.tscn @@ -0,0 +1,80 @@ +[gd_scene load_steps=10 format=3 uid="uid://bj5n72nomeaci"] + +[ext_resource type="Script" path="res://demo/agents/ninja_star/ninja_star.gd" id="1_pja57"] +[ext_resource type="Texture2D" uid="uid://2uyxh7sy8qny" path="res://demo/assets/weapon_ninja_star.png" id="1_ptof7"] +[ext_resource type="Texture2D" uid="uid://dwhhxj5557qrb" path="res://demo/assets/shadow.png" id="2_2rj5a"] +[ext_resource type="Script" path="res://demo/agents/scripts/hitbox.gd" id="2_iem02"] +[ext_resource type="Texture2D" uid="uid://bdusy0qqtw0th" path="res://demo/assets/smoke.png" id="5_t37aw"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_7uc1b"] +radius = 28.0 + +[sub_resource type="Curve" id="Curve_ugmtv"] +_data = [Vector2(0, 0.010989), 0.0, 0.0, 0, 0, Vector2(0.151111, 1), 1.3559, 1.3559, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="CurveTexture" id="CurveTexture_1f5jp"] +curve = SubResource("Curve_ugmtv") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_gilhy"] +lifetime_randomness = 0.5 +particle_flag_disable_z = true +emission_shape = 3 +emission_box_extents = Vector3(40, 1, 1) +direction = Vector3(0, -1, 0) +spread = 90.0 +initial_velocity_min = 150.0 +initial_velocity_max = 250.0 +angular_velocity_min = -90.0 +angular_velocity_max = 90.0 +gravity = Vector3(0, 0, 0) +radial_accel_min = -90.0 +radial_accel_max = 90.0 +damping_min = 200.0 +damping_max = 200.0 +scale_min = 0.8 +scale_max = 1.2 +scale_curve = SubResource("CurveTexture_1f5jp") + +[node name="NinjaStar" type="Node2D"] +script = ExtResource("1_pja57") + +[node name="Root" type="Node2D" parent="."] + +[node name="Shadow" type="Sprite2D" parent="Root"] +modulate = Color(1, 1, 1, 0.686275) +position = Vector2(0, -1) +scale = Vector2(0.382, 0.297) +texture = ExtResource("2_2rj5a") + +[node name="NinjaStar" type="Sprite2D" parent="Root"] +position = Vector2(0, -93) +texture = ExtResource("1_ptof7") + +[node name="RemoteTransform2D" type="RemoteTransform2D" parent="Root/NinjaStar"] +remote_path = NodePath("../../../Death") +update_rotation = false +update_scale = false + +[node name="Hitbox" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 4 +script = ExtResource("2_iem02") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"] +shape = SubResource("CircleShape2D_7uc1b") +debug_color = Color(0.839216, 0.192157, 0.815686, 0.419608) + +[node name="Death" type="GPUParticles2D" parent="."] +position = Vector2(0, -93) +emitting = false +amount = 1 +process_material = SubResource("ParticleProcessMaterial_gilhy") +texture = ExtResource("5_t37aw") +lifetime = 0.7 +one_shot = true +explosiveness = 0.7 +fixed_fps = 60 +local_coords = true + +[connection signal="area_entered" from="Hitbox" to="." method="_on_hitbox_area_entered"] diff --git a/demo/agents/player/player.gd b/demo/agents/player/player.gd new file mode 100644 index 0000000..7c5b19a --- /dev/null +++ b/demo/agents/player/player.gd @@ -0,0 +1,103 @@ +#* +#* player.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +extends "res://demo/agents/scripts/agent_base.gd" + +## Player. + +@export var dodge_cooldown: float = 0.4 + +@onready var hsm: LimboHSM = $LimboHSM +@onready var idle_state: LimboState = $LimboHSM/IdleState +@onready var move_state: LimboState = $LimboHSM/MoveState +@onready var attack_state: LimboState = $LimboHSM/AttackState +@onready var dodge_state: LimboState = $LimboHSM/DodgeState + +var can_dodge: bool = true +var attack_pressed: bool = false + + +func _ready() -> void: + super._ready() + can_dodge = true + _init_input_events() + _init_state_machine() + death.connect(func(): remove_from_group(&"player")) + + +func _unhandled_input(event: InputEvent) -> void: + if event.is_echo(): + return + if event.is_action_pressed("attack"): + attack_pressed = true + _process_attack_input() + if event.is_action_pressed("dodge"): + hsm.dispatch("dodge!") + + +func _process_attack_input() -> void: + if not attack_pressed or hsm.get_active_state() == attack_state: + return + hsm.dispatch("attack!") + attack_pressed = false + + +func _init_state_machine() -> void: + hsm.add_transition(idle_state, move_state, idle_state.EVENT_FINISHED) + hsm.add_transition(move_state, idle_state, move_state.EVENT_FINISHED) + hsm.add_transition(idle_state, attack_state, "attack!") + hsm.add_transition(move_state, attack_state, "attack!") + hsm.add_transition(attack_state, move_state, attack_state.EVENT_FINISHED) + hsm.add_transition(hsm.ANYSTATE, dodge_state, "dodge!") + hsm.add_transition(dodge_state, move_state, dodge_state.EVENT_FINISHED) + + dodge_state.set_guard(_can_dodge) + attack_state.set_guard(attack_state.can_enter) + + # Process attack input buffer when move_state is entered. + # This way we can buffer the attack button presses and chain the attacks. + move_state.call_on_enter(_process_attack_input) + + hsm.initialize(self) + hsm.set_active(true) + + +func _init_input_events() -> void: + # Note: Ensures that input events are present even if project.godot wasn't imported. + _add_action(&"move_left", KEY_A) + _add_action(&"move_right", KEY_D) + _add_action(&"move_up", KEY_W) + _add_action(&"move_down", KEY_S) + _add_action(&"dodge", KEY_SPACE) + _add_action(&"attack", KEY_ENTER, KEY_F) + + +func _add_action(p_action: StringName, p_key: Key, p_alt: Key = KEY_NONE) -> void: + if not InputMap.has_action(p_action): + InputMap.add_action(p_action) + var event := InputEventKey.new() + event.keycode = p_key + InputMap.action_add_event(p_action, event) + if p_alt != KEY_NONE: + var alt := InputEventKey.new() + alt.keycode = p_alt + InputMap.action_add_event(p_action, alt) + + +func set_victorious() -> void: + idle_state.idle_animation = &"dance" + + +func _can_dodge() -> bool: + if can_dodge: + can_dodge = false + get_tree().create_timer(dodge_cooldown).timeout.connect(func(): can_dodge = true) + return true + return false diff --git a/demo/agents/player/player.tscn b/demo/agents/player/player.tscn new file mode 100644 index 0000000..eb1c4ad --- /dev/null +++ b/demo/agents/player/player.tscn @@ -0,0 +1,53 @@ +[gd_scene load_steps=8 format=3 uid="uid://d07ag5dcje13i"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_mswd4"] +[ext_resource type="Script" path="res://demo/agents/player/player.gd" id="2_24nyi"] +[ext_resource type="Script" path="res://demo/agents/player/states/idle_state.gd" id="3_ekb12"] +[ext_resource type="Script" path="res://demo/agents/player/states/move_state.gd" id="4_paikn"] +[ext_resource type="Script" path="res://demo/agents/player/states/attack_state.gd" id="5_mpgu6"] +[ext_resource type="Script" path="res://demo/agents/player/states/dodge_state.gd" id="6_7o4a6"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_8pofm"] +size = Vector2(150, 50) + +[node name="Player" groups=["player"] instance=ExtResource("1_mswd4")] +collision_layer = 0 +collision_mask = 1 +script = ExtResource("2_24nyi") +dodge_cooldown = 0.4 + +[node name="Hitbox" parent="Root" index="1"] +collision_mask = 8 + +[node name="HitboxCollisionShape2D" parent="Root/Hitbox" index="0"] +shape = SubResource("RectangleShape2D_8pofm") + +[node name="Hurtbox" parent="Root" index="2"] +collision_layer = 4 + +[node name="Health" parent="." index="3"] +max_health = 30.0 + +[node name="LimboHSM" type="LimboHSM" parent="." index="4"] + +[node name="IdleState" type="LimboState" parent="LimboHSM" index="0" node_paths=PackedStringArray("animation_player")] +script = ExtResource("3_ekb12") +animation_player = NodePath("../../AnimationPlayer") +idle_animation = &"idle" + +[node name="MoveState" type="LimboState" parent="LimboHSM" index="1" node_paths=PackedStringArray("animation_player")] +script = ExtResource("4_paikn") +animation_player = NodePath("../../AnimationPlayer") +animation = &"walk" + +[node name="AttackState" type="LimboState" parent="LimboHSM" index="2" node_paths=PackedStringArray("animation_player", "hitbox")] +script = ExtResource("5_mpgu6") +animation_player = NodePath("../../AnimationPlayer") +animations = Array[StringName]([&"attack_1", &"attack_2", &"attack_3"]) +hitbox = NodePath("../../Root/Hitbox") + +[node name="DodgeState" type="LimboState" parent="LimboHSM" index="3" node_paths=PackedStringArray("animation_player", "hurtbox_collision")] +script = ExtResource("6_7o4a6") +animation_player = NodePath("../../AnimationPlayer") +animation = &"dodge" +hurtbox_collision = NodePath("../../Root/Hurtbox/HurtboxCollisionShape2D") diff --git a/demo/agents/player/states/attack_state.gd b/demo/agents/player/states/attack_state.gd new file mode 100644 index 0000000..3af48a5 --- /dev/null +++ b/demo/agents/player/states/attack_state.gd @@ -0,0 +1,60 @@ +#* +#* attack_state.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +extends LimboState + +## Attack state: Perform 3-part combo attack for as long as player hits attack button. + +@export var animation_player: AnimationPlayer +@export var animations: Array[StringName] +@export var hitbox: Hitbox + +## Cooldown duration after third attack in the combo is complete. +@export var combo_cooldown: float = 0.1 + +var anim_index: int = 0 +var last_attack_msec: int = -10000 +var _can_enter: bool = true + + +## This func is used to prevent entering this state using LimboState.set_guard(). +## Entry is denied for a short duration after the third attack in the combo is complete. +func can_enter() -> bool: + return _can_enter + + +func _enter() -> void: + if (Time.get_ticks_msec() - last_attack_msec) < 200: + # Perform next attack animation in the 3-part combo, if an attack was recently performed. + anim_index = (anim_index + 1) % 3 + else: + anim_index = 0 + + var horizontal_move: float = Input.get_axis(&"move_left", &"move_right") + if not is_zero_approx(horizontal_move): + agent.face_dir(horizontal_move) + + hitbox.damage = 2 if anim_index == 2 else 1 # deal 2 damage on a third attack in the combo + animation_player.play(animations[anim_index]) + + await animation_player.animation_finished + if is_active(): + get_root().dispatch(EVENT_FINISHED) + + +func _exit() -> void: + hitbox.damage = 1 + last_attack_msec = Time.get_ticks_msec() + if anim_index == 2 and _can_enter: + # Prevent entering this state for a short duration after the third attack + # in the combo sequence is complete. + _can_enter = false + await get_tree().create_timer(combo_cooldown).timeout + _can_enter = true diff --git a/demo/agents/player/states/dodge_state.gd b/demo/agents/player/states/dodge_state.gd new file mode 100644 index 0000000..50b3446 --- /dev/null +++ b/demo/agents/player/states/dodge_state.gd @@ -0,0 +1,48 @@ +#* +#* dodge_state.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +extends LimboState +## Dodge state. + + +@export var animation_player: AnimationPlayer +@export var animation: StringName +@export var duration: float = 0.4 +@export var dodge_speed: float = 1000.0 +@export var hurtbox_collision: CollisionShape2D + +var move_dir: Vector2 +var elapsed_time: float + + +func _enter() -> void: + elapsed_time = 0.0 + hurtbox_collision.disabled = true + + var horizontal_move: float = Input.get_axis(&"move_left", &"move_right") + if is_zero_approx(horizontal_move): + move_dir = Vector2.RIGHT * agent.get_facing() + else: + move_dir = Vector2.RIGHT * signf(horizontal_move) + agent.face_dir(move_dir.x) + + animation_player.play(animation, 0.1) + + +func _exit() -> void: + hurtbox_collision.set_deferred(&"disabled", false) + + +func _update(p_delta: float) -> void: + elapsed_time += p_delta + var desired_velocity: Vector2 = move_dir * dodge_speed + agent.move(desired_velocity) + if elapsed_time > duration: + get_root().dispatch(EVENT_FINISHED) diff --git a/demo/agents/player/states/idle_state.gd b/demo/agents/player/states/idle_state.gd new file mode 100644 index 0000000..61e7ec2 --- /dev/null +++ b/demo/agents/player/states/idle_state.gd @@ -0,0 +1,27 @@ +#* +#* idle_state.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +extends LimboState +## Idle state. + + +@export var animation_player: AnimationPlayer +@export var idle_animation: StringName + + +func _enter() -> void: + animation_player.play(idle_animation, 0.1) + + +func _update(_delta: float) -> void: + var horizontal_move: float = Input.get_axis(&"move_left", &"move_right") + var vertical_move: float = Input.get_axis(&"move_up", &"move_down") + if horizontal_move != 0.0 or vertical_move != 0.0: + get_root().dispatch(EVENT_FINISHED) diff --git a/demo/agents/player/states/move_state.gd b/demo/agents/player/states/move_state.gd new file mode 100644 index 0000000..332732a --- /dev/null +++ b/demo/agents/player/states/move_state.gd @@ -0,0 +1,37 @@ +#* +#* move_state.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +extends LimboState +## Move state. + + +const VERTICAL_FACTOR := 0.8 + +@export var animation_player: AnimationPlayer +@export var animation: StringName +@export var speed: float = 500.0 + + +func _enter() -> void: + animation_player.play(animation, 0.1) + + +func _update(_delta: float) -> void: + var horizontal_move: float = Input.get_axis(&"move_left", &"move_right") + var vertical_move: float = Input.get_axis(&"move_up", &"move_down") + + if not is_zero_approx(horizontal_move): + agent.face_dir(horizontal_move) + + var desired_velocity := Vector2(horizontal_move, vertical_move * VERTICAL_FACTOR) * speed + agent.move(desired_velocity) + + if horizontal_move == 0.0 and vertical_move == 0.0: + get_root().dispatch(EVENT_FINISHED) diff --git a/demo/agents/scripts/agent_base.gd b/demo/agents/scripts/agent_base.gd new file mode 100644 index 0000000..e17a0e2 --- /dev/null +++ b/demo/agents/scripts/agent_base.gd @@ -0,0 +1,161 @@ +#* +#* agent_base.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +extends CharacterBody2D +## Base agent script that is shared by all agents. + +signal death + +# Resource file to use in summon_minion() method. +const MINION_RESOURCE := "res://demo/agents/03_agent_imp.tscn" + +# Projectile resource. +const NinjaStar := preload("res://demo/agents/ninja_star/ninja_star.tscn") +const Fireball := preload("res://demo/agents/fireball/fireball.tscn") + +var summon_count: int = 0 + +var _frames_since_facing_update: int = 0 +var _is_dead: bool = false +var _moved_this_frame: bool = false + +@onready var animation_player: AnimationPlayer = $AnimationPlayer +@onready var health: Health = $Health +@onready var root: Node2D = $Root +@onready var collision_shape_2d: CollisionShape2D = $CollisionShape2D +@onready var summoning_effect: GPUParticles2D = $FX/Summoned + + +func _ready() -> void: + health.damaged.connect(_damaged) + health.death.connect(die) + + +func _physics_process(_delta: float) -> void: + _post_physics_process.call_deferred() + + +func _post_physics_process() -> void: + if not _moved_this_frame: + velocity = lerp(velocity, Vector2.ZERO, 0.5) + _moved_this_frame = false + + +func move(p_velocity: Vector2) -> void: + velocity = lerp(velocity, p_velocity, 0.2) + move_and_slide() + _moved_this_frame = true + + +## Update agent's facing in the velocity direction. +func update_facing() -> void: + _frames_since_facing_update += 1 + if _frames_since_facing_update > 3: + face_dir(velocity.x) + +## Face specified direction. +func face_dir(dir: float) -> void: + if dir > 0.0 and root.scale.x < 0.0: + root.scale.x = 1.0; + _frames_since_facing_update = 0 + if dir < 0.0 and root.scale.x > 0.0: + root.scale.x = -1.0; + _frames_since_facing_update = 0 + +## Returns 1.0 when agent is facing right. +## Returns -1.0 when agent is facing left. +func get_facing() -> float: + return signf(root.scale.x) + + +func throw_ninja_star() -> void: + var ninja_star := NinjaStar.instantiate() + ninja_star.dir = get_facing() + get_parent().add_child(ninja_star) + ninja_star.global_position = global_position + Vector2.RIGHT * 100.0 * get_facing() + + +func spit_fire() -> void: + var fireball := Fireball.instantiate() + fireball.dir = get_facing() + get_parent().add_child(fireball) + fireball.global_position = global_position + Vector2.RIGHT * 100.0 * get_facing() + + +func summon_minion(p_position: Vector2) -> void: + var minion: CharacterBody2D = load(MINION_RESOURCE).instantiate() + get_parent().add_child(minion) + minion.position = p_position + minion.play_summoning_effect() + summon_count += 1 + minion.death.connect(func(): summon_count -= 1) + + +## Method is used when this agent is summoned from the dungeons of the castle AaaAaaAAAAAaaAAaaaaaa +func play_summoning_effect() -> void: + summoning_effect.emitting = true + + +## Is specified position inside the arena (not inside an obstacle)? +func is_good_position(p_position: Vector2) -> bool: + var space_state := get_world_2d().direct_space_state + var params := PhysicsPointQueryParameters2D.new() + params.position = p_position + params.collision_mask = 1 # Obstacle layer has value 1 + var collision := space_state.intersect_point(params) + return collision.is_empty() + + +## When agent is damaged... +func _damaged(_amount: float, knockback: Vector2) -> void: + apply_knockback(knockback) + animation_player.play(&"hurt") + var btplayer := get_node_or_null(^"BTPlayer") as BTPlayer + if btplayer: + btplayer.set_active(false) + var hsm := get_node_or_null(^"LimboHSM") + if hsm: + hsm.set_active(false) + await animation_player.animation_finished + if btplayer and not _is_dead: + btplayer.restart() + if hsm and not _is_dead: + hsm.set_active(true) + + +## Push agent in the knockback direction for the specified number of physics frames. +func apply_knockback(knockback: Vector2, frames: int = 10) -> void: + if knockback.is_zero_approx(): + return + for i in range(frames): + move(knockback) + await get_tree().physics_frame + + +func die() -> void: + if _is_dead: + return + death.emit() + _is_dead = true + root.process_mode = Node.PROCESS_MODE_DISABLED + animation_player.play(&"death") + collision_shape_2d.set_deferred(&"disabled", true) + + for child in get_children(): + if child is BTPlayer or child is LimboHSM: + child.set_active(false) + + if get_tree(): + await get_tree().create_timer(10.0).timeout + queue_free() + + +func get_health() -> Health: + return health diff --git a/demo/agents/scripts/health.gd b/demo/agents/scripts/health.gd new file mode 100644 index 0000000..181c36c --- /dev/null +++ b/demo/agents/scripts/health.gd @@ -0,0 +1,46 @@ +#* +#* health.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +class_name Health +extends Node +## Tracks health and emits signal when damaged or dead. + +## Emitted when health is reduced to 0. +signal death + +## Emitted when health is damaged. +signal damaged(amount: float, knockback: Vector2) + +## Initial health value. +@export var max_health: float = 10.0 + +var _current: float + + +func _ready() -> void: + _current = max_health + + +func take_damage(amount: float, knockback: Vector2) -> void: + if _current <= 0.0: + return + + _current -= amount + _current = max(_current, 0.0) + + if _current <= 0.0: + death.emit() + else: + damaged.emit(amount, knockback) + + +## Returns current health. +func get_current() -> float: + return _current diff --git a/demo/agents/scripts/hitbox.gd b/demo/agents/scripts/hitbox.gd new file mode 100644 index 0000000..57cb327 --- /dev/null +++ b/demo/agents/scripts/hitbox.gd @@ -0,0 +1,39 @@ +#* +#* hitbox.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +class_name Hitbox +extends Area2D +## Area that deals damage. + +## Damage value to apply. +@export var damage: float = 1.0 + +## Push back the victim. +@export var knockback_enabled: bool = false + +## Desired pushback speed. +@export var knockback_strength: float = 500.0 + + +func _ready() -> void: + area_entered.connect(_area_entered) + + +func _area_entered(hurtbox: Hurtbox) -> void: + if hurtbox.owner == owner: + return + hurtbox.take_damage(damage, get_knockback(), self) + + +func get_knockback() -> Vector2: + var knockback: Vector2 + if knockback_enabled: + knockback = Vector2.RIGHT.rotated(global_rotation) * knockback_strength + return knockback diff --git a/demo/agents/scripts/hurtbox.gd b/demo/agents/scripts/hurtbox.gd new file mode 100644 index 0000000..333497f --- /dev/null +++ b/demo/agents/scripts/hurtbox.gd @@ -0,0 +1,22 @@ +#* +#* hurtbox.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +class_name Hurtbox +extends Area2D +## Area that registers damage. + +@export var health: Health + +var last_attack_vector: Vector2 + + +func take_damage(amount: float, knockback: Vector2, source: Hitbox) -> void: + last_attack_vector = owner.global_position - source.owner.global_position + health.take_damage(amount, knockback) diff --git a/demo/agents/tutorial/tutorial_01_welcome.tscn b/demo/agents/tutorial/tutorial_01_welcome.tscn new file mode 100644 index 0000000..d9114c2 --- /dev/null +++ b/demo/agents/tutorial/tutorial_01_welcome.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=5 format=3 uid="uid://dk67yawiu33jv"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_2vrmp"] +[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_3h4dj"] +[ext_resource type="BehaviorTree" uid="uid://b1mfh8yad7rmw" path="res://demo/ai/trees/tutorial/tutorial_01_welcome.tres" id="3_ilmgw"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"] + +[node name="TutorialWelcome" instance=ExtResource("1_2vrmp")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_3h4dj") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_3h4dj") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_3h4dj") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_3h4dj") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_3h4dj") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_3h4dj") + +[node name="BTPlayer" type="BTPlayer" parent="." index="5"] +behavior_tree = ExtResource("3_ilmgw") +blackboard_plan = SubResource("BlackboardPlan_52mdk") diff --git a/demo/agents/tutorial/tutorial_02_introduction.tscn b/demo/agents/tutorial/tutorial_02_introduction.tscn new file mode 100644 index 0000000..f14b0d5 --- /dev/null +++ b/demo/agents/tutorial/tutorial_02_introduction.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=5 format=3 uid="uid://cw3yth564nhrw"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_lia2k"] +[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_4x2l4"] +[ext_resource type="BehaviorTree" uid="uid://b1i0xo0o676va" path="res://demo/ai/trees/tutorial/tutorial_02_introduction.tres" id="3_3esuy"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"] + +[node name="TutorialIntro" instance=ExtResource("1_lia2k")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_4x2l4") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_4x2l4") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_4x2l4") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_4x2l4") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_4x2l4") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_4x2l4") + +[node name="BTPlayer" type="BTPlayer" parent="." index="5"] +behavior_tree = ExtResource("3_3esuy") +blackboard_plan = SubResource("BlackboardPlan_52mdk") diff --git a/demo/agents/tutorial/tutorial_03_types.tscn b/demo/agents/tutorial/tutorial_03_types.tscn new file mode 100644 index 0000000..3ae6493 --- /dev/null +++ b/demo/agents/tutorial/tutorial_03_types.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=5 format=3 uid="uid://bx4iabilsv3rs"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_p8nwq"] +[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_hnwhw"] +[ext_resource type="BehaviorTree" uid="uid://cb0ybf24ahnc3" path="res://demo/ai/trees/tutorial/tutorial_03_types.tres" id="3_a31ka"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"] + +[node name="TutorialTypes" instance=ExtResource("1_p8nwq")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_hnwhw") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_hnwhw") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_hnwhw") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_hnwhw") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_hnwhw") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_hnwhw") + +[node name="BTPlayer" type="BTPlayer" parent="." index="5"] +behavior_tree = ExtResource("3_a31ka") +blackboard_plan = SubResource("BlackboardPlan_52mdk") diff --git a/demo/agents/tutorial/tutorial_04_sequence.tscn b/demo/agents/tutorial/tutorial_04_sequence.tscn new file mode 100644 index 0000000..0a7202b --- /dev/null +++ b/demo/agents/tutorial/tutorial_04_sequence.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=5 format=3 uid="uid://bhtm8gnk5hsus"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_oibr1"] +[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_j52yc"] +[ext_resource type="BehaviorTree" uid="uid://dln8ywvtqedt7" path="res://demo/ai/trees/tutorial/tutorial_04_sequence.tres" id="3_feewj"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"] + +[node name="TutorialSequence" instance=ExtResource("1_oibr1")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_j52yc") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_j52yc") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_j52yc") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_j52yc") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_j52yc") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_j52yc") + +[node name="BTPlayer" type="BTPlayer" parent="." index="5"] +behavior_tree = ExtResource("3_feewj") +blackboard_plan = SubResource("BlackboardPlan_52mdk") diff --git a/demo/agents/tutorial/tutorial_05_selector.tscn b/demo/agents/tutorial/tutorial_05_selector.tscn new file mode 100644 index 0000000..699ab50 --- /dev/null +++ b/demo/agents/tutorial/tutorial_05_selector.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=5 format=3 uid="uid://5nqbasyipupf"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_62fs7"] +[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_gdg2c"] +[ext_resource type="BehaviorTree" uid="uid://bf4r652fv5kwi" path="res://demo/ai/trees/tutorial/tutorial_05_selector.tres" id="3_pm5ep"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"] + +[node name="TutorialSelector" instance=ExtResource("1_62fs7")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_gdg2c") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_gdg2c") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_gdg2c") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_gdg2c") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_gdg2c") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_gdg2c") + +[node name="BTPlayer" type="BTPlayer" parent="." index="5"] +behavior_tree = ExtResource("3_pm5ep") +blackboard_plan = SubResource("BlackboardPlan_52mdk") diff --git a/demo/agents/tutorial/tutorial_06_decorators.tscn b/demo/agents/tutorial/tutorial_06_decorators.tscn new file mode 100644 index 0000000..c053f21 --- /dev/null +++ b/demo/agents/tutorial/tutorial_06_decorators.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=5 format=3 uid="uid://ehc00upu3co"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_mbrnd"] +[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_ttkri"] +[ext_resource type="BehaviorTree" uid="uid://beiki511huxb8" path="res://demo/ai/trees/tutorial/tutorial_06_decorators.tres" id="3_tpgll"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"] + +[node name="TutorialDecorators" instance=ExtResource("1_mbrnd")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_ttkri") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_ttkri") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_ttkri") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_ttkri") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_ttkri") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_ttkri") + +[node name="BTPlayer" type="BTPlayer" parent="." index="5"] +behavior_tree = ExtResource("3_tpgll") +blackboard_plan = SubResource("BlackboardPlan_52mdk") diff --git a/demo/agents/tutorial/tutorial_07_more_decorators.tscn b/demo/agents/tutorial/tutorial_07_more_decorators.tscn new file mode 100644 index 0000000..c386580 --- /dev/null +++ b/demo/agents/tutorial/tutorial_07_more_decorators.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=5 format=3 uid="uid://brq6c843j1eeo"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_k4qfc"] +[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_q4r1n"] +[ext_resource type="BehaviorTree" uid="uid://tep50j4d6kgp" path="res://demo/ai/trees/tutorial/tutorial_07_more_decorators.tres" id="3_ta3g6"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"] + +[node name="TutorialMoreDecorators" instance=ExtResource("1_k4qfc")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_q4r1n") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_q4r1n") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_q4r1n") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_q4r1n") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_q4r1n") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_q4r1n") + +[node name="BTPlayer" type="BTPlayer" parent="." index="5"] +behavior_tree = ExtResource("3_ta3g6") +blackboard_plan = SubResource("BlackboardPlan_52mdk") diff --git a/demo/agents/tutorial/tutorial_08_final_touch.tscn b/demo/agents/tutorial/tutorial_08_final_touch.tscn new file mode 100644 index 0000000..0d2d8a7 --- /dev/null +++ b/demo/agents/tutorial/tutorial_08_final_touch.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=5 format=3 uid="uid://b8yj40s43bw8h"] + +[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_bjdsc"] +[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_onjfd"] +[ext_resource type="BehaviorTree" uid="uid://dp0cglcytwcj5" path="res://demo/ai/trees/tutorial/tutorial_08_final_touch.tres" id="3_c5qx4"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"] + +[node name="TutorialFinalTouch" instance=ExtResource("1_bjdsc")] + +[node name="LegL" parent="Root/Rig" index="1"] +texture = ExtResource("2_onjfd") + +[node name="LegR" parent="Root/Rig" index="2"] +texture = ExtResource("2_onjfd") + +[node name="Body" parent="Root/Rig" index="3"] +texture = ExtResource("2_onjfd") + +[node name="Hat" parent="Root/Rig/Body" index="0"] +texture = ExtResource("2_onjfd") + +[node name="HandL" parent="Root/Rig/Body" index="1"] +texture = ExtResource("2_onjfd") + +[node name="HandR" parent="Root/Rig/Body" index="2"] +texture = ExtResource("2_onjfd") + +[node name="BTPlayer" type="BTPlayer" parent="." index="5"] +behavior_tree = ExtResource("3_c5qx4") +blackboard_plan = SubResource("BlackboardPlan_52mdk") diff --git a/demo/ai/tasks/arrive_pos.gd b/demo/ai/tasks/arrive_pos.gd new file mode 100644 index 0000000..edb53fb --- /dev/null +++ b/demo/ai/tasks/arrive_pos.gd @@ -0,0 +1,69 @@ +#* +#* arrive_pos.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +@tool +extends BTAction +## Moves the agent to the specified position, favoring horizontal movement. [br] +## Returns [code]SUCCESS[/code] when close to the target position (see [member tolerance]); +## otherwise returns [code]RUNNING[/code]. + +## Blackboard variable that stores the target position (Vector2) +@export var target_position_var := &"pos" + +## Variable that stores desired speed (float) +@export var speed_var := &"speed" + +## How close should the agent be to the target position to return SUCCESS. +@export var tolerance := 50.0 + +## Specifies the node to avoid (valid Node2D is expected). +## If not empty, agent will circle around the node while moving into position. +@export var avoid_var: StringName + + +func _generate_name() -> String: + return "Arrive pos: %s%s" % [ + LimboUtility.decorate_var(target_position_var), + "" if avoid_var.is_empty() else " avoid: " + LimboUtility.decorate_var(avoid_var) + ] + + +func _tick(_delta: float) -> Status: + var target_pos: Vector2 = blackboard.get_var(target_position_var, Vector2.ZERO) + if target_pos.distance_to(agent.global_position) < tolerance: + return SUCCESS + + var speed: float = blackboard.get_var(speed_var, 10.0) + var dist: float = absf(agent.global_position.x - target_pos.x) + var dir: Vector2 = agent.global_position.direction_to(target_pos) + + # Prefer horizontal movement: + var vertical_factor: float = remap(dist, 200.0, 500.0, 1.0, 0.0) + vertical_factor = clampf(vertical_factor, 0.0, 1.0) + dir.y *= vertical_factor + + # Avoid the node specified by `avoid_var`. + # I.e., if `avoid_var` is set, agent will circle around that node while moving into position. + if not avoid_var.is_empty(): + var avoid_node: Node2D = blackboard.get_var(avoid_var) + if is_instance_valid(avoid_node): + var distance_vector: Vector2 = avoid_node.global_position - agent.global_position + if dir.dot(distance_vector) > 0.0: + var side := dir.rotated(PI * 0.5).normalized() + # The closer we are to the avoid target, the stronger is the avoidance. + var strength: float = remap(distance_vector.length(), 200.0, 400.0, 1.0, 0.0) + strength = clampf(strength, 0.0, 1.0) + var avoidance := side * signf(-side.dot(distance_vector)) * strength + dir += avoidance + + var desired_velocity: Vector2 = dir.normalized() * speed + agent.move(desired_velocity) + agent.update_facing() + return RUNNING diff --git a/demo/ai/tasks/back_away.gd b/demo/ai/tasks/back_away.gd new file mode 100644 index 0000000..3b00388 --- /dev/null +++ b/demo/ai/tasks/back_away.gd @@ -0,0 +1,39 @@ +#* +#* back_away.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +@tool +extends BTAction +## Moves the agent in the opposite direction of its current facing. [br] +## Returns [code]RUNNING[/code] always. + +## Blackboard variable that stores desired speed. +@export var speed_var: StringName = &"speed" + +## How much can we deviate from the "away" direction (in radians). +@export var max_angle_deviation: float = 0.7 + +var _dir: Vector2 +var _desired_velocity: Vector2 + + +# Called each time this task is entered. +func _enter() -> void: + # Determine "away" direction and desired velocity + _dir = Vector2.LEFT * agent.get_facing() + var speed: float = blackboard.get_var(speed_var, 200.0) + var rand_angle = randf_range(-max_angle_deviation, max_angle_deviation) + _desired_velocity = _dir.rotated(rand_angle) * speed + + +# Called each time this task is ticked (aka executed). +func _tick(_delta: float) -> Status: + agent.move(_desired_velocity) + agent.face_dir(-signf(_dir.x)) + return RUNNING diff --git a/demo/ai/tasks/face_target.gd b/demo/ai/tasks/face_target.gd new file mode 100644 index 0000000..bf07d64 --- /dev/null +++ b/demo/ai/tasks/face_target.gd @@ -0,0 +1,32 @@ +#* +#* face_target.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +@tool +extends BTAction +## Flips the agent to face the target, returning [code]SUCCESS[/code]. [br] +## Returns [code]FAILURE[/code] if [member target_var] is not a valid [Node2D] instance. + +## Blackboard variable that stores our target (expecting Node2D). +@export var target_var: StringName = &"target" + +# Display a customized name (requires @tool). +func _generate_name() -> String: + return "FaceTarget " + LimboUtility.decorate_var(target_var) + + +# Called each time this task is ticked (aka executed). +func _tick(_delta: float) -> Status: + var target: Node2D = blackboard.get_var(target_var) + if not is_instance_valid(target): + return FAILURE + var dir: float = target.global_position.x - agent.global_position.x + agent.velocity = Vector2.ZERO + agent.face_dir(dir) + return SUCCESS diff --git a/demo/ai/tasks/get_first_in_group.gd b/demo/ai/tasks/get_first_in_group.gd new file mode 100644 index 0000000..bd4e642 --- /dev/null +++ b/demo/ai/tasks/get_first_in_group.gd @@ -0,0 +1,34 @@ +#* +#* get_first_in_group.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +@tool +extends BTAction +## Stores the first node in the [member group] on the blackboard, returning [code]SUCCESS[/code]. [br] +## Returns [code]FAILURE[/code] if the group contains 0 nodes. + +## Name of the SceneTree group. +@export var group: StringName + +## Blackboard variable in which the task will store the acquired node. +@export var output_var: StringName = &"target" + + +func _generate_name() -> String: + return "GetFirstNodeInGroup \"%s\" ➜%s" % [ + group, + LimboUtility.decorate_var(output_var) + ] + +func _tick(_delta: float) -> Status: + var nodes: Array[Node] = agent.get_tree().get_nodes_in_group(group) + if nodes.size() == 0: + return FAILURE + blackboard.set_var(output_var, nodes[0]) + return SUCCESS diff --git a/demo/ai/tasks/in_range.gd b/demo/ai/tasks/in_range.gd new file mode 100644 index 0000000..2878595 --- /dev/null +++ b/demo/ai/tasks/in_range.gd @@ -0,0 +1,54 @@ +#* +#* in_range.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +@tool +extends BTCondition +## InRange condition checks if the agent is within a range of target, +## defined by [member distance_min] and [member distance_max]. [br] +## Returns [code]SUCCESS[/code] if the agent is within the given range; +## otherwise, returns [code]FAILURE[/code]. + +## Minimum distance to target. +@export var distance_min: float + +## Maximum distance to target. +@export var distance_max: float + +## Blackboard variable that holds the target (expecting Node2D). +@export var target_var: StringName = &"target" + +var _min_distance_squared: float +var _max_distance_squared: float + + +# Called to generate a display name for the task. +func _generate_name() -> String: + return "InRange (%d, %d) of %s" % [distance_min, distance_max, + LimboUtility.decorate_var(target_var)] + + +# Called to initialize the task. +func _setup() -> void: + ## Small performace optimization + _min_distance_squared = distance_min * distance_min + _max_distance_squared = distance_max * distance_max + + +# Called when the task is executed. +func _tick(_delta: float) -> Status: + var target: Node2D = blackboard.get_var(target_var, null) + if not is_instance_valid(target): + return FAILURE + + var dist_sq: float = agent.global_position.distance_squared_to(target.global_position) + if dist_sq >= _min_distance_squared and dist_sq <= _max_distance_squared: + return SUCCESS + else: + return FAILURE diff --git a/demo/ai/tasks/is_aligned_with_target.gd b/demo/ai/tasks/is_aligned_with_target.gd new file mode 100644 index 0000000..c15ea3a --- /dev/null +++ b/demo/ai/tasks/is_aligned_with_target.gd @@ -0,0 +1,35 @@ +#* +#* is_aligned_with_target.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +@tool +extends BTCondition +## Checks if the agent is horizontally aligned with the target. [br] +## Returns [code]SUCCESS[/code] if the agent is horizontally aligned with the target. +## Returns [code]FAILURE[/code] if not aligned or if target is not a valid node instance. + + +@export var target_var: StringName = &"target" +@export var tolerance: float = 30.0 + + +# Display a customized name (requires @tool). +func _generate_name() -> String: + return "IsAlignedWithTarget " + LimboUtility.decorate_var(target_var) + + +# Called each time this task is ticked (aka executed). +func _tick(_delta: float) -> Status: + var target := blackboard.get_var(target_var) as Node2D + if not is_instance_valid(target): + return FAILURE + var y_diff: float = absf(target.global_position.y - agent.global_position.y) + if y_diff < tolerance: + return SUCCESS + return FAILURE diff --git a/demo/ai/tasks/move_forward.gd b/demo/ai/tasks/move_forward.gd new file mode 100644 index 0000000..bac5483 --- /dev/null +++ b/demo/ai/tasks/move_forward.gd @@ -0,0 +1,39 @@ +#* +#* move_forward.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +@tool +extends BTAction +## Applies velocity in the direction the agent is facing on each tick +## until the [member duration] is exceeded. [br] +## Returns [code]SUCCESS[/code] if the elapsed time exceeds [member duration]. [br] +## Returns [code]RUNNING[/code] if the elapsed time does not exceed [member duration]. [br] + +## Blackboard variable that stores desired speed. +@export var speed_var: StringName = &"speed" + +## How long to perform this task (in seconds). +@export var duration: float = 0.1 + +# Display a customized name (requires @tool). +func _generate_name() -> String: + return "MoveForward speed: %s duration: %ss" % [ + LimboUtility.decorate_var(speed_var), + duration] + +# Called each time this task is ticked (aka executed). +func _tick(_delta: float) -> Status: + var facing: float = agent.get_facing() + var speed: float = blackboard.get_var(speed_var, 100.0) + var desired_velocity: Vector2 = Vector2.RIGHT * facing * speed + agent.move(desired_velocity) + agent.update_facing() + if elapsed_time > duration: + return SUCCESS + return RUNNING diff --git a/demo/ai/tasks/pursue.gd b/demo/ai/tasks/pursue.gd new file mode 100644 index 0000000..aee5eaa --- /dev/null +++ b/demo/ai/tasks/pursue.gd @@ -0,0 +1,79 @@ +#* +#* pursue.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +@tool +extends BTAction +## Move towards the target until the agent is flanking it. [br] +## Returns [code]RUNNING[/code] while moving towards the target but not yet at the desired position. [br] +## Returns [code]SUCCESS[/code] when at the desired position relative to the target (flanking it). [br] +## Returns [code]FAILURE[/code] if the target is not a valid [Node2D] instance. [br] + +## How close should the agent be to the desired position to return SUCCESS. +const TOLERANCE := 30.0 + +## Blackboard variable that stores our target (expecting Node2D). +@export var target_var: StringName = &"target" + +## Blackboard variable that stores desired speed. +@export var speed_var: StringName = &"speed" + +## Desired distance from target. +@export var approach_distance: float = 100.0 + +var _waypoint: Vector2 + + +# Display a customized name (requires @tool). +func _generate_name() -> String: + return "Pursue %s" % [LimboUtility.decorate_var(target_var)] + + +# Called each time this task is entered. +func _enter() -> void: + var target: Node2D = blackboard.get_var(target_var, null) + if is_instance_valid(target): + # Movement is performed in smaller steps. + # For each step, we select a new waypoint. + _select_new_waypoint(_get_desired_position(target)) + + +# Called each time this task is ticked (aka executed). +func _tick(_delta: float) -> Status: + var target: Node2D = blackboard.get_var(target_var, null) + if not is_instance_valid(target): + return FAILURE + + var desired_pos: Vector2 = _get_desired_position(target) + if agent.global_position.distance_to(desired_pos) < TOLERANCE: + return SUCCESS + + if agent.global_position.distance_to(_waypoint) < TOLERANCE: + _select_new_waypoint(desired_pos) + + var speed: float = blackboard.get_var(speed_var, 200.0) + var desired_velocity: Vector2 = agent.global_position.direction_to(_waypoint) * speed + agent.move(desired_velocity) + agent.update_facing() + return RUNNING + + +## Get the closest flanking position to target. +func _get_desired_position(target: Node2D) -> Vector2: + var side: float = signf(agent.global_position.x - target.global_position.x) + var desired_pos: Vector2 = target.global_position + desired_pos.x += approach_distance * side + return desired_pos + + +## Select an intermidiate waypoint towards the desired position. +func _select_new_waypoint(desired_position: Vector2) -> void: + var distance_vector: Vector2 = desired_position - agent.global_position + var angle_variation: float = randf_range(-0.2, 0.2) + _waypoint = agent.global_position + distance_vector.limit_length(150.0).rotated(angle_variation) diff --git a/demo/ai/tasks/select_flanking_pos.gd b/demo/ai/tasks/select_flanking_pos.gd new file mode 100644 index 0000000..78687ff --- /dev/null +++ b/demo/ai/tasks/select_flanking_pos.gd @@ -0,0 +1,74 @@ +#* +#* select_flanking_pos.gd +#* ============================================================================= +#* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors. +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +@tool +extends BTAction +## Selects a position on the target's side and stores it on the +## blackboard, returning [code]SUCCESS[/code]. [br] +## Returns [code]FAILURE[/code] if the target is not valid. + +enum AgentSide { + CLOSEST, + FARTHEST, + BACK, + FRONT, +} + +## Blackboard variable that holds current target (should be a Node2D instance). +@export var target_var: StringName = &"target" + +## Which agent's side should we flank? +@export var flank_side: AgentSide = AgentSide.CLOSEST + +## Minimum range relative to the target. +@export var range_min: int = 300 + +## Maximum range relative to the target. +@export var range_max: int = 400 + +## Blackboard variable that will be used to store selected position. +@export var position_var: StringName = &"pos" + + +# Display a customized name (requires @tool). +func _generate_name() -> String: + return "SelectFlankingPos target: %s range: [%s, %s] side: %s ➜%s" % [ + LimboUtility.decorate_var(target_var), + range_min, + range_max, + AgentSide.keys()[flank_side], + LimboUtility.decorate_var(position_var)] + + +# Called each time this task is ticked (aka executed). +func _tick(_delta: float) -> Status: + var target := blackboard.get_var(target_var) as Node2D + if not is_instance_valid(target): + return FAILURE + + var dir: float # 1.0 is right, -1.0 is left (relative to target) + match flank_side: + AgentSide.FARTHEST: + dir = signf(target.global_position.x - agent.global_position.x) + AgentSide.CLOSEST : + dir = -signf(target.global_position.x - agent.global_position.x) + AgentSide.BACK: + dir = -target.get_facing() + AgentSide.FRONT: + dir = target.get_facing() + + var flank_pos: Vector2 + var offset := Vector2(dir * randf_range(range_min, range_max), 0.0) + flank_pos = target.global_position + offset + if not agent.is_good_position(flank_pos): + # Choose the opposite side if the preferred side is not good (i.e., inside a collision shape). + flank_pos = target.global_position - offset + blackboard.set_var(position_var, flank_pos) + return SUCCESS diff --git a/demo/ai/tasks/select_random_nearby_pos.gd b/demo/ai/tasks/select_random_nearby_pos.gd new file mode 100644 index 0000000..1b108a5 --- /dev/null +++ b/demo/ai/tasks/select_random_nearby_pos.gd @@ -0,0 +1,34 @@ +@tool +extends BTAction +## Selects a random position nearby within the specified range and stores it on the blackboard. [br] +## Returns [code]SUCCESS[/code]. + +## Minimum distance to the desired position. +@export var range_min: float = 300.0 + +## Maximum distance to the desired position. +@export var range_max: float = 500.0 + +## Blackboard variable that will be used to store the desired position. +@export var position_var: StringName = &"pos" + + +# Display a customized name (requires @tool). +func _generate_name() -> String: + return "SelectRandomNearbyPos range: [%s, %s] ➜%s" % [ + range_min, range_max, + LimboUtility.decorate_var(position_var)] + + +# Called each time this task is ticked (aka executed). +func _tick(_delta: float) -> Status: + var pos: Vector2 + var is_good_position: bool = false + while not is_good_position: + # Randomize until we find a good position (good position == not outside the arena). + var angle: float = randf() * TAU + var rand_distance: float = randf_range(range_min, range_max) + pos = agent.global_position + Vector2(sin(angle), cos(angle)) * rand_distance + is_good_position = agent.is_good_position(pos) + blackboard.set_var(position_var, pos) + return SUCCESS diff --git a/demo/ai/trees/01_agent_melee_simple.tres b/demo/ai/trees/01_agent_melee_simple.tres new file mode 100644 index 0000000..571b5c6 --- /dev/null +++ b/demo/ai/trees/01_agent_melee_simple.tres @@ -0,0 +1,88 @@ +[gd_resource type="BehaviorTree" load_steps=21 format=3 uid="uid://bpdm5jnegi38"] + +[ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_2jpsu"] +[ext_resource type="Script" path="res://demo/ai/tasks/pursue.gd" id="2_h5db5"] +[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="3_bpmfp"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_46tbn"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" + +[sub_resource type="BBNode" id="BBNode_nrd4b"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_qiw21"] +animation_player = SubResource("BBNode_nrd4b") +animation_name = &"idle" +blend = 0.1 + +[sub_resource type="BTRandomWait" id="BTRandomWait_xlud8"] +min_duration = 0.7 +max_duration = 1.5 + +[sub_resource type="BTSequence" id="BTSequence_yhjh1"] +custom_name = "Pause before action" +children = [SubResource("BTPlayAnimation_qiw21"), SubResource("BTRandomWait_xlud8")] + +[sub_resource type="BBNode" id="BBNode_wpj6d"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_olf37"] +animation_player = SubResource("BBNode_wpj6d") +animation_name = &"walk" +blend = 0.1 + +[sub_resource type="BTAction" id="BTAction_ulbrf"] +script = ExtResource("1_2jpsu") +group = &"player" +output_var = &"target" + +[sub_resource type="BTAction" id="BTAction_a4jqi"] +script = ExtResource("2_h5db5") +target_var = &"target" +speed_var = &"speed" +approach_distance = 100.0 + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_xek5v"] +time_limit = 2.0 +children = [SubResource("BTAction_a4jqi")] + +[sub_resource type="BTSequence" id="BTSequence_1xfnq"] +custom_name = "Pursue player" +children = [SubResource("BTPlayAnimation_olf37"), SubResource("BTAction_ulbrf"), SubResource("BTTimeLimit_xek5v")] + +[sub_resource type="BTAction" id="BTAction_kidxn"] +script = ExtResource("3_bpmfp") +target_var = &"target" + +[sub_resource type="BTWait" id="BTWait_tadkc"] +duration = 0.1 + +[sub_resource type="BBNode" id="BBNode_s8evu"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_ppmxd"] +await_completion = 2.0 +animation_player = SubResource("BBNode_s8evu") +animation_name = &"attack_1" + +[sub_resource type="BTSequence" id="BTSequence_ww5v2"] +custom_name = "Melee attack" +children = [SubResource("BTAction_kidxn"), SubResource("BTWait_tadkc"), SubResource("BTPlayAnimation_ppmxd")] + +[sub_resource type="BTSequence" id="BTSequence_pxl2k"] +children = [SubResource("BTSequence_yhjh1"), SubResource("BTSequence_1xfnq"), SubResource("BTSequence_ww5v2")] + +[resource] +description = "Welcome to the [b]LimboAI[/b] demo project! This demo project consists of three parts: +- If you're new to behavior trees, you can access the [b]Tutorial[/b] by clicking the \"Begin Tutorial\" button on the toolbar. +- To experience the demo game, just click the \"Switch to Game\" button. +- On this screen, you can inspect the AI behavior tree in action for each agent in the game." +blackboard_plan = SubResource("BlackboardPlan_46tbn") +root_task = SubResource("BTSequence_pxl2k") diff --git a/demo/ai/trees/02_agent_charger.tres b/demo/ai/trees/02_agent_charger.tres new file mode 100644 index 0000000..c8234c7 --- /dev/null +++ b/demo/ai/trees/02_agent_charger.tres @@ -0,0 +1,120 @@ +[gd_resource type="BehaviorTree" load_steps=28 format=3 uid="uid://ylife72ym5et"] + +[ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_657p6"] +[ext_resource type="Script" path="res://demo/ai/tasks/select_flanking_pos.gd" id="2_t3udh"] +[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="3_u2ra5"] +[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="4_xwjl7"] +[ext_resource type="Script" path="res://demo/ai/tasks/move_forward.gd" id="5_ucvak"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_qd806"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" +var/charge_speed/name = &"charge_speed" +var/charge_speed/type = 3 +var/charge_speed/value = 1000.0 +var/charge_speed/hint = 1 +var/charge_speed/hint_string = "10,1000,10" + +[sub_resource type="BBNode" id="BBNode_yrurg"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_ha2ag"] +animation_player = SubResource("BBNode_yrurg") +animation_name = &"idle" +blend = 0.1 + +[sub_resource type="BTRandomWait" id="BTRandomWait_cedqr"] +max_duration = 3.0 + +[sub_resource type="BTSequence" id="BTSequence_l3v31"] +custom_name = "Short break" +children = [SubResource("BTPlayAnimation_ha2ag"), SubResource("BTRandomWait_cedqr")] + +[sub_resource type="BTAction" id="BTAction_pp23y"] +script = ExtResource("1_657p6") +group = &"player" +output_var = &"target" + +[sub_resource type="BTAction" id="BTAction_pmvd0"] +script = ExtResource("2_t3udh") +target_var = &"target" +flank_side = 0 +range_min = 500 +range_max = 600 +position_var = &"flank_pos" + +[sub_resource type="BBNode" id="BBNode_xh3wr"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_h0poo"] +animation_player = SubResource("BBNode_xh3wr") +animation_name = &"walk" +blend = 0.1 + +[sub_resource type="BTAction" id="BTAction_87mi0"] +script = ExtResource("3_u2ra5") +target_position_var = &"flank_pos" +speed_var = &"speed" +tolerance = 50.0 +avoid_var = &"" + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_is5ag"] +time_limit = 3.0 +children = [SubResource("BTAction_87mi0")] + +[sub_resource type="BTSequence" id="BTSequence_p6pgg"] +custom_name = "Flank target" +children = [SubResource("BTAction_pp23y"), SubResource("BTAction_pmvd0"), SubResource("BTPlayAnimation_h0poo"), SubResource("BTTimeLimit_is5ag")] + +[sub_resource type="BTAction" id="BTAction_q5g4a"] +script = ExtResource("4_xwjl7") +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_bfijg"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_4okoy"] +await_completion = 2.0 +animation_player = SubResource("BBNode_bfijg") +animation_name = &"charge_prepare" +blend = 0.1 + +[sub_resource type="BTWait" id="BTWait_ovu3r"] +duration = 0.6 + +[sub_resource type="BTSequence" id="BTSequence_mde2g"] +custom_name = "Anticipation" +children = [SubResource("BTAction_q5g4a"), SubResource("BTPlayAnimation_4okoy"), SubResource("BTWait_ovu3r")] + +[sub_resource type="BBNode" id="BBNode_kpp70"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_8s1wq"] +animation_player = SubResource("BBNode_kpp70") +animation_name = &"charge" +blend = 0.05 + +[sub_resource type="BTAction" id="BTAction_o18uk"] +script = ExtResource("5_ucvak") +speed_var = &"charge_speed" +duration = 1.5 + +[sub_resource type="BTSequence" id="BTSequence_8lur1"] +custom_name = "Charge!" +children = [SubResource("BTPlayAnimation_8s1wq"), SubResource("BTAction_o18uk")] + +[sub_resource type="BTSequence" id="BTSequence_pjuov"] +custom_name = "Charge Attack" +children = [SubResource("BTSequence_l3v31"), SubResource("BTSequence_p6pgg"), SubResource("BTSequence_mde2g"), SubResource("BTSequence_8lur1")] + +[resource] +description = "A [dec]Decorator[/dec] is a type of task that typically has only one child. Decorators are commonly used to alter the behavior or status of their child task. In this behavior tree, the [dec]TimeLimit[/dec] decorator sets a maximum time for the [act]Arrive[/act] action to complete its work. If the child task exceeds this time limit without finishing, it will be aborted, and the TimeLimit decorator will return [FAILURE]." +blackboard_plan = SubResource("BlackboardPlan_qd806") +root_task = SubResource("BTSequence_pjuov") diff --git a/demo/ai/trees/03_agent_imp.tres b/demo/ai/trees/03_agent_imp.tres new file mode 100644 index 0000000..e32ac17 --- /dev/null +++ b/demo/ai/trees/03_agent_imp.tres @@ -0,0 +1,120 @@ +[gd_resource type="BehaviorTree" load_steps=30 format=3 uid="uid://c2bxoo68ywb27"] + +[ext_resource type="Script" path="res://demo/ai/tasks/select_random_nearby_pos.gd" id="1_cdtqu"] +[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="2_31fsn"] +[ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="3_y1r1a"] +[ext_resource type="Script" path="res://demo/ai/tasks/pursue.gd" id="4_jlgat"] +[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="5_o4ggh"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_46tbn"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" + +[sub_resource type="BBNode" id="BBNode_3y70b"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_klk26"] +animation_player = SubResource("BBNode_3y70b") +animation_name = &"walk" +blend = 0.1 + +[sub_resource type="BTAction" id="BTAction_chmiy"] +script = ExtResource("1_cdtqu") +range_min = 200.0 +range_max = 500.0 +position_var = &"pos" + +[sub_resource type="BTAction" id="BTAction_5kivl"] +script = ExtResource("2_31fsn") +target_position_var = &"pos" +speed_var = &"speed" +tolerance = 50.0 +avoid_var = &"" + +[sub_resource type="BTSequence" id="BTSequence_k184c"] +custom_name = "Chaotic Walk" +children = [SubResource("BTPlayAnimation_klk26"), SubResource("BTAction_chmiy"), SubResource("BTAction_5kivl")] + +[sub_resource type="BTProbability" id="BTProbability_ifsry"] +children = [SubResource("BTSequence_k184c")] + +[sub_resource type="BBNode" id="BBNode_nrd4b"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_qiw21"] +animation_player = SubResource("BBNode_nrd4b") +animation_name = &"idle" +blend = 0.1 + +[sub_resource type="BTRandomWait" id="BTRandomWait_xlud8"] +min_duration = 0.7 +max_duration = 1.5 + +[sub_resource type="BTSequence" id="BTSequence_n5ltc"] +custom_name = "Pause before action" +children = [SubResource("BTPlayAnimation_qiw21"), SubResource("BTRandomWait_xlud8")] + +[sub_resource type="BBNode" id="BBNode_wpj6d"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_olf37"] +animation_player = SubResource("BBNode_wpj6d") +animation_name = &"walk" +blend = 0.1 + +[sub_resource type="BTAction" id="BTAction_ulbrf"] +script = ExtResource("3_y1r1a") +group = &"player" +output_var = &"target" + +[sub_resource type="BTAction" id="BTAction_a4jqi"] +script = ExtResource("4_jlgat") +target_var = &"target" +speed_var = &"speed" +approach_distance = 100.0 + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_xek5v"] +time_limit = 2.0 +children = [SubResource("BTAction_a4jqi")] + +[sub_resource type="BTSequence" id="BTSequence_1xfnq"] +custom_name = "Pursue player" +children = [SubResource("BTPlayAnimation_olf37"), SubResource("BTAction_ulbrf"), SubResource("BTTimeLimit_xek5v")] + +[sub_resource type="BTAction" id="BTAction_kidxn"] +script = ExtResource("5_o4ggh") +target_var = &"target" + +[sub_resource type="BTWait" id="BTWait_tadkc"] +duration = 0.1 + +[sub_resource type="BBNode" id="BBNode_s8evu"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_ppmxd"] +await_completion = 2.0 +animation_player = SubResource("BBNode_s8evu") +animation_name = &"attack_1" + +[sub_resource type="BTSequence" id="BTSequence_ww5v2"] +custom_name = "Melee attack" +children = [SubResource("BTAction_kidxn"), SubResource("BTWait_tadkc"), SubResource("BTPlayAnimation_ppmxd")] + +[sub_resource type="BTSequence" id="BTSequence_pxl2k"] +custom_name = "Engage player" +children = [SubResource("BTSequence_n5ltc"), SubResource("BTSequence_1xfnq"), SubResource("BTSequence_ww5v2")] + +[sub_resource type="BTSelector" id="BTSelector_y3llm"] +children = [SubResource("BTProbability_ifsry"), SubResource("BTSequence_pxl2k")] + +[resource] +description = "Here, the [dec]Probability[/dec] decorator allows the execution of its branch in 50% of cases. This introduces a slight variation to the behavior each time the [comp]Chaotic walk[/comp] sequence is considered by the [comp]Selector[/comp]. This sequence can be selected several times in a row as long as the Probability decorator permits it. The [comp]Engage player[/comp] sequence is only executed if Probability returns [FAILURE]." +blackboard_plan = SubResource("BlackboardPlan_46tbn") +root_task = SubResource("BTSelector_y3llm") diff --git a/demo/ai/trees/04_agent_skirmisher.tres b/demo/ai/trees/04_agent_skirmisher.tres new file mode 100644 index 0000000..9b962f7 --- /dev/null +++ b/demo/ai/trees/04_agent_skirmisher.tres @@ -0,0 +1,190 @@ +[gd_resource type="BehaviorTree" load_steps=44 format=3 uid="uid://qqmjvbeibatn"] + +[ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_2883n"] +[ext_resource type="Script" path="res://demo/ai/tasks/select_flanking_pos.gd" id="2_cjso2"] +[ext_resource type="Script" path="res://demo/ai/tasks/pursue.gd" id="2_lpckh"] +[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="3_treio"] +[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="4_57x51"] +[ext_resource type="Script" path="res://demo/ai/tasks/in_range.gd" id="5_p5dih"] +[ext_resource type="Script" path="res://demo/ai/tasks/back_away.gd" id="6_fkv0k"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_46tbn"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" +var/fast_speed/name = &"fast_speed" +var/fast_speed/type = 3 +var/fast_speed/value = 600.0 +var/fast_speed/hint = 1 +var/fast_speed/hint_string = "10,1000,10" +var/slow_speed/name = &"slow_speed" +var/slow_speed/type = 3 +var/slow_speed/value = 300.0 +var/slow_speed/hint = 1 +var/slow_speed/hint_string = "10,1000,10" + +[sub_resource type="BTAction" id="BTAction_ulbrf"] +script = ExtResource("1_2883n") +group = &"player" +output_var = &"target" + +[sub_resource type="BBNode" id="BBNode_nrd4b"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_qiw21"] +animation_player = SubResource("BBNode_nrd4b") +animation_name = &"idle" +blend = 0.1 + +[sub_resource type="BTRandomWait" id="BTRandomWait_xlud8"] +min_duration = 2.0 +max_duration = 3.0 + +[sub_resource type="BTSequence" id="BTSequence_yhjh1"] +custom_name = "Summoning sickness" +children = [SubResource("BTAction_ulbrf"), SubResource("BTPlayAnimation_qiw21"), SubResource("BTRandomWait_xlud8")] + +[sub_resource type="BTRunLimit" id="BTRunLimit_tq3e1"] +children = [SubResource("BTSequence_yhjh1")] + +[sub_resource type="BTCondition" id="BTCondition_uk4dg"] +script = ExtResource("5_p5dih") +distance_min = 0.0 +distance_max = 300.0 +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_7c0g0"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_sty80"] +animation_player = SubResource("BBNode_7c0g0") +animation_name = &"walk" +blend = 0.1 +speed = 1.2 + +[sub_resource type="BTAction" id="BTAction_jryg6"] +script = ExtResource("2_lpckh") +target_var = &"target" +speed_var = &"speed" +approach_distance = 100.0 + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_lkphr"] +time_limit = 1.0 +children = [SubResource("BTAction_jryg6")] + +[sub_resource type="BTAction" id="BTAction_kidxn"] +script = ExtResource("4_57x51") +target_var = &"target" + +[sub_resource type="BTWait" id="BTWait_tadkc"] +duration = 0.2 + +[sub_resource type="BBNode" id="BBNode_kcqly"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_hngi6"] +await_completion = 2.0 +animation_player = SubResource("BBNode_kcqly") +animation_name = &"attack_3" + +[sub_resource type="BTWait" id="BTWait_cm8jy"] +duration = 0.5 + +[sub_resource type="BTSequence" id="BTSequence_ww5v2"] +custom_name = "Melee attack" +children = [SubResource("BTCondition_uk4dg"), SubResource("BTPlayAnimation_sty80"), SubResource("BTTimeLimit_lkphr"), SubResource("BTAction_kidxn"), SubResource("BTWait_tadkc"), SubResource("BTPlayAnimation_hngi6"), SubResource("BTWait_cm8jy")] + +[sub_resource type="BTCooldown" id="BTCooldown_ksvfy"] +duration = 2.0 +children = [SubResource("BTSequence_ww5v2")] + +[sub_resource type="BTCondition" id="BTCondition_fpufi"] +script = ExtResource("5_p5dih") +distance_min = 0.0 +distance_max = 300.0 +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_3iqcf"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_ee0ff"] +animation_player = SubResource("BBNode_3iqcf") +animation_name = &"walk" +blend = 0.1 +speed = -0.7 + +[sub_resource type="BTAction" id="BTAction_4ye2y"] +script = ExtResource("6_fkv0k") +speed_var = &"slow_speed" +max_angle_deviation = 0.7 + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_cns1i"] +time_limit = 1.5 +children = [SubResource("BTAction_4ye2y")] + +[sub_resource type="BTAlwaysSucceed" id="BTAlwaysSucceed_nw4ep"] +children = [SubResource("BTTimeLimit_cns1i")] + +[sub_resource type="BBNode" id="BBNode_81x7t"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_e61er"] +animation_player = SubResource("BBNode_81x7t") +animation_name = &"idle" +blend = 0.1 + +[sub_resource type="BTRandomWait" id="BTRandomWait_jw0cm"] + +[sub_resource type="BTSequence" id="BTSequence_y12eg"] +custom_name = "Disengage" +children = [SubResource("BTCondition_fpufi"), SubResource("BTPlayAnimation_ee0ff"), SubResource("BTAlwaysSucceed_nw4ep"), SubResource("BTPlayAnimation_e61er"), SubResource("BTRandomWait_jw0cm")] + +[sub_resource type="BBNode" id="BBNode_wpj6d"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_olf37"] +animation_player = SubResource("BBNode_wpj6d") +animation_name = &"walk" +blend = 0.1 +speed = 1.2 + +[sub_resource type="BTAction" id="BTAction_g5ayy"] +script = ExtResource("2_cjso2") +target_var = &"target" +flank_side = 2 +range_min = 90 +range_max = 90 +position_var = &"flank_pos" + +[sub_resource type="BTAction" id="BTAction_tv4lt"] +script = ExtResource("3_treio") +target_position_var = &"flank_pos" +speed_var = &"fast_speed" +tolerance = 50.0 +avoid_var = &"target" + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_xek5v"] +children = [SubResource("BTAction_tv4lt")] + +[sub_resource type="BTSequence" id="BTSequence_rgwic"] +custom_name = "Flank from behind" +children = [SubResource("BTPlayAnimation_olf37"), SubResource("BTAction_g5ayy"), SubResource("BTTimeLimit_xek5v")] + +[sub_resource type="BTSelector" id="BTSelector_2jnau"] +children = [SubResource("BTRunLimit_tq3e1"), SubResource("BTCooldown_ksvfy"), SubResource("BTSequence_y12eg"), SubResource("BTSequence_rgwic")] + +[resource] +description = "Like actions, conditions do not contain child tasks within them. Instead, they evaluate specific criteria and return either a [SUCCESS] or [FAILURE] based on the agent's or environment's state (for example, \"IsLowOnHealth\", \"IsTargetInSight\"). Conditions are commonly employed alongside sequences to interrupt their execution if a particular requirement is not met. + +In our example, if the target is not within the specified range, the [con]InRange[/con] condition will return [FAILURE], causing the [comp]sequence[/comp] to be aborted. +" +blackboard_plan = SubResource("BlackboardPlan_46tbn") +root_task = SubResource("BTSelector_2jnau") diff --git a/demo/ai/trees/05_agent_ranged.tres b/demo/ai/trees/05_agent_ranged.tres new file mode 100644 index 0000000..b41517c --- /dev/null +++ b/demo/ai/trees/05_agent_ranged.tres @@ -0,0 +1,182 @@ +[gd_resource type="BehaviorTree" load_steps=41 format=3 uid="uid://cqluon1y1hnn5"] + +[ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_4xk1i"] +[ext_resource type="Script" path="res://demo/ai/tasks/is_aligned_with_target.gd" id="2_a8qex"] +[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="3_q4r2p"] +[ext_resource type="Script" path="res://demo/ai/tasks/select_flanking_pos.gd" id="4_53hao"] +[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="5_aexyq"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_46tbn"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" +var/run_speed/name = &"run_speed" +var/run_speed/type = 3 +var/run_speed/value = 600.0 +var/run_speed/hint = 1 +var/run_speed/hint_string = "10,1000,10" + +[sub_resource type="BBNode" id="BBNode_nrd4b"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_qiw21"] +animation_player = SubResource("BBNode_nrd4b") +animation_name = &"idle" +blend = 0.1 + +[sub_resource type="BTRandomWait" id="BTRandomWait_xlud8"] +min_duration = 0.7 +max_duration = 1.5 + +[sub_resource type="BTAction" id="BTAction_c4cxo"] +script = ExtResource("1_4xk1i") +group = &"player" +output_var = &"target" + +[sub_resource type="BTSequence" id="BTSequence_yhjh1"] +custom_name = "Take a break" +children = [SubResource("BTPlayAnimation_qiw21"), SubResource("BTRandomWait_xlud8"), SubResource("BTAction_c4cxo")] + +[sub_resource type="BBNode" id="BBNode_ok0r5"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_unftu"] +animation_player = SubResource("BBNode_ok0r5") +animation_name = &"walk" +blend = 0.1 +speed = 1.5 + +[sub_resource type="BTAction" id="BTAction_op6l6"] +script = ExtResource("4_53hao") +target_var = &"target" +flank_side = 1 +range_min = 400 +range_max = 1000 +position_var = &"pos" + +[sub_resource type="BTAction" id="BTAction_ycjun"] +script = ExtResource("3_q4r2p") +target_position_var = &"pos" +speed_var = &"run_speed" +tolerance = 50.0 +avoid_var = &"target" + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_gadc6"] +time_limit = 7.0 +children = [SubResource("BTAction_ycjun")] + +[sub_resource type="BTAction" id="BTAction_poqpu"] +script = ExtResource("5_aexyq") +target_var = &"target" + +[sub_resource type="BTSequence" id="BTSequence_0gdqn"] +custom_name = "Change flank" +children = [SubResource("BTPlayAnimation_unftu"), SubResource("BTAction_op6l6"), SubResource("BTTimeLimit_gadc6"), SubResource("BTAction_poqpu")] + +[sub_resource type="BTCooldown" id="BTCooldown_2lneu"] +duration = 7.0 +children = [SubResource("BTSequence_0gdqn")] + +[sub_resource type="BTProbability" id="BTProbability_6sydk"] +run_chance = 0.3 +children = [SubResource("BTCooldown_2lneu")] + +[sub_resource type="BTAction" id="BTAction_kuuw2"] +script = ExtResource("4_53hao") +target_var = &"target" +flank_side = 0 +range_min = 400 +range_max = 1000 +position_var = &"shoot_pos" + +[sub_resource type="BBNode" id="BBNode_kc64r"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_panch"] +animation_player = SubResource("BBNode_kc64r") +animation_name = &"walk" +blend = 0.1 + +[sub_resource type="BTAction" id="BTAction_66hsk"] +script = ExtResource("3_q4r2p") +target_position_var = &"shoot_pos" +speed_var = &"speed" +tolerance = 50.0 +avoid_var = &"" + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_24ath"] +children = [SubResource("BTAction_66hsk")] + +[sub_resource type="BTAction" id="BTAction_enw2m"] +script = ExtResource("5_aexyq") +target_var = &"target" + +[sub_resource type="BTCondition" id="BTCondition_1fnyc"] +script = ExtResource("2_a8qex") +target_var = &"target" +tolerance = 150.0 + +[sub_resource type="BBNode" id="BBNode_s6vt4"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_qa8jy"] +animation_player = SubResource("BBNode_s6vt4") +animation_name = &"throw_prepare" +blend = 0.1 + +[sub_resource type="BTWait" id="BTWait_gbcyb"] + +[sub_resource type="BBNode" id="BBNode_qkfqt"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_0ktds"] +await_completion = 1.0 +animation_player = SubResource("BBNode_qkfqt") +animation_name = &"throw" +blend = 0.05 + +[sub_resource type="BBNode" id="BBNode_1yxc5"] +saved_value = NodePath(".") +resource_name = "." + +[sub_resource type="BTCallMethod" id="BTCallMethod_yx4fk"] +node = SubResource("BBNode_1yxc5") +method = &"throw_ninja_star" + +[sub_resource type="BTWait" id="BTWait_d2ib4"] +duration = 0.2 + +[sub_resource type="BTSequence" id="BTSequence_rgbq3"] +custom_name = "Throw ninja star" +children = [SubResource("BTPlayAnimation_qa8jy"), SubResource("BTWait_gbcyb"), SubResource("BTPlayAnimation_0ktds"), SubResource("BTCallMethod_yx4fk"), SubResource("BTWait_d2ib4")] +metadata/_weight_ = 1.0 + +[sub_resource type="BTRepeat" id="BTRepeat_g08ia"] +times = 3 +children = [SubResource("BTSequence_rgbq3")] + +[sub_resource type="BTSequence" id="BTSequence_lhg7f"] +custom_name = "Get into position" +children = [SubResource("BTAction_kuuw2"), SubResource("BTPlayAnimation_panch"), SubResource("BTTimeLimit_24ath"), SubResource("BTAction_enw2m"), SubResource("BTCondition_1fnyc"), SubResource("BTRepeat_g08ia")] +metadata/_weight_ = 1.0 + +[sub_resource type="BTSelector" id="BTSelector_1rrya"] +children = [SubResource("BTProbability_6sydk"), SubResource("BTSequence_lhg7f")] + +[sub_resource type="BTSequence" id="BTSequence_pxl2k"] +custom_name = "Main" +children = [SubResource("BTSequence_yhjh1"), SubResource("BTSelector_1rrya")] + +[resource] +description = "Here, the [dec]Probability[/dec] decorator permits the execution of its branch in 30% of cases. This introduces a slight variation to the behavior each time the \"Change flank\" sequence is considered by the [comp]Selector[/comp]. + +The [dec]Repeat[/dec] decorator is handy for doing something multiple times within a behavior tree. In our example, it's used to make the [comp]Throw ninja star[/comp] sequence perform three times in a row." +blackboard_plan = SubResource("BlackboardPlan_46tbn") +root_task = SubResource("BTSequence_pxl2k") diff --git a/demo/ai/trees/06_agent_melee_combo.tres b/demo/ai/trees/06_agent_melee_combo.tres new file mode 100644 index 0000000..c8db52e --- /dev/null +++ b/demo/ai/trees/06_agent_melee_combo.tres @@ -0,0 +1,163 @@ +[gd_resource type="BehaviorTree" load_steps=39 format=3 uid="uid://cpncl1db8j12f"] + +[ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_sf4l8"] +[ext_resource type="Script" path="res://demo/ai/tasks/select_flanking_pos.gd" id="2_5nwkp"] +[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="3_3tom2"] +[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="4_hi228"] +[ext_resource type="Script" path="res://demo/ai/tasks/move_forward.gd" id="5_au5yc"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_46tbn"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" +var/charge_speed/name = &"charge_speed" +var/charge_speed/type = 3 +var/charge_speed/value = 1000.0 +var/charge_speed/hint = 0 +var/charge_speed/hint_string = "" + +[sub_resource type="BBNode" id="BBNode_nrd4b"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_qiw21"] +animation_player = SubResource("BBNode_nrd4b") +animation_name = &"idle" +blend = 0.1 + +[sub_resource type="BTRandomWait" id="BTRandomWait_xlud8"] +min_duration = 0.7 +max_duration = 1.5 + +[sub_resource type="BTAction" id="BTAction_ulbrf"] +script = ExtResource("1_sf4l8") +group = &"player" +output_var = &"target" + +[sub_resource type="BTSequence" id="BTSequence_yhjh1"] +custom_name = "Pause before action" +children = [SubResource("BTPlayAnimation_qiw21"), SubResource("BTRandomWait_xlud8"), SubResource("BTAction_ulbrf")] + +[sub_resource type="BTAction" id="BTAction_85keo"] +script = ExtResource("2_5nwkp") +target_var = &"target" +flank_side = 0 +range_min = 300 +range_max = 400 +position_var = &"pos" + +[sub_resource type="BBNode" id="BBNode_wpj6d"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_olf37"] +animation_player = SubResource("BBNode_wpj6d") +animation_name = &"walk" +blend = 0.1 + +[sub_resource type="BTAction" id="BTAction_ygjnc"] +script = ExtResource("3_3tom2") +target_position_var = &"pos" +speed_var = &"speed" +tolerance = 50.0 +avoid_var = &"" + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_xek5v"] +children = [SubResource("BTAction_ygjnc")] + +[sub_resource type="BTSequence" id="BTSequence_1xfnq"] +custom_name = "Align with player" +children = [SubResource("BTAction_85keo"), SubResource("BTPlayAnimation_olf37"), SubResource("BTTimeLimit_xek5v")] + +[sub_resource type="BTAction" id="BTAction_kidxn"] +script = ExtResource("4_hi228") +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_giv5l"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_usdja"] +animation_player = SubResource("BBNode_giv5l") +animation_name = &"idle" +blend = 0.1 + +[sub_resource type="BTWait" id="BTWait_tadkc"] +duration = 0.4 + +[sub_resource type="BBNode" id="BBNode_s8evu"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_ppmxd"] +await_completion = 2.0 +animation_player = SubResource("BBNode_s8evu") +animation_name = &"attack_1" + +[sub_resource type="BTAction" id="BTAction_u22bc"] +script = ExtResource("5_au5yc") +speed_var = &"charge_speed" +duration = 0.1 + +[sub_resource type="BTParallel" id="BTParallel_ec2e3"] +num_successes_required = 2 +children = [SubResource("BTPlayAnimation_ppmxd"), SubResource("BTAction_u22bc")] + +[sub_resource type="BTWait" id="BTWait_c0lo0"] +duration = 0.2 + +[sub_resource type="BBNode" id="BBNode_3oljv"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_q4uis"] +await_completion = 2.0 +animation_player = SubResource("BBNode_3oljv") +animation_name = &"attack_2" + +[sub_resource type="BTAction" id="BTAction_yuxl3"] +script = ExtResource("5_au5yc") +speed_var = &"charge_speed" +duration = 0.1 + +[sub_resource type="BTParallel" id="BTParallel_thojy"] +num_successes_required = 2 +children = [SubResource("BTPlayAnimation_q4uis"), SubResource("BTAction_yuxl3")] + +[sub_resource type="BTWait" id="BTWait_y3pmv"] +duration = 0.2 + +[sub_resource type="BBNode" id="BBNode_ot40l"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_ye5pt"] +await_completion = 2.0 +animation_player = SubResource("BBNode_ot40l") +animation_name = &"attack_3" + +[sub_resource type="BTAction" id="BTAction_rwp18"] +script = ExtResource("5_au5yc") +speed_var = &"charge_speed" +duration = 0.1 + +[sub_resource type="BTParallel" id="BTParallel_qmdfb"] +num_successes_required = 2 +children = [SubResource("BTPlayAnimation_ye5pt"), SubResource("BTAction_rwp18")] + +[sub_resource type="BTWait" id="BTWait_nxyko"] +duration = 0.5 + +[sub_resource type="BTSequence" id="BTSequence_ww5v2"] +custom_name = "Combo Melee attack" +children = [SubResource("BTAction_kidxn"), SubResource("BTPlayAnimation_usdja"), SubResource("BTWait_tadkc"), SubResource("BTParallel_ec2e3"), SubResource("BTWait_c0lo0"), SubResource("BTParallel_thojy"), SubResource("BTWait_y3pmv"), SubResource("BTParallel_qmdfb"), SubResource("BTWait_nxyko")] + +[sub_resource type="BTSequence" id="BTSequence_pxl2k"] +children = [SubResource("BTSequence_yhjh1"), SubResource("BTSequence_1xfnq"), SubResource("BTSequence_ww5v2")] + +[resource] +description = "In some scenarios, you might need to execute multiple tasks at the same time until specific conditions are fulfilled. To achieve this, the [comp]Parallel[/comp] composite is an invaluable tool. This composite task allows its children to be executed simultaneously during each tick until a specified number of successes or failures is reached. In this example, it will execute both the [act]PlayAnimation[/act] and [act]MoveForward[/act] actions each tick until both actions have finished with a [SUCCESS] status." +blackboard_plan = SubResource("BlackboardPlan_46tbn") +root_task = SubResource("BTSequence_pxl2k") diff --git a/demo/ai/trees/07_agent_melee_nuanced.tres b/demo/ai/trees/07_agent_melee_nuanced.tres new file mode 100644 index 0000000..cc3bdb3 --- /dev/null +++ b/demo/ai/trees/07_agent_melee_nuanced.tres @@ -0,0 +1,219 @@ +[gd_resource type="BehaviorTree" load_steps=49 format=3 uid="uid://c2u6sljqkim0n"] + +[ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_08fik"] +[ext_resource type="Script" path="res://demo/ai/tasks/select_flanking_pos.gd" id="2_te3yo"] +[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="3_svwk8"] +[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="4_mvsyw"] +[ext_resource type="Script" path="res://demo/ai/tasks/pursue.gd" id="5_r1ou0"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_46tbn"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" +var/flank_speed/name = &"flank_speed" +var/flank_speed/type = 3 +var/flank_speed/value = 600.0 +var/flank_speed/hint = 1 +var/flank_speed/hint_string = "10,1000,10" + +[sub_resource type="BBNode" id="BBNode_nrd4b"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_qiw21"] +animation_player = SubResource("BBNode_nrd4b") +animation_name = &"idle" +blend = 0.1 + +[sub_resource type="BTRandomWait" id="BTRandomWait_xlud8"] +min_duration = 0.7 +max_duration = 1.5 + +[sub_resource type="BTAction" id="BTAction_c4cxo"] +script = ExtResource("1_08fik") +group = &"player" +output_var = &"target" + +[sub_resource type="BTSequence" id="BTSequence_yhjh1"] +custom_name = "Pause before action" +children = [SubResource("BTPlayAnimation_qiw21"), SubResource("BTRandomWait_xlud8"), SubResource("BTAction_c4cxo")] + +[sub_resource type="BBNode" id="BBNode_kc64r"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_panch"] +animation_player = SubResource("BBNode_kc64r") +animation_name = &"walk" +blend = 0.1 +speed = 1.5 + +[sub_resource type="BTAction" id="BTAction_6e48s"] +script = ExtResource("2_te3yo") +target_var = &"target" +flank_side = 1 +range_min = 400 +range_max = 600 +position_var = &"flank_pos" + +[sub_resource type="BTAction" id="BTAction_66hsk"] +script = ExtResource("3_svwk8") +target_position_var = &"flank_pos" +speed_var = &"flank_speed" +tolerance = 50.0 +avoid_var = &"target" + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_24ath"] +children = [SubResource("BTAction_66hsk")] + +[sub_resource type="BTAction" id="BTAction_enw2m"] +script = ExtResource("4_mvsyw") +target_var = &"target" + +[sub_resource type="BTSequence" id="BTSequence_lhg7f"] +custom_name = "Flank player" +children = [SubResource("BTPlayAnimation_panch"), SubResource("BTAction_6e48s"), SubResource("BTTimeLimit_24ath"), SubResource("BTAction_enw2m")] +metadata/_weight_ = 1.0 + +[sub_resource type="BTCooldown" id="BTCooldown_skw41"] +duration = 6.0 +children = [SubResource("BTSequence_lhg7f")] +metadata/_weight_ = 2.0 + +[sub_resource type="BBNode" id="BBNode_wpj6d"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_olf37"] +animation_player = SubResource("BBNode_wpj6d") +animation_name = &"walk" +blend = 0.1 + +[sub_resource type="BTAction" id="BTAction_a4jqi"] +script = ExtResource("5_r1ou0") +target_var = &"target" +speed_var = &"speed" +approach_distance = 100.0 + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_xek5v"] +time_limit = 2.0 +children = [SubResource("BTAction_a4jqi")] + +[sub_resource type="BTAction" id="BTAction_kidxn"] +script = ExtResource("4_mvsyw") +target_var = &"target" + +[sub_resource type="BTWait" id="BTWait_tadkc"] +duration = 0.1 + +[sub_resource type="BBNode" id="BBNode_g8qww"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_a8yqu"] +await_completion = 2.0 +animation_player = SubResource("BBNode_g8qww") +animation_name = &"attack_2" + +[sub_resource type="BTWait" id="BTWait_vjstl"] +duration = 0.1 + +[sub_resource type="BBNode" id="BBNode_rfop0"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_8oyw6"] +await_completion = 2.0 +animation_player = SubResource("BBNode_rfop0") +animation_name = &"attack_3" + +[sub_resource type="BTSequence" id="BTSequence_1xfnq"] +custom_name = "Approach and melee attack" +children = [SubResource("BTPlayAnimation_olf37"), SubResource("BTTimeLimit_xek5v"), SubResource("BTAction_kidxn"), SubResource("BTWait_tadkc"), SubResource("BTPlayAnimation_a8yqu"), SubResource("BTWait_vjstl"), SubResource("BTPlayAnimation_8oyw6")] +metadata/_weight_ = 4.0 + +[sub_resource type="BTAction" id="BTAction_mf87t"] +script = ExtResource("2_te3yo") +target_var = &"target" +flank_side = 0 +range_min = 350 +range_max = 600 +position_var = &"pos" + +[sub_resource type="BBNode" id="BBNode_cx111"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_mfbeu"] +animation_player = SubResource("BBNode_cx111") +animation_name = &"walk" +blend = 0.1 + +[sub_resource type="BTAction" id="BTAction_6nx58"] +script = ExtResource("3_svwk8") +target_position_var = &"pos" +speed_var = &"speed" +tolerance = 50.0 +avoid_var = &"" + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_tidwl"] +time_limit = 3.0 +children = [SubResource("BTAction_6nx58")] + +[sub_resource type="BTAction" id="BTAction_8q20y"] +script = ExtResource("4_mvsyw") +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_s6vt4"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_qa8jy"] +animation_player = SubResource("BBNode_s6vt4") +animation_name = &"throw_prepare" +blend = 0.1 +speed = 0.7 + +[sub_resource type="BTWait" id="BTWait_gbcyb"] + +[sub_resource type="BBNode" id="BBNode_qkfqt"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_0ktds"] +await_completion = 1.0 +animation_player = SubResource("BBNode_qkfqt") +animation_name = &"throw" +blend = 0.05 + +[sub_resource type="BBNode" id="BBNode_1yxc5"] +saved_value = NodePath(".") +resource_name = "." + +[sub_resource type="BTCallMethod" id="BTCallMethod_yx4fk"] +node = SubResource("BBNode_1yxc5") +method = &"throw_ninja_star" + +[sub_resource type="BTRandomWait" id="BTRandomWait_2pmoe"] +max_duration = 1.5 + +[sub_resource type="BTSequence" id="BTSequence_rgbq3"] +custom_name = "Throw ninja star" +children = [SubResource("BTAction_mf87t"), SubResource("BTPlayAnimation_mfbeu"), SubResource("BTTimeLimit_tidwl"), SubResource("BTAction_8q20y"), SubResource("BTPlayAnimation_qa8jy"), SubResource("BTWait_gbcyb"), SubResource("BTPlayAnimation_0ktds"), SubResource("BTCallMethod_yx4fk"), SubResource("BTRandomWait_2pmoe")] +metadata/_weight_ = 2.0 + +[sub_resource type="BTProbabilitySelector" id="BTProbabilitySelector_rjsiq"] +abort_on_failure = true +children = [SubResource("BTCooldown_skw41"), SubResource("BTSequence_1xfnq"), SubResource("BTSequence_rgbq3")] + +[sub_resource type="BTSequence" id="BTSequence_pxl2k"] +custom_name = "Main" +children = [SubResource("BTSequence_yhjh1"), SubResource("BTProbabilitySelector_rjsiq")] + +[resource] +description = "[comp]ProbabilitySelector[/comp] chooses a child task to execute based on attached probabilities. Probability distribution is calculated based on weights assigned to each child task. +" +blackboard_plan = SubResource("BlackboardPlan_46tbn") +root_task = SubResource("BTSequence_pxl2k") diff --git a/demo/ai/trees/08_agent_demon.tres b/demo/ai/trees/08_agent_demon.tres new file mode 100644 index 0000000..47369ce --- /dev/null +++ b/demo/ai/trees/08_agent_demon.tres @@ -0,0 +1,200 @@ +[gd_resource type="BehaviorTree" load_steps=49 format=3 uid="uid://cpcnbi81jqge4"] + +[ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_ce4la"] +[ext_resource type="Script" path="res://demo/ai/tasks/in_range.gd" id="2_atyuj"] +[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="3_3mw7l"] +[ext_resource type="Script" path="res://demo/ai/tasks/back_away.gd" id="4_6dr32"] +[ext_resource type="Script" path="res://demo/ai/tasks/select_flanking_pos.gd" id="5_dho0d"] +[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="6_0pfsl"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_8ay3j"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" + +[sub_resource type="BBNode" id="BBNode_lpri5"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_p3e7a"] +animation_player = SubResource("BBNode_lpri5") +animation_name = &"idle" +blend = 0.1 + +[sub_resource type="BTRandomWait" id="BTRandomWait_j6cjm"] +min_duration = 2.0 +max_duration = 3.0 + +[sub_resource type="BTSequence" id="BTSequence_5thv4"] +custom_name = "Chill" +children = [SubResource("BTPlayAnimation_p3e7a"), SubResource("BTRandomWait_j6cjm")] + +[sub_resource type="BTCooldown" id="BTCooldown_oms7a"] +trigger_on_failure = true +children = [SubResource("BTSequence_5thv4")] + +[sub_resource type="BTAction" id="BTAction_ohfp7"] +script = ExtResource("1_ce4la") +group = &"player" +output_var = &"target" + +[sub_resource type="BTCondition" id="BTCondition_7a5nv"] +script = ExtResource("2_atyuj") +distance_min = 0.0 +distance_max = 150.0 +target_var = &"target" + +[sub_resource type="BTAction" id="BTAction_ddvrs"] +script = ExtResource("3_3mw7l") +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_c4nfu"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_yytkn"] +await_completion = 3.0 +animation_player = SubResource("BBNode_c4nfu") +animation_name = &"attack_3" +blend = 0.1 + +[sub_resource type="BTCooldown" id="BTCooldown_ejg6q"] +duration = 3.0 +children = [SubResource("BTPlayAnimation_yytkn")] + +[sub_resource type="BTSequence" id="BTSequence_eikr4"] +custom_name = "Melee" +children = [SubResource("BTAction_ohfp7"), SubResource("BTCondition_7a5nv"), SubResource("BTAction_ddvrs"), SubResource("BTCooldown_ejg6q")] + +[sub_resource type="BTCondition" id="BTCondition_h75v8"] +script = ExtResource("2_atyuj") +distance_min = 0.0 +distance_max = 300.0 +target_var = &"target" + +[sub_resource type="BTAction" id="BTAction_wpt7j"] +script = ExtResource("3_3mw7l") +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_iv62h"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_wnaul"] +animation_player = SubResource("BBNode_iv62h") +animation_name = &"walk" +blend = 0.1 +speed = -1.0 + +[sub_resource type="BTAction" id="BTAction_h2efl"] +script = ExtResource("4_6dr32") +speed_var = &"speed" +max_angle_deviation = 0.7 + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_wm5g2"] +time_limit = 1.0 +children = [SubResource("BTAction_h2efl")] + +[sub_resource type="BTSequence" id="BTSequence_wh4dl"] +custom_name = "Back away" +children = [SubResource("BTCondition_h75v8"), SubResource("BTAction_wpt7j"), SubResource("BTPlayAnimation_wnaul"), SubResource("BTTimeLimit_wm5g2")] + +[sub_resource type="BTComment" id="BTComment_mqte5"] +custom_name = "Get into position" + +[sub_resource type="BBNode" id="BBNode_edmui"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_vjtpq"] +animation_player = SubResource("BBNode_edmui") +animation_name = &"walk" +blend = 0.1 + +[sub_resource type="BTAction" id="BTAction_4mmh0"] +script = ExtResource("5_dho0d") +target_var = &"target" +flank_side = 0 +range_min = 300 +range_max = 700 +position_var = &"pos" + +[sub_resource type="BTAction" id="BTAction_vb5c3"] +script = ExtResource("6_0pfsl") +target_position_var = &"pos" +speed_var = &"speed" +tolerance = 50.0 +avoid_var = &"" + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_jyks2"] +children = [SubResource("BTAction_vb5c3")] + +[sub_resource type="BTComment" id="BTComment_ym6nj"] +custom_name = "Short break before action" + +[sub_resource type="BTAction" id="BTAction_fkevy"] +script = ExtResource("3_3mw7l") +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_lh25u"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_vcjeq"] +animation_player = SubResource("BBNode_lh25u") +animation_name = &"idle" +blend = 0.1 + +[sub_resource type="BTWait" id="BTWait_42smh"] +duration = 0.2 + +[sub_resource type="BTComment" id="BTComment_nbp2b"] +custom_name = "Spit fire!" + +[sub_resource type="BBNode" id="BBNode_cqw71"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_214yn"] +await_completion = 3.0 +animation_player = SubResource("BBNode_cqw71") +animation_name = &"spit" +blend = 0.1 + +[sub_resource type="BBNode" id="BBNode_dv5b5"] +saved_value = NodePath(".") +resource_name = "." + +[sub_resource type="BTCallMethod" id="BTCallMethod_lk7i6"] +node = SubResource("BBNode_dv5b5") +method = &"spit_fire" + +[sub_resource type="BTComment" id="BTComment_fndxk"] +custom_name = "Wind down" + +[sub_resource type="BBNode" id="BBNode_m68ui"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_m7gyp"] +animation_player = SubResource("BBNode_m68ui") +animation_name = &"idle" +blend = 0.1 + +[sub_resource type="BTRandomWait" id="BTRandomWait_v0el8"] +min_duration = 0.7 +max_duration = 1.5 + +[sub_resource type="BTSequence" id="BTSequence_djtph"] +custom_name = "Spit fire" +children = [SubResource("BTComment_mqte5"), SubResource("BTPlayAnimation_vjtpq"), SubResource("BTAction_4mmh0"), SubResource("BTTimeLimit_jyks2"), SubResource("BTComment_ym6nj"), SubResource("BTAction_fkevy"), SubResource("BTPlayAnimation_vcjeq"), SubResource("BTWait_42smh"), SubResource("BTComment_nbp2b"), SubResource("BTPlayAnimation_214yn"), SubResource("BTCallMethod_lk7i6"), SubResource("BTComment_fndxk"), SubResource("BTPlayAnimation_m7gyp"), SubResource("BTRandomWait_v0el8")] + +[sub_resource type="BTSelector" id="BTSelector_feba6"] +children = [SubResource("BTCooldown_oms7a"), SubResource("BTSequence_eikr4"), SubResource("BTSequence_wh4dl"), SubResource("BTSequence_djtph")] + +[resource] +description = "Here, we use the [con]InRange[/con] condition task together with [comp]Sequence[/comp] and [comp]Selector[/comp] to create a reactive behavior for this agent. When the player comes close, this agent will attempt to hit them with a melee attack and move away afterward for a better ranged position." +blackboard_plan = SubResource("BlackboardPlan_8ay3j") +root_task = SubResource("BTSelector_feba6") diff --git a/demo/ai/trees/09_agent_summoner.tres b/demo/ai/trees/09_agent_summoner.tres new file mode 100644 index 0000000..e5cfbe2 --- /dev/null +++ b/demo/ai/trees/09_agent_summoner.tres @@ -0,0 +1,155 @@ +[gd_resource type="BehaviorTree" load_steps=35 format=3 uid="uid://cpxk7jnqpwwlc"] + +[ext_resource type="Script" path="res://demo/ai/tasks/select_random_nearby_pos.gd" id="1_sgn0p"] +[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="2_pshl2"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_58oq1"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 300.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" +var/summon_cooldown/name = &"summon_cooldown" +var/summon_cooldown/type = 1 +var/summon_cooldown/value = false +var/summon_cooldown/hint = 0 +var/summon_cooldown/hint_string = "" + +[sub_resource type="BBNode" id="BBNode_b7euf"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_sot6a"] +animation_player = SubResource("BBNode_b7euf") +animation_name = &"idle" +blend = 0.1 + +[sub_resource type="BTRandomWait" id="BTRandomWait_0wc6p"] + +[sub_resource type="BTSequence" id="BTSequence_kwkxc"] +custom_name = "Summoning sickness" +children = [SubResource("BTPlayAnimation_sot6a"), SubResource("BTRandomWait_0wc6p")] + +[sub_resource type="BTRunLimit" id="BTRunLimit_x2jr4"] +children = [SubResource("BTSequence_kwkxc")] + +[sub_resource type="BBVariant" id="BBVariant_y3x7n"] +type = 2 +saved_value = 6 +resource_name = "6" + +[sub_resource type="BTCheckAgentProperty" id="BTCheckAgentProperty_olmdj"] +property = &"summon_count" +check_type = 1 +value = SubResource("BBVariant_y3x7n") + +[sub_resource type="BTComment" id="BTComment_ef6y0"] +custom_name = "Variable $summon_cooldown is updated by the Cooldown task below" + +[sub_resource type="BBVariant" id="BBVariant_hgde2"] +type = 1 +saved_value = false +resource_name = "false" + +[sub_resource type="BTCheckVar" id="BTCheckVar_hc3o3"] +variable = &"summon_cooldown" +value = SubResource("BBVariant_hgde2") +children = [SubResource("BTComment_ef6y0")] + +[sub_resource type="BBNode" id="BBNode_q8bei"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_6leni"] +animation_player = SubResource("BBNode_q8bei") +animation_name = &"summon" +blend = 0.1 + +[sub_resource type="BTWait" id="BTWait_8og18"] +duration = 0.5 + +[sub_resource type="BTAction" id="BTAction_yeyns"] +script = ExtResource("1_sgn0p") +range_min = 300.0 +range_max = 500.0 +position_var = &"minion_pos" + +[sub_resource type="BBVariant" id="BBVariant_wfjwy"] +type = 5 +value_source = 1 +variable = &"minion_pos" +resource_name = "$minion_pos" + +[sub_resource type="BBNode" id="BBNode_v271m"] +saved_value = NodePath(".") +resource_name = "." + +[sub_resource type="BTCallMethod" id="BTCallMethod_4ath5"] +node = SubResource("BBNode_v271m") +method = &"summon_minion" +args = Array[BBVariant]([SubResource("BBVariant_wfjwy")]) + +[sub_resource type="BTCooldown" id="BTCooldown_25f70"] +duration = 6.0 +cooldown_state_var = &"summon_cooldown" +children = [SubResource("BTCallMethod_4ath5")] + +[sub_resource type="BTWait" id="BTWait_tdhfn"] + +[sub_resource type="BTSequence" id="BTSequence_2n742"] +custom_name = "Summon minion" +children = [SubResource("BTCheckAgentProperty_olmdj"), SubResource("BTCheckVar_hc3o3"), SubResource("BTPlayAnimation_6leni"), SubResource("BTWait_8og18"), SubResource("BTAction_yeyns"), SubResource("BTCooldown_25f70"), SubResource("BTWait_tdhfn")] + +[sub_resource type="BTAction" id="BTAction_33wje"] +script = ExtResource("1_sgn0p") +range_min = 300.0 +range_max = 700.0 +position_var = &"pos" + +[sub_resource type="BBNode" id="BBNode_w5fh2"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_qbxm8"] +animation_player = SubResource("BBNode_w5fh2") +animation_name = &"walk" +blend = 0.1 + +[sub_resource type="BTAction" id="BTAction_dfifw"] +script = ExtResource("2_pshl2") +target_position_var = &"pos" +speed_var = &"speed" +tolerance = 50.0 +avoid_var = &"" + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_i05cm"] +time_limit = 3.0 +children = [SubResource("BTAction_dfifw")] + +[sub_resource type="BBNode" id="BBNode_vinxt"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_t7drr"] +animation_player = SubResource("BBNode_vinxt") +animation_name = &"idle" +blend = 0.1 + +[sub_resource type="BTRandomWait" id="BTRandomWait_axjfh"] + +[sub_resource type="BTSequence" id="BTSequence_ks71q"] +custom_name = "Chill" +children = [SubResource("BTPlayAnimation_t7drr"), SubResource("BTRandomWait_axjfh")] + +[sub_resource type="BTSequence" id="BTSequence_dss4d"] +custom_name = "Reposition" +children = [SubResource("BTAction_33wje"), SubResource("BTPlayAnimation_qbxm8"), SubResource("BTTimeLimit_i05cm"), SubResource("BTSequence_ks71q")] + +[sub_resource type="BTSelector" id="BTSelector_gp6q5"] +children = [SubResource("BTRunLimit_x2jr4"), SubResource("BTSequence_2n742"), SubResource("BTSequence_dss4d")] + +[resource] +description = "[con]CheckAgentProperty[/con] examines the agent’s property value and compares it to a given value or a blackboard variable. In this example, it checks if the [color=cyan]summon_count[/color] property is less than 6. +You can also check or share a [dec]Cooldown[/dec] in different parts of the behavior tree if you provide a blackboard variable for the [dec]Cooldown[/dec] decorator to use. [con]CheckVar[/con] is responsible here for examining the cooldown variable named \"summon_cooldown\"." +blackboard_plan = SubResource("BlackboardPlan_58oq1") +root_task = SubResource("BTSelector_gp6q5") diff --git a/demo/ai/trees/tutorial/tutorial_01_welcome.tres b/demo/ai/trees/tutorial/tutorial_01_welcome.tres new file mode 100644 index 0000000..84f1d04 --- /dev/null +++ b/demo/ai/trees/tutorial/tutorial_01_welcome.tres @@ -0,0 +1,29 @@ +[gd_resource type="BehaviorTree" load_steps=5 format=3 uid="uid://b1mfh8yad7rmw"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" + +[sub_resource type="BBNode" id="BBNode_fq0jf"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_rsejo"] +animation_player = SubResource("BBNode_fq0jf") +animation_name = &"idle" + +[sub_resource type="BTSequence" id="BTSequence_4bq32"] +children = [SubResource("BTPlayAnimation_rsejo")] + +[resource] +description = "Welcome to the [b]LimboAI Tutorial[/b]! + +Here, you'll learn how to use behavior trees to craft AI for your games. We'll start with the basics and gradually move to more advanced topics. Strap in for a quick and engaging introduction to behavior trees. + +Press ➑ button in the top-right corner to proceed. +Press β¬… button any time you want to go back to a previous chapter." +blackboard_plan = SubResource("BlackboardPlan_ewfwq") +root_task = SubResource("BTSequence_4bq32") diff --git a/demo/ai/trees/tutorial/tutorial_02_introduction.tres b/demo/ai/trees/tutorial/tutorial_02_introduction.tres new file mode 100644 index 0000000..985582b --- /dev/null +++ b/demo/ai/trees/tutorial/tutorial_02_introduction.tres @@ -0,0 +1,45 @@ +[gd_resource type="BehaviorTree" load_steps=9 format=3 uid="uid://b1i0xo0o676va"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" +var/flank_speed/name = &"flank_speed" +var/flank_speed/type = 3 +var/flank_speed/value = 600.0 +var/flank_speed/hint = 1 +var/flank_speed/hint_string = "10,1000,10" + +[sub_resource type="BBNode" id="BBNode_wu06u"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_dubaq"] +animation_player = SubResource("BBNode_wu06u") +animation_name = &"idle" + +[sub_resource type="BTWait" id="BTWait_meli1"] +duration = 5.0 + +[sub_resource type="BBNode" id="BBNode_mgehh"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_0fqno"] +animation_player = SubResource("BBNode_mgehh") +animation_name = &"dance" + +[sub_resource type="BTWait" id="BTWait_m3h4o"] +duration = 5.0 + +[sub_resource type="BTSequence" id="BTSequence_rbfdh"] +children = [SubResource("BTPlayAnimation_dubaq"), SubResource("BTWait_meli1"), SubResource("BTPlayAnimation_0fqno"), SubResource("BTWait_m3h4o")] + +[resource] +description = "Behavior trees are designed to simplify the creation of responsive and modular behaviors for games. They consist of tasks that represent specific actions or decision-making rules. Tasks can be broadly categorized into two groups: control tasks and leaf tasks. [b]Control tasks[/b] dictate the execution flow within the tree, while [b]leaf tasks[/b] represent specific actions to perform (such as moving or attacking) or conditions that need to be checked. Typically, it's the leaf tasks that perform the actual work in behavior trees. + +A behavior tree is usually processed each frame (physics frame by default). It is traversed from top to bottom, with the control tasks determining the control flow. Each task has a [color=cyan]_tick[/color] method, which performs the task's work and returns a status indicating its progress: [SUCCESS], [FAILURE], or [RUNNING]. [SUCCESS] and [FAILURE] indicate the outcome of finished work, while [RUNNING] status is returned when a task requires more than one tick to complete its job. These statuses determine how the tree progresses, with the [RUNNING] status usually meaning that the tree will continue execution during the next frame." +blackboard_plan = SubResource("BlackboardPlan_ewfwq") +root_task = SubResource("BTSequence_rbfdh") diff --git a/demo/ai/trees/tutorial/tutorial_03_types.tres b/demo/ai/trees/tutorial/tutorial_03_types.tres new file mode 100644 index 0000000..d63776f --- /dev/null +++ b/demo/ai/trees/tutorial/tutorial_03_types.tres @@ -0,0 +1,97 @@ +[gd_resource type="BehaviorTree" load_steps=24 format=3 uid="uid://cb0ybf24ahnc3"] + +[ext_resource type="Script" path="res://demo/ai/tasks/select_random_nearby_pos.gd" id="1_as4cg"] +[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="2_dlpnp"] +[ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="3_uv18s"] +[ext_resource type="Script" path="res://demo/ai/tasks/in_range.gd" id="4_k3g8t"] +[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="5_thvy5"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" + +[sub_resource type="BBNode" id="BBNode_20ku0"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_57u80"] +animation_player = SubResource("BBNode_20ku0") +animation_name = &"walk" + +[sub_resource type="BTAction" id="BTAction_11xvc"] +script = ExtResource("1_as4cg") +range_min = 300.0 +range_max = 500.0 +position_var = &"pos" + +[sub_resource type="BTAction" id="BTAction_tdkpj"] +script = ExtResource("2_dlpnp") +target_position_var = &"pos" +speed_var = &"speed" +tolerance = 50.0 +avoid_var = &"" + +[sub_resource type="BTSequence" id="BTSequence_echit"] +children = [SubResource("BTPlayAnimation_57u80"), SubResource("BTAction_11xvc"), SubResource("BTAction_tdkpj")] + +[sub_resource type="BTProbability" id="BTProbability_g0ol3"] +children = [SubResource("BTSequence_echit")] + +[sub_resource type="BTAction" id="BTAction_124bm"] +script = ExtResource("3_uv18s") +group = &"player" +output_var = &"target" + +[sub_resource type="BTCondition" id="BTCondition_n25o8"] +script = ExtResource("4_k3g8t") +distance_min = 0.0 +distance_max = 200.0 +target_var = &"target" + +[sub_resource type="BTAction" id="BTAction_1hfgr"] +script = ExtResource("5_thvy5") +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_ilr2h"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_mrsu3"] +animation_player = SubResource("BBNode_ilr2h") +animation_name = &"attack_1" + +[sub_resource type="BTSequence" id="BTSequence_5vug3"] +children = [SubResource("BTAction_124bm"), SubResource("BTCondition_n25o8"), SubResource("BTAction_1hfgr"), SubResource("BTPlayAnimation_mrsu3")] + +[sub_resource type="BBNode" id="BBNode_fq0jf"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_rsejo"] +animation_player = SubResource("BBNode_fq0jf") +animation_name = &"idle" + +[sub_resource type="BTWait" id="BTWait_dl31p"] +duration = 2.0 + +[sub_resource type="BTSequence" id="BTSequence_vx4uy"] +children = [SubResource("BTPlayAnimation_rsejo"), SubResource("BTWait_dl31p")] + +[sub_resource type="BTSelector" id="BTSelector_tdpek"] +children = [SubResource("BTProbability_g0ol3"), SubResource("BTSequence_5vug3"), SubResource("BTSequence_vx4uy")] + +[resource] +description = "There are four types of tasks: +[ul][act]Actions[/act] are leaf tasks that perform the actual work.[/ul] +[ul][con]Conditions[/con] are leaf tasks that conduct various checks.[/ul] +[ul][comp]Composites[/comp] can have one or more child tasks, and dictate the execution flow of their children.[/ul] +[ul][dec]Decorators[/dec] can only have a single child and they change how their child task operates.[/ul] + +Let's take a look into actions first. [act]Actions[/act] are responsible for most of the work and often change the game state in a significant manner. For instance, [act]PlayAnimation[/act] instructs the AnimationPlayer to start a specified animation, with the option to wait for its completion. On the other hand, the [act]Wait[/act] task simply pauses for a set duration before returning [SUCCESS]. + +Next, we'll explore the core composite tasks, such as [comp]Sequence[/comp] and [comp]Selector[/comp]. These are among the most crucial composites that you should know about." +blackboard_plan = SubResource("BlackboardPlan_ewfwq") +root_task = SubResource("BTSelector_tdpek") diff --git a/demo/ai/trees/tutorial/tutorial_04_sequence.tres b/demo/ai/trees/tutorial/tutorial_04_sequence.tres new file mode 100644 index 0000000..ea6b0a8 --- /dev/null +++ b/demo/ai/trees/tutorial/tutorial_04_sequence.tres @@ -0,0 +1,62 @@ +[gd_resource type="BehaviorTree" load_steps=15 format=3 uid="uid://dln8ywvtqedt7"] + +[ext_resource type="Script" path="res://demo/ai/tasks/select_random_nearby_pos.gd" id="1_gk66j"] +[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="2_v5eou"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" + +[sub_resource type="BBNode" id="BBNode_fq0jf"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_rsejo"] +animation_player = SubResource("BBNode_fq0jf") +animation_name = &"idle" + +[sub_resource type="BTWait" id="BTWait_dl31p"] +duration = 3.0 + +[sub_resource type="BBNode" id="BBNode_6d0yy"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_wsspf"] +animation_player = SubResource("BBNode_6d0yy") +animation_name = &"walk" + +[sub_resource type="BTAction" id="BTAction_fc1oo"] +script = ExtResource("1_gk66j") +range_min = 300.0 +range_max = 500.0 +position_var = &"pos" + +[sub_resource type="BTAction" id="BTAction_djl5v"] +script = ExtResource("2_v5eou") +target_position_var = &"pos" +speed_var = &"speed" +tolerance = 50.0 +avoid_var = &"" + +[sub_resource type="BTFail" id="BTFail_i2f36"] + +[sub_resource type="BTComment" id="BTComment_4i06i"] +custom_name = "πŸ‘‡οΈ Sequence is never going to reach this task, because it fails at the previous step." + +[sub_resource type="BTWait" id="BTWait_yxpnx"] +duration = 888.0 + +[sub_resource type="BTSequence" id="BTSequence_vx4uy"] +children = [SubResource("BTPlayAnimation_rsejo"), SubResource("BTWait_dl31p"), SubResource("BTPlayAnimation_wsspf"), SubResource("BTAction_fc1oo"), SubResource("BTAction_djl5v"), SubResource("BTFail_i2f36"), SubResource("BTComment_4i06i"), SubResource("BTWait_yxpnx")] + +[resource] +description = "The [comp]Sequence[/comp] is one of the core composite tasks. It executes its child tasks sequentially, from first to last, until one of them returns [FAILURE], or all of them result in [SUCCESS]. In other words, if any child task results in [FAILURE], the Sequence execution will be aborted, and the Sequence itself will return [FAILURE]. + +In our example, you can observe a simple [comp]Sequence[/comp] in action. Notice how it fails when it reaches the [act]Fail[/act] action and never proceeds to the [act]Wait 888 sec[/act] action afterward. By the way, the simple [act]Fail[/act] task is quite useful for troubleshooting. Its sole function is to return [FAILURE]. +" +blackboard_plan = SubResource("BlackboardPlan_ewfwq") +root_task = SubResource("BTSequence_vx4uy") diff --git a/demo/ai/trees/tutorial/tutorial_05_selector.tres b/demo/ai/trees/tutorial/tutorial_05_selector.tres new file mode 100644 index 0000000..f9d85e3 --- /dev/null +++ b/demo/ai/trees/tutorial/tutorial_05_selector.tres @@ -0,0 +1,108 @@ +[gd_resource type="BehaviorTree" load_steps=26 format=3 uid="uid://bf4r652fv5kwi"] + +[ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_3ed74"] +[ext_resource type="Script" path="res://demo/ai/tasks/select_random_nearby_pos.gd" id="1_rvh1c"] +[ext_resource type="Script" path="res://demo/ai/tasks/in_range.gd" id="2_jfsyt"] +[ext_resource type="Script" path="res://demo/ai/tasks/pursue.gd" id="2_nnswb"] +[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="2_t62a0"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" + +[sub_resource type="BTCondition" id="BTCondition_x0uu7"] +script = ExtResource("2_jfsyt") +distance_min = 0.0 +distance_max = 200.0 +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_icf24"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_iiei3"] +animation_player = SubResource("BBNode_icf24") +animation_name = &"walk" + +[sub_resource type="BTAction" id="BTAction_824oc"] +script = ExtResource("1_rvh1c") +range_min = 700.0 +range_max = 800.0 +position_var = &"pos" + +[sub_resource type="BTAction" id="BTAction_y1you"] +script = ExtResource("2_t62a0") +target_position_var = &"pos" +speed_var = &"speed" +tolerance = 50.0 +avoid_var = &"" + +[sub_resource type="BBNode" id="BBNode_ayt56"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_l1tdg"] +animation_player = SubResource("BBNode_ayt56") +animation_name = &"idle" + +[sub_resource type="BTWait" id="BTWait_hh8ys"] +duration = 3.0 + +[sub_resource type="BTSequence" id="BTSequence_cgwor"] +children = [SubResource("BTCondition_x0uu7"), SubResource("BTPlayAnimation_iiei3"), SubResource("BTAction_824oc"), SubResource("BTAction_y1you"), SubResource("BTPlayAnimation_l1tdg"), SubResource("BTWait_hh8ys")] + +[sub_resource type="BTCondition" id="BTCondition_d6aub"] +script = ExtResource("2_jfsyt") +distance_min = 200.0 +distance_max = 10000.0 +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_6d0yy"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_wsspf"] +animation_player = SubResource("BBNode_6d0yy") +animation_name = &"walk" + +[sub_resource type="BTAction" id="BTAction_wc11r"] +script = ExtResource("2_nnswb") +target_var = &"target" +speed_var = &"speed" +approach_distance = 100.0 + +[sub_resource type="BBNode" id="BBNode_aw5jj"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_3aihc"] +animation_player = SubResource("BBNode_aw5jj") +animation_name = &"idle" + +[sub_resource type="BTWait" id="BTWait_1o163"] +duration = 3.0 + +[sub_resource type="BTSequence" id="BTSequence_vx4uy"] +children = [SubResource("BTCondition_d6aub"), SubResource("BTPlayAnimation_wsspf"), SubResource("BTAction_wc11r"), SubResource("BTPlayAnimation_3aihc"), SubResource("BTWait_1o163")] + +[sub_resource type="BTAction" id="BTAction_2murg"] +script = ExtResource("1_3ed74") +group = &"player" +output_var = &"target" + +[sub_resource type="BTSelector" id="BTSelector_ddhoo"] +children = [SubResource("BTSequence_cgwor"), SubResource("BTSequence_vx4uy"), SubResource("BTAction_2murg")] + +[resource] +description = "The [comp]Selector[/comp] is another essential composite task. It executes its child tasks sequentially, from first to last, until one of them returns [SUCCESS] or all of them result in [FAILURE]. In other words, when a child task results in [FAILURE], it moves on to the next one until it finds the one that returns [SUCCESS]. Once a child task results in [SUCCESS], the Selector stops and also returns [SUCCESS]. + +To understand the [comp]Selector[/comp], it helps to see it as the opposite of the [comp]Sequence[/comp]. While the Sequence continues iterating over children as long as they return [SUCCESS], the Selector does the same but as long as they return [FAILURE]. The purpose of the Selector is to find a child that succeeds. It's often useful to place higher priority tasks at the top so that the Selector attempts them first. + +[comp]Selector[/comp] is frequently used with [comp]Sequence[/comp] and [con]Condition[/con] tasks to control the behavior tree's flow. A condition task would prevent a Sequence from proceeding if it evaluates to [FAILURE], and thus the Selector would try the next child. + +In our example, the [con]InRange[/con] condition checks how far Junior is from the target. When Junior is farther than 200 pixels from the target, he'll attempt to approach it. If he is closer than 200 pixels from the target, he would try to walk away. Thanks to the Selector, only one of these behaviors will be performed at a time, based on the result of the [con]InRange[/con] check. Junior seems to have a dilemma β€” unable to decide whether to stay or go." +blackboard_plan = SubResource("BlackboardPlan_ewfwq") +root_task = SubResource("BTSelector_ddhoo") diff --git a/demo/ai/trees/tutorial/tutorial_06_decorators.tres b/demo/ai/trees/tutorial/tutorial_06_decorators.tres new file mode 100644 index 0000000..42fe1e6 --- /dev/null +++ b/demo/ai/trees/tutorial/tutorial_06_decorators.tres @@ -0,0 +1,136 @@ +[gd_resource type="BehaviorTree" load_steps=34 format=3 uid="uid://beiki511huxb8"] + +[ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_3xoj7"] +[ext_resource type="Script" path="res://demo/ai/tasks/in_range.gd" id="2_08b67"] +[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="3_orhnl"] +[ext_resource type="Script" path="res://demo/ai/tasks/select_random_nearby_pos.gd" id="4_oyght"] +[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="5_5o1gy"] +[ext_resource type="Script" path="res://demo/ai/tasks/pursue.gd" id="6_rpn40"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" + +[sub_resource type="BTAction" id="BTAction_2murg"] +script = ExtResource("1_3xoj7") +group = &"player" +output_var = &"target" + +[sub_resource type="BTRunLimit" id="BTRunLimit_60b8b"] +children = [SubResource("BTAction_2murg")] + +[sub_resource type="BTCondition" id="BTCondition_m15aa"] +script = ExtResource("2_08b67") +distance_min = 0.0 +distance_max = 200.0 +target_var = &"target" + +[sub_resource type="BTAction" id="BTAction_oc76s"] +script = ExtResource("3_orhnl") +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_6d0yy"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_wsspf"] +await_completion = 5.0 +animation_player = SubResource("BBNode_6d0yy") +animation_name = &"attack_1" + +[sub_resource type="BTSequence" id="BTSequence_e0f8v"] +children = [SubResource("BTCondition_m15aa"), SubResource("BTAction_oc76s"), SubResource("BTPlayAnimation_wsspf")] + +[sub_resource type="BTCooldown" id="BTCooldown_3tvjt"] +children = [SubResource("BTSequence_e0f8v")] +duration = 5.0 + +[sub_resource type="BTCondition" id="BTCondition_x0uu7"] +script = ExtResource("2_08b67") +distance_min = 0.0 +distance_max = 200.0 +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_icf24"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_iiei3"] +animation_player = SubResource("BBNode_icf24") +animation_name = &"walk" + +[sub_resource type="BTAction" id="BTAction_824oc"] +script = ExtResource("4_oyght") +range_min = 700.0 +range_max = 800.0 +position_var = &"pos" + +[sub_resource type="BTAction" id="BTAction_y1you"] +script = ExtResource("5_5o1gy") +target_position_var = &"pos" +speed_var = &"speed" +tolerance = 50.0 +avoid_var = &"" + +[sub_resource type="BBNode" id="BBNode_ayt56"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_l1tdg"] +animation_player = SubResource("BBNode_ayt56") +animation_name = &"idle" + +[sub_resource type="BTWait" id="BTWait_hh8ys"] +duration = 3.0 + +[sub_resource type="BTSequence" id="BTSequence_cgwor"] +children = [SubResource("BTCondition_x0uu7"), SubResource("BTPlayAnimation_iiei3"), SubResource("BTAction_824oc"), SubResource("BTAction_y1you"), SubResource("BTPlayAnimation_l1tdg"), SubResource("BTWait_hh8ys")] + +[sub_resource type="BTCondition" id="BTCondition_d6aub"] +script = ExtResource("2_08b67") +distance_min = 200.0 +distance_max = 10000.0 +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_rpwld"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_dug2k"] +animation_player = SubResource("BBNode_rpwld") +animation_name = &"walk" + +[sub_resource type="BTAction" id="BTAction_wc11r"] +script = ExtResource("6_rpn40") +target_var = &"target" +speed_var = &"speed" +approach_distance = 100.0 + +[sub_resource type="BBNode" id="BBNode_aw5jj"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_3aihc"] +animation_player = SubResource("BBNode_aw5jj") +animation_name = &"idle" + +[sub_resource type="BTWait" id="BTWait_1o163"] +duration = 0.5 + +[sub_resource type="BTSequence" id="BTSequence_vx4uy"] +children = [SubResource("BTCondition_d6aub"), SubResource("BTPlayAnimation_dug2k"), SubResource("BTAction_wc11r"), SubResource("BTPlayAnimation_3aihc"), SubResource("BTWait_1o163")] + +[sub_resource type="BTSelector" id="BTSelector_ddhoo"] +children = [SubResource("BTRunLimit_60b8b"), SubResource("BTCooldown_3tvjt"), SubResource("BTSequence_cgwor"), SubResource("BTSequence_vx4uy")] + +[resource] +description = "Let's improve our previous behavior, and take the opportunity to discuss [dec]Decorators[/dec]. As mentioned earlier, decorators are control tasks that should only have a single child. Typically, a decorator either alters how its child operates or modifies its return status. They are often a useful tool for introducing variance into behaviors that otherwise lack it. + +In our example, we utilize the [dec]RunLimit[/dec] decorator to restrict its child from running more than once. After executing the first time, the child will never receive another tick. This is quite handy for all sorts of setup logic! + +Now, let's examine another decorator we use here - the [dec]Cooldown[/dec]. This decorator executes its child task only if the specified duration time has passed since the previous execution of the child task. The first time the attack sequence results in [SUCCESS], it triggers the cooldown, preventing the [comp]Sequence[/comp] from being executed for the next 5 seconds. During this period, the Cooldown returns [FAILURE] until the specified duration time elapses. It's important to note that it only counts executions that finished with [SUCCESS]. This means that [con]InRange[/con] can be utilized here without triggering the Cooldown!" +blackboard_plan = SubResource("BlackboardPlan_ewfwq") +root_task = SubResource("BTSelector_ddhoo") diff --git a/demo/ai/trees/tutorial/tutorial_07_more_decorators.tres b/demo/ai/trees/tutorial/tutorial_07_more_decorators.tres new file mode 100644 index 0000000..d5b1a26 --- /dev/null +++ b/demo/ai/trees/tutorial/tutorial_07_more_decorators.tres @@ -0,0 +1,143 @@ +[gd_resource type="BehaviorTree" load_steps=36 format=3 uid="uid://tep50j4d6kgp"] + +[ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_f605f"] +[ext_resource type="Script" path="res://demo/ai/tasks/in_range.gd" id="2_mj1cj"] +[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="3_86p0r"] +[ext_resource type="Script" path="res://demo/ai/tasks/back_away.gd" id="4_u0vk1"] +[ext_resource type="Script" path="res://demo/ai/tasks/pursue.gd" id="6_1yikm"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" + +[sub_resource type="BTAction" id="BTAction_2murg"] +script = ExtResource("1_f605f") +group = &"player" +output_var = &"target" + +[sub_resource type="BTRunLimit" id="BTRunLimit_60b8b"] +children = [SubResource("BTAction_2murg")] + +[sub_resource type="BTCondition" id="BTCondition_m15aa"] +script = ExtResource("2_mj1cj") +distance_min = 0.0 +distance_max = 200.0 +target_var = &"target" + +[sub_resource type="BTAction" id="BTAction_oc76s"] +script = ExtResource("3_86p0r") +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_6d0yy"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_wsspf"] +await_completion = 5.0 +animation_player = SubResource("BBNode_6d0yy") +animation_name = &"attack_1" + +[sub_resource type="BBNode" id="BBNode_w45kn"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_d2lad"] +await_completion = 5.0 +animation_player = SubResource("BBNode_w45kn") +animation_name = &"attack_2" + +[sub_resource type="BTSequence" id="BTSequence_e0f8v"] +children = [SubResource("BTCondition_m15aa"), SubResource("BTAction_oc76s"), SubResource("BTPlayAnimation_wsspf"), SubResource("BTPlayAnimation_d2lad")] + +[sub_resource type="BTCooldown" id="BTCooldown_3tvjt"] +children = [SubResource("BTSequence_e0f8v")] +duration = 5.0 + +[sub_resource type="BTCondition" id="BTCondition_x0uu7"] +script = ExtResource("2_mj1cj") +distance_min = 0.0 +distance_max = 200.0 +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_wksgd"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_umlwj"] +animation_player = SubResource("BBNode_wksgd") +animation_name = &"walk" + +[sub_resource type="BTAction" id="BTAction_6q0k4"] +script = ExtResource("4_u0vk1") +speed_var = &"speed" +max_angle_deviation = 0.7 + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_6eii7"] +children = [SubResource("BTAction_6q0k4")] +time_limit = 2.0 + +[sub_resource type="BTAlwaysSucceed" id="BTAlwaysSucceed_ieord"] +children = [SubResource("BTTimeLimit_6eii7")] + +[sub_resource type="BBNode" id="BBNode_ayt56"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_l1tdg"] +animation_player = SubResource("BBNode_ayt56") +animation_name = &"idle" + +[sub_resource type="BTWait" id="BTWait_hh8ys"] +duration = 3.0 + +[sub_resource type="BTSequence" id="BTSequence_cgwor"] +children = [SubResource("BTCondition_x0uu7"), SubResource("BTPlayAnimation_umlwj"), SubResource("BTAlwaysSucceed_ieord"), SubResource("BTPlayAnimation_l1tdg"), SubResource("BTWait_hh8ys")] + +[sub_resource type="BTCondition" id="BTCondition_d6aub"] +script = ExtResource("2_mj1cj") +distance_min = 200.0 +distance_max = 10000.0 +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_rpwld"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_dug2k"] +animation_player = SubResource("BBNode_rpwld") +animation_name = &"walk" + +[sub_resource type="BTAction" id="BTAction_wc11r"] +script = ExtResource("6_1yikm") +target_var = &"target" +speed_var = &"speed" +approach_distance = 100.0 + +[sub_resource type="BBNode" id="BBNode_aw5jj"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_3aihc"] +animation_player = SubResource("BBNode_aw5jj") +animation_name = &"idle" + +[sub_resource type="BTWait" id="BTWait_1o163"] +duration = 0.5 + +[sub_resource type="BTSequence" id="BTSequence_vx4uy"] +children = [SubResource("BTCondition_d6aub"), SubResource("BTPlayAnimation_dug2k"), SubResource("BTAction_wc11r"), SubResource("BTPlayAnimation_3aihc"), SubResource("BTWait_1o163")] + +[sub_resource type="BTSelector" id="BTSelector_ddhoo"] +children = [SubResource("BTRunLimit_60b8b"), SubResource("BTCooldown_3tvjt"), SubResource("BTSequence_cgwor"), SubResource("BTSequence_vx4uy")] + +[resource] +description = "Let's explore some other [dec]Decorators[/dec]. Here's a slightly improved version of the previous behavior. We incorporate the [dec]TimeLimit[/dec] decorator with the [act]Back Away[/act] action to achieve a similar effect as before (walking away from the target). The TimeLimit decorator ensures that the child task does not take too long to finish its work. If the time runs out, the task's execution will be aborted, and TimeLimit will return [FAILURE]. + +Another useful decorator is [dec]AlwaysSucceed[/dec], which converts any [FAILURE] returned by its child into [SUCCESS]. We use this decorator here because TimeLimit may result in [FAILURE], but we still want the [comp]Sequence[/comp] to continue. Also, there are similar decorators such as [dec]AlwaysFail[/dec] and [dec]Invert[/dec], which you can use in your behavior trees as needed. + +We also add a second attack, so that Junior feels more badass now. We've got a little hit-and-run behavior going on here!" +blackboard_plan = SubResource("BlackboardPlan_ewfwq") +root_task = SubResource("BTSelector_ddhoo") diff --git a/demo/ai/trees/tutorial/tutorial_08_final_touch.tres b/demo/ai/trees/tutorial/tutorial_08_final_touch.tres new file mode 100644 index 0000000..c2053a3 --- /dev/null +++ b/demo/ai/trees/tutorial/tutorial_08_final_touch.tres @@ -0,0 +1,204 @@ +[gd_resource type="BehaviorTree" load_steps=52 format=3 uid="uid://dp0cglcytwcj5"] + +[ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_o5ahw"] +[ext_resource type="Script" path="res://demo/ai/tasks/select_flanking_pos.gd" id="2_er25a"] +[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="3_ed1xo"] +[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="4_128ei"] +[ext_resource type="Script" path="res://demo/ai/tasks/in_range.gd" id="5_er18b"] +[ext_resource type="Script" path="res://demo/ai/tasks/back_away.gd" id="6_1urfq"] +[ext_resource type="Script" path="res://demo/ai/tasks/pursue.gd" id="7_ekws5"] + +[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"] +var/speed/name = &"speed" +var/speed/type = 3 +var/speed/value = 400.0 +var/speed/hint = 1 +var/speed/hint_string = "10,1000,10" + +[sub_resource type="BTAction" id="BTAction_2murg"] +script = ExtResource("1_o5ahw") +group = &"player" +output_var = &"target" + +[sub_resource type="BTRunLimit" id="BTRunLimit_60b8b"] +children = [SubResource("BTAction_2murg")] + +[sub_resource type="BTCondition" id="BTCondition_m15aa"] +script = ExtResource("5_er18b") +distance_min = 0.0 +distance_max = 200.0 +target_var = &"target" + +[sub_resource type="BTAction" id="BTAction_oc76s"] +script = ExtResource("4_128ei") +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_6d0yy"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_wsspf"] +await_completion = 5.0 +animation_player = SubResource("BBNode_6d0yy") +animation_name = &"attack_1" + +[sub_resource type="BBNode" id="BBNode_w45kn"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_d2lad"] +await_completion = 5.0 +animation_player = SubResource("BBNode_w45kn") +animation_name = &"attack_2" + +[sub_resource type="BTSequence" id="BTSequence_e0f8v"] +children = [SubResource("BTCondition_m15aa"), SubResource("BTAction_oc76s"), SubResource("BTPlayAnimation_wsspf"), SubResource("BTPlayAnimation_d2lad")] + +[sub_resource type="BTCooldown" id="BTCooldown_3tvjt"] +children = [SubResource("BTSequence_e0f8v")] +duration = 5.0 + +[sub_resource type="BTCondition" id="BTCondition_x0uu7"] +script = ExtResource("5_er18b") +distance_min = 0.0 +distance_max = 200.0 +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_wksgd"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_umlwj"] +animation_player = SubResource("BBNode_wksgd") +animation_name = &"walk" + +[sub_resource type="BTAction" id="BTAction_6q0k4"] +script = ExtResource("6_1urfq") +speed_var = &"speed" +max_angle_deviation = 0.7 + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_6eii7"] +children = [SubResource("BTAction_6q0k4")] +time_limit = 2.0 + +[sub_resource type="BTAlwaysSucceed" id="BTAlwaysSucceed_ieord"] +children = [SubResource("BTTimeLimit_6eii7")] + +[sub_resource type="BBNode" id="BBNode_ayt56"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_l1tdg"] +animation_player = SubResource("BBNode_ayt56") +animation_name = &"idle" + +[sub_resource type="BTWait" id="BTWait_hh8ys"] +duration = 3.0 + +[sub_resource type="BTSequence" id="BTSequence_cgwor"] +children = [SubResource("BTCondition_x0uu7"), SubResource("BTPlayAnimation_umlwj"), SubResource("BTAlwaysSucceed_ieord"), SubResource("BTPlayAnimation_l1tdg"), SubResource("BTWait_hh8ys")] + +[sub_resource type="BTAction" id="BTAction_n0rxm"] +script = ExtResource("2_er25a") +target_var = &"target" +flank_side = 0 +range_min = 400 +range_max = 500 +position_var = &"pos" + +[sub_resource type="BBNode" id="BBNode_icf24"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_iiei3"] +animation_player = SubResource("BBNode_icf24") +animation_name = &"walk" + +[sub_resource type="BTAction" id="BTAction_g2up4"] +script = ExtResource("3_ed1xo") +target_position_var = &"pos" +speed_var = &"speed" +tolerance = 50.0 +avoid_var = &"" + +[sub_resource type="BTAction" id="BTAction_d5lkr"] +script = ExtResource("4_128ei") +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_h4k80"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_40yja"] +animation_player = SubResource("BBNode_h4k80") +animation_name = &"throw_prepare" + +[sub_resource type="BTWait" id="BTWait_2dc1v"] + +[sub_resource type="BBNode" id="BBNode_slipn"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_qnpjq"] +await_completion = 5.0 +animation_player = SubResource("BBNode_slipn") +animation_name = &"throw" + +[sub_resource type="BBNode" id="BBNode_qaqnn"] +resource_name = "." +saved_value = NodePath(".") + +[sub_resource type="BTCallMethod" id="BTCallMethod_yd0fn"] +node = SubResource("BBNode_qaqnn") +method = &"throw_ninja_star" + +[sub_resource type="BTSequence" id="BTSequence_ws7nq"] +children = [SubResource("BTAction_n0rxm"), SubResource("BTPlayAnimation_iiei3"), SubResource("BTAction_g2up4"), SubResource("BTAction_d5lkr"), SubResource("BTPlayAnimation_40yja"), SubResource("BTWait_2dc1v"), SubResource("BTPlayAnimation_qnpjq"), SubResource("BTCallMethod_yd0fn")] + +[sub_resource type="BTProbability" id="BTProbability_omklt"] +children = [SubResource("BTSequence_ws7nq")] +run_chance = 0.25 + +[sub_resource type="BTCondition" id="BTCondition_d6aub"] +script = ExtResource("5_er18b") +distance_min = 200.0 +distance_max = 10000.0 +target_var = &"target" + +[sub_resource type="BBNode" id="BBNode_rpwld"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_dug2k"] +animation_player = SubResource("BBNode_rpwld") +animation_name = &"walk" + +[sub_resource type="BTAction" id="BTAction_wc11r"] +script = ExtResource("7_ekws5") +target_var = &"target" +speed_var = &"speed" +approach_distance = 100.0 + +[sub_resource type="BBNode" id="BBNode_aw5jj"] +resource_name = "AnimationPlayer" +saved_value = NodePath("AnimationPlayer") + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_3aihc"] +animation_player = SubResource("BBNode_aw5jj") +animation_name = &"idle" + +[sub_resource type="BTWait" id="BTWait_1o163"] +duration = 0.5 + +[sub_resource type="BTSequence" id="BTSequence_vx4uy"] +children = [SubResource("BTCondition_d6aub"), SubResource("BTPlayAnimation_dug2k"), SubResource("BTAction_wc11r"), SubResource("BTPlayAnimation_3aihc"), SubResource("BTWait_1o163")] + +[sub_resource type="BTSelector" id="BTSelector_ddhoo"] +children = [SubResource("BTRunLimit_60b8b"), SubResource("BTCooldown_3tvjt"), SubResource("BTSequence_cgwor"), SubResource("BTProbability_omklt"), SubResource("BTSequence_vx4uy")] + +[resource] +description = "And for the final touch, we've added throwing ninja stars to our previous behavior. The [dec]Probability[/dec] decorator adds a little variance so that we don't throw ninja stars all the time. This decorator executes its child task with a certain probability, so when it's not 100%, sometimes it will return [FAILURE] instead. Some of the work in this [comp]Sequence[/comp] is done by actions you've seen already, and the [act]CallMethod[/act] action invokes the [color=cyan]throw_ninja_star[/color] method on the agent node. By the way, the agent is always the owner of the BTPlayer node, which executes this behavior tree. + +This concludes our tutorial. Hopefully, this little endeavor has been useful to you. You can learn more by reading the [b]Online Documentation[/b], which covers topics like creating your own tasks. Also, check out the [b]Showcase[/b], which presents behaviors of agents made for this little demo. Simply click \"End Tutorial\" to return to the [b]Showcase[/b]." +blackboard_plan = SubResource("BlackboardPlan_ewfwq") +root_task = SubResource("BTSelector_ddhoo") diff --git a/demo/assets/agent_bobby.png b/demo/assets/agent_bobby.png new file mode 100644 index 0000000..14de872 Binary files /dev/null and b/demo/assets/agent_bobby.png differ diff --git a/demo/assets/agent_bobby.png.import b/demo/assets/agent_bobby.png.import new file mode 100644 index 0000000..de79d79 --- /dev/null +++ b/demo/assets/agent_bobby.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dlo1ine6p5di4" +path="res://.godot/imported/agent_bobby.png-8c7c0553d4eefdb06245554fd2603238.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/agent_bobby.png" +dest_files=["res://.godot/imported/agent_bobby.png-8c7c0553d4eefdb06245554fd2603238.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/agent_charger.png b/demo/assets/agent_charger.png new file mode 100644 index 0000000..3b6ea44 Binary files /dev/null and b/demo/assets/agent_charger.png differ diff --git a/demo/assets/agent_charger.png.import b/demo/assets/agent_charger.png.import new file mode 100644 index 0000000..bfe08b6 --- /dev/null +++ b/demo/assets/agent_charger.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ce16nc0wy2s8" +path="res://.godot/imported/agent_charger.png-4fbef6fc86342f0b358c84f3e6790641.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/agent_charger.png" +dest_files=["res://.godot/imported/agent_charger.png-4fbef6fc86342f0b358c84f3e6790641.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/agent_combo.png b/demo/assets/agent_combo.png new file mode 100644 index 0000000..ca9d815 Binary files /dev/null and b/demo/assets/agent_combo.png differ diff --git a/demo/assets/agent_combo.png.import b/demo/assets/agent_combo.png.import new file mode 100644 index 0000000..8128a64 --- /dev/null +++ b/demo/assets/agent_combo.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bo0ibp7tvjbba" +path="res://.godot/imported/agent_combo.png-1aabf55a6f7673e34d40eadba34cb086.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/agent_combo.png" +dest_files=["res://.godot/imported/agent_combo.png-1aabf55a6f7673e34d40eadba34cb086.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/agent_demon.png b/demo/assets/agent_demon.png new file mode 100644 index 0000000..a92603e Binary files /dev/null and b/demo/assets/agent_demon.png differ diff --git a/demo/assets/agent_demon.png.import b/demo/assets/agent_demon.png.import new file mode 100644 index 0000000..17b163f --- /dev/null +++ b/demo/assets/agent_demon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d1tx7u8ho0r4v" +path="res://.godot/imported/agent_demon.png-8a62722d1d31985ee3a39cfef745c53a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/agent_demon.png" +dest_files=["res://.godot/imported/agent_demon.png-8a62722d1d31985ee3a39cfef745c53a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/agent_imp.png b/demo/assets/agent_imp.png new file mode 100644 index 0000000..cadf474 Binary files /dev/null and b/demo/assets/agent_imp.png differ diff --git a/demo/assets/agent_imp.png.import b/demo/assets/agent_imp.png.import new file mode 100644 index 0000000..08994d3 --- /dev/null +++ b/demo/assets/agent_imp.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://h70okn6hmxum" +path="res://.godot/imported/agent_imp.png-9fb23c43583296c91b2a8a01f05daad9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/agent_imp.png" +dest_files=["res://.godot/imported/agent_imp.png-9fb23c43583296c91b2a8a01f05daad9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/agent_junior_pieces.png b/demo/assets/agent_junior_pieces.png new file mode 100644 index 0000000..e8cf873 Binary files /dev/null and b/demo/assets/agent_junior_pieces.png differ diff --git a/demo/assets/agent_junior_pieces.png.import b/demo/assets/agent_junior_pieces.png.import new file mode 100644 index 0000000..4d87dcc --- /dev/null +++ b/demo/assets/agent_junior_pieces.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b0oeqsc0xksto" +path="res://.godot/imported/agent_junior_pieces.png-95690b27968ceea039daac5098fd3722.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/agent_junior_pieces.png" +dest_files=["res://.godot/imported/agent_junior_pieces.png-95690b27968ceea039daac5098fd3722.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/agent_melee_nuanced.png b/demo/assets/agent_melee_nuanced.png new file mode 100644 index 0000000..3a7585b Binary files /dev/null and b/demo/assets/agent_melee_nuanced.png differ diff --git a/demo/assets/agent_melee_nuanced.png.import b/demo/assets/agent_melee_nuanced.png.import new file mode 100644 index 0000000..604cb7a --- /dev/null +++ b/demo/assets/agent_melee_nuanced.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://usu3j55d6dgc" +path="res://.godot/imported/agent_melee_nuanced.png-653a64ea55e3175afadb5b209be8b1d0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/agent_melee_nuanced.png" +dest_files=["res://.godot/imported/agent_melee_nuanced.png-653a64ea55e3175afadb5b209be8b1d0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/agent_melee_simple.png b/demo/assets/agent_melee_simple.png new file mode 100644 index 0000000..502d196 Binary files /dev/null and b/demo/assets/agent_melee_simple.png differ diff --git a/demo/assets/agent_melee_simple.png.import b/demo/assets/agent_melee_simple.png.import new file mode 100644 index 0000000..f25826b --- /dev/null +++ b/demo/assets/agent_melee_simple.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cw8s50856x8ct" +path="res://.godot/imported/agent_melee_simple.png-78a6d279aa99849a5b7788dd5762650f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/agent_melee_simple.png" +dest_files=["res://.godot/imported/agent_melee_simple.png-78a6d279aa99849a5b7788dd5762650f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/agent_ranged.png b/demo/assets/agent_ranged.png new file mode 100644 index 0000000..3debe06 Binary files /dev/null and b/demo/assets/agent_ranged.png differ diff --git a/demo/assets/agent_ranged.png.import b/demo/assets/agent_ranged.png.import new file mode 100644 index 0000000..d83f37d --- /dev/null +++ b/demo/assets/agent_ranged.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cjts4ennjtepg" +path="res://.godot/imported/agent_ranged.png-a7be7db55c56f7b1c12ada6338a036cf.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/agent_ranged.png" +dest_files=["res://.godot/imported/agent_ranged.png-a7be7db55c56f7b1c12ada6338a036cf.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/agent_skirmisher.png b/demo/assets/agent_skirmisher.png new file mode 100644 index 0000000..7552e96 Binary files /dev/null and b/demo/assets/agent_skirmisher.png differ diff --git a/demo/assets/agent_skirmisher.png.import b/demo/assets/agent_skirmisher.png.import new file mode 100644 index 0000000..b227fcc --- /dev/null +++ b/demo/assets/agent_skirmisher.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://l042ovqqsy3l" +path="res://.godot/imported/agent_skirmisher.png-fb22c42e0c82e689e3a451b83b1f6ff9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/agent_skirmisher.png" +dest_files=["res://.godot/imported/agent_skirmisher.png-fb22c42e0c82e689e3a451b83b1f6ff9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/agent_summoner.png b/demo/assets/agent_summoner.png new file mode 100644 index 0000000..0147818 Binary files /dev/null and b/demo/assets/agent_summoner.png differ diff --git a/demo/assets/agent_summoner.png.import b/demo/assets/agent_summoner.png.import new file mode 100644 index 0000000..8234f4a --- /dev/null +++ b/demo/assets/agent_summoner.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ombnpn2edldt" +path="res://.godot/imported/agent_summoner.png-3beb6fd299df05d9586c6b74edd2bbc6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/agent_summoner.png" +dest_files=["res://.godot/imported/agent_summoner.png-3beb6fd299df05d9586c6b74edd2bbc6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/arrow_left.png b/demo/assets/arrow_left.png new file mode 100644 index 0000000..c6af99e Binary files /dev/null and b/demo/assets/arrow_left.png differ diff --git a/demo/assets/arrow_left.png.import b/demo/assets/arrow_left.png.import new file mode 100644 index 0000000..cd4ea5e --- /dev/null +++ b/demo/assets/arrow_left.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dc1wu244fnetf" +path="res://.godot/imported/arrow_left.png-a7d3530ca98c17c281c9ef74dcdcb927.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/arrow_left.png" +dest_files=["res://.godot/imported/arrow_left.png-a7d3530ca98c17c281c9ef74dcdcb927.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/arrow_right.png b/demo/assets/arrow_right.png new file mode 100644 index 0000000..70ec85b Binary files /dev/null and b/demo/assets/arrow_right.png differ diff --git a/demo/assets/arrow_right.png.import b/demo/assets/arrow_right.png.import new file mode 100644 index 0000000..bdf534c --- /dev/null +++ b/demo/assets/arrow_right.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bjakugmqbbtw7" +path="res://.godot/imported/arrow_right.png-21f7ddc963756a50bd3974181b5e0d02.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/arrow_right.png" +dest_files=["res://.godot/imported/arrow_right.png-21f7ddc963756a50bd3974181b5e0d02.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/dummy.png b/demo/assets/dummy.png new file mode 100644 index 0000000..531fd19 Binary files /dev/null and b/demo/assets/dummy.png differ diff --git a/demo/assets/dummy.png.import b/demo/assets/dummy.png.import new file mode 100644 index 0000000..8d75969 --- /dev/null +++ b/demo/assets/dummy.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cltutcxjx8jnl" +path="res://.godot/imported/dummy.png-30069efb95d1cabfca0861ca5010c667.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/dummy.png" +dest_files=["res://.godot/imported/dummy.png-30069efb95d1cabfca0861ca5010c667.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/env_clouds.png b/demo/assets/env_clouds.png new file mode 100644 index 0000000..ab61eff Binary files /dev/null and b/demo/assets/env_clouds.png differ diff --git a/demo/assets/env_clouds.png.import b/demo/assets/env_clouds.png.import new file mode 100644 index 0000000..d8d21aa --- /dev/null +++ b/demo/assets/env_clouds.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://65b6yuobhxf8" +path="res://.godot/imported/env_clouds.png-28d790def9247e51c19b24eae86c1a64.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/env_clouds.png" +dest_files=["res://.godot/imported/env_clouds.png-28d790def9247e51c19b24eae86c1a64.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/env_gong.png b/demo/assets/env_gong.png new file mode 100644 index 0000000..4fd80e2 Binary files /dev/null and b/demo/assets/env_gong.png differ diff --git a/demo/assets/env_gong.png.import b/demo/assets/env_gong.png.import new file mode 100644 index 0000000..2227594 --- /dev/null +++ b/demo/assets/env_gong.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://i476iia1ua8q" +path="res://.godot/imported/env_gong.png-22c1657db8aed530e7d811b2b20b4a2d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/env_gong.png" +dest_files=["res://.godot/imported/env_gong.png-22c1657db8aed530e7d811b2b20b4a2d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/env_ground.png b/demo/assets/env_ground.png new file mode 100644 index 0000000..cfb2749 Binary files /dev/null and b/demo/assets/env_ground.png differ diff --git a/demo/assets/env_ground.png.import b/demo/assets/env_ground.png.import new file mode 100644 index 0000000..87610b1 --- /dev/null +++ b/demo/assets/env_ground.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cc7b22sy46gwn" +path="res://.godot/imported/env_ground.png-b29c6c47be0779294403cf6615d9dae2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/env_ground.png" +dest_files=["res://.godot/imported/env_ground.png-b29c6c47be0779294403cf6615d9dae2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/env_plants.png b/demo/assets/env_plants.png new file mode 100644 index 0000000..3008cf4 Binary files /dev/null and b/demo/assets/env_plants.png differ diff --git a/demo/assets/env_plants.png.import b/demo/assets/env_plants.png.import new file mode 100644 index 0000000..616c11c --- /dev/null +++ b/demo/assets/env_plants.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://4kw2ks8doc0w" +path="res://.godot/imported/env_plants.png-40a908ca223303e0aacba2fca71781c6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/env_plants.png" +dest_files=["res://.godot/imported/env_plants.png-40a908ca223303e0aacba2fca71781c6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/env_rocks.png b/demo/assets/env_rocks.png new file mode 100644 index 0000000..55c7830 Binary files /dev/null and b/demo/assets/env_rocks.png differ diff --git a/demo/assets/env_rocks.png.import b/demo/assets/env_rocks.png.import new file mode 100644 index 0000000..3ed17be --- /dev/null +++ b/demo/assets/env_rocks.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b3g14elmg0m36" +path="res://.godot/imported/env_rocks.png-12fea7b4727d1ddca76c06fd66910dd0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/env_rocks.png" +dest_files=["res://.godot/imported/env_rocks.png-12fea7b4727d1ddca76c06fd66910dd0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/fireball.png b/demo/assets/fireball.png new file mode 100644 index 0000000..6d2ddf6 Binary files /dev/null and b/demo/assets/fireball.png differ diff --git a/demo/assets/fireball.png.import b/demo/assets/fireball.png.import new file mode 100644 index 0000000..554b787 --- /dev/null +++ b/demo/assets/fireball.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://235liwnxn1n5" +path="res://.godot/imported/fireball.png-22a46715cd71373bf765d22c23e664a9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/fireball.png" +dest_files=["res://.godot/imported/fireball.png-22a46715cd71373bf765d22c23e664a9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/fonts/junction_bold.otf b/demo/assets/fonts/junction_bold.otf new file mode 100644 index 0000000..45a6697 Binary files /dev/null and b/demo/assets/fonts/junction_bold.otf differ diff --git a/demo/assets/fonts/junction_bold.otf.import b/demo/assets/fonts/junction_bold.otf.import new file mode 100644 index 0000000..5b19f13 --- /dev/null +++ b/demo/assets/fonts/junction_bold.otf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://n231m6uqsq6x" +path="res://.godot/imported/junction_bold.otf-4db2200a8b1a6423bafe2a4e7c7abbde.fontdata" + +[deps] + +source_file="res://demo/assets/fonts/junction_bold.otf" +dest_files=["res://.godot/imported/junction_bold.otf-4db2200a8b1a6423bafe2a4e7c7abbde.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/demo/assets/fonts/knewave_regular.ttf b/demo/assets/fonts/knewave_regular.ttf new file mode 100644 index 0000000..a98f750 Binary files /dev/null and b/demo/assets/fonts/knewave_regular.ttf differ diff --git a/demo/assets/fonts/knewave_regular.ttf.import b/demo/assets/fonts/knewave_regular.ttf.import new file mode 100644 index 0000000..4deeba7 --- /dev/null +++ b/demo/assets/fonts/knewave_regular.ttf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://d25vkmce7mhlt" +path="res://.godot/imported/knewave_regular.ttf-955953b059f713782c7b07e66ab341ec.fontdata" + +[deps] + +source_file="res://demo/assets/fonts/knewave_regular.ttf" +dest_files=["res://.godot/imported/knewave_regular.ttf-955953b059f713782c7b07e66ab341ec.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/demo/assets/fx.png b/demo/assets/fx.png new file mode 100644 index 0000000..1bd586d Binary files /dev/null and b/demo/assets/fx.png differ diff --git a/demo/assets/fx.png.import b/demo/assets/fx.png.import new file mode 100644 index 0000000..684838b --- /dev/null +++ b/demo/assets/fx.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dj4oayt5ttvh8" +path="res://.godot/imported/fx.png-6477c60e66067f48f360430ec23ddc02.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/fx.png" +dest_files=["res://.godot/imported/fx.png-6477c60e66067f48f360430ec23ddc02.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/hp_bar.png b/demo/assets/hp_bar.png new file mode 100644 index 0000000..1bc265b Binary files /dev/null and b/demo/assets/hp_bar.png differ diff --git a/demo/assets/hp_bar.png.import b/demo/assets/hp_bar.png.import new file mode 100644 index 0000000..a707489 --- /dev/null +++ b/demo/assets/hp_bar.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://hnwi23oef752" +path="res://.godot/imported/hp_bar.png-c23edb5054c777f587fbf3d4206298bd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/hp_bar.png" +dest_files=["res://.godot/imported/hp_bar.png-c23edb5054c777f587fbf3d4206298bd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/hp_over.png b/demo/assets/hp_over.png new file mode 100644 index 0000000..b04a763 Binary files /dev/null and b/demo/assets/hp_over.png differ diff --git a/demo/assets/hp_over.png.import b/demo/assets/hp_over.png.import new file mode 100644 index 0000000..9f6e24b --- /dev/null +++ b/demo/assets/hp_over.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cls8jtnu413o8" +path="res://.godot/imported/hp_over.png-417c2786f2f485db8c5f858f3f94e7e9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/hp_over.png" +dest_files=["res://.godot/imported/hp_over.png-417c2786f2f485db8c5f858f3f94e7e9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/hp_under.png b/demo/assets/hp_under.png new file mode 100644 index 0000000..79d4747 Binary files /dev/null and b/demo/assets/hp_under.png differ diff --git a/demo/assets/hp_under.png.import b/demo/assets/hp_under.png.import new file mode 100644 index 0000000..f3b6d9a --- /dev/null +++ b/demo/assets/hp_under.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dlw15foygohrk" +path="res://.godot/imported/hp_under.png-c993a547f4fdb0f3b9d06eb23ae4e804.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/hp_under.png" +dest_files=["res://.godot/imported/hp_under.png-c993a547f4fdb0f3b9d06eb23ae4e804.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/icon.svg b/demo/assets/icon.svg new file mode 100644 index 0000000..b53af7e --- /dev/null +++ b/demo/assets/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/demo/assets/icon.svg.import b/demo/assets/icon.svg.import new file mode 100644 index 0000000..201efda --- /dev/null +++ b/demo/assets/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://do6oi8vmfneur" +path="res://.godot/imported/icon.svg-e526cd5ce5fe587ad30e60477eb51fdf.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/icon.svg" +dest_files=["res://.godot/imported/icon.svg-e526cd5ce5fe587ad30e60477eb51fdf.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/demo/assets/logo.png b/demo/assets/logo.png new file mode 100644 index 0000000..0533077 Binary files /dev/null and b/demo/assets/logo.png differ diff --git a/demo/assets/logo.png.import b/demo/assets/logo.png.import new file mode 100644 index 0000000..e0d85bf --- /dev/null +++ b/demo/assets/logo.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://tyu0ua1ju38l" +path="res://.godot/imported/logo.png-627f053fd17248d48d9d002bdb02afc3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/logo.png" +dest_files=["res://.godot/imported/logo.png-627f053fd17248d48d9d002bdb02afc3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/shadow.png b/demo/assets/shadow.png new file mode 100644 index 0000000..683dc83 Binary files /dev/null and b/demo/assets/shadow.png differ diff --git a/demo/assets/shadow.png.import b/demo/assets/shadow.png.import new file mode 100644 index 0000000..5ec9cc1 --- /dev/null +++ b/demo/assets/shadow.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dwhhxj5557qrb" +path="res://.godot/imported/shadow.png-f4b948130f51dfdf8369bd133baa3734.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/shadow.png" +dest_files=["res://.godot/imported/shadow.png-f4b948130f51dfdf8369bd133baa3734.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/smoke.png b/demo/assets/smoke.png new file mode 100644 index 0000000..725246d Binary files /dev/null and b/demo/assets/smoke.png differ diff --git a/demo/assets/smoke.png.import b/demo/assets/smoke.png.import new file mode 100644 index 0000000..2701e6c --- /dev/null +++ b/demo/assets/smoke.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bdusy0qqtw0th" +path="res://.godot/imported/smoke.png-d041a59b8025f6af550257daa38b3580.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/smoke.png" +dest_files=["res://.godot/imported/smoke.png-d041a59b8025f6af550257daa38b3580.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/assets/ui.theme b/demo/assets/ui.theme new file mode 100644 index 0000000..e010fad Binary files /dev/null and b/demo/assets/ui.theme differ diff --git a/demo/assets/weapon_ninja_star.png b/demo/assets/weapon_ninja_star.png new file mode 100644 index 0000000..4b8e539 Binary files /dev/null and b/demo/assets/weapon_ninja_star.png differ diff --git a/demo/assets/weapon_ninja_star.png.import b/demo/assets/weapon_ninja_star.png.import new file mode 100644 index 0000000..1f4aa94 --- /dev/null +++ b/demo/assets/weapon_ninja_star.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://2uyxh7sy8qny" +path="res://.godot/imported/weapon_ninja_star.png-be058a7d9eff80095d1c513b22f898e0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://demo/assets/weapon_ninja_star.png" +dest_files=["res://.godot/imported/weapon_ninja_star.png-be058a7d9eff80095d1c513b22f898e0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/demo/props/dummy.gd b/demo/props/dummy.gd new file mode 100644 index 0000000..06fc9f3 --- /dev/null +++ b/demo/props/dummy.gd @@ -0,0 +1,15 @@ +extends CharacterBody2D + +@onready var animation_player: AnimationPlayer = $AnimationPlayer +@onready var hurtbox: Hurtbox = $Hurtbox +@onready var root: Node2D = $Root + + +func _on_health_damaged(_amount: float, _knockback: Vector2) -> void: + root.scale.x = -signf(hurtbox.last_attack_vector.x) + animation_player.clear_queue() + animation_player.play(&"hurt", 0.1) + + +func get_facing() -> float: + return signf(root.scale.x) diff --git a/demo/props/dummy.tscn b/demo/props/dummy.tscn new file mode 100644 index 0000000..7f39444 --- /dev/null +++ b/demo/props/dummy.tscn @@ -0,0 +1,405 @@ +[gd_scene load_steps=11 format=3 uid="uid://c5fhe3tulhlco"] + +[ext_resource type="Script" path="res://demo/props/dummy.gd" id="1_kqftw"] +[ext_resource type="Texture2D" uid="uid://cltutcxjx8jnl" path="res://demo/assets/dummy.png" id="1_vdhcl"] +[ext_resource type="Texture2D" uid="uid://dwhhxj5557qrb" path="res://demo/assets/shadow.png" id="2_535g7"] +[ext_resource type="Script" path="res://demo/agents/scripts/hurtbox.gd" id="4_pkfnd"] +[ext_resource type="Script" path="res://demo/agents/scripts/health.gd" id="5_8qcls"] + +[sub_resource type="Animation" id="Animation_1o3gy"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/Stick:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -1)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/Stick:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/Stick:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/Stick/Body:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -49)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/Stick/Body:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/Stick/Body:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} + +[sub_resource type="Animation" id="Animation_3r20x"] +resource_name = "hurt" +length = 0.25 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/Stick:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0, -1), Vector2(0, -1)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/Stick:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, -0.273996] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/Stick:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/Stick/Body:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -49), Vector2(0, -49), Vector2(0, -49), Vector2(0, -49)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/Stick/Body:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, -0.524778, -0.267304, -0.377565] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/Stick/Body:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.1, 0.15, 0.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.9, 1.1), Vector2(0.9, 1.1), Vector2(0.9, 1.1)] +} + +[sub_resource type="Animation" id="Animation_sf5ej"] +resource_name = "idle" +length = 1.2 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/Stick:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, -1)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/Stick:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/Stick:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/Stick/Body:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6, 0.9, 1.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, -49), Vector2(0, -49), Vector2(0, -49), Vector2(0, -49), Vector2(0, -49)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/Stick/Body:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6, 0.9, 1.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [-0.0523599, 0.0, 0.0523599, 0.0, -0.0523599] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/Stick/Body:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.3, 0.6, 0.9, 1.2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(0.95, 1.05), Vector2(1.05, 0.95), Vector2(0.95, 1.05), Vector2(1.05, 0.95), Vector2(0.95, 1.05)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_blnjx"] +_data = { +"RESET": SubResource("Animation_1o3gy"), +"hurt": SubResource("Animation_3r20x"), +"idle": SubResource("Animation_sf5ej") +} + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_pknym"] +size = Vector2(80, 35) + +[node name="Dummy" type="CharacterBody2D" groups=["player"]] +script = ExtResource("1_kqftw") + +[node name="Root" type="Node2D" parent="."] +metadata/_edit_lock_ = true + +[node name="Rig" type="Node2D" parent="Root"] + +[node name="Shadow" type="Sprite2D" parent="Root/Rig"] +modulate = Color(1, 1, 1, 0.290196) +texture = ExtResource("2_535g7") + +[node name="Stick" type="Sprite2D" parent="Root/Rig"] +position = Vector2(0, -1) +texture = ExtResource("1_vdhcl") +offset = Vector2(-1, -28) +region_enabled = true +region_rect = Rect2(100.613, 0, 22.3875, 64.0292) + +[node name="Body" type="Sprite2D" parent="Root/Rig/Stick"] +position = Vector2(0, -49) +texture = ExtResource("1_vdhcl") +offset = Vector2(-1, -56) +region_enabled = true +region_rect = Rect2(0, 0, 99.6683, 136) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_blnjx") +} +autoplay = "idle" +next/hurt = &"idle" +blend_times = [&"idle", &"hurt", 0.05, &"hurt", &"idle", 0.3] + +[node name="Hurtbox" type="Area2D" parent="." node_paths=PackedStringArray("health")] +collision_layer = 4 +collision_mask = 0 +script = ExtResource("4_pkfnd") +health = NodePath("../Health") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hurtbox"] +shape = SubResource("RectangleShape2D_pknym") +debug_color = Color(0.466325, 0.590206, 0.107862, 0.42) +metadata/_edit_lock_ = true + +[node name="Health" type="Node" parent="."] +script = ExtResource("5_8qcls") +max_health = 1e+07 + +[connection signal="damaged" from="Health" to="." method="_on_health_damaged"] diff --git a/demo/props/gong.gd b/demo/props/gong.gd new file mode 100644 index 0000000..adf21ed --- /dev/null +++ b/demo/props/gong.gd @@ -0,0 +1,15 @@ +extends StaticBody2D + +signal gong_struck + +var enabled: bool = true + +@onready var animation_player: AnimationPlayer = $AnimationPlayer + + +func _on_health_damaged(_amount: float, _knockback: Vector2) -> void: + if not enabled: + return + animation_player.play(&"struck") + gong_struck.emit() + enabled = false diff --git a/demo/props/gong.tscn b/demo/props/gong.tscn new file mode 100644 index 0000000..e65295c --- /dev/null +++ b/demo/props/gong.tscn @@ -0,0 +1,930 @@ +[gd_scene load_steps=12 format=3 uid="uid://bpd1wmw2f7bvg"] + +[ext_resource type="Script" path="res://demo/props/gong.gd" id="1_77c1i"] +[ext_resource type="Texture2D" uid="uid://i476iia1ua8q" path="res://demo/assets/env_gong.png" id="1_kbnv6"] +[ext_resource type="Texture2D" uid="uid://dwhhxj5557qrb" path="res://demo/assets/shadow.png" id="1_vl1mv"] +[ext_resource type="Texture2D" uid="uid://dj4oayt5ttvh8" path="res://demo/assets/fx.png" id="2_dib3m"] +[ext_resource type="Script" path="res://demo/agents/scripts/hurtbox.gd" id="5_xeb5y"] +[ext_resource type="Script" path="res://demo/agents/scripts/health.gd" id="6_6a3q1"] + +[sub_resource type="Animation" id="Animation_i5ovs"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Gong:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Gong:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Gong:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("FX/WaveL1:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("FX/WaveL1:modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0.329412, 0.352941, 0.392157, 1)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("FX/WaveL1:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-65, -89)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("FX/WaveL1:rotation") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.57058] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("FX/WaveL1:scale") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.5, 0.5)] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("FX/WaverR1:position") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(70, -89)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("FX/WaverR1:rotation") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [4.71215] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("FX/WaverR1:scale") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.5, 0.5)] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("FX/WaverR1:visible") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("FX/WaverR1:modulate") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0.329412, 0.352941, 0.392157, 1)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("FX/WaveL2:position") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-65, -89)] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("FX/WaveL2:rotation") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.57058] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("FX/WaveL2:scale") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.5, 0.5)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("FX/WaverR2:position") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(70, -89)] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("FX/WaverR2:rotation") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [4.71215] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("FX/WaverR2:scale") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.5, 0.5)] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("FX/WaveL3:position") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-65, -89)] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("FX/WaveL3:rotation") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.57058] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("FX/WaveL3:scale") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.5, 0.5)] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("FX/WaverR3:position") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(70, -89)] +} +tracks/23/type = "value" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("FX/WaverR3:rotation") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [4.71215] +} +tracks/24/type = "value" +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/path = NodePath("FX/WaverR3:scale") +tracks/24/interp = 1 +tracks/24/loop_wrap = true +tracks/24/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.5, 0.5)] +} +tracks/25/type = "value" +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/path = NodePath("FX/WaveL2:visible") +tracks/25/interp = 1 +tracks/25/loop_wrap = true +tracks/25/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/26/type = "value" +tracks/26/imported = false +tracks/26/enabled = true +tracks/26/path = NodePath("FX/WaveL2:modulate") +tracks/26/interp = 1 +tracks/26/loop_wrap = true +tracks/26/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0.329412, 0.352941, 0.392157, 1)] +} +tracks/27/type = "value" +tracks/27/imported = false +tracks/27/enabled = true +tracks/27/path = NodePath("FX/WaverR2:visible") +tracks/27/interp = 1 +tracks/27/loop_wrap = true +tracks/27/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/28/type = "value" +tracks/28/imported = false +tracks/28/enabled = true +tracks/28/path = NodePath("FX/WaverR2:modulate") +tracks/28/interp = 1 +tracks/28/loop_wrap = true +tracks/28/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0.329412, 0.352941, 0.392157, 1)] +} +tracks/29/type = "value" +tracks/29/imported = false +tracks/29/enabled = true +tracks/29/path = NodePath("FX/WaveL3:visible") +tracks/29/interp = 1 +tracks/29/loop_wrap = true +tracks/29/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/30/type = "value" +tracks/30/imported = false +tracks/30/enabled = true +tracks/30/path = NodePath("FX/WaveL3:modulate") +tracks/30/interp = 1 +tracks/30/loop_wrap = true +tracks/30/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0.329412, 0.352941, 0.392157, 1)] +} +tracks/31/type = "value" +tracks/31/imported = false +tracks/31/enabled = true +tracks/31/path = NodePath("FX/WaverR3:visible") +tracks/31/interp = 1 +tracks/31/loop_wrap = true +tracks/31/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/32/type = "value" +tracks/32/imported = false +tracks/32/enabled = true +tracks/32/path = NodePath("FX/WaverR3:modulate") +tracks/32/interp = 1 +tracks/32/loop_wrap = true +tracks/32/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0.329412, 0.352941, 0.392157, 1)] +} + +[sub_resource type="Animation" id="Animation_ie54r"] +resource_name = "struck" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Gong:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Gong:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Gong:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1.1, 0.9), Vector2(0.9, 1.1), Vector2(1.08, 0.92), Vector2(0.92, 1.08), Vector2(1.06, 0.94), Vector2(0.94, 1.06), Vector2(1.04, 0.96), Vector2(0.96, 1.04), Vector2(1.02, 0.98), Vector2(0.98, 1.02), Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("FX/WaveL1:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("FX/WaveL1:modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.329412, 0.352941, 0.392157, 1), Color(0.607843, 0.898039, 1, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("FX/WaveL1:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(-65, -89), Vector2(-165, -89)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("FX/WaveL1:rotation") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [1.57058, 1.57058] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("FX/WaveL1:scale") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0.5, 0.5), Vector2(1, 1)] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("FX/WaverR1:position") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(70, -89), Vector2(170, -89)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("FX/WaverR1:rotation") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [4.71215, 4.71215] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("FX/WaverR1:scale") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0.5, 0.5), Vector2(1, 1)] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("FX/WaverR1: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("FX/WaverR1:modulate") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0.1, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0.329412, 0.352941, 0.392157, 1), Color(0.607843, 0.898039, 1, 0)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("FX/WaveL2:position") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.2, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-65, -89), Vector2(-65, -89), Vector2(-165, -89)] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("FX/WaveL2:rotation") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.2, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [1.57058, 1.57058, 1.57058] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("FX/WaveL2:scale") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.2, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0.5, 0.5), Vector2(0.5, 0.5), Vector2(1, 1)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("FX/WaverR2:position") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.2, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(70, -89), Vector2(70, -89), Vector2(170, -89)] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("FX/WaverR2:rotation") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.2, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [4.71215, 4.71215, 4.71215] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("FX/WaverR2:scale") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 0.2, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0.5, 0.5), Vector2(0.5, 0.5), Vector2(1, 1)] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("FX/WaveL3:position") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.4, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-65, -89), Vector2(-65, -89), Vector2(-165, -89)] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("FX/WaveL3:rotation") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [1.57058, 1.57058] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("FX/WaveL3:scale") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 0.4, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0.5, 0.5), Vector2(0.5, 0.5), Vector2(1, 1)] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("FX/WaverR3:position") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 0.4, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(70, -89), Vector2(70, -89), Vector2(170, -89)] +} +tracks/23/type = "value" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("FX/WaverR3:rotation") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/keys = { +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [4.71215, 4.71215] +} +tracks/24/type = "value" +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/path = NodePath("FX/WaverR3:scale") +tracks/24/interp = 1 +tracks/24/loop_wrap = true +tracks/24/keys = { +"times": PackedFloat32Array(0, 0.4, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0.5, 0.5), Vector2(0.5, 0.5), Vector2(1, 1)] +} +tracks/25/type = "value" +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/path = NodePath("FX/WaveL2:visible") +tracks/25/interp = 1 +tracks/25/loop_wrap = true +tracks/25/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/26/type = "value" +tracks/26/imported = false +tracks/26/enabled = true +tracks/26/path = NodePath("FX/WaveL2:modulate") +tracks/26/interp = 1 +tracks/26/loop_wrap = true +tracks/26/keys = { +"times": PackedFloat32Array(0, 0.2, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(0.329412, 0.352941, 0.392157, 1), Color(0.329412, 0.352941, 0.392157, 1), Color(0.607843, 0.898039, 1, 0)] +} +tracks/27/type = "value" +tracks/27/imported = false +tracks/27/enabled = true +tracks/27/path = NodePath("FX/WaverR2:visible") +tracks/27/interp = 1 +tracks/27/loop_wrap = true +tracks/27/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/28/type = "value" +tracks/28/imported = false +tracks/28/enabled = true +tracks/28/path = NodePath("FX/WaverR2:modulate") +tracks/28/interp = 1 +tracks/28/loop_wrap = true +tracks/28/keys = { +"times": PackedFloat32Array(0, 0.2, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(0.329412, 0.352941, 0.392157, 1), Color(0.329412, 0.352941, 0.392157, 1), Color(0.607843, 0.898039, 1, 0)] +} +tracks/29/type = "value" +tracks/29/imported = false +tracks/29/enabled = true +tracks/29/path = NodePath("FX/WaveL3:visible") +tracks/29/interp = 1 +tracks/29/loop_wrap = true +tracks/29/keys = { +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/30/type = "value" +tracks/30/imported = false +tracks/30/enabled = true +tracks/30/path = NodePath("FX/WaveL3:modulate") +tracks/30/interp = 1 +tracks/30/loop_wrap = true +tracks/30/keys = { +"times": PackedFloat32Array(-0.00147765, 0.4, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(0.329412, 0.352941, 0.392157, 1), Color(0.329412, 0.352941, 0.392157, 1), Color(0.607843, 0.898039, 1, 0)] +} +tracks/31/type = "value" +tracks/31/imported = false +tracks/31/enabled = true +tracks/31/path = NodePath("FX/WaverR3:visible") +tracks/31/interp = 1 +tracks/31/loop_wrap = true +tracks/31/keys = { +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/32/type = "value" +tracks/32/imported = false +tracks/32/enabled = true +tracks/32/path = NodePath("FX/WaverR3:modulate") +tracks/32/interp = 1 +tracks/32/loop_wrap = true +tracks/32/keys = { +"times": PackedFloat32Array(-0.00147765, 0.4, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(0.329412, 0.352941, 0.392157, 1), Color(0.329412, 0.352941, 0.392157, 1), Color(0.607843, 0.898039, 1, 0)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_332s2"] +_data = { +"RESET": SubResource("Animation_i5ovs"), +"struck": SubResource("Animation_ie54r") +} + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_nixvt"] +radius = 20.91 +height = 186.37 + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_ru7jf"] +radius = 39.2 +height = 253.42 + +[node name="Gong" type="StaticBody2D"] +script = ExtResource("1_77c1i") +metadata/_edit_horizontal_guides_ = [111.0] + +[node name="Root" type="Node2D" parent="."] +metadata/_edit_lock_ = true + +[node name="Shadow" type="Sprite2D" parent="Root"] +modulate = Color(1, 1, 1, 0.329412) +position = Vector2(0, -8) +scale = Vector2(2.31, 1.7) +texture = ExtResource("1_vl1mv") + +[node name="Gong" type="Sprite2D" parent="Root"] +texture = ExtResource("1_kbnv6") +offset = Vector2(0, -110) + +[node name="FX" type="Node2D" parent="."] +metadata/_edit_lock_ = true + +[node name="WaveL1" type="Sprite2D" parent="FX"] +visible = false +modulate = Color(0.329412, 0.352941, 0.392157, 1) +position = Vector2(-65, -89) +rotation = 1.57058 +scale = Vector2(0.5, 0.5) +texture = ExtResource("2_dib3m") +region_enabled = true +region_rect = Rect2(0, 0, 191, 74) + +[node name="WaverR1" type="Sprite2D" parent="FX"] +visible = false +modulate = Color(0.329412, 0.352941, 0.392157, 1) +position = Vector2(70, -89) +rotation = 4.71215 +scale = Vector2(0.5, 0.5) +texture = ExtResource("2_dib3m") +region_enabled = true +region_rect = Rect2(0, 0, 191, 74) + +[node name="WaveL2" type="Sprite2D" parent="FX"] +visible = false +modulate = Color(0.329412, 0.352941, 0.392157, 1) +position = Vector2(-65, -89) +rotation = 1.57058 +scale = Vector2(0.5, 0.5) +texture = ExtResource("2_dib3m") +region_enabled = true +region_rect = Rect2(0, 0, 191, 74) + +[node name="WaverR2" type="Sprite2D" parent="FX"] +visible = false +modulate = Color(0.329412, 0.352941, 0.392157, 1) +position = Vector2(70, -89) +rotation = 4.71215 +scale = Vector2(0.5, 0.5) +texture = ExtResource("2_dib3m") +region_enabled = true +region_rect = Rect2(0, 0, 191, 74) + +[node name="WaveL3" type="Sprite2D" parent="FX"] +visible = false +modulate = Color(0.329412, 0.352941, 0.392157, 1) +position = Vector2(-65, -89) +rotation = 1.57058 +scale = Vector2(0.5, 0.5) +texture = ExtResource("2_dib3m") +region_enabled = true +region_rect = Rect2(0, 0, 191, 74) + +[node name="WaverR3" type="Sprite2D" parent="FX"] +visible = false +modulate = Color(0.329412, 0.352941, 0.392157, 1) +position = Vector2(70, -89) +rotation = 4.71215 +scale = Vector2(0.5, 0.5) +texture = ExtResource("2_dib3m") +region_enabled = true +region_rect = Rect2(0, 0, 191, 74) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_332s2") +} + +[node name="GongSFX" type="AudioStreamPlayer" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(0, -14.395) +rotation = 1.5708 +shape = SubResource("CapsuleShape2D_nixvt") + +[node name="Hurtbox" type="Area2D" parent="." node_paths=PackedStringArray("health")] +collision_layer = 8 +collision_mask = 0 +script = ExtResource("5_xeb5y") +health = NodePath("../Health") + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="Hurtbox"] +position = Vector2(0, -14.395) +rotation = 1.5708 +shape = SubResource("CapsuleShape2D_ru7jf") +debug_color = Color(0.886275, 0.109804, 0.756863, 0.419608) + +[node name="Health" type="Node" parent="."] +script = ExtResource("6_6a3q1") +max_health = 1e+11 + +[connection signal="damaged" from="Health" to="." method="_on_health_damaged"] diff --git a/demo/scenes/base/arena.tscn b/demo/scenes/base/arena.tscn new file mode 100644 index 0000000..3c5c906 --- /dev/null +++ b/demo/scenes/base/arena.tscn @@ -0,0 +1,5142 @@ +[gd_scene load_steps=8 format=3 uid="uid://bsig1usigbbuy"] + +[ext_resource type="Texture2D" uid="uid://65b6yuobhxf8" path="res://demo/assets/env_clouds.png" id="1_1blat"] +[ext_resource type="Texture2D" uid="uid://b3g14elmg0m36" path="res://demo/assets/env_rocks.png" id="1_145kx"] +[ext_resource type="Texture2D" uid="uid://cc7b22sy46gwn" path="res://demo/assets/env_ground.png" id="1_vifjc"] +[ext_resource type="Texture2D" uid="uid://4kw2ks8doc0w" path="res://demo/assets/env_plants.png" id="2_kesm7"] + +[sub_resource type="Animation" id="Animation_gwtgs"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Environment/Clouds/Cloud11:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3784, 345)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Environment/Clouds/Cloud1:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(764, 358)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Environment/Clouds/Cloud13:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(4005, 2983)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Environment/Clouds/Cloud5:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-152, 2723)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Environment/Clouds/Cloud6:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3293, 936)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Environment/Clouds/Cloud2:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(85, 1505)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Environment/Clouds/Cloud16:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3434, 3542)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Environment/Clouds/Cloud7:position") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1380, 3802)] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Environment/Clouds/Cloud3:position") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(503, 1222)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Environment/Clouds/Cloud14:position") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(4174, 3309)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Environment/Clouds/Cloud15:position") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(4695, 2800)] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Environment/Clouds/Cloud8:position") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(152, 3383)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Environment/Clouds/Cloud4:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(164, 1669)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Environment/Clouds/Cloud9:position") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(328, 3474)] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Environment/Clouds/Cloud10:position") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(933, 515)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Environment/Clouds/Cloud12:position") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(4570, 1222)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Environment/Clouds/Cloud11:scale") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Environment/Clouds/Cloud1:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Environment/Clouds/Cloud13:scale") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Environment/Clouds/Cloud5:scale") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Environment/Clouds/Cloud6:scale") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Environment/Clouds/Cloud2:scale") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Environment/Clouds/Cloud16:scale") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/23/type = "value" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("Environment/Clouds/Cloud7:scale") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/24/type = "value" +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/path = NodePath("Environment/Clouds/Cloud3:scale") +tracks/24/interp = 1 +tracks/24/loop_wrap = true +tracks/24/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/25/type = "value" +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/path = NodePath("Environment/Clouds/Cloud14:scale") +tracks/25/interp = 1 +tracks/25/loop_wrap = true +tracks/25/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/26/type = "value" +tracks/26/imported = false +tracks/26/enabled = true +tracks/26/path = NodePath("Environment/Clouds/Cloud15:scale") +tracks/26/interp = 1 +tracks/26/loop_wrap = true +tracks/26/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/27/type = "value" +tracks/27/imported = false +tracks/27/enabled = true +tracks/27/path = NodePath("Environment/Clouds/Cloud8:scale") +tracks/27/interp = 1 +tracks/27/loop_wrap = true +tracks/27/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/28/type = "value" +tracks/28/imported = false +tracks/28/enabled = true +tracks/28/path = NodePath("Environment/Clouds/Cloud4:scale") +tracks/28/interp = 1 +tracks/28/loop_wrap = true +tracks/28/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/29/type = "value" +tracks/29/imported = false +tracks/29/enabled = true +tracks/29/path = NodePath("Environment/Clouds/Cloud9:scale") +tracks/29/interp = 1 +tracks/29/loop_wrap = true +tracks/29/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/30/type = "value" +tracks/30/imported = false +tracks/30/enabled = true +tracks/30/path = NodePath("Environment/Clouds/Cloud10:scale") +tracks/30/interp = 1 +tracks/30/loop_wrap = true +tracks/30/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/31/type = "value" +tracks/31/imported = false +tracks/31/enabled = true +tracks/31/path = NodePath("Environment/Clouds/Cloud12:scale") +tracks/31/interp = 1 +tracks/31/loop_wrap = true +tracks/31/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/32/type = "value" +tracks/32/imported = false +tracks/32/enabled = true +tracks/32/path = NodePath("Environment/Clouds/Cloud1:visible") +tracks/32/interp = 1 +tracks/32/loop_wrap = true +tracks/32/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/33/type = "value" +tracks/33/imported = false +tracks/33/enabled = true +tracks/33/path = NodePath("Environment/Clouds/Cloud13:visible") +tracks/33/interp = 1 +tracks/33/loop_wrap = true +tracks/33/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/34/type = "value" +tracks/34/imported = false +tracks/34/enabled = true +tracks/34/path = NodePath("Environment/Clouds/Cloud5:visible") +tracks/34/interp = 1 +tracks/34/loop_wrap = true +tracks/34/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/35/type = "value" +tracks/35/imported = false +tracks/35/enabled = true +tracks/35/path = NodePath("Environment/Clouds/Cloud6:visible") +tracks/35/interp = 1 +tracks/35/loop_wrap = true +tracks/35/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/36/type = "value" +tracks/36/imported = false +tracks/36/enabled = true +tracks/36/path = NodePath("Environment/Clouds/Cloud2:visible") +tracks/36/interp = 1 +tracks/36/loop_wrap = true +tracks/36/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/37/type = "value" +tracks/37/imported = false +tracks/37/enabled = true +tracks/37/path = NodePath("Environment/Clouds/Cloud16:visible") +tracks/37/interp = 1 +tracks/37/loop_wrap = true +tracks/37/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/38/type = "value" +tracks/38/imported = false +tracks/38/enabled = true +tracks/38/path = NodePath("Environment/Clouds/Cloud7:visible") +tracks/38/interp = 1 +tracks/38/loop_wrap = true +tracks/38/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/39/type = "value" +tracks/39/imported = false +tracks/39/enabled = true +tracks/39/path = NodePath("Environment/Clouds/Cloud3:visible") +tracks/39/interp = 1 +tracks/39/loop_wrap = true +tracks/39/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/40/type = "value" +tracks/40/imported = false +tracks/40/enabled = true +tracks/40/path = NodePath("Environment/Clouds/Cloud14:visible") +tracks/40/interp = 1 +tracks/40/loop_wrap = true +tracks/40/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/41/type = "value" +tracks/41/imported = false +tracks/41/enabled = true +tracks/41/path = NodePath("Environment/Clouds/Cloud15:visible") +tracks/41/interp = 1 +tracks/41/loop_wrap = true +tracks/41/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/42/type = "value" +tracks/42/imported = false +tracks/42/enabled = true +tracks/42/path = NodePath("Environment/Clouds/Cloud8:visible") +tracks/42/interp = 1 +tracks/42/loop_wrap = true +tracks/42/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/43/type = "value" +tracks/43/imported = false +tracks/43/enabled = true +tracks/43/path = NodePath("Environment/Clouds/Cloud4:visible") +tracks/43/interp = 1 +tracks/43/loop_wrap = true +tracks/43/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/44/type = "value" +tracks/44/imported = false +tracks/44/enabled = true +tracks/44/path = NodePath("Environment/Clouds/Cloud9:visible") +tracks/44/interp = 1 +tracks/44/loop_wrap = true +tracks/44/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/45/type = "value" +tracks/45/imported = false +tracks/45/enabled = true +tracks/45/path = NodePath("Environment/Clouds/Cloud10:visible") +tracks/45/interp = 1 +tracks/45/loop_wrap = true +tracks/45/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/46/type = "value" +tracks/46/imported = false +tracks/46/enabled = true +tracks/46/path = NodePath("Environment/Clouds/Cloud12:visible") +tracks/46/interp = 1 +tracks/46/loop_wrap = true +tracks/46/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/47/type = "value" +tracks/47/imported = false +tracks/47/enabled = true +tracks/47/path = NodePath("Environment/Clouds/Cloud11:visible") +tracks/47/interp = 1 +tracks/47/loop_wrap = true +tracks/47/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/48/type = "value" +tracks/48/imported = false +tracks/48/enabled = true +tracks/48/path = NodePath("Environment/Clouds/Cloud17:position") +tracks/48/interp = 1 +tracks/48/loop_wrap = true +tracks/48/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-2737.13, 367.814)] +} +tracks/49/type = "value" +tracks/49/imported = false +tracks/49/enabled = true +tracks/49/path = NodePath("Environment/Clouds/Cloud17:scale") +tracks/49/interp = 1 +tracks/49/loop_wrap = true +tracks/49/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1.35085, 1.15254)] +} +tracks/50/type = "value" +tracks/50/imported = false +tracks/50/enabled = true +tracks/50/path = NodePath("Environment/Clouds/Cloud18:position") +tracks/50/interp = 1 +tracks/50/loop_wrap = true +tracks/50/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-1254.92, 3539.61)] +} +tracks/51/type = "value" +tracks/51/imported = false +tracks/51/enabled = true +tracks/51/path = NodePath("Environment/Clouds/Cloud18:scale") +tracks/51/interp = 1 +tracks/51/loop_wrap = true +tracks/51/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.898305, 0.898305)] +} +tracks/52/type = "value" +tracks/52/imported = false +tracks/52/enabled = true +tracks/52/path = NodePath("Environment/Clouds/Cloud19:position") +tracks/52/interp = 1 +tracks/52/loop_wrap = true +tracks/52/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-2912.7, 1260.29)] +} +tracks/53/type = "value" +tracks/53/imported = false +tracks/53/enabled = true +tracks/53/path = NodePath("Environment/Clouds/Cloud19:scale") +tracks/53/interp = 1 +tracks/53/loop_wrap = true +tracks/53/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1.10169, 1.10169)] +} +tracks/54/type = "value" +tracks/54/imported = false +tracks/54/enabled = true +tracks/54/path = NodePath("Environment/Clouds/Cloud20:position") +tracks/54/interp = 1 +tracks/54/loop_wrap = true +tracks/54/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-3251.5, 3437.56)] +} +tracks/55/type = "value" +tracks/55/imported = false +tracks/55/enabled = true +tracks/55/path = NodePath("Environment/Clouds/Cloud20:scale") +tracks/55/interp = 1 +tracks/55/loop_wrap = true +tracks/55/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/56/type = "value" +tracks/56/imported = false +tracks/56/enabled = true +tracks/56/path = NodePath("Environment/Clouds/Cloud21:position") +tracks/56/interp = 1 +tracks/56/loop_wrap = true +tracks/56/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-3181.26, 3581.44)] +} +tracks/57/type = "value" +tracks/57/imported = false +tracks/57/enabled = true +tracks/57/path = NodePath("Environment/Clouds/Cloud21:scale") +tracks/57/interp = 1 +tracks/57/loop_wrap = true +tracks/57/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.949153, 0.949153)] +} +tracks/58/type = "value" +tracks/58/imported = false +tracks/58/enabled = true +tracks/58/path = NodePath("Environment/Clouds/Cloud22:position") +tracks/58/interp = 1 +tracks/58/loop_wrap = true +tracks/58/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-420.856, 367.017)] +} +tracks/59/type = "value" +tracks/59/imported = false +tracks/59/enabled = true +tracks/59/path = NodePath("Environment/Clouds/Cloud22:scale") +tracks/59/interp = 1 +tracks/59/loop_wrap = true +tracks/59/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/60/type = "value" +tracks/60/imported = false +tracks/60/enabled = true +tracks/60/path = NodePath("Environment/Clouds/Cloud17:visible") +tracks/60/interp = 1 +tracks/60/loop_wrap = true +tracks/60/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/61/type = "value" +tracks/61/imported = false +tracks/61/enabled = true +tracks/61/path = NodePath("Environment/Clouds/Cloud18:visible") +tracks/61/interp = 1 +tracks/61/loop_wrap = true +tracks/61/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/62/type = "value" +tracks/62/imported = false +tracks/62/enabled = true +tracks/62/path = NodePath("Environment/Clouds/Cloud19:visible") +tracks/62/interp = 1 +tracks/62/loop_wrap = true +tracks/62/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/63/type = "value" +tracks/63/imported = false +tracks/63/enabled = true +tracks/63/path = NodePath("Environment/Clouds/Cloud20:visible") +tracks/63/interp = 1 +tracks/63/loop_wrap = true +tracks/63/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/64/type = "value" +tracks/64/imported = false +tracks/64/enabled = true +tracks/64/path = NodePath("Environment/Clouds/Cloud21:visible") +tracks/64/interp = 1 +tracks/64/loop_wrap = true +tracks/64/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/65/type = "value" +tracks/65/imported = false +tracks/65/enabled = true +tracks/65/path = NodePath("Environment/Clouds/Cloud22:visible") +tracks/65/interp = 1 +tracks/65/loop_wrap = true +tracks/65/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/66/type = "value" +tracks/66/imported = false +tracks/66/enabled = true +tracks/66/path = NodePath("Environment/Clouds/Cloud28:position") +tracks/66/interp = 1 +tracks/66/loop_wrap = true +tracks/66/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-461, 1787)] +} +tracks/67/type = "value" +tracks/67/imported = false +tracks/67/enabled = true +tracks/67/path = NodePath("Environment/Clouds/Cloud28:scale") +tracks/67/interp = 1 +tracks/67/loop_wrap = true +tracks/67/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1.10169, 1.10169)] +} +tracks/68/type = "value" +tracks/68/imported = false +tracks/68/enabled = true +tracks/68/path = NodePath("Environment/Clouds/Cloud23:position") +tracks/68/interp = 1 +tracks/68/loop_wrap = true +tracks/68/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-1493, 3040)] +} +tracks/69/type = "value" +tracks/69/imported = false +tracks/69/enabled = true +tracks/69/path = NodePath("Environment/Clouds/Cloud23:scale") +tracks/69/interp = 1 +tracks/69/loop_wrap = true +tracks/69/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.898305, 0.898305)] +} +tracks/70/type = "value" +tracks/70/imported = false +tracks/70/enabled = true +tracks/70/path = NodePath("Environment/Clouds/Cloud24:position") +tracks/70/interp = 1 +tracks/70/loop_wrap = true +tracks/70/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-510, 2429)] +} +tracks/71/type = "value" +tracks/71/imported = false +tracks/71/enabled = true +tracks/71/path = NodePath("Environment/Clouds/Cloud24:scale") +tracks/71/interp = 1 +tracks/71/loop_wrap = true +tracks/71/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1.15254, 1.15254)] +} +tracks/72/type = "value" +tracks/72/imported = false +tracks/72/enabled = true +tracks/72/path = NodePath("Environment/Clouds/Cloud25:position") +tracks/72/interp = 1 +tracks/72/loop_wrap = true +tracks/72/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-712, 1373)] +} +tracks/73/type = "value" +tracks/73/imported = false +tracks/73/enabled = true +tracks/73/path = NodePath("Environment/Clouds/Cloud25:scale") +tracks/73/interp = 1 +tracks/73/loop_wrap = true +tracks/73/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1.10169, 1.10169)] +} +tracks/74/type = "value" +tracks/74/imported = false +tracks/74/enabled = true +tracks/74/path = NodePath("Environment/Clouds/Cloud26:position") +tracks/74/interp = 1 +tracks/74/loop_wrap = true +tracks/74/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-269, 2004)] +} +tracks/75/type = "value" +tracks/75/imported = false +tracks/75/enabled = true +tracks/75/path = NodePath("Environment/Clouds/Cloud26:scale") +tracks/75/interp = 1 +tracks/75/loop_wrap = true +tracks/75/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.79661, 0.79661)] +} +tracks/76/type = "value" +tracks/76/imported = false +tracks/76/enabled = true +tracks/76/path = NodePath("Environment/Clouds/Cloud27:position") +tracks/76/interp = 1 +tracks/76/loop_wrap = true +tracks/76/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-1656, 2353)] +} +tracks/77/type = "value" +tracks/77/imported = false +tracks/77/enabled = true +tracks/77/path = NodePath("Environment/Clouds/Cloud27:scale") +tracks/77/interp = 1 +tracks/77/loop_wrap = true +tracks/77/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.949153, 0.949153)] +} +tracks/78/type = "value" +tracks/78/imported = false +tracks/78/enabled = true +tracks/78/path = NodePath("Environment/Clouds/Cloud23:visible") +tracks/78/interp = 1 +tracks/78/loop_wrap = true +tracks/78/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/79/type = "value" +tracks/79/imported = false +tracks/79/enabled = true +tracks/79/path = NodePath("Environment/Clouds/Cloud24:visible") +tracks/79/interp = 1 +tracks/79/loop_wrap = true +tracks/79/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/80/type = "value" +tracks/80/imported = false +tracks/80/enabled = true +tracks/80/path = NodePath("Environment/Clouds/Cloud25:visible") +tracks/80/interp = 1 +tracks/80/loop_wrap = true +tracks/80/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/81/type = "value" +tracks/81/imported = false +tracks/81/enabled = true +tracks/81/path = NodePath("Environment/Clouds/Cloud26:visible") +tracks/81/interp = 1 +tracks/81/loop_wrap = true +tracks/81/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/82/type = "value" +tracks/82/imported = false +tracks/82/enabled = true +tracks/82/path = NodePath("Environment/Clouds/Cloud27:visible") +tracks/82/interp = 1 +tracks/82/loop_wrap = true +tracks/82/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/83/type = "value" +tracks/83/imported = false +tracks/83/enabled = true +tracks/83/path = NodePath("Environment/Clouds/Cloud28:visible") +tracks/83/interp = 1 +tracks/83/loop_wrap = true +tracks/83/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/84/type = "value" +tracks/84/imported = false +tracks/84/enabled = true +tracks/84/path = NodePath("Environment/Clouds/Cloud29:position") +tracks/84/interp = 1 +tracks/84/loop_wrap = true +tracks/84/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3890, 2612.5)] +} +tracks/85/type = "value" +tracks/85/imported = false +tracks/85/enabled = true +tracks/85/path = NodePath("Environment/Clouds/Cloud29:scale") +tracks/85/interp = 1 +tracks/85/loop_wrap = true +tracks/85/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/86/type = "value" +tracks/86/imported = false +tracks/86/enabled = true +tracks/86/path = NodePath("Environment/Clouds/Cloud30:position") +tracks/86/interp = 1 +tracks/86/loop_wrap = true +tracks/86/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3832, 1394.5)] +} +tracks/87/type = "value" +tracks/87/imported = false +tracks/87/enabled = true +tracks/87/path = NodePath("Environment/Clouds/Cloud30:scale") +tracks/87/interp = 1 +tracks/87/loop_wrap = true +tracks/87/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/88/type = "value" +tracks/88/imported = false +tracks/88/enabled = true +tracks/88/path = NodePath("Environment/Clouds/Cloud31:position") +tracks/88/interp = 1 +tracks/88/loop_wrap = true +tracks/88/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3472, 3106)] +} +tracks/89/type = "value" +tracks/89/imported = false +tracks/89/enabled = true +tracks/89/path = NodePath("Environment/Clouds/Cloud31:scale") +tracks/89/interp = 1 +tracks/89/loop_wrap = true +tracks/89/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/90/type = "value" +tracks/90/imported = false +tracks/90/enabled = true +tracks/90/path = NodePath("Environment/Clouds/Cloud32:position") +tracks/90/interp = 1 +tracks/90/loop_wrap = true +tracks/90/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3095, 2689.5)] +} +tracks/91/type = "value" +tracks/91/imported = false +tracks/91/enabled = true +tracks/91/path = NodePath("Environment/Clouds/Cloud32:scale") +tracks/91/interp = 1 +tracks/91/loop_wrap = true +tracks/91/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/92/type = "value" +tracks/92/imported = false +tracks/92/enabled = true +tracks/92/path = NodePath("Environment/Clouds/Cloud33:position") +tracks/92/interp = 1 +tracks/92/loop_wrap = true +tracks/92/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(4016, 1558.5)] +} +tracks/93/type = "value" +tracks/93/imported = false +tracks/93/enabled = true +tracks/93/path = NodePath("Environment/Clouds/Cloud33:scale") +tracks/93/interp = 1 +tracks/93/loop_wrap = true +tracks/93/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/94/type = "value" +tracks/94/imported = false +tracks/94/enabled = true +tracks/94/path = NodePath("Environment/Clouds/Cloud29:visible") +tracks/94/interp = 1 +tracks/94/loop_wrap = true +tracks/94/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/95/type = "value" +tracks/95/imported = false +tracks/95/enabled = true +tracks/95/path = NodePath("Environment/Clouds/Cloud30:visible") +tracks/95/interp = 1 +tracks/95/loop_wrap = true +tracks/95/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/96/type = "value" +tracks/96/imported = false +tracks/96/enabled = true +tracks/96/path = NodePath("Environment/Clouds/Cloud31:visible") +tracks/96/interp = 1 +tracks/96/loop_wrap = true +tracks/96/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/97/type = "value" +tracks/97/imported = false +tracks/97/enabled = true +tracks/97/path = NodePath("Environment/Clouds/Cloud32:visible") +tracks/97/interp = 1 +tracks/97/loop_wrap = true +tracks/97/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/98/type = "value" +tracks/98/imported = false +tracks/98/enabled = true +tracks/98/path = NodePath("Environment/Clouds/Cloud33:visible") +tracks/98/interp = 1 +tracks/98/loop_wrap = true +tracks/98/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/99/type = "value" +tracks/99/imported = false +tracks/99/enabled = true +tracks/99/path = NodePath("Environment/Clouds/Cloud34:position") +tracks/99/interp = 1 +tracks/99/loop_wrap = true +tracks/99/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3863, 1375)] +} +tracks/100/type = "value" +tracks/100/imported = false +tracks/100/enabled = true +tracks/100/path = NodePath("Environment/Clouds/Cloud34:scale") +tracks/100/interp = 1 +tracks/100/loop_wrap = true +tracks/100/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/101/type = "value" +tracks/101/imported = false +tracks/101/enabled = true +tracks/101/path = NodePath("Environment/Clouds/Cloud35:position") +tracks/101/interp = 1 +tracks/101/loop_wrap = true +tracks/101/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3521.25, 3087)] +} +tracks/102/type = "value" +tracks/102/imported = false +tracks/102/enabled = true +tracks/102/path = NodePath("Environment/Clouds/Cloud35:scale") +tracks/102/interp = 1 +tracks/102/loop_wrap = true +tracks/102/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/103/type = "value" +tracks/103/imported = false +tracks/103/enabled = true +tracks/103/path = NodePath("Environment/Clouds/Cloud36:position") +tracks/103/interp = 1 +tracks/103/loop_wrap = true +tracks/103/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3609.25, 3161)] +} +tracks/104/type = "value" +tracks/104/imported = false +tracks/104/enabled = true +tracks/104/path = NodePath("Environment/Clouds/Cloud36:scale") +tracks/104/interp = 1 +tracks/104/loop_wrap = true +tracks/104/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/105/type = "value" +tracks/105/imported = false +tracks/105/enabled = true +tracks/105/path = NodePath("Environment/Clouds/Cloud37:position") +tracks/105/interp = 1 +tracks/105/loop_wrap = true +tracks/105/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3754.25, 1447)] +} +tracks/106/type = "value" +tracks/106/imported = false +tracks/106/enabled = true +tracks/106/path = NodePath("Environment/Clouds/Cloud37:scale") +tracks/106/interp = 1 +tracks/106/loop_wrap = true +tracks/106/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/107/type = "value" +tracks/107/imported = false +tracks/107/enabled = true +tracks/107/path = NodePath("Environment/Clouds/Cloud38:position") +tracks/107/interp = 1 +tracks/107/loop_wrap = true +tracks/107/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(2915.25, 2833)] +} +tracks/108/type = "value" +tracks/108/imported = false +tracks/108/enabled = true +tracks/108/path = NodePath("Environment/Clouds/Cloud38:scale") +tracks/108/interp = 1 +tracks/108/loop_wrap = true +tracks/108/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.898305, 0.898305)] +} +tracks/109/type = "value" +tracks/109/imported = false +tracks/109/enabled = true +tracks/109/path = NodePath("Environment/Clouds/Cloud39:position") +tracks/109/interp = 1 +tracks/109/loop_wrap = true +tracks/109/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3270.25, 2207)] +} +tracks/110/type = "value" +tracks/110/imported = false +tracks/110/enabled = true +tracks/110/path = NodePath("Environment/Clouds/Cloud39:scale") +tracks/110/interp = 1 +tracks/110/loop_wrap = true +tracks/110/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/111/type = "value" +tracks/111/imported = false +tracks/111/enabled = true +tracks/111/path = NodePath("Environment/Clouds/Cloud34:visible") +tracks/111/interp = 1 +tracks/111/loop_wrap = true +tracks/111/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/112/type = "value" +tracks/112/imported = false +tracks/112/enabled = true +tracks/112/path = NodePath("Environment/Clouds/Cloud35:visible") +tracks/112/interp = 1 +tracks/112/loop_wrap = true +tracks/112/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/113/type = "value" +tracks/113/imported = false +tracks/113/enabled = true +tracks/113/path = NodePath("Environment/Clouds/Cloud36:visible") +tracks/113/interp = 1 +tracks/113/loop_wrap = true +tracks/113/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/114/type = "value" +tracks/114/imported = false +tracks/114/enabled = true +tracks/114/path = NodePath("Environment/Clouds/Cloud37:visible") +tracks/114/interp = 1 +tracks/114/loop_wrap = true +tracks/114/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/115/type = "value" +tracks/115/imported = false +tracks/115/enabled = true +tracks/115/path = NodePath("Environment/Clouds/Cloud38:visible") +tracks/115/interp = 1 +tracks/115/loop_wrap = true +tracks/115/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/116/type = "value" +tracks/116/imported = false +tracks/116/enabled = true +tracks/116/path = NodePath("Environment/Clouds/Cloud39:visible") +tracks/116/interp = 1 +tracks/116/loop_wrap = true +tracks/116/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_75lmk"] +resource_name = "float" +length = 60.2 +loop_mode = 1 +step = 0.2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Environment/Clouds/Cloud11:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-878, 345), Vector2(8280, 329), Vector2(-878, 345)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Environment/Clouds/Cloud1:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-149, 377), Vector2(6644, 318), Vector2(-149, 377)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Environment/Clouds/Cloud13:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-856, 3012), Vector2(6701, 2975), Vector2(-856, 3012)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Environment/Clouds/Cloud5:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-152, 2723), Vector2(6304, 2691), Vector2(-152, 2723)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Environment/Clouds/Cloud6:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-1169, 936), Vector2(6941, 936), Vector2(-1169, 936)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Environment/Clouds/Cloud2:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-210, 1505), Vector2(7109, 1489), Vector2(-210, 1505)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Environment/Clouds/Cloud16:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-733, 3542), Vector2(6978, 3478), Vector2(-733, 3542)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Environment/Clouds/Cloud7:position") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-1427, 3831), Vector2(6420, 3842), Vector2(-1427, 3831)] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Environment/Clouds/Cloud3:position") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-258, 1222), Vector2(6551, 1238), Vector2(-258, 1222)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Environment/Clouds/Cloud14:position") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-259, 3309), Vector2(7190, 3301), Vector2(-259, 3309)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Environment/Clouds/Cloud15:position") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-947, 2800), Vector2(7711, 2824), Vector2(-947, 2800)] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Environment/Clouds/Cloud8:position") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-171, 3383), Vector2(6224, 3431), Vector2(-171, 3383)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Environment/Clouds/Cloud4:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-26, 1669), Vector2(6716, 1797), Vector2(-26, 1669)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Environment/Clouds/Cloud9:position") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-500, 3474), Vector2(6192, 3626), Vector2(-500, 3474)] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Environment/Clouds/Cloud10:position") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-285, 515), Vector2(6173, 595), Vector2(-285, 515)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Environment/Clouds/Cloud12:position") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(-444, 1222), Vector2(8090, 1286), Vector2(-444, 1222)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Environment/Clouds/Cloud11:scale") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Environment/Clouds/Cloud1:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1.69, 1.3), Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Environment/Clouds/Cloud13:scale") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Environment/Clouds/Cloud5:scale") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.8, 0.8), Vector2(1, 1)] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Environment/Clouds/Cloud6:scale") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1.2, 1.2), Vector2(1, 1)] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Environment/Clouds/Cloud2:scale") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1.3, 1.3), Vector2(1, 1)] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Environment/Clouds/Cloud16:scale") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.8, 0.8), Vector2(1, 1)] +} +tracks/23/type = "value" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("Environment/Clouds/Cloud7:scale") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1.2, 1.2), Vector2(1, 1)] +} +tracks/24/type = "value" +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/path = NodePath("Environment/Clouds/Cloud3:scale") +tracks/24/interp = 1 +tracks/24/loop_wrap = true +tracks/24/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1.2, 1.2), Vector2(1, 1)] +} +tracks/25/type = "value" +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/path = NodePath("Environment/Clouds/Cloud14:scale") +tracks/25/interp = 1 +tracks/25/loop_wrap = true +tracks/25/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1.3, 1.3), Vector2(1, 1)] +} +tracks/26/type = "value" +tracks/26/imported = false +tracks/26/enabled = true +tracks/26/path = NodePath("Environment/Clouds/Cloud15:scale") +tracks/26/interp = 1 +tracks/26/loop_wrap = true +tracks/26/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.6, 0.6), Vector2(1, 1)] +} +tracks/27/type = "value" +tracks/27/imported = false +tracks/27/enabled = true +tracks/27/path = NodePath("Environment/Clouds/Cloud8:scale") +tracks/27/interp = 1 +tracks/27/loop_wrap = true +tracks/27/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/28/type = "value" +tracks/28/imported = false +tracks/28/enabled = true +tracks/28/path = NodePath("Environment/Clouds/Cloud4:scale") +tracks/28/interp = 1 +tracks/28/loop_wrap = true +tracks/28/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1.3, 1.3), Vector2(1, 1)] +} +tracks/29/type = "value" +tracks/29/imported = false +tracks/29/enabled = true +tracks/29/path = NodePath("Environment/Clouds/Cloud9:scale") +tracks/29/interp = 1 +tracks/29/loop_wrap = true +tracks/29/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(0.9, 0.9), Vector2(1, 1)] +} +tracks/30/type = "value" +tracks/30/imported = false +tracks/30/enabled = true +tracks/30/path = NodePath("Environment/Clouds/Cloud10:scale") +tracks/30/interp = 1 +tracks/30/loop_wrap = true +tracks/30/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1.2, 1.2), Vector2(1, 1)] +} +tracks/31/type = "value" +tracks/31/imported = false +tracks/31/enabled = true +tracks/31/path = NodePath("Environment/Clouds/Cloud12:scale") +tracks/31/interp = 1 +tracks/31/loop_wrap = true +tracks/31/keys = { +"times": PackedFloat32Array(0, 59, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1.2, 1.2), Vector2(1, 1)] +} +tracks/32/type = "value" +tracks/32/imported = false +tracks/32/enabled = true +tracks/32/path = NodePath("Environment/Clouds/Cloud1:visible") +tracks/32/interp = 1 +tracks/32/loop_wrap = true +tracks/32/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/33/type = "value" +tracks/33/imported = false +tracks/33/enabled = true +tracks/33/path = NodePath("Environment/Clouds/Cloud13:visible") +tracks/33/interp = 1 +tracks/33/loop_wrap = true +tracks/33/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/34/type = "value" +tracks/34/imported = false +tracks/34/enabled = true +tracks/34/path = NodePath("Environment/Clouds/Cloud5:visible") +tracks/34/interp = 1 +tracks/34/loop_wrap = true +tracks/34/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/35/type = "value" +tracks/35/imported = false +tracks/35/enabled = true +tracks/35/path = NodePath("Environment/Clouds/Cloud6:visible") +tracks/35/interp = 1 +tracks/35/loop_wrap = true +tracks/35/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/36/type = "value" +tracks/36/imported = false +tracks/36/enabled = true +tracks/36/path = NodePath("Environment/Clouds/Cloud2:visible") +tracks/36/interp = 1 +tracks/36/loop_wrap = true +tracks/36/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/37/type = "value" +tracks/37/imported = false +tracks/37/enabled = true +tracks/37/path = NodePath("Environment/Clouds/Cloud16:visible") +tracks/37/interp = 1 +tracks/37/loop_wrap = true +tracks/37/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/38/type = "value" +tracks/38/imported = false +tracks/38/enabled = true +tracks/38/path = NodePath("Environment/Clouds/Cloud7:visible") +tracks/38/interp = 1 +tracks/38/loop_wrap = true +tracks/38/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/39/type = "value" +tracks/39/imported = false +tracks/39/enabled = true +tracks/39/path = NodePath("Environment/Clouds/Cloud3:visible") +tracks/39/interp = 1 +tracks/39/loop_wrap = true +tracks/39/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/40/type = "value" +tracks/40/imported = false +tracks/40/enabled = true +tracks/40/path = NodePath("Environment/Clouds/Cloud14:visible") +tracks/40/interp = 1 +tracks/40/loop_wrap = true +tracks/40/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/41/type = "value" +tracks/41/imported = false +tracks/41/enabled = true +tracks/41/path = NodePath("Environment/Clouds/Cloud15:visible") +tracks/41/interp = 1 +tracks/41/loop_wrap = true +tracks/41/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/42/type = "value" +tracks/42/imported = false +tracks/42/enabled = true +tracks/42/path = NodePath("Environment/Clouds/Cloud8:visible") +tracks/42/interp = 1 +tracks/42/loop_wrap = true +tracks/42/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/43/type = "value" +tracks/43/imported = false +tracks/43/enabled = true +tracks/43/path = NodePath("Environment/Clouds/Cloud4:visible") +tracks/43/interp = 1 +tracks/43/loop_wrap = true +tracks/43/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/44/type = "value" +tracks/44/imported = false +tracks/44/enabled = true +tracks/44/path = NodePath("Environment/Clouds/Cloud9:visible") +tracks/44/interp = 1 +tracks/44/loop_wrap = true +tracks/44/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/45/type = "value" +tracks/45/imported = false +tracks/45/enabled = true +tracks/45/path = NodePath("Environment/Clouds/Cloud10:visible") +tracks/45/interp = 1 +tracks/45/loop_wrap = true +tracks/45/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/46/type = "value" +tracks/46/imported = false +tracks/46/enabled = true +tracks/46/path = NodePath("Environment/Clouds/Cloud12:visible") +tracks/46/interp = 1 +tracks/46/loop_wrap = true +tracks/46/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/47/type = "value" +tracks/47/imported = false +tracks/47/enabled = true +tracks/47/path = NodePath("Environment/Clouds/Cloud11:visible") +tracks/47/interp = 1 +tracks/47/loop_wrap = true +tracks/47/keys = { +"times": PackedFloat32Array(0, 59, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/48/type = "value" +tracks/48/imported = false +tracks/48/enabled = true +tracks/48/path = NodePath("Environment/Clouds/Cloud17:position") +tracks/48/interp = 1 +tracks/48/loop_wrap = true +tracks/48/keys = { +"times": PackedFloat32Array(0, 12, 47, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-1928, 1432), Vector2(-1928, 1432), Vector2(4049, 1536), Vector2(-1928, 1432)] +} +tracks/49/type = "value" +tracks/49/imported = false +tracks/49/enabled = true +tracks/49/path = NodePath("Environment/Clouds/Cloud17:scale") +tracks/49/interp = 1 +tracks/49/loop_wrap = true +tracks/49/keys = { +"times": PackedFloat32Array(0, 12, 47, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1.35085, 1.15254), Vector2(1.35085, 1.15254), Vector2(1.35085, 1.15254), Vector2(1.35085, 1.15254)] +} +tracks/50/type = "value" +tracks/50/imported = false +tracks/50/enabled = true +tracks/50/path = NodePath("Environment/Clouds/Cloud18:position") +tracks/50/interp = 1 +tracks/50/loop_wrap = true +tracks/50/keys = { +"times": PackedFloat32Array(0, 12, 47, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-865, 3055), Vector2(-865, 3055), Vector2(3895.5, 3103.47), Vector2(-865, 3055)] +} +tracks/51/type = "value" +tracks/51/imported = false +tracks/51/enabled = true +tracks/51/path = NodePath("Environment/Clouds/Cloud18:scale") +tracks/51/interp = 1 +tracks/51/loop_wrap = true +tracks/51/keys = { +"times": PackedFloat32Array(0, 12, 47, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0.898305, 0.898305), Vector2(0.898305, 0.898305), Vector2(0.898305, 0.898305), Vector2(0.898305, 0.898305)] +} +tracks/52/type = "value" +tracks/52/imported = false +tracks/52/enabled = true +tracks/52/path = NodePath("Environment/Clouds/Cloud19:position") +tracks/52/interp = 1 +tracks/52/loop_wrap = true +tracks/52/keys = { +"times": PackedFloat32Array(0, 12, 47, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-1050, 1157), Vector2(-1050, 1157), Vector2(3710.5, 1205.47), Vector2(-1050, 1157)] +} +tracks/53/type = "value" +tracks/53/imported = false +tracks/53/enabled = true +tracks/53/path = NodePath("Environment/Clouds/Cloud19:scale") +tracks/53/interp = 1 +tracks/53/loop_wrap = true +tracks/53/keys = { +"times": PackedFloat32Array(0, 12, 47, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1.10169, 1.10169), Vector2(1.10169, 1.10169), Vector2(1.10169, 1.10169), Vector2(1.10169, 1.10169)] +} +tracks/54/type = "value" +tracks/54/imported = false +tracks/54/enabled = true +tracks/54/path = NodePath("Environment/Clouds/Cloud20:position") +tracks/54/interp = 1 +tracks/54/loop_wrap = true +tracks/54/keys = { +"times": PackedFloat32Array(0, 12, 47, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-2964, 2611), Vector2(-2964, 2611), Vector2(4117, 2739), Vector2(-2964, 2611)] +} +tracks/55/type = "value" +tracks/55/imported = false +tracks/55/enabled = true +tracks/55/path = NodePath("Environment/Clouds/Cloud20:scale") +tracks/55/interp = 1 +tracks/55/loop_wrap = true +tracks/55/keys = { +"times": PackedFloat32Array(0, 12, 47, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/56/type = "value" +tracks/56/imported = false +tracks/56/enabled = true +tracks/56/path = NodePath("Environment/Clouds/Cloud21:position") +tracks/56/interp = 1 +tracks/56/loop_wrap = true +tracks/56/keys = { +"times": PackedFloat32Array(0, 12, 47, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-493, 2589), Vector2(-493, 2589), Vector2(4267.5, 2637.47), Vector2(-493, 2589)] +} +tracks/57/type = "value" +tracks/57/imported = false +tracks/57/enabled = true +tracks/57/path = NodePath("Environment/Clouds/Cloud21:scale") +tracks/57/interp = 1 +tracks/57/loop_wrap = true +tracks/57/keys = { +"times": PackedFloat32Array(0, 12, 47, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0.949153, 0.949153), Vector2(0.949153, 0.949153), Vector2(0.949153, 0.949153), Vector2(0.949153, 0.949153)] +} +tracks/58/type = "value" +tracks/58/imported = false +tracks/58/enabled = true +tracks/58/path = NodePath("Environment/Clouds/Cloud22:position") +tracks/58/interp = 1 +tracks/58/loop_wrap = true +tracks/58/keys = { +"times": PackedFloat32Array(0, 12, 47, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-1333, 2015), Vector2(-1333, 2015), Vector2(3427.5, 2063.47), Vector2(-1333, 2015)] +} +tracks/59/type = "value" +tracks/59/imported = false +tracks/59/enabled = true +tracks/59/path = NodePath("Environment/Clouds/Cloud22:scale") +tracks/59/interp = 1 +tracks/59/loop_wrap = true +tracks/59/keys = { +"times": PackedFloat32Array(0, 12, 47, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/60/type = "value" +tracks/60/imported = false +tracks/60/enabled = true +tracks/60/path = NodePath("Environment/Clouds/Cloud17:visible") +tracks/60/interp = 1 +tracks/60/loop_wrap = true +tracks/60/keys = { +"times": PackedFloat32Array(0, 47, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/61/type = "value" +tracks/61/imported = false +tracks/61/enabled = true +tracks/61/path = NodePath("Environment/Clouds/Cloud18:visible") +tracks/61/interp = 1 +tracks/61/loop_wrap = true +tracks/61/keys = { +"times": PackedFloat32Array(0, 47, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/62/type = "value" +tracks/62/imported = false +tracks/62/enabled = true +tracks/62/path = NodePath("Environment/Clouds/Cloud19:visible") +tracks/62/interp = 1 +tracks/62/loop_wrap = true +tracks/62/keys = { +"times": PackedFloat32Array(0, 47, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/63/type = "value" +tracks/63/imported = false +tracks/63/enabled = true +tracks/63/path = NodePath("Environment/Clouds/Cloud20:visible") +tracks/63/interp = 1 +tracks/63/loop_wrap = true +tracks/63/keys = { +"times": PackedFloat32Array(0, 47, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/64/type = "value" +tracks/64/imported = false +tracks/64/enabled = true +tracks/64/path = NodePath("Environment/Clouds/Cloud21:visible") +tracks/64/interp = 1 +tracks/64/loop_wrap = true +tracks/64/keys = { +"times": PackedFloat32Array(0, 47, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/65/type = "value" +tracks/65/imported = false +tracks/65/enabled = true +tracks/65/path = NodePath("Environment/Clouds/Cloud22:visible") +tracks/65/interp = 1 +tracks/65/loop_wrap = true +tracks/65/keys = { +"times": PackedFloat32Array(0, 47, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/66/type = "value" +tracks/66/imported = false +tracks/66/enabled = true +tracks/66/path = NodePath("Environment/Clouds/Cloud28:position") +tracks/66/interp = 1 +tracks/66/loop_wrap = true +tracks/66/keys = { +"times": PackedFloat32Array(0, 30, 56, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-461, 1787), Vector2(-461, 1787), Vector2(3829.5, 1787), Vector2(-461, 1787)] +} +tracks/67/type = "value" +tracks/67/imported = false +tracks/67/enabled = true +tracks/67/path = NodePath("Environment/Clouds/Cloud28:scale") +tracks/67/interp = 1 +tracks/67/loop_wrap = true +tracks/67/keys = { +"times": PackedFloat32Array(0, 30, 56, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(0.9, 0.9), Vector2(1, 1)] +} +tracks/68/type = "value" +tracks/68/imported = false +tracks/68/enabled = true +tracks/68/path = NodePath("Environment/Clouds/Cloud23:position") +tracks/68/interp = 1 +tracks/68/loop_wrap = true +tracks/68/keys = { +"times": PackedFloat32Array(0, 30, 56, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-1493, 3040), Vector2(-1493, 3040), Vector2(3139.75, 3040), Vector2(-1493, 3040)] +} +tracks/69/type = "value" +tracks/69/imported = false +tracks/69/enabled = true +tracks/69/path = NodePath("Environment/Clouds/Cloud23:scale") +tracks/69/interp = 1 +tracks/69/loop_wrap = true +tracks/69/keys = { +"times": PackedFloat32Array(0, 30, 56, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1.3, 1.3), Vector2(1, 1)] +} +tracks/70/type = "value" +tracks/70/imported = false +tracks/70/enabled = true +tracks/70/path = NodePath("Environment/Clouds/Cloud24:position") +tracks/70/interp = 1 +tracks/70/loop_wrap = true +tracks/70/keys = { +"times": PackedFloat32Array(0, 30, 56, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-510, 2429), Vector2(-510, 2429), Vector2(4122.75, 2429), Vector2(-510, 2429)] +} +tracks/71/type = "value" +tracks/71/imported = false +tracks/71/enabled = true +tracks/71/path = NodePath("Environment/Clouds/Cloud24:scale") +tracks/71/interp = 1 +tracks/71/loop_wrap = true +tracks/71/keys = { +"times": PackedFloat32Array(0, 30, 56, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1.3, 1.3), Vector2(1, 1)] +} +tracks/72/type = "value" +tracks/72/imported = false +tracks/72/enabled = true +tracks/72/path = NodePath("Environment/Clouds/Cloud25:position") +tracks/72/interp = 1 +tracks/72/loop_wrap = true +tracks/72/keys = { +"times": PackedFloat32Array(0, 30, 56, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-712, 1373), Vector2(-712, 1373), Vector2(3920.75, 1373), Vector2(-712, 1373)] +} +tracks/73/type = "value" +tracks/73/imported = false +tracks/73/enabled = true +tracks/73/path = NodePath("Environment/Clouds/Cloud25:scale") +tracks/73/interp = 1 +tracks/73/loop_wrap = true +tracks/73/keys = { +"times": PackedFloat32Array(0, 30, 56, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1.3, 1.3), Vector2(1, 1)] +} +tracks/74/type = "value" +tracks/74/imported = false +tracks/74/enabled = true +tracks/74/path = NodePath("Environment/Clouds/Cloud26:position") +tracks/74/interp = 1 +tracks/74/loop_wrap = true +tracks/74/keys = { +"times": PackedFloat32Array(0, 30, 56, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-269, 2004), Vector2(-269, 2004), Vector2(4021.5, 2004), Vector2(-269, 2004)] +} +tracks/75/type = "value" +tracks/75/imported = false +tracks/75/enabled = true +tracks/75/path = NodePath("Environment/Clouds/Cloud26:scale") +tracks/75/interp = 1 +tracks/75/loop_wrap = true +tracks/75/keys = { +"times": PackedFloat32Array(0, 30, 56, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(0.9, 0.9), Vector2(1, 1)] +} +tracks/76/type = "value" +tracks/76/imported = false +tracks/76/enabled = true +tracks/76/path = NodePath("Environment/Clouds/Cloud27:position") +tracks/76/interp = 1 +tracks/76/loop_wrap = true +tracks/76/keys = { +"times": PackedFloat32Array(0, 30, 56, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-1656, 2353), Vector2(-1656, 2353), Vector2(2634.5, 2353), Vector2(-1656, 2353)] +} +tracks/77/type = "value" +tracks/77/imported = false +tracks/77/enabled = true +tracks/77/path = NodePath("Environment/Clouds/Cloud27:scale") +tracks/77/interp = 1 +tracks/77/loop_wrap = true +tracks/77/keys = { +"times": PackedFloat32Array(0, 30, 56, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(0.9, 0.9), Vector2(1, 1)] +} +tracks/78/type = "value" +tracks/78/imported = false +tracks/78/enabled = true +tracks/78/path = NodePath("Environment/Clouds/Cloud23:visible") +tracks/78/interp = 1 +tracks/78/loop_wrap = true +tracks/78/keys = { +"times": PackedFloat32Array(0, 56, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/79/type = "value" +tracks/79/imported = false +tracks/79/enabled = true +tracks/79/path = NodePath("Environment/Clouds/Cloud24:visible") +tracks/79/interp = 1 +tracks/79/loop_wrap = true +tracks/79/keys = { +"times": PackedFloat32Array(0, 56, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/80/type = "value" +tracks/80/imported = false +tracks/80/enabled = true +tracks/80/path = NodePath("Environment/Clouds/Cloud25:visible") +tracks/80/interp = 1 +tracks/80/loop_wrap = true +tracks/80/keys = { +"times": PackedFloat32Array(0, 56, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/81/type = "value" +tracks/81/imported = false +tracks/81/enabled = true +tracks/81/path = NodePath("Environment/Clouds/Cloud26:visible") +tracks/81/interp = 1 +tracks/81/loop_wrap = true +tracks/81/keys = { +"times": PackedFloat32Array(0, 56, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/82/type = "value" +tracks/82/imported = false +tracks/82/enabled = true +tracks/82/path = NodePath("Environment/Clouds/Cloud27:visible") +tracks/82/interp = 1 +tracks/82/loop_wrap = true +tracks/82/keys = { +"times": PackedFloat32Array(0, 56, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/83/type = "value" +tracks/83/imported = false +tracks/83/enabled = true +tracks/83/path = NodePath("Environment/Clouds/Cloud28:visible") +tracks/83/interp = 1 +tracks/83/loop_wrap = true +tracks/83/keys = { +"times": PackedFloat32Array(0, 56, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/84/type = "value" +tracks/84/imported = false +tracks/84/enabled = true +tracks/84/path = NodePath("Environment/Clouds/Cloud29:position") +tracks/84/interp = 1 +tracks/84/loop_wrap = true +tracks/84/keys = { +"times": PackedFloat32Array(0, 20, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(3890, 2612.5), Vector2(7216.5, 2622.5), Vector2(3890, 2612.5)] +} +tracks/85/type = "value" +tracks/85/imported = false +tracks/85/enabled = true +tracks/85/path = NodePath("Environment/Clouds/Cloud29:scale") +tracks/85/interp = 1 +tracks/85/loop_wrap = true +tracks/85/keys = { +"times": PackedFloat32Array(0, 20, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/86/type = "value" +tracks/86/imported = false +tracks/86/enabled = true +tracks/86/path = NodePath("Environment/Clouds/Cloud30:position") +tracks/86/interp = 1 +tracks/86/loop_wrap = true +tracks/86/keys = { +"times": PackedFloat32Array(0, 20, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(3832, 1394.5), Vector2(7158.5, 1404.5), Vector2(3832, 1394.5)] +} +tracks/87/type = "value" +tracks/87/imported = false +tracks/87/enabled = true +tracks/87/path = NodePath("Environment/Clouds/Cloud30:scale") +tracks/87/interp = 1 +tracks/87/loop_wrap = true +tracks/87/keys = { +"times": PackedFloat32Array(0, 20, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/88/type = "value" +tracks/88/imported = false +tracks/88/enabled = true +tracks/88/path = NodePath("Environment/Clouds/Cloud31:position") +tracks/88/interp = 1 +tracks/88/loop_wrap = true +tracks/88/keys = { +"times": PackedFloat32Array(0, 20, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(3472, 3106), Vector2(6798.5, 3116), Vector2(3472, 3106)] +} +tracks/89/type = "value" +tracks/89/imported = false +tracks/89/enabled = true +tracks/89/path = NodePath("Environment/Clouds/Cloud31:scale") +tracks/89/interp = 1 +tracks/89/loop_wrap = true +tracks/89/keys = { +"times": PackedFloat32Array(0, 20, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/90/type = "value" +tracks/90/imported = false +tracks/90/enabled = true +tracks/90/path = NodePath("Environment/Clouds/Cloud32:position") +tracks/90/interp = 1 +tracks/90/loop_wrap = true +tracks/90/keys = { +"times": PackedFloat32Array(0, 20, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(3095, 2689.5), Vector2(6421.5, 2699.5), Vector2(3095, 2689.5)] +} +tracks/91/type = "value" +tracks/91/imported = false +tracks/91/enabled = true +tracks/91/path = NodePath("Environment/Clouds/Cloud32:scale") +tracks/91/interp = 1 +tracks/91/loop_wrap = true +tracks/91/keys = { +"times": PackedFloat32Array(0, 20, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/92/type = "value" +tracks/92/imported = false +tracks/92/enabled = true +tracks/92/path = NodePath("Environment/Clouds/Cloud33:position") +tracks/92/interp = 1 +tracks/92/loop_wrap = true +tracks/92/keys = { +"times": PackedFloat32Array(0, 20, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(4016, 1558.5), Vector2(7342.5, 1568.5), Vector2(4016, 1558.5)] +} +tracks/93/type = "value" +tracks/93/imported = false +tracks/93/enabled = true +tracks/93/path = NodePath("Environment/Clouds/Cloud33:scale") +tracks/93/interp = 1 +tracks/93/loop_wrap = true +tracks/93/keys = { +"times": PackedFloat32Array(0, 20, 60), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/94/type = "value" +tracks/94/imported = false +tracks/94/enabled = true +tracks/94/path = NodePath("Environment/Clouds/Cloud29:visible") +tracks/94/interp = 1 +tracks/94/loop_wrap = true +tracks/94/keys = { +"times": PackedFloat32Array(0, 20, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/95/type = "value" +tracks/95/imported = false +tracks/95/enabled = true +tracks/95/path = NodePath("Environment/Clouds/Cloud30:visible") +tracks/95/interp = 1 +tracks/95/loop_wrap = true +tracks/95/keys = { +"times": PackedFloat32Array(0, 20, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/96/type = "value" +tracks/96/imported = false +tracks/96/enabled = true +tracks/96/path = NodePath("Environment/Clouds/Cloud31:visible") +tracks/96/interp = 1 +tracks/96/loop_wrap = true +tracks/96/keys = { +"times": PackedFloat32Array(0, 20, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/97/type = "value" +tracks/97/imported = false +tracks/97/enabled = true +tracks/97/path = NodePath("Environment/Clouds/Cloud32:visible") +tracks/97/interp = 1 +tracks/97/loop_wrap = true +tracks/97/keys = { +"times": PackedFloat32Array(0, 20, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/98/type = "value" +tracks/98/imported = false +tracks/98/enabled = true +tracks/98/path = NodePath("Environment/Clouds/Cloud33:visible") +tracks/98/interp = 1 +tracks/98/loop_wrap = true +tracks/98/keys = { +"times": PackedFloat32Array(0, 20, 60.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} +tracks/99/type = "value" +tracks/99/imported = false +tracks/99/enabled = true +tracks/99/path = NodePath("Environment/Clouds/Cloud34:position") +tracks/99/interp = 1 +tracks/99/loop_wrap = true +tracks/99/keys = { +"times": PackedFloat32Array(0, 22, 35, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(3863, 1375), Vector2(3863, 1375), Vector2(7431, 1375), Vector2(3863, 1375)] +} +tracks/100/type = "value" +tracks/100/imported = false +tracks/100/enabled = true +tracks/100/path = NodePath("Environment/Clouds/Cloud34:scale") +tracks/100/interp = 1 +tracks/100/loop_wrap = true +tracks/100/keys = { +"times": PackedFloat32Array(0, 22, 35, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1.3, 1.3), Vector2(1, 1)] +} +tracks/101/type = "value" +tracks/101/imported = false +tracks/101/enabled = true +tracks/101/path = NodePath("Environment/Clouds/Cloud35:position") +tracks/101/interp = 1 +tracks/101/loop_wrap = true +tracks/101/keys = { +"times": PackedFloat32Array(0, 22, 35, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(3521.25, 3087), Vector2(3521.25, 3087), Vector2(7089.25, 3087), Vector2(3521.25, 3087)] +} +tracks/102/type = "value" +tracks/102/imported = false +tracks/102/enabled = true +tracks/102/path = NodePath("Environment/Clouds/Cloud35:scale") +tracks/102/interp = 1 +tracks/102/loop_wrap = true +tracks/102/keys = { +"times": PackedFloat32Array(0, 22, 35, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1.3, 1.3), Vector2(1, 1)] +} +tracks/103/type = "value" +tracks/103/imported = false +tracks/103/enabled = true +tracks/103/path = NodePath("Environment/Clouds/Cloud36:position") +tracks/103/interp = 1 +tracks/103/loop_wrap = true +tracks/103/keys = { +"times": PackedFloat32Array(0, 22, 35, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(3609.25, 3161), Vector2(3609.25, 3161), Vector2(7177.25, 3161), Vector2(3609.25, 3161)] +} +tracks/104/type = "value" +tracks/104/imported = false +tracks/104/enabled = true +tracks/104/path = NodePath("Environment/Clouds/Cloud36:scale") +tracks/104/interp = 1 +tracks/104/loop_wrap = true +tracks/104/keys = { +"times": PackedFloat32Array(0, 22, 35, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1.3, 1.3), Vector2(1, 1)] +} +tracks/105/type = "value" +tracks/105/imported = false +tracks/105/enabled = true +tracks/105/path = NodePath("Environment/Clouds/Cloud37:position") +tracks/105/interp = 1 +tracks/105/loop_wrap = true +tracks/105/keys = { +"times": PackedFloat32Array(0, 22, 35, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(3754.25, 1447), Vector2(3754.25, 1447), Vector2(7322.25, 1447), Vector2(3754.25, 1447)] +} +tracks/106/type = "value" +tracks/106/imported = false +tracks/106/enabled = true +tracks/106/path = NodePath("Environment/Clouds/Cloud37:scale") +tracks/106/interp = 1 +tracks/106/loop_wrap = true +tracks/106/keys = { +"times": PackedFloat32Array(0, 22, 35, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1.3, 1.3), Vector2(1, 1)] +} +tracks/107/type = "value" +tracks/107/imported = false +tracks/107/enabled = true +tracks/107/path = NodePath("Environment/Clouds/Cloud38:position") +tracks/107/interp = 1 +tracks/107/loop_wrap = true +tracks/107/keys = { +"times": PackedFloat32Array(0, 22, 35, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(2915.25, 2833), Vector2(2915.25, 2833), Vector2(6483.25, 2833), Vector2(2915.25, 2833)] +} +tracks/108/type = "value" +tracks/108/imported = false +tracks/108/enabled = true +tracks/108/path = NodePath("Environment/Clouds/Cloud38:scale") +tracks/108/interp = 1 +tracks/108/loop_wrap = true +tracks/108/keys = { +"times": PackedFloat32Array(0, 22, 35, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0.898305, 0.898305), Vector2(0.898305, 0.898305), Vector2(1.3, 1.3), Vector2(0.898305, 0.898305)] +} +tracks/109/type = "value" +tracks/109/imported = false +tracks/109/enabled = true +tracks/109/path = NodePath("Environment/Clouds/Cloud39:position") +tracks/109/interp = 1 +tracks/109/loop_wrap = true +tracks/109/keys = { +"times": PackedFloat32Array(0, 22, 35, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(3270.25, 2207), Vector2(3270.25, 2207), Vector2(6838.25, 2207), Vector2(3270.25, 2207)] +} +tracks/110/type = "value" +tracks/110/imported = false +tracks/110/enabled = true +tracks/110/path = NodePath("Environment/Clouds/Cloud39:scale") +tracks/110/interp = 1 +tracks/110/loop_wrap = true +tracks/110/keys = { +"times": PackedFloat32Array(0, 22, 35, 60), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1.3, 1.3), Vector2(1, 1)] +} +tracks/111/type = "value" +tracks/111/imported = false +tracks/111/enabled = true +tracks/111/path = NodePath("Environment/Clouds/Cloud34:visible") +tracks/111/interp = 1 +tracks/111/loop_wrap = true +tracks/111/keys = { +"times": PackedFloat32Array(0, 22, 35, 60.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [true, true, false, true] +} +tracks/112/type = "value" +tracks/112/imported = false +tracks/112/enabled = true +tracks/112/path = NodePath("Environment/Clouds/Cloud35:visible") +tracks/112/interp = 1 +tracks/112/loop_wrap = true +tracks/112/keys = { +"times": PackedFloat32Array(0, 22, 35, 60.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [true, true, false, true] +} +tracks/113/type = "value" +tracks/113/imported = false +tracks/113/enabled = true +tracks/113/path = NodePath("Environment/Clouds/Cloud36:visible") +tracks/113/interp = 1 +tracks/113/loop_wrap = true +tracks/113/keys = { +"times": PackedFloat32Array(0, 22, 35, 60.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [true, true, false, true] +} +tracks/114/type = "value" +tracks/114/imported = false +tracks/114/enabled = true +tracks/114/path = NodePath("Environment/Clouds/Cloud37:visible") +tracks/114/interp = 1 +tracks/114/loop_wrap = true +tracks/114/keys = { +"times": PackedFloat32Array(0, 22, 35, 60.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [true, true, false, true] +} +tracks/115/type = "value" +tracks/115/imported = false +tracks/115/enabled = true +tracks/115/path = NodePath("Environment/Clouds/Cloud38:visible") +tracks/115/interp = 1 +tracks/115/loop_wrap = true +tracks/115/keys = { +"times": PackedFloat32Array(0, 22, 35, 60.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [true, true, false, true] +} +tracks/116/type = "value" +tracks/116/imported = false +tracks/116/enabled = true +tracks/116/path = NodePath("Environment/Clouds/Cloud39:visible") +tracks/116/interp = 1 +tracks/116/loop_wrap = true +tracks/116/keys = { +"times": PackedFloat32Array(0, 22, 35, 60.2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [true, true, false, true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_an3cu"] +_data = { +"RESET": SubResource("Animation_gwtgs"), +"float": SubResource("Animation_75lmk") +} + +[node name="Arena" type="Node2D"] +y_sort_enabled = true +metadata/_edit_vertical_guides_ = [962.0] +metadata/_edit_horizontal_guides_ = [541.0] + +[node name="Environment" type="Node2D" parent="."] +top_level = true +z_index = -1 +metadata/_edit_lock_ = true + +[node name="Sky" type="ColorRect" parent="Environment"] +custom_minimum_size = Vector2(6000, 4000) +offset_left = -2048.0 +offset_top = -1498.0 +offset_right = 3952.0 +offset_bottom = 2502.0 +color = Color(0.537255, 0.745098, 0.854902, 1) +metadata/_edit_lock_ = true + +[node name="Clouds" type="Node2D" parent="Environment"] +modulate = Color(1, 1, 1, 0.792157) +position = Vector2(-1998, -1508) +metadata/_edit_lock_ = true + +[node name="Cloud1" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(764, 358) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud13" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(4005, 2983) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud5" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(-152, 2723) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud6" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(3293, 936) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud2" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(85, 1505) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud16" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(3434, 3542) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud7" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(1380, 3802) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud3" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(503, 1222) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud14" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(4174, 3309) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud15" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(4695, 2800) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud8" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(152, 3383) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud4" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(164, 1669) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud9" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(328, 3474) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud10" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(933, 515) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud12" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(4570, 1222) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud11" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(3784, 345) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud17" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(-2737.13, 367.814) +scale = Vector2(1.35085, 1.15254) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud18" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(-1254.92, 3539.61) +scale = Vector2(0.898305, 0.898305) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud19" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(-2912.7, 1260.29) +scale = Vector2(1.10169, 1.10169) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud20" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(-3251.5, 3437.56) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud21" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(-3181.26, 3581.44) +scale = Vector2(0.949153, 0.949153) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud22" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(-420.856, 367.017) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud23" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(-1493, 3040) +scale = Vector2(0.898305, 0.898305) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud24" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(-510, 2429) +scale = Vector2(1.15254, 1.15254) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud25" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(-712, 1373) +scale = Vector2(1.10169, 1.10169) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud26" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(-269, 2004) +scale = Vector2(0.79661, 0.79661) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud27" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(-1656, 2353) +scale = Vector2(0.949153, 0.949153) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud28" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(-461, 1787) +scale = Vector2(1.10169, 1.10169) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud29" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(3890, 2612.5) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud30" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(3832, 1394.5) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud31" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(3472, 3106) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud32" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(3095, 2689.5) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud33" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(4016, 1558.5) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud34" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(3863, 1375) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud35" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(3521.25, 3087) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud36" type="Sprite2D" parent="Environment/Clouds"] +position = Vector2(3609.25, 3161) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud37" type="Sprite2D" parent="Environment/Clouds"] +visible = false +position = Vector2(3754.25, 1447) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud38" type="Sprite2D" parent="Environment/Clouds"] +visible = false +position = Vector2(2915.25, 2833) +scale = Vector2(0.898305, 0.898305) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud39" type="Sprite2D" parent="Environment/Clouds"] +visible = false +position = Vector2(3270.25, 2207) +texture = ExtResource("1_1blat") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="CloudsAnimationPlayer" type="AnimationPlayer" parent="Environment"] +root_node = NodePath("../..") +libraries = { +"": SubResource("AnimationLibrary_an3cu") +} +autoplay = "float" + +[node name="Ground" type="Node2D" parent="Environment"] +metadata/_edit_lock_ = true + +[node name="Rocks" type="Sprite2D" parent="Environment/Ground"] +position = Vector2(986, 1264) +texture = ExtResource("1_145kx") + +[node name="Floor" type="Sprite2D" parent="Environment/Ground"] +position = Vector2(938, 568) +texture = ExtResource("1_vifjc") + +[node name="Limits" type="StaticBody2D" parent="Environment"] +metadata/_edit_lock_ = true + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Environment/Limits"] +visible = false +polygon = PackedVector2Array(-814, 535, -380, 190, -306, -21, 87, -46, 346, -330, 870, -373, 1115, -418, 1363, -334, 1613, -324, 1854, -225, 2208, -197, 2675, 309, 2642, 741, 2244, 1140, 1618, 1271, 1360, 1193, 865, 1423, 706, 1377, -113, 1192, -452, 1035, -488, 902, -625, 803, -734, 680, -1660, 719, -1331, 2205, 3170, 2304, 3988, 404, 2999, -1433, 131, -1364, -1715, 264, -1659, 716, -737, 676) +metadata/_edit_lock_ = true + +[node name="Props" type="Node2D" parent="."] +y_sort_enabled = true +metadata/_edit_lock_ = true + +[node name="Shrooms" type="Node2D" parent="Props"] +y_sort_enabled = true +metadata/_edit_lock_ = true + +[node name="ShroomFat1" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(316, -293) +rotation = -0.47206 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -118) +region_enabled = true +region_rect = Rect2(364.026, 0, 303.355, 246.522) + +[node name="ShroomFat3" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(889.983, -375.68) +rotation = 0.0723415 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -118) +region_enabled = true +region_rect = Rect2(364.026, 0, 303.355, 246.522) + +[node name="ShroomRed1" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(211, -172) +rotation = -0.554414 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomRed2" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(477, -354) +rotation = -0.131447 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomRed3" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1069, -418) +rotation = 0.210047 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomRed4" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1184, -390) +rotation = -0.111158 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomRed5" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1522, -323) +rotation = -0.111158 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomRed6" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1776, -257) +rotation = 0.0517097 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomRed7" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2002, -212) +rotation = -0.0711099 +scale = Vector2(1.26843, 1.26843) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomBlue1" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-18, -43) +rotation = -0.390338 +scale = Vector2(1.27499, 1.17746) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomBlue2" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(653, -364) +rotation = -0.390338 +scale = Vector2(1.27499, 1.17746) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomBlue3" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1251, -379) +rotation = -0.0470768 +scale = Vector2(1.27499, 1.17746) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomBlue4" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1357, -339) +rotation = 0.382315 +scale = Vector2(1.27499, 1.17746) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomBlue5" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2188, -215) +rotation = 0.177698 +scale = Vector2(1.27499, 1.17746) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomThinFlip1" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(451.932, -348.31) +rotation = -3.01653 +scale = Vector2(0.729666, -0.765873) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThinFlip2" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1324, -351) +rotation = -2.73344 +scale = Vector2(0.729666, -0.765873) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThinFlip3" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2151.93, -234.31) +rotation = -3.0381 +scale = Vector2(0.729666, -0.765873) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomFat2" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1901.98, -226.68) +rotation = -0.202467 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -118) +region_enabled = true +region_rect = Rect2(364.026, 0, 303.355, 246.522) + +[node name="ShroomYellow1" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(53, -53) +rotation = 0.0837674 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomYellow2" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(283, -266) +rotation = -0.486485 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomYellow4" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1009, -410) +rotation = 0.0837674 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomYellow5" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1632, -326) +rotation = -0.179329 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomYellow6" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1668, -313) +rotation = 0.49724 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomYellow7" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2082, -232) +rotation = -0.300902 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomThin2" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-112.5, -30.0442) +rotation = -0.0993826 +scale = Vector2(0.762573, 0.762573) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin3" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(104, -70) +rotation = 0.0063462 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin4" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(202.5, -223.044) +rotation = -0.108585 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin5" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(381.5, -325.044) +rotation = -0.027 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin6" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(542.5, -367.044) +rotation = -0.027 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin7" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(790.5, -372.044) +rotation = 0.336266 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin8" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1266, -377) +rotation = 0.481942 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin9" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1436.5, -326.044) +rotation = -0.0734592 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin10" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1666.5, -292.044) +rotation = -0.106563 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomRed8" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2289, -167) +rotation = 0.0517097 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomThin1" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-122, -58) +rotation = 0.434625 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin11" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2088.5, -233.044) +rotation = -0.0820285 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin12" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-800, 471) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin13" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-457, 62) +rotation = -0.368511 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin14" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-350.5, -23.0442) +rotation = 0.348356 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThinFlip4" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-660.068, 388.69) +rotation = -3.01653 +scale = Vector2(0.729666, -0.765873) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomFat4" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-819, 547) +rotation = -0.338786 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -118) +region_enabled = true +region_rect = Rect2(364.026, 0, 303.355, 246.522) + +[node name="ShroomFat5" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-510, 252) +rotation = -0.121513 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -118) +region_enabled = true +region_rect = Rect2(364.026, 0, 303.355, 246.522) + +[node name="ShroomFat6" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-192, -54) +rotation = -0.182008 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -118) +region_enabled = true +region_rect = Rect2(364.026, 0, 303.355, 246.522) + +[node name="ShroomBlue6" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-713, 715) +rotation = -0.434928 +scale = Vector2(1.11803, 1.02553) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomBlue7" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-724, 448) +rotation = 0.0185129 +scale = Vector2(1.27499, 1.17746) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomBlue8" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-405, -1.00002) +rotation = 0.0185129 +scale = Vector2(1.08529, 0.99636) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomRed9" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-725, 776) +rotation = -0.737596 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomYellow3" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-601, 352) +rotation = 0.0245847 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomYellow8" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-394, 213) +rotation = 0.304539 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomYellow9" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-297, -12) +rotation = 0.0245847 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomThin15" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-472, 2) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomYellow10" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2302, -93.9999) +rotation = 0.443771 +scale = Vector2(1.48644, 1.42174) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomFat7" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2673, 269) +rotation = 0.249999 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -118) +region_enabled = true +region_rect = Rect2(364.026, 0, 303.355, 246.522) + +[node name="ShroomFat8" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2408.98, -10.6802) +rotation = 0.249999 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -118) +region_enabled = true +region_rect = Rect2(364.026, 0, 303.355, 246.522) + +[node name="ShroomRed10" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2673, 603) +rotation = -0.205529 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomRed11" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2457, 62.9999) +rotation = 0.133289 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomThinFlip5" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2758.93, 383.69) +rotation = -2.72375 +scale = Vector2(0.729666, -0.765873) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomYellow11" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2680, 496) +rotation = 0.443771 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomYellow12" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2502, 122) +rotation = 0.443771 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomRed12" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2558, 184) +rotation = 0.439175 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomBlue9" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2721, 315) +rotation = 0.0185129 +scale = Vector2(1.27499, 1.17746) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomThin16" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2610, 225) +rotation = -0.321984 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin17" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2387.5, 11.9558) +rotation = -0.0440143 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomRed13" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-556, 849) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomRed14" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(770, 1513) +rotation = 0.159869 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomRed15" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1349, 1241) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomRed16" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1261, 1284) +rotation = -0.542647 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomRed17" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2312, 1116) +rotation = -0.294691 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomRed18" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2508, 864) +rotation = -0.259673 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -124) +region_enabled = true +region_rect = Rect2(667.382, 0, 217.218, 259.018) + +[node name="ShroomYellow13" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-503, 876) +rotation = 0.218248 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomYellow14" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(58, 1208) +rotation = 0.116333 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomYellow15" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(529, 1365) +rotation = 0.0404178 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomYellow16" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(934, 1419) +rotation = -0.0691034 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomYellow17" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1605.04, 1336.65) +rotation = -0.0585388 +scale = Vector2(1, 1.00276) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomYellow18" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1943, 1282) +rotation = 0.0341268 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomYellow19" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2631, 819) +rotation = -0.0863327 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomFat9" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-379, 1132) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -118) +region_enabled = true +region_rect = Rect2(364.026, 0, 303.355, 246.522) + +[node name="ShroomThinFlip6" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-583, 1039) +rotation = -2.70279 +scale = Vector2(0.729666, -0.765873) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThinFlip7" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(168.932, 1262.69) +rotation = -2.70279 +scale = Vector2(0.729666, -0.765873) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThinFlip8" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(903.932, 1420.69) +rotation = -3.09863 +scale = Vector2(0.729666, -0.765873) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThinFlip9" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1684.93, 1303.69) +rotation = -3.09863 +scale = Vector2(0.729666, -0.765873) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin18" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-277.5, 1192.96) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin19" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(104.5, 1254.96) +rotation = 0.328221 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin20" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(673, 1509) +rotation = 0.388862 +scale = Vector2(0.799106, 0.799106) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomFat10" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-683.017, 859.32) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -118) +region_enabled = true +region_rect = Rect2(364.026, 0, 303.355, 246.522) + +[node name="ShroomFat11" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(357.983, 1353.32) +rotation = -0.210709 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -118) +region_enabled = true +region_rect = Rect2(364.026, 0, 303.355, 246.522) + +[node name="ShroomFat12" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1047, 1369) +rotation = 0.0773245 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -118) +region_enabled = true +region_rect = Rect2(364.026, 0, 303.355, 246.522) + +[node name="ShroomFat13" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1796.98, 1283.32) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -118) +region_enabled = true +region_rect = Rect2(364.026, 0, 303.355, 246.522) + +[node name="ShroomFat14" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2416, 1002) +rotation = -0.543407 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -118) +region_enabled = true +region_rect = Rect2(364.026, 0, 303.355, 246.522) + +[node name="ShroomThin21" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(446.5, 1378.96) +rotation = 0.388862 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin22" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1842, 1288) +rotation = 0.47074 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin23" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2473, 905) +rotation = -0.509121 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin24" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2570.5, 827.956) +rotation = -0.0398957 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomBlue10" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-80, 1198) +rotation = -0.110138 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomBlue11" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-231, 1209) +rotation = 0.335187 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomBlue12" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(638, 1380) +rotation = -0.110138 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomBlue13" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1454, 1249) +rotation = -0.110138 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomBlue14" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2203, 1198) +rotation = -0.110138 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomBlue15" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2100, 1241) +rotation = -0.440792 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomBlue16" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2712, 770) +rotation = -0.0419129 +scale = Vector2(1.27499, 1.17746) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -115) +region_enabled = true +region_rect = Rect2(175.8, 0, 188.1, 246.522) + +[node name="ShroomThinFlip10" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2238.93, 1162.69) +rotation = 2.58643 +scale = Vector2(0.729666, -0.765873) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin25" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(2136.5, 1225.96) +rotation = -0.0459579 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin26" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(1512, 1310) +rotation = -0.223667 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomThin27" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-12.5, 1227.96) +rotation = -0.194346 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomYellow20" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-577, 977) +rotation = -0.196464 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="ShroomThin28" type="Sprite2D" parent="Props/Shrooms"] +position = Vector2(-645, 1030) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -110) +region_enabled = true +region_rect = Rect2(886.896, 0, 99.9249, 222.903) + +[node name="ShroomYellow21" type="Sprite2D" parent="Props/Shrooms"] +y_sort_enabled = true +position = Vector2(731, -360) +rotation = 0.0837674 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -116) +region_enabled = true +region_rect = Rect2(-0.296913, 2.76804, 172.051, 239.67) + +[node name="Grass" type="Node2D" parent="Props"] +y_sort_enabled = true +metadata/_edit_lock_ = true + +[node name="Grass1" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-438, -25) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass2" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-356, -28) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass3" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-210, -64) +rotation = -0.191355 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass4" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-279, -60) +rotation = -0.351512 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass5" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-140, -66) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass6" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-76, -63) +rotation = 0.150085 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass7" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-6, -64) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass8" type="Sprite2D" parent="Props/Grass"] +position = Vector2(51, -70) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass9" type="Sprite2D" parent="Props/Grass"] +position = Vector2(105, -82) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass10" type="Sprite2D" parent="Props/Grass"] +position = Vector2(162, -106) +rotation = -0.447914 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass11" type="Sprite2D" parent="Props/Grass"] +position = Vector2(178, -174) +rotation = -0.826729 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass12" type="Sprite2D" parent="Props/Grass"] +position = Vector2(209, -232) +rotation = -0.708204 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass13" type="Sprite2D" parent="Props/Grass"] +position = Vector2(241, -276) +rotation = -0.614925 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass14" type="Sprite2D" parent="Props/Grass"] +position = Vector2(334, -323) +rotation = -0.476317 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass15" type="Sprite2D" parent="Props/Grass"] +position = Vector2(385, -352) +rotation = -0.3282 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass16" type="Sprite2D" parent="Props/Grass"] +position = Vector2(441, -376) +rotation = -0.219466 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass17" type="Sprite2D" parent="Props/Grass"] +position = Vector2(513, -388) +rotation = -0.0260885 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass18" type="Sprite2D" parent="Props/Grass"] +position = Vector2(571, -394) +rotation = 0.123957 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass19" type="Sprite2D" parent="Props/Grass"] +position = Vector2(627.224, -381.064) +rotation = 0.0929263 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass20" type="Sprite2D" parent="Props/Grass"] +position = Vector2(692, -382) +rotation = 0.10344 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass21" type="Sprite2D" parent="Props/Grass"] +position = Vector2(760, -376) +rotation = 0.000137895 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass22" type="Sprite2D" parent="Props/Grass"] +position = Vector2(813, -380) +rotation = 0.193515 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass23" type="Sprite2D" parent="Props/Grass"] +position = Vector2(863, -394) +rotation = 0.0942186 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass24" type="Sprite2D" parent="Props/Grass"] +position = Vector2(953, -417) +rotation = -0.108891 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass25" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1025, -436) +rotation = -0.219926 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass26" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1090, -444) +rotation = -0.0691996 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass27" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1148, -438) +rotation = 0.0942186 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass28" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1206, -419) +rotation = 0.325109 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass29" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1288, -387) +rotation = 0.372396 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass30" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1341, -367) +rotation = 0.4261 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass31" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1392.22, -349.064) +rotation = 0.248156 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass32" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1470, -345) +rotation = 0.140579 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass33" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1537, -344) +rotation = 0.151143 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass34" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1603, -342) +rotation = 0.101008 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass35" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1659, -336) +rotation = 0.248156 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass36" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1719, -319) +rotation = 0.28446 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass37" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1781.22, -292.064) +rotation = 0.440044 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass38" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1842.22, -257.064) +rotation = 0.352407 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass39" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1915, -248) +rotation = 0.342354 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass40" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1987, -236) +rotation = 0.0942217 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass41" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2063, -246) +rotation = 0.0141966 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass42" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2133, -247) +rotation = 0.107299 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass43" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2205, -237) +rotation = 0.352407 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass44" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2271.22, -219.064) +rotation = 0.342354 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass45" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2301, -137) +rotation = 0.940869 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass46" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2351, -42) +rotation = 0.458519 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass47" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2442, -4) +rotation = 0.3067 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass48" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2491, 36.0001) +rotation = 0.534738 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass49" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2517.19, 77.2042) +rotation = 0.830507 +scale = Vector2(1.00312, 1) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass50" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2575, 147) +rotation = 0.976222 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass51" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2552, 127) +rotation = 0.668316 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass52" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2618, 199) +rotation = 0.534738 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass53" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2711, 264) +rotation = 0.830507 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass54" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-368, 174) +rotation = -0.456926 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass55" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-443, 208) +rotation = -0.199051 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass56" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-496, 229) +rotation = -0.456926 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass57" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-593, 303) +rotation = -0.456926 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass58" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-652, 357) +rotation = -0.456926 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass59" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-698.776, 402.936) +rotation = -0.456926 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass60" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-771, 447) +rotation = -0.456926 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass61" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-801, 488) +rotation = -0.986285 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass62" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2713, 523) +rotation = -0.236838 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass63" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2723, 333) +rotation = -0.0377601 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass74" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-528, 883) +rotation = 0.425283 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass75" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-567, 879) +rotation = -0.145538 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass76" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-618, 878) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass77" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-702, 875) +rotation = -0.136894 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass78" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-640, 870) +rotation = 0.0992107 +scale = Vector2(0.89227, 0.890196) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass73" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2726, 803) +rotation = -0.177835 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass72" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2687.59, 820.894) +rotation = -0.335356 +scale = Vector2(0.996004, 0.997321) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass71" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2635, 831) +rotation = -0.335356 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass70" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2584, 850) +rotation = -0.335356 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass69" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2534, 878) +rotation = -0.335356 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass68" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2485, 937) +rotation = -0.335356 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass67" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2472, 984) +rotation = -0.335356 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass66" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2442, 1015) +rotation = -0.335356 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass65" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2404, 1033) +rotation = -0.335356 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass64" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2357, 1063) +rotation = -0.419734 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass79" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2328, 1128) +rotation = -0.449816 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass80" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2321, 1180) +rotation = -0.194528 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass81" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2309, 1201) +rotation = -0.24821 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass82" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2283, 1232) +rotation = -0.335356 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass83" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2231, 1246) +rotation = -0.0390497 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass84" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2172, 1251) +rotation = -0.0459226 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass85" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2116, 1252) +rotation = -0.140489 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass86" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2062, 1263) +rotation = -0.295208 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass87" type="Sprite2D" parent="Props/Grass"] +position = Vector2(2011, 1282) +rotation = -0.261242 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass88" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1964, 1309) +rotation = -0.138799 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass89" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1906, 1315) +rotation = 0.0341306 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass90" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1857, 1309) +rotation = -0.00321719 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass91" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1795, 1307) +rotation = -0.0304235 +scale = Vector2(0.994353, 0.99967) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass92" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1639, 1358) +rotation = -0.250016 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass93" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1563, 1353) +rotation = 0.257884 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass94" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1739, 1322) +rotation = -0.22541 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass95" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1691, 1341) +rotation = -0.244855 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass96" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1506, 1318) +rotation = 0.717251 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass97" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1466, 1276) +rotation = 0.644911 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass98" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1425, 1259) +rotation = 0.0565641 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass99" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1366, 1265) +rotation = -0.149705 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass100" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1308, 1292) +rotation = -0.153005 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass101" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1255, 1311) +rotation = 0.0565641 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass102" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1137, 1337) +rotation = 0.0565641 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass103" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1096, 1376) +rotation = -0.369265 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass104" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1051, 1418) +rotation = -0.358503 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass105" type="Sprite2D" parent="Props/Grass"] +position = Vector2(947, 1450) +rotation = -0.124099 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass106" type="Sprite2D" parent="Props/Grass"] +position = Vector2(988, 1444) +rotation = 0.0565641 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass107" type="Sprite2D" parent="Props/Grass"] +position = Vector2(1203, 1319) +rotation = -0.10731 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass108" type="Sprite2D" parent="Props/Grass"] +position = Vector2(851, 1493) +rotation = -0.241176 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass109" type="Sprite2D" parent="Props/Grass"] +position = Vector2(894, 1462) +rotation = -0.0791258 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass110" type="Sprite2D" parent="Props/Grass"] +position = Vector2(823, 1532) +rotation = -0.36178 +scale = Vector2(0.896039, 0.929433) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass111" type="Sprite2D" parent="Props/Grass"] +position = Vector2(778, 1556) +rotation = -0.183817 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass112" type="Sprite2D" parent="Props/Grass"] +position = Vector2(711, 1555) +rotation = 0.23761 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass113" type="Sprite2D" parent="Props/Grass"] +position = Vector2(661, 1543) +rotation = 0.23761 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass114" type="Sprite2D" parent="Props/Grass"] +position = Vector2(678, 1421) +rotation = 0.450015 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass115" type="Sprite2D" parent="Props/Grass"] +position = Vector2(653, 1408) +rotation = 0.246509 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass116" type="Sprite2D" parent="Props/Grass"] +position = Vector2(603, 1405) +rotation = -0.0914229 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass117" type="Sprite2D" parent="Props/Grass"] +position = Vector2(547, 1414) +rotation = -0.119099 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass118" type="Sprite2D" parent="Props/Grass"] +position = Vector2(489, 1402) +rotation = 0.450015 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass119" type="Sprite2D" parent="Props/Grass"] +position = Vector2(436, 1385) +rotation = 0.305517 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass120" type="Sprite2D" parent="Props/Grass"] +position = Vector2(395, 1383) +rotation = -0.203084 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass121" type="Sprite2D" parent="Props/Grass"] +position = Vector2(352, 1390) +rotation = -0.194154 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass122" type="Sprite2D" parent="Props/Grass"] +position = Vector2(257, 1351) +rotation = 0.488442 +scale = Vector2(0.984626, 0.967626) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass123" type="Sprite2D" parent="Props/Grass"] +position = Vector2(288, 1385) +rotation = 0.450015 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass124" type="Sprite2D" parent="Props/Grass"] +position = Vector2(221, 1329) +rotation = 0.132079 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass125" type="Sprite2D" parent="Props/Grass"] +position = Vector2(174, 1314) +rotation = 0.346821 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass126" type="Sprite2D" parent="Props/Grass"] +position = Vector2(133, 1299) +rotation = 0.450015 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass127" type="Sprite2D" parent="Props/Grass"] +position = Vector2(88, 1271) +rotation = 0.450015 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass128" type="Sprite2D" parent="Props/Grass"] +position = Vector2(44.224, 1260.94) +rotation = 0.0963627 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass129" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-4.776, 1248.94) +rotation = 0.0963627 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass130" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-52.776, 1239.94) +rotation = 0.0963627 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass131" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-113, 1228) +rotation = 0.0963627 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass132" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-168, 1233) +rotation = -0.0568394 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass133" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-225, 1238) +rotation = 0.0963627 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass134" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-281, 1225) +rotation = 0.599394 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass135" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-313, 1160) +rotation = -0.539764 +scale = Vector2(0.920388, 0.98772) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass136" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-366, 1176) +rotation = 0.109422 +scale = Vector2(0.936615, 0.872008) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass137" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-423, 1151) +rotation = 0.527011 +scale = Vector2(0.824352, 0.816612) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass138" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-471, 1133) +rotation = 0.452393 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass139" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-541, 1058) +rotation = 0.138139 +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass140" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-590, 1054) +rotation = -0.110402 +scale = Vector2(0.845736, 0.853483) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) + +[node name="Grass141" type="Sprite2D" parent="Props/Grass"] +position = Vector2(-642, 1052) +texture = ExtResource("2_kesm7") +offset = Vector2(0, -42) +region_enabled = true +region_rect = Rect2(996.053, 4.65938, 177.044, 92.8809) diff --git a/demo/scenes/base/clouds.tscn b/demo/scenes/base/clouds.tscn new file mode 100644 index 0000000..331faa6 --- /dev/null +++ b/demo/scenes/base/clouds.tscn @@ -0,0 +1,256 @@ +[gd_scene load_steps=2 format=3 uid="uid://dt2jlrqffpyw"] + +[ext_resource type="Texture2D" uid="uid://65b6yuobhxf8" path="res://demo/assets/env_clouds.png" id="1_eigiy"] + +[node name="Clouds" type="Node2D"] +modulate = Color(1, 1, 1, 0.792157) +position = Vector2(-1998, -1508) +metadata/_edit_lock_ = true + +[node name="Cloud1" type="Sprite2D" parent="."] +position = Vector2(764, 358) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud13" type="Sprite2D" parent="."] +position = Vector2(4005, 2983) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud5" type="Sprite2D" parent="."] +position = Vector2(-152, 2723) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud6" type="Sprite2D" parent="."] +position = Vector2(3293, 936) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud2" type="Sprite2D" parent="."] +position = Vector2(85, 1505) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud16" type="Sprite2D" parent="."] +position = Vector2(3434, 3542) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud7" type="Sprite2D" parent="."] +position = Vector2(1380, 3802) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud3" type="Sprite2D" parent="."] +position = Vector2(503, 1222) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud14" type="Sprite2D" parent="."] +position = Vector2(4174, 3309) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud15" type="Sprite2D" parent="."] +position = Vector2(4695, 2800) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud8" type="Sprite2D" parent="."] +position = Vector2(152, 3383) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud4" type="Sprite2D" parent="."] +position = Vector2(164, 1669) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud9" type="Sprite2D" parent="."] +position = Vector2(328, 3474) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud10" type="Sprite2D" parent="."] +position = Vector2(933, 515) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud12" type="Sprite2D" parent="."] +position = Vector2(4570, 1222) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud11" type="Sprite2D" parent="."] +position = Vector2(3784, 345) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud17" type="Sprite2D" parent="."] +position = Vector2(-2737.13, 367.814) +scale = Vector2(1.35085, 1.15254) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud18" type="Sprite2D" parent="."] +position = Vector2(-1254.92, 3539.61) +scale = Vector2(0.898305, 0.898305) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud19" type="Sprite2D" parent="."] +position = Vector2(-2912.7, 1260.29) +scale = Vector2(1.10169, 1.10169) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud20" type="Sprite2D" parent="."] +position = Vector2(-3251.5, 3437.56) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud21" type="Sprite2D" parent="."] +position = Vector2(-3181.26, 3581.44) +scale = Vector2(0.949153, 0.949153) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud22" type="Sprite2D" parent="."] +position = Vector2(-420.856, 367.017) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud23" type="Sprite2D" parent="."] +position = Vector2(-1493, 3040) +scale = Vector2(0.898305, 0.898305) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud24" type="Sprite2D" parent="."] +position = Vector2(-510, 2429) +scale = Vector2(1.15254, 1.15254) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud25" type="Sprite2D" parent="."] +position = Vector2(-712, 1373) +scale = Vector2(1.10169, 1.10169) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud26" type="Sprite2D" parent="."] +position = Vector2(-269, 2004) +scale = Vector2(0.79661, 0.79661) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud27" type="Sprite2D" parent="."] +position = Vector2(-1656, 2353) +scale = Vector2(0.949153, 0.949153) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud28" type="Sprite2D" parent="."] +position = Vector2(-461, 1787) +scale = Vector2(1.10169, 1.10169) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud29" type="Sprite2D" parent="."] +position = Vector2(3890, 2612.5) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud30" type="Sprite2D" parent="."] +position = Vector2(3832, 1394.5) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud31" type="Sprite2D" parent="."] +position = Vector2(3472, 3106) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud32" type="Sprite2D" parent="."] +position = Vector2(3095, 2689.5) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud33" type="Sprite2D" parent="."] +position = Vector2(4016, 1558.5) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud34" type="Sprite2D" parent="."] +position = Vector2(3863, 1375) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(12, 7, 455, 168) + +[node name="Cloud35" type="Sprite2D" parent="."] +position = Vector2(3521.25, 3087) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud36" type="Sprite2D" parent="."] +position = Vector2(3609.25, 3161) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(507, 7, 193, 88) + +[node name="Cloud37" type="Sprite2D" parent="."] +visible = false +position = Vector2(3754.25, 1447) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(501, 99, 210, 92) + +[node name="Cloud38" type="Sprite2D" parent="."] +visible = false +position = Vector2(2915.25, 2833) +scale = Vector2(0.898305, 0.898305) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) + +[node name="Cloud39" type="Sprite2D" parent="."] +visible = false +position = Vector2(3270.25, 2207) +texture = ExtResource("1_eigiy") +region_enabled = true +region_rect = Rect2(10, 189, 644, 165) diff --git a/demo/scenes/base/code_edit.gd b/demo/scenes/base/code_edit.gd new file mode 100644 index 0000000..5416996 --- /dev/null +++ b/demo/scenes/base/code_edit.gd @@ -0,0 +1,140 @@ +#* +#* code_edit.gd +#* ============================================================================= +#* Copyright 2024 Serhii Snitsaruk +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* + +extends CodeEdit + +const RESERVED_WORDS := [ + # Control flow. + "break", + "continue", + "elif", + "else", + "for", + "if", + "match", + "pass", + "return", + "when", + "while", + # Declarations. + "class", + "class_name", + "const", + "enum", + "extends", + "func", + "namespace", + "signal", + "static", + "trait", + "var", + # Other keywords. + "await", + "breakpoint", + "self", + "super", + "yield", + # Operators. + "and", + "as", + "in", + "is", + "not", + "or", + # Special values. + "false", + "null", + "true", + # Constants. + "INF", + "NAN", + "PI", + "TAU", + # Functions. + "assert", + "preload", +] + +const TYPE_WORDS := [ + "bool", + "int", + "float", + "void", + "String", + "Vector2", + "Vector2i", + "Rect2", + "Rect2i", + "Vector3", + "Vector3i", + "Transform2D", + "Vector4", + "Vector4i", + "Plane", + "Quaternion", + "AABB", + "Basis", + "Transform3D", + "Projection", + "Color", + "StringName", + "NodePath", + "RID", + "Callable", + "Signal", + "Dictionary", + "Array", + "PackedByteArray", + "PackedInt32Array", + "PackedInt64Array", + "PackedFloat32Array", + "PackedFloat64Array", + "PackedStringArray", + "PackedVector2Array", + "PackedVector3Array", + "PackedColorArray", + # Other types + "Status", +] + + +func _ready() -> void: + var highlighter := CodeHighlighter.new() + syntax_highlighter = highlighter + highlighter.number_color = Color.AQUAMARINE + highlighter.symbol_color = Color.CORNFLOWER_BLUE + highlighter.function_color = Color.DEEP_SKY_BLUE + highlighter.member_variable_color = Color.LIGHT_BLUE + + # Engine types + for c in ClassDB.get_class_list(): + syntax_highlighter.add_keyword_color(c, Color.AQUAMARINE) + + syntax_highlighter.add_color_region("#", "", Color.DIM_GRAY, true) + syntax_highlighter.add_color_region("@", " ", Color.GOLDENROD) + syntax_highlighter.add_color_region("\"", "\"", Color.GOLD) + + for keyword in RESERVED_WORDS: + syntax_highlighter.add_keyword_color(keyword, Color.INDIAN_RED) + + for typeword in TYPE_WORDS: + syntax_highlighter.add_keyword_color(typeword, Color.AQUAMARINE) + + +func set_source_code(source_code: String) -> void: + # Hide license header + var idx: int = source_code.find("#*") + while idx != - 1: + source_code = source_code.substr(0, idx) + source_code.substr(source_code.findn("\n", idx) + 1) + idx = source_code.findn("#*", idx) + + text = "" # Workaround + text = source_code diff --git a/demo/scenes/base/toggle_fullscreen.gd b/demo/scenes/base/toggle_fullscreen.gd new file mode 100644 index 0000000..172889a --- /dev/null +++ b/demo/scenes/base/toggle_fullscreen.gd @@ -0,0 +1,18 @@ +extends Button + + +func _ready() -> void: + pressed.connect(_toggle_fullscreen) + + # Set scaling properties and base resolution + get_window().mode = Window.MODE_FULLSCREEN + get_window().content_scale_aspect = Window.CONTENT_SCALE_ASPECT_KEEP + get_window().content_scale_mode = Window.CONTENT_SCALE_MODE_CANVAS_ITEMS + get_window().content_scale_size = Vector2i(1920,1080) + + +func _toggle_fullscreen() -> void: + if get_window().mode != Window.MODE_FULLSCREEN: + get_window().mode = Window.MODE_FULLSCREEN + else: + get_window().mode = Window.MODE_MAXIMIZED diff --git a/demo/scenes/game.gd b/demo/scenes/game.gd new file mode 100644 index 0000000..0fbcd77 --- /dev/null +++ b/demo/scenes/game.gd @@ -0,0 +1,84 @@ +extends Node2D + +const Simple := preload("res://demo/agents/01_agent_melee_simple.tscn") +const Charger := preload("res://demo/agents/02_agent_charger.tscn") +const Imp := preload("res://demo/agents/03_agent_imp.tscn") +const Skirmisher := preload("res://demo/agents/04_agent_skirmisher.tscn") +const Ranged := preload("res://demo/agents/05_agent_ranged.tscn") +const Combo := preload("res://demo/agents/06_agent_melee_combo.tscn") +const Nuanced := preload("res://demo/agents/07_agent_melee_nuanced.tscn") +const Demon := preload("res://demo/agents/08_agent_demon.tscn") +const Summoner := preload("res://demo/agents/09_agent_summoner.tscn") + +const WAVES: Array = [ + [Simple, Simple, Nuanced], + [Simple, Nuanced, Charger], + [Simple, Simple, Simple, Ranged, Nuanced], + [Simple, Simple, Summoner], + [Ranged, Skirmisher, Nuanced, Simple, Simple], + [Nuanced, Nuanced, Combo, Ranged, Simple], + [Demon, Charger, Simple, Simple, Simple, Skirmisher], + [Demon, Demon, Nuanced, Combo], + [Summoner, Ranged, Nuanced, Nuanced, Ranged, Skirmisher, Simple], + [Demon, Demon, Summoner, Skirmisher, Nuanced, Nuanced, Combo], +] + +@export var wave_index: int = -1 +@export var agents_alive: int = 0 + +@onready var gong: StaticBody2D = $Gong +@onready var player: CharacterBody2D = $Player +@onready var spawn_points: Node2D = $SpawnPoints +@onready var hp_bar: TextureProgressBar = %HPBar +@onready var round_counter: Label = %RoundCounter + + +func _ready() -> void: + hp_bar.max_value = player.get_health().max_health + player.get_health().damaged.connect(func(_a,_b): hp_bar.value = player.get_health().get_current()) + player.death.connect(_on_player_death) + + +func _update_round_counter() -> void: + round_counter.text = "Round %s/%s" % [wave_index + 1, WAVES.size()] + + +func _on_gong_gong_struck() -> void: + _start_round() + + +func _start_round() -> void: + wave_index += 1 + if wave_index >= WAVES.size(): + player.set_victorious() + round_counter.text = "Victorious!" + return + + await get_tree().create_timer(3.0).timeout + _update_round_counter() + + var spawns: Array = spawn_points.get_children() + spawns.shuffle() + for i in WAVES[wave_index].size(): + var agent_resource: PackedScene = WAVES[wave_index][i] + var agent: CharacterBody2D = agent_resource.instantiate() + add_child(agent) + agent.global_position = spawns[i].global_position + agent.death.connect(_on_agent_death) + agent.play_summoning_effect() + agents_alive += 1 + + +func _on_agent_death() -> void: + agents_alive -= 1 + if agents_alive == 0: + _start_round() + + +func _on_player_death() -> void: + await get_tree().create_timer(3.0).timeout + get_tree().reload_current_scene() + + +func _on_switch_to_showcase_pressed() -> void: + get_tree().change_scene_to_file("res://demo/scenes/showcase.tscn") diff --git a/demo/scenes/game.tscn b/demo/scenes/game.tscn new file mode 100644 index 0000000..25a1f35 --- /dev/null +++ b/demo/scenes/game.tscn @@ -0,0 +1,196 @@ +[gd_scene load_steps=15 format=3 uid="uid://clyhgbpfpmtw7"] + +[ext_resource type="Script" path="res://demo/scenes/game.gd" id="1_qw71e"] +[ext_resource type="Theme" uid="uid://boqtjf88xcpu4" path="res://demo/assets/ui.theme" id="2_r21q3"] +[ext_resource type="Texture2D" uid="uid://tyu0ua1ju38l" path="res://demo/assets/logo.png" id="3_g0us4"] +[ext_resource type="FontFile" uid="uid://d25vkmce7mhlt" path="res://demo/assets/fonts/knewave_regular.ttf" id="4_w0vii"] +[ext_resource type="Script" path="res://demo/scenes/base/toggle_fullscreen.gd" id="5_m16ov"] +[ext_resource type="Texture2D" uid="uid://dlw15foygohrk" path="res://demo/assets/hp_under.png" id="6_622dk"] +[ext_resource type="Texture2D" uid="uid://cls8jtnu413o8" path="res://demo/assets/hp_over.png" id="7_430mt"] +[ext_resource type="Texture2D" uid="uid://hnwi23oef752" path="res://demo/assets/hp_bar.png" id="8_invih"] +[ext_resource type="PackedScene" uid="uid://bsig1usigbbuy" path="res://demo/scenes/base/arena.tscn" id="9_k3uu1"] +[ext_resource type="PackedScene" uid="uid://bpd1wmw2f7bvg" path="res://demo/props/gong.tscn" id="10_tftjb"] +[ext_resource type="PackedScene" uid="uid://d07ag5dcje13i" path="res://demo/agents/player/player.tscn" id="11_bndob"] + +[sub_resource type="LabelSettings" id="LabelSettings_qvxvp"] +font = ExtResource("4_w0vii") +font_size = 33 +outline_size = 11 +outline_color = Color(0.258915, 0.234974, 0.191974, 1) + +[sub_resource type="LabelSettings" id="LabelSettings_628x3"] +font = ExtResource("4_w0vii") +font_size = 36 +font_color = Color(1, 1, 0.239216, 1) +outline_size = 20 +outline_color = Color(0.211521, 0.23888, 0.290166, 1) + +[sub_resource type="LabelSettings" id="LabelSettings_grcwx"] +font = ExtResource("4_w0vii") +font_size = 37 +outline_size = 12 +outline_color = Color(0.317525, 0.344884, 0.388373, 1) + +[node name="Game" type="Node2D"] +y_sort_enabled = true +script = ExtResource("1_qw71e") + +[node name="UI Layer" type="CanvasLayer" parent="."] + +[node name="Control" type="Control" parent="UI Layer"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("2_r21q3") + +[node name="Toolbar" type="PanelContainer" parent="UI Layer/Control"] +custom_minimum_size = Vector2(0, 54.26) +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_bottom = 64.0 +grow_horizontal = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="UI Layer/Control/Toolbar"] +layout_mode = 2 +theme_override_constants/separation = 4 + +[node name="ToggleFullscreen" type="Button" parent="UI Layer/Control/Toolbar/HBoxContainer"] +layout_mode = 2 +focus_mode = 0 +theme_override_fonts/font = ExtResource("4_w0vii") +theme_override_font_sizes/font_size = 22 +text = "Toggle Fullscreen" +script = ExtResource("5_m16ov") + +[node name="Switch to Showcase" type="Button" parent="UI Layer/Control/Toolbar/HBoxContainer"] +layout_mode = 2 +focus_mode = 0 +theme_override_fonts/font = ExtResource("4_w0vii") +theme_override_font_sizes/font_size = 22 +text = "Switch to Showcase +" + +[node name="RoundCounter" type="Label" parent="UI Layer/Control/Toolbar/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 6 +text = "Strike the Gong to begin!" +label_settings = SubResource("LabelSettings_qvxvp") + +[node name="HPBar" type="TextureProgressBar" parent="UI Layer/Control/Toolbar/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +value = 100.0 +texture_under = ExtResource("6_622dk") +texture_over = ExtResource("7_430mt") +texture_progress = ExtResource("8_invih") + +[node name="Logo" type="TextureRect" parent="UI Layer/Control"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -1899.0 +offset_top = -130.0 +offset_right = -1643.0 +offset_bottom = -45.0 +grow_horizontal = 0 +grow_vertical = 0 +texture = ExtResource("3_g0us4") + +[node name="Demo project" type="Label" parent="UI Layer/Control/Logo"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -316.0 +offset_top = -72.0 +offset_right = 13.0 +offset_bottom = 74.0 +grow_horizontal = 0 +grow_vertical = 0 +text = "demo project" +label_settings = SubResource("LabelSettings_628x3") +horizontal_alignment = 2 +vertical_alignment = 1 + +[node name="Keys" type="Label" parent="UI Layer/Control"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -336.0 +offset_top = -208.0 +offset_right = -18.0 +offset_bottom = -25.0 +grow_horizontal = 0 +grow_vertical = 0 +text = "Move WASD +Dodge SPACE +Attack ENTER / F +" +label_settings = SubResource("LabelSettings_grcwx") + +[node name="Arena" parent="." instance=ExtResource("9_k3uu1")] +metadata/_edit_lock_ = true + +[node name="Gong" parent="." instance=ExtResource("10_tftjb")] +position = Vector2(923, -21) + +[node name="Player" parent="." instance=ExtResource("11_bndob")] +position = Vector2(843, 455) + +[node name="Camera2D" type="Camera2D" parent="Player"] +position = Vector2(0, -100) +zoom = Vector2(0.88, 0.88) +process_callback = 0 +position_smoothing_enabled = true +drag_horizontal_enabled = true +drag_vertical_enabled = true +drag_top_margin = 0.1 +drag_bottom_margin = 0.1 + +[node name="SpawnPoints" type="Node2D" parent="."] + +[node name="SpawnPosition1" type="Marker2D" parent="SpawnPoints"] +position = Vector2(512, -180) + +[node name="SpawnPosition2" type="Marker2D" parent="SpawnPoints"] +position = Vector2(1421, -150) + +[node name="SpawnPosition3" type="Marker2D" parent="SpawnPoints"] +position = Vector2(1512, 300) + +[node name="SpawnPosition4" type="Marker2D" parent="SpawnPoints"] +position = Vector2(2264, 345) + +[node name="SpawnPosition5" type="Marker2D" parent="SpawnPoints"] +position = Vector2(1655, 789) + +[node name="SpawnPosition6" type="Marker2D" parent="SpawnPoints"] +position = Vector2(823, 826) + +[node name="SpawnPosition7" type="Marker2D" parent="SpawnPoints"] +position = Vector2(67, 648) + +[node name="SpawnPosition8" type="Marker2D" parent="SpawnPoints"] +position = Vector2(-399, 434) + +[node name="SpawnPosition9" type="Marker2D" parent="SpawnPoints"] +position = Vector2(629, 417) + +[node name="SpawnPosition10" type="Marker2D" parent="SpawnPoints"] +position = Vector2(1859, 3) + +[connection signal="pressed" from="UI Layer/Control/Toolbar/HBoxContainer/Switch to Showcase" to="." method="_on_switch_to_showcase_pressed"] +[connection signal="gong_struck" from="Gong" to="." method="_on_gong_gong_struck"] diff --git a/demo/scenes/showcase.gd b/demo/scenes/showcase.gd new file mode 100644 index 0000000..2b09558 --- /dev/null +++ b/demo/scenes/showcase.gd @@ -0,0 +1,156 @@ +#* +#* showcase.gd +#* ============================================================================= +#* Copyright 2024 Serhii Snitsaruk +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* + +extends Node2D + +@onready var behavior_tree_view: BehaviorTreeView = %BehaviorTreeView +@onready var camera: Camera2D = $Camera2D +@onready var agent_selection: MenuButton = %AgentSelection +@onready var previous: Button = %Previous +@onready var next: Button = %Next +@onready var minimize_description: Button = %MinimizeDescription +@onready var description: RichTextLabel = %Description +@onready var begin_tutorial: Button = %BeginTutorial +@onready var navigation_hint: Label = %NavigationHint +@onready var scene_title: Label = %SceneTitle +@onready var code_popup = %CodePopup +@onready var code_edit = %CodeEdit + +var bt_player: BTPlayer +var selected_tree_index: int = -1 +var agent_files: Array[String] +var agents_dir: String +var is_tutorial: bool = false + + +func _ready() -> void: + code_popup.hide() + + agent_selection.get_popup().id_pressed.connect(_on_agent_selection_id_pressed) + previous.pressed.connect(func(): _on_agent_selection_id_pressed(selected_tree_index - 1)) + next.pressed.connect(func(): _on_agent_selection_id_pressed(selected_tree_index + 1)) + + _initialize() + + +func _physics_process(_delta: float) -> void: + var inst: BTInstance = bt_player.get_bt_instance() + var bt_data: BehaviorTreeData = BehaviorTreeData.create_from_bt_instance(inst) + behavior_tree_view.update_tree(bt_data) + + +func _initialize() -> void: + if is_tutorial: + _populate_agent_files("res://demo/agents/tutorial/") + begin_tutorial.text = "End Tutorial" + navigation_hint.text = "Navigate ➀" + scene_title.text = "Tutorial" + _on_agent_selection_id_pressed(0) + else: + _populate_agent_files("res://demo/agents/") + begin_tutorial.text = "Begin Tutorial" + navigation_hint.text = "Select Agent ➀" + scene_title.text = "Showcase" + _on_agent_selection_id_pressed(0) + + +func _attach_camera(agent: CharacterBody2D) -> void: + await get_tree().process_frame + camera.get_parent().remove_child(camera) + agent.add_child(camera) + camera.position = Vector2(400.0, 0.0) + + +func _populate_agent_files(p_path: String = "res://demo/agents/") -> void: + var popup: PopupMenu = agent_selection.get_popup() + popup.clear() + popup.reset_size() + agent_files.clear() + agents_dir = p_path + + var dir := DirAccess.open(p_path) + if dir: + dir.list_dir_begin() + var file_name: String = dir.get_next() + while file_name != "": + if dir.current_is_dir() or file_name.begins_with("agent_base"): + file_name = dir.get_next() + continue + agent_files.append(file_name.get_file().trim_suffix(".remap")) + file_name = dir.get_next() + dir.list_dir_end() + + agent_files.sort() + for i in agent_files.size(): + popup.add_item(agent_files[i], i) + + +func _load_agent(file_name: String) -> void: + var agent_res := load(file_name) as PackedScene + assert(agent_res != null) + + for child in get_children(): + if child is CharacterBody2D and child.name != "Dummy": + child.die() + + var agent: CharacterBody2D = agent_res.instantiate() + add_child(agent) + bt_player = agent.find_child("BTPlayer") + description.text = _parse_description(bt_player.behavior_tree.description) + _attach_camera(agent) + + +func _parse_description(p_desc: String) -> String: + return p_desc \ + .replace("[SUCCESS]", "[color=PaleGreen]SUCCESS[/color]") \ + .replace("[FAILURE]", "[color=IndianRed]FAILURE[/color]") \ + .replace("[RUNNING]", "[color=orange]RUNNING[/color]") \ + .replace("[comp]", "[color=CornflowerBlue][b]") \ + .replace("[/comp]", "[/b][/color]") \ + .replace("[act]", "[color=white][b]") \ + .replace("[/act]", "[/b][/color]") \ + .replace("[dec]", "[color=MediumOrchid][b]") \ + .replace("[/dec]", "[/b][/color]") \ + .replace("[con]", "[color=orange][b]") \ + .replace("[/con]", "[/b][/color]") + + +func _on_agent_selection_id_pressed(id: int) -> void: + assert(id >= 0 and id < agent_files.size()) + selected_tree_index = id + _load_agent(agents_dir.path_join(agent_files[id])) + agent_selection.text = bt_player.behavior_tree.resource_path.get_file() + if agent_selection.text.to_lower() != agent_selection.text: + # Treat filename as a title + agent_selection.text = agent_selection.text.trim_suffix(".tres") + previous.disabled = id == 0 + next.disabled = id == (agent_files.size() - 1) + + +func _on_switch_to_game_pressed() -> void: + get_tree().change_scene_to_file("res://demo/scenes/game.tscn") + + +func _on_minimize_description_button_down() -> void: + description.visible = not description.visible + minimize_description.text = "-" if description.visible else "+" + + +func _on_tutorial_pressed() -> void: + is_tutorial = not is_tutorial + _initialize() + + +func _on_behavior_tree_view_task_selected(_type_name: String, p_script_path: String) -> void: + if not p_script_path.is_empty(): + var sc: Script = load(p_script_path) + code_edit.set_source_code(sc.source_code) + code_popup.popup.call_deferred() diff --git a/demo/scenes/showcase.tscn b/demo/scenes/showcase.tscn new file mode 100644 index 0000000..4c23f0f --- /dev/null +++ b/demo/scenes/showcase.tscn @@ -0,0 +1,288 @@ +[gd_scene load_steps=16 format=3 uid="uid://b3ae14mc2ty3y"] + +[ext_resource type="Script" path="res://demo/scenes/showcase.gd" id="1_l12ql"] +[ext_resource type="Theme" uid="uid://boqtjf88xcpu4" path="res://demo/assets/ui.theme" id="2_3d7dj"] +[ext_resource type="FontFile" uid="uid://d25vkmce7mhlt" path="res://demo/assets/fonts/knewave_regular.ttf" id="3_7vli5"] +[ext_resource type="FontFile" uid="uid://n231m6uqsq6x" path="res://demo/assets/fonts/junction_bold.otf" id="4_7ubu6"] +[ext_resource type="Texture2D" uid="uid://dc1wu244fnetf" path="res://demo/assets/arrow_left.png" id="5_bvrtp"] +[ext_resource type="Texture2D" uid="uid://tyu0ua1ju38l" path="res://demo/assets/logo.png" id="5_rwygb"] +[ext_resource type="Script" path="res://demo/scenes/base/toggle_fullscreen.gd" id="6_uggpo"] +[ext_resource type="Texture2D" uid="uid://bjakugmqbbtw7" path="res://demo/assets/arrow_right.png" id="7_5do2y"] +[ext_resource type="PackedScene" uid="uid://bsig1usigbbuy" path="res://demo/scenes/base/arena.tscn" id="7_42nq6"] +[ext_resource type="PackedScene" uid="uid://c5fhe3tulhlco" path="res://demo/props/dummy.tscn" id="8_apshw"] +[ext_resource type="Script" path="res://demo/scenes/base/code_edit.gd" id="9_txke7"] + +[sub_resource type="LabelSettings" id="LabelSettings_rdr7a"] +font = ExtResource("3_7vli5") +font_size = 33 +outline_size = 11 +outline_color = Color(0.258915, 0.234974, 0.191974, 1) + +[sub_resource type="LabelSettings" id="LabelSettings_3uhve"] +font = ExtResource("3_7vli5") +font_size = 26 +font_color = Color(0.804089, 0.811917, 0.823636, 1) +outline_size = 10 +outline_color = Color(0.145083, 0.168536, 0.203708, 1) + +[sub_resource type="LabelSettings" id="LabelSettings_la4ui"] +font = ExtResource("3_7vli5") +font_size = 36 +font_color = Color(1, 1, 0.239216, 1) +outline_size = 20 +outline_color = Color(0.211521, 0.23888, 0.290166, 1) + +[sub_resource type="LabelSettings" id="LabelSettings_tlprv"] +font = ExtResource("3_7vli5") +font_size = 23 +font_color = Color(0.804089, 0.811917, 0.823636, 1) +outline_size = 10 +outline_color = Color(0.145083, 0.168536, 0.203708, 1) + +[node name="AgentShowcase" type="Node2D"] +y_sort_enabled = true +script = ExtResource("1_l12ql") + +[node name="UI Layer" type="CanvasLayer" parent="."] + +[node name="Control" type="Control" parent="UI Layer"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("2_3d7dj") + +[node name="Toolbar" type="PanelContainer" parent="UI Layer/Control"] +custom_minimum_size = Vector2(0, 54.26) +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_right = -612.0 +offset_bottom = 58.0 +grow_horizontal = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="UI Layer/Control/Toolbar"] +layout_mode = 2 +theme_override_constants/separation = 4 + +[node name="ToggleFullscreen" type="Button" parent="UI Layer/Control/Toolbar/HBoxContainer"] +layout_mode = 2 +focus_mode = 0 +theme_override_fonts/font = ExtResource("3_7vli5") +theme_override_font_sizes/font_size = 22 +text = "Toggle Fullscreen" +script = ExtResource("6_uggpo") + +[node name="SwitchToGame" type="Button" parent="UI Layer/Control/Toolbar/HBoxContainer"] +layout_mode = 2 +focus_mode = 0 +theme_override_fonts/font = ExtResource("3_7vli5") +theme_override_font_sizes/font_size = 22 +text = "Switch to Game" + +[node name="BeginTutorial" type="Button" parent="UI Layer/Control/Toolbar/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +focus_mode = 0 +theme_override_fonts/font = ExtResource("3_7vli5") +theme_override_font_sizes/font_size = 22 +text = "Begin Tutorial +" + +[node name="SceneTitle" type="Label" parent="UI Layer/Control/Toolbar/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 6 +text = "Tutorial" +label_settings = SubResource("LabelSettings_rdr7a") + +[node name="NavigationHint" type="Label" parent="UI Layer/Control/Toolbar/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 8 +text = "Select Agent ➀" +label_settings = SubResource("LabelSettings_3uhve") +horizontal_alignment = 2 + +[node name="BehaviorInspector" type="PanelContainer" parent="UI Layer/Control"] +layout_mode = 1 +anchors_preset = 11 +anchor_left = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -612.0 +grow_horizontal = 0 +grow_vertical = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="UI Layer/Control/BehaviorInspector"] +custom_minimum_size = Vector2(600, 0) +layout_mode = 2 +theme_override_constants/separation = 4 + +[node name="HBoxContainer" type="HBoxContainer" parent="UI Layer/Control/BehaviorInspector/VBoxContainer"] +layout_mode = 2 +theme_override_constants/separation = 4 + +[node name="Previous" type="Button" parent="UI Layer/Control/BehaviorInspector/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +focus_mode = 0 +theme_override_font_sizes/font_size = 28 +icon = ExtResource("5_bvrtp") + +[node name="AgentSelection" type="MenuButton" parent="UI Layer/Control/BehaviorInspector/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(400, 50) +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_fonts/font = ExtResource("4_7ubu6") +theme_override_font_sizes/font_size = 30 +text = "02_agent_imp.tres +" +flat = false + +[node name="Next" type="Button" parent="UI Layer/Control/BehaviorInspector/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +focus_mode = 0 +theme_override_font_sizes/font_size = 28 +icon = ExtResource("7_5do2y") + +[node name="BehaviorTreeView" type="BehaviorTreeView" parent="UI Layer/Control/BehaviorInspector/VBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(600, 0) +layout_mode = 2 +size_flags_vertical = 3 + +[node name="PanelContainer" type="PanelContainer" parent="UI Layer/Control"] +layout_mode = 1 +anchors_preset = 12 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -8.0 +offset_right = -612.0 +grow_horizontal = 2 +grow_vertical = 0 + +[node name="Control" type="Control" parent="UI Layer/Control/PanelContainer"] +layout_mode = 2 + +[node name="Logo" type="TextureRect" parent="UI Layer/Control/PanelContainer/Control"] +layout_mode = 1 +offset_top = -128.0 +offset_right = 256.0 +offset_bottom = -43.0 +texture = ExtResource("5_rwygb") + +[node name="Demo project" type="Label" parent="UI Layer/Control/PanelContainer/Control/Logo"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -316.0 +offset_top = -72.0 +offset_right = 13.0 +offset_bottom = 74.0 +grow_horizontal = 0 +grow_vertical = 0 +text = "demo project" +label_settings = SubResource("LabelSettings_la4ui") +horizontal_alignment = 2 +vertical_alignment = 1 + +[node name="Header" type="HBoxContainer" parent="UI Layer/Control/PanelContainer/Control"] +layout_mode = 2 +offset_left = 3.0 +offset_top = -43.0 +offset_right = 1299.0 +offset_bottom = -7.0 +theme_override_constants/separation = 8 + +[node name="Label" type="Label" parent="UI Layer/Control/PanelContainer/Control/Header"] +layout_mode = 2 +size_flags_horizontal = 10 +text = "Description" +label_settings = SubResource("LabelSettings_tlprv") + +[node name="MinimizeDescription" type="Button" parent="UI Layer/Control/PanelContainer/Control/Header"] +unique_name_in_owner = true +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +focus_mode = 0 +theme_override_fonts/font = ExtResource("3_7vli5") +text = "-" + +[node name="MarginContainer" type="MarginContainer" parent="UI Layer/Control/PanelContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 20 +theme_override_constants/margin_top = 6 +theme_override_constants/margin_bottom = 6 + +[node name="VBoxContainer" type="VBoxContainer" parent="UI Layer/Control/PanelContainer/MarginContainer"] +layout_mode = 2 +theme_override_constants/separation = 0 + +[node name="Description" type="RichTextLabel" parent="UI Layer/Control/PanelContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 140) +layout_mode = 2 +size_flags_vertical = 3 +theme_override_font_sizes/bold_italics_font_size = 20 +theme_override_font_sizes/italics_font_size = 20 +theme_override_font_sizes/mono_font_size = 20 +theme_override_font_sizes/normal_font_size = 20 +theme_override_font_sizes/bold_font_size = 20 +bbcode_enabled = true +text = "[b]Behavior Trees[/b] are composed of tasks that represent specific actions or decision-making rules. Tasks can be broadly categorized into two main types: control tasks and leaf tasks. Control tasks determine the execution flow within the tree. They include Sequence, Selector, and Invert. Leaf tasks represent specific actions to perform, like moving or attacking, or conditions that need to be checked. The BTTask class provides the foundation for various building blocks of the Behavior Trees. BT tasks can share data with the help of the Blackboard." +fit_content = true + +[node name="CodePopup" type="PopupPanel" parent="UI Layer/Control"] +unique_name_in_owner = true +position = Vector2i(0, 60) +size = Vector2i(1024, 708) +visible = true + +[node name="CodeEdit" type="CodeEdit" parent="UI Layer/Control/CodePopup"] +unique_name_in_owner = true +custom_minimum_size = Vector2(800, 700) +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 4.0 +offset_top = 4.0 +offset_right = 1020.0 +offset_bottom = 704.0 +grow_horizontal = 2 +grow_vertical = 2 +gutters_draw_line_numbers = true +script = ExtResource("9_txke7") + +[node name="Camera2D" type="Camera2D" parent="."] +position = Vector2(400, 0) +zoom = Vector2(0.88, 0.88) +process_callback = 0 +position_smoothing_enabled = true +drag_horizontal_enabled = true +drag_vertical_enabled = true +drag_left_margin = 0.1 +drag_top_margin = 0.1 +drag_right_margin = 0.0 +drag_bottom_margin = 0.1 + +[node name="Arena" parent="." instance=ExtResource("7_42nq6")] +metadata/_edit_lock_ = true + +[node name="Dummy" parent="." instance=ExtResource("8_apshw")] +position = Vector2(1106, 423) + +[connection signal="pressed" from="UI Layer/Control/Toolbar/HBoxContainer/SwitchToGame" to="." method="_on_switch_to_game_pressed"] +[connection signal="pressed" from="UI Layer/Control/Toolbar/HBoxContainer/BeginTutorial" to="." method="_on_tutorial_pressed"] +[connection signal="task_selected" from="UI Layer/Control/BehaviorInspector/VBoxContainer/BehaviorTreeView" to="." method="_on_behavior_tree_view_task_selected"] +[connection signal="button_down" from="UI Layer/Control/PanelContainer/Control/Header/MinimizeDescription" to="." method="_on_minimize_description_button_down"] diff --git a/prefabs/player.tscn b/prefabs/player.tscn index fe4b7cf..5ee792e 100644 --- a/prefabs/player.tscn +++ b/prefabs/player.tscn @@ -1,9 +1,12 @@ -[gd_scene load_steps=6 format=3 uid="uid://ctu0cdqcefrwg"] +[gd_scene load_steps=9 format=3 uid="uid://ctu0cdqcefrwg"] [ext_resource type="Script" path="res://scripts/player/player.gd" id="1_1tqna"] [ext_resource type="Script" path="res://scripts/player/cameraController.gd" id="1_v2q4i"] [ext_resource type="PackedScene" uid="uid://c2x0xjb2ypfpq" path="res://content/rifle/weapon.tscn" id="3_5cmgy"] [ext_resource type="Script" path="res://scripts/player/weapon.gd" id="4_nfpgt"] +[ext_resource type="PackedScene" uid="uid://bnwuklgcmgyw8" path="res://content/muzzleflash/muzzleflash.tscn" id="5_v58ob"] +[ext_resource type="Script" path="res://demo/agents/scripts/health.gd" id="6_ixo02"] +[ext_resource type="PackedScene" uid="uid://bwnlcxfwxyj7j" path="res://content/ui/UI.tscn" id="7_qi8fi"] [sub_resource type="CylinderShape3D" id="CylinderShape3D_w4dyg"] margin = 0.332 @@ -20,14 +23,89 @@ shape = SubResource("CylinderShape3D_w4dyg") [node name="Camera3D" type="Camera3D" parent="CollisionShape3D" node_paths=PackedStringArray("PlayerNode")] transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 0, 0.68094, 0) keep_aspect = 0 -fov = 80.0 +fov = 66.5 script = ExtResource("1_v2q4i") PlayerNode = NodePath("../..") -[node name="Weapon" parent="CollisionShape3D/Camera3D" instance=ExtResource("3_5cmgy")] +[node name="Weapon" parent="CollisionShape3D/Camera3D" node_paths=PackedStringArray("Origin", "BulletOrigin") instance=ExtResource("3_5cmgy")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0655423, 0) script = ExtResource("4_nfpgt") +MuzzleFlash = ExtResource("5_v58ob") +Origin = NodePath("LVA4_Armature/Skeleton3D/BoneAttachment3D/Plane/Muzzle") +BulletOrigin = NodePath("..") + +[node name="Skeleton3D" parent="CollisionShape3D/Camera3D/Weapon/LVA4_Armature" index="0"] +bones/6/rotation = Quaternion(0.697021, -0.0271559, 0.0376544, 0.715546) +bones/6/scale = Vector3(1.01704, 0.970755, 1.01744) +bones/9/rotation = Quaternion(0.597208, 0.088759, -0.0953634, 0.791436) +bones/9/scale = Vector3(0.894297, 1.25036, 0.894302) +bones/13/rotation = Quaternion(-0.28923, -0.582728, 0.583821, 0.485724) +bones/14/rotation = Quaternion(0.848078, 0.123778, -0.0283134, 0.514433) +bones/15/rotation = Quaternion(-0.283662, -0.0771209, 0.0117335, 0.955746) +bones/17/rotation = Quaternion(-0.0979801, -0.0112315, 0.138692, 0.985413) +bones/18/rotation = Quaternion(0.00285996, -0.0771369, -0.0955664, 0.992426) +bones/19/rotation = Quaternion(-0.014737, 0.0372155, -0.0126211, 0.999119) +bones/23/rotation = Quaternion(0.0470606, 0.0222304, 0.674114, 0.736791) +bones/24/rotation = Quaternion(-0.0161525, -0.0078105, 0.43526, 0.900126) +bones/28/rotation = Quaternion(0.102228, 0.0657092, 0.694722, 0.708938) +bones/29/rotation = Quaternion(-0.0349312, -0.0131626, -0.00239495, 0.9993) +bones/33/rotation = Quaternion(0.0718133, 0.0329945, 0.409986, 0.908661) +bones/37/rotation = Quaternion(-0.0719948, 0.0990852, 0.535014, 0.835918) +bones/38/rotation = Quaternion(0.0321199, 0.0582583, 0.363318, 0.929287) +bones/40/rotation = Quaternion(0.01367, -0.0189025, -0.00240104, 0.999725) +bones/42/rotation = Quaternion(0.0135558, -0.0612161, -0.00297769, 0.998028) +bones/44/rotation = Quaternion(0.0136076, -0.0431957, -0.00273264, 0.99897) +bones/46/rotation = Quaternion(0.8627, 0.184653, -0.263834, -0.389927) +bones/48/rotation = Quaternion(0.0136698, -0.0189026, -0.00240123, 0.999725) +bones/50/rotation = Quaternion(-0.0240003, -0.0270186, 0.0231118, 0.99908) +bones/52/rotation = Quaternion(9.57289e-08, -0.102194, 2.38743e-08, 0.994764) +bones/55/rotation = Quaternion(-0.00863172, 0.430989, -0.779795, 0.453977) +bones/56/rotation = Quaternion(0.568329, -0.124676, -0.024049, 0.812945) +bones/57/rotation = Quaternion(-0.202555, -0.0372334, 0.118361, 0.971378) +bones/59/position = Vector3(5.26137e-06, 0.00062688, 4.61328e-06) +bones/59/rotation = Quaternion(-0.0921515, 0.0504243, 0.195935, 0.974974) +bones/60/rotation = Quaternion(-0.0504229, 0.0584449, -0.605684, 0.791952) +bones/61/rotation = Quaternion(0.0114703, -0.0383484, -0.608711, 0.792382) +bones/64/position = Vector3(-1.39906e-05, 0.000607789, 8.67999e-07) +bones/64/rotation = Quaternion(-0.0560437, 0.00556503, 0.0915036, 0.994211) +bones/65/rotation = Quaternion(0.0483554, -0.0192523, -0.71875, 0.693318) +bones/66/rotation = Quaternion(-0.0173623, 0.00452312, -0.601864, 0.798397) +bones/69/position = Vector3(1.30467e-06, 0.000602322, -2.7101e-06) +bones/69/rotation = Quaternion(0.0409456, -0.0210825, 0.0696472, 0.996508) +bones/70/rotation = Quaternion(0.0377608, -0.115509, -0.0908998, 0.988417) +bones/71/rotation = Quaternion(-0.0354375, -0.0117314, -0.626531, 0.778502) +bones/74/position = Vector3(-8.65025e-06, 0.000669554, 2.38656e-05) +bones/74/rotation = Quaternion(0.0945839, -0.108202, 0.236727, 0.960889) +bones/75/rotation = Quaternion(0.0550313, -0.0567217, -0.0538148, 0.995419) +bones/76/rotation = Quaternion(-0.0284048, -0.0472237, -0.149045, 0.987294) +bones/78/position = Vector3(-8.86769e-05, 0.000149522, 3.81398e-05) +bones/79/rotation = Quaternion(-0.24679, -0.068873, -0.208296, 0.943909) +bones/80/rotation = Quaternion(0.0181542, -0.258237, 0.0705999, 0.963327) +bones/82/rotation = Quaternion(0.0137306, -0.00845511, 0.00202618, 0.999868) +bones/84/rotation = Quaternion(0.0137638, -0.0259837, 0.00178515, 0.999566) +bones/86/rotation = Quaternion(0.0137486, -0.017656, 0.00189981, 0.999748) +bones/90/rotation = Quaternion(0.0137304, -0.00845505, 0.0020264, 0.999868) +bones/92/rotation = Quaternion(-0.0246213, -0.000215826, -0.0224486, 0.999445) +bones/94/rotation = Quaternion(2.79802e-09, 0.0449708, 4.00876e-08, 0.998988) +bones/96/position = Vector3(0.00148682, 0.00419669, -0.00257247) +bones/96/rotation = Quaternion(-0.664802, 0.0151952, 0.13056, 0.735365) +bones/98/position = Vector3(0.000566952, 0.00437002, -0.00361386) +bones/98/rotation = Quaternion(-0.686633, -0.158208, -0.166366, 0.689803) + +[node name="BoneAttachment3D" parent="CollisionShape3D/Camera3D/Weapon/LVA4_Armature/Skeleton3D" index="1"] +transform = Transform3D(0.965405, -0.212387, -0.151277, 0.196116, 0.973749, -0.115552, 0.171848, 0.0818871, 0.981714, 0.00148609, 0.00257259, -0.00101604) + +[node name="Muzzle" parent="CollisionShape3D/Camera3D/Weapon/LVA4_Armature/Skeleton3D/BoneAttachment3D/Plane" index="0"] +transform = Transform3D(0.00256023, 0.00111408, -0.00109729, 0.000993761, 0.00046617, 0.00279197, 0.00120734, -0.00274618, 2.87907e-05, -0.00118721, 0.00250132, 0.000390777) [node name="CooldownTimer" type="Timer" parent="CollisionShape3D/Camera3D/Weapon"] wait_time = 0.3 one_shot = true + +[node name="Health" type="Node" parent="."] +script = ExtResource("6_ixo02") +max_health = 5.0 + +[node name="Ui" parent="." instance=ExtResource("7_qi8fi")] + +[editable path="CollisionShape3D/Camera3D/Weapon"] diff --git a/scripts/enemies/enemy.gd b/scripts/enemies/enemy.gd new file mode 100644 index 0000000..b3ea8f3 --- /dev/null +++ b/scripts/enemies/enemy.gd @@ -0,0 +1,49 @@ +extends CharacterBody3D +class_name Enemy + +const MOVEMENT_SPEED = 1 + +@onready var animationtree: AnimationTree = $enemies/AnimationPlayer/AnimationTree +@onready var agent:NavigationAgent3D = $NavigationAgent +@onready var enemyAi: EnemyAI = $BTPlayer +@onready var health: Health = $Health + +const SPEED = 5.0 +const JUMP_VELOCITY = 4.5 + +var movementBlend = 0; + +func _ready() -> void: + health.death.connect(died) + +func died() -> void: + queue_free() + +func updateMovementBlend(delta: float, to: float) -> void: + movementBlend = move_toward(movementBlend, to, delta * 2); + +func rotateTo(delta: float, targetDirection: Vector3) -> void: + self.global_basis.z = lerp(self.global_basis.z, targetDirection, delta * 10); + +func _physics_process(delta: float) -> void: + if agent.is_navigation_finished(): + if enemyAi.aggressive: + rotateTo(delta, (Player.Instance.global_position - self.global_position).normalized()) + + updateMovementBlend(delta, 0); + self.animationtree['parameters/Movement/blend_position'] = movementBlend + return + + var current_agent_position: Vector3 = global_position + var next_path_position: Vector3 = agent.get_next_path_position() + + velocity = current_agent_position.direction_to(next_path_position) * MOVEMENT_SPEED + move_and_slide() + + if enemyAi.aggressive: + rotateTo(delta, (Player.Instance.global_position - self.global_position).normalized()) + else: + rotateTo(delta, -velocity.normalized()) + + updateMovementBlend(delta, velocity.length()) + self.animationtree['parameters/Movement/blend_position'] = movementBlend diff --git a/scripts/enemies/enemy_ai.gd b/scripts/enemies/enemy_ai.gd new file mode 100644 index 0000000..695b90f --- /dev/null +++ b/scripts/enemies/enemy_ai.gd @@ -0,0 +1,49 @@ +extends BTPlayer + +class_name EnemyAI + +const ROAM_DISTANCE: float = 10.0 +const DISTANCE_TO_PLAYER: float = 10.0 + +@export var character: CharacterBody3D + +@export_category("Sprite") +@export var sprite:Sprite3D; +@export var idleTexture: Texture2D; +@export var aggressiveTexture: Texture2D; + +@export_category("Agents") +@export var agent: NavigationAgent3D; + +@export var animationTree: AnimationTree; + +@export_category("Firing") +@export var MuzzleFlash: PackedScene +@export var Origin: Node3D + +var aggressive = false + +func _physics_process(_delta: float) -> void: + self.blackboard.set_var('PlayerDistance', character.global_position.distance_to(Player.Instance.global_position)) + self.blackboard.set_var('LookingAngleToPlayer', (-character.global_basis.z).dot((character.global_position - Player.Instance.global_position).normalized())) + +func setAggressive(value: bool) -> void: + if not aggressive && value: + agent.target_position = character.global_position; + + sprite.texture = aggressiveTexture if value else idleTexture + aggressive = value + + +func roam() -> void: + var targetPosition = character.global_position + (Vector3(randf_range(-1, 1), randf_range(-1, 1), randf_range(-1,1)).normalized() * randf_range(0, ROAM_DISTANCE)) + agent.target_position = targetPosition + +func moveToPlayer() -> void: + var toPlayerDirection = Player.Instance.global_position - character.global_position + agent.target_position = Player.Instance.global_position + toPlayerDirection.normalized() * -DISTANCE_TO_PLAYER + +func Fire() -> void: + self.animationTree['parameters/playback'].travel('Fire') + var instance = MuzzleFlash.instantiate(PackedScene.GEN_EDIT_STATE_INSTANCE) + Origin.add_child(instance) diff --git a/scripts/muzzleflash.gd b/scripts/muzzleflash.gd new file mode 100644 index 0000000..91feeb9 --- /dev/null +++ b/scripts/muzzleflash.gd @@ -0,0 +1,12 @@ +extends Node3D + +@onready var timer: Timer = $Timer + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + rotate_z(randf()) + timer.timeout.connect(self.completed) + + +func completed() -> void: + queue_free() diff --git a/scripts/player/cameraController.gd b/scripts/player/cameraController.gd index 62fe9ea..731bd19 100644 --- a/scripts/player/cameraController.gd +++ b/scripts/player/cameraController.gd @@ -11,6 +11,9 @@ func _ready() -> void: Input.mouse_mode = Input.MOUSE_MODE_CAPTURED; func _input(event: InputEvent) -> void: + if event is InputEventKey && event.key_label == KEY_ESCAPE: + Input.mouse_mode = Input.MOUSE_MODE_VISIBLE + if event is not InputEventMouseMotion: return diff --git a/scripts/player/player.gd b/scripts/player/player.gd index cf2ae4b..7ece1e6 100644 --- a/scripts/player/player.gd +++ b/scripts/player/player.gd @@ -12,7 +12,9 @@ static var Instance: Player; @onready var animationtree: AnimationTree = $CollisionShape3D/Camera3D/Weapon/AnimationPlayer/AnimationTree @onready var collisionShape: CollisionShape3D = $CollisionShape3D +@onready var health: Health = $Health +const CROUCHED_SPEED: float = 2.5 const SPEED: float = 5.0 const SPRINT_SPEED: float = 10.0 const FALLOFF_SPEED: float = 0.5 @@ -54,6 +56,8 @@ func _physics_process(delta: float) -> void: if PlayerState == PlayerStates.SPRINTING: speed = SPRINT_SPEED + if PlayerState == PlayerStates.CROUCHING: + speed = CROUCHED_SPEED if direction: velocity.x = direction.x * speed @@ -67,13 +71,16 @@ func _physics_process(delta: float) -> void: if self.PlayerState == PlayerStates.SPRINTING: input_dir.y *= 2 - var blendProperty = 'parameters/Movement/blend_position' + var blendProperty = 'parameters/Movement/0/blend_position' if PlayerState == PlayerStates.CROUCHING: blendProperty = 'parameters/Crouched Movement/blend_position' lastDirection.x = move_toward(lastDirection.x, input_dir.x, 0.05); lastDirection.y = move_toward(lastDirection.y, input_dir.y, 0.05); - animationtree.set(blendProperty, lastDirection); + var yLeft = clamp(lastDirection.y - 1, 0, 1); + animationtree.set('parameters/Movement/blend_position', yLeft) + var yRemainder = Vector2(lastDirection.x, clamp(lastDirection.y, 0, 1)); + animationtree.set(blendProperty, yRemainder); func handleCrouching(): if Input.is_action_just_pressed('player_crouching'): diff --git a/scripts/player/weapon.gd b/scripts/player/weapon.gd index 4004476..52ca1fd 100644 --- a/scripts/player/weapon.gd +++ b/scripts/player/weapon.gd @@ -2,13 +2,18 @@ extends Node3D @onready var animationtree: AnimationTree = $AnimationPlayer/AnimationTree @onready var timer: Timer = $CooldownTimer + +@export_category("Firing") +@export var MuzzleFlash: PackedScene +@export var Origin: Node3D +@export var BulletOrigin: Node3D + var statemachine: AnimationNodeStateMachinePlayback # Called when the node enters the scene tree for the first time. func _ready() -> void: self.statemachine = animationtree['parameters/playback'] - func _input(event: InputEvent) -> void: if event is not InputEventMouseButton: return @@ -19,6 +24,9 @@ func _input(event: InputEvent) -> void: if self.timer.time_left > 0: return + if Player.Instance.PlayerState == Player.PlayerStates.SPRINTING: + return + var travelTarget = 'Fire' if Player.Instance.PlayerState == Player.PlayerStates.CROUCHING: travelTarget = 'Crouched Fire' @@ -26,4 +34,24 @@ func _input(event: InputEvent) -> void: self.animationtree.set('parameters/' + travelTarget + '/blend_position', randf_range(0, 2)) self.statemachine.travel(travelTarget) + fireBullet() + self.timer.start() + +func fireBullet() -> void: + var instance = self.MuzzleFlash.instantiate(PackedScene.GEN_EDIT_STATE_INSTANCE) + Origin.add_child(instance) + + var query = PhysicsRayQueryParameters3D.create(BulletOrigin.global_position, BulletOrigin.global_position + BulletOrigin.global_basis.z * -200) + var result = get_world_3d().direct_space_state.intersect_ray(query) + + if not result: + print('No result') + return + + var health = result.collider.get_node('Health') + if health: + print("Dealing Damage") + result.collider.health.take_damage(1, Vector2(0,0)) + return + print('No Health Element')