commit a86839c8cdac9985731a79f66e87b83fcb6888c4 Author: 777jouni777 Date: Mon Aug 17 20:06:51 2026 +0300 Godot interaction system init diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0af181c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +.godot/ +/android/ diff --git a/Images/CrosshairHover.png b/Images/CrosshairHover.png new file mode 100644 index 0000000..0b77592 Binary files /dev/null and b/Images/CrosshairHover.png differ diff --git a/Images/CrosshairHover.png.import b/Images/CrosshairHover.png.import new file mode 100644 index 0000000..e1c60fa --- /dev/null +++ b/Images/CrosshairHover.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dykfn12jy713j" +path="res://.godot/imported/CrosshairHover.png-a85d3d697df307bed3f174b2e4bd61bd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Images/CrosshairHover.png" +dest_files=["res://.godot/imported/CrosshairHover.png-a85d3d697df307bed3f174b2e4bd61bd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Images/CrosshairNormal.png b/Images/CrosshairNormal.png new file mode 100644 index 0000000..521261a Binary files /dev/null and b/Images/CrosshairNormal.png differ diff --git a/Images/CrosshairNormal.png.import b/Images/CrosshairNormal.png.import new file mode 100644 index 0000000..b357c16 --- /dev/null +++ b/Images/CrosshairNormal.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://0ihhmm8mwb35" +path="res://.godot/imported/CrosshairNormal.png-38a8a7822df527679673b9473452e22e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Images/CrosshairNormal.png" +dest_files=["res://.godot/imported/CrosshairNormal.png-38a8a7822df527679673b9473452e22e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Main.tscn193997207.tmp b/Main.tscn193997207.tmp new file mode 100644 index 0000000..972183f --- /dev/null +++ b/Main.tscn193997207.tmp @@ -0,0 +1,21 @@ +[gd_scene format=3 uid="uid://cwwsolupah1s3"] + +[ext_resource type="PackedScene" uid="uid://cpog4xqme7wqj" path="res://Player.tscn" id="1_glv2v"] + +[sub_resource type="BoxMesh" id="BoxMesh_1blfk"] +size = Vector3(50, 0.1, 50) + +[sub_resource type="BoxShape3D" id="BoxShape3D_va8t4"] +size = Vector3(50, 0.1, 50) + +[node name="Main" type="Node3D" unique_id=856459222] + +[node name="StaticBody3D" type="StaticBody3D" parent="." unique_id=268564877] + +[node name="MeshInstance3D" type="MeshInstance3D" parent="StaticBody3D" unique_id=427946866] +mesh = SubResource("BoxMesh_1blfk") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" unique_id=2109163521] +shape = SubResource("BoxShape3D_va8t4") + +[node name="Player" parent="." unique_id=1270645855 instance=ExtResource("1_glv2v")] diff --git a/Scenes/Buy Something!.mp3 b/Scenes/Buy Something!.mp3 new file mode 100644 index 0000000..ad9bfed Binary files /dev/null and b/Scenes/Buy Something!.mp3 differ diff --git a/Scenes/Buy Something!.mp3.import b/Scenes/Buy Something!.mp3.import new file mode 100644 index 0000000..585ab9a --- /dev/null +++ b/Scenes/Buy Something!.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://dkc00xclmtkbo" +path="res://.godot/imported/Buy Something!.mp3-4458c1edcd46268f36485e24e39e6554.mp3str" + +[deps] + +source_file="res://Scenes/Buy Something!.mp3" +dest_files=["res://.godot/imported/Buy Something!.mp3-4458c1edcd46268f36485e24e39e6554.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/Scenes/Crosshair.tscn b/Scenes/Crosshair.tscn new file mode 100644 index 0000000..c5448ea --- /dev/null +++ b/Scenes/Crosshair.tscn @@ -0,0 +1,38 @@ +[gd_scene format=3 uid="uid://8xgne2anpltj"] + +[ext_resource type="Script" uid="uid://dd8ys8xg3q3sw" path="res://Scripts/Crosshair.gd" id="1_gksq7"] +[ext_resource type="Texture2D" uid="uid://0ihhmm8mwb35" path="res://Images/CrosshairNormal.png" id="1_vlax0"] +[ext_resource type="Texture2D" uid="uid://dykfn12jy713j" path="res://Images/CrosshairHover.png" id="2_gksq7"] + +[node name="Crosshair" type="CanvasLayer" unique_id=577244800] +script = ExtResource("1_gksq7") +normalTexture = ExtResource("1_vlax0") +hoverTexture = ExtResource("2_gksq7") + +[node name="NormalCrosshair" type="TextureRect" parent="." unique_id=205010982] +custom_maximum_size = Vector2(64, 64) +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -72.0 +offset_top = -72.0 +offset_right = 72.0 +offset_bottom = 72.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="HoverCrosshair" type="TextureRect" parent="." unique_id=2141817914] +custom_maximum_size = Vector2(64, 64) +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -72.0 +offset_top = -72.0 +offset_right = 72.0 +offset_bottom = 72.0 +grow_horizontal = 2 +grow_vertical = 2 diff --git a/Scenes/Door.tscn b/Scenes/Door.tscn new file mode 100644 index 0000000..f2c82aa --- /dev/null +++ b/Scenes/Door.tscn @@ -0,0 +1,78 @@ +[gd_scene format=3 uid="uid://hmpweoahtner"] + +[ext_resource type="Script" uid="uid://cyw8ng7alo12e" path="res://Scripts/Door.gd" id="1_1vvux"] + +[sub_resource type="BoxMesh" id="BoxMesh_va8t4"] +size = Vector3(0.2, 3, 0.2) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_f1iwm"] +albedo_color = Color(1, 0, 0, 1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_476pq"] +size = Vector3(0.2, 3, 0.2) + +[sub_resource type="BoxShape3D" id="BoxShape3D_va8t4"] +size = Vector3(1.5, 3, 0.1) + +[sub_resource type="BoxMesh" id="BoxMesh_1blfk"] +size = Vector3(1.5, 3, 0.1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4dq1k"] +albedo_color = Color(0.18070471, 0.12822011, 6.016344e-08, 1) + +[node name="Door" type="Node3D" unique_id=2086051002 node_paths=PackedStringArray("body", "hinge")] +script = ExtResource("1_1vvux") +body = NodePath("DoorBody") +hinge = NodePath("HingeJoint3D") +hingeAngularLowerLimit = 0.0 +snapVelocityThreshold = 2.0 + +[node name="Frame" type="StaticBody3D" parent="." unique_id=1425869315] + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Frame" unique_id=402301167] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.35, 1.5, 0) +mesh = SubResource("BoxMesh_va8t4") +surface_material_override/0 = SubResource("StandardMaterial3D_f1iwm") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Frame" unique_id=1028358895] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.35, 1.5, 0) +shape = SubResource("BoxShape3D_476pq") + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="Frame" unique_id=1629149026] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.35, 1.5, 0) +mesh = SubResource("BoxMesh_va8t4") +surface_material_override/0 = SubResource("StandardMaterial3D_f1iwm") + +[node name="CollisionShape3D2" type="CollisionShape3D" parent="Frame" unique_id=1273426324] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.35, 1.5, 0) +shape = SubResource("BoxShape3D_476pq") + +[node name="MeshInstance3D3" type="MeshInstance3D" parent="Frame" unique_id=800996442] +transform = Transform3D(-4.371139e-08, -0.635, 0, 1, -2.7756732e-08, 0, 0, 0, 1, 0.5, 3.1, 0) +mesh = SubResource("BoxMesh_va8t4") +surface_material_override/0 = SubResource("StandardMaterial3D_f1iwm") + +[node name="CollisionShape3D3" type="CollisionShape3D" parent="Frame" unique_id=1785799541] +transform = Transform3D(-4.371139e-08, -0.635, 0, 1, -2.7756732e-08, 0, 0, 0, 1, 0.5, 3.1, 0) +shape = SubResource("BoxShape3D_476pq") + +[node name="DoorBody" type="RigidBody3D" parent="." unique_id=1982348670] +axis_lock_angular_x = true +axis_lock_angular_z = true +mass = 10.0 +angular_damp = 5.0 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="DoorBody" unique_id=2068198605] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 1.5, 0) +shape = SubResource("BoxShape3D_va8t4") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="DoorBody" unique_id=502246902] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 1.5, 0) +mesh = SubResource("BoxMesh_1blfk") +surface_material_override/0 = SubResource("StandardMaterial3D_4dq1k") + +[node name="HingeJoint3D" type="HingeJoint3D" parent="." unique_id=1587300072] +transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, -0.25, 1.5, 0) +node_a = NodePath("../Frame") +node_b = NodePath("../DoorBody") +angular_limit/enable = true diff --git a/Scenes/Main.tscn b/Scenes/Main.tscn new file mode 100644 index 0000000..76b329c --- /dev/null +++ b/Scenes/Main.tscn @@ -0,0 +1,124 @@ +[gd_scene format=3 uid="uid://cwwsolupah1s3"] + +[ext_resource type="PackedScene" uid="uid://cpog4xqme7wqj" path="res://Scenes/Player.tscn" id="1_pbw6q"] +[ext_resource type="PackedScene" uid="uid://hmpweoahtner" path="res://Scenes/Door.tscn" id="2_v1gob"] +[ext_resource type="PackedScene" uid="uid://dgre5brxnbps0" path="res://Scenes/MedievalDoor.tscn" id="3_jw32o"] +[ext_resource type="Script" uid="uid://cvg1f1wtahy0t" path="res://TestScripts/BlockMover.gd" id="4_50glp"] +[ext_resource type="PackedScene" uid="uid://cfheqck1xs2bs" path="res://Scenes/SimpleButton.tscn" id="5_vy5pj"] +[ext_resource type="PackedScene" uid="uid://b0fqh430x23kp" path="res://Scenes/SimpleLever.tscn" id="6_v1gob"] +[ext_resource type="PackedScene" uid="uid://cjqsmugd22cdh" path="res://Scenes/SimplePickupable.tscn" id="7_jw32o"] +[ext_resource type="PackedScene" uid="uid://cyn6cmirqiiya" path="res://Scenes/SpatialAudioPlayer.tscn" id="8_bmxlf"] +[ext_resource type="AudioStream" uid="uid://dkc00xclmtkbo" path="res://Scenes/Buy Something!.mp3" id="8_vy5pj"] +[ext_resource type="PackedScene" uid="uid://dknge5384ijcx" path="res://Scenes/SimpleKey.tscn" id="10_bmxlf"] + +[sub_resource type="BoxMesh" id="BoxMesh_1blfk"] +size = Vector3(50, 0.1, 50) + +[sub_resource type="BoxShape3D" id="BoxShape3D_va8t4"] +size = Vector3(50, 0.1, 50) + +[sub_resource type="Environment" id="Environment_1blfk"] + +[sub_resource type="BoxMesh" id="BoxMesh_fos0i"] + +[node name="Main" type="Node3D" unique_id=856459222] + +[node name="StaticBody3D" type="StaticBody3D" parent="." unique_id=268564877] +collision_layer = 17 + +[node name="MeshInstance3D" type="MeshInstance3D" parent="StaticBody3D" unique_id=427946866] +layers = 17 +mesh = SubResource("BoxMesh_1blfk") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" unique_id=2109163521] +shape = SubResource("BoxShape3D_va8t4") + +[node name="Player" parent="." unique_id=1270645855 instance=ExtResource("1_pbw6q")] + +[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=1880837933] +environment = SubResource("Environment_1blfk") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="." unique_id=2091686084] +transform = Transform3D(1, 0, 0, 0, 0.326888, 0.9450631, 0, -0.9450631, 0.326888, 0, 28.631863, 43.110176) + +[node name="Door" parent="." unique_id=2086051002 instance=ExtResource("2_v1gob")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5746174, 0.05000019, -7.507909) +snapAngleThreshold = 0.5 +snapVelocityThreshold = 5.0 + +[node name="MedievalDoor" parent="." unique_id=1143822269 instance=ExtResource("3_jw32o")] +transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 7.1977696, -0.02157104, -1.6521502) + +[node name="Block" type="Node3D" parent="." unique_id=1216126902] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.362265, 2.041253, 0) +script = ExtResource("4_50glp") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Block" unique_id=492958743] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.53257275, 0) +layers = 16385 +mesh = SubResource("BoxMesh_fos0i") + +[node name="SimplePressButton" parent="." unique_id=1810741910 instance=ExtResource("5_vy5pj")] +transform = Transform3D(0.5576158, 0, 0.83009917, 0, 1, 0, -0.83009917, 0, 0.5576158, -5.3408794, 1.7139747, -1.4288577) + +[node name="SimpleHoldButton" parent="." unique_id=506197337 instance=ExtResource("5_vy5pj")] +transform = Transform3D(-0.10736252, 0, 0.99421996, 0, 1, 0, -0.99421996, 0, -0.10736252, -6.9503546, 1.7799978, 2.37957) +holdMode = true + +[node name="SimpleLever" parent="." unique_id=2031608942 instance=ExtResource("6_v1gob")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5557852, 1.6475947, -1.1587057) +angleOff = 45.0 + +[node name="SimplePickupable" parent="." unique_id=650555678 instance=ExtResource("7_jw32o")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5.011193, 10.622059) + +[node name="SimplePickupable2" parent="." unique_id=2110903933 instance=ExtResource("7_jw32o")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.798231, 3.3262725, 10.622059) + +[node name="SimplePickupable3" parent="." unique_id=2062232606 instance=ExtResource("7_jw32o")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.9931345, 3.3262725, 10.622059) +bodyMass = 50.0 + +[node name="CSGBox3D" type="CSGBox3D" parent="." unique_id=475794547] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.204157, 2.9997559, -20.283545) +layers = 17 +size = Vector3(0.5214844, 6.9995117, 7.3129883) + +[node name="CSGBox3D4" type="CSGBox3D" parent="." unique_id=963438638] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.204157, 2.9997559, -11.079284) +layers = 17 +size = Vector3(0.5214844, 6.9995117, 7.3129883) + +[node name="CSGBox3D5" type="CSGBox3D" parent="." unique_id=82836301] +transform = Transform3D(0.5832621, 0, -0.81228405, 0, 1, 0, 0.81228405, 0, 0.5832621, 13.224218, 2.9997559, -5.482582) +layers = 17 +size = Vector3(0.5214844, 6.9995117, 7.3129883) + +[node name="CSGBox3D2" type="CSGBox3D" parent="." unique_id=1489453991] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.8968315, 2.9997559, -13.600012) +layers = 17 +size = Vector3(0.5214844, 6.9995117, 20.680054) + +[node name="CSGBox3D6" type="CSGBox3D" parent="." unique_id=166399348] +transform = Transform3D(-0.013710948, 0.999906, 0, -0.999906, -0.013710948, 0, 0, 0, 1, 13.479281, 6.294318, -13.600012) +layers = 17 +size = Vector3(0.5214844, 6.9995117, 20.680054) + +[node name="CSGBox3D3" type="CSGBox3D" parent="." unique_id=2101564635] +transform = Transform3D(0.03308868, 0, -0.9994524, 0, 1, 0, 0.9994524, 0, 0.03308868, 13.939653, 2.9997559, -23.496096) +layers = 17 +size = Vector3(0.5214844, 6.9995117, 7.3129883) + +[node name="SpatialAudioPlayer" parent="." unique_id=708850804 instance=ExtResource("8_bmxlf")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.358648, 2.9025939, -13.239832) +stream = ExtResource("8_vy5pj") +volume_db = -35.0 +maxRaycastDistance = 10.0 + +[node name="SimplePickupable4" parent="." unique_id=1419866814 instance=ExtResource("10_bmxlf")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0351448, 3.2192059) +bodyMass = 5.0 + +[connection signal="pressed" from="SimplePressButton" to="Block" method="toggleMove"] +[connection signal="held" from="SimpleHoldButton" to="Block" method="holdMove"] +[connection signal="released" from="SimpleHoldButton" to="Block" method="releaseMove"] diff --git a/Scenes/MedievalDoor.tscn b/Scenes/MedievalDoor.tscn new file mode 100644 index 0000000..07f963b --- /dev/null +++ b/Scenes/MedievalDoor.tscn @@ -0,0 +1,331 @@ +[gd_scene format=4 uid="uid://dgre5brxnbps0"] + +[ext_resource type="Texture2D" uid="uid://dulhjsunch31g" path="res://Textures/Door/Wood.jpg" id="1_fgasx"] +[ext_resource type="Texture2D" uid="uid://dp4cgjr828p7j" path="res://Textures/Door/Stone.jpg" id="2_fpqxj"] +[ext_resource type="Texture2D" uid="uid://jydmkkryke23" path="res://Textures/Door/Door.jpg" id="4_8du8j"] +[ext_resource type="Script" uid="uid://cyw8ng7alo12e" path="res://Scripts/Door.gd" id="5_3u0t0"] +[ext_resource type="Texture2D" uid="uid://cq1svjaaumlba" path="res://Textures/Door/RustedMetal.jpg" id="5_pao41"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5ubf6"] +resource_name = "Wood" +cull_mode = 2 +albedo_texture = ExtResource("1_fgasx") +roughness = 0.5 +metadata/_gltf_primary_texture_coord = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_ihxew"] +_surfaces = [{ +"aabb": AABB(-1.3463125, 0.084730506, -0.27765536, 2.6750941, 2.2221437, 0.41620636), +"format": 34896613377, +"index_count": 108, +"index_data": PackedByteArray("AAABAAIAAwAAAAIAAAAEAAEABQABAAQAAwAGAAAABQAGAAMABgADAAYABQAEAAcABQAHAAYACAAHAAYACQAGAAcACAAGAAoABgAJAAoACAAKAAsACgAJAAsACQAIAAsACQAHAAwABwAIAAwACQANAAgACQAMAA4ADgANAAkADAAIAA8ADgAQAA0ADAAQAA4ACAANABAADAAPABAACAAQAA8AEQAKABIAEQATAAoAEQASABQAEQAVABMAFgAUABIAFwATABUAFgAXABQAEwAXABgAGAAXABYA"), +"name": "Wood", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 25, +"vertex_data": PackedByteArray("4+xH7vjmAAAb9wAA+OYAAOPsAAD45gAA4+wAAAAAAAAb90fu+OYAABv3AAAAAAAA4+xH7gAAAAAb90fuAAAAAAAAR+7+/wAAAAD//wAAAADjCEfuAAAAAAAAR+4AAAAA//9H7gAAAAAAAP///v8AAP////8AAAAA//9H7v//AAD///////8AAOMIAAAAAAAA4whH7vjmAAAbE0fuAAAAAOMIAAD45gAAGxMAAAAAAAAbE0fu+OYAABsTAAD45gAAGxNH7nEBAAA=") +}] +blend_shape_mode = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_22684"] +resource_name = "medievaldoors11_Cube_010" +_surfaces = [{ +"aabb": AABB(-1.3463125, 0.084730506, -0.27765536, 2.6750941, 2.2221437, 0.41620636), +"attribute_data": PackedByteArray("lN8QOkTo//+U3///ROgQOsqA//8/YhA6yoAQOj9i/v/08P//pPkQOqT5///08BA6tEP//z9iEDo/Yv7/tEMQOmLK///gvQAAYsoAAOC9//+0QxA6NlA7EjZQEDq0QzsSNlAQOrhcOxK4XBA6NlA7Etoh/v8AAAAA2iEAAAAA//+0QwAA2iHjCNohAADaIePs2iEb99oh/v+0Q///5dbjCGLKAADl1gAA5dbj7OXWG/fl1v//Ysr///TwEDpE6P//ROgQOvTw///l1hA6lN///+XW//+U3xA6yoD+/1WfEDpVn///JJ8QOsqAEDrgvf//VZ8QOlWf/v/gvRA64L0QOg=="), +"format": 34896613399, +"index_count": 108, +"index_data": PackedByteArray("AAABAAIAAAADAAEABAAFAAYABAAHAAUACAAJAAoACAALAAkADAANAA4ADAAPAA0AEAARABIAEAATABEAFAAVABYAFAAXABUAGAAZABoAGAAbABkAHAAdAB4AHAAfAB0AIAAhACIAIAAjACEAIAAkACMAJAAgACUAJQAgACYAJwAoACkAKgAoACcAKAAqACsAKAArACwAKAAsAC0ALgAvADAALgAxAC8AMgAzADQAMgA1ADMANgA3ADgANwA2ADkAOQA2ADoAOwA8AD0AOwA+ADwAPgA7AD8A"), +"material": SubResource("StandardMaterial3D_5ubf6"), +"name": "Wood", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 64, +"vertex_data": PackedByteArray("4+xH7vjmAIAb9wAA+OYAgOPsAAD45gCAG/dH7vjmAIAb9wAAAAD/vxv3R+745v+/G/dH7gAA/78b9wAA+Ob/vxsTR+745v//4wgAAPjm///jCEfu+Ob//xsTAAD45v//4wgAAAAA/7/jCEfu+Ob/v+MIAAD45v+/4whH7gAA/78AAEfu/v//v/////////+///9H7v///78AAP///v//v///R+4AAFTV////////VNX/////AABU1f//R+7//1TVAAD//wAAVNUAAEfu/v9U1QAAR+4AAFTVAAD///7/VNX/////AABU1QAA///+/1TVAAD//wAAVNX///////9U1QAAR+7+/1TV4whH7gAAVNUAAEfuAABU1ePsR+4AAFTVG/dH7gAAVNX//0fuAABU1f//R+7//1TV4whH7gAA//8AAP//AAD//wAAR+4AAP//4+xH7gAA//8b90fuAAD/////R+4AAP///////wAA//8b9wAAAAD//+PsR+4AAP//4+wAAAAA//8b90fuAAD//+MIAAAAAP//GxNH7gAA///jCEfuAAD//xsTAAAAAP//GxMAAPjm/78bE0fuAAD/vxsTAAAAAP+/GxNH7nEB/78bE0fu+Ob/v+PsAAAAAAAA4+xH7vjmAADj7AAA+OYAAOPsR+4AAAAA4+xH7gAAAAD/f////3////9/////f////38AAP9/AAD/fwAA/38AAP9//3//f/9//3//f/9//3//f/7//3/+//9//v//f/7//3//f/9//3//f/9//3//f6oqqiqqKqoqqiqqKqoqqipUVaqqVFWqqlRVqqpUVaqqVNWqKlTVqipU1aoqVNWqKqoqVNWqKlTVqipU1aoqVNWqKlTVqipU1aoqVNX/P/+//z//v/8//78AQP+//z//v/8//7//P/+/////f////3////9/////f////3////9/////f////3//fwAA/X8AAP9/AAD+fwAA/38AAP8//3//P/9//z//f/8//3//P/9/") +}] +blend_shape_mode = 0 +shadow_mesh = SubResource("ArrayMesh_ihxew") + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_kufgt"] +data = PackedVector3Array(1.1291, 2.1531, 0.097899996, 1.2358999, 0.084699996, 0.097899996, 1.1291, 0.084699996, 0.097899996, 1.1291, 2.1531, 0.097899996, 1.2358999, 2.1531, 0.097899996, 1.2358999, 0.084699996, 0.097899996, 1.2358999, 0.084699996, -0.2777, 1.2358999, 2.1531, 0.097899996, 1.2358999, 2.1531, -0.2777, 1.2358999, 0.084699996, -0.2777, 1.2358999, 0.084699996, 0.097899996, 1.2358999, 2.1531, 0.097899996, -1.1467, 2.1531, 0.097899996, -1.2534, 0.084699996, 0.097899996, -1.2534, 2.1531, 0.097899996, -1.1467, 2.1531, 0.097899996, -1.1467, 0.084699996, 0.097899996, -1.2534, 0.084699996, 0.097899996, -1.2534, 0.084699996, -0.2777, -1.2534, 2.1531, 0.097899996, -1.2534, 0.084699996, 0.097899996, -1.2534, 0.084699996, -0.2777, -1.2534, 2.1531, -0.2777, -1.2534, 2.1531, 0.097899996, -1.3463, 2.1531, 0.13849999, 1.3288, 2.3069, 0.13859999, 1.3288, 2.1531, 0.13859999, -1.3463, 2.1531, 0.13849999, -1.3463, 2.3069, 0.13849999, 1.3288, 2.3069, 0.13859999, 1.3288, 2.1531, -0.2777, 1.3288, 2.3069, 0.13859999, 1.3288, 2.3069, -0.2777, 1.3288, 2.1531, -0.2777, 1.3288, 2.1531, 0.13859999, 1.3288, 2.3069, 0.13859999, -1.3463, 2.3069, -0.2777, -1.3463, 2.1531, 0.13849999, -1.3463, 2.1531, -0.2777, -1.3463, 2.3069, -0.2777, -1.3463, 2.3069, 0.13849999, -1.3463, 2.1531, 0.13849999, 1.3288, 2.3069, -0.2777, -1.3463, 2.3069, 0.13849999, -1.3463, 2.3069, -0.2777, 1.3288, 2.3069, -0.2777, 1.3288, 2.3069, 0.13859999, -1.3463, 2.3069, 0.13849999, -1.3463, 2.1531, 0.13849999, -1.2534, 2.1531, -0.2777, -1.3463, 2.1531, -0.2777, -1.3463, 2.1531, 0.13849999, 1.1291, 2.1531, -0.2777, -1.2534, 2.1531, -0.2777, -1.3463, 2.1531, 0.13849999, 1.2358999, 2.1531, -0.2777, 1.1291, 2.1531, -0.2777, 1.2358999, 2.1531, -0.2777, -1.3463, 2.1531, 0.13849999, 1.3288, 2.1531, -0.2777, 1.3288, 2.1531, -0.2777, -1.3463, 2.1531, 0.13849999, 1.3288, 2.1531, 0.13859999, -1.2534, 2.1531, -0.2777, -1.3463, 2.3069, -0.2777, -1.3463, 2.1531, -0.2777, 1.1291, 2.1531, -0.2777, -1.3463, 2.3069, -0.2777, -1.2534, 2.1531, -0.2777, -1.3463, 2.3069, -0.2777, 1.1291, 2.1531, -0.2777, 1.2358999, 2.1531, -0.2777, -1.3463, 2.3069, -0.2777, 1.2358999, 2.1531, -0.2777, 1.3288, 2.1531, -0.2777, -1.3463, 2.3069, -0.2777, 1.3288, 2.1531, -0.2777, 1.3288, 2.3069, -0.2777, 1.2358999, 0.084699996, -0.2777, 1.1291, 2.1531, -0.2777, 1.1291, 0.084699996, -0.2777, 1.2358999, 0.084699996, -0.2777, 1.2358999, 2.1531, -0.2777, 1.1291, 2.1531, -0.2777, -1.2534, 0.084699996, -0.2777, -1.1467, 2.1531, -0.2777, -1.2534, 2.1531, -0.2777, -1.2534, 0.084699996, -0.2777, -1.1467, 0.084699996, -0.2777, -1.1467, 2.1531, -0.2777, -1.1467, 0.084699996, 0.097899996, -1.1467, 2.1531, -0.2777, -1.1467, 0.084699996, -0.2777, -1.1467, 2.1531, -0.2777, -1.1467, 0.084699996, 0.097899996, -1.1467, 2.1531, -0.2753, -1.1467, 2.1531, -0.2753, -1.1467, 0.084699996, 0.097899996, -1.1467, 2.1531, 0.097899996, 1.1291, 0.084699996, -0.2777, 1.1291, 2.1531, 0.097899996, 1.1291, 0.084699996, 0.097899996, 1.1291, 0.084699996, -0.2777, 1.1291, 2.1531, -0.2777, 1.1291, 2.1531, 0.097899996, 1.1291, 2.1531, -0.2777, 1.1291, 0.084699996, -0.2777, 1.1291, 2.1531, -0.2777) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_56a0c"] +resource_name = "Stone" +cull_mode = 2 +albedo_texture = ExtResource("2_fpqxj") +roughness = 0.5 +metadata/_gltf_primary_texture_coord = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_rlm6i"] +_surfaces = [{ +"aabb": AABB(-1.3266811, -0.0367862, -0.27765518, 2.6729937, 0.121516705, 0.68299586), +"format": 34896613377, +"index_count": 36, +"index_data": PackedByteArray("AAABAAIAAAADAAEABAACAAEAAwAEAAEABQAAAAIAAwAAAAUABAAGAAIABQACAAYAAwAHAAQAAwAFAAcABwAGAAQABwAFAAYA"), +"name": "Stone", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 8, +"vertex_data": PackedByteArray("//8AAAAAAAAAAAAA/v8AAP//AAD//wAAAAAAAAAAAAAAAP///v8AAP////8AAAAA////////AAAAAP//AAAAAA==") +}] +blend_shape_mode = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_ci6nf"] +resource_name = "medievaldoors11_Cube_008" +_surfaces = [{ +"aabb": AABB(-1.3266811, -0.0367862, -0.27765518, 2.6729937, 0.121516705, 0.68299586), +"attribute_data": PackedByteArray("Bv5KX/gBtKAG/rSg+AFKX/gBLXoG/tGF+AHRhQb+LXozoC16y1/RhctfLXozoNGFM6DRhctfLXrLX9GFM6AtevgBSl8G/rSg+AG0oAb+Sl/4AdGFBv4tevgBLXoG/tGF"), +"format": 34896613399, +"index_count": 36, +"index_data": PackedByteArray("AAABAAIAAAADAAEABAAFAAYABAAHAAUACAAJAAoACAALAAkADAANAA4ADAAPAA0AEAARABIAEAATABEAFAAVABYAFAAXABUA"), +"material": SubResource("StandardMaterial3D_56a0c"), +"name": "Stone", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 24, +"vertex_data": PackedByteArray("//8AAAAA/z8AAAAA/v//P///AAD///8/AAAAAAAA/z8AAP///v8AgP//AAD//wCAAAAAAP7/AID///////8AgP////8AAP+///8AAP///7//////////v///AAAAAP+/AAAAAAAAAAAAAP///v8AAAAAAAD+/wAAAAD//wAAAAAAAP//AAD/v/////////+/AAD///7//7//////AAD/vwAAAAAAAAAA/////wAAAAAAAP//AAAAAP//AAAAAAAAAAD/fwAA/38AAP9/AAD/f/9/////f////3////9/////fwAA/38AAP9/AAD/fwAA/z//f/8//3//P/9//z//f////3////9/////f////3////9/////f////3////9/") +}] +blend_shape_mode = 0 +shadow_mesh = SubResource("ArrayMesh_rlm6i") + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_3u0t0"] +data = PackedVector3Array(1.3463, -0.0368, -0.2777, -1.3267, -0.0368, 0.4053, 1.3463, -0.0368, 0.4053, 1.3463, -0.0368, -0.2777, -1.3267, -0.0368, -0.2777, -1.3267, -0.0368, 0.4053, -1.3267, 0.084699996, 0.4053, 1.3463, -0.0368, 0.4053, -1.3267, -0.0368, 0.4053, -1.3267, 0.084699996, 0.4053, 1.3463, 0.084699996, 0.4053, 1.3463, -0.0368, 0.4053, 1.3463, 0.084699996, -0.2777, 1.3463, -0.0368, 0.4053, 1.3463, 0.084699996, 0.4053, 1.3463, 0.084699996, -0.2777, 1.3463, -0.0368, -0.2777, 1.3463, -0.0368, 0.4053, -1.3267, -0.0368, -0.2777, -1.3267, 0.084699996, 0.4053, -1.3267, -0.0368, 0.4053, -1.3267, -0.0368, -0.2777, -1.3267, 0.084699996, -0.2777, -1.3267, 0.084699996, 0.4053, -1.3267, 0.084699996, -0.2777, 1.3463, 0.084699996, 0.4053, -1.3267, 0.084699996, 0.4053, -1.3267, 0.084699996, -0.2777, 1.3463, 0.084699996, -0.2777, 1.3463, 0.084699996, 0.4053, -1.3267, -0.0368, -0.2777, 1.3463, 0.084699996, -0.2777, -1.3267, 0.084699996, -0.2777, -1.3267, -0.0368, -0.2777, 1.3463, -0.0368, -0.2777, 1.3463, 0.084699996, -0.2777) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ow5aw"] +resource_name = "DoorType1_2" +cull_mode = 2 +albedo_texture = ExtResource("4_8du8j") +roughness = 0.5 +metadata/_gltf_primary_texture_coord = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_jrc0e"] +_surfaces = [{ +"aabb": AABB(-1.146632, 0.08473039, 0.0045645237, 1.1378665, 2.068352, 0.05000186), +"format": 34896613377, +"index_count": 36, +"index_data": PackedByteArray("AAABAAIAAAACAAMAAAAEAAEAAgAFAAMAAgABAAUAAAADAAYABAAAAAYABgADAAUAAQAEAAcABAAGAAcAAQAHAAUABgAFAAcA"), +"name": "DoorType1_2", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 8, +"vertex_data": PackedByteArray("AAAAAP7/AAD+//////8AAP//AAD+/wAA//8AAAAAAAAAAP////8AAP7///8AAAAAAAAAAAAAAAAAAP//AAAAAA==") +}] +blend_shape_mode = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_qpqq3"] +resource_name = "medievaldoors11_Cube_016" +_surfaces = [{ +"aabb": AABB(-1.146632, 0.08473039, 0.0045645237, 1.1378665, 2.068352, 0.05000186), +"attribute_data": PackedByteArray("AQD//9aMAADWjP//AQAAAAEA///WjAAAAQAAANaM///UjDMGAAACANSMAgAAADMGsYYAAOKM///ijAAAsob//7KG///ijAAA4oz//7GGAAAAADMG1YwCAAAAAgDVjDMG"), +"format": 34896613399, +"index_count": 36, +"index_data": PackedByteArray("AAABAAIAAAADAAEABAAFAAYABAAHAAUACAAJAAoACAALAAkADAANAA4ADAAPAA0AEAARABIAEAATABEAFAAVABYAFAAXABUA"), +"material": SubResource("StandardMaterial3D_ow5aw"), +"name": "DoorType1_2", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 24, +"vertex_data": PackedByteArray("AAAAAP7/AID+//////8AgP//AAD+/wCAAAD/////AIAAAAAAAAAAAP7///8AAAAAAAD//wAAAAD//wAAAAAAAP7///////+/AAD//wAA/7/+////AAD/vwAA//////+/AAD/////AAAAAAAAAAAAAAAA//8AAAAAAAAAAP7/AAD//wAA/v//v/7///8AAP+///8AAAAA/7/+////////vwAAAAD+//8///8AAAAA/z8AAAAAAAD/P///AAD+//8//3////9/////f////3///////3////9/////f////3////9/////f////3////9//z//f/8//3//P/9//z//f/9/AAD/fwAA/38AAP9/AAAAAP9/AAD/fwAA/38AAP9/") +}] +blend_shape_mode = 0 +shadow_mesh = SubResource("ArrayMesh_jrc0e") + +[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_3u0t0"] +points = PackedVector3Array(-1.146632, 0.08473039, 0.0045645237, -1.146632, 0.08473039, 0.05456149, -1.146632, 2.1530824, 0.0045645237, -0.008765459, 0.08473039, 0.0045645237, -0.008765459, 0.08473039, 0.05456149, -1.146632, 2.1530824, 0.05456638, -0.008876801, 2.1530824, 0.0045645237, -0.008876801, 2.1530824, 0.05456638) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vkyjj"] +resource_name = "RustedMetal" +cull_mode = 2 +albedo_texture = ExtResource("5_pao41") +roughness = 0.5 +metadata/_gltf_primary_texture_coord = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_cm8yl"] +_surfaces = [{ +"aabb": AABB(-0.15807295, 0.91522706, 0.06941259, 0.122282505, 0.15972829, 0.053642333), +"format": 34896613377, +"index_count": 1098, +"index_data": PackedByteArray("AAAKADYACgAiADYAPQAAADYAAAA3AAoAPQA2AAIAPQAfAAAANgAiAGQANgBkAAIACgBlACIAAAAfADgAAAA4ADcANwBmAAoAZgBlAAoANwA4ADkANwABAGYANwA5AAEAOABnADkAHwBoADgAOABoAGcAHwBpAGgAAQA6AGYAZgAjAGUAOgAjAGYAIwA7AGUAaQA7AGgAOgBqACMAPgBpAB8APQA+AB8AaAA7AGsAIwBrADsAaABrAGcAagBrACMAIAA+AD0AIAA9AAIAZQA7AGwAaQBsADsAZQBsACIAPgBtAGkAbQBsAGkAIABAAD4AQABtAD4AIgBsAD8AbQA/AGwAIgA/AGQAQABuAG0AbgA/AG0AAwBAACAAbgBvAD8AZAA/AG8ALABuAEAAAwAsAEAAcABvAG4ALABwAG4AZABvACEAAgBkACEAIAACAEEAAwAgAEEAAgAhAEEAcABxAG8AIQBvAHEAIQBxAEIAQQAhAEIAAwBBAHIAQQBCAHIAQwADAHIAQwAsAAMARABwACwAQwBEACwAcwBxAHAARABzAHAAQgBxAEUAcwBFAHEAcgBCAHQAQgBFAHQAQwByAAYAcgB0AAYARgBEAEMARgBDAAYAKgBzAEQARgAqAEQAdQBFAHMAKgB1AHMAdABFAHYAdQB2AEUABgB0ACsAdAB2ACsARgAGAEcABgArAEcACAAqAEYACABGAEcASAB1ACoACABIACoAdwB2AHUASAB3AHUAKwB2AEkAdwBJAHYARwArAHgAKwBJAHgACABHAHkARwB4AHkASgBIAAgASgAIAHkAKAB3AEgASgAoAEgAegBJAHcAKAB6AHcAeABJAHsAegB7AEkAeQB4ACkAeAB7ACkASgB5AAsAeQApAAsASwAoAEoASwBKAAsATAB6ACgASwBMACgAfAB7AHoATAB8AHoAKQB7AE0AfABNAHsACwApAH0AKQBNAH0ASwALAH4ACwB9AH4ACQBMAEsACQBLAH4AJgB8AEwACQAmAEwAfwBNAHwAJgB/AHwAfQBNAIAAfwCAAE0AfgB9ACcAfQCAACcACQB+AAcAfgAnAAcATgAmAAkATgAJAAcATwB/ACYATgBPACYAgQCAAH8ATwCBAH8AJwCAAFAAgQBQAIAABwAnAIIAJwBQAIIATgAHAFIABwCCAFIABABPAE4ABABOAFIAUQCBAE8ABABRAE8AgwBQAIEAUQCDAIEAggBQAIQAgwCEAFAAUgCCACUAggCEACUABABSAIUAUgAlAIUAUwBRAAQAUwAEAIUAJACDAFEAUwAkAFEAhgCEAIMAJACGAIMAJQCEAIcAhgCHAIQAhQAlAFQAJQCHAFQAUwCFAAUAhQBUAAUAPAAkAFMAPABTAAUAVgCGACQAPABWACQAiACHAIYAVgCIAIYAAQBWADwAAQA5AFYAOQCIAFYAAQA8ADoAPAAFADoABQBqADoABQBUAGoAOQBnAIgAVABVAGoAVACHAFUAiABVAIcAZwBVAIgAagBVAGsAZwBrAFUADAAOAIkADAANAA4AEQAMAIkADQCKAA4ADQAPAIoAEQCJAIsAFAARAIsAiQAOAIwAFACLABMAFQAUABMAiwCJAI0AiQCMAI0AEwCLAI4AiwCNAI4AFQATAI8AFwAVAI8AEwCOADAAjwATADAAFwCPAC4AGQAXAC4AjwAwAJAALgCPAJAAGQAuAJEAGgAZAJEALgCQAFgAkQAuAFgAGgCRAFcAHAAaAFcAkQBYAJIAVwCRAJIAHABXAJMAHgAcAJMAVwCSAJQAkwBXAJQAHgCTABYAHQAeABYAkwCUAFkAFgCTAFkAHQAWAJUAGwAdAJUAFgBZAJYAlQAWAJYAGwCVAC0AGAAbAC0AlQCWAC8ALQCVAC8AGAAtAJcAEgAYAJcALQAvAJgAlwAtAJgAEgCXAJkAEAASAJkAlwCYAJoAmQCXAJoAEACZAFoADwAQAFoADwBaAIoAWgCZAFsAmQCaAFsAigBaAJsAWgBbAJsAigCbADEADgCKADEADgAxAIwAMQCbAJwAmwBbAJ0AmwCdAJwAWwBcAJ0AWwCaAFwAjAAxADQAMQCcADQAjAA0AJ4AjQCMAJ4AmgCfAFwAmgCYAJ8AjQCeAKAAjgCNAKAAngA0AKEAjgCgAKIAMACOAKIAoACeAKMAngChAKMAogCgAKQAoACjAKQAMACiAGAAkAAwAGAAogCkAKUAYACiAKUApQCkAKYAkABgAKcAWACQAKcAYAClADUApwBgADUApQCmAKgANQClAKgApACpAKYAqQCoAKYApACjAKkANQCoAKoAWACnAKsApwA1AKwArAA1AKoAqwCnAKwAkgBYAKsAqACtAKoArACqAK0AqQCtAKgAqwCsAK4ArgCsAK0AkgCrAK8ArwCrAK4AlACSAK8AowBiAKkAowChAGIAsACpAGIAoQCwAGIAsQCpALAAsQCtAKkAoQCyALAANACyAKEANACcALIAsgCzALAAsQCwALMAnABfALIAsgBfALMAXwCxALMAnACdAF8AnQC0AF8AXwC0ALEAnQBcALQAtABhALEAXAC1ALQAtAC1AGEAXACfALUAtgCxAGEAtQC2AGEAtwCxALYArQCxALcAtQC4ALYAnwC4ALUAuAC5ALYAtwC2ALkAnwAyALgAmAAyAJ8AmAAvADIAuAC6ALkAMgC6ALgAugC3ALkALwC7ADIAMgC7ALoALwCWALsAugBeALcAuwBeALoAlgC8ALsAuwC8AF4AlgBZALwAXgBjALcAWQBdALwAWQCUAF0AlACvAF0AvAC9AF4AXgC9AGMAvABdAL0AvgC3AGMAvQC+AGMArQC3AL4AXQAzAL0AXQCvADMAvQAzAL4ArwCuADMArQC+AL8ArgCtAL8AMwC/AL4AMwCuAL8A"), +"lods": [0.012256797, PackedByteArray("AAAKADYAAAA3AAoAAAA4ADcANwABAAoANwA4ADkANwA5AAEAOAAjADkAAQA6AAoAOgAjAAoAOAA7ACMAAQA8ADoAAAAfADgAHwA7ADgAPQAfAAAAPQAAADYAHwAiADsAIwA7ACIACgAiADYACgAjACIAPQA2AAIAPQA+AB8APgAiAB8AIAA9AAIAIAA+AD0ANgAhAAIANgAiACEAPgA/ACIAIgA/ACEAQAA/AD4AIABAAD4AQAAhAD8AIAACAEEAAgAhAEEAAwBAACAAAwAgAEEALAAhAEAAAwAsAEAALABCACEAQQAhAEIAAwBBAAYAQQBCAAYAQwAsAAMAQwADAAYARABCACwAQwBEACwARABFAEIARgBDAAYARgBEAEMABgBCACsAQgBFACsARgAGAEcABgArAEcAKgBFAEQARgAqAEQAKgArAEUACABGAEcACAAqAEYACABHAAsASAArACoACABIACoASABJACsARwArACkAKwBJACkARwApAAsAKABJAEgAKAApAEkASgBIAAgASgAoAEgASgAIAAsASwAoAEoASwBKAAsATAApACgASwBMACgATABNACkASwALAAcACwApACcAKQBNACcACwAnAAcAJgBNAEwAJgAnAE0ACQBMAEsACQAmAEwACQBLAAcATgAmAAkATgAJAAcATwAnACYATgBPACYATwBQACcABwAnACUAJwBQACUAUQBQAE8AUQAlAFAABABPAE4ABABRAE8ATgAHAFIABABOAFIABwAlAFIABABSAAUAUgAlAAUAUwBRAAQAUwAEAAUAJAAlAFEAUwAkAFEAJABUACUABQAlAFQAPAAkAFMAPABTAAUAPAAFADoABQAjADoABQBUACMAVABVACMAOQAjAFUAVgBUACQAPABWACQAVgBVAFQAOQBVAFYAAQBWADwAAQA5AFYADAANAA4ADQAPAA4AEQAMAA4AEQAOABMAFAARABMAFQAUABMAFQATAC4AFwAVAC4AGQAXAC4ALgATADAAEwAOADAAGQAuAFcAGgAZAFcAHAAaAFcAVwAuAFgALgAwAFgAHABXABYAHgAcABYAHQAeABYAFgBXAFkAVwBYAFkAHQAWAC0ALQAWAFkAGwAdAC0AGAAbAC0AEgAYAC0AEgAtAFoAEAASAFoADwAQAFoADwBaAA4AWgAtAFsADgBaAFsALQBZAC8ALQAvAFsADgBbADEADgAxADAAMQBbADQAMAAxADQAWwAvAFwAWwBcADQALwBZADIALwAyAFwAWQBdADIAWQBYAF0AXAAyAF4AMgBdAF4ANABcAF8AXABeAF8AWAAwAGAAMAA0AGAAWABgAF0AXwBeAGEAYAA0ADUANABfADUAXQBgADMAXQAzAF4AYAA1ADMAXwBhAGIANQBfAGIAXgBjAGEAXgAzAGMAYQBjAGIAMwA1AGMAYgBjADUA"), 0.029816525, PackedByteArray("AAAKAAIAAAABAAoAAAAfAAEAIAAfAAAAIAAAAAIAIAAhAB8AHwAiAAEAHwAhACIACgAiAAIAAgAiACEACgAjACIAAQAiACMABQAjAAoAAQAFAAoAAQAjACQABQAlACMAJAAjACUAAQAEAAUAAQAkAAQABAAHAAUABwAlAAUABAAkACYAJAAlACYABAAJAAcABAAmAAkABwAnACUAJgAlACcACwAnAAcACQALAAcAJgAnACgACQAmACgACwApACcAKAAnACkACQAIAAsACQAoAAgABgApAAsACAAGAAsAKAApACoACAAoACoAKgApACsABgArACkACAAqACwAKgArACwABgAhACsALAArACEAAgAhAAYALAAhACAAAwACAAYACAADAAYAAwAgAAIACAAsAAMAAwAsACAADAANAA4ADQAPAA4ADwAQAA4AEQAMAA4AEAASAA4AEQAOABMAFAARABMAFQAUABMAEgAtAA4AEgAYAC0AGAAbAC0AGwAdAC0AFQATAC4AFwAVAC4AGQAXAC4AGgAZAC4AHAAaAC4AHQAWAC0AHAAuABYAHQAeABYAHgAcABYAFgAuAC8ALQAWAC8ALgATADAALgAwAC8AEwAOADAADgAtADEALQAvADEADgAxADAAMQAvADIALwAwADMALwAzADIAMQAyADQAMAAxADQANAAyADMAMAA1ADMANAAzADUAMAA0ADUA"), 0.093039304, PackedByteArray("AAAKAAIAAAACAAoAAwAAAAIAAwACAAAAAwAGAAIAAwACAAYACAADAAYACAAGAAMACAALAAYACAAGAAsACQAIAAsACQALAAgACQAHAAsACQALAAcABAAJAAcACQAEAAcAAAAKAAEAAAABAAoAAQAKAAQAAQAFAAoABQAEAAoAAQAEAAUABAAHAAUABwAEAAUADAANAA4ADQAPAA4ADwAQAA4AEQAMAA4AEAASAA4AEQAOABMAFAARABMAFQAUABMADgAWABMAFQATABYAEgAWAA4AFwAVABYAEgAYABYAGQAXABYAGgAZABYAGAAbABYAHAAaABYAGwAdABYAHgAcABYAHQAeABYA"), 0.149667, PackedByteArray("AAABAAIAAAACAAEAAwAAAAIAAwACAAAAAQACAAQAAQAFAAIAAQAEAAUABQAEAAIAAwACAAYAAwAGAAIABAAHAAUABwAEAAUACAADAAYACAAGAAMACAAHAAYACAAGAAcACQAEAAcABAAJAAcACQAIAAcACQAHAAgA")], +"name": "RustedMetal", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 192, +"vertex_data": PackedByteArray("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") +}] +blend_shape_mode = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_ju5ts"] +resource_name = "medievaldoors11_Cube_009" +_surfaces = [{ +"aabb": AABB(-0.15807295, 0.91522706, 0.06941259, 0.122282505, 0.15972829, 0.053642333), +"attribute_data": PackedByteArray("AaUQdOa4/ItFkrhyBXGra/CpS54VbI53AaUuqiBd3onBgyKj4oFfqezqV7ZS8G3icNcz3vb/XLzwnzbrNM+//RCv9v/HetTy3Xz53Otg2te5beat811irPCpi4EVbE+UMLuC7I1uZMWSAV5baAHLZCsJ7GRAATluEQEZecIBgVDcAL6FuwkGRPkB5EPqB/64pQCCk28ASaE9APmtGgDsuAgAccIIAPrLQRvZwiEA+tZkAMPj3ACs8UgKLv/VXKTeGgL2/+KBiGly8D242OPi1jH6bLokyPfuhuLq6+St2vFcr9H6kYoK+bSQcOwOfVbudXJ42fFp0N88ak/GcWJryk9inKyQabytOQhnoTkIjOORFNf5gygTzw4xkMWRJrzowCXC9V9OYN2BLCja70O04s8+b/AeTATzDFTs9q2fv3jpsSB/JJR7bH6v3ZXluK+YwYNgcOmxSaMcZJByRJJ5pSBdK30jlFGsh2b9fwVxyqEcZLqWceVGxtrtccp8837O8/jG0Fnrad+X5srvyNu8+LfbEeIW2Rn0v9Qx7d3NtvhPwPb/Ys825e2/7fodvaf0i5ya/Rmu2OyCnXv4i57v8iaMMvQ+ktHnjW5D6/GDVuencXvnFmZ04iR3KOM+dmzWNmVd1gZeC8uiapbSIF0yvHhhLrx9ZuS61gg5edsH8MtcE7jm1gw0zXEcdfVEG97R3iCR4D9C29XdUVTSPS2p6uUwXfbpMuvtTylw5CosQOorMsDndDcQ2/w4cuSMOSzqZUUV8X6vxItZdhNyrZ/Go4dmFYpYdhqdEJ8d8EGPDu/bu5HxRcb26U+u1vSL0s7p/8ku8tne6tMI3kLl6+qFyGXmmdmn8wW5SPBmzHz2jbmM6HzcGuCV6OnWl/AFzEb1o76B9+6ufPcYnlb1vY1H8Wd/u+vBgbHpY3Qr5UuGy+LDefLg2Gyz3ahvmtsUaIvUTmUYyUVkmbsUZQOtqWeYxypnaK1NbcXQhHHRzglpVbpYbSe6VAl/WwMJWm6DCaNQowjdhW4IoJMKCBSu2gd3wvYH3Na1CDPxPBNi8IkJMdcpHB3wkhTY3dYcVOqLJdDwPCsU8xMXwNbIEjbGaR7y5NMlXezjKqfwOSwg9RIrNe5+K//r6isZ7LUnHebbI07dJCFZz5Ql9MIiLQrpuCc020srUONoLjvoAjFv0PI8Ucn4LbjiHDDS5+gxJNrlObbSSEiizW8xu+JTNV3jWjT25408D91NSWDZ8Vjc12g2i+jUQKzf4TvM5TQ4TekeURPiD11j5tI9SOe+RfPld1Fo5+RZne76PuToYDou649Gb+mbTy/thj/K6sk6YexcRkftgz827bw63e0xOobvUjNa8Doy7vQVM9PySS/n9qUtePbYLh7q6jHh63wwi+o="), +"format": 34896613399, +"index_count": 1098, +"index_data": PackedByteArray("AAAWAE8AAABQABYAUQAAAE8AUACRABYAUQBPAAIAUAABAJEAMQBRAAIAAQBSAJEAMQACAFQAAQBTAFIAAwAxAFQAUwAEAFIAAwBUAJIAUwBVAAQAVgADAJIAVQCTAAQAVgCSAAUAVQAGAJMAWABWAAUABgBXAJMAWAAFAFoABgBZAFcABwBYAFoAWQAIAFcABwBaAJQAWQAJAAgAXAAHAJQACQCVAAgAXACUABcACQBbAJUAWwBcABcAWwAXAJUAlgCXADoADgCWADoAbQCWAA4ADgA6AHEAbQA3AJYAGAA3AG0ANwBvAJYAlgBvAJcAGACYADcAmQCYABgANwCaAG8AmACaADcAmQA1AJgAaQA1AJkAmABrAJoANQBrAJgAaQCbADUADACbAGkANQCcAGsAmwCcADUADABkAJsAnQBkAAwAmwBmAJwAZABmAJsAnQAzAGQAXQAzAJ0AZACeAGYAMwCeAGQAXQCfADMACgCfAF0ACgAyAJ8AnwCgADMAMwCgAJ4AMgBeAJ8AnwBeAKAAMgChAF4AogBeAKEAogChAKMApACgAF4ApABeAKIApQCeAKAApQCgAKQApgCeAKUApgBmAJ4AXwCiAKMAXwCjADQAYABfADQAYAA0AA0ACwBfAGAAYQCiAF8ACwBhAF8AYQCkAKIAYgBhAAsANgCkAGEAYgA2AGEANgClAKQAYwA2AGIAZQClADYAYwBlADYAZQCmAKUADwBlAGMADwBnAGUAZwCmAGUAaABnAA8AZwCnAKYApwBmAKYApwCcAGYAaABqAGcAagCnAGcAEABqAGgAqACcAKcAagCoAKcAqABrAJwAEAA4AGoAOACoAGoAbAA4ABAAqQBrAKgAOACpAKgAqQCaAGsAbABuADgAbgCpADgAOQBuAGwAqgCaAKkAbgCqAKkAqgBvAJoAOQBwAG4AcACqAG4AEQBwADkAqwBvAKoAcACrAKoAqwCXAG8AEQA7AHAAOwCrAHAAcgA7ABEArACXAKsAOwCsAKsAcgB0ADsAdACsADsAdQB0AHIArACtAJcAOgCXAK0AdACuAKwArgCtAKwAdQA9AHQAPQCuAHQAEwA9AHUAOgCtAHMAcQA6AHMAcQBzAK8AcwCtAHYArgB2AK0ArwBzALAAcwB2ALAArwCwABIAsQB2AK4APQCxAK4AsAB2ALIAsQCyAHYAEgCwADwAsACyADwAEgA8AHcAEwB4AD0AeACxAD0AeQB4ABMAswCyALEAeACzALEAeQA/AHgAPwCzAHgAewA/AHkAswB6ALIAPACyAHoAPwC0ALMAtAB6ALMAewB8AD8AfAC0AD8AFQB8AHsAFQBAAHwAQAC1AHwAfAC1ALQAQAC2ALUAtAC3AHoAtQC3ALQAtgB9ALUAtQB9ALcAtgC4AH0APAB6ALkAuQB6ALcAdwA8ALkAdwC5ALoAuQC3AD4AugC5AD4APgC3AH0AugA+ABkAuwB9ALgAPgB9ALsAGQA+ALsAuwC4AEEAGQC7ALwAvAC7AEEAvABBABQAGgAcAL0AGgAbABwAHwAaAL0AGwC+ABwAHwC9AL8AIgAfAL8AIgC/ACEAGwAdAL4AHQB+AL4AHQAeAH4AHgDAAH4AHgAgAMAAIADBAMAAIAAkAMEAJABCAMEAJAAlAEIAJQDCAEIAJQAmAMIAJgAjAMIAJgAnACMAJwDDACMAJwAoAMMAKAB/AMMAKAApAH8AKQDEAH8AKQArAMQAKwBDAMQAKwAsAEMALADFAEMALAAtAMUALQAuAMUALQAwAC4AxQAuAEQAxQBEAMYAQwDFAMYAxgBEAIIAQwDGAIAAxwBDAIAAxgCCAMgAgADGAMgAyACCAEgAxwCAAMkAgQDHAMkAgADIAMoAyQCAAMoAyABIAMsAygDIAMsAywBIAMwAgQDJAM0AzgCBAM0AyQDKAM8AzQDJAM8AygDLANAAzwDKANAAywDMANEA0ADLANEA0gDRAMwAzgDNAIMAKgDOAIMAzQDPAIQAgwDNAIQAzwDQAEcAhADPAEcARwDQANMA0ADRANMARwDTANQA0QDVANMA1gBHANQAhABHANYA1gDUAIsAgwCEANcA1wCEANYAKgCDANgA2ACDANcA2QAqANgAigDWAIsA1wDWAIoAigCLANoA2ADXANsA2wDXAIoA2QDYAEUARQDYANsARgDZAEUA3ACKANoA2wCKANwA3ADaAN0ARQDbAEoASgDbANwARgBFAN4A3gBFAEoA3wBGAN4A4ADcAN0ASgDcAOAA4ADdAOEA3gBKAOIA4gBKAOAA3wDeAOMA4wDeAOIA5ADfAOMA5QDgAOEA4gDgAOUA5QDhAIwA4wDiAI0AjQDiAOUA5ADjAIUAhQDjAI0AhgDkAIUA5gDlAIwAjQDlAOYA5gCMAOcAhQCNAOgA6ACNAOYAhgCFAOkA6QCFAOgA6gCGAOkAjgDmAOcA6ADmAI4AjgDnAOsA6QDoAOwA7ADoAI4A6gDpAEkASQDpAOwALwDqAEkA7QCOAOsA7ACOAO0A7QDrAO4ASQDsAEsASwDsAO0ALwBJAO8A7wBJAEsA8AAvAO8A8QDtAO4ASwDtAPEA8QDuAI8A7wBLAPIA8gBLAPEA8ADvAPMA8wDvAPIA9ADwAPMA9QDxAI8A8gDxAPUA9QCPAPYA8wDyAPcA9wDyAPUA9ADzAPgA+ADzAPcATgD0APgATgD4AE0A+QD1APYA9wD1APkA+QD2APoA+AD3APsATQD4APsA+wD3APkATQD7AJAA/AD5APoA+wD5APwAkAD7APwA/AD6AP0AkAD8AEwATAD8AP0ATAD9AP4A/wAAAQEBAAECAYgA/wACAQABAgHSAAMBAgHRANIA/wDRAAIB0QD/AAQB0QAEAdUA1QAEAYcABAH/AAUBBQH/AIkABAEFAQYB"), +"lods": [0.012256797, PackedByteArray("AAAWAE8AAABQABYAUQAAAE8AUAABABYAUQBPAAIAAQBSABYAMQBRAAIAAQBTAFIAMQACAFQAUwAEAFIAAwAxAFQAUwBVAAQAAwBUAAUAVQAGAAQAVgADAAUABgBXAAQAWABWAAUABgBZAFcAWAAFAFoAWQAIAFcABwBYAFoAWQAJAAgABwBaABcACQBbAAgAWwAXAAgAXAAHABcAWwBcABcACgAzAF0AXQAzAAwACgAyADMAMgBeADMAXwBeADIAXwAyADQAYABfADQAYAA0AA0ACwBfAGAAYQBeAF8ACwBhAF8AYQAzAF4AYgBhAAsAYgA2AGEANgAzAGEAYwA2AGIANgBkADMADAAzAGQAYwBlADYAZQBkADYADwBlAGMAZQBmAGQADwBnAGUAZwBmAGUAaABnAA8AZABmADUADABkADUAZwA1AGYADAA1AGkAaABqAGcAagA1AGcAEABqAGgAaQA1ABgAEAA4AGoAagBrADUAOABrAGoAbAA4ABAANQBrADcAGAA1ADcAOAA3AGsAGAA3AG0AbABuADgAbgA3ADgAOQBuAGwAbgBvADcAOQBwAG4AcABvAG4AEQBwADkANwBvADoAbQA3ADoAcAA6AG8AbQA6AA4ADgA6AHEAEQA7AHAAOwA6AHAAcgA7ABEAcQA6AHMAOwBzADoAcQBzABIAcgB0ADsAdABzADsAdQB0AHIAdAB2AHMAdQA9AHQAPQB2AHQAEwA9AHUAcwB2ADwAEgBzADwAPQA8AHYAEgA8AHcAEwB4AD0AeAA8AD0AeQB4ABMAeAB6ADwAeQA/AHgAPwB6AHgAewA/AHkAPAB6AD4AdwA8AD4APwA+AHoAdwA+ABkAewB8AD8AfAA+AD8AFQB8AHsAFQBAAHwAQAB9AHwAfAB9AD4AQABBAH0APgB9AEEAGQA+AEEAGQBBABQAGgAbABwAGwAdABwAHwAaABwAHwAcACEAIgAfACEAHQB+ABwAHQAeAH4AHgAgAH4AIABCAH4AIAAkAEIAJAAlAEIAJQAmAEIAJgAjAEIAJgAnACMAJwAoACMAKAB/ACMAKAApAH8AKQArAH8AKwBDAH8AKwAsAEMALAAtAEMALQAuAEMALQAwAC4AQwAuAEQAQwBEAIAAgQBDAIAAgABEAIIAgQCAAIMAKgCBAIMARgAqAIMAgwCAAIQAgACCAIQARgCDAEUARgBFAIUAhgBGAIUARQCDAEoAgwCEAEoALwCGAIUAhACCAEcAggBIAEcARwBIAIcAiACHAEgAiQCHAIgAhABHAIoASgCEAIoAigBHAIsAigCLAIwAjQBKAIoARQBKAI0AhQBFAI0AjgCKAIwAjQCKAI4AjgCMAI8ATACOAI8ASwCNAI4ASwCOAEwAhQCNAEsAkABLAEwATQBLAJAASQCFAEsATQBJAEsALwCFAEkALwBJAE0ATgAvAE0A"), 0.029816525, PackedByteArray("AAAWAAIAAAABABYAMQAAAAIAAQAEABYAAwAxAAIAAQAGAAQAAwACAAUABgAIAAQABwADAAUABgAJAAgABwAFABcACQAXAAgACQAHABcACgAyADMACgAzAAwANAAzADIADAAzADUADAA1ABgANgAzADQANgA1ADMACwA2ADQACwA0AA0ADwA2AAsADwA1ADYAGAA1ADcADwA3ADUAGAA3AA4AOAA3AA8AEAA4AA8AOQA4ABAAOAA6ADcADgA3ADoAOQA6ADgADgA6ABIAOwA6ADkAEQA7ADkAEwA7ABEAOwA8ADoAEgA6ADwAEwA9ADsAPQA8ADsAEgA8AD4APQA+ADwAEgA+ABkAEwA/AD0APwA+AD0AFQA/ABMAFQBAAD8AQABBAD8APwBBAD4AGQA+AEEAGQBBABQAGgAbABwAGwAdABwAHQAeABwAHwAaABwAHgAgABwAHwAcACEAIgAfACEAIABCABwAIAAkAEIAJAAlAEIAJQAmAEIAJgAjAEIAJgAnACMAJwAoACMAKABDACMAKAApAEMAKQArAEMAKwAsAEMALAAtAEMALQAuAEMALQAwAC4AQwAuAEQAQwBEAEUAKgBDAEUARgAqAEUARQBEAEcARABIAEcARgBFAEkARQBHAEoASQBFAEoALwBGAEkASwBKAEcASQBKAEsASwBHAEwATQBLAEwATQBJAEsALwBJAE0ATgAvAE0A"), 0.093039304, PackedByteArray("AAAWAAIAAAABABYAAwAAAAIAAQAEABYAAwACAAUAAQAGAAQABwADAAUABgAIAAQABwAFABcABgAJAAgACQAHABcACQAXAAgACgALAAwADQALAAoADAALABgADwAYAAsAEAAYAA8AEAAOABgAEQAOABAAEQASAA4AEwASABEAEwAZABIAFQAZABMAFQAUABkAGgAbABwAGwAdABwAHQAeABwAHwAaABwAHgAgABwAHwAcACEAIgAfACEAIAAjABwAIAAkACMAJAAlACMAJQAmACMAJgAnACMAJwAoACMAKAApACoAKQArACoAKwAsACoALAAtACoALQAuACoALwAqAC4ALQAwAC4A"), 0.149667, PackedByteArray("AAABAAIAAwAAAAIAAQAEAAIAAwACAAUAAQAGAAQABwADAAUABgAIAAQABwAFAAgABgAJAAgACQAHAAgACgALAAwADQALAAoADAALAA4ADwAOAAsAEAAOAA8AEQAOABAAEQASAA4AEwASABEAEwAUABIAFQAUABMA")], +"material": SubResource("StandardMaterial3D_vkyjj"), +"name": "RustedMetal", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 263, +"vertex_data": PackedByteArray("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") +}] +blend_shape_mode = 0 +shadow_mesh = SubResource("ArrayMesh_cm8yl") + +[sub_resource type="ArrayMesh" id="ArrayMesh_p7mtt"] +_surfaces = [{ +"aabb": AABB(-0.008764982, 0.084730506, 0.0045645237, 1.1378667, 2.0683517, 0.050001144), +"format": 34896613377, +"index_count": 36, +"index_data": PackedByteArray("AAABAAIAAAACAAMAAAAEAAEAAgAFAAMAAgABAAUAAAADAAYABAAAAAYABgADAAUAAQAEAAcABAAGAAcAAQAHAAUABgAFAAcA"), +"name": "DoorType1_2", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 8, +"vertex_data": PackedByteArray("AAAAAP7/AAD+//////8AAP//AAD+/wAA//8AAAAAAAAAAP////8AAP7///8AAAAAAAAAAAAAAAAAAP//AAAAAA==") +}] +blend_shape_mode = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_y6mlo"] +resource_name = "medievaldoors11_Cube_017" +_surfaces = [{ +"aabb": AABB(-0.008764982, 0.084730506, 0.0045645237, 1.1378667, 2.0683517, 0.050001144), +"attribute_data": PackedByteArray("AID8//7/AID///z/AIAAgACA/P/+/wCAAIAAgP///P/9/xeD/3//f/3//3//fxeDUfr///H/AoDx////UfoCgP9/F4P9//9//3//f/3/F4NR+gKA8f////H/AoBR+v//"), +"format": 34896613399, +"index_count": 36, +"index_data": PackedByteArray("AAABAAIAAAADAAEABAAFAAYABAAHAAUACAAJAAoACAALAAkADAANAA4ADAAPAA0AEAARABIAEAATABEAFAAVABYAFAAXABUA"), +"material": SubResource("StandardMaterial3D_ow5aw"), +"name": "DoorType1_2", +"primitive": 3, +"uv_scale": Vector4(1.1002946, 2.0001838, 0, 0), +"vertex_count": 24, +"vertex_data": PackedByteArray("AAAAAP7/AID+//////8AgP//AAD+/wCAAAD/////AIAAAAAAAAAAAP7///8AAAAAAAD//wAAAAD//wAAAAAAAP7///////+/AAD//wAA/7/+////AAD/vwAA//////+///8AAP7//7/+////AAD/v///AAAAAP+//v///////78AAAAA/v//P///AAAAAP8/AAAAAAAA/z///wAA/v//PwAA/////wAAAAAAAAAAAAAAAP//AAAAAAAAAAD+/wAA/3////9/////f////3///////3////9/////f////3////9/////f////3////9//38AAP9/AAD/fwAA/38AAAAA/38AAP9/AAD/fwAA/3//P/9//z//f/8//3//P/9/") +}] +blend_shape_mode = 0 +shadow_mesh = SubResource("ArrayMesh_p7mtt") + +[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_kufgt"] +points = PackedVector3Array(-0.008764982, 0.084730506, 0.0045645237, -0.008764982, 0.084730506, 0.054560777, -0.008764982, 2.1530824, 0.0045645237, 1.1291018, 0.084730506, 0.0045645237, 1.1291018, 0.084730506, 0.054560777, -0.008764982, 2.1530824, 0.054560777, 1.1289904, 2.1530824, 0.0045645237, 1.1289904, 2.1530824, 0.054560777) + +[sub_resource type="ArrayMesh" id="ArrayMesh_1fp46"] +_surfaces = [{ +"aabb": AABB(0.028411865, 0.91522706, 0.06941259, 0.122282505, 0.15972829, 0.053642333), +"format": 34896613377, +"index_count": 1098, +"index_data": PackedByteArray("AAAKADYACgAiADYAPQAAADYAAAA3AAoAPQA2AAIAPQAfAAAANgAiAGQANgBkAAIACgBlACIAAAAfADgAAAA4ADcANwBmAAoAZgBlAAoANwA4ADkANwABAGYANwA5AAEAOABnADkAHwBoADgAOABoAGcAHwBpAGgAAQA6AGYAZgAjAGUAOgAjAGYAIwA7AGUAaQA7AGgAOgBqACMAPgBpAB8APQA+AB8AaAA7AGsAIwBrADsAaABrAGcAagBrACMAIAA+AD0AIAA9AAIAZQA7AGwAaQBsADsAZQBsACIAPgBtAGkAbQBsAGkAIABAAD4AQABtAD4AIgBsAD8AbQA/AGwAIgA/AGQAQABuAG0AbgA/AG0AAwBAACAAbgBvAD8AZAA/AG8ALABuAEAAAwAsAEAAcABvAG4ALABwAG4AZABvACEAAgBkACEAIAACAEEAAwAgAEEAAgAhAEEAcABxAG8AIQBvAHEAIQBxAEIAQQAhAEIAAwBBAHIAQQBCAHIAQwADAHIAQwAsAAMARABwACwAQwBEACwAcwBxAHAARABzAHAAQgBxAEUAcwBFAHEAcgBCAHQAQgBFAHQAQwByAAYAcgB0AAYARgBEAEMARgBDAAYAKgBzAEQARgAqAEQAdQBFAHMAKgB1AHMAdABFAHYAdQB2AEUABgB0ACsAdAB2ACsARgAGAEcABgArAEcACAAqAEYACABGAEcASAB1ACoACABIACoAdwB2AHUASAB3AHUAKwB2AEkAdwBJAHYARwArAHgAKwBJAHgACABHAHkARwB4AHkASgBIAAgASgAIAHkAKAB3AEgASgAoAEgAegBJAHcAKAB6AHcAeABJAHsAegB7AEkAeQB4ACkAeAB7ACkASgB5AAsAeQApAAsASwAoAEoASwBKAAsATAB6ACgASwBMACgAfAB7AHoATAB8AHoAKQB7AE0AfABNAHsACwApAH0AKQBNAH0ASwALAH4ACwB9AH4ACQBMAEsACQBLAH4AJgB8AEwACQAmAEwAfwBNAHwAJgB/AHwAfQBNAIAAfwCAAE0AfgB9ACcAfQCAACcACQB+AAcAfgAnAAcATgAmAAkATgAJAAcATwB/ACYATgBPACYAgQCAAH8ATwCBAH8AJwCAAFAAgQBQAIAABwAnAIIAJwBQAIIATgAHAFIABwCCAFIABABPAE4ABABOAFIAUQCBAE8ABABRAE8AgwBQAIEAUQCDAIEAggBQAIQAgwCEAFAAUgCCACUAggCEACUABABSAIUAUgAlAIUAUwBRAAQAUwAEAIUAJACDAFEAUwAkAFEAhgCEAIMAJACGAIMAJQCEAIcAhgCHAIQAhQAlAFQAJQCHAFQAUwCFAAUAhQBUAAUAPAAkAFMAPABTAAUAVgCGACQAPABWACQAiACHAIYAVgCIAIYAAQBWADwAAQA5AFYAOQCIAFYAAQA8ADoAPAAFADoABQBqADoABQBUAGoAOQBnAIgAVABVAGoAVACHAFUAiABVAIcAZwBVAIgAagBVAGsAZwBrAFUADAAOAIkADAANAA4AEQAMAIkADQCKAA4ADQAPAIoAEQCJAIsAFAARAIsAiQAOAIwAFACLABMAFQAUABMAiwCJAI0AiQCMAI0AEwCLAI4AiwCNAI4AFQATAI8AFwAVAI8AEwCOADAAjwATADAAFwCPAC4AGQAXAC4AjwAwAJAALgCPAJAAGQAuAJEAGgAZAJEALgCQAFgAkQAuAFgAGgCRAFcAHAAaAFcAkQBYAJIAVwCRAJIAHABXAJMAHgAcAJMAVwCSAJQAkwBXAJQAHgCTABYAHQAeABYAkwCUAFkAFgCTAFkAHQAWAJUAGwAdAJUAFgBZAJYAlQAWAJYAGwCVAC0AGAAbAC0AlQCWAC8ALQCVAC8AGAAtAJcAEgAYAJcALQAvAJgAlwAtAJgAEgCXAJkAEAASAJkAlwCYAJoAmQCXAJoAEACZAFoADwAQAFoADwBaAIoAWgCZAFsAmQCaAFsAigBaAJsAWgBbAJsAigCbADEADgCKADEADgAxAIwAMQCbAJwAmwBbAJ0AmwCdAJwAWwBcAJ0AWwCaAFwAjAAxADQAMQCcADQAjAA0AJ4AjQCMAJ4AmgCfAFwAmgCYAJ8AjQCeAKAAjgCNAKAAngA0AKEAjgCgAKIAMACOAKIAoACeAKMAngChAKMAogCgAKQAoACjAKQAMACiAGAAkAAwAGAAogCkAKUAYACiAKUApQCkAKYAkABgAKcAWACQAKcAYAClADUApwBgADUApQCmAKgANQClAKgApACpAKYAqQCoAKYApACjAKkANQCoAKoAWACnAKsApwA1AKwArAA1AKoAqwCnAKwAkgBYAKsAqACtAKoArACqAK0AqQCtAKgAqwCsAK4ArgCsAK0AkgCrAK8ArwCrAK4AlACSAK8AowBiAKkAowChAGIAsACpAGIAoQCwAGIAsQCpALAAsQCtAKkAoQCyALAANACyAKEANACcALIAsgCzALAAsQCwALMAnABfALIAsgBfALMAXwCxALMAnACdAF8AnQC0AF8AXwC0ALEAnQBcALQAtABhALEAXAC1ALQAtAC1AGEAXACfALUAtgCxAGEAtQC2AGEAtwCxALYArQCxALcAtQC4ALYAnwC4ALUAuAC5ALYAtwC2ALkAnwAyALgAmAAyAJ8AmAAvADIAuAC6ALkAMgC6ALgAugC3ALkALwC7ADIAMgC7ALoALwCWALsAugBeALcAuwBeALoAlgC8ALsAuwC8AF4AlgBZALwAXgBjALcAWQBdALwAWQCUAF0AlACvAF0AvAC9AF4AXgC9AGMAvABdAL0AvgC3AGMAvQC+AGMArQC3AL4AXQAzAL0AXQCvADMAvQAzAL4ArwCuADMArQC+AL8ArgCtAL8AMwC/AL4AMwCuAL8A"), +"lods": [0.012256797, PackedByteArray("AAAKADYAAAA3AAoAAAA4ADcANwABAAoANwA4ADkANwA5AAEAOAAjADkAAQA6AAoAOgAjAAoAOAA7ACMAAQA8ADoAAAAfADgAHwA7ADgAPQAfAAAAPQAAADYAHwAiADsAIwA7ACIACgAiADYACgAjACIAPQA2AAIAPQA+AB8APgAiAB8AIAA9AAIAIAA+AD0ANgAhAAIANgAiACEAPgA/ACIAIgA/ACEAQAA/AD4AIABAAD4AQAAhAD8AIAACAEEAAgAhAEEAAwBAACAAAwAgAEEALAAhAEAAAwAsAEAALABCACEAQQAhAEIAAwBBAAYAQQBCAAYAQwAsAAMAQwADAAYARABCACwAQwBEACwARABFAEIARgBDAAYARgBEAEMABgBCACsAQgBFACsARgAGAEcABgArAEcAKgBFAEQARgAqAEQAKgArAEUACABGAEcACAAqAEYACABHAAsASAArACoACABIACoASABJACsARwArACkAKwBJACkARwApAAsAKABJAEgAKAApAEkASgBIAAgASgAoAEgASgAIAAsASwAoAEoASwBKAAsATAApACgASwBMACgATABNACkASwALAAcACwApACcAKQBNACcACwAnAAcAJgBNAEwAJgAnAE0ACQBMAEsACQAmAEwACQBLAAcATgAmAAkATgAJAAcATwAnACYATgBPACYATwBQACcABwAnACUAJwBQACUAUQBQAE8AUQAlAFAABABPAE4ABABRAE8ATgAHAFIABABOAFIABwAlAFIABABSAAUAUgAlAAUAUwBRAAQAUwAEAAUAJAAlAFEAUwAkAFEAJABUACUABQAlAFQAPAAkAFMAPABTAAUAPAAFADoABQAjADoABQBUACMAVABVACMAOQAjAFUAVgBUACQAPABWACQAVgBVAFQAOQBVAFYAAQBWADwAAQA5AFYADAANAA4ADQAPAA4AEQAMAA4AEQAOABMAFAARABMAFQAUABMAFQATAC4AFwAVAC4AGQAXAC4ALgATADAAEwAOADAAGQAuAFcAGgAZAFcAHAAaAFcAVwAuAFgALgAwAFgAHABXABYAHgAcABYAHQAeABYAFgBXAFkAVwBYAFkAHQAWAC0ALQAWAFkAGwAdAC0AGAAbAC0AEgAYAC0AEgAtAFoAEAASAFoADwAQAFoADwBaAA4AWgAtAFsADgBaAFsALQBZAC8ALQAvAFsADgBbADEADgAxADAAMQBbADQAMAAxADQAWwAvAFwAWwBcADQALwBZADIALwAyAFwAWQBdADIAWQBYAF0AXAAyAF4AMgBdAF4ANABcAF8AXABeAF8AWAAwAGAAMAA0AGAAWABgAF0AXwBeAGEAYAA0ADUANABfADUAXQBgADMAXQAzAF4AYAA1ADMAXwBhAGIANQBfAGIAXgBjAGEAXgAzAGMAYQBjAGIAMwA1AGMAYgBjADUA"), 0.029816525, PackedByteArray("AAAKAAIAAAABAAoAAAAfAAEAIAAfAAAAIAAAAAIAIAAhAB8AHwAiAAEAHwAhACIACgAiAAIAAgAiACEACgAjACIAAQAiACMABQAjAAoAAQAFAAoAAQAjACQABQAlACMAJAAjACUAAQAEAAUAAQAkAAQABAAHAAUABwAlAAUABAAkACYAJAAlACYABAAJAAcABAAmAAkABwAnACUAJgAlACcACwAnAAcACQALAAcAJgAnACgACQAmACgACwApACcAKAAnACkACQAIAAsACQAoAAgABgApAAsACAAGAAsAKAApACoACAAoACoAKgApACsABgArACkACAAqACwAKgArACwABgAhACsALAArACEAAgAhAAYALAAhACAAAwACAAYACAADAAYAAwAgAAIACAAsAAMAAwAsACAADAANAA4ADQAPAA4ADwAQAA4AEQAMAA4AEAASAA4AEQAOABMAFAARABMAFQAUABMAEgAtAA4AEgAYAC0AGAAbAC0AGwAdAC0AFQATAC4AFwAVAC4AGQAXAC4AGgAZAC4AHAAaAC4AHQAWAC0AHAAuABYAHQAeABYAHgAcABYAFgAuAC8ALQAWAC8ALgATADAALgAwAC8AEwAOADAADgAtADEALQAvADEADgAxADAAMQAvADIALwAwADMALwAzADIAMQAyADQAMAAxADQANAAyADMAMAA1ADMANAAzADUAMAA0ADUA"), 0.093039304, PackedByteArray("AAAKAAIAAAACAAoAAwAAAAIAAwACAAAAAwAGAAIAAwACAAYACAADAAYACAAGAAMACAALAAYACAAGAAsACQAIAAsACQALAAgACQAHAAsACQALAAcABAAJAAcACQAEAAcAAAAKAAEAAAABAAoAAQAKAAQAAQAFAAoABQAEAAoAAQAEAAUABAAHAAUABwAEAAUADAANAA4ADQAPAA4ADwAQAA4AEQAMAA4AEAASAA4AEQAOABMAFAARABMAFQAUABMADgAWABMAFQATABYAEgAWAA4AFwAVABYAEgAYABYAGQAXABYAGgAZABYAGAAbABYAHAAaABYAGwAdABYAHgAcABYAHQAeABYA"), 0.149667, PackedByteArray("AAABAAIAAAACAAEAAwAAAAIAAwACAAAAAQACAAQAAQAFAAIAAQAEAAUABQAEAAIAAwACAAYAAwAGAAIABAAHAAUABwAEAAUACAADAAYACAAGAAMACAAHAAYACAAGAAcACQAEAAcABAAJAAcACQAIAAcACQAHAAgA")], +"name": "RustedMetal", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 192, +"vertex_data": PackedByteArray("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") +}] +blend_shape_mode = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_j0nlc"] +resource_name = "medievaldoors11_Cube_013" +_surfaces = [{ +"aabb": AABB(0.028411865, 0.91522706, 0.06941259, 0.122282505, 0.15972829, 0.053642333), +"attribute_data": PackedByteArray("AaUQdOa4/ItFkrhyBXGra/CpS54VbI53AaUuqiBd3onBgyKj4oFfqezqV7ZS8G3icNcz3vb/XLzwnzbrNM+//RCv9v/HetTy3Xz53Otg2te5beat811irPCpi4EVbE+UMLuC7I1uZMWSAV5baAHLZCsJ7GRAATluEQEZecIBgVDcAL6FuwkGRPkB5EPqB/64pQCCk28ASaE9APmtGgDsuAgAccIIAPrLQRvZwiEA+tZkAMPj3ACs8UgKLv/VXKTeGgL2/+KBiGly8D242OPi1jH6bLokyPfuhuLq6+St2vFcr9H6kYoK+bSQcOwOfVbudXJ42fFp0N88ak/GcWJryk9inKyQabytOQhnoTkIjOORFNf5gygTzw4xkMWRJrzowCXC9V9OYN2BLCja70O04s8+b/AeTATzDFTs9q2fv3jpsSB/JJR7bH6v3ZXluK+YwYNgcOmxSaMcZJByRJJ5pSBdK30jlFGsh2b9fwVxyqEcZLqWceVGxtrtccp8837O8/jG0Fnrad+X5srvyNu8+LfbEeIW2Rn0v9Qx7d3NtvhPwPb/Ys825e2/7fodvaf0i5ya/Rmu2OyCnXv4i57v8iaMMvQ+ktHnjW5D6/GDVuencXvnFmZ04iR3KOM+dmzWNmVd1gZeC8uiapbSIF0yvHhhLrx9ZuS61gg5edsH8MtcE7jm1gw0zXEcdfVEG97R3iCR4D9C29XdUVTSPS2p6uUwXfbpMuvtTylw5CosQOorMsDndDcQ2/w4cuSMOSzqZUUV8X6vxItZdhNyrZ/Go4dmFYpYdhqdEJ8d8EGPDu/bu5HxRcb26U+u1vSL0s7p/8ku8tne6tMI3kLl6+qFyGXmmdmn8wW5SPBmzHz2jbmM6HzcGuCV6OnWl/AFzEb1o76B9+6ufPcYnlb1vY1H8Wd/u+vBgbHpY3Qr5UuGy+LDefLg2Gyz3ahvmtsUaIvUTmUYyUVkmbsUZQOtqWeYxypnaK1NbcXQhHHRzglpVbpYbSe6VAl/WwMJWm6DCaNQowjdhW4IoJMKCBSu2gd3wvYH3Na1CDPxPBNi8IkJMdcpHB3wkhTY3dYcVOqLJdDwPCsU8xMXwNbIEjbGaR7y5NMlXezjKqfwOSwg9RIrNe5+K//r6isZ7LUnHebbI07dJCFZz5Ql9MIiLQrpuCc020srUONoLjvoAjFv0PI8Ucn4LbjiHDDS5+gxJNrlObbSSEiizW8xu+JTNV3jWjT25408D91NSWDZ8Vjc12g2i+jUQKzf4TvM5TQ4TekeURPiD11j5tI9SOe+RfPld1Fo5+RZne76PuToYDou649Gb+mbTy/thj/K6sk6YexcRkftgz827bw63e0xOobvUjNa8Doy7vQVM9PySS/n9qUtePbYLh7q6jHh63wwi+o="), +"format": 34896613399, +"index_count": 1098, +"index_data": PackedByteArray("AAAWAE8AAABQABYAUQAAAE8AUACRABYAUQBPAAIAUAABAJEAMQBRAAIAAQBSAJEAMQACAFQAAQBTAFIAAwAxAFQAUwAEAFIAAwBUAJIAUwBVAAQAVgADAJIAVQCTAAQAVgCSAAUAVQAGAJMAWABWAAUABgBXAJMAWAAFAFoABgBZAFcABwBYAFoAWQAIAFcABwBaAJQAWQAJAAgAXAAHAJQACQCVAAgAXACUABcACQBbAJUAWwBcABcAWwAXAJUAlgCXADoADgCWADoAbQCWAA4ADgA6AHEAbQA3AJYAGAA3AG0ANwBvAJYAlgBvAJcAGACYADcAmQCYABgANwCaAG8AmACaADcAmQA1AJgAaQA1AJkAmABrAJoANQBrAJgAaQCbADUADACbAGkANQCcAGsAmwCcADUADABkAJsAnQBkAAwAmwBmAJwAZABmAJsAnQAzAGQAXQAzAJ0AZACeAGYAMwCeAGQAXQCfADMACgCfAF0ACgAyAJ8AnwCgADMAMwCgAJ4AMgBeAJ8AnwBeAKAAMgChAF4AogBeAKEAogChAKMApACgAF4ApABeAKIApQCeAKAApQCgAKQApgCeAKUApgBmAJ4AXwCiAKMAXwCjADQAYABfADQAYAA0AA0ACwBfAGAAYQCiAF8ACwBhAF8AYQCkAKIAYgBhAAsANgCkAGEAYgA2AGEANgClAKQAYwA2AGIAZQClADYAYwBlADYAZQCmAKUADwBlAGMADwBnAGUAZwCmAGUAaABnAA8AZwCnAKYApwBmAKYApwCcAGYAaABqAGcAagCnAGcAEABqAGgAqACcAKcAagCoAKcAqABrAJwAEAA4AGoAOACoAGoAbAA4ABAAqQBrAKgAOACpAKgAqQCaAGsAbABuADgAbgCpADgAOQBuAGwAqgCaAKkAbgCqAKkAqgBvAJoAOQBwAG4AcACqAG4AEQBwADkAqwBvAKoAcACrAKoAqwCXAG8AEQA7AHAAOwCrAHAAcgA7ABEArACXAKsAOwCsAKsAcgB0ADsAdACsADsAdQB0AHIArACtAJcAOgCXAK0AdACuAKwArgCtAKwAdQA9AHQAPQCuAHQAEwA9AHUAOgCtAHMAcQA6AHMAcQBzAK8AcwCtAHYArgB2AK0ArwBzALAAcwB2ALAArwCwABIAsQB2AK4APQCxAK4AsAB2ALIAsQCyAHYAEgCwADwAsACyADwAEgA8AHcAEwB4AD0AeACxAD0AeQB4ABMAswCyALEAeACzALEAeQA/AHgAPwCzAHgAewA/AHkAswB6ALIAPACyAHoAPwC0ALMAtAB6ALMAewB8AD8AfAC0AD8AFQB8AHsAFQBAAHwAQAC1AHwAfAC1ALQAQAC2ALUAtAC3AHoAtQC3ALQAtgB9ALUAtQB9ALcAtgC4AH0APAB6ALkAuQB6ALcAdwA8ALkAdwC5ALoAuQC3AD4AugC5AD4APgC3AH0AugA+ABkAuwB9ALgAPgB9ALsAGQA+ALsAuwC4AEEAGQC7ALwAvAC7AEEAvABBABQAGgAcAL0AGgAbABwAHwAaAL0AGwC+ABwAHwC9AL8AIgAfAL8AIgC/ACEAGwAdAL4AHQB+AL4AHQAeAH4AHgDAAH4AHgAgAMAAIADBAMAAIAAkAMEAJABCAMEAJAAlAEIAJQDCAEIAJQAmAMIAJgAjAMIAJgAnACMAJwDDACMAJwAoAMMAKAB/AMMAKAApAH8AKQDEAH8AKQArAMQAKwBDAMQAKwAsAEMALADFAEMALAAtAMUALQAuAMUALQAwAC4AxQAuAEQAxQBEAMYAQwDFAMYAxgBEAIIAQwDGAIAAxwBDAIAAxgCCAMgAgADGAMgAyACCAEgAxwCAAMkAgQDHAMkAgADIAMoAyQCAAMoAyABIAMsAygDIAMsAywBIAMwAgQDJAM0AzgCBAM0AyQDKAM8AzQDJAM8AygDLANAAzwDKANAAywDMANEA0ADLANEA0gDRAMwAzgDNAIMAKgDOAIMAzQDPAIQAgwDNAIQAzwDQAEcAhADPAEcARwDQANMA0ADRANMARwDTANQA0QDVANMA1gBHANQAhABHANYA1gDUAIsAgwCEANcA1wCEANYAKgCDANgA2ACDANcA2QAqANgAigDWAIsA1wDWAIoAigCLANoA2ADXANsA2wDXAIoA2QDYAEUARQDYANsARgDZAEUA3ACKANoA2wCKANwA3ADaAN0ARQDbAEoASgDbANwARgBFAN4A3gBFAEoA3wBGAN4A4ADcAN0ASgDcAOAA4ADdAOEA3gBKAOIA4gBKAOAA3wDeAOMA4wDeAOIA5ADfAOMA5QDgAOEA4gDgAOUA5QDhAIwA4wDiAI0AjQDiAOUA5ADjAIUAhQDjAI0AhgDkAIUA5gDlAIwAjQDlAOYA5gCMAOcAhQCNAOgA6ACNAOYAhgCFAOkA6QCFAOgA6gCGAOkAjgDmAOcA6ADmAI4AjgDnAOsA6QDoAOwA7ADoAI4A6gDpAEkASQDpAOwALwDqAEkA7QCOAOsA7ACOAO0A7QDrAO4ASQDsAEsASwDsAO0ALwBJAO8A7wBJAEsA8AAvAO8A8QDtAO4ASwDtAPEA8QDuAI8A7wBLAPIA8gBLAPEA8ADvAPMA8wDvAPIA9ADwAPMA9QDxAI8A8gDxAPUA9QCPAPYA8wDyAPcA9wDyAPUA9ADzAPgA+ADzAPcATgD0APgATgD4AE0A+QD1APYA9wD1APkA+QD2APoA+AD3APsATQD4APsA+wD3APkATQD7AJAA/AD5APoA+wD5APwAkAD7APwA/AD6AP0AkAD8AEwATAD8AP0ATAD9AP4A/wAAAQEBAAECAYgA/wACAQABAgHSAAMBAgHRANIA/wDRAAIB0QD/AAQB0QAEAdUA1QAEAYcABAH/AAUBBQH/AIkABAEFAQYB"), +"lods": [0.012256797, PackedByteArray("AAAWAE8AAABQABYAUQAAAE8AUAABABYAUQBPAAIAAQBSABYAMQBRAAIAAQBTAFIAMQACAFQAUwAEAFIAAwAxAFQAUwBVAAQAAwBUAAUAVQAGAAQAVgADAAUABgBXAAQAWABWAAUABgBZAFcAWAAFAFoAWQAIAFcABwBYAFoAWQAJAAgABwBaABcACQBbAAgAWwAXAAgAXAAHABcAWwBcABcACgAzAF0AXQAzAAwACgAyADMAMgBeADMAXwBeADIAXwAyADQAYABfADQAYAA0AA0ACwBfAGAAYQBeAF8ACwBhAF8AYQAzAF4AYgBhAAsAYgA2AGEANgAzAGEAYwA2AGIANgBkADMADAAzAGQAYwBlADYAZQBkADYADwBlAGMAZQBmAGQADwBnAGUAZwBmAGUAaABnAA8AZABmADUADABkADUAZwA1AGYADAA1AGkAaABqAGcAagA1AGcAEABqAGgAaQA1ABgAEAA4AGoAagBrADUAOABrAGoAbAA4ABAANQBrADcAGAA1ADcAOAA3AGsAGAA3AG0AbABuADgAbgA3ADgAOQBuAGwAbgBvADcAOQBwAG4AcABvAG4AEQBwADkANwBvADoAbQA3ADoAcAA6AG8AbQA6AA4ADgA6AHEAEQA7AHAAOwA6AHAAcgA7ABEAcQA6AHMAOwBzADoAcQBzABIAcgB0ADsAdABzADsAdQB0AHIAdAB2AHMAdQA9AHQAPQB2AHQAEwA9AHUAcwB2ADwAEgBzADwAPQA8AHYAEgA8AHcAEwB4AD0AeAA8AD0AeQB4ABMAeAB6ADwAeQA/AHgAPwB6AHgAewA/AHkAPAB6AD4AdwA8AD4APwA+AHoAdwA+ABkAewB8AD8AfAA+AD8AFQB8AHsAFQBAAHwAQAB9AHwAfAB9AD4AQABBAH0APgB9AEEAGQA+AEEAGQBBABQAGgAbABwAGwAdABwAHwAaABwAHwAcACEAIgAfACEAHQB+ABwAHQAeAH4AHgAgAH4AIABCAH4AIAAkAEIAJAAlAEIAJQAmAEIAJgAjAEIAJgAnACMAJwAoACMAKAB/ACMAKAApAH8AKQArAH8AKwBDAH8AKwAsAEMALAAtAEMALQAuAEMALQAwAC4AQwAuAEQAQwBEAIAAgQBDAIAAgABEAIIAgQCAAIMAKgCBAIMARgAqAIMAgwCAAIQAgACCAIQARgCDAEUARgBFAIUAhgBGAIUARQCDAEoAgwCEAEoALwCGAIUAhACCAEcAggBIAEcARwBIAIcAiACHAEgAiQCHAIgAhABHAIoASgCEAIoAigBHAIsAigCLAIwAjQBKAIoARQBKAI0AhQBFAI0AjgCKAIwAjQCKAI4AjgCMAI8ATACOAI8ASwCNAI4ASwCOAEwAhQCNAEsAkABLAEwATQBLAJAASQCFAEsATQBJAEsALwCFAEkALwBJAE0ATgAvAE0A"), 0.029816525, PackedByteArray("AAAWAAIAAAABABYAMQAAAAIAAQAEABYAAwAxAAIAAQAGAAQAAwACAAUABgAIAAQABwADAAUABgAJAAgABwAFABcACQAXAAgACQAHABcACgAyADMACgAzAAwANAAzADIADAAzADUADAA1ABgANgAzADQANgA1ADMACwA2ADQACwA0AA0ADwA2AAsADwA1ADYAGAA1ADcADwA3ADUAGAA3AA4AOAA3AA8AEAA4AA8AOQA4ABAAOAA6ADcADgA3ADoAOQA6ADgADgA6ABIAOwA6ADkAEQA7ADkAEwA7ABEAOwA8ADoAEgA6ADwAEwA9ADsAPQA8ADsAEgA8AD4APQA+ADwAEgA+ABkAEwA/AD0APwA+AD0AFQA/ABMAFQBAAD8AQABBAD8APwBBAD4AGQA+AEEAGQBBABQAGgAbABwAGwAdABwAHQAeABwAHwAaABwAHgAgABwAHwAcACEAIgAfACEAIABCABwAIAAkAEIAJAAlAEIAJQAmAEIAJgAjAEIAJgAnACMAJwAoACMAKABDACMAKAApAEMAKQArAEMAKwAsAEMALAAtAEMALQAuAEMALQAwAC4AQwAuAEQAQwBEAEUAKgBDAEUARgAqAEUARQBEAEcARABIAEcARgBFAEkARQBHAEoASQBFAEoALwBGAEkASwBKAEcASQBKAEsASwBHAEwATQBLAEwATQBJAEsALwBJAE0ATgAvAE0A"), 0.093039304, PackedByteArray("AAAWAAIAAAABABYAAwAAAAIAAQAEABYAAwACAAUAAQAGAAQABwADAAUABgAIAAQABwAFABcABgAJAAgACQAHABcACQAXAAgACgALAAwADQALAAoADAALABgADwAYAAsAEAAYAA8AEAAOABgAEQAOABAAEQASAA4AEwASABEAEwAZABIAFQAZABMAFQAUABkAGgAbABwAGwAdABwAHQAeABwAHwAaABwAHgAgABwAHwAcACEAIgAfACEAIAAjABwAIAAkACMAJAAlACMAJQAmACMAJgAnACMAJwAoACMAKAApACoAKQArACoAKwAsACoALAAtACoALQAuACoALwAqAC4ALQAwAC4A"), 0.149667, PackedByteArray("AAABAAIAAwAAAAIAAQAEAAIAAwACAAUAAQAGAAQABwADAAUABgAIAAQABwAFAAgABgAJAAgACQAHAAgACgALAAwADQALAAoADAALAA4ADwAOAAsAEAAOAA8AEQAOABAAEQASAA4AEwASABEAEwAUABIAFQAUABMA")], +"material": SubResource("StandardMaterial3D_vkyjj"), +"name": "RustedMetal", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 263, +"vertex_data": PackedByteArray("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") +}] +blend_shape_mode = 0 +shadow_mesh = SubResource("ArrayMesh_1fp46") + +[node name="MedievalDoor" type="Node3D" unique_id=1143822269] + +[node name="Doorframe" type="StaticBody3D" parent="." unique_id=320444502] + +[node name="DoorframeMesh" type="MeshInstance3D" parent="Doorframe" unique_id=221649147] +mesh = SubResource("ArrayMesh_22684") + +[node name="DoorframeCollider" type="CollisionShape3D" parent="Doorframe" unique_id=1492557825] +shape = SubResource("ConcavePolygonShape3D_kufgt") + +[node name="DoorStepMesh" type="MeshInstance3D" parent="Doorframe" unique_id=720005179] +mesh = SubResource("ArrayMesh_ci6nf") + +[node name="DoorStepCollider" type="CollisionShape3D" parent="Doorframe" unique_id=1147755680] +shape = SubResource("ConcavePolygonShape3D_3u0t0") + +[node name="DoorLeft" type="Node3D" parent="." unique_id=173219782 node_paths=PackedStringArray("body", "hinge")] +script = ExtResource("5_3u0t0") +body = NodePath("DoorBody") +maxGrabDistance = 3.0 +hinge = NodePath("../HingeLeft") +hingeAngularUpperLimit = 0.001 +snapAngleThreshold = 10.0 +snapVelocityThreshold = 1.0 +mouseHorizontalFactor = 0.5 +mouseVerticalFactor = 0.5 +metadata/_custom_type_script = "uid://cyw8ng7alo12e" + +[node name="DoorBody" type="RigidBody3D" parent="DoorLeft" unique_id=1047666100] +collision_layer = 4 +collision_mask = 9 +axis_lock_angular_x = true +axis_lock_angular_z = true +mass = 10.0 +angular_damp = 5.0 + +[node name="DoorLeftMesh" type="MeshInstance3D" parent="DoorLeft/DoorBody" unique_id=1467497491] +mesh = SubResource("ArrayMesh_qpqq3") + +[node name="DoorLeftCollider" type="CollisionShape3D" parent="DoorLeft/DoorBody" unique_id=1292801504] +shape = SubResource("ConvexPolygonShape3D_3u0t0") + +[node name="DoorHandle" type="MeshInstance3D" parent="DoorLeft/DoorBody" unique_id=530285053] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.015) +mesh = SubResource("ArrayMesh_ju5ts") + +[node name="DoorRight" type="Node3D" parent="." unique_id=1328179091 node_paths=PackedStringArray("body", "hinge")] +script = ExtResource("5_3u0t0") +body = NodePath("DoorBody") +maxGrabDistance = 3.0 +hinge = NodePath("../HingeRight") +hingeAngularLowerLimit = 0.001 +snapAngleThreshold = 0.001 +snapVelocityThreshold = 444.0 +mouseHorizontalFactor = 0.5 +mouseVerticalFactor = 0.5 +metadata/_custom_type_script = "uid://cyw8ng7alo12e" + +[node name="DoorBody" type="RigidBody3D" parent="DoorRight" unique_id=1795020957] +collision_layer = 4 +collision_mask = 9 +axis_lock_angular_x = true +axis_lock_angular_z = true +mass = 10.0 +angular_damp = 5.0 + +[node name="DoorRightMesh" type="MeshInstance3D" parent="DoorRight/DoorBody" unique_id=790254688] +mesh = SubResource("ArrayMesh_y6mlo") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="DoorRight/DoorBody" unique_id=126846253] +shape = SubResource("ConvexPolygonShape3D_kufgt") + +[node name="DoorHandle" type="MeshInstance3D" parent="DoorRight/DoorBody" unique_id=572399259] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.015) +mesh = SubResource("ArrayMesh_j0nlc") + +[node name="HingeLeft" type="HingeJoint3D" parent="." unique_id=1531839944] +transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, -1.2, 1, 0) +node_a = NodePath("../Doorframe") +node_b = NodePath("../DoorLeft/DoorBody") +angular_limit/enable = true + +[node name="HingeRight" type="HingeJoint3D" parent="." unique_id=1980419171] +transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 1.2, 1, 0) +node_a = NodePath("../Doorframe") +node_b = NodePath("../DoorRight/DoorBody") +angular_limit/enable = true diff --git a/Scenes/Player.tscn b/Scenes/Player.tscn new file mode 100644 index 0000000..702c49f --- /dev/null +++ b/Scenes/Player.tscn @@ -0,0 +1,43 @@ +[gd_scene format=3 uid="uid://cpog4xqme7wqj"] + +[ext_resource type="Script" uid="uid://c1r1jpfh3vsn2" path="res://Scripts/PlayerController.gd" id="1_xhfnw"] +[ext_resource type="PackedScene" uid="uid://8xgne2anpltj" path="res://Scenes/Crosshair.tscn" id="2_kpjcp"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_rpqav"] + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_qbkls"] + +[node name="Player" type="CharacterBody3D" unique_id=1270645855 node_paths=PackedStringArray("head", "camera", "raycast", "hand", "crosshair")] +collision_layer = 17 +collision_mask = 13 +script = ExtResource("1_xhfnw") +speed = 3.0 +head = NodePath("Head") +camera = NodePath("Head/Camera3D") +raycast = NodePath("Head/Camera3D/RayCast3D") +hand = NodePath("Head/Camera3D/Hand") +crosshair = NodePath("Crosshair") +mouseFactorLerpSpeed = 5.0 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=1346737595] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) +shape = SubResource("CapsuleShape3D_rpqav") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=58443605] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) +mesh = SubResource("CapsuleMesh_qbkls") + +[node name="Head" type="Node3D" parent="." unique_id=1111037465] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.7, 0) + +[node name="Camera3D" type="Camera3D" parent="Head" unique_id=2013197953] + +[node name="RayCast3D" type="RayCast3D" parent="Head/Camera3D" unique_id=176888250] +transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0) +target_position = Vector3(0, -2, 0) +collision_mask = 13 + +[node name="Hand" type="Marker3D" parent="Head/Camera3D" unique_id=1759533778] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -2) + +[node name="Crosshair" parent="." unique_id=577244800 instance=ExtResource("2_kpjcp")] diff --git a/Scenes/SimpleButton.tscn b/Scenes/SimpleButton.tscn new file mode 100644 index 0000000..1f2cbc7 --- /dev/null +++ b/Scenes/SimpleButton.tscn @@ -0,0 +1,42 @@ +[gd_scene format=3 uid="uid://cfheqck1xs2bs"] + +[ext_resource type="Script" uid="uid://diphc7baic3px" path="res://Scripts/Button.gd" id="1_2ptq0"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_1blfk"] +size = Vector3(0.6, 0.6, 0.2640503) + +[sub_resource type="BoxMesh" id="BoxMesh_1blfk"] +size = Vector3(0.6, 0.6, 0.2) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_va8t4"] +albedo_color = Color(0, 0, 0, 1) + +[sub_resource type="CylinderMesh" id="CylinderMesh_1blfk"] +top_radius = 0.15 +bottom_radius = 0.15 +height = 0.1 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_476pq"] +albedo_color = Color(1, 0, 0, 1) + +[node name="SimpleButton" type="Node3D" unique_id=1810741910 node_paths=PackedStringArray("buttonMesh")] +script = ExtResource("1_2ptq0") +buttonMesh = NodePath("Mesh") +metadata/_custom_type_script = "uid://diphc7baic3px" + +[node name="StaticBody3D" type="StaticBody3D" parent="." unique_id=1106731310] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.12462454) + +[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" unique_id=756448224] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.032025155) +shape = SubResource("BoxShape3D_1blfk") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="StaticBody3D" unique_id=1694245576] +transform = Transform3D(1, 0, 0, 0, 0.99999994, 0, 0, 0, 0.99999994, 0, 0, 7.450581e-09) +mesh = SubResource("BoxMesh_1blfk") +surface_material_override/0 = SubResource("StandardMaterial3D_va8t4") + +[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1579829234] +transform = Transform3D(1, 0, 0, 0, -4.3711385e-08, -0.99999994, 0, 0.99999994, -4.3711385e-08, 0, 0, 0) +mesh = SubResource("CylinderMesh_1blfk") +surface_material_override/0 = SubResource("StandardMaterial3D_476pq") diff --git a/Scenes/SimpleKey.tscn b/Scenes/SimpleKey.tscn new file mode 100644 index 0000000..e02e097 --- /dev/null +++ b/Scenes/SimpleKey.tscn @@ -0,0 +1,32 @@ +[gd_scene format=3 uid="uid://dknge5384ijcx"] + +[ext_resource type="Script" uid="uid://b143brnl7gf4f" path="res://Scripts/Pickupable.gd" id="1_rsor3"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_1blfk"] +size = Vector3(0.1, 0.1, 0.2) + +[sub_resource type="BoxMesh" id="BoxMesh_va8t4"] +size = Vector3(0.1, 0.1, 0.3) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_w4i4f"] +albedo_color = Color(1, 1, 0, 1) + +[node name="SimpleKey" type="Node3D" unique_id=650555678 node_paths=PackedStringArray("body", "snapAnchor")] +script = ExtResource("1_rsor3") +body = NodePath("RigidBody3D") +snapAnchor = NodePath("SnapAnchor") +metadata/_custom_type_script = "uid://b143brnl7gf4f" + +[node name="RigidBody3D" type="RigidBody3D" parent="." unique_id=1946674219] +collision_layer = 9 +collision_mask = 13 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="RigidBody3D" unique_id=1252834786] +shape = SubResource("BoxShape3D_1blfk") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="RigidBody3D" unique_id=2082673006] +mesh = SubResource("BoxMesh_va8t4") +surface_material_override/0 = SubResource("StandardMaterial3D_w4i4f") + +[node name="SnapAnchor" type="Marker3D" parent="." unique_id=389082687] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.15) diff --git a/Scenes/SimpleLever.tscn b/Scenes/SimpleLever.tscn new file mode 100644 index 0000000..b604abd --- /dev/null +++ b/Scenes/SimpleLever.tscn @@ -0,0 +1,49 @@ +[gd_scene format=3 uid="uid://b0fqh430x23kp"] + +[ext_resource type="Script" uid="uid://2vyt44um2tty" path="res://Scripts/Lever.gd" id="1_f25qh"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_476pq"] +size = Vector3(0.1, 0.1, 0.4) + +[sub_resource type="BoxMesh" id="BoxMesh_va8t4"] +size = Vector3(0.1, 0.1, 0.4) + +[sub_resource type="BoxMesh" id="BoxMesh_1blfk"] +size = Vector3(0.4, 0.6, 0.2) + +[sub_resource type="BoxShape3D" id="BoxShape3D_1blfk"] +size = Vector3(0.4, 0.6, 0.2) + +[node name="SimpleLever" type="Node3D" unique_id=2031608942 node_paths=PackedStringArray("body", "hinge")] +script = ExtResource("1_f25qh") +body = NodePath("Lever") +hinge = NodePath("HingeJoint3D") +metadata/_custom_type_script = "uid://2vyt44um2tty" + +[node name="Lever" type="RigidBody3D" parent="." unique_id=1993131115] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.35175258) +collision_mask = 0 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Lever" unique_id=2040680943] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.15) +shape = SubResource("BoxShape3D_476pq") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Lever" unique_id=252238333] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.15) +mesh = SubResource("BoxMesh_va8t4") + +[node name="Base" type="StaticBody3D" parent="." unique_id=824081649] + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Base" unique_id=703826231] +mesh = SubResource("BoxMesh_1blfk") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Base" unique_id=954919913] +shape = SubResource("BoxShape3D_1blfk") + +[node name="HingeJoint3D" type="HingeJoint3D" parent="." unique_id=1859101471] +transform = Transform3D(-0.029536895, 0.001207204, -0.99956304, 0.18270016, -0.9831466, -0.0065861586, -0.98272485, -0.18281487, 0.02881853, 0, 0, -0.05022694) +node_a = NodePath("../Base") +node_b = NodePath("../Lever") +angular_limit/enable = true +angular_limit/upper = 0.7853982 +angular_limit/lower = -0.7853982 diff --git a/Scenes/SimplePickupable.tscn b/Scenes/SimplePickupable.tscn new file mode 100644 index 0000000..26fa52d --- /dev/null +++ b/Scenes/SimplePickupable.tscn @@ -0,0 +1,24 @@ +[gd_scene format=3 uid="uid://cjqsmugd22cdh"] + +[ext_resource type="Script" uid="uid://b143brnl7gf4f" path="res://Scripts/Pickupable.gd" id="1_kaux8"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_1blfk"] +size = Vector3(2, 0.1, 1) + +[sub_resource type="BoxMesh" id="BoxMesh_va8t4"] +size = Vector3(2, 0.1, 1) + +[node name="SimplePickupable" type="Node3D" unique_id=650555678 node_paths=PackedStringArray("body")] +script = ExtResource("1_kaux8") +body = NodePath("RigidBody3D") +metadata/_custom_type_script = "uid://b143brnl7gf4f" + +[node name="RigidBody3D" type="RigidBody3D" parent="." unique_id=1946674219] +collision_layer = 9 +collision_mask = 13 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="RigidBody3D" unique_id=1252834786] +shape = SubResource("BoxShape3D_1blfk") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="RigidBody3D" unique_id=2082673006] +mesh = SubResource("BoxMesh_va8t4") diff --git a/Scenes/SimplePickupable.tscn386917344.tmp b/Scenes/SimplePickupable.tscn386917344.tmp new file mode 100644 index 0000000..939f41e --- /dev/null +++ b/Scenes/SimplePickupable.tscn386917344.tmp @@ -0,0 +1,27 @@ +[gd_scene format=3 uid="uid://cjqsmugd22cdh"] + +[ext_resource type="Script" uid="uid://b143brnl7gf4f" path="res://Scripts/Pickupable.gd" id="1_kaux8"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_1blfk"] + +[sub_resource type="BoxMesh" id="BoxMesh_va8t4"] + +[node name="SimplePickupable" type="Node3D" unique_id=650555678 node_paths=PackedStringArray("body")] +script = ExtResource("1_kaux8") +body = NodePath("RigidBody3D") +springStrength = null +springDamping = null +rotateStrength = null +rotateDamping = null +maxDistance = null +metadata/_custom_type_script = "uid://b143brnl7gf4f" + +[node name="RigidBody3D" type="RigidBody3D" parent="." unique_id=1946674219] +collision_layer = 8 +collision_mask = 5 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="RigidBody3D" unique_id=1252834786] +shape = SubResource("BoxShape3D_1blfk") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="RigidBody3D" unique_id=2082673006] +mesh = SubResource("BoxMesh_va8t4") diff --git a/Scenes/SimplePickupable.tscn5413661838.tmp b/Scenes/SimplePickupable.tscn5413661838.tmp new file mode 100644 index 0000000..6bc03e5 --- /dev/null +++ b/Scenes/SimplePickupable.tscn5413661838.tmp @@ -0,0 +1,22 @@ +[gd_scene format=3 uid="uid://cjqsmugd22cdh"] + +[ext_resource type="Script" uid="uid://b143brnl7gf4f" path="res://Scripts/Pickupable.gd" id="1_kaux8"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_1blfk"] + +[sub_resource type="BoxMesh" id="BoxMesh_va8t4"] + +[node name="SimplePickupable" type="Node3D" unique_id=650555678 node_paths=PackedStringArray("body")] +script = ExtResource("1_kaux8") +body = NodePath("RigidBody3D") +metadata/_custom_type_script = "uid://b143brnl7gf4f" + +[node name="RigidBody3D" type="RigidBody3D" parent="." unique_id=1946674219] +collision_layer = 8 +collision_mask = 5 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="RigidBody3D" unique_id=1252834786] +shape = SubResource("BoxShape3D_1blfk") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="RigidBody3D" unique_id=2082673006] +mesh = SubResource("BoxMesh_va8t4") diff --git a/Scenes/SimplePickupable.tscn5752869206.tmp b/Scenes/SimplePickupable.tscn5752869206.tmp new file mode 100644 index 0000000..6bc03e5 --- /dev/null +++ b/Scenes/SimplePickupable.tscn5752869206.tmp @@ -0,0 +1,22 @@ +[gd_scene format=3 uid="uid://cjqsmugd22cdh"] + +[ext_resource type="Script" uid="uid://b143brnl7gf4f" path="res://Scripts/Pickupable.gd" id="1_kaux8"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_1blfk"] + +[sub_resource type="BoxMesh" id="BoxMesh_va8t4"] + +[node name="SimplePickupable" type="Node3D" unique_id=650555678 node_paths=PackedStringArray("body")] +script = ExtResource("1_kaux8") +body = NodePath("RigidBody3D") +metadata/_custom_type_script = "uid://b143brnl7gf4f" + +[node name="RigidBody3D" type="RigidBody3D" parent="." unique_id=1946674219] +collision_layer = 8 +collision_mask = 5 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="RigidBody3D" unique_id=1252834786] +shape = SubResource("BoxShape3D_1blfk") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="RigidBody3D" unique_id=2082673006] +mesh = SubResource("BoxMesh_va8t4") diff --git a/Scenes/SpatialAudioPlayer.tscn b/Scenes/SpatialAudioPlayer.tscn new file mode 100644 index 0000000..6cd3777 --- /dev/null +++ b/Scenes/SpatialAudioPlayer.tscn @@ -0,0 +1,52 @@ +[gd_scene format=3 uid="uid://cyn6cmirqiiya"] + +[ext_resource type="Script" uid="uid://d07hgc6eewoup" path="res://Scripts/SpatialAudioPlayer.gd" id="1_g20va"] + +[node name="SpatialAudioPlayer" type="AudioStreamPlayer3D" unique_id=708850804] +script = ExtResource("1_g20va") + +[node name="RayCastDown" type="RayCast3D" parent="." unique_id=1303526792] +target_position = Vector3(0, -100, 0) +collision_mask = 16 + +[node name="RayCastLeft" type="RayCast3D" parent="." unique_id=1754784517] +target_position = Vector3(100, 0, 0) +collision_mask = 16 + +[node name="RayCastRight" type="RayCast3D" parent="." unique_id=1209057136] +target_position = Vector3(-100, 0, 0) +collision_mask = 16 + +[node name="RayCastForward" type="RayCast3D" parent="." unique_id=1455084224] +target_position = Vector3(0, 0, 100) +collision_mask = 16 + +[node name="RayCastForwardLeft" type="RayCast3D" parent="." unique_id=2054830461] +transform = Transform3D(0.70710677, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710677, 0, 0, 0) +target_position = Vector3(0, 0, 100) +collision_mask = 16 + +[node name="RayCastForwardRight" type="RayCast3D" parent="." unique_id=885518827] +transform = Transform3D(0.7071067, 0, -0.7071067, 0, 1, 0, 0.7071067, 0, 0.7071067, 0, 0, 0) +target_position = Vector3(0, 0, 100) +collision_mask = 16 + +[node name="RayCastBackwardRight" type="RayCast3D" parent="." unique_id=1491942105] +transform = Transform3D(0.70710677, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710677, 0, 0, 0) +target_position = Vector3(0, 0, -100) +collision_mask = 16 + +[node name="RayCastBackwardLeft" type="RayCast3D" parent="." unique_id=1082500589] +transform = Transform3D(0.70710677, 0, -0.70710677, 0, 1, 0, 0.70710677, 0, 0.70710677, 0, 0, 0) +target_position = Vector3(0, 0, -100) +collision_mask = 16 + +[node name="RayCastBackward" type="RayCast3D" parent="." unique_id=441456695] +target_position = Vector3(0, 0, -100) +collision_mask = 16 + +[node name="RayCastUp" type="RayCast3D" parent="." unique_id=956781195] +target_position = Vector3(0, 100, 0) +collision_mask = 16 + +[node name="RayCastPlayer" type="RayCast3D" parent="." unique_id=1933512558] diff --git a/Scripts/Button.gd b/Scripts/Button.gd new file mode 100644 index 0000000..b5a9bdb --- /dev/null +++ b/Scripts/Button.gd @@ -0,0 +1,88 @@ +extends Interactable +class_name Button3D + +signal pressed(button: Button3D) +signal held(button: Button3D) +signal released(button: Button3D) + +@export var pressDepth: float = 0.05 +@export var pressSpeed: float = 10.0 +@export var autoReset: bool = true +@export var buttonMesh: MeshInstance3D +@export var holdMode: bool = false +@export var pressArea: Area3D + +var isPressed: bool = false +var offset: float = 0.0 +var pressing_body: Node3D = null + +func _ready() -> void: + if pressArea: + pressArea.monitoring = true + pressArea.monitorable = true + +func beginInteract(player, hitPosition: Vector3): + if holdMode: + isPressed = true + offset = pressDepth + emit_signal("pressed", self) + else: + if isPressed: + return + isPressed = true + offset = pressDepth + emit_signal("pressed", self) + +func updateInteract(player): + if holdMode and isPressed: + emit_signal("held", self) + +func endInteract(player): + if holdMode: + isPressed = false + offset = 0.0 + emit_signal("released", self) + else: + if autoReset: + offset = 0.0 + +func _physics_process(delta): + var target = offset + var current = buttonMesh.position.z + var newZ = lerp(current, -target, delta * pressSpeed) + buttonMesh.position.z = newZ + + if autoReset and isPressed and abs(newZ) < 0.001: + isPressed = false + +#func _physics_process(delta): + ## Detect rigidbody overlap + #var bodies = pressArea.get_overlapping_bodies() +# + #if bodies.size() > 0: + #var body = bodies[0] +# + #if pressing_body == null: + #pressing_body = body + #isPressed = true + #offset = pressDepth + #emit_signal("pressed", self) + #else: + #if holdMode: + #emit_signal("held", self) + #else: + #if pressing_body != null: + #pressing_body = null + #if autoReset: + #offset = 0.0 + #isPressed = false + #emit_signal("released", self) +# + ## Animate button + #var target = offset + #var current = buttonMesh.position.z + #var newZ = lerp(current, -target, delta * pressSpeed) + #buttonMesh.position.z = newZ +# + #if autoReset and isPressed and abs(newZ) < 0.001: + #isPressed = false diff --git a/Scripts/Button.gd.uid b/Scripts/Button.gd.uid new file mode 100644 index 0000000..afd504b --- /dev/null +++ b/Scripts/Button.gd.uid @@ -0,0 +1 @@ +uid://diphc7baic3px diff --git a/Scripts/Crosshair.gd b/Scripts/Crosshair.gd new file mode 100644 index 0000000..27fdba0 --- /dev/null +++ b/Scripts/Crosshair.gd @@ -0,0 +1,17 @@ +extends CanvasLayer +class_name Crosshair + +@export var normalTexture: Texture2D +@export var hoverTexture: Texture2D + +@onready var normal = $NormalCrosshair +@onready var hover = $HoverCrosshair + +func _ready(): + normal.texture = normalTexture + hover.texture = hoverTexture + hover.visible = false + +func setHover(active: bool): + normal.visible = !active + hover.visible = active diff --git a/Scripts/Crosshair.gd.uid b/Scripts/Crosshair.gd.uid new file mode 100644 index 0000000..24ac4b1 --- /dev/null +++ b/Scripts/Crosshair.gd.uid @@ -0,0 +1 @@ +uid://dd8ys8xg3q3sw diff --git a/Scripts/Door.gd b/Scripts/Door.gd new file mode 100644 index 0000000..c031a3e --- /dev/null +++ b/Scripts/Door.gd @@ -0,0 +1,135 @@ +extends Interactable +class_name Door + +@export var body: RigidBody3D +@export var springStrength: float = 200.0 +@export var springDamping: float= 50.0 +@export var maxGrabDistance: float = 6.0 +@export var mouseForce: float = 0.02 + +@export var hinge: HingeJoint3D +@export var hingeAngularUpperLimit: float = 120 +@export var hingeAngularLowerLimit: float = -120 + +@export var snapAngleThreshold: float = 1 +@export var snapVelocityThreshold: float = 5.0 + +@export var mouseHorizontalFactor: float = 1.0 +@export var mouseVerticalFactor: float = 1.0 + +var dragging: bool = false +var grabLocal: Vector3 = Vector3.ZERO +var handOffset: Vector3 = Vector3.ZERO + +func _ready() -> void: + hinge.set_param(HingeJoint3D.PARAM_LIMIT_LOWER, deg_to_rad(hingeAngularLowerLimit)) + hinge.set_param(HingeJoint3D.PARAM_LIMIT_UPPER, deg_to_rad(hingeAngularUpperLimit)) + +func _physics_process(_delta): + if dragging: + return + + var angle = get_hinge_angle() + var ang_vel = get_hinge_ang_vel() + + if abs(rad_to_deg(angle)) > snapAngleThreshold: + return + + if abs(ang_vel) > snapVelocityThreshold: + return + + # Strong damping near closed position + var damping = springDamping * 4.0 + + # PD controller torque toward angle 0 + var torque = -angle * springStrength - ang_vel * damping + + var axis = hinge.global_transform.basis.y + body.apply_torque(axis * torque) + +func beginInteract(player, hitPosition: Vector3): + dragging = true + handOffset = Vector3.ZERO + grabLocal = body.to_local(hitPosition) + player.setMouseFactors(mouseHorizontalFactor, mouseVerticalFactor) + +func updateInteract(player): + if !dragging: + return + + var worldGrab = body.to_global(grabLocal) + + handOffset += player.camera.global_basis.x * player.interactionMouseDelta.x * mouseForce + handOffset += -player.camera.global_basis.y * player.interactionMouseDelta.y * mouseForce + handOffset = handOffset.limit_length(0.3) + + var targetHand = player.hand.global_position + handOffset + + var error = targetHand - worldGrab + + var handDistance = player.hand.global_position.distance_to(worldGrab) + if handDistance > maxGrabDistance: + player.stopInteraction() + return + + var offset = worldGrab - body.global_position + + var pointVelocity = body.linear_velocity + body.angular_velocity.cross(offset) + + var hingeAxis = body.global_basis.y + + var tangent = hingeAxis.cross(offset) + if tangent.length_squared() < 0.0001: + return + tangent = tangent.normalized() + + var tangentError = tangent * error.dot(tangent) + var tangentVelocity = tangent * pointVelocity.dot(tangent) + + var force = tangentError * springStrength - tangentVelocity * springDamping + + body.apply_force(force, offset) + +func endInteract(player): + dragging = false + handOffset = Vector3.ZERO + player.setMouseFactors(1.0, 1.0) + +#func get_hinge_angle() -> float: + #var body_basis = body.global_transform.basis + #var hinge_basis = hinge.global_transform.basis +# + ## Body forward vector in world space + #var forward = body_basis.z +# + ## Convert forward vector into hinge local space + #var local_forward = hinge_basis.inverse() * forward +# + ## Angle around hinge axis (Y) + #return atan2(local_forward.x, local_forward.z) + +func get_hinge_angle() -> float: + var hinge_axis = hinge.global_transform.basis.y.normalized() + + # Door forward direction + var fwd = body.global_transform.basis.z.normalized() + + # Reference forward direction (door closed direction) + var ref = hinge.global_transform.basis.z.normalized() + + # Remove hinge axis component (project onto hinge plane) + var fwd_proj = (fwd - hinge_axis * fwd.dot(hinge_axis)).normalized() + var ref_proj = (ref - hinge_axis * ref.dot(hinge_axis)).normalized() + + # Signed angle + var angle = atan2( + hinge_axis.dot(ref_proj.cross(fwd_proj)), + ref_proj.dot(fwd_proj) + ) + + return angle + + +func get_hinge_ang_vel() -> float: + var axis = hinge.global_transform.basis.y.normalized() + return body.angular_velocity.dot(axis) diff --git a/Scripts/Door.gd.uid b/Scripts/Door.gd.uid new file mode 100644 index 0000000..7597f9a --- /dev/null +++ b/Scripts/Door.gd.uid @@ -0,0 +1 @@ +uid://cyw8ng7alo12e diff --git a/Scripts/Interactable.gd b/Scripts/Interactable.gd new file mode 100644 index 0000000..6257e42 --- /dev/null +++ b/Scripts/Interactable.gd @@ -0,0 +1,19 @@ +extends Node3D + +class_name Interactable + +static func find(node: Node) -> Interactable: + while node: + if node is Interactable: + return node + node = node.get_parent() + return null + +func beginInteract(player, hitPosition: Vector3): + pass + +func updateInteract(player): + pass + +func endInteract(player): + pass diff --git a/Scripts/Interactable.gd.uid b/Scripts/Interactable.gd.uid new file mode 100644 index 0000000..355114e --- /dev/null +++ b/Scripts/Interactable.gd.uid @@ -0,0 +1 @@ +uid://boc1b3v02ssn5 diff --git a/Scripts/Lever.gd b/Scripts/Lever.gd new file mode 100644 index 0000000..5e0ad7e --- /dev/null +++ b/Scripts/Lever.gd @@ -0,0 +1,107 @@ +extends Interactable +class_name Lever + +@export var body: RigidBody3D +@export var hinge: HingeJoint3D + +@export var angleOn: float = -45.0 +@export var angleOff: float = 0.0 + +@export var snapStrength: float = 200.0 +@export var maxGrabDistance: float = 4.0 +@export var mouseForce: float = 0.015 + +var dragging := false +var grabLocal := Vector3.ZERO +var handOffset := Vector3.ZERO +var targetAngle := 0.0 + +func _ready(): + hinge.set_param(HingeJoint3D.PARAM_LIMIT_LOWER, deg_to_rad(angleOn)) + hinge.set_param(HingeJoint3D.PARAM_LIMIT_UPPER, deg_to_rad(angleOff)) + targetAngle = angleOff + + +func _physics_process(delta): + if dragging: + return + + var angle = rad_to_deg(get_hinge_angle()) + + # Snap to nearest end + var mid = (angleOn + angleOff) * 0.5 + if angle < mid: + targetAngle = angleOn + else: + targetAngle = angleOff + + var angleError = deg_to_rad(targetAngle) - get_hinge_angle() + + # HARD SNAP — no spring + var axis = hinge.global_transform.basis.x + var torque = snapStrength * sign(angleError) + + body.apply_torque(axis * torque) + + +func beginInteract(player, hitPosition: Vector3): + dragging = true + handOffset = Vector3.ZERO + grabLocal = body.to_local(hitPosition) + + +func updateInteract(player): + if !dragging: + return + + var worldGrab = body.to_global(grabLocal) + + # Only vertical mouse movement (Y) + handOffset += -player.camera.global_basis.y * player.interactionMouseDelta.y * mouseForce + handOffset = handOffset.limit_length(0.25) + + var targetHand = player.hand.global_position + handOffset + var error = targetHand - worldGrab + + var handDistance = player.hand.global_position.distance_to(worldGrab) + if handDistance > maxGrabDistance: + endInteract(player) + player.dragging = false + return + + var offset = worldGrab - body.global_position + var pointVelocity = body.linear_velocity + body.angular_velocity.cross(offset) + + # Correct hinge axis (X) + var hingeAxis = body.global_basis.x + var tangent = hingeAxis.cross(offset) + if tangent.length_squared() < 0.0001: + return + tangent = tangent.normalized() + + var tangentError = tangent * error.dot(tangent) + var tangentVelocity = tangent * pointVelocity.dot(tangent) + + var force = tangentError * snapStrength + body.apply_force(force, offset) + + +func endInteract(player): + dragging = false + handOffset = Vector3.ZERO + + +func get_hinge_angle() -> float: + var body_basis = body.global_transform.basis + var hinge_basis = hinge.global_transform.basis + + # X-axis rotation → use UP vector + var up = body_basis.y + var local_up = hinge_basis.inverse() * up + + return atan2(local_up.z, local_up.y) + + +func get_hinge_ang_vel() -> float: + var axis = hinge.global_transform.basis.x + return body.angular_velocity.dot(axis) diff --git a/Scripts/Lever.gd.uid b/Scripts/Lever.gd.uid new file mode 100644 index 0000000..e1649ba --- /dev/null +++ b/Scripts/Lever.gd.uid @@ -0,0 +1 @@ +uid://2vyt44um2tty diff --git a/Scripts/Pickupable.gd b/Scripts/Pickupable.gd new file mode 100644 index 0000000..dd4569b --- /dev/null +++ b/Scripts/Pickupable.gd @@ -0,0 +1,97 @@ +extends Interactable +class_name Pickupable + +@export var springStrength: float = 150.0 +@export var springDamping: float = 50.0 + +@export var rotateStrength: float = 5.0 +@export var rotateDamping: float = 5.0 + +@export var throwForce: float = 10.0 +@export var maxDistance: float = 4.0 +@export var body: RigidBody3D +@export var snapAnchor: Marker3D + +@export_range(0.01, 1000.0, 0.01) var bodyMass: float = 1.0 + +var dragging: bool = false +var rotating: bool = false +var playerRef + +var grabLocal: Vector3 +var holdDistance: float +var rotationOffset: Basis + +func _ready(): + if body: + body.mass = bodyMass + +func beginInteract(player, hitPosition: Vector3): + playerRef = player + dragging = true + + grabLocal = body.to_local(hitPosition) + var holdPoint = player.hand + holdDistance = holdPoint.global_position.distance_to(hitPosition) + rotationOffset = holdPoint.global_basis.inverse() * body.global_basis + +func updateInteract(player): + if !dragging: + return + + # Toggle rotation mode + if Input.is_action_just_pressed("rotate"): + rotating = true + playerRef.setMouseFactors(0.0, 0.0) + + if Input.is_action_just_released("rotate"): + rotating = false + playerRef.setMouseFactors(1.0, 1.0) + + var holdPoint = player.hand + + # Release if too far away + if body.global_position.distance_to(player.global_position) > maxDistance: + endInteract(player) + return + + # Target position + var targetPosition = holdPoint.global_position + (-holdPoint.global_basis.z * holdDistance) + var offset = targetPosition - body.global_position + + # Linear spring + body.apply_force(offset * springStrength - body.linear_velocity * springDamping, body.to_global(grabLocal) - body.global_position) + + if rotating: + var delta = player.interactionMouseDelta + + rotationOffset = Basis(Vector3.UP, deg_to_rad(-delta.x * 0.35)) * rotationOffset + rotationOffset = Basis(Vector3.RIGHT, deg_to_rad(delta.y * 0.35)) * rotationOffset + + # Angular spring + var targetBasis = holdPoint.global_basis * rotationOffset + + var currentQuat = body.global_basis.get_rotation_quaternion() + var targetQuat = targetBasis.get_rotation_quaternion() + var diff = targetQuat * currentQuat.inverse() + + if diff.dot(Quaternion.IDENTITY) < 0: + diff = -diff + + var angle = diff.get_angle() + + if angle > 0.001: + body.apply_torque(diff.get_axis() * angle * rotateStrength - body.angular_velocity * rotateDamping) + +func endInteract(player): + dragging = false + rotating = false + player.setMouseFactors(1.0, 1.0) + playerRef = null + +func throw(): + if !dragging: + return + + var direction = -playerRef.camera.global_basis.z + body.apply_impulse(direction * throwForce) diff --git a/Scripts/Pickupable.gd.uid b/Scripts/Pickupable.gd.uid new file mode 100644 index 0000000..b1d1223 --- /dev/null +++ b/Scripts/Pickupable.gd.uid @@ -0,0 +1 @@ +uid://b143brnl7gf4f diff --git a/Scripts/PlayerController.gd b/Scripts/PlayerController.gd new file mode 100644 index 0000000..faa36c7 --- /dev/null +++ b/Scripts/PlayerController.gd @@ -0,0 +1,143 @@ +extends CharacterBody3D + +@export var speed: float = 6.0 +@export var jumpVelocity: float = 5.0 +@export var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity") as float + +@export var acceleration: float = 20.0 +@export var airAcceleration: float = 4.0 +@export var friction: float = 10.0 + +var mouseBaseSensitivity: float = 0.004 +var mouseSensitivity: float = 0.0 +@export var mouseSensitivityMultiplier: float = 0.2 + +@export var head: Node3D +@export var camera: Camera3D +@export var raycast: RayCast3D +@export var hand: Marker3D +@export var crosshair: CanvasLayer + +var lateJumpTime: float = 0.15 +var lateJumpTimer: float = 0.0 + +var currentInteractable: Interactable +var dragging: bool = false + +var pitch: float = 0.0 + +var playerId: String +var displayName: String + +var mouseDelta: Vector2 = Vector2.ZERO +var interactionMouseDelta: Vector2 = Vector2.ZERO + +var mouseHorizontalFactor: float = 1.0 +var mouseVerticalFactor: float = 1.0 + +var targetMouseHorizontalFactor: float = 1.0 +var targetMouseVerticalFactor: float = 1.0 +@export var mouseFactorLerpSpeed: float = 2.0 + +func _ready(): + mouseSensitivity = mouseBaseSensitivity * mouseSensitivityMultiplier + Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + +func _input(event: InputEvent) -> void: + if event.is_action_pressed("ui_cancel"): + if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: + Input.mouse_mode = Input.MOUSE_MODE_VISIBLE + else: + Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + +func _unhandled_input(event: InputEvent) -> void: + if Input.mouse_mode != Input.MOUSE_MODE_CAPTURED: + return + + if event is InputEventMouseMotion: + if dragging and currentInteractable: + interactionMouseDelta += event.relative + mouseDelta += event.relative + +func _physics_process(delta): + mouseHorizontalFactor = lerp(mouseHorizontalFactor, targetMouseHorizontalFactor, delta * mouseFactorLerpSpeed) + mouseVerticalFactor = lerp(mouseVerticalFactor, targetMouseVerticalFactor, delta * mouseFactorLerpSpeed) + + if mouseDelta != Vector2.ZERO: + rotate_y(-mouseDelta.x * mouseSensitivity * mouseHorizontalFactor) + + pitch -= mouseDelta.y * mouseSensitivity * mouseVerticalFactor + pitch = clamp(pitch, deg_to_rad(-90), deg_to_rad(90)) + head.rotation.x = pitch + + mouseDelta = Vector2.ZERO + + if !is_on_floor(): + velocity.y -= gravity * delta + lateJumpTimer -= delta + else: + lateJumpTimer = lateJumpTime + + # Interaction search + if !dragging: + if raycast.is_colliding(): + currentInteractable = Interactable.find(raycast.get_collider()) + crosshair.setHover(true) + else: + currentInteractable = null + crosshair.setHover(false) + + # Start interaction + if !dragging and currentInteractable: + if Input.is_action_just_pressed("interact"): + dragging = true + currentInteractable.beginInteract(self, raycast.get_collision_point()) + + # Update interaction + if dragging and currentInteractable: + if Input.is_action_just_pressed("throw"): + if currentInteractable is Pickupable: + currentInteractable.throw() + stopInteraction() + return + + currentInteractable.updateInteract(self) + interactionMouseDelta = Vector2.ZERO + + # End interaction + if dragging and currentInteractable: + if Input.is_action_just_released("interact"): + stopInteraction() + + # Late jump buffering + if Input.is_action_just_pressed("jump") and lateJumpTimer > 0.0: + velocity.y = jumpVelocity + + # Movement + var inputDir := Input.get_vector("left", "right", "forward", "backward") + var direction := (transform.basis * Vector3(inputDir.x, 0, inputDir.y)).normalized() + + if is_on_floor(): + if direction != Vector3.ZERO: + velocity.x = direction.x * speed + velocity.z = direction.z * speed + else: + velocity.x = lerp(velocity.x, 0.0, delta * friction) + velocity.z = lerp(velocity.z, 0.0, delta * friction) + else: + velocity.x = lerp(velocity.x, direction.x * speed, delta * airAcceleration) + velocity.z = lerp(velocity.z, direction.z * speed, delta * airAcceleration) + + move_and_slide() + +func setMouseFactors(horizontal: float, vertical: float): + targetMouseHorizontalFactor = clamp(horizontal, 0.0, 1.0) + targetMouseVerticalFactor = clamp(vertical, 0.0, 1.0) + +func stopInteraction(): + if currentInteractable: + currentInteractable.endInteract(self) + + currentInteractable = null + dragging = false + interactionMouseDelta = Vector2.ZERO diff --git a/Scripts/PlayerController.gd.uid b/Scripts/PlayerController.gd.uid new file mode 100644 index 0000000..884be44 --- /dev/null +++ b/Scripts/PlayerController.gd.uid @@ -0,0 +1 @@ +uid://c1r1jpfh3vsn2 diff --git a/Scripts/Socket.gd b/Scripts/Socket.gd new file mode 100644 index 0000000..c01bc22 --- /dev/null +++ b/Scripts/Socket.gd @@ -0,0 +1,52 @@ +class_name Socket +extends Node3D + +@export var snapPoint: Marker3D +@export var snapDistance: float = 0.5 +@export var lockOnSnap: bool = true + +var candidate: Pickupable = null +var snappedObject: Pickupable = null + +func is_in_range(object: Pickupable) -> bool: + if object == null: + return false + + if object.snapAnchor == null: + return false + + var distance := object.snapAnchor.global_position.distance_to( + snapPoint.global_position + ) + + return distance <= snapDistance + +func getSnapTransform(object: Pickupable) -> Transform3D: + var objectTransform := object.body.global_transform + var anchorTransform := object.snapAnchor.global_transform + + # Where is the SnapAnchor relative to the Rigidbody? + var anchorOffset := objectTransform.affine_inverse() * anchorTransform + + # We want the SnapAnchor to have exactly the same + # transform as the Socket's SnapPoint. + return snapPoint.global_transform * anchorOffset.affine_inverse() + +func snapObject(object: Pickupable): + if not is_in_range(object): + return + + var targetTransform := getSnapTransform(object) + + var body := object.body + + body.linear_velocity = Vector3.ZERO + body.angular_velocity = Vector3.ZERO + + body.global_transform = targetTransform + + if lockOnSnap: + body.freeze = true + + snappedObject = object + candidate = null diff --git a/Scripts/Socket.gd.uid b/Scripts/Socket.gd.uid new file mode 100644 index 0000000..d782645 --- /dev/null +++ b/Scripts/Socket.gd.uid @@ -0,0 +1 @@ +uid://xd03vepkva1l diff --git a/Scripts/SpatialAudioPlayer.gd b/Scripts/SpatialAudioPlayer.gd new file mode 100644 index 0000000..cfadb73 --- /dev/null +++ b/Scripts/SpatialAudioPlayer.gd @@ -0,0 +1,132 @@ +extends AudioStreamPlayer3D +class_name SpatialAudioPlayer + +@export var maxRaycastDistance: float = 30.0 +@export var updateFrequencySeconds: float = 0.5 +@export var maxReverbWetness: float = 0.5 +@export var wallLowpassCutoffAmount: int = 600 + +var raycastArray: Array = [] +var distanceArray: Array = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +var lastUpdateTime: float = 0.0 +var updateDistances: bool = true +var currentRaycastIndex: int = 0 + +var audioBusIndex = null +var audioBusName: String = "" + +var reverbEffect: AudioEffectReverb +var lowpassFilterEffect: AudioEffectLowPassFilter + +var targetLowpassCutoff: float = 20000 +var targetReverbRoomSize: float = 0.0 +var targetReverbWetness: float = 0.0 +var targetVolumeDb: float = 0.0 + +func _ready() -> void: + audioBusIndex = AudioServer.bus_count + audioBusName = "SpatialBus#"+str(audioBusIndex) + AudioServer.add_bus(audioBusIndex) + AudioServer.set_bus_name(audioBusIndex, audioBusName) + AudioServer.set_bus_send(audioBusIndex, bus) + self.bus = audioBusName + + AudioServer.add_bus_effect(audioBusIndex, AudioEffectReverb.new(), 0) + reverbEffect = AudioServer.get_bus_effect(audioBusIndex, 0) + AudioServer.add_bus_effect(audioBusIndex, AudioEffectLowPassFilter.new(), 1) + lowpassFilterEffect = AudioServer.get_bus_effect(audioBusIndex, 1) + + targetVolumeDb = volume_db + volume_db = -60 + + $RayCastDown.target_position = Vector3(0, -maxRaycastDistance, 0) + $RayCastLeft.target_position = Vector3(maxRaycastDistance, 0, 0) + $RayCastRight.target_position = Vector3(-maxRaycastDistance, 0, 0) + $RayCastForward.target_position = Vector3(0, 0, maxRaycastDistance) + $RayCastForwardLeft.target_position = Vector3(0, 0, maxRaycastDistance) + $RayCastForwardRight.target_position = Vector3(0, 0, maxRaycastDistance) + $RayCastBackwardRight.target_position = Vector3(0, 0, -maxRaycastDistance) + $RayCastBackwardLeft.target_position = Vector3(0, 0, -maxRaycastDistance) + $RayCastBackward.target_position = Vector3(0, 0, -maxRaycastDistance) + $RayCastUp.target_position = Vector3(0, maxRaycastDistance, 0) + + raycastArray.append($RayCastDown) + raycastArray.append($RayCastLeft) + raycastArray.append($RayCastRight) + raycastArray.append($RayCastForward) + raycastArray.append($RayCastForwardLeft) + raycastArray.append($RayCastForwardRight) + raycastArray.append($RayCastBackwardRight) + raycastArray.append($RayCastBackwardLeft) + raycastArray.append($RayCastBackward) + raycastArray.append($RayCastUp) + + play() + +func onUpdateRaycastDistance(raycast: RayCast3D, raycastIndex: int) -> void: + raycast.force_raycast_update() + var collider = raycast.get_collider() + if collider != null: + distanceArray[raycastIndex] = self.global_position.distance_to(raycast.get_collision_point()) + else: + distanceArray[raycastIndex] = -1 + raycast.enabled = false + +func onUpdateSpatialAudio(player: Node3D) -> void: + onUpdateReverb(player) + onUpdateLowpassFilter(player) + +func onUpdateReverb(player: Node3D) -> void: + if reverbEffect != null: + var roomSize: float = 0.0 + var wetness: float = 0.0 + for distance in distanceArray: + if distance >= 0: + roomSize += (distance / maxRaycastDistance) / (float(distanceArray.size())) + roomSize = min(roomSize, 1.0) + else: + wetness -= 1.0 / float(distanceArray.size()) + wetness = max(wetness, 0.0) + targetReverbWetness = wetness + targetReverbRoomSize = roomSize + +func onUpdateLowpassFilter(player : Node3D): + if lowpassFilterEffect != null: + var query = PhysicsRayQueryParameters3D.create(self.global_position,self.global_position + (player.global_position - self.global_position).normalized() * maxRaycastDistance, $RayCastForward.get_collision_mask()) + var spaceState = get_world_3d().direct_space_state + var result = spaceState.intersect_ray(query) + var lowpassCutoff = 20000 + if !result.is_empty(): + var rayDistance = self.global_position.distance_to(result["position"]) + var distanceToPlayer = self.global_position.distance_to(player.global_position) + var wallToPlayerRatio = rayDistance / max(distanceToPlayer, 0.001) + if rayDistance < distanceToPlayer: + lowpassCutoff = wallLowpassCutoffAmount * wallToPlayerRatio + targetLowpassCutoff = lowpassCutoff + +func lerpParameters(delta: float) -> void: + volume_db = lerp(volume_db, targetVolumeDb, delta) + lowpassFilterEffect.cutoff_hz = lerp(lowpassFilterEffect.cutoff_hz, targetLowpassCutoff, delta * 5.0) + reverbEffect.wet = lerp(reverbEffect.wet, targetReverbRoomSize * maxReverbWetness, delta * 5.0) + reverbEffect.room_size = lerp(reverbEffect.room_size, targetReverbRoomSize, delta * 5.0) + +func _physics_process(delta: float) -> void: + lastUpdateTime += delta + + if updateDistances: + onUpdateRaycastDistance(raycastArray[currentRaycastIndex], currentRaycastIndex) + currentRaycastIndex += 1 + if currentRaycastIndex >= distanceArray.size(): + currentRaycastIndex = 0 + updateDistances = false + + if lastUpdateTime > updateFrequencySeconds: + var playerCamera = get_viewport().get_camera_3d() + if playerCamera != null: + onUpdateSpatialAudio(playerCamera) + updateDistances = true + lastUpdateTime = 0.0 + + lerpParameters(delta) + print("Audio:", global_position) + print("Camera:", get_viewport().get_camera_3d().global_position) diff --git a/Scripts/SpatialAudioPlayer.gd.uid b/Scripts/SpatialAudioPlayer.gd.uid new file mode 100644 index 0000000..1db4467 --- /dev/null +++ b/Scripts/SpatialAudioPlayer.gd.uid @@ -0,0 +1 @@ +uid://d07hgc6eewoup diff --git a/TestScripts/BlockMover.gd b/TestScripts/BlockMover.gd new file mode 100644 index 0000000..3ede839 --- /dev/null +++ b/TestScripts/BlockMover.gd @@ -0,0 +1,27 @@ +extends Node3D + +@export var moveDistance: float = 2.0 +@export var moveSpeed: float = 3.0 + +var up: bool = false +var startPos: Vector3 = Vector3.ZERO + +func _ready(): + startPos = global_position + +func toggleMove(button: Button3D): + up = !up + +func holdMove(button: Button3D): + up = true + +func releaseMove(button: Button3D): + up = false + +func _physics_process(delta): + var target: Vector3 = startPos + + if up: + target += Vector3(0, moveDistance, 0) + + global_position = global_position.lerp(target, delta * moveSpeed) diff --git a/TestScripts/BlockMover.gd.uid b/TestScripts/BlockMover.gd.uid new file mode 100644 index 0000000..86a8e04 --- /dev/null +++ b/TestScripts/BlockMover.gd.uid @@ -0,0 +1 @@ +uid://cvg1f1wtahy0t diff --git a/Textures/Door/Door.jpg b/Textures/Door/Door.jpg new file mode 100644 index 0000000..a5573a1 Binary files /dev/null and b/Textures/Door/Door.jpg differ diff --git a/Textures/Door/Door.jpg.import b/Textures/Door/Door.jpg.import new file mode 100644 index 0000000..9518a82 --- /dev/null +++ b/Textures/Door/Door.jpg.import @@ -0,0 +1,44 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://jydmkkryke23" +path.s3tc="res://.godot/imported/Door.jpg-c6a7b4f9366d8eda11c309608374c71c.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} +generator_parameters={ +"md5": "d922ba511a93b749cd47cd485c867293" +} + +[deps] + +source_file="res://Textures/Door/Door.jpg" +dest_files=["res://.godot/imported/Door.jpg-c6a7b4f9366d8eda11c309608374c71c.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/Textures/Door/RustedMetal.jpg b/Textures/Door/RustedMetal.jpg new file mode 100644 index 0000000..6ad7a8c Binary files /dev/null and b/Textures/Door/RustedMetal.jpg differ diff --git a/Textures/Door/RustedMetal.jpg.import b/Textures/Door/RustedMetal.jpg.import new file mode 100644 index 0000000..70afd28 --- /dev/null +++ b/Textures/Door/RustedMetal.jpg.import @@ -0,0 +1,44 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cq1svjaaumlba" +path.s3tc="res://.godot/imported/RustedMetal.jpg-14b74405eb9d3557651a60b1325156d4.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} +generator_parameters={ +"md5": "db1a56df5bbb9a0342dac4dd57244c19" +} + +[deps] + +source_file="res://Textures/Door/RustedMetal.jpg" +dest_files=["res://.godot/imported/RustedMetal.jpg-14b74405eb9d3557651a60b1325156d4.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/Textures/Door/Stone.jpg b/Textures/Door/Stone.jpg new file mode 100644 index 0000000..a4cf0ed Binary files /dev/null and b/Textures/Door/Stone.jpg differ diff --git a/Textures/Door/Stone.jpg.import b/Textures/Door/Stone.jpg.import new file mode 100644 index 0000000..f20f2e7 --- /dev/null +++ b/Textures/Door/Stone.jpg.import @@ -0,0 +1,44 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dp4cgjr828p7j" +path.s3tc="res://.godot/imported/Stone.jpg-efa2510d35b8e14ff09c596e6b250d76.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} +generator_parameters={ +"md5": "e7877b28c4ff8b50b6036698303f8c18" +} + +[deps] + +source_file="res://Textures/Door/Stone.jpg" +dest_files=["res://.godot/imported/Stone.jpg-efa2510d35b8e14ff09c596e6b250d76.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/Textures/Door/Wood.jpg b/Textures/Door/Wood.jpg new file mode 100644 index 0000000..91a9a09 Binary files /dev/null and b/Textures/Door/Wood.jpg differ diff --git a/Textures/Door/Wood.jpg.import b/Textures/Door/Wood.jpg.import new file mode 100644 index 0000000..d4f9955 --- /dev/null +++ b/Textures/Door/Wood.jpg.import @@ -0,0 +1,44 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dulhjsunch31g" +path.s3tc="res://.godot/imported/Wood.jpg-fc1b321183afe5311878845ad5ee0a37.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} +generator_parameters={ +"md5": "af8e09e1c617e9fd729e4195fbb54b04" +} + +[deps] + +source_file="res://Textures/Door/Wood.jpg" +dest_files=["res://.godot/imported/Wood.jpg-fc1b321183afe5311878845ad5ee0a37.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..c6bbb7d --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..8ec8e70 --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://gxvllmsgh21p" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..297b165 --- /dev/null +++ b/project.godot @@ -0,0 +1,78 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="InteractionSystem" +run/main_scene="uid://cwwsolupah1s3" +config/features=PackedStringArray("4.7", "Mobile") +config/icon="res://icon.svg" + +[display] + +window/stretch/mode="canvas_items" +window/stretch/aspect="expand" + +[input] + +left={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +] +} +right={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +] +} +forward={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +] +} +backward={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +] +} +jump={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +] +} +interact={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) +, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(159, 9),"global_position":Vector2(168, 57),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) +] +} +throw={ +"deadzone": 0.2, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(114, 23),"global_position":Vector2(123, 71),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null) +] +} +rotate={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"location":0,"echo":false,"script":null) +] +} + +[layer_names] + +3d_physics/layer_5="SpatialAudio" + +[physics] + +3d/physics_engine="Jolt Physics" + +[rendering] + +rendering_device/driver.windows="d3d12" +renderer/rendering_method="mobile"