diff --git a/GameJamDungeon.csproj b/GameJamDungeon.csproj
index 9319cc32..dbd8b774 100644
--- a/GameJamDungeon.csproj
+++ b/GameJamDungeon.csproj
@@ -17,4 +17,7 @@
+
+
+
\ No newline at end of file
diff --git a/project.godot b/project.godot
index 51cbba6d..4b5ecf46 100644
--- a/project.godot
+++ b/project.godot
@@ -23,6 +23,10 @@ window/size/viewport_height=1080
project/assembly_name="GameJamDungeon"
+[editor_plugins]
+
+enabled=PackedStringArray("res://addons/SimpleDungeons/plugin.cfg")
+
[input]
MoveUp={
@@ -65,3 +69,43 @@ Inventory={
"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)
]
}
+move_forward={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+move_backward={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+move_right={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+move_left={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+move_sprint={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+move_jump={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+move_crouch={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+move_fly_mode={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
diff --git a/src/Main.cs b/src/Main.cs
index 5345625f..2eb7fa7b 100644
--- a/src/Main.cs
+++ b/src/Main.cs
@@ -11,7 +11,7 @@ using System.Reflection;
// If you want to edit your game's main entry-point, please see Game.tscn and
// Game.cs instead.
-public partial class Main : Node2D
+public partial class Main : Node
{
public override void _Ready()
diff --git a/src/Main.tscn b/src/Main.tscn
index 4f9deb24..90661b5e 100644
--- a/src/Main.tscn
+++ b/src/Main.tscn
@@ -2,5 +2,5 @@
[ext_resource type="Script" path="res://src/Main.cs" id="1_prpoe"]
-[node name="Node2D" type="Node2D"]
+[node name="Node" type="Node"]
script = ExtResource("1_prpoe")
diff --git a/src/app/App.tscn b/src/app/App.tscn
index ce09be07..e23b2b58 100644
--- a/src/app/App.tscn
+++ b/src/app/App.tscn
@@ -1,3 +1,89 @@
-[gd_scene format=3 uid="uid://cagfc5ridmteu"]
+[gd_scene load_steps=8 format=3 uid="uid://cagfc5ridmteu"]
+
+[ext_resource type="PackedScene" uid="uid://wg25dg65ksgg" path="res://src/map/dungeon/DungeonGenerator.tscn" id="1_eapuk"]
+[ext_resource type="PackedScene" uid="uid://dhpwwqow1ahrc" path="res://src/map/dungeon/rooms/Room1.tscn" id="2_x112h"]
+[ext_resource type="Script" path="res://addons/SimpleDungeons/DungeonRoom3D.gd" id="3_614ds"]
+[ext_resource type="PackedScene" uid="uid://bn4gslp2gk8ds" path="res://src/map/dungeon/corridor/Corridor.tscn" id="4_tex41"]
+[ext_resource type="Script" path="res://src/character_controller_3d.gd" id="4_vtqs3"]
+
+[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_ult2r"]
+radius = 0.25
+height = 0.5
+
+[sub_resource type="Environment" id="Environment_3njg4"]
[node name="App" type="Node"]
+
+[node name="DungeonGenerator3D" parent="." instance=ExtResource("1_eapuk")]
+
+[node name="RoomsContainer" type="Node3D" parent="DungeonGenerator3D"]
+
+[node name="DungeonRoom3D_0" type="Node3D" parent="DungeonGenerator3D/RoomsContainer" instance=ExtResource("2_x112h")]
+transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, 35, 0, 45)
+script = ExtResource("3_614ds")
+
+[node name="DungeonRoom3D_1" type="Node3D" parent="DungeonGenerator3D/RoomsContainer" instance=ExtResource("2_x112h")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -25, 0, 35)
+script = ExtResource("3_614ds")
+
+[node name="Corridor_2" type="Node3D" parent="DungeonGenerator3D/RoomsContainer" instance=ExtResource("4_tex41")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 25, 0, 45)
+script = ExtResource("3_614ds")
+
+[node name="Corridor_3" type="Node3D" parent="DungeonGenerator3D/RoomsContainer" instance=ExtResource("4_tex41")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15, 0, 45)
+script = ExtResource("3_614ds")
+
+[node name="Corridor_4" type="Node3D" parent="DungeonGenerator3D/RoomsContainer" instance=ExtResource("4_tex41")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 0, 45)
+script = ExtResource("3_614ds")
+
+[node name="Corridor_5" type="Node3D" parent="DungeonGenerator3D/RoomsContainer" instance=ExtResource("4_tex41")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 0, 45)
+script = ExtResource("3_614ds")
+
+[node name="Corridor_6" type="Node3D" parent="DungeonGenerator3D/RoomsContainer" instance=ExtResource("4_tex41")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0, 45)
+script = ExtResource("3_614ds")
+
+[node name="Corridor_7" type="Node3D" parent="DungeonGenerator3D/RoomsContainer" instance=ExtResource("4_tex41")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -25, 0, 45)
+script = ExtResource("3_614ds")
+
+[node name="Corridor_8" type="Node3D" parent="DungeonGenerator3D/RoomsContainer" instance=ExtResource("4_tex41")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 45, 0, 45)
+script = ExtResource("3_614ds")
+
+[node name="Corridor_9" type="Node3D" parent="DungeonGenerator3D/RoomsContainer" instance=ExtResource("4_tex41")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -25, 0, 25)
+script = ExtResource("3_614ds")
+
+[node name="Corridor_10" type="Node3D" parent="DungeonGenerator3D/RoomsContainer" instance=ExtResource("4_tex41")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0, 25)
+script = ExtResource("3_614ds")
+
+[node name="Corridor_11" type="Node3D" parent="DungeonGenerator3D/RoomsContainer" instance=ExtResource("4_tex41")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 0, 25)
+script = ExtResource("3_614ds")
+
+[node name="Corridor_12" type="Node3D" parent="DungeonGenerator3D/RoomsContainer" instance=ExtResource("4_tex41")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 0, 25)
+script = ExtResource("3_614ds")
+
+[node name="Corridor_13" type="Node3D" parent="DungeonGenerator3D/RoomsContainer" instance=ExtResource("4_tex41")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 0, 35)
+script = ExtResource("3_614ds")
+
+[node name="CharacterBody3D" type="CharacterBody3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.0223, -3.8587, -16.1332)
+script = ExtResource("4_vtqs3")
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="CharacterBody3D"]
+shape = SubResource("CapsuleShape3D_ult2r")
+
+[node name="OmniLight3D" type="OmniLight3D" parent="CharacterBody3D"]
+
+[node name="Camera3D" type="Camera3D" parent="CharacterBody3D"]
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
+environment = SubResource("Environment_3njg4")
diff --git a/src/character_controller_3d.gd b/src/character_controller_3d.gd
new file mode 100644
index 00000000..854771d2
--- /dev/null
+++ b/src/character_controller_3d.gd
@@ -0,0 +1,53 @@
+extends CharacterBody3D
+
+@export var FORWARD_SPEED = 2.0
+@export var BACK_SPEED = 1.0
+@export var TURN_SPEED = 0.025
+
+var Vec3Z = Vector3.ZERO
+
+#OPTIONAL: These could be used to change sensitivity of either rotating z or y
+#var M_LOOK_SENS = 1
+#var V_LOOK_SENS = 1
+
+func _physics_process(delta: float) -> void:
+ if Input.is_action_pressed("move_forward") and Input.is_action_pressed("move_backward"):
+ velocity.x = 0
+ velocity.z = 0
+
+ elif Input.is_action_pressed("move_forward"):
+ var forwardVector = -Vector3.FORWARD.rotated(Vector3.UP, rotation.y)
+ velocity = -forwardVector * FORWARD_SPEED
+
+ elif Input.is_action_pressed("move_backward"):
+ var backwardVector = Vector3.FORWARD.rotated(Vector3.UP, rotation.y)
+ velocity = -backwardVector * BACK_SPEED
+
+ #If pressing nothing stop velocity
+ else:
+ velocity.x = 0
+ velocity.z = 0
+
+ # IF turn left WHILE moving back, turn right
+ if Input.is_action_pressed("move_left") and Input.is_action_pressed("move_backward"):
+ rotation.z -= Vec3Z.y + TURN_SPEED #* V_LOOK_SENS
+ rotation.z = clamp(rotation.x, -50, 90)
+ rotation.y -= Vec3Z.y + TURN_SPEED #* M_LOOK_SENS
+
+ elif Input.is_action_pressed("move_left"):
+ rotation.z += Vec3Z.y - TURN_SPEED #* V_LOOK_SENS
+ rotation.z = clamp(rotation.x, -50, 90)
+ rotation.y += Vec3Z.y + TURN_SPEED #* M_LOOK_SENS
+
+ # IF turn right WHILE moving back, turn left
+ if Input.is_action_pressed("move_right") and Input.is_action_pressed("move_backward"):
+ rotation.z += Vec3Z.y - TURN_SPEED #* V_LOOK_SENS
+ rotation.z = clamp(rotation.x, -50, 90)
+ rotation.y += Vec3Z.y + TURN_SPEED #* M_LOOK_SENS
+
+ elif Input.is_action_pressed("move_right"):
+ rotation.z -= Vec3Z.y + TURN_SPEED #* V_LOOK_SENS
+ rotation.z = clamp(rotation.x, -50, 90)
+ rotation.y -= Vec3Z.y + TURN_SPEED #* M_LOOK_SENS
+
+ move_and_slide()
diff --git a/src/map/dungeon/DungeonGenerator.tscn b/src/map/dungeon/DungeonGenerator.tscn
new file mode 100644
index 00000000..2ea5dd16
--- /dev/null
+++ b/src/map/dungeon/DungeonGenerator.tscn
@@ -0,0 +1,11 @@
+[gd_scene load_steps=4 format=3 uid="uid://wg25dg65ksgg"]
+
+[ext_resource type="Script" path="res://addons/SimpleDungeons/DungeonGenerator3D.gd" id="1_l4et8"]
+[ext_resource type="PackedScene" uid="uid://dhpwwqow1ahrc" path="res://src/map/dungeon/rooms/Room1.tscn" id="2_tghss"]
+[ext_resource type="PackedScene" uid="uid://bn4gslp2gk8ds" path="res://src/map/dungeon/corridor/Corridor.tscn" id="3_ujbm3"]
+
+[node name="DungeonGenerator3D" type="Node3D"]
+script = ExtResource("1_l4et8")
+room_scenes = Array[PackedScene]([ExtResource("2_tghss")])
+corridor_room_scene = ExtResource("3_ujbm3")
+dungeon_size = Vector3i(10, 1, 10)
diff --git a/src/map/dungeon/corridor/Corridor.tscn b/src/map/dungeon/corridor/Corridor.tscn
new file mode 100644
index 00000000..91a42a45
--- /dev/null
+++ b/src/map/dungeon/corridor/Corridor.tscn
@@ -0,0 +1,59 @@
+[gd_scene load_steps=12 format=3 uid="uid://bn4gslp2gk8ds"]
+
+[ext_resource type="Script" path="res://addons/SimpleDungeons/DungeonRoom3D.gd" id="1_y0rqi"]
+[ext_resource type="Texture2D" uid="uid://n4ds85jp0aq0" path="res://src/map/dungeon/textures/map_ceiling.jpg" id="2_6scux"]
+[ext_resource type="PackedScene" uid="uid://ckaw6wjmi0fom" path="res://src/map/dungeon/door/Door.tscn" id="2_vpnlr"]
+[ext_resource type="Script" path="res://src/map/dungeon/corridor/remove_unused_doors.gd" id="3_8i1ij"]
+[ext_resource type="Texture2D" uid="uid://bidlc5a6lft6" path="res://src/map/dungeon/textures/map_brickwall.jpg" id="4_6qf87"]
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nsah4"]
+transparency = 1
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_18cgv"]
+albedo_texture = ExtResource("2_6scux")
+uv1_scale = Vector3(0.23, 0.23, 0.23)
+uv1_triplanar = true
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cquyy"]
+albedo_texture = ExtResource("4_6qf87")
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_67t3u"]
+albedo_texture = ExtResource("4_6qf87")
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ej8w2"]
+albedo_texture = ExtResource("4_6qf87")
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_oy7nu"]
+albedo_texture = ExtResource("4_6qf87")
+
+[node name="Corridor" type="Node3D"]
+script = ExtResource("1_y0rqi")
+
+[node name="CSGBox3D" type="CSGBox3D" parent="."]
+use_collision = true
+size = Vector3(10, 10, 10)
+material = SubResource("StandardMaterial3D_nsah4")
+
+[node name="CSGBox3D" type="CSGBox3D" parent="CSGBox3D"]
+operation = 2
+size = Vector3(9, 9, 9)
+material = SubResource("StandardMaterial3D_18cgv")
+
+[node name="DOOR?" parent="CSGBox3D" instance=ExtResource("2_vpnlr")]
+transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -5, -3.5, 0)
+material = SubResource("StandardMaterial3D_cquyy")
+
+[node name="DOOR?3" parent="CSGBox3D" instance=ExtResource("2_vpnlr")]
+transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 5, -3.5, 0)
+material = SubResource("StandardMaterial3D_67t3u")
+
+[node name="DOOR?4" parent="CSGBox3D" instance=ExtResource("2_vpnlr")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -3.5, 5)
+material = SubResource("StandardMaterial3D_ej8w2")
+
+[node name="DOOR?2" parent="CSGBox3D" instance=ExtResource("2_vpnlr")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -3.5, -5)
+material = SubResource("StandardMaterial3D_oy7nu")
+
+[node name="RemoveUnusedDoors" type="Node" parent="."]
+script = ExtResource("3_8i1ij")
diff --git a/src/map/dungeon/corridor/remove_unused_doors.gd b/src/map/dungeon/corridor/remove_unused_doors.gd
new file mode 100644
index 00000000..959acd34
--- /dev/null
+++ b/src/map/dungeon/corridor/remove_unused_doors.gd
@@ -0,0 +1,11 @@
+extends Node
+
+
+# Called when the node enters the scene tree for the first time.
+func _ready() -> void:
+ $"..".connect("dungeon_done_generating", remove_unused_doors)
+
+func remove_unused_doors():
+ for door in $"..".get_doors():
+ if door.get_room_leads_to() == null:
+ door.door_node.queue_free()
diff --git a/src/map/dungeon/door/Door.tscn b/src/map/dungeon/door/Door.tscn
new file mode 100644
index 00000000..b3edf2fe
--- /dev/null
+++ b/src/map/dungeon/door/Door.tscn
@@ -0,0 +1,6 @@
+[gd_scene format=3 uid="uid://ckaw6wjmi0fom"]
+
+[node name="DOOR" type="CSGBox3D"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.01493, 0)
+operation = 2
+size = Vector3(2, 2, 1)
diff --git a/src/map/dungeon/rooms/Room1.tscn b/src/map/dungeon/rooms/Room1.tscn
new file mode 100644
index 00000000..d05448d8
--- /dev/null
+++ b/src/map/dungeon/rooms/Room1.tscn
@@ -0,0 +1,30 @@
+[gd_scene load_steps=5 format=3 uid="uid://dhpwwqow1ahrc"]
+
+[ext_resource type="Script" path="res://addons/SimpleDungeons/DungeonRoom3D.gd" id="1_0tfda"]
+[ext_resource type="PackedScene" uid="uid://ckaw6wjmi0fom" path="res://src/map/dungeon/door/Door.tscn" id="2_mdawx"]
+[ext_resource type="Texture2D" uid="uid://bidlc5a6lft6" path="res://src/map/dungeon/textures/map_brickwall.jpg" id="2_rw3uc"]
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_gt3ar"]
+albedo_texture = ExtResource("2_rw3uc")
+uv1_scale = Vector3(0.105, 0.105, 0.105)
+uv1_triplanar = true
+
+[node name="DungeonRoom3D" type="Node3D"]
+script = ExtResource("1_0tfda")
+
+[node name="CSGBox3D" type="CSGBox3D" parent="."]
+material_override = SubResource("StandardMaterial3D_gt3ar")
+use_collision = true
+size = Vector3(10, 10, 10)
+
+[node name="CSGBox3D2" type="CSGBox3D" parent="CSGBox3D"]
+material_override = SubResource("StandardMaterial3D_gt3ar")
+operation = 2
+use_collision = true
+size = Vector3(9, 9, 9)
+
+[node name="DOOR" parent="CSGBox3D" instance=ExtResource("2_mdawx")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -3.47376, 4.74571)
+
+[node name="DOOR2" parent="CSGBox3D" instance=ExtResource("2_mdawx")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -3.51619, -4.73548)
diff --git a/src/map/dungeon/rooms/Room2.tscn b/src/map/dungeon/rooms/Room2.tscn
new file mode 100644
index 00000000..7d531b4f
--- /dev/null
+++ b/src/map/dungeon/rooms/Room2.tscn
@@ -0,0 +1,6 @@
+[gd_scene load_steps=2 format=3 uid="uid://baddk1soq2ske"]
+
+[ext_resource type="Script" path="res://addons/SimpleDungeons/DungeonRoom3D.gd" id="1_o02dd"]
+
+[node name="DungeonRoom3D" type="Node3D"]
+script = ExtResource("1_o02dd")
diff --git a/src/map/dungeon/textures/map_brickwall.jpg b/src/map/dungeon/textures/map_brickwall.jpg
new file mode 100644
index 00000000..044b7260
Binary files /dev/null and b/src/map/dungeon/textures/map_brickwall.jpg differ
diff --git a/src/map/dungeon/textures/map_brickwall.jpg.import b/src/map/dungeon/textures/map_brickwall.jpg.import
new file mode 100644
index 00000000..e3a46275
--- /dev/null
+++ b/src/map/dungeon/textures/map_brickwall.jpg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bidlc5a6lft6"
+path.s3tc="res://.godot/imported/map_brickwall.jpg-769eb620c593a0c2aec11a51d3375aec.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://src/map/dungeon/textures/map_brickwall.jpg"
+dest_files=["res://.godot/imported/map_brickwall.jpg-769eb620c593a0c2aec11a51d3375aec.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0
diff --git a/src/map/dungeon/textures/map_ceiling.jpg b/src/map/dungeon/textures/map_ceiling.jpg
new file mode 100644
index 00000000..7eb200dd
Binary files /dev/null and b/src/map/dungeon/textures/map_ceiling.jpg differ
diff --git a/src/map/dungeon/textures/map_ceiling.jpg.import b/src/map/dungeon/textures/map_ceiling.jpg.import
new file mode 100644
index 00000000..974a7ca3
--- /dev/null
+++ b/src/map/dungeon/textures/map_ceiling.jpg.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://n4ds85jp0aq0"
+path.s3tc="res://.godot/imported/map_ceiling.jpg-206aba6e11eacf4f5f6696b3ba8e351a.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://src/map/dungeon/textures/map_ceiling.jpg"
+dest_files=["res://.godot/imported/map_ceiling.jpg-206aba6e11eacf4f5f6696b3ba8e351a.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0