-2
.gitattributes
-2
.gitattributes
-21
.gitignore
-21
.gitignore
···
1
-
# Created by https://www.toptal.com/developers/gitignore/api/godot
2
-
# Edit at https://www.toptal.com/developers/gitignore?templates=godot
3
-
4
-
### Godot ###
5
-
# Godot 4+ specific ignores
6
-
.godot/
7
-
8
-
# Godot-specific ignores
9
-
.import/
10
-
export.cfg
11
-
export_presets.cfg
12
-
13
-
# Imported translations (automatically generated from CSV files)
14
-
*.translation
15
-
16
-
# Mono-specific ignores
17
-
.mono/
18
-
data_*/
19
-
mono_crash.*.json
20
-
21
-
# End of https://www.toptal.com/developers/gitignore/api/godot
-94
CharacterMarker.tscn
-94
CharacterMarker.tscn
···
1
-
[gd_scene load_steps=6 format=3 uid="uid://ckavyyqwj6peh"]
2
-
3
-
[sub_resource type="Shader" id="Shader_5ayyv"]
4
-
code = "// NOTE: Shader automatically converted from Godot Engine 4.4.1.stable's StandardMaterial3D.
5
-
6
-
shader_type spatial;
7
-
render_mode blend_mix, depth_draw_opaque, cull_disabled, diffuse_burley, specular_schlick_ggx;
8
-
9
-
uniform vec4 albedo : source_color;
10
-
uniform sampler2D texture_albedo : source_color, filter_linear_mipmap, repeat_enable;
11
-
uniform ivec2 albedo_texture_size;
12
-
uniform float point_size : hint_range(0.1, 128.0, 0.1);
13
-
14
-
uniform float roughness : hint_range(0.0, 1.0);
15
-
uniform sampler2D texture_metallic : hint_default_white, filter_linear_mipmap, repeat_enable;
16
-
uniform vec4 metallic_texture_channel;
17
-
uniform sampler2D texture_roughness : hint_roughness_r, filter_linear_mipmap, repeat_enable;
18
-
19
-
uniform float specular : hint_range(0.0, 1.0, 0.01);
20
-
uniform float metallic : hint_range(0.0, 1.0, 0.01);
21
-
22
-
uniform sampler2D texture_emission : source_color, hint_default_black, filter_linear_mipmap, repeat_enable;
23
-
uniform vec4 emission : source_color;
24
-
uniform float emission_energy : hint_range(0.0, 100.0, 0.01);
25
-
26
-
uniform vec3 uv1_scale;
27
-
uniform vec3 uv1_offset;
28
-
uniform vec3 uv2_scale;
29
-
uniform vec3 uv2_offset;
30
-
31
-
void vertex() {
32
-
UV = UV * uv1_scale.xy + uv1_offset.xy;
33
-
float x = UV.x;
34
-
float y = UV.y;
35
-
UV.x = y;
36
-
UV.y = x;
37
-
}
38
-
39
-
void fragment() {
40
-
vec2 base_uv = UV;
41
-
42
-
vec4 albedo_tex = texture(texture_albedo, base_uv);
43
-
ALBEDO = albedo.rgb * albedo_tex.rgb;
44
-
45
-
float metallic_tex = dot(texture(texture_metallic, base_uv), metallic_texture_channel);
46
-
METALLIC = metallic_tex * metallic;
47
-
SPECULAR = specular;
48
-
49
-
vec4 roughness_texture_channel = vec4(1.0, 0.0, 0.0, 0.0);
50
-
float roughness_tex = dot(texture(texture_roughness, base_uv), roughness_texture_channel);
51
-
ROUGHNESS = roughness_tex * roughness;
52
-
53
-
// Emission: Enabled
54
-
vec3 emission_tex = texture(texture_emission, base_uv).rgb;
55
-
// Emission Operator: Add
56
-
EMISSION = (emission.rgb + emission_tex) * emission_energy;
57
-
ALPHA *= albedo.a * albedo_tex.a;
58
-
}
59
-
"
60
-
61
-
[sub_resource type="Gradient" id="Gradient_42hn3"]
62
-
colors = PackedColorArray(0, 0, 0, 0, 0, 0, 0, 1)
63
-
64
-
[sub_resource type="GradientTexture1D" id="GradientTexture1D_4runf"]
65
-
gradient = SubResource("Gradient_42hn3")
66
-
67
-
[sub_resource type="ShaderMaterial" id="ShaderMaterial_qul5y"]
68
-
render_priority = 0
69
-
shader = SubResource("Shader_5ayyv")
70
-
shader_parameter/albedo = Color(0, 0, 0, 1)
71
-
shader_parameter/texture_albedo = SubResource("GradientTexture1D_4runf")
72
-
shader_parameter/albedo_texture_size = Vector2i(256, 1)
73
-
shader_parameter/point_size = 1.0
74
-
shader_parameter/roughness = 1.0
75
-
shader_parameter/metallic_texture_channel = Vector4(1, 0, 0, 0)
76
-
shader_parameter/specular = 0.5
77
-
shader_parameter/metallic = 0.0
78
-
shader_parameter/emission = Color(0, 0, 0, 1)
79
-
shader_parameter/emission_energy = 1.0
80
-
shader_parameter/uv1_scale = Vector3(1, 1, 1)
81
-
shader_parameter/uv1_offset = Vector3(0, 0, 0)
82
-
shader_parameter/uv2_scale = Vector3(1, 1, 1)
83
-
shader_parameter/uv2_offset = Vector3(0, 0, 0)
84
-
85
-
[sub_resource type="CylinderMesh" id="CylinderMesh_qul5y"]
86
-
material = SubResource("ShaderMaterial_qul5y")
87
-
cap_top = false
88
-
cap_bottom = false
89
-
90
-
[node name="CharacterMarker" type="Node3D"]
91
-
92
-
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
93
-
transform = Transform3D(1, 0, 0, 0, 0.183774, 0, 0, 0, 1, 0, 0.189356, 0)
94
-
mesh = SubResource("CylinderMesh_qul5y")
-21
LICENSE
-21
LICENSE
···
1
-
MIT License
2
-
3
-
Copyright (c) 2024 skeetcha
4
-
5
-
Permission is hereby granted, free of charge, to any person obtaining a copy
6
-
of this software and associated documentation files (the "Software"), to deal
7
-
in the Software without restriction, including without limitation the rights
8
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
-
copies of the Software, and to permit persons to whom the Software is
10
-
furnished to do so, subject to the following conditions:
11
-
12
-
The above copyright notice and this permission notice shall be included in all
13
-
copies or substantial portions of the Software.
14
-
15
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
-
SOFTWARE.
-1
addons/.gitignore
-1
addons/.gitignore
···
1
-
*/
-181
camera/camera.gd
-181
camera/camera.gd
···
1
-
extends Node3D
2
-
3
-
@export_group("Movement variables")
4
-
@export var move_speed: float = 2.0
5
-
@export var rotate_speed: float = 2.0
6
-
@export var zoom_speed: float = 2.0
7
-
8
-
@export_group("Movement ADSR variables")
9
-
@export_subgroup("Move")
10
-
@export var attack_move_time: float = 0.2
11
-
@export var decay_move_time: float = 0.01
12
-
@export var sustain_move_percent: float = 1.0
13
-
@export var release_move_time: float = 0.2
14
-
@export_subgroup("Rotate")
15
-
@export var attack_rotate_time: float = 0.2
16
-
@export var decay_rotate_time: float = 0.01
17
-
@export var sustain_rotate_percent: float = 1.0
18
-
@export var release_rotate_time: float = 0.2
19
-
20
-
var left_right_pressed_time: float = 0.0
21
-
var left_right_released_time: float = 0.0
22
-
var up_down_pressed_time: float = 0.0
23
-
var up_down_released_time: float = 0.0
24
-
var rotate_pressed_time: float = 0.0
25
-
var rotate_released_time: float = 0.0
26
-
var move_dir: Vector3 = Vector3.ZERO
27
-
var move_direction: Vector3
28
-
var rotate_direction: float = 0.0
29
-
var zoom_percent: float = 0.5
30
-
31
-
var selected_character: GameCharacter
32
-
var character_marker: Node3D
33
-
34
-
func _physics_process(delta: float) -> void:
35
-
if Input.is_action_just_pressed("Right") or Input.is_action_just_pressed("Left"):
36
-
left_right_pressed_time = Time.get_unix_time_from_system()
37
-
left_right_released_time = -1.0
38
-
move_dir.x = Input.get_action_strength("Right") - Input.get_action_strength("Left")
39
-
40
-
if Input.is_action_just_released("Right") or Input.is_action_just_released("Left"):
41
-
left_right_released_time = Time.get_unix_time_from_system()
42
-
43
-
if Input.is_action_just_pressed("Up") or Input.is_action_just_pressed("Down"):
44
-
up_down_pressed_time = Time.get_unix_time_from_system()
45
-
up_down_released_time = -1.0
46
-
move_dir.z = Input.get_action_strength("Down") - Input.get_action_strength("Up")
47
-
48
-
if Input.is_action_just_released("Up") or Input.is_action_just_released("Down"):
49
-
up_down_released_time = Time.get_unix_time_from_system()
50
-
51
-
if Input.is_action_just_pressed("RotateLeft") or Input.is_action_just_pressed("RotateRight"):
52
-
rotate_pressed_time = Time.get_unix_time_from_system()
53
-
rotate_released_time = -1.0
54
-
55
-
if Input.is_action_just_pressed("RotateLeft"):
56
-
rotate_direction -= 1.0
57
-
58
-
if Input.is_action_just_pressed("RotateRight"):
59
-
rotate_direction += 1.0
60
-
61
-
if Input.is_action_just_released("RotateLeft") or Input.is_action_just_released("RotateRight"):
62
-
rotate_released_time = Time.get_unix_time_from_system()
63
-
64
-
move_direction = Vector3.ZERO
65
-
66
-
var left_right_adsr = adsr(attack_move_time, decay_move_time, sustain_move_percent, release_move_time, Input.is_action_pressed("Right") or Input.is_action_pressed("Left"), Time.get_unix_time_from_system(), left_right_pressed_time, left_right_released_time)
67
-
var up_down_adsr = adsr(attack_move_time, decay_move_time, sustain_move_percent, release_move_time, Input.is_action_pressed("Up") or Input.is_action_pressed("Down"), Time.get_unix_time_from_system(), up_down_pressed_time, up_down_released_time)
68
-
var rotate_adsr = adsr(attack_rotate_time, decay_rotate_time, sustain_rotate_percent, release_rotate_time, Input.is_action_pressed("RotateLeft") or Input.is_action_pressed("RotateRight"), Time.get_unix_time_from_system(), rotate_pressed_time, rotate_released_time)
69
-
70
-
move_direction.x = (Input.get_action_strength("Right") - Input.get_action_strength("Left")) * left_right_adsr
71
-
move_direction.z = (Input.get_action_strength("Down") - Input.get_action_strength("Up")) * up_down_adsr
72
-
73
-
move_direction *= move_speed
74
-
75
-
var old_rotation: float = global_rotation_degrees.y
76
-
move_direction = move_direction.rotated(Vector3.UP, deg_to_rad(old_rotation))
77
-
var changed: bool = false
78
-
79
-
if move_direction.x == 0.0:
80
-
move_direction.x = move_speed * left_right_adsr * move_dir.x
81
-
changed = true
82
-
83
-
if move_direction.x == 0.0:
84
-
move_dir.x = 0.0
85
-
86
-
if move_direction.z == 0.0:
87
-
move_direction.z = move_speed * up_down_adsr * move_dir.z
88
-
changed = true
89
-
90
-
if move_direction.z == 0.0:
91
-
move_dir.z = 0.0
92
-
93
-
if changed:
94
-
move_direction = move_direction.rotated(Vector3.UP, deg_to_rad(old_rotation))
95
-
96
-
global_translate(move_direction)
97
-
rotate(Vector3.UP, rotate_direction * rotate_speed * rotate_adsr)
98
-
99
-
if rotate_adsr == 0.0:
100
-
rotate_direction = 0.0
101
-
102
-
if Input.is_action_just_pressed("Select"):
103
-
if character_marker:
104
-
character_marker.queue_free()
105
-
106
-
var mouse_pos = get_viewport().get_mouse_position()
107
-
var from = $"Path3D/PathFollow3D/SpringArm3D/Camera3D".project_ray_origin(mouse_pos)
108
-
var to = from + $"Path3D/PathFollow3D/SpringArm3D/Camera3D".project_ray_normal(mouse_pos) * 1000.0
109
-
var space_state = get_world_3d().direct_space_state
110
-
var query = PhysicsRayQueryParameters3D.create(from, to)
111
-
var result = space_state.intersect_ray(query)
112
-
113
-
if result:
114
-
if result.collider is GameCharacter:
115
-
if selected_character:
116
-
selected_character.is_selected = false
117
-
118
-
selected_character = result.collider
119
-
selected_character.is_selected = true
120
-
else:
121
-
if selected_character:
122
-
selected_character.target_position = result.position
123
-
selected_character.state = GameCharacter.State.STATE_TARGET
124
-
character_marker = load("res://CharacterMarker.tscn").instantiate()
125
-
var marker_position: Vector3 = result.position
126
-
marker_position.y = 0.0
127
-
$"..".add_child(character_marker)
128
-
character_marker.global_scale(Vector3(0.61, 0.61, 0.61))
129
-
character_marker.global_translate(marker_position)
130
-
131
-
$Path3D/PathFollow3D.progress = zoom_percent
132
-
133
-
func _unhandled_input(event: InputEvent) -> void:
134
-
if event is InputEventMouseButton:
135
-
var emb: InputEventMouseButton = event
136
-
137
-
if emb.is_pressed():
138
-
if emb.button_index == int(MOUSE_BUTTON_WHEEL_UP):
139
-
zoom_percent = clamp(zoom_percent - (zoom_speed / 40.0), 0.0, 1.0)
140
-
141
-
if emb.button_index == int(MOUSE_BUTTON_WHEEL_DOWN):
142
-
zoom_percent = clamp(zoom_percent + (zoom_speed / 40.0), 0.0, 1.0)
143
-
144
-
func adsr(attack: float, decay: float, sustain: float, release: float, held: bool, time: float, pressed: float, released: float) -> float:
145
-
var p: float
146
-
var r: float
147
-
148
-
if (time - pressed) > 1000.0:
149
-
p = 0.0
150
-
else:
151
-
152
-
p = min(round((time - pressed) * 100) / 100, attack)
153
-
if (time - released) > 1000.0:
154
-
r = 0.0
155
-
else:
156
-
r = min(round((time - released) * 100) / 100, release)
157
-
158
-
if held:
159
-
var t = time - pressed
160
-
161
-
if t < attack:
162
-
return t / attack
163
-
elif t < (attack + decay):
164
-
var d = (t - attack) / decay
165
-
return 1.0 - d * (1.0 - sustain)
166
-
else:
167
-
return sustain
168
-
else:
169
-
if released < 0:
170
-
return 0.0
171
-
172
-
var t = time - released
173
-
174
-
if t < release:
175
-
return sustain * (1.0 - t / release)
176
-
else:
177
-
return 0.0
178
-
179
-
180
-
func _on_character_done_moving() -> void:
181
-
character_marker.queue_free()
-1
camera/camera.gd.uid
-1
camera/camera.gd.uid
···
1
-
uid://dvrq0yxv1wk2x
-30
camera/camera.tscn
-30
camera/camera.tscn
···
1
-
[gd_scene load_steps=3 format=3 uid="uid://bby3edcc724cg"]
2
-
3
-
[ext_resource type="Script" uid="uid://dvrq0yxv1wk2x" path="res://camera/camera.gd" id="1_lw1ob"]
4
-
5
-
[sub_resource type="Curve3D" id="Curve3D_lw1ob"]
6
-
_data = {
7
-
"points": PackedVector3Array(0, 0, 0, 0, -0.17, 1.015, 0, 0, 0, 0, -0.67, 0, 0, 0, 0, 0, 2.17585, 2.40763),
8
-
"tilts": PackedFloat32Array(0, 0)
9
-
}
10
-
point_count = 2
11
-
12
-
[node name="Camera" type="Node3D"]
13
-
script = ExtResource("1_lw1ob")
14
-
move_speed = 0.5
15
-
rotate_speed = 1.0
16
-
attack_move_time = 0.5
17
-
release_move_time = 0.5
18
-
19
-
[node name="Path3D" type="Path3D" parent="."]
20
-
curve = SubResource("Curve3D_lw1ob")
21
-
22
-
[node name="PathFollow3D" type="PathFollow3D" parent="Path3D"]
23
-
transform = Transform3D(-1, 1.44411e-08, -8.62217e-08, 0, 0.986261, 0.165187, 8.74228e-08, 0.165187, -0.986261, 0, 0, 0)
24
-
25
-
[node name="SpringArm3D" type="SpringArm3D" parent="Path3D/PathFollow3D"]
26
-
transform = Transform3D(-1, 0, 8.74228e-08, 1.44411e-08, 0.986262, 0.165187, -8.62218e-08, 0.165187, -0.986262, 9.5144e-08, 0.179776, -1.07337)
27
-
spring_length = 1.9
28
-
margin = 0.04
29
-
30
-
[node name="Camera3D" type="Camera3D" parent="Path3D/PathFollow3D/SpringArm3D"]
+2
characters/character_material.tres
+2
characters/character_material.tres
-126
dungeon.gd
-126
dungeon.gd
···
1
-
class_name Dungeon
2
-
3
-
extends Node
4
-
5
-
@export var grid: PackedByteArray = []
6
-
@export var width: int = 6
7
-
@export var height: int = 6
8
-
@export var entrance: int = -1
9
-
@export var init: bool = false
10
-
@export var currentRoom: int = -1
11
-
12
-
const BitUsedRoom: int = 0x01
13
-
const BitEntrance: int = 0x02
14
-
const BitDoorNorth: int = 0x04
15
-
const BitDoorEast: int = 0x08
16
-
const BitDoorSouth: int = 0x10
17
-
const BitDoorWest: int = 0x20
18
-
const BitStairBelow: int = 0x40
19
-
const BitStairUp: int = 0x80
20
-
21
-
const Neighbors: int = BitDoorNorth | BitDoorEast | BitDoorSouth | BitDoorWest
22
-
23
-
var rng: RandomNumberGenerator = RandomNumberGenerator.new()
24
-
25
-
func _ready() -> void:
26
-
if init:
27
-
generate()
28
-
currentRoom = entrance
29
-
var nextScene: Node3D = preload("res://dungeonRoom/dungeonRoom.tscn").instantiate()
30
-
get_node("/root/Main").call_deferred("add_child", nextScene)
31
-
32
-
func fillArray(r: Array, size: int):
33
-
for i in range(size):
34
-
r.append(0)
35
-
36
-
func fillByteArray(r: PackedByteArray, size: int):
37
-
for i in range(size):
38
-
r.append(0)
39
-
40
-
func generate():
41
-
var dungeonArea: int = width * height
42
-
fillByteArray(grid, dungeonArea)
43
-
var generatedCellsNum: int = 0
44
-
var generatedCells: Array[int]
45
-
fillArray(generatedCells, dungeonArea)
46
-
var i = 0
47
-
48
-
while ((generatedCellsNum < dungeonArea) and ((i == 0) or (i < generatedCellsNum))):
49
-
if (i == 0) and (generatedCellsNum == 0):
50
-
entrance = rng.randi_range(0, dungeonArea - 1)
51
-
generatedCells[0] = entrance
52
-
grid[entrance] = BitEntrance | BitUsedRoom
53
-
generatedCellsNum = 1
54
-
55
-
var generatedCellsRef: Array[int] = [generatedCellsNum]
56
-
generateRoom(i, generatedCells, generatedCellsRef)
57
-
generatedCellsNum = generatedCellsRef[0]
58
-
59
-
if !(grid[generatedCells[i]] & BitUsedRoom):
60
-
grid[generatedCells[i]] |= BitUsedRoom
61
-
62
-
if (i == (generatedCellsNum - 1)) and (generatedCellsNum < (dungeonArea * 0.75)):
63
-
i = -1
64
-
65
-
i += 1
66
-
67
-
func generateRoom(cellIndexQueue: int, cellsQueue: Array[int], queueSize: Array[int]) -> void:
68
-
var potentialDoors: int = rng.randi_range(0, Neighbors - 1)
69
-
var cellIndex: int = cellsQueue[cellIndexQueue]
70
-
71
-
var door: int = 1
72
-
var oppositeDoor: int
73
-
74
-
while door <= Neighbors:
75
-
if ((door & Neighbors) != door) or (grid[cellIndex] & door):
76
-
door <<= 1
77
-
continue
78
-
79
-
var neighborRoom: int = getNeighborRoomIndex(cellIndex, door)
80
-
81
-
if (!~neighborRoom) or (grid[neighborRoom] & BitUsedRoom):
82
-
door <<= 1
83
-
continue
84
-
85
-
oppositeDoor = getOppositeDirectionBit(door)
86
-
87
-
if (door & potentialDoors) == door:
88
-
grid[cellIndex] |= door
89
-
grid[neighborRoom] |= oppositeDoor
90
-
91
-
if grid[neighborRoom] == oppositeDoor:
92
-
cellsQueue[queueSize[0]] = neighborRoom
93
-
queueSize[0] += 1
94
-
95
-
door <<= 1
96
-
97
-
func getNeighborRoomIndex(currRoom: int, direction: int) -> int:
98
-
var neighborRoom: int
99
-
100
-
if direction == BitDoorNorth:
101
-
neighborRoom = currRoom - width
102
-
elif direction == BitDoorEast:
103
-
neighborRoom = currRoom + 1
104
-
elif direction == BitDoorSouth:
105
-
neighborRoom = currRoom + width
106
-
elif direction == BitDoorWest:
107
-
neighborRoom = currRoom - 1
108
-
109
-
if ((direction == BitDoorNorth) and (neighborRoom >= 0)) or ((direction == BitDoorSouth) and (neighborRoom < (width * height))) or ((direction == BitDoorEast) and ((neighborRoom % width) > 0)) or ((direction == BitDoorWest) and ((neighborRoom % width) < (width - 1))):
110
-
return neighborRoom
111
-
112
-
return -1
113
-
114
-
func getOppositeDirectionBit(direction: int) -> int:
115
-
var oppositeDirection: int = -1
116
-
117
-
if direction == BitDoorNorth:
118
-
oppositeDirection = BitDoorSouth
119
-
elif direction == BitDoorEast:
120
-
oppositeDirection = BitDoorWest
121
-
elif direction == BitDoorSouth:
122
-
oppositeDirection = BitDoorNorth
123
-
elif direction == BitDoorWest:
124
-
oppositeDirection = BitDoorEast
125
-
126
-
return oppositeDirection
-1
dungeon.gd.uid
-1
dungeon.gd.uid
···
1
-
uid://bj1iov1sgi7bo
-1
icon.svg
-1
icon.svg
···
1
-
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><rect width="124" height="124" x="2" y="2" fill="#363d52" stroke="#212532" stroke-width="4" rx="14"/><g fill="#fff" transform="translate(12.322 12.322)scale(.101)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(12.322 12.322)scale(.101)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>
-37
icon.svg.import
-37
icon.svg.import
···
1
-
[remap]
2
-
3
-
importer="texture"
4
-
type="CompressedTexture2D"
5
-
uid="uid://c3gihvabedr76"
6
-
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
7
-
metadata={
8
-
"vram_texture": false
9
-
}
10
-
11
-
[deps]
12
-
13
-
source_file="res://icon.svg"
14
-
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
15
-
16
-
[params]
17
-
18
-
compress/mode=0
19
-
compress/high_quality=false
20
-
compress/lossy_quality=0.7
21
-
compress/hdr_compression=1
22
-
compress/normal_map=0
23
-
compress/channel_pack=0
24
-
mipmaps/generate=false
25
-
mipmaps/limit=-1
26
-
roughness/mode=0
27
-
roughness/src_normal=""
28
-
process/fix_alpha_border=true
29
-
process/premult_alpha=false
30
-
process/normal_map_invert_y=false
31
-
process/hdr_as_srgb=false
32
-
process/hdr_clamp_exposure=false
33
-
process/size_limit=0
34
-
detect_3d/compress_to=1
35
-
svg/scale=1.0
36
-
editor/scale_with_editor_scale=false
37
-
editor/convert_colors_with_editor_theme=false
-113
project.godot
-113
project.godot
···
1
-
; Engine configuration file.
2
-
; It's best edited using the editor UI and not directly,
3
-
; since the parameters that go here are not all obvious.
4
-
;
5
-
; Format:
6
-
; [section] ; section goes between []
7
-
; param=value ; assign values to parameters
8
-
9
-
config_version=5
10
-
11
-
[application]
12
-
13
-
config/name="Pathdelver"
14
-
run/main_scene="uid://dk700xxolt8x6"
15
-
config/features=PackedStringArray("4.4", "Forward Plus")
16
-
config/icon="res://icon.svg"
17
-
18
-
[autoload]
19
-
20
-
dungeon="*res://dungeon.gd"
21
-
22
-
[editor]
23
-
24
-
version_control/plugin_name="GitPlugin"
25
-
version_control/autoload_on_startup=true
26
-
27
-
[filesystem]
28
-
29
-
import/blender/enabled=false
30
-
31
-
[input]
32
-
33
-
ui_left={
34
-
"deadzone": 0.5,
35
-
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
36
-
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
37
-
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
38
-
, 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)
39
-
]
40
-
}
41
-
ui_right={
42
-
"deadzone": 0.5,
43
-
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194321,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
44
-
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
45
-
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
46
-
, 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)
47
-
]
48
-
}
49
-
ui_up={
50
-
"deadzone": 0.5,
51
-
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194320,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
52
-
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
53
-
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
54
-
, 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)
55
-
]
56
-
}
57
-
ui_down={
58
-
"deadzone": 0.5,
59
-
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194322,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
60
-
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
61
-
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
62
-
, 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)
63
-
]
64
-
}
65
-
Left={
66
-
"deadzone": 0.2,
67
-
"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)
68
-
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
69
-
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null)
70
-
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
71
-
]
72
-
}
73
-
Right={
74
-
"deadzone": 0.2,
75
-
"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)
76
-
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
77
-
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
78
-
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
79
-
]
80
-
}
81
-
Up={
82
-
"deadzone": 0.2,
83
-
"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)
84
-
, 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":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
85
-
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":-1.0,"script":null)
86
-
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
87
-
]
88
-
}
89
-
Down={
90
-
"deadzone": 0.2,
91
-
"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)
92
-
, 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":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
93
-
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":1.0,"script":null)
94
-
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
95
-
]
96
-
}
97
-
RotateLeft={
98
-
"deadzone": 0.2,
99
-
"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":81,"key_label":0,"unicode":113,"location":0,"echo":false,"script":null)
100
-
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":9,"pressure":0.0,"pressed":false,"script":null)
101
-
]
102
-
}
103
-
RotateRight={
104
-
"deadzone": 0.2,
105
-
"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)
106
-
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":10,"pressure":0.0,"pressed":false,"script":null)
107
-
]
108
-
}
109
-
Select={
110
-
"deadzone": 0.2,
111
-
"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":1,"position":Vector2(114, 33),"global_position":Vector2(128, 106),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
112
-
]
113
-
}
-10
start/start.gd
-10
start/start.gd
-1
start/start.gd.uid
-1
start/start.gd.uid
···
1
-
uid://drdqx5u4ful3g
-42
start/start.tscn
-42
start/start.tscn
···
1
-
[gd_scene load_steps=2 format=3 uid="uid://dk700xxolt8x6"]
2
-
3
-
[ext_resource type="Script" uid="uid://drdqx5u4ful3g" path="res://start/start.gd" id="1_hdi1w"]
4
-
5
-
[node name="Main" type="Control"]
6
-
layout_mode = 3
7
-
anchors_preset = 15
8
-
anchor_right = 1.0
9
-
anchor_bottom = 1.0
10
-
grow_horizontal = 2
11
-
grow_vertical = 2
12
-
script = ExtResource("1_hdi1w")
13
-
14
-
[node name="Title" type="Label" parent="."]
15
-
layout_mode = 1
16
-
anchors_preset = -1
17
-
anchor_top = 0.285
18
-
anchor_right = 1.0
19
-
anchor_bottom = 0.32
20
-
text = "Dungeoner"
21
-
horizontal_alignment = 1
22
-
23
-
[node name="New Game" type="Button" parent="."]
24
-
layout_mode = 1
25
-
anchors_preset = -1
26
-
anchor_left = 0.232
27
-
anchor_top = 0.345
28
-
anchor_right = 0.768
29
-
anchor_bottom = 0.393
30
-
text = "New Game"
31
-
32
-
[node name="Quit" type="Button" parent="."]
33
-
layout_mode = 1
34
-
anchors_preset = -1
35
-
anchor_left = 0.232
36
-
anchor_top = 0.418
37
-
anchor_right = 0.768
38
-
anchor_bottom = 0.418
39
-
text = "Quit"
40
-
41
-
[connection signal="pressed" from="New Game" to="." method="_on_new_game_pressed"]
42
-
[connection signal="pressed" from="Quit" to="." method="_on_quit_pressed"]