From 3080806d8c2733661804828000e861e7f6dc7e8b Mon Sep 17 00:00:00 2001 From: SchimmelSpreu83 Date: Mon, 22 Jun 2026 19:28:12 +0200 Subject: [PATCH] Small improvements - Lowered bpm of the rhythm setup. --- game/_development/ayuroo/Magician.glb.import | 15 +++++++- .../addons/version_display/version_display.gd | 6 ++-- .../version_display/version_display.tscn | 1 + game/project.godot | 1 + .../controller_rumble/rumble_component.gd | 10 +++--- game/src/game.gd | 3 +- .../setup/controller/controller_setup_menu.gd | 32 ++++++++++++++++++ .../controller/controller_setup_menu.tscn | 30 +++++++++++++++- game/src/ui/setup/initial_setup_menu.gd | 3 +- game/src/ui/setup/rhythm/80bpm_metronome.ogg | Bin 0 -> 11543 bytes .../setup/rhythm/80bpm_metronome.ogg.import | 19 +++++++++++ game/src/ui/setup/rhythm/rhythm_setup_menu.gd | 14 ++++++++ .../ui/setup/rhythm/rhythm_setup_menu.tscn | 11 +++--- game/src/worlds/exposition/exposition.tscn | 1 - 14 files changed, 129 insertions(+), 17 deletions(-) create mode 100644 game/src/ui/setup/rhythm/80bpm_metronome.ogg create mode 100644 game/src/ui/setup/rhythm/80bpm_metronome.ogg.import diff --git a/game/_development/ayuroo/Magician.glb.import b/game/_development/ayuroo/Magician.glb.import index fca6680..7e0f45f 100644 --- a/game/_development/ayuroo/Magician.glb.import +++ b/game/_development/ayuroo/Magician.glb.import @@ -39,7 +39,20 @@ import_script/path="" materials/extract=1 materials/extract_format=0 materials/extract_path="" -_subresources={} +_subresources={ +"materials": { +"@MATERIAL:0": { +"use_external/enabled": true, +"use_external/fallback_path": "res://_development/ayuroo/@MATERIAL_0.tres", +"use_external/path": "res://_development/ayuroo/@MATERIAL_0.tres" +}, +"@MATERIAL:1": { +"use_external/enabled": true, +"use_external/fallback_path": "res://_development/ayuroo/@MATERIAL_1.tres", +"use_external/path": "res://_development/ayuroo/@MATERIAL_1.tres" +} +} +} gltf/naming_version=2 gltf/embedded_image_handling=1 gltf/texture_map_mode=0 diff --git a/game/addons/version_display/version_display.gd b/game/addons/version_display/version_display.gd index 80fbc2b..7230748 100644 --- a/game/addons/version_display/version_display.gd +++ b/game/addons/version_display/version_display.gd @@ -3,7 +3,7 @@ extends CanvasLayer const DEFAULT_TEXT: String = "{game_name} - {state} - V - {version}" const UNDEFINED_TEXT: String = "Undefined" -const States: String = "Pre-Production,Pre-Alpha,Early-Alpha,Alpha,Beta,Early-Access,Release" +const States: String = "Prototype,Pre-Production,Alpha,Beta,Early-Access,Release" @export_custom(PROPERTY_HINT_ENUM_SUGGESTION, States) var state: String = "Pre-Production" @export_multiline var text_override: String = DEFAULT_TEXT: set = set_text @@ -26,7 +26,7 @@ func set_text(new_text: String) -> void: func _update_hud() -> void: - if not self.is_node_ready(): - await self.ready + if not is_node_ready(): + await ready version_label.set_text(text_override) diff --git a/game/addons/version_display/version_display.tscn b/game/addons/version_display/version_display.tscn index 24708d2..e9ef16c 100644 --- a/game/addons/version_display/version_display.tscn +++ b/game/addons/version_display/version_display.tscn @@ -7,6 +7,7 @@ process_mode = 3 layer = 64 follow_viewport_enabled = true script = ExtResource("1_jk1t8") +text_override = "{game_name} - {state} - v{version}" [node name="MarginContainer" type="MarginContainer" parent="." unique_id=1238717635] anchors_preset = 15 diff --git a/game/project.godot b/game/project.godot index 978cce0..2105906 100644 --- a/game/project.godot +++ b/game/project.godot @@ -11,6 +11,7 @@ config_version=5 [application] config/name="MagicNStuff" +config/version="0.0.1" config/tags=PackedStringArray("game", "horror", "open_world", "story") run/main_scene="uid://ga0d5817hbc8" config/features=PackedStringArray("4.7", "Forward Plus") diff --git a/game/src/core/controller_rumble/rumble_component.gd b/game/src/core/controller_rumble/rumble_component.gd index 81bd976..7447483 100644 --- a/game/src/core/controller_rumble/rumble_component.gd +++ b/game/src/core/controller_rumble/rumble_component.gd @@ -59,6 +59,7 @@ var _editor_stop_test_vibration: Callable = stop_vibration get = get_magnitude_multiplier, set = set_magnitude_multiplier +var animated_config := RumbleConfig.new() var animated_weak_magnitude: float = 0.0: set(value): animated_weak_magnitude = clampf(value, 0.0, 1.0) @@ -77,15 +78,14 @@ func _physics_process(delta: float) -> void: can_vibrate() and not is_zero_approx(animated_weak_magnitude + animated_strong_magnitude) ): - var config := RumbleConfig.new() - config.weak_intensity = animated_weak_magnitude - config.strong_intensity = animated_strong_magnitude - config.duration = delta + animated_config.weak_intensity = animated_weak_magnitude + animated_config.strong_intensity = animated_strong_magnitude + animated_config.duration = delta #_weak_magnitude = remap(_weak_magnitude, 0.0, 1.0, min_weak_magnitude_threshold * float(_weak_magnitude > 0.0), 1.0) #_strong_magnitude = remap(_strong_magnitude, 0.0, 1.0, min_strong_magnitude_threshold * float(_strong_magnitude > 0.0), 1.0) - RumbleConductor.add_rumble(config, device) + RumbleConductor.add_rumble(animated_config, device) #Input.start_joy_vibration.call_deferred(device, _weak_magnitude, _strong_magnitude, delta) animated_weak_magnitude = 0.0 animated_strong_magnitude = 0.0 diff --git a/game/src/game.gd b/game/src/game.gd index d104f3f..54cfb56 100644 --- a/game/src/game.gd +++ b/game/src/game.gd @@ -7,6 +7,7 @@ extends Node const USER_SETTINGS_PATH: String = "user://settings.ini" const SAVE_DIR: String = "user://saves/%d/" # TODO "user://ch1/saves/%d/ # Chapter 1 const SAVE_PATH: String = SAVE_DIR + "%s" +const SAVE_FILENAME: String = "save_data.tres" const INITIAL_SAVE_DATA: SaveData = preload("uid://b8ojagpq5pxr2") static var is_debug: bool = true @@ -63,7 +64,7 @@ func save_game() -> Error: if not is_instance_valid(world): return ERR_DOES_NOT_EXIST - var file_name: String = "save_data.tres" + var file_name: String = SAVE_FILENAME if is_instance_valid(world): save_data.current_world = ResourceUID.path_to_uid(world.scene_file_path) diff --git a/game/src/ui/setup/controller/controller_setup_menu.gd b/game/src/ui/setup/controller/controller_setup_menu.gd index 90c7ddf..9667a39 100644 --- a/game/src/ui/setup/controller/controller_setup_menu.gd +++ b/game/src/ui/setup/controller/controller_setup_menu.gd @@ -19,6 +19,9 @@ var _duration_idx: int = 0 @onready var vibrate_texture: TextureRect = %VibrateTexture @onready var confirm_button: Button = %ConfirmButton +@onready var deny_button: Button = %DenyButton + +@onready var status_label: Label = %StatusLabel func _ready() -> void: @@ -32,6 +35,7 @@ func _ready() -> void: min_weak_magnitude.value_changed.connect(_on_min_weak_magnitude_value_changed) min_strong_magnitude.value_changed.connect(_on_min_strong_magnitude_value_changed) confirm_button.pressed.connect(confirm) + deny_button.pressed.connect(confirm) visibility_changed.connect(_on_visibility_changed) _on_visibility_changed() @@ -54,10 +58,22 @@ func confirm() -> void: confirmed.emit() +func stop_setup() -> void: + disable_controls() + + +func disable_controls() -> void: + min_weak_magnitude.editable = false + min_strong_magnitude.editable = false + confirm_button.disabled = true + deny_button.disabled = true + + func _test_vibration() -> void: # If is_testing_weak and is_testing_strong are both false, vibrate both together. var weak_enabled: bool = is_testing_weak or (not is_testing_weak and not is_testing_strong) var strong_enabled: bool = is_testing_strong or (not is_testing_weak and not is_testing_strong) + rumble_component.data.weak_intensity = MIN_WEAK_MAGNITUDE * float(weak_enabled) rumble_component.data.strong_intensity = MIN_STRONG_MAGNITUDE * float(strong_enabled) @@ -86,6 +102,18 @@ func _vibrate_texture() -> void: tween.tween_property(vibrate_texture, ^"rotation_degrees", 0.0, 0.1) +func _update_status_label() -> void: + var weak_enabled: bool = is_testing_weak or (not is_testing_weak and not is_testing_strong) + var strong_enabled: bool = is_testing_strong or (not is_testing_weak and not is_testing_strong) + + if weak_enabled and strong_enabled: + status_label.text = "Testing: Both Motors" + elif weak_enabled: + status_label.text = "Testing: Weak Motor" + else: + status_label.text = "Testing: Strong Motor" + + func _on_visibility_changed() -> void: if is_visible_in_tree(): repeat_vibration_timer.start() @@ -109,15 +137,19 @@ func _on_min_strong_magnitude_value_changed(value: float) -> void: func _on_weak_slider_focused() -> void: is_testing_weak = true + _update_status_label() func _on_weak_slider_unfocused() -> void: is_testing_weak = false + _update_status_label() func _on_strong_slider_focused() -> void: is_testing_strong = true + _update_status_label() func _on_strong_slider_unfocused() -> void: is_testing_strong = false + _update_status_label() diff --git a/game/src/ui/setup/controller/controller_setup_menu.tscn b/game/src/ui/setup/controller/controller_setup_menu.tscn index 5487e87..d63622f 100644 --- a/game/src/ui/setup/controller/controller_setup_menu.tscn +++ b/game/src/ui/setup/controller/controller_setup_menu.tscn @@ -69,10 +69,32 @@ grow_vertical = 0 focus_neighbor_left = NodePath(".") focus_neighbor_top = NodePath("../VBoxContainer/MinStrongMagnitude") focus_neighbor_right = NodePath(".") +focus_neighbor_bottom = NodePath("../DenyButton") +focus_next = NodePath("../DenyButton") +focus_previous = NodePath("../VBoxContainer/MinStrongMagnitude") +text = "Confirm" + +[node name="DenyButton" type="Button" parent="." unique_id=675156855] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.5 +anchor_top = 0.75 +anchor_right = 0.5 +anchor_bottom = 0.75 +offset_left = -109.5 +offset_top = 10.0 +offset_right = 109.5 +offset_bottom = 41.0 +grow_horizontal = 2 +grow_vertical = 0 +focus_neighbor_left = NodePath(".") +focus_neighbor_top = NodePath("../ConfirmButton") +focus_neighbor_right = NodePath(".") focus_neighbor_bottom = NodePath(".") focus_next = NodePath(".") focus_previous = NodePath("../VBoxContainer/MinStrongMagnitude") -text = "Confirm" +text = "I wont be using a controller" [node name="VibrateTexture" type="TextureRect" parent="." unique_id=766104981] unique_name_in_owner = true @@ -106,6 +128,12 @@ grow_horizontal = 2 grow_vertical = 2 metadata/_edit_use_anchors_ = true +[node name="StatusLabel" type="Label" parent="VBoxContainer" unique_id=1981025114] +unique_name_in_owner = true +layout_mode = 2 +text = "Testing: Weak-Motor" +horizontal_alignment = 1 + [node name="MinDurationSlider" type="HSlider" parent="VBoxContainer" unique_id=339190501] unique_name_in_owner = true visible = false diff --git a/game/src/ui/setup/initial_setup_menu.gd b/game/src/ui/setup/initial_setup_menu.gd index 0e8d03c..0f92bde 100644 --- a/game/src/ui/setup/initial_setup_menu.gd +++ b/game/src/ui/setup/initial_setup_menu.gd @@ -55,12 +55,13 @@ func fade_out() -> void: func _on_rythm_setup_confirmed() -> void: - rhythm_setup_menu.stop_setup() + rhythm_setup_menu.fade_out_and_stop_setup(3.0) await fade_in() setup_finished.emit() func _on_controller_setup_confirmed() -> void: + controller_setup_menu.stop_setup() await fade_in() controller_setup_menu.hide() rhythm_setup_menu.show() diff --git a/game/src/ui/setup/rhythm/80bpm_metronome.ogg b/game/src/ui/setup/rhythm/80bpm_metronome.ogg new file mode 100644 index 0000000000000000000000000000000000000000..7877d7f62a66ef6eac8d4d92d43c8a8a5ed9925b GIT binary patch literal 11543 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 literal 0 HcmV?d00001 diff --git a/game/src/ui/setup/rhythm/80bpm_metronome.ogg.import b/game/src/ui/setup/rhythm/80bpm_metronome.ogg.import new file mode 100644 index 0000000..42478d9 --- /dev/null +++ b/game/src/ui/setup/rhythm/80bpm_metronome.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://ba8numb2iktfh" +path="res://.godot/imported/80bpm_metronome.ogg-01fbd8eafec323cab783e93ca397fd9a.oggvorbisstr" + +[deps] + +source_file="res://src/ui/setup/rhythm/80bpm_metronome.ogg" +dest_files=["res://.godot/imported/80bpm_metronome.ogg-01fbd8eafec323cab783e93ca397fd9a.oggvorbisstr"] + +[params] + +loop=true +loop_offset=0.0 +bpm=0.0 +beat_count=0 +bar_beats=4 diff --git a/game/src/ui/setup/rhythm/rhythm_setup_menu.gd b/game/src/ui/setup/rhythm/rhythm_setup_menu.gd index 6d174e5..cf5098a 100644 --- a/game/src/ui/setup/rhythm/rhythm_setup_menu.gd +++ b/game/src/ui/setup/rhythm/rhythm_setup_menu.gd @@ -21,6 +21,9 @@ var _previous_bar_phase: float = 0.0 @onready var rhythm_beat: AudioStreamPlayer = %RhythmBeat @onready var confirm_button: Button = %Confirm +@onready var beat_rumble: RumbleComponent = %BeatRumble +@onready var bar_rumble: RumbleComponent = %BarRumble + func _ready() -> void: user_offset_slider.value_changed.connect(_on_user_offset_slider_value_changed) @@ -32,14 +35,25 @@ func close() -> void: confirmed.emit() +func disable_controls() -> void: + user_offset_slider.editable = false + confirm_button.disabled = true + + func fade_out_and_stop_setup(duration: float) -> void: + disable_controls() + var tween: Tween = create_tween() tween.tween_property(rhythm_beat, ^"volume_linear", 0.0, duration) + tween.parallel().tween_property(beat_rumble.data, ^"intensity", 0.0, duration) + tween.parallel().tween_property(bar_rumble.data, ^"intensity", 0.0, duration) tween.tween_callback(stop_setup) await tween.finished func stop_setup() -> void: + disable_controls() + rhythm_player.stop() _restore_song_playback_data() process_mode = Node.PROCESS_MODE_DISABLED diff --git a/game/src/ui/setup/rhythm/rhythm_setup_menu.tscn b/game/src/ui/setup/rhythm/rhythm_setup_menu.tscn index 20bdb63..03f14ac 100644 --- a/game/src/ui/setup/rhythm/rhythm_setup_menu.tscn +++ b/game/src/ui/setup/rhythm/rhythm_setup_menu.tscn @@ -3,13 +3,13 @@ [ext_resource type="Script" uid="uid://bvs4uvpewolwc" path="res://src/ui/setup/rhythm/rhythm_setup_menu.gd" id="1_la56f"] [ext_resource type="Script" uid="uid://bfpr421kg4s" path="res://src/ui/settings_menu/slider_label.gd" id="2_0yond"] [ext_resource type="Script" uid="uid://bdi06itcm6wfp" path="res://src/core/rhythm/rhythm_player.gd" id="2_jsobq"] -[ext_resource type="AudioStream" uid="uid://cwpx80o5yaauf" path="res://src/ui/setup/rhythm/120bpm_beat.ogg" id="2_uupbh"] [ext_resource type="Script" uid="uid://bbwtct3hoxwws" path="res://src/core/controller_rumble/rumble_component.gd" id="2_yr7ls"] [ext_resource type="Script" uid="uid://co7j2qtqpud6b" path="res://src/core/rhythm/rhythm_listener.gd" id="3_o47te"] [ext_resource type="Script" uid="uid://dwwingj0dsxdg" path="res://src/core/controller_rumble/rumble_config.gd" id="3_xnyx0"] [ext_resource type="Script" uid="uid://c5mqtmsvgt4e8" path="res://src/core/rhythm/song_info.gd" id="4_7a0hf"] [ext_resource type="Script" uid="uid://cx1nws4t8hs2u" path="res://src/core/rhythm/tempo_section_info.gd" id="5_cribi"] [ext_resource type="Texture2D" uid="uid://t6ydwif1bo1c" path="res://godot_icon.svg" id="6_cribi"] +[ext_resource type="AudioStream" uid="uid://ba8numb2iktfh" path="res://src/ui/setup/rhythm/80bpm_metronome.ogg" id="6_xnyx0"] [ext_resource type="Script" uid="uid://bvmfdeypbeqsn" path="res://src/core/rhythm/rhythm_property_setter.gd" id="7_0yond"] [sub_resource type="Resource" id="Resource_ej02t"] @@ -24,7 +24,8 @@ strong_intensity = 0.5 [sub_resource type="Resource" id="Resource_0yond"] script = ExtResource("4_7a0hf") -audio_stream = ExtResource("2_uupbh") +audio_stream = ExtResource("6_xnyx0") +bpm = 80.0 metadata/_custom_type_script = "uid://c5mqtmsvgt4e8" [node name="RhythmSetupMenu" type="Control" unique_id=552044082] @@ -39,6 +40,7 @@ script = ExtResource("1_la56f") metadata/_custom_type_script = "uid://bvs4uvpewolwc" [node name="BeatRumble" type="Node" parent="." unique_id=1560105761] +unique_name_in_owner = true script = ExtResource("2_yr7ls") data = SubResource("Resource_ej02t") weak_magnitude = 0.5 @@ -46,6 +48,7 @@ strong_magnitude = 0.0 metadata/_custom_type_script = "uid://bbwtct3hoxwws" [node name="BarRumble" type="Node" parent="." unique_id=1199048244] +unique_name_in_owner = true script = ExtResource("2_yr7ls") data = SubResource("Resource_sp7no") weak_magnitude = 0.9 @@ -64,7 +67,6 @@ metadata/_custom_type_script = "uid://bdi06itcm6wfp" [node name="RhythmBeat" type="AudioStreamPlayer" parent="RhythmPlayer" unique_id=763640763] unique_name_in_owner = true -stream = ExtResource("2_uupbh") [node name="UserOffsetSlider" type="HSlider" parent="." unique_id=1070556103] unique_name_in_owner = true @@ -174,7 +176,8 @@ anchors_preset = 10 anchor_right = 1.0 offset_bottom = 23.0 grow_horizontal = 2 -text = "Adjust the slider so that everything syncs up with the beat." +text = "Adjust the slider so that everything syncs up with the beat. +(This will affect gameplay)" horizontal_alignment = 1 [connection signal="bar_ticked" from="RhythmListener" to="BarRumble" method="vibrate" flags=3 unbinds=1] diff --git a/game/src/worlds/exposition/exposition.tscn b/game/src/worlds/exposition/exposition.tscn index 1ad1ff0..0a74ba5 100644 --- a/game/src/worlds/exposition/exposition.tscn +++ b/game/src/worlds/exposition/exposition.tscn @@ -578,7 +578,6 @@ _data = [Vector2(-0.099999994, -1), 0.0, 1.75, 0, 0, Vector2(0.1, -1), -1.75, 1. point_count = 6 [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_7y7p6"] -load_path = "res://.godot/imported/scratch.png-e93cbee00757bfbec04c028cf522898f.ctex" [sub_resource type="AtlasTexture" id="AtlasTexture_bmjgb"] atlas = SubResource("CompressedTexture2D_7y7p6")