├── .gitignore ├── 2d_mechanics ├── 2d_mechanics_style_demo.tscn ├── castle │ ├── castle_mat.tres │ ├── castle_pack.glb │ ├── castle_pack.glb.import │ ├── castle_pack.tscn │ ├── door.obj │ ├── door.obj.import │ ├── secondary_color.tres │ └── test_scene │ │ └── castle_test_scene.tscn ├── characters │ ├── bat │ │ ├── bat.tscn │ │ └── parts │ │ │ ├── bat_head.png │ │ │ ├── bat_head.png.import │ │ │ ├── bat_wing.png │ │ │ └── bat_wing.png.import │ ├── slime │ │ ├── parts │ │ │ ├── slime_body.png │ │ │ ├── slime_body.png.import │ │ │ ├── slime_body_hurt.png │ │ │ ├── slime_body_hurt.png.import │ │ │ ├── slime_face.png │ │ │ ├── slime_face.png.import │ │ │ ├── slime_hurt_eyes.png │ │ │ └── slime_hurt_eyes.png.import │ │ ├── slime.gd │ │ └── slime.tscn │ └── square │ │ ├── parts │ │ ├── square_body.png │ │ ├── square_body.png.import │ │ ├── square_face.png │ │ ├── square_face.png.import │ │ ├── square_foot.png │ │ ├── square_foot.png.import │ │ ├── square_lower_leg.png │ │ ├── square_lower_leg.png.import │ │ ├── square_ref.png │ │ ├── square_ref.png.import │ │ ├── square_upper_leg.png │ │ └── square_upper_leg.png.import │ │ ├── square.gd │ │ ├── square.tscn │ │ └── square_modification_stack.tres ├── circle.png ├── circle.png.import ├── ground_shadow.png ├── ground_shadow.png.import ├── pistol │ ├── TestPistol.gd │ ├── impact │ │ ├── impact.gd │ │ └── impact.tscn │ ├── muzzle_flash.gd │ ├── muzzle_flash.png │ ├── muzzle_flash.png.import │ ├── muzzle_flash.tscn │ ├── pistol.gd │ ├── pistol.png │ ├── pistol.png.import │ └── pistol.tscn ├── projectile │ ├── projectile.gd │ ├── projectile.png │ ├── projectile.png.import │ └── projectile.tscn ├── test_player │ ├── test_player.gd │ └── test_player.tscn └── trees │ ├── pine_tree.png │ ├── pine_tree.png.import │ └── pine_tree.tscn ├── 3d_mechanics ├── 3d_mechanics_style_demo.tscn ├── checkboard.png ├── checkboard.png.import ├── elements │ ├── button │ │ ├── button.gd │ │ ├── button.glb │ │ ├── button.glb.import │ │ └── button.tscn │ ├── connector.gd │ ├── cube.glb │ ├── cube.glb.import │ ├── door │ │ ├── door.gd │ │ ├── door.glb │ │ ├── door.glb.import │ │ ├── door.tscn │ │ └── door_fade_mat.tres │ ├── gears │ │ ├── gears.gd │ │ ├── gears.glb │ │ ├── gears.glb.import │ │ └── gears.tscn │ ├── goal │ │ ├── goal.glb │ │ ├── goal.glb.import │ │ ├── goal.tscn │ │ └── goal_flag.gdshader │ ├── lever │ │ ├── lever.gd │ │ ├── lever.glb │ │ ├── lever.glb.import │ │ └── lever.tscn │ ├── lightbulb │ │ ├── bulb_mat.tres │ │ ├── lightbulb.gd │ │ ├── lightbulb.glb │ │ ├── lightbulb.glb.import │ │ └── lightbulb.tscn │ ├── pipes │ │ ├── pipe.glb │ │ ├── pipe.glb.import │ │ └── pipe.tscn │ ├── platform │ │ └── Platform.gd │ └── switch.gd ├── first_color.tres ├── second_color.tres └── sounds │ ├── PM_MMM_FREE_9_BONUS_PM_Steampunk_Mechanical_Loop_120BPM_9.mp3 │ ├── PM_MMM_FREE_9_BONUS_PM_Steampunk_Mechanical_Loop_120BPM_9.mp3.import │ ├── PM_OF_Electro_Magnetic_One_Shots_5.mp3 │ ├── PM_OF_Electro_Magnetic_One_Shots_5.mp3.import │ ├── bathroom_door.mp3 │ ├── bathroom_door.mp3.import │ ├── zapsplat_household_remote_control_plastic_button_press_cheap_single_007_73400.mp3 │ ├── zapsplat_household_remote_control_plastic_button_press_cheap_single_007_73400.mp3.import │ ├── zapsplat_vehicles_car_column_stalk_lever_single_movement_002_80087.mp3 │ └── zapsplat_vehicles_car_column_stalk_lever_single_movement_002_80087.mp3.import ├── README.md ├── icon.svg ├── icon.svg.import ├── project.godot └── screenshots ├── .gdignore ├── 2d_example.png └── 3d_example.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Godot 4+ specific ignores 2 | .godot/ 3 | exports/ 4 | bin/ 5 | 6 | .env -------------------------------------------------------------------------------- /2d_mechanics/2d_mechanics_style_demo.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=10 format=3 uid="uid://wl8x1xrnv5mv"] 2 | 3 | [ext_resource type="PackedScene" path="res://2d_mechanics/characters/bat/bat.tscn" id="1_1qf7g"] 4 | [ext_resource type="PackedScene" path="res://2d_mechanics/trees/pine_tree.tscn" id="1_q7jyy"] 5 | [ext_resource type="PackedScene" path="res://2d_mechanics/characters/slime/slime.tscn" id="2_qdjtg"] 6 | [ext_resource type="PackedScene" path="res://2d_mechanics/test_player/test_player.tscn" id="3_kq48k"] 7 | [ext_resource type="Script" path="res://2d_mechanics/pistol/TestPistol.gd" id="5_vq8xg"] 8 | [ext_resource type="PackedScene" path="res://2d_mechanics/pistol/pistol.tscn" id="5_x8mh6"] 9 | [ext_resource type="PackedScene" path="res://2d_mechanics/projectile/projectile.tscn" id="7_kciyk"] 10 | [ext_resource type="PackedScene" path="res://2d_mechanics/pistol/muzzle_flash.tscn" id="8_ibwt7"] 11 | [ext_resource type="PackedScene" path="res://2d_mechanics/pistol/impact/impact.tscn" id="9_nr1nm"] 12 | 13 | [node name="TestScene" type="Node"] 14 | 15 | [node name="World2D" type="Node2D" parent="."] 16 | y_sort_enabled = true 17 | 18 | [node name="Trees" type="Node2D" parent="World2D"] 19 | y_sort_enabled = true 20 | 21 | [node name="PineTree" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 22 | position = Vector2(304, 569) 23 | 24 | [node name="PineTree2" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 25 | position = Vector2(373, 502) 26 | 27 | [node name="PineTree3" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 28 | position = Vector2(242, 491) 29 | 30 | [node name="PineTree4" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 31 | position = Vector2(1190, 829) 32 | 33 | [node name="PineTree6" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 34 | position = Vector2(90, 678) 35 | 36 | [node name="PineTree7" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 37 | position = Vector2(1259, 892) 38 | 39 | [node name="PineTree8" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 40 | position = Vector2(1838, 589) 41 | 42 | [node name="PineTree9" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 43 | position = Vector2(1331, 382) 44 | 45 | [node name="PineTree10" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 46 | position = Vector2(1350, 783) 47 | 48 | [node name="PineTree11" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 49 | position = Vector2(1217, 645) 50 | 51 | [node name="PineTree12" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 52 | position = Vector2(1717, 1035) 53 | 54 | [node name="PineTree13" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 55 | position = Vector2(417, 983) 56 | 57 | [node name="PineTree14" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 58 | position = Vector2(486, 916) 59 | 60 | [node name="PineTree15" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 61 | position = Vector2(355, 905) 62 | 63 | [node name="PineTree16" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 64 | position = Vector2(1608, 360) 65 | 66 | [node name="PineTree17" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 67 | position = Vector2(1677, 293) 68 | 69 | [node name="PineTree18" parent="World2D/Trees" instance=ExtResource("1_q7jyy")] 70 | position = Vector2(1546, 282) 71 | 72 | [node name="Foes" type="Node2D" parent="World2D"] 73 | y_sort_enabled = true 74 | 75 | [node name="Bat" parent="World2D/Foes" instance=ExtResource("1_1qf7g")] 76 | position = Vector2(354, 386) 77 | 78 | [node name="Bat2" parent="World2D/Foes" instance=ExtResource("1_1qf7g")] 79 | position = Vector2(564, 522) 80 | 81 | [node name="Bat3" parent="World2D/Foes" instance=ExtResource("1_1qf7g")] 82 | position = Vector2(788, 282) 83 | 84 | [node name="Slime" parent="World2D/Foes" instance=ExtResource("2_qdjtg")] 85 | position = Vector2(970, 499) 86 | 87 | [node name="Slime3" parent="World2D/Foes" instance=ExtResource("2_qdjtg")] 88 | position = Vector2(363, 639) 89 | 90 | [node name="Slime2" parent="World2D/Foes" instance=ExtResource("2_qdjtg")] 91 | position = Vector2(742, 820) 92 | 93 | [node name="TestPlayer" parent="World2D" instance=ExtResource("3_kq48k")] 94 | position = Vector2(1049, 872) 95 | 96 | [node name="Camera2D" type="Camera2D" parent="World2D/TestPlayer"] 97 | position = Vector2(0, -87) 98 | position_smoothing_enabled = true 99 | 100 | [node name="PistolAnchor" type="Marker2D" parent="World2D/TestPlayer"] 101 | position = Vector2(0, -49) 102 | 103 | [node name="Pistol" parent="World2D/TestPlayer/PistolAnchor" instance=ExtResource("5_x8mh6")] 104 | position = Vector2(65, 0) 105 | 106 | [node name="TestPistol" type="Node2D" parent="." node_paths=PackedStringArray("pistol_anchor", "pistol")] 107 | script = ExtResource("5_vq8xg") 108 | pistol_anchor = NodePath("../World2D/TestPlayer/PistolAnchor") 109 | pistol = NodePath("../World2D/TestPlayer/PistolAnchor/Pistol") 110 | projectile_scene = ExtResource("7_kciyk") 111 | muzzle_flash_scene = ExtResource("8_ibwt7") 112 | impact_scene = ExtResource("9_nr1nm") 113 | 114 | [node name="Background" type="CanvasLayer" parent="."] 115 | layer = -1 116 | 117 | [node name="ColorRect" type="ColorRect" parent="Background"] 118 | anchors_preset = 15 119 | anchor_right = 1.0 120 | anchor_bottom = 1.0 121 | grow_horizontal = 2 122 | grow_vertical = 2 123 | color = Color(1, 0.976471, 0.941176, 1) 124 | metadata/_edit_lock_ = true 125 | -------------------------------------------------------------------------------- /2d_mechanics/castle/castle_mat.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="StandardMaterial3D" format=3 uid="uid://chhbmc226jksn"] 2 | 3 | [resource] 4 | albedo_color = Color(0.941176, 0.494118, 0.235294, 1) 5 | -------------------------------------------------------------------------------- /2d_mechanics/castle/castle_pack.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/castle/castle_pack.glb -------------------------------------------------------------------------------- /2d_mechanics/castle/castle_pack.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://x724eao0arw4" 7 | path="res://.godot/imported/castle_pack.glb-7ad0a638a15ea5073ecaf4f6ee1abd63.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://2d_mechanics/castle/castle_pack.glb" 12 | dest_files=["res://.godot/imported/castle_pack.glb-7ad0a638a15ea5073ecaf4f6ee1abd63.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | skins/use_named_skins=true 26 | animation/import=true 27 | animation/fps=30 28 | animation/trimming=false 29 | animation/remove_immutable_tracks=true 30 | import_script/path="" 31 | _subresources={} 32 | gltf/embedded_image_handling=1 33 | -------------------------------------------------------------------------------- /2d_mechanics/castle/castle_pack.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=3] 2 | 3 | [ext_resource type="PackedScene" uid="uid://x724eao0arw4" path="res://2d_mechanics/castle/castle_pack.glb" id="1_bgxmr"] 4 | [ext_resource type="Material" uid="uid://chhbmc226jksn" path="res://2d_mechanics/castle/castle_mat.tres" id="2_05so5"] 5 | [ext_resource type="Material" uid="uid://b6ltauw83vyjy" path="res://2d_mechanics/castle/secondary_color.tres" id="3_rlpm1"] 6 | 7 | [node name="castle_pack" instance=ExtResource("1_bgxmr")] 8 | 9 | [node name="top_corner" parent="." index="0"] 10 | surface_material_override/0 = ExtResource("2_05so5") 11 | 12 | [node name="top_open_side" parent="." index="1"] 13 | surface_material_override/0 = ExtResource("2_05so5") 14 | 15 | [node name="top_side" parent="." index="2"] 16 | surface_material_override/0 = ExtResource("2_05so5") 17 | 18 | [node name="corner" parent="." index="3"] 19 | surface_material_override/0 = ExtResource("2_05so5") 20 | 21 | [node name="side" parent="." index="4"] 22 | surface_material_override/0 = ExtResource("2_05so5") 23 | 24 | [node name="top_plain" parent="." index="5"] 25 | surface_material_override/0 = ExtResource("2_05so5") 26 | 27 | [node name="top_inside_corner" parent="." index="6"] 28 | surface_material_override/0 = ExtResource("2_05so5") 29 | 30 | [node name="door_hole" parent="." index="7"] 31 | lod_bias = 128.0 32 | surface_material_override/0 = ExtResource("2_05so5") 33 | 34 | [node name="window" parent="." index="8"] 35 | surface_material_override/0 = ExtResource("2_05so5") 36 | surface_material_override/1 = ExtResource("3_rlpm1") 37 | -------------------------------------------------------------------------------- /2d_mechanics/castle/door.obj: -------------------------------------------------------------------------------- 1 | # Blender 3.5.1 2 | # www.blender.org 3 | o door 4 | v -0.100000 0.025000 -0.775000 5 | v -0.075000 0.025000 -0.800000 6 | v -0.075000 0.000000 -0.775000 7 | v -0.092678 0.025000 -0.792678 8 | v -0.089434 0.010566 -0.789434 9 | v -0.075000 0.007322 -0.792678 10 | v -0.092678 0.007322 -0.775000 11 | v -0.100000 0.025000 0.775000 12 | v -0.075000 0.000000 0.775000 13 | v -0.075000 0.025000 0.800000 14 | v -0.092678 0.007322 0.775000 15 | v -0.089434 0.010566 0.789434 16 | v -0.075000 0.007322 0.792678 17 | v -0.092678 0.025000 0.792678 18 | v -0.100000 1.875000 -0.775000 19 | v -0.075000 1.900000 -0.775000 20 | v -0.075000 1.875000 -0.800000 21 | v -0.092678 1.892678 -0.775000 22 | v -0.089434 1.889434 -0.789434 23 | v -0.075000 1.892678 -0.792678 24 | v -0.092678 1.875000 -0.792678 25 | v -0.100000 1.875000 0.775000 26 | v -0.075000 1.875000 0.800000 27 | v -0.075000 1.900000 0.775000 28 | v -0.092678 1.875000 0.792678 29 | v -0.089434 1.889434 0.789434 30 | v -0.075000 1.892678 0.792678 31 | v -0.092678 1.892678 0.775000 32 | v 0.100000 0.025000 -0.775000 33 | v 0.075000 0.000000 -0.775000 34 | v 0.075000 0.025000 -0.800000 35 | v 0.092678 0.007322 -0.775000 36 | v 0.089434 0.010566 -0.789434 37 | v 0.075000 0.007322 -0.792678 38 | v 0.092678 0.025000 -0.792678 39 | v 0.100000 0.025000 0.775000 40 | v 0.075000 0.025000 0.800000 41 | v 0.075000 0.000000 0.775000 42 | v 0.092678 0.025000 0.792678 43 | v 0.089434 0.010566 0.789434 44 | v 0.075000 0.007322 0.792678 45 | v 0.092678 0.007322 0.775000 46 | v 0.100000 1.875000 -0.775000 47 | v 0.075000 1.875000 -0.800000 48 | v 0.075000 1.900000 -0.775000 49 | v 0.092678 1.875000 -0.792678 50 | v 0.089434 1.889434 -0.789434 51 | v 0.075000 1.892678 -0.792678 52 | v 0.092678 1.892678 -0.775000 53 | v 0.100000 1.875000 0.775000 54 | v 0.075000 1.900000 0.775000 55 | v 0.075000 1.875000 0.800000 56 | v 0.092678 1.892678 0.775000 57 | v 0.089434 1.889434 0.789434 58 | v 0.075000 1.892678 0.792678 59 | v 0.092678 1.875000 0.792678 60 | vn -0.0000 1.0000 -0.0000 61 | vn -0.0000 -1.0000 -0.0000 62 | vn -0.0000 -0.0000 -1.0000 63 | vn -0.0000 -0.0000 1.0000 64 | vn 1.0000 -0.0000 -0.0000 65 | vn -1.0000 -0.0000 -0.0000 66 | vn -0.7071 -0.0000 -0.7071 67 | vn -0.5773 -0.5773 -0.5774 68 | vn -0.7071 -0.7071 -0.0000 69 | vn -0.0000 -0.7071 -0.7071 70 | vn -0.5774 -0.5773 -0.5773 71 | vn -0.5773 -0.5773 0.5774 72 | vn -0.7071 -0.0000 0.7071 73 | vn -0.0000 -0.7071 0.7071 74 | vn -0.5773 -0.5774 0.5773 75 | vn -0.7071 0.7071 -0.0000 76 | vn -0.5773 0.5773 -0.5774 77 | vn -0.0000 0.7071 -0.7071 78 | vn -0.5773 0.5774 -0.5773 79 | vn -0.5773 0.5774 0.5773 80 | vn -0.0000 0.7071 0.7071 81 | vn -0.5773 0.5773 0.5774 82 | vn 0.7071 -0.7071 -0.0000 83 | vn 0.5773 -0.5773 -0.5774 84 | vn 0.7071 -0.0000 -0.7071 85 | vn 0.5773 -0.5774 -0.5773 86 | vn 0.7071 -0.0000 0.7071 87 | vn 0.5773 -0.5773 0.5774 88 | vn 0.5774 -0.5773 0.5773 89 | vn 0.5773 0.5774 -0.5773 90 | vn 0.7071 0.7071 -0.0000 91 | vn 0.5773 0.5773 -0.5774 92 | vn 0.5773 0.5773 0.5774 93 | vn 0.5773 0.5774 0.5773 94 | vn -1.0000 -0.0001 -0.0000 95 | vn -0.7071 -0.0001 -0.7071 96 | vn -1.0000 0.0001 -0.0000 97 | vn -0.7071 -0.0001 0.7071 98 | vn 1.0000 0.0001 -0.0000 99 | vn 0.7071 -0.0001 -0.7071 100 | vn 1.0000 -0.0001 -0.0000 101 | vn 0.7071 -0.0001 0.7071 102 | vn 0.7071 -0.7071 0.0001 103 | vn -0.7071 -0.7071 -0.0001 104 | vt 0.000000 0.000000 105 | vt 0.000000 0.000000 106 | vt 0.000000 0.000000 107 | vt 0.000000 0.000000 108 | vt 0.000000 0.000000 109 | vt 0.000000 0.000000 110 | vt 0.000000 0.000000 111 | vt 0.000000 0.000000 112 | vt 0.000000 0.000000 113 | vt 0.000000 0.000000 114 | vt 0.000000 0.000000 115 | vt 0.000000 0.000000 116 | vt 0.000000 0.000000 117 | vt 0.000000 0.000000 118 | vt 0.000000 0.000000 119 | vt 0.000000 0.000000 120 | vt 0.000000 0.000000 121 | vt 0.000000 0.000000 122 | vt 0.000000 0.000000 123 | vt 0.000000 0.000000 124 | vt 0.000000 0.000000 125 | vt 0.000000 0.000000 126 | vt 0.000000 0.000000 127 | vt 0.000000 0.000000 128 | vt 0.000000 0.000000 129 | vt 0.000000 0.000000 130 | vt 0.000000 0.000000 131 | vt 0.000000 0.000000 132 | vt 0.000000 0.000000 133 | vt 0.000000 0.000000 134 | vt 0.000000 0.000000 135 | vt 0.000000 0.000000 136 | vt 0.000000 0.000000 137 | vt 0.000000 0.000000 138 | vt 0.000000 0.000000 139 | vt 0.000000 0.000000 140 | vt 0.000000 0.000000 141 | vt 0.000000 0.000000 142 | vt 0.000000 0.000000 143 | vt 0.000000 0.000000 144 | vt 0.000000 0.000000 145 | vt 0.000000 0.000000 146 | vt 0.000000 0.000000 147 | vt 0.000000 0.000000 148 | vt 0.000000 0.000000 149 | vt 0.000000 0.000000 150 | vt 0.000000 0.000000 151 | vt 0.000000 0.000000 152 | vt 0.000000 0.000000 153 | vt 0.000000 0.000000 154 | vt 0.000000 0.000000 155 | vt 0.000000 0.000000 156 | vt 0.000000 0.000000 157 | vt 0.000000 0.000000 158 | vt 0.000000 0.000000 159 | vt 0.000000 0.000000 160 | s 0 161 | f 24/24/1 51/51/1 45/45/1 16/16/1 162 | f 9/9/2 3/3/2 30/30/2 38/38/2 163 | f 17/17/3 44/44/3 31/31/3 2/2/3 164 | f 10/10/4 37/37/4 52/52/4 23/23/4 165 | f 43/43/5 50/50/5 36/36/5 29/29/5 166 | f 1/1/6 4/4/7 5/5/8 7/7/9 167 | f 2/2/3 6/6/10 5/5/11 4/4/7 168 | f 3/3/2 7/7/9 5/5/8 6/6/10 169 | f 8/8/6 11/11/9 12/12/12 14/14/13 170 | f 9/9/2 13/13/14 12/12/12 11/11/9 171 | f 10/10/4 14/14/13 12/12/15 13/13/14 172 | f 15/15/6 18/18/16 19/19/17 21/21/7 173 | f 16/16/1 20/20/18 19/19/17 18/18/16 174 | f 17/17/3 21/21/7 19/19/19 20/20/18 175 | f 22/22/6 25/25/13 26/26/20 28/28/16 176 | f 23/23/4 27/27/21 26/26/20 25/25/13 177 | f 24/24/1 28/28/16 26/26/22 27/27/21 178 | f 29/29/5 32/32/23 33/33/24 35/35/25 179 | f 30/30/2 34/34/10 33/33/24 32/32/23 180 | f 31/31/3 35/35/25 33/33/26 34/34/10 181 | f 36/36/5 39/39/27 40/40/28 42/42/23 182 | f 37/37/4 41/41/14 40/40/29 39/39/27 183 | f 38/38/2 42/42/23 40/40/28 41/41/14 184 | f 43/43/5 46/46/25 47/47/30 49/49/31 185 | f 44/44/3 48/48/18 47/47/30 46/46/25 186 | f 45/45/1 49/49/31 47/47/32 48/48/18 187 | f 50/50/5 53/53/31 54/54/33 56/56/27 188 | f 51/51/1 55/55/21 54/54/33 53/53/31 189 | f 52/52/4 56/56/27 54/54/34 55/55/21 190 | f 1/1/6 15/15/35 21/21/7 4/4/36 191 | f 4/4/7 21/21/7 17/17/3 2/2/3 192 | f 22/22/6 8/8/37 14/14/13 25/25/38 193 | f 25/25/13 14/14/13 10/10/4 23/23/4 194 | f 43/43/5 29/29/39 35/35/25 46/46/40 195 | f 46/46/25 35/35/25 31/31/3 44/44/3 196 | f 36/36/5 50/50/41 56/56/27 39/39/42 197 | f 39/39/27 56/56/27 52/52/4 37/37/4 198 | f 51/51/1 24/24/1 27/27/21 55/55/21 199 | f 55/55/21 27/27/21 23/23/4 52/52/4 200 | f 16/16/1 45/45/1 48/48/18 20/20/18 201 | f 20/20/18 48/48/18 44/44/3 17/17/3 202 | f 9/9/2 38/38/2 41/41/14 13/13/14 203 | f 13/13/14 41/41/14 37/37/4 10/10/4 204 | f 30/30/2 3/3/2 6/6/10 34/34/10 205 | f 34/34/10 6/6/10 2/2/3 31/31/3 206 | f 15/15/6 22/22/6 28/28/16 18/18/16 207 | f 18/18/16 28/28/16 24/24/1 16/16/1 208 | f 50/50/5 43/43/5 49/49/31 53/53/31 209 | f 53/53/31 49/49/31 45/45/1 51/51/1 210 | f 29/29/5 36/36/5 42/42/23 32/32/43 211 | f 32/32/23 42/42/23 38/38/2 30/30/2 212 | f 3/3/2 9/9/2 11/11/9 7/7/9 213 | f 7/7/9 11/11/44 8/8/6 1/1/6 214 | f 1/1/6 8/8/6 22/22/6 15/15/6 215 | -------------------------------------------------------------------------------- /2d_mechanics/castle/door.obj.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wavefront_obj" 4 | importer_version=1 5 | type="Mesh" 6 | uid="uid://dgxafyq5bq471" 7 | path="res://.godot/imported/door.obj-f88cbb6a9cb610dd52ad8d8d8d2aa842.mesh" 8 | 9 | [deps] 10 | 11 | files=["res://.godot/imported/door.obj-f88cbb6a9cb610dd52ad8d8d8d2aa842.mesh"] 12 | 13 | source_file="res://2d_mechanics/castle/door.obj" 14 | dest_files=["res://.godot/imported/door.obj-f88cbb6a9cb610dd52ad8d8d8d2aa842.mesh", "res://.godot/imported/door.obj-f88cbb6a9cb610dd52ad8d8d8d2aa842.mesh"] 15 | 16 | [params] 17 | 18 | generate_tangents=true 19 | scale_mesh=Vector3(1, 1, 1) 20 | offset_mesh=Vector3(0, 0, 0) 21 | optimize_mesh=true 22 | -------------------------------------------------------------------------------- /2d_mechanics/castle/secondary_color.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="StandardMaterial3D" format=3 uid="uid://b6ltauw83vyjy"] 2 | 3 | [resource] 4 | albedo_color = Color(0.537255, 0.258824, 0.458824, 1) 5 | -------------------------------------------------------------------------------- /2d_mechanics/characters/bat/bat.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=12 format=3] 2 | 3 | [ext_resource type="Texture2D" uid="uid://b7rhtttevhxtj" path="res://2d_mechanics/ground_shadow.png" id="1_s6me0"] 4 | [ext_resource type="Texture2D" uid="uid://ce3knynqcic4g" path="res://2d_mechanics/characters/bat/parts/bat_wing.png" id="1_ylg8o"] 5 | [ext_resource type="Texture2D" uid="uid://7cxk5tx8ok48" path="res://2d_mechanics/characters/bat/parts/bat_head.png" id="2_ivd55"] 6 | 7 | [sub_resource type="Animation" id="Animation_84x66"] 8 | length = 0.001 9 | tracks/0/type = "value" 10 | tracks/0/imported = false 11 | tracks/0/enabled = true 12 | tracks/0/path = NodePath("Anchor/Body:position") 13 | tracks/0/interp = 1 14 | tracks/0/loop_wrap = true 15 | tracks/0/keys = { 16 | "times": PackedFloat32Array(0), 17 | "transitions": PackedFloat32Array(1), 18 | "update": 0, 19 | "values": [Vector2(0, 0)] 20 | } 21 | tracks/1/type = "value" 22 | tracks/1/imported = false 23 | tracks/1/enabled = true 24 | tracks/1/path = NodePath("Anchor/Body/BatWing:rotation") 25 | tracks/1/interp = 1 26 | tracks/1/loop_wrap = true 27 | tracks/1/keys = { 28 | "times": PackedFloat32Array(0), 29 | "transitions": PackedFloat32Array(1), 30 | "update": 0, 31 | "values": [0.0] 32 | } 33 | tracks/2/type = "value" 34 | tracks/2/imported = false 35 | tracks/2/enabled = true 36 | tracks/2/path = NodePath("Anchor/Body/BatWing2:rotation") 37 | tracks/2/interp = 1 38 | tracks/2/loop_wrap = true 39 | tracks/2/keys = { 40 | "times": PackedFloat32Array(0), 41 | "transitions": PackedFloat32Array(1), 42 | "update": 0, 43 | "values": [0.0] 44 | } 45 | tracks/3/type = "value" 46 | tracks/3/imported = false 47 | tracks/3/enabled = true 48 | tracks/3/path = NodePath("Anchor/Body:scale") 49 | tracks/3/interp = 1 50 | tracks/3/loop_wrap = true 51 | tracks/3/keys = { 52 | "times": PackedFloat32Array(0), 53 | "transitions": PackedFloat32Array(1), 54 | "update": 0, 55 | "values": [Vector2(1, 1)] 56 | } 57 | tracks/4/type = "value" 58 | tracks/4/imported = false 59 | tracks/4/enabled = true 60 | tracks/4/path = NodePath("Anchor/Body:modulate") 61 | tracks/4/interp = 1 62 | tracks/4/loop_wrap = true 63 | tracks/4/keys = { 64 | "times": PackedFloat32Array(0), 65 | "transitions": PackedFloat32Array(1), 66 | "update": 0, 67 | "values": [Color(1, 1, 1, 1)] 68 | } 69 | 70 | [sub_resource type="Animation" id="Animation_vvyxb"] 71 | resource_name = "idle" 72 | loop_mode = 1 73 | tracks/0/type = "value" 74 | tracks/0/imported = false 75 | tracks/0/enabled = true 76 | tracks/0/path = NodePath("Anchor/Body:position:y") 77 | tracks/0/interp = 1 78 | tracks/0/loop_wrap = true 79 | tracks/0/keys = { 80 | "times": PackedFloat32Array(0, 0.5, 1), 81 | "transitions": PackedFloat32Array(-2, -2, -2), 82 | "update": 0, 83 | "values": [0.0, -10.0, 0.0] 84 | } 85 | tracks/1/type = "value" 86 | tracks/1/imported = false 87 | tracks/1/enabled = true 88 | tracks/1/path = NodePath("Anchor/Body/BatWing:rotation") 89 | tracks/1/interp = 1 90 | tracks/1/loop_wrap = true 91 | tracks/1/keys = { 92 | "times": PackedFloat32Array(0.125, 0.375, 0.625, 0.875, 1.125), 93 | "transitions": PackedFloat32Array(-2, -2, -2, -2, -2), 94 | "update": 0, 95 | "values": [0.349066, -0.349066, 0.349066, -0.349066, 0.349066] 96 | } 97 | tracks/2/type = "value" 98 | tracks/2/imported = false 99 | tracks/2/enabled = true 100 | tracks/2/path = NodePath("Anchor/Body/BatWing2:rotation") 101 | tracks/2/interp = 1 102 | tracks/2/loop_wrap = true 103 | tracks/2/keys = { 104 | "times": PackedFloat32Array(0.125, 0.375, 0.625, 0.875, 1.125), 105 | "transitions": PackedFloat32Array(-2, -2, -2, -2, -2), 106 | "update": 0, 107 | "values": [-0.349066, 0.349066, -0.349066, 0.349066, -0.349066] 108 | } 109 | 110 | [sub_resource type="Animation" id="Animation_oltpx"] 111 | resource_name = "hurt" 112 | length = 0.2 113 | tracks/0/type = "value" 114 | tracks/0/imported = false 115 | tracks/0/enabled = true 116 | tracks/0/path = NodePath("Anchor/Body:scale") 117 | tracks/0/interp = 1 118 | tracks/0/loop_wrap = true 119 | tracks/0/keys = { 120 | "times": PackedFloat32Array(0, 0.1, 0.2), 121 | "transitions": PackedFloat32Array(-2, -2, -2), 122 | "update": 0, 123 | "values": [Vector2(1, 1), Vector2(1.2, 1.2), Vector2(1, 1)] 124 | } 125 | tracks/1/type = "value" 126 | tracks/1/imported = false 127 | tracks/1/enabled = true 128 | tracks/1/path = NodePath("Anchor/Body:modulate") 129 | tracks/1/interp = 1 130 | tracks/1/loop_wrap = true 131 | tracks/1/keys = { 132 | "times": PackedFloat32Array(0, 0.1, 0.2), 133 | "transitions": PackedFloat32Array(-2, -2, -2), 134 | "update": 0, 135 | "values": [Color(1, 1, 1, 1), Color(1, 0, 0, 1), Color(1, 1, 1, 1)] 136 | } 137 | 138 | [sub_resource type="AnimationLibrary" id="AnimationLibrary_q82ch"] 139 | _data = { 140 | "RESET": SubResource("Animation_84x66"), 141 | "hurt": SubResource("Animation_oltpx"), 142 | "idle": SubResource("Animation_vvyxb") 143 | } 144 | 145 | [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_37wlt"] 146 | animation = &"hurt" 147 | 148 | [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_jacc3"] 149 | animation = &"idle" 150 | 151 | [sub_resource type="AnimationNodeOneShot" id="AnimationNodeOneShot_mxv8j"] 152 | filter_enabled = true 153 | filters = ["Anchor/Body:modulate", "Anchor/Body:scale"] 154 | fadein_time = 0.1 155 | fadeout_time = 0.1 156 | 157 | [sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_avncd"] 158 | graph_offset = Vector2(-533, 14) 159 | nodes/Animation/node = SubResource("AnimationNodeAnimation_jacc3") 160 | nodes/Animation/position = Vector2(-100, 100) 161 | "nodes/Animation 2/node" = SubResource("AnimationNodeAnimation_37wlt") 162 | "nodes/Animation 2/position" = Vector2(-100, 200) 163 | nodes/OneShot/node = SubResource("AnimationNodeOneShot_mxv8j") 164 | nodes/OneShot/position = Vector2(100, 100) 165 | node_connections = [&"output", 0, &"OneShot", &"OneShot", 0, &"Animation", &"OneShot", 1, &"Animation 2"] 166 | 167 | [node name="Bat" type="Node2D"] 168 | 169 | [node name="GroundShadow" type="Sprite2D" parent="."] 170 | modulate = Color(0.898039, 0.878431, 0.831373, 1) 171 | z_index = -1 172 | z_as_relative = false 173 | scale = Vector2(0.6, 0.6) 174 | texture = ExtResource("1_s6me0") 175 | 176 | [node name="Anchor" type="Marker2D" parent="."] 177 | position = Vector2(0, -44) 178 | scale = Vector2(0.8, 0.8) 179 | 180 | [node name="Body" type="Marker2D" parent="Anchor"] 181 | 182 | [node name="BatWing" type="Sprite2D" parent="Anchor/Body"] 183 | position = Vector2(20, -4) 184 | texture = ExtResource("1_ylg8o") 185 | offset = Vector2(42, -20) 186 | 187 | [node name="BatWing2" type="Sprite2D" parent="Anchor/Body"] 188 | position = Vector2(-20, -4) 189 | texture = ExtResource("1_ylg8o") 190 | offset = Vector2(-42, -20) 191 | flip_h = true 192 | 193 | [node name="BatHead" type="Sprite2D" parent="Anchor/Body"] 194 | texture = ExtResource("2_ivd55") 195 | offset = Vector2(0, -12) 196 | 197 | [node name="AnimationPlayer" type="AnimationPlayer" parent="."] 198 | libraries = { 199 | "": SubResource("AnimationLibrary_q82ch") 200 | } 201 | 202 | [node name="AnimationTree" type="AnimationTree" parent="."] 203 | tree_root = SubResource("AnimationNodeBlendTree_avncd") 204 | anim_player = NodePath("../AnimationPlayer") 205 | active = true 206 | parameters/OneShot/active = false 207 | parameters/OneShot/request = 0 208 | -------------------------------------------------------------------------------- /2d_mechanics/characters/bat/parts/bat_head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/characters/bat/parts/bat_head.png -------------------------------------------------------------------------------- /2d_mechanics/characters/bat/parts/bat_head.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://7cxk5tx8ok48" 6 | path="res://.godot/imported/bat_head.png-d4a184bf4af4e9a72d3f92a44c91c912.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/characters/bat/parts/bat_head.png" 14 | dest_files=["res://.godot/imported/bat_head.png-d4a184bf4af4e9a72d3f92a44c91c912.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/characters/bat/parts/bat_wing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/characters/bat/parts/bat_wing.png -------------------------------------------------------------------------------- /2d_mechanics/characters/bat/parts/bat_wing.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ce3knynqcic4g" 6 | path="res://.godot/imported/bat_wing.png-4628e4c4474dbc0115f07b944def7bc1.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/characters/bat/parts/bat_wing.png" 14 | dest_files=["res://.godot/imported/bat_wing.png-4628e4c4474dbc0115f07b944def7bc1.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/characters/slime/parts/slime_body.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/characters/slime/parts/slime_body.png -------------------------------------------------------------------------------- /2d_mechanics/characters/slime/parts/slime_body.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dvgfmy6vtvjji" 6 | path="res://.godot/imported/slime_body.png-efaa4539e143d8489db9e69a1c0c682e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/characters/slime/parts/slime_body.png" 14 | dest_files=["res://.godot/imported/slime_body.png-efaa4539e143d8489db9e69a1c0c682e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/characters/slime/parts/slime_body_hurt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/characters/slime/parts/slime_body_hurt.png -------------------------------------------------------------------------------- /2d_mechanics/characters/slime/parts/slime_body_hurt.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://btbxea1f3vwot" 6 | path="res://.godot/imported/slime_body_hurt.png-ee6c9acb67f0446ae859fbe00301b1f9.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/characters/slime/parts/slime_body_hurt.png" 14 | dest_files=["res://.godot/imported/slime_body_hurt.png-ee6c9acb67f0446ae859fbe00301b1f9.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/characters/slime/parts/slime_face.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/characters/slime/parts/slime_face.png -------------------------------------------------------------------------------- /2d_mechanics/characters/slime/parts/slime_face.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c078jrp2yvc4s" 6 | path="res://.godot/imported/slime_face.png-3478a2aaeab10b3934da1accf13c4eb2.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/characters/slime/parts/slime_face.png" 14 | dest_files=["res://.godot/imported/slime_face.png-3478a2aaeab10b3934da1accf13c4eb2.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/characters/slime/parts/slime_hurt_eyes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/characters/slime/parts/slime_hurt_eyes.png -------------------------------------------------------------------------------- /2d_mechanics/characters/slime/parts/slime_hurt_eyes.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cai2ijnbypqtr" 6 | path="res://.godot/imported/slime_hurt_eyes.png-b4ab05498d63157226f1998e68390de2.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/characters/slime/parts/slime_hurt_eyes.png" 14 | dest_files=["res://.godot/imported/slime_hurt_eyes.png-b4ab05498d63157226f1998e68390de2.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/characters/slime/slime.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | @onready var animation_tree = %AnimationTree 4 | @onready var state_machine : AnimationNodeStateMachinePlayback = animation_tree.get("parameters/StateMachine/playback") 5 | @onready var hurt_shot_path = "parameters/HurtShot/request" 6 | 7 | func idle(): 8 | state_machine.travel("idle") 9 | 10 | func walk(): 11 | state_machine.travel("walk") 12 | 13 | func hurt(): 14 | animation_tree.set(hurt_shot_path, true) 15 | -------------------------------------------------------------------------------- /2d_mechanics/characters/slime/slime.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=21 format=3] 2 | 3 | [ext_resource type="Texture2D" uid="uid://dvgfmy6vtvjji" path="res://2d_mechanics/characters/slime/parts/slime_body.png" id="1_3j35h"] 4 | [ext_resource type="Script" path="res://2d_mechanics/characters/slime/slime.gd" id="1_87y5x"] 5 | [ext_resource type="Texture2D" uid="uid://b7rhtttevhxtj" path="res://2d_mechanics/ground_shadow.png" id="1_cq7ej"] 6 | [ext_resource type="Texture2D" uid="uid://c078jrp2yvc4s" path="res://2d_mechanics/characters/slime/parts/slime_face.png" id="2_ygydt"] 7 | [ext_resource type="Texture2D" uid="uid://cai2ijnbypqtr" path="res://2d_mechanics/characters/slime/parts/slime_hurt_eyes.png" id="4_hi70h"] 8 | 9 | [sub_resource type="Animation" id="Animation_y4lve"] 10 | length = 0.001 11 | tracks/0/type = "value" 12 | tracks/0/imported = false 13 | tracks/0/enabled = true 14 | tracks/0/path = NodePath("Anchor/Face:position:y") 15 | tracks/0/interp = 1 16 | tracks/0/loop_wrap = true 17 | tracks/0/keys = { 18 | "times": PackedFloat32Array(0), 19 | "transitions": PackedFloat32Array(1), 20 | "update": 0, 21 | "values": [-25.0] 22 | } 23 | tracks/1/type = "value" 24 | tracks/1/imported = false 25 | tracks/1/enabled = true 26 | tracks/1/path = NodePath("Anchor/SlimeBody:scale") 27 | tracks/1/interp = 1 28 | tracks/1/loop_wrap = true 29 | tracks/1/keys = { 30 | "times": PackedFloat32Array(0), 31 | "transitions": PackedFloat32Array(1), 32 | "update": 0, 33 | "values": [Vector2(1, 1)] 34 | } 35 | tracks/2/type = "value" 36 | tracks/2/imported = false 37 | tracks/2/enabled = true 38 | tracks/2/path = NodePath("Anchor:position:y") 39 | tracks/2/interp = 1 40 | tracks/2/loop_wrap = true 41 | tracks/2/keys = { 42 | "times": PackedFloat32Array(0), 43 | "transitions": PackedFloat32Array(1), 44 | "update": 0, 45 | "values": [0.0] 46 | } 47 | tracks/3/type = "value" 48 | tracks/3/imported = false 49 | tracks/3/enabled = true 50 | tracks/3/path = NodePath("Anchor/Face/SlimeFace:texture") 51 | tracks/3/interp = 1 52 | tracks/3/loop_wrap = true 53 | tracks/3/keys = { 54 | "times": PackedFloat32Array(0), 55 | "transitions": PackedFloat32Array(1), 56 | "update": 1, 57 | "values": [ExtResource("2_ygydt")] 58 | } 59 | tracks/4/type = "value" 60 | tracks/4/imported = false 61 | tracks/4/enabled = true 62 | tracks/4/path = NodePath("Anchor/SlimeBody:modulate") 63 | tracks/4/interp = 1 64 | tracks/4/loop_wrap = true 65 | tracks/4/keys = { 66 | "times": PackedFloat32Array(0), 67 | "transitions": PackedFloat32Array(1), 68 | "update": 0, 69 | "values": [Color(1, 1, 1, 1)] 70 | } 71 | tracks/5/type = "value" 72 | tracks/5/imported = false 73 | tracks/5/enabled = true 74 | tracks/5/path = NodePath("Anchor:scale") 75 | tracks/5/interp = 1 76 | tracks/5/loop_wrap = true 77 | tracks/5/keys = { 78 | "times": PackedFloat32Array(0), 79 | "transitions": PackedFloat32Array(1), 80 | "update": 0, 81 | "values": [Vector2(1, 1)] 82 | } 83 | 84 | [sub_resource type="Animation" id="Animation_lu163"] 85 | resource_name = "hurt" 86 | length = 0.2 87 | tracks/0/type = "value" 88 | tracks/0/imported = false 89 | tracks/0/enabled = true 90 | tracks/0/path = NodePath("Anchor/Face/SlimeFace:texture") 91 | tracks/0/interp = 1 92 | tracks/0/loop_wrap = true 93 | tracks/0/keys = { 94 | "times": PackedFloat32Array(0, 0.2), 95 | "transitions": PackedFloat32Array(1, 1), 96 | "update": 1, 97 | "values": [ExtResource("4_hi70h"), ExtResource("2_ygydt")] 98 | } 99 | tracks/1/type = "value" 100 | tracks/1/imported = false 101 | tracks/1/enabled = true 102 | tracks/1/path = NodePath("Anchor/Face:position:y") 103 | tracks/1/interp = 1 104 | tracks/1/loop_wrap = true 105 | tracks/1/keys = { 106 | "times": PackedFloat32Array(0, 0.1), 107 | "transitions": PackedFloat32Array(1, 1), 108 | "update": 0, 109 | "values": [-25.0, -35.0] 110 | } 111 | tracks/2/type = "value" 112 | tracks/2/imported = false 113 | tracks/2/enabled = true 114 | tracks/2/path = NodePath("Anchor/SlimeBody:modulate") 115 | tracks/2/interp = 1 116 | tracks/2/loop_wrap = true 117 | tracks/2/keys = { 118 | "times": PackedFloat32Array(0, 0.1, 0.2), 119 | "transitions": PackedFloat32Array(-2, -2, -2), 120 | "update": 0, 121 | "values": [Color(1, 1, 1, 1), Color(1, 0, 0, 1), Color(1, 1, 1, 1)] 122 | } 123 | tracks/3/type = "value" 124 | tracks/3/imported = false 125 | tracks/3/enabled = true 126 | tracks/3/path = NodePath("Anchor:scale") 127 | tracks/3/interp = 1 128 | tracks/3/loop_wrap = true 129 | tracks/3/keys = { 130 | "times": PackedFloat32Array(0, 0.1, 0.2), 131 | "transitions": PackedFloat32Array(-2, -2, -2), 132 | "update": 0, 133 | "values": [Vector2(1, 1), Vector2(1.2, 1.2), Vector2(1, 1)] 134 | } 135 | 136 | [sub_resource type="Animation" id="Animation_71vdi"] 137 | resource_name = "idle" 138 | loop_mode = 1 139 | tracks/0/type = "value" 140 | tracks/0/imported = false 141 | tracks/0/enabled = true 142 | tracks/0/path = NodePath("Anchor/Face:position:y") 143 | tracks/0/interp = 1 144 | tracks/0/loop_wrap = true 145 | tracks/0/keys = { 146 | "times": PackedFloat32Array(0, 0.5, 1), 147 | "transitions": PackedFloat32Array(-2, -2, -2), 148 | "update": 0, 149 | "values": [-28.0, -24.0, -28.0] 150 | } 151 | tracks/1/type = "value" 152 | tracks/1/imported = false 153 | tracks/1/enabled = true 154 | tracks/1/path = NodePath("Anchor/SlimeBody:scale") 155 | tracks/1/interp = 1 156 | tracks/1/loop_wrap = true 157 | tracks/1/keys = { 158 | "times": PackedFloat32Array(0, 0.5, 1), 159 | "transitions": PackedFloat32Array(-2, -2, -2), 160 | "update": 0, 161 | "values": [Vector2(1, 1), Vector2(1.05, 0.95), Vector2(1, 1)] 162 | } 163 | tracks/2/type = "value" 164 | tracks/2/imported = false 165 | tracks/2/enabled = true 166 | tracks/2/path = NodePath("Anchor:position:y") 167 | tracks/2/interp = 1 168 | tracks/2/loop_wrap = true 169 | tracks/2/keys = { 170 | "times": PackedFloat32Array(0), 171 | "transitions": PackedFloat32Array(1), 172 | "update": 0, 173 | "values": [0.0] 174 | } 175 | 176 | [sub_resource type="Animation" id="Animation_l6fy2"] 177 | resource_name = "walk" 178 | length = 0.4 179 | loop_mode = 1 180 | tracks/0/type = "value" 181 | tracks/0/imported = false 182 | tracks/0/enabled = true 183 | tracks/0/path = NodePath("Anchor:position:y") 184 | tracks/0/interp = 1 185 | tracks/0/loop_wrap = true 186 | tracks/0/keys = { 187 | "times": PackedFloat32Array(0, 0.2, 0.4), 188 | "transitions": PackedFloat32Array(1, 1, 1), 189 | "update": 0, 190 | "values": [0.0, -20.0, 0.0] 191 | } 192 | tracks/1/type = "value" 193 | tracks/1/imported = false 194 | tracks/1/enabled = true 195 | tracks/1/path = NodePath("Anchor/SlimeBody:scale") 196 | tracks/1/interp = 2 197 | tracks/1/loop_wrap = true 198 | tracks/1/keys = { 199 | "times": PackedFloat32Array(0.1, 0.3, 0.5), 200 | "transitions": PackedFloat32Array(1, 1, 1), 201 | "update": 0, 202 | "values": [Vector2(0.9, 1.1), Vector2(1.1, 0.9), Vector2(0.9, 1.1)] 203 | } 204 | tracks/2/type = "value" 205 | tracks/2/imported = false 206 | tracks/2/enabled = true 207 | tracks/2/path = NodePath("Anchor/Face:position:y") 208 | tracks/2/interp = 2 209 | tracks/2/loop_wrap = true 210 | tracks/2/keys = { 211 | "times": PackedFloat32Array(0.1, 0.3, 0.5), 212 | "transitions": PackedFloat32Array(1, 1, 1), 213 | "update": 0, 214 | "values": [-24.0, -28.0, -24.0] 215 | } 216 | 217 | [sub_resource type="AnimationLibrary" id="AnimationLibrary_j6cum"] 218 | _data = { 219 | "RESET": SubResource("Animation_y4lve"), 220 | "hurt": SubResource("Animation_lu163"), 221 | "idle": SubResource("Animation_71vdi"), 222 | "walk": SubResource("Animation_l6fy2") 223 | } 224 | 225 | [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_ssj5e"] 226 | animation = &"hurt" 227 | 228 | [sub_resource type="AnimationNodeOneShot" id="AnimationNodeOneShot_rtvnm"] 229 | filter_enabled = true 230 | filters = ["Anchor/Face/SlimeFace:texture", "Anchor/Face:position:y", "Anchor/SlimeBody:modulate", "Anchor/SlimeBody:texture", "Anchor:scale"] 231 | fadein_time = 0.05 232 | fadeout_time = 0.05 233 | 234 | [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_oboc6"] 235 | animation = &"idle" 236 | 237 | [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_nyrw1"] 238 | animation = &"walk" 239 | 240 | [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_nsqbj"] 241 | advance_mode = 2 242 | 243 | [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_pami4"] 244 | xfade_time = 0.1 245 | 246 | [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_6m35t"] 247 | xfade_time = 0.1 248 | 249 | [sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_pb0rs"] 250 | states/End/position = Vector2(537, 103) 251 | states/Start/position = Vector2(215, 103) 252 | states/idle/node = SubResource("AnimationNodeAnimation_oboc6") 253 | states/idle/position = Vector2(330, 103) 254 | states/walk/node = SubResource("AnimationNodeAnimation_nyrw1") 255 | states/walk/position = Vector2(433, 103) 256 | transitions = ["Start", "idle", SubResource("AnimationNodeStateMachineTransition_nsqbj"), "idle", "walk", SubResource("AnimationNodeStateMachineTransition_pami4"), "walk", "idle", SubResource("AnimationNodeStateMachineTransition_6m35t")] 257 | graph_offset = Vector2(-354, -38) 258 | 259 | [sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_b1ecp"] 260 | graph_offset = Vector2(-244, 81) 261 | nodes/Animation/node = SubResource("AnimationNodeAnimation_ssj5e") 262 | nodes/Animation/position = Vector2(60, 240) 263 | nodes/HurtShot/node = SubResource("AnimationNodeOneShot_rtvnm") 264 | nodes/HurtShot/position = Vector2(240, 120) 265 | nodes/StateMachine/node = SubResource("AnimationNodeStateMachine_pb0rs") 266 | nodes/StateMachine/position = Vector2(40, 80) 267 | nodes/output/position = Vector2(400, 100) 268 | node_connections = [&"output", 0, &"HurtShot", &"HurtShot", 0, &"StateMachine", &"HurtShot", 1, &"Animation"] 269 | 270 | [sub_resource type="AnimationNodeStateMachinePlayback" id="AnimationNodeStateMachinePlayback_o6qu4"] 271 | 272 | [node name="Slime" type="Node2D"] 273 | script = ExtResource("1_87y5x") 274 | 275 | [node name="GroundShadow" type="Sprite2D" parent="."] 276 | modulate = Color(0.898039, 0.878431, 0.831373, 1) 277 | z_index = -1 278 | z_as_relative = false 279 | scale = Vector2(0.8, 0.8) 280 | texture = ExtResource("1_cq7ej") 281 | 282 | [node name="Anchor" type="Marker2D" parent="."] 283 | 284 | [node name="SlimeBody" type="Sprite2D" parent="Anchor"] 285 | texture = ExtResource("1_3j35h") 286 | offset = Vector2(0, -36) 287 | 288 | [node name="Face" type="Marker2D" parent="Anchor"] 289 | position = Vector2(0, -25) 290 | 291 | [node name="SlimeFace" type="Sprite2D" parent="Anchor/Face"] 292 | texture = ExtResource("2_ygydt") 293 | 294 | [node name="AnimationPlayer" type="AnimationPlayer" parent="."] 295 | libraries = { 296 | "": SubResource("AnimationLibrary_j6cum") 297 | } 298 | 299 | [node name="AnimationTree" type="AnimationTree" parent="."] 300 | unique_name_in_owner = true 301 | tree_root = SubResource("AnimationNodeBlendTree_b1ecp") 302 | anim_player = NodePath("../AnimationPlayer") 303 | active = true 304 | parameters/HurtShot/active = false 305 | parameters/HurtShot/request = 0 306 | parameters/StateMachine/playback = SubResource("AnimationNodeStateMachinePlayback_o6qu4") 307 | -------------------------------------------------------------------------------- /2d_mechanics/characters/square/parts/square_body.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/characters/square/parts/square_body.png -------------------------------------------------------------------------------- /2d_mechanics/characters/square/parts/square_body.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cksiu5gst6fmp" 6 | path="res://.godot/imported/square_body.png-f03cb023ff054ec1961e0ee87a3d859b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/characters/square/parts/square_body.png" 14 | dest_files=["res://.godot/imported/square_body.png-f03cb023ff054ec1961e0ee87a3d859b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/characters/square/parts/square_face.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/characters/square/parts/square_face.png -------------------------------------------------------------------------------- /2d_mechanics/characters/square/parts/square_face.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cvs0lh814pk7h" 6 | path="res://.godot/imported/square_face.png-b84899567a7e9573693935374c992878.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/characters/square/parts/square_face.png" 14 | dest_files=["res://.godot/imported/square_face.png-b84899567a7e9573693935374c992878.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/characters/square/parts/square_foot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/characters/square/parts/square_foot.png -------------------------------------------------------------------------------- /2d_mechanics/characters/square/parts/square_foot.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ng8e5ot0dtpd" 6 | path="res://.godot/imported/square_foot.png-62d03dbc83edd3cd8cfd16deb6627ca8.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/characters/square/parts/square_foot.png" 14 | dest_files=["res://.godot/imported/square_foot.png-62d03dbc83edd3cd8cfd16deb6627ca8.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/characters/square/parts/square_lower_leg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/characters/square/parts/square_lower_leg.png -------------------------------------------------------------------------------- /2d_mechanics/characters/square/parts/square_lower_leg.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dhapxq8y8ow57" 6 | path="res://.godot/imported/square_lower_leg.png-8e65c76e5e4679935343b82fd9cf3bf0.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/characters/square/parts/square_lower_leg.png" 14 | dest_files=["res://.godot/imported/square_lower_leg.png-8e65c76e5e4679935343b82fd9cf3bf0.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/characters/square/parts/square_ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/characters/square/parts/square_ref.png -------------------------------------------------------------------------------- /2d_mechanics/characters/square/parts/square_ref.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b2ent6mf1y7w7" 6 | path="res://.godot/imported/square_ref.png-d0fab5c53428b1f1e4202d71d3cac725.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/characters/square/parts/square_ref.png" 14 | dest_files=["res://.godot/imported/square_ref.png-d0fab5c53428b1f1e4202d71d3cac725.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/characters/square/parts/square_upper_leg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/characters/square/parts/square_upper_leg.png -------------------------------------------------------------------------------- /2d_mechanics/characters/square/parts/square_upper_leg.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://qmqpm6asge1i" 6 | path="res://.godot/imported/square_upper_leg.png-ece63cc11c1ce8113aec41346c311107.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/characters/square/parts/square_upper_leg.png" 14 | dest_files=["res://.godot/imported/square_upper_leg.png-ece63cc11c1ce8113aec41346c311107.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/characters/square/square.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | @onready var animation_tree = %AnimationTree 4 | @onready var state_machine : AnimationNodeStateMachinePlayback = animation_tree.get("parameters/StateMachine/playback") 5 | 6 | func idle(): 7 | state_machine.travel("idle") 8 | 9 | func walk(): 10 | state_machine.travel("walk") 11 | -------------------------------------------------------------------------------- /2d_mechanics/characters/square/square.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=21 format=3] 2 | 3 | [ext_resource type="Texture2D" uid="uid://b7rhtttevhxtj" path="res://2d_mechanics/ground_shadow.png" id="1_82wgl"] 4 | [ext_resource type="Texture2D" uid="uid://cksiu5gst6fmp" path="res://2d_mechanics/characters/square/parts/square_body.png" id="1_c78br"] 5 | [ext_resource type="Script" path="res://2d_mechanics/characters/square/square.gd" id="1_h02l2"] 6 | [ext_resource type="Texture2D" uid="uid://cvs0lh814pk7h" path="res://2d_mechanics/characters/square/parts/square_face.png" id="2_sxqo7"] 7 | [ext_resource type="Texture2D" uid="uid://ng8e5ot0dtpd" path="res://2d_mechanics/characters/square/parts/square_foot.png" id="3_d6lki"] 8 | [ext_resource type="Texture2D" uid="uid://dhapxq8y8ow57" path="res://2d_mechanics/characters/square/parts/square_lower_leg.png" id="4_gham1"] 9 | [ext_resource type="Texture2D" uid="uid://qmqpm6asge1i" path="res://2d_mechanics/characters/square/parts/square_upper_leg.png" id="5_o8qag"] 10 | [ext_resource type="SkeletonModificationStack2D" uid="uid://dtf0pmja4mcaa" path="res://2d_mechanics/characters/square/square_modification_stack.tres" id="7_j3jaj"] 11 | 12 | [sub_resource type="Animation" id="Animation_hed62"] 13 | length = 0.001 14 | tracks/0/type = "value" 15 | tracks/0/imported = false 16 | tracks/0/enabled = true 17 | tracks/0/path = NodePath("Skeleton2D/Center:position:y") 18 | tracks/0/interp = 1 19 | tracks/0/loop_wrap = true 20 | tracks/0/keys = { 21 | "times": PackedFloat32Array(0), 22 | "transitions": PackedFloat32Array(1), 23 | "update": 0, 24 | "values": [-36.0] 25 | } 26 | tracks/1/type = "value" 27 | tracks/1/imported = false 28 | tracks/1/enabled = true 29 | tracks/1/path = NodePath("Skeleton2D/Center/UpperLegL:position") 30 | tracks/1/interp = 1 31 | tracks/1/loop_wrap = true 32 | tracks/1/keys = { 33 | "times": PackedFloat32Array(0), 34 | "transitions": PackedFloat32Array(1), 35 | "update": 0, 36 | "values": [Vector2(-10, 8)] 37 | } 38 | tracks/2/type = "value" 39 | tracks/2/imported = false 40 | tracks/2/enabled = true 41 | tracks/2/path = NodePath("Skeleton2D/Center/UpperLegR:position") 42 | tracks/2/interp = 1 43 | tracks/2/loop_wrap = true 44 | tracks/2/keys = { 45 | "times": PackedFloat32Array(0), 46 | "transitions": PackedFloat32Array(1), 47 | "update": 0, 48 | "values": [Vector2(10, 8)] 49 | } 50 | tracks/3/type = "value" 51 | tracks/3/imported = false 52 | tracks/3/enabled = true 53 | tracks/3/path = NodePath("Skeleton2D/FootLIK:rotation") 54 | tracks/3/interp = 1 55 | tracks/3/loop_wrap = true 56 | tracks/3/keys = { 57 | "times": PackedFloat32Array(0), 58 | "transitions": PackedFloat32Array(1), 59 | "update": 0, 60 | "values": [-0.436332] 61 | } 62 | tracks/4/type = "value" 63 | tracks/4/imported = false 64 | tracks/4/enabled = true 65 | tracks/4/path = NodePath("Skeleton2D/FootRIK:rotation") 66 | tracks/4/interp = 1 67 | tracks/4/loop_wrap = true 68 | tracks/4/keys = { 69 | "times": PackedFloat32Array(0), 70 | "transitions": PackedFloat32Array(1), 71 | "update": 0, 72 | "values": [0.436332] 73 | } 74 | tracks/5/type = "value" 75 | tracks/5/imported = false 76 | tracks/5/enabled = true 77 | tracks/5/path = NodePath("Skeleton2D/Center:rotation") 78 | tracks/5/interp = 1 79 | tracks/5/loop_wrap = true 80 | tracks/5/keys = { 81 | "times": PackedFloat32Array(0), 82 | "transitions": PackedFloat32Array(1), 83 | "update": 0, 84 | "values": [-0.0698132] 85 | } 86 | tracks/6/type = "value" 87 | tracks/6/imported = false 88 | tracks/6/enabled = true 89 | tracks/6/path = NodePath("Skeleton2D/FootRIK:position") 90 | tracks/6/interp = 1 91 | tracks/6/loop_wrap = true 92 | tracks/6/keys = { 93 | "times": PackedFloat32Array(0), 94 | "transitions": PackedFloat32Array(1), 95 | "update": 0, 96 | "values": [Vector2(6, -3)] 97 | } 98 | tracks/7/type = "value" 99 | tracks/7/imported = false 100 | tracks/7/enabled = true 101 | tracks/7/path = NodePath("Skeleton2D/FootLIK:position") 102 | tracks/7/interp = 1 103 | tracks/7/loop_wrap = true 104 | tracks/7/keys = { 105 | "times": PackedFloat32Array(0), 106 | "transitions": PackedFloat32Array(1), 107 | "update": 0, 108 | "values": [Vector2(-20, -9)] 109 | } 110 | 111 | [sub_resource type="Animation" id="Animation_sablf"] 112 | resource_name = "idle" 113 | loop_mode = 1 114 | tracks/0/type = "value" 115 | tracks/0/imported = false 116 | tracks/0/enabled = true 117 | tracks/0/path = NodePath("Skeleton2D/Center:position:y") 118 | tracks/0/interp = 1 119 | tracks/0/loop_wrap = true 120 | tracks/0/keys = { 121 | "times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1), 122 | "transitions": PackedFloat32Array(-2, -2, -2, -2, -2), 123 | "update": 0, 124 | "values": [-34.0, -35.0, -34.0, -35.0, -34.0] 125 | } 126 | tracks/1/type = "value" 127 | tracks/1/imported = false 128 | tracks/1/enabled = true 129 | tracks/1/path = NodePath("Skeleton2D/Center:position:x") 130 | tracks/1/interp = 1 131 | tracks/1/loop_wrap = true 132 | tracks/1/keys = { 133 | "times": PackedFloat32Array(0.2, 0.7, 1.2), 134 | "transitions": PackedFloat32Array(-2, -2, -2), 135 | "update": 0, 136 | "values": [2.0, -2.0, 2.0] 137 | } 138 | tracks/2/type = "value" 139 | tracks/2/imported = false 140 | tracks/2/enabled = true 141 | tracks/2/path = NodePath("Skeleton2D/Center/UpperLegL:position") 142 | tracks/2/interp = 1 143 | tracks/2/loop_wrap = true 144 | tracks/2/keys = { 145 | "times": PackedFloat32Array(0), 146 | "transitions": PackedFloat32Array(1), 147 | "update": 0, 148 | "values": [Vector2(-10, 8)] 149 | } 150 | tracks/3/type = "value" 151 | tracks/3/imported = false 152 | tracks/3/enabled = true 153 | tracks/3/path = NodePath("Skeleton2D/Center/UpperLegR:position") 154 | tracks/3/interp = 1 155 | tracks/3/loop_wrap = true 156 | tracks/3/keys = { 157 | "times": PackedFloat32Array(0), 158 | "transitions": PackedFloat32Array(1), 159 | "update": 0, 160 | "values": [Vector2(10, 8)] 161 | } 162 | tracks/4/type = "value" 163 | tracks/4/imported = false 164 | tracks/4/enabled = true 165 | tracks/4/path = NodePath("Skeleton2D/FootLIK:rotation") 166 | tracks/4/interp = 1 167 | tracks/4/loop_wrap = true 168 | tracks/4/keys = { 169 | "times": PackedFloat32Array(0), 170 | "transitions": PackedFloat32Array(1), 171 | "update": 0, 172 | "values": [-0.436332] 173 | } 174 | tracks/5/type = "value" 175 | tracks/5/imported = false 176 | tracks/5/enabled = true 177 | tracks/5/path = NodePath("Skeleton2D/FootRIK:rotation") 178 | tracks/5/interp = 1 179 | tracks/5/loop_wrap = true 180 | tracks/5/keys = { 181 | "times": PackedFloat32Array(0), 182 | "transitions": PackedFloat32Array(1), 183 | "update": 0, 184 | "values": [0.436332] 185 | } 186 | tracks/6/type = "value" 187 | tracks/6/imported = false 188 | tracks/6/enabled = true 189 | tracks/6/path = NodePath("Skeleton2D/Center:rotation") 190 | tracks/6/interp = 1 191 | tracks/6/loop_wrap = true 192 | tracks/6/keys = { 193 | "times": PackedFloat32Array(0.4, 0.9, 1.4), 194 | "transitions": PackedFloat32Array(-2, -2, -2), 195 | "update": 0, 196 | "values": [0.0698132, -0.0698132, 0.0698132] 197 | } 198 | tracks/7/type = "value" 199 | tracks/7/imported = false 200 | tracks/7/enabled = true 201 | tracks/7/path = NodePath("Skeleton2D/FootLIK:position") 202 | tracks/7/interp = 1 203 | tracks/7/loop_wrap = true 204 | tracks/7/keys = { 205 | "times": PackedFloat32Array(0), 206 | "transitions": PackedFloat32Array(1), 207 | "update": 0, 208 | "values": [Vector2(-14, -3)] 209 | } 210 | tracks/8/type = "value" 211 | tracks/8/imported = false 212 | tracks/8/enabled = true 213 | tracks/8/path = NodePath("Skeleton2D/FootRIK:position") 214 | tracks/8/interp = 1 215 | tracks/8/loop_wrap = true 216 | tracks/8/keys = { 217 | "times": PackedFloat32Array(0), 218 | "transitions": PackedFloat32Array(1), 219 | "update": 0, 220 | "values": [Vector2(14, -3)] 221 | } 222 | 223 | [sub_resource type="Animation" id="Animation_74kqe"] 224 | resource_name = "walk" 225 | length = 0.6 226 | loop_mode = 1 227 | tracks/0/type = "value" 228 | tracks/0/imported = false 229 | tracks/0/enabled = true 230 | tracks/0/path = NodePath("Skeleton2D/Center:position:y") 231 | tracks/0/interp = 1 232 | tracks/0/loop_wrap = true 233 | tracks/0/keys = { 234 | "times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6), 235 | "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), 236 | "update": 0, 237 | "values": [-36.0, -30.0, -45.0, -36.0, -30.0, -45.0, -36.0] 238 | } 239 | tracks/1/type = "value" 240 | tracks/1/imported = false 241 | tracks/1/enabled = true 242 | tracks/1/path = NodePath("Skeleton2D/FootRIK:rotation") 243 | tracks/1/interp = 1 244 | tracks/1/loop_wrap = true 245 | tracks/1/keys = { 246 | "times": PackedFloat32Array(0, 0.3, 0.6), 247 | "transitions": PackedFloat32Array(-2, -2, -2), 248 | "update": 0, 249 | "values": [-0.0872665, 2.0944, -0.0872665] 250 | } 251 | tracks/2/type = "value" 252 | tracks/2/imported = false 253 | tracks/2/enabled = true 254 | tracks/2/path = NodePath("Skeleton2D/FootRIK:position") 255 | tracks/2/interp = 1 256 | tracks/2/loop_wrap = true 257 | tracks/2/keys = { 258 | "times": PackedFloat32Array(0, 0.3, 0.6), 259 | "transitions": PackedFloat32Array(-2, -2, -2), 260 | "update": 0, 261 | "values": [Vector2(11, -2), Vector2(11, -23), Vector2(11, -2)] 262 | } 263 | tracks/3/type = "value" 264 | tracks/3/imported = false 265 | tracks/3/enabled = true 266 | tracks/3/path = NodePath("Skeleton2D/FootLIK:position") 267 | tracks/3/interp = 1 268 | tracks/3/loop_wrap = true 269 | tracks/3/keys = { 270 | "times": PackedFloat32Array(0, 0.3, 0.6), 271 | "transitions": PackedFloat32Array(-2, -2, -2), 272 | "update": 0, 273 | "values": [Vector2(-11, -23), Vector2(-11, -2), Vector2(-11, -23)] 274 | } 275 | tracks/4/type = "value" 276 | tracks/4/imported = false 277 | tracks/4/enabled = true 278 | tracks/4/path = NodePath("Skeleton2D/FootLIK:rotation") 279 | tracks/4/interp = 1 280 | tracks/4/loop_wrap = true 281 | tracks/4/keys = { 282 | "times": PackedFloat32Array(0, 0.3, 0.6), 283 | "transitions": PackedFloat32Array(-2, -2, -2), 284 | "update": 0, 285 | "values": [-2.0944, 0.0546129, -2.0944] 286 | } 287 | tracks/5/type = "value" 288 | tracks/5/imported = false 289 | tracks/5/enabled = true 290 | tracks/5/path = NodePath("Skeleton2D/Center:rotation") 291 | tracks/5/interp = 1 292 | tracks/5/loop_wrap = true 293 | tracks/5/keys = { 294 | "times": PackedFloat32Array(0.1, 0.4, 0.7), 295 | "transitions": PackedFloat32Array(-2, -2, -2), 296 | "update": 0, 297 | "values": [0.139626, -0.139626, 0.139626] 298 | } 299 | 300 | [sub_resource type="AnimationLibrary" id="AnimationLibrary_wrcpu"] 301 | _data = { 302 | "RESET": SubResource("Animation_hed62"), 303 | "idle": SubResource("Animation_sablf"), 304 | "walk": SubResource("Animation_74kqe") 305 | } 306 | 307 | [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_ak3by"] 308 | animation = &"idle" 309 | 310 | [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_5bru0"] 311 | animation = &"walk" 312 | 313 | [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_pe4f6"] 314 | advance_mode = 2 315 | 316 | [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_1bm3g"] 317 | xfade_time = 0.1 318 | 319 | [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_3igdm"] 320 | xfade_time = 0.1 321 | 322 | [sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_sb2xb"] 323 | states/idle/node = SubResource("AnimationNodeAnimation_ak3by") 324 | states/idle/position = Vector2(377, 97) 325 | states/walk/node = SubResource("AnimationNodeAnimation_5bru0") 326 | states/walk/position = Vector2(551, 100) 327 | transitions = ["Start", "idle", SubResource("AnimationNodeStateMachineTransition_pe4f6"), "idle", "walk", SubResource("AnimationNodeStateMachineTransition_1bm3g"), "walk", "idle", SubResource("AnimationNodeStateMachineTransition_3igdm")] 328 | 329 | [sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_pe7sl"] 330 | graph_offset = Vector2(-357, 45) 331 | nodes/StateMachine/node = SubResource("AnimationNodeStateMachine_sb2xb") 332 | nodes/StateMachine/position = Vector2(19, 146) 333 | node_connections = [&"output", 0, &"StateMachine"] 334 | 335 | [sub_resource type="AnimationNodeStateMachinePlayback" id="AnimationNodeStateMachinePlayback_adwqq"] 336 | 337 | [node name="square" type="Node2D"] 338 | script = ExtResource("1_h02l2") 339 | 340 | [node name="GroundShadow" type="Sprite2D" parent="."] 341 | modulate = Color(0.898039, 0.878431, 0.831373, 1) 342 | z_index = -1 343 | z_as_relative = false 344 | scale = Vector2(0.8, 0.8) 345 | texture = ExtResource("1_82wgl") 346 | 347 | [node name="Remote" type="Node2D" parent="."] 348 | modulate = Color(1, 0.572549, 0.176471, 1) 349 | 350 | [node name="SquareFootL" type="Sprite2D" parent="Remote"] 351 | position = Vector2(-20.6329, -4.44028) 352 | rotation = -0.436332 353 | scale = Vector2(0.999863, 0.999863) 354 | texture = ExtResource("3_d6lki") 355 | offset = Vector2(-4, 0) 356 | 357 | [node name="SquareLowerLegL" type="Sprite2D" parent="Remote"] 358 | position = Vector2(-14.9289, -14.9961) 359 | rotation = 0.495422 360 | scale = Vector2(0.999863, 0.999863) 361 | texture = ExtResource("4_gham1") 362 | offset = Vector2(0, 6) 363 | 364 | [node name="SquareUpperLegL" type="Sprite2D" parent="Remote"] 365 | position = Vector2(-8.27415, -27.3111) 366 | rotation = 0.495422 367 | scale = Vector2(0.999863, 0.999863) 368 | texture = ExtResource("5_o8qag") 369 | offset = Vector2(0, 6) 370 | 371 | [node name="SquareFootR" type="Sprite2D" parent="Remote"] 372 | position = Vector2(26.0716, -4.96951) 373 | rotation = -2.70526 374 | scale = Vector2(0.999865, 0.999865) 375 | texture = ExtResource("3_d6lki") 376 | offset = Vector2(-4, 0) 377 | 378 | [node name="SquareLowerLegR" type="Sprite2D" parent="Remote"] 379 | position = Vector2(19.4445, -14.9716) 380 | rotation = -0.585163 381 | scale = Vector2(0.999865, 0.999865) 382 | texture = ExtResource("4_gham1") 383 | offset = Vector2(0, 6) 384 | 385 | [node name="SquareUpperLegR" type="Sprite2D" parent="Remote"] 386 | position = Vector2(11.7129, -26.6408) 387 | rotation = -0.585163 388 | scale = Vector2(0.999865, 0.999865) 389 | texture = ExtResource("5_o8qag") 390 | offset = Vector2(0, 6) 391 | 392 | [node name="SquareBody" type="Sprite2D" parent="Remote"] 393 | position = Vector2(1.9875, -34.9707) 394 | rotation = 0.0335276 395 | scale = Vector2(0.999912, 0.999912) 396 | texture = ExtResource("1_c78br") 397 | offset = Vector2(0, -23) 398 | 399 | [node name="SquareFace" type="Sprite2D" parent="Remote/SquareBody"] 400 | position = Vector2(0, -17) 401 | texture = ExtResource("2_sxqo7") 402 | 403 | [node name="Skeleton2D" type="Skeleton2D" parent="."] 404 | modification_stack = ExtResource("7_j3jaj") 405 | 406 | [node name="Center" type="Bone2D" parent="Skeleton2D"] 407 | position = Vector2(1.9875, -36) 408 | rotation = -0.0698132 409 | scale = Vector2(0.999912, 0.999912) 410 | rest = Transform2D(1, 0, 0, 1, 0, -37) 411 | 412 | [node name="UpperLegL" type="Bone2D" parent="Skeleton2D/Center"] 413 | position = Vector2(-10, 8) 414 | rotation = 0.461894 415 | scale = Vector2(0.999951, 0.999951) 416 | rest = Transform2D(1, 0, 0, 1, -14, 8) 417 | 418 | [node name="LowerLegL" type="Bone2D" parent="Skeleton2D/Center/UpperLegL"] 419 | position = Vector2(0, 14) 420 | rest = Transform2D(1, 0, 0, 1, 0, 14) 421 | 422 | [node name="FootL" type="Bone2D" parent="Skeleton2D/Center/UpperLegL/LowerLegL"] 423 | position = Vector2(0, 12) 424 | rest = Transform2D(1, 0, 0, 1, 0, 12) 425 | auto_calculate_length_and_angle = false 426 | length = 16.0 427 | bone_angle = 0.0 428 | editor_settings/show_bone_gizmo = false 429 | 430 | [node name="FootLTransform" type="RemoteTransform2D" parent="Skeleton2D/Center/UpperLegL/LowerLegL/FootL"] 431 | remote_path = NodePath("../../../../../../Remote/SquareFootL") 432 | update_rotation = false 433 | 434 | [node name="LowerLegLTransform" type="RemoteTransform2D" parent="Skeleton2D/Center/UpperLegL/LowerLegL"] 435 | remote_path = NodePath("../../../../../Remote/SquareLowerLegL") 436 | 437 | [node name="UpperLegLTransform" type="RemoteTransform2D" parent="Skeleton2D/Center/UpperLegL"] 438 | remote_path = NodePath("../../../../Remote/SquareUpperLegL") 439 | 440 | [node name="UpperLegR" type="Bone2D" parent="Skeleton2D/Center"] 441 | position = Vector2(10, 8) 442 | rotation = -0.618691 443 | scale = Vector2(0.999953, 0.999953) 444 | rest = Transform2D(1, 0, 0, 1, 14, 8) 445 | 446 | [node name="LowerLegR" type="Bone2D" parent="Skeleton2D/Center/UpperLegR"] 447 | position = Vector2(0, 14) 448 | rest = Transform2D(1, 0, 0, 1, 0, 14) 449 | 450 | [node name="FootR" type="Bone2D" parent="Skeleton2D/Center/UpperLegR/LowerLegR"] 451 | position = Vector2(0, 12) 452 | rest = Transform2D(1, 0, 0, 1, 0, 12) 453 | auto_calculate_length_and_angle = false 454 | length = 16.0 455 | bone_angle = 0.0 456 | editor_settings/show_bone_gizmo = false 457 | 458 | [node name="FootRTransform" type="RemoteTransform2D" parent="Skeleton2D/Center/UpperLegR/LowerLegR/FootR"] 459 | remote_path = NodePath("../../../../../../Remote/SquareFootR") 460 | update_rotation = false 461 | 462 | [node name="LowerLegRTransform" type="RemoteTransform2D" parent="Skeleton2D/Center/UpperLegR/LowerLegR"] 463 | remote_path = NodePath("../../../../../Remote/SquareLowerLegR") 464 | 465 | [node name="UpperLegRTransform" type="RemoteTransform2D" parent="Skeleton2D/Center/UpperLegR"] 466 | remote_path = NodePath("../../../../Remote/SquareUpperLegR") 467 | 468 | [node name="CenterTransform" type="RemoteTransform2D" parent="Skeleton2D/Center"] 469 | remote_path = NodePath("../../../Remote/SquareBody") 470 | 471 | [node name="FootLIK" type="Bone2D" parent="Skeleton2D"] 472 | position = Vector2(-20, -9) 473 | rotation = -0.436332 474 | scale = Vector2(0.999988, 0.999988) 475 | rest = Transform2D(1, 0, 0, 1, -14, -3) 476 | auto_calculate_length_and_angle = false 477 | length = 16.0 478 | bone_angle = 0.0 479 | editor_settings/show_bone_gizmo = false 480 | 481 | [node name="FootLTransformRotation" type="RemoteTransform2D" parent="Skeleton2D/FootLIK"] 482 | remote_path = NodePath("../../../Remote/SquareFootL") 483 | update_position = false 484 | update_scale = false 485 | 486 | [node name="FootRIK" type="Bone2D" parent="Skeleton2D"] 487 | position = Vector2(6, -3) 488 | rotation = 0.436332 489 | scale = Vector2(0.999991, 0.999991) 490 | rest = Transform2D(1, 0, 0, 1, 14, -3) 491 | auto_calculate_length_and_angle = false 492 | length = 16.0 493 | bone_angle = 0.0 494 | editor_settings/show_bone_gizmo = false 495 | 496 | [node name="FootRTransformRotation" type="RemoteTransform2D" parent="Skeleton2D/FootRIK"] 497 | rotation = 3.14159 498 | remote_path = NodePath("../../../Remote/SquareFootR") 499 | update_position = false 500 | update_scale = false 501 | 502 | [node name="AnimationPlayer" type="AnimationPlayer" parent="."] 503 | libraries = { 504 | "": SubResource("AnimationLibrary_wrcpu") 505 | } 506 | 507 | [node name="AnimationTree" type="AnimationTree" parent="."] 508 | unique_name_in_owner = true 509 | tree_root = SubResource("AnimationNodeBlendTree_pe7sl") 510 | anim_player = NodePath("../AnimationPlayer") 511 | active = true 512 | parameters/StateMachine/playback = SubResource("AnimationNodeStateMachinePlayback_adwqq") 513 | -------------------------------------------------------------------------------- /2d_mechanics/characters/square/square_modification_stack.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="SkeletonModificationStack2D" load_steps=3 format=3 uid="uid://dtf0pmja4mcaa"] 2 | 3 | [sub_resource type="SkeletonModification2DTwoBoneIK" id="SkeletonModification2DTwoBoneIK_7lb5u"] 4 | target_nodepath = NodePath("FootLIK") 5 | flip_bend_direction = true 6 | joint_one_bone_idx = 1 7 | joint_one_bone2d_node = NodePath("Center/UpperLegL") 8 | joint_two_bone_idx = 2 9 | joint_two_bone2d_node = NodePath("Center/UpperLegL/LowerLegL") 10 | editor/draw_gizmo = false 11 | 12 | [sub_resource type="SkeletonModification2DTwoBoneIK" id="SkeletonModification2DTwoBoneIK_h82yt"] 13 | target_nodepath = NodePath("FootRIK") 14 | joint_one_bone_idx = 4 15 | joint_one_bone2d_node = NodePath("Center/UpperLegR") 16 | joint_two_bone_idx = 5 17 | joint_two_bone2d_node = NodePath("Center/UpperLegR/LowerLegR") 18 | 19 | [resource] 20 | enabled = true 21 | modification_count = 2 22 | modifications/0 = SubResource("SkeletonModification2DTwoBoneIK_7lb5u") 23 | modifications/1 = SubResource("SkeletonModification2DTwoBoneIK_h82yt") 24 | -------------------------------------------------------------------------------- /2d_mechanics/circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/circle.png -------------------------------------------------------------------------------- /2d_mechanics/circle.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dn80eu1qs371v" 6 | path="res://.godot/imported/circle.png-dfb9971fe0b058f2219c931c80c330a7.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/circle.png" 14 | dest_files=["res://.godot/imported/circle.png-dfb9971fe0b058f2219c931c80c330a7.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/ground_shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/ground_shadow.png -------------------------------------------------------------------------------- /2d_mechanics/ground_shadow.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b7rhtttevhxtj" 6 | path="res://.godot/imported/ground_shadow.png-07a2affa9c887be43d4dc69b8aa74dbc.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/ground_shadow.png" 14 | dest_files=["res://.godot/imported/ground_shadow.png-07a2affa9c887be43d4dc69b8aa74dbc.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/pistol/TestPistol.gd: -------------------------------------------------------------------------------- 1 | extends Node 2 | 3 | @export var pistol_anchor : Marker2D 4 | @export var pistol : Node2D 5 | @export var projectile_scene : PackedScene 6 | @export var muzzle_flash_scene : PackedScene 7 | @export var impact_scene : PackedScene 8 | 9 | var timer := Timer.new() 10 | 11 | func _ready(): 12 | add_child(timer) 13 | timer.wait_time = 0.3 14 | timer.one_shot = false 15 | timer.start() 16 | timer.timeout.connect(shoot) 17 | 18 | func _process(delta): 19 | pistol_anchor.rotate(1.0 * delta) 20 | if Input.is_action_just_pressed("jump"): shoot() 21 | 22 | func shoot(): 23 | pistol.shoot() 24 | 25 | var flash = muzzle_flash_scene.instantiate() 26 | flash.global_position = pistol.end.global_position 27 | flash.rotation = pistol.end.global_rotation 28 | add_child(flash) 29 | 30 | var projectile = projectile_scene.instantiate() 31 | projectile.global_position = pistol.end.global_position 32 | projectile.rotation = pistol_anchor.rotation 33 | add_child(projectile) 34 | 35 | projectile.connect("impact", on_impact) 36 | 37 | func on_impact(impact_position): 38 | var impact = impact_scene.instantiate() 39 | impact.global_position = impact_position 40 | add_child(impact) 41 | -------------------------------------------------------------------------------- /2d_mechanics/pistol/impact/impact.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | @onready var sprite = %Sprite 4 | 5 | func _ready(): 6 | var t = create_tween().set_parallel(true).set_ease(Tween.EASE_OUT) 7 | t.tween_property(sprite, "scale", Vector2.ONE * 1.35, 0.3).from(Vector2.ONE * 0.6) 8 | t.tween_property(sprite, "modulate:a", 0.0, 0.15).set_delay(0.15) 9 | t.chain().tween_callback(queue_free) 10 | -------------------------------------------------------------------------------- /2d_mechanics/pistol/impact/impact.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3] 2 | 3 | [ext_resource type="Texture2D" uid="uid://dn80eu1qs371v" path="res://2d_mechanics/circle.png" id="1_cp73q"] 4 | [ext_resource type="Script" path="res://2d_mechanics/pistol/impact/impact.gd" id="1_de07n"] 5 | 6 | [node name="Impact" type="Node2D"] 7 | script = ExtResource("1_de07n") 8 | 9 | [node name="Sprite" type="Sprite2D" parent="."] 10 | unique_name_in_owner = true 11 | modulate = Color(1, 0.831373, 0.239216, 1) 12 | texture = ExtResource("1_cp73q") 13 | -------------------------------------------------------------------------------- /2d_mechanics/pistol/muzzle_flash.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | @onready var sprite = %Sprite 4 | 5 | func _ready(): 6 | var t = create_tween().set_parallel(true).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK) 7 | t.tween_property(sprite, "position:x", 16.0, 0.25) 8 | t.tween_property(sprite, "scale", Vector2.ONE * 1.25, 0.25) 9 | t.tween_property(sprite, "modulate:a", 0.0, 0.25).set_delay(0.1) 10 | t.chain().tween_callback(queue_free) 11 | -------------------------------------------------------------------------------- /2d_mechanics/pistol/muzzle_flash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/pistol/muzzle_flash.png -------------------------------------------------------------------------------- /2d_mechanics/pistol/muzzle_flash.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://brgpjilf7s2ul" 6 | path="res://.godot/imported/muzzle_flash.png-d0febc7ea16fa75ed804a83ca7af7333.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/pistol/muzzle_flash.png" 14 | dest_files=["res://.godot/imported/muzzle_flash.png-d0febc7ea16fa75ed804a83ca7af7333.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/pistol/muzzle_flash.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3] 2 | 3 | [ext_resource type="Script" path="res://2d_mechanics/pistol/muzzle_flash.gd" id="1_qee16"] 4 | [ext_resource type="Texture2D" uid="uid://brgpjilf7s2ul" path="res://2d_mechanics/pistol/muzzle_flash.png" id="1_yxyu1"] 5 | 6 | [node name="MuzzleFlash" type="Node2D"] 7 | script = ExtResource("1_qee16") 8 | 9 | [node name="Sprite" type="Sprite2D" parent="."] 10 | unique_name_in_owner = true 11 | texture = ExtResource("1_yxyu1") 12 | offset = Vector2(10, 0) 13 | -------------------------------------------------------------------------------- /2d_mechanics/pistol/pistol.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | @onready var pistol = %Pistol 4 | @onready var end = %End 5 | 6 | func shoot(): 7 | var t = create_tween().set_ease(Tween.EASE_OUT) 8 | t.tween_property(pistol, "rotation_degrees", -25.0, 0.15).set_trans(Tween.TRANS_BACK) 9 | t.tween_property(pistol, "rotation_degrees", 0.0, 0.8).set_trans(Tween.TRANS_ELASTIC) 10 | -------------------------------------------------------------------------------- /2d_mechanics/pistol/pistol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/pistol/pistol.png -------------------------------------------------------------------------------- /2d_mechanics/pistol/pistol.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cswb5do8rrj7q" 6 | path="res://.godot/imported/pistol.png-d7c4fd6b2e2633c1aa5de83e3de52a01.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/pistol/pistol.png" 14 | dest_files=["res://.godot/imported/pistol.png-d7c4fd6b2e2633c1aa5de83e3de52a01.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/pistol/pistol.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3] 2 | 3 | [ext_resource type="Script" path="res://2d_mechanics/pistol/pistol.gd" id="1_8m5tp"] 4 | [ext_resource type="Texture2D" uid="uid://cswb5do8rrj7q" path="res://2d_mechanics/pistol/pistol.png" id="1_wlqsu"] 5 | 6 | [node name="Pistol" type="Node2D"] 7 | script = ExtResource("1_8m5tp") 8 | 9 | [node name="Pistol" type="Sprite2D" parent="."] 10 | unique_name_in_owner = true 11 | texture = ExtResource("1_wlqsu") 12 | offset = Vector2(16, 0) 13 | 14 | [node name="End" type="Marker2D" parent="Pistol"] 15 | unique_name_in_owner = true 16 | position = Vector2(46, -11) 17 | -------------------------------------------------------------------------------- /2d_mechanics/projectile/projectile.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | var range = 400.0 4 | var speed = 600.0 5 | var timer : SceneTreeTimer 6 | @onready var sprite = %Sprite 7 | 8 | signal impact(impact_position) 9 | 10 | func _ready(): 11 | timer = get_tree().create_timer(range / speed) 12 | timer.connect("timeout", func(): 13 | impact.emit(global_position) 14 | queue_free() 15 | ) 16 | 17 | var t = create_tween().set_loops(0) 18 | t.tween_property(sprite, "scale", Vector2.ONE * 1.2, 0.1) 19 | t.tween_property(sprite, "scale", Vector2.ONE * 0.8, 0.1) 20 | 21 | 22 | func _process(delta): 23 | var v = Vector2.from_angle(rotation) * speed * delta 24 | position += v 25 | -------------------------------------------------------------------------------- /2d_mechanics/projectile/projectile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/projectile/projectile.png -------------------------------------------------------------------------------- /2d_mechanics/projectile/projectile.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dftkbqwsfd68r" 6 | path="res://.godot/imported/projectile.png-cf987ecac3a60b7d952501ed855e53e2.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/projectile/projectile.png" 14 | dest_files=["res://.godot/imported/projectile.png-cf987ecac3a60b7d952501ed855e53e2.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/projectile/projectile.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3] 2 | 3 | [ext_resource type="Script" path="res://2d_mechanics/projectile/projectile.gd" id="1_ri8rn"] 4 | [ext_resource type="Texture2D" uid="uid://dftkbqwsfd68r" path="res://2d_mechanics/projectile/projectile.png" id="2_dgnw5"] 5 | 6 | [node name="projectile" type="Node2D"] 7 | script = ExtResource("1_ri8rn") 8 | 9 | [node name="Sprite" type="Sprite2D" parent="."] 10 | unique_name_in_owner = true 11 | texture = ExtResource("2_dgnw5") 12 | offset = Vector2(-10, 0) 13 | -------------------------------------------------------------------------------- /2d_mechanics/test_player/test_player.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | @onready var square = %square 4 | 5 | var walking = false 6 | 7 | func _physics_process(delta): 8 | var axis = Input.get_vector("move_left", "move_right", "move_forward", "move_back") 9 | var is_walking_input = axis.length() != 0 10 | 11 | if walking != is_walking_input: 12 | walking = is_walking_input 13 | if walking: square.walk() 14 | else: square.idle() 15 | 16 | if !is_walking_input: return 17 | 18 | position += axis.normalized() * 300.0 * delta 19 | -------------------------------------------------------------------------------- /2d_mechanics/test_player/test_player.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3] 2 | 3 | [ext_resource type="Script" path="res://2d_mechanics/test_player/test_player.gd" id="1_7erpc"] 4 | [ext_resource type="PackedScene" path="res://2d_mechanics/characters/square/square.tscn" id="2_v150i"] 5 | 6 | [node name="TestPlayer" type="Node2D"] 7 | script = ExtResource("1_7erpc") 8 | 9 | [node name="square" parent="." instance=ExtResource("2_v150i")] 10 | unique_name_in_owner = true 11 | -------------------------------------------------------------------------------- /2d_mechanics/trees/pine_tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/2d_mechanics/trees/pine_tree.png -------------------------------------------------------------------------------- /2d_mechanics/trees/pine_tree.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://caqfk2xng5v5u" 6 | path="res://.godot/imported/pine_tree.png-3e316d120aec9418bf800de7d13b7eee.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://2d_mechanics/trees/pine_tree.png" 14 | dest_files=["res://.godot/imported/pine_tree.png-3e316d120aec9418bf800de7d13b7eee.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /2d_mechanics/trees/pine_tree.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3] 2 | 3 | [ext_resource type="Texture2D" uid="uid://b7rhtttevhxtj" path="res://2d_mechanics/ground_shadow.png" id="1_g7t2f"] 4 | [ext_resource type="Texture2D" uid="uid://caqfk2xng5v5u" path="res://2d_mechanics/trees/pine_tree.png" id="2_hd1ds"] 5 | 6 | [node name="PineTree" type="Node2D"] 7 | scale = Vector2(1.25, 1.25) 8 | 9 | [node name="GroundShadow" type="Sprite2D" parent="."] 10 | modulate = Color(0.898039, 0.878431, 0.831373, 1) 11 | z_index = -1 12 | z_as_relative = false 13 | scale = Vector2(0.653846, 0.653846) 14 | texture = ExtResource("1_g7t2f") 15 | 16 | [node name="PineTree" type="Sprite2D" parent="."] 17 | position = Vector2(0, -72) 18 | texture = ExtResource("2_hd1ds") 19 | -------------------------------------------------------------------------------- /3d_mechanics/3d_mechanics_style_demo.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=20 format=3 uid="uid://c54god6iy8wi0"] 2 | 3 | [ext_resource type="Material" path="res://3d_mechanics/first_color.tres" id="1_xrurx"] 4 | [ext_resource type="PackedScene" path="res://3d_mechanics/elements/gears/gears.tscn" id="2_6f4a4"] 5 | [ext_resource type="Script" path="res://3d_mechanics/elements/platform/Platform.gd" id="3_blkdv"] 6 | [ext_resource type="PackedScene" path="res://3d_mechanics/elements/lever/lever.tscn" id="4_wtrvj"] 7 | [ext_resource type="PackedScene" path="res://3d_mechanics/elements/button/button.tscn" id="5_6a71y"] 8 | [ext_resource type="PackedScene" path="res://3d_mechanics/elements/door/door.tscn" id="6_3ehie"] 9 | [ext_resource type="PackedScene" uid="uid://bs8k42pj2yfdi" path="res://3d_mechanics/elements/cube.glb" id="7_e1pfl"] 10 | [ext_resource type="PackedScene" path="res://3d_mechanics/elements/goal/goal.tscn" id="8_5a3ns"] 11 | [ext_resource type="PackedScene" path="res://3d_mechanics/elements/pipes/pipe.tscn" id="9_d7je3"] 12 | [ext_resource type="PackedScene" path="res://3d_mechanics/elements/lightbulb/lightbulb.tscn" id="10_sr72e"] 13 | 14 | [sub_resource type="Environment" id="Environment_t0llh"] 15 | background_mode = 1 16 | background_color = Color(0.784314, 0.92549, 0.611765, 1) 17 | ambient_light_source = 2 18 | ambient_light_color = Color(0.709804, 0.709804, 0.709804, 1) 19 | ambient_light_sky_contribution = 0.5 20 | tonemap_mode = 2 21 | tonemap_exposure = 0.9 22 | tonemap_white = 1.1 23 | ssao_enabled = true 24 | ssao_intensity = 0.5 25 | glow_enabled = true 26 | glow_normalized = true 27 | glow_intensity = 0.2 28 | fog_light_color = Color(0.211765, 0.32549, 0.556863, 1) 29 | fog_light_energy = 1.2 30 | fog_density = 0.0005 31 | fog_height_density = 0.25 32 | 33 | [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_uqkg3"] 34 | albedo_color = Color(1, 0.435294, 0.0784314, 1) 35 | 36 | [sub_resource type="BoxMesh" id="BoxMesh_ff1f3"] 37 | size = Vector3(1, 2, 2) 38 | 39 | [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_m2rgo"] 40 | shading_mode = 0 41 | albedo_color = Color(0.784314, 0.92549, 0.611765, 1) 42 | disable_receive_shadows = true 43 | proximity_fade_enabled = true 44 | proximity_fade_distance = 2.0 45 | 46 | [sub_resource type="PlaneMesh" id="PlaneMesh_7dv5w"] 47 | size = Vector2(40, 40) 48 | 49 | [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_m1pri"] 50 | albedo_color = Color(0.992157, 0.8, 0.219608, 1) 51 | 52 | [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_r4r30"] 53 | 54 | [sub_resource type="ArrayMesh" id="ArrayMesh_5jk4s"] 55 | _surfaces = [{ 56 | "aabb": AABB(-0.25, -0.25, -0.25, 0.5, 0.5, 0.5), 57 | "format": 4097, 58 | "index_count": 564, 59 | "index_data": PackedByteArray(50, 0, 12, 0, 61, 0, 50, 0, 1, 0, 12, 0, 74, 0, 62, 0, 85, 0, 74, 0, 49, 0, 62, 0, 84, 0, 13, 0, 36, 0, 84, 0, 60, 0, 13, 0, 2, 0, 38, 0, 14, 0, 2, 0, 25, 0, 38, 0, 26, 0, 86, 0, 37, 0, 26, 0, 73, 0, 86, 0, 0, 0, 5, 0, 3, 0, 0, 0, 4, 0, 5, 0, 3, 0, 8, 0, 7, 0, 3, 0, 5, 0, 8, 0, 1, 0, 8, 0, 6, 0, 1, 0, 7, 0, 8, 0, 6, 0, 11, 0, 10, 0, 6, 0, 8, 0, 11, 0, 2, 0, 11, 0, 9, 0, 2, 0, 10, 0, 11, 0, 9, 0, 5, 0, 4, 0, 9, 0, 11, 0, 5, 0, 5, 0, 11, 0, 8, 0, 12, 0, 17, 0, 15, 0, 12, 0, 16, 0, 17, 0, 15, 0, 20, 0, 19, 0, 15, 0, 17, 0, 20, 0, 13, 0, 20, 0, 18, 0, 13, 0, 19, 0, 20, 0, 18, 0, 23, 0, 22, 0, 18, 0, 20, 0, 23, 0, 14, 0, 23, 0, 21, 0, 14, 0, 22, 0, 23, 0, 21, 0, 17, 0, 16, 0, 21, 0, 23, 0, 17, 0, 17, 0, 23, 0, 20, 0, 24, 0, 29, 0, 27, 0, 24, 0, 28, 0, 29, 0, 27, 0, 32, 0, 31, 0, 27, 0, 29, 0, 32, 0, 25, 0, 32, 0, 30, 0, 25, 0, 31, 0, 32, 0, 30, 0, 35, 0, 34, 0, 30, 0, 32, 0, 35, 0, 26, 0, 35, 0, 33, 0, 26, 0, 34, 0, 35, 0, 33, 0, 29, 0, 28, 0, 33, 0, 35, 0, 29, 0, 29, 0, 35, 0, 32, 0, 36, 0, 41, 0, 39, 0, 36, 0, 40, 0, 41, 0, 39, 0, 44, 0, 43, 0, 39, 0, 41, 0, 44, 0, 37, 0, 44, 0, 42, 0, 37, 0, 43, 0, 44, 0, 42, 0, 47, 0, 46, 0, 42, 0, 44, 0, 47, 0, 38, 0, 47, 0, 45, 0, 38, 0, 46, 0, 47, 0, 45, 0, 41, 0, 40, 0, 45, 0, 47, 0, 41, 0, 41, 0, 47, 0, 44, 0, 48, 0, 53, 0, 51, 0, 48, 0, 52, 0, 53, 0, 51, 0, 56, 0, 55, 0, 51, 0, 53, 0, 56, 0, 49, 0, 56, 0, 54, 0, 49, 0, 55, 0, 56, 0, 54, 0, 59, 0, 58, 0, 54, 0, 56, 0, 59, 0, 50, 0, 59, 0, 57, 0, 50, 0, 58, 0, 59, 0, 57, 0, 53, 0, 52, 0, 57, 0, 59, 0, 53, 0, 53, 0, 59, 0, 56, 0, 60, 0, 65, 0, 63, 0, 60, 0, 64, 0, 65, 0, 63, 0, 68, 0, 67, 0, 63, 0, 65, 0, 68, 0, 61, 0, 68, 0, 66, 0, 61, 0, 67, 0, 68, 0, 66, 0, 71, 0, 70, 0, 66, 0, 68, 0, 71, 0, 62, 0, 71, 0, 69, 0, 62, 0, 70, 0, 71, 0, 69, 0, 65, 0, 64, 0, 69, 0, 71, 0, 65, 0, 65, 0, 71, 0, 68, 0, 72, 0, 77, 0, 75, 0, 72, 0, 76, 0, 77, 0, 75, 0, 80, 0, 79, 0, 75, 0, 77, 0, 80, 0, 73, 0, 80, 0, 78, 0, 73, 0, 79, 0, 80, 0, 78, 0, 83, 0, 82, 0, 78, 0, 80, 0, 83, 0, 74, 0, 83, 0, 81, 0, 74, 0, 82, 0, 83, 0, 81, 0, 77, 0, 76, 0, 81, 0, 83, 0, 77, 0, 77, 0, 83, 0, 80, 0, 84, 0, 89, 0, 87, 0, 84, 0, 88, 0, 89, 0, 87, 0, 92, 0, 91, 0, 87, 0, 89, 0, 92, 0, 85, 0, 92, 0, 90, 0, 85, 0, 91, 0, 92, 0, 90, 0, 95, 0, 94, 0, 90, 0, 92, 0, 95, 0, 86, 0, 95, 0, 93, 0, 86, 0, 94, 0, 95, 0, 93, 0, 89, 0, 88, 0, 93, 0, 95, 0, 89, 0, 89, 0, 95, 0, 92, 0, 24, 0, 4, 0, 0, 0, 24, 0, 27, 0, 4, 0, 27, 0, 9, 0, 4, 0, 27, 0, 31, 0, 9, 0, 31, 0, 2, 0, 9, 0, 31, 0, 25, 0, 2, 0, 1, 0, 16, 0, 12, 0, 1, 0, 6, 0, 16, 0, 6, 0, 21, 0, 16, 0, 6, 0, 10, 0, 21, 0, 10, 0, 14, 0, 21, 0, 10, 0, 2, 0, 14, 0, 13, 0, 40, 0, 36, 0, 13, 0, 18, 0, 40, 0, 18, 0, 45, 0, 40, 0, 18, 0, 22, 0, 45, 0, 22, 0, 38, 0, 45, 0, 22, 0, 14, 0, 38, 0, 37, 0, 34, 0, 26, 0, 37, 0, 42, 0, 34, 0, 42, 0, 30, 0, 34, 0, 42, 0, 46, 0, 30, 0, 46, 0, 25, 0, 30, 0, 46, 0, 38, 0, 25, 0, 72, 0, 28, 0, 24, 0, 72, 0, 75, 0, 28, 0, 75, 0, 33, 0, 28, 0, 75, 0, 79, 0, 33, 0, 79, 0, 26, 0, 33, 0, 79, 0, 73, 0, 26, 0, 36, 0, 88, 0, 84, 0, 36, 0, 39, 0, 88, 0, 39, 0, 93, 0, 88, 0, 39, 0, 43, 0, 93, 0, 43, 0, 86, 0, 93, 0, 43, 0, 37, 0, 86, 0, 85, 0, 82, 0, 74, 0, 85, 0, 90, 0, 82, 0, 90, 0, 78, 0, 82, 0, 90, 0, 94, 0, 78, 0, 94, 0, 73, 0, 78, 0, 94, 0, 86, 0, 73, 0, 48, 0, 76, 0, 72, 0, 48, 0, 51, 0, 76, 0, 51, 0, 81, 0, 76, 0, 51, 0, 55, 0, 81, 0, 55, 0, 74, 0, 81, 0, 55, 0, 49, 0, 74, 0, 84, 0, 64, 0, 60, 0, 84, 0, 87, 0, 64, 0, 87, 0, 69, 0, 64, 0, 87, 0, 91, 0, 69, 0, 91, 0, 62, 0, 69, 0, 91, 0, 85, 0, 62, 0, 61, 0, 58, 0, 50, 0, 61, 0, 66, 0, 58, 0, 66, 0, 54, 0, 58, 0, 66, 0, 70, 0, 54, 0, 70, 0, 49, 0, 54, 0, 70, 0, 62, 0, 49, 0, 0, 0, 52, 0, 48, 0, 0, 0, 3, 0, 52, 0, 3, 0, 57, 0, 52, 0, 3, 0, 7, 0, 57, 0, 7, 0, 50, 0, 57, 0, 7, 0, 1, 0, 50, 0, 60, 0, 19, 0, 13, 0, 60, 0, 63, 0, 19, 0, 63, 0, 15, 0, 19, 0, 63, 0, 67, 0, 15, 0, 67, 0, 12, 0, 15, 0, 67, 0, 61, 0, 12, 0, 24, 0, 48, 0, 72, 0, 24, 0, 0, 0, 48, 0), 60 | "lods": [0.0172967, PackedByteArray(50, 0, 12, 0, 61, 0, 50, 0, 59, 0, 57, 0, 50, 0, 56, 0, 59, 0, 7, 0, 50, 0, 57, 0, 6, 0, 7, 0, 8, 0, 7, 0, 6, 0, 50, 0, 50, 0, 6, 0, 12, 0, 6, 0, 16, 0, 12, 0, 12, 0, 16, 0, 17, 0, 12, 0, 17, 0, 19, 0, 19, 0, 17, 0, 20, 0, 61, 0, 12, 0, 19, 0, 63, 0, 61, 0, 19, 0, 63, 0, 68, 0, 61, 0, 63, 0, 65, 0, 68, 0, 65, 0, 71, 0, 68, 0, 61, 0, 68, 0, 62, 0, 61, 0, 62, 0, 50, 0, 62, 0, 68, 0, 71, 0, 62, 0, 71, 0, 65, 0, 62, 0, 49, 0, 50, 0, 49, 0, 56, 0, 50, 0, 49, 0, 53, 0, 56, 0, 53, 0, 59, 0, 56, 0, 57, 0, 59, 0, 53, 0, 57, 0, 53, 0, 48, 0, 48, 0, 53, 0, 49, 0, 7, 0, 57, 0, 48, 0, 0, 0, 7, 0, 48, 0, 7, 0, 0, 0, 8, 0, 0, 0, 11, 0, 8, 0, 9, 0, 11, 0, 0, 0, 31, 0, 9, 0, 0, 0, 24, 0, 31, 0, 0, 0, 24, 0, 0, 0, 48, 0, 31, 0, 24, 0, 32, 0, 24, 0, 35, 0, 32, 0, 33, 0, 35, 0, 24, 0, 79, 0, 33, 0, 24, 0, 24, 0, 48, 0, 72, 0, 72, 0, 79, 0, 24, 0, 48, 0, 49, 0, 72, 0, 72, 0, 77, 0, 79, 0, 79, 0, 77, 0, 80, 0, 77, 0, 83, 0, 80, 0, 74, 0, 77, 0, 72, 0, 49, 0, 74, 0, 72, 0, 74, 0, 83, 0, 77, 0, 74, 0, 49, 0, 62, 0, 74, 0, 80, 0, 83, 0, 73, 0, 80, 0, 74, 0, 73, 0, 79, 0, 80, 0, 74, 0, 62, 0, 85, 0, 85, 0, 62, 0, 63, 0, 86, 0, 73, 0, 74, 0, 85, 0, 86, 0, 74, 0, 79, 0, 73, 0, 26, 0, 26, 0, 73, 0, 86, 0, 79, 0, 26, 0, 33, 0, 26, 0, 35, 0, 33, 0, 26, 0, 32, 0, 35, 0, 85, 0, 92, 0, 86, 0, 85, 0, 89, 0, 92, 0, 86, 0, 92, 0, 95, 0, 84, 0, 89, 0, 85, 0, 84, 0, 88, 0, 89, 0, 39, 0, 88, 0, 84, 0, 89, 0, 95, 0, 92, 0, 88, 0, 95, 0, 89, 0, 86, 0, 95, 0, 88, 0, 37, 0, 86, 0, 88, 0, 26, 0, 86, 0, 37, 0, 39, 0, 37, 0, 88, 0, 39, 0, 44, 0, 37, 0, 39, 0, 41, 0, 44, 0, 37, 0, 38, 0, 26, 0, 37, 0, 44, 0, 38, 0, 38, 0, 31, 0, 26, 0, 38, 0, 44, 0, 47, 0, 2, 0, 31, 0, 38, 0, 31, 0, 2, 0, 9, 0, 38, 0, 47, 0, 40, 0, 40, 0, 47, 0, 41, 0, 41, 0, 47, 0, 44, 0, 14, 0, 38, 0, 40, 0, 2, 0, 38, 0, 14, 0, 18, 0, 14, 0, 40, 0, 2, 0, 11, 0, 9, 0, 18, 0, 20, 0, 14, 0, 17, 0, 14, 0, 20, 0, 16, 0, 14, 0, 17, 0, 2, 0, 14, 0, 16, 0, 6, 0, 2, 0, 16, 0, 6, 0, 11, 0, 2, 0, 6, 0, 8, 0, 11, 0, 84, 0, 18, 0, 39, 0, 18, 0, 40, 0, 39, 0, 39, 0, 40, 0, 41, 0, 84, 0, 63, 0, 18, 0, 84, 0, 85, 0, 63, 0, 63, 0, 19, 0, 18, 0, 18, 0, 19, 0, 20, 0, 31, 0, 32, 0, 26, 0, 62, 0, 65, 0, 63, 0), 0.0221048, PackedByteArray(57, 0, 16, 0, 68, 0, 68, 0, 16, 0, 19, 0, 19, 0, 16, 0, 20, 0, 63, 0, 68, 0, 19, 0, 57, 0, 6, 0, 16, 0, 7, 0, 6, 0, 57, 0, 6, 0, 7, 0, 8, 0, 68, 0, 49, 0, 57, 0, 49, 0, 53, 0, 59, 0, 57, 0, 59, 0, 53, 0, 53, 0, 49, 0, 77, 0, 7, 0, 57, 0, 53, 0, 7, 0, 9, 0, 8, 0, 49, 0, 74, 0, 77, 0, 74, 0, 49, 0, 68, 0, 74, 0, 68, 0, 92, 0, 74, 0, 79, 0, 77, 0, 92, 0, 95, 0, 74, 0, 95, 0, 79, 0, 74, 0, 88, 0, 95, 0, 92, 0, 33, 0, 79, 0, 95, 0, 44, 0, 95, 0, 88, 0, 33, 0, 95, 0, 44, 0, 39, 0, 44, 0, 88, 0, 39, 0, 41, 0, 44, 0, 44, 0, 47, 0, 33, 0, 47, 0, 31, 0, 33, 0, 41, 0, 47, 0, 44, 0, 40, 0, 47, 0, 41, 0, 18, 0, 47, 0, 40, 0, 9, 0, 31, 0, 47, 0, 9, 0, 47, 0, 18, 0, 9, 0, 18, 0, 16, 0, 16, 0, 18, 0, 20, 0, 6, 0, 9, 0, 16, 0, 6, 0, 8, 0, 9, 0, 88, 0, 18, 0, 39, 0, 18, 0, 40, 0, 39, 0, 39, 0, 40, 0, 41, 0, 88, 0, 63, 0, 18, 0, 88, 0, 92, 0, 63, 0, 92, 0, 68, 0, 63, 0, 63, 0, 19, 0, 18, 0, 18, 0, 19, 0, 20, 0, 24, 0, 33, 0, 31, 0, 79, 0, 33, 0, 24, 0, 77, 0, 79, 0, 24, 0, 24, 0, 53, 0, 77, 0, 24, 0, 7, 0, 53, 0, 24, 0, 31, 0, 7, 0, 31, 0, 9, 0, 7, 0, 49, 0, 59, 0, 57, 0), 0.305953, PackedByteArray(57, 0, 16, 0, 68, 0, 68, 0, 53, 0, 57, 0, 16, 0, 57, 0, 8, 0, 68, 0, 16, 0, 63, 0, 63, 0, 16, 0, 20, 0, 77, 0, 68, 0, 95, 0, 77, 0, 53, 0, 68, 0, 88, 0, 63, 0, 18, 0, 88, 0, 18, 0, 41, 0, 18, 0, 63, 0, 20, 0, 88, 0, 95, 0, 63, 0, 95, 0, 68, 0, 63, 0, 9, 0, 47, 0, 18, 0, 44, 0, 47, 0, 9, 0, 9, 0, 18, 0, 16, 0, 16, 0, 8, 0, 9, 0, 16, 0, 18, 0, 20, 0, 18, 0, 47, 0, 41, 0, 41, 0, 47, 0, 44, 0, 9, 0, 95, 0, 44, 0, 95, 0, 9, 0, 77, 0, 57, 0, 9, 0, 8, 0, 9, 0, 57, 0, 53, 0, 9, 0, 53, 0, 77, 0, 88, 0, 41, 0, 44, 0, 44, 0, 95, 0, 88, 0)], 61 | "primitive": 3, 62 | "vertex_count": 96, 63 | "vertex_data": PackedByteArray(205, 204, 76, 190, 0, 0, 128, 190, 205, 204, 76, 62, 205, 204, 76, 190, 205, 204, 76, 190, 0, 0, 128, 62, 0, 0, 128, 190, 205, 204, 76, 190, 205, 204, 76, 62, 204, 204, 76, 190, 237, 40, 121, 190, 204, 93, 102, 62, 204, 93, 102, 190, 237, 40, 121, 190, 204, 204, 76, 62, 208, 72, 101, 190, 252, 131, 114, 190, 208, 72, 101, 62, 204, 93, 102, 190, 204, 204, 76, 190, 237, 40, 121, 62, 204, 204, 76, 190, 204, 93, 102, 190, 237, 40, 121, 62, 208, 72, 101, 190, 208, 72, 101, 190, 252, 131, 114, 62, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 62, 237, 40, 121, 190, 204, 204, 76, 190, 204, 93, 102, 62, 252, 131, 114, 190, 208, 72, 101, 190, 208, 72, 101, 62, 205, 204, 76, 190, 205, 204, 76, 62, 0, 0, 128, 62, 205, 204, 76, 190, 0, 0, 128, 62, 205, 204, 76, 62, 0, 0, 128, 190, 205, 204, 76, 62, 205, 204, 76, 62, 204, 204, 76, 190, 204, 93, 102, 62, 237, 40, 121, 62, 204, 93, 102, 190, 204, 204, 76, 62, 237, 40, 121, 62, 208, 72, 101, 190, 208, 72, 101, 62, 252, 131, 114, 62, 204, 93, 102, 190, 237, 40, 121, 62, 204, 204, 76, 62, 204, 204, 76, 190, 237, 40, 121, 62, 204, 93, 102, 62, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 62, 237, 40, 121, 190, 204, 204, 76, 62, 204, 93, 102, 62, 237, 40, 121, 190, 204, 93, 102, 62, 204, 204, 76, 62, 252, 131, 114, 190, 208, 72, 101, 62, 208, 72, 101, 62, 205, 204, 76, 190, 0, 0, 128, 190, 205, 204, 76, 190, 0, 0, 128, 190, 205, 204, 76, 190, 205, 204, 76, 190, 205, 204, 76, 190, 205, 204, 76, 190, 0, 0, 128, 190, 204, 93, 102, 190, 237, 40, 121, 190, 204, 204, 76, 190, 204, 204, 76, 190, 237, 40, 121, 190, 204, 93, 102, 190, 208, 72, 101, 190, 252, 131, 114, 190, 208, 72, 101, 190, 237, 40, 121, 190, 204, 204, 76, 190, 204, 93, 102, 190, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 190, 252, 131, 114, 190, 208, 72, 101, 190, 208, 72, 101, 190, 204, 204, 76, 190, 204, 93, 102, 190, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 190, 237, 40, 121, 190, 208, 72, 101, 190, 208, 72, 101, 190, 252, 131, 114, 190, 205, 204, 76, 190, 0, 0, 128, 62, 205, 204, 76, 190, 205, 204, 76, 190, 205, 204, 76, 62, 0, 0, 128, 190, 0, 0, 128, 190, 205, 204, 76, 62, 205, 204, 76, 190, 204, 204, 76, 190, 237, 40, 121, 62, 204, 93, 102, 190, 204, 93, 102, 190, 237, 40, 121, 62, 204, 204, 76, 190, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 190, 204, 93, 102, 190, 204, 204, 76, 62, 237, 40, 121, 190, 204, 204, 76, 190, 204, 93, 102, 62, 237, 40, 121, 190, 208, 72, 101, 190, 208, 72, 101, 62, 252, 131, 114, 190, 237, 40, 121, 190, 204, 93, 102, 62, 204, 204, 76, 190, 237, 40, 121, 190, 204, 204, 76, 62, 204, 93, 102, 190, 252, 131, 114, 190, 208, 72, 101, 62, 208, 72, 101, 190, 205, 204, 76, 62, 0, 0, 128, 190, 205, 204, 76, 62, 0, 0, 128, 62, 205, 204, 76, 190, 205, 204, 76, 62, 205, 204, 76, 62, 205, 204, 76, 190, 0, 0, 128, 62, 204, 93, 102, 62, 237, 40, 121, 190, 204, 204, 76, 62, 204, 204, 76, 62, 237, 40, 121, 190, 204, 93, 102, 62, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 62, 237, 40, 121, 62, 204, 204, 76, 190, 204, 93, 102, 62, 237, 40, 121, 62, 204, 93, 102, 190, 204, 204, 76, 62, 252, 131, 114, 62, 208, 72, 101, 190, 208, 72, 101, 62, 204, 204, 76, 62, 204, 93, 102, 190, 237, 40, 121, 62, 204, 93, 102, 62, 204, 204, 76, 190, 237, 40, 121, 62, 208, 72, 101, 62, 208, 72, 101, 190, 252, 131, 114, 62, 205, 204, 76, 62, 0, 0, 128, 62, 205, 204, 76, 62, 205, 204, 76, 62, 205, 204, 76, 62, 0, 0, 128, 62, 0, 0, 128, 62, 205, 204, 76, 62, 205, 204, 76, 62, 204, 204, 76, 62, 237, 40, 121, 62, 204, 93, 102, 62, 204, 93, 102, 62, 237, 40, 121, 62, 204, 204, 76, 62, 208, 72, 101, 62, 252, 131, 114, 62, 208, 72, 101, 62, 204, 93, 102, 62, 204, 204, 76, 62, 237, 40, 121, 62, 204, 204, 76, 62, 204, 93, 102, 62, 237, 40, 121, 62, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 62, 237, 40, 121, 62, 204, 93, 102, 62, 204, 204, 76, 62, 237, 40, 121, 62, 204, 204, 76, 62, 204, 93, 102, 62, 252, 131, 114, 62, 208, 72, 101, 62, 208, 72, 101, 62, 205, 204, 76, 62, 0, 0, 128, 190, 205, 204, 76, 190, 205, 204, 76, 62, 205, 204, 76, 190, 0, 0, 128, 190, 0, 0, 128, 62, 205, 204, 76, 190, 205, 204, 76, 190, 204, 204, 76, 62, 237, 40, 121, 190, 204, 93, 102, 190, 204, 93, 102, 62, 237, 40, 121, 190, 204, 204, 76, 190, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 190, 204, 93, 102, 62, 204, 204, 76, 190, 237, 40, 121, 190, 204, 204, 76, 62, 204, 93, 102, 190, 237, 40, 121, 190, 208, 72, 101, 62, 208, 72, 101, 190, 252, 131, 114, 190, 237, 40, 121, 62, 204, 93, 102, 190, 204, 204, 76, 190, 237, 40, 121, 62, 204, 204, 76, 190, 204, 93, 102, 190, 252, 131, 114, 62, 208, 72, 101, 190, 208, 72, 101, 190, 205, 204, 76, 62, 0, 0, 128, 62, 205, 204, 76, 190, 0, 0, 128, 62, 205, 204, 76, 62, 205, 204, 76, 190, 205, 204, 76, 62, 205, 204, 76, 62, 0, 0, 128, 190, 204, 93, 102, 62, 237, 40, 121, 62, 204, 204, 76, 190, 204, 204, 76, 62, 237, 40, 121, 62, 204, 93, 102, 190, 208, 72, 101, 62, 252, 131, 114, 62, 208, 72, 101, 190, 237, 40, 121, 62, 204, 204, 76, 62, 204, 93, 102, 190, 237, 40, 121, 62, 204, 93, 102, 62, 204, 204, 76, 190, 252, 131, 114, 62, 208, 72, 101, 62, 208, 72, 101, 190, 204, 204, 76, 62, 204, 93, 102, 62, 237, 40, 121, 190, 204, 93, 102, 62, 204, 204, 76, 62, 237, 40, 121, 190, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 190) 64 | }] 65 | blend_shape_mode = 0 66 | 67 | [sub_resource type="ArrayMesh" id="ArrayMesh_k0r8l"] 68 | resource_name = "cube_Cube004" 69 | _surfaces = [{ 70 | "aabb": AABB(-0.25, -0.25, -0.25, 0.5, 0.5, 0.5), 71 | "attribute_data": PackedByteArray(154, 153, 25, 62, 204, 204, 140, 62, 206, 204, 204, 62, 192, 204, 204, 60, 206, 204, 204, 62, 154, 153, 121, 63, 154, 153, 25, 62, 140, 104, 134, 62, 26, 209, 12, 62, 204, 204, 140, 62, 151, 91, 13, 62, 208, 173, 134, 62, 204, 204, 204, 62, 0, 0, 0, 0, 204, 204, 204, 62, 0, 0, 128, 63, 154, 153, 25, 62, 0, 0, 128, 62, 0, 0, 192, 62, 192, 204, 204, 60, 152, 91, 13, 62, 0, 0, 128, 62, 0, 0, 192, 62, 128, 185, 85, 60, 0, 0, 192, 62, 0, 0, 128, 63, 0, 0, 0, 62, 206, 204, 140, 62, 0, 0, 192, 62, 154, 153, 121, 63, 205, 204, 204, 62, 186, 203, 124, 63, 0, 0, 0, 62, 204, 173, 134, 62, 0, 0, 192, 62, 26, 169, 124, 63, 154, 153, 25, 63, 192, 204, 204, 60, 154, 153, 89, 63, 202, 204, 140, 62, 154, 153, 25, 63, 154, 153, 121, 63, 185, 203, 28, 63, 224, 204, 204, 60, 154, 153, 25, 63, 0, 0, 0, 0, 154, 153, 25, 63, 0, 0, 128, 63, 26, 169, 28, 63, 0, 0, 0, 0, 26, 169, 28, 63, 0, 0, 128, 63, 0, 0, 32, 63, 154, 153, 121, 63, 0, 0, 96, 63, 206, 204, 140, 62, 0, 0, 32, 63, 192, 204, 204, 60, 153, 153, 89, 63, 0, 0, 128, 62, 0, 0, 32, 63, 0, 0, 0, 0, 0, 0, 32, 63, 26, 169, 124, 63, 0, 0, 96, 63, 204, 173, 134, 62, 153, 153, 25, 63, 186, 203, 124, 63, 186, 203, 28, 63, 153, 153, 121, 63, 25, 169, 28, 63, 26, 169, 124, 63, 154, 153, 25, 62, 50, 51, 243, 62, 206, 204, 204, 62, 102, 102, 70, 63, 206, 204, 204, 62, 154, 153, 57, 63, 26, 209, 12, 62, 52, 51, 243, 62, 154, 153, 25, 62, 116, 151, 249, 62, 152, 91, 13, 62, 54, 82, 249, 62, 205, 204, 204, 62, 70, 52, 67, 63, 0, 0, 0, 62, 52, 51, 243, 62, 0, 0, 192, 62, 102, 102, 70, 63, 0, 0, 0, 62, 52, 82, 249, 62, 0, 0, 192, 62, 230, 86, 67, 63, 154, 153, 25, 62, 0, 0, 0, 63, 0, 0, 192, 62, 154, 153, 57, 63, 205, 204, 204, 62, 186, 203, 60, 63, 152, 91, 13, 62, 0, 0, 0, 63, 0, 0, 192, 62, 26, 169, 60, 63, 154, 153, 89, 63, 50, 51, 243, 62, 154, 153, 25, 63, 154, 153, 57, 63, 154, 153, 25, 63, 102, 102, 70, 63, 0, 0, 32, 63, 154, 153, 57, 63, 153, 153, 89, 63, 0, 0, 0, 63, 0, 0, 32, 63, 102, 102, 70, 63, 0, 0, 96, 63, 52, 51, 243, 62, 0, 0, 32, 63, 0, 0, 64, 63, 0, 0, 32, 63, 230, 86, 67, 63, 0, 0, 96, 63, 52, 82, 249, 62, 153, 153, 25, 63, 186, 203, 60, 63, 186, 203, 28, 63, 154, 153, 57, 63, 25, 169, 28, 63, 27, 169, 60, 63, 26, 169, 28, 63, 128, 175, 65, 63, 185, 203, 28, 63, 102, 102, 70, 63, 153, 153, 25, 63, 70, 52, 67, 63, 26, 169, 28, 63, 230, 86, 67, 63, 53, 51, 179, 62, 202, 204, 140, 62, 206, 204, 204, 62, 204, 204, 140, 62, 206, 204, 204, 62, 100, 102, 102, 62, 115, 151, 185, 62, 206, 204, 140, 62, 51, 51, 179, 62, 140, 104, 134, 62, 53, 82, 185, 62, 202, 173, 134, 62, 205, 204, 204, 62, 140, 104, 134, 62, 141, 104, 198, 62, 204, 204, 140, 62, 255, 160, 188, 62, 204, 173, 134, 62, 202, 173, 198, 62, 208, 173, 134, 62, 50, 51, 179, 62, 0, 0, 128, 62, 0, 0, 192, 62, 104, 102, 102, 62, 205, 204, 204, 62, 232, 46, 115, 62, 52, 82, 185, 62, 0, 0, 128, 62, 0, 0, 192, 62, 104, 164, 114, 62, 102, 102, 38, 63, 204, 204, 140, 62, 154, 153, 25, 63, 100, 102, 102, 62, 154, 153, 25, 63, 202, 204, 140, 62, 0, 0, 32, 63, 104, 102, 102, 62, 103, 102, 38, 63, 0, 0, 128, 62, 70, 52, 35, 63, 204, 204, 140, 62, 0, 0, 32, 63, 104, 164, 114, 62, 230, 86, 35, 63, 0, 0, 128, 62, 153, 153, 25, 63, 232, 46, 115, 62, 186, 203, 28, 63, 104, 102, 102, 62, 25, 169, 28, 63, 112, 164, 114, 62, 185, 203, 28, 63, 206, 204, 140, 62, 153, 153, 25, 63, 140, 104, 134, 62, 26, 169, 28, 63, 0, 66, 121, 62, 26, 169, 28, 63, 202, 173, 134, 62, 53, 51, 179, 62, 50, 51, 243, 62, 206, 204, 204, 62, 102, 102, 6, 63, 206, 204, 204, 62, 50, 51, 243, 62, 50, 51, 179, 62, 116, 151, 249, 62, 114, 151, 185, 62, 50, 51, 243, 62, 51, 82, 185, 62, 54, 82, 249, 62, 205, 204, 204, 62, 70, 52, 3, 63, 50, 51, 179, 62, 0, 0, 0, 63, 0, 0, 192, 62, 102, 102, 6, 63, 52, 82, 185, 62, 0, 0, 0, 63, 0, 0, 192, 62, 230, 86, 3, 63, 142, 104, 198, 62, 52, 51, 243, 62, 205, 204, 204, 62, 116, 151, 249, 62, 255, 160, 188, 62, 52, 82, 249, 62, 203, 173, 198, 62, 54, 82, 249, 62, 102, 102, 38, 63, 50, 51, 243, 62, 154, 153, 25, 63, 50, 51, 243, 62, 154, 153, 25, 63, 102, 102, 6, 63, 70, 52, 35, 63, 52, 51, 243, 62, 0, 0, 32, 63, 102, 102, 6, 63, 103, 102, 38, 63, 0, 0, 0, 63, 0, 0, 32, 63, 230, 86, 3, 63, 230, 86, 35, 63, 0, 0, 0, 63, 153, 153, 25, 63, 116, 151, 249, 62, 186, 203, 28, 63, 50, 51, 243, 62, 25, 169, 28, 63, 54, 82, 249, 62, 26, 169, 28, 63, 128, 175, 1, 63, 185, 203, 28, 63, 102, 102, 6, 63, 153, 153, 25, 63, 70, 52, 3, 63, 26, 169, 28, 63, 230, 86, 3, 63, 152, 91, 13, 62, 0, 0, 128, 62, 0, 0, 192, 62, 128, 185, 85, 60, 0, 0, 192, 62, 0, 0, 128, 63, 0, 0, 0, 62, 206, 204, 140, 62, 0, 0, 192, 62, 154, 153, 121, 63, 0, 0, 192, 62, 154, 153, 121, 63, 0, 0, 192, 62, 154, 153, 121, 63, 154, 153, 25, 63, 0, 0, 0, 0, 154, 153, 25, 63, 0, 0, 128, 63, 0, 0, 32, 63, 154, 153, 121, 63, 0, 0, 32, 63, 154, 153, 121, 63, 0, 0, 96, 63, 206, 204, 140, 62, 0, 0, 32, 63, 0, 0, 0, 0, 0, 0, 32, 63, 26, 169, 124, 63, 0, 0, 96, 63, 204, 173, 134, 62, 0, 0, 32, 63, 0, 0, 64, 63, 0, 0, 32, 63, 230, 86, 67, 63, 0, 0, 96, 63, 52, 82, 249, 62, 25, 169, 28, 63, 27, 169, 60, 63, 25, 169, 28, 63, 27, 169, 60, 63, 25, 169, 28, 63, 27, 169, 60, 63, 26, 169, 28, 63, 230, 86, 67, 63, 26, 169, 28, 63, 230, 86, 67, 63, 53, 82, 185, 62, 202, 173, 134, 62, 53, 82, 185, 62, 202, 173, 134, 62, 53, 82, 185, 62, 202, 173, 134, 62, 50, 51, 179, 62, 0, 0, 128, 62, 0, 0, 192, 62, 104, 102, 102, 62, 103, 102, 38, 63, 0, 0, 128, 62, 25, 169, 28, 63, 112, 164, 114, 62, 25, 169, 28, 63, 112, 164, 114, 62, 25, 169, 28, 63, 112, 164, 114, 62, 51, 82, 185, 62, 54, 82, 249, 62, 51, 82, 185, 62, 54, 82, 249, 62, 51, 82, 185, 62, 54, 82, 249, 62, 103, 102, 38, 63, 0, 0, 0, 63, 26, 169, 28, 63, 230, 86, 3, 63, 26, 169, 28, 63, 230, 86, 3, 63, 26, 169, 28, 63, 230, 86, 3, 63, 26, 169, 28, 63, 230, 86, 3, 63, 204, 204, 204, 62, 0, 0, 0, 0, 204, 204, 204, 62, 0, 0, 128, 63, 154, 153, 25, 62, 0, 0, 128, 62, 0, 0, 192, 62, 0, 0, 128, 63, 0, 0, 0, 62, 206, 204, 140, 62, 0, 0, 192, 62, 154, 153, 121, 63, 154, 153, 25, 63, 0, 0, 0, 0, 154, 153, 25, 63, 0, 0, 128, 63, 0, 0, 32, 63, 154, 153, 121, 63, 0, 0, 32, 63, 154, 153, 121, 63, 0, 0, 96, 63, 206, 204, 140, 62, 154, 153, 25, 62, 50, 51, 243, 62, 0, 0, 0, 62, 52, 51, 243, 62, 0, 0, 192, 62, 102, 102, 70, 63, 154, 153, 25, 62, 0, 0, 0, 63, 0, 0, 192, 62, 154, 153, 57, 63, 153, 153, 89, 63, 0, 0, 0, 63, 25, 169, 28, 63, 27, 169, 60, 63, 26, 169, 28, 63, 230, 86, 67, 63, 26, 169, 28, 63, 230, 86, 67, 63, 206, 204, 204, 62, 204, 204, 140, 62, 53, 82, 185, 62, 202, 173, 134, 62, 53, 82, 185, 62, 202, 173, 134, 62, 53, 82, 185, 62, 202, 173, 134, 62, 0, 0, 192, 62, 104, 102, 102, 62, 0, 0, 192, 62, 104, 164, 114, 62, 103, 102, 38, 63, 0, 0, 128, 62, 25, 169, 28, 63, 112, 164, 114, 62, 25, 169, 28, 63, 112, 164, 114, 62, 25, 169, 28, 63, 112, 164, 114, 62, 25, 169, 28, 63, 112, 164, 114, 62, 206, 204, 204, 62, 50, 51, 243, 62, 51, 82, 185, 62, 54, 82, 249, 62, 51, 82, 185, 62, 54, 82, 249, 62, 0, 0, 192, 62, 102, 102, 6, 63, 103, 102, 38, 63, 0, 0, 0, 63, 25, 169, 28, 63, 54, 82, 249, 62, 25, 169, 28, 63, 54, 82, 249, 62, 26, 169, 28, 63, 128, 175, 1, 63, 26, 169, 28, 63, 230, 86, 3, 63, 26, 169, 28, 63, 230, 86, 3, 63, 154, 153, 25, 62, 204, 204, 140, 62, 204, 204, 204, 62, 0, 0, 0, 0, 204, 204, 204, 62, 0, 0, 128, 63, 154, 153, 25, 62, 0, 0, 128, 62, 152, 91, 13, 62, 0, 0, 128, 62, 0, 0, 0, 62, 204, 173, 134, 62, 154, 153, 25, 63, 154, 153, 121, 63, 154, 153, 25, 63, 0, 0, 128, 63, 26, 169, 28, 63, 0, 0, 0, 0, 26, 169, 28, 63, 0, 0, 128, 63, 0, 0, 96, 63, 206, 204, 140, 62, 0, 0, 32, 63, 192, 204, 204, 60, 0, 0, 32, 63, 26, 169, 124, 63, 154, 153, 25, 62, 50, 51, 243, 62, 206, 204, 204, 62, 154, 153, 57, 63, 0, 0, 0, 62, 52, 51, 243, 62, 0, 0, 192, 62, 102, 102, 70, 63, 0, 0, 0, 62, 52, 82, 249, 62, 0, 0, 192, 62, 230, 86, 67, 63, 152, 91, 13, 62, 0, 0, 0, 63, 154, 153, 25, 63, 154, 153, 57, 63, 154, 153, 25, 63, 102, 102, 70, 63, 153, 153, 89, 63, 0, 0, 0, 63, 0, 0, 32, 63, 102, 102, 70, 63, 25, 169, 28, 63, 27, 169, 60, 63, 53, 51, 179, 62, 202, 204, 140, 62, 206, 204, 204, 62, 204, 204, 140, 62, 206, 204, 204, 62, 100, 102, 102, 62, 53, 82, 185, 62, 202, 173, 134, 62, 202, 173, 198, 62, 208, 173, 134, 62, 50, 51, 179, 62, 0, 0, 128, 62, 154, 153, 25, 63, 100, 102, 102, 62, 154, 153, 25, 63, 202, 204, 140, 62, 103, 102, 38, 63, 0, 0, 128, 62, 230, 86, 35, 63, 0, 0, 128, 62, 25, 169, 28, 63, 112, 164, 114, 62, 53, 51, 179, 62, 50, 51, 243, 62, 53, 51, 179, 62, 50, 51, 243, 62, 206, 204, 204, 62, 102, 102, 6, 63, 206, 204, 204, 62, 50, 51, 243, 62, 51, 82, 185, 62, 54, 82, 249, 62, 50, 51, 179, 62, 0, 0, 0, 63, 0, 0, 192, 62, 230, 86, 3, 63, 154, 153, 25, 63, 50, 51, 243, 62, 154, 153, 25, 63, 50, 51, 243, 62, 154, 153, 25, 63, 102, 102, 6, 63, 0, 0, 32, 63, 102, 102, 6, 63, 230, 86, 35, 63, 0, 0, 0, 63, 25, 169, 28, 63, 54, 82, 249, 62), 72 | "format": 4119, 73 | "index_count": 564, 74 | "index_data": PackedByteArray(71, 0, 18, 0, 85, 0, 71, 0, 1, 0, 18, 0, 101, 0, 86, 0, 115, 0, 101, 0, 70, 0, 86, 0, 114, 0, 19, 0, 52, 0, 114, 0, 84, 0, 19, 0, 2, 0, 54, 0, 20, 0, 2, 0, 37, 0, 54, 0, 38, 0, 116, 0, 53, 0, 38, 0, 100, 0, 116, 0, 0, 0, 5, 0, 3, 0, 0, 0, 4, 0, 5, 0, 3, 0, 10, 0, 8, 0, 3, 0, 5, 0, 10, 0, 1, 0, 11, 0, 6, 0, 1, 0, 9, 0, 11, 0, 7, 0, 17, 0, 15, 0, 7, 0, 12, 0, 17, 0, 2, 0, 17, 0, 14, 0, 2, 0, 15, 0, 17, 0, 13, 0, 5, 0, 4, 0, 13, 0, 16, 0, 5, 0, 5, 0, 16, 0, 10, 0, 18, 0, 24, 0, 21, 0, 18, 0, 22, 0, 24, 0, 21, 0, 30, 0, 28, 0, 21, 0, 24, 0, 30, 0, 19, 0, 32, 0, 27, 0, 19, 0, 29, 0, 32, 0, 26, 0, 35, 0, 34, 0, 26, 0, 31, 0, 35, 0, 20, 0, 35, 0, 33, 0, 20, 0, 34, 0, 35, 0, 33, 0, 25, 0, 23, 0, 33, 0, 35, 0, 25, 0, 25, 0, 35, 0, 31, 0, 36, 0, 41, 0, 39, 0, 36, 0, 40, 0, 41, 0, 39, 0, 45, 0, 43, 0, 39, 0, 41, 0, 45, 0, 37, 0, 46, 0, 42, 0, 37, 0, 44, 0, 46, 0, 42, 0, 51, 0, 49, 0, 42, 0, 46, 0, 51, 0, 38, 0, 51, 0, 48, 0, 38, 0, 49, 0, 51, 0, 47, 0, 41, 0, 40, 0, 47, 0, 50, 0, 41, 0, 41, 0, 50, 0, 45, 0, 52, 0, 61, 0, 56, 0, 52, 0, 58, 0, 61, 0, 55, 0, 64, 0, 63, 0, 55, 0, 59, 0, 64, 0, 53, 0, 64, 0, 62, 0, 53, 0, 63, 0, 64, 0, 62, 0, 68, 0, 67, 0, 62, 0, 64, 0, 68, 0, 54, 0, 68, 0, 66, 0, 54, 0, 67, 0, 68, 0, 66, 0, 60, 0, 57, 0, 66, 0, 68, 0, 60, 0, 60, 0, 68, 0, 65, 0, 69, 0, 74, 0, 72, 0, 69, 0, 73, 0, 74, 0, 72, 0, 78, 0, 76, 0, 72, 0, 74, 0, 78, 0, 70, 0, 78, 0, 75, 0, 70, 0, 76, 0, 78, 0, 75, 0, 83, 0, 81, 0, 75, 0, 78, 0, 83, 0, 71, 0, 83, 0, 80, 0, 71, 0, 81, 0, 83, 0, 79, 0, 74, 0, 73, 0, 79, 0, 82, 0, 74, 0, 74, 0, 82, 0, 77, 0, 84, 0, 91, 0, 88, 0, 84, 0, 89, 0, 91, 0, 87, 0, 94, 0, 93, 0, 87, 0, 90, 0, 94, 0, 85, 0, 94, 0, 92, 0, 85, 0, 93, 0, 94, 0, 92, 0, 98, 0, 96, 0, 92, 0, 94, 0, 98, 0, 86, 0, 98, 0, 95, 0, 86, 0, 96, 0, 98, 0, 95, 0, 91, 0, 89, 0, 95, 0, 98, 0, 91, 0, 90, 0, 97, 0, 94, 0, 99, 0, 104, 0, 102, 0, 99, 0, 103, 0, 104, 0, 102, 0, 108, 0, 106, 0, 102, 0, 104, 0, 108, 0, 100, 0, 109, 0, 105, 0, 100, 0, 107, 0, 109, 0, 105, 0, 113, 0, 111, 0, 105, 0, 109, 0, 113, 0, 101, 0, 113, 0, 110, 0, 101, 0, 111, 0, 113, 0, 110, 0, 104, 0, 103, 0, 110, 0, 113, 0, 104, 0, 104, 0, 112, 0, 108, 0, 114, 0, 121, 0, 117, 0, 114, 0, 119, 0, 121, 0, 117, 0, 124, 0, 123, 0, 117, 0, 121, 0, 124, 0, 115, 0, 124, 0, 122, 0, 115, 0, 123, 0, 124, 0, 122, 0, 128, 0, 127, 0, 122, 0, 124, 0, 128, 0, 116, 0, 128, 0, 126, 0, 116, 0, 127, 0, 128, 0, 126, 0, 120, 0, 118, 0, 126, 0, 128, 0, 120, 0, 120, 0, 128, 0, 125, 0, 36, 0, 4, 0, 0, 0, 36, 0, 39, 0, 4, 0, 39, 0, 13, 0, 4, 0, 39, 0, 43, 0, 13, 0, 44, 0, 2, 0, 14, 0, 44, 0, 37, 0, 2, 0, 1, 0, 22, 0, 18, 0, 1, 0, 6, 0, 22, 0, 7, 0, 33, 0, 23, 0, 7, 0, 15, 0, 33, 0, 15, 0, 20, 0, 33, 0, 15, 0, 2, 0, 20, 0, 19, 0, 58, 0, 52, 0, 19, 0, 27, 0, 58, 0, 26, 0, 66, 0, 57, 0, 26, 0, 34, 0, 66, 0, 34, 0, 54, 0, 66, 0, 34, 0, 20, 0, 54, 0, 53, 0, 49, 0, 38, 0, 53, 0, 62, 0, 49, 0, 62, 0, 42, 0, 49, 0, 62, 0, 67, 0, 42, 0, 67, 0, 37, 0, 42, 0, 67, 0, 54, 0, 37, 0, 99, 0, 40, 0, 36, 0, 99, 0, 102, 0, 40, 0, 102, 0, 47, 0, 40, 0, 102, 0, 106, 0, 47, 0, 107, 0, 38, 0, 48, 0, 107, 0, 100, 0, 38, 0, 52, 0, 119, 0, 114, 0, 52, 0, 56, 0, 119, 0, 55, 0, 126, 0, 118, 0, 55, 0, 63, 0, 126, 0, 63, 0, 116, 0, 126, 0, 63, 0, 53, 0, 116, 0, 115, 0, 111, 0, 101, 0, 115, 0, 122, 0, 111, 0, 122, 0, 105, 0, 111, 0, 122, 0, 127, 0, 105, 0, 127, 0, 100, 0, 105, 0, 127, 0, 116, 0, 100, 0, 69, 0, 103, 0, 99, 0, 69, 0, 72, 0, 103, 0, 72, 0, 110, 0, 103, 0, 72, 0, 76, 0, 110, 0, 76, 0, 101, 0, 110, 0, 76, 0, 70, 0, 101, 0, 114, 0, 89, 0, 84, 0, 114, 0, 117, 0, 89, 0, 117, 0, 95, 0, 89, 0, 117, 0, 123, 0, 95, 0, 123, 0, 86, 0, 95, 0, 123, 0, 115, 0, 86, 0, 85, 0, 81, 0, 71, 0, 85, 0, 92, 0, 81, 0, 92, 0, 75, 0, 81, 0, 92, 0, 96, 0, 75, 0, 96, 0, 70, 0, 75, 0, 96, 0, 86, 0, 70, 0, 0, 0, 73, 0, 69, 0, 0, 0, 3, 0, 73, 0, 3, 0, 79, 0, 73, 0, 3, 0, 8, 0, 79, 0, 9, 0, 71, 0, 80, 0, 9, 0, 1, 0, 71, 0, 84, 0, 29, 0, 19, 0, 84, 0, 88, 0, 29, 0, 87, 0, 21, 0, 28, 0, 87, 0, 93, 0, 21, 0, 93, 0, 18, 0, 21, 0, 93, 0, 85, 0, 18, 0, 36, 0, 69, 0, 99, 0, 36, 0, 0, 0, 69, 0), 75 | "lods": [0.0172967, PackedByteArray(237, 0, 18, 0, 241, 0, 237, 0, 83, 0, 80, 0, 237, 0, 239, 0, 83, 0, 9, 0, 237, 0, 80, 0, 211, 0, 9, 0, 11, 0, 9, 0, 211, 0, 237, 0, 237, 0, 211, 0, 18, 0, 211, 0, 22, 0, 18, 0, 18, 0, 22, 0, 218, 0, 18, 0, 218, 0, 221, 0, 221, 0, 218, 0, 30, 0, 241, 0, 18, 0, 221, 0, 87, 0, 241, 0, 221, 0, 87, 0, 245, 0, 241, 0, 87, 0, 90, 0, 245, 0, 90, 0, 97, 0, 245, 0, 241, 0, 245, 0, 242, 0, 241, 0, 242, 0, 237, 0, 242, 0, 245, 0, 98, 0, 242, 0, 98, 0, 244, 0, 242, 0, 236, 0, 237, 0, 236, 0, 239, 0, 237, 0, 236, 0, 238, 0, 239, 0, 238, 0, 82, 0, 77, 0, 240, 0, 82, 0, 238, 0, 240, 0, 238, 0, 235, 0, 235, 0, 238, 0, 236, 0, 213, 0, 240, 0, 235, 0, 210, 0, 213, 0, 235, 0, 213, 0, 210, 0, 214, 0, 210, 0, 215, 0, 214, 0, 13, 0, 215, 0, 210, 0, 225, 0, 13, 0, 210, 0, 223, 0, 225, 0, 210, 0, 223, 0, 210, 0, 235, 0, 225, 0, 223, 0, 227, 0, 223, 0, 229, 0, 227, 0, 47, 0, 229, 0, 223, 0, 251, 0, 47, 0, 223, 0, 223, 0, 235, 0, 246, 0, 246, 0, 251, 0, 223, 0, 235, 0, 236, 0, 246, 0, 246, 0, 250, 0, 251, 0, 251, 0, 250, 0, 108, 0, 250, 0, 112, 0, 108, 0, 249, 0, 250, 0, 246, 0, 236, 0, 249, 0, 247, 0, 249, 0, 113, 0, 250, 0, 249, 0, 236, 0, 242, 0, 249, 0, 252, 0, 113, 0, 248, 0, 252, 0, 249, 0, 248, 0, 107, 0, 252, 0, 249, 0, 242, 0, 253, 0, 253, 0, 242, 0, 243, 0, 255, 0, 248, 0, 249, 0, 253, 0, 255, 0, 249, 0, 107, 0, 248, 0, 224, 0, 224, 0, 248, 0, 255, 0, 107, 0, 224, 0, 48, 0, 224, 0, 51, 0, 48, 0, 224, 0, 228, 0, 51, 0, 253, 0, 2, 1, 255, 0, 253, 0, 1, 1, 2, 1, 255, 0, 2, 1, 128, 0, 114, 0, 1, 1, 253, 0, 114, 0, 119, 0, 1, 1, 232, 0, 119, 0, 114, 0, 120, 0, 128, 0, 125, 0, 0, 1, 128, 0, 120, 0, 255, 0, 128, 0, 0, 1, 230, 0, 255, 0, 0, 1, 224, 0, 255, 0, 230, 0, 55, 0, 230, 0, 0, 1, 55, 0, 234, 0, 230, 0, 55, 0, 59, 0, 234, 0, 230, 0, 231, 0, 224, 0, 230, 0, 234, 0, 231, 0, 231, 0, 226, 0, 224, 0, 231, 0, 234, 0, 68, 0, 2, 0, 226, 0, 231, 0, 226, 0, 2, 0, 14, 0, 231, 0, 68, 0, 233, 0, 233, 0, 68, 0, 60, 0, 60, 0, 68, 0, 65, 0, 216, 0, 231, 0, 233, 0, 2, 0, 231, 0, 216, 0, 26, 0, 216, 0, 233, 0, 2, 0, 17, 0, 14, 0, 26, 0, 222, 0, 216, 0, 219, 0, 216, 0, 222, 0, 217, 0, 216, 0, 219, 0, 2, 0, 216, 0, 217, 0, 212, 0, 2, 0, 217, 0, 212, 0, 17, 0, 2, 0, 212, 0, 12, 0, 17, 0, 114, 0, 220, 0, 232, 0, 220, 0, 58, 0, 232, 0, 232, 0, 58, 0, 61, 0, 114, 0, 243, 0, 220, 0, 114, 0, 254, 0, 243, 0, 243, 0, 29, 0, 220, 0, 220, 0, 29, 0, 32, 0, 44, 0, 46, 0, 38, 0, 86, 0, 91, 0, 88, 0), 0.0221048, PackedByteArray(193, 0, 175, 0, 196, 0, 196, 0, 175, 0, 28, 0, 28, 0, 175, 0, 30, 0, 87, 0, 199, 0, 28, 0, 193, 0, 169, 0, 175, 0, 9, 0, 169, 0, 193, 0, 169, 0, 9, 0, 11, 0, 196, 0, 189, 0, 193, 0, 189, 0, 190, 0, 194, 0, 79, 0, 82, 0, 190, 0, 190, 0, 189, 0, 201, 0, 8, 0, 79, 0, 191, 0, 8, 0, 173, 0, 10, 0, 189, 0, 200, 0, 201, 0, 200, 0, 189, 0, 197, 0, 200, 0, 197, 0, 205, 0, 200, 0, 203, 0, 201, 0, 205, 0, 209, 0, 200, 0, 209, 0, 203, 0, 200, 0, 118, 0, 209, 0, 207, 0, 184, 0, 203, 0, 208, 0, 186, 0, 208, 0, 118, 0, 184, 0, 208, 0, 186, 0, 55, 0, 186, 0, 118, 0, 55, 0, 59, 0, 186, 0, 186, 0, 188, 0, 184, 0, 188, 0, 182, 0, 184, 0, 60, 0, 188, 0, 65, 0, 57, 0, 188, 0, 60, 0, 178, 0, 187, 0, 57, 0, 174, 0, 182, 0, 187, 0, 174, 0, 187, 0, 177, 0, 174, 0, 177, 0, 176, 0, 176, 0, 178, 0, 31, 0, 170, 0, 174, 0, 176, 0, 170, 0, 172, 0, 174, 0, 204, 0, 179, 0, 185, 0, 179, 0, 58, 0, 185, 0, 185, 0, 58, 0, 61, 0, 204, 0, 195, 0, 179, 0, 204, 0, 206, 0, 195, 0, 206, 0, 198, 0, 195, 0, 195, 0, 29, 0, 179, 0, 179, 0, 29, 0, 32, 0, 180, 0, 183, 0, 181, 0, 106, 0, 183, 0, 180, 0, 202, 0, 106, 0, 180, 0, 180, 0, 192, 0, 202, 0, 180, 0, 171, 0, 192, 0, 180, 0, 181, 0, 171, 0, 181, 0, 173, 0, 171, 0, 70, 0, 83, 0, 80, 0), 0.305953, PackedByteArray(156, 0, 136, 0, 158, 0, 158, 0, 153, 0, 156, 0, 136, 0, 156, 0, 130, 0, 158, 0, 136, 0, 87, 0, 87, 0, 136, 0, 141, 0, 161, 0, 159, 0, 165, 0, 161, 0, 152, 0, 159, 0, 164, 0, 157, 0, 140, 0, 164, 0, 140, 0, 146, 0, 140, 0, 157, 0, 143, 0, 164, 0, 168, 0, 157, 0, 168, 0, 160, 0, 157, 0, 133, 0, 150, 0, 138, 0, 149, 0, 150, 0, 133, 0, 133, 0, 138, 0, 137, 0, 137, 0, 131, 0, 133, 0, 137, 0, 139, 0, 142, 0, 139, 0, 151, 0, 145, 0, 145, 0, 151, 0, 65, 0, 134, 0, 166, 0, 147, 0, 166, 0, 135, 0, 162, 0, 155, 0, 132, 0, 129, 0, 132, 0, 155, 0, 154, 0, 132, 0, 154, 0, 163, 0, 118, 0, 144, 0, 148, 0, 148, 0, 167, 0, 118, 0)], 76 | "material": SubResource("StandardMaterial3D_r4r30"), 77 | "primitive": 3, 78 | "vertex_count": 259, 79 | "vertex_data": PackedByteArray(205, 204, 76, 190, 0, 0, 128, 190, 205, 204, 76, 62, 255, 127, 0, 0, 255, 255, 255, 191, 205, 204, 76, 190, 205, 204, 76, 190, 0, 0, 128, 62, 255, 127, 255, 127, 222, 134, 143, 252, 0, 0, 128, 190, 205, 204, 76, 190, 205, 204, 76, 62, 0, 0, 255, 127, 255, 127, 255, 255, 204, 204, 76, 190, 237, 40, 121, 190, 204, 93, 102, 62, 255, 127, 214, 46, 186, 254, 67, 190, 204, 93, 102, 190, 237, 40, 121, 190, 204, 204, 76, 62, 41, 81, 214, 46, 40, 209, 148, 168, 208, 72, 101, 190, 252, 131, 114, 190, 208, 72, 101, 62, 177, 93, 155, 68, 220, 208, 239, 168, 204, 93, 102, 190, 204, 204, 76, 190, 237, 40, 121, 62, 41, 81, 255, 127, 193, 151, 67, 237, 204, 93, 102, 190, 204, 204, 76, 190, 237, 40, 121, 62, 41, 81, 255, 127, 89, 119, 65, 253, 204, 204, 76, 190, 204, 93, 102, 190, 237, 40, 121, 62, 255, 127, 41, 81, 69, 248, 114, 194, 204, 204, 76, 190, 204, 93, 102, 190, 237, 40, 121, 62, 255, 127, 41, 81, 255, 127, 148, 232, 208, 72, 101, 190, 208, 72, 101, 190, 252, 131, 114, 62, 177, 93, 177, 93, 222, 198, 212, 172, 208, 72, 101, 190, 208, 72, 101, 190, 252, 131, 114, 62, 177, 93, 177, 93, 180, 136, 54, 228, 208, 72, 101, 190, 208, 72, 101, 190, 252, 131, 114, 62, 177, 93, 177, 93, 204, 115, 238, 230, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 62, 214, 46, 41, 81, 213, 174, 106, 151, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 62, 214, 46, 41, 81, 41, 81, 148, 232, 237, 40, 121, 190, 204, 204, 76, 190, 204, 93, 102, 62, 214, 46, 255, 127, 195, 116, 240, 253, 252, 131, 114, 190, 208, 72, 101, 190, 208, 72, 101, 62, 155, 68, 177, 93, 221, 174, 5, 156, 252, 131, 114, 190, 208, 72, 101, 190, 208, 72, 101, 62, 155, 68, 177, 93, 149, 92, 120, 230, 205, 204, 76, 190, 205, 204, 76, 62, 0, 0, 128, 62, 255, 127, 255, 127, 179, 128, 165, 255, 205, 204, 76, 190, 0, 0, 128, 62, 205, 204, 76, 62, 255, 127, 255, 255, 222, 6, 255, 191, 0, 0, 128, 190, 205, 204, 76, 62, 205, 204, 76, 62, 0, 0, 255, 127, 255, 127, 254, 255, 204, 204, 76, 190, 204, 93, 102, 62, 237, 40, 121, 62, 255, 127, 213, 174, 41, 81, 255, 255, 204, 93, 102, 190, 204, 204, 76, 62, 237, 40, 121, 62, 41, 81, 255, 127, 207, 119, 102, 253, 204, 93, 102, 190, 204, 204, 76, 62, 237, 40, 121, 62, 41, 81, 255, 127, 70, 120, 140, 253, 208, 72, 101, 190, 208, 72, 101, 62, 252, 131, 114, 62, 177, 93, 77, 162, 241, 174, 216, 255, 208, 72, 101, 190, 208, 72, 101, 62, 252, 131, 114, 62, 177, 93, 77, 162, 31, 185, 211, 236, 204, 93, 102, 190, 237, 40, 121, 62, 204, 204, 76, 62, 41, 81, 40, 209, 40, 209, 106, 215, 204, 93, 102, 190, 237, 40, 121, 62, 204, 204, 76, 62, 41, 81, 40, 209, 213, 46, 148, 168, 204, 204, 76, 190, 237, 40, 121, 62, 204, 93, 102, 62, 255, 127, 40, 209, 40, 209, 254, 255, 204, 204, 76, 190, 237, 40, 121, 62, 204, 93, 102, 62, 255, 127, 40, 209, 119, 37, 36, 185, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 62, 177, 93, 99, 187, 33, 209, 103, 251, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 62, 177, 93, 99, 187, 33, 209, 5, 220, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 62, 177, 93, 99, 187, 145, 55, 145, 168, 237, 40, 121, 190, 204, 204, 76, 62, 204, 93, 102, 62, 214, 46, 255, 127, 68, 129, 67, 254, 237, 40, 121, 190, 204, 93, 102, 62, 204, 204, 76, 62, 214, 46, 213, 174, 213, 174, 147, 232, 252, 131, 114, 190, 208, 72, 101, 62, 208, 72, 101, 62, 155, 68, 77, 162, 33, 175, 239, 232, 205, 204, 76, 190, 0, 0, 128, 190, 205, 204, 76, 190, 255, 127, 0, 0, 255, 255, 255, 191, 0, 0, 128, 190, 205, 204, 76, 190, 205, 204, 76, 190, 0, 0, 255, 127, 255, 127, 255, 255, 205, 204, 76, 190, 205, 204, 76, 190, 0, 0, 128, 190, 255, 255, 255, 255, 255, 127, 254, 255, 204, 93, 102, 190, 237, 40, 121, 190, 204, 204, 76, 190, 41, 81, 214, 46, 40, 209, 148, 168, 204, 204, 76, 190, 237, 40, 121, 190, 204, 93, 102, 190, 213, 174, 0, 0, 194, 244, 240, 189, 208, 72, 101, 190, 252, 131, 114, 190, 208, 72, 101, 190, 99, 59, 77, 34, 120, 212, 244, 167, 237, 40, 121, 190, 204, 204, 76, 190, 204, 93, 102, 190, 0, 0, 213, 174, 253, 126, 158, 254, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 190, 214, 46, 41, 81, 213, 174, 106, 151, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 190, 214, 46, 41, 81, 41, 81, 148, 232, 252, 131, 114, 190, 208, 72, 101, 190, 208, 72, 101, 190, 77, 34, 99, 59, 12, 184, 110, 151, 252, 131, 114, 190, 208, 72, 101, 190, 208, 72, 101, 190, 77, 34, 99, 59, 102, 78, 78, 236, 204, 204, 76, 190, 204, 93, 102, 190, 237, 40, 121, 190, 40, 209, 0, 0, 89, 247, 65, 189, 204, 204, 76, 190, 204, 93, 102, 190, 237, 40, 121, 190, 40, 209, 0, 0, 41, 81, 254, 255, 204, 93, 102, 190, 204, 204, 76, 190, 237, 40, 121, 190, 0, 0, 40, 209, 123, 138, 172, 252, 208, 72, 101, 190, 208, 72, 101, 190, 252, 131, 114, 190, 77, 34, 77, 34, 178, 224, 96, 164, 208, 72, 101, 190, 208, 72, 101, 190, 252, 131, 114, 190, 77, 34, 77, 34, 197, 76, 216, 247, 205, 204, 76, 190, 0, 0, 128, 62, 205, 204, 76, 190, 255, 127, 255, 255, 0, 0, 110, 195, 205, 204, 76, 190, 205, 204, 76, 62, 0, 0, 128, 190, 255, 255, 255, 255, 255, 127, 254, 255, 0, 0, 128, 190, 205, 204, 76, 62, 205, 204, 76, 190, 0, 0, 255, 127, 255, 127, 255, 255, 204, 204, 76, 190, 237, 40, 121, 62, 204, 93, 102, 190, 213, 174, 255, 255, 182, 137, 163, 213, 204, 204, 76, 190, 237, 40, 121, 62, 204, 93, 102, 190, 213, 174, 255, 255, 181, 13, 67, 173, 204, 93, 102, 190, 237, 40, 121, 62, 204, 204, 76, 190, 41, 81, 40, 209, 40, 209, 106, 215, 204, 93, 102, 190, 237, 40, 121, 62, 204, 204, 76, 190, 41, 81, 40, 209, 213, 46, 148, 168, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 190, 99, 59, 177, 221, 186, 168, 109, 215, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 190, 99, 59, 177, 221, 242, 199, 110, 215, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 190, 99, 59, 177, 221, 220, 46, 54, 164, 204, 93, 102, 190, 204, 204, 76, 62, 237, 40, 121, 190, 0, 0, 40, 209, 64, 126, 158, 254, 204, 204, 76, 190, 204, 93, 102, 62, 237, 40, 121, 190, 40, 209, 255, 255, 255, 127, 147, 232, 208, 72, 101, 190, 208, 72, 101, 62, 252, 131, 114, 190, 77, 34, 177, 221, 254, 138, 23, 231, 208, 72, 101, 190, 208, 72, 101, 62, 252, 131, 114, 190, 77, 34, 177, 221, 255, 191, 255, 223, 237, 40, 121, 190, 204, 93, 102, 62, 204, 204, 76, 190, 214, 46, 213, 174, 213, 174, 147, 232, 237, 40, 121, 190, 204, 204, 76, 62, 204, 93, 102, 190, 0, 0, 213, 174, 123, 138, 19, 254, 252, 131, 114, 190, 208, 72, 101, 62, 208, 72, 101, 190, 77, 34, 155, 196, 59, 171, 230, 231, 205, 204, 76, 62, 0, 0, 128, 190, 205, 204, 76, 62, 255, 127, 0, 0, 254, 255, 255, 191, 0, 0, 128, 62, 205, 204, 76, 190, 205, 204, 76, 62, 255, 255, 255, 127, 255, 127, 255, 255, 205, 204, 76, 62, 205, 204, 76, 190, 0, 0, 128, 62, 255, 127, 255, 127, 255, 127, 254, 255, 204, 93, 102, 62, 237, 40, 121, 190, 204, 204, 76, 62, 213, 174, 214, 46, 40, 209, 106, 215, 204, 204, 76, 62, 237, 40, 121, 190, 204, 93, 102, 62, 255, 127, 214, 46, 194, 244, 13, 194, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 62, 77, 162, 155, 68, 120, 212, 9, 216, 237, 40, 121, 62, 204, 204, 76, 190, 204, 93, 102, 62, 40, 209, 255, 127, 192, 130, 125, 255, 237, 40, 121, 62, 204, 93, 102, 190, 204, 204, 76, 62, 40, 209, 41, 81, 213, 174, 147, 232, 252, 131, 114, 62, 208, 72, 101, 190, 208, 72, 101, 62, 99, 187, 177, 93, 12, 184, 144, 232, 252, 131, 114, 62, 208, 72, 101, 190, 208, 72, 101, 62, 99, 187, 177, 93, 49, 172, 19, 232, 204, 204, 76, 62, 204, 93, 102, 190, 237, 40, 121, 62, 255, 127, 41, 81, 89, 247, 189, 194, 204, 204, 76, 62, 204, 93, 102, 190, 237, 40, 121, 62, 255, 127, 41, 81, 255, 127, 148, 232, 204, 93, 102, 62, 204, 204, 76, 190, 237, 40, 121, 62, 213, 174, 255, 127, 89, 121, 193, 250, 208, 72, 101, 62, 208, 72, 101, 190, 252, 131, 114, 62, 77, 162, 177, 93, 178, 224, 158, 219, 208, 72, 101, 62, 208, 72, 101, 190, 252, 131, 114, 62, 77, 162, 177, 93, 76, 144, 98, 230, 205, 204, 76, 62, 0, 0, 128, 62, 205, 204, 76, 62, 255, 127, 255, 255, 179, 0, 255, 191, 205, 204, 76, 62, 205, 204, 76, 62, 0, 0, 128, 62, 255, 127, 255, 127, 255, 127, 254, 255, 0, 0, 128, 62, 205, 204, 76, 62, 205, 204, 76, 62, 255, 255, 255, 127, 255, 127, 254, 255, 204, 204, 76, 62, 237, 40, 121, 62, 204, 93, 102, 62, 255, 127, 40, 209, 40, 209, 254, 255, 204, 204, 76, 62, 237, 40, 121, 62, 204, 93, 102, 62, 255, 127, 40, 209, 255, 2, 23, 196, 204, 93, 102, 62, 237, 40, 121, 62, 204, 204, 76, 62, 213, 174, 40, 209, 214, 46, 106, 215, 208, 72, 101, 62, 252, 131, 114, 62, 208, 72, 101, 62, 77, 162, 99, 187, 221, 46, 103, 251, 208, 72, 101, 62, 252, 131, 114, 62, 208, 72, 101, 62, 77, 162, 99, 187, 220, 46, 202, 223, 204, 93, 102, 62, 204, 204, 76, 62, 237, 40, 121, 62, 213, 174, 255, 127, 192, 130, 31, 255, 204, 204, 76, 62, 204, 93, 102, 62, 237, 40, 121, 62, 255, 127, 213, 174, 41, 81, 254, 255, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 62, 77, 162, 77, 162, 197, 80, 82, 255, 237, 40, 121, 62, 204, 93, 102, 62, 204, 204, 76, 62, 40, 209, 213, 174, 82, 76, 249, 233, 237, 40, 121, 62, 204, 204, 76, 62, 204, 93, 102, 62, 40, 209, 255, 127, 41, 124, 193, 250, 252, 131, 114, 62, 208, 72, 101, 62, 208, 72, 101, 62, 99, 187, 77, 162, 255, 191, 254, 255, 252, 131, 114, 62, 208, 72, 101, 62, 208, 72, 101, 62, 99, 187, 77, 162, 237, 71, 40, 245, 205, 204, 76, 62, 0, 0, 128, 190, 205, 204, 76, 190, 255, 127, 0, 0, 254, 255, 255, 191, 205, 204, 76, 62, 205, 204, 76, 190, 0, 0, 128, 190, 255, 255, 255, 255, 255, 127, 255, 255, 0, 0, 128, 62, 205, 204, 76, 190, 205, 204, 76, 190, 255, 255, 255, 127, 255, 127, 255, 255, 204, 204, 76, 62, 237, 40, 121, 190, 204, 93, 102, 190, 213, 174, 0, 0, 186, 254, 186, 193, 204, 93, 102, 62, 237, 40, 121, 190, 204, 204, 76, 190, 213, 174, 214, 46, 40, 209, 106, 215, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 190, 155, 196, 77, 34, 220, 208, 14, 215, 204, 93, 102, 62, 204, 204, 76, 190, 237, 40, 121, 190, 255, 255, 40, 209, 62, 125, 31, 255, 204, 204, 76, 62, 204, 93, 102, 190, 237, 40, 121, 190, 40, 209, 0, 0, 69, 248, 140, 189, 204, 204, 76, 62, 204, 93, 102, 190, 237, 40, 121, 190, 40, 209, 0, 0, 213, 174, 254, 255, 208, 72, 101, 62, 208, 72, 101, 190, 252, 131, 114, 190, 177, 221, 77, 34, 222, 198, 42, 211, 208, 72, 101, 62, 208, 72, 101, 190, 252, 131, 114, 190, 177, 221, 77, 34, 152, 177, 227, 250, 237, 40, 121, 62, 204, 93, 102, 190, 204, 204, 76, 190, 40, 209, 41, 81, 213, 174, 147, 232, 237, 40, 121, 62, 204, 204, 76, 190, 204, 93, 102, 190, 255, 255, 213, 174, 213, 131, 193, 250, 252, 131, 114, 62, 208, 72, 101, 190, 208, 72, 101, 190, 177, 221, 99, 59, 221, 174, 248, 227, 252, 131, 114, 62, 208, 72, 101, 190, 208, 72, 101, 190, 177, 221, 99, 59, 250, 176, 117, 235, 205, 204, 76, 62, 0, 0, 128, 62, 205, 204, 76, 190, 255, 127, 255, 255, 0, 0, 89, 192, 0, 0, 128, 62, 205, 204, 76, 62, 205, 204, 76, 190, 255, 255, 255, 127, 255, 127, 254, 255, 205, 204, 76, 62, 205, 204, 76, 62, 0, 0, 128, 190, 255, 255, 255, 255, 255, 127, 254, 255, 204, 93, 102, 62, 237, 40, 121, 62, 204, 204, 76, 190, 213, 174, 40, 209, 228, 49, 136, 214, 204, 204, 76, 62, 237, 40, 121, 62, 204, 93, 102, 190, 213, 174, 255, 255, 255, 127, 106, 215, 204, 204, 76, 62, 237, 40, 121, 62, 204, 93, 102, 190, 213, 174, 255, 255, 47, 8, 126, 193, 208, 72, 101, 62, 252, 131, 114, 62, 208, 72, 101, 190, 155, 196, 177, 221, 208, 118, 110, 215, 208, 72, 101, 62, 252, 131, 114, 62, 208, 72, 101, 190, 155, 196, 177, 221, 165, 66, 109, 215, 237, 40, 121, 62, 204, 204, 76, 62, 204, 93, 102, 190, 255, 255, 213, 174, 62, 125, 125, 255, 237, 40, 121, 62, 204, 93, 102, 62, 204, 204, 76, 190, 40, 209, 213, 174, 41, 81, 147, 232, 252, 131, 114, 62, 208, 72, 101, 62, 208, 72, 101, 190, 177, 221, 155, 196, 47, 89, 23, 231, 252, 131, 114, 62, 208, 72, 101, 62, 208, 72, 101, 190, 177, 221, 155, 196, 255, 127, 255, 223, 204, 204, 76, 62, 204, 93, 102, 62, 237, 40, 121, 190, 40, 209, 255, 255, 255, 127, 147, 232, 204, 93, 102, 62, 204, 204, 76, 62, 237, 40, 121, 190, 255, 255, 40, 209, 165, 134, 193, 250, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 190, 177, 221, 177, 221, 10, 123, 230, 231, 208, 72, 101, 190, 208, 72, 101, 190, 252, 131, 114, 62, 109, 127, 137, 56, 222, 198, 212, 172, 208, 72, 101, 190, 208, 72, 101, 190, 252, 131, 114, 62, 255, 127, 255, 127, 180, 136, 54, 228, 208, 72, 101, 190, 208, 72, 101, 190, 252, 131, 114, 62, 92, 59, 255, 127, 204, 115, 238, 230, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 62, 84, 127, 6, 32, 213, 174, 106, 151, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 62, 209, 21, 255, 127, 41, 81, 148, 232, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 62, 249, 71, 58, 13, 41, 81, 148, 232, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 62, 0, 0, 214, 205, 41, 81, 148, 232, 204, 93, 102, 190, 204, 204, 76, 62, 237, 40, 121, 62, 255, 127, 119, 152, 207, 119, 102, 253, 204, 93, 102, 190, 204, 204, 76, 62, 237, 40, 121, 62, 185, 60, 161, 139, 70, 120, 140, 253, 204, 93, 102, 190, 237, 40, 121, 62, 204, 204, 76, 62, 88, 13, 255, 127, 40, 209, 106, 215, 204, 93, 102, 190, 237, 40, 121, 62, 204, 204, 76, 62, 54, 75, 138, 187, 40, 209, 106, 215, 204, 93, 102, 190, 237, 40, 121, 62, 204, 204, 76, 62, 208, 126, 37, 242, 213, 46, 148, 168, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 62, 255, 127, 189, 196, 33, 209, 103, 251, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 62, 34, 78, 108, 169, 33, 209, 5, 220, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 62, 194, 126, 206, 215, 145, 55, 145, 168, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 190, 10, 184, 255, 255, 186, 168, 109, 215, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 190, 164, 56, 221, 207, 242, 199, 110, 215, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 190, 91, 135, 255, 255, 220, 46, 54, 164, 208, 72, 101, 190, 208, 72, 101, 62, 252, 131, 114, 190, 60, 30, 241, 2, 254, 138, 23, 231, 208, 72, 101, 190, 208, 72, 101, 62, 252, 131, 114, 190, 64, 191, 255, 255, 254, 138, 23, 231, 208, 72, 101, 190, 208, 72, 101, 62, 252, 131, 114, 190, 0, 0, 135, 136, 254, 138, 23, 231, 252, 131, 114, 190, 208, 72, 101, 62, 208, 72, 101, 190, 0, 0, 90, 132, 59, 171, 230, 231, 252, 131, 114, 190, 208, 72, 101, 62, 208, 72, 101, 190, 38, 53, 69, 203, 59, 171, 230, 231, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 62, 188, 242, 188, 114, 120, 212, 9, 216, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 62, 251, 177, 255, 127, 120, 212, 9, 216, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 62, 255, 127, 155, 28, 120, 212, 9, 216, 204, 204, 76, 62, 204, 93, 102, 190, 237, 40, 121, 62, 228, 127, 131, 57, 89, 247, 189, 194, 204, 204, 76, 62, 204, 93, 102, 190, 237, 40, 121, 62, 246, 144, 255, 127, 255, 127, 148, 232, 204, 204, 76, 62, 237, 40, 121, 62, 204, 93, 102, 62, 71, 147, 109, 226, 255, 2, 23, 196, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 62, 37, 145, 0, 145, 197, 80, 82, 255, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 62, 147, 255, 147, 127, 197, 80, 82, 255, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 62, 180, 181, 73, 202, 197, 80, 82, 255, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 190, 21, 254, 21, 126, 220, 208, 14, 215, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 190, 0, 0, 245, 243, 220, 208, 14, 215, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 190, 255, 127, 1, 0, 220, 208, 14, 215, 204, 204, 76, 62, 237, 40, 121, 62, 204, 93, 102, 190, 43, 141, 93, 246, 47, 8, 126, 193, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 190, 255, 255, 255, 127, 10, 123, 230, 231, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 190, 138, 9, 107, 10, 10, 123, 230, 231, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 190, 14, 196, 255, 255, 10, 123, 230, 231, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 190, 132, 176, 187, 211, 10, 123, 230, 231, 204, 93, 102, 190, 204, 204, 76, 190, 237, 40, 121, 62, 201, 115, 94, 110, 193, 151, 67, 237, 204, 93, 102, 190, 204, 204, 76, 190, 237, 40, 121, 62, 253, 67, 79, 116, 89, 119, 65, 253, 204, 204, 76, 190, 204, 93, 102, 190, 237, 40, 121, 62, 194, 95, 60, 32, 69, 248, 114, 194, 208, 72, 101, 190, 208, 72, 101, 190, 252, 131, 114, 62, 218, 76, 153, 102, 204, 115, 238, 230, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 62, 114, 77, 45, 68, 213, 174, 106, 151, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 62, 47, 32, 89, 120, 41, 81, 148, 232, 204, 93, 102, 190, 204, 204, 76, 62, 237, 40, 121, 62, 190, 119, 130, 152, 207, 119, 102, 253, 204, 93, 102, 190, 204, 204, 76, 62, 237, 40, 121, 62, 80, 58, 58, 140, 70, 120, 140, 253, 204, 93, 102, 190, 237, 40, 121, 62, 204, 204, 76, 62, 208, 12, 94, 128, 40, 209, 106, 215, 204, 93, 102, 190, 237, 40, 121, 62, 204, 204, 76, 62, 85, 76, 184, 185, 40, 209, 106, 215, 204, 93, 102, 190, 237, 40, 121, 62, 204, 204, 76, 62, 95, 113, 103, 229, 213, 46, 148, 168, 205, 204, 76, 190, 0, 0, 128, 190, 205, 204, 76, 190, 29, 93, 131, 10, 255, 255, 255, 191, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 190, 243, 72, 126, 47, 213, 174, 106, 151, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 190, 100, 0, 40, 97, 41, 81, 148, 232, 204, 204, 76, 190, 204, 93, 102, 190, 237, 40, 121, 190, 97, 64, 4, 12, 89, 247, 65, 189, 204, 204, 76, 190, 204, 93, 102, 190, 237, 40, 121, 190, 0, 0, 177, 229, 41, 81, 254, 255, 204, 204, 76, 190, 237, 40, 121, 62, 204, 93, 102, 190, 77, 97, 81, 241, 181, 13, 67, 173, 208, 72, 101, 190, 208, 72, 101, 62, 252, 131, 114, 190, 89, 37, 197, 238, 254, 138, 23, 231, 252, 131, 114, 190, 208, 72, 101, 62, 208, 72, 101, 190, 69, 27, 68, 155, 59, 171, 230, 231, 252, 131, 114, 190, 208, 72, 101, 62, 208, 72, 101, 190, 125, 26, 28, 202, 59, 171, 230, 231, 0, 0, 128, 62, 205, 204, 76, 190, 205, 204, 76, 62, 210, 214, 91, 105, 255, 127, 255, 255, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 62, 194, 176, 141, 78, 120, 212, 9, 216, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 62, 255, 127, 138, 68, 120, 212, 9, 216, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 62, 255, 127, 0, 0, 120, 212, 9, 216, 204, 204, 76, 62, 204, 93, 102, 190, 237, 40, 121, 62, 207, 144, 246, 117, 255, 127, 148, 232, 208, 72, 101, 62, 208, 72, 101, 190, 252, 131, 114, 62, 202, 185, 7, 93, 76, 144, 98, 230, 204, 204, 76, 62, 237, 40, 121, 62, 204, 93, 102, 62, 194, 145, 205, 227, 255, 2, 23, 196, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 62, 3, 151, 183, 144, 197, 80, 82, 255, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 62, 255, 255, 255, 127, 197, 80, 82, 255, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 62, 195, 181, 59, 202, 197, 80, 82, 255, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 62, 255, 127, 250, 194, 197, 80, 82, 255, 0, 0, 128, 62, 205, 204, 76, 190, 205, 204, 76, 190, 129, 248, 72, 95, 255, 127, 255, 255, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 190, 150, 213, 201, 67, 220, 208, 14, 215, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 190, 158, 157, 0, 0, 220, 208, 14, 215, 204, 204, 76, 62, 204, 93, 102, 190, 237, 40, 121, 190, 121, 243, 60, 34, 213, 174, 254, 255, 204, 204, 76, 62, 237, 40, 121, 62, 204, 93, 102, 190, 63, 140, 20, 246, 47, 8, 126, 193, 252, 131, 114, 62, 208, 72, 101, 62, 208, 72, 101, 190, 53, 253, 164, 158, 47, 89, 23, 231, 252, 131, 114, 62, 208, 72, 101, 62, 208, 72, 101, 190, 65, 178, 52, 207, 47, 89, 23, 231, 252, 131, 114, 62, 208, 72, 101, 62, 208, 72, 101, 190, 160, 208, 168, 217, 255, 127, 255, 223, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 190, 133, 231, 255, 255, 10, 123, 230, 231, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 190, 67, 238, 97, 200, 10, 123, 230, 231, 205, 204, 76, 190, 0, 0, 128, 190, 205, 204, 76, 62, 40, 104, 135, 42, 255, 255, 255, 191, 204, 93, 102, 190, 204, 204, 76, 190, 237, 40, 121, 62, 41, 108, 109, 118, 193, 151, 67, 237, 204, 93, 102, 190, 204, 204, 76, 190, 237, 40, 121, 62, 190, 67, 122, 118, 89, 119, 65, 253, 204, 204, 76, 190, 204, 93, 102, 190, 237, 40, 121, 62, 243, 123, 100, 61, 69, 248, 114, 194, 208, 72, 101, 190, 208, 72, 101, 190, 252, 131, 114, 62, 102, 104, 127, 67, 222, 198, 212, 172, 252, 131, 114, 190, 208, 72, 101, 190, 208, 72, 101, 62, 132, 84, 77, 70, 221, 174, 5, 156, 0, 0, 128, 190, 205, 204, 76, 62, 205, 204, 76, 62, 26, 39, 221, 151, 255, 127, 254, 255, 204, 93, 102, 190, 204, 204, 76, 62, 237, 40, 121, 62, 253, 55, 200, 130, 70, 120, 140, 253, 208, 72, 101, 190, 208, 72, 101, 62, 252, 131, 114, 62, 243, 104, 214, 163, 241, 174, 216, 255, 208, 72, 101, 190, 208, 72, 101, 62, 252, 131, 114, 62, 20, 66, 74, 152, 31, 185, 211, 236, 204, 93, 102, 190, 237, 40, 121, 62, 204, 204, 76, 62, 238, 111, 31, 228, 213, 46, 148, 168, 204, 204, 76, 190, 237, 40, 121, 62, 204, 93, 102, 62, 175, 119, 74, 182, 40, 209, 254, 255, 208, 72, 101, 190, 252, 131, 114, 62, 208, 72, 101, 62, 2, 75, 10, 176, 33, 209, 5, 220, 205, 204, 76, 190, 0, 0, 128, 190, 205, 204, 76, 190, 205, 89, 127, 15, 255, 255, 255, 191, 205, 204, 76, 190, 205, 204, 76, 190, 0, 0, 128, 190, 205, 11, 22, 21, 255, 127, 254, 255, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 190, 252, 68, 176, 54, 213, 174, 106, 151, 237, 40, 121, 190, 204, 93, 102, 190, 204, 204, 76, 190, 67, 13, 213, 99, 41, 81, 148, 232, 252, 131, 114, 190, 208, 72, 101, 190, 208, 72, 101, 190, 202, 57, 136, 45, 12, 184, 110, 151, 252, 131, 114, 190, 208, 72, 101, 190, 208, 72, 101, 190, 244, 23, 251, 36, 102, 78, 78, 236, 208, 72, 101, 190, 208, 72, 101, 190, 252, 131, 114, 190, 152, 55, 161, 25, 178, 224, 96, 164, 205, 204, 76, 190, 205, 204, 76, 62, 0, 0, 128, 190, 72, 22, 198, 238, 255, 127, 254, 255, 0, 0, 128, 190, 205, 204, 76, 62, 205, 204, 76, 190, 209, 10, 116, 167, 255, 127, 255, 255, 204, 204, 76, 190, 237, 40, 121, 62, 204, 93, 102, 190, 184, 94, 91, 241, 181, 13, 67, 173, 204, 93, 102, 190, 237, 40, 121, 62, 204, 204, 76, 190, 62, 52, 82, 189, 40, 209, 106, 215, 208, 72, 101, 190, 208, 72, 101, 62, 252, 131, 114, 190, 204, 35, 57, 218, 254, 138, 23, 231, 205, 204, 76, 62, 0, 0, 128, 190, 205, 204, 76, 62, 223, 141, 182, 33, 254, 255, 255, 191, 0, 0, 128, 62, 205, 204, 76, 190, 205, 204, 76, 62, 190, 208, 191, 98, 255, 127, 255, 255, 205, 204, 76, 62, 205, 204, 76, 190, 0, 0, 128, 62, 52, 151, 216, 116, 255, 127, 254, 255, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 62, 179, 167, 69, 74, 120, 212, 9, 216, 252, 131, 114, 62, 208, 72, 101, 190, 208, 72, 101, 62, 77, 182, 26, 102, 49, 172, 19, 232, 204, 204, 76, 62, 204, 93, 102, 190, 237, 40, 121, 62, 117, 138, 236, 68, 89, 247, 189, 194, 205, 204, 76, 62, 205, 204, 76, 62, 0, 0, 128, 62, 149, 144, 59, 151, 255, 127, 254, 255, 0, 0, 128, 62, 205, 204, 76, 62, 205, 204, 76, 62, 185, 213, 169, 140, 255, 127, 254, 255, 204, 204, 76, 62, 237, 40, 121, 62, 204, 93, 102, 62, 74, 156, 189, 217, 255, 2, 23, 196, 208, 72, 101, 62, 252, 131, 114, 62, 208, 72, 101, 62, 8, 190, 118, 169, 220, 46, 202, 223, 208, 72, 101, 62, 208, 72, 101, 62, 252, 131, 114, 62, 5, 168, 178, 163, 197, 80, 82, 255, 205, 204, 76, 62, 0, 0, 128, 190, 205, 204, 76, 190, 18, 164, 124, 22, 254, 255, 255, 191, 205, 204, 76, 62, 0, 0, 128, 190, 205, 204, 76, 190, 59, 210, 59, 82, 254, 255, 255, 191, 205, 204, 76, 62, 205, 204, 76, 190, 0, 0, 128, 190, 36, 245, 156, 20, 255, 127, 255, 255, 0, 0, 128, 62, 205, 204, 76, 190, 205, 204, 76, 190, 172, 237, 98, 86, 255, 127, 255, 255, 208, 72, 101, 62, 252, 131, 114, 190, 208, 72, 101, 190, 152, 203, 0, 40, 220, 208, 14, 215, 204, 204, 76, 62, 204, 93, 102, 190, 237, 40, 121, 190, 173, 191, 25, 8, 69, 248, 140, 189, 208, 72, 101, 62, 208, 72, 101, 190, 252, 131, 114, 190, 247, 232, 99, 47, 152, 177, 227, 250, 0, 0, 128, 62, 205, 204, 76, 62, 205, 204, 76, 190, 200, 230, 162, 171, 255, 127, 254, 255, 0, 0, 128, 62, 205, 204, 76, 62, 205, 204, 76, 190, 32, 179, 222, 204, 255, 127, 254, 255, 205, 204, 76, 62, 205, 204, 76, 62, 0, 0, 128, 190, 107, 244, 29, 231, 255, 127, 254, 255, 204, 204, 76, 62, 237, 40, 121, 62, 204, 93, 102, 190, 44, 201, 219, 247, 255, 127, 106, 215, 208, 72, 101, 62, 252, 131, 114, 62, 208, 72, 101, 190, 219, 193, 70, 214, 165, 66, 109, 215, 252, 131, 114, 62, 208, 72, 101, 62, 208, 72, 101, 190, 52, 231, 58, 198, 47, 89, 23, 231) 80 | }] 81 | blend_shape_mode = 0 82 | shadow_mesh = SubResource("ArrayMesh_5jk4s") 83 | 84 | [node name="Mini3D" type="Node"] 85 | 86 | [node name="World3D" type="Node3D" parent="."] 87 | 88 | [node name="WorldEnvironment" type="WorldEnvironment" parent="World3D"] 89 | environment = SubResource("Environment_t0llh") 90 | 91 | [node name="DirectionalLight3D" type="DirectionalLight3D" parent="World3D"] 92 | transform = Transform3D(0.707107, 0.5, -0.5, 0, 0.707107, 0.707107, 0.707107, -0.5, 0.5, 0, 0, 0) 93 | shadow_enabled = true 94 | shadow_bias = 0.025 95 | shadow_normal_bias = 1.0 96 | 97 | [node name="CSGCombiner3D" type="CSGCombiner3D" parent="World3D"] 98 | material_override = ExtResource("1_xrurx") 99 | use_collision = true 100 | metadata/_edit_lock_ = true 101 | 102 | [node name="CSGBox3D" type="CSGBox3D" parent="World3D/CSGCombiner3D"] 103 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.5, 0) 104 | size = Vector3(5, 4, 2) 105 | 106 | [node name="CSGBox3D2" type="CSGBox3D" parent="World3D/CSGCombiner3D"] 107 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, -1, -4) 108 | size = Vector3(2, 5, 2) 109 | 110 | [node name="CSGBox3D8" type="CSGBox3D" parent="World3D/CSGCombiner3D"] 111 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, -2, -2.5) 112 | size = Vector3(1, 3, 1) 113 | 114 | [node name="CSGBox3D9" type="CSGBox3D" parent="World3D/CSGCombiner3D"] 115 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, -2, 4) 116 | size = Vector3(1, 3, 1) 117 | 118 | [node name="CSGBox3D11" type="CSGBox3D" parent="World3D/CSGCombiner3D"] 119 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, -1.5, 8.5) 120 | size = Vector3(1, 4, 1) 121 | 122 | [node name="CSGBox3D4" type="CSGBox3D" parent="World3D/CSGCombiner3D"] 123 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, -1, 9) 124 | size = Vector3(4, 5, 4) 125 | 126 | [node name="CSGBox3D3" type="CSGBox3D" parent="World3D/CSGCombiner3D"] 127 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, -1, 3) 128 | size = Vector3(2, 5, 8) 129 | 130 | [node name="CSGBox3D5" type="CSGBox3D" parent="World3D/CSGCombiner3D"] 131 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, -0.5, 3.5) 132 | size = Vector3(3, 4, 2) 133 | 134 | [node name="CSGBox3D7" type="CSGBox3D" parent="World3D/CSGCombiner3D"] 135 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 4.5, 3.5) 136 | size = Vector3(1, 2, 2) 137 | 138 | [node name="CSGBox3D10" type="CSGBox3D" parent="World3D/CSGCombiner3D"] 139 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 4.5, 6) 140 | size = Vector3(2, 2, 1) 141 | 142 | [node name="CSGBox3D6" type="CSGBox3D" parent="World3D/CSGCombiner3D"] 143 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7, 0, 0) 144 | size = Vector3(3, 6, 2) 145 | 146 | [node name="CSGPolygon3D" type="CSGPolygon3D" parent="World3D/CSGCombiner3D"] 147 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.5, 1) 148 | polygon = PackedVector2Array(0, 0, 2, 1, 2, 0) 149 | depth = 2.0 150 | 151 | [node name="End" type="Marker3D" parent="World3D"] 152 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 2.87, 0) 153 | 154 | [node name="Gears3" parent="World3D" instance=ExtResource("2_6f4a4")] 155 | transform = Transform3D(9.55343e-16, -0.5, -4.37114e-08, -0.353553, -3.09086e-08, 0.353553, -0.353553, 3.09086e-08, -0.353553, -0.5, 0.42, 3.7) 156 | switch_nps = Array[NodePath]([NodePath("../Lever2")]) 157 | 158 | [node name="Platform" type="Node3D" parent="World3D" node_paths=PackedStringArray("end")] 159 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 1.37, 0) 160 | script = ExtResource("3_blkdv") 161 | end = NodePath("../End") 162 | on_color = Color(0.964706, 0.65098, 1, 1) 163 | off_color = Color(1, 0.435294, 0.0784314, 1) 164 | switch_nps = Array[NodePath]([NodePath("../Lever")]) 165 | 166 | [node name="Body" type="MeshInstance3D" parent="World3D/Platform"] 167 | unique_name_in_owner = true 168 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.87, 0) 169 | material_override = SubResource("StandardMaterial3D_uqkg3") 170 | mesh = SubResource("BoxMesh_ff1f3") 171 | skeleton = NodePath("../..") 172 | 173 | [node name="Gears2" parent="World3D/Platform" instance=ExtResource("2_6f4a4")] 174 | transform = Transform3D(-2.18557e-08, -2.18557e-08, 0.5, -0.5, 9.55343e-16, -2.18557e-08, 0, -0.5, -2.18557e-08, 0, -0.5, -1) 175 | switch_nps = Array[NodePath]([NodePath("../../Lever")]) 176 | 177 | [node name="Fog" type="MeshInstance3D" parent="World3D"] 178 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0) 179 | material_override = SubResource("StandardMaterial3D_m2rgo") 180 | mesh = SubResource("PlaneMesh_7dv5w") 181 | 182 | [node name="Marker3D" type="Marker3D" parent="World3D"] 183 | transform = Transform3D(-0.603208, 0.319312, -0.730876, 0, 0.916363, 0.400349, 0.797584, 0.241494, -0.552757, 0, 1.871, 0) 184 | 185 | [node name="Camera3D" type="Camera3D" parent="World3D/Marker3D"] 186 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 13.548) 187 | fov = 35.0 188 | 189 | [node name="Lever" parent="World3D" instance=ExtResource("4_wtrvj")] 190 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.43165, 0.5, 0.0265903) 191 | 192 | [node name="Lever2" parent="World3D" instance=ExtResource("4_wtrvj")] 193 | transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 7.56835, 3, 0.0265903) 194 | 195 | [node name="Button" parent="World3D" instance=ExtResource("5_6a71y")] 196 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 1.5, 3.5) 197 | 198 | [node name="Door" parent="World3D" instance=ExtResource("6_3ehie")] 199 | transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 2, 2.5, 3.5) 200 | switch_nps = Array[NodePath]([NodePath("../Lever2")]) 201 | 202 | [node name="Door2" parent="World3D" instance=ExtResource("6_3ehie")] 203 | transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 3.5, 2.5, 6) 204 | switch_nps = Array[NodePath]([NodePath("../Button")]) 205 | 206 | [node name="cube" parent="World3D" instance=ExtResource("7_e1pfl")] 207 | transform = Transform3D(0.866025, 0, 0.5, 0, 1, 0, -0.5, 0, 0.866025, 0, 0.75, 0.5) 208 | 209 | [node name="Cube" parent="World3D/cube" index="0"] 210 | material_override = SubResource("StandardMaterial3D_m1pri") 211 | 212 | [node name="cube3" parent="World3D" instance=ExtResource("7_e1pfl")] 213 | transform = Transform3D(0.866025, 0, -0.5, 0, 1, 0, 0.5, 0, 0.866025, 4, 1.75, 7.5) 214 | 215 | [node name="Cube" parent="World3D/cube3" index="0"] 216 | transform = Transform3D(1, 0, -2.98023e-08, 0, 1, 0, 2.98023e-08, 0, 1, 0.25, 0, 0.433013) 217 | material_override = SubResource("StandardMaterial3D_m1pri") 218 | mesh = SubResource("ArrayMesh_k0r8l") 219 | 220 | [node name="cube4" parent="World3D" instance=ExtResource("7_e1pfl")] 221 | transform = Transform3D(0.866025, 0, 0.5, 0, 1, 0, -0.5, 0, 0.866025, 4.25, 1.75, 8.15) 222 | 223 | [node name="Cube" parent="World3D/cube4" index="0"] 224 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.25, 0, 0.433012) 225 | material_override = SubResource("StandardMaterial3D_m1pri") 226 | mesh = SubResource("ArrayMesh_k0r8l") 227 | 228 | [node name="cube5" parent="World3D" instance=ExtResource("7_e1pfl")] 229 | transform = Transform3D(0.965926, 0, 0.258819, 0, 1, 0, -0.258819, 0, 0.965926, 4.1, 2.25, 7.85) 230 | 231 | [node name="Cube" parent="World3D/cube5" index="0"] 232 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.129409, 0, 0.482962) 233 | material_override = SubResource("StandardMaterial3D_m1pri") 234 | mesh = SubResource("ArrayMesh_k0r8l") 235 | 236 | [node name="Goal" parent="World3D" instance=ExtResource("8_5a3ns")] 237 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 1.5, 10) 238 | 239 | [node name="Pipe" parent="." instance=ExtResource("9_d7je3")] 240 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 1.5, -4.5) 241 | 242 | [node name="Pipe2" parent="." instance=ExtResource("9_d7je3")] 243 | transform = Transform3D(0.866025, -1.49012e-08, -0.5, 0.5, 2.58096e-08, 0.866025, 0, -1, 2.98023e-08, 2, 0.5, -1) 244 | 245 | [node name="Pipe3" parent="." instance=ExtResource("9_d7je3")] 246 | transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 2.5, 4.5, 6) 247 | 248 | [node name="LightBulb" parent="." instance=ExtResource("10_sr72e")] 249 | transform = Transform3D(-2.18557e-08, -0.5, 0, 0.5, -2.18557e-08, 0, 0, 0, 0.5, 1.5, 4.5, 3.5) 250 | switch_nps = Array[NodePath]([NodePath("../World3D/Button")]) 251 | 252 | [node name="LightBulb2" parent="." instance=ExtResource("10_sr72e")] 253 | transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0.5, -0.5, -2.5) 254 | switch_nps = Array[NodePath]([NodePath("../World3D/Lever2")]) 255 | 256 | [node name="LightBulb5" parent="." instance=ExtResource("10_sr72e")] 257 | transform = Transform3D(-2.18557e-08, -0.5, 0, 0.5, -2.18557e-08, 0, 0, 0, 0.5, 5.5, 1, -4) 258 | switch_nps = Array[NodePath]([NodePath("../World3D/Lever")]) 259 | 260 | [node name="LightBulb6" parent="." instance=ExtResource("10_sr72e")] 261 | transform = Transform3D(-2.18557e-08, -0.5, 0, 0.5, -2.18557e-08, 0, 0, 0, 0.5, 5.5, 0, -4) 262 | delay = 0.25 263 | switch_nps = Array[NodePath]([NodePath("../World3D/Lever")]) 264 | 265 | [node name="LightBulb7" parent="." instance=ExtResource("10_sr72e")] 266 | transform = Transform3D(-2.18557e-08, -0.5, 0, 0.5, -2.18557e-08, 0, 0, 0, 0.5, 5.5, -1, -4) 267 | delay = 0.5 268 | switch_nps = Array[NodePath]([NodePath("../World3D/Lever")]) 269 | 270 | [editable path="World3D/cube"] 271 | [editable path="World3D/cube3"] 272 | [editable path="World3D/cube4"] 273 | [editable path="World3D/cube5"] 274 | -------------------------------------------------------------------------------- /3d_mechanics/checkboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/3d_mechanics/checkboard.png -------------------------------------------------------------------------------- /3d_mechanics/checkboard.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ismvrp3hwx22" 6 | path.s3tc="res://.godot/imported/checkboard.png-debbb0f41c76e510c84bfc4ac50b9929.s3tc.ctex" 7 | metadata={ 8 | "imported_formats": ["s3tc_bptc"], 9 | "vram_texture": true 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://3d_mechanics/checkboard.png" 15 | dest_files=["res://.godot/imported/checkboard.png-debbb0f41c76e510c84bfc4ac50b9929.s3tc.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=2 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=true 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=0 36 | -------------------------------------------------------------------------------- /3d_mechanics/elements/button/button.gd: -------------------------------------------------------------------------------- 1 | extends Switch3D 2 | 3 | @export var off_color : Color 4 | @export var on_color : Color 5 | 6 | @onready var button = %Button 7 | @onready var area_3d = %Area3D 8 | @onready var sound = %Sound 9 | 10 | func _ready(): 11 | connect("state_changed", check_state) 12 | area_3d.connect("input_event", func(_camera, event, _pos, _normal, _shape_idx): 13 | if !(event is InputEventMouseButton): return 14 | if event.button_index == MOUSE_BUTTON_LEFT and event.pressed: 15 | state = !state 16 | ) 17 | func check_state(_s : bool): 18 | var color = on_color if state else off_color 19 | var depth = -0.1 if state else 0.0 20 | var t = create_tween().set_parallel(true) 21 | t.tween_property(button, "position:y", depth, 0.2) 22 | t.tween_property(button.material_override, "albedo_color", color, 0.2) 23 | sound.pitch_scale = randfn(1.0, 0.1) 24 | sound.play() 25 | -------------------------------------------------------------------------------- /3d_mechanics/elements/button/button.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/3d_mechanics/elements/button/button.glb -------------------------------------------------------------------------------- /3d_mechanics/elements/button/button.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://c8g15ke3j8y73" 7 | path="res://.godot/imported/button.glb-5cdb2e28148f9a82a4aa110bac0f847b.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://3d_mechanics/elements/button/button.glb" 12 | dest_files=["res://.godot/imported/button.glb-5cdb2e28148f9a82a4aa110bac0f847b.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | skins/use_named_skins=true 26 | animation/import=true 27 | animation/fps=30 28 | animation/trimming=false 29 | animation/remove_immutable_tracks=true 30 | import_script/path="" 31 | _subresources={} 32 | gltf/embedded_image_handling=1 33 | -------------------------------------------------------------------------------- /3d_mechanics/elements/button/button.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=7 format=3] 2 | 3 | [ext_resource type="PackedScene" uid="uid://c8g15ke3j8y73" path="res://3d_mechanics/elements/button/button.glb" id="1_6k8gl"] 4 | [ext_resource type="Script" path="res://3d_mechanics/elements/button/button.gd" id="2_m65o2"] 5 | [ext_resource type="Material" uid="uid://bpr3r6smcmxwr" path="res://3d_mechanics/second_color.tres" id="3_nm7r0"] 6 | [ext_resource type="AudioStream" uid="uid://c3o3xs1bm1xd7" path="res://3d_mechanics/sounds/zapsplat_household_remote_control_plastic_button_press_cheap_single_007_73400.mp3" id="3_x0lsl"] 7 | 8 | [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ygx4g"] 9 | albedo_color = Color(1, 0.435294, 0.0784314, 1) 10 | 11 | [sub_resource type="BoxShape3D" id="BoxShape3D_apx60"] 12 | 13 | [node name="Button" instance=ExtResource("1_6k8gl")] 14 | script = ExtResource("2_m65o2") 15 | off_color = Color(1, 0.435294, 0.0784314, 1) 16 | on_color = Color(0.964706, 0.65098, 1, 1) 17 | 18 | [node name="Sound" type="AudioStreamPlayer3D" parent="." index="0"] 19 | unique_name_in_owner = true 20 | stream = ExtResource("3_x0lsl") 21 | 22 | [node name="Button" parent="." index="1"] 23 | unique_name_in_owner = true 24 | material_override = SubResource("StandardMaterial3D_ygx4g") 25 | lod_bias = 10.0 26 | 27 | [node name="ButtonBase" parent="." index="2"] 28 | material_override = ExtResource("3_nm7r0") 29 | lod_bias = 10.0 30 | 31 | [node name="Area3D" type="Area3D" parent="." index="3"] 32 | unique_name_in_owner = true 33 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) 34 | 35 | [node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D" index="0"] 36 | shape = SubResource("BoxShape3D_apx60") 37 | -------------------------------------------------------------------------------- /3d_mechanics/elements/connector.gd: -------------------------------------------------------------------------------- 1 | extends Node3D 2 | class_name Connector 3 | 4 | @export var switch_nps: Array[NodePath] = [] 5 | @onready var switches = switch_nps.map(get_node) 6 | 7 | var state = false : set = set_state 8 | 9 | signal state_changed(state : bool) 10 | 11 | func _ready(): 12 | for switch in switches: 13 | switch.connect("state_changed", check_switches) 14 | 15 | func check_switches(_switch_state): 16 | state = switches.all(func(switch): 17 | return switch.state 18 | ) 19 | 20 | func set_state(value : bool): 21 | if state == value: return 22 | state = value 23 | on_state_change() 24 | 25 | func on_state_change(): 26 | pass 27 | -------------------------------------------------------------------------------- /3d_mechanics/elements/cube.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/3d_mechanics/elements/cube.glb -------------------------------------------------------------------------------- /3d_mechanics/elements/cube.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://bs8k42pj2yfdi" 7 | path="res://.godot/imported/cube.glb-513c481cece6793429c2a0e40157215e.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://3d_mechanics/elements/cube.glb" 12 | dest_files=["res://.godot/imported/cube.glb-513c481cece6793429c2a0e40157215e.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | skins/use_named_skins=true 26 | animation/import=true 27 | animation/fps=30 28 | animation/trimming=false 29 | animation/remove_immutable_tracks=true 30 | import_script/path="" 31 | _subresources={} 32 | gltf/embedded_image_handling=1 33 | -------------------------------------------------------------------------------- /3d_mechanics/elements/door/door.gd: -------------------------------------------------------------------------------- 1 | extends Connector 2 | 3 | @onready var door_bottom = %DoorBottom 4 | @onready var door_top = %DoorTop 5 | 6 | @onready var sound = %Sound 7 | 8 | func on_state_change(): 9 | var top_value = 1.0 if state else 0.0 10 | var bottom_value = -1.0 if state else 0.0 11 | 12 | var t = create_tween().set_parallel(true) 13 | 14 | t.set_ease(Tween.EASE_OUT) 15 | t.set_trans(Tween.TRANS_BACK if state else Tween.TRANS_BOUNCE) 16 | 17 | t.tween_property(door_top, "position:y", top_value, 1.0) 18 | t.tween_property(door_bottom, "position:y", bottom_value, 1.0) 19 | sound.pitch_scale = randfn(1.0, 0.1) 20 | sound.play() 21 | -------------------------------------------------------------------------------- /3d_mechanics/elements/door/door.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/3d_mechanics/elements/door/door.glb -------------------------------------------------------------------------------- /3d_mechanics/elements/door/door.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://evkss3ufum08" 7 | path="res://.godot/imported/door.glb-3651d788cd86967642e55772315ccb4f.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://3d_mechanics/elements/door/door.glb" 12 | dest_files=["res://.godot/imported/door.glb-3651d788cd86967642e55772315ccb4f.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | skins/use_named_skins=true 26 | animation/import=true 27 | animation/fps=30 28 | animation/trimming=false 29 | animation/remove_immutable_tracks=true 30 | import_script/path="" 31 | _subresources={} 32 | gltf/embedded_image_handling=1 33 | -------------------------------------------------------------------------------- /3d_mechanics/elements/door/door.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=8 format=3] 2 | 3 | [ext_resource type="PackedScene" uid="uid://evkss3ufum08" path="res://3d_mechanics/elements/door/door.glb" id="1_s58mb"] 4 | [ext_resource type="Script" path="res://3d_mechanics/elements/door/door.gd" id="2_atvje"] 5 | [ext_resource type="AudioStream" uid="uid://d3v5grquvdd3n" path="res://3d_mechanics/sounds/bathroom_door.mp3" id="3_eym2k"] 6 | [ext_resource type="Material" path="res://3d_mechanics/first_color.tres" id="3_lvxiq"] 7 | [ext_resource type="Material" uid="uid://bpr3r6smcmxwr" path="res://3d_mechanics/second_color.tres" id="3_wfovk"] 8 | [ext_resource type="Material" uid="uid://bfobi0i2pe46c" path="res://3d_mechanics/elements/door/door_fade_mat.tres" id="5_uum0h"] 9 | 10 | [sub_resource type="QuadMesh" id="QuadMesh_do3m8"] 11 | size = Vector2(1.6, 0.45) 12 | 13 | [node name="Door" instance=ExtResource("1_s58mb")] 14 | script = ExtResource("2_atvje") 15 | 16 | [node name="Sound" type="AudioStreamPlayer3D" parent="." index="0"] 17 | unique_name_in_owner = true 18 | stream = ExtResource("3_eym2k") 19 | 20 | [node name="DoorFrame" parent="." index="1"] 21 | material_override = ExtResource("3_lvxiq") 22 | 23 | [node name="DoorBottom" parent="." index="2"] 24 | unique_name_in_owner = true 25 | material_override = ExtResource("3_wfovk") 26 | 27 | [node name="DoorTop" parent="." index="3"] 28 | unique_name_in_owner = true 29 | material_override = ExtResource("3_wfovk") 30 | 31 | [node name="FadeBottom" type="MeshInstance3D" parent="." index="4"] 32 | transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, -0.8, 0) 33 | material_override = ExtResource("5_uum0h") 34 | mesh = SubResource("QuadMesh_do3m8") 35 | 36 | [node name="FadeTop" type="MeshInstance3D" parent="." index="5"] 37 | transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0.8, 0) 38 | material_override = ExtResource("5_uum0h") 39 | mesh = SubResource("QuadMesh_do3m8") 40 | -------------------------------------------------------------------------------- /3d_mechanics/elements/door/door_fade_mat.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="StandardMaterial3D" format=3 uid="uid://bfobi0i2pe46c"] 2 | 3 | [resource] 4 | albedo_color = Color(0.105882, 0.160784, 0.105882, 1) 5 | proximity_fade_enabled = true 6 | proximity_fade_distance = 0.25 7 | -------------------------------------------------------------------------------- /3d_mechanics/elements/gears/gears.gd: -------------------------------------------------------------------------------- 1 | extends Connector 2 | 3 | @onready var big_gear = %BigGear 4 | @onready var small_gear = %SmallGear 5 | @onready var sound = %Sound 6 | 7 | var tween : Tween = null 8 | 9 | var base_rotation = 0.0 10 | 11 | 12 | func on_state_change(): 13 | if tween && tween.is_valid(): tween.kill() 14 | 15 | tween = create_tween() 16 | tween.set_parallel(true) 17 | 18 | var sound_db = 0.0 if state else -80.0 19 | var sound_t = create_tween() 20 | sound_t.tween_property(sound, "volume_db", sound_db, 0.5) 21 | 22 | if state: 23 | tween.set_loops(0) 24 | tween.tween_method(rotate_gear, base_rotation, base_rotation + 360.0, 2.0) 25 | sound.play() 26 | else: 27 | tween.set_trans(Tween.TRANS_BOUNCE).set_ease(Tween.EASE_OUT) 28 | tween.tween_method(rotate_gear, base_rotation, base_rotation + 25.0, 0.5) 29 | 30 | sound_t.tween_callback(sound.stop) 31 | 32 | func rotate_gear(progress): 33 | base_rotation = progress 34 | big_gear.rotation_degrees.y = progress 35 | small_gear.rotation_degrees.y = -progress 36 | 37 | -------------------------------------------------------------------------------- /3d_mechanics/elements/gears/gears.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/3d_mechanics/elements/gears/gears.glb -------------------------------------------------------------------------------- /3d_mechanics/elements/gears/gears.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://c3om34qgfl6qa" 7 | path="res://.godot/imported/gears.glb-ced90bf891cc652c1669eb6f7e2765ee.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://3d_mechanics/elements/gears/gears.glb" 12 | dest_files=["res://.godot/imported/gears.glb-ced90bf891cc652c1669eb6f7e2765ee.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | skins/use_named_skins=true 26 | animation/import=true 27 | animation/fps=30 28 | animation/trimming=false 29 | animation/remove_immutable_tracks=true 30 | import_script/path="" 31 | _subresources={} 32 | gltf/embedded_image_handling=1 33 | -------------------------------------------------------------------------------- /3d_mechanics/elements/gears/gears.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=5 format=3] 2 | 3 | [ext_resource type="PackedScene" uid="uid://c3om34qgfl6qa" path="res://3d_mechanics/elements/gears/gears.glb" id="1_65ivy"] 4 | [ext_resource type="Material" uid="uid://bpr3r6smcmxwr" path="res://3d_mechanics/second_color.tres" id="2_3ig0g"] 5 | [ext_resource type="Script" path="res://3d_mechanics/elements/gears/gears.gd" id="2_kmcl4"] 6 | [ext_resource type="AudioStream" uid="uid://cmxvvet7e1m16" path="res://3d_mechanics/sounds/PM_MMM_FREE_9_BONUS_PM_Steampunk_Mechanical_Loop_120BPM_9.mp3" id="3_io63p"] 7 | 8 | [node name="Gears" instance=ExtResource("1_65ivy")] 9 | script = ExtResource("2_kmcl4") 10 | 11 | [node name="Sound" type="AudioStreamPlayer3D" parent="." index="0"] 12 | unique_name_in_owner = true 13 | stream = ExtResource("3_io63p") 14 | volume_db = -10.0 15 | max_distance = 30.0 16 | 17 | [node name="BigGear" parent="." index="1"] 18 | unique_name_in_owner = true 19 | material_override = ExtResource("2_3ig0g") 20 | 21 | [node name="SmallGear" parent="Empty" index="0"] 22 | unique_name_in_owner = true 23 | material_override = ExtResource("2_3ig0g") 24 | -------------------------------------------------------------------------------- /3d_mechanics/elements/goal/goal.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/3d_mechanics/elements/goal/goal.glb -------------------------------------------------------------------------------- /3d_mechanics/elements/goal/goal.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://drkqkt2fp2jca" 7 | path="res://.godot/imported/goal.glb-c866a0d72eb935462c501c41f4a48fa5.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://3d_mechanics/elements/goal/goal.glb" 12 | dest_files=["res://.godot/imported/goal.glb-c866a0d72eb935462c501c41f4a48fa5.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | skins/use_named_skins=true 26 | animation/import=true 27 | animation/fps=30 28 | animation/trimming=false 29 | animation/remove_immutable_tracks=true 30 | import_script/path="" 31 | _subresources={} 32 | gltf/embedded_image_handling=1 33 | -------------------------------------------------------------------------------- /3d_mechanics/elements/goal/goal.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=5 format=3] 2 | 3 | [ext_resource type="PackedScene" uid="uid://drkqkt2fp2jca" path="res://3d_mechanics/elements/goal/goal.glb" id="1_gjsm0"] 4 | [ext_resource type="Material" uid="uid://bpr3r6smcmxwr" path="res://3d_mechanics/second_color.tres" id="2_nc066"] 5 | [ext_resource type="Shader" path="res://3d_mechanics/elements/goal/goal_flag.gdshader" id="2_pdycc"] 6 | 7 | [sub_resource type="ShaderMaterial" id="ShaderMaterial_jw1k0"] 8 | render_priority = 0 9 | shader = ExtResource("2_pdycc") 10 | shader_parameter/albedo_color = Color(1, 0.435294, 0.0784314, 1) 11 | 12 | [node name="Goal" instance=ExtResource("1_gjsm0")] 13 | 14 | [node name="GoalBody" parent="." index="0"] 15 | material_override = ExtResource("2_nc066") 16 | 17 | [node name="GoalFlag" parent="." index="1"] 18 | material_override = SubResource("ShaderMaterial_jw1k0") 19 | lod_bias = 10.0 20 | -------------------------------------------------------------------------------- /3d_mechanics/elements/goal/goal_flag.gdshader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | render_mode cull_disabled, shadows_disabled; 3 | 4 | uniform vec3 albedo_color : source_color; 5 | 6 | void vertex() { 7 | float g = VERTEX.x; 8 | VERTEX.z += sin((TIME * 2.0) - g * 2.0 * PI) * 0.2 * g; 9 | } 10 | 11 | void fragment() { 12 | ALBEDO = albedo_color; 13 | } -------------------------------------------------------------------------------- /3d_mechanics/elements/lever/lever.gd: -------------------------------------------------------------------------------- 1 | extends Switch3D 2 | 3 | @export var off_color : Color 4 | @export var on_color : Color 5 | 6 | @onready var lever_handle = %LeverHandle 7 | @onready var area_3d = %Area3D 8 | @onready var sound = %Sound 9 | 10 | func _ready(): 11 | connect("state_changed", check_state) 12 | area_3d.connect("input_event", func(_camera, event, _pos, _normal, _shape_idx): 13 | if !(event is InputEventMouseButton): return 14 | if event.button_index == MOUSE_BUTTON_LEFT and event.pressed: 15 | state = !state 16 | ) 17 | func check_state(_s : bool): 18 | var color = on_color if state else off_color 19 | var angle = -60.0 if state else 60.0 20 | var t = create_tween().set_parallel(true) 21 | t.tween_property(lever_handle, "rotation_degrees:z", angle, 0.2) 22 | t.tween_property(lever_handle.get_surface_override_material(1), "albedo_color", color, 0.2) 23 | sound.pitch_scale = randfn(1.0, 0.1) 24 | sound.play() 25 | -------------------------------------------------------------------------------- /3d_mechanics/elements/lever/lever.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/3d_mechanics/elements/lever/lever.glb -------------------------------------------------------------------------------- /3d_mechanics/elements/lever/lever.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://c518s53sg0w1x" 7 | path="res://.godot/imported/lever.glb-2cd42777464c42dc8342ff5dae071f07.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://3d_mechanics/elements/lever/lever.glb" 12 | dest_files=["res://.godot/imported/lever.glb-2cd42777464c42dc8342ff5dae071f07.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | skins/use_named_skins=true 26 | animation/import=true 27 | animation/fps=30 28 | animation/trimming=false 29 | animation/remove_immutable_tracks=true 30 | import_script/path="" 31 | _subresources={} 32 | gltf/embedded_image_handling=1 33 | -------------------------------------------------------------------------------- /3d_mechanics/elements/lever/lever.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=7 format=3] 2 | 3 | [ext_resource type="PackedScene" uid="uid://c518s53sg0w1x" path="res://3d_mechanics/elements/lever/lever.glb" id="1_oijaq"] 4 | [ext_resource type="Script" path="res://3d_mechanics/elements/lever/lever.gd" id="2_nfxgk"] 5 | [ext_resource type="Material" uid="uid://bpr3r6smcmxwr" path="res://3d_mechanics/second_color.tres" id="3_s4lah"] 6 | [ext_resource type="AudioStream" uid="uid://3k8v216l4poc" path="res://3d_mechanics/sounds/zapsplat_vehicles_car_column_stalk_lever_single_movement_002_80087.mp3" id="4_ki3xc"] 7 | 8 | [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_py33u"] 9 | resource_local_to_scene = true 10 | albedo_color = Color(1, 0.435294, 0.0784314, 1) 11 | 12 | [sub_resource type="BoxShape3D" id="BoxShape3D_0ynj6"] 13 | 14 | [node name="Lever" instance=ExtResource("1_oijaq")] 15 | script = ExtResource("2_nfxgk") 16 | off_color = Color(1, 0.435294, 0.0784314, 1) 17 | on_color = Color(0.964706, 0.65098, 1, 1) 18 | 19 | [node name="Sound" type="AudioStreamPlayer3D" parent="." index="0"] 20 | unique_name_in_owner = true 21 | stream = ExtResource("4_ki3xc") 22 | 23 | [node name="LeverBody" parent="." index="1"] 24 | lod_bias = 10.0 25 | surface_material_override/0 = ExtResource("3_s4lah") 26 | 27 | [node name="LeverHandle" parent="." index="2"] 28 | unique_name_in_owner = true 29 | transform = Transform3D(0.5, -0.866025, 0, 0.866025, 0.5, 0, 0, 0, 1, 0, 0.1, 0) 30 | lod_bias = 10.0 31 | surface_material_override/0 = ExtResource("3_s4lah") 32 | surface_material_override/1 = SubResource("StandardMaterial3D_py33u") 33 | 34 | [node name="Area3D" type="Area3D" parent="." index="3"] 35 | unique_name_in_owner = true 36 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) 37 | 38 | [node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D" index="0"] 39 | shape = SubResource("BoxShape3D_0ynj6") 40 | -------------------------------------------------------------------------------- /3d_mechanics/elements/lightbulb/bulb_mat.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="StandardMaterial3D" format=3 uid="uid://c6oq4wm7pg5n5"] 2 | 3 | [resource] 4 | resource_local_to_scene = true 5 | render_priority = 1 6 | albedo_color = Color(1, 1, 1, 0.235294) 7 | roughness = 0.54 8 | emission_enabled = true 9 | emission = Color(1, 0.717647, 0, 1) 10 | emission_energy_multiplier = 0.0 11 | emission_operator = 1 12 | rim_enabled = true 13 | clearcoat_roughness = 0.0 14 | refraction_enabled = true 15 | refraction_scale = 0.02 16 | -------------------------------------------------------------------------------- /3d_mechanics/elements/lightbulb/lightbulb.gd: -------------------------------------------------------------------------------- 1 | extends Connector 2 | 3 | @onready var bulb = %Bulb 4 | @onready var sound = %Sound 5 | 6 | @export var delay = 0.0 7 | 8 | var tween : Tween = null 9 | 10 | var transparent = Color(1.0, 1.0, 1.0, 0.2) 11 | var light_black = Color(0.2, 0.2, 0.2, 1.0) 12 | 13 | func on_state_change(): 14 | 15 | var energy = 1.2 if state else 0.0 16 | var albedo_color = light_black if state else transparent 17 | 18 | if tween && tween.is_valid(): tween.kill() 19 | tween = create_tween() 20 | 21 | if !state: 22 | tween.set_trans(Tween.TRANS_BOUNCE).set_ease(Tween.EASE_OUT) 23 | 24 | tween.set_parallel(true) 25 | tween.tween_property(bulb.material_override, "emission_energy_multiplier", energy, 0.5).set_delay(delay) 26 | tween.tween_property(bulb.material_override, "albedo_color", albedo_color, 0.5).set_delay(delay) 27 | 28 | tween.tween_callback(func(): 29 | sound.pitch_scale = randfn(1.0, 0.1) 30 | sound.play() 31 | ).set_delay(delay) 32 | -------------------------------------------------------------------------------- /3d_mechanics/elements/lightbulb/lightbulb.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/3d_mechanics/elements/lightbulb/lightbulb.glb -------------------------------------------------------------------------------- /3d_mechanics/elements/lightbulb/lightbulb.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://rpdp50np4l67" 7 | path="res://.godot/imported/lightbulb.glb-7c499e50f8890d6ef52b711649ca87a4.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://3d_mechanics/elements/lightbulb/lightbulb.glb" 12 | dest_files=["res://.godot/imported/lightbulb.glb-7c499e50f8890d6ef52b711649ca87a4.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | skins/use_named_skins=true 26 | animation/import=true 27 | animation/fps=30 28 | animation/trimming=false 29 | animation/remove_immutable_tracks=true 30 | import_script/path="" 31 | _subresources={} 32 | gltf/embedded_image_handling=1 33 | -------------------------------------------------------------------------------- /3d_mechanics/elements/lightbulb/lightbulb.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=6 format=3] 2 | 3 | [ext_resource type="PackedScene" uid="uid://rpdp50np4l67" path="res://3d_mechanics/elements/lightbulb/lightbulb.glb" id="1_6u35p"] 4 | [ext_resource type="Script" path="res://3d_mechanics/elements/lightbulb/lightbulb.gd" id="2_3qbm5"] 5 | [ext_resource type="Material" uid="uid://bpr3r6smcmxwr" path="res://3d_mechanics/second_color.tres" id="2_64uuo"] 6 | [ext_resource type="Material" uid="uid://c6oq4wm7pg5n5" path="res://3d_mechanics/elements/lightbulb/bulb_mat.tres" id="2_jo41x"] 7 | [ext_resource type="AudioStream" uid="uid://b75ehbiq014lv" path="res://3d_mechanics/sounds/PM_OF_Electro_Magnetic_One_Shots_5.mp3" id="3_qrf0w"] 8 | 9 | [node name="LightBulb" instance=ExtResource("1_6u35p")] 10 | script = ExtResource("2_3qbm5") 11 | 12 | [node name="Sound" type="AudioStreamPlayer3D" parent="." index="0"] 13 | unique_name_in_owner = true 14 | stream = ExtResource("3_qrf0w") 15 | volume_db = -10.0 16 | max_distance = 40.0 17 | 18 | [node name="Bulb" parent="." index="1"] 19 | unique_name_in_owner = true 20 | material_override = ExtResource("2_jo41x") 21 | 22 | [node name="BulbBase" parent="." index="2"] 23 | material_override = ExtResource("2_64uuo") 24 | -------------------------------------------------------------------------------- /3d_mechanics/elements/pipes/pipe.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/3d_mechanics/elements/pipes/pipe.glb -------------------------------------------------------------------------------- /3d_mechanics/elements/pipes/pipe.glb.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="scene" 4 | importer_version=1 5 | type="PackedScene" 6 | uid="uid://bb174uqemf8ud" 7 | path="res://.godot/imported/pipe.glb-c3a0de2943d1a0d327e43e78e898e175.scn" 8 | 9 | [deps] 10 | 11 | source_file="res://3d_mechanics/elements/pipes/pipe.glb" 12 | dest_files=["res://.godot/imported/pipe.glb-c3a0de2943d1a0d327e43e78e898e175.scn"] 13 | 14 | [params] 15 | 16 | nodes/root_type="Node3D" 17 | nodes/root_name="Scene Root" 18 | nodes/apply_root_scale=true 19 | nodes/root_scale=1.0 20 | meshes/ensure_tangents=true 21 | meshes/generate_lods=true 22 | meshes/create_shadow_meshes=true 23 | meshes/light_baking=1 24 | meshes/lightmap_texel_size=0.2 25 | skins/use_named_skins=true 26 | animation/import=true 27 | animation/fps=30 28 | animation/trimming=false 29 | animation/remove_immutable_tracks=true 30 | import_script/path="" 31 | _subresources={} 32 | gltf/embedded_image_handling=1 33 | -------------------------------------------------------------------------------- /3d_mechanics/elements/pipes/pipe.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3] 2 | 3 | [ext_resource type="PackedScene" uid="uid://bb174uqemf8ud" path="res://3d_mechanics/elements/pipes/pipe.glb" id="1_i3jk3"] 4 | [ext_resource type="Material" uid="uid://bpr3r6smcmxwr" path="res://3d_mechanics/second_color.tres" id="2_78q0l"] 5 | 6 | [node name="Pipe" instance=ExtResource("1_i3jk3")] 7 | 8 | [node name="Pipe" parent="." index="0"] 9 | material_override = ExtResource("2_78q0l") 10 | -------------------------------------------------------------------------------- /3d_mechanics/elements/platform/Platform.gd: -------------------------------------------------------------------------------- 1 | extends Connector 2 | 3 | var start_position : Vector3 4 | var end_position : Vector3 5 | var tween : Tween = null 6 | 7 | @export var end : Marker3D 8 | @export var on_color : Color 9 | @export var off_color : Color 10 | @onready var body = %Body 11 | 12 | func _ready(): 13 | super() 14 | start_position = global_position 15 | end_position = end.global_position 16 | 17 | func on_state_change(): 18 | if tween && tween.is_valid(): tween.kill() 19 | 20 | tween = create_tween() 21 | 22 | if state: 23 | tween.set_loops(0) 24 | tween.tween_property(self, "position", end_position, 1.0).set_delay(1.0) 25 | tween.tween_property(self, "position", start_position, 1.0).set_delay(1.0) 26 | else: 27 | tween.set_trans(Tween.TRANS_BOUNCE).set_ease(Tween.EASE_OUT) 28 | tween.tween_property(self, "position", start_position, 1.0) 29 | 30 | var color = on_color if state else off_color 31 | 32 | var t = create_tween().set_parallel(true) 33 | t.tween_property(body.material_override, "albedo_color", color, 0.2) 34 | -------------------------------------------------------------------------------- /3d_mechanics/elements/switch.gd: -------------------------------------------------------------------------------- 1 | extends Node3D 2 | class_name Switch3D 3 | 4 | var state = false : set = set_state 5 | 6 | signal state_changed(state : bool) 7 | 8 | func set_state(v : bool): 9 | if state == v: return 10 | state = v 11 | state_changed.emit(state) 12 | -------------------------------------------------------------------------------- /3d_mechanics/first_color.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="StandardMaterial3D" load_steps=2 format=3] 2 | 3 | [ext_resource type="Texture2D" uid="uid://ismvrp3hwx22" path="res://3d_mechanics/checkboard.png" id="1_wnv0b"] 4 | 5 | [resource] 6 | albedo_color = Color(0.180392, 0.690196, 0.364706, 1) 7 | albedo_texture = ExtResource("1_wnv0b") 8 | uv1_triplanar = true 9 | uv1_triplanar_sharpness = 4.0 10 | -------------------------------------------------------------------------------- /3d_mechanics/second_color.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="StandardMaterial3D" format=3 uid="uid://bpr3r6smcmxwr"] 2 | 3 | [resource] 4 | albedo_color = Color(0.243137, 0.603922, 0.909804, 1) 5 | -------------------------------------------------------------------------------- /3d_mechanics/sounds/PM_MMM_FREE_9_BONUS_PM_Steampunk_Mechanical_Loop_120BPM_9.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/3d_mechanics/sounds/PM_MMM_FREE_9_BONUS_PM_Steampunk_Mechanical_Loop_120BPM_9.mp3 -------------------------------------------------------------------------------- /3d_mechanics/sounds/PM_MMM_FREE_9_BONUS_PM_Steampunk_Mechanical_Loop_120BPM_9.mp3.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="mp3" 4 | type="AudioStreamMP3" 5 | uid="uid://cmxvvet7e1m16" 6 | path="res://.godot/imported/PM_MMM_FREE_9_BONUS_PM_Steampunk_Mechanical_Loop_120BPM_9.mp3-61c04f8f2029dc0d4a3c41780331d729.mp3str" 7 | 8 | [deps] 9 | 10 | source_file="res://3d_mechanics/sounds/PM_MMM_FREE_9_BONUS_PM_Steampunk_Mechanical_Loop_120BPM_9.mp3" 11 | dest_files=["res://.godot/imported/PM_MMM_FREE_9_BONUS_PM_Steampunk_Mechanical_Loop_120BPM_9.mp3-61c04f8f2029dc0d4a3c41780331d729.mp3str"] 12 | 13 | [params] 14 | 15 | loop=true 16 | loop_offset=0.0 17 | bpm=0.0 18 | beat_count=0 19 | bar_beats=4 20 | -------------------------------------------------------------------------------- /3d_mechanics/sounds/PM_OF_Electro_Magnetic_One_Shots_5.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/3d_mechanics/sounds/PM_OF_Electro_Magnetic_One_Shots_5.mp3 -------------------------------------------------------------------------------- /3d_mechanics/sounds/PM_OF_Electro_Magnetic_One_Shots_5.mp3.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="mp3" 4 | type="AudioStreamMP3" 5 | uid="uid://b75ehbiq014lv" 6 | path="res://.godot/imported/PM_OF_Electro_Magnetic_One_Shots_5.mp3-897b73a2a76d2ee5c38d035c0d67a8a2.mp3str" 7 | 8 | [deps] 9 | 10 | source_file="res://3d_mechanics/sounds/PM_OF_Electro_Magnetic_One_Shots_5.mp3" 11 | dest_files=["res://.godot/imported/PM_OF_Electro_Magnetic_One_Shots_5.mp3-897b73a2a76d2ee5c38d035c0d67a8a2.mp3str"] 12 | 13 | [params] 14 | 15 | loop=false 16 | loop_offset=0 17 | bpm=0 18 | beat_count=0 19 | bar_beats=4 20 | -------------------------------------------------------------------------------- /3d_mechanics/sounds/bathroom_door.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/3d_mechanics/sounds/bathroom_door.mp3 -------------------------------------------------------------------------------- /3d_mechanics/sounds/bathroom_door.mp3.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="mp3" 4 | type="AudioStreamMP3" 5 | uid="uid://d3v5grquvdd3n" 6 | path="res://.godot/imported/bathroom_door.mp3-6662b5ba43337ff1d7612075879da798.mp3str" 7 | 8 | [deps] 9 | 10 | source_file="res://3d_mechanics/sounds/bathroom_door.mp3" 11 | dest_files=["res://.godot/imported/bathroom_door.mp3-6662b5ba43337ff1d7612075879da798.mp3str"] 12 | 13 | [params] 14 | 15 | loop=false 16 | loop_offset=0 17 | bpm=0 18 | beat_count=0 19 | bar_beats=4 20 | -------------------------------------------------------------------------------- /3d_mechanics/sounds/zapsplat_household_remote_control_plastic_button_press_cheap_single_007_73400.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/3d_mechanics/sounds/zapsplat_household_remote_control_plastic_button_press_cheap_single_007_73400.mp3 -------------------------------------------------------------------------------- /3d_mechanics/sounds/zapsplat_household_remote_control_plastic_button_press_cheap_single_007_73400.mp3.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="mp3" 4 | type="AudioStreamMP3" 5 | uid="uid://c3o3xs1bm1xd7" 6 | path="res://.godot/imported/zapsplat_household_remote_control_plastic_button_press_cheap_single_007_73400.mp3-3fac343589c3c726f33622800e952d6e.mp3str" 7 | 8 | [deps] 9 | 10 | source_file="res://3d_mechanics/sounds/zapsplat_household_remote_control_plastic_button_press_cheap_single_007_73400.mp3" 11 | dest_files=["res://.godot/imported/zapsplat_household_remote_control_plastic_button_press_cheap_single_007_73400.mp3-3fac343589c3c726f33622800e952d6e.mp3str"] 12 | 13 | [params] 14 | 15 | loop=false 16 | loop_offset=0 17 | bpm=0 18 | beat_count=0 19 | bar_beats=4 20 | -------------------------------------------------------------------------------- /3d_mechanics/sounds/zapsplat_vehicles_car_column_stalk_lever_single_movement_002_80087.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/3d_mechanics/sounds/zapsplat_vehicles_car_column_stalk_lever_single_movement_002_80087.mp3 -------------------------------------------------------------------------------- /3d_mechanics/sounds/zapsplat_vehicles_car_column_stalk_lever_single_movement_002_80087.mp3.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="mp3" 4 | type="AudioStreamMP3" 5 | uid="uid://3k8v216l4poc" 6 | path="res://.godot/imported/zapsplat_vehicles_car_column_stalk_lever_single_movement_002_80087.mp3-66053141abb886fc49dbf621e10b905c.mp3str" 7 | 8 | [deps] 9 | 10 | source_file="res://3d_mechanics/sounds/zapsplat_vehicles_car_column_stalk_lever_single_movement_002_80087.mp3" 11 | dest_files=["res://.godot/imported/zapsplat_vehicles_car_column_stalk_lever_single_movement_002_80087.mp3-66053141abb886fc49dbf621e10b905c.mp3str"] 12 | 13 | [params] 14 | 15 | loop=false 16 | loop_offset=0 17 | bpm=0 18 | beat_count=0 19 | bar_beats=4 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Godot 4 Demos Reference Art Style - GDQuest 2 | 3 | This repository contains demos to exemplify the art style we developed for Godot tutorials at GDQuest. Import the project in Godot 4 and open the scenes to see the demos in action. 4 | 5 | ![](screenshots/3d_example.png) 6 | 7 | ![](screenshots/2d_example.png) 8 | -------------------------------------------------------------------------------- /icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /icon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bwmctu35vktfj" 6 | path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icon.svg" 14 | dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=5 10 | 11 | [application] 12 | 13 | config/name="Godot 4 GDQuest demos reference art style" 14 | config/features=PackedStringArray("4.0", "Forward Plus") 15 | config/icon="res://icon.svg" 16 | 17 | [display] 18 | 19 | window/size/viewport_width=1920 20 | window/size/viewport_height=1080 21 | 22 | [editor_plugins] 23 | 24 | enabled=PackedStringArray() 25 | 26 | [input] 27 | 28 | jump={ 29 | "deadzone": 0.5, 30 | "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,"echo":false,"script":null) 31 | ] 32 | } 33 | move_left={ 34 | "deadzone": 0.5, 35 | "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":65,"key_label":0,"unicode":97,"echo":false,"script":null) 36 | ] 37 | } 38 | move_right={ 39 | "deadzone": 0.5, 40 | "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":68,"key_label":0,"unicode":100,"echo":false,"script":null) 41 | ] 42 | } 43 | move_forward={ 44 | "deadzone": 0.5, 45 | "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":87,"key_label":0,"unicode":119,"echo":false,"script":null) 46 | ] 47 | } 48 | move_back={ 49 | "deadzone": 0.5, 50 | "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":83,"key_label":0,"unicode":115,"echo":false,"script":null) 51 | ] 52 | } 53 | -------------------------------------------------------------------------------- /screenshots/.gdignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/screenshots/.gdignore -------------------------------------------------------------------------------- /screenshots/2d_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/screenshots/2d_example.png -------------------------------------------------------------------------------- /screenshots/3d_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gdquest-demos/godot-4-demos-reference-style/f55175b06c38523d27930bc25ad60c7ea8a35922/screenshots/3d_example.png --------------------------------------------------------------------------------