diff --git a/assets/audio/blank-song.wav b/assets/audio/blank-song.wav new file mode 100644 index 0000000..8db93b9 Binary files /dev/null and b/assets/audio/blank-song.wav differ diff --git a/assets/audio/blank-song.wav.import b/assets/audio/blank-song.wav.import new file mode 100644 index 0000000..deca783 --- /dev/null +++ b/assets/audio/blank-song.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://mu1pkwkw3wyu" +path="res://.godot/imported/blank-song.wav-2c3b0e1a59785e41d9b1e9c6d2855fc4.sample" + +[deps] + +source_file="res://assets/audio/blank-song.wav" +dest_files=["res://.godot/imported/blank-song.wav-2c3b0e1a59785e41d9b1e9c6d2855fc4.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/assets/audio/eine-kleine-blank.wav b/assets/audio/eine-kleine-blank.wav new file mode 100644 index 0000000..86518ed Binary files /dev/null and b/assets/audio/eine-kleine-blank.wav differ diff --git a/assets/audio/eine-kleine-blank.wav.import b/assets/audio/eine-kleine-blank.wav.import new file mode 100644 index 0000000..1e6616d --- /dev/null +++ b/assets/audio/eine-kleine-blank.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://diaivgv13xa8k" +path="res://.godot/imported/eine-kleine-blank.wav-3cf1079fa8dd4d381dc4d6fbd9e452b1.sample" + +[deps] + +source_file="res://assets/audio/eine-kleine-blank.wav" +dest_files=["res://.godot/imported/eine-kleine-blank.wav-3cf1079fa8dd4d381dc4d6fbd9e452b1.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/assets/audio/eine-kleine-fast.wav b/assets/audio/eine-kleine-fast.wav new file mode 100644 index 0000000..6d17fe2 Binary files /dev/null and b/assets/audio/eine-kleine-fast.wav differ diff --git a/assets/audio/eine-kleine-fast.wav.import b/assets/audio/eine-kleine-fast.wav.import new file mode 100644 index 0000000..2651c5f --- /dev/null +++ b/assets/audio/eine-kleine-fast.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://b6xe72a7nd2ol" +path="res://.godot/imported/eine-kleine-fast.wav-ee8157a6ec683ee91b7a1ba81656729d.sample" + +[deps] + +source_file="res://assets/audio/eine-kleine-fast.wav" +dest_files=["res://.godot/imported/eine-kleine-fast.wav-ee8157a6ec683ee91b7a1ba81656729d.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/assets/audio/eine-kleine-intro.wav b/assets/audio/eine-kleine-intro.wav new file mode 100644 index 0000000..01e903e Binary files /dev/null and b/assets/audio/eine-kleine-intro.wav differ diff --git a/assets/audio/eine-kleine-intro.wav.import b/assets/audio/eine-kleine-intro.wav.import new file mode 100644 index 0000000..f3def91 --- /dev/null +++ b/assets/audio/eine-kleine-intro.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dlvawr3wv7ob4" +path="res://.godot/imported/eine-kleine-intro.wav-62220a455d3d38061ded9a60d4a6ec3e.sample" + +[deps] + +source_file="res://assets/audio/eine-kleine-intro.wav" +dest_files=["res://.godot/imported/eine-kleine-intro.wav-62220a455d3d38061ded9a60d4a6ec3e.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/assets/misc/outro-screen-ALBM.png b/assets/misc/outro-screen-ALBM.png new file mode 100644 index 0000000..369d39f Binary files /dev/null and b/assets/misc/outro-screen-ALBM.png differ diff --git a/assets/misc/outro-screen-ALBM.png.import b/assets/misc/outro-screen-ALBM.png.import new file mode 100644 index 0000000..0dec7ef --- /dev/null +++ b/assets/misc/outro-screen-ALBM.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cveidfttgu174" +path="res://.godot/imported/outro-screen-ALBM.png-c8b007393368a82095cf4821f4bb0e54.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/misc/outro-screen-ALBM.png" +dest_files=["res://.godot/imported/outro-screen-ALBM.png-c8b007393368a82095cf4821f4bb0e54.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/misc/splash-screen-ALBM.png b/assets/misc/splash-screen-ALBM.png new file mode 100644 index 0000000..ec1ae97 Binary files /dev/null and b/assets/misc/splash-screen-ALBM.png differ diff --git a/assets/misc/splash-screen-ALBM.png.import b/assets/misc/splash-screen-ALBM.png.import new file mode 100644 index 0000000..5226006 --- /dev/null +++ b/assets/misc/splash-screen-ALBM.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cicani7q1g5p" +path="res://.godot/imported/splash-screen-ALBM.png-d99bf01ddeac6f659a3371a4f4322275.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/misc/splash-screen-ALBM.png" +dest_files=["res://.godot/imported/splash-screen-ALBM.png-d99bf01ddeac6f659a3371a4f4322275.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/ui/keyboard_x.png b/assets/ui/keyboard_x.png new file mode 100644 index 0000000..ae26487 Binary files /dev/null and b/assets/ui/keyboard_x.png differ diff --git a/assets/ui/keyboard_x.png.import b/assets/ui/keyboard_x.png.import new file mode 100644 index 0000000..921ee06 --- /dev/null +++ b/assets/ui/keyboard_x.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://4apr80conxxu" +path="res://.godot/imported/keyboard_x.png-2b6f22848ca94cdb13d5e35617c64312.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/ui/keyboard_x.png" +dest_files=["res://.godot/imported/keyboard_x.png-2b6f22848ca94cdb13d5e35617c64312.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/ui/keyboard_x_outline.png b/assets/ui/keyboard_x_outline.png new file mode 100644 index 0000000..7e138de Binary files /dev/null and b/assets/ui/keyboard_x_outline.png differ diff --git a/assets/ui/keyboard_x_outline.png.import b/assets/ui/keyboard_x_outline.png.import new file mode 100644 index 0000000..ae61161 --- /dev/null +++ b/assets/ui/keyboard_x_outline.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://doepfsn70f3we" +path="res://.godot/imported/keyboard_x_outline.png-ba4481e0ca0cc0ecf687f4f48d171968.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/ui/keyboard_x_outline.png" +dest_files=["res://.godot/imported/keyboard_x_outline.png-ba4481e0ca0cc0ecf687f4f48d171968.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/export_presets.cfg b/export_presets.cfg new file mode 100644 index 0000000..86d6d11 --- /dev/null +++ b/export_presets.cfg @@ -0,0 +1,49 @@ +[preset.0] + +name="Web" +platform="Web" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +patches=PackedStringArray() +patch_delta_encoding=false +patch_delta_compression_level_zstd=19 +patch_delta_min_reduction=0.1 +patch_delta_include_filters="*" +patch_delta_exclude_filters="" +encryption_include_filters="" +encryption_exclude_filters="" +seed=0 +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.0.options] + +custom_template/debug="" +custom_template/release="" +variant/extensions_support=false +variant/thread_support=false +vram_texture_compression/for_desktop=true +vram_texture_compression/for_mobile=false +html/export_icon=true +html/custom_html_shell="" +html/head_include="" +html/canvas_resize_policy=2 +html/focus_canvas_on_start=true +html/experimental_virtual_keyboard=false +progressive_web_app/enabled=false +progressive_web_app/ensure_cross_origin_isolation_headers=true +progressive_web_app/offline_page="" +progressive_web_app/display=1 +progressive_web_app/orientation=0 +progressive_web_app/icon_144x144="" +progressive_web_app/icon_180x180="" +progressive_web_app/icon_512x512="" +progressive_web_app/background_color=Color(0, 0, 0, 1) +threads/emscripten_pool_size=8 +threads/godot_pool_size=4 diff --git a/project.godot b/project.godot index 25d13d4..b2f2b82 100644 --- a/project.godot +++ b/project.godot @@ -11,8 +11,9 @@ config_version=5 [application] config/name="trijam-363-conductor" -run/main_scene="uid://irgt7rn5kfap" +run/main_scene="uid://bbw7g5cdqgafr" config/features=PackedStringArray("4.6", "Forward Plus") +boot_splash/image="uid://cicani7q1g5p" config/icon="res://icon.svg" [autoload] @@ -26,6 +27,12 @@ window/size/viewport_height=720 [input] +ui_accept={ +"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":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, 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":4194310,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} viol={ "deadzone": 0.2, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":86,"key_label":0,"unicode":118,"location":0,"echo":false,"script":null) @@ -61,6 +68,11 @@ sample={ "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) ] } +execute={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":88,"key_label":0,"unicode":120,"location":0,"echo":false,"script":null) +] +} [physics] diff --git a/scenes/input_prompt.tscn b/scenes/input_prompt.tscn index 932f995..5f16790 100644 --- a/scenes/input_prompt.tscn +++ b/scenes/input_prompt.tscn @@ -3,6 +3,4 @@ [ext_resource type="Texture2D" uid="uid://cctoyonq28i8q" path="res://assets/ui/keyboard_v_outline.png" id="1_tpl0e"] [node name="InputPrompt" type="Sprite2D" unique_id=590379112] -position = Vector2(0, 24) -scale = Vector2(0.25, 0.25) texture = ExtResource("1_tpl0e") diff --git a/scenes/intro.tscn b/scenes/intro.tscn new file mode 100644 index 0000000..87aa99f --- /dev/null +++ b/scenes/intro.tscn @@ -0,0 +1,34 @@ +[gd_scene format=3 uid="uid://bbw7g5cdqgafr"] + +[ext_resource type="Texture2D" uid="uid://cicani7q1g5p" path="res://assets/misc/splash-screen-ALBM.png" id="1_ioskq"] +[ext_resource type="Script" uid="uid://o45uvey2wnsb" path="res://scripts/intro.gd" id="1_yjqpq"] +[ext_resource type="AudioStream" uid="uid://dlvawr3wv7ob4" path="res://assets/audio/eine-kleine-intro.wav" id="3_4bx60"] + +[node name="Intro" type="Control" unique_id=1666938959] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_yjqpq") + +[node name="TextureRect" type="TextureRect" parent="." unique_id=244917967] +layout_mode = 0 +offset_right = 40.0 +offset_bottom = 40.0 +texture = ExtResource("1_ioskq") + +[node name="StartButton" type="Button" parent="." unique_id=328829953] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 508.0 +offset_top = 361.0 +offset_right = 754.0 +offset_bottom = 468.0 +theme_override_font_sizes/font_size = 72 +text = "BEGIN" + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="." unique_id=539142729] +stream = ExtResource("3_4bx60") +autoplay = true diff --git a/scenes/levels/level.tscn b/scenes/levels/level.tscn index caad158..19742d5 100644 --- a/scenes/levels/level.tscn +++ b/scenes/levels/level.tscn @@ -23,16 +23,46 @@ position = Vector2(7, -6) [node name="Conductor" parent="Musicians" unique_id=338073346 instance=ExtResource("8_tipki")] unique_name_in_owner = true -position = Vector2(9, 32) +position = Vector2(-15, 39) [node name="Cellist" parent="Musicians" unique_id=233159387 instance=ExtResource("6_85g3d")] unique_name_in_owner = true -position = Vector2(18, 9) +position = Vector2(-59, 36) [node name="Violinist" parent="Musicians" unique_id=557143802 instance=ExtResource("7_choun")] unique_name_in_owner = true -position = Vector2(-48, 26) +position = Vector2(-13, 6) [node name="Bassist" parent="Musicians" unique_id=884981738 instance=ExtResource("8_ya4ey")] unique_name_in_owner = true -position = Vector2(-32, -1) +position = Vector2(33, 38) + +[node name="UI" type="CanvasLayer" parent="." unique_id=731230116] + +[node name="InstructionsBox" type="VBoxContainer" parent="UI" unique_id=135409027] +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -400.0 +offset_top = 300.0 +offset_right = 400.0 +offset_bottom = 466.0 +grow_horizontal = 2 + +[node name="Instructions" type="Label" parent="UI/InstructionsBox" unique_id=957159240] +unique_name_in_owner = true +custom_minimum_size = Vector2(800, 80) +layout_mode = 2 +theme_override_font_sizes/font_size = 24 +text = "Placeholder Instructions!" +horizontal_alignment = 1 +vertical_alignment = 1 +autowrap_mode = 3 + +[node name="OKButton" type="Button" parent="UI/InstructionsBox" unique_id=462603065] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +theme_override_font_sizes/font_size = 24 +text = "CONTINUE" diff --git a/scenes/levels/level_0.tscn b/scenes/levels/level_0.tscn index 276026c..c944321 100644 --- a/scenes/levels/level_0.tscn +++ b/scenes/levels/level_0.tscn @@ -3,16 +3,41 @@ [ext_resource type="PackedScene" uid="uid://irgt7rn5kfap" path="res://scenes/levels/level.tscn" id="1_sxr8l"] [node name="Level0" unique_id=1319338792 instance=ExtResource("1_sxr8l")] +instruction_strings = Array[String](["This is the tutorial level; the little person below is the CONDUCTOR", "When you're ready, press the spacebar to start the music", "OK, so if you've done that, you've probably noticed that the \"music\" here is just a click track...", "...and that it may already be muted. ", "That's a feature, not a bug!", "To turn it back up, press the \"X\" key.", "(\"X\" as in ... \"eXecute\"? ... and like the little button next to the conductor)", "(It'll make more sense in a minute.)", "OK, so now you've probably noticed that you have to *keep* pressing \"X\" to keep the volume up.", "Every time you push \"X\", it *boosts* the volume back up", "And after some time, the volume drops back down on its own", "(This time gets shorter as the game goes on.)", "When you've had enough of the click track, hit \"CONTINUE\" once more to move on"]) [node name="Cellist" parent="Musicians" parent_id_path=PackedInt32Array(237973745) index="1" unique_id=233159387] visible = false +[node name="VolumeBar" parent="Musicians/Cellist/InputPrompt" parent_id_path=PackedInt32Array(233159387, 1882230995) index="0" unique_id=2023225709] +custom_minimum_size = Vector2(24, 48) +offset_left = -32.0 +offset_top = -25.0 +offset_right = -8.0 +offset_bottom = 23.0 + [node name="Violinist" parent="Musicians" parent_id_path=PackedInt32Array(237973745) index="2" unique_id=557143802] visible = false +[node name="VolumeBar" parent="Musicians/Violinist/InputPrompt" parent_id_path=PackedInt32Array(557143802, 1882230995) index="0" unique_id=2023225709] +custom_minimum_size = Vector2(24, 48) +offset_left = 8.0 +offset_top = -25.0 +offset_right = 32.000015 +offset_bottom = 23.0 + [node name="Bassist" parent="Musicians" parent_id_path=PackedInt32Array(237973745) index="3" unique_id=884981738] visible = false +[node name="VolumeBar" parent="Musicians/Bassist/InputPrompt" parent_id_path=PackedInt32Array(884981738, 1882230995) index="0" unique_id=2023225709] +custom_minimum_size = Vector2(24, 48) +offset_left = 8.0 +offset_top = -25.0 +offset_right = 32.0 +offset_bottom = 23.0 + +[node name="Instructions" parent="UI/InstructionsBox" parent_id_path=PackedInt32Array(135409027) index="0" unique_id=957159240] +text = "Welcome to \"A Little Byte-Music\"" + [editable path="Musicians/Conductor"] [editable path="Musicians/Cellist"] [editable path="Musicians/Violinist"] diff --git a/scenes/levels/level_1.tscn b/scenes/levels/level_1.tscn index 8d88fad..e0c19fe 100644 --- a/scenes/levels/level_1.tscn +++ b/scenes/levels/level_1.tscn @@ -3,6 +3,8 @@ [ext_resource type="PackedScene" uid="uid://irgt7rn5kfap" path="res://scenes/levels/level.tscn" id="1_x6ivy"] [node name="Level1" unique_id=1319338792 instance=ExtResource("1_x6ivy")] +level_number = 1 +instruction_strings = Array[String](["In this case, it's the Bassist. Let's call them Bradley.", "This time around, pressing spacebar will actually trigger actual music...", "(Also, instead of pressing \"X\", you'll have to press \"B\" to keep Bradley playing.)", "But be careful! If you try to boost while the volume's already boosted, it won't sound good.", "(You'll also have to restart the level*.)", "(*in future versions.)", "If you haven't already, go ahead and hit spacebar to play the bass track!", "If the song's over, you can hit spacebar again to try again, or click continue to move on."]) [node name="Cellist" parent="Musicians" parent_id_path=PackedInt32Array(237973745) index="1" unique_id=233159387] visible = false @@ -10,6 +12,12 @@ visible = false [node name="Violinist" parent="Musicians" parent_id_path=PackedInt32Array(237973745) index="2" unique_id=557143802] visible = false +[node name="Bassist" parent="Musicians" parent_id_path=PackedInt32Array(237973745) index="3" unique_id=884981738] +position = Vector2(35, 28) + +[node name="Instructions" parent="UI/InstructionsBox" parent_id_path=PackedInt32Array(135409027) index="0" unique_id=957159240] +text = "Oh look, it's a musician!" + [editable path="Musicians/Conductor"] [editable path="Musicians/Cellist"] [editable path="Musicians/Violinist"] diff --git a/scenes/levels/level_2.tscn b/scenes/levels/level_2.tscn index f268445..0e77583 100644 --- a/scenes/levels/level_2.tscn +++ b/scenes/levels/level_2.tscn @@ -3,10 +3,21 @@ [ext_resource type="PackedScene" uid="uid://irgt7rn5kfap" path="res://scenes/levels/level.tscn" id="1_j2425"] [node name="Level2" unique_id=1319338792 instance=ExtResource("1_j2425")] +level_number = 2 +instruction_strings = Array[String](["This is the Cellist; let's call them Charlie!", "Charlie needs a little more prompting, so their volume meter runs down more quickly", "And of course, you still need to keep Bradley on time.", "(Conducting is hard!)", "Again, press spacebar to start/stop/restart the song.", "And when you're ready for the last level, click CONTINUE."]) + +[node name="Cellist" parent="Musicians" parent_id_path=PackedInt32Array(237973745) index="1" unique_id=233159387] +position = Vector2(-63, 29) [node name="Violinist" parent="Musicians" parent_id_path=PackedInt32Array(237973745) index="2" unique_id=557143802] visible = false +[node name="Bassist" parent="Musicians" parent_id_path=PackedInt32Array(237973745) index="3" unique_id=884981738] +position = Vector2(35, 28) + +[node name="Instructions" parent="UI/InstructionsBox" parent_id_path=PackedInt32Array(135409027) index="0" unique_id=957159240] +text = "Whoa, another one!" + [editable path="Musicians/Conductor"] [editable path="Musicians/Cellist"] [editable path="Musicians/Violinist"] diff --git a/scenes/levels/level_3.tscn b/scenes/levels/level_3.tscn index 92af282..ebfa195 100644 --- a/scenes/levels/level_3.tscn +++ b/scenes/levels/level_3.tscn @@ -3,6 +3,20 @@ [ext_resource type="PackedScene" uid="uid://irgt7rn5kfap" path="res://scenes/levels/level.tscn" id="1_o8c3j"] [node name="Level3" unique_id=1319338792 instance=ExtResource("1_o8c3j")] +level_number = 3 +instruction_strings = Array[String](["Vic the Violinist is *such* a diva, and needs nearly constant attention.", "But of course, you can't neglect Bradley and Charlie.", "Go ahead and press spacebar, and see how you do!", ""]) + +[node name="Cellist" parent="Musicians" parent_id_path=PackedInt32Array(237973745) index="1" unique_id=233159387] +position = Vector2(-63, 29) + +[node name="Violinist" parent="Musicians" parent_id_path=PackedInt32Array(237973745) index="2" unique_id=557143802] +position = Vector2(-11, -1) + +[node name="Bassist" parent="Musicians" parent_id_path=PackedInt32Array(237973745) index="3" unique_id=884981738] +position = Vector2(35, 28) + +[node name="Instructions" parent="UI/InstructionsBox" parent_id_path=PackedInt32Array(135409027) index="0" unique_id=957159240] +text = "Last level! The whole band is here now." [editable path="Musicians/Conductor"] [editable path="Musicians/Cellist"] diff --git a/scenes/musicians/bassist.tscn b/scenes/musicians/bassist.tscn index 1bb1538..860508b 100644 --- a/scenes/musicians/bassist.tscn +++ b/scenes/musicians/bassist.tscn @@ -2,31 +2,27 @@ [ext_resource type="PackedScene" uid="uid://c1tceq1kcqngi" path="res://scenes/musicians/musician.tscn" id="1_ec361"] [ext_resource type="SpriteFrames" uid="uid://c34ha4ekm1xor" path="res://resources/sprite_frames/bass_sprite_frames.tres" id="2_58d2m"] -[ext_resource type="Texture2D" uid="uid://bw3nb0oru0pam" path="res://assets/ui/keyboard_b.png" id="3_qpy72"] [ext_resource type="Texture2D" uid="uid://bmc2ijkmfndv7" path="res://assets/ui/keyboard_b_outline.png" id="4_5nfdv"] [ext_resource type="AudioStream" uid="uid://cc6smyxkrrvfr" path="res://assets/audio/eine-kleine-bass.wav" id="5_58d2m"] -[ext_resource type="PackedScene" uid="uid://r5ec5td6b2b2" path="res://scenes/tilemaps.tscn" id="6_qpy72"] [sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_58d2m"] -polygon = PackedVector2Array(-2, 13, 3, 14, 6, 13) +polygon = PackedVector2Array(-6, 14, -3, 15, 2, 14) [node name="Bassist" unique_id=233159387 instance=ExtResource("1_ec361")] sprite_frames = ExtResource("2_58d2m") -solid_texture = ExtResource("3_qpy72") -outline_texture = ExtResource("4_5nfdv") +frame_progress = 0.0 +flip_h = true +input_action = "bass" [node name="Audio" parent="." index="0" unique_id=1183742914] stream = ExtResource("5_58d2m") [node name="Light" parent="." index="1" unique_id=428469575] -position = Vector2(7, 7) +position = Vector2(1, 6) [node name="Occluder" parent="." index="2" unique_id=807216766] occluder = SubResource("OccluderPolygon2D_58d2m") -[node name="InputPrompt" parent="." index="3" unique_id=590379112] -position = Vector2(18, 4) +[node name="InputPrompt" parent="." index="7" unique_id=1882230995] +position = Vector2(-16, 0) texture = ExtResource("4_5nfdv") - -[node name="Tilemaps" parent="." index="4" unique_id=875292520 instance=ExtResource("6_qpy72")] -visible = false diff --git a/scenes/musicians/cellist.tscn b/scenes/musicians/cellist.tscn index 9753ac2..3a191fc 100644 --- a/scenes/musicians/cellist.tscn +++ b/scenes/musicians/cellist.tscn @@ -5,16 +5,17 @@ [ext_resource type="Texture2D" uid="uid://dahurq3y0kh20" path="res://assets/ui/keyboard_c.png" id="3_vjovb"] [ext_resource type="Texture2D" uid="uid://d1onhhk6xorit" path="res://assets/ui/keyboard_c_outline.png" id="4_vmq6l"] [ext_resource type="AudioStream" uid="uid://duovjdbif7wkw" path="res://assets/audio/eine-kleine-cello.wav" id="5_vjovb"] -[ext_resource type="PackedScene" uid="uid://r5ec5td6b2b2" path="res://scenes/tilemaps.tscn" id="6_vmq6l"] [sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_vjovb"] polygon = PackedVector2Array(-4, 16, -7, 14, 0, 13) [node name="Cellist" unique_id=233159387 instance=ExtResource("1_gkxwc")] sprite_frames = ExtResource("2_3cfa0") -flip_h = true +frame_progress = 0.0 solid_texture = ExtResource("3_vjovb") outline_texture = ExtResource("4_vmq6l") +boost_note_type = 2 +input_action = "cello" [node name="Audio" parent="." index="0" unique_id=1183742914] stream = ExtResource("5_vjovb") @@ -25,9 +26,5 @@ position = Vector2(8, 5) [node name="Occluder" parent="." index="2" unique_id=807216766] occluder = SubResource("OccluderPolygon2D_vjovb") -[node name="InputPrompt" parent="." index="3" unique_id=590379112] -position = Vector2(17, 3) +[node name="InputPrompt" parent="." index="8" unique_id=1882230995] texture = ExtResource("4_vmq6l") - -[node name="Tilemaps" parent="." index="4" unique_id=875292520 instance=ExtResource("6_vmq6l")] -visible = false diff --git a/scenes/musicians/conductor.tscn b/scenes/musicians/conductor.tscn index f33c38d..0347f81 100644 --- a/scenes/musicians/conductor.tscn +++ b/scenes/musicians/conductor.tscn @@ -1,19 +1,24 @@ [gd_scene format=3 uid="uid://drwm126itwavd"] [ext_resource type="PackedScene" uid="uid://c1tceq1kcqngi" path="res://scenes/musicians/musician.tscn" id="1_td0jb"] -[ext_resource type="Texture2D" uid="uid://bcw48038qg8od" path="res://assets/ui/keyboard_r.png" id="3_lajfc"] -[ext_resource type="Texture2D" uid="uid://do6jqp2l6nmwm" path="res://assets/ui/keyboard_r_outline.png" id="4_grljo"] +[ext_resource type="SpriteFrames" uid="uid://brmhup007maeh" path="res://resources/sprite_frames/conductor_sprite_frames.tres" id="2_lajfc"] [ext_resource type="AudioStream" uid="uid://b8n6p428csquv" path="res://assets/audio/eine-kleine-click.wav" id="5_grljo"] +[ext_resource type="Texture2D" uid="uid://doepfsn70f3we" path="res://assets/ui/keyboard_x_outline.png" id="6_4kkbu"] [sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_lajfc"] -polygon = PackedVector2Array(-4, 15, -2, 14, 0, 14) +polygon = PackedVector2Array(-1, 14, 2, 14, 4, 15) [node name="Conductor" unique_id=233159387 instance=ExtResource("1_td0jb")] -solid_texture = ExtResource("3_lajfc") -outline_texture = ExtResource("4_grljo") +sprite_frames = ExtResource("2_lajfc") +frame_progress = 0.0 +flip_h = true +input_action = "execute" [node name="Audio" parent="." index="0" unique_id=1183742914] stream = ExtResource("5_grljo") [node name="Occluder" parent="." index="2" unique_id=807216766] occluder = SubResource("OccluderPolygon2D_lajfc") + +[node name="InputPrompt" parent="." index="7" unique_id=1882230995] +texture = ExtResource("6_4kkbu") diff --git a/scenes/musicians/musician.tscn b/scenes/musicians/musician.tscn index af6b024..d132026 100644 --- a/scenes/musicians/musician.tscn +++ b/scenes/musicians/musician.tscn @@ -2,11 +2,9 @@ [ext_resource type="Texture2D" uid="uid://42h7vrqekyma" path="res://assets/sprites/symphonyguys.png" id="1_7bqbn"] [ext_resource type="Script" uid="uid://djmn4qgj45j2p" path="res://scripts/musician.gd" id="1_ksqn6"] -[ext_resource type="Texture2D" uid="uid://cacp5ppga66l8" path="res://assets/ui/keyboard_s.svg" id="3_1d8vp"] -[ext_resource type="PackedScene" uid="uid://cwdkw1p371bks" path="res://scenes/input_prompt.tscn" id="3_6yfn3"] [ext_resource type="PackedScene" uid="uid://ckx47081eegis" path="res://scenes/light.tscn" id="3_svwww"] [ext_resource type="Texture2D" uid="uid://ck6iss1he1kpq" path="res://assets/ui/keyboard_s_outline.svg" id="4_vrlc6"] -[ext_resource type="AudioStream" uid="uid://b13l86o40lpvg" path="res://assets/audio/drone-trombone.wav" id="5_1d8vp"] +[ext_resource type="AudioStream" uid="uid://bd01iv6fpqbdh" path="res://assets/audio/eine-kleine-viol.wav" id="5_1d8vp"] [sub_resource type="AtlasTexture" id="AtlasTexture_5pb5f"] atlas = ExtResource("1_7bqbn") @@ -52,14 +50,33 @@ animations = [{ [sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_1d8vp"] polygon = PackedVector2Array(-4, 14, -1, 13, 0, 14) +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1d8vp"] +bg_color = Color(0.6, 0.6, 0.6, 0) +draw_center = false +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7bqbn"] +bg_color = Color(0, 0, 0, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.8, 0.8, 0.8, 0) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 + [node name="Musician" type="AnimatedSprite2D" unique_id=233159387] sprite_frames = SubResource("SpriteFrames_1b7aj") animation = &"idle" autoplay = "idle" -frame_progress = 0.25206318 +frame_progress = 0.4639073 script = ExtResource("1_ksqn6") -solid_texture = ExtResource("3_1d8vp") -outline_texture = ExtResource("4_vrlc6") +boost_note_type = 4 input_action = "sample" [node name="Audio" type="AudioStreamPlayer2D" parent="." unique_id=1183742914] @@ -74,25 +91,46 @@ position = Vector2(4, 9) unique_name_in_owner = true occluder = SubResource("OccluderPolygon2D_1d8vp") -[node name="InputPrompt" parent="." unique_id=590379112 instance=ExtResource("3_6yfn3")] -unique_name_in_owner = true -position = Vector2(16, 0) -texture = ExtResource("4_vrlc6") - [node name="MusicianCamera" type="Camera2D" parent="." unique_id=478462884] zoom = Vector2(12, 12) +editor_draw_screen = false -[node name="VolumeBar" type="ProgressBar" parent="." unique_id=2023225709] +[node name="BoostTimer" type="Timer" parent="." unique_id=1715371353] unique_name_in_owner = true -custom_minimum_size = Vector2(24, 48) -offset_left = 25.0 -offset_top = -25.0 -offset_right = 49.0 -offset_bottom = 23.0 + +[node name="BeatTimer" type="Timer" parent="." unique_id=1308693046] +unique_name_in_owner = true + +[node name="BeatParticles" type="CPUParticles2D" parent="." unique_id=1182124992] +light_mask = 0 +position = Vector2(0, -15) +emitting = false +lifetime = 0.15000000000000002 +one_shot = true +direction = Vector2(0, -1) +spread = 30.0 +gravity = Vector2(0, 490) +initial_velocity_min = 75.0 +initial_velocity_max = 100.0 + +[node name="InputPrompt" type="Sprite2D" parent="." unique_id=1882230995] +unique_name_in_owner = true +position = Vector2(16, 0) +scale = Vector2(0.25, 0.25) +texture = ExtResource("4_vrlc6") + +[node name="VolumeBar" type="ProgressBar" parent="InputPrompt" unique_id=2023225709] +unique_name_in_owner = true +show_behind_parent = true +light_mask = 0 +custom_minimum_size = Vector2(48, 48) +offset_left = -24.0 +offset_top = -24.0 +offset_right = 24.0 +offset_bottom = 24.0 +theme_override_styles/background = SubResource("StyleBoxFlat_1d8vp") +theme_override_styles/fill = SubResource("StyleBoxFlat_7bqbn") min_value = -80.0 max_value = 0.0 fill_mode = 3 show_percentage = false - -[node name="BoostTimer" type="Timer" parent="." unique_id=1715371353] -unique_name_in_owner = true diff --git a/scenes/musicians/violinist.tscn b/scenes/musicians/violinist.tscn index e4852b3..f592d89 100644 --- a/scenes/musicians/violinist.tscn +++ b/scenes/musicians/violinist.tscn @@ -2,31 +2,24 @@ [ext_resource type="PackedScene" uid="uid://c1tceq1kcqngi" path="res://scenes/musicians/musician.tscn" id="1_bgcse"] [ext_resource type="SpriteFrames" uid="uid://bkq7b1w5jh1ec" path="res://resources/sprite_frames/viol_sprite_frames.tres" id="2_pec4u"] -[ext_resource type="Texture2D" uid="uid://bm53tpx7cbocx" path="res://assets/ui/keyboard_v.png" id="3_4d75b"] [ext_resource type="Texture2D" uid="uid://cctoyonq28i8q" path="res://assets/ui/keyboard_v_outline.png" id="4_noys6"] -[ext_resource type="AudioStream" uid="uid://bd01iv6fpqbdh" path="res://assets/audio/eine-kleine-viol.wav" id="5_pec4u"] -[ext_resource type="PackedScene" uid="uid://r5ec5td6b2b2" path="res://scenes/tilemaps.tscn" id="6_4d75b"] [sub_resource type="OccluderPolygon2D" id="OccluderPolygon2D_pec4u"] -polygon = PackedVector2Array(-1, 14, 2, 13, 4, 13) +polygon = PackedVector2Array(-5, 13, -2, 13, 1, 14) [node name="Violinist" unique_id=233159387 instance=ExtResource("1_bgcse")] sprite_frames = ExtResource("2_pec4u") -solid_texture = ExtResource("3_4d75b") -outline_texture = ExtResource("4_noys6") - -[node name="Audio" parent="." index="0" unique_id=1183742914] -stream = ExtResource("5_pec4u") +frame_progress = 0.0 +flip_h = true +boost_note_type = 1 +input_action = "viol" [node name="Light" parent="." index="1" unique_id=428469575] -position = Vector2(7, 7) +position = Vector2(2, 9) [node name="Occluder" parent="." index="2" unique_id=807216766] occluder = SubResource("OccluderPolygon2D_pec4u") -[node name="InputPrompt" parent="." index="3" unique_id=590379112] -position = Vector2(18, 4) +[node name="InputPrompt" parent="." index="7" unique_id=1882230995] +position = Vector2(-16, 0) texture = ExtResource("4_noys6") - -[node name="Tilemaps" parent="." index="4" unique_id=875292520 instance=ExtResource("6_4d75b")] -visible = false diff --git a/scenes/outro.gd b/scenes/outro.gd new file mode 100644 index 0000000..9fa0f5a --- /dev/null +++ b/scenes/outro.gd @@ -0,0 +1,34 @@ +#@tool +#@icon(icon_path: String) +#class_name MyNode +extends Node +## Documentation comments + +#signal +#enum +#const +#@export var +#var +#@onready var +@onready var outro_stream: AudioStreamPlayer = $OutroStream + +## OVERRIDES + +func _ready() -> void: + outro_stream.connect("finished", on_stream_finished) + +func _process(_delta: float) -> void: + pass + +func _physics_process(_delta: float) -> void: + pass + +## CORE + +## PRIVATE/HELPER + +## RECEIVERS +func on_stream_finished() -> void: + get_tree().quit() + +## SETTERS/GETTERS diff --git a/scenes/outro.gd.uid b/scenes/outro.gd.uid new file mode 100644 index 0000000..ad940e9 --- /dev/null +++ b/scenes/outro.gd.uid @@ -0,0 +1 @@ +uid://c7h7awn4j2qv3 diff --git a/scenes/outro.tscn b/scenes/outro.tscn new file mode 100644 index 0000000..c4be79e --- /dev/null +++ b/scenes/outro.tscn @@ -0,0 +1,24 @@ +[gd_scene format=3 uid="uid://c7eypje2fjbyx"] + +[ext_resource type="Script" uid="uid://c7h7awn4j2qv3" path="res://scenes/outro.gd" id="1_a6ogt"] +[ext_resource type="Texture2D" uid="uid://cveidfttgu174" path="res://assets/misc/outro-screen-ALBM.png" id="1_nvx42"] +[ext_resource type="AudioStream" uid="uid://b6xe72a7nd2ol" path="res://assets/audio/eine-kleine-fast.wav" id="2_r6h2c"] + +[node name="Outro" type="Control" unique_id=1312269195] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_a6ogt") + +[node name="TextureRect" type="TextureRect" parent="." unique_id=1920943136] +layout_mode = 0 +offset_right = 40.0 +offset_bottom = 40.0 +texture = ExtResource("1_nvx42") + +[node name="OutroStream" type="AudioStreamPlayer" parent="." unique_id=2063751836] +stream = ExtResource("2_r6h2c") +autoplay = true diff --git a/scripts/intro.gd b/scripts/intro.gd new file mode 100644 index 0000000..a00e631 --- /dev/null +++ b/scripts/intro.gd @@ -0,0 +1,37 @@ +#@tool +#@icon(icon_path: String) +#class_name MyNode +extends Node +## Documentation comments + +#signal +#enum +#const + +const LEVEL_0 = preload("uid://1mhb537c1qxd") + +#@export var +#var + +@onready var start_button: Button = %StartButton + +## OVERRIDES + +func _ready() -> void: + start_button.connect("pressed", on_start_button_pressed) + +func _process(_delta: float) -> void: + pass + +func _physics_process(_delta: float) -> void: + pass + +## CORE + +## PRIVATE/HELPER + +## RECEIVERS +func on_start_button_pressed() -> void: + get_tree().change_scene_to_packed(LEVEL_0) + +## SETTERS/GETTERS diff --git a/scripts/intro.gd.uid b/scripts/intro.gd.uid new file mode 100644 index 0000000..b1700ba --- /dev/null +++ b/scripts/intro.gd.uid @@ -0,0 +1 @@ +uid://o45uvey2wnsb diff --git a/scripts/level.gd b/scripts/level.gd index 8d16a4d..015064d 100644 --- a/scripts/level.gd +++ b/scripts/level.gd @@ -7,45 +7,71 @@ extends Node2D #signal #enum #const +const EINE_KLEINE_BLANK = preload("uid://diaivgv13xa8k") +const OUTRO = preload("uid://c7eypje2fjbyx") @export var level_number: int = 0 +@export var instruction_strings: Array[String] -# Musicians -@onready var conductor: Musician = %Conductor -@onready var violinist: Musician = %Violinist -@onready var cellist: Musician = %Cellist -@onready var bassist: Musician = %Bassist +#var musicians: Array[Musician] +var next_instruction: String + +@onready var ok_button: Button = %OKButton +@onready var instructions: Label = %Instructions @onready var tilemaps: Tilemaps = $Tilemaps - - - +## Musicians +@onready var conductor: Musician = %Conductor +@onready var bassist: Musician = %Bassist +@onready var cellist: Musician = %Cellist +@onready var violinist: Musician = %Violinist ## OVERRIDES func _ready() -> void: + _connect_signals() tilemaps.canvas_modulate.visible = true - SceneManager.build_level(level_number) - + #if instruction_strings: + #next_instruction = instruction_strings.pop_front() + #SceneManager.load_level(level_number) + if level_number < 3: + violinist.queue_free() + if level_number < 2: + cellist.queue_free() + if level_number < 1: + bassist.queue_free() + else: + conductor.audio.stream = EINE_KLEINE_BLANK + conductor.input_prompt.visible = false + #musicians = [ + #conductor, + #bassist, + #cellist, + #violinist + #] #func _process(_delta: float) -> void: #pass # #func _physics_process(_delta: float) -> void: #pass -func _unhandled_input(event: InputEvent) -> void: - if event.is_action_pressed("ready"): - conductor.enter_exit() - if event.is_action_pressed("viol"): - violinist.enter_exit() - if event.is_action_pressed("cello"): - cellist.enter_exit() - if event.is_action_pressed("bass"): - bassist.enter_exit() - ## CORE +func ui_continue() -> void: + if instruction_strings.size() > 0: + instructions.text = instruction_strings.pop_front() + else: + level_number += 1 + if level_number <= 3: + SceneManager.load_level(level_number) + else: + get_tree().change_scene_to_packed(OUTRO) ## PRIVATE/HELPER - + +func _connect_signals() -> void: + ok_button.connect("pressed", on_ok_button_pressed) + ## RECEIVERS +func on_ok_button_pressed() -> void: + ui_continue() ## SETTERS/GETTERS diff --git a/scripts/musician.gd b/scripts/musician.gd index 1ec1633..10e703c 100644 --- a/scripts/musician.gd +++ b/scripts/musician.gd @@ -8,18 +8,19 @@ extends AnimatedSprite2D #enum #const -@export_group("Input Textures") -@export var solid_texture: Texture2D -@export var outline_texture: Texture2D +#@export_group("Input Textures") +#@export var solid_texture: Texture2D +#@export var outline_texture: Texture2D -@export var beats_per_boost: int = 4 @export var song_tempo: int = 120 -@export_enum("sample", "viol", "cello", "bass", "ready") var input_action: String +@export_enum("whole:4", "half:2", "quarter:1") var boost_note_type: int +@export_enum("sample", "viol", "cello", "bass", "execute") var input_action: String +var beat_count: int = 0 var decay_length: float var decay_rate: float -var is_active: bool = false +var is_playing_music: bool = false var is_boosted: bool var is_over_boosted: bool = false var seconds_per_beat: float @@ -30,17 +31,19 @@ var useconds_per_beat: int @onready var occluder: LightOccluder2D = %Occluder @onready var input_prompt: Sprite2D = %InputPrompt @onready var volume_bar: ProgressBar = %VolumeBar +@onready var beat_timer: Timer = %BeatTimer @onready var boost_timer: Timer = %BoostTimer +@onready var beat_particles: CPUParticles2D = $BeatParticles ## OVERRIDES func _ready() -> void: light.visible = false _connect_signals() - - input_prompt.texture = outline_texture + #input_prompt.texture = outline_texture seconds_per_beat = 60.0/float(song_tempo) - decay_length = beats_per_boost * seconds_per_beat + beat_timer.wait_time = seconds_per_beat + decay_length = boost_note_type * seconds_per_beat print("this musician's boosts will last %s seconds" % decay_length) boost_timer.wait_time = decay_length decay_rate = 80.0 / decay_length @@ -48,8 +51,8 @@ func _ready() -> void: func _process(delta: float) -> void: if is_over_boosted: - distort_pitch(sin(Time.get_ticks_msec())) - if is_active and not is_boosted: + distort_pitch() + if is_playing_music and not is_boosted: drop_volume(decay_rate * delta) volume_bar.value = audio.volume_db @@ -67,39 +70,58 @@ func boost_volume() -> void: is_boosted = true boost_timer.start() -func distort_pitch(distortion: float) -> void: - print("distorting by %s" % distortion) - audio.pitch_scale += distortion - print("pitch scale is %s" % audio.pitch_scale) +func distort_pitch() -> void: + audio.pitch_scale += randf_range(-0.001, 0.0001) func drop_volume(d_r: float) -> void: audio.volume_db -= d_r func play_pause() -> void: - if is_active: - play("idle") - audio.stop() - light.visible = false - is_active = false - input_prompt.texture = outline_texture + if not is_playing_music: + _play() else: - play("default") - audio.play() - if not is_boosted: - is_boosted = true - boost_timer.start() - light.visible = true - is_active = true - input_prompt.texture = solid_texture + _pause() ## PRIVATE/HELPER func _connect_signals() -> void: boost_timer.connect("timeout", on_boost_timer_timeout) audio.connect("finished", play_pause) + beat_timer.connect("timeout", on_beat_timer_timeout) + +func _play() -> void: + play("default") + audio.play() + beat_timer.start() + if not is_boosted: + is_boosted = true + boost_timer.start() + light.visible = true + is_playing_music = true + #input_prompt.texture = solid_texture + +func _pause() -> void: + play("idle") + audio.stop() + beat_timer.stop() + light.visible = false + is_playing_music = false + #input_prompt.texture = outline_texture ## RECEIVERS +func on_beat_timer_timeout() -> void: + beat_count += 1 + if beat_count % 4 == 0: + beat_particles.color = Color.RED + beat_particles.amount = 24 + beat_particles.lifetime = 0.2 + else: + beat_particles.color = Color.WHITE + beat_particles.amount = 8 + beat_particles.lifetime = 0.15 + beat_particles.restart() + func on_boost_timer_timeout() -> void: print("boost over") boost_timer.stop() diff --git a/scripts/scene_manager.gd b/scripts/scene_manager.gd index f022130..fa1fee0 100644 --- a/scripts/scene_manager.gd +++ b/scripts/scene_manager.gd @@ -6,23 +6,37 @@ extends Node #signal #enum #const + +const LEVEL_0 = preload("uid://1mhb537c1qxd") +const LEVEL_1 = preload("uid://dwqw0ieu8smw7") +const LEVEL_2 = preload("uid://cdbfis58lkruf") +const LEVEL_3 = preload("uid://ccoc6j4r7yixt") + + #@export var -var levels: Array[Level] -var current_level: Level +var levels: Array[PackedScene] +var current_level: PackedScene #@onready var ## OVERRIDES func _ready() -> void: - pass + levels = [ + LEVEL_0, + LEVEL_1, + LEVEL_2, + LEVEL_3 + ] #func _process(_delta: float) -> void: #pass ## CORE -func build_level(level_number: int) -> void: +func load_level(level_number: int) -> void: print_debug("Building level #%s" % level_number) + get_tree().change_scene_to_packed(levels[level_number]) + ## PRIVATE/HELPER