aboutsummaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/audio/sound.gd4
-rw-r--r--client/audio/sound.tscn7
-rw-r--r--client/game.gd9
-rw-r--r--client/menu/announce_title.gd42
-rw-r--r--client/menu/announce_title.gd.uid1
-rw-r--r--client/menu/overlay.gd4
-rw-r--r--client/menu/overlay.tscn372
-rw-r--r--client/menu/sounds/game_start.oggbin0 -> 73234 bytes
-rw-r--r--client/menu/sounds/game_start.ogg.import19
-rw-r--r--client/player/controllable_player.gd3
10 files changed, 455 insertions, 6 deletions
diff --git a/client/audio/sound.gd b/client/audio/sound.gd
index 5b875b4e..8c7649aa 100644
--- a/client/audio/sound.gd
+++ b/client/audio/sound.gd
@@ -17,6 +17,7 @@ extends Node
@onready var click_sound = $UI/Click
@onready var hover_sound = $UI/Hover
+@onready var game_start_sound = $UI/GameStart
@onready var music_node : Node = $Music
var item_sounds: Dictionary = {}
@@ -45,6 +46,9 @@ func play_click():
func play_hover():
hover_sound.play()
+func play_game_start():
+ game_start_sound.play()
+
func play_hover_maybe(element):
# Don't play hover sound when focus is changed by clicking using a mouse.
# TODO: Clean up this code and find a proper solution.
diff --git a/client/audio/sound.tscn b/client/audio/sound.tscn
index 11d1a4e2..49851f9a 100644
--- a/client/audio/sound.tscn
+++ b/client/audio/sound.tscn
@@ -1,8 +1,9 @@
-[gd_scene load_steps=4 format=3 uid="uid://d3h243yic44rr"]
+[gd_scene load_steps=5 format=3 uid="uid://d3h243yic44rr"]
[ext_resource type="Script" uid="uid://cho8r5m78a4ur" path="res://audio/sound.gd" id="1_b0qb1"]
[ext_resource type="AudioStream" uid="uid://cpyn511c5mtni" path="res://menu/sounds/click.ogg" id="2_mhrce"]
[ext_resource type="AudioStream" uid="uid://dtr1khfyqr56o" path="res://menu/sounds/hover.ogg" id="3_qft2s"]
+[ext_resource type="AudioStream" uid="uid://dft3m8utnxhs7" path="res://menu/sounds/game_start.ogg" id="4_le874"]
[node name="Sound" type="Node3D"]
script = ExtResource("1_b0qb1")
@@ -17,6 +18,10 @@ bus = &"SFX"
stream = ExtResource("3_qft2s")
bus = &"SFX"
+[node name="GameStart" type="AudioStreamPlayer" parent="UI"]
+stream = ExtResource("4_le874")
+bus = &"SFX"
+
[node name="Music" type="Node" parent="."]
[node name="MainMenu" type="AudioStreamPlayer" parent="Music"]
diff --git a/client/game.gd b/client/game.gd
index 13d7403a..89a8f0f1 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -59,7 +59,7 @@ var in_lobby := false
var is_replay := false
var tutorial_running := false
var tutorial_queue := []
-var last_position := Vector2(0, 0)
+var last_position = null # : Vector2?
var players := {}
@@ -131,6 +131,7 @@ func handle_packet(p):
if p.id == my_player_id:
set_join_state(JoinState.SPECTATING)
follow_camera.target = $Center
+ last_position = null
for h in player.hand:
if h != null:
h.queue_free()
@@ -138,13 +139,15 @@ func handle_packet(p):
player.is_despawning = true
update_players.emit(players)
"movement":
+ if not players.has(p.player): return
var player_instance: Player = players[p.player]
player_instance.update_position(p.pos, p.rot, p.boost)
if p.player == my_player_id: last_position = p.pos
"movement_sync":
if not players.has(my_player_id): return
var player_instance: ControllablePlayer = players[my_player_id]
- player_instance.position_ = last_position
+ if last_position != null:
+ player_instance.position_ = last_position
"move_item":
if "player" in p.from and "player" in p.to:
players[p.from.player[0]].pass_to(players[p.to.player[0]], int(p.from.player[1]), int(p.to.player[1]))
@@ -317,6 +320,8 @@ func handle_packet(p):
menu.submenu("res://menu/document/document.tscn", p["data"])
"score":
menu.submenu("res://menu/rating/rating.tscn", [p.data.stars, p.data.points])
+ "announce_start":
+ overlay.announce_start()
"server_message":
var mstr := get_message_str(p.message)
if p.error:
diff --git a/client/menu/announce_title.gd b/client/menu/announce_title.gd
new file mode 100644
index 00000000..227e184f
--- /dev/null
+++ b/client/menu/announce_title.gd
@@ -0,0 +1,42 @@
+# Hurry Curry! - a game about cooking
+# Copyright (C) 2025 Hurry Curry! contributors
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License only.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+extends Control
+
+@onready var init_delay: Timer = $InitialDelay
+@onready var prep_timer: Timer = $PreperationTimer
+@onready var anim_player: AnimationPlayer = $AnimationPlayer
+@onready var label: Label = $Center/Node2D/Label
+
+func announce_start() -> void:
+ init_delay.start()
+ await init_delay.timeout
+
+ Sound.play_game_start()
+ show()
+ label.text = tr("c.announce.ready")
+ anim_player.play("fade_in")
+ await anim_player.animation_finished
+ prep_timer.start()
+ await prep_timer.timeout
+ anim_player.play("fade_out")
+ await anim_player.animation_finished
+
+ label.text = tr("c.announce.go")
+ anim_player.play("fade_in")
+ await anim_player.animation_finished
+ anim_player.play("fade_out")
+ await anim_player.animation_finished
+ hide()
diff --git a/client/menu/announce_title.gd.uid b/client/menu/announce_title.gd.uid
new file mode 100644
index 00000000..e57b9722
--- /dev/null
+++ b/client/menu/announce_title.gd.uid
@@ -0,0 +1 @@
+uid://ci08whhm2ej1m
diff --git a/client/menu/overlay.gd b/client/menu/overlay.gd
index 3ec5e860..d4e2e3d3 100644
--- a/client/menu/overlay.gd
+++ b/client/menu/overlay.gd
@@ -28,6 +28,7 @@ var points: int = 0
@onready var timer: Timer = $Timer
@onready var seconds_label: Label = $Time/Paper/Line/Seconds
@onready var decimals_label: Label = $Time/Paper/Line/Decimals
+@onready var announcement = $Announcement
func update(failed_: int, completed_: int, points_: int, time: float):
if failed_ - failed:
@@ -55,6 +56,9 @@ func set_ingame(_state: bool, lobby: bool):
else:
show()
+func announce_start():
+ announcement.announce_start()
+
func _process(delta):
failed_label.scale = G.interpolate(failed_label.scale, Vector2(1, 1), delta * 4.)
completed_label.scale = G.interpolate(completed_label.scale, Vector2(1, 1), delta * 4.)
diff --git a/client/menu/overlay.tscn b/client/menu/overlay.tscn
index 0b45255e..1b3b4632 100644
--- a/client/menu/overlay.tscn
+++ b/client/menu/overlay.tscn
@@ -1,13 +1,331 @@
-[gd_scene load_steps=6 format=3 uid="uid://bpikve6wlsjfl"]
+[gd_scene load_steps=14 format=3 uid="uid://bpikve6wlsjfl"]
[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_4kujw"]
[ext_resource type="Script" uid="uid://mcgg3q0l03dx" path="res://menu/overlay.gd" id="2_kbjds"]
[ext_resource type="Texture2D" uid="uid://chxkwohi56cxx" path="res://menu/textures/paper_texture.tres" id="3_oum5g"]
[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/fonts/font-sansita-swashed.woff2" id="3_u54fv"]
+[ext_resource type="Script" uid="uid://ci08whhm2ej1m" path="res://menu/announce_title.gd" id="5_874f2"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_04ujj"]
bg_color = Color(0, 0, 0, 0)
+[sub_resource type="FontVariation" id="FontVariation_8f216"]
+base_font = ExtResource("3_u54fv")
+variation_embolden = 0.5
+
+[sub_resource type="Animation" id="Animation_kmsgw"]
+resource_name = "fade_in"
+length = 0.5
+tracks/0/type = "bezier"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("Center/Node2D:scale:x")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1e-05, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.5)
+}
+tracks/1/type = "bezier"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("Center/Node2D:scale:y")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1e-05, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.5)
+}
+tracks/2/type = "bezier"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("Center/Node2D:modulate:r")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.5)
+}
+tracks/3/type = "bezier"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("Center/Node2D:modulate:g")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.5)
+}
+tracks/4/type = "bezier"
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/path = NodePath("Center/Node2D:modulate:b")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.5)
+}
+tracks/5/type = "bezier"
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/path = NodePath("Center/Node2D:modulate:a")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.5)
+}
+
+[sub_resource type="Animation" id="Animation_owy7i"]
+length = 0.001
+tracks/0/type = "bezier"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("Center/Node2D:scale:x")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(1e-05, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/1/type = "bezier"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("Center/Node2D:scale:y")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(1e-05, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/2/type = "bezier"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("Center/Node2D:modulate:r")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/3/type = "bezier"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("Center/Node2D:modulate:g")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/4/type = "bezier"
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/path = NodePath("Center/Node2D:modulate:b")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/5/type = "bezier"
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/path = NodePath("Center/Node2D:modulate:a")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+
+[sub_resource type="Animation" id="Animation_x6gse"]
+resource_name = "fade_out"
+tracks/0/type = "bezier"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("Center/Node2D:modulate:r")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 1)
+}
+tracks/1/type = "bezier"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("Center/Node2D:modulate:g")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 1)
+}
+tracks/2/type = "bezier"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("Center/Node2D:modulate:b")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 1)
+}
+tracks/3/type = "bezier"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("Center/Node2D:modulate:a")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 1)
+}
+
+[sub_resource type="Animation" id="Animation_874f2"]
+resource_name = "fade_in_and_out"
+length = 0.8
+tracks/0/type = "bezier"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("Center/Node2D:modulate:r")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.3, 0.8)
+}
+tracks/1/type = "bezier"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("Center/Node2D:modulate:g")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.3, 0.8)
+}
+tracks/2/type = "bezier"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("Center/Node2D:modulate:b")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.3, 0.8)
+}
+tracks/3/type = "bezier"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("Center/Node2D:modulate:a")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"handle_modes": PackedInt32Array(0, 0, 0),
+"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 1, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.3, 0.8)
+}
+tracks/4/type = "bezier"
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/path = NodePath("Center/Node2D:scale:x")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1e-05, -0.25, 0, 0.25, 0, 2, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.8)
+}
+tracks/5/type = "bezier"
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/path = NodePath("Center/Node2D:scale:y")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1e-05, -0.25, 0, 0.25, 0, 2, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0, 0.8)
+}
+
+[sub_resource type="Animation" id="Animation_deqe4"]
+resource_name = "fade_out_quick"
+length = 0.25
+tracks/0/type = "bezier"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("Center/Node2D:modulate:r")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1, -0.125, 0, 0.125, 0, 1, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0, 0.25)
+}
+tracks/1/type = "bezier"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("Center/Node2D:modulate:g")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1, -0.125, 0, 0.125, 0, 1, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0, 0.25)
+}
+tracks/2/type = "bezier"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("Center/Node2D:modulate:b")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1, -0.125, 0, 0.125, 0, 1, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0, 0.25)
+}
+tracks/3/type = "bezier"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("Center/Node2D:modulate:a")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(1, -0.125, 0, 0.125, 0, 0, -0.125, 0, 0.125, 0),
+"times": PackedFloat32Array(0, 0.25)
+}
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_deqe4"]
+_data = {
+&"RESET": SubResource("Animation_owy7i"),
+&"fade_in": SubResource("Animation_kmsgw"),
+&"fade_in_and_out": SubResource("Animation_874f2"),
+&"fade_out": SubResource("Animation_x6gse"),
+&"fade_out_quick": SubResource("Animation_deqe4")
+}
+
[node name="Overlay" type="PanelContainer"]
layout_direction = 2
anchors_preset = 15
@@ -183,3 +501,55 @@ theme_override_colors/font_color = Color(0, 0, 0, 1)
theme_override_fonts/font = ExtResource("3_u54fv")
theme_override_font_sizes/font_size = 45
text = "00"
+
+[node name="Announcement" type="Control" parent="."]
+visible = false
+layout_mode = 2
+script = ExtResource("5_874f2")
+
+[node name="Center" type="Control" parent="Announcement"]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Node2D" type="Node2D" parent="Announcement/Center"]
+modulate = Color(1, 1, 1, 0)
+scale = Vector2(1e-05, 1e-05)
+
+[node name="Label" type="Label" parent="Announcement/Center/Node2D"]
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -375.0
+offset_top = -50.0
+offset_right = 375.0
+offset_bottom = 50.0
+grow_horizontal = 2
+grow_vertical = 2
+size_flags_vertical = 1
+theme_override_colors/font_outline_color = Color(0.564706, 0.207843, 0.266667, 1)
+theme_override_constants/outline_size = 20
+theme_override_fonts/font = SubResource("FontVariation_8f216")
+theme_override_font_sizes/font_size = 64
+text = "GO!"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="Announcement"]
+libraries = {
+&"": SubResource("AnimationLibrary_deqe4")
+}
+
+[node name="PreperationTimer" type="Timer" parent="Announcement"]
+one_shot = true
+
+[node name="InitialDelay" type="Timer" parent="Announcement"]
+wait_time = 0.5
+one_shot = true
diff --git a/client/menu/sounds/game_start.ogg b/client/menu/sounds/game_start.ogg
new file mode 100644
index 00000000..3282ff99
--- /dev/null
+++ b/client/menu/sounds/game_start.ogg
Binary files differ
diff --git a/client/menu/sounds/game_start.ogg.import b/client/menu/sounds/game_start.ogg.import
new file mode 100644
index 00000000..d5533df7
--- /dev/null
+++ b/client/menu/sounds/game_start.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://dft3m8utnxhs7"
+path="res://.godot/imported/game_start.ogg-7259109543b1a82c5ba32427a075813a.oggvorbisstr"
+
+[deps]
+
+source_file="res://menu/sounds/game_start.ogg"
+dest_files=["res://.godot/imported/game_start.ogg-7259109543b1a82c5ba32427a075813a.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd
index 04899716..e23bc675 100644
--- a/client/player/controllable_player.gd
+++ b/client/player/controllable_player.gd
@@ -30,7 +30,6 @@ var velocity_ := Vector2(0, 0)
var direction := Vector2(0, 0)
var stamina := 0.
var chat_open := false
-var enable_input := true
var input_rotation = 0
var vibration_timer := Timer.new()
@@ -152,7 +151,7 @@ func collide(dt: float):
velocity_.y += norm.y * f * dt
func is_input_enabled() -> bool:
- return not game.menu.covered and enable_input
+ return not game.menu.covered and not Global.game_paused
func update_touch_scrolls():
# TODO: Don't call this function every frame, but only when input menu