diff --git a/Assets/Materials/blue_floor.tres b/Assets/Materials/blue_floor.tres new file mode 100644 index 0000000..b04998f --- /dev/null +++ b/Assets/Materials/blue_floor.tres @@ -0,0 +1,14 @@ +[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bsgjssu608suc"] + +[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_78k07"] +load_path = "res://.godot/imported/stone_2_gray_0.png-9d16a4858afb7acd70485069983b75ce.s3tc.ctex" + +[resource] +albedo_color = Color(0, 0.678431, 1, 1) +albedo_texture = SubResource("CompressedTexture2D_78k07") +emission = Color(1, 1, 1, 1) +subsurf_scatter_strength = 1.0 +uv1_scale = Vector3(3, 2, 1) +uv1_triplanar_sharpness = 0.0583145 +uv2_triplanar_sharpness = 0.170755 +texture_filter = 0 diff --git a/Assets/Materials/light_blue_floor.tres b/Assets/Materials/light_blue_floor.tres new file mode 100644 index 0000000..6fb8e46 --- /dev/null +++ b/Assets/Materials/light_blue_floor.tres @@ -0,0 +1,14 @@ +[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://drp1q1n60kafj"] + +[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_78k07"] +load_path = "res://.godot/imported/stone_2_gray_0.png-9d16a4858afb7acd70485069983b75ce.s3tc.ctex" + +[resource] +albedo_color = Color(0, 0.969035, 0.99025, 1) +albedo_texture = SubResource("CompressedTexture2D_78k07") +emission = Color(1, 1, 1, 1) +subsurf_scatter_strength = 1.0 +uv1_scale = Vector3(3, 2, 1) +uv1_triplanar_sharpness = 0.0583145 +uv2_triplanar_sharpness = 0.170755 +texture_filter = 0 diff --git a/Assets/Materials/purple_floor.tres b/Assets/Materials/purple_floor.tres new file mode 100644 index 0000000..9610c61 --- /dev/null +++ b/Assets/Materials/purple_floor.tres @@ -0,0 +1,14 @@ +[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://cbjq7ypah8w8a"] + +[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_78k07"] +load_path = "res://.godot/imported/stone_2_gray_0.png-9d16a4858afb7acd70485069983b75ce.s3tc.ctex" + +[resource] +albedo_color = Color(0.684786, 0.470211, 1, 1) +albedo_texture = SubResource("CompressedTexture2D_78k07") +emission = Color(1, 1, 1, 1) +subsurf_scatter_strength = 1.0 +uv1_scale = Vector3(3, 2, 1) +uv1_triplanar_sharpness = 0.0583145 +uv2_triplanar_sharpness = 0.170755 +texture_filter = 0 diff --git a/Assets/Materials/red_floor.tres b/Assets/Materials/red_floor.tres new file mode 100644 index 0000000..8d9802b --- /dev/null +++ b/Assets/Materials/red_floor.tres @@ -0,0 +1,14 @@ +[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://uprvwy7c55in"] + +[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_78k07"] +load_path = "res://.godot/imported/stone_2_gray_0.png-9d16a4858afb7acd70485069983b75ce.s3tc.ctex" + +[resource] +albedo_color = Color(1, 0.124572, 0.0864943, 1) +albedo_texture = SubResource("CompressedTexture2D_78k07") +emission = Color(1, 1, 1, 1) +subsurf_scatter_strength = 1.0 +uv1_scale = Vector3(3, 2, 1) +uv1_triplanar_sharpness = 0.0583145 +uv2_triplanar_sharpness = 0.170755 +texture_filter = 0 diff --git a/Levels/StartingRoom.tscn b/Levels/StartingRoom.tscn index 72a85cb..bb2f0fb 100644 --- a/Levels/StartingRoom.tscn +++ b/Levels/StartingRoom.tscn @@ -1,12 +1,16 @@ -[gd_scene load_steps=25 format=3 uid="uid://bojbawyoy11i4"] +[gd_scene load_steps=29 format=3 uid="uid://bojbawyoy11i4"] [ext_resource type="Script" uid="uid://byqcpfg6cmusc" path="res://Scripts/ChronoManager.gd" id="1_5b2rd"] [ext_resource type="Material" uid="uid://cr4ra7ijk1uec" path="res://Assets/Materials/floor.tres" id="2_0aj3l"] [ext_resource type="PackedScene" uid="uid://d34smep2ukq7w" path="res://player.tscn" id="2_hsi55"] [ext_resource type="PackedScene" uid="uid://bnlexkofp68gv" path="res://gui.tscn" id="3_60lfp"] [ext_resource type="Material" uid="uid://didvwdmm46bmq" path="res://Assets/Materials/green_floor.tres" id="3_mnhg8"] +[ext_resource type="Material" uid="uid://drp1q1n60kafj" path="res://Assets/Materials/light_blue_floor.tres" id="4_w835j"] [ext_resource type="MeshLibrary" uid="uid://cymdsgto88uty" path="res://meshLib.tres" id="5_2x8rh"] [ext_resource type="PackedScene" uid="uid://dqvq4ybcpws87" path="res://Commands/command_block.tscn" id="5_81jk1"] +[ext_resource type="Material" uid="uid://bsgjssu608suc" path="res://Assets/Materials/blue_floor.tres" id="5_cl7gu"] +[ext_resource type="Material" uid="uid://cbjq7ypah8w8a" path="res://Assets/Materials/purple_floor.tres" id="6_v2g4n"] +[ext_resource type="Material" uid="uid://uprvwy7c55in" path="res://Assets/Materials/red_floor.tres" id="7_kt6ss"] [ext_resource type="Texture2D" uid="uid://vc7wwv4wgabf" path="res://Commands/jump.png" id="10_pecm3"] [ext_resource type="PackedScene" uid="uid://cq4rfdsc5kghr" path="res://Commands/command_pedestal.tscn" id="10_sghta"] [ext_resource type="Texture2D" uid="uid://cxljjpwweuds0" path="res://Commands/phase_shift_new.png" id="11_82hoi"] @@ -66,6 +70,7 @@ size = Vector3(1, 2, 1) script = ExtResource("1_5b2rd") pedestal_off_mat = ExtResource("2_0aj3l") pedestal_on_mat = ExtResource("3_mnhg8") +pedestal_activated_cols = Array[Material]([ExtResource("4_w835j"), ExtResource("4_w835j"), ExtResource("4_w835j"), ExtResource("4_w835j"), ExtResource("4_w835j"), ExtResource("5_cl7gu"), ExtResource("5_cl7gu"), ExtResource("5_cl7gu"), ExtResource("6_v2g4n"), ExtResource("7_kt6ss")]) gui = NodePath("Gui") pedstalContainer = NodePath("Pedestals") chime_player = NodePath("AudioStreamPlayer") @@ -206,6 +211,7 @@ mesh = SubResource("CylinderMesh_vrcmc") [node name="MenuButton" type="Area3D" parent="."] transform = Transform3D(4.37114e-08, 1, 8.74228e-08, 1, -4.37114e-08, 0, 3.82138e-15, 8.74228e-08, -1, 5, 2.5, -1.5) +visible = false [node name="CollisionShape3D" type="CollisionShape3D" parent="MenuButton"] shape = SubResource("ConcavePolygonShape3D_jchw8") @@ -238,6 +244,7 @@ shape = SubResource("BoxShape3D_jvb5m") [node name="Sign" parent="." instance=ExtResource("14_m7cxt")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 1.5, -1.5) +visible = false sign_text = "Back to Menu" [node name="doorSound" type="AudioStreamPlayer" parent="."] diff --git a/README.md b/README.md index 5091714..33ec2fc 100644 --- a/README.md +++ b/README.md @@ -9,16 +9,16 @@ https://freesound.org/people/primeval_polypod/sounds/156507/ # new TODO - [x] when command blocks are propped they are placed as a root node, causing them to carry between rooms -- [ ] onscreen timer -- [ ] pedestal highlight should match clock +- [x] onscreen timer +- [x] pedestal highlight should match clock - [ ] improve menu - [ ] swap out to developer name - [ ] make it a 3d environment with a rotating camera - [ ] make kill zones check every frame, rather than just on entry - [ ] increment version number -- [ ] pause menu on ESC - - [ ] replace back to menu button - - [ ] volume settings? +- [x] pause menu on ESC + - [x] replace back to menu button + - [x] volume settings? - [ ] website splash page for SMASH # old todo diff --git a/Scripts/ChronoManager.gd b/Scripts/ChronoManager.gd index a6a8550..6c96b92 100644 --- a/Scripts/ChronoManager.gd +++ b/Scripts/ChronoManager.gd @@ -20,6 +20,7 @@ var door_timer : float = 0 @export_group("Resources") @export var pedestal_off_mat : Material @export var pedestal_on_mat : Material +@export var pedestal_activated_cols : Array[Material] @export_group("Node References") @export var gui : Control @@ -57,8 +58,8 @@ func _process(delta): #if Input.is_action_just_pressed("debug_start"): #start_room() - if Input.is_action_just_pressed("interact"): - Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + #if Input.is_action_just_pressed("interact"): + #Input.mouse_mode = Input.MOUSE_MODE_CAPTURED if Input.is_action_just_pressed("reset"): gui.show_lose_screen("Reset Pressed", 2) @@ -81,7 +82,8 @@ func _process(delta): for i in pedestals.size(): if i+1 == current_tick: var activated_pedestal = pedestals[i] - activated_pedestal.mesh.mesh.material = pedestal_on_mat + #activated_pedestal.mesh.mesh.material = pedestal_on_mat + activated_pedestal.mesh.mesh.material = pedestal_activated_cols[i] if activated_pedestal.has_command: print("broadcasting: " + activated_pedestal.placed_command.command_name) broadcast.emit(activated_pedestal.placed_command.command_name) @@ -190,3 +192,8 @@ func _player_area_entered(area : Area3D): if not player.collider.disabled: fail_room() gui.show_lose_screen("Touched a reset block", 2) + +func pause(): + Input.mouse_mode = Input.MOUSE_MODE_VISIBLE + gui.open_pause() + process_mode = Node.PROCESS_MODE_DISABLED diff --git a/Scripts/Player.gd b/Scripts/Player.gd index 3d75e93..4a56610 100644 --- a/Scripts/Player.gd +++ b/Scripts/Player.gd @@ -39,10 +39,11 @@ func _physics_process(delta): #free the mouse for debugging if Input.is_action_just_pressed("esc"): - if (Input.mouse_mode == Input.MOUSE_MODE_CAPTURED): - Input.mouse_mode = Input.MOUSE_MODE_VISIBLE - else: - Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + #if (Input.mouse_mode == Input.MOUSE_MODE_CAPTURED): + #Input.mouse_mode = Input.MOUSE_MODE_VISIBLE + #else: + #Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + get_parent().pause() # interact with stuff if Input.is_action_just_pressed("drop"): diff --git a/Scripts/gui.gd b/Scripts/gui.gd index 8643acf..e96a916 100644 --- a/Scripts/gui.gd +++ b/Scripts/gui.gd @@ -8,12 +8,17 @@ extends Control @export var level_title : Label @export var clock_progress : TextureProgressBar @export var clock_label : Label +@export var volume_slider : HSlider +@export var level_name : Label +@export var pause_menu : MarginContainer var title_fade : float = 2.5 +var sound = AudioServer.get_bus_index("Master") # Called when the node enters the scene tree for the first time. func _ready(): lose_panel.visible = false + volume_slider.value = db_to_linear(AudioServer.get_bus_volume_db(sound)) pass # Replace with function body. @@ -37,6 +42,7 @@ func hide_lose_screen(): func show_level_title(title : String): level_title.text = title + level_name.text = title title_fade = 2 func onTick(tick : int): @@ -45,3 +51,20 @@ func onTick(tick : int): clock_label.text = str(10) else: clock_label.text = str(tick) + +func open_pause(): + pause_menu.show() + +func close_pause(): + Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + pause_menu.hide() + get_parent().process_mode = Node.PROCESS_MODE_INHERIT + + +func goto_menu(): + get_tree().change_scene_to_file(GameManager.menu_scene_path) + + +func _on_h_slider_value_changed(value: float) -> void: + AudioServer.set_bus_volume_db(sound, linear_to_db(value)) + diff --git a/gui.tscn b/gui.tscn index 5767cfb..ad0ba54 100644 --- a/gui.tscn +++ b/gui.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=9 format=3 uid="uid://bnlexkofp68gv"] +[gd_scene load_steps=11 format=3 uid="uid://bnlexkofp68gv"] [ext_resource type="Script" uid="uid://co8tfbsod875o" path="res://Scripts/gui.gd" id="1_7s0l7"] [ext_resource type="Texture2D" uid="uid://buafet16thf3p" path="res://Assets/crosshair.png" id="1_mpwvh"] @@ -21,7 +21,13 @@ font_color = Color(0.686086, 0.00014728, 0.612691, 1) outline_size = 8 outline_color = Color(0.658824, 1, 1, 1) -[node name="Gui" type="Control" node_paths=PackedStringArray("lose_panel", "lose_label", "reset_label", "start_level", "level_title", "clock_progress", "clock_label")] +[sub_resource type="LabelSettings" id="LabelSettings_u77ya"] +font_size = 61 + +[sub_resource type="LabelSettings" id="LabelSettings_jf511"] +font_size = 26 + +[node name="Gui" type="Control" node_paths=PackedStringArray("lose_panel", "lose_label", "reset_label", "start_level", "level_title", "clock_progress", "clock_label", "volume_slider", "level_name", "pause_menu")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -29,13 +35,16 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_7s0l7") -lose_panel = NodePath("MarginContainer/PanelContainer") -lose_label = NodePath("MarginContainer/PanelContainer/VBoxContainer/LoseText") -reset_label = NodePath("MarginContainer/PanelContainer/VBoxContainer/LoseTimer") -start_level = NodePath("MarginContainer/StartPanel") -level_title = NodePath("MarginContainer/StartPanel/VBoxContainer/LevelTitle") +lose_panel = NodePath("starting and game over/PanelContainer") +lose_label = NodePath("starting and game over/PanelContainer/VBoxContainer/LoseText") +reset_label = NodePath("starting and game over/PanelContainer/VBoxContainer/LoseTimer") +start_level = NodePath("starting and game over/StartPanel") +level_title = NodePath("starting and game over/StartPanel/VBoxContainer/LevelTitle") clock_progress = NodePath("ClockProgress") clock_label = NodePath("ClockProgress/CenterContainer/Label") +volume_slider = NodePath("PauseMenu/PanelContainer/VBoxContainer/HBoxContainer/HSlider") +level_name = NodePath("PauseMenu/PanelContainer/VBoxContainer/Level Name") +pause_menu = NodePath("PauseMenu") [node name="Label" type="Label" parent="."] visible = false @@ -60,7 +69,7 @@ layout_mode = 2 texture = ExtResource("1_mpwvh") expand_mode = 1 -[node name="MarginContainer" type="MarginContainer" parent="."] +[node name="starting and game over" type="MarginContainer" parent="."] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -72,33 +81,33 @@ theme_override_constants/margin_top = 150 theme_override_constants/margin_right = 200 theme_override_constants/margin_bottom = 150 -[node name="StartPanel" type="PanelContainer" parent="MarginContainer"] +[node name="StartPanel" type="PanelContainer" parent="starting and game over"] layout_mode = 2 -[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/StartPanel"] +[node name="VBoxContainer" type="VBoxContainer" parent="starting and game over/StartPanel"] layout_mode = 2 alignment = 1 -[node name="LevelTitle" type="Label" parent="MarginContainer/StartPanel/VBoxContainer"] +[node name="LevelTitle" type="Label" parent="starting and game over/StartPanel/VBoxContainer"] layout_mode = 2 text = "Level Failed" label_settings = SubResource("LabelSettings_v7sqr") horizontal_alignment = 1 -[node name="PanelContainer" type="PanelContainer" parent="MarginContainer"] +[node name="PanelContainer" type="PanelContainer" parent="starting and game over"] layout_mode = 2 -[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/PanelContainer"] +[node name="VBoxContainer" type="VBoxContainer" parent="starting and game over/PanelContainer"] layout_mode = 2 alignment = 1 -[node name="LoseText" type="Label" parent="MarginContainer/PanelContainer/VBoxContainer"] +[node name="LoseText" type="Label" parent="starting and game over/PanelContainer/VBoxContainer"] layout_mode = 2 text = "Level Failed" label_settings = SubResource("LabelSettings_v7sqr") horizontal_alignment = 1 -[node name="LoseTimer" type="Label" parent="MarginContainer/PanelContainer/VBoxContainer"] +[node name="LoseTimer" type="Label" parent="starting and game over/PanelContainer/VBoxContainer"] layout_mode = 2 text = "Resetting in: 3.0" label_settings = SubResource("LabelSettings_rdkfa") @@ -127,3 +136,73 @@ offset_bottom = 63.5 layout_mode = 2 text = "0" label_settings = SubResource("LabelSettings_cor1f") + +[node name="PauseMenu" type="MarginContainer" parent="."] +process_mode = 3 +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 170 +theme_override_constants/margin_top = 100 +theme_override_constants/margin_right = 170 +theme_override_constants/margin_bottom = 100 + +[node name="PanelContainer" type="PanelContainer" parent="PauseMenu"] +layout_mode = 2 +size_flags_vertical = 4 + +[node name="VBoxContainer" type="VBoxContainer" parent="PauseMenu/PanelContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="PauseMenu/PanelContainer/VBoxContainer"] +layout_mode = 2 +text = "Paused" +label_settings = SubResource("LabelSettings_u77ya") +horizontal_alignment = 1 + +[node name="Level Name" type="Label" parent="PauseMenu/PanelContainer/VBoxContainer"] +layout_mode = 2 +text = "Current Level:" +horizontal_alignment = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="PauseMenu/PanelContainer/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="PauseMenu/PanelContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Volume" +label_settings = SubResource("LabelSettings_jf511") +horizontal_alignment = 1 + +[node name="HSlider" type="HSlider" parent="PauseMenu/PanelContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 1 +max_value = 2.0 +step = 0.0 + +[node name="HBoxContainer2" type="HBoxContainer" parent="PauseMenu/PanelContainer/VBoxContainer"] +layout_mode = 2 + +[node name="MenuButton" type="Button" parent="PauseMenu/PanelContainer/VBoxContainer/HBoxContainer2"] +modulate = Color(1, 0, 0, 1) +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_font_sizes/font_size = 26 +text = "Back to Menu" + +[node name="ResumeButton" type="Button" parent="PauseMenu/PanelContainer/VBoxContainer/HBoxContainer2"] +modulate = Color(0, 1, 0, 1) +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_font_sizes/font_size = 26 +text = "Resume" + +[connection signal="value_changed" from="PauseMenu/PanelContainer/VBoxContainer/HBoxContainer/HSlider" to="." method="_on_h_slider_value_changed"] +[connection signal="pressed" from="PauseMenu/PanelContainer/VBoxContainer/HBoxContainer2/MenuButton" to="." method="goto_menu"] +[connection signal="pressed" from="PauseMenu/PanelContainer/VBoxContainer/HBoxContainer2/ResumeButton" to="." method="close_pause"] diff --git a/menu.tscn b/menu.tscn index 99a3e02..39e4f7d 100644 --- a/menu.tscn +++ b/menu.tscn @@ -45,7 +45,7 @@ horizontal_alignment = 1 [node name="Credit" type="Label" parent="MarginContainer/VBoxContainer"] layout_mode = 2 -text = "by Tom Howarth" +text = "by Tabby :3" horizontal_alignment = 1 [node name="PanelContainer" type="PanelContainer" parent="MarginContainer/VBoxContainer"]