diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..f28239b
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,4 @@
+root = true
+
+[*]
+charset = utf-8
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..8ad74f7
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Normalize EOL for all files that Git considers text files.
+* text=auto eol=lf
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6186357
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+# Godot 4+ specific ignores
+.godot/
+/android/
+export_presets.cfg
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8ff9a07
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) 2025 Persephone (KawaiiZenbo) Bubblegum-Holiday
+
+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/Models/3-Stage/3Stage.glb b/Models/3-Stage/3Stage.glb
new file mode 100644
index 0000000..dd598e8
Binary files /dev/null and b/Models/3-Stage/3Stage.glb differ
diff --git a/Models/3-Stage/3Stage.glb.import b/Models/3-Stage/3Stage.glb.import
new file mode 100644
index 0000000..4009c15
--- /dev/null
+++ b/Models/3-Stage/3Stage.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://b77ebnic6ktql"
+path="res://.godot/imported/3Stage.glb-3993108ca764668f2cef2120fc62a054.scn"
+
+[deps]
+
+source_file="res://Models/3-Stage/3Stage.glb"
+dest_files=["res://.godot/imported/3Stage.glb-3993108ca764668f2cef2120fc62a054.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/3-Stage/3Stage_90sCarpet.png b/Models/3-Stage/3Stage_90sCarpet.png
new file mode 100644
index 0000000..2e803e8
Binary files /dev/null and b/Models/3-Stage/3Stage_90sCarpet.png differ
diff --git a/Models/3-Stage/3Stage_90sCarpet.png.import b/Models/3-Stage/3Stage_90sCarpet.png.import
new file mode 100644
index 0000000..d39b488
--- /dev/null
+++ b/Models/3-Stage/3Stage_90sCarpet.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://i81fa3un78i8"
+path.s3tc="res://.godot/imported/3Stage_90sCarpet.png-c8a6f31aa72a37cfe2008522b13d081b.s3tc.ctex"
+path.etc2="res://.godot/imported/3Stage_90sCarpet.png-c8a6f31aa72a37cfe2008522b13d081b.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "d5b1018d1d02101872e62e5f0fe03344"
+}
+
+[deps]
+
+source_file="res://Models/3-Stage/3Stage_90sCarpet.png"
+dest_files=["res://.godot/imported/3Stage_90sCarpet.png-c8a6f31aa72a37cfe2008522b13d081b.s3tc.ctex", "res://.godot/imported/3Stage_90sCarpet.png-c8a6f31aa72a37cfe2008522b13d081b.etc2.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/Models/3-Stage/3Stage_BlackCarpet_Diffuse.png b/Models/3-Stage/3Stage_BlackCarpet_Diffuse.png
new file mode 100644
index 0000000..7ef0634
Binary files /dev/null and b/Models/3-Stage/3Stage_BlackCarpet_Diffuse.png differ
diff --git a/Models/3-Stage/3Stage_BlackCarpet_Diffuse.png.import b/Models/3-Stage/3Stage_BlackCarpet_Diffuse.png.import
new file mode 100644
index 0000000..eb0bb03
--- /dev/null
+++ b/Models/3-Stage/3Stage_BlackCarpet_Diffuse.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://4qqx875414ak"
+path.s3tc="res://.godot/imported/3Stage_BlackCarpet_Diffuse.png-384769ca664d7f19d1427121617333a2.s3tc.ctex"
+path.etc2="res://.godot/imported/3Stage_BlackCarpet_Diffuse.png-384769ca664d7f19d1427121617333a2.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "f1a86207e2b78453b13df0fee272dea9"
+}
+
+[deps]
+
+source_file="res://Models/3-Stage/3Stage_BlackCarpet_Diffuse.png"
+dest_files=["res://.godot/imported/3Stage_BlackCarpet_Diffuse.png-384769ca664d7f19d1427121617333a2.s3tc.ctex", "res://.godot/imported/3Stage_BlackCarpet_Diffuse.png-384769ca664d7f19d1427121617333a2.etc2.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/Models/3-Stage/3Stage_BlackCeiling_Diffuse.png b/Models/3-Stage/3Stage_BlackCeiling_Diffuse.png
new file mode 100644
index 0000000..1bbb6c0
Binary files /dev/null and b/Models/3-Stage/3Stage_BlackCeiling_Diffuse.png differ
diff --git a/Models/3-Stage/3Stage_BlackCeiling_Diffuse.png.import b/Models/3-Stage/3Stage_BlackCeiling_Diffuse.png.import
new file mode 100644
index 0000000..c309790
--- /dev/null
+++ b/Models/3-Stage/3Stage_BlackCeiling_Diffuse.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d4jtwuwrvmcug"
+path.s3tc="res://.godot/imported/3Stage_BlackCeiling_Diffuse.png-48e8c632e0d5bf96d3367cc2be226319.s3tc.ctex"
+path.etc2="res://.godot/imported/3Stage_BlackCeiling_Diffuse.png-48e8c632e0d5bf96d3367cc2be226319.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "d2d841ed667a4b7b6cbf71fe4f84f273"
+}
+
+[deps]
+
+source_file="res://Models/3-Stage/3Stage_BlackCeiling_Diffuse.png"
+dest_files=["res://.godot/imported/3Stage_BlackCeiling_Diffuse.png-48e8c632e0d5bf96d3367cc2be226319.s3tc.ctex", "res://.godot/imported/3Stage_BlackCeiling_Diffuse.png-48e8c632e0d5bf96d3367cc2be226319.etc2.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/Models/3-Stage/3Stage_SThreeXManWall_Diffuse.png b/Models/3-Stage/3Stage_SThreeXManWall_Diffuse.png
new file mode 100644
index 0000000..5ce60b2
Binary files /dev/null and b/Models/3-Stage/3Stage_SThreeXManWall_Diffuse.png differ
diff --git a/Models/3-Stage/3Stage_SThreeXManWall_Diffuse.png.import b/Models/3-Stage/3Stage_SThreeXManWall_Diffuse.png.import
new file mode 100644
index 0000000..bc2d02d
--- /dev/null
+++ b/Models/3-Stage/3Stage_SThreeXManWall_Diffuse.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c2n7ucososh23"
+path.s3tc="res://.godot/imported/3Stage_SThreeXManWall_Diffuse.png-a24611d15ae926050682e400391cd01b.s3tc.ctex"
+path.etc2="res://.godot/imported/3Stage_SThreeXManWall_Diffuse.png-a24611d15ae926050682e400391cd01b.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "016c0dfb954da87fd4294d4201c3d2e3"
+}
+
+[deps]
+
+source_file="res://Models/3-Stage/3Stage_SThreeXManWall_Diffuse.png"
+dest_files=["res://.godot/imported/3Stage_SThreeXManWall_Diffuse.png-a24611d15ae926050682e400391cd01b.s3tc.ctex", "res://.godot/imported/3Stage_SThreeXManWall_Diffuse.png-a24611d15ae926050682e400391cd01b.etc2.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/Models/3-Stage/3Stage_Wood_Diffuse_1.png b/Models/3-Stage/3Stage_Wood_Diffuse_1.png
new file mode 100644
index 0000000..f332090
Binary files /dev/null and b/Models/3-Stage/3Stage_Wood_Diffuse_1.png differ
diff --git a/Models/3-Stage/3Stage_Wood_Diffuse_1.png.import b/Models/3-Stage/3Stage_Wood_Diffuse_1.png.import
new file mode 100644
index 0000000..502c33c
--- /dev/null
+++ b/Models/3-Stage/3Stage_Wood_Diffuse_1.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bcbk0g5dn6hmo"
+path.s3tc="res://.godot/imported/3Stage_Wood_Diffuse_1.png-e071830fc595c982f0f01455ed8b89eb.s3tc.ctex"
+path.etc2="res://.godot/imported/3Stage_Wood_Diffuse_1.png-e071830fc595c982f0f01455ed8b89eb.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "cb76dfe6ca357639a222cf07d6609841"
+}
+
+[deps]
+
+source_file="res://Models/3-Stage/3Stage_Wood_Diffuse_1.png"
+dest_files=["res://.godot/imported/3Stage_Wood_Diffuse_1.png-e071830fc595c982f0f01455ed8b89eb.s3tc.ctex", "res://.godot/imported/3Stage_Wood_Diffuse_1.png-e071830fc595c982f0f01455ed8b89eb.etc2.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/Models/3-Stage/3Stage_valence.png b/Models/3-Stage/3Stage_valence.png
new file mode 100644
index 0000000..834d053
Binary files /dev/null and b/Models/3-Stage/3Stage_valence.png differ
diff --git a/Models/3-Stage/3Stage_valence.png.import b/Models/3-Stage/3Stage_valence.png.import
new file mode 100644
index 0000000..6eeb3af
--- /dev/null
+++ b/Models/3-Stage/3Stage_valence.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://krikbljn8svk"
+path.s3tc="res://.godot/imported/3Stage_valence.png-68667bd947e27c7a77356f84b99f22ec.s3tc.ctex"
+path.etc2="res://.godot/imported/3Stage_valence.png-68667bd947e27c7a77356f84b99f22ec.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "0c2af2ccde97f4d3cc14885a9bd1caef"
+}
+
+[deps]
+
+source_file="res://Models/3-Stage/3Stage_valence.png"
+dest_files=["res://.godot/imported/3Stage_valence.png-68667bd947e27c7a77356f84b99f22ec.s3tc.ctex", "res://.godot/imported/3Stage_valence.png-68667bd947e27c7a77356f84b99f22ec.etc2.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/Models/3-StageBots/3stHelen.glb b/Models/3-StageBots/3stHelen.glb
new file mode 100644
index 0000000..a2bdb2f
Binary files /dev/null and b/Models/3-StageBots/3stHelen.glb differ
diff --git a/Models/3-StageBots/3stHelen.glb.import b/Models/3-StageBots/3stHelen.glb.import
new file mode 100644
index 0000000..8df4059
--- /dev/null
+++ b/Models/3-StageBots/3stHelen.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://f0fkcs7erhop"
+path="res://.godot/imported/3stHelen.glb-16dd92753e3b8d93443b6a98c20582c9.scn"
+
+[deps]
+
+source_file="res://Models/3-StageBots/3stHelen.glb"
+dest_files=["res://.godot/imported/3stHelen.glb-16dd92753e3b8d93443b6a98c20582c9.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/3-StageBots/3stHelen_beak.png b/Models/3-StageBots/3stHelen_beak.png
new file mode 100644
index 0000000..d16ab10
Binary files /dev/null and b/Models/3-StageBots/3stHelen_beak.png differ
diff --git a/Models/3-StageBots/3stHelen_beak.png.import b/Models/3-StageBots/3stHelen_beak.png.import
new file mode 100644
index 0000000..8d9ba05
--- /dev/null
+++ b/Models/3-StageBots/3stHelen_beak.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bprmuf7jpffy3"
+path.s3tc="res://.godot/imported/3stHelen_beak.png-8dcc066ee994660fb33e6378cc56a4d2.s3tc.ctex"
+path.etc2="res://.godot/imported/3stHelen_beak.png-8dcc066ee994660fb33e6378cc56a4d2.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "e62a49cd7edd0e5c4fe2d3d2bc6a61b9"
+}
+
+[deps]
+
+source_file="res://Models/3-StageBots/3stHelen_beak.png"
+dest_files=["res://.godot/imported/3stHelen_beak.png-8dcc066ee994660fb33e6378cc56a4d2.s3tc.ctex", "res://.godot/imported/3stHelen_beak.png-8dcc066ee994660fb33e6378cc56a4d2.etc2.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/Models/3-StageBots/3stHelen_cheer dress.png b/Models/3-StageBots/3stHelen_cheer dress.png
new file mode 100644
index 0000000..5ecb4bf
Binary files /dev/null and b/Models/3-StageBots/3stHelen_cheer dress.png differ
diff --git a/Models/3-StageBots/3stHelen_cheer dress.png.import b/Models/3-StageBots/3stHelen_cheer dress.png.import
new file mode 100644
index 0000000..99bced2
--- /dev/null
+++ b/Models/3-StageBots/3stHelen_cheer dress.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c78fctfafkuon"
+path.s3tc="res://.godot/imported/3stHelen_cheer dress.png-6975f6f2e6a94e8ff4c76cd5e2f7be21.s3tc.ctex"
+path.etc2="res://.godot/imported/3stHelen_cheer dress.png-6975f6f2e6a94e8ff4c76cd5e2f7be21.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "7cedb51b071905707d033e23c77584cb"
+}
+
+[deps]
+
+source_file="res://Models/3-StageBots/3stHelen_cheer dress.png"
+dest_files=["res://.godot/imported/3stHelen_cheer dress.png-6975f6f2e6a94e8ff4c76cd5e2f7be21.s3tc.ctex", "res://.godot/imported/3stHelen_cheer dress.png-6975f6f2e6a94e8ff4c76cd5e2f7be21.etc2.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/Models/3-StageBots/3stHelen_fur.png b/Models/3-StageBots/3stHelen_fur.png
new file mode 100644
index 0000000..b3c53a5
Binary files /dev/null and b/Models/3-StageBots/3stHelen_fur.png differ
diff --git a/Models/3-StageBots/3stHelen_fur.png.import b/Models/3-StageBots/3stHelen_fur.png.import
new file mode 100644
index 0000000..fbbc1cf
--- /dev/null
+++ b/Models/3-StageBots/3stHelen_fur.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dtd42wohdk5nf"
+path.s3tc="res://.godot/imported/3stHelen_fur.png-7d210492146c9a30a09f68d6e8b99d51.s3tc.ctex"
+path.etc2="res://.godot/imported/3stHelen_fur.png-7d210492146c9a30a09f68d6e8b99d51.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "d622cd261604f2451fe93281e2085d70"
+}
+
+[deps]
+
+source_file="res://Models/3-StageBots/3stHelen_fur.png"
+dest_files=["res://.godot/imported/3stHelen_fur.png-7d210492146c9a30a09f68d6e8b99d51.s3tc.ctex", "res://.godot/imported/3stHelen_fur.png-7d210492146c9a30a09f68d6e8b99d51.etc2.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/Models/3-StageBots/3stHelen_hair.png b/Models/3-StageBots/3stHelen_hair.png
new file mode 100644
index 0000000..56bd6e2
Binary files /dev/null and b/Models/3-StageBots/3stHelen_hair.png differ
diff --git a/Models/3-StageBots/3stHelen_hair.png.import b/Models/3-StageBots/3stHelen_hair.png.import
new file mode 100644
index 0000000..07e6e78
--- /dev/null
+++ b/Models/3-StageBots/3stHelen_hair.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b3264mrednlbd"
+path.s3tc="res://.godot/imported/3stHelen_hair.png-496acc0b828d41c4a12184b3021f1bf9.s3tc.ctex"
+path.etc2="res://.godot/imported/3stHelen_hair.png-496acc0b828d41c4a12184b3021f1bf9.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "35bb2072abe8c8e39214dcb47ee5fc3a"
+}
+
+[deps]
+
+source_file="res://Models/3-StageBots/3stHelen_hair.png"
+dest_files=["res://.godot/imported/3stHelen_hair.png-496acc0b828d41c4a12184b3021f1bf9.s3tc.ctex", "res://.godot/imported/3stHelen_hair.png-496acc0b828d41c4a12184b3021f1bf9.etc2.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/Models/3-StageBots/3stHelen_shoes.png b/Models/3-StageBots/3stHelen_shoes.png
new file mode 100644
index 0000000..0b47cc0
Binary files /dev/null and b/Models/3-StageBots/3stHelen_shoes.png differ
diff --git a/Models/3-StageBots/3stHelen_shoes.png.import b/Models/3-StageBots/3stHelen_shoes.png.import
new file mode 100644
index 0000000..ac77980
--- /dev/null
+++ b/Models/3-StageBots/3stHelen_shoes.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cm8h5o5urcvym"
+path.s3tc="res://.godot/imported/3stHelen_shoes.png-be794d91bdb6407601503febc78cfd4e.s3tc.ctex"
+path.etc2="res://.godot/imported/3stHelen_shoes.png-be794d91bdb6407601503febc78cfd4e.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "239e23627ba253afcd70dc24f1087fb1"
+}
+
+[deps]
+
+source_file="res://Models/3-StageBots/3stHelen_shoes.png"
+dest_files=["res://.godot/imported/3stHelen_shoes.png-be794d91bdb6407601503febc78cfd4e.s3tc.ctex", "res://.godot/imported/3stHelen_shoes.png-be794d91bdb6407601503febc78cfd4e.etc2.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/Models/Balcony/BalconyStage.glb b/Models/Balcony/BalconyStage.glb
new file mode 100644
index 0000000..4d14ed5
Binary files /dev/null and b/Models/Balcony/BalconyStage.glb differ
diff --git a/Models/Balcony/BalconyStage.glb.import b/Models/Balcony/BalconyStage.glb.import
new file mode 100644
index 0000000..a005e55
--- /dev/null
+++ b/Models/Balcony/BalconyStage.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://c6n4otfble154"
+path="res://.godot/imported/BalconyStage.glb-30f76dcef53d0e1cd152a84572aefbee.scn"
+
+[deps]
+
+source_file="res://Models/Balcony/BalconyStage.glb"
+dest_files=["res://.godot/imported/BalconyStage.glb-30f76dcef53d0e1cd152a84572aefbee.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/Balcony/BalconyStage_prankbg.png b/Models/Balcony/BalconyStage_prankbg.png
new file mode 100644
index 0000000..10e3109
Binary files /dev/null and b/Models/Balcony/BalconyStage_prankbg.png differ
diff --git a/Models/Balcony/BalconyStage_prankbg.png.import b/Models/Balcony/BalconyStage_prankbg.png.import
new file mode 100644
index 0000000..f900444
--- /dev/null
+++ b/Models/Balcony/BalconyStage_prankbg.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cm643d4g33g6h"
+path.s3tc="res://.godot/imported/BalconyStage_prankbg.png-be741b0faaf56dcb0bfe2448a6e85e19.s3tc.ctex"
+path.etc2="res://.godot/imported/BalconyStage_prankbg.png-be741b0faaf56dcb0bfe2448a6e85e19.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "437ade1d165b37a51e8dde9c8e10394d"
+}
+
+[deps]
+
+source_file="res://Models/Balcony/BalconyStage_prankbg.png"
+dest_files=["res://.godot/imported/BalconyStage_prankbg.png-be741b0faaf56dcb0bfe2448a6e85e19.s3tc.ctex", "res://.godot/imported/BalconyStage_prankbg.png-be741b0faaf56dcb0bfe2448a6e85e19.etc2.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/Models/CStage/CStage.glb b/Models/CStage/CStage.glb
new file mode 100644
index 0000000..d13c97e
Binary files /dev/null and b/Models/CStage/CStage.glb differ
diff --git a/Models/CStage/CStage.glb.import b/Models/CStage/CStage.glb.import
new file mode 100644
index 0000000..0fce691
--- /dev/null
+++ b/Models/CStage/CStage.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://dfw3sbg135u2h"
+path="res://.godot/imported/CStage.glb-fd0cb012a830492e062aeb68ad20dc7a.scn"
+
+[deps]
+
+source_file="res://Models/CStage/CStage.glb"
+dest_files=["res://.godot/imported/CStage.glb-fd0cb012a830492e062aeb68ad20dc7a.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/CStage/CStage_lattice.png b/Models/CStage/CStage_lattice.png
new file mode 100644
index 0000000..38cfeb3
Binary files /dev/null and b/Models/CStage/CStage_lattice.png differ
diff --git a/Models/CStage/CStage_lattice.png.import b/Models/CStage/CStage_lattice.png.import
new file mode 100644
index 0000000..0879b30
--- /dev/null
+++ b/Models/CStage/CStage_lattice.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cqfubcqssw0sv"
+path.s3tc="res://.godot/imported/CStage_lattice.png-fe379e176fc1e0705423d3abb3cf0de6.s3tc.ctex"
+path.etc2="res://.godot/imported/CStage_lattice.png-fe379e176fc1e0705423d3abb3cf0de6.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "a915572067174f56497e123caac714e8"
+}
+
+[deps]
+
+source_file="res://Models/CStage/CStage_lattice.png"
+dest_files=["res://.godot/imported/CStage_lattice.png-fe379e176fc1e0705423d3abb3cf0de6.s3tc.ctex", "res://.godot/imported/CStage_lattice.png-fe379e176fc1e0705423d3abb3cf0de6.etc2.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/Models/CStage/CStage_roof.png b/Models/CStage/CStage_roof.png
new file mode 100644
index 0000000..9ff5dbe
Binary files /dev/null and b/Models/CStage/CStage_roof.png differ
diff --git a/Models/CStage/CStage_roof.png.import b/Models/CStage/CStage_roof.png.import
new file mode 100644
index 0000000..2e13aea
--- /dev/null
+++ b/Models/CStage/CStage_roof.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dysvpopundaib"
+path.s3tc="res://.godot/imported/CStage_roof.png-127c8bde4a33b76f9b131e0b0469d7cc.s3tc.ctex"
+path.etc2="res://.godot/imported/CStage_roof.png-127c8bde4a33b76f9b131e0b0469d7cc.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "3b6f8234d775358eaa28281314dab001"
+}
+
+[deps]
+
+source_file="res://Models/CStage/CStage_roof.png"
+dest_files=["res://.godot/imported/CStage_roof.png-127c8bde4a33b76f9b131e0b0469d7cc.s3tc.ctex", "res://.godot/imported/CStage_roof.png-127c8bde4a33b76f9b131e0b0469d7cc.etc2.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/Models/CStage/CStage_siding.png b/Models/CStage/CStage_siding.png
new file mode 100644
index 0000000..096288f
Binary files /dev/null and b/Models/CStage/CStage_siding.png differ
diff --git a/Models/CStage/CStage_siding.png.import b/Models/CStage/CStage_siding.png.import
new file mode 100644
index 0000000..77155ab
--- /dev/null
+++ b/Models/CStage/CStage_siding.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://db8h7n37nf2xq"
+path.s3tc="res://.godot/imported/CStage_siding.png-8ec4314beadffe8a5ff069e4309b9fe2.s3tc.ctex"
+path.etc2="res://.godot/imported/CStage_siding.png-8ec4314beadffe8a5ff069e4309b9fe2.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "6fbabc9e8b1a224a75e33c7f53f18b86"
+}
+
+[deps]
+
+source_file="res://Models/CStage/CStage_siding.png"
+dest_files=["res://.godot/imported/CStage_siding.png-8ec4314beadffe8a5ff069e4309b9fe2.s3tc.ctex", "res://.godot/imported/CStage_siding.png-8ec4314beadffe8a5ff069e4309b9fe2.etc2.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/Models/ChuckEsCorner/ChuckEsCornerStage.glb b/Models/ChuckEsCorner/ChuckEsCornerStage.glb
new file mode 100644
index 0000000..4b206e4
Binary files /dev/null and b/Models/ChuckEsCorner/ChuckEsCornerStage.glb differ
diff --git a/Models/ChuckEsCorner/ChuckEsCornerStage.glb.import b/Models/ChuckEsCorner/ChuckEsCornerStage.glb.import
new file mode 100644
index 0000000..94fd5f3
--- /dev/null
+++ b/Models/ChuckEsCorner/ChuckEsCornerStage.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://bv66hlbvtekho"
+path="res://.godot/imported/ChuckEsCornerStage.glb-972590d495adda7be8c93e6d0989aa24.scn"
+
+[deps]
+
+source_file="res://Models/ChuckEsCorner/ChuckEsCornerStage.glb"
+dest_files=["res://.godot/imported/ChuckEsCornerStage.glb-972590d495adda7be8c93e6d0989aa24.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/ChuckEsCorner/ChuckEsCornerStage_Chuck_Es_Corner_1.png b/Models/ChuckEsCorner/ChuckEsCornerStage_Chuck_Es_Corner_1.png
new file mode 100644
index 0000000..7cc6469
Binary files /dev/null and b/Models/ChuckEsCorner/ChuckEsCornerStage_Chuck_Es_Corner_1.png differ
diff --git a/Models/ChuckEsCorner/ChuckEsCornerStage_Chuck_Es_Corner_1.png.import b/Models/ChuckEsCorner/ChuckEsCornerStage_Chuck_Es_Corner_1.png.import
new file mode 100644
index 0000000..814f541
--- /dev/null
+++ b/Models/ChuckEsCorner/ChuckEsCornerStage_Chuck_Es_Corner_1.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://buqvxu4n8q6qc"
+path.s3tc="res://.godot/imported/ChuckEsCornerStage_Chuck_Es_Corner_1.png-df2de8b158e2601de4629961436b760a.s3tc.ctex"
+path.etc2="res://.godot/imported/ChuckEsCornerStage_Chuck_Es_Corner_1.png-df2de8b158e2601de4629961436b760a.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "91cacf7bfdf049e3b957402daac9df21"
+}
+
+[deps]
+
+source_file="res://Models/ChuckEsCorner/ChuckEsCornerStage_Chuck_Es_Corner_1.png"
+dest_files=["res://.godot/imported/ChuckEsCornerStage_Chuck_Es_Corner_1.png-df2de8b158e2601de4629961436b760a.s3tc.ctex", "res://.godot/imported/ChuckEsCornerStage_Chuck_Es_Corner_1.png-df2de8b158e2601de4629961436b760a.etc2.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/Models/ChuckEsCorner/data.bin b/Models/ChuckEsCorner/data.bin
new file mode 100644
index 0000000..d8a7f6a
Binary files /dev/null and b/Models/ChuckEsCorner/data.bin differ
diff --git a/Models/Cyberamics/Cyber Chuck.glb b/Models/Cyberamics/Cyber Chuck.glb
new file mode 100644
index 0000000..9470d39
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck.glb differ
diff --git a/Models/Cyberamics/Cyber Chuck.glb.import b/Models/Cyberamics/Cyber Chuck.glb.import
new file mode 100644
index 0000000..876731f
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://c5fgw7t45p7r6"
+path="res://.godot/imported/Cyber Chuck.glb-a3753f11d9fc0490de959aaf7e0592ff.scn"
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck.glb"
+dest_files=["res://.godot/imported/Cyber Chuck.glb-a3753f11d9fc0490de959aaf7e0592ff.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/Cyberamics/Cyber Chuck_avenger shorts.png b/Models/Cyberamics/Cyber Chuck_avenger shorts.png
new file mode 100644
index 0000000..e12c0ab
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck_avenger shorts.png differ
diff --git a/Models/Cyberamics/Cyber Chuck_avenger shorts.png.import b/Models/Cyberamics/Cyber Chuck_avenger shorts.png.import
new file mode 100644
index 0000000..221ca45
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck_avenger shorts.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dpru75dg7kthh"
+path.s3tc="res://.godot/imported/Cyber Chuck_avenger shorts.png-f8c8c3c1e01bd2aaa2ce01c018e7a3b4.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Chuck_avenger shorts.png-f8c8c3c1e01bd2aaa2ce01c018e7a3b4.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "f08fa062e6aa65891a2a8ff799cd17b5"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck_avenger shorts.png"
+dest_files=["res://.godot/imported/Cyber Chuck_avenger shorts.png-f8c8c3c1e01bd2aaa2ce01c018e7a3b4.s3tc.ctex", "res://.godot/imported/Cyber Chuck_avenger shorts.png-f8c8c3c1e01bd2aaa2ce01c018e7a3b4.etc2.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/Models/Cyberamics/Cyber Chuck_avenger.png b/Models/Cyberamics/Cyber Chuck_avenger.png
new file mode 100644
index 0000000..fbff2c7
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck_avenger.png differ
diff --git a/Models/Cyberamics/Cyber Chuck_avenger.png.import b/Models/Cyberamics/Cyber Chuck_avenger.png.import
new file mode 100644
index 0000000..1f4f52f
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck_avenger.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ccbyxlcuii6l4"
+path.s3tc="res://.godot/imported/Cyber Chuck_avenger.png-9e5eb7675b541b5d4f9955126287e30c.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Chuck_avenger.png-9e5eb7675b541b5d4f9955126287e30c.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "a5f0759cb22857a30f042b573314f845"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck_avenger.png"
+dest_files=["res://.godot/imported/Cyber Chuck_avenger.png-9e5eb7675b541b5d4f9955126287e30c.s3tc.ctex", "res://.godot/imported/Cyber Chuck_avenger.png-9e5eb7675b541b5d4f9955126287e30c.etc2.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/Models/Cyberamics/Cyber Chuck_blue cool chuck hat.png b/Models/Cyberamics/Cyber Chuck_blue cool chuck hat.png
new file mode 100644
index 0000000..ada6dc5
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck_blue cool chuck hat.png differ
diff --git a/Models/Cyberamics/Cyber Chuck_blue cool chuck hat.png.import b/Models/Cyberamics/Cyber Chuck_blue cool chuck hat.png.import
new file mode 100644
index 0000000..d2f2fb0
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck_blue cool chuck hat.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ch46a7ipo4jeb"
+path.s3tc="res://.godot/imported/Cyber Chuck_blue cool chuck hat.png-dd68c49476ac052741b57d787f46ce92.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Chuck_blue cool chuck hat.png-dd68c49476ac052741b57d787f46ce92.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "6067764c8eb1000b465a3829af5cc2f0"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck_blue cool chuck hat.png"
+dest_files=["res://.godot/imported/Cyber Chuck_blue cool chuck hat.png-dd68c49476ac052741b57d787f46ce92.s3tc.ctex", "res://.godot/imported/Cyber Chuck_blue cool chuck hat.png-dd68c49476ac052741b57d787f46ce92.etc2.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/Models/Cyberamics/Cyber Chuck_cool chuck hat.png b/Models/Cyberamics/Cyber Chuck_cool chuck hat.png
new file mode 100644
index 0000000..8ca275a
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck_cool chuck hat.png differ
diff --git a/Models/Cyberamics/Cyber Chuck_cool chuck hat.png.import b/Models/Cyberamics/Cyber Chuck_cool chuck hat.png.import
new file mode 100644
index 0000000..95278ef
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck_cool chuck hat.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b0vdrxxkf40l5"
+path.s3tc="res://.godot/imported/Cyber Chuck_cool chuck hat.png-a12915da1e1c773aec3160846d160686.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Chuck_cool chuck hat.png-a12915da1e1c773aec3160846d160686.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "30dda0ec4550d8b59629241b11fcb967"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck_cool chuck hat.png"
+dest_files=["res://.godot/imported/Cyber Chuck_cool chuck hat.png-a12915da1e1c773aec3160846d160686.s3tc.ctex", "res://.godot/imported/Cyber Chuck_cool chuck hat.png-a12915da1e1c773aec3160846d160686.etc2.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/Models/Cyberamics/Cyber Chuck_cool chuck shirt.png b/Models/Cyberamics/Cyber Chuck_cool chuck shirt.png
new file mode 100644
index 0000000..167eb4d
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck_cool chuck shirt.png differ
diff --git a/Models/Cyberamics/Cyber Chuck_cool chuck shirt.png.import b/Models/Cyberamics/Cyber Chuck_cool chuck shirt.png.import
new file mode 100644
index 0000000..16398c2
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck_cool chuck shirt.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dk5gptkq3jeqo"
+path.s3tc="res://.godot/imported/Cyber Chuck_cool chuck shirt.png-a1017c0886c6b9b53b27465ab87e0f51.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Chuck_cool chuck shirt.png-a1017c0886c6b9b53b27465ab87e0f51.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "47d45b1d7535be024d7328edf43a202e"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck_cool chuck shirt.png"
+dest_files=["res://.godot/imported/Cyber Chuck_cool chuck shirt.png-a1017c0886c6b9b53b27465ab87e0f51.s3tc.ctex", "res://.godot/imported/Cyber Chuck_cool chuck shirt.png-a1017c0886c6b9b53b27465ab87e0f51.etc2.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/Models/Cyberamics/Cyber Chuck_derby.png b/Models/Cyberamics/Cyber Chuck_derby.png
new file mode 100644
index 0000000..1f40a12
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck_derby.png differ
diff --git a/Models/Cyberamics/Cyber Chuck_derby.png.import b/Models/Cyberamics/Cyber Chuck_derby.png.import
new file mode 100644
index 0000000..7d43326
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck_derby.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dilifuiugrheh"
+path.s3tc="res://.godot/imported/Cyber Chuck_derby.png-aa4376a4e1bdf7d77a7ffa471b65b42a.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Chuck_derby.png-aa4376a4e1bdf7d77a7ffa471b65b42a.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "b7dcfc8d03f78489056415859985c5e8"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck_derby.png"
+dest_files=["res://.godot/imported/Cyber Chuck_derby.png-aa4376a4e1bdf7d77a7ffa471b65b42a.s3tc.ctex", "res://.godot/imported/Cyber Chuck_derby.png-aa4376a4e1bdf7d77a7ffa471b65b42a.etc2.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/Models/Cyberamics/Cyber Chuck_eyes.png b/Models/Cyberamics/Cyber Chuck_eyes.png
new file mode 100644
index 0000000..a5c8b80
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck_eyes.png differ
diff --git a/Models/Cyberamics/Cyber Chuck_eyes.png.import b/Models/Cyberamics/Cyber Chuck_eyes.png.import
new file mode 100644
index 0000000..a8cac49
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck_eyes.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dwafnt0audxle"
+path.s3tc="res://.godot/imported/Cyber Chuck_eyes.png-a12fc29e14a8528e945e11b17dfde04e.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Chuck_eyes.png-a12fc29e14a8528e945e11b17dfde04e.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "8f35776d2432ce4abf4dff4fb3d16c00"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck_eyes.png"
+dest_files=["res://.godot/imported/Cyber Chuck_eyes.png-a12fc29e14a8528e945e11b17dfde04e.s3tc.ctex", "res://.godot/imported/Cyber Chuck_eyes.png-a12fc29e14a8528e945e11b17dfde04e.etc2.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/Models/Cyberamics/Cyber Chuck_fur.png b/Models/Cyberamics/Cyber Chuck_fur.png
new file mode 100644
index 0000000..215da68
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck_fur.png differ
diff --git a/Models/Cyberamics/Cyber Chuck_fur.png.import b/Models/Cyberamics/Cyber Chuck_fur.png.import
new file mode 100644
index 0000000..0eb96fc
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck_fur.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bsgs3o8edlk1v"
+path.s3tc="res://.godot/imported/Cyber Chuck_fur.png-24693ca0f1b8d929ce2257481d41ba0e.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Chuck_fur.png-24693ca0f1b8d929ce2257481d41ba0e.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "5e34ca7e69f442ca5c0aed5caeb3345f"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck_fur.png"
+dest_files=["res://.godot/imported/Cyber Chuck_fur.png-24693ca0f1b8d929ce2257481d41ba0e.s3tc.ctex", "res://.godot/imported/Cyber Chuck_fur.png-24693ca0f1b8d929ce2257481d41ba0e.etc2.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/Models/Cyberamics/Cyber Chuck_jaw.png b/Models/Cyberamics/Cyber Chuck_jaw.png
new file mode 100644
index 0000000..becab0e
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck_jaw.png differ
diff --git a/Models/Cyberamics/Cyber Chuck_jaw.png.import b/Models/Cyberamics/Cyber Chuck_jaw.png.import
new file mode 100644
index 0000000..a90e600
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck_jaw.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://pm7or2yiqsnl"
+path.s3tc="res://.godot/imported/Cyber Chuck_jaw.png-b72ed5871a8cb53e4437f2a131178180.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Chuck_jaw.png-b72ed5871a8cb53e4437f2a131178180.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "dce09f49a6e472d9d20fd12ae0105263"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck_jaw.png"
+dest_files=["res://.godot/imported/Cyber Chuck_jaw.png-b72ed5871a8cb53e4437f2a131178180.s3tc.ctex", "res://.godot/imported/Cyber Chuck_jaw.png-b72ed5871a8cb53e4437f2a131178180.etc2.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/Models/Cyberamics/Cyber Chuck_jeans.png b/Models/Cyberamics/Cyber Chuck_jeans.png
new file mode 100644
index 0000000..7fc7682
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck_jeans.png differ
diff --git a/Models/Cyberamics/Cyber Chuck_jeans.png.import b/Models/Cyberamics/Cyber Chuck_jeans.png.import
new file mode 100644
index 0000000..74b0205
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck_jeans.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d06rpuppgmq86"
+path.s3tc="res://.godot/imported/Cyber Chuck_jeans.png-3dbc5615d5b2bce04c1c00f5221f5775.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Chuck_jeans.png-3dbc5615d5b2bce04c1c00f5221f5775.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "e068afe1eb5127150fa05c42e1518c66"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck_jeans.png"
+dest_files=["res://.godot/imported/Cyber Chuck_jeans.png-3dbc5615d5b2bce04c1c00f5221f5775.s3tc.ctex", "res://.godot/imported/Cyber Chuck_jeans.png-3dbc5615d5b2bce04c1c00f5221f5775.etc2.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/Models/Cyberamics/Cyber Chuck_mic.png b/Models/Cyberamics/Cyber Chuck_mic.png
new file mode 100644
index 0000000..72ef3ea
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck_mic.png differ
diff --git a/Models/Cyberamics/Cyber Chuck_mic.png.import b/Models/Cyberamics/Cyber Chuck_mic.png.import
new file mode 100644
index 0000000..c7d8629
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck_mic.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dl3cw2c26elk8"
+path.s3tc="res://.godot/imported/Cyber Chuck_mic.png-81910f31a44978957e4e6f4a918a4f66.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Chuck_mic.png-81910f31a44978957e4e6f4a918a4f66.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "0c2b737299479570c7cc39c7685d4c62"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck_mic.png"
+dest_files=["res://.godot/imported/Cyber Chuck_mic.png-81910f31a44978957e4e6f4a918a4f66.s3tc.ctex", "res://.godot/imported/Cyber Chuck_mic.png-81910f31a44978957e4e6f4a918a4f66.etc2.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/Models/Cyberamics/Cyber Chuck_modern jaw.png b/Models/Cyberamics/Cyber Chuck_modern jaw.png
new file mode 100644
index 0000000..63dcf64
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck_modern jaw.png differ
diff --git a/Models/Cyberamics/Cyber Chuck_modern jaw.png.import b/Models/Cyberamics/Cyber Chuck_modern jaw.png.import
new file mode 100644
index 0000000..de44223
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck_modern jaw.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dlbs1qxt8l1mh"
+path.s3tc="res://.godot/imported/Cyber Chuck_modern jaw.png-41a139bc69fec7727ef17ed430ef2fd1.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Chuck_modern jaw.png-41a139bc69fec7727ef17ed430ef2fd1.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "40535739a152a771fa57e75e1df9b011"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck_modern jaw.png"
+dest_files=["res://.godot/imported/Cyber Chuck_modern jaw.png-41a139bc69fec7727ef17ed430ef2fd1.s3tc.ctex", "res://.godot/imported/Cyber Chuck_modern jaw.png-41a139bc69fec7727ef17ed430ef2fd1.etc2.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/Models/Cyberamics/Cyber Chuck_tux derby.png b/Models/Cyberamics/Cyber Chuck_tux derby.png
new file mode 100644
index 0000000..d1887cf
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck_tux derby.png differ
diff --git a/Models/Cyberamics/Cyber Chuck_tux derby.png.import b/Models/Cyberamics/Cyber Chuck_tux derby.png.import
new file mode 100644
index 0000000..08a37a6
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck_tux derby.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c2fiagj0snh55"
+path.s3tc="res://.godot/imported/Cyber Chuck_tux derby.png-eac0298195710927efa3c761b15c0794.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Chuck_tux derby.png-eac0298195710927efa3c761b15c0794.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "c5b24376153e7ccd2b4f5049855c37bc"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck_tux derby.png"
+dest_files=["res://.godot/imported/Cyber Chuck_tux derby.png-eac0298195710927efa3c761b15c0794.s3tc.ctex", "res://.godot/imported/Cyber Chuck_tux derby.png-eac0298195710927efa3c761b15c0794.etc2.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/Models/Cyberamics/Cyber Chuck_vest.png b/Models/Cyberamics/Cyber Chuck_vest.png
new file mode 100644
index 0000000..594a1b9
Binary files /dev/null and b/Models/Cyberamics/Cyber Chuck_vest.png differ
diff --git a/Models/Cyberamics/Cyber Chuck_vest.png.import b/Models/Cyberamics/Cyber Chuck_vest.png.import
new file mode 100644
index 0000000..4d7af38
--- /dev/null
+++ b/Models/Cyberamics/Cyber Chuck_vest.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dgq6baq8yan3m"
+path.s3tc="res://.godot/imported/Cyber Chuck_vest.png-70908e7162bacb10b5ae4105eed84516.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Chuck_vest.png-70908e7162bacb10b5ae4105eed84516.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "cdfb9781f38ce700fb6a6329107289e5"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Chuck_vest.png"
+dest_files=["res://.godot/imported/Cyber Chuck_vest.png-70908e7162bacb10b5ae4105eed84516.s3tc.ctex", "res://.godot/imported/Cyber Chuck_vest.png-70908e7162bacb10b5ae4105eed84516.etc2.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/Models/Cyberamics/Cyber Helen.glb b/Models/Cyberamics/Cyber Helen.glb
new file mode 100644
index 0000000..ee4d271
Binary files /dev/null and b/Models/Cyberamics/Cyber Helen.glb differ
diff --git a/Models/Cyberamics/Cyber Helen.glb.import b/Models/Cyberamics/Cyber Helen.glb.import
new file mode 100644
index 0000000..0bec33a
--- /dev/null
+++ b/Models/Cyberamics/Cyber Helen.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://d34xfaignny8j"
+path="res://.godot/imported/Cyber Helen.glb-3f0344c1f3e746ac81eea3dfffd7e005.scn"
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Helen.glb"
+dest_files=["res://.godot/imported/Cyber Helen.glb-3f0344c1f3e746ac81eea3dfffd7e005.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/Cyberamics/Cyber Helen_beak.png b/Models/Cyberamics/Cyber Helen_beak.png
new file mode 100644
index 0000000..7b16303
Binary files /dev/null and b/Models/Cyberamics/Cyber Helen_beak.png differ
diff --git a/Models/Cyberamics/Cyber Helen_beak.png.import b/Models/Cyberamics/Cyber Helen_beak.png.import
new file mode 100644
index 0000000..400ab2a
--- /dev/null
+++ b/Models/Cyberamics/Cyber Helen_beak.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dt2k7wwpcttwx"
+path.s3tc="res://.godot/imported/Cyber Helen_beak.png-dafc891d002e04d99d222183d0d236ea.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Helen_beak.png-dafc891d002e04d99d222183d0d236ea.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "660d81a1bf46d22fbda7523d081ce944"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Helen_beak.png"
+dest_files=["res://.godot/imported/Cyber Helen_beak.png-dafc891d002e04d99d222183d0d236ea.s3tc.ctex", "res://.godot/imported/Cyber Helen_beak.png-dafc891d002e04d99d222183d0d236ea.etc2.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/Models/Cyberamics/Cyber Helen_eyes.png b/Models/Cyberamics/Cyber Helen_eyes.png
new file mode 100644
index 0000000..3b8ee46
Binary files /dev/null and b/Models/Cyberamics/Cyber Helen_eyes.png differ
diff --git a/Models/Cyberamics/Cyber Helen_eyes.png.import b/Models/Cyberamics/Cyber Helen_eyes.png.import
new file mode 100644
index 0000000..b2cf938
--- /dev/null
+++ b/Models/Cyberamics/Cyber Helen_eyes.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://u6c8i8hmf55l"
+path.s3tc="res://.godot/imported/Cyber Helen_eyes.png-c8e727972f281835cc003dd052d0e371.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Helen_eyes.png-c8e727972f281835cc003dd052d0e371.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "078738967b35746cb1cd2f17a5bef364"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Helen_eyes.png"
+dest_files=["res://.godot/imported/Cyber Helen_eyes.png-c8e727972f281835cc003dd052d0e371.s3tc.ctex", "res://.godot/imported/Cyber Helen_eyes.png-c8e727972f281835cc003dd052d0e371.etc2.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/Models/Cyberamics/Cyber Helen_fur.png b/Models/Cyberamics/Cyber Helen_fur.png
new file mode 100644
index 0000000..b3c53a5
Binary files /dev/null and b/Models/Cyberamics/Cyber Helen_fur.png differ
diff --git a/Models/Cyberamics/Cyber Helen_fur.png.import b/Models/Cyberamics/Cyber Helen_fur.png.import
new file mode 100644
index 0000000..b2c4a7c
--- /dev/null
+++ b/Models/Cyberamics/Cyber Helen_fur.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b874br054h4u6"
+path.s3tc="res://.godot/imported/Cyber Helen_fur.png-25e5870ed95edb351ef0f52eda54dda5.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Helen_fur.png-25e5870ed95edb351ef0f52eda54dda5.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "d622cd261604f2451fe93281e2085d70"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Helen_fur.png"
+dest_files=["res://.godot/imported/Cyber Helen_fur.png-25e5870ed95edb351ef0f52eda54dda5.s3tc.ctex", "res://.godot/imported/Cyber Helen_fur.png-25e5870ed95edb351ef0f52eda54dda5.etc2.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/Models/Cyberamics/Cyber Helen_hair.png b/Models/Cyberamics/Cyber Helen_hair.png
new file mode 100644
index 0000000..56bd6e2
Binary files /dev/null and b/Models/Cyberamics/Cyber Helen_hair.png differ
diff --git a/Models/Cyberamics/Cyber Helen_hair.png.import b/Models/Cyberamics/Cyber Helen_hair.png.import
new file mode 100644
index 0000000..c80b9e7
--- /dev/null
+++ b/Models/Cyberamics/Cyber Helen_hair.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bv65pevudy3dk"
+path.s3tc="res://.godot/imported/Cyber Helen_hair.png-7eb38b10a596be14320077537c5df16f.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Helen_hair.png-7eb38b10a596be14320077537c5df16f.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "35bb2072abe8c8e39214dcb47ee5fc3a"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Helen_hair.png"
+dest_files=["res://.godot/imported/Cyber Helen_hair.png-7eb38b10a596be14320077537c5df16f.s3tc.ctex", "res://.godot/imported/Cyber Helen_hair.png-7eb38b10a596be14320077537c5df16f.etc2.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/Models/Cyberamics/Cyber Helen_mic.png b/Models/Cyberamics/Cyber Helen_mic.png
new file mode 100644
index 0000000..72ef3ea
Binary files /dev/null and b/Models/Cyberamics/Cyber Helen_mic.png differ
diff --git a/Models/Cyberamics/Cyber Helen_mic.png.import b/Models/Cyberamics/Cyber Helen_mic.png.import
new file mode 100644
index 0000000..faf0cd6
--- /dev/null
+++ b/Models/Cyberamics/Cyber Helen_mic.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b05jw1y0ukwqu"
+path.s3tc="res://.godot/imported/Cyber Helen_mic.png-47fa0aeb51ad55b858b963218d0d6ecd.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Helen_mic.png-47fa0aeb51ad55b858b963218d0d6ecd.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "0c2b737299479570c7cc39c7685d4c62"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Helen_mic.png"
+dest_files=["res://.godot/imported/Cyber Helen_mic.png-47fa0aeb51ad55b858b963218d0d6ecd.s3tc.ctex", "res://.godot/imported/Cyber Helen_mic.png-47fa0aeb51ad55b858b963218d0d6ecd.etc2.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/Models/Cyberamics/Cyber Helen_shoes.png b/Models/Cyberamics/Cyber Helen_shoes.png
new file mode 100644
index 0000000..0b47cc0
Binary files /dev/null and b/Models/Cyberamics/Cyber Helen_shoes.png differ
diff --git a/Models/Cyberamics/Cyber Helen_shoes.png.import b/Models/Cyberamics/Cyber Helen_shoes.png.import
new file mode 100644
index 0000000..be73caf
--- /dev/null
+++ b/Models/Cyberamics/Cyber Helen_shoes.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://drq2k76cun0yu"
+path.s3tc="res://.godot/imported/Cyber Helen_shoes.png-3e5d76518bb1741e5d1632ddd8f286e8.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Helen_shoes.png-3e5d76518bb1741e5d1632ddd8f286e8.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "239e23627ba253afcd70dc24f1087fb1"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Helen_shoes.png"
+dest_files=["res://.godot/imported/Cyber Helen_shoes.png-3e5d76518bb1741e5d1632ddd8f286e8.s3tc.ctex", "res://.godot/imported/Cyber Helen_shoes.png-3e5d76518bb1741e5d1632ddd8f286e8.etc2.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/Models/Cyberamics/Cyber Jasper.glb b/Models/Cyberamics/Cyber Jasper.glb
new file mode 100644
index 0000000..19219e8
Binary files /dev/null and b/Models/Cyberamics/Cyber Jasper.glb differ
diff --git a/Models/Cyberamics/Cyber Jasper.glb.import b/Models/Cyberamics/Cyber Jasper.glb.import
new file mode 100644
index 0000000..58015b9
--- /dev/null
+++ b/Models/Cyberamics/Cyber Jasper.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://ba7i8p8olef2s"
+path="res://.godot/imported/Cyber Jasper.glb-7156eb669feb8aeef67d143d15c0b7ad.scn"
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Jasper.glb"
+dest_files=["res://.godot/imported/Cyber Jasper.glb-7156eb669feb8aeef67d143d15c0b7ad.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/Cyberamics/Cyber Jasper_cg.png b/Models/Cyberamics/Cyber Jasper_cg.png
new file mode 100644
index 0000000..d21c462
Binary files /dev/null and b/Models/Cyberamics/Cyber Jasper_cg.png differ
diff --git a/Models/Cyberamics/Cyber Jasper_cg.png.import b/Models/Cyberamics/Cyber Jasper_cg.png.import
new file mode 100644
index 0000000..9c5cc0f
--- /dev/null
+++ b/Models/Cyberamics/Cyber Jasper_cg.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ye0cj50q0bs5"
+path.s3tc="res://.godot/imported/Cyber Jasper_cg.png-6e4ab85422cdf7d87a29d0cf50d8e838.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Jasper_cg.png-6e4ab85422cdf7d87a29d0cf50d8e838.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "e995a6c7d23c90adcab2f7d1d7babbe8"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Jasper_cg.png"
+dest_files=["res://.godot/imported/Cyber Jasper_cg.png-6e4ab85422cdf7d87a29d0cf50d8e838.s3tc.ctex", "res://.godot/imported/Cyber Jasper_cg.png-6e4ab85422cdf7d87a29d0cf50d8e838.etc2.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/Models/Cyberamics/Cyber Jasper_denim.png b/Models/Cyberamics/Cyber Jasper_denim.png
new file mode 100644
index 0000000..8a6d8e7
Binary files /dev/null and b/Models/Cyberamics/Cyber Jasper_denim.png differ
diff --git a/Models/Cyberamics/Cyber Jasper_denim.png.import b/Models/Cyberamics/Cyber Jasper_denim.png.import
new file mode 100644
index 0000000..0837877
--- /dev/null
+++ b/Models/Cyberamics/Cyber Jasper_denim.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://q20cddw2xrei"
+path.s3tc="res://.godot/imported/Cyber Jasper_denim.png-d8598725528ffd5195e28e0eec9cd741.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Jasper_denim.png-d8598725528ffd5195e28e0eec9cd741.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "402d309e5ed850ba52e293c0656acf10"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Jasper_denim.png"
+dest_files=["res://.godot/imported/Cyber Jasper_denim.png-d8598725528ffd5195e28e0eec9cd741.s3tc.ctex", "res://.godot/imported/Cyber Jasper_denim.png-d8598725528ffd5195e28e0eec9cd741.etc2.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/Models/Cyberamics/Cyber Jasper_eyes.png b/Models/Cyberamics/Cyber Jasper_eyes.png
new file mode 100644
index 0000000..6c85f79
Binary files /dev/null and b/Models/Cyberamics/Cyber Jasper_eyes.png differ
diff --git a/Models/Cyberamics/Cyber Jasper_eyes.png.import b/Models/Cyberamics/Cyber Jasper_eyes.png.import
new file mode 100644
index 0000000..06bf97c
--- /dev/null
+++ b/Models/Cyberamics/Cyber Jasper_eyes.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://nwgwmia0tqak"
+path.s3tc="res://.godot/imported/Cyber Jasper_eyes.png-3656e523e85be9bc7e5d4df443165869.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Jasper_eyes.png-3656e523e85be9bc7e5d4df443165869.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "d352812e727b8ffa0545e5665172abf1"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Jasper_eyes.png"
+dest_files=["res://.godot/imported/Cyber Jasper_eyes.png-3656e523e85be9bc7e5d4df443165869.s3tc.ctex", "res://.godot/imported/Cyber Jasper_eyes.png-3656e523e85be9bc7e5d4df443165869.etc2.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/Models/Cyberamics/Cyber Jasper_muzzle.png b/Models/Cyberamics/Cyber Jasper_muzzle.png
new file mode 100644
index 0000000..a6c47ad
Binary files /dev/null and b/Models/Cyberamics/Cyber Jasper_muzzle.png differ
diff --git a/Models/Cyberamics/Cyber Jasper_muzzle.png.import b/Models/Cyberamics/Cyber Jasper_muzzle.png.import
new file mode 100644
index 0000000..d957bfc
--- /dev/null
+++ b/Models/Cyberamics/Cyber Jasper_muzzle.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dyegy5aix0jnm"
+path.s3tc="res://.godot/imported/Cyber Jasper_muzzle.png-1363f785a4c6b6366aae4b87bbe29a4a.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Jasper_muzzle.png-1363f785a4c6b6366aae4b87bbe29a4a.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "078b2003477a7c7835cfd9643aee65c3"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Jasper_muzzle.png"
+dest_files=["res://.godot/imported/Cyber Jasper_muzzle.png-1363f785a4c6b6366aae4b87bbe29a4a.s3tc.ctex", "res://.godot/imported/Cyber Jasper_muzzle.png-1363f785a4c6b6366aae4b87bbe29a4a.etc2.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/Models/Cyberamics/Cyber Jasper_shirt_cow_print.png b/Models/Cyberamics/Cyber Jasper_shirt_cow_print.png
new file mode 100644
index 0000000..56bd6e2
Binary files /dev/null and b/Models/Cyberamics/Cyber Jasper_shirt_cow_print.png differ
diff --git a/Models/Cyberamics/Cyber Jasper_shirt_cow_print.png.import b/Models/Cyberamics/Cyber Jasper_shirt_cow_print.png.import
new file mode 100644
index 0000000..f0fb509
--- /dev/null
+++ b/Models/Cyberamics/Cyber Jasper_shirt_cow_print.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c0hh0000v6h8y"
+path.s3tc="res://.godot/imported/Cyber Jasper_shirt_cow_print.png-de5138976b0094419018b0936baa9497.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Jasper_shirt_cow_print.png-de5138976b0094419018b0936baa9497.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "35bb2072abe8c8e39214dcb47ee5fc3a"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Jasper_shirt_cow_print.png"
+dest_files=["res://.godot/imported/Cyber Jasper_shirt_cow_print.png-de5138976b0094419018b0936baa9497.s3tc.ctex", "res://.godot/imported/Cyber Jasper_shirt_cow_print.png-de5138976b0094419018b0936baa9497.etc2.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/Models/Cyberamics/Cyber Jasper_shirt_red.png b/Models/Cyberamics/Cyber Jasper_shirt_red.png
new file mode 100644
index 0000000..2e80dd3
Binary files /dev/null and b/Models/Cyberamics/Cyber Jasper_shirt_red.png differ
diff --git a/Models/Cyberamics/Cyber Jasper_shirt_red.png.import b/Models/Cyberamics/Cyber Jasper_shirt_red.png.import
new file mode 100644
index 0000000..b7cc2f0
--- /dev/null
+++ b/Models/Cyberamics/Cyber Jasper_shirt_red.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://hxdufk1s1r8u"
+path.s3tc="res://.godot/imported/Cyber Jasper_shirt_red.png-82bf8dafb0ef1eb74535c35064e6e118.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Jasper_shirt_red.png-82bf8dafb0ef1eb74535c35064e6e118.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "9577bd2160ffd688028b64b583900f34"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Jasper_shirt_red.png"
+dest_files=["res://.godot/imported/Cyber Jasper_shirt_red.png-82bf8dafb0ef1eb74535c35064e6e118.s3tc.ctex", "res://.godot/imported/Cyber Jasper_shirt_red.png-82bf8dafb0ef1eb74535c35064e6e118.etc2.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/Models/Cyberamics/Cyber Jasper_shirt_rocker.png b/Models/Cyberamics/Cyber Jasper_shirt_rocker.png
new file mode 100644
index 0000000..d98871e
Binary files /dev/null and b/Models/Cyberamics/Cyber Jasper_shirt_rocker.png differ
diff --git a/Models/Cyberamics/Cyber Jasper_shirt_rocker.png.import b/Models/Cyberamics/Cyber Jasper_shirt_rocker.png.import
new file mode 100644
index 0000000..3ed149b
--- /dev/null
+++ b/Models/Cyberamics/Cyber Jasper_shirt_rocker.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bcbsootxxvpjb"
+path.s3tc="res://.godot/imported/Cyber Jasper_shirt_rocker.png-f0e49ba2d7398b113f1af6030157a14e.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Jasper_shirt_rocker.png-f0e49ba2d7398b113f1af6030157a14e.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "af4edca67cb9ab3accdc565f145f9c99"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Jasper_shirt_rocker.png"
+dest_files=["res://.godot/imported/Cyber Jasper_shirt_rocker.png-f0e49ba2d7398b113f1af6030157a14e.s3tc.ctex", "res://.godot/imported/Cyber Jasper_shirt_rocker.png-f0e49ba2d7398b113f1af6030157a14e.etc2.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/Models/Cyberamics/Cyber Jasper_shoes.png b/Models/Cyberamics/Cyber Jasper_shoes.png
new file mode 100644
index 0000000..c844387
Binary files /dev/null and b/Models/Cyberamics/Cyber Jasper_shoes.png differ
diff --git a/Models/Cyberamics/Cyber Jasper_shoes.png.import b/Models/Cyberamics/Cyber Jasper_shoes.png.import
new file mode 100644
index 0000000..69b8c4f
--- /dev/null
+++ b/Models/Cyberamics/Cyber Jasper_shoes.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ome2cangn7sc"
+path.s3tc="res://.godot/imported/Cyber Jasper_shoes.png-996313a7d9bb7c2b5922f1c25ef7d53f.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Jasper_shoes.png-996313a7d9bb7c2b5922f1c25ef7d53f.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "378e46101e07b0ece78bcac00260098c"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Jasper_shoes.png"
+dest_files=["res://.godot/imported/Cyber Jasper_shoes.png-996313a7d9bb7c2b5922f1c25ef7d53f.s3tc.ctex", "res://.godot/imported/Cyber Jasper_shoes.png-996313a7d9bb7c2b5922f1c25ef7d53f.etc2.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/Models/Cyberamics/Cyber Munch.glb b/Models/Cyberamics/Cyber Munch.glb
new file mode 100644
index 0000000..71f02fc
Binary files /dev/null and b/Models/Cyberamics/Cyber Munch.glb differ
diff --git a/Models/Cyberamics/Cyber Munch.glb.import b/Models/Cyberamics/Cyber Munch.glb.import
new file mode 100644
index 0000000..11e1302
--- /dev/null
+++ b/Models/Cyberamics/Cyber Munch.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://doxu4tb5jfoqp"
+path="res://.godot/imported/Cyber Munch.glb-ee90626132c058d3a776c3c1aac76665.scn"
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Munch.glb"
+dest_files=["res://.godot/imported/Cyber Munch.glb-ee90626132c058d3a776c3c1aac76665.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/Cyberamics/Cyber Munch_eyes.png b/Models/Cyberamics/Cyber Munch_eyes.png
new file mode 100644
index 0000000..4e992b8
Binary files /dev/null and b/Models/Cyberamics/Cyber Munch_eyes.png differ
diff --git a/Models/Cyberamics/Cyber Munch_eyes.png.import b/Models/Cyberamics/Cyber Munch_eyes.png.import
new file mode 100644
index 0000000..2bd5a5f
--- /dev/null
+++ b/Models/Cyberamics/Cyber Munch_eyes.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b87xp7i67d56x"
+path.s3tc="res://.godot/imported/Cyber Munch_eyes.png-b2fea9e691e722fa20ff94e2179c035e.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Munch_eyes.png-b2fea9e691e722fa20ff94e2179c035e.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "2c123d88d7398fbeae1545ab095d1422"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Munch_eyes.png"
+dest_files=["res://.godot/imported/Cyber Munch_eyes.png-b2fea9e691e722fa20ff94e2179c035e.s3tc.ctex", "res://.godot/imported/Cyber Munch_eyes.png-b2fea9e691e722fa20ff94e2179c035e.etc2.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/Models/Cyberamics/Cyber Munch_purple fur.png b/Models/Cyberamics/Cyber Munch_purple fur.png
new file mode 100644
index 0000000..541e7a8
Binary files /dev/null and b/Models/Cyberamics/Cyber Munch_purple fur.png differ
diff --git a/Models/Cyberamics/Cyber Munch_purple fur.png.import b/Models/Cyberamics/Cyber Munch_purple fur.png.import
new file mode 100644
index 0000000..2c6322b
--- /dev/null
+++ b/Models/Cyberamics/Cyber Munch_purple fur.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cfjsko1gybqau"
+path.s3tc="res://.godot/imported/Cyber Munch_purple fur.png-dda256d2f09a372499f0402798587591.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Munch_purple fur.png-dda256d2f09a372499f0402798587591.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "a2861484b8db99b72b90acf5b9377b50"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Munch_purple fur.png"
+dest_files=["res://.godot/imported/Cyber Munch_purple fur.png-dda256d2f09a372499f0402798587591.s3tc.ctex", "res://.godot/imported/Cyber Munch_purple fur.png-dda256d2f09a372499f0402798587591.etc2.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/Models/Cyberamics/Cyber Munch_shoes.png b/Models/Cyberamics/Cyber Munch_shoes.png
new file mode 100644
index 0000000..9071d3e
Binary files /dev/null and b/Models/Cyberamics/Cyber Munch_shoes.png differ
diff --git a/Models/Cyberamics/Cyber Munch_shoes.png.import b/Models/Cyberamics/Cyber Munch_shoes.png.import
new file mode 100644
index 0000000..9afe8b3
--- /dev/null
+++ b/Models/Cyberamics/Cyber Munch_shoes.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c7jv2phmhv42l"
+path.s3tc="res://.godot/imported/Cyber Munch_shoes.png-dfab2f83435dceb3afa4d2458104edd5.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Munch_shoes.png-dfab2f83435dceb3afa4d2458104edd5.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "ed186a9131e5d4848c699d06d08aef2e"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Munch_shoes.png"
+dest_files=["res://.godot/imported/Cyber Munch_shoes.png-dfab2f83435dceb3afa4d2458104edd5.s3tc.ctex", "res://.godot/imported/Cyber Munch_shoes.png-dfab2f83435dceb3afa4d2458104edd5.etc2.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/Models/Cyberamics/Cyber Munch_yellow fur.png b/Models/Cyberamics/Cyber Munch_yellow fur.png
new file mode 100644
index 0000000..5977e60
Binary files /dev/null and b/Models/Cyberamics/Cyber Munch_yellow fur.png differ
diff --git a/Models/Cyberamics/Cyber Munch_yellow fur.png.import b/Models/Cyberamics/Cyber Munch_yellow fur.png.import
new file mode 100644
index 0000000..c7f5465
--- /dev/null
+++ b/Models/Cyberamics/Cyber Munch_yellow fur.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bw1yfomnwefy6"
+path.s3tc="res://.godot/imported/Cyber Munch_yellow fur.png-43a72ba9b185b0b0c88cdf4293a0c7a9.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Munch_yellow fur.png-43a72ba9b185b0b0c88cdf4293a0c7a9.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "b0017718c6fe7afd0bd069baab26dd64"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Munch_yellow fur.png"
+dest_files=["res://.godot/imported/Cyber Munch_yellow fur.png-43a72ba9b185b0b0c88cdf4293a0c7a9.s3tc.ctex", "res://.godot/imported/Cyber Munch_yellow fur.png-43a72ba9b185b0b0c88cdf4293a0c7a9.etc2.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/Models/Cyberamics/Cyber Pasqually.glb b/Models/Cyberamics/Cyber Pasqually.glb
new file mode 100644
index 0000000..322778b
Binary files /dev/null and b/Models/Cyberamics/Cyber Pasqually.glb differ
diff --git a/Models/Cyberamics/Cyber Pasqually.glb.import b/Models/Cyberamics/Cyber Pasqually.glb.import
new file mode 100644
index 0000000..66db824
--- /dev/null
+++ b/Models/Cyberamics/Cyber Pasqually.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://bp5u5t6yu4ejy"
+path="res://.godot/imported/Cyber Pasqually.glb-a9ce16f9387e81351437b30acb5efc0e.scn"
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Pasqually.glb"
+dest_files=["res://.godot/imported/Cyber Pasqually.glb-a9ce16f9387e81351437b30acb5efc0e.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/Cyberamics/Cyber Pasqually_eyes.png b/Models/Cyberamics/Cyber Pasqually_eyes.png
new file mode 100644
index 0000000..6c85f79
Binary files /dev/null and b/Models/Cyberamics/Cyber Pasqually_eyes.png differ
diff --git a/Models/Cyberamics/Cyber Pasqually_eyes.png.import b/Models/Cyberamics/Cyber Pasqually_eyes.png.import
new file mode 100644
index 0000000..79070a6
--- /dev/null
+++ b/Models/Cyberamics/Cyber Pasqually_eyes.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d3mn511jcdcoo"
+path.s3tc="res://.godot/imported/Cyber Pasqually_eyes.png-011f6cf7241e851c250440f1f5f1f514.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Pasqually_eyes.png-011f6cf7241e851c250440f1f5f1f514.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "d352812e727b8ffa0545e5665172abf1"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Pasqually_eyes.png"
+dest_files=["res://.godot/imported/Cyber Pasqually_eyes.png-011f6cf7241e851c250440f1f5f1f514.s3tc.ctex", "res://.godot/imported/Cyber Pasqually_eyes.png-011f6cf7241e851c250440f1f5f1f514.etc2.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/Models/Cyberamics/Cyber Pasqually_shirt.png b/Models/Cyberamics/Cyber Pasqually_shirt.png
new file mode 100644
index 0000000..021f38d
Binary files /dev/null and b/Models/Cyberamics/Cyber Pasqually_shirt.png differ
diff --git a/Models/Cyberamics/Cyber Pasqually_shirt.png.import b/Models/Cyberamics/Cyber Pasqually_shirt.png.import
new file mode 100644
index 0000000..d4b30db
--- /dev/null
+++ b/Models/Cyberamics/Cyber Pasqually_shirt.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://djtbeylmkyq48"
+path.s3tc="res://.godot/imported/Cyber Pasqually_shirt.png-611d801d1bd5a849fc52ca2f452632f7.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Pasqually_shirt.png-611d801d1bd5a849fc52ca2f452632f7.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "d35b95ccd00d71fe70f8a2b777a5e6dc"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Pasqually_shirt.png"
+dest_files=["res://.godot/imported/Cyber Pasqually_shirt.png-611d801d1bd5a849fc52ca2f452632f7.s3tc.ctex", "res://.godot/imported/Cyber Pasqually_shirt.png-611d801d1bd5a849fc52ca2f452632f7.etc2.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/Models/Cyberamics/Cyber Pasqually_shoes.png b/Models/Cyberamics/Cyber Pasqually_shoes.png
new file mode 100644
index 0000000..9071d3e
Binary files /dev/null and b/Models/Cyberamics/Cyber Pasqually_shoes.png differ
diff --git a/Models/Cyberamics/Cyber Pasqually_shoes.png.import b/Models/Cyberamics/Cyber Pasqually_shoes.png.import
new file mode 100644
index 0000000..aa69e15
--- /dev/null
+++ b/Models/Cyberamics/Cyber Pasqually_shoes.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://br0mu3ccp4opc"
+path.s3tc="res://.godot/imported/Cyber Pasqually_shoes.png-1617d6656315843f76193ec1f7183923.s3tc.ctex"
+path.etc2="res://.godot/imported/Cyber Pasqually_shoes.png-1617d6656315843f76193ec1f7183923.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "ed186a9131e5d4848c699d06d08aef2e"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Cyber Pasqually_shoes.png"
+dest_files=["res://.godot/imported/Cyber Pasqually_shoes.png-1617d6656315843f76193ec1f7183923.s3tc.ctex", "res://.godot/imported/Cyber Pasqually_shoes.png-1617d6656315843f76193ec1f7183923.etc2.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/Models/Cyberamics/Warblettes.glb b/Models/Cyberamics/Warblettes.glb
new file mode 100644
index 0000000..222c974
Binary files /dev/null and b/Models/Cyberamics/Warblettes.glb differ
diff --git a/Models/Cyberamics/Warblettes.glb.import b/Models/Cyberamics/Warblettes.glb.import
new file mode 100644
index 0000000..598bb73
--- /dev/null
+++ b/Models/Cyberamics/Warblettes.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://dmh5upwts8y11"
+path="res://.godot/imported/Warblettes.glb-4411a6da11355afeccccd99ded899996.scn"
+
+[deps]
+
+source_file="res://Models/Cyberamics/Warblettes.glb"
+dest_files=["res://.godot/imported/Warblettes.glb-4411a6da11355afeccccd99ded899996.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/Cyberamics/Warblettes_fur.png b/Models/Cyberamics/Warblettes_fur.png
new file mode 100644
index 0000000..b903419
Binary files /dev/null and b/Models/Cyberamics/Warblettes_fur.png differ
diff --git a/Models/Cyberamics/Warblettes_fur.png.import b/Models/Cyberamics/Warblettes_fur.png.import
new file mode 100644
index 0000000..aa9cbfb
--- /dev/null
+++ b/Models/Cyberamics/Warblettes_fur.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://jp06lvl1l4kf"
+path.s3tc="res://.godot/imported/Warblettes_fur.png-9635d2a2f1884e838e8285a0042af334.s3tc.ctex"
+path.etc2="res://.godot/imported/Warblettes_fur.png-9635d2a2f1884e838e8285a0042af334.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "e63b9c660d716af6780b5637f38da662"
+}
+
+[deps]
+
+source_file="res://Models/Cyberamics/Warblettes_fur.png"
+dest_files=["res://.godot/imported/Warblettes_fur.png-9635d2a2f1884e838e8285a0042af334.s3tc.ctex", "res://.godot/imported/Warblettes_fur.png-9635d2a2f1884e838e8285a0042af334.etc2.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/Models/HelenHouse/HelenHouse-Room.glb b/Models/HelenHouse/HelenHouse-Room.glb
new file mode 100644
index 0000000..0f1dd04
Binary files /dev/null and b/Models/HelenHouse/HelenHouse-Room.glb differ
diff --git a/Models/HelenHouse/HelenHouse-Room.glb.import b/Models/HelenHouse/HelenHouse-Room.glb.import
new file mode 100644
index 0000000..ec642f8
--- /dev/null
+++ b/Models/HelenHouse/HelenHouse-Room.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://bhoeqcsdb0fx2"
+path="res://.godot/imported/HelenHouse-Room.glb-d039721f5e781fffec7d16cd58395499.scn"
+
+[deps]
+
+source_file="res://Models/HelenHouse/HelenHouse-Room.glb"
+dest_files=["res://.godot/imported/HelenHouse-Room.glb-d039721f5e781fffec7d16cd58395499.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/HelenHouse/HelenHouse-Stage.glb b/Models/HelenHouse/HelenHouse-Stage.glb
new file mode 100644
index 0000000..09de518
Binary files /dev/null and b/Models/HelenHouse/HelenHouse-Stage.glb differ
diff --git a/Models/HelenHouse/HelenHouse-Stage.glb.import b/Models/HelenHouse/HelenHouse-Stage.glb.import
new file mode 100644
index 0000000..43b6dd4
--- /dev/null
+++ b/Models/HelenHouse/HelenHouse-Stage.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://btvomf1ayoypu"
+path="res://.godot/imported/HelenHouse-Stage.glb-3682deea9f5a1b3381bc9010b144dd14.scn"
+
+[deps]
+
+source_file="res://Models/HelenHouse/HelenHouse-Stage.glb"
+dest_files=["res://.godot/imported/HelenHouse-Stage.glb-3682deea9f5a1b3381bc9010b144dd14.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/RoadStage/RoadStage.glb b/Models/RoadStage/RoadStage.glb
new file mode 100644
index 0000000..124389f
Binary files /dev/null and b/Models/RoadStage/RoadStage.glb differ
diff --git a/Models/RoadStage/RoadStage.glb.import b/Models/RoadStage/RoadStage.glb.import
new file mode 100644
index 0000000..130ba70
--- /dev/null
+++ b/Models/RoadStage/RoadStage.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://bxjnp7g3w2wc8"
+path="res://.godot/imported/RoadStage.glb-63a8e31e3f7d22b4ea1423db9611a233.scn"
+
+[deps]
+
+source_file="res://Models/RoadStage/RoadStage.glb"
+dest_files=["res://.godot/imported/RoadStage.glb-63a8e31e3f7d22b4ea1423db9611a233.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/RoadStage/RoadStageNeon.glb b/Models/RoadStage/RoadStageNeon.glb
new file mode 100644
index 0000000..0626bcd
Binary files /dev/null and b/Models/RoadStage/RoadStageNeon.glb differ
diff --git a/Models/RoadStage/RoadStageNeon.glb.import b/Models/RoadStage/RoadStageNeon.glb.import
new file mode 100644
index 0000000..5a0e936
--- /dev/null
+++ b/Models/RoadStage/RoadStageNeon.glb.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://dq1fvhg4rb6ro"
+path="res://.godot/imported/RoadStageNeon.glb-8a0b2374c3c6d00a875cd3c2c2abacab.scn"
+
+[deps]
+
+source_file="res://Models/RoadStage/RoadStageNeon.glb"
+dest_files=["res://.godot/imported/RoadStageNeon.glb-8a0b2374c3c6d00a875cd3c2c2abacab.scn"]
+
+[params]
+
+nodes/root_type=""
+nodes/root_name=""
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+nodes/import_as_skeleton_bones=false
+nodes/use_node_type_suffixes=true
+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=false
+animation/remove_immutable_tracks=true
+animation/import_rest_as_RESET=false
+import_script/path=""
+_subresources={}
+gltf/naming_version=1
+gltf/embedded_image_handling=1
diff --git a/Models/RoadStage/RoadStage_90sCarpet.png b/Models/RoadStage/RoadStage_90sCarpet.png
new file mode 100644
index 0000000..fbd4ba3
Binary files /dev/null and b/Models/RoadStage/RoadStage_90sCarpet.png differ
diff --git a/Models/RoadStage/RoadStage_90sCarpet.png.import b/Models/RoadStage/RoadStage_90sCarpet.png.import
new file mode 100644
index 0000000..4da0777
--- /dev/null
+++ b/Models/RoadStage/RoadStage_90sCarpet.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://gcitv0e6cs4k"
+path.s3tc="res://.godot/imported/RoadStage_90sCarpet.png-3777c2b01d80742a8ce1f90446c60c0c.s3tc.ctex"
+path.etc2="res://.godot/imported/RoadStage_90sCarpet.png-3777c2b01d80742a8ce1f90446c60c0c.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "bec1df9050ab55c447f4ed9478448586"
+}
+
+[deps]
+
+source_file="res://Models/RoadStage/RoadStage_90sCarpet.png"
+dest_files=["res://.godot/imported/RoadStage_90sCarpet.png-3777c2b01d80742a8ce1f90446c60c0c.s3tc.ctex", "res://.godot/imported/RoadStage_90sCarpet.png-3777c2b01d80742a8ce1f90446c60c0c.etc2.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/Models/RoadStage/RoadStage_drum.png b/Models/RoadStage/RoadStage_drum.png
new file mode 100644
index 0000000..d3bb9d9
Binary files /dev/null and b/Models/RoadStage/RoadStage_drum.png differ
diff --git a/Models/RoadStage/RoadStage_drum.png.import b/Models/RoadStage/RoadStage_drum.png.import
new file mode 100644
index 0000000..62f159a
--- /dev/null
+++ b/Models/RoadStage/RoadStage_drum.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cpydexu7eyeoy"
+path.s3tc="res://.godot/imported/RoadStage_drum.png-5ab9bdca03dc51292c7fa9bf02b95cb8.s3tc.ctex"
+path.etc2="res://.godot/imported/RoadStage_drum.png-5ab9bdca03dc51292c7fa9bf02b95cb8.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "9b60ea120ffd4279ebd6a0ff6edd1b35"
+}
+
+[deps]
+
+source_file="res://Models/RoadStage/RoadStage_drum.png"
+dest_files=["res://.godot/imported/RoadStage_drum.png-5ab9bdca03dc51292c7fa9bf02b95cb8.s3tc.ctex", "res://.godot/imported/RoadStage_drum.png-5ab9bdca03dc51292c7fa9bf02b95cb8.etc2.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/Models/RoadStage/RoadStage_organ_front.png b/Models/RoadStage/RoadStage_organ_front.png
new file mode 100644
index 0000000..a13e4ec
Binary files /dev/null and b/Models/RoadStage/RoadStage_organ_front.png differ
diff --git a/Models/RoadStage/RoadStage_organ_front.png.import b/Models/RoadStage/RoadStage_organ_front.png.import
new file mode 100644
index 0000000..5ff5788
--- /dev/null
+++ b/Models/RoadStage/RoadStage_organ_front.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c5m88r5s57qbn"
+path.s3tc="res://.godot/imported/RoadStage_organ_front.png-fe348293a13a59f9c8780cdee35640b5.s3tc.ctex"
+path.etc2="res://.godot/imported/RoadStage_organ_front.png-fe348293a13a59f9c8780cdee35640b5.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "23380208ed681bf61185dc4771dad804"
+}
+
+[deps]
+
+source_file="res://Models/RoadStage/RoadStage_organ_front.png"
+dest_files=["res://.godot/imported/RoadStage_organ_front.png-fe348293a13a59f9c8780cdee35640b5.s3tc.ctex", "res://.godot/imported/RoadStage_organ_front.png-fe348293a13a59f9c8780cdee35640b5.etc2.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/Models/RoadStage/RoadStage_pasqually.png b/Models/RoadStage/RoadStage_pasqually.png
new file mode 100644
index 0000000..a30dc3f
Binary files /dev/null and b/Models/RoadStage/RoadStage_pasqually.png differ
diff --git a/Models/RoadStage/RoadStage_pasqually.png.import b/Models/RoadStage/RoadStage_pasqually.png.import
new file mode 100644
index 0000000..f9ad780
--- /dev/null
+++ b/Models/RoadStage/RoadStage_pasqually.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cb8nwqsrn3u3"
+path.s3tc="res://.godot/imported/RoadStage_pasqually.png-9ff6dae8942823deb39b84f1bc063133.s3tc.ctex"
+path.etc2="res://.godot/imported/RoadStage_pasqually.png-9ff6dae8942823deb39b84f1bc063133.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "7b05f2f096f12b4222e563989b75fa7e"
+}
+
+[deps]
+
+source_file="res://Models/RoadStage/RoadStage_pasqually.png"
+dest_files=["res://.godot/imported/RoadStage_pasqually.png-9ff6dae8942823deb39b84f1bc063133.s3tc.ctex", "res://.godot/imported/RoadStage_pasqually.png-9ff6dae8942823deb39b84f1bc063133.etc2.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/Models/RoadStage/RoadStage_road.png b/Models/RoadStage/RoadStage_road.png
new file mode 100644
index 0000000..4c55ca0
Binary files /dev/null and b/Models/RoadStage/RoadStage_road.png differ
diff --git a/Models/RoadStage/RoadStage_road.png.import b/Models/RoadStage/RoadStage_road.png.import
new file mode 100644
index 0000000..2b4920b
--- /dev/null
+++ b/Models/RoadStage/RoadStage_road.png.import
@@ -0,0 +1,39 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cks18m4jxl6oe"
+path.s3tc="res://.godot/imported/RoadStage_road.png-d2017e878ae1320070e94b3df3a7b123.s3tc.ctex"
+path.etc2="res://.godot/imported/RoadStage_road.png-d2017e878ae1320070e94b3df3a7b123.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+generator_parameters={
+"md5": "a4c0dd35a98ed9e591ba4ee5283758c3"
+}
+
+[deps]
+
+source_file="res://Models/RoadStage/RoadStage_road.png"
+dest_files=["res://.godot/imported/RoadStage_road.png-d2017e878ae1320070e94b3df3a7b123.s3tc.ctex", "res://.godot/imported/RoadStage_road.png-d2017e878ae1320070e94b3df3a7b123.etc2.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/README.md b/README.md
new file mode 100644
index 0000000..38858fc
--- /dev/null
+++ b/README.md
@@ -0,0 +1,6 @@
+# PneumaticPlaything
+
+Animatronics simulator and showtape creator
+(soon to be) Featuring real stages and animatronics
+
+This project is not associated with CEC Entertainment LLC. or Creative Engineering Inc.
diff --git a/Scenes/GUI/Controls/CameraButton.tscn b/Scenes/GUI/Controls/CameraButton.tscn
new file mode 100644
index 0000000..c49bfca
--- /dev/null
+++ b/Scenes/GUI/Controls/CameraButton.tscn
@@ -0,0 +1,19 @@
+[gd_scene load_steps=2 format=3 uid="uid://bt7bxdgv6u8ev"]
+
+[ext_resource type="Script" uid="uid://dfoog0y2bh7tk" path="res://Scripts/CameraButton.gd" id="1_3y3s1"]
+
+[node name="CameraButton" type="Control"]
+layout_mode = 3
+anchors_preset = 0
+offset_right = 136.0
+offset_bottom = 32.0
+script = ExtResource("1_3y3s1")
+
+[node name="Button" type="Button" parent="."]
+layout_mode = 0
+offset_left = 4.0
+offset_right = 132.0
+offset_bottom = 32.0
+text = "Angle"
+
+[connection signal="pressed" from="Button" to="." method="_on_button_pressed"]
diff --git a/Scenes/GUI/Controls/CosmeticAdjustment.tscn b/Scenes/GUI/Controls/CosmeticAdjustment.tscn
new file mode 100644
index 0000000..75b90ef
--- /dev/null
+++ b/Scenes/GUI/Controls/CosmeticAdjustment.tscn
@@ -0,0 +1,35 @@
+[gd_scene load_steps=2 format=3 uid="uid://dfll7xwkb2mbi"]
+
+[ext_resource type="Script" uid="uid://1f7v3ohsgx0g" path="res://Scripts/CosmeticAdjustment.gd" id="1_fg0vw"]
+
+[node name="FlowControl" type="Control"]
+layout_mode = 3
+anchors_preset = 0
+offset_right = 384.0
+offset_bottom = 40.0
+script = ExtResource("1_fg0vw")
+
+[node name="Panel" type="Panel" parent="."]
+layout_mode = 0
+offset_right = 384.0
+offset_bottom = 40.0
+
+[node name="Label" type="Label" parent="Panel"]
+layout_mode = 0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 184.0
+offset_bottom = 36.0
+text = "Cosmetic Adustment"
+vertical_alignment = 1
+clip_text = true
+text_overrun_behavior = 3
+
+[node name="OptionButton" type="OptionButton" parent="Panel"]
+layout_mode = 0
+offset_left = 188.0
+offset_top = 4.0
+offset_right = 380.0
+offset_bottom = 36.0
+
+[connection signal="item_selected" from="Panel/OptionButton" to="." method="_on_option_button_item_selected"]
diff --git a/Scenes/GUI/Controls/FlowControl.tscn b/Scenes/GUI/Controls/FlowControl.tscn
new file mode 100644
index 0000000..c711895
--- /dev/null
+++ b/Scenes/GUI/Controls/FlowControl.tscn
@@ -0,0 +1,51 @@
+[gd_scene load_steps=2 format=3 uid="uid://blg1c3v4o44of"]
+
+[ext_resource type="Script" uid="uid://blhv0kms1sleu" path="res://Scripts/FlowControl.gd" id="1_6sy3t"]
+
+[node name="FlowControl" type="Control"]
+layout_mode = 3
+anchors_preset = 0
+offset_right = 512.0
+offset_bottom = 40.0
+script = ExtResource("1_6sy3t")
+
+[node name="Panel" type="Panel" parent="."]
+layout_mode = 0
+offset_right = 512.0
+offset_bottom = 40.0
+
+[node name="Label" type="Label" parent="Panel"]
+layout_mode = 0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 244.0
+offset_bottom = 36.0
+text = "Movement"
+vertical_alignment = 1
+clip_text = true
+text_overrun_behavior = 3
+
+[node name="InStepper" type="SpinBox" parent="Panel"]
+layout_mode = 0
+offset_left = 248.0
+offset_top = 4.0
+offset_right = 376.0
+offset_bottom = 36.0
+max_value = 10000.0
+step = 0.1
+value = 1.0
+prefix = "In:"
+
+[node name="OutStepper" type="SpinBox" parent="Panel"]
+layout_mode = 0
+offset_left = 380.0
+offset_top = 4.0
+offset_right = 508.0
+offset_bottom = 36.0
+max_value = 10.0
+step = 0.1
+value = 1.0
+prefix = "Out:"
+
+[connection signal="value_changed" from="Panel/InStepper" to="." method="_on_in_stepper_value_changed"]
+[connection signal="value_changed" from="Panel/OutStepper" to="." method="_on_out_stepper_value_changed"]
diff --git a/Scenes/GUI/Controls/MovementButton.tscn b/Scenes/GUI/Controls/MovementButton.tscn
new file mode 100644
index 0000000..0200f4a
--- /dev/null
+++ b/Scenes/GUI/Controls/MovementButton.tscn
@@ -0,0 +1,64 @@
+[gd_scene load_steps=4 format=3 uid="uid://cbf3x44mvo701"]
+
+[ext_resource type="Script" uid="uid://cg157l4uo7ki8" path="res://Scripts/MovementButton.gd" id="1_l718a"]
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1pi70"]
+bg_color = Color(0, 0, 0, 1)
+corner_radius_top_left = 12
+corner_radius_top_right = 12
+corner_radius_bottom_right = 12
+corner_radius_bottom_left = 12
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5m0fm"]
+bg_color = Color(0, 1, 0, 1)
+corner_radius_top_left = 12
+corner_radius_top_right = 12
+corner_radius_bottom_right = 12
+corner_radius_bottom_left = 12
+
+[node name="MovementButton" type="Control"]
+layout_mode = 3
+anchors_preset = 0
+offset_right = 256.0
+offset_bottom = 40.0
+script = ExtResource("1_l718a")
+
+[node name="Panel" type="Panel" parent="."]
+layout_mode = 0
+offset_right = 256.0
+offset_bottom = 40.0
+
+[node name="IndicatorPanel" type="Panel" parent="Panel"]
+layout_mode = 0
+offset_left = 220.0
+offset_top = 4.0
+offset_right = 252.0
+offset_bottom = 36.0
+
+[node name="Black" type="Panel" parent="Panel/IndicatorPanel"]
+layout_mode = 0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 28.0
+offset_bottom = 28.0
+theme_override_styles/panel = SubResource("StyleBoxFlat_1pi70")
+
+[node name="Green" type="Panel" parent="Panel/IndicatorPanel"]
+visible = false
+layout_mode = 0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 28.0
+offset_bottom = 28.0
+theme_override_styles/panel = SubResource("StyleBoxFlat_5m0fm")
+
+[node name="Button" type="Button" parent="Panel"]
+layout_mode = 0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 216.0
+offset_bottom = 36.0
+text = "Movement"
+
+[connection signal="button_down" from="Panel/Button" to="." method="_on_button_button_down"]
+[connection signal="button_up" from="Panel/Button" to="." method="_on_button_button_up"]
diff --git a/Scenes/GUI/Controls/MovementFrameIndicatorOff.tscn b/Scenes/GUI/Controls/MovementFrameIndicatorOff.tscn
new file mode 100644
index 0000000..179fd0a
--- /dev/null
+++ b/Scenes/GUI/Controls/MovementFrameIndicatorOff.tscn
@@ -0,0 +1,14 @@
+[gd_scene load_steps=2 format=3 uid="uid://btbdib3vwowhd"]
+
+[ext_resource type="Script" uid="uid://b4qincechbf63" path="res://Scripts/MovementFrameIndicator.gd" id="1_ttcva"]
+
+[node name="MovementFrameIndicator" type="Control"]
+layout_mode = 3
+anchors_preset = 0
+script = ExtResource("1_ttcva")
+
+[node name="ColorRect" type="ColorRect" parent="."]
+layout_mode = 0
+offset_right = 2.0
+offset_bottom = 32.0
+color = Color(0.0941176, 0.0941176, 0.0941176, 1)
diff --git a/Scenes/GUI/Controls/MovementFrameIndicatorOn.tscn b/Scenes/GUI/Controls/MovementFrameIndicatorOn.tscn
new file mode 100644
index 0000000..1a264f4
--- /dev/null
+++ b/Scenes/GUI/Controls/MovementFrameIndicatorOn.tscn
@@ -0,0 +1,14 @@
+[gd_scene load_steps=2 format=3 uid="uid://dao6mf54xule2"]
+
+[ext_resource type="Script" uid="uid://b4qincechbf63" path="res://Scripts/MovementFrameIndicator.gd" id="1_2om8h"]
+
+[node name="MovementFrameIndicator" type="Control"]
+layout_mode = 3
+anchors_preset = 0
+script = ExtResource("1_2om8h")
+
+[node name="ColorRect" type="ColorRect" parent="."]
+layout_mode = 0
+offset_right = 2.0
+offset_bottom = 32.0
+color = Color(0, 1, 0, 1)
diff --git a/Scenes/GUI/Controls/MovementRow.tscn b/Scenes/GUI/Controls/MovementRow.tscn
new file mode 100644
index 0000000..e8354c5
--- /dev/null
+++ b/Scenes/GUI/Controls/MovementRow.tscn
@@ -0,0 +1,103 @@
+[gd_scene load_steps=7 format=3 uid="uid://dtkqaw5533rxy"]
+
+[ext_resource type="StyleBox" uid="uid://d17amc25o63p1" path="res://UI/Themes/MovementsPanelOverride.tres" id="1_d1xev"]
+[ext_resource type="Script" uid="uid://tn3aaldu7mm2" path="res://Scripts/MovementRow.gd" id="1_rm5t0"]
+[ext_resource type="Texture2D" uid="uid://cn5xdrxdv622h" path="res://UI/SmallX.png" id="2_e7anl"]
+[ext_resource type="Texture2D" uid="uid://d007317123e27" path="res://UI/SmallLock.png" id="3_ldhn8"]
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_rm5t0"]
+bg_color = Color(0, 1, 0, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
+corner_radius_bottom_left = 4
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ldhn8"]
+content_margin_left = 4.0
+content_margin_top = 4.0
+content_margin_right = 4.0
+content_margin_bottom = 4.0
+bg_color = Color(1, 0.752941, 0, 1)
+corner_radius_top_left = 2
+corner_radius_top_right = 2
+corner_radius_bottom_right = 2
+corner_radius_bottom_left = 2
+
+[node name="Row" type="Panel"]
+anchors_preset = 10
+anchor_right = 1.0
+offset_bottom = 40.0
+grow_horizontal = 2
+script = ExtResource("1_rm5t0")
+
+[node name="ActiveBG" type="Panel" parent="."]
+visible = false
+layout_mode = 0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 260.0
+offset_bottom = 36.0
+theme_override_styles/panel = SubResource("StyleBoxFlat_rm5t0")
+
+[node name="Button" type="Button" parent="."]
+layout_mode = 0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 260.0
+offset_bottom = 36.0
+tooltip_text = "Click to bind a key to this movement"
+text = "0 - Name (Unbound)"
+alignment = 0
+text_overrun_behavior = 3
+clip_text = true
+
+[node name="ClearButton" type="Button" parent="."]
+layout_mode = 0
+offset_left = 244.0
+offset_top = 4.0
+offset_right = 260.0
+offset_bottom = 20.0
+tooltip_text = "Clear this row"
+icon = ExtResource("2_e7anl")
+
+[node name="LockButton" type="Button" parent="."]
+layout_mode = 0
+offset_left = 244.0
+offset_top = 20.0
+offset_right = 260.0
+offset_bottom = 36.0
+tooltip_text = "Prevent recording over"
+theme_override_styles/pressed = SubResource("StyleBoxFlat_ldhn8")
+toggle_mode = true
+icon = ExtResource("3_ldhn8")
+
+[node name="MovementsBG" type="Panel" parent="."]
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 264.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_styles/panel = ExtResource("1_d1xev")
+
+[node name="InvisibleMask" type="Control" parent="MovementsBG"]
+clip_contents = true
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = -4.0
+offset_bottom = -4.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="MovementsHandle" type="Control" parent="MovementsBG/InvisibleMask"]
+anchors_preset = 0
+offset_left = 120.0
+offset_right = 120.0
+
+[connection signal="pressed" from="Button" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="ClearButton" to="." method="_on_clear_button_pressed"]
diff --git a/Scenes/GUI/EditorScreen.tscn b/Scenes/GUI/EditorScreen.tscn
new file mode 100644
index 0000000..7b68c54
--- /dev/null
+++ b/Scenes/GUI/EditorScreen.tscn
@@ -0,0 +1,1155 @@
+[gd_scene load_steps=27 format=3 uid="uid://oiehbor0dlqx"]
+
+[ext_resource type="Script" uid="uid://dfiwoln8mdwm8" path="res://Scripts/EditorScreen.gd" id="1_sd512"]
+[ext_resource type="Theme" uid="uid://dbgs4id7y5d1c" path="res://UI/Themes/Dark.tres" id="1_v0ton"]
+[ext_resource type="Texture2D" uid="uid://xllpr3qc064c" path="res://UI/Play.png" id="3_g6u4d"]
+[ext_resource type="Texture2D" uid="uid://dgacnkv2dc65s" path="res://UI/PlayBackwards.png" id="3_mr8sb"]
+[ext_resource type="Texture2D" uid="uid://dts4eh6hyt8p3" path="res://UI/SkipBackwards.png" id="3_r4ytj"]
+[ext_resource type="Texture2D" uid="uid://bpb3xn54kpxoe" path="res://UI/icon-32px.png" id="4_20noo"]
+[ext_resource type="Texture2D" uid="uid://bwhgy4u37jmo1" path="res://UI/Pause.png" id="4_ba3jn"]
+[ext_resource type="Texture2D" uid="uid://s3yr2wasxv03" path="res://UI/BlankCam.png" id="4_v0ton"]
+[ext_resource type="Texture2D" uid="uid://dhx2v2fd0egxd" path="res://UI/FastBackwards.png" id="4_wy7jo"]
+[ext_resource type="Texture2D" uid="uid://cttgtbu1xllwq" path="res://UI/Stop.png" id="8_20noo"]
+[ext_resource type="Texture2D" uid="uid://dsr03w7r667fw" path="res://UI/FastForward.png" id="8_v0ton"]
+[ext_resource type="Texture2D" uid="uid://bphwtliq2ahus" path="res://UI/SkipForward.png" id="9_20noo"]
+[ext_resource type="Texture2D" uid="uid://ckg2ihy105ttj" path="res://UI/Record.png" id="10_wy7jo"]
+[ext_resource type="ButtonGroup" uid="uid://bij2tonqeslpt" path="res://Scenes/GUI/FlyoutButtonGroup.tres" id="13_wy7jo"]
+
+[sub_resource type="ViewportTexture" id="ViewportTexture_g6u4d"]
+viewport_path = NodePath("SubViewport")
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_wy7jo"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_v0ton"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_20noo"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_mch36"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_fxi2g"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_bdf35"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_j2w5p"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_bv2rw"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_gx718"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_gu086"]
+
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_othvt"]
+
+[node name="EditorScreen" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme = ExtResource("1_v0ton")
+script = ExtResource("1_sd512")
+
+[node name="OpenAudioFileDialog" type="FileDialog" parent="."]
+title = "Open a File"
+initial_position = 2
+ok_button_text = "Open"
+dialog_hide_on_ok = true
+file_mode = 0
+access = 2
+filters = PackedStringArray("*.wav", "*.mp3", "*.ogg")
+
+[node name="OpenShowtapeFileDialog" type="FileDialog" parent="."]
+auto_translate_mode = 1
+title = "Open a File"
+initial_position = 2
+ok_button_text = "Open"
+dialog_hide_on_ok = true
+file_mode = 0
+access = 2
+filters = PackedStringArray("*.ust")
+
+[node name="SaveShowtapeFileDialog" type="FileDialog" parent="."]
+auto_translate_mode = 1
+initial_position = 2
+dialog_hide_on_ok = true
+access = 2
+filters = PackedStringArray("*.ust")
+
+[node name="NewOverwriteConfirmationDialog" type="ConfirmationDialog" parent="."]
+initial_position = 2
+size = Vector2i(472, 100)
+ok_button_text = "Proceed"
+dialog_text = "You have unsaved data! Are you sure you want to proceed?"
+cancel_button_text = "Do Not"
+
+[node name="LoadOverwriteConfirmationDialog" type="ConfirmationDialog" parent="."]
+auto_translate_mode = 1
+initial_position = 2
+size = Vector2i(472, 100)
+ok_button_text = "Proceed"
+dialog_text = "You have unsaved data! Are you sure you want to proceed?"
+cancel_button_text = "Do Not"
+
+[node name="StageChangeOverwriteConfirmationDialog" type="ConfirmationDialog" parent="."]
+auto_translate_mode = 1
+initial_position = 2
+size = Vector2i(472, 100)
+ok_button_text = "Proceed"
+dialog_text = "You have unsaved data! Are you sure you want to proceed?"
+cancel_button_text = "Do Not"
+
+[node name="FileDoesntExistDialog" type="AcceptDialog" parent="."]
+initial_position = 2
+dialog_text = "The specified file does not exist."
+
+[node name="NoFileSpecified" type="AcceptDialog" parent="."]
+auto_translate_mode = 1
+initial_position = 2
+dialog_text = "No File was specified."
+
+[node name="EmptyStringDialog" type="AcceptDialog" parent="."]
+auto_translate_mode = 1
+initial_position = 2
+dialog_text = "String cannot be blank."
+
+[node name="NoShowtapeLoadedDialog" type="AcceptDialog" parent="."]
+auto_translate_mode = 1
+initial_position = 2
+dialog_text = "There is no showtape currently loaded."
+
+[node name="IncorrectShowtapeDialog" type="AcceptDialog" parent="."]
+auto_translate_mode = 1
+initial_position = 2
+dialog_text = "This showtape is not compatible with the currently selected stage."
+
+[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
+
+[node name="SubViewport" type="SubViewport" parent="."]
+mesh_lod_threshold = 0.0
+size = Vector2i(1280, 720)
+
+[node name="ColorRect" type="ColorRect" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+color = Color(0.187176, 0.187176, 0.187176, 1)
+
+[node name="Label" type="Label" parent="."]
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = 144.0
+offset_top = 48.0
+offset_right = -8.0
+offset_bottom = 48.0
+grow_horizontal = 2
+grow_vertical = 2
+text = "Welcome to Pneumatic Plaything Animatronic Simulator!
+
+You can press the buttons to the side to
+control the bots manually, adjust their flows,
+change the camera angle, or switch their cosmetics.
+
+Open the Controls menu to see all of the keybinds."
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="CameraPlaceholder" type="TextureRect" parent="."]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.5
+anchor_right = 1.0
+anchor_bottom = 0.5
+offset_left = -4.0
+offset_top = 48.0
+offset_right = -4.0
+offset_bottom = 48.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("4_v0ton")
+expand_mode = 1
+
+[node name="CameraPreview" type="TextureRect" parent="."]
+visible = false
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.5
+anchor_right = 1.0
+offset_left = -4.0
+offset_top = 48.0
+offset_right = -4.0
+grow_horizontal = 0
+texture = SubResource("ViewportTexture_g6u4d")
+expand_mode = 5
+stretch_mode = 6
+
+[node name="MenuBar" type="Panel" parent="."]
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 1.0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = -4.0
+offset_bottom = 44.0
+grow_horizontal = 2
+
+[node name="StageSelector" type="OptionButton" parent="MenuBar"]
+layout_mode = 0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 260.0
+offset_bottom = 36.0
+selected = 1
+item_count = 8
+popup/item_0/text = "Official Stages"
+popup/item_0/id = 0
+popup/item_0/separator = true
+popup/item_1/text = "Balcony Stage"
+popup/item_1/id = 1
+popup/item_2/text = "C-Stage"
+popup/item_2/id = 2
+popup/item_3/text = "Prototype Road Stage"
+popup/item_3/id = 3
+popup/item_4/text = "Cyber 3-Stage"
+popup/item_4/id = 4
+popup/item_5/text = "Custom Stages"
+popup/item_5/id = 5
+popup/item_5/separator = true
+popup/item_6/text = "Helen House"
+popup/item_6/id = 6
+popup/item_7/text = "Chuck E's Corner"
+popup/item_7/id = 7
+
+[node name="MenuButton" type="MenuButton" parent="MenuBar"]
+layout_mode = 0
+offset_left = 264.0
+offset_top = 4.0
+offset_right = 392.0
+offset_bottom = 36.0
+text = "Showtape"
+flat = false
+item_count = 3
+popup/item_0/text = "New"
+popup/item_0/id = 0
+popup/item_1/text = "Load"
+popup/item_1/id = 1
+popup/item_2/text = "Save"
+popup/item_2/id = 2
+
+[node name="ControlsButton" type="Button" parent="MenuBar"]
+layout_mode = 0
+offset_left = 396.0
+offset_top = 4.0
+offset_right = 524.0
+offset_bottom = 36.0
+text = "Controls"
+
+[node name="CreditsButton" type="Button" parent="MenuBar"]
+layout_mode = 0
+offset_left = 528.0
+offset_top = 4.0
+offset_right = 656.0
+offset_bottom = 36.0
+text = "Credits"
+
+[node name="Wordmark" type="Label" parent="MenuBar"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 1.0
+anchor_top = 0.5
+anchor_right = 1.0
+anchor_bottom = 0.5
+offset_left = -264.0
+offset_top = -16.0
+offset_right = -40.0
+offset_bottom = 16.0
+grow_horizontal = 0
+grow_vertical = 2
+text = "Pneumatic Plaything v0.7"
+horizontal_alignment = 2
+vertical_alignment = 1
+
+[node name="EditingLabel" type="Label" parent="MenuBar"]
+layout_mode = 0
+offset_left = 660.0
+offset_top = 4.0
+offset_right = 899.0
+offset_bottom = 36.0
+text = "No showtape loaded."
+vertical_alignment = 1
+
+[node name="TextureRect" type="TextureRect" parent="MenuBar"]
+layout_mode = 1
+anchors_preset = 1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -36.0
+offset_top = 4.0
+offset_right = -4.0
+offset_bottom = 36.0
+grow_horizontal = 0
+texture = ExtResource("4_20noo")
+
+[node name="SequencerPanel" type="Panel" parent="."]
+layout_mode = 1
+anchors_preset = -1
+anchor_top = 0.5
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 4.0
+offset_top = 52.0
+offset_right = -4.0
+offset_bottom = -4.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="TransportControls" type="Control" parent="SequencerPanel"]
+layout_mode = 1
+anchors_preset = 10
+anchor_right = 1.0
+offset_bottom = 48.0
+grow_horizontal = 2
+
+[node name="TimeLabel" type="Label" parent="SequencerPanel/TransportControls"]
+layout_mode = 0
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 196.0
+offset_bottom = 40.0
+text = "0:00:00:00"
+vertical_alignment = 1
+
+[node name="Centered" type="Control" parent="SequencerPanel/TransportControls"]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -178.0
+offset_top = -24.0
+offset_right = 178.0
+offset_bottom = 24.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="StepBackwardsButton" type="Button" parent="SequencerPanel/TransportControls/Centered"]
+layout_mode = 0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 44.0
+offset_bottom = 44.0
+tooltip_text = "Step backward 1 frame"
+disabled = true
+icon = ExtResource("3_r4ytj")
+
+[node name="FastBackwardsButton" type="Button" parent="SequencerPanel/TransportControls/Centered"]
+layout_mode = 0
+offset_left = 48.0
+offset_top = 4.0
+offset_right = 88.0
+offset_bottom = 44.0
+tooltip_text = "Play backwards at 2x speed"
+disabled = true
+icon = ExtResource("4_wy7jo")
+
+[node name="PlayBackwardsButton" type="Button" parent="SequencerPanel/TransportControls/Centered"]
+layout_mode = 0
+offset_left = 92.0
+offset_top = 4.0
+offset_right = 132.0
+offset_bottom = 44.0
+tooltip_text = "Play backwards"
+disabled = true
+icon = ExtResource("3_mr8sb")
+
+[node name="PauseButton" type="Button" parent="SequencerPanel/TransportControls/Centered"]
+layout_mode = 0
+offset_left = 136.0
+offset_top = 4.0
+offset_right = 176.0
+offset_bottom = 44.0
+tooltip_text = "Pause"
+disabled = true
+icon = ExtResource("4_ba3jn")
+
+[node name="StopButton" type="Button" parent="SequencerPanel/TransportControls/Centered"]
+layout_mode = 0
+offset_left = 180.0
+offset_top = 4.0
+offset_right = 220.0
+offset_bottom = 44.0
+tooltip_text = "Stop playback and return to frame 0"
+disabled = true
+icon = ExtResource("8_20noo")
+
+[node name="PlayButton" type="Button" parent="SequencerPanel/TransportControls/Centered"]
+layout_mode = 0
+offset_left = 224.0
+offset_top = 4.0
+offset_right = 264.0
+offset_bottom = 44.0
+tooltip_text = "Play"
+disabled = true
+icon = ExtResource("3_g6u4d")
+
+[node name="FastForwardButton" type="Button" parent="SequencerPanel/TransportControls/Centered"]
+layout_mode = 0
+offset_left = 268.0
+offset_top = 4.0
+offset_right = 308.0
+offset_bottom = 44.0
+tooltip_text = "Play at 2x speed"
+disabled = true
+icon = ExtResource("8_v0ton")
+
+[node name="StepForwardButton" type="Button" parent="SequencerPanel/TransportControls/Centered"]
+layout_mode = 0
+offset_left = 312.0
+offset_top = 4.0
+offset_right = 352.0
+offset_bottom = 44.0
+tooltip_text = "Step forward 1 frame"
+disabled = true
+icon = ExtResource("9_20noo")
+
+[node name="RecordButton" type="Button" parent="SequencerPanel/TransportControls"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 1.0
+anchor_top = 0.5
+anchor_right = 1.0
+anchor_bottom = 0.5
+offset_left = -40.0
+offset_top = -20.0
+offset_right = -4.0
+offset_bottom = 20.0
+grow_horizontal = 0
+grow_vertical = 2
+tooltip_text = "Start recording"
+disabled = true
+toggle_mode = true
+icon = ExtResource("10_wy7jo")
+
+[node name="TimelinePanel" type="Panel" parent="SequencerPanel"]
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 4.0
+offset_top = 48.0
+offset_right = -4.0
+offset_bottom = -4.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="VScrollBar" type="VScrollBar" parent="SequencerPanel/TimelinePanel"]
+layout_mode = 1
+anchors_preset = 9
+anchor_bottom = 1.0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 12.0
+offset_bottom = -4.0
+grow_vertical = 2
+max_value = 0.0
+step = 1.0
+
+[node name="InvisibleMask" type="Control" parent="SequencerPanel/TimelinePanel"]
+clip_contents = true
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = 16.0
+offset_top = 4.0
+offset_right = -4.0
+offset_bottom = -4.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="MovementRowsContainer" type="Control" parent="SequencerPanel/TimelinePanel/InvisibleMask"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Playhead" type="VSeparator" parent="SequencerPanel/TimelinePanel/InvisibleMask"]
+layout_mode = 1
+anchors_preset = 9
+anchor_bottom = 1.0
+offset_left = 388.0
+offset_right = 392.0
+grow_vertical = 2
+
+[node name="FlyoutPanel" type="Control" parent="."]
+layout_mode = 1
+anchor_bottom = 0.5
+offset_left = 4.0
+offset_top = 48.0
+offset_right = 140.0
+offset_bottom = 48.0
+grow_vertical = 2
+
+[node name="FlyoutButtons" type="Panel" parent="FlyoutPanel"]
+layout_mode = 1
+anchors_preset = 9
+anchor_bottom = 1.0
+offset_right = 136.0
+grow_vertical = 2
+
+[node name="MovementsFlyoutButton" type="Button" parent="FlyoutPanel/FlyoutButtons"]
+layout_mode = 0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 132.0
+offset_bottom = 36.0
+toggle_mode = true
+button_group = ExtResource("13_wy7jo")
+text = "Movements"
+
+[node name="FlowsFlyoutButton" type="Button" parent="FlyoutPanel/FlyoutButtons"]
+layout_mode = 0
+offset_left = 4.0
+offset_top = 40.0
+offset_right = 132.0
+offset_bottom = 72.0
+toggle_mode = true
+button_group = ExtResource("13_wy7jo")
+text = "Flows"
+
+[node name="CameraFlyoutButton" type="Button" parent="FlyoutPanel/FlyoutButtons"]
+layout_mode = 0
+offset_left = 4.0
+offset_top = 76.0
+offset_right = 132.0
+offset_bottom = 108.0
+toggle_mode = true
+button_group = ExtResource("13_wy7jo")
+text = "Camera"
+
+[node name="CosmeticsFlyoutButton" type="Button" parent="FlyoutPanel/FlyoutButtons"]
+layout_mode = 0
+offset_left = 4.0
+offset_top = 112.0
+offset_right = 132.0
+offset_bottom = 144.0
+toggle_mode = true
+button_group = ExtResource("13_wy7jo")
+text = "Cosmetics"
+
+[node name="Movements" type="Panel" parent="FlyoutPanel"]
+visible = false
+layout_mode = 0
+offset_left = 140.0
+offset_right = 416.0
+offset_bottom = 392.0
+
+[node name="InvisibleMask" type="Control" parent="FlyoutPanel/Movements"]
+clip_contents = true
+layout_mode = 3
+anchors_preset = 0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 260.0
+offset_bottom = 388.0
+
+[node name="MovementHandle" type="Control" parent="FlyoutPanel/Movements/InvisibleMask"]
+anchors_preset = 0
+
+[node name="VScrollBar" type="VScrollBar" parent="FlyoutPanel/Movements"]
+layout_mode = 0
+offset_left = 264.0
+offset_top = 4.0
+offset_right = 272.0
+offset_bottom = 388.0
+max_value = 0.0
+step = 1.0
+
+[node name="FlowControls" type="Panel" parent="FlyoutPanel"]
+visible = false
+layout_mode = 0
+offset_left = 140.0
+offset_right = 672.0
+offset_bottom = 392.0
+
+[node name="InvisibleMask" type="Control" parent="FlyoutPanel/FlowControls"]
+clip_contents = true
+anchors_preset = 0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 516.0
+offset_bottom = 388.0
+
+[node name="FlowHandle" type="Control" parent="FlyoutPanel/FlowControls/InvisibleMask"]
+anchors_preset = 0
+
+[node name="VScrollBar" type="VScrollBar" parent="FlyoutPanel/FlowControls"]
+layout_mode = 0
+offset_left = 520.0
+offset_top = 4.0
+offset_right = 528.0
+offset_bottom = 388.0
+max_value = 0.0
+step = 1.0
+
+[node name="Camera" type="Panel" parent="FlyoutPanel"]
+visible = false
+layout_mode = 0
+offset_left = 140.0
+offset_right = 276.0
+offset_bottom = 4.0
+
+[node name="Cosmetics" type="Panel" parent="FlyoutPanel"]
+visible = false
+layout_mode = 0
+offset_left = 140.0
+offset_right = 544.0
+offset_bottom = 392.0
+
+[node name="InvisibleMask" type="Control" parent="FlyoutPanel/Cosmetics"]
+clip_contents = true
+anchors_preset = 0
+offset_left = 4.0
+offset_top = 4.0
+offset_right = 388.0
+offset_bottom = 388.0
+
+[node name="CosmeticsHandle" type="Control" parent="FlyoutPanel/Cosmetics/InvisibleMask"]
+anchors_preset = 0
+
+[node name="VScrollBar" type="VScrollBar" parent="FlyoutPanel/Cosmetics"]
+layout_mode = 0
+offset_left = 392.0
+offset_top = 4.0
+offset_right = 400.0
+offset_bottom = 388.0
+max_value = 0.0
+step = 1.0
+
+[node name="ControlsScreen" type="Control" parent="."]
+visible = false
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="InputEater" type="Button" parent="ControlsScreen"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_styles/focus = SubResource("StyleBoxEmpty_wy7jo")
+theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_v0ton")
+theme_override_styles/disabled = SubResource("StyleBoxEmpty_20noo")
+theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_mch36")
+theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_fxi2g")
+theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_bdf35")
+theme_override_styles/hover = SubResource("StyleBoxEmpty_j2w5p")
+theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_bv2rw")
+theme_override_styles/pressed = SubResource("StyleBoxEmpty_gx718")
+theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_gu086")
+theme_override_styles/normal = SubResource("StyleBoxEmpty_othvt")
+
+[node name="DialogPanel" type="Panel" parent="ControlsScreen"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -256.0
+offset_top = -192.0
+offset_right = 256.0
+offset_bottom = 192.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Label" type="Label" parent="ControlsScreen/DialogPanel"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+text = "Fullscreen camera view: ESC
+Fullscreen program: F11 or Alt+Enter
+Play/Pause: Space
+Play Reverse: Shift + Space
+Fast Forward: Shift + Right Arrow
+Fast Reverse: Shift + Left
+Step Forward: Right Arrow
+Step Backward: Left Arrow
+Stop: Home
+Change Camera Angle: Tab"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="CreditsScreen" type="Control" parent="."]
+visible = false
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="InputEater" type="Button" parent="CreditsScreen"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_styles/focus = SubResource("StyleBoxEmpty_wy7jo")
+theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_v0ton")
+theme_override_styles/disabled = SubResource("StyleBoxEmpty_20noo")
+theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_mch36")
+theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_fxi2g")
+theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_bdf35")
+theme_override_styles/hover = SubResource("StyleBoxEmpty_j2w5p")
+theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_bv2rw")
+theme_override_styles/pressed = SubResource("StyleBoxEmpty_gx718")
+theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_gu086")
+theme_override_styles/normal = SubResource("StyleBoxEmpty_othvt")
+
+[node name="DialogPanel" type="Panel" parent="CreditsScreen"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -256.0
+offset_top = -256.0
+offset_right = 256.0
+offset_bottom = 256.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Label" type="Label" parent="CreditsScreen/DialogPanel"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+text = "Pneumatic Plaything Animatronic Simulator
+
+Project Oversight: Persephone (KawaiiZenbo)
+
+Interface Design: Persephone
+Simulator Backend: Persephone
+3-Stage Bot Models: Persephone
+Cyberamic Bot Models: Persephone
+C-Stage Model: Persephone
+Iris Textures: Avery
+Chuck E's Corner Stage: Luigigamin212
+Balcony Stage Model: ToastHQ
+
+This project is not associated with CEC Entertainment LLC.
+or Creative Engineering Inc."
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="ShowtapeNewScreen" type="Control" parent="."]
+visible = false
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="InputEater" type="Button" parent="ShowtapeNewScreen"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_styles/focus = SubResource("StyleBoxEmpty_wy7jo")
+theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_v0ton")
+theme_override_styles/disabled = SubResource("StyleBoxEmpty_20noo")
+theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_mch36")
+theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_fxi2g")
+theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_bdf35")
+theme_override_styles/hover = SubResource("StyleBoxEmpty_j2w5p")
+theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_bv2rw")
+theme_override_styles/pressed = SubResource("StyleBoxEmpty_gx718")
+theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_gu086")
+theme_override_styles/normal = SubResource("StyleBoxEmpty_othvt")
+
+[node name="DialogPanel" type="Panel" parent="ShowtapeNewScreen"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -256.0
+offset_top = -128.0
+offset_right = 256.0
+offset_bottom = 128.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="DialogLabel" type="Label" parent="ShowtapeNewScreen/DialogPanel"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.5
+anchor_right = 0.5
+offset_left = -96.0
+offset_top = 4.0
+offset_right = 96.0
+offset_bottom = 36.0
+grow_horizontal = 2
+text = "Create New Showtape"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="AudioTypeLabel" type="Label" parent="ShowtapeNewScreen/DialogPanel"]
+layout_mode = 0
+offset_left = 8.0
+offset_top = 40.0
+offset_right = 264.0
+offset_bottom = 72.0
+text = "Audio File (WAV, MP3, or OGG)"
+vertical_alignment = 1
+
+[node name="AudioFilePath" type="TextEdit" parent="ShowtapeNewScreen/DialogPanel"]
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 1.0
+offset_left = 4.0
+offset_top = 76.0
+offset_right = -104.0
+offset_bottom = 112.0
+grow_horizontal = 2
+grow_vertical = 2
+placeholder_text = "File Path"
+
+[node name="AudioBrowseButton" type="Button" parent="ShowtapeNewScreen/DialogPanel"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -100.0
+offset_top = 76.0
+offset_right = -4.0
+offset_bottom = 112.0
+tooltip_text = "Browse for a file."
+text = "Browse"
+
+[node name="ShowNameLabel" type="Label" parent="ShowtapeNewScreen/DialogPanel"]
+layout_mode = 0
+offset_left = 8.0
+offset_top = 116.0
+offset_right = 264.0
+offset_bottom = 148.0
+text = "Showtape Name"
+vertical_alignment = 1
+
+[node name="ShowNameTextBox" type="TextEdit" parent="ShowtapeNewScreen/DialogPanel"]
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 1.0
+offset_left = 4.0
+offset_top = 152.0
+offset_right = -4.0
+offset_bottom = 188.0
+grow_horizontal = 2
+grow_vertical = 2
+placeholder_text = "Show Name"
+
+[node name="CancelButton" type="Button" parent="ShowtapeNewScreen/DialogPanel"]
+layout_mode = 0
+offset_left = 309.0
+offset_top = 216.0
+offset_right = 405.0
+offset_bottom = 248.0
+text = "Cancel
+"
+
+[node name="CreateButton" type="Button" parent="ShowtapeNewScreen/DialogPanel"]
+layout_mode = 0
+offset_left = 408.0
+offset_top = 216.0
+offset_right = 504.0
+offset_bottom = 248.0
+text = "Create"
+
+[node name="ShowtapeLoadScreen" type="Control" parent="."]
+visible = false
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="InputEater" type="Button" parent="ShowtapeLoadScreen"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_styles/focus = SubResource("StyleBoxEmpty_wy7jo")
+theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_v0ton")
+theme_override_styles/disabled = SubResource("StyleBoxEmpty_20noo")
+theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_mch36")
+theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_fxi2g")
+theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_bdf35")
+theme_override_styles/hover = SubResource("StyleBoxEmpty_j2w5p")
+theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_bv2rw")
+theme_override_styles/pressed = SubResource("StyleBoxEmpty_gx718")
+theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_gu086")
+theme_override_styles/normal = SubResource("StyleBoxEmpty_othvt")
+
+[node name="DialogPanel" type="Panel" parent="ShowtapeLoadScreen"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -256.0
+offset_top = -128.0
+offset_right = 256.0
+offset_bottom = 128.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="DialogLabel" type="Label" parent="ShowtapeLoadScreen/DialogPanel"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.5
+anchor_right = 0.5
+offset_left = -96.0
+offset_top = 4.0
+offset_right = 96.0
+offset_bottom = 36.0
+grow_horizontal = 2
+text = "Load Showtape"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="InFileLabel" type="Label" parent="ShowtapeLoadScreen/DialogPanel"]
+layout_mode = 0
+offset_left = 8.0
+offset_top = 73.0
+offset_right = 264.0
+offset_bottom = 105.0
+text = "File to load"
+vertical_alignment = 1
+
+[node name="InFilePath" type="TextEdit" parent="ShowtapeLoadScreen/DialogPanel"]
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 1.0
+offset_left = 4.0
+offset_top = 109.0
+offset_right = -104.0
+offset_bottom = 145.0
+grow_horizontal = 2
+grow_vertical = 2
+placeholder_text = "File Path"
+
+[node name="InBrowseButton" type="Button" parent="ShowtapeLoadScreen/DialogPanel"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -100.0
+offset_top = 109.0
+offset_right = -4.0
+offset_bottom = 145.0
+tooltip_text = "Browse for a file."
+text = "Browse"
+
+[node name="CancelButton" type="Button" parent="ShowtapeLoadScreen/DialogPanel"]
+layout_mode = 0
+offset_left = 309.0
+offset_top = 216.0
+offset_right = 405.0
+offset_bottom = 248.0
+text = "Cancel
+"
+
+[node name="OpenButton" type="Button" parent="ShowtapeLoadScreen/DialogPanel"]
+layout_mode = 0
+offset_left = 408.0
+offset_top = 216.0
+offset_right = 504.0
+offset_bottom = 248.0
+text = "Open"
+
+[node name="ShowtapeSaveScreen" type="Control" parent="."]
+visible = false
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="InputEater" type="Button" parent="ShowtapeSaveScreen"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_styles/focus = SubResource("StyleBoxEmpty_wy7jo")
+theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_v0ton")
+theme_override_styles/disabled = SubResource("StyleBoxEmpty_20noo")
+theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_mch36")
+theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_fxi2g")
+theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_bdf35")
+theme_override_styles/hover = SubResource("StyleBoxEmpty_j2w5p")
+theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_bv2rw")
+theme_override_styles/pressed = SubResource("StyleBoxEmpty_gx718")
+theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_gu086")
+theme_override_styles/normal = SubResource("StyleBoxEmpty_othvt")
+
+[node name="DialogPanel" type="Panel" parent="ShowtapeSaveScreen"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -256.0
+offset_top = -128.0
+offset_right = 256.0
+offset_bottom = 128.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="DialogLabel" type="Label" parent="ShowtapeSaveScreen/DialogPanel"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 0.5
+anchor_right = 0.5
+offset_left = -96.0
+offset_top = 4.0
+offset_right = 96.0
+offset_bottom = 36.0
+grow_horizontal = 2
+text = "Save Showtape"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="OutFileLabel" type="Label" parent="ShowtapeSaveScreen/DialogPanel"]
+layout_mode = 0
+offset_left = 8.0
+offset_top = 73.0
+offset_right = 264.0
+offset_bottom = 105.0
+text = "File to save as"
+vertical_alignment = 1
+
+[node name="OutFilePath" type="TextEdit" parent="ShowtapeSaveScreen/DialogPanel"]
+layout_mode = 1
+anchors_preset = -1
+anchor_right = 1.0
+offset_left = 4.0
+offset_top = 109.0
+offset_right = -104.0
+offset_bottom = 145.0
+grow_horizontal = 2
+grow_vertical = 2
+placeholder_text = "File Path"
+
+[node name="OutBrowseButton" type="Button" parent="ShowtapeSaveScreen/DialogPanel"]
+layout_mode = 1
+anchors_preset = -1
+anchor_left = 1.0
+anchor_right = 1.0
+offset_left = -100.0
+offset_top = 109.0
+offset_right = -4.0
+offset_bottom = 145.0
+tooltip_text = "Browse for a file."
+text = "Browse"
+
+[node name="CancelButton" type="Button" parent="ShowtapeSaveScreen/DialogPanel"]
+layout_mode = 0
+offset_left = 309.0
+offset_top = 216.0
+offset_right = 405.0
+offset_bottom = 248.0
+text = "Cancel
+"
+
+[node name="CreateButton" type="Button" parent="ShowtapeSaveScreen/DialogPanel"]
+layout_mode = 0
+offset_left = 408.0
+offset_top = 216.0
+offset_right = 504.0
+offset_bottom = 248.0
+text = "Save"
+
+[node name="CameraFullScreen" type="TextureRect" parent="."]
+visible = false
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = SubResource("ViewportTexture_g6u4d")
+expand_mode = 2
+
+[connection signal="file_selected" from="OpenAudioFileDialog" to="." method="_on_open_audio_file_dialog_file_selected"]
+[connection signal="file_selected" from="OpenShowtapeFileDialog" to="." method="_on_open_showtape_file_dialog_file_selected"]
+[connection signal="file_selected" from="SaveShowtapeFileDialog" to="." method="_on_save_showtape_file_dialog_file_selected"]
+[connection signal="confirmed" from="NewOverwriteConfirmationDialog" to="." method="_on_new_overwrite_confirmation_dialog_confirmed"]
+[connection signal="confirmed" from="LoadOverwriteConfirmationDialog" to="." method="_on_load_overwrite_confirmation_dialog_confirmed"]
+[connection signal="confirmed" from="StageChangeOverwriteConfirmationDialog" to="." method="_on_stage_change_overwrite_confirmation_dialog_confirmed"]
+[connection signal="item_selected" from="MenuBar/StageSelector" to="." method="_on_stage_selector_item_selected"]
+[connection signal="pressed" from="MenuBar/ControlsButton" to="." method="_on_controls_button_pressed"]
+[connection signal="pressed" from="MenuBar/CreditsButton" to="." method="_on_credits_button_pressed"]
+[connection signal="pressed" from="SequencerPanel/TransportControls/Centered/StepBackwardsButton" to="." method="_on_step_backwards_button_pressed"]
+[connection signal="pressed" from="SequencerPanel/TransportControls/Centered/FastBackwardsButton" to="." method="_on_fast_backwards_button_pressed"]
+[connection signal="pressed" from="SequencerPanel/TransportControls/Centered/PlayBackwardsButton" to="." method="_on_play_backwards_button_pressed"]
+[connection signal="pressed" from="SequencerPanel/TransportControls/Centered/PauseButton" to="." method="_on_pause_button_pressed"]
+[connection signal="pressed" from="SequencerPanel/TransportControls/Centered/StopButton" to="." method="_on_stop_button_pressed"]
+[connection signal="pressed" from="SequencerPanel/TransportControls/Centered/PlayButton" to="." method="_on_play_button_pressed"]
+[connection signal="pressed" from="SequencerPanel/TransportControls/Centered/FastForwardButton" to="." method="_on_fast_forward_button_pressed"]
+[connection signal="pressed" from="SequencerPanel/TransportControls/Centered/StepForwardButton" to="." method="_on_step_forward_button_pressed"]
+[connection signal="toggled" from="SequencerPanel/TransportControls/RecordButton" to="." method="_on_record_button_toggled"]
+[connection signal="value_changed" from="SequencerPanel/TimelinePanel/VScrollBar" to="." method="_on_v_scroll_bar_value_changed"]
+[connection signal="toggled" from="FlyoutPanel/FlyoutButtons/MovementsFlyoutButton" to="." method="_on_movements_flyout_button_toggled"]
+[connection signal="toggled" from="FlyoutPanel/FlyoutButtons/FlowsFlyoutButton" to="." method="_on_flows_flyout_button_toggled"]
+[connection signal="toggled" from="FlyoutPanel/FlyoutButtons/CameraFlyoutButton" to="." method="_on_camera_flyout_button_toggled"]
+[connection signal="toggled" from="FlyoutPanel/FlyoutButtons/CosmeticsFlyoutButton" to="." method="_on_cosmetics_flyout_button_toggled"]
+[connection signal="value_changed" from="FlyoutPanel/Movements/VScrollBar" to="." method="_on_movement_v_scroll_bar_value_changed"]
+[connection signal="value_changed" from="FlyoutPanel/FlowControls/VScrollBar" to="." method="_on_flow_v_scroll_bar_value_changed"]
+[connection signal="value_changed" from="FlyoutPanel/Cosmetics/VScrollBar" to="." method="_on_cosmetics_v_scroll_bar_value_changed"]
+[connection signal="pressed" from="ControlsScreen/InputEater" to="." method="_on_input_eater_pressed"]
+[connection signal="pressed" from="CreditsScreen/InputEater" to="." method="_on_input_eater_pressed"]
+[connection signal="pressed" from="ShowtapeNewScreen/InputEater" to="." method="_on_input_eater_pressed"]
+[connection signal="pressed" from="ShowtapeNewScreen/DialogPanel/AudioBrowseButton" to="." method="_on_showtape_new_audio_browse_button_pressed"]
+[connection signal="pressed" from="ShowtapeNewScreen/DialogPanel/CancelButton" to="." method="_on_showtape_new_cancel_button_pressed"]
+[connection signal="pressed" from="ShowtapeNewScreen/DialogPanel/CreateButton" to="." method="_on_showtape_new_create_button_pressed"]
+[connection signal="pressed" from="ShowtapeLoadScreen/InputEater" to="." method="_on_input_eater_pressed"]
+[connection signal="pressed" from="ShowtapeLoadScreen/DialogPanel/InBrowseButton" to="." method="_on_showtape_load_in_browse_button_pressed"]
+[connection signal="pressed" from="ShowtapeLoadScreen/DialogPanel/CancelButton" to="." method="_on_showtape_load_cancel_button_pressed"]
+[connection signal="pressed" from="ShowtapeLoadScreen/DialogPanel/OpenButton" to="." method="_on_showtape_load_open_button_pressed"]
+[connection signal="pressed" from="ShowtapeSaveScreen/InputEater" to="." method="_on_input_eater_pressed"]
+[connection signal="pressed" from="ShowtapeSaveScreen/DialogPanel/OutBrowseButton" to="." method="_on_showtape_save_out_browse_button_pressed"]
+[connection signal="pressed" from="ShowtapeSaveScreen/DialogPanel/CancelButton" to="." method="_on_showtape_save_cancel_button_pressed"]
+[connection signal="pressed" from="ShowtapeSaveScreen/DialogPanel/CreateButton" to="." method="_on_showtape_save_create_button_pressed"]
diff --git a/Scenes/GUI/FlyoutButtonGroup.tres b/Scenes/GUI/FlyoutButtonGroup.tres
new file mode 100644
index 0000000..1576676
--- /dev/null
+++ b/Scenes/GUI/FlyoutButtonGroup.tres
@@ -0,0 +1,4 @@
+[gd_resource type="ButtonGroup" format=3 uid="uid://bij2tonqeslpt"]
+
+[resource]
+allow_unpress = true
diff --git a/Scenes/Stages/Balcony.tscn b/Scenes/Stages/Balcony.tscn
new file mode 100644
index 0000000..6b0e1b9
--- /dev/null
+++ b/Scenes/Stages/Balcony.tscn
@@ -0,0 +1,330 @@
+[gd_scene load_steps=12 format=3 uid="uid://d2g6chunc572s"]
+
+[ext_resource type="PackedScene" uid="uid://d34xfaignny8j" path="res://Models/Cyberamics/Cyber Helen.glb" id="1_w3m2i"]
+[ext_resource type="Script" uid="uid://bu68w4jnh0n2b" path="res://Scripts/AnimatronicController.gd" id="2_t4ere"]
+[ext_resource type="PackedScene" uid="uid://c5fgw7t45p7r6" path="res://Models/Cyberamics/Cyber Chuck.glb" id="4_ajb2q"]
+[ext_resource type="PackedScene" uid="uid://ba7i8p8olef2s" path="res://Models/Cyberamics/Cyber Jasper.glb" id="4_t4ere"]
+[ext_resource type="Script" uid="uid://du3pqtf3jixvl" path="res://Scripts/CyberamicController.gd" id="5_38ovv"]
+[ext_resource type="PackedScene" uid="uid://c6n4otfble154" path="res://Models/Balcony/BalconyStage.glb" id="5_45mf1"]
+[ext_resource type="PackedScene" uid="uid://dmh5upwts8y11" path="res://Models/Cyberamics/Warblettes.glb" id="5_ocq6y"]
+[ext_resource type="PackedScene" uid="uid://doxu4tb5jfoqp" path="res://Models/Cyberamics/Cyber Munch.glb" id="5_vcb31"]
+[ext_resource type="PackedScene" uid="uid://bp5u5t6yu4ejy" path="res://Models/Cyberamics/Cyber Pasqually.glb" id="6_ajb2q"]
+[ext_resource type="Script" uid="uid://d1p4ite8ts2wi" path="res://Scripts/LightController.gd" id="6_j8jbd"]
+
+[sub_resource type="Environment" id="Environment_w3m2i"]
+ambient_light_source = 1
+
+[node name="Balcony" type="Node3D"]
+
+[node name="Munch" parent="." instance=ExtResource("5_vcb31")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.5, 3, -0.5)
+script = ExtResource("5_38ovv")
+
+[node name="Jasper" parent="." instance=ExtResource("4_t4ere")]
+transform = Transform3D(0.866025, 0, 0.5, 0, 1, 0, -0.5, 0, 0.866025, -2.2, 3, -0.5)
+script = ExtResource("5_38ovv")
+
+[node name="Chuck" parent="." instance=ExtResource("4_ajb2q")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, -0.5)
+script = ExtResource("5_38ovv")
+
+[node name="Helen" parent="." instance=ExtResource("1_w3m2i")]
+transform = Transform3D(0.866025, 0, -0.5, 0, 1, 0, 0.5, 0, 0.866025, 2.2, 3, -0.5)
+script = ExtResource("5_38ovv")
+
+[node name="Pasqually" parent="." instance=ExtResource("6_ajb2q")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 3, -0.5)
+script = ExtResource("5_38ovv")
+
+[node name="Warblettes" parent="." instance=ExtResource("5_ocq6y")]
+transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -7.5, 3.6, -1)
+script = ExtResource("2_t4ere")
+
+[node name="Spots" type="Node3D" parent="."]
+script = ExtResource("6_j8jbd")
+
+[node name="Chuck" type="SpotLight3D" parent="Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, 0, 5.5, 5)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Helen" type="SpotLight3D" parent="Spots"]
+transform = Transform3D(0.866025, 0.120961, -0.485148, 0, 0.970296, 0.241922, 0.5, -0.209511, 0.840301, -1, 5.5, 5)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Jasper" type="SpotLight3D" parent="Spots"]
+transform = Transform3D(0.866025, -0.120961, 0.485148, 0, 0.970296, 0.241922, -0.5, -0.209511, 0.840301, 1, 5.5, 5)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Munch" type="SpotLight3D" parent="Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, -4.5, 5.5, 5)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Pasqually" type="SpotLight3D" parent="Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, 4.5, 5.5, 5)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Warblettes" type="SpotLight3D" parent="Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.991445, 0.130526, 0, -0.130526, 0.991445, -7.5, 5.5, 5)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 10.0
+
+[node name="Color Spots" type="Node3D" parent="."]
+script = ExtResource("6_j8jbd")
+
+[node name="Chuck" type="SpotLight3D" parent="Color Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, 0, 5.5, 5)
+visible = false
+light_color = Color(0.734652, 0.426335, 0.999996, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Chuck 2" type="SpotLight3D" parent="Color Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, 0, 5.5, 5)
+visible = false
+light_color = Color(1, 0, 0, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Helen" type="SpotLight3D" parent="Color Spots"]
+transform = Transform3D(0.866025, 0.120961, -0.485148, 0, 0.970296, 0.241922, 0.5, -0.209511, 0.840301, -1, 5.5, 5)
+visible = false
+light_color = Color(0.734652, 0.426335, 0.999996, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Jasper" type="SpotLight3D" parent="Color Spots"]
+transform = Transform3D(0.866025, -0.120961, 0.485148, 0, 0.970296, 0.241922, -0.5, -0.209511, 0.840301, 1, 5.5, 5)
+visible = false
+light_color = Color(0.734652, 0.426335, 0.999996, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Munch" type="SpotLight3D" parent="Color Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, -4.5, 5.5, 5)
+visible = false
+light_color = Color(0.734652, 0.426335, 0.999996, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Pasqually" type="SpotLight3D" parent="Color Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, 4.5, 5.5, 5)
+visible = false
+light_color = Color(0.734652, 0.426335, 0.999996, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Warblettes" type="SpotLight3D" parent="Color Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.991445, 0.130526, 0, -0.130526, 0.991445, -7.5, 5.5, 5)
+visible = false
+light_color = Color(0.734652, 0.426335, 0.999996, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 10.0
+
+[node name="Valence" type="Node3D" parent="."]
+script = ExtResource("6_j8jbd")
+
+[node name="L" type="SpotLight3D" parent="Valence"]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, -2.25, 5.5, 0.25)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+spot_attenuation = -1.0
+spot_angle = 15.0
+
+[node name="L Center" type="SpotLight3D" parent="Valence"]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, -1.2, 5.5, 0.5)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+spot_attenuation = -1.0
+spot_angle = 15.0
+
+[node name="Center" type="SpotLight3D" parent="Valence"]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 0, 5.5, 0.75)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+spot_attenuation = -1.0
+spot_angle = 15.0
+
+[node name="R Center" type="SpotLight3D" parent="Valence"]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 1.2, 5.5, 0.5)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+spot_attenuation = -1.0
+spot_angle = 15.0
+
+[node name="R" type="SpotLight3D" parent="Valence"]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 2.25, 5.5, 0.25)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+spot_attenuation = -1.0
+spot_angle = 15.0
+
+[node name="Backdrop" type="Node3D" parent="."]
+script = ExtResource("6_j8jbd")
+
+[node name="L Blue" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(0.866025, 0.433013, 0.25, -7.18775e-09, 0.5, -0.866025, -0.5, 0.75, 0.433013, -2.5, 3, -1.1)
+visible = false
+light_color = Color(0, 0, 1, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="L Amber" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(0.866025, 0.433013, 0.25, -7.18775e-09, 0.5, -0.866025, -0.5, 0.75, 0.433013, -2, 3, -1.1)
+visible = false
+light_color = Color(1, 0.74902, 0, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="L Red" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(0.866025, 0.433013, 0.25, -7.18775e-09, 0.5, -0.866025, -0.5, 0.75, 0.433013, -1.5, 3, -1.1)
+visible = false
+light_color = Color(1, 0, 0, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="C Blue" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(1, 0, 0, 0, 0.5, -0.866025, 0, 0.866025, 0.5, -0.5, 3, -1.1)
+visible = false
+light_color = Color(0, 0, 1, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="C Amber" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(1, 0, 0, 0, 0.5, -0.866025, 0, 0.866025, 0.5, 0, 3, -1.1)
+visible = false
+light_color = Color(1, 0.74902, 0, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="C Red" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(1, 0, 0, 0, 0.5, -0.866025, 0, 0.866025, 0.5, 0.5, 3, -1.1)
+visible = false
+light_color = Color(1, 0, 0, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="R Blue" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(0.866025, -0.433013, -0.25, 1.82764e-08, 0.5, -0.866025, 0.5, 0.75, 0.433013, 1.5, 3, -1.1)
+visible = false
+light_color = Color(0, 0, 1, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="R Amber" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(0.866025, -0.433013, -0.25, 1.82764e-08, 0.5, -0.866025, 0.5, 0.75, 0.433013, 2, 3, -1.1)
+visible = false
+light_color = Color(1, 0.74902, 0, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="R Red" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(0.866025, -0.433013, -0.25, 1.82764e-08, 0.5, -0.866025, 0.5, 0.75, 0.433013, 2.5, 3, -1.1)
+visible = false
+light_color = Color(1, 0, 0, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
+environment = SubResource("Environment_w3m2i")
+
+[node name="Room Lights" type="Node3D" parent="."]
+
+[node name="OmniLight3D" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 4.5, 3)
+light_color = Color(1, 0.960784, 0.85098, 1)
+
+[node name="OmniLight3D2" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4, 4.5, 3)
+light_color = Color(1, 0.960784, 0.85098, 1)
+
+[node name="OmniLight3D3" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4.5, 3)
+light_color = Color(1, 0.960784, 0.85098, 1)
+
+[node name="OmniLight3D4" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 4.5, 3)
+light_color = Color(1, 0.960784, 0.85098, 1)
+
+[node name="OmniLight3D5" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8, 4.5, 3)
+light_color = Color(1, 0.960784, 0.85098, 1)
+
+[node name="BalconyStage" parent="." instance=ExtResource("5_45mf1")]
+transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0, 0)
+
+[node name="Angle 1" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 0, 4.75, 3)
+current = true
+fov = 60.0
+
+[node name="Angle 2" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, -4.5, 4.75, 3)
+fov = 60.0
+
+[node name="Angle 3" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 4.5, 4.75, 3)
+fov = 60.0
+
+[node name="Angle 4" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.5, 5, 3)
+fov = 60.0
+
+[node name="Angle 5" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.996195, 0.0871557, 0, -0.0871557, 0.996195, 0, 4.75, 6)
+fov = 60.0
+
+[node name="Angle 6" type="Camera3D" parent="."]
+transform = Transform3D(0.965926, -0.0225576, 0.257834, 0, 0.996195, 0.0871557, -0.258819, -0.084186, 0.96225, 2, 4.75, 7)
+fov = 60.0
diff --git a/Scenes/Stages/CStage.tscn b/Scenes/Stages/CStage.tscn
new file mode 100644
index 0000000..df17f54
--- /dev/null
+++ b/Scenes/Stages/CStage.tscn
@@ -0,0 +1,302 @@
+[gd_scene load_steps=10 format=3 uid="uid://jjd2nlorrml3"]
+
+[ext_resource type="PackedScene" uid="uid://ba7i8p8olef2s" path="res://Models/Cyberamics/Cyber Jasper.glb" id="1_nkhpr"]
+[ext_resource type="PackedScene" uid="uid://c5fgw7t45p7r6" path="res://Models/Cyberamics/Cyber Chuck.glb" id="4_nkhpr"]
+[ext_resource type="PackedScene" uid="uid://d34xfaignny8j" path="res://Models/Cyberamics/Cyber Helen.glb" id="4_vmyhs"]
+[ext_resource type="Script" uid="uid://du3pqtf3jixvl" path="res://Scripts/CyberamicController.gd" id="5_bawsr"]
+[ext_resource type="PackedScene" uid="uid://doxu4tb5jfoqp" path="res://Models/Cyberamics/Cyber Munch.glb" id="5_byvoj"]
+[ext_resource type="PackedScene" uid="uid://bp5u5t6yu4ejy" path="res://Models/Cyberamics/Cyber Pasqually.glb" id="6_nkhpr"]
+[ext_resource type="PackedScene" uid="uid://dfw3sbg135u2h" path="res://Models/CStage/CStage.glb" id="7_1s7sj"]
+[ext_resource type="Script" uid="uid://d1p4ite8ts2wi" path="res://Scripts/LightController.gd" id="7_fp2rj"]
+
+[sub_resource type="Environment" id="Environment_w3m2i"]
+ambient_light_source = 1
+
+[node name="CStage" type="Node3D"]
+
+[node name="Munch" parent="." instance=ExtResource("5_byvoj")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.5, 3, 0)
+script = ExtResource("5_bawsr")
+
+[node name="Jasper" parent="." instance=ExtResource("1_nkhpr")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.25, 3, 0)
+script = ExtResource("5_bawsr")
+
+[node name="Chuck" parent="." instance=ExtResource("4_nkhpr")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0)
+script = ExtResource("5_bawsr")
+
+[node name="Helen" parent="." instance=ExtResource("4_vmyhs")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.25, 3, 0)
+script = ExtResource("5_bawsr")
+
+[node name="Pasqually" parent="." instance=ExtResource("6_nkhpr")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 3, 0)
+script = ExtResource("5_bawsr")
+
+[node name="Spots" type="Node3D" parent="."]
+script = ExtResource("7_fp2rj")
+
+[node name="Chuck" type="SpotLight3D" parent="Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, 0, 5.5, 5)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Helen" type="SpotLight3D" parent="Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, 2.25, 5.5, 5)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Jasper" type="SpotLight3D" parent="Spots"]
+transform = Transform3D(1, -5.67102e-08, 2.31578e-07, -9.98193e-10, 0.970296, 0.241922, -2.38419e-07, -0.241922, 0.970296, -2.25, 5.5, 5)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Munch" type="SpotLight3D" parent="Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, -4.5, 5.5, 5)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Pasqually" type="SpotLight3D" parent="Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, 4.5, 5.5, 5)
+visible = false
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Color Spots" type="Node3D" parent="."]
+script = ExtResource("7_fp2rj")
+
+[node name="Chuck" type="SpotLight3D" parent="Color Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, 0, 5.5, 5)
+visible = false
+light_color = Color(0.734652, 0.426335, 0.999996, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Chuck 2" type="SpotLight3D" parent="Color Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, 0, 5.5, 5)
+visible = false
+light_color = Color(1, 0, 0, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Helen" type="SpotLight3D" parent="Color Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, 2.25, 5.5, 5)
+visible = false
+light_color = Color(0.734652, 0.426335, 0.999996, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Jasper" type="SpotLight3D" parent="Color Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, -2.25, 5.5, 5)
+visible = false
+light_color = Color(0.734652, 0.426335, 0.999996, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Munch" type="SpotLight3D" parent="Color Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, -4.5, 5.5, 5)
+visible = false
+light_color = Color(0.734652, 0.426335, 0.999996, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Pasqually" type="SpotLight3D" parent="Color Spots"]
+transform = Transform3D(1, 0, 0, 0, 0.970296, 0.241922, 0, -0.241922, 0.970296, 4.5, 5.5, 5)
+visible = false
+light_color = Color(0.734652, 0.426335, 0.999996, 1)
+light_energy = 0.8
+spot_range = 8.0
+spot_attenuation = -1.0
+spot_angle = 7.5
+
+[node name="Valence" type="Node3D" parent="."]
+script = ExtResource("7_fp2rj")
+
+[node name="L" type="SpotLight3D" parent="Valence"]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, -2.25, 5.5, 0.25)
+visible = false
+light_color = Color(1, 0, 0, 1)
+spot_attenuation = -1.0
+spot_angle = 15.0
+
+[node name="L Center" type="SpotLight3D" parent="Valence"]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, -1.2, 5.5, 0.5)
+visible = false
+light_color = Color(1, 0, 0, 1)
+spot_attenuation = -1.0
+spot_angle = 15.0
+
+[node name="Center" type="SpotLight3D" parent="Valence"]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 0, 5.5, 0.75)
+visible = false
+light_color = Color(1, 0, 0, 1)
+spot_attenuation = -1.0
+spot_angle = 15.0
+
+[node name="R Center" type="SpotLight3D" parent="Valence"]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 1.2, 5.5, 0.5)
+visible = false
+light_color = Color(1, 0, 0, 1)
+spot_attenuation = -1.0
+spot_angle = 15.0
+
+[node name="R" type="SpotLight3D" parent="Valence"]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 2.25, 5.5, 0.25)
+visible = false
+light_color = Color(1, 0, 0, 1)
+spot_attenuation = -1.0
+spot_angle = 15.0
+
+[node name="Backdrop" type="Node3D" parent="."]
+script = ExtResource("7_fp2rj")
+
+[node name="L Blue" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(0.866025, 0.433013, 0.25, -7.18775e-09, 0.5, -0.866025, -0.5, 0.75, 0.433013, -2.5, 3, -1.1)
+visible = false
+light_color = Color(0, 0, 1, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="L Amber" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(0.866025, 0.433013, 0.25, -7.18775e-09, 0.5, -0.866025, -0.5, 0.75, 0.433013, -2, 3, -1.1)
+visible = false
+light_color = Color(1, 0.74902, 0, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="L Red" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(0.866025, 0.433013, 0.25, -7.18775e-09, 0.5, -0.866025, -0.5, 0.75, 0.433013, -1.5, 3, -1.1)
+visible = false
+light_color = Color(1, 0, 0, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="C Blue" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(1, 0, 0, 0, 0.5, -0.866025, 0, 0.866025, 0.5, -0.5, 3, -1.1)
+visible = false
+light_color = Color(0, 0, 1, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="C Amber" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(1, 0, 0, 0, 0.5, -0.866025, 0, 0.866025, 0.5, 0, 3, -1.1)
+visible = false
+light_color = Color(1, 0.74902, 0, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="C Red" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(1, 0, 0, 0, 0.5, -0.866025, 0, 0.866025, 0.5, 0.5, 3, -1.1)
+visible = false
+light_color = Color(1, 0, 0, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="R Blue" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(0.866025, -0.433013, -0.25, 1.82764e-08, 0.5, -0.866025, 0.5, 0.75, 0.433013, 1.5, 3, -1.1)
+visible = false
+light_color = Color(0, 0, 1, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="R Amber" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(0.866025, -0.433013, -0.25, 1.82764e-08, 0.5, -0.866025, 0.5, 0.75, 0.433013, 2, 3, -1.1)
+visible = false
+light_color = Color(1, 0.74902, 0, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="R Red" type="SpotLight3D" parent="Backdrop"]
+transform = Transform3D(0.866025, -0.433013, -0.25, 1.82764e-08, 0.5, -0.866025, 0.5, 0.75, 0.433013, 2.5, 3, -1.1)
+visible = false
+light_color = Color(1, 0, 0, 1)
+spot_attenuation = 2.0
+spot_angle = 30.0
+spot_angle_attenuation = 0.15
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
+environment = SubResource("Environment_w3m2i")
+
+[node name="Room Lights" type="Node3D" parent="."]
+
+[node name="OmniLight3D" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 4.5, 3)
+light_color = Color(1, 0.960784, 0.85098, 1)
+
+[node name="OmniLight3D2" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4, 4.5, 3)
+light_color = Color(1, 0.960784, 0.85098, 1)
+
+[node name="OmniLight3D3" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4.5, 3)
+light_color = Color(1, 0.960784, 0.85098, 1)
+
+[node name="OmniLight3D4" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.86654, 4.5, 0.906235)
+light_color = Color(1, 0.960784, 0.85098, 1)
+
+[node name="OmniLight3D5" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8, 4.5, 1)
+light_color = Color(1, 0.960784, 0.85098, 1)
+
+[node name="CStage" parent="." instance=ExtResource("7_1s7sj")]
+transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0, 0)
+
+[node name="Angle 1" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 0, 4.75, 3.5)
+current = true
+fov = 60.0
+
+[node name="Angle 2" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, -4.5, 4.75, 3)
+fov = 60.0
+
+[node name="Angle 3" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 4.5, 4.75, 3)
+fov = 60.0
+
+[node name="Angle 4" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.984267, 0.17669, 0, -0.17669, 0.984267, 0, 4.75, 6.32348)
+fov = 60.0
+
+[node name="Angle 5" type="Camera3D" parent="."]
+transform = Transform3D(0.965016, -0.0450779, 0.258285, 0, 0.985109, 0.171929, -0.262189, -0.165914, 0.950647, 3, 4.75, 7)
+fov = 60.0
diff --git a/Scenes/Stages/ChuckEsCorner.tscn b/Scenes/Stages/ChuckEsCorner.tscn
new file mode 100644
index 0000000..ffcf69c
--- /dev/null
+++ b/Scenes/Stages/ChuckEsCorner.tscn
@@ -0,0 +1,110 @@
+[gd_scene load_steps=8 format=3 uid="uid://dw3eplmapm5gc"]
+
+[ext_resource type="PackedScene" uid="uid://c5fgw7t45p7r6" path="res://Models/Cyberamics/Cyber Chuck.glb" id="1_t27ru"]
+[ext_resource type="Script" uid="uid://bu68w4jnh0n2b" path="res://Scripts/AnimatronicController.gd" id="2_8qvk7"]
+[ext_resource type="Script" uid="uid://du3pqtf3jixvl" path="res://Scripts/CyberamicController.gd" id="2_htppt"]
+[ext_resource type="PackedScene" uid="uid://bv66hlbvtekho" path="res://Models/ChuckEsCorner/ChuckEsCornerStage.glb" id="3_8qvk7"]
+[ext_resource type="PackedScene" uid="uid://dmh5upwts8y11" path="res://Models/Cyberamics/Warblettes.glb" id="3_t27ru"]
+[ext_resource type="Script" uid="uid://d1p4ite8ts2wi" path="res://Scripts/LightController.gd" id="4_8suoo"]
+
+[sub_resource type="Environment" id="Environment_4uxdq"]
+ambient_light_source = 1
+
+[node name="ChuckEsCorner" type="Node3D"]
+
+[node name="Chuck" parent="." instance=ExtResource("1_t27ru")]
+transform = Transform3D(-1.5, 0, -1.31134e-07, 0, 1.5, 0, 1.31134e-07, 0, -1.5, -2, 2, 0.312)
+script = ExtResource("2_htppt")
+
+[node name="Warblettes" parent="." instance=ExtResource("3_t27ru")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.25, 4, 0.5)
+script = ExtResource("2_8qvk7")
+
+[node name="Spots" type="Node3D" parent="."]
+script = ExtResource("4_8suoo")
+
+[node name="Chuck" type="SpotLight3D" parent="Spots"]
+transform = Transform3D(-0.972974, -0.0597654, 0.223048, 2.26267e-08, 0.965926, 0.258819, -0.230916, 0.251824, -0.939821, -1.57812, 4.57895, -1.25599)
+visible = false
+light_color = Color(1, 0.9625, 0.85, 1)
+light_energy = 2.0
+spot_range = 6.53799
+spot_angle = 30.5982
+spot_angle_attenuation = 0.1
+
+[node name="Warblettes" type="SpotLight3D" parent="Spots"]
+transform = Transform3D(-0.963761, 0.0690445, -0.257677, 1.9697e-08, 0.965926, 0.258819, 0.266767, 0.24944, -0.930922, -0.309492, 5.86862, -0.75)
+visible = false
+light_color = Color(1, 0.9625, 0.85, 1)
+light_energy = 2.0
+spot_range = 12.8142
+spot_angle = 28.4779
+spot_angle_attenuation = 0.1
+
+[node name="Floods" type="Node3D" parent="."]
+script = ExtResource("4_8suoo")
+
+[node name="Red" type="SpotLight3D" parent="Floods"]
+transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 1.8, 0.9)
+visible = false
+light_color = Color(1, 0, 0, 1)
+light_energy = 15.0
+spot_attenuation = 2.0
+spot_angle_attenuation = 0.15
+
+[node name="Green" type="SpotLight3D" parent="Floods"]
+transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, -2, 1.8, 0.9)
+visible = false
+light_color = Color(0, 1, 0, 1)
+light_energy = 15.0
+spot_attenuation = 2.0
+spot_angle_attenuation = 0.15
+
+[node name="Blue" type="SpotLight3D" parent="Floods"]
+transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, -4, 1.8, 0.9)
+visible = false
+light_color = Color(0, 0, 1, 1)
+light_energy = 15.0
+spot_attenuation = 2.0
+spot_angle_attenuation = 0.15
+
+[node name="Color Spots" type="Node3D" parent="."]
+script = ExtResource("4_8suoo")
+
+[node name="Chuck" type="SpotLight3D" parent="Color Spots"]
+transform = Transform3D(-0.995147, -0.00124532, 0.0983965, 0.0311161, 0.944632, 0.326653, -0.0933553, 0.328129, -0.940009, -1.57812, 4.57895, -1.25599)
+visible = false
+light_color = Color(0, 0.538333, 0.85, 1)
+light_energy = 3.0
+spot_range = 6.53799
+spot_angle = 33.4444
+spot_angle_attenuation = 0.1
+
+[node name="Angle 1" type="Camera3D" parent="."]
+transform = Transform3D(-0.984612, -0.00554278, 0.174664, 0.0289131, 0.980555, 0.194105, -0.172344, 0.196168, -0.965306, -0.658302, 4.93729, -4)
+current = true
+fov = 60.0
+
+[node name="Angle 2" type="Camera3D" parent="."]
+transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -2, 3.44355, -2.64184)
+fov = 60.0
+
+[node name="Angle 3" type="Camera3D" parent="."]
+transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0.25, 4.95492, -1.77582)
+fov = 60.0
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
+environment = SubResource("Environment_4uxdq")
+
+[node name="OmniLight3D" type="OmniLight3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3.5, -2)
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.5
+
+[node name="OmniLight3D2" type="OmniLight3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 3.5, -2)
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.5
+
+[node name="ChuckEsCornerStage" parent="." instance=ExtResource("3_8qvk7")]
+transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0, 1)
diff --git a/Scenes/Stages/Cyber3Stage.tscn b/Scenes/Stages/Cyber3Stage.tscn
new file mode 100644
index 0000000..7b755f9
--- /dev/null
+++ b/Scenes/Stages/Cyber3Stage.tscn
@@ -0,0 +1,84 @@
+[gd_scene load_steps=9 format=3 uid="uid://bty3dn0uskrfi"]
+
+[ext_resource type="PackedScene" uid="uid://c5fgw7t45p7r6" path="res://Models/Cyberamics/Cyber Chuck.glb" id="1_cw6ma"]
+[ext_resource type="Script" uid="uid://du3pqtf3jixvl" path="res://Scripts/CyberamicController.gd" id="2_4l10n"]
+[ext_resource type="PackedScene" uid="uid://d34xfaignny8j" path="res://Models/Cyberamics/Cyber Helen.glb" id="3_87eu1"]
+[ext_resource type="PackedScene" uid="uid://doxu4tb5jfoqp" path="res://Models/Cyberamics/Cyber Munch.glb" id="4_68u23"]
+[ext_resource type="PackedScene" uid="uid://ba7i8p8olef2s" path="res://Models/Cyberamics/Cyber Jasper.glb" id="5_lioge"]
+[ext_resource type="PackedScene" uid="uid://bp5u5t6yu4ejy" path="res://Models/Cyberamics/Cyber Pasqually.glb" id="6_81y3d"]
+[ext_resource type="PackedScene" uid="uid://b77ebnic6ktql" path="res://Models/3-Stage/3Stage.glb" id="7_cr5od"]
+
+[sub_resource type="Environment" id="Environment_aswoc"]
+ambient_light_source = 1
+
+[node name="Cyber3Stage" type="Node3D"]
+
+[node name="Chuck" parent="." instance=ExtResource("1_cw6ma")]
+transform = Transform3D(0.707107, 0, 0.707107, 0, 1, 0, -0.707107, 0, 0.707107, -8.5, 2.6, 2.3)
+script = ExtResource("2_4l10n")
+
+[node name="Helen" parent="." instance=ExtResource("3_87eu1")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.6, 2.6, -1)
+script = ExtResource("2_4l10n")
+
+[node name="Munch" parent="." instance=ExtResource("4_68u23")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.6, -1)
+script = ExtResource("2_4l10n")
+
+[node name="Jasper" parent="." instance=ExtResource("5_lioge")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.6, 2.4, -1)
+script = ExtResource("2_4l10n")
+
+[node name="Pasqually" parent="." instance=ExtResource("6_81y3d")]
+transform = Transform3D(0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, 0.707107, 8.5, 2.4, 1)
+script = ExtResource("2_4l10n")
+
+[node name="3Stage" parent="." instance=ExtResource("7_cr5od")]
+transform = Transform3D(1.75, 0, 0, 0, 1.75, 0, 0, 0, 1.75, 0, 0, 0)
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
+environment = SubResource("Environment_aswoc")
+
+[node name="Room Lights" type="Node3D" parent="."]
+
+[node name="OmniLight3D" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 3.5, 1)
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.5
+
+[node name="OmniLight3D2" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 3.5, 1)
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.5
+
+[node name="OmniLight3D3" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.5, 1)
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.5
+
+[node name="OmniLight3D4" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 3.5, 4)
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.5
+
+[node name="OmniLight3D5" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8, 3.5, 4)
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.5
+
+[node name="Angle 1" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.996195, 0.0871557, 0, -0.0871557, 0.996195, -0.5, 3.75, 12.5)
+current = true
+fov = 60.0
+
+[node name="Angle 2" type="Camera3D" parent="."]
+transform = Transform3D(0.683013, -0.258819, 0.683013, -0.006236, 0.933013, 0.359789, -0.73038, -0.25, 0.635646, -4.5, 4.75, 4.5)
+fov = 60.0
+
+[node name="Angle 3" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 0, 4.75, 5.5)
+fov = 60.0
+
+[node name="Angle 4" type="Camera3D" parent="."]
+transform = Transform3D(0.73038, 0.25, -0.635646, -0.006236, 0.933013, 0.359789, 0.683013, -0.258819, 0.683013, 4.5, 4.75, 4.5)
+fov = 60.0
diff --git a/Scenes/Stages/HelenHouse.tscn b/Scenes/Stages/HelenHouse.tscn
new file mode 100644
index 0000000..0dc30f5
--- /dev/null
+++ b/Scenes/Stages/HelenHouse.tscn
@@ -0,0 +1,55 @@
+[gd_scene load_steps=7 format=3 uid="uid://btre5j66mpchy"]
+
+[ext_resource type="PackedScene" uid="uid://f0fkcs7erhop" path="res://Models/3-StageBots/3stHelen.glb" id="1_s1mol"]
+[ext_resource type="Script" uid="uid://bu68w4jnh0n2b" path="res://Scripts/AnimatronicController.gd" id="2_odcb6"]
+[ext_resource type="PackedScene" uid="uid://bhoeqcsdb0fx2" path="res://Models/HelenHouse/HelenHouse-Room.glb" id="3_e7oou"]
+[ext_resource type="PackedScene" uid="uid://btvomf1ayoypu" path="res://Models/HelenHouse/HelenHouse-Stage.glb" id="4_e2vvs"]
+[ext_resource type="Script" uid="uid://d1p4ite8ts2wi" path="res://Scripts/LightController.gd" id="5_odcb6"]
+
+[sub_resource type="Environment" id="Environment_axk5g"]
+ambient_light_source = 1
+
+[node name="HelenHouse" type="Node3D"]
+
+[node name="Helen" parent="." instance=ExtResource("1_s1mol")]
+transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0.25, 0)
+script = ExtResource("2_odcb6")
+
+[node name="Spots" type="Node3D" parent="."]
+script = ExtResource("5_odcb6")
+
+[node name="Helen" type="SpotLight3D" parent="Spots"]
+transform = Transform3D(-1, 3.69465e-08, -7.92319e-08, 0, 0.906308, 0.422618, 8.74228e-08, 0.422618, -0.906308, 0, 2.5, -2)
+visible = false
+light_color = Color(1, 0.9625, 0.85, 1)
+light_energy = 5.0
+spot_attenuation = 2.0
+spot_angle = 10.0
+spot_angle_attenuation = 0.15
+
+[node name="Room" parent="." instance=ExtResource("3_e7oou")]
+transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0)
+
+[node name="Stage" parent="." instance=ExtResource("4_e2vvs")]
+transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0)
+
+[node name="Angle 1" type="Camera3D" parent="."]
+transform = Transform3D(-1, 1.31602e-08, -1.50421e-07, 0, 0.996195, 0.0871557, 1.50996e-07, 0.0871557, -0.996195, 0, 1.5, -3)
+fov = 60.0
+
+[node name="Angle 2" type="Camera3D" parent="."]
+transform = Transform3D(-1, 1.31602e-08, -1.50421e-07, 0, 0.996195, 0.0871557, 1.50996e-07, 0.0871557, -0.996195, 0, 1.5, -1)
+fov = 60.0
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
+environment = SubResource("Environment_axk5g")
+
+[node name="OmniLight3D" type="OmniLight3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2.5, -3)
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.5
+
+[node name="OmniLight3D2" type="OmniLight3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 2.5, -3)
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.5
diff --git a/Scenes/Stages/ProtoRoadStage.tscn b/Scenes/Stages/ProtoRoadStage.tscn
new file mode 100644
index 0000000..a6bc733
--- /dev/null
+++ b/Scenes/Stages/ProtoRoadStage.tscn
@@ -0,0 +1,100 @@
+[gd_scene load_steps=11 format=3 uid="uid://0p6p1owvvesv"]
+
+[ext_resource type="PackedScene" uid="uid://c5fgw7t45p7r6" path="res://Models/Cyberamics/Cyber Chuck.glb" id="1_pj7jr"]
+[ext_resource type="Script" uid="uid://du3pqtf3jixvl" path="res://Scripts/CyberamicController.gd" id="2_6jho3"]
+[ext_resource type="PackedScene" uid="uid://d34xfaignny8j" path="res://Models/Cyberamics/Cyber Helen.glb" id="3_11jlu"]
+[ext_resource type="PackedScene" uid="uid://doxu4tb5jfoqp" path="res://Models/Cyberamics/Cyber Munch.glb" id="4_qr1e5"]
+[ext_resource type="PackedScene" uid="uid://ba7i8p8olef2s" path="res://Models/Cyberamics/Cyber Jasper.glb" id="5_k7q7t"]
+[ext_resource type="PackedScene" uid="uid://bp5u5t6yu4ejy" path="res://Models/Cyberamics/Cyber Pasqually.glb" id="6_08e8o"]
+[ext_resource type="Script" uid="uid://d1p4ite8ts2wi" path="res://Scripts/LightController.gd" id="7_r2dgu"]
+[ext_resource type="PackedScene" uid="uid://dq1fvhg4rb6ro" path="res://Models/RoadStage/RoadStageNeon.glb" id="8_basbq"]
+[ext_resource type="PackedScene" uid="uid://bxjnp7g3w2wc8" path="res://Models/RoadStage/RoadStage.glb" id="9_hijvq"]
+
+[sub_resource type="Environment" id="Environment_aswoc"]
+ambient_light_source = 1
+
+[node name="ProtoRoadStage" type="Node3D"]
+
+[node name="Chuck" parent="." instance=ExtResource("1_pj7jr")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 1.9, 1.3)
+script = ExtResource("2_6jho3")
+
+[node name="Helen" parent="." instance=ExtResource("3_11jlu")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.6, 1.8, 0.6)
+script = ExtResource("2_6jho3")
+
+[node name="Munch" parent="." instance=ExtResource("4_qr1e5")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1.1, 0.7)
+script = ExtResource("2_6jho3")
+
+[node name="Jasper" parent="." instance=ExtResource("5_k7q7t")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.6, 1.8, 0.6)
+script = ExtResource("2_6jho3")
+
+[node name="Pasqually" parent="." instance=ExtResource("6_08e8o")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 1.4, 1)
+script = ExtResource("2_6jho3")
+
+[node name="Special" type="Node3D" parent="."]
+script = ExtResource("7_r2dgu")
+
+[node name="Neon Sign" parent="Special" instance=ExtResource("8_basbq")]
+visible = false
+
+[node name="RoadStage" parent="." instance=ExtResource("9_hijvq")]
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
+environment = SubResource("Environment_aswoc")
+
+[node name="Room Lights" type="Node3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 2)
+
+[node name="OmniLight3D" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 3.5, 2)
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.5
+
+[node name="OmniLight3D2" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4, 3.5, 2)
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.5
+
+[node name="OmniLight3D3" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.5, 2)
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.5
+
+[node name="OmniLight3D4" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 3.5, 4)
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.5
+
+[node name="OmniLight3D5" type="OmniLight3D" parent="Room Lights"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8, 3.5, 4)
+light_color = Color(1, 0.960784, 0.85098, 1)
+light_energy = 0.5
+
+[node name="Angle 1" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, -0.5, 3.75, 7.5)
+current = true
+fov = 60.0
+
+[node name="Angle 2" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, -5, 3.5, 4)
+fov = 60.0
+
+[node name="Angle 3" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, -0.6, 3.5, 3)
+fov = 60.0
+
+[node name="Angle 4" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 1, 2.5, 3)
+fov = 60.0
+
+[node name="Angle 5" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 2.6, 3.5, 3)
+fov = 60.0
+
+[node name="Angle 6" type="Camera3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 4, 3, 3)
+fov = 60.0
diff --git a/Scripts/AnimatronicController.gd b/Scripts/AnimatronicController.gd
new file mode 100644
index 0000000..5dc202b
--- /dev/null
+++ b/Scripts/AnimatronicController.gd
@@ -0,0 +1,93 @@
+extends Node3D
+
+var animation_player : AnimationPlayer
+var animation_tree : AnimationTree
+var blend_tree : AnimationNodeBlendTree
+
+var movement_states : Dictionary
+
+func _ready():
+ animation_player = $AnimationPlayer
+
+ animation_tree = AnimationTree.new()
+ animation_tree.anim_player = animation_player.get_path()
+ add_child(animation_tree)
+
+ animation_tree.tree_root = AnimationNodeBlendTree.new()
+ animation_tree.active = true
+ blend_tree = animation_tree.tree_root as AnimationNodeBlendTree
+
+ animation_player.speed_scale = 0
+
+ var animations = animation_player.get_animation_list()
+
+ for animation in animations:
+ movement_states[animation] = [false, 0.0, 0.0, 0.0]
+
+ var prev_name = "Anim_" + animations[0]
+ var old_time_name = "Time_" + animations[0]
+ var old_seek_name = "Seek_" + animations[0]
+
+ var prev_anim_node := AnimationNodeAnimation.new()
+ prev_anim_node.animation = animations[0]
+ blend_tree.add_node(prev_name, prev_anim_node)
+
+ var old_time_node := AnimationNodeTimeScale.new()
+ blend_tree.add_node(old_time_name,old_time_node)
+
+ var _old_seek_node := AnimationNodeTimeSeek.new()
+ blend_tree.add_node(old_seek_name,_old_seek_node)
+
+ blend_tree.connect_node(old_time_name,0,prev_name)
+ blend_tree.connect_node(old_seek_name,0,old_time_name)
+ prev_name = old_seek_name
+
+ for i in range(1, animations.size()):
+ var anim_name = "Anim_" + animations[i]
+ var add_name = "Add_" + animations[i]
+ var time_name = "Time_" + animations[i]
+ var seek_name = "Seek_" + animations[i]
+
+ var new_anim_node := AnimationNodeAnimation.new()
+ new_anim_node.animation = animations[i]
+ blend_tree.add_node(anim_name, new_anim_node)
+
+ var time_node := AnimationNodeTimeScale.new()
+ blend_tree.add_node(time_name,time_node)
+
+ var seek_node := AnimationNodeTimeSeek.new()
+ blend_tree.add_node(seek_name,seek_node)
+
+ var add_node := AnimationNodeAdd2.new()
+ blend_tree.add_node(add_name, add_node)
+
+ blend_tree.connect_node(time_name, 0, anim_name)
+ blend_tree.connect_node(seek_name, 0, time_name)
+ blend_tree.connect_node(add_name, 0, prev_name)
+ blend_tree.connect_node(add_name, 1, seek_name)
+ prev_name = add_name
+
+ blend_tree.connect_node("output", 0, prev_name)
+
+ for i in range(0, animations.size()):
+ animation_tree.set("parameters/Add_" + str(animations[i]) + "/add_amount", 1.0)
+ animation_tree.set("parameters/Seek_" + str(animations[i]) + "/seek_request", 0)
+ animation_tree.set("parameters/Time_" + str(animations[i]) + "/scale", 0)
+
+func _physics_process(delta: float) -> void:
+ for key in movement_states:
+ var anim_path = "parameters/Seek_" + key + "/seek_request"
+ var state = movement_states[key]
+ if (state[0]):
+ state[1] = clamp(float(state[1]) + (delta * state[2]), 0, 1)
+ else:
+ state[1] = clamp(float(state[1]) - (delta * state[3]), 0, 1)
+ animation_tree.set(anim_path, state[1])
+
+func _movement_in(movement, rate):
+ movement_states[movement][0] = true
+ movement_states[movement][2] = rate
+
+func _movement_out(movement, rate):
+ movement_states[movement][0] = false
+ movement_states[movement][3] = rate
diff --git a/Scripts/AnimatronicController.gd.uid b/Scripts/AnimatronicController.gd.uid
new file mode 100644
index 0000000..b63dd10
--- /dev/null
+++ b/Scripts/AnimatronicController.gd.uid
@@ -0,0 +1 @@
+uid://bu68w4jnh0n2b
diff --git a/Scripts/CameraButton.gd b/Scripts/CameraButton.gd
new file mode 100644
index 0000000..ef99c04
--- /dev/null
+++ b/Scripts/CameraButton.gd
@@ -0,0 +1,10 @@
+extends Control
+
+@export var camera : String
+@export var base_scene_path : String
+
+func _ready() -> void:
+ $Button.text = camera
+
+func _on_button_pressed() -> void:
+ get_node(base_scene_path + camera).current = true;
diff --git a/Scripts/CameraButton.gd.uid b/Scripts/CameraButton.gd.uid
new file mode 100644
index 0000000..18a4fd1
--- /dev/null
+++ b/Scripts/CameraButton.gd.uid
@@ -0,0 +1 @@
+uid://dfoog0y2bh7tk
diff --git a/Scripts/Configs/Cosmetics.gd b/Scripts/Configs/Cosmetics.gd
new file mode 100644
index 0000000..18bf82c
--- /dev/null
+++ b/Scripts/Configs/Cosmetics.gd
@@ -0,0 +1,666 @@
+extends Node
+
+var CyberChuck = {
+ "Chuck E. Hat":
+ {
+ "Derby":
+ {
+ "Chuck/Chuck/Skeleton3D/Avenger Hat": false,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Hat": false,
+ "Chuck/Chuck/Skeleton3D/Derby": true,
+ "Chuck/Chuck/Skeleton3D/Tux Derby": false,
+ "Chuck/Chuck/Skeleton3D/Blue Cool Chuck Hat": false,
+ },
+ "Tux Derby":
+ {
+ "Chuck/Chuck/Skeleton3D/Avenger Hat": false,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Hat": false,
+ "Chuck/Chuck/Skeleton3D/Derby": false,
+ "Chuck/Chuck/Skeleton3D/Tux Derby": true,
+ "Chuck/Chuck/Skeleton3D/Blue Cool Chuck Hat": false,
+ },
+ "Cool Chuck":
+ {
+ "Chuck/Chuck/Skeleton3D/Avenger Hat": false,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Hat": true,
+ "Chuck/Chuck/Skeleton3D/Derby": false,
+ "Chuck/Chuck/Skeleton3D/Tux Derby": false,
+ "Chuck/Chuck/Skeleton3D/Blue Cool Chuck Hat": false,
+ },
+ "Cool Chuck (Blue)":
+ {
+ "Chuck/Chuck/Skeleton3D/Avenger Hat": false,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Hat": false,
+ "Chuck/Chuck/Skeleton3D/Derby": false,
+ "Chuck/Chuck/Skeleton3D/Tux Derby": false,
+ "Chuck/Chuck/Skeleton3D/Blue Cool Chuck Hat": true,
+ },
+ "Avenger":
+ {
+ "Chuck/Chuck/Skeleton3D/Avenger Hat": true,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Hat": false,
+ "Chuck/Chuck/Skeleton3D/Derby": false,
+ "Chuck/Chuck/Skeleton3D/Tux Derby": false,
+ "Chuck/Chuck/Skeleton3D/Blue Cool Chuck Hat": false,
+ },
+ "None":
+ {
+ "Chuck/Chuck/Skeleton3D/Avenger Hat": false,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Hat": false,
+ "Chuck/Chuck/Skeleton3D/Derby": false,
+ "Chuck/Chuck/Skeleton3D/Tux Derby": false,
+ "Chuck/Chuck/Skeleton3D/Blue Cool Chuck Hat": false,
+ }
+ },
+
+ "Chuck E. Shirt":
+ {
+ "Yellow Checker Vest":
+ {
+ "Chuck/Chuck/Skeleton3D/Rockstar Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Avenger Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Black Bowtie": true,
+ "Chuck/Chuck/Skeleton3D/Buttons": true,
+ "Chuck/Chuck/Skeleton3D/Vest Trim": true,
+ "Chuck/Chuck/Skeleton3D/Yellow Checker Vest": true,
+ "Chuck/Chuck/Skeleton3D/Rocker Vest": false,
+ "Chuck/Chuck/Skeleton3D/Red Bowtie": false,
+ "Chuck/Chuck/Skeleton3D/Tux Button": false,
+ "Chuck/Chuck/Skeleton3D/Lapel": false,
+ "Chuck/Chuck/Skeleton3D/Tux Base": false,
+ },
+ "Red Vest":
+ {
+ "Chuck/Chuck/Skeleton3D/Rockstar Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Avenger Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Black Bowtie": true,
+ "Chuck/Chuck/Skeleton3D/Buttons": true,
+ "Chuck/Chuck/Skeleton3D/Vest Trim": true,
+ "Chuck/Chuck/Skeleton3D/Yellow Checker Vest": false,
+ "Chuck/Chuck/Skeleton3D/Rocker Vest": true,
+ "Chuck/Chuck/Skeleton3D/Red Bowtie": false,
+ "Chuck/Chuck/Skeleton3D/Tux Button": false,
+ "Chuck/Chuck/Skeleton3D/Lapel": false,
+ "Chuck/Chuck/Skeleton3D/Tux Base": false,
+ },
+ "Tux":
+ {
+ "Chuck/Chuck/Skeleton3D/Rockstar Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Avenger Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Black Bowtie": false,
+ "Chuck/Chuck/Skeleton3D/Buttons": false,
+ "Chuck/Chuck/Skeleton3D/Vest Trim": false,
+ "Chuck/Chuck/Skeleton3D/Yellow Checker Vest": false,
+ "Chuck/Chuck/Skeleton3D/Rocker Vest": false,
+ "Chuck/Chuck/Skeleton3D/Red Bowtie": true,
+ "Chuck/Chuck/Skeleton3D/Tux Button": true,
+ "Chuck/Chuck/Skeleton3D/Lapel": true,
+ "Chuck/Chuck/Skeleton3D/Tux Base": true,
+ },
+ "Cool Chuck Shirt":
+ {
+ "Chuck/Chuck/Skeleton3D/Rockstar Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Avenger Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Shirt": true,
+ "Chuck/Chuck/Skeleton3D/Black Bowtie": false,
+ "Chuck/Chuck/Skeleton3D/Buttons": false,
+ "Chuck/Chuck/Skeleton3D/Vest Trim": false,
+ "Chuck/Chuck/Skeleton3D/Yellow Checker Vest": false,
+ "Chuck/Chuck/Skeleton3D/Rocker Vest": false,
+ "Chuck/Chuck/Skeleton3D/Red Bowtie": false,
+ "Chuck/Chuck/Skeleton3D/Tux Button": false,
+ "Chuck/Chuck/Skeleton3D/Lapel": false,
+ "Chuck/Chuck/Skeleton3D/Tux Base": false,
+ },
+ "Avenger Shirt":
+ {
+ "Chuck/Chuck/Skeleton3D/Rockstar Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Avenger Shirt": true,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Black Bowtie": false,
+ "Chuck/Chuck/Skeleton3D/Buttons": false,
+ "Chuck/Chuck/Skeleton3D/Vest Trim": false,
+ "Chuck/Chuck/Skeleton3D/Yellow Checker Vest": false,
+ "Chuck/Chuck/Skeleton3D/Rocker Vest": false,
+ "Chuck/Chuck/Skeleton3D/Red Bowtie": false,
+ "Chuck/Chuck/Skeleton3D/Tux Button": false,
+ "Chuck/Chuck/Skeleton3D/Lapel": false,
+ "Chuck/Chuck/Skeleton3D/Tux Base": false,
+ },
+ "Rockstar Shirt":
+ {
+ "Chuck/Chuck/Skeleton3D/Rockstar Shirt": true,
+ "Chuck/Chuck/Skeleton3D/Avenger Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Shirt": false,
+ "Chuck/Chuck/Skeleton3D/Black Bowtie": false,
+ "Chuck/Chuck/Skeleton3D/Buttons": false,
+ "Chuck/Chuck/Skeleton3D/Vest Trim": false,
+ "Chuck/Chuck/Skeleton3D/Yellow Checker Vest": false,
+ "Chuck/Chuck/Skeleton3D/Rocker Vest": false,
+ "Chuck/Chuck/Skeleton3D/Red Bowtie": false,
+ "Chuck/Chuck/Skeleton3D/Tux Button": false,
+ "Chuck/Chuck/Skeleton3D/Lapel": false,
+ "Chuck/Chuck/Skeleton3D/Tux Base": false,
+ }
+ },
+
+ "Chuck E. Mask":
+ {
+ "PTT":
+ {
+ "Chuck/Chuck/Skeleton3D/PTT Ears": true,
+ "Chuck/Chuck/Skeleton3D/PTT Jaw": true,
+ "Chuck/Chuck/Skeleton3D/PTT Muzzle": true,
+ "Chuck/Chuck/Skeleton3D/Modern Ears": false,
+ "Chuck/Chuck/Skeleton3D/Modern Jaw": false,
+ "Chuck/Chuck/Skeleton3D/Modern Muzzle": false,
+ "Chuck/Chuck/Skeleton3D/Northridge Ears": false,
+ },
+ "Modern":
+ {
+ "Chuck/Chuck/Skeleton3D/PTT Ears": false,
+ "Chuck/Chuck/Skeleton3D/PTT Jaw": false,
+ "Chuck/Chuck/Skeleton3D/PTT Muzzle": false,
+ "Chuck/Chuck/Skeleton3D/Modern Ears": true,
+ "Chuck/Chuck/Skeleton3D/Modern Jaw": true,
+ "Chuck/Chuck/Skeleton3D/Modern Muzzle": true,
+ "Chuck/Chuck/Skeleton3D/Northridge Ears": false,
+ },
+ "Northridge":
+ {
+ "Chuck/Chuck/Skeleton3D/PTT Ears": false,
+ "Chuck/Chuck/Skeleton3D/PTT Jaw": false,
+ "Chuck/Chuck/Skeleton3D/PTT Muzzle": false,
+ "Chuck/Chuck/Skeleton3D/Modern Ears": false,
+ "Chuck/Chuck/Skeleton3D/Modern Jaw": true,
+ "Chuck/Chuck/Skeleton3D/Modern Muzzle": true,
+ "Chuck/Chuck/Skeleton3D/Northridge Ears": true,
+ },
+ },
+
+ "Chuck E. Eyelids":
+ {
+ "Blue":
+ {
+ "Chuck/Chuck/Skeleton3D/Blue Eyelids": true,
+ "Chuck/Chuck/Skeleton3D/Grey Eyelids": false,
+ },
+ "Grey":
+ {
+ "Chuck/Chuck/Skeleton3D/Blue Eyelids": false,
+ "Chuck/Chuck/Skeleton3D/Grey Eyelids": true,
+ },
+ },
+
+ "Chuck E. Legs":
+ {
+ "None":
+ {
+ "Chuck/Chuck/Skeleton3D/Stand": true,
+ "Chuck/Chuck/Skeleton3D/Legs": false,
+ "Chuck/Chuck/Skeleton3D/Feet": false,
+ },
+ "Normal":
+ {
+ "Chuck/Chuck/Skeleton3D/Stand": false,
+ "Chuck/Chuck/Skeleton3D/Legs": true,
+ "Chuck/Chuck/Skeleton3D/Feet": true,
+ }
+ },
+
+ "Chuck E. Pants":
+ {
+ "None":
+ {
+ "Chuck/Chuck/Skeleton3D/Avenger Shorts": false,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Shorts": false,
+ "Chuck/Chuck/Skeleton3D/Rockstar Jeans": false,
+ },
+ "Cool Chuck Shorts":
+ {
+ "Chuck/Chuck/Skeleton3D/Avenger Shorts": false,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Shorts": true,
+ "Chuck/Chuck/Skeleton3D/Rockstar Jeans": false,
+ },
+ "Avenger Shorts":
+ {
+ "Chuck/Chuck/Skeleton3D/Avenger Shorts": true,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Shorts": false,
+ "Chuck/Chuck/Skeleton3D/Rockstar Jeans": false,
+ },
+ "Rockstar Jeans":
+ {
+ "Chuck/Chuck/Skeleton3D/Avenger Shorts": false,
+ "Chuck/Chuck/Skeleton3D/Cool Chuck Shorts": false,
+ "Chuck/Chuck/Skeleton3D/Rockstar Jeans": true,
+ }
+ },
+}
+
+var CyberHelen = {
+ "Helen Eyelids":
+ {
+ "Blue":
+ {
+ "Helen/Helen/Skeleton3D/Blue Eyelids": true,
+ "Helen/Helen/Skeleton3D/Pink Eyelids": false,
+ },
+ "Pink":
+ {
+ "Helen/Helen/Skeleton3D/Blue Eyelids": false,
+ "Helen/Helen/Skeleton3D/Pink Eyelids": true,
+ },
+ },
+
+ "Helen Dress":
+ {
+ "PTT":
+ {
+ "Helen/Helen/Skeleton3D/PTT Shirt": true,
+ "Helen/Helen/Skeleton3D/Half Body Skirt": false,
+ "Helen/Helen/Skeleton3D/Skirt": false,
+ "Helen/Helen/Skeleton3D/Black Shirt": false,
+ "Helen/Helen/Skeleton3D/Collar": false,
+ },
+ "Road Stage":
+ {
+ "Helen/Helen/Skeleton3D/PTT Shirt": false,
+ "Helen/Helen/Skeleton3D/Half Body Skirt": true,
+ "Helen/Helen/Skeleton3D/Skirt": false,
+ "Helen/Helen/Skeleton3D/Black Shirt": true,
+ "Helen/Helen/Skeleton3D/Collar": true,
+ },
+ "Modern":
+ {
+ "Helen/Helen/Skeleton3D/PTT Shirt": false,
+ "Helen/Helen/Skeleton3D/Half Body Skirt": false,
+ "Helen/Helen/Skeleton3D/Skirt": true,
+ "Helen/Helen/Skeleton3D/Black Shirt": true,
+ "Helen/Helen/Skeleton3D/Collar": true,
+ },
+ },
+
+ "Helen Hair":
+ {
+ "PTT":
+ {
+ "Helen/Helen/Skeleton3D/Modern Hair": false,
+ "Helen/Helen/Skeleton3D/Modern Hair Yellow": false,
+ "Helen/Helen/Skeleton3D/Road Stage Hair": false,
+ "Helen/Helen/Skeleton3D/PTT Hair": true,
+ },
+ "Road Stage":
+ {
+ "Helen/Helen/Skeleton3D/Modern Hair": false,
+ "Helen/Helen/Skeleton3D/Modern Hair Yellow": false,
+ "Helen/Helen/Skeleton3D/Road Stage Hair": true,
+ "Helen/Helen/Skeleton3D/PTT Hair": false,
+ },
+ "Modern":
+ {
+ "Helen/Helen/Skeleton3D/Modern Hair": true,
+ "Helen/Helen/Skeleton3D/Modern Hair Yellow": false,
+ "Helen/Helen/Skeleton3D/Road Stage Hair": false,
+ "Helen/Helen/Skeleton3D/PTT Hair": false,
+ },
+ "Modern Yellow":
+ {
+ "Helen/Helen/Skeleton3D/Modern Hair": false,
+ "Helen/Helen/Skeleton3D/Modern Hair Yellow": true,
+ "Helen/Helen/Skeleton3D/Road Stage Hair": false,
+ "Helen/Helen/Skeleton3D/PTT Hair": false,
+ },
+ },
+
+ "Helen Mask":
+ {
+ "PTT":
+ {
+ "Helen/Helen/Skeleton3D/PTT Mask": true,
+ "Helen/Helen/Skeleton3D/PTT Jaw": true,
+ "Helen/Helen/Skeleton3D/PTT Beak": true,
+ "Helen/Helen/Skeleton3D/PTT Mask Crest": true,
+ "Helen/Helen/Skeleton3D/PTT Red Mouth Parts": true,
+ "Helen/Helen/Skeleton3D/PTT Eyeshadow": true,
+ "Helen/Helen/Skeleton3D/Modern Head": false,
+ "Helen/Helen/Skeleton3D/Modern Mask": false,
+ "Helen/Helen/Skeleton3D/Road Stage Jaw": false,
+ "Helen/Helen/Skeleton3D/Road Stage Beak": false,
+ "Helen/Helen/Skeleton3D/Modern Jaw": false,
+ "Helen/Helen/Skeleton3D/Modern Beak": false,
+ },
+ "Road Stage":
+ {
+ "Helen/Helen/Skeleton3D/PTT Mask": false,
+ "Helen/Helen/Skeleton3D/PTT Jaw": false,
+ "Helen/Helen/Skeleton3D/PTT Beak": false,
+ "Helen/Helen/Skeleton3D/PTT Mask Crest": false,
+ "Helen/Helen/Skeleton3D/PTT Red Mouth Parts": false,
+ "Helen/Helen/Skeleton3D/PTT Eyeshadow": false,
+ "Helen/Helen/Skeleton3D/Modern Head": true,
+ "Helen/Helen/Skeleton3D/Modern Mask": true,
+ "Helen/Helen/Skeleton3D/Road Stage Jaw": true,
+ "Helen/Helen/Skeleton3D/Road Stage Beak": true,
+ "Helen/Helen/Skeleton3D/Modern Jaw": false,
+ "Helen/Helen/Skeleton3D/Modern Beak": false,
+ },
+ "Modern":
+ {
+ "Helen/Helen/Skeleton3D/PTT Mask": false,
+ "Helen/Helen/Skeleton3D/PTT Jaw": false,
+ "Helen/Helen/Skeleton3D/PTT Beak": false,
+ "Helen/Helen/Skeleton3D/PTT Mask Crest": false,
+ "Helen/Helen/Skeleton3D/PTT Red Mouth Parts": false,
+ "Helen/Helen/Skeleton3D/PTT Eyeshadow": false,
+ "Helen/Helen/Skeleton3D/Modern Head": true,
+ "Helen/Helen/Skeleton3D/Modern Mask": true,
+ "Helen/Helen/Skeleton3D/Road Stage Jaw": false,
+ "Helen/Helen/Skeleton3D/Road Stage Beak": false,
+ "Helen/Helen/Skeleton3D/Modern Jaw": true,
+ "Helen/Helen/Skeleton3D/Modern Beak": true,
+ },
+ },
+
+ "Helen Legs":
+ {
+ "None":
+ {
+ "Helen/Helen/Skeleton3D/Stand": true,
+ "Helen/Helen/Skeleton3D/Legs": false,
+ "Helen/Helen/Skeleton3D/Shoes": false,
+ },
+ "Modern Standing":
+ {
+ "Helen/Helen/Skeleton3D/Stand": false,
+ "Helen/Helen/Skeleton3D/Legs": true,
+ "Helen/Helen/Skeleton3D/Shoes": true,
+ }
+ },
+}
+
+var CyberMunch = {
+ "Munch Hat":
+ {
+ "None":
+ {
+ "Munch/Munch/Skeleton3D/Road Stage Hat": false,
+ "Munch/Munch/Skeleton3D/Modern Hat": false,
+ },
+ "Road Stage":
+ {
+ "Munch/Munch/Skeleton3D/Road Stage Hat": true,
+ "Munch/Munch/Skeleton3D/Modern Hat": false,
+ },
+ "Modern":
+ {
+ "Munch/Munch/Skeleton3D/Road Stage Hat": false,
+ "Munch/Munch/Skeleton3D/Modern Hat": true,
+ },
+ },
+
+ "Munch Mask":
+ {
+ "PTT":
+ {
+ "Munch/Munch/Skeleton3D/PTT Nostrils": true,
+ "Munch/Munch/Skeleton3D/Modern Nostrils": false,
+ },
+ "Modern":
+ {
+ "Munch/Munch/Skeleton3D/PTT Nostrils": false,
+ "Munch/Munch/Skeleton3D/Modern Nostrils": true,
+ },
+ },
+
+ "Munch Body":
+ {
+ "PTT":
+ {
+ "Munch/Munch/Skeleton3D/PTT Torso": true,
+ "Munch/Munch/Skeleton3D/PTT Arms": true,
+ "Munch/Munch/Skeleton3D/PTT Left Hand": true,
+ "Munch/Munch/Skeleton3D/PTT Right Hand": true,
+ "Munch/Munch/Skeleton3D/Modern Torso": false,
+ "Munch/Munch/Skeleton3D/Modern Arms": false,
+ "Munch/Munch/Skeleton3D/Modern Left Hand": false,
+ "Munch/Munch/Skeleton3D/Modern Right Hand": false,
+ },
+ "Modern":
+ {
+ "Munch/Munch/Skeleton3D/PTT Torso": false,
+ "Munch/Munch/Skeleton3D/PTT Arms": false,
+ "Munch/Munch/Skeleton3D/PTT Left Hand": false,
+ "Munch/Munch/Skeleton3D/PTT Right Hand": false,
+ "Munch/Munch/Skeleton3D/Modern Torso": true,
+ "Munch/Munch/Skeleton3D/Modern Arms": true,
+ "Munch/Munch/Skeleton3D/Modern Left Hand": true,
+ "Munch/Munch/Skeleton3D/Modern Right Hand": true,
+ },
+ },
+
+ "Munch Legs":
+ {
+ "None":
+ {
+ "Munch/Munch/Skeleton3D/Legs": false,
+ "Munch/Munch/Skeleton3D/Shoes": false,
+ },
+ "Modern":
+ {
+ "Munch/Munch/Skeleton3D/Legs": true,
+ "Munch/Munch/Skeleton3D/Shoes": true,
+ },
+ },
+}
+
+var CyberJasper = {
+ "Jasper Hat":
+ {
+ "PTT":
+ {
+ "Jasper/Jasper/Skeleton3D/Straw Hat Small": true,
+ "Jasper/Jasper/Skeleton3D/Straw Hat Large": false,
+ "Jasper/Jasper/Skeleton3D/Cowboy Hat": false,
+ },
+ "Rocker":
+ {
+ "Jasper/Jasper/Skeleton3D/Straw Hat Small": false,
+ "Jasper/Jasper/Skeleton3D/Straw Hat Large": true,
+ "Jasper/Jasper/Skeleton3D/Cowboy Hat": false,
+ },
+ "Modern":
+ {
+ "Jasper/Jasper/Skeleton3D/Straw Hat Small": false,
+ "Jasper/Jasper/Skeleton3D/Straw Hat Large": false,
+ "Jasper/Jasper/Skeleton3D/Cowboy Hat": true,
+ },
+ "None":
+ {
+ "Jasper/Jasper/Skeleton3D/Straw Hat Small": false,
+ "Jasper/Jasper/Skeleton3D/Straw Hat Large": false,
+ "Jasper/Jasper/Skeleton3D/Cowboy Hat": false,
+ },
+ },
+
+ "Jasper Shirt":
+ {
+ "PTT":
+ {
+ "Jasper/Jasper/Skeleton3D/Red Shirt": true,
+ "Jasper/Jasper/Skeleton3D/Rocker Shirt": false,
+ "Jasper/Jasper/Skeleton3D/Cow Print Shirt": false,
+ },
+ "Rocker":
+ {
+ "Jasper/Jasper/Skeleton3D/Red Shirt": false,
+ "Jasper/Jasper/Skeleton3D/Rocker Shirt": true,
+ "Jasper/Jasper/Skeleton3D/Cow Print Shirt": false,
+ },
+ "Modern":
+ {
+ "Jasper/Jasper/Skeleton3D/Red Shirt": false,
+ "Jasper/Jasper/Skeleton3D/Rocker Shirt": false,
+ "Jasper/Jasper/Skeleton3D/Cow Print Shirt": true,
+ },
+ },
+
+ "Jasper Guitar":
+ {
+ "Banjo":
+ {
+ "Jasper/Jasper/Skeleton3D/Banjo": true,
+ "Jasper/Jasper/Skeleton3D/Cheese Guitar": false,
+ },
+ "Cheese Guitar":
+ {
+ "Jasper/Jasper/Skeleton3D/Banjo": false,
+ "Jasper/Jasper/Skeleton3D/Cheese Guitar": true,
+ },
+ },
+
+ "Jasper Bandana":
+ {
+ "Blue":
+ {
+ "Jasper/Jasper/Skeleton3D/Blue Bandana": true,
+ "Jasper/Jasper/Skeleton3D/Red Bandana": false,
+ },
+ "Red":
+ {
+ "Jasper/Jasper/Skeleton3D/Blue Bandana": false,
+ "Jasper/Jasper/Skeleton3D/Red Bandana": true,
+ },
+ },
+
+ "Jasper Overalls":
+ {
+ "Normal":
+ {
+ "Jasper/Jasper/Skeleton3D/Overalls": true,
+ },
+ "None":
+ {
+ "Jasper/Jasper/Skeleton3D/Overalls": false,
+ },
+ },
+
+ "Jasper Legs":
+ {
+ "None":
+ {
+ "Jasper/Jasper/Skeleton3D/Pants": false,
+ "Jasper/Jasper/Skeleton3D/Shoes": false,
+ },
+ "Normal":
+ {
+ "Jasper/Jasper/Skeleton3D/Pants": true,
+ "Jasper/Jasper/Skeleton3D/Shoes": true,
+ },
+ },
+}
+
+var CyberPasqually = {
+ "Pasqually Body":
+ {
+ "PTT":
+ {
+ "Pasqually/Pasqually/Skeleton3D/PTT Torso": true,
+ "Pasqually/Pasqually/Skeleton3D/PTT Arms": true,
+ "Pasqually/Pasqually/Skeleton3D/PTT Left Hand": true,
+ "Pasqually/Pasqually/Skeleton3D/PTT Right Hand": true,
+ "Pasqually/Pasqually/Skeleton3D/Modern Torso": false,
+ "Pasqually/Pasqually/Skeleton3D/Modern Arms": false,
+ "Pasqually/Pasqually/Skeleton3D/Modern Left Hand": false,
+ "Pasqually/Pasqually/Skeleton3D/Modern Right Hand": false,
+ },
+ "Modern":
+ {
+ "Pasqually/Pasqually/Skeleton3D/PTT Torso": false,
+ "Pasqually/Pasqually/Skeleton3D/PTT Arms": false,
+ "Pasqually/Pasqually/Skeleton3D/PTT Left Hand": false,
+ "Pasqually/Pasqually/Skeleton3D/PTT Right Hand": false,
+ "Pasqually/Pasqually/Skeleton3D/Modern Torso": true,
+ "Pasqually/Pasqually/Skeleton3D/Modern Arms": true,
+ "Pasqually/Pasqually/Skeleton3D/Modern Left Hand": true,
+ "Pasqually/Pasqually/Skeleton3D/Modern Right Hand": true,
+ },
+ },
+
+ "Pasqually Legs":
+ {
+ "None":
+ {
+ "Pasqually/Pasqually/Skeleton3D/Legs": false,
+ "Pasqually/Pasqually/Skeleton3D/Shoes": false,
+ },
+ "Normal":
+ {
+ "Pasqually/Pasqually/Skeleton3D/Legs": true,
+ "Pasqually/Pasqually/Skeleton3D/Shoes": true,
+ },
+ },
+
+ "Pasqually Held Item":
+ {
+ "Accordion":
+ {
+ "Pasqually/Pasqually/Skeleton3D/Spoons": false,
+ "Pasqually/Pasqually/Skeleton3D/Drumsticks": false,
+ "Pasqually/Pasqually/Skeleton3D/Accordion": true,
+ },
+ "None":
+ {
+ "Pasqually/Pasqually/Skeleton3D/Spoons": false,
+ "Pasqually/Pasqually/Skeleton3D/Drumsticks": false,
+ "Pasqually/Pasqually/Skeleton3D/Accordion": false,
+ },
+ "Spoons":
+ {
+ "Pasqually/Pasqually/Skeleton3D/Spoons": true,
+ "Pasqually/Pasqually/Skeleton3D/Drumsticks": false,
+ "Pasqually/Pasqually/Skeleton3D/Accordion": false,
+ },
+ "Drumsticks":
+ {
+ "Pasqually/Pasqually/Skeleton3D/Spoons": false,
+ "Pasqually/Pasqually/Skeleton3D/Drumsticks": true,
+ "Pasqually/Pasqually/Skeleton3D/Accordion": false,
+ },
+ },
+}
+
+var HelenHouseHelen = {
+ "Helen Hair":
+ {
+ "Black and White":
+ {
+ "Helen/Helen/Skeleton3D/BWHair": true,
+ "Helen/Helen/Skeleton3D/YellowHair": false,
+ },
+ "Yellow":
+ {
+ "Helen/Helen/Skeleton3D/BWHair": false,
+ "Helen/Helen/Skeleton3D/YellowHair": true,
+ },
+ },
+ "Helen Dress":
+ {
+ "Tux":
+ {
+ "Helen/Helen/Skeleton3D/Collar": true,
+ "Helen/Helen/Skeleton3D/Torso": true,
+ "Helen/Helen/Skeleton3D/Skirt": true,
+ "Helen/Helen/Skeleton3D/CheerDress": false,
+ },
+ "Cheerleader":
+ {
+ "Helen/Helen/Skeleton3D/Collar": false,
+ "Helen/Helen/Skeleton3D/Torso": false,
+ "Helen/Helen/Skeleton3D/Skirt": false,
+ "Helen/Helen/Skeleton3D/CheerDress": true,
+ }
+ }
+}
diff --git a/Scripts/Configs/Cosmetics.gd.uid b/Scripts/Configs/Cosmetics.gd.uid
new file mode 100644
index 0000000..755b9b8
--- /dev/null
+++ b/Scripts/Configs/Cosmetics.gd.uid
@@ -0,0 +1 @@
+uid://bnddq01t7dtqc
diff --git a/Scripts/Configs/Stages.gd b/Scripts/Configs/Stages.gd
new file mode 100644
index 0000000..3e55084
--- /dev/null
+++ b/Scripts/Configs/Stages.gd
@@ -0,0 +1,376 @@
+extends Node
+
+var HelenHouse = {
+ "bits": 20,
+ "scene": "res://Scenes/Stages/HelenHouse.tscn",
+ "scene_ref_base": "SubViewport/HelenHouse/",
+ "camera_count": 2,
+
+ "ust_type": "Rockafire Explosion/3-Stage",
+
+ "bit_mapping":
+ {
+ 23: { "bot": "Helen", "movement": "Mouth", "flow_in": 3.0, "flow_out": 2.0 },
+ 24: { "bot": "Helen", "movement": "Left Ear", "flow_in": 3.5, "flow_out": 1.5 },
+ 25: { "bot": "Helen", "movement": "Right Ear", "flow_in": 3.5, "flow_out": 1.5 },
+ 26: { "bot": "Helen", "movement": "Left Eyelid", "flow_in": 1.5, "flow_out": 2.0 },
+ 27: { "bot": "Helen", "movement": "Right Eyelid", "flow_in": 1.5, "flow_out": 2.0 },
+ 28: { "bot": "Helen", "movement": "Eyes Left", "flow_in": 3.5, "flow_out": 1.5 },
+ 29: { "bot": "Helen", "movement": "Eyes Right", "flow_in": 3.5, "flow_out": 1.5 },
+ 30: { "bot": "Helen", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 31: { "bot": "Helen", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 32: { "bot": "Helen", "movement": "Head Up", "flow_in": 1.0, "flow_out": 1.0 },
+ 33: { "bot": "Helen", "movement": "Left Arm Up", "flow_in": 0.8, "flow_out": 0.6 },
+ 34: { "bot": "Helen", "movement": "Left Arm Twist", "flow_in": 0.8, "flow_out": 0.8 },
+ 35: { "bot": "Helen", "movement": "Left Elbow", "flow_in": 1.0, "flow_out": 1.0 },
+ 36: { "bot": "Helen", "movement": "Right Arm Up", "flow_in": 0.8, "flow_out": 0.6 },
+ 37: { "bot": "Helen", "movement": "Right Arm Twist", "flow_in": 0.8, "flow_out": 0.8 },
+ 38: { "bot": "Helen", "movement": "Right Elbow", "flow_in": 1.0, "flow_out": 1.0 },
+ 39: { "bot": "Helen", "movement": "Body Left", "flow_in": 0.7, "flow_out": 0.7 },
+ 40: { "bot": "Helen", "movement": "Body Right", "flow_in": 0.7, "flow_out": 0.7 },
+ 41: { "bot": "Helen", "movement": "Body Lean", "flow_in": 1.0, "flow_out": 0.8 },
+ 125: { "bot": "Spots", "movement": "Helen", "flow_in": "None", "flow_out": "None" },
+ },
+
+ "cosmetics": [ Cosmetics.HelenHouseHelen ],
+ "cosmetic_defaults": [ 0, 0 ]
+}
+
+var ChuckEsCorner = {
+ "bits": 16,
+ "scene": "res://Scenes/Stages/ChuckEsCorner.tscn",
+ "scene_ref_base": "SubViewport/ChuckEsCorner/",
+ "camera_count": 3,
+
+ "ust_type": "Cyberamics",
+
+ "bit_mapping":
+ {
+ 1: { "bot": "Chuck", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 2: { "bot": "Chuck", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 3: { "bot": "Chuck", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 4: { "bot": "Chuck", "movement": "Head Up", "flow_in": 2.0, "flow_out": 1.0 },
+ 5: { "bot": "Chuck", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 6: { "bot": "Chuck", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 7: { "bot": "Chuck", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 8: { "bot": "Chuck", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 41: { "bot": "Warblettes", "movement": "Mouth", "flow_in": 4.0, "flow_out": 3.0 },
+ 44: { "bot": "Warblettes", "movement": "Body Rock", "flow_in": 1.0, "flow_out": 1.0 },
+ 50: { "bot": "Spots", "movement": "Chuck", "flow_in": "None", "flow_out": "None" },
+ 55: { "bot": "Floods", "movement": "Blue", "flow_in": "None", "flow_out": "None" },
+ 78: { "bot": "Spots", "movement": "Warblettes", "flow_in": "None", "flow_out": "None" },
+ 79: { "bot": "Color Spots", "movement": "Chuck", "flow_in": "None", "flow_out": "None" },
+ 82: { "bot": "Floods", "movement": "Red", "flow_in": "None", "flow_out": "None" },
+ 86: { "bot": "Floods", "movement": "Green", "flow_in": "None", "flow_out": "None" },
+ },
+
+ "cosmetics": [ Cosmetics.CyberChuck ],
+ "cosmetic_defaults": [ 0, 1, 0, 0, 0, 0 ]
+}
+
+var BalconyStage = {
+ "bits": 69,
+ "scene": "res://Scenes/Stages/Balcony.tscn",
+ "scene_ref_base": "SubViewport/Balcony/",
+ "camera_count": 6,
+
+ "ust_type": "Cyberamics",
+
+ "bit_mapping":
+ {
+ 1: { "bot": "Chuck", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 2: { "bot": "Chuck", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 3: { "bot": "Chuck", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 4: { "bot": "Chuck", "movement": "Head Up", "flow_in": 2.0, "flow_out": 1.0 },
+ 5: { "bot": "Chuck", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 6: { "bot": "Chuck", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 7: { "bot": "Chuck", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 8: { "bot": "Chuck", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 9: { "bot": "Helen", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 10: { "bot": "Helen", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 11: { "bot": "Helen", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 12: { "bot": "Helen", "movement": "Head Up", "flow_in": 2.0, "flow_out": 1.0 },
+ 13: { "bot": "Helen", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 14: { "bot": "Helen", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 15: { "bot": "Helen", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 16: { "bot": "Helen", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 17: { "bot": "Munch", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 18: { "bot": "Munch", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 19: { "bot": "Munch", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 20: { "bot": "Munch", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 21: { "bot": "Munch", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 22: { "bot": "Munch", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 23: { "bot": "Munch", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 24: { "bot": "Munch", "movement": "Left Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 25: { "bot": "Jasper", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 26: { "bot": "Jasper", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 27: { "bot": "Jasper", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 28: { "bot": "Jasper", "movement": "Head Up", "flow_in": 2.0, "flow_out": 1.0 },
+ 29: { "bot": "Jasper", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 30: { "bot": "Jasper", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 31: { "bot": "Jasper", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 32: { "bot": "Jasper", "movement": "Strum", "flow_in": 2.0, "flow_out": 1.0 },
+ 33: { "bot": "Pasqually", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 34: { "bot": "Pasqually", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 35: { "bot": "Pasqually", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 36: { "bot": "Pasqually", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 37: { "bot": "Pasqually", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 38: { "bot": "Pasqually", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 39: { "bot": "Pasqually", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 40: { "bot": "Pasqually", "movement": "Left Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 41: { "bot": "Warblettes", "movement": "Mouth", "flow_in": 4.0, "flow_out": 3.0 },
+ 44: { "bot": "Warblettes", "movement": "Body Rock", "flow_in": 1.0, "flow_out": 1.0 },
+ 50: { "bot": "Spots", "movement": "Chuck", "flow_in": "None", "flow_out": "None" },
+ 51: { "bot": "Spots", "movement": "Helen", "flow_in": "None", "flow_out": "None" },
+ 52: { "bot": "Spots", "movement": "Munch", "flow_in": "None", "flow_out": "None" },
+ 53: { "bot": "Spots", "movement": "Jasper", "flow_in": "None", "flow_out": "None" },
+ 54: { "bot": "Spots", "movement": "Pasqually", "flow_in": "None", "flow_out": "None" },
+ 55: { "bot": "Backdrop", "movement": "C Blue", "flow_in": "None", "flow_out": "None" },
+ 65: { "bot": "Backdrop", "movement": "L Blue", "flow_in": "None", "flow_out": "None" },
+ 66: { "bot": "Valence", "movement": "R Center", "flow_in": "None", "flow_out": "None" },
+ 68: { "bot": "Backdrop", "movement": "L Red", "flow_in": "None", "flow_out": "None" },
+ 69: { "bot": "Valence", "movement": "R", "flow_in": "None", "flow_out": "None" },
+ 70: { "bot": "Backdrop", "movement": "L Amber", "flow_in": "None", "flow_out": "None" },
+ 71: { "bot": "Valence", "movement": "L Center", "flow_in": "None", "flow_out": "None" },
+ 72: { "bot": "Valence", "movement": "L", "flow_in": "None", "flow_out": "None" },
+ 73: { "bot": "Valence", "movement": "Center", "flow_in": "None", "flow_out": "None" },
+ 74: { "bot": "Color Spots", "movement": "Warblettes", "flow_in": "None", "flow_out": "None" },
+ 75: { "bot": "Color Spots", "movement": "Munch", "flow_in": "None", "flow_out": "None" },
+ 76: { "bot": "Color Spots", "movement": "Helen", "flow_in": "None", "flow_out": "None" },
+ 77: { "bot": "Color Spots", "movement": "Jasper", "flow_in": "None", "flow_out": "None" },
+ 78: { "bot": "Spots", "movement": "Warblettes", "flow_in": "None", "flow_out": "None" },
+ 79: { "bot": "Color Spots", "movement": "Chuck", "flow_in": "None", "flow_out": "None" },
+ 80: { "bot": "Color Spots", "movement": "Chuck 2", "flow_in": "None", "flow_out": "None" },
+ 81: { "bot": "Backdrop", "movement": "R Amber", "flow_in": "None", "flow_out": "None" },
+ 82: { "bot": "Backdrop", "movement": "C Red", "flow_in": "None", "flow_out": "None" },
+ 83: { "bot": "Backdrop", "movement": "R Blue", "flow_in": "None", "flow_out": "None" },
+ 84: { "bot": "Color Spots", "movement": "Pasqually", "flow_in": "None", "flow_out": "None" },
+ 85: { "bot": "Backdrop", "movement": "R Red", "flow_in": "None", "flow_out": "None" },
+ 86: { "bot": "Backdrop", "movement": "C Amber", "flow_in": "None", "flow_out": "None" },
+ },
+
+ "cosmetics":
+ [
+ Cosmetics.CyberChuck,
+ Cosmetics.CyberHelen,
+ Cosmetics.CyberMunch,
+ Cosmetics.CyberJasper,
+ Cosmetics.CyberPasqually
+ ],
+ "cosmetic_defaults": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
+}
+
+var CStage = {
+ "bits": 65,
+ "scene": "res://Scenes/Stages/CStage.tscn",
+ "scene_ref_base": "SubViewport/CStage/",
+ "camera_count": 5,
+
+ "ust_type": "Cyberamics",
+
+ "bit_mapping":
+ {
+ 1: { "bot": "Chuck", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 2: { "bot": "Chuck", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 3: { "bot": "Chuck", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 4: { "bot": "Chuck", "movement": "Head Up", "flow_in": 2.0, "flow_out": 1.0 },
+ 5: { "bot": "Chuck", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 6: { "bot": "Chuck", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 7: { "bot": "Chuck", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 8: { "bot": "Chuck", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 9: { "bot": "Helen", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 10: { "bot": "Helen", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 11: { "bot": "Helen", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 12: { "bot": "Helen", "movement": "Head Up", "flow_in": 2.0, "flow_out": 1.0 },
+ 13: { "bot": "Helen", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 14: { "bot": "Helen", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 15: { "bot": "Helen", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 16: { "bot": "Helen", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 17: { "bot": "Munch", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 18: { "bot": "Munch", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 19: { "bot": "Munch", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 20: { "bot": "Munch", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 21: { "bot": "Munch", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 22: { "bot": "Munch", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 23: { "bot": "Munch", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 24: { "bot": "Munch", "movement": "Left Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 25: { "bot": "Jasper", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 26: { "bot": "Jasper", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 27: { "bot": "Jasper", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 28: { "bot": "Jasper", "movement": "Head Up", "flow_in": 2.0, "flow_out": 1.0 },
+ 29: { "bot": "Jasper", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 30: { "bot": "Jasper", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 31: { "bot": "Jasper", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 32: { "bot": "Jasper", "movement": "Strum", "flow_in": 2.0, "flow_out": 1.0 },
+ 33: { "bot": "Pasqually", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 34: { "bot": "Pasqually", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 35: { "bot": "Pasqually", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 36: { "bot": "Pasqually", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 37: { "bot": "Pasqually", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 38: { "bot": "Pasqually", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 39: { "bot": "Pasqually", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 40: { "bot": "Pasqually", "movement": "Left Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 50: { "bot": "Spots", "movement": "Chuck", "flow_in": "None", "flow_out": "None" },
+ 51: { "bot": "Spots", "movement": "Helen", "flow_in": "None", "flow_out": "None" },
+ 52: { "bot": "Spots", "movement": "Munch", "flow_in": "None", "flow_out": "None" },
+ 53: { "bot": "Spots", "movement": "Jasper", "flow_in": "None", "flow_out": "None" },
+ 54: { "bot": "Spots", "movement": "Pasqually", "flow_in": "None", "flow_out": "None" },
+ 55: { "bot": "Backdrop", "movement": "C Blue", "flow_in": "None", "flow_out": "None" },
+ 65: { "bot": "Backdrop", "movement": "L Blue", "flow_in": "None", "flow_out": "None" },
+ 66: { "bot": "Valence", "movement": "R Center", "flow_in": "None", "flow_out": "None" },
+ 68: { "bot": "Backdrop", "movement": "L Red", "flow_in": "None", "flow_out": "None" },
+ 69: { "bot": "Valence", "movement": "R", "flow_in": "None", "flow_out": "None" },
+ 70: { "bot": "Backdrop", "movement": "L Amber", "flow_in": "None", "flow_out": "None" },
+ 71: { "bot": "Valence", "movement": "L Center", "flow_in": "None", "flow_out": "None" },
+ 72: { "bot": "Valence", "movement": "L", "flow_in": "None", "flow_out": "None" },
+ 73: { "bot": "Valence", "movement": "Center", "flow_in": "None", "flow_out": "None" },
+ 75: { "bot": "Color Spots", "movement": "Munch", "flow_in": "None", "flow_out": "None" },
+ 76: { "bot": "Color Spots", "movement": "Helen", "flow_in": "None", "flow_out": "None" },
+ 77: { "bot": "Color Spots", "movement": "Jasper", "flow_in": "None", "flow_out": "None" },
+ 79: { "bot": "Color Spots", "movement": "Chuck", "flow_in": "None", "flow_out": "None" },
+ 80: { "bot": "Color Spots", "movement": "Chuck 2", "flow_in": "None", "flow_out": "None" },
+ 81: { "bot": "Backdrop", "movement": "R Amber", "flow_in": "None", "flow_out": "None" },
+ 82: { "bot": "Backdrop", "movement": "C Red", "flow_in": "None", "flow_out": "None" },
+ 83: { "bot": "Backdrop", "movement": "R Blue", "flow_in": "None", "flow_out": "None" },
+ 84: { "bot": "Color Spots", "movement": "Pasqually", "flow_in": "None", "flow_out": "None" },
+ 85: { "bot": "Backdrop", "movement": "R Red", "flow_in": "None", "flow_out": "None" },
+ 86: { "bot": "Backdrop", "movement": "C Amber", "flow_in": "None", "flow_out": "None" },
+ },
+
+ "cosmetics":
+ [
+ Cosmetics.CyberChuck,
+ Cosmetics.CyberHelen,
+ Cosmetics.CyberMunch,
+ Cosmetics.CyberJasper,
+ Cosmetics.CyberPasqually
+ ],
+ "cosmetic_defaults": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
+}
+
+var ProtoRoadStage = {
+ "bits": 41,
+ "scene": "res://Scenes/Stages/ProtoRoadStage.tscn",
+ "scene_ref_base": "SubViewport/ProtoRoadStage/",
+ "camera_count": 6,
+
+ "ust_type": "Cyberamics",
+
+ "bit_mapping":
+ {
+ 1: { "bot": "Chuck", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 2: { "bot": "Chuck", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 3: { "bot": "Chuck", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 4: { "bot": "Chuck", "movement": "Head Up", "flow_in": 2.0, "flow_out": 1.0 },
+ 5: { "bot": "Chuck", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 6: { "bot": "Chuck", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 7: { "bot": "Chuck", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 8: { "bot": "Chuck", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 9: { "bot": "Helen", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 10: { "bot": "Helen", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 11: { "bot": "Helen", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 12: { "bot": "Helen", "movement": "Head Up", "flow_in": 2.0, "flow_out": 1.0 },
+ 13: { "bot": "Helen", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 14: { "bot": "Helen", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 15: { "bot": "Helen", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 16: { "bot": "Helen", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 17: { "bot": "Munch", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 18: { "bot": "Munch", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 19: { "bot": "Munch", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 20: { "bot": "Munch", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 21: { "bot": "Munch", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 22: { "bot": "Munch", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 23: { "bot": "Munch", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 24: { "bot": "Munch", "movement": "Left Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 25: { "bot": "Jasper", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 26: { "bot": "Jasper", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 27: { "bot": "Jasper", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 28: { "bot": "Jasper", "movement": "Head Up", "flow_in": 2.0, "flow_out": 1.0 },
+ 29: { "bot": "Jasper", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 30: { "bot": "Jasper", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 31: { "bot": "Jasper", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 32: { "bot": "Jasper", "movement": "Strum", "flow_in": 2.0, "flow_out": 1.0 },
+ 33: { "bot": "Pasqually", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 34: { "bot": "Pasqually", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 35: { "bot": "Pasqually", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 36: { "bot": "Pasqually", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 37: { "bot": "Pasqually", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 38: { "bot": "Pasqually", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 39: { "bot": "Pasqually", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 40: { "bot": "Pasqually", "movement": "Left Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 80: { "bot": "Special", "movement": "Neon Sign", "flow_in": "None", "flow_out": "None" },
+ },
+
+ "cosmetics":
+ [
+ Cosmetics.CyberChuck,
+ Cosmetics.CyberHelen,
+ Cosmetics.CyberMunch,
+ Cosmetics.CyberJasper,
+ Cosmetics.CyberPasqually
+ ],
+ "cosmetic_defaults": [ 1, 2, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 3, 2, 0, 1, 0, 0, 0, 0, 2 ]
+}
+
+var Cyber3Stage = {
+ "bits": 40,
+ "scene": "res://Scenes/Stages/Cyber3Stage.tscn",
+ "scene_ref_base": "SubViewport/Cyber3Stage/",
+ "camera_count": 4,
+
+ "ust_type": "Cyberamics",
+
+ "bit_mapping":
+ {
+ 1: { "bot": "Chuck", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 2: { "bot": "Chuck", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 3: { "bot": "Chuck", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 4: { "bot": "Chuck", "movement": "Head Up", "flow_in": 2.0, "flow_out": 1.0 },
+ 5: { "bot": "Chuck", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 6: { "bot": "Chuck", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 7: { "bot": "Chuck", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 8: { "bot": "Chuck", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 9: { "bot": "Helen", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 10: { "bot": "Helen", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 11: { "bot": "Helen", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 12: { "bot": "Helen", "movement": "Head Up", "flow_in": 2.0, "flow_out": 1.0 },
+ 13: { "bot": "Helen", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 14: { "bot": "Helen", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 15: { "bot": "Helen", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 16: { "bot": "Helen", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 17: { "bot": "Munch", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 18: { "bot": "Munch", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 19: { "bot": "Munch", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 20: { "bot": "Munch", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 21: { "bot": "Munch", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 22: { "bot": "Munch", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 23: { "bot": "Munch", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 24: { "bot": "Munch", "movement": "Left Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 25: { "bot": "Jasper", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 26: { "bot": "Jasper", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 27: { "bot": "Jasper", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 28: { "bot": "Jasper", "movement": "Head Up", "flow_in": 2.0, "flow_out": 1.0 },
+ 29: { "bot": "Jasper", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 30: { "bot": "Jasper", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 31: { "bot": "Jasper", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 32: { "bot": "Jasper", "movement": "Strum", "flow_in": 2.0, "flow_out": 1.0 },
+ 33: { "bot": "Pasqually", "movement": "Mouth", "flow_in": 7.5, "flow_out": 6.0 },
+ 34: { "bot": "Pasqually", "movement": "Head Left", "flow_in": 1.5, "flow_out": 1.5 },
+ 35: { "bot": "Pasqually", "movement": "Head Right", "flow_in": 1.5, "flow_out": 1.5 },
+ 36: { "bot": "Pasqually", "movement": "Eyes Left", "flow_in": 4.0, "flow_out": 3.0 },
+ 37: { "bot": "Pasqually", "movement": "Eyes Right", "flow_in": 4.0, "flow_out": 3.0 },
+ 38: { "bot": "Pasqually", "movement": "Eyelids", "flow_in": 7.5, "flow_out": 5.0 },
+ 39: { "bot": "Pasqually", "movement": "Right Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ 40: { "bot": "Pasqually", "movement": "Left Arm", "flow_in": 2.0, "flow_out": 1.0 },
+ },
+
+ "cosmetics":
+ [
+ Cosmetics.CyberChuck,
+ Cosmetics.CyberHelen,
+ Cosmetics.CyberMunch,
+ Cosmetics.CyberJasper,
+ Cosmetics.CyberPasqually
+ ],
+ "cosmetic_defaults": [ 4, 4, 1, 1, 1, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 3 ]
+}
diff --git a/Scripts/Configs/Stages.gd.uid b/Scripts/Configs/Stages.gd.uid
new file mode 100644
index 0000000..4ee3bc3
--- /dev/null
+++ b/Scripts/Configs/Stages.gd.uid
@@ -0,0 +1 @@
+uid://cyrgqg7cf187y
diff --git a/Scripts/CosmeticAdjustment.gd b/Scripts/CosmeticAdjustment.gd
new file mode 100644
index 0000000..92235e3
--- /dev/null
+++ b/Scripts/CosmeticAdjustment.gd
@@ -0,0 +1,19 @@
+extends Control
+
+@export var vis_name: String
+@export var scene_handle: String
+@export var options: Dictionary
+@export var drop_index: int = 0
+
+func _ready() -> void:
+ $Panel/Label.text = vis_name
+ for option in options:
+ $Panel/OptionButton.add_item(option)
+ $Panel/OptionButton.select(drop_index)
+ for adjusted in options[$Panel/OptionButton.get_item_text(drop_index)]:
+ get_node(scene_handle+adjusted).visible = options[$Panel/OptionButton.get_item_text(drop_index)][adjusted]
+
+
+func _on_option_button_item_selected(index: int) -> void:
+ for adjusted in options[$Panel/OptionButton.get_item_text(index)]:
+ get_node(scene_handle+adjusted).visible = options[$Panel/OptionButton.get_item_text(index)][adjusted]
diff --git a/Scripts/CosmeticAdjustment.gd.uid b/Scripts/CosmeticAdjustment.gd.uid
new file mode 100644
index 0000000..832bd83
--- /dev/null
+++ b/Scripts/CosmeticAdjustment.gd.uid
@@ -0,0 +1 @@
+uid://1f7v3ohsgx0g
diff --git a/Scripts/CyberamicController.gd b/Scripts/CyberamicController.gd
new file mode 100644
index 0000000..4c8ee20
--- /dev/null
+++ b/Scripts/CyberamicController.gd
@@ -0,0 +1,117 @@
+extends Node3D
+
+var animation_player : AnimationPlayer
+var animation_tree : AnimationTree
+var blend_tree : AnimationNodeBlendTree
+
+var movement_states : Dictionary
+
+func _ready():
+ animation_player = $AnimationPlayer
+
+ animation_tree = AnimationTree.new()
+ animation_tree.anim_player = animation_player.get_path()
+ add_child(animation_tree)
+
+ animation_tree.tree_root = AnimationNodeBlendTree.new()
+ animation_tree.active = true
+ blend_tree = animation_tree.tree_root as AnimationNodeBlendTree
+
+ animation_player.speed_scale = 0
+
+ var animations = animation_player.get_animation_list()
+
+ for animation in animations:
+ movement_states[animation] = [false, 0.0, 0.0, 0.0]
+
+ var prev_name = "Anim_" + animations[0]
+ var old_time_name = "Time_" + animations[0]
+ var old_seek_name = "Seek_" + animations[0]
+
+ var prev_anim_node := AnimationNodeAnimation.new()
+ prev_anim_node.animation = animations[0]
+ blend_tree.add_node(prev_name, prev_anim_node)
+
+ var old_time_node := AnimationNodeTimeScale.new()
+ blend_tree.add_node(old_time_name,old_time_node)
+
+ var _old_seek_node := AnimationNodeTimeSeek.new()
+ blend_tree.add_node(old_seek_name,_old_seek_node)
+
+ blend_tree.connect_node(old_time_name,0,prev_name)
+ blend_tree.connect_node(old_seek_name,0,old_time_name)
+ prev_name = old_seek_name
+
+ for i in range(1, animations.size()):
+ var anim_name = "Anim_" + animations[i]
+ var add_name = "Add_" + animations[i]
+ var time_name = "Time_" + animations[i]
+ var seek_name = "Seek_" + animations[i]
+
+ var new_anim_node := AnimationNodeAnimation.new()
+ new_anim_node.animation = animations[i]
+ blend_tree.add_node(anim_name, new_anim_node)
+
+ var time_node := AnimationNodeTimeScale.new()
+ blend_tree.add_node(time_name,time_node)
+
+ var seek_node := AnimationNodeTimeSeek.new()
+ blend_tree.add_node(seek_name,seek_node)
+
+ var add_node := AnimationNodeAdd2.new()
+ blend_tree.add_node(add_name, add_node)
+
+ blend_tree.connect_node(time_name, 0, anim_name)
+ blend_tree.connect_node(seek_name, 0, time_name)
+ blend_tree.connect_node(add_name, 0, prev_name)
+ blend_tree.connect_node(add_name, 1, seek_name)
+ prev_name = add_name
+
+ blend_tree.connect_node("output", 0, prev_name)
+
+ for i in range(0, animations.size()):
+ animation_tree.set("parameters/Add_" + str(animations[i]) + "/add_amount", 1.0)
+ animation_tree.set("parameters/Seek_" + str(animations[i]) + "/seek_request", 0)
+ animation_tree.set("parameters/Time_" + str(animations[i]) + "/scale", 0)
+
+func _physics_process(delta: float) -> void:
+ for key in movement_states:
+ var anim_path = "parameters/Seek_" + key + "/seek_request"
+ var state = movement_states[key]
+ if (state[0]):
+ state[1] = clamp(float(state[1]) + (delta * state[2]), 0, 1)
+ else:
+ state[1] = clamp(float(state[1]) - (delta * state[3]), 0, 1)
+ animation_tree.set(anim_path, state[1])
+
+func _movement_in(movement, rate):
+ var adjusted_rate = rate
+ if (movement == "Head Left"):
+ if (movement_states["Head Right"][0]): adjusted_rate = rate*0.5
+ movement_states["Head Right"][0] = false
+ movement_states["Head Right"][3] = rate
+ movement_states["Body Left"][0] = true
+ movement_states["Body Left"][2] = rate*0.4
+ movement_states["Body Right"][0] = false
+ movement_states["Body Right"][3] = rate*0.4
+ elif (movement == "Head Right"):
+ if (movement_states["Head Left"][0]): adjusted_rate = rate*0.5
+ movement_states["Head Left"][0] = false
+ movement_states["Head Left"][3] = rate
+ movement_states["Body Right"][0] = true
+ movement_states["Body Right"][2] = rate*0.4
+ movement_states["Body Left"][0] = false
+ movement_states["Body Left"][3] = rate*0.4
+ movement_states[movement][0] = true
+ movement_states[movement][2] = adjusted_rate
+
+func _movement_out(movement, rate):
+ if (movement == "Head Left"):
+ movement_states["Body Right"][0] = false
+ movement_states["Body Right"][3] = 0
+ elif (movement == "Head Right"):
+ movement_states["Body Left"][0] = false
+ movement_states["Body Left"][3] = 0
+ else:
+ movement_states[movement][0] = false
+ movement_states[movement][3] = rate
diff --git a/Scripts/CyberamicController.gd.uid b/Scripts/CyberamicController.gd.uid
new file mode 100644
index 0000000..de4bc14
--- /dev/null
+++ b/Scripts/CyberamicController.gd.uid
@@ -0,0 +1 @@
+uid://du3pqtf3jixvl
diff --git a/Scripts/EditorScreen.gd b/Scripts/EditorScreen.gd
new file mode 100644
index 0000000..2769e64
--- /dev/null
+++ b/Scripts/EditorScreen.gd
@@ -0,0 +1,498 @@
+extends Control
+
+var playing : bool = false
+var recording : bool = false
+var index : int = 0
+var playback_rate : int = 1
+var transport_enabled : bool = false
+var erase_validated : bool = false
+var cam_index : int = 0
+var fullscreen : bool = false
+
+var showtape_loaded : bool = false
+var show_name : String
+
+var current_stage : String
+
+var stages_info = {
+ "Helen House": Stages.HelenHouse,
+ "Chuck E's Corner": Stages.ChuckEsCorner,
+ "Balcony Stage": Stages.BalconyStage,
+ "C-Stage": Stages.CStage,
+ "Prototype Road Stage": Stages.ProtoRoadStage,
+ "Cyber 3-Stage": Stages.Cyber3Stage
+}
+
+signal step(amount: int)
+signal start_recording()
+signal end_recording()
+signal return_to_zero()
+signal erase_all()
+
+func reload_stage() -> void:
+ $SequencerPanel/TimelinePanel/VScrollBar.value = 0
+ $FlyoutPanel/Movements/VScrollBar.value = 0
+ $FlyoutPanel/FlowControls/VScrollBar.value = 0
+ $CameraPreview.visible = false
+ for row in $SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.get_children():
+ row.queue_free()
+ for flow in $FlyoutPanel/FlowControls/InvisibleMask/FlowHandle.get_children():
+ flow.queue_free()
+ for movement in $FlyoutPanel/Movements/InvisibleMask/MovementHandle.get_children():
+ movement.queue_free()
+ for camera in $FlyoutPanel/Camera.get_children():
+ camera.queue_free()
+ for cosmetic_adjustment in $FlyoutPanel/Cosmetics/InvisibleMask/CosmeticsHandle.get_children():
+ cosmetic_adjustment.queue_free()
+ if ($SubViewport.get_child_count() > 0):
+ $SubViewport.get_child(0).queue_free()
+ cam_index = 0
+ var stage = load(stages_info[current_stage]["scene"]).instantiate()
+ $SubViewport.add_child(stage)
+
+ var cam_offset = 4
+ for i in range(1, stages_info[current_stage]["camera_count"]+1):
+ var camera_button = load("res://Scenes/GUI/Controls/CameraButton.tscn").instantiate()
+ camera_button.camera = "Angle " + str(i)
+ camera_button.base_scene_path = "../../../" + stages_info[current_stage]["scene_ref_base"]
+ camera_button.position.y = cam_offset
+ cam_offset += 36
+ $FlyoutPanel/Camera.add_child(camera_button)
+ $FlyoutPanel/Camera.size.y = cam_offset
+
+ var cosmetics_offset = 0
+ var cosmetics_count = 0
+ for cosmetic_subtable in stages_info[current_stage]["cosmetics"]:
+ for cosmetic in cosmetic_subtable:
+ var cosmetic_adjustment = load("res://Scenes/GUI/Controls/CosmeticAdjustment.tscn").instantiate()
+ cosmetic_adjustment.vis_name = cosmetic
+ cosmetic_adjustment.options = cosmetic_subtable[cosmetic]
+ cosmetic_adjustment.scene_handle = "../../../../../" + stages_info[current_stage]["scene_ref_base"]
+ cosmetic_adjustment.drop_index = stages_info[current_stage]["cosmetic_defaults"][cosmetics_count]
+ cosmetic_adjustment.position.y = cosmetics_offset
+ cosmetics_offset += 44
+ cosmetics_count += 1
+ $FlyoutPanel/Cosmetics/InvisibleMask/CosmeticsHandle.add_child(cosmetic_adjustment)
+ $FlyoutPanel/Cosmetics/VScrollBar.max_value = cosmetics_count - 1
+
+ var rows_offset = 0
+ var flows_offset = 0
+ var flow_count = 0
+ for bit_number in stages_info[current_stage]["bit_mapping"]:
+ var bot = stages_info[current_stage]["bit_mapping"][bit_number]["bot"]
+ var movement = stages_info[current_stage]["bit_mapping"][bit_number]["movement"]
+
+ var in_flow = stages_info[current_stage]["bit_mapping"][bit_number]["flow_in"]
+ var out_flow = stages_info[current_stage]["bit_mapping"][bit_number]["flow_out"]
+ if (in_flow is not String):
+ var flow_control = load("res://Scenes/GUI/Controls/FlowControl.tscn").instantiate()
+ flow_control.position.y = flows_offset
+ flow_control.name = str(bit_number) + bot + movement + current_stage
+ flow_control.vis_name = bot + " " + movement
+ flow_control.in_value = in_flow
+ flow_control.out_value = out_flow
+ $FlyoutPanel/FlowControls/InvisibleMask/FlowHandle.add_child(flow_control)
+ flows_offset += 44
+ flow_count += 1
+
+ var row = load("res://Scenes/GUI/Controls/MovementRow.tscn").instantiate()
+ row.name = str(bit_number) + " Bit"
+ row.position.y = rows_offset
+ row.base_scene_path = "../../../../../" + stages_info[current_stage]["scene_ref_base"]
+ row.animatronic = bot
+ row.current_stage = current_stage
+ if (in_flow is String): row.flow_path = "None"
+ row.movement_bit = bit_number
+ row.movement_name = movement
+ $SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.add_child(row, true)
+
+ var movement_button = load("res://Scenes/GUI/Controls/MovementButton.tscn").instantiate()
+ movement_button.position.y = rows_offset
+ movement_button.base_scene_path = "../../../../../" + stages_info[current_stage]["scene_ref_base"]
+ movement_button.animatronic = bot
+ movement_button.movement_bit = bit_number
+ movement_button.current_stage = current_stage
+ if (in_flow is String): movement_button.flow_path = "None"
+ movement_button.movement_name = movement
+ $FlyoutPanel/Movements/InvisibleMask/MovementHandle.add_child(movement_button)
+ rows_offset += 44
+ $SequencerPanel/TimelinePanel/VScrollBar.max_value = stages_info[current_stage]["bits"] - 1
+ $FlyoutPanel/Movements/VScrollBar.max_value = stages_info[current_stage]["bits"] - 1
+ $FlyoutPanel/FlowControls/VScrollBar.max_value = flow_count - 1
+ $CameraPreview.visible = true
+
+func _on_stage_change_overwrite_confirmation_dialog_confirmed() -> void:
+ erase_all.emit()
+ current_stage = $MenuBar/StageSelector.get_item_text($MenuBar/StageSelector.selected)
+ reload_stage()
+
+func update_time_label() -> void:
+ var frames = index % 60
+ var seconds = floori(index/60.0) % 60
+ var minutes = floori(index/3600.0) % 60
+ var hours = floori(index/216000.0)
+ $SequencerPanel/TransportControls/TimeLabel.text = "%d:%02d:%02d:%02d" % [hours, minutes, seconds, frames]
+
+func set_transport_enabled(enabled: bool):
+ $SequencerPanel/TransportControls/Centered/StepBackwardsButton.disabled = !enabled
+ $SequencerPanel/TransportControls/Centered/FastBackwardsButton.disabled = !enabled
+ $SequencerPanel/TransportControls/Centered/PlayBackwardsButton.disabled = !enabled
+ $SequencerPanel/TransportControls/Centered/PauseButton.disabled = !enabled
+ $SequencerPanel/TransportControls/Centered/StopButton.disabled = !enabled
+ $SequencerPanel/TransportControls/Centered/PlayButton.disabled = !enabled
+ $SequencerPanel/TransportControls/Centered/FastForwardButton.disabled = !enabled
+ $SequencerPanel/TransportControls/Centered/StepForwardButton.disabled = !enabled
+ $SequencerPanel/TransportControls/RecordButton.disabled = !enabled
+ transport_enabled = enabled
+
+func _ready() -> void:
+ get_tree().get_root().size_changed.connect(_on_size_changed)
+ erase_all.connect(_erase_all)
+ $MenuBar/MenuButton.get_popup().id_pressed.connect(_showtape_menu_button_pressed)
+ OS.request_permissions()
+ current_stage = $MenuBar/StageSelector.get_item_text($MenuBar/StageSelector.selected)
+ reload_stage()
+
+func _on_stage_selector_item_selected(_index: int) -> void:
+ if (showtape_loaded): $StageChangeOverwriteConfirmationDialog.show()
+ else:
+ current_stage = $MenuBar/StageSelector.get_item_text($MenuBar/StageSelector.selected)
+ reload_stage()
+
+func _showtape_menu_button_pressed(id: int) -> void:
+ match (id):
+ 0: #new
+ if (showtape_loaded): $NewOverwriteConfirmationDialog.show()
+ else: $ShowtapeNewScreen.visible = true
+ 1: #load
+ if (showtape_loaded): $LoadOverwriteConfirmationDialog.show()
+ else: $ShowtapeLoadScreen.visible = true
+ 2: #save
+ if (showtape_loaded): $ShowtapeSaveScreen.visible = true
+ else: $NoShowtapeLoadedDialog.show()
+
+
+func _on_showtape_new_audio_browse_button_pressed() -> void:
+ $OpenAudioFileDialog.show()
+
+func _on_open_audio_file_dialog_file_selected(path: String) -> void:
+ $ShowtapeNewScreen/DialogPanel/AudioFilePath.text = path
+
+func _on_showtape_new_cancel_button_pressed() -> void:
+ $ShowtapeNewScreen/DialogPanel/AudioFilePath.text = ""
+ $ShowtapeNewScreen/DialogPanel/ShowNameTextBox.text = ""
+ $ShowtapeNewScreen.visible = false
+
+func _on_showtape_new_create_button_pressed() -> void:
+ if (!FileAccess.file_exists($ShowtapeNewScreen/DialogPanel/AudioFilePath.text.strip_edges())):
+ $FileDoesntExistDialog.show()
+ return
+ if ($ShowtapeNewScreen/DialogPanel/ShowNameTextBox.text.strip_edges() == ""):
+ $EmptyStringDialog.show()
+ return
+ show_name = $ShowtapeNewScreen/DialogPanel/ShowNameTextBox.text.strip_edges()
+ $AudioStreamPlayer.stream = load_audio($ShowtapeNewScreen/DialogPanel/AudioFilePath.text.strip_edges())
+ set_transport_enabled(true)
+ showtape_loaded = true
+ $MenuBar/EditingLabel.text = "Editing: " + show_name
+ $ShowtapeNewScreen/DialogPanel/AudioFilePath.text = ""
+ $ShowtapeNewScreen/DialogPanel/ShowNameTextBox.text = ""
+ $ShowtapeNewScreen.visible = false
+
+func _on_new_overwrite_confirmation_dialog_confirmed() -> void:
+ erase_all.emit()
+ $ShowtapeNewScreen.visible = true
+
+func _on_open_showtape_file_dialog_file_selected(path: String) -> void:
+ $ShowtapeLoadScreen/DialogPanel/InFilePath.text = path
+
+func _on_showtape_load_in_browse_button_pressed() -> void:
+ $OpenShowtapeFileDialog.show()
+
+func _on_showtape_load_cancel_button_pressed() -> void:
+ $ShowtapeLoadScreen/DialogPanel/InFilePath.text = ""
+ $ShowtapeLoadScreen.visible = false
+
+func _on_showtape_load_open_button_pressed() -> void:
+ if (!FileAccess.file_exists($ShowtapeLoadScreen/DialogPanel/InFilePath.text.strip_edges())):
+ $FileDoesntExistDialog.show()
+ return
+ var file = FileAccess.open($ShowtapeLoadScreen/DialogPanel/InFilePath.text.strip_edges(), FileAccess.READ)
+ var content = file.get_as_text()
+ var header = content.split(";")[0].split(",")
+ if (header[1] != "2"):
+ $IncorrectShowtapeDialog.dialog_text = "This showtape is not the correct version!"
+ $IncorrectShowtapeDialog.show()
+ return
+ if (header[3] != stages_info[current_stage]["ust_type"]):
+ $IncorrectShowtapeDialog.dialog_text = "This showtape is not compatible with the currently selected stage.\nShowtape stage type: %s\n Current stage type: %s" % [ header[3], stages_info[current_stage]["ust_type"] ]
+ $IncorrectShowtapeDialog.show()
+ return
+ show_name = header[2]
+ plot_data(content.split(";")[1])
+ $AudioStreamPlayer.stream = load_audio_from_buffer(Marshalls.base64_to_raw(content.split(";")[2]))
+ set_transport_enabled(true)
+ showtape_loaded = true
+ $MenuBar/EditingLabel.text = "Editing: " + show_name
+ $ShowtapeLoadScreen/DialogPanel/InFilePath.text = ""
+ $ShowtapeLoadScreen.visible = false
+
+func _on_load_overwrite_confirmation_dialog_confirmed() -> void:
+ erase_all.emit()
+ $ShowtapeLoadScreen.visible = true
+
+
+func _on_showtape_save_out_browse_button_pressed() -> void:
+ $SaveShowtapeFileDialog.show()
+
+func _on_showtape_save_create_button_pressed() -> void:
+ if ($ShowtapeSaveScreen/DialogPanel/OutFilePath.text == ""):
+ $NoFileSpecified.show()
+ return
+ var header = "UST,2,"+show_name.replace(",", "_").replace(";", "_")+","+stages_info[current_stage]["ust_type"]+";"
+ var data_out_string = save_data()
+ var file = FileAccess.open($ShowtapeSaveScreen/DialogPanel/OutFilePath.text, FileAccess.WRITE)
+ file.store_string(header+data_out_string+";"+Marshalls.raw_to_base64($AudioStreamPlayer.stream.data))
+ file.close()
+ $ShowtapeSaveScreen/DialogPanel/OutFilePath.text = ""
+ $ShowtapeSaveScreen.visible = false
+
+func _on_showtape_save_cancel_button_pressed() -> void:
+ $ShowtapeSaveScreen/DialogPanel/OutFilePath.text = ""
+ $ShowtapeSaveScreen.visible = false
+
+func _on_save_showtape_file_dialog_file_selected(path: String) -> void:
+ $ShowtapeSaveScreen/DialogPanel/OutFilePath.text = path
+
+func _input(event: InputEvent) -> void:
+ if event.is_action_pressed("toggle_editor_screen"):
+ $CameraPreview.visible = !$CameraPreview.visible;
+ $CameraFullScreen.visible = !$CameraFullScreen.visible;
+ if event.is_action_pressed("fullscreen"):
+ if (!fullscreen):
+ fullscreen = true
+ DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
+ else:
+ fullscreen = false
+ DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
+ if (event.is_action_pressed("cycle_camera_angle")):
+ cam_index += 1
+ get_node(stages_info[current_stage]["scene_ref_base"] + "Angle " + str((cam_index % stages_info[current_stage]["camera_count"])+1)).current = true
+ if (transport_enabled):
+ if event.is_action_pressed("sequencer_play_pause"):
+ if (playing): _on_pause_button_pressed()
+ else: _on_play_button_pressed()
+ elif event.is_action_pressed("sequencer_play_reverse"):
+ _on_play_backwards_button_pressed()
+ elif event.is_action_pressed("sequencer_fast_reverse"):
+ _on_fast_backwards_button_pressed()
+ elif event.is_action_pressed("sequencer_fast_forward"):
+ _on_fast_forward_button_pressed()
+ elif event.is_action_pressed("sequencer_step_backward"):
+ _on_step_backwards_button_pressed()
+ elif event.is_action_pressed("sequencer_step_forward"):
+ _on_step_forward_button_pressed()
+ elif event.is_action_pressed("sequencer_home"):
+ _on_stop_button_pressed()
+
+func _physics_process(_delta: float) -> void:
+ if (playing):
+ step.emit(playback_rate)
+ index += playback_rate
+ if (index <= 0): _on_stop_button_pressed()
+ update_time_label()
+
+func load_audio(path: String) -> AudioStream:
+ var sound
+ match (path.split(".")[-1]):
+ "mp3":
+ sound = AudioStreamMP3.load_from_file(path)
+ "wav":
+ sound = AudioStreamWAV.load_from_file(path)
+ "ogg":
+ sound = AudioStreamOggVorbis.load_from_file(path)
+ return sound
+
+func load_audio_from_buffer(data: PackedByteArray) -> AudioStream:
+ var sound
+ match (data[0]):
+ 73:
+ sound = AudioStreamMP3.load_from_buffer(data)
+ 82:
+ sound = AudioStreamWAV.load_from_buffer(data)
+ 79:
+ sound = AudioStreamOggVorbis.load_from_buffer(data)
+ return sound
+
+func _on_size_changed() -> void:
+ $SubViewport.size = $ColorRect.size
+
+func _on_controls_button_pressed() -> void:
+ $ControlsScreen.visible = true
+
+func _on_credits_button_pressed() -> void:
+ $CreditsScreen.visible = true
+
+func _on_input_eater_pressed() -> void:
+ $ControlsScreen.visible = false
+ $CreditsScreen.visible = false
+ $ShowtapeNewScreen.visible = false
+ $ShowtapeLoadScreen.visible = false
+ $ShowtapeSaveScreen.visible = false
+
+func _on_v_scroll_bar_value_changed(value: float) -> void:
+ $SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.position.y = value * -44
+
+func _on_flow_v_scroll_bar_value_changed(value: float) -> void:
+ $FlyoutPanel/FlowControls/InvisibleMask/FlowHandle.position.y = value * -44
+
+func _on_movement_v_scroll_bar_value_changed(value: float) -> void:
+ $FlyoutPanel/Movements/InvisibleMask/MovementHandle.position.y = value * -44
+
+func _on_cosmetics_v_scroll_bar_value_changed(value: float) -> void:
+ $FlyoutPanel/Cosmetics/InvisibleMask/CosmeticsHandle.position.y = value * -44
+
+func _erase_all() -> void:
+ playing = false
+ $AudioStreamPlayer.stop()
+ $AudioStreamPlayer.seek(0)
+ $SequencerPanel/TransportControls/RecordButton.button_pressed = false
+ index = 0
+ update_time_label()
+ show_name = ""
+ $AudioStreamPlayer.stream = null
+ set_transport_enabled(false)
+ showtape_loaded = false
+ $MenuBar/EditingLabel.text = "No showtape loaded."
+
+func _on_movements_flyout_button_toggled(toggled_on: bool) -> void:
+ $FlyoutPanel/Movements.visible = toggled_on
+
+func _on_flows_flyout_button_toggled(toggled_on: bool) -> void:
+ $FlyoutPanel/FlowControls.visible = toggled_on
+
+func _on_camera_flyout_button_toggled(toggled_on: bool) -> void:
+ $FlyoutPanel/Camera.visible = toggled_on
+
+func _on_cosmetics_flyout_button_toggled(toggled_on: bool) -> void:
+ $FlyoutPanel/Cosmetics.visible = toggled_on
+
+
+func _on_play_button_pressed() -> void:
+ playback_rate = 1
+ $AudioStreamPlayer.pitch_scale = 1
+ $AudioStreamPlayer.play(float(index)/60.0)
+ playing = true
+
+func _on_pause_button_pressed() -> void:
+ $AudioStreamPlayer.stop()
+ playing = false
+
+func _on_play_backwards_button_pressed() -> void:
+ playback_rate = -1
+ $AudioStreamPlayer.stop() # cant play backwards :(
+ playing = true
+ $SequencerPanel/TransportControls/RecordButton.button_pressed = false
+
+func _on_fast_backwards_button_pressed() -> void:
+ playback_rate = -2
+ $AudioStreamPlayer.stop() # cant play backwards :(
+ playing = true
+ $SequencerPanel/TransportControls/RecordButton.button_pressed = false
+
+func _on_step_backwards_button_pressed() -> void:
+ playing = false
+ $AudioStreamPlayer.stop()
+ $SequencerPanel/TransportControls/RecordButton.button_pressed = false
+ if (index != 0):
+ step.emit(-1)
+ index -= 1
+ update_time_label()
+
+func _on_fast_forward_button_pressed() -> void:
+ playback_rate = 2
+ $AudioStreamPlayer.pitch_scale = 2
+ $AudioStreamPlayer.play(float(index)/60.0)
+ playing = true
+ $SequencerPanel/TransportControls/RecordButton.button_pressed = false
+
+func _on_step_forward_button_pressed() -> void:
+ playing = false
+ $AudioStreamPlayer.stop()
+ $SequencerPanel/TransportControls/RecordButton.button_pressed = false
+ step.emit(1)
+ index += 1
+ update_time_label()
+
+func _on_record_button_toggled(toggled_on: bool) -> void:
+ if (playing):
+ # starting recording while playing causes issues
+ _on_stop_button_pressed()
+ recording = toggled_on
+ if (toggled_on): start_recording.emit()
+ else: end_recording.emit()
+
+func _on_stop_button_pressed() -> void:
+ playing = false
+ $AudioStreamPlayer.stop()
+ $AudioStreamPlayer.seek(0)
+ $SequencerPanel/TransportControls/RecordButton.button_pressed = false
+ index = 0
+ return_to_zero.emit()
+ update_time_label()
+
+func save_data() -> String:
+ var write_out : String = ""
+ var temp_data = {}
+ var longest_channel = 0
+ for movement_row in $SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.get_children():
+ temp_data[movement_row.movement_bit] = movement_row.movements
+ if (movement_row.movements.size() > longest_channel): longest_channel = movement_row.movements.size()
+ for i in range(longest_channel+1):
+ var total_frame_index = 1
+ var fstring = ""
+ for j in range(64):
+ var f_quartet = 0
+ for k in range(4):
+ if (index_get_safe(i, index_s_get_safe(total_frame_index, temp_data))):
+ f_quartet += int(pow(2, k))
+ total_frame_index += 1
+ fstring = ("%01X" % f_quartet) + fstring
+ write_out += fstring + ","
+ return write_out
+
+func plot_data(data: String):
+ start_recording.emit()
+ var evil_glass = []
+ for movement_row in $SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.get_children():
+ evil_glass.append(movement_row.movement_bit)
+ for frame_string in data.split(","):
+ if (frame_string == ""): continue
+ var check_frame_split = frame_string.split()
+ check_frame_split.reverse()
+ for i in stages_info[current_stage]["bit_mapping"]:
+ var er = false
+ if ((check_frame_split[(i - 1) / 4].hex_to_int() & int(pow(2, ((i - 1) % 4)))) == int(pow(2, ((i - 1) % 4)))):
+ er = true
+ $SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.get_child(evil_glass.find(i)).forced_etchable = true
+ $SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.get_child(evil_glass.find(i)).etching = er
+ step.emit(1)
+ for movement_row in $SequencerPanel/TimelinePanel/InvisibleMask/MovementRowsContainer.get_children():
+ movement_row.forced_etchable = false
+ movement_row.etching = false
+ end_recording.emit()
+ return_to_zero.emit()
+
+func index_get_safe(cindex: int, data: Array[bool]) -> bool:
+ if (cindex > data.size()-1): return false
+ if (cindex < 0): return false
+ var out = data.get(cindex)
+ if (out == null): return false
+ return out
+
+func index_s_get_safe(cindex: int, data: Dictionary) -> Array[bool]:
+ if (cindex > data.size()-1): return [ false ]
+ if (cindex < 0): return [ false ]
+ var out = data.get(cindex)
+ if (out == null): return [ false ]
+ return out
diff --git a/Scripts/EditorScreen.gd.uid b/Scripts/EditorScreen.gd.uid
new file mode 100644
index 0000000..b1ff1e5
--- /dev/null
+++ b/Scripts/EditorScreen.gd.uid
@@ -0,0 +1 @@
+uid://dfiwoln8mdwm8
diff --git a/Scripts/FlowControl.gd b/Scripts/FlowControl.gd
new file mode 100644
index 0000000..66de06e
--- /dev/null
+++ b/Scripts/FlowControl.gd
@@ -0,0 +1,21 @@
+extends Control
+
+@export var in_value : float = 1.0
+@export var out_value : float = 1.0
+@export var vis_name : String = ""
+
+signal in_value_updated(new_value: float)
+signal out_value_updated(new_value: float)
+
+func _ready() -> void:
+ $Panel/Label.text = self.vis_name
+ $Panel/InStepper.value = self.in_value
+ $Panel/OutStepper.value = self.out_value
+
+func _on_in_stepper_value_changed(value: float) -> void:
+ self.in_value = value
+ in_value_updated.emit(value)
+
+func _on_out_stepper_value_changed(value: float) -> void:
+ self.out_value = value
+ out_value_updated.emit(value)
diff --git a/Scripts/FlowControl.gd.uid b/Scripts/FlowControl.gd.uid
new file mode 100644
index 0000000..e71dd11
--- /dev/null
+++ b/Scripts/FlowControl.gd.uid
@@ -0,0 +1 @@
+uid://blhv0kms1sleu
diff --git a/Scripts/LightController.gd b/Scripts/LightController.gd
new file mode 100644
index 0000000..b5dc91d
--- /dev/null
+++ b/Scripts/LightController.gd
@@ -0,0 +1,7 @@
+extends Node3D
+
+func _movement_in(movement, _rate):
+ get_node(movement).visible = true
+
+func _movement_out(movement, _rate):
+ get_node(movement).visible = false
diff --git a/Scripts/LightController.gd.uid b/Scripts/LightController.gd.uid
new file mode 100644
index 0000000..2a8204c
--- /dev/null
+++ b/Scripts/LightController.gd.uid
@@ -0,0 +1 @@
+uid://d1p4ite8ts2wi
diff --git a/Scripts/MovementButton.gd b/Scripts/MovementButton.gd
new file mode 100644
index 0000000..2e7e1c5
--- /dev/null
+++ b/Scripts/MovementButton.gd
@@ -0,0 +1,41 @@
+extends Control
+
+signal movement_in(movement, rate)
+signal movement_out(movement, rate)
+
+@export var animatronic : String
+@export var movement_bit : int
+@export var current_stage : String
+@export var base_scene_path : String
+@export var flow_path : String = "../../../../../FlyoutPanel/FlowControls/InvisibleMask/FlowHandle/"
+@export var movement_name : String
+
+var in_flow : float = 1.0
+var out_flow : float = 1.0
+
+func _ready() -> void:
+ $Panel/Button.text = animatronic + " " + movement_name
+ if (animatronic != "None"):
+ var animatronic_node = get_node(base_scene_path + animatronic)
+ movement_in.connect(animatronic_node._movement_in)
+ movement_out.connect(animatronic_node._movement_out)
+ if (flow_path != "None"):
+ var flow_control = get_node(flow_path + str(movement_bit) + animatronic + movement_name + current_stage)
+ flow_control.in_value_updated.connect(self._update_in_flow)
+ flow_control.out_value_updated.connect(self._update_out_flow)
+ in_flow = flow_control.in_value
+ out_flow = flow_control.out_value
+
+func _update_in_flow(new_value: float) -> void:
+ in_flow = new_value
+
+func _update_out_flow(new_value: float) -> void:
+ out_flow = new_value
+
+func _on_button_button_down() -> void:
+ movement_in.emit(movement_name, in_flow)
+ $Panel/IndicatorPanel/Green.visible = true
+
+func _on_button_button_up() -> void:
+ movement_out.emit(movement_name, out_flow)
+ $Panel/IndicatorPanel/Green.visible = false
diff --git a/Scripts/MovementButton.gd.uid b/Scripts/MovementButton.gd.uid
new file mode 100644
index 0000000..acb38ca
--- /dev/null
+++ b/Scripts/MovementButton.gd.uid
@@ -0,0 +1 @@
+uid://cg157l4uo7ki8
diff --git a/Scripts/MovementFrameIndicator.gd b/Scripts/MovementFrameIndicator.gd
new file mode 100644
index 0000000..67590fe
--- /dev/null
+++ b/Scripts/MovementFrameIndicator.gd
@@ -0,0 +1,6 @@
+extends Control
+
+@export var x_offset : int = 0
+
+func _ready() -> void:
+ self.size.x += x_offset
diff --git a/Scripts/MovementFrameIndicator.gd.uid b/Scripts/MovementFrameIndicator.gd.uid
new file mode 100644
index 0000000..ce8fc88
--- /dev/null
+++ b/Scripts/MovementFrameIndicator.gd.uid
@@ -0,0 +1 @@
+uid://b4qincechbf63
diff --git a/Scripts/MovementRow.gd b/Scripts/MovementRow.gd
new file mode 100644
index 0000000..b02c8c3
--- /dev/null
+++ b/Scripts/MovementRow.gd
@@ -0,0 +1,176 @@
+extends Panel
+
+@export var movement_bit : int = 0
+@export var movement_name : String = "Name"
+@export var flow_path : String = "../../../../../FlyoutPanel/FlowControls/InvisibleMask/FlowHandle/"
+@export var base_scene_path : String
+@export var current_stage : String
+@export var animatronic : String
+@export var movements : Array[bool]
+@export var etching: bool = false
+@export var forced_etchable: bool = false
+
+var in_flow : float = 1.0
+var out_flow : float = 1.0
+
+var key_binding : InputEventKey = InputEventKey.new()
+var current_index : int = 0
+var binding : bool = false
+var held_on_previous_frame : bool = false
+var playback_held_on_previous_frame : bool = false
+var recording : bool = false
+var playing : bool = true
+var current_block_indicator
+
+signal movement_in(movement, rate)
+signal movement_out(movement, rate)
+
+func set_at_current() -> void:
+ if (current_index > self.movements.size()-1): self.movements.append(true)
+ else: self.movements.set(current_index, true)
+ if (check_at_index(current_index-1)): current_block_indicator.get_node("ColorRect").size.x += 2
+ else:
+ current_block_indicator = load("res://Scenes/GUI/Controls/MovementFrameIndicatorOn.tscn").instantiate()
+ current_block_indicator.position.x = current_index * 2
+ $MovementsBG/InvisibleMask/MovementsHandle.add_child(current_block_indicator)
+
+func unset_at_current() -> void:
+ if (current_index > self.movements.size()-1): self.movements.append(false)
+ else: self.movements.set(current_index, false)
+ if (!check_at_index(current_index-1)): current_block_indicator.get_node("ColorRect").size.x += 2
+ else:
+ current_block_indicator = load("res://Scenes/GUI/Controls/MovementFrameIndicatorOff.tscn").instantiate()
+ current_block_indicator.position.x = current_index * 2
+ $MovementsBG/InvisibleMask/MovementsHandle.add_child(current_block_indicator)
+
+func check_at_current() -> bool:
+ if (current_index > self.movements.size()-1): return false
+ var out = self.movements.get(current_index)
+ if (out == null): return false
+ return out
+
+func check_at_index(cindex: int) -> bool:
+ if (cindex > self.movements.size()-1): return false
+ if (cindex < 0): return false
+ var out = self.movements.get(cindex)
+ if (out == null): return false
+ return out
+
+func check_if_erasing() -> bool:
+ if (forced_etchable): return true
+ return (!$LockButton.button_pressed) && key_binding.keycode != 0
+
+func _step(amount: int):
+ if (recording && check_if_erasing()):
+ if (etching): set_at_current()
+ else: unset_at_current()
+ if (playing):
+ if (check_at_current()):
+ if (!playback_held_on_previous_frame):
+ movement_in.emit(movement_name, in_flow)
+ playback_held_on_previous_frame = true;
+ else:
+ if (playback_held_on_previous_frame):
+ movement_out.emit(movement_name, out_flow)
+ playback_held_on_previous_frame = false;
+ current_index += amount
+ $MovementsBG/InvisibleMask/MovementsHandle.position.x += -2*amount
+
+func _return_to_zero():
+ current_index = 0
+ $MovementsBG/InvisibleMask/MovementsHandle.position.x = 120
+ movement_out.emit(movement_name, out_flow)
+
+func _erase_all() -> void:
+ _return_to_zero()
+ _on_clear_button_pressed()
+
+func _start_recording():
+ recording = true
+
+func _end_recording():
+ recording = false
+
+func _start_playback():
+ playing = true
+
+func _end_playback():
+ playing = false
+
+func update_text() -> void:
+ if (animatronic == "None"): $Button.text = "%d - Unused (%s)" % [movement_bit, key_binding.as_text() if key_binding.keycode != 0 else "Unbound"]
+ else: $Button.text = "%d - %s %s (%s)" % [movement_bit, animatronic, movement_name, key_binding.as_text() if key_binding.keycode != 0 else "Unbound"]
+
+func _update_in_flow(new_value: float) -> void:
+ in_flow = new_value
+
+func _update_out_flow(new_value: float) -> void:
+ out_flow = new_value
+
+func _ready() -> void:
+ if (flow_path != "None"):
+ var flow_control = get_node(flow_path + str(movement_bit) + animatronic + movement_name + current_stage)
+ flow_control.in_value_updated.connect(self._update_in_flow)
+ flow_control.out_value_updated.connect(self._update_out_flow)
+ in_flow = flow_control.in_value
+ out_flow = flow_control.out_value
+ if (animatronic != "None"):
+ var animatronic_node = get_node(base_scene_path + animatronic)
+ movement_in.connect(animatronic_node._movement_in)
+ movement_out.connect(animatronic_node._movement_out)
+ movement_in.connect(self._movement_in)
+ movement_out.connect(self._movement_out)
+ var editor = get_node("../../../../../")
+ editor.step.connect(_step)
+ editor.start_recording.connect(_start_recording)
+ editor.end_recording.connect(_end_recording)
+ editor.return_to_zero.connect(_return_to_zero)
+ editor.erase_all.connect(_erase_all)
+ current_block_indicator = load("res://Scenes/GUI/Controls/MovementFrameIndicatorOff.tscn").instantiate()
+ update_text()
+
+func _process(_delta: float) -> void:
+ if (binding || key_binding.keycode == 0): return
+ if (Input.is_key_pressed(key_binding.keycode)):
+ if (!held_on_previous_frame):
+ movement_in.emit(movement_name, in_flow)
+ held_on_previous_frame = true;
+ else:
+ if (held_on_previous_frame):
+ movement_out.emit(movement_name, out_flow)
+ held_on_previous_frame = false;
+
+func _movement_in(_movement, _rate):
+ $ActiveBG.visible = true
+ if (recording): etching = true
+
+func _movement_out(_movement, _rate):
+ $ActiveBG.visible = false
+ etching = false
+
+func _on_button_pressed() -> void:
+ if (binding):
+ update_text()
+ binding = false
+ return
+ if (key_binding.keycode == 0):
+ $Button.text = "Press a key to bind."
+ binding = true
+ else:
+ key_binding.keycode = KEY_NONE
+ update_text()
+
+func _input(event: InputEvent) -> void:
+ if (event is InputEventKey && binding):
+ if (event.keycode != KEY_ESCAPE):
+ key_binding = event
+ binding = false
+ update_text()
+ return
+
+func _on_clear_button_pressed() -> void:
+ if ($LockButton.button_pressed): return
+ movements = []
+ for indicator in $MovementsBG/InvisibleMask/MovementsHandle.get_children():
+ indicator.queue_free()
+ current_block_indicator = load("res://Scenes/GUI/Controls/MovementFrameIndicatorOff.tscn").instantiate()
diff --git a/Scripts/MovementRow.gd.uid b/Scripts/MovementRow.gd.uid
new file mode 100644
index 0000000..14caf71
--- /dev/null
+++ b/Scripts/MovementRow.gd.uid
@@ -0,0 +1 @@
+uid://tn3aaldu7mm2
diff --git a/Stages.md b/Stages.md
new file mode 100644
index 0000000..1d2d586
--- /dev/null
+++ b/Stages.md
@@ -0,0 +1,80 @@
+# Stages
+
+## Currently in game
+
+ - Balcony Stage
+ - C Stage
+
+ - Helen House (homemade stage)
+ - Chuck E's Corner (homemade stage)
+
+## In Development
+
+ - Rocker Stage
+ - Prototype Road Stage
+ - Road Stage
+ - 2-Stage
+ - 1-Stage
+ - Turntable 1-Stage
+ - Cyberamic 3-Stage
+
+## Planned
+
+### Cyberamics
+
+ - Portrait Stage
+ - Shelf Stage (Portrait stage with Balcony mechs)
+
+
+### 3-Stage
+
+ - 3-Stage
+ - CU 1-Stage
+ - Hollywood 3-Stage
+
+
+### Studio C
+
+ - Studio C Alpha
+ - Studio C Alpha 3-Stage
+ - Studio C Jukebox/"Prototype"
+ - Studio C Beta (3 Screens)
+ - Studio C Beta (1 Screen)
+ - Studio C Cappa (Mirror Backdrop)
+ - Studio C Cappa (Spiral Backdrop)
+ - Studio C Cappa (Beta Backdrop)
+ - Star Stage
+ - Studio C Beta (2012 Update)
+ - Circles of Light
+
+### Other
+
+ - Winchester Portrait Stage
+ - Kooser Portrait Stage
+ - Store specific variants (Lake Forest, Staten Island, Jeddah, Huntsville)
+
+
+## Far future (unlikely without model contributions)
+
+ - Rock-afire Explosion
+ - Mini Stage (RAE)
+ - Magic Stage (RAE)
+ - Hannah Banana Stage
+ - Playroom 3-Stage
+ - Winter 3-Stage
+ - Awesome Adventure Machine
+ - Concept Unification Prototype
+ - Guest Stars (Portrait/Balcony stages)
+ - Cabaret (Dolli Dimples, Artie Antlers, B.B. Bubbles, Dr. Quack)
+ - Lounge (The King, King Kat, Helen Henny, Beach Bowsers, The Beagles)
+ - Latex masks for 3-Stage
+
+
+## Never
+
+ - 2015 Dance Floor
+ - 2017 Dance Floor
+ - 2019 Dance Floor
+ - 2021 Dance Floor + Video Wall
+ - Dance Floor + Circles of Light
+ - Anything to do with The Mopsey Sisters
diff --git a/UI/BlankCam.png b/UI/BlankCam.png
new file mode 100644
index 0000000..822a25f
Binary files /dev/null and b/UI/BlankCam.png differ
diff --git a/UI/BlankCam.png.import b/UI/BlankCam.png.import
new file mode 100644
index 0000000..876e952
--- /dev/null
+++ b/UI/BlankCam.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://s3yr2wasxv03"
+path="res://.godot/imported/BlankCam.png-3a3fce0de965b84e3e9f90ae65ca082a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/BlankCam.png"
+dest_files=["res://.godot/imported/BlankCam.png-3a3fce0de965b84e3e9f90ae65ca082a.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/UI/FastBackwards.png b/UI/FastBackwards.png
new file mode 100644
index 0000000..9bfcd28
Binary files /dev/null and b/UI/FastBackwards.png differ
diff --git a/UI/FastBackwards.png.import b/UI/FastBackwards.png.import
new file mode 100644
index 0000000..a9eb6b8
--- /dev/null
+++ b/UI/FastBackwards.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dhx2v2fd0egxd"
+path="res://.godot/imported/FastBackwards.png-f55ba91d8d237cb6919d5f2a056db594.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/FastBackwards.png"
+dest_files=["res://.godot/imported/FastBackwards.png-f55ba91d8d237cb6919d5f2a056db594.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/UI/FastForward.png b/UI/FastForward.png
new file mode 100644
index 0000000..93f5dff
Binary files /dev/null and b/UI/FastForward.png differ
diff --git a/UI/FastForward.png.import b/UI/FastForward.png.import
new file mode 100644
index 0000000..f24b413
--- /dev/null
+++ b/UI/FastForward.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dsr03w7r667fw"
+path="res://.godot/imported/FastForward.png-acbfeb2710bea5385ca8ad13fa6699e8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/FastForward.png"
+dest_files=["res://.godot/imported/FastForward.png-acbfeb2710bea5385ca8ad13fa6699e8.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/UI/Pause.png b/UI/Pause.png
new file mode 100644
index 0000000..2892111
Binary files /dev/null and b/UI/Pause.png differ
diff --git a/UI/Pause.png.import b/UI/Pause.png.import
new file mode 100644
index 0000000..1d6d8e3
--- /dev/null
+++ b/UI/Pause.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bwhgy4u37jmo1"
+path="res://.godot/imported/Pause.png-90c47ed988bd7d26b746eb81a6aaeedf.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/Pause.png"
+dest_files=["res://.godot/imported/Pause.png-90c47ed988bd7d26b746eb81a6aaeedf.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/UI/Play.png b/UI/Play.png
new file mode 100644
index 0000000..378ce01
Binary files /dev/null and b/UI/Play.png differ
diff --git a/UI/Play.png.import b/UI/Play.png.import
new file mode 100644
index 0000000..e17e752
--- /dev/null
+++ b/UI/Play.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://xllpr3qc064c"
+path="res://.godot/imported/Play.png-eec0d54380d32c59b84e7db5fa226d5e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/Play.png"
+dest_files=["res://.godot/imported/Play.png-eec0d54380d32c59b84e7db5fa226d5e.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/UI/PlayBackwards.png b/UI/PlayBackwards.png
new file mode 100644
index 0000000..37f25b2
Binary files /dev/null and b/UI/PlayBackwards.png differ
diff --git a/UI/PlayBackwards.png.import b/UI/PlayBackwards.png.import
new file mode 100644
index 0000000..2e32746
--- /dev/null
+++ b/UI/PlayBackwards.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dgacnkv2dc65s"
+path="res://.godot/imported/PlayBackwards.png-52f3d5b871717feab369f20308dd695c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/PlayBackwards.png"
+dest_files=["res://.godot/imported/PlayBackwards.png-52f3d5b871717feab369f20308dd695c.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/UI/PneumaticPlaything.icon/Assets/cylinder.svg b/UI/PneumaticPlaything.icon/Assets/cylinder.svg
new file mode 100644
index 0000000..d6749de
--- /dev/null
+++ b/UI/PneumaticPlaything.icon/Assets/cylinder.svg
@@ -0,0 +1,87 @@
+
+
+
+
diff --git a/UI/PneumaticPlaything.icon/Assets/cylinder.svg.import b/UI/PneumaticPlaything.icon/Assets/cylinder.svg.import
new file mode 100644
index 0000000..5c56810
--- /dev/null
+++ b/UI/PneumaticPlaything.icon/Assets/cylinder.svg.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://1eluxvmnj7l7"
+path="res://.godot/imported/cylinder.svg-7c12310ad8fca6e1f959909a64d6d065.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/PneumaticPlaything.icon/Assets/cylinder.svg"
+dest_files=["res://.godot/imported/cylinder.svg-7c12310ad8fca6e1f959909a64d6d065.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/UI/PneumaticPlaything.icon/Assets/green_lines.svg b/UI/PneumaticPlaything.icon/Assets/green_lines.svg
new file mode 100644
index 0000000..ce9309e
--- /dev/null
+++ b/UI/PneumaticPlaything.icon/Assets/green_lines.svg
@@ -0,0 +1,69 @@
+
+
+
+
diff --git a/UI/PneumaticPlaything.icon/Assets/green_lines.svg.import b/UI/PneumaticPlaything.icon/Assets/green_lines.svg.import
new file mode 100644
index 0000000..6881607
--- /dev/null
+++ b/UI/PneumaticPlaything.icon/Assets/green_lines.svg.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dkg2eh0tfbji4"
+path="res://.godot/imported/green_lines.svg-af1cb631137e1105ee7be8775d8a5016.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/PneumaticPlaything.icon/Assets/green_lines.svg"
+dest_files=["res://.godot/imported/green_lines.svg-af1cb631137e1105ee7be8775d8a5016.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/UI/PneumaticPlaything.icon/icon.json b/UI/PneumaticPlaything.icon/icon.json
new file mode 100644
index 0000000..1b2358d
--- /dev/null
+++ b/UI/PneumaticPlaything.icon/icon.json
@@ -0,0 +1,68 @@
+{
+ "fill" : {
+ "automatic-gradient" : "srgb:0.12984,0.12985,0.12984,1.00000"
+ },
+ "groups" : [
+ {
+ "layers" : [
+ {
+ "blend-mode" : "normal",
+ "fill" : {
+ "automatic-gradient" : "srgb:1.00000,1.00000,1.00000,1.00000"
+ },
+ "glass" : true,
+ "image-name" : "cylinder.svg",
+ "name" : "cylinder",
+ "position" : {
+ "scale" : 3,
+ "translation-in-points" : [
+ 0,
+ 0
+ ]
+ }
+ }
+ ],
+ "shadow" : {
+ "kind" : "neutral",
+ "opacity" : 0.5
+ },
+ "translucency" : {
+ "enabled" : true,
+ "value" : 0.5
+ }
+ },
+ {
+ "layers" : [
+ {
+ "fill" : {
+ "automatic-gradient" : "srgb:0.00000,0.97680,0.00000,1.00000"
+ },
+ "image-name" : "green_lines.svg",
+ "name" : "green_lines",
+ "opacity" : 1,
+ "position" : {
+ "scale" : 3.4,
+ "translation-in-points" : [
+ 0,
+ 0
+ ]
+ }
+ }
+ ],
+ "shadow" : {
+ "kind" : "neutral",
+ "opacity" : 0.5
+ },
+ "translucency" : {
+ "enabled" : true,
+ "value" : 0.5
+ }
+ }
+ ],
+ "supported-platforms" : {
+ "circles" : [
+ "watchOS"
+ ],
+ "squares" : "shared"
+ }
+}
\ No newline at end of file
diff --git a/UI/Record.png b/UI/Record.png
new file mode 100644
index 0000000..4ffe48f
Binary files /dev/null and b/UI/Record.png differ
diff --git a/UI/Record.png.import b/UI/Record.png.import
new file mode 100644
index 0000000..2d19281
--- /dev/null
+++ b/UI/Record.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ckg2ihy105ttj"
+path="res://.godot/imported/Record.png-52d5a1455899304e32054af5c940c434.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/Record.png"
+dest_files=["res://.godot/imported/Record.png-52d5a1455899304e32054af5c940c434.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/UI/SkipBackwards.png b/UI/SkipBackwards.png
new file mode 100644
index 0000000..f3e1d5a
Binary files /dev/null and b/UI/SkipBackwards.png differ
diff --git a/UI/SkipBackwards.png.import b/UI/SkipBackwards.png.import
new file mode 100644
index 0000000..0e46ac4
--- /dev/null
+++ b/UI/SkipBackwards.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dts4eh6hyt8p3"
+path="res://.godot/imported/SkipBackwards.png-dfebc48054bc60d9671fc8d69c696237.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/SkipBackwards.png"
+dest_files=["res://.godot/imported/SkipBackwards.png-dfebc48054bc60d9671fc8d69c696237.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/UI/SkipForward.png b/UI/SkipForward.png
new file mode 100644
index 0000000..29c5dec
Binary files /dev/null and b/UI/SkipForward.png differ
diff --git a/UI/SkipForward.png.import b/UI/SkipForward.png.import
new file mode 100644
index 0000000..eef54cb
--- /dev/null
+++ b/UI/SkipForward.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bphwtliq2ahus"
+path="res://.godot/imported/SkipForward.png-ca36b20fa5c982368f6b620245865f56.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/SkipForward.png"
+dest_files=["res://.godot/imported/SkipForward.png-ca36b20fa5c982368f6b620245865f56.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/UI/SmallLock.png b/UI/SmallLock.png
new file mode 100644
index 0000000..b5bc9f0
Binary files /dev/null and b/UI/SmallLock.png differ
diff --git a/UI/SmallLock.png.import b/UI/SmallLock.png.import
new file mode 100644
index 0000000..ea363c7
--- /dev/null
+++ b/UI/SmallLock.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d007317123e27"
+path="res://.godot/imported/SmallLock.png-0c9e5ce04a7421f0922124b2fb1d8696.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/SmallLock.png"
+dest_files=["res://.godot/imported/SmallLock.png-0c9e5ce04a7421f0922124b2fb1d8696.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/UI/SmallX.png b/UI/SmallX.png
new file mode 100644
index 0000000..157eba5
Binary files /dev/null and b/UI/SmallX.png differ
diff --git a/UI/SmallX.png.import b/UI/SmallX.png.import
new file mode 100644
index 0000000..7b9fa19
--- /dev/null
+++ b/UI/SmallX.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cn5xdrxdv622h"
+path="res://.godot/imported/SmallX.png-fca237bd1b13d37241a1ac9e982c446b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/SmallX.png"
+dest_files=["res://.godot/imported/SmallX.png-fca237bd1b13d37241a1ac9e982c446b.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/UI/Stop.png b/UI/Stop.png
new file mode 100644
index 0000000..a008b37
Binary files /dev/null and b/UI/Stop.png differ
diff --git a/UI/Stop.png.import b/UI/Stop.png.import
new file mode 100644
index 0000000..9659f7c
--- /dev/null
+++ b/UI/Stop.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cttgtbu1xllwq"
+path="res://.godot/imported/Stop.png-28cf49bd72d354d073c38f19027d6ddb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/Stop.png"
+dest_files=["res://.godot/imported/Stop.png-28cf49bd72d354d073c38f19027d6ddb.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/UI/Themes/Dark.tres b/UI/Themes/Dark.tres
new file mode 100644
index 0000000..cb4f782
--- /dev/null
+++ b/UI/Themes/Dark.tres
@@ -0,0 +1,16 @@
+[gd_resource type="Theme" load_steps=2 format=3 uid="uid://dbgs4id7y5d1c"]
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6oevq"]
+bg_color = Color(0.133333, 0.133333, 0.133333, 1)
+border_width_left = 1
+border_width_top = 1
+border_width_right = 1
+border_width_bottom = 1
+border_color = Color(0.0941176, 0.0941176, 0.0941176, 1)
+corner_radius_top_left = 4
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
+corner_radius_bottom_left = 4
+
+[resource]
+Panel/styles/panel = SubResource("StyleBoxFlat_6oevq")
diff --git a/UI/Themes/MovementsPanelOverride.tres b/UI/Themes/MovementsPanelOverride.tres
new file mode 100644
index 0000000..3055b66
--- /dev/null
+++ b/UI/Themes/MovementsPanelOverride.tres
@@ -0,0 +1,6 @@
+[gd_resource type="StyleBoxFlat" format=3 uid="uid://d17amc25o63p1"]
+
+[resource]
+bg_color = Color(0.0941176, 0.0941176, 0.0941176, 1)
+corner_radius_top_right = 4
+corner_radius_bottom_right = 4
diff --git a/UI/icon-32px.png b/UI/icon-32px.png
new file mode 100644
index 0000000..16574f1
Binary files /dev/null and b/UI/icon-32px.png differ
diff --git a/UI/icon-32px.png.import b/UI/icon-32px.png.import
new file mode 100644
index 0000000..6250137
--- /dev/null
+++ b/UI/icon-32px.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bpb3xn54kpxoe"
+path="res://.godot/imported/icon-32px.png-601da436f7467fcd6c395054742650f3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/icon-32px.png"
+dest_files=["res://.godot/imported/icon-32px.png-601da436f7467fcd6c395054742650f3.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/UI/icon-512px.png b/UI/icon-512px.png
new file mode 100644
index 0000000..245e811
Binary files /dev/null and b/UI/icon-512px.png differ
diff --git a/UI/icon-512px.png.import b/UI/icon-512px.png.import
new file mode 100644
index 0000000..fea0caa
--- /dev/null
+++ b/UI/icon-512px.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://den5alc77qk1s"
+path="res://.godot/imported/icon-512px.png-a2c06b50a2747ba3e5b560ba78d8d161.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/icon-512px.png"
+dest_files=["res://.godot/imported/icon-512px.png-a2c06b50a2747ba3e5b560ba78d8d161.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/UI/icon-round.png b/UI/icon-round.png
new file mode 100644
index 0000000..fdbbf6c
Binary files /dev/null and b/UI/icon-round.png differ
diff --git a/UI/icon-round.png.import b/UI/icon-round.png.import
new file mode 100644
index 0000000..5f55748
--- /dev/null
+++ b/UI/icon-round.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://yqg6bh2fiumf"
+path="res://.godot/imported/icon-round.png-d13b0f9c2aed0f892b01044430866017.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/icon-round.png"
+dest_files=["res://.godot/imported/icon-round.png-d13b0f9c2aed0f892b01044430866017.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/UI/icon.icns b/UI/icon.icns
new file mode 100644
index 0000000..cf6eb7e
Binary files /dev/null and b/UI/icon.icns differ
diff --git a/UI/icon.ico b/UI/icon.ico
new file mode 100644
index 0000000..59409c5
Binary files /dev/null and b/UI/icon.ico differ
diff --git a/UI/icon.png b/UI/icon.png
new file mode 100644
index 0000000..fc311ca
Binary files /dev/null and b/UI/icon.png differ
diff --git a/UI/icon.png.import b/UI/icon.png.import
new file mode 100644
index 0000000..10cbd4d
--- /dev/null
+++ b/UI/icon.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cnvfrr028730a"
+path="res://.godot/imported/icon.png-d44ad423496976af115f803f6386bc82.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://UI/icon.png"
+dest_files=["res://.godot/imported/icon.png-d44ad423496976af115f803f6386bc82.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/project.godot b/project.godot
new file mode 100644
index 0000000..9923792
--- /dev/null
+++ b/project.godot
@@ -0,0 +1,408 @@
+; Engine configuration file.
+; It's best edited using the editor UI and not directly,
+; since the parameters that go here are not all obvious.
+;
+; Format:
+; [section] ; section goes between []
+; param=value ; assign values to parameters
+
+config_version=5
+
+[application]
+
+config/name="Pneumatic Plaything"
+config/description="Animatronic Simulator"
+config/version="v0.7"
+run/main_scene="uid://oiehbor0dlqx"
+config/features=PackedStringArray("4.4", "GL Compatibility")
+boot_splash/show_image=false
+config/icon="uid://den5alc77qk1s"
+config/macos_native_icon="res://UI/icon.icns"
+config/windows_native_icon="res://UI/icon.ico"
+
+[autoload]
+
+Cosmetics="*res://Scripts/Configs/Cosmetics.gd"
+Stages="*res://Scripts/Configs/Stages.gd"
+
+[display]
+
+window/size/viewport_width=1280
+window/size/viewport_height=720
+
+[filesystem]
+
+import/blender/enabled=false
+
+[input]
+
+ui_accept={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+ui_select={
+"deadzone": 0.5,
+"events": []
+}
+ui_cancel={
+"deadzone": 0.5,
+"events": []
+}
+ui_focus_next={
+"deadzone": 0.5,
+"events": []
+}
+ui_focus_prev={
+"deadzone": 0.5,
+"events": []
+}
+ui_left={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
+]
+}
+ui_right={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194321,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
+]
+}
+ui_up={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194320,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
+]
+}
+ui_down={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194322,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
+]
+}
+ui_page_up={
+"deadzone": 0.5,
+"events": []
+}
+ui_page_down={
+"deadzone": 0.5,
+"events": []
+}
+ui_home={
+"deadzone": 0.5,
+"events": []
+}
+ui_end={
+"deadzone": 0.5,
+"events": []
+}
+ui_cut={
+"deadzone": 0.5,
+"events": []
+}
+ui_copy={
+"deadzone": 0.5,
+"events": []
+}
+ui_paste={
+"deadzone": 0.5,
+"events": []
+}
+ui_undo={
+"deadzone": 0.5,
+"events": []
+}
+ui_redo={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_completion_query={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_completion_accept={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_completion_replace={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_newline={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_newline_blank={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_newline_above={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_indent={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_dedent={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_backspace_word={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_backspace_word.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_backspace_all_to_left.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_delete_word={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_delete_word.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_delete_all_to_right.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_left={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_word_left={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_word_left.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_right={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_word_right={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_word_right.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_up={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_down={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_line_start={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_line_start.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_line_end={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_line_end.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_page_up={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_page_down={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_document_start={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_document_start.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_document_end={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_document_end.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_add_below={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_add_below.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_add_above={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_caret_add_above.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_scroll_up={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_scroll_up.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_scroll_down={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_scroll_down.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_select_all={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_select_word_under_caret={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_select_word_under_caret.macos={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_add_selection_for_next_occurrence={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_skip_selection_for_next_occurrence={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_clear_carets_and_selection={
+"deadzone": 0.5,
+"events": []
+}
+ui_text_toggle_insert_mode={
+"deadzone": 0.5,
+"events": []
+}
+ui_menu={
+"deadzone": 0.5,
+"events": []
+}
+ui_unicode_start={
+"deadzone": 0.5,
+"events": []
+}
+ui_graph_duplicate={
+"deadzone": 0.5,
+"events": []
+}
+ui_graph_delete={
+"deadzone": 0.5,
+"events": []
+}
+ui_filedialog_up_one_level={
+"deadzone": 0.5,
+"events": []
+}
+ui_filedialog_refresh={
+"deadzone": 0.5,
+"events": []
+}
+ui_filedialog_show_hidden={
+"deadzone": 0.5,
+"events": []
+}
+ui_swap_input_direction={
+"deadzone": 0.5,
+"events": []
+}
+toggle_editor_screen={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":true,"script":null)
+]
+}
+sequencer_play_pause={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
+]
+}
+sequencer_play_reverse={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
+]
+}
+sequencer_fast_forward={
+"deadzone": 0.2,
+"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":5,"axis_value":1.0,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+sequencer_fast_reverse={
+"deadzone": 0.2,
+"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+sequencer_step_forward={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":10,"pressure":0.0,"pressed":true,"script":null)
+]
+}
+sequencer_step_backward={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":9,"pressure":0.0,"pressed":true,"script":null)
+]
+}
+cycle_camera_angle={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":false,"script":null)
+]
+}
+sequencer_home={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194317,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
+]
+}
+fullscreen={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194342,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+
+[rendering]
+
+renderer/rendering_method="gl_compatibility"
+renderer/rendering_method.mobile="gl_compatibility"
+textures/vram_compression/import_etc2_astc=true
+limits/opengl/max_renderable_lights=128
+limits/opengl/max_lights_per_object=128