commit 5d8452c70d6be40c4c9518c95ba8e670f9eb881d Author: Bo Thompson Date: Thu Dec 4 11:13:48 2025 -0500 First commit diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f28239b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 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..49ed20e --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +# Godot 4+ specific ignores +.godot/ +/android/ +/audio/music/ \ No newline at end of file diff --git a/ASTERA v2.ttf b/ASTERA v2.ttf new file mode 100644 index 0000000..8f3ed15 Binary files /dev/null and b/ASTERA v2.ttf differ diff --git a/ASTERA v2.ttf.import b/ASTERA v2.ttf.import new file mode 100644 index 0000000..4876d25 --- /dev/null +++ b/ASTERA v2.ttf.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://c83fwpdo5bu8j" +path="res://.godot/imported/ASTERA v2.ttf-875ae7bdf06d3fa0de10fc25386b1f10.fontdata" + +[deps] + +source_file="res://ASTERA v2.ttf" +dest_files=["res://.godot/imported/ASTERA v2.ttf-875ae7bdf06d3fa0de10fc25386b1f10.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +modulate_color_glyphs=false +hinting=1 +subpixel_positioning=4 +keep_rounding_remainders=true +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/audio/sounds/BUTTON Generic Metal Medium High Mechanics 02.wav b/audio/sounds/BUTTON Generic Metal Medium High Mechanics 02.wav new file mode 100644 index 0000000..39e4455 Binary files /dev/null and b/audio/sounds/BUTTON Generic Metal Medium High Mechanics 02.wav differ diff --git a/audio/sounds/BUTTON Generic Metal Medium High Mechanics 02.wav.import b/audio/sounds/BUTTON Generic Metal Medium High Mechanics 02.wav.import new file mode 100644 index 0000000..1b754b8 --- /dev/null +++ b/audio/sounds/BUTTON Generic Metal Medium High Mechanics 02.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://kj25hej55ckw" +path="res://.godot/imported/BUTTON Generic Metal Medium High Mechanics 02.wav-72e6e0adcf2b99d877e88bca68e86942.sample" + +[deps] + +source_file="res://audio/sounds/BUTTON Generic Metal Medium High Mechanics 02.wav" +dest_files=["res://.godot/imported/BUTTON Generic Metal Medium High Mechanics 02.wav-72e6e0adcf2b99d877e88bca68e86942.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/audio/sounds/BeepBeep_high.wav b/audio/sounds/BeepBeep_high.wav new file mode 100644 index 0000000..9236483 Binary files /dev/null and b/audio/sounds/BeepBeep_high.wav differ diff --git a/audio/sounds/BeepBeep_high.wav.import b/audio/sounds/BeepBeep_high.wav.import new file mode 100644 index 0000000..dd31b8e --- /dev/null +++ b/audio/sounds/BeepBeep_high.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cmnibhyxpag0a" +path="res://.godot/imported/BeepBeep_high.wav-fa7e0ffacf5612ac8b4a049018bca0f6.sample" + +[deps] + +source_file="res://audio/sounds/BeepBeep_high.wav" +dest_files=["res://.godot/imported/BeepBeep_high.wav-fa7e0ffacf5612ac8b4a049018bca0f6.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..b3f560a --- /dev/null +++ b/project.godot @@ -0,0 +1,57 @@ +; 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="Trap Shooter" +config/features=PackedStringArray("4.5", "Forward Plus") +config/icon="res://visuals/images/icon.svg" + +[autoload] + +Game="*res://scripts/autos/game.gd" + +[display] + +window/size/viewport_width=1920 +window/size/viewport_height=1080 + +[dotnet] + +project/assembly_name="Trap Gunner" + +[input] + +ui_menu={ +"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":4194370,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":true,"script":null) +] +} +north={ +"deadzone": 0.2, +"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":-1.0,"script":null) +] +} +south={ +"deadzone": 0.2, +"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":1.0,"script":null) +] +} +east={ +"deadzone": 0.2, +"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null) +] +} +west={ +"deadzone": 0.2, +"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null) +] +} diff --git a/scenes/character_select.tscn b/scenes/character_select.tscn new file mode 100644 index 0000000..99ecdcf --- /dev/null +++ b/scenes/character_select.tscn @@ -0,0 +1,429 @@ +[gd_scene load_steps=6 format=3 uid="uid://ck4x56txf676a"] + +[ext_resource type="Shader" uid="uid://b2g6yddun2l6e" path="res://visuals/shaders/noise.gdshader" id="1_jgus3"] +[ext_resource type="Script" uid="uid://bnmklbse62lrf" path="res://scripts/static.gd" id="2_bow2h"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_uxcyu"] +shader = ExtResource("1_jgus3") +shader_parameter/granularity = 0.0 +shader_parameter/opacity_limit = 0.0 + +[sub_resource type="Gradient" id="Gradient_ak2if"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_fa52j"] +gradient = SubResource("Gradient_ak2if") +width = 1 + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Panel" type="Panel" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Panel" type="Panel" parent="Panel"] +layout_mode = 1 +offset_left = 94.0 +offset_top = 96.0 +offset_right = 794.0 +offset_bottom = 796.0 + +[node name="TextureRect" type="TextureRect" parent="Panel/Panel"] +material = SubResource("ShaderMaterial_uxcyu") +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = SubResource("GradientTexture1D_fa52j") +expand_mode = 1 +script = ExtResource("2_bow2h") + +[node name="Control" type="Control" parent="Panel/Panel"] +anchors_preset = 0 +offset_left = 108.0 +offset_top = 286.0 +offset_right = 392.0 +offset_bottom = 350.0 + +[node name="VBoxContainer" type="VBoxContainer" parent="Panel/Panel/Control"] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -39.0 +offset_top = 236.0 +offset_right = 245.0 +offset_bottom = 349.0 +grow_horizontal = 2 +grow_vertical = 0 + +[node name="Label" type="Label" parent="Panel/Panel/Control/VBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 32 +text = "NAME GOES HERE" +horizontal_alignment = 1 + +[node name="Panel" type="PanelContainer" parent="Panel/Panel/Control/VBoxContainer"] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="Panel/Panel/Control/VBoxContainer/Panel"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Panel/Panel/Control/VBoxContainer/Panel/HBoxContainer"] +custom_minimum_size = Vector2(92, 64) +layout_mode = 2 + +[node name="Label" type="Label" parent="Panel/Panel/Control/VBoxContainer/Panel/HBoxContainer/TextureRect"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -40.0 +offset_top = -23.0 +grow_horizontal = 0 +grow_vertical = 0 +text = "##" +horizontal_alignment = 2 + +[node name="TextureRect2" type="TextureRect" parent="Panel/Panel/Control/VBoxContainer/Panel/HBoxContainer"] +custom_minimum_size = Vector2(92, 64) +layout_mode = 2 + +[node name="Label" type="Label" parent="Panel/Panel/Control/VBoxContainer/Panel/HBoxContainer/TextureRect2"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -40.0 +offset_top = -23.0 +grow_horizontal = 0 +grow_vertical = 0 +text = "##" +horizontal_alignment = 2 + +[node name="TextureRect3" type="TextureRect" parent="Panel/Panel/Control/VBoxContainer/Panel/HBoxContainer"] +custom_minimum_size = Vector2(92, 64) +layout_mode = 2 + +[node name="Label" type="Label" parent="Panel/Panel/Control/VBoxContainer/Panel/HBoxContainer/TextureRect3"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -40.0 +offset_top = -23.0 +grow_horizontal = 0 +grow_vertical = 0 +text = "##" +horizontal_alignment = 2 + +[node name="Panel2" type="Panel" parent="Panel"] +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -794.0 +offset_top = 98.0 +offset_right = -94.0 +offset_bottom = 798.0 +grow_horizontal = 0 + +[node name="TextureRect" type="TextureRect" parent="Panel/Panel2"] +material = SubResource("ShaderMaterial_uxcyu") +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = SubResource("GradientTexture1D_fa52j") +expand_mode = 1 +script = ExtResource("2_bow2h") + +[node name="Label" type="Label" parent="Panel/Panel2"] +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -40.0 +offset_bottom = 23.0 +grow_horizontal = 0 +theme_override_font_sizes/font_size = 24 +text = "EASY" + +[node name="Control" type="Control" parent="Panel/Panel2"] +anchors_preset = 0 +offset_left = 108.0 +offset_top = 286.0 +offset_right = 392.0 +offset_bottom = 350.0 + +[node name="VBoxContainer" type="VBoxContainer" parent="Panel/Panel2/Control"] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -42.0 +offset_top = 235.0 +offset_right = 242.0 +offset_bottom = 348.0 +grow_horizontal = 2 +grow_vertical = 0 + +[node name="Label" type="Label" parent="Panel/Panel2/Control/VBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 32 +text = "NAME GOES HERE" +horizontal_alignment = 1 + +[node name="Panel" type="PanelContainer" parent="Panel/Panel2/Control/VBoxContainer"] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="Panel/Panel2/Control/VBoxContainer/Panel"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Panel/Panel2/Control/VBoxContainer/Panel/HBoxContainer"] +custom_minimum_size = Vector2(92, 64) +layout_mode = 2 + +[node name="Label" type="Label" parent="Panel/Panel2/Control/VBoxContainer/Panel/HBoxContainer/TextureRect"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -40.0 +offset_top = -23.0 +grow_horizontal = 0 +grow_vertical = 0 +text = "##" +horizontal_alignment = 2 + +[node name="TextureRect2" type="TextureRect" parent="Panel/Panel2/Control/VBoxContainer/Panel/HBoxContainer"] +custom_minimum_size = Vector2(92, 64) +layout_mode = 2 + +[node name="Label" type="Label" parent="Panel/Panel2/Control/VBoxContainer/Panel/HBoxContainer/TextureRect2"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -40.0 +offset_top = -23.0 +grow_horizontal = 0 +grow_vertical = 0 +text = "##" +horizontal_alignment = 2 + +[node name="TextureRect3" type="TextureRect" parent="Panel/Panel2/Control/VBoxContainer/Panel/HBoxContainer"] +custom_minimum_size = Vector2(92, 64) +layout_mode = 2 + +[node name="Label" type="Label" parent="Panel/Panel2/Control/VBoxContainer/Panel/HBoxContainer/TextureRect3"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -40.0 +offset_top = -23.0 +grow_horizontal = 0 +grow_vertical = 0 +text = "##" +horizontal_alignment = 2 + +[node name="Panel2" type="Panel" parent="."] +custom_minimum_size = Vector2(0, 250) +layout_mode = 1 +anchors_preset = 12 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 0 + +[node name="HBoxContainer" type="HBoxContainer" parent="Panel2"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -512.5 +offset_top = -75.0 +offset_right = 512.5 +offset_bottom = 75.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/separation = 25 +alignment = 1 + +[node name="Panel" type="Panel" parent="Panel2/HBoxContainer"] +custom_minimum_size = Vector2(150, 150) +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Panel2/HBoxContainer/Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="NinePatchRect" type="NinePatchRect" parent="Panel2/HBoxContainer/Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Panel2" type="Panel" parent="Panel2/HBoxContainer"] +custom_minimum_size = Vector2(150, 150) +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Panel2/HBoxContainer/Panel2"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="NinePatchRect" type="NinePatchRect" parent="Panel2/HBoxContainer/Panel2"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Panel3" type="Panel" parent="Panel2/HBoxContainer"] +custom_minimum_size = Vector2(150, 150) +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Panel2/HBoxContainer/Panel3"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="NinePatchRect" type="NinePatchRect" parent="Panel2/HBoxContainer/Panel3"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Panel4" type="Panel" parent="Panel2/HBoxContainer"] +custom_minimum_size = Vector2(150, 150) +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Panel2/HBoxContainer/Panel4"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="NinePatchRect" type="NinePatchRect" parent="Panel2/HBoxContainer/Panel4"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Panel5" type="Panel" parent="Panel2/HBoxContainer"] +custom_minimum_size = Vector2(150, 150) +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Panel2/HBoxContainer/Panel5"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="NinePatchRect" type="NinePatchRect" parent="Panel2/HBoxContainer/Panel5"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Panel6" type="Panel" parent="Panel2/HBoxContainer"] +custom_minimum_size = Vector2(150, 150) +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Panel2/HBoxContainer/Panel6"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="NinePatchRect" type="NinePatchRect" parent="Panel2/HBoxContainer/Panel6"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Panel3" type="Panel" parent="."] +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_bottom = 75.0 +grow_horizontal = 2 + +[node name="Label" type="Label" parent="Panel3"] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -75.5 +offset_top = -23.0 +offset_right = 75.5 +grow_horizontal = 2 +grow_vertical = 0 +theme_override_font_sizes/font_size = 40 +text = "CHARACTER SELECT" +horizontal_alignment = 1 diff --git a/scenes/multiplayer_setup.tscn b/scenes/multiplayer_setup.tscn new file mode 100644 index 0000000..4c8e233 --- /dev/null +++ b/scenes/multiplayer_setup.tscn @@ -0,0 +1,155 @@ +[gd_scene load_steps=2 format=3 uid="uid://cjnws52vwfxvq"] + +[ext_resource type="Script" uid="uid://dep7nr2nkdmga" path="res://scripts/multiplayer_setup.gd" id="1_lckj3"] + +[node name="Multiplayer Setup" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_lckj3") + +[node name="Panel" type="PanelContainer" parent="."] +visible = false +custom_minimum_size = Vector2(400, 400) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -200.0 +offset_top = -200.0 +offset_right = 200.0 +offset_bottom = 200.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Menu" type="VBoxContainer" parent="Panel"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="HostButton" type="Button" parent="Panel/Menu"] +layout_mode = 2 +text = "Host Match" + +[node name="JoinButton" type="Button" parent="Panel/Menu"] +layout_mode = 2 +text = "Join Match" + +[node name="BackButton" type="Button" parent="Panel/Menu"] +layout_mode = 2 +text = "Back" + +[node name="Hosting" type="VBoxContainer" parent="Panel"] +unique_name_in_owner = true +layout_mode = 2 +alignment = 1 + +[node name="Label" type="Label" parent="Panel/Hosting"] +layout_mode = 2 +text = "HOSTING MATCH" +horizontal_alignment = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="Panel/Hosting"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Panel/Hosting/HBoxContainer"] +layout_mode = 2 +text = "Handle" + +[node name="HandleEdit" type="TextEdit" parent="Panel/Hosting/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="HostButton" type="Button" parent="Panel/Hosting"] +layout_mode = 2 +text = "HOST" + +[node name="BackButton" type="Button" parent="Panel/Hosting"] +layout_mode = 2 +text = "Back" + +[node name="Host Waiting" type="VBoxContainer" parent="Panel"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +alignment = 1 + +[node name="Label" type="Label" parent="Panel/Host Waiting"] +layout_mode = 2 +text = "WAITING FOR OPPONENT" +horizontal_alignment = 1 + +[node name="PanelContainer" type="PanelContainer" parent="Panel/Host Waiting"] +layout_mode = 2 + +[node name="TextEdit" type="RichTextLabel" parent="Panel/Host Waiting/PanelContainer"] +custom_minimum_size = Vector2(0, 70) +layout_mode = 2 +size_flags_horizontal = 3 +bbcode_enabled = true +text = "[b]*YOU (Host)[/b] +[color=\"FFFF00\"]*THEM (Opponent)[/color]" + +[node name="StartButton" type="Button" parent="Panel/Host Waiting"] +layout_mode = 2 +text = "START" + +[node name="BackButton" type="Button" parent="Panel/Host Waiting"] +layout_mode = 2 +text = "Back" + +[node name="Joining" type="VBoxContainer" parent="Panel"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +alignment = 1 + +[node name="Label" type="Label" parent="Panel/Joining"] +layout_mode = 2 +text = "JOINING MATCH" +horizontal_alignment = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="Panel/Joining"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Panel/Joining/HBoxContainer"] +layout_mode = 2 +text = "HANDLE" + +[node name="TextEdit" type="TextEdit" parent="Panel/Joining/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="HBoxContainer2" type="HBoxContainer" parent="Panel/Joining"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Panel/Joining/HBoxContainer2"] +layout_mode = 2 +text = "MATCH CODE" + +[node name="TextEdit" type="TextEdit" parent="Panel/Joining/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="JoinButton" type="Button" parent="Panel/Joining"] +layout_mode = 2 +text = "HOST" + +[node name="BackButton" type="Button" parent="Panel/Joining"] +layout_mode = 2 +text = "Back" + +[connection signal="pressed" from="Panel/Menu/HostButton" to="." method="_on_host_game_button_pressed"] +[connection signal="pressed" from="Panel/Menu/JoinButton" to="." method="_on_join_game_button_pressed"] +[connection signal="pressed" from="Panel/Menu/BackButton" to="." method="_on_menu_back_button_pressed"] +[connection signal="pressed" from="Panel/Hosting/HostButton" to="." method="_on_start_hosting_button_pressed"] +[connection signal="pressed" from="Panel/Hosting/BackButton" to="." method="_on_hosting_back_button_pressed"] +[connection signal="pressed" from="Panel/Host Waiting/StartButton" to="." method="_on_start_game_button_pressed"] +[connection signal="pressed" from="Panel/Host Waiting/BackButton" to="." method="_on_waiting_back_button_pressed"] +[connection signal="pressed" from="Panel/Joining/JoinButton" to="." method="_on_join_button_pressed"] +[connection signal="pressed" from="Panel/Joining/BackButton" to="." method="_on_joining_back_button_pressed"] diff --git a/scenes/multiplayer_test.tscn b/scenes/multiplayer_test.tscn new file mode 100644 index 0000000..1a9837d --- /dev/null +++ b/scenes/multiplayer_test.tscn @@ -0,0 +1,68 @@ +[gd_scene load_steps=9 format=3 uid="uid://ti65jukt8gvs"] + +[ext_resource type="PackedScene" uid="uid://bgocskbofewsr" path="res://templates/HUD.tscn" id="1_q2h5d"] +[ext_resource type="Texture2D" uid="uid://bj07x13pkoevk" path="res://visuals/textures/tile.png" id="2_02mmr"] +[ext_resource type="Script" uid="uid://cymi1n4gavixy" path="res://scripts/level_camera.gd" id="3_qfwdi"] +[ext_resource type="Script" uid="uid://wpjuowslx60b" path="res://scripts/multiplayer_controller.gd" id="4_q2h5d"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_gbhdq"] +albedo_texture = ExtResource("2_02mmr") +uv1_scale = Vector3(100, 100, 100) +texture_filter = 0 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_y646j"] +albedo_color = Color(0.08468992, 0.08468992, 0.08468992, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lnbra"] +albedo_color = Color(0, 1, 1, 1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_6emce"] +size = Vector3(0.75, 2, 0.75) + +[node name="Node3D" type="Node3D"] + +[node name="CanvasLayer" type="CanvasLayer" parent="."] +layer = 1000 + +[node name="Control" parent="CanvasLayer" instance=ExtResource("1_q2h5d")] + +[node name="CSGBox3D" type="CSGBox3D" parent="."] +size = Vector3(100, 1, 100) +material = SubResource("StandardMaterial3D_gbhdq") + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.49999997, 0.86602545, 0, -0.86602545, 0.49999997, 0, 18.855, 9.603047) +projection = 1 +size = 5.0 +script = ExtResource("3_qfwdi") + +[node name="Node3D" type="CharacterBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +script = ExtResource("4_q2h5d") +speed = 5.0 + +[node name="Body" type="CSGBox3D" parent="Node3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) +size = Vector3(0.75, 2, 0.75) +material = SubResource("StandardMaterial3D_y646j") + +[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Node3D/Body"] +transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0.5, 0.556) +radius = 0.3 +height = 0.1 +material = SubResource("StandardMaterial3D_lnbra") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Node3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) +shape = SubResource("BoxShape3D_6emce") + +[node name="OmniLight3D" type="OmniLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 18.508709, 0) +omni_range = 25.142 +omni_attenuation = -0.165 + +[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="."] +spawn_path = NodePath("../Players") +spawn_limit = 2 + +[node name="Players" type="Node3D" parent="."] diff --git a/scenes/test_level.tscn b/scenes/test_level.tscn new file mode 100644 index 0000000..7aca6a8 --- /dev/null +++ b/scenes/test_level.tscn @@ -0,0 +1,62 @@ +[gd_scene load_steps=9 format=3 uid="uid://by6suwmds7xq2"] + +[ext_resource type="PackedScene" uid="uid://bgocskbofewsr" path="res://templates/HUD.tscn" id="1_x4b8f"] +[ext_resource type="Texture2D" uid="uid://bj07x13pkoevk" path="res://visuals/textures/tile.png" id="2_tmr53"] +[ext_resource type="Script" uid="uid://cymi1n4gavixy" path="res://scripts/level_camera.gd" id="3_qcd3b"] +[ext_resource type="Script" uid="uid://bcs7ygh6s3l35" path="res://scripts/player.gd" id="4_88ety"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_gbhdq"] +albedo_texture = ExtResource("2_tmr53") +uv1_scale = Vector3(100, 100, 100) +texture_filter = 0 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_y646j"] +albedo_color = Color(0.08468992, 0.08468992, 0.08468992, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lnbra"] +albedo_color = Color(0, 1, 1, 1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_6emce"] +size = Vector3(0.75, 2, 0.75) + +[node name="Node3D" type="Node3D"] + +[node name="CanvasLayer" type="CanvasLayer" parent="."] +layer = 1000 + +[node name="Control" parent="CanvasLayer" instance=ExtResource("1_x4b8f")] + +[node name="CSGBox3D" type="CSGBox3D" parent="."] +size = Vector3(100, 1, 100) +material = SubResource("StandardMaterial3D_gbhdq") + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.49999997, 0.86602545, 0, -0.86602545, 0.49999997, 0, 18.855, 9.603047) +projection = 1 +size = 5.0 +script = ExtResource("3_qcd3b") + +[node name="Node3D" type="CharacterBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +script = ExtResource("4_88ety") +speed = 5.0 + +[node name="Body" type="CSGBox3D" parent="Node3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) +size = Vector3(0.75, 2, 0.75) +material = SubResource("StandardMaterial3D_y646j") + +[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Node3D/Body"] +transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0.5, 0.556) +radius = 0.3 +height = 0.1 +material = SubResource("StandardMaterial3D_lnbra") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Node3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) +shape = SubResource("BoxShape3D_6emce") + +[node name="OmniLight3D" type="OmniLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 18.508709, 0) +omni_range = 25.142 +omni_attenuation = -0.165 diff --git a/scenes/title_screen.tscn b/scenes/title_screen.tscn new file mode 100644 index 0000000..12e4119 --- /dev/null +++ b/scenes/title_screen.tscn @@ -0,0 +1,183 @@ +[gd_scene load_steps=11 format=3 uid="uid://dd40q2mv84pmc"] + +[ext_resource type="Script" uid="uid://dhu2psbhh1rl8" path="res://scripts/title_screen.gd" id="1_e54dn"] +[ext_resource type="Shader" uid="uid://b2g6yddun2l6e" path="res://visuals/shaders/noise.gdshader" id="2_3yumr"] +[ext_resource type="Script" uid="uid://bnmklbse62lrf" path="res://scripts/static.gd" id="3_cs5ya"] +[ext_resource type="FontFile" uid="uid://c83fwpdo5bu8j" path="res://ASTERA v2.ttf" id="4_3yumr"] +[ext_resource type="AudioStream" uid="uid://bl08d5aj1f7nf" path="res://audio/music/15 - Opening.mp3" id="4_mykxm"] +[ext_resource type="AudioStream" uid="uid://kj25hej55ckw" path="res://audio/sounds/BUTTON Generic Metal Medium High Mechanics 02.wav" id="5_tklts"] +[ext_resource type="AudioStream" uid="uid://cmnibhyxpag0a" path="res://audio/sounds/BeepBeep_high.wav" id="6_u26n3"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_tpml5"] +shader = ExtResource("2_3yumr") +shader_parameter/granularity = 0.0 +shader_parameter/opacity_limit = 0.0 + +[sub_resource type="Gradient" id="Gradient_cs5ya"] +offsets = PackedFloat32Array(0) +colors = PackedColorArray(0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_ig5kc"] +gradient = SubResource("Gradient_cs5ya") +width = 1 + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_e54dn") + +[node name="TextureRect" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_tpml5") +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = SubResource("GradientTexture1D_ig5kc") +expand_mode = 1 +script = ExtResource("3_cs5ya") + +[node name="Label" type="RichTextLabel" parent="."] +layout_mode = 0 +offset_left = 130.0 +offset_top = 260.0 +offset_right = 1791.0 +offset_bottom = 678.0 +theme_override_constants/line_separation = -450 +theme_override_fonts/normal_font = ExtResource("4_3yumr") +theme_override_fonts/bold_font = ExtResource("4_3yumr") +theme_override_fonts/bold_italics_font = ExtResource("4_3yumr") +theme_override_font_sizes/bold_italics_font_size = 300 +bbcode_enabled = true +text = "[b][i]TRAP + SHOOTER[/i][/b]" + +[node name="Panel2" type="Panel" parent="."] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -192.0 +offset_top = -364.0 +offset_right = 208.0 +offset_bottom = -214.0 +grow_horizontal = 2 +grow_vertical = 0 + +[node name="START" type="Label" parent="Panel2"] +unique_name_in_owner = true +modulate = Color(0, 0, 1, 1) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_font_sizes/font_size = 60 +text = "PUSH START" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="Menu" type="Control" parent="Panel2"] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="STORY" type="Label" parent="Panel2/Menu"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_font_sizes/font_size = 80 +text = "STORY" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="VS-COM" type="Label" parent="Panel2/Menu"] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_font_sizes/font_size = 80 +text = "VS COM" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="VS-MAN" type="Label" parent="Panel2/Menu"] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_font_sizes/font_size = 80 +text = "VS MAN" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="RECORD" type="Label" parent="Panel2/Menu"] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_font_sizes/font_size = 80 +text = "RECORD" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="OPTION" type="Label" parent="Panel2/Menu"] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_font_sizes/font_size = 80 +text = "OPTION" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="Panel" type="Panel" parent="."] +visible = false +layout_mode = 0 +offset_right = 1152.0 +offset_bottom = 648.0 + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource("4_mykxm") +autoplay = true + +[node name="SelectSound" type="AudioStreamPlayer" parent="."] +unique_name_in_owner = true +stream = ExtResource("5_tklts") + +[node name="SwitchSound" type="AudioStreamPlayer" parent="."] +unique_name_in_owner = true +stream = ExtResource("6_u26n3") diff --git a/scripts/autos/game.gd b/scripts/autos/game.gd new file mode 100644 index 0000000..a839353 --- /dev/null +++ b/scripts/autos/game.gd @@ -0,0 +1,4 @@ +extends Node + + +var player : Player diff --git a/scripts/autos/game.gd.uid b/scripts/autos/game.gd.uid new file mode 100644 index 0000000..f161c72 --- /dev/null +++ b/scripts/autos/game.gd.uid @@ -0,0 +1 @@ +uid://cro6hr2qds783 diff --git a/scripts/autos/multiplayer.gd b/scripts/autos/multiplayer.gd new file mode 100644 index 0000000..4a0d07e --- /dev/null +++ b/scripts/autos/multiplayer.gd @@ -0,0 +1,30 @@ +extends Node + + +const SERVER_PORT = 8080 +const SERVER_IP = "127.0.0.1" + +func become_host() -> void: + print("Starting host!") + + var server_peer = ENetMultiplayerPeer.new() + server_peer.create_server(SERVER_PORT) + + multiplayer.multiplayer_peer = server_peer + + multiplayer.peer_connected.connect(_add_player_to_game) + multiplayer.peer_disconnected.connect(_remove_player_from_game) + + +func join_game() -> void: + print("Player 2 joining.") + + var client_peer = ENetMultiplayerPeer.new() + client_peer.create_client(SERVER_IP, SERVER_PORT) + + +func _add_player_to_game(id : int) -> void: + print("Player %s joined the game!" % id) + +func _remove_player_from_game(id : int) -> void: + print("Player %s left the game!" % id) diff --git a/scripts/autos/multiplayer.gd.uid b/scripts/autos/multiplayer.gd.uid new file mode 100644 index 0000000..8d63586 --- /dev/null +++ b/scripts/autos/multiplayer.gd.uid @@ -0,0 +1 @@ +uid://dhrl1x443cqt1 diff --git a/scripts/level_camera.gd b/scripts/level_camera.gd new file mode 100644 index 0000000..d0791f8 --- /dev/null +++ b/scripts/level_camera.gd @@ -0,0 +1,18 @@ +extends Camera3D + +var target +var offset : Vector3 + +func _enter_tree() -> void: + call_deferred("register_player") + + + +func register_player() -> void: + target = Game.player + offset = global_position - target.global_position + + +func _process(delta: float) -> void: + if target: + global_position = target.global_position + offset diff --git a/scripts/level_camera.gd.uid b/scripts/level_camera.gd.uid new file mode 100644 index 0000000..1c37181 --- /dev/null +++ b/scripts/level_camera.gd.uid @@ -0,0 +1 @@ +uid://cymi1n4gavixy diff --git a/scripts/multiplayer_controller.gd b/scripts/multiplayer_controller.gd new file mode 100644 index 0000000..f0b7dbd --- /dev/null +++ b/scripts/multiplayer_controller.gd @@ -0,0 +1,16 @@ +class_name MultiplayerPlayer extends Player + +@export var player_id := 1 : + set(id): + player_id = id + +func _enter_tree() -> void: + Game.player = self + +func _physics_process(delta: float) -> void: + var dir = Input.get_vector("west", "east", "north", "south") + dir = Vector3(dir.x, 0, dir.y) + if dir.length_squared() > 0: + body.look_at(body.global_position - dir) + velocity = speed * dir + move_and_slide() diff --git a/scripts/multiplayer_controller.gd.uid b/scripts/multiplayer_controller.gd.uid new file mode 100644 index 0000000..dc0c4d2 --- /dev/null +++ b/scripts/multiplayer_controller.gd.uid @@ -0,0 +1 @@ +uid://wpjuowslx60b diff --git a/scripts/multiplayer_setup.gd b/scripts/multiplayer_setup.gd new file mode 100644 index 0000000..05db7df --- /dev/null +++ b/scripts/multiplayer_setup.gd @@ -0,0 +1,54 @@ +extends Control + +var host : bool + +func _on_host_game_button_pressed() -> void: + %Menu.visible = false + %Hosting.visible = true + host = true + + +func _on_join_game_button_pressed() -> void: + %Menu.visible = false + %Joining.visible = true + host = false + + +func _on_menu_back_button_pressed() -> void: + Game.go_to_title_screen() + + +func _on_start_hosting_button_pressed() -> void: + #Validate entries + %Hosting.visible = false + #Set fields + %"Host Waiting".visible = true + + +func _on_hosting_back_button_pressed() -> void: + %Hosting.visible = false + %Menu.visible = true + + +func _on_start_game_button_pressed() -> void: + Game.start_vs_com() + + +func _on_waiting_back_button_pressed() -> void: + %"Host Waiting".visible = false + if host: + %Hosting.visible = true + else: + %Joining.visible = true + + +func _on_join_button_pressed() -> void: + #Check for valid game + #If found + %Joining.visible = false + %"Host Waiting".visible = true + + +func _on_joining_back_button_pressed() -> void: + %Joining.visible = false + %Menu.visible = true diff --git a/scripts/multiplayer_setup.gd.uid b/scripts/multiplayer_setup.gd.uid new file mode 100644 index 0000000..624a0c4 --- /dev/null +++ b/scripts/multiplayer_setup.gd.uid @@ -0,0 +1 @@ +uid://dep7nr2nkdmga diff --git a/scripts/player.gd b/scripts/player.gd new file mode 100644 index 0000000..245e359 --- /dev/null +++ b/scripts/player.gd @@ -0,0 +1,15 @@ +class_name Player extends CharacterBody3D + +@export var speed : float = 10 +@onready var body = $Body + +func _enter_tree() -> void: + Game.player = self + +func _physics_process(delta: float) -> void: + var dir = Input.get_vector("west", "east", "north", "south") + dir = Vector3(dir.x, 0, dir.y) + if dir.length_squared() > 0: + body.look_at(body.global_position - dir) + velocity = speed * dir + move_and_slide() diff --git a/scripts/player.gd.uid b/scripts/player.gd.uid new file mode 100644 index 0000000..e23d12e --- /dev/null +++ b/scripts/player.gd.uid @@ -0,0 +1 @@ +uid://bcs7ygh6s3l35 diff --git a/scripts/static.gd b/scripts/static.gd new file mode 100644 index 0000000..8595b16 --- /dev/null +++ b/scripts/static.gd @@ -0,0 +1,9 @@ +@tool +extends TextureRect +@export var tex : NoiseTexture2D + +func _enter_tree() -> void: + pass + +func _process(delta : float) -> void: + pass diff --git a/scripts/static.gd.uid b/scripts/static.gd.uid new file mode 100644 index 0000000..77b7780 --- /dev/null +++ b/scripts/static.gd.uid @@ -0,0 +1 @@ +uid://bnmklbse62lrf diff --git a/scripts/title_screen.gd b/scripts/title_screen.gd new file mode 100644 index 0000000..32d29c3 --- /dev/null +++ b/scripts/title_screen.gd @@ -0,0 +1,41 @@ +extends Control + +var opened : bool = false +var menu_choice : int = 0 +@onready var menu_list : Array = [ + %STORY, + %"VS-COM", + %"VS-MAN", + %RECORD, + %OPTION +] + +func _process(delta: float) -> void: + if Input.is_action_just_pressed("ui_menu"): + opened = !opened + %START.visible = !opened + %Menu.visible = opened + %SelectSound.play() + if opened: + menu_choice = 0 + switch_menu() + + if opened: + if Input.is_action_just_pressed("ui_up"): + menu_choice -= 1 + if menu_choice < 0: + menu_choice = len(menu_list) - 1 + %SwitchSound.play() + switch_menu() + elif Input.is_action_just_pressed("ui_down"): + menu_choice += 1 + if menu_choice >= len(menu_list): + menu_choice = 0 + %SwitchSound.play() + switch_menu() + + +func switch_menu() -> void: + for child in %Menu.get_children(): + child.visible = false + menu_list[menu_choice].visible = true diff --git a/scripts/title_screen.gd.uid b/scripts/title_screen.gd.uid new file mode 100644 index 0000000..1854c54 --- /dev/null +++ b/scripts/title_screen.gd.uid @@ -0,0 +1 @@ +uid://dhu2psbhh1rl8 diff --git a/templates/HUD.tscn b/templates/HUD.tscn new file mode 100644 index 0000000..5921491 --- /dev/null +++ b/templates/HUD.tscn @@ -0,0 +1,128 @@ +[gd_scene load_steps=2 format=3 uid="uid://bgocskbofewsr"] + +[ext_resource type="Texture2D" uid="uid://dri0a20l6kpbj" path="res://visuals/images/icon.svg" id="1_k5de2"] + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Control" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +grow_horizontal = 2 + +[node name="PanelContainer" type="PanelContainer" parent="Control"] +custom_minimum_size = Vector2(0, 200) +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +grow_horizontal = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="Control/PanelContainer"] +layout_mode = 2 +alignment = 1 + +[node name="Control" type="Control" parent="Control/PanelContainer/HBoxContainer"] +custom_minimum_size = Vector2(165, 0) +layout_mode = 2 + +[node name="VBoxContainer2" type="VBoxContainer" parent="Control/PanelContainer/HBoxContainer"] +layout_mode = 2 + +[node name="PanelContainer" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer2"] +custom_minimum_size = Vector2(250, 100) +layout_mode = 2 + +[node name="PanelContainer2" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer2"] +custom_minimum_size = Vector2(250, 100) +layout_mode = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="Control/PanelContainer/HBoxContainer"] +custom_minimum_size = Vector2(150, 0) +layout_mode = 2 + +[node name="PanelContainer2" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer"] +custom_minimum_size = Vector2(150, 100) +layout_mode = 2 + +[node name="PanelContainer3" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer"] +custom_minimum_size = Vector2(150, 100) +layout_mode = 2 + +[node name="PanelContainer2" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer"] +custom_minimum_size = Vector2(150, 0) +layout_mode = 2 + +[node name="VBoxContainer3" type="VBoxContainer" parent="Control/PanelContainer/HBoxContainer"] +custom_minimum_size = Vector2(250, 0) +layout_mode = 2 + +[node name="PanelContainer3" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3"] +custom_minimum_size = Vector2(250, 130) +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3"] +custom_minimum_size = Vector2(0, 70) +layout_mode = 2 + +[node name="PanelContainer" type="PanelContainer" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/HBoxContainer"] +custom_minimum_size = Vector2(150, 0) +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Control/PanelContainer/HBoxContainer/VBoxContainer3/HBoxContainer"] +custom_minimum_size = Vector2(95, 0) +layout_mode = 2 + +[node name="Control2" type="Control" parent="Control/PanelContainer/HBoxContainer"] +custom_minimum_size = Vector2(165, 0) +layout_mode = 2 + +[node name="Control2" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -200.0 +offset_right = 200.0 +grow_vertical = 0 + +[node name="TextureRect" type="TextureRect" parent="Control2"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 71.0 +offset_right = 68.0 +offset_bottom = 135.0 +texture = ExtResource("1_k5de2") +expand_mode = 1 + +[node name="TextureRect2" type="TextureRect" parent="Control2"] +layout_mode = 0 +offset_left = 68.0 +offset_top = 40.0 +offset_right = 132.0 +offset_bottom = 104.0 +texture = ExtResource("1_k5de2") +expand_mode = 1 + +[node name="TextureRect3" type="TextureRect" parent="Control2"] +layout_mode = 0 +offset_left = 132.0 +offset_top = 71.0 +offset_right = 196.0 +offset_bottom = 135.0 +texture = ExtResource("1_k5de2") +expand_mode = 1 + +[node name="TextureRect4" type="TextureRect" parent="Control2"] +layout_mode = 0 +offset_left = 68.0 +offset_top = 103.0 +offset_right = 132.0 +offset_bottom = 167.0 +texture = ExtResource("1_k5de2") +expand_mode = 1 diff --git a/visuals/images/icon.svg b/visuals/images/icon.svg new file mode 100644 index 0000000..c6bbb7d --- /dev/null +++ b/visuals/images/icon.svg @@ -0,0 +1 @@ + diff --git a/visuals/images/icon.svg.import b/visuals/images/icon.svg.import new file mode 100644 index 0000000..72f2c7f --- /dev/null +++ b/visuals/images/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dri0a20l6kpbj" +path="res://.godot/imported/icon.svg-c4c27e6ee27449a429199138b5f0d974.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://visuals/images/icon.svg" +dest_files=["res://.godot/imported/icon.svg-c4c27e6ee27449a429199138b5f0d974.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/visuals/shaders/noise.gdshader b/visuals/shaders/noise.gdshader new file mode 100644 index 0000000..038c438 --- /dev/null +++ b/visuals/shaders/noise.gdshader @@ -0,0 +1,35 @@ +shader_type canvas_item; + +uniform sampler2D main_texture; +uniform float granularity; +uniform float opacity_limit; + +float random (vec2 uv) { + return fract(sin(dot(uv.xy, + vec2(12.9898,78.233))) * 43758.5453123); +} + +void vertex() { + // Called for every vertex the material is visible on. + +} + +void fragment() { + // Called for every pixel the material is visible on. + vec2 uv = UV; + uv.y = TIME * uv.y + TIME * 0.5; + uv.x = 2.0 * TIME * uv.x + TIME * 1.0; + float val = random(uv); + float op = random(-uv) / val; + float alpha = 1.0; + if(op < opacity_limit){ + alpha = 0.0; + } + vec4 color = vec4(val, val, val, alpha); + COLOR = color; +} + +//void light() { +// // Called for every pixel for every light affecting the CanvasItem. +// // Uncomment to replace the default light processing function with this one. +//} diff --git a/visuals/shaders/noise.gdshader.uid b/visuals/shaders/noise.gdshader.uid new file mode 100644 index 0000000..7c46326 --- /dev/null +++ b/visuals/shaders/noise.gdshader.uid @@ -0,0 +1 @@ +uid://b2g6yddun2l6e diff --git a/visuals/textures/new_noise_texture_2d.tres b/visuals/textures/new_noise_texture_2d.tres new file mode 100644 index 0000000..25f895c --- /dev/null +++ b/visuals/textures/new_noise_texture_2d.tres @@ -0,0 +1,17 @@ +[gd_resource type="NoiseTexture2D" load_steps=2 format=3 uid="uid://bsxod2wcjw5ik"] + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_qng1f"] +noise_type = 3 +seed = -2140753962 +frequency = 0.4595 +fractal_type = 0 +fractal_octaves = 1 +fractal_lacunarity = 2.335 +fractal_gain = -0.12 +domain_warp_amplitude = 30.41 + +[resource] +width = 1920 +height = 1080 +noise = SubResource("FastNoiseLite_qng1f") +normalize = false diff --git a/visuals/textures/tile.png b/visuals/textures/tile.png new file mode 100644 index 0000000..d5baa25 Binary files /dev/null and b/visuals/textures/tile.png differ diff --git a/visuals/textures/tile.png.import b/visuals/textures/tile.png.import new file mode 100644 index 0000000..c77f305 --- /dev/null +++ b/visuals/textures/tile.png.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bj07x13pkoevk" +path.s3tc="res://.godot/imported/tile.png-82ac121192f8645b1b55058345db6f74.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://visuals/textures/tile.png" +dest_files=["res://.godot/imported/tile.png-82ac121192f8645b1b55058345db6f74.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