summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-10-12 02:43:19 +0200
committermetamuffin <metamuffin@disroot.org>2024-10-12 02:43:19 +0200
commit315cdc0618c72d9a39761cc2199e64110ea620f8 (patch)
tree18e5851d9912e10402ec3b5a823b68ba52889b8d
parent1eac2e6152f1325a33585ef079bd6962252c1436 (diff)
parent47d1ca9d3f470fb8e90efe52ee033e9f17677e96 (diff)
downloadhurrycurry-315cdc0618c72d9a39761cc2199e64110ea620f8.tar
hurrycurry-315cdc0618c72d9a39761cc2199e64110ea620f8.tar.bz2
hurrycurry-315cdc0618c72d9a39761cc2199e64110ea620f8.tar.zst
Merge branch 'master' of https://codeberg.org/hurrycurry/hurrycurry
-rw-r--r--client/map/items/item.gd2
-rw-r--r--client/map/progress/progress.gd (renamed from client/map/progress.gd)0
-rw-r--r--client/map/progress/progress.gdshader (renamed from client/map/progress.gdshader)0
-rw-r--r--client/map/progress/progress.tscn (renamed from client/map/progress.tscn)4
-rw-r--r--client/map/textures/palette.png (renamed from client/map/palette.png)bin38079 -> 38079 bytes
-rw-r--r--client/map/textures/palette.png.import (renamed from client/map/palette.png.import)8
-rw-r--r--client/map/tiles/grass_side.res.deprenbin1430 -> 0 bytes
-rw-r--r--client/menu/auto_setup/blur_setup.gd (renamed from client/menu/blur_setup.gd)0
-rw-r--r--client/menu/auto_setup/scroll_container_custom.gd (renamed from client/menu/scroll_container_custom.gd)0
-rw-r--r--client/menu/book/book.tscn2
-rw-r--r--client/menu/character.tscn10
-rw-r--r--client/menu/communicate/chat/chat_message.tscn2
-rw-r--r--client/menu/communicate/chat/chat_open.tscn8
-rw-r--r--client/menu/communicate/chat/chat_preview.tscn6
-rw-r--r--client/menu/communicate/item/item_message.gd2
-rw-r--r--client/menu/communicate/popup_message/pinned_item_messages.gd2
-rw-r--r--client/menu/communicate/popup_message/popup_message.tscn10
-rw-r--r--client/menu/communicate/popup_message/server_message.gd4
-rw-r--r--client/menu/communicate/popup_message/server_message.tscn4
-rw-r--r--client/menu/credits.tscn8
-rw-r--r--client/menu/error.tscn4
-rw-r--r--client/menu/hairstyle_preview.tscn2
-rw-r--r--client/menu/icons/arrow.svg (renamed from client/menu/arrow.svg)0
-rw-r--r--client/menu/icons/arrow.svg.import (renamed from client/menu/arrow.svg.import)6
-rw-r--r--client/menu/icons/arrow_focus.svg (renamed from client/menu/arrow_focus.svg)0
-rw-r--r--client/menu/icons/arrow_focus.svg.import (renamed from client/menu/arrow_focus.svg.import)6
-rw-r--r--client/menu/icons/arrow_hover.svg (renamed from client/menu/arrow_hover.svg)0
-rw-r--r--client/menu/icons/arrow_hover.svg.import (renamed from client/menu/arrow_hover.svg.import)6
-rw-r--r--client/menu/icons/arrow_pressed.svg (renamed from client/menu/arrow_pressed.svg)0
-rw-r--r--client/menu/icons/arrow_pressed.svg.import (renamed from client/menu/arrow_pressed.svg.import)6
-rw-r--r--client/menu/icons/boost.webp (renamed from client/menu/boost.webp)bin3670 -> 3670 bytes
-rw-r--r--client/menu/icons/boost.webp.import (renamed from client/menu/boost.webp.import)6
-rw-r--r--client/menu/icons/circle.svg (renamed from client/menu/circle.svg)0
-rw-r--r--client/menu/icons/circle.svg.import (renamed from client/menu/circle.svg.import)6
-rw-r--r--client/menu/icons/hint.svg (renamed from client/menu/hint.svg)0
-rw-r--r--client/menu/icons/hint.svg.import (renamed from client/menu/hint.svg.import)6
-rw-r--r--client/menu/icons/interact.webp (renamed from client/menu/interact.webp)bin3604 -> 3604 bytes
-rw-r--r--client/menu/icons/interact.webp.import (renamed from client/menu/interact.webp.import)6
-rw-r--r--client/menu/icons/pause.webp (renamed from client/menu/pause.webp)bin3144 -> 3144 bytes
-rw-r--r--client/menu/icons/pause.webp.import (renamed from client/menu/pause.webp.import)6
-rw-r--r--client/menu/icons/plus.svg (renamed from client/menu/plus.svg)0
-rw-r--r--client/menu/icons/plus.svg.import (renamed from client/menu/plus.svg.import)6
-rw-r--r--client/menu/icons/reset.svg (renamed from client/menu/reset.svg)0
-rw-r--r--client/menu/icons/reset.svg.import (renamed from client/menu/reset.svg.import)6
-rw-r--r--client/menu/icons/user.webp (renamed from client/menu/user.webp)bin15122 -> 15122 bytes
-rw-r--r--client/menu/icons/user.webp.import (renamed from client/menu/user.webp.import)6
-rw-r--r--client/menu/ingame.tscn8
-rw-r--r--client/menu/lobby.tscn18
-rw-r--r--client/menu/lobby/player.tscn4
-rw-r--r--client/menu/main.tscn8
-rw-r--r--client/menu/menu_background.tscn2
-rw-r--r--client/menu/overlay.tscn6
-rw-r--r--client/menu/play.gd4
-rw-r--r--client/menu/play.tscn15
-rw-r--r--client/menu/popup.tscn6
-rw-r--r--client/menu/printed_material.tres6
-rw-r--r--client/menu/rating/rating.tscn6
-rw-r--r--client/menu/settings.tscn6
-rw-r--r--client/menu/settings/input/input_value_node.tscn2
-rw-r--r--client/menu/settings/settings_row.gd2
-rw-r--r--client/menu/settings/settings_row.tscn6
-rw-r--r--client/menu/setup.tscn6
-rw-r--r--client/menu/textures/paper_texture.tres (renamed from client/menu/theme/paper_texture.tres)0
-rw-r--r--client/menu/theme/fonts/font-azaret-mono.woff2 (renamed from client/menu/theme/font-azaret-mono.woff2)bin46132 -> 46132 bytes
-rw-r--r--client/menu/theme/fonts/font-azaret-mono.woff2.import (renamed from client/menu/theme/font-azaret-mono.woff2.import)6
-rw-r--r--client/menu/theme/fonts/font-josefin-sans.woff2 (renamed from client/menu/theme/font-josefin-sans.woff2)bin47448 -> 47448 bytes
-rw-r--r--client/menu/theme/fonts/font-josefin-sans.woff2.import (renamed from client/menu/theme/font-josefin-sans.woff2.import)6
-rw-r--r--client/menu/theme/fonts/font-sansita-swashed.woff2 (renamed from client/menu/theme/font-sansita-swashed.woff2)bin92808 -> 92808 bytes
-rw-r--r--client/menu/theme/fonts/font-sansita-swashed.woff2.import (renamed from client/menu/theme/font-sansita-swashed.woff2.import)6
-rw-r--r--client/menu/theme/materials/blur_material.tres (renamed from client/menu/theme/blur_material.tres)2
-rw-r--r--client/menu/theme/materials/dark_blur_material.tres (renamed from client/menu/theme/dark_blur_material.tres)2
-rw-r--r--client/menu/theme/materials/grayscale_material.tres (renamed from client/menu/grayscale_material.tres)2
-rw-r--r--client/menu/theme/materials/printed_material.tres6
-rw-r--r--client/menu/theme/shaders/blur_mix.gdshader (renamed from client/menu/blur_mix.gdshader)0
-rw-r--r--client/menu/theme/shaders/grayscale.gdshader (renamed from client/menu/grayscale.gdshader)0
-rw-r--r--client/menu/theme/shaders/menu_background.gdshader (renamed from client/menu/menu_background.gdshader)0
-rw-r--r--client/menu/theme/shaders/printed.gdshader (renamed from client/menu/printed.gdshader)0
-rw-r--r--client/menu/theme/style/paper_panel_style.tres (renamed from client/menu/theme/paper_panel_style.tres)2
-rw-r--r--client/menu/theme/theme/paper.tres (renamed from client/menu/theme/paper.tres)4
-rw-r--r--client/menu/theme/theme/theme.tres (renamed from client/menu/theme/theme.tres)9
-rw-r--r--client/player/angry.tscn2
-rw-r--r--client/player/chat_message.tscn2
-rw-r--r--client/player/controllable_player.gd19
-rw-r--r--client/player/marker/interact_marker.gdshader (renamed from client/player/interact_marker.gdshader)0
-rw-r--r--client/player/marker/marker.gd (renamed from client/player/marker.gd)0
-rw-r--r--client/player/marker/marker.tscn (renamed from client/player/marker.tscn)4
-rw-r--r--client/player/onscreen_controls/controls.tscn6
-rw-r--r--client/player/particles/angry/angry.webp (renamed from client/player/angry.webp)bin5022 -> 5022 bytes
-rw-r--r--client/player/particles/angry/angry.webp.import (renamed from client/player/angry.webp.import)8
-rw-r--r--client/player/particles/effect.gd (renamed from client/player/effect.gd)0
-rw-r--r--client/player/particles/effect.tscn (renamed from client/player/effect.tscn)4
-rw-r--r--client/player/particles/satisfied/star.webp (renamed from client/player/star.webp)bin5818 -> 5818 bytes
-rw-r--r--client/player/particles/satisfied/star.webp.import (renamed from client/player/star.webp.import)8
-rw-r--r--client/player/particles/satisfied/stars.tscn (renamed from client/player/stars.tscn)2
-rw-r--r--client/player/player.gd5
-rw-r--r--locale/de.ini22
-rw-r--r--locale/el.ini1
-rw-r--r--locale/en.ini19
-rw-r--r--locale/fr.ini168
-rw-r--r--locale/ko.ini1
-rw-r--r--locale/nl.ini29
-rw-r--r--locale/zh_Hans.ini4
-rw-r--r--readme.md4
-rw-r--r--server/bot/src/algos/dishwasher.rs7
104 files changed, 369 insertions, 246 deletions
diff --git a/client/map/items/item.gd b/client/map/items/item.gd
index 80aa4d6d..f7592d87 100644
--- a/client/map/items/item.gd
+++ b/client/map/items/item.gd
@@ -21,7 +21,7 @@ extends Node3D
var owned_by: Node3D
var base: Node3D = Node3D.new()
-var progress_instance: ProgressBar3D = preload("res://map/progress.tscn").instantiate()
+var progress_instance: ProgressBar3D = preload("res://map/progress/progress.tscn").instantiate()
var take_sound: PlayRandom = preload("res://audio/play_random.tscn").instantiate()
var put_sound: PlayRandom = preload("res://audio/play_random.tscn").instantiate()
var ding_sound := AudioStreamPlayer3D.new()
diff --git a/client/map/progress.gd b/client/map/progress/progress.gd
index fc31408c..fc31408c 100644
--- a/client/map/progress.gd
+++ b/client/map/progress/progress.gd
diff --git a/client/map/progress.gdshader b/client/map/progress/progress.gdshader
index a5ebf575..a5ebf575 100644
--- a/client/map/progress.gdshader
+++ b/client/map/progress/progress.gdshader
diff --git a/client/map/progress.tscn b/client/map/progress/progress.tscn
index 7a0629a1..7f2ec175 100644
--- a/client/map/progress.tscn
+++ b/client/map/progress/progress.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://4ewufm6tqhpb"]
-[ext_resource type="Shader" path="res://map/progress.gdshader" id="1_6f2a0"]
-[ext_resource type="Script" path="res://map/progress.gd" id="2_bb3u3"]
+[ext_resource type="Shader" path="res://map/progress/progress.gdshader" id="1_6f2a0"]
+[ext_resource type="Script" path="res://map/progress/progress.gd" id="2_bb3u3"]
[sub_resource type="QuadMesh" id="QuadMesh_m0itj"]
size = Vector2(0.75, 0.1)
diff --git a/client/map/palette.png b/client/map/textures/palette.png
index e184fe5b..e184fe5b 100644
--- a/client/map/palette.png
+++ b/client/map/textures/palette.png
Binary files differ
diff --git a/client/map/palette.png.import b/client/map/textures/palette.png.import
index 92840fcf..97dc821b 100644
--- a/client/map/palette.png.import
+++ b/client/map/textures/palette.png.import
@@ -3,8 +3,8 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dgcs4wkxsxe6a"
-path.s3tc="res://.godot/imported/palette.png-3a59900c2345cc4f645d84b8df0a18e7.s3tc.ctex"
-path.etc2="res://.godot/imported/palette.png-3a59900c2345cc4f645d84b8df0a18e7.etc2.ctex"
+path.s3tc="res://.godot/imported/palette.png-7d1d158ba6a12563fba40a96786b0940.s3tc.ctex"
+path.etc2="res://.godot/imported/palette.png-7d1d158ba6a12563fba40a96786b0940.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
@@ -12,8 +12,8 @@ metadata={
[deps]
-source_file="res://map/palette.png"
-dest_files=["res://.godot/imported/palette.png-3a59900c2345cc4f645d84b8df0a18e7.s3tc.ctex", "res://.godot/imported/palette.png-3a59900c2345cc4f645d84b8df0a18e7.etc2.ctex"]
+source_file="res://map/textures/palette.png"
+dest_files=["res://.godot/imported/palette.png-7d1d158ba6a12563fba40a96786b0940.s3tc.ctex", "res://.godot/imported/palette.png-7d1d158ba6a12563fba40a96786b0940.etc2.ctex"]
[params]
diff --git a/client/map/tiles/grass_side.res.depren b/client/map/tiles/grass_side.res.depren
deleted file mode 100644
index 3116171f..00000000
--- a/client/map/tiles/grass_side.res.depren
+++ /dev/null
Binary files differ
diff --git a/client/menu/blur_setup.gd b/client/menu/auto_setup/blur_setup.gd
index 9d55a9d4..9d55a9d4 100644
--- a/client/menu/blur_setup.gd
+++ b/client/menu/auto_setup/blur_setup.gd
diff --git a/client/menu/scroll_container_custom.gd b/client/menu/auto_setup/scroll_container_custom.gd
index a456f644..a456f644 100644
--- a/client/menu/scroll_container_custom.gd
+++ b/client/menu/auto_setup/scroll_container_custom.gd
diff --git a/client/menu/book/book.tscn b/client/menu/book/book.tscn
index 824c062d..366959a4 100644
--- a/client/menu/book/book.tscn
+++ b/client/menu/book/book.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=3 format=3 uid="uid://bdggwo8un3mys"]
[ext_resource type="Script" path="res://menu/book/book.gd" id="1_gyisx"]
-[ext_resource type="Script" path="res://menu/scroll_container_custom.gd" id="2_0d0p0"]
+[ext_resource type="Script" path="res://menu/auto_setup/scroll_container_custom.gd" id="2_0d0p0"]
[node name="Book" type="Control"]
layout_mode = 3
diff --git a/client/menu/character.tscn b/client/menu/character.tscn
index 463fd4fe..bc4e1663 100644
--- a/client/menu/character.tscn
+++ b/client/menu/character.tscn
@@ -1,14 +1,14 @@
[gd_scene load_steps=11 format=3 uid="uid://1f7xpirm5d28"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_ak2pw"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_ak2pw"]
[ext_resource type="Script" path="res://menu/character.gd" id="1_brhd1"]
[ext_resource type="PackedScene" uid="uid://b4gone8fu53r7" path="res://map/map.tscn" id="3_6mc88"]
[ext_resource type="PackedScene" uid="uid://b3hhir2fvnunu" path="res://player/character/character.tscn" id="3_odq7n"]
[ext_resource type="PackedScene" uid="uid://bg2d78ycorcqk" path="res://menu/scene_transition.tscn" id="4_c0ocf"]
-[ext_resource type="Texture2D" uid="uid://35rd5gamtyqm" path="res://menu/arrow.svg" id="5_kvd7k"]
-[ext_resource type="Texture2D" uid="uid://j75dbytlbju" path="res://menu/arrow_pressed.svg" id="5_xpff8"]
-[ext_resource type="Texture2D" uid="uid://b33qmctbpf48g" path="res://menu/arrow_hover.svg" id="6_soj8g"]
-[ext_resource type="Texture2D" uid="uid://by3qsrpxnfq4w" path="res://menu/arrow_focus.svg" id="6_u31hl"]
+[ext_resource type="Texture2D" uid="uid://35rd5gamtyqm" path="res://menu/icons/arrow.svg" id="5_kvd7k"]
+[ext_resource type="Texture2D" uid="uid://j75dbytlbju" path="res://menu/icons/arrow_pressed.svg" id="5_xpff8"]
+[ext_resource type="Texture2D" uid="uid://b33qmctbpf48g" path="res://menu/icons/arrow_hover.svg" id="6_soj8g"]
+[ext_resource type="Texture2D" uid="uid://by3qsrpxnfq4w" path="res://menu/icons/arrow_focus.svg" id="6_u31hl"]
[sub_resource type="Environment" id="Environment_ex25y"]
background_mode = 1
diff --git a/client/menu/communicate/chat/chat_message.tscn b/client/menu/communicate/chat/chat_message.tscn
index 06a9311e..d4db3f5d 100644
--- a/client/menu/communicate/chat/chat_message.tscn
+++ b/client/menu/communicate/chat/chat_message.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=4 format=3 uid="uid://bpc2qgsvcafhe"]
[ext_resource type="Script" path="res://menu/communicate/chat/chat_message.gd" id="1_ey0qp"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_rx6vg"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_rx6vg"]
[sub_resource type="FontVariation" id="FontVariation_jfhbh"]
variation_embolden = 1.3
diff --git a/client/menu/communicate/chat/chat_open.tscn b/client/menu/communicate/chat/chat_open.tscn
index 0247a1ca..09cc4526 100644
--- a/client/menu/communicate/chat/chat_open.tscn
+++ b/client/menu/communicate/chat/chat_open.tscn
@@ -1,11 +1,11 @@
[gd_scene load_steps=7 format=3 uid="uid://dbd6k56l4p0ls"]
[ext_resource type="Script" path="res://menu/communicate/chat/chat_open.gd" id="1_dsl4a"]
-[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/dark_blur_material.tres" id="1_isqmk"]
-[ext_resource type="Script" path="res://menu/blur_setup.gd" id="2_urbd2"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="3_v7xmg"]
+[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/materials/dark_blur_material.tres" id="1_isqmk"]
+[ext_resource type="Script" path="res://menu/auto_setup/blur_setup.gd" id="2_urbd2"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="3_v7xmg"]
[ext_resource type="StyleBox" uid="uid://bw4jamyna1top" path="res://menu/theme/style/panel_style_sidebar.tres" id="4_ew1yx"]
-[ext_resource type="Script" path="res://menu/scroll_container_custom.gd" id="5_3mths"]
+[ext_resource type="Script" path="res://menu/auto_setup/scroll_container_custom.gd" id="5_3mths"]
[node name="ChatOpen" type="Control"]
layout_mode = 3
diff --git a/client/menu/communicate/chat/chat_preview.tscn b/client/menu/communicate/chat/chat_preview.tscn
index 4cc39e00..e1cac207 100644
--- a/client/menu/communicate/chat/chat_preview.tscn
+++ b/client/menu/communicate/chat/chat_preview.tscn
@@ -1,9 +1,9 @@
[gd_scene load_steps=5 format=3 uid="uid://xcxbmynn8mhi"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_x8ock"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_x8ock"]
[ext_resource type="Script" path="res://menu/communicate/chat/chat_preview.gd" id="2_72x70"]
-[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/dark_blur_material.tres" id="4_jo1xn"]
-[ext_resource type="Script" path="res://menu/blur_setup.gd" id="5_1l77s"]
+[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/materials/dark_blur_material.tres" id="4_jo1xn"]
+[ext_resource type="Script" path="res://menu/auto_setup/blur_setup.gd" id="5_1l77s"]
[node name="ChatPreview" type="Control"]
layout_mode = 3
diff --git a/client/menu/communicate/item/item_message.gd b/client/menu/communicate/item/item_message.gd
index 17d2a629..dfbaf232 100644
--- a/client/menu/communicate/item/item_message.gd
+++ b/client/menu/communicate/item/item_message.gd
@@ -17,7 +17,7 @@
class_name ItemMessage
extends Control
-const PRINTED_MAT := preload("res://menu/printed_material.tres")
+const PRINTED_MAT := preload("res://menu/theme/materials/printed_material.tres")
@export var enable_rotation := true
@export var enable_grayscale := false
diff --git a/client/menu/communicate/popup_message/pinned_item_messages.gd b/client/menu/communicate/popup_message/pinned_item_messages.gd
index c98b9184..15ae96b5 100644
--- a/client/menu/communicate/popup_message/pinned_item_messages.gd
+++ b/client/menu/communicate/popup_message/pinned_item_messages.gd
@@ -17,7 +17,7 @@ extends Control
class_name PinnedItemMessages
const ITEM_MESSAGE_SCENE := preload("res://menu/communicate/item/item_message.tscn")
-const PAPER_PANEL_STYLE := preload("res://menu/theme/paper_panel_style.tres")
+const PAPER_PANEL_STYLE := preload("res://menu/theme/style/paper_panel_style.tres")
var pinned_items := {}
diff --git a/client/menu/communicate/popup_message/popup_message.tscn b/client/menu/communicate/popup_message/popup_message.tscn
index 880e8670..05b31e11 100644
--- a/client/menu/communicate/popup_message/popup_message.tscn
+++ b/client/menu/communicate/popup_message/popup_message.tscn
@@ -1,12 +1,12 @@
[gd_scene load_steps=12 format=3 uid="uid://b21nrnkygiyjt"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_a1566"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_a1566"]
[ext_resource type="Script" path="res://menu/communicate/popup_message/popup_message.gd" id="2_sbew6"]
-[ext_resource type="Shader" path="res://menu/blur_mix.gdshader" id="3_2vnom"]
+[ext_resource type="Shader" path="res://menu/theme/shaders/blur_mix.gdshader" id="3_2vnom"]
[ext_resource type="PackedScene" uid="uid://dq61p3a8og2b6" path="res://menu/communicate/popup_message/server_message.tscn" id="3_m3rok"]
-[ext_resource type="Script" path="res://menu/blur_setup.gd" id="4_pvwmw"]
-[ext_resource type="FontFile" uid="uid://bk704sc5gkrb3" path="res://menu/theme/font-azaret-mono.woff2" id="4_wsrnf"]
-[ext_resource type="Texture2D" uid="uid://b2uv5rf0enikf" path="res://menu/hint.svg" id="5_2dxsd"]
+[ext_resource type="Script" path="res://menu/auto_setup/blur_setup.gd" id="4_pvwmw"]
+[ext_resource type="FontFile" uid="uid://bk704sc5gkrb3" path="res://menu/theme/fonts/font-azaret-mono.woff2" id="4_wsrnf"]
+[ext_resource type="Texture2D" uid="uid://b2uv5rf0enikf" path="res://menu/icons/hint.svg" id="5_2dxsd"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_k0m35"]
shader = ExtResource("3_2vnom")
diff --git a/client/menu/communicate/popup_message/server_message.gd b/client/menu/communicate/popup_message/server_message.gd
index fc12ee76..c3fc0a78 100644
--- a/client/menu/communicate/popup_message/server_message.gd
+++ b/client/menu/communicate/popup_message/server_message.gd
@@ -1,8 +1,8 @@
extends BlurSetup
class_name ServerMessage
-const DEFAULT_FONT = preload("res://menu/theme/font-josefin-sans.woff2")
-const MONOSPACE_FONT = preload("res://menu/theme/font-azaret-mono.woff2")
+const DEFAULT_FONT = preload("res://menu/theme/fonts/font-josefin-sans.woff2")
+const MONOSPACE_FONT = preload("res://menu/theme/fonts/font-azaret-mono.woff2")
@onready var label: Label = $CenterContainer/Label
diff --git a/client/menu/communicate/popup_message/server_message.tscn b/client/menu/communicate/popup_message/server_message.tscn
index 2a848419..b23d2527 100644
--- a/client/menu/communicate/popup_message/server_message.tscn
+++ b/client/menu/communicate/popup_message/server_message.tscn
@@ -1,8 +1,8 @@
[gd_scene load_steps=8 format=3 uid="uid://dq61p3a8og2b6"]
-[ext_resource type="Shader" path="res://menu/blur_mix.gdshader" id="1_qv8ew"]
+[ext_resource type="Shader" path="res://menu/theme/shaders/blur_mix.gdshader" id="1_qv8ew"]
[ext_resource type="Script" path="res://menu/communicate/popup_message/server_message.gd" id="2_csqo8"]
-[ext_resource type="FontFile" uid="uid://bk704sc5gkrb3" path="res://menu/theme/font-azaret-mono.woff2" id="3_dw20j"]
+[ext_resource type="FontFile" uid="uid://bk704sc5gkrb3" path="res://menu/theme/fonts/font-azaret-mono.woff2" id="3_dw20j"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_q3bbd"]
shader = ExtResource("1_qv8ew")
diff --git a/client/menu/credits.tscn b/client/menu/credits.tscn
index 12bd3c23..783b308b 100644
--- a/client/menu/credits.tscn
+++ b/client/menu/credits.tscn
@@ -1,10 +1,10 @@
[gd_scene load_steps=6 format=3 uid="uid://7mqbxa054bjv"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_16kk6"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_16kk6"]
[ext_resource type="Script" path="res://menu/credits.gd" id="2_alvab"]
-[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/dark_blur_material.tres" id="3_nwoiv"]
-[ext_resource type="Script" path="res://menu/blur_setup.gd" id="4_8sii3"]
-[ext_resource type="Script" path="res://menu/scroll_container_custom.gd" id="4_bfcw8"]
+[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/materials/dark_blur_material.tres" id="3_nwoiv"]
+[ext_resource type="Script" path="res://menu/auto_setup/blur_setup.gd" id="4_8sii3"]
+[ext_resource type="Script" path="res://menu/auto_setup/scroll_container_custom.gd" id="4_bfcw8"]
[node name="CreditsMenu" type="Control"]
layout_mode = 3
diff --git a/client/menu/error.tscn b/client/menu/error.tscn
index dfe6e015..55c3c9d9 100644
--- a/client/menu/error.tscn
+++ b/client/menu/error.tscn
@@ -1,10 +1,10 @@
[gd_scene load_steps=6 format=3 uid="uid://cimgn07lbcs4v"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_cabdu"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_cabdu"]
[ext_resource type="PackedScene" uid="uid://l4vm07dtda4j" path="res://menu/menu_background.tscn" id="2_5fxol"]
[ext_resource type="Script" path="res://menu/error.gd" id="2_dbe41"]
[ext_resource type="PackedScene" uid="uid://bg2d78ycorcqk" path="res://menu/scene_transition.tscn" id="4_1nbt3"]
-[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/dark_blur_material.tres" id="4_hxkkd"]
+[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/materials/dark_blur_material.tres" id="4_hxkkd"]
[node name="ErrorMenu" type="Control"]
layout_mode = 3
diff --git a/client/menu/hairstyle_preview.tscn b/client/menu/hairstyle_preview.tscn
index 46bb9c74..5952de63 100644
--- a/client/menu/hairstyle_preview.tscn
+++ b/client/menu/hairstyle_preview.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=7 format=3 uid="uid://dfon56nwd2tgn"]
[ext_resource type="Script" path="res://menu/hairstyle_preview.gd" id="1_0qdmv"]
-[ext_resource type="Shader" path="res://menu/grayscale.gdshader" id="1_sf0gc"]
+[ext_resource type="Shader" path="res://menu/theme/shaders/grayscale.gdshader" id="1_sf0gc"]
[ext_resource type="PackedScene" uid="uid://b3hhir2fvnunu" path="res://player/character/character.tscn" id="2_jtitc"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_entrs"]
diff --git a/client/menu/arrow.svg b/client/menu/icons/arrow.svg
index bafc9e69..bafc9e69 100644
--- a/client/menu/arrow.svg
+++ b/client/menu/icons/arrow.svg
diff --git a/client/menu/arrow.svg.import b/client/menu/icons/arrow.svg.import
index 198224ad..2338d88e 100644
--- a/client/menu/arrow.svg.import
+++ b/client/menu/icons/arrow.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://35rd5gamtyqm"
-path="res://.godot/imported/arrow.svg-41f5cc1ac36d42c934f574d48bb6dcd0.ctex"
+path="res://.godot/imported/arrow.svg-4b2b120f303a2e998d242c78a6966282.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://menu/arrow.svg"
-dest_files=["res://.godot/imported/arrow.svg-41f5cc1ac36d42c934f574d48bb6dcd0.ctex"]
+source_file="res://menu/icons/arrow.svg"
+dest_files=["res://.godot/imported/arrow.svg-4b2b120f303a2e998d242c78a6966282.ctex"]
[params]
diff --git a/client/menu/arrow_focus.svg b/client/menu/icons/arrow_focus.svg
index 456f0261..456f0261 100644
--- a/client/menu/arrow_focus.svg
+++ b/client/menu/icons/arrow_focus.svg
diff --git a/client/menu/arrow_focus.svg.import b/client/menu/icons/arrow_focus.svg.import
index 5643398a..19b426b8 100644
--- a/client/menu/arrow_focus.svg.import
+++ b/client/menu/icons/arrow_focus.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://by3qsrpxnfq4w"
-path="res://.godot/imported/arrow_focus.svg-796c7015ab25a208e0703cc077245567.ctex"
+path="res://.godot/imported/arrow_focus.svg-54159cec20654fda644690185faf6883.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://menu/arrow_focus.svg"
-dest_files=["res://.godot/imported/arrow_focus.svg-796c7015ab25a208e0703cc077245567.ctex"]
+source_file="res://menu/icons/arrow_focus.svg"
+dest_files=["res://.godot/imported/arrow_focus.svg-54159cec20654fda644690185faf6883.ctex"]
[params]
diff --git a/client/menu/arrow_hover.svg b/client/menu/icons/arrow_hover.svg
index 098063ec..098063ec 100644
--- a/client/menu/arrow_hover.svg
+++ b/client/menu/icons/arrow_hover.svg
diff --git a/client/menu/arrow_hover.svg.import b/client/menu/icons/arrow_hover.svg.import
index c8811de2..6530e4bb 100644
--- a/client/menu/arrow_hover.svg.import
+++ b/client/menu/icons/arrow_hover.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b33qmctbpf48g"
-path="res://.godot/imported/arrow_hover.svg-e30a6426cf1ccd3c2d183c20eb7b0d9a.ctex"
+path="res://.godot/imported/arrow_hover.svg-7a4a56e502ea35101b318789923c1f47.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://menu/arrow_hover.svg"
-dest_files=["res://.godot/imported/arrow_hover.svg-e30a6426cf1ccd3c2d183c20eb7b0d9a.ctex"]
+source_file="res://menu/icons/arrow_hover.svg"
+dest_files=["res://.godot/imported/arrow_hover.svg-7a4a56e502ea35101b318789923c1f47.ctex"]
[params]
diff --git a/client/menu/arrow_pressed.svg b/client/menu/icons/arrow_pressed.svg
index 1abd9a8f..1abd9a8f 100644
--- a/client/menu/arrow_pressed.svg
+++ b/client/menu/icons/arrow_pressed.svg
diff --git a/client/menu/arrow_pressed.svg.import b/client/menu/icons/arrow_pressed.svg.import
index 74d1dffe..0958f395 100644
--- a/client/menu/arrow_pressed.svg.import
+++ b/client/menu/icons/arrow_pressed.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://j75dbytlbju"
-path="res://.godot/imported/arrow_pressed.svg-27eedadced7da045a9df177b0099000b.ctex"
+path="res://.godot/imported/arrow_pressed.svg-064136a9c6bd871ed0ad5fd10df7ddf7.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://menu/arrow_pressed.svg"
-dest_files=["res://.godot/imported/arrow_pressed.svg-27eedadced7da045a9df177b0099000b.ctex"]
+source_file="res://menu/icons/arrow_pressed.svg"
+dest_files=["res://.godot/imported/arrow_pressed.svg-064136a9c6bd871ed0ad5fd10df7ddf7.ctex"]
[params]
diff --git a/client/menu/boost.webp b/client/menu/icons/boost.webp
index afea92df..afea92df 100644
--- a/client/menu/boost.webp
+++ b/client/menu/icons/boost.webp
Binary files differ
diff --git a/client/menu/boost.webp.import b/client/menu/icons/boost.webp.import
index 999115e7..a7c0768b 100644
--- a/client/menu/boost.webp.import
+++ b/client/menu/icons/boost.webp.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bnxllatlo4clg"
-path="res://.godot/imported/boost.webp-e0fa5b3507b36424ead2769ac2e73472.ctex"
+path="res://.godot/imported/boost.webp-650c006bc54ab6e0ac3213a966d84ecd.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://menu/boost.webp"
-dest_files=["res://.godot/imported/boost.webp-e0fa5b3507b36424ead2769ac2e73472.ctex"]
+source_file="res://menu/icons/boost.webp"
+dest_files=["res://.godot/imported/boost.webp-650c006bc54ab6e0ac3213a966d84ecd.ctex"]
[params]
diff --git a/client/menu/circle.svg b/client/menu/icons/circle.svg
index 05fab1cb..05fab1cb 100644
--- a/client/menu/circle.svg
+++ b/client/menu/icons/circle.svg
diff --git a/client/menu/circle.svg.import b/client/menu/icons/circle.svg.import
index dcc19684..bb92ad4f 100644
--- a/client/menu/circle.svg.import
+++ b/client/menu/icons/circle.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://d2xf8qdh01e41"
-path="res://.godot/imported/circle.svg-d0b2fb05ade8e48b77faa1fda965eee3.ctex"
+path="res://.godot/imported/circle.svg-f3244b3d13a0268ef24c94d9e07216c2.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://menu/circle.svg"
-dest_files=["res://.godot/imported/circle.svg-d0b2fb05ade8e48b77faa1fda965eee3.ctex"]
+source_file="res://menu/icons/circle.svg"
+dest_files=["res://.godot/imported/circle.svg-f3244b3d13a0268ef24c94d9e07216c2.ctex"]
[params]
diff --git a/client/menu/hint.svg b/client/menu/icons/hint.svg
index ad64de91..ad64de91 100644
--- a/client/menu/hint.svg
+++ b/client/menu/icons/hint.svg
diff --git a/client/menu/hint.svg.import b/client/menu/icons/hint.svg.import
index 9f5eba04..e658d219 100644
--- a/client/menu/hint.svg.import
+++ b/client/menu/icons/hint.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b2uv5rf0enikf"
-path="res://.godot/imported/hint.svg-84d80eb00de22610835892179ff94034.ctex"
+path="res://.godot/imported/hint.svg-df98298ece507a1bda0092ad9e5243d5.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://menu/hint.svg"
-dest_files=["res://.godot/imported/hint.svg-84d80eb00de22610835892179ff94034.ctex"]
+source_file="res://menu/icons/hint.svg"
+dest_files=["res://.godot/imported/hint.svg-df98298ece507a1bda0092ad9e5243d5.ctex"]
[params]
diff --git a/client/menu/interact.webp b/client/menu/icons/interact.webp
index cf57c4c0..cf57c4c0 100644
--- a/client/menu/interact.webp
+++ b/client/menu/icons/interact.webp
Binary files differ
diff --git a/client/menu/interact.webp.import b/client/menu/icons/interact.webp.import
index 55ec9275..daf614c6 100644
--- a/client/menu/interact.webp.import
+++ b/client/menu/icons/interact.webp.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dcgt82qkya880"
-path="res://.godot/imported/interact.webp-ad70044ea6f17b27fedc400ffc5d7eb5.ctex"
+path="res://.godot/imported/interact.webp-8116b5d17f0ba3d9118b7be9331681ba.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://menu/interact.webp"
-dest_files=["res://.godot/imported/interact.webp-ad70044ea6f17b27fedc400ffc5d7eb5.ctex"]
+source_file="res://menu/icons/interact.webp"
+dest_files=["res://.godot/imported/interact.webp-8116b5d17f0ba3d9118b7be9331681ba.ctex"]
[params]
diff --git a/client/menu/pause.webp b/client/menu/icons/pause.webp
index 24ec72d8..24ec72d8 100644
--- a/client/menu/pause.webp
+++ b/client/menu/icons/pause.webp
Binary files differ
diff --git a/client/menu/pause.webp.import b/client/menu/icons/pause.webp.import
index d132a237..c15aee7b 100644
--- a/client/menu/pause.webp.import
+++ b/client/menu/icons/pause.webp.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://qto5rj6wlaeb"
-path="res://.godot/imported/pause.webp-109d517ceb320a1dc8b8c95512f630f5.ctex"
+path="res://.godot/imported/pause.webp-dc4a5d6b868b49810e4c5551e3a25757.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://menu/pause.webp"
-dest_files=["res://.godot/imported/pause.webp-109d517ceb320a1dc8b8c95512f630f5.ctex"]
+source_file="res://menu/icons/pause.webp"
+dest_files=["res://.godot/imported/pause.webp-dc4a5d6b868b49810e4c5551e3a25757.ctex"]
[params]
diff --git a/client/menu/plus.svg b/client/menu/icons/plus.svg
index c79169ba..c79169ba 100644
--- a/client/menu/plus.svg
+++ b/client/menu/icons/plus.svg
diff --git a/client/menu/plus.svg.import b/client/menu/icons/plus.svg.import
index 13058c11..f951a1af 100644
--- a/client/menu/plus.svg.import
+++ b/client/menu/icons/plus.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cnfjbowd2i02r"
-path="res://.godot/imported/plus.svg-9648647cb056d51ef71ca6c84e7bca36.ctex"
+path="res://.godot/imported/plus.svg-84dacc0e61bf1916a177b38a64ba42e2.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://menu/plus.svg"
-dest_files=["res://.godot/imported/plus.svg-9648647cb056d51ef71ca6c84e7bca36.ctex"]
+source_file="res://menu/icons/plus.svg"
+dest_files=["res://.godot/imported/plus.svg-84dacc0e61bf1916a177b38a64ba42e2.ctex"]
[params]
diff --git a/client/menu/reset.svg b/client/menu/icons/reset.svg
index 660d7759..660d7759 100644
--- a/client/menu/reset.svg
+++ b/client/menu/icons/reset.svg
diff --git a/client/menu/reset.svg.import b/client/menu/icons/reset.svg.import
index cf012583..cecca8e4 100644
--- a/client/menu/reset.svg.import
+++ b/client/menu/icons/reset.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cucnmy0j5n8l8"
-path="res://.godot/imported/reset.svg-8568f92cfa4ad303d2cf2ad8267c710f.ctex"
+path="res://.godot/imported/reset.svg-8a32af0c84ee1d00a467a7630ce0a918.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://menu/reset.svg"
-dest_files=["res://.godot/imported/reset.svg-8568f92cfa4ad303d2cf2ad8267c710f.ctex"]
+source_file="res://menu/icons/reset.svg"
+dest_files=["res://.godot/imported/reset.svg-8a32af0c84ee1d00a467a7630ce0a918.ctex"]
[params]
diff --git a/client/menu/user.webp b/client/menu/icons/user.webp
index 5bba0540..5bba0540 100644
--- a/client/menu/user.webp
+++ b/client/menu/icons/user.webp
Binary files differ
diff --git a/client/menu/user.webp.import b/client/menu/icons/user.webp.import
index 112cf9b8..1b8fbb89 100644
--- a/client/menu/user.webp.import
+++ b/client/menu/icons/user.webp.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://222w1wha75od"
-path="res://.godot/imported/user.webp-257e5395baacd6a382811f4f2dd7cd93.ctex"
+path="res://.godot/imported/user.webp-de27cb424a236a023aa54d8999333695.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://menu/user.webp"
-dest_files=["res://.godot/imported/user.webp-257e5395baacd6a382811f4f2dd7cd93.ctex"]
+source_file="res://menu/icons/user.webp"
+dest_files=["res://.godot/imported/user.webp-de27cb424a236a023aa54d8999333695.ctex"]
[params]
diff --git a/client/menu/ingame.tscn b/client/menu/ingame.tscn
index 4bb2a458..74b0a486 100644
--- a/client/menu/ingame.tscn
+++ b/client/menu/ingame.tscn
@@ -1,10 +1,10 @@
[gd_scene load_steps=11 format=3 uid="uid://lxlgtjm8hw7v"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_2vmyh"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_2vmyh"]
[ext_resource type="Script" path="res://menu/ingame.gd" id="2_0h3no"]
-[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/dark_blur_material.tres" id="3_vvvlt"]
-[ext_resource type="Script" path="res://menu/blur_setup.gd" id="4_b6bm7"]
-[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/font-sansita-swashed.woff2" id="4_scupw"]
+[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/materials/dark_blur_material.tres" id="3_vvvlt"]
+[ext_resource type="Script" path="res://menu/auto_setup/blur_setup.gd" id="4_b6bm7"]
+[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/fonts/font-sansita-swashed.woff2" id="4_scupw"]
[ext_resource type="StyleBox" uid="uid://bw4jamyna1top" path="res://menu/theme/style/panel_style_sidebar.tres" id="4_vr8y1"]
[sub_resource type="Animation" id="Animation_8sedy"]
diff --git a/client/menu/lobby.tscn b/client/menu/lobby.tscn
index 909a14cb..83284357 100644
--- a/client/menu/lobby.tscn
+++ b/client/menu/lobby.tscn
@@ -1,18 +1,18 @@
[gd_scene load_steps=16 format=3 uid="uid://bc50la65ntifb"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_u18ke"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_u18ke"]
[ext_resource type="Script" path="res://menu/lobby.gd" id="2_7657i"]
[ext_resource type="StyleBox" uid="uid://de80aw86emnql" path="res://menu/theme/style/lobby_panel_override.tres" id="3_6iqoe"]
-[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/dark_blur_material.tres" id="3_esmbx"]
-[ext_resource type="Texture2D" uid="uid://35rd5gamtyqm" path="res://menu/arrow.svg" id="3_jxleg"]
-[ext_resource type="Texture2D" uid="uid://j75dbytlbju" path="res://menu/arrow_pressed.svg" id="4_eapmn"]
-[ext_resource type="Script" path="res://menu/blur_setup.gd" id="5_am8pt"]
-[ext_resource type="Texture2D" uid="uid://b33qmctbpf48g" path="res://menu/arrow_hover.svg" id="5_odwav"]
-[ext_resource type="Texture2D" uid="uid://by3qsrpxnfq4w" path="res://menu/arrow_focus.svg" id="6_tulu3"]
+[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/materials/dark_blur_material.tres" id="3_esmbx"]
+[ext_resource type="Texture2D" uid="uid://35rd5gamtyqm" path="res://menu/icons/arrow.svg" id="3_jxleg"]
+[ext_resource type="Texture2D" uid="uid://j75dbytlbju" path="res://menu/icons/arrow_pressed.svg" id="4_eapmn"]
+[ext_resource type="Script" path="res://menu/auto_setup/blur_setup.gd" id="5_am8pt"]
+[ext_resource type="Texture2D" uid="uid://b33qmctbpf48g" path="res://menu/icons/arrow_hover.svg" id="5_odwav"]
+[ext_resource type="Texture2D" uid="uid://by3qsrpxnfq4w" path="res://menu/icons/arrow_focus.svg" id="6_tulu3"]
[ext_resource type="PackedScene" uid="uid://b1f7bgn65j7b5" path="res://menu/controller_buttons/controller_button.tscn" id="7_t6mox"]
-[ext_resource type="FontFile" uid="uid://5ixo6b3bd3km" path="res://menu/theme/font-josefin-sans.woff2" id="8_cwbpa"]
+[ext_resource type="FontFile" uid="uid://5ixo6b3bd3km" path="res://menu/theme/fonts/font-josefin-sans.woff2" id="8_cwbpa"]
[ext_resource type="Texture2D" uid="uid://bsx6fo7mv2u6a" path="res://menu/controller_buttons/x.svg" id="9_q14bw"]
-[ext_resource type="Script" path="res://menu/scroll_container_custom.gd" id="10_bgene"]
+[ext_resource type="Script" path="res://menu/auto_setup/scroll_container_custom.gd" id="10_bgene"]
[ext_resource type="Texture2D" uid="uid://cr2a6ide6vnnv" path="res://menu/controller_buttons/y.svg" id="11_5uugf"]
[sub_resource type="FontVariation" id="FontVariation_5xxr2"]
diff --git a/client/menu/lobby/player.tscn b/client/menu/lobby/player.tscn
index 964bc4fb..344aae91 100644
--- a/client/menu/lobby/player.tscn
+++ b/client/menu/lobby/player.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=6 format=3 uid="uid://gmldnel4xbxy"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_flfqn"]
-[ext_resource type="Texture2D" uid="uid://222w1wha75od" path="res://menu/user.webp" id="2_mnaqt"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_flfqn"]
+[ext_resource type="Texture2D" uid="uid://222w1wha75od" path="res://menu/icons/user.webp" id="2_mnaqt"]
[ext_resource type="Script" path="res://menu/lobby/player.gd" id="2_w3lyk"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1227j"]
diff --git a/client/menu/main.tscn b/client/menu/main.tscn
index ff4e7a94..7ec73085 100644
--- a/client/menu/main.tscn
+++ b/client/menu/main.tscn
@@ -1,11 +1,11 @@
[gd_scene load_steps=9 format=3 uid="uid://dbj8508whxgwv"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_3qfu3"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_3qfu3"]
[ext_resource type="Script" path="res://menu/main.gd" id="2_xjnc3"]
[ext_resource type="PackedScene" uid="uid://l4vm07dtda4j" path="res://menu/menu_background.tscn" id="3_4evao"]
-[ext_resource type="Material" uid="uid://2j8a0c0a2ta5" path="res://menu/theme/blur_material.tres" id="4_nx4vf"]
-[ext_resource type="Script" path="res://menu/blur_setup.gd" id="5_0mn56"]
-[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/font-sansita-swashed.woff2" id="5_k7bqq"]
+[ext_resource type="Material" uid="uid://2j8a0c0a2ta5" path="res://menu/theme/materials/blur_material.tres" id="4_nx4vf"]
+[ext_resource type="Script" path="res://menu/auto_setup/blur_setup.gd" id="5_0mn56"]
+[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/fonts/font-sansita-swashed.woff2" id="5_k7bqq"]
[ext_resource type="StyleBox" uid="uid://bw4jamyna1top" path="res://menu/theme/style/panel_style_sidebar.tres" id="5_qlyeo"]
[sub_resource type="FontVariation" id="FontVariation_htgmg"]
diff --git a/client/menu/menu_background.tscn b/client/menu/menu_background.tscn
index 19f0d506..c8cd7c53 100644
--- a/client/menu/menu_background.tscn
+++ b/client/menu/menu_background.tscn
@@ -2,7 +2,7 @@
[ext_resource type="Script" path="res://menu/menu_background.gd" id="1_ijsg0"]
[ext_resource type="Script" path="res://map/auto_setup/environment_setup.gd" id="2_rkilw"]
-[ext_resource type="Shader" path="res://menu/menu_background.gdshader" id="3_5mp8y"]
+[ext_resource type="Shader" path="res://menu/theme/shaders/menu_background.gdshader" id="3_5mp8y"]
[ext_resource type="PackedScene" uid="uid://b4gone8fu53r7" path="res://map/map.tscn" id="3_p80a7"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_uw50b"]
diff --git a/client/menu/overlay.tscn b/client/menu/overlay.tscn
index b298f54b..25ecae4c 100644
--- a/client/menu/overlay.tscn
+++ b/client/menu/overlay.tscn
@@ -1,9 +1,9 @@
[gd_scene load_steps=6 format=3 uid="uid://bpikve6wlsjfl"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_4kujw"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_4kujw"]
[ext_resource type="Script" path="res://menu/overlay.gd" id="2_kbjds"]
-[ext_resource type="Texture2D" uid="uid://chxkwohi56cxx" path="res://menu/theme/paper_texture.tres" id="3_oum5g"]
-[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/font-sansita-swashed.woff2" id="3_u54fv"]
+[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"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_04ujj"]
bg_color = Color(0, 0, 0, 0)
diff --git a/client/menu/play.gd b/client/menu/play.gd
index 7ef60bea..3d9a0d84 100644
--- a/client/menu/play.gd
+++ b/client/menu/play.gd
@@ -21,6 +21,7 @@ var url_regex: RegEx = RegEx.new()
@onready var server_list: VBoxContainer = $side/margin/options/second/ScrollContainerCustom/ServerList
@onready var server_list_loading: Label = $side/margin/options/second/Loading
+@onready var server_list_empty: Label = $side/margin/options/second/NoServers
@onready var connect_uri = $side/margin/options/second/connect/uri
@onready var server = $side/margin/options/second/server
@onready var server_control = $side/margin/options/second/server/control
@@ -88,6 +89,9 @@ func update_server_list(lists: Array[Array]):
connect_uri.grab_focus()
else:
server_list.get_child(idx - 1).grab_focus()
+
+ # Show message if no servers available
+ server_list_empty.visible = idx == 0
func update_server_list_loading(status: bool):
server_list_loading.visible = status
diff --git a/client/menu/play.tscn b/client/menu/play.tscn
index 7808c7b4..43a3414f 100644
--- a/client/menu/play.tscn
+++ b/client/menu/play.tscn
@@ -1,10 +1,10 @@
[gd_scene load_steps=8 format=3 uid="uid://c8url5fpttbem"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_cckds"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_cckds"]
[ext_resource type="Script" path="res://menu/play.gd" id="2_phxx0"]
-[ext_resource type="Material" uid="uid://2j8a0c0a2ta5" path="res://menu/theme/blur_material.tres" id="3_fsbt7"]
-[ext_resource type="Script" path="res://menu/scroll_container_custom.gd" id="5_cm120"]
-[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/font-sansita-swashed.woff2" id="5_ojpbf"]
+[ext_resource type="Material" uid="uid://2j8a0c0a2ta5" path="res://menu/theme/materials/blur_material.tres" id="3_fsbt7"]
+[ext_resource type="Script" path="res://menu/auto_setup/scroll_container_custom.gd" id="5_cm120"]
+[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/fonts/font-sansita-swashed.woff2" id="5_ojpbf"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ukani"]
@@ -66,6 +66,13 @@ size_flags_horizontal = 3
text = "c.menu.play.fetching_list"
horizontal_alignment = 1
+[node name="NoServers" type="Label" parent="side/margin/options/second"]
+visible = false
+layout_mode = 2
+size_flags_horizontal = 3
+text = "c.menu.play.no_servers"
+horizontal_alignment = 1
+
[node name="ScrollContainerCustom" type="ScrollContainer" parent="side/margin/options/second"]
layout_mode = 2
size_flags_vertical = 3
diff --git a/client/menu/popup.tscn b/client/menu/popup.tscn
index 68818643..84c44515 100644
--- a/client/menu/popup.tscn
+++ b/client/menu/popup.tscn
@@ -1,9 +1,9 @@
[gd_scene load_steps=5 format=3 uid="uid://lwtym0pbc17g"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_m0d0r"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_m0d0r"]
[ext_resource type="Script" path="res://menu/popup.gd" id="2_1h10j"]
-[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/dark_blur_material.tres" id="3_iouvy"]
-[ext_resource type="Script" path="res://menu/blur_setup.gd" id="4_e4iqk"]
+[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/materials/dark_blur_material.tres" id="3_iouvy"]
+[ext_resource type="Script" path="res://menu/auto_setup/blur_setup.gd" id="4_e4iqk"]
[node name="Popup" type="Control"]
layout_mode = 3
diff --git a/client/menu/printed_material.tres b/client/menu/printed_material.tres
deleted file mode 100644
index 595248fd..00000000
--- a/client/menu/printed_material.tres
+++ /dev/null
@@ -1,6 +0,0 @@
-[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://dogdyoqrmy6ft"]
-
-[ext_resource type="Shader" path="res://menu/printed.gdshader" id="1_v4ily"]
-
-[resource]
-shader = ExtResource("1_v4ily")
diff --git a/client/menu/rating/rating.tscn b/client/menu/rating/rating.tscn
index 4b4b7a5f..a1f48c64 100644
--- a/client/menu/rating/rating.tscn
+++ b/client/menu/rating/rating.tscn
@@ -1,10 +1,10 @@
[gd_scene load_steps=12 format=3 uid="uid://buu3cdpigs8qq"]
-[ext_resource type="Texture2D" uid="uid://b10goh4dsa3b0" path="res://player/star.webp" id="1_7qv7r"]
+[ext_resource type="Texture2D" uid="uid://b10goh4dsa3b0" path="res://player/particles/satisfied/star.webp" id="1_7qv7r"]
[ext_resource type="Shader" path="res://menu/rating/desaturate.gdshader" id="1_pddsm"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_uwajf"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_uwajf"]
[ext_resource type="Script" path="res://menu/rating/rating.gd" id="2_cq0se"]
-[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/dark_blur_material.tres" id="4_hdurb"]
+[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/materials/dark_blur_material.tres" id="4_hdurb"]
[ext_resource type="AudioStream" uid="uid://camy77x26mmpv" path="res://menu/sounds/success.ogg" id="5_tutpj"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_oi7xd"]
diff --git a/client/menu/settings.tscn b/client/menu/settings.tscn
index d29a3646..7206990f 100644
--- a/client/menu/settings.tscn
+++ b/client/menu/settings.tscn
@@ -1,9 +1,9 @@
[gd_scene load_steps=5 format=3 uid="uid://8ic77jmadadj"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_foq3a"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_foq3a"]
[ext_resource type="Script" path="res://menu/settings.gd" id="2_3hgm8"]
-[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/dark_blur_material.tres" id="3_8nykw"]
-[ext_resource type="Script" path="res://menu/blur_setup.gd" id="4_v6q3y"]
+[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/materials/dark_blur_material.tres" id="3_8nykw"]
+[ext_resource type="Script" path="res://menu/auto_setup/blur_setup.gd" id="4_v6q3y"]
[node name="SettingsMenu" type="Control"]
layout_mode = 3
diff --git a/client/menu/settings/input/input_value_node.tscn b/client/menu/settings/input/input_value_node.tscn
index 496bfaa0..0132a5dc 100644
--- a/client/menu/settings/input/input_value_node.tscn
+++ b/client/menu/settings/input/input_value_node.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=3 format=3 uid="uid://c6r0nv5daq7wc"]
[ext_resource type="Script" path="res://menu/settings/input/input_value_node.gd" id="1_snxax"]
-[ext_resource type="Texture2D" uid="uid://cnfjbowd2i02r" path="res://menu/plus.svg" id="2_3vlvc"]
+[ext_resource type="Texture2D" uid="uid://cnfjbowd2i02r" path="res://menu/icons/plus.svg" id="2_3vlvc"]
[node name="InputValueNode" type="VBoxContainer"]
offset_right = 128.0
diff --git a/client/menu/settings/settings_row.gd b/client/menu/settings/settings_row.gd
index 68340918..f75922c4 100644
--- a/client/menu/settings/settings_row.gd
+++ b/client/menu/settings/settings_row.gd
@@ -24,7 +24,7 @@ signal reset()
@onready var reset_button = $HBoxContainer/Reset
var value_node: Node
-var description = tr("No value was given to the row")
+var description = "No value was given to the row"
func _ready():
if value_node != null:
diff --git a/client/menu/settings/settings_row.tscn b/client/menu/settings/settings_row.tscn
index cd2e3b4b..489239f3 100644
--- a/client/menu/settings/settings_row.tscn
+++ b/client/menu/settings/settings_row.tscn
@@ -1,9 +1,9 @@
[gd_scene load_steps=7 format=3 uid="uid://o5e5vpem8w0k"]
-[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_iij3k"]
+[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme/theme.tres" id="1_iij3k"]
[ext_resource type="Script" path="res://menu/settings/settings_row.gd" id="2_l8i7p"]
-[ext_resource type="FontFile" uid="uid://5ixo6b3bd3km" path="res://menu/theme/font-josefin-sans.woff2" id="3_7k5da"]
-[ext_resource type="Texture2D" uid="uid://cucnmy0j5n8l8" path="res://menu/reset.svg" id="4_bj3dr"]
+[ext_resource type="FontFile" uid="uid://5ixo6b3bd3km" path="res://menu/theme/fonts/font-josefin-sans.woff2" id="3_7k5da"]
+[ext_resource type="Texture2D" uid="uid://cucnmy0j5n8l8" path="res://menu/icons/reset.svg" id="4_bj3dr"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_pk3rs"]
content_margin_left = 16.0
diff --git a/client/menu/setup.tscn b/client/menu/setup.tscn
index 67610aba..0ad994a5 100644
--- a/client/menu/setup.tscn
+++ b/client/menu/setup.tscn
@@ -1,9 +1,9 @@
[gd_scene load_steps=15 format=3 uid="uid://ddl3efikvqp66"]
[ext_resource type="Script" path="res://menu/setup.gd" id="1_mo46n"]
-[ext_resource type="Theme" uid="uid://ci2qajdoa1an1" path="res://menu/theme/paper.tres" id="1_yq0aa"]
-[ext_resource type="Script" path="res://menu/scroll_container_custom.gd" id="2_4caf2"]
-[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/font-sansita-swashed.woff2" id="3_2vg4d"]
+[ext_resource type="Theme" uid="uid://ci2qajdoa1an1" path="res://menu/theme/theme/paper.tres" id="1_yq0aa"]
+[ext_resource type="Script" path="res://menu/auto_setup/scroll_container_custom.gd" id="2_4caf2"]
+[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/fonts/font-sansita-swashed.woff2" id="3_2vg4d"]
[ext_resource type="AudioStream" uid="uid://do7ii5hx71p0m" path="res://menu/sounds/page.ogg" id="5_xac6d"]
[ext_resource type="AudioStream" uid="uid://5b3noxjmasmu" path="res://menu/sounds/sign.ogg" id="6_wf0gh"]
diff --git a/client/menu/theme/paper_texture.tres b/client/menu/textures/paper_texture.tres
index 2c681244..2c681244 100644
--- a/client/menu/theme/paper_texture.tres
+++ b/client/menu/textures/paper_texture.tres
diff --git a/client/menu/theme/font-azaret-mono.woff2 b/client/menu/theme/fonts/font-azaret-mono.woff2
index c413b182..c413b182 100644
--- a/client/menu/theme/font-azaret-mono.woff2
+++ b/client/menu/theme/fonts/font-azaret-mono.woff2
Binary files differ
diff --git a/client/menu/theme/font-azaret-mono.woff2.import b/client/menu/theme/fonts/font-azaret-mono.woff2.import
index cafe1fbd..20a14c40 100644
--- a/client/menu/theme/font-azaret-mono.woff2.import
+++ b/client/menu/theme/fonts/font-azaret-mono.woff2.import
@@ -3,12 +3,12 @@
importer="font_data_dynamic"
type="FontFile"
uid="uid://bk704sc5gkrb3"
-path="res://.godot/imported/font-azaret-mono.woff2-38a6d727215392526b2e0e5bff930be6.fontdata"
+path="res://.godot/imported/font-azaret-mono.woff2-e51d1e7d25611225022685bd0a3a496f.fontdata"
[deps]
-source_file="res://menu/theme/font-azaret-mono.woff2"
-dest_files=["res://.godot/imported/font-azaret-mono.woff2-38a6d727215392526b2e0e5bff930be6.fontdata"]
+source_file="res://menu/theme/fonts/font-azaret-mono.woff2"
+dest_files=["res://.godot/imported/font-azaret-mono.woff2-e51d1e7d25611225022685bd0a3a496f.fontdata"]
[params]
diff --git a/client/menu/theme/font-josefin-sans.woff2 b/client/menu/theme/fonts/font-josefin-sans.woff2
index dce2708f..dce2708f 100644
--- a/client/menu/theme/font-josefin-sans.woff2
+++ b/client/menu/theme/fonts/font-josefin-sans.woff2
Binary files differ
diff --git a/client/menu/theme/font-josefin-sans.woff2.import b/client/menu/theme/fonts/font-josefin-sans.woff2.import
index 03e086da..8334a70e 100644
--- a/client/menu/theme/font-josefin-sans.woff2.import
+++ b/client/menu/theme/fonts/font-josefin-sans.woff2.import
@@ -3,12 +3,12 @@
importer="font_data_dynamic"
type="FontFile"
uid="uid://5ixo6b3bd3km"
-path="res://.godot/imported/font-josefin-sans.woff2-e2c3f263d98e1132cfe6af3f4f0a3454.fontdata"
+path="res://.godot/imported/font-josefin-sans.woff2-3826b0a93d8b3bea37b981fd829e8139.fontdata"
[deps]
-source_file="res://menu/theme/font-josefin-sans.woff2"
-dest_files=["res://.godot/imported/font-josefin-sans.woff2-e2c3f263d98e1132cfe6af3f4f0a3454.fontdata"]
+source_file="res://menu/theme/fonts/font-josefin-sans.woff2"
+dest_files=["res://.godot/imported/font-josefin-sans.woff2-3826b0a93d8b3bea37b981fd829e8139.fontdata"]
[params]
diff --git a/client/menu/theme/font-sansita-swashed.woff2 b/client/menu/theme/fonts/font-sansita-swashed.woff2
index 5c665fb0..5c665fb0 100644
--- a/client/menu/theme/font-sansita-swashed.woff2
+++ b/client/menu/theme/fonts/font-sansita-swashed.woff2
Binary files differ
diff --git a/client/menu/theme/font-sansita-swashed.woff2.import b/client/menu/theme/fonts/font-sansita-swashed.woff2.import
index 2d38716d..d35f5ae1 100644
--- a/client/menu/theme/font-sansita-swashed.woff2.import
+++ b/client/menu/theme/fonts/font-sansita-swashed.woff2.import
@@ -3,12 +3,12 @@
importer="font_data_dynamic"
type="FontFile"
uid="uid://bo4vh5xkpvrh1"
-path="res://.godot/imported/font-sansita-swashed.woff2-323b4a2ee0671aba6e17a6f073f706f3.fontdata"
+path="res://.godot/imported/font-sansita-swashed.woff2-02fc401b56679ae18723df7cf0e77bd6.fontdata"
[deps]
-source_file="res://menu/theme/font-sansita-swashed.woff2"
-dest_files=["res://.godot/imported/font-sansita-swashed.woff2-323b4a2ee0671aba6e17a6f073f706f3.fontdata"]
+source_file="res://menu/theme/fonts/font-sansita-swashed.woff2"
+dest_files=["res://.godot/imported/font-sansita-swashed.woff2-02fc401b56679ae18723df7cf0e77bd6.fontdata"]
[params]
diff --git a/client/menu/theme/blur_material.tres b/client/menu/theme/materials/blur_material.tres
index c035d230..035351c5 100644
--- a/client/menu/theme/blur_material.tres
+++ b/client/menu/theme/materials/blur_material.tres
@@ -1,6 +1,6 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://2j8a0c0a2ta5"]
-[ext_resource type="Shader" path="res://menu/blur_mix.gdshader" id="1_d16rd"]
+[ext_resource type="Shader" path="res://menu/theme/shaders/blur_mix.gdshader" id="1_d16rd"]
[resource]
shader = ExtResource("1_d16rd")
diff --git a/client/menu/theme/dark_blur_material.tres b/client/menu/theme/materials/dark_blur_material.tres
index daf74099..cee1aeca 100644
--- a/client/menu/theme/dark_blur_material.tres
+++ b/client/menu/theme/materials/dark_blur_material.tres
@@ -1,6 +1,6 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://beea1pc5nt67r"]
-[ext_resource type="Shader" path="res://menu/blur_mix.gdshader" id="1_cynu0"]
+[ext_resource type="Shader" path="res://menu/theme/shaders/blur_mix.gdshader" id="1_cynu0"]
[resource]
shader = ExtResource("1_cynu0")
diff --git a/client/menu/grayscale_material.tres b/client/menu/theme/materials/grayscale_material.tres
index 06d5e698..065356e5 100644
--- a/client/menu/grayscale_material.tres
+++ b/client/menu/theme/materials/grayscale_material.tres
@@ -1,6 +1,6 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://bplhkekj6rebp"]
-[ext_resource type="Shader" path="res://menu/grayscale.gdshader" id="1_u0c2c"]
+[ext_resource type="Shader" path="res://menu/theme/shaders/grayscale.gdshader" id="1_u0c2c"]
[resource]
shader = ExtResource("1_u0c2c")
diff --git a/client/menu/theme/materials/printed_material.tres b/client/menu/theme/materials/printed_material.tres
new file mode 100644
index 00000000..5695d5a5
--- /dev/null
+++ b/client/menu/theme/materials/printed_material.tres
@@ -0,0 +1,6 @@
+[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://dogdyoqrmy6ft"]
+
+[ext_resource type="Shader" path="res://menu/theme/shaders/printed.gdshader" id="1_sevww"]
+
+[resource]
+shader = ExtResource("1_sevww")
diff --git a/client/menu/blur_mix.gdshader b/client/menu/theme/shaders/blur_mix.gdshader
index 7e95224d..7e95224d 100644
--- a/client/menu/blur_mix.gdshader
+++ b/client/menu/theme/shaders/blur_mix.gdshader
diff --git a/client/menu/grayscale.gdshader b/client/menu/theme/shaders/grayscale.gdshader
index cc132c54..cc132c54 100644
--- a/client/menu/grayscale.gdshader
+++ b/client/menu/theme/shaders/grayscale.gdshader
diff --git a/client/menu/menu_background.gdshader b/client/menu/theme/shaders/menu_background.gdshader
index 91b94601..91b94601 100644
--- a/client/menu/menu_background.gdshader
+++ b/client/menu/theme/shaders/menu_background.gdshader
diff --git a/client/menu/printed.gdshader b/client/menu/theme/shaders/printed.gdshader
index 3b35faa8..3b35faa8 100644
--- a/client/menu/printed.gdshader
+++ b/client/menu/theme/shaders/printed.gdshader
diff --git a/client/menu/theme/paper_panel_style.tres b/client/menu/theme/style/paper_panel_style.tres
index 5a8a4a78..bd49eea4 100644
--- a/client/menu/theme/paper_panel_style.tres
+++ b/client/menu/theme/style/paper_panel_style.tres
@@ -1,6 +1,6 @@
[gd_resource type="StyleBoxTexture" load_steps=2 format=3 uid="uid://bqhs5wtdp2oax"]
-[ext_resource type="Texture2D" uid="uid://chxkwohi56cxx" path="res://menu/theme/paper_texture.tres" id="1_u1kqj"]
+[ext_resource type="Texture2D" uid="uid://chxkwohi56cxx" path="res://menu/textures/paper_texture.tres" id="1_u1kqj"]
[resource]
texture = ExtResource("1_u1kqj")
diff --git a/client/menu/theme/paper.tres b/client/menu/theme/theme/paper.tres
index acf6699a..6ff3bd10 100644
--- a/client/menu/theme/paper.tres
+++ b/client/menu/theme/theme/paper.tres
@@ -1,7 +1,7 @@
[gd_resource type="Theme" load_steps=17 format=3 uid="uid://ci2qajdoa1an1"]
-[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/font-sansita-swashed.woff2" id="1_koj1m"]
-[ext_resource type="FontFile" uid="uid://5ixo6b3bd3km" path="res://menu/theme/font-josefin-sans.woff2" id="1_tc8bk"]
+[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/fonts/font-sansita-swashed.woff2" id="1_koj1m"]
+[ext_resource type="FontFile" uid="uid://5ixo6b3bd3km" path="res://menu/theme/fonts/font-josefin-sans.woff2" id="1_tc8bk"]
[sub_resource type="FontVariation" id="FontVariation_pirkj"]
base_font = ExtResource("1_tc8bk")
diff --git a/client/menu/theme/theme.tres b/client/menu/theme/theme/theme.tres
index fff223c0..b10c230a 100644
--- a/client/menu/theme/theme.tres
+++ b/client/menu/theme/theme/theme.tres
@@ -1,10 +1,10 @@
-[gd_resource type="Theme" load_steps=11 format=3 uid="uid://b0qmvo504e457"]
+[gd_resource type="Theme" load_steps=12 format=3 uid="uid://b0qmvo504e457"]
-[ext_resource type="FontFile" uid="uid://5ixo6b3bd3km" path="res://menu/theme/font-josefin-sans.woff2" id="1_f8qb0"]
+[ext_resource type="FontFile" uid="uid://5ixo6b3bd3km" path="res://menu/theme/fonts/font-josefin-sans.woff2" id="1_f8qb0"]
[ext_resource type="StyleBox" uid="uid://b86kbd3pfkd5w" path="res://menu/theme/style/focus_style.tres" id="1_x88rs"]
[ext_resource type="StyleBox" uid="uid://pi5uhe0lrgka" path="res://menu/theme/style/normal_style.tres" id="2_8fwoi"]
[ext_resource type="StyleBox" uid="uid://dua4jqje3704w" path="res://menu/theme/style/hover_style.tres" id="2_ye28t"]
-[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/font-sansita-swashed.woff2" id="3_8u6ww"]
+[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/fonts/font-sansita-swashed.woff2" id="3_8u6ww"]
[ext_resource type="StyleBox" uid="uid://bcd4xcvtv7tws" path="res://menu/theme/style/panel_style.tres" id="4_42dlp"]
[sub_resource type="StyleBoxLine" id="StyleBoxLine_emtvk"]
@@ -35,6 +35,8 @@ base_font = ExtResource("1_f8qb0")
variation_embolden = 1.25
spacing_top = 5
+[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_or5ri"]
+
[resource]
default_font = SubResource("FontVariation_lyo8w")
Button/font_sizes/font_size = 18
@@ -65,3 +67,4 @@ RichTextLabel/fonts/bold_font = SubResource("FontVariation_ff4nr")
RichTextLabel/fonts/bold_italics_font = SubResource("FontVariation_lyo8w")
RichTextLabel/fonts/italics_font = SubResource("FontVariation_lyo8w")
RichTextLabel/fonts/mono_font = SubResource("FontVariation_lyo8w")
+TabContainer/styles/panel = SubResource("StyleBoxEmpty_or5ri")
diff --git a/client/player/angry.tscn b/client/player/angry.tscn
index 56fa4d05..c8f82ab6 100644
--- a/client/player/angry.tscn
+++ b/client/player/angry.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=6 format=3 uid="uid://cvty1rwt52anq"]
-[ext_resource type="Texture2D" uid="uid://unjbxplj845n" path="res://player/angry.webp" id="1_5op6v"]
+[ext_resource type="Texture2D" uid="uid://unjbxplj845n" path="res://player/particles/angry/angry.webp" id="1_5op6v"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ysmnk"]
transparency = 1
diff --git a/client/player/chat_message.tscn b/client/player/chat_message.tscn
index 594e9ec1..287891d5 100644
--- a/client/player/chat_message.tscn
+++ b/client/player/chat_message.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=4 format=3 uid="uid://5rcfoyuiwuya"]
-[ext_resource type="FontFile" uid="uid://5ixo6b3bd3km" path="res://menu/theme/font-josefin-sans.woff2" id="1_3ximm"]
+[ext_resource type="FontFile" uid="uid://5ixo6b3bd3km" path="res://menu/theme/fonts/font-josefin-sans.woff2" id="1_3ximm"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dpele"]
bg_color = Color(1, 1, 1, 1)
diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd
index 8c907efa..3a245e1a 100644
--- a/client/player/controllable_player.gd
+++ b/client/player/controllable_player.gd
@@ -39,7 +39,7 @@ var current_vibration_strength := 0.
var current_vibration_change := 0.
var target: Vector2i = Vector2i(0, 0)
-var last_interaction: Vector2i = Vector2i(0, 0)
+var last_interaction = null
func _ready():
vibration_timer = Timer.new()
@@ -205,20 +205,23 @@ func take_item(tile: Tile):
func interact():
if not is_input_enabled(): return
var tile = game.map.get_tile_instance(target)
- if tile != null and not last_interaction == target:
- if interacting:
+ if tile != null:
+ marker.visible = true
+
+ # clear last interaction if target has moved since
+ if last_interaction != null and not last_interaction == target:
game.mp.send_tile_interact(game.player_id, last_interaction, false)
+ marker.set_interacting(false)
+ last_interaction = null
marker.set_interactive(game.get_tile_interactive(target))
- marker.visible = true
marker_target = tile.item_base.global_position
- if Input.is_action_just_pressed("interact"):
- interacting = true
+ if Input.is_action_just_pressed("interact") and last_interaction == null:
last_interaction = target
game.mp.send_tile_interact(game.player_id, target, true)
tile.interact()
marker.set_interacting(true)
- elif Input.is_action_just_released("interact"):
- interacting = false
+ if Input.is_action_just_released("interact"):
+ last_interaction = null
game.mp.send_tile_interact(game.player_id, target, false)
marker.set_interacting(false)
else:
diff --git a/client/player/interact_marker.gdshader b/client/player/marker/interact_marker.gdshader
index 3720290f..3720290f 100644
--- a/client/player/interact_marker.gdshader
+++ b/client/player/marker/interact_marker.gdshader
diff --git a/client/player/marker.gd b/client/player/marker/marker.gd
index 07f6bfe8..07f6bfe8 100644
--- a/client/player/marker.gd
+++ b/client/player/marker/marker.gd
diff --git a/client/player/marker.tscn b/client/player/marker/marker.tscn
index 0d5efedb..bb638c7e 100644
--- a/client/player/marker.tscn
+++ b/client/player/marker/marker.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=7 format=3 uid="uid://c0euiv7duqfp4"]
-[ext_resource type="Script" path="res://player/marker.gd" id="1_3njdu"]
-[ext_resource type="Shader" path="res://player/interact_marker.gdshader" id="2_dejwy"]
+[ext_resource type="Script" path="res://player/marker/marker.gd" id="1_3njdu"]
+[ext_resource type="Shader" path="res://player/marker/interact_marker.gdshader" id="2_dejwy"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_o4v68"]
diff --git a/client/player/onscreen_controls/controls.tscn b/client/player/onscreen_controls/controls.tscn
index 0d09504f..a833b69f 100644
--- a/client/player/onscreen_controls/controls.tscn
+++ b/client/player/onscreen_controls/controls.tscn
@@ -2,9 +2,9 @@
[ext_resource type="PackedScene" uid="uid://dmr0fcamx7t56" path="res://player/onscreen_controls/virtual_joystick_scene.tscn" id="1_4k4lh"]
[ext_resource type="Script" path="res://player/onscreen_controls/controls.gd" id="1_rnoki"]
-[ext_resource type="Texture2D" uid="uid://bnxllatlo4clg" path="res://menu/boost.webp" id="2_i4ife"]
-[ext_resource type="Texture2D" uid="uid://dcgt82qkya880" path="res://menu/interact.webp" id="3_37rne"]
-[ext_resource type="Texture2D" uid="uid://qto5rj6wlaeb" path="res://menu/pause.webp" id="5_4bttq"]
+[ext_resource type="Texture2D" uid="uid://bnxllatlo4clg" path="res://menu/icons/boost.webp" id="2_i4ife"]
+[ext_resource type="Texture2D" uid="uid://dcgt82qkya880" path="res://menu/icons/interact.webp" id="3_37rne"]
+[ext_resource type="Texture2D" uid="uid://qto5rj6wlaeb" path="res://menu/icons/pause.webp" id="5_4bttq"]
[node name="UI" type="CanvasLayer"]
script = ExtResource("1_rnoki")
diff --git a/client/player/angry.webp b/client/player/particles/angry/angry.webp
index 866ba92c..866ba92c 100644
--- a/client/player/angry.webp
+++ b/client/player/particles/angry/angry.webp
Binary files differ
diff --git a/client/player/angry.webp.import b/client/player/particles/angry/angry.webp.import
index 2d622e73..3deee645 100644
--- a/client/player/angry.webp.import
+++ b/client/player/particles/angry/angry.webp.import
@@ -3,8 +3,8 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://unjbxplj845n"
-path.s3tc="res://.godot/imported/angry.webp-0f7d45c1cfc32a18650521cc19587d16.s3tc.ctex"
-path.etc2="res://.godot/imported/angry.webp-0f7d45c1cfc32a18650521cc19587d16.etc2.ctex"
+path.s3tc="res://.godot/imported/angry.webp-f649f66bf6a009b3b61480c4e451c61b.s3tc.ctex"
+path.etc2="res://.godot/imported/angry.webp-f649f66bf6a009b3b61480c4e451c61b.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
@@ -12,8 +12,8 @@ metadata={
[deps]
-source_file="res://player/angry.webp"
-dest_files=["res://.godot/imported/angry.webp-0f7d45c1cfc32a18650521cc19587d16.s3tc.ctex", "res://.godot/imported/angry.webp-0f7d45c1cfc32a18650521cc19587d16.etc2.ctex"]
+source_file="res://player/particles/angry/angry.webp"
+dest_files=["res://.godot/imported/angry.webp-f649f66bf6a009b3b61480c4e451c61b.s3tc.ctex", "res://.godot/imported/angry.webp-f649f66bf6a009b3b61480c4e451c61b.etc2.ctex"]
[params]
diff --git a/client/player/effect.gd b/client/player/particles/effect.gd
index 00c95441..00c95441 100644
--- a/client/player/effect.gd
+++ b/client/player/particles/effect.gd
diff --git a/client/player/effect.tscn b/client/player/particles/effect.tscn
index a360d1a8..13423874 100644
--- a/client/player/effect.tscn
+++ b/client/player/particles/effect.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=9 format=3 uid="uid://dn2ne30t81ame"]
-[ext_resource type="Script" path="res://player/effect.gd" id="1_aqsk6"]
-[ext_resource type="PackedScene" uid="uid://yaed1vnhd0aa" path="res://player/stars.tscn" id="2_shb5l"]
+[ext_resource type="Script" path="res://player/particles/effect.gd" id="1_aqsk6"]
+[ext_resource type="PackedScene" uid="uid://yaed1vnhd0aa" path="res://player/particles/satisfied/stars.tscn" id="2_shb5l"]
[ext_resource type="AudioStream" uid="uid://camy77x26mmpv" path="res://menu/sounds/success.ogg" id="3_favyn"]
[ext_resource type="AudioStream" uid="uid://cv4isy6po6pqd" path="res://menu/sounds/failure.ogg" id="4_j38qf"]
[ext_resource type="PackedScene" uid="uid://cvty1rwt52anq" path="res://player/angry.tscn" id="4_uxxex"]
diff --git a/client/player/star.webp b/client/player/particles/satisfied/star.webp
index c1d2e8ff..c1d2e8ff 100644
--- a/client/player/star.webp
+++ b/client/player/particles/satisfied/star.webp
Binary files differ
diff --git a/client/player/star.webp.import b/client/player/particles/satisfied/star.webp.import
index ff84dd75..11d15c58 100644
--- a/client/player/star.webp.import
+++ b/client/player/particles/satisfied/star.webp.import
@@ -3,8 +3,8 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b10goh4dsa3b0"
-path.s3tc="res://.godot/imported/star.webp-4786407830caaa0c9666a30a1d4a05f7.s3tc.ctex"
-path.etc2="res://.godot/imported/star.webp-4786407830caaa0c9666a30a1d4a05f7.etc2.ctex"
+path.s3tc="res://.godot/imported/star.webp-4edd9a951e46ba686b105839f622c981.s3tc.ctex"
+path.etc2="res://.godot/imported/star.webp-4edd9a951e46ba686b105839f622c981.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
@@ -12,8 +12,8 @@ metadata={
[deps]
-source_file="res://player/star.webp"
-dest_files=["res://.godot/imported/star.webp-4786407830caaa0c9666a30a1d4a05f7.s3tc.ctex", "res://.godot/imported/star.webp-4786407830caaa0c9666a30a1d4a05f7.etc2.ctex"]
+source_file="res://player/particles/satisfied/star.webp"
+dest_files=["res://.godot/imported/star.webp-4edd9a951e46ba686b105839f622c981.s3tc.ctex", "res://.godot/imported/star.webp-4edd9a951e46ba686b105839f622c981.etc2.ctex"]
[params]
diff --git a/client/player/stars.tscn b/client/player/particles/satisfied/stars.tscn
index 5c96c291..2bfaaec0 100644
--- a/client/player/stars.tscn
+++ b/client/player/particles/satisfied/stars.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=6 format=3 uid="uid://yaed1vnhd0aa"]
-[ext_resource type="Texture2D" uid="uid://b10goh4dsa3b0" path="res://player/star.webp" id="1_v8q3r"]
+[ext_resource type="Texture2D" uid="uid://b10goh4dsa3b0" path="res://player/particles/satisfied/star.webp" id="1_v8q3r"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_d8uy0"]
transparency = 1
diff --git a/client/player/player.gd b/client/player/player.gd
index 1ca7a37f..7a002d23 100644
--- a/client/player/player.gd
+++ b/client/player/player.gd
@@ -28,7 +28,6 @@ var position_ = Vector2(0, 0)
var position_anim = Vector2(0, 0)
var boosting := false
var walking := false
-var interacting := false
var username: String
var movement_base: Node3D = Node3D.new()
@@ -36,8 +35,8 @@ var movement_base: Node3D = Node3D.new()
var character: Character = preload("res://player/character/character.tscn").instantiate()
var chat_bubble: ChatBubble = preload("res://player/chat_bubble.tscn").instantiate()
var item_bubble: ItemBubble = preload("res://player/item_bubble.tscn").instantiate()
-var effect: Effect = preload("res://player/effect.tscn").instantiate()
-var marker: Marker = preload("res://player/marker.tscn").instantiate()
+var effect: Effect = preload("res://player/particles/effect.tscn").instantiate()
+var marker: Marker = preload("res://player/marker/marker.tscn").instantiate()
var marker_target = Vector3(0, 0, 0)
var clear_timer: Timer = Timer.new()
diff --git a/locale/de.ini b/locale/de.ini
index 081bf794..2cccb160 100644
--- a/locale/de.ini
+++ b/locale/de.ini
@@ -1,4 +1,20 @@
[hurrycurry]
+i.abstract={_b}Hurry Curry!{_b_end} ist ein mehrspieler Spiel rund ums Kochen. Dein Ziel ist es, ein Restaurant zu führen und durch das Servieren von selbstgekochten Speisen Punkte zu sammeln. Das Spiel ist vollständig freie Software, lizensiert als AGPL 3.0 only.
+i.gameplay_overview=Spielübersicht
+i.how_to_play=Wie wird gespielt?
+i.how_to_play.par=Um zu spielen, lade dir das Spiel für dein System herunter oder verwende {_a_browser_version}die etwas rucklige Browserversion{_a_end}. Stelle dir dein Team an Köchen in der Lobby zusammen und starte ein Spiel.
+i.how_to_play.book=Die Rezepte sind im {_a_book}Rezeptebuch{_a_end} nachlesbar (welches auch in manchen Küchen im Spiel verfügbar ist).
+i.how_to_play.keyboard_controls=Tastatursteuerung: Bewege deinen Spieler mit WASD. Bewege die Kamera mit den Pfeiltasten. Interagiere mit der Leertaste oder J. Bewegungsschub mit der linken Umschalttaste oder K. Öffne bzw. Schließe Menüs mit Escape. Drücke die Eingabetaste um den Chat zu öffnen. Setze die Kameraeinstellung mit R zurück.
+i.installation=Installation
+i.installation.par=Das Quellcoderepositorium ist auf {_a_codeberg}Codeberg{_a_end} verfügbar. Fertige Pakete können aus einer der folgenden Quellen heruntergeladen werden:
+i.public_servers=Öffentliche Server
+i.credits=Anerkennungen
+i.credits.primary=Das spiel wird primär von {_developers} entwickelt.
+i.credits.contributers=Andere Beiträger beinhalten Sofviic, BigBrotherNii und RustyStriker.
+i.contribute=Hilf mit
+i.contribute.par=Du kannst dabei mithelfen diese Spiel noch besser zu machen, in dem du Code auf {_a_codeberg}Codeberg{_a_end} beiträgst.
+i.contribute.translate=Du kannst auch auf {_a_weblate}Codeberg’s Weblate{_a_end} das Spiel in deine eigene Sprache übersetzen.
+i.have_fun=Viel spaß!
c.credits.developed_by=entwickelt von
c.credits.models=Modelle
c.credits.sounds=Soundeffekte
@@ -309,11 +325,13 @@ s.error.no_info = Keine Informationen verfügbar.
s.error.quoting_invalid = Befehlszeichensetzung ungültig
s.error.tutorial_already_running = Das Tuturial läuft bereits
s.error.tutorial_no_running = Es läuft kein Tutorial
-b.bun.steps = Verarbeiten Sie zunächst das Mehl mit einem Mixer. Machen Sie sich wegen der Verpackung keine Gedanken; sie wird in unauffällige Stücke zerkleinert. Nehmen Sie den Teig sobald dieser eine angemessene Konsistenz hat aus dem Mixer und backen Sie den Teig im Ofen. Warte beim herausnehmen des Brotlaibs, bis dieser abgekühlt ist, und schneide ihn dann auf einem Brett in Scheiben.
+b.bun.steps = Verarbeiten Sie zunächst das Mehl mit einem Küchenmachine. Machen Sie sich wegen der Verpackung keine Gedanken; sie wird in unauffällige Stücke zerkleinert. Nehmen Sie den Teig sobald dieser eine angemessene Konsistenz hat aus dem Küchenmachine und backen Sie den Teig im Ofen. Warte beim herausnehmen des Brotlaibs, bis dieser abgekühlt ist, und schneide ihn dann auf einem Brett in Scheiben.
b.burger.variation = Der Burger kann in verschiedenen Variationen zubereitet werden, z. B. mit oder ohne Käse oder als Veggie-Burger.
-b.curry.steps = Die Kokosnuss wird für ihre Milch püriert. Die Tomate und der Lauch wird in der Milch gekocht. Das Curry wird dann mit seperat gekochtem Reis serviert.
+b.curry.steps = Extrahiere zuerst die Milch aus der Kokosnuss. Das geht am effizientesten, indem du die ganze Kokosnuss in der Küchenmaschine schredderst. Die Holzstückchen in dem Gemisch kannst du ignorieren. Sie sind irrelevant! Sobald die Nuss zu einem homogenen Gemisch zerkleinert wurde, kannst du eine ganze Tomate und eine ganze Stange Lauch in einen Topf geben. Schneiden musst du beides nicht, denn sie werden sowieso zu Brei, während sie in der Kokosmilch köcheln. Du solltest keine Zeit verschwenden um auf die Sauce zu warten. Stattdessen kannst du sie am besten dafür nutzen, die Hauptzutat des Gerichts zu kochen: Den Reis. Gebe ihn einen Topf. Du brauchst hierbei kein Wasser, es handelt sich um eine besondere, selbstbefeuchtende Reissorte! Sobald dieser fertig gekocht ist, kannst du beide Teile zusammenfügen und genießen!
b.icecream.steps = Die Kokosnuss und die Erdbeere wird püriert in der Küchenmaschine und dann unter kontinuierlichem Umrühren in der gleichen Küchenmaschine gefroren.
b.strawberry_shake.steps = Die Erdbeere und die Kokosnuss werden püriert und dann in ein Glas umgefüllt.
b.burger.steps = Schneide zuerst das Steak auf der Schneideunterlage bis es die Form eines runden Burgerpatties annimmt. Lege das Patty anschließend in die Pfanne und brate es auf mittlerer Hitze für zwei Minuten. In der Zwischenzeit kannst du das Gemüße kleinschneiden, wobei jedes Stück in eine einzige Scheibe geschnitten werden sollte. Schneide danach das Brötchen in zwei Hälften. Abschließend, sobald das Patty fertig gebraten ist, staple das aufgeschnittene Brötchen, das Gemüße und das Patty auf eine Teller und serviere das fertige Gericht. Et Voilà.
b.tomato_soup.steps = Nimm zuerst eine frische Tomate und püriere sie in einem speziell hellblauen Edelstahlmixer bis sie einer feinen Paste ähnelt. Fülle besagte Paste in einen großen Topf deine Wahl und füge einen ganzen Lauch hinzu. Koche diese Mischung bis die Konsistenz homogen ist und die Farbe apettitlich aussieht. Serviere die Suppe auf einem Teller und genieße sie!
b.mochi.steps = Mahle die dir zuerst dein eigenes Reismehl aus ganzen Reiskörnern in der Küchenmaschine. Erhitze dies danach vorsichtig in einem Topf und forme den sich ergebenden Teig um eine Erdbeere.
+b.dishes = Hauptspeisen
+b.curry.desc = Diese appettitliche und exotische Gericht wärmt dich an kalten Tagen und verleiht die neue Stärke.
diff --git a/locale/el.ini b/locale/el.ini
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/locale/el.ini
@@ -0,0 +1 @@
+
diff --git a/locale/en.ini b/locale/en.ini
index 0dbb6120..630fcd6a 100644
--- a/locale/en.ini
+++ b/locale/en.ini
@@ -1,4 +1,22 @@
[hurrycurry]
+i.abstract={_b}Hurry Curry!{_b_end} is a multiplayer game about cooking. Your goal is to run a restaurant and gain points by serving meals you’ve cooked. The game is completely free software, licenced AGPL 3.0 only.
+i.gameplay_overview=Gameplay Overview
+i.gameplay_overview.par=During the game, customers will enter your restaurant and order different meals. The players task is to assemble these meals by cutting, cooking, baking and combining resources in the kitchen. Multitasking is crucial but can lead to food burning or customers leaving if the player takes to long. There are many different restaurant/kitchen layouts.
+i.how_to_play=How to play
+i.how_to_play.par=To play, download the game for your platform or use {_a_browser_version}the rather laggy browser version{_a_end}. Assemble your team of chefs in the lobby before starting the game.
+i.how_to_play.book=The recipes can be found in the Recipe {_a_book}Book{_a_end} (also available ingame in some maps).
+i.how_to_play.keyboard_controls=Keyboard Controls: Move character with WASD. Move camera with arrow keys. Interact with Space or J. Boost with Left Shift or K. Open/close menus with Escape. Press Enter to open chat. Reset view with R.
+i.how_to_play.controller_controls=Controller Controls: Move character with Left Stick. Move camera with Right Stick. Interact with A, Boost with B, Open/close menus with Menu button. Use keyboard for chat. Reset view with Y.
+i.installation=Installation
+i.installation.par=The source code repository is available on {_a_codeberg}Codeberg{_a_end}. Prebuilt packages can be downloaded from one of the following sources:
+i.public_servers=Public Servers
+i.credits=Credits
+i.credits.primary=The game is primarily developed by {_developers}.
+i.credits.contributers=Other contributers include Sofviic, BigBrotherNii and RustyStriker.
+i.contribute=Contribute
+i.contribute.par=You can help make the game better by contributing code through pull requests on {_a_codeberg}Codeberg{_a_end}
+i.contribute.translate=You can also translate the game to your language on {_a_weblate}Codeberg’s Weblate{_a_end}.
+i.have_fun=Have fun!
b.about.image_attrib=Background image attribution
b.about.name=The Hurry Curry! recipe book.
b.about=About this book
@@ -96,6 +114,7 @@ c.menu.play.allow_query_registry=To show a public server list a registry service
c.menu.play.connect=Connect
c.menu.play.fetching_list=Fetching server list...
c.menu.play.list_item={0} ({1} players)
+c.menu.play.no_servers=No servers available.
c.menu.play.quick_connect=Quick Connect
c.menu.play.server_binary_not_found=Server binary was not found. Please install the server separately.
c.menu.play.server_failed_tooltip=The server crashed or exited in some way or another.%nYou should try starting the server from the command-line.
diff --git a/locale/fr.ini b/locale/fr.ini
index 02959be8..722d8f64 100644
--- a/locale/fr.ini
+++ b/locale/fr.ini
@@ -1,46 +1,49 @@
[hurrycurry]
-c.settings.input.boost=
-c.settings.input.rotate_down=
-c.settings.input.rotate_left=
-c.settings.input.reset=Utilisez {0} pour réinitialiser la caméra
-c.settings.input.rotate_right=
-c.settings.input.rotate_up=
-c.settings.input.chat=
-c.settings.input.fullscreen=Plein écran
-c.settings.input.interact=Entrez le chemin
-c.settings.input.backwards=
-c.settings.input.forwards=
-c.settings.input.left=
-c.settings.input.right=
-c.settings.input.zoom_in=
-c.settings.input.zoom_in_discrete=
-c.settings.input.zoom_out=
-c.settings.input.zoom_out_discrete=
+b.about = À propos de ce live
+b.about.image_attrib = Attribution de l'image d'arrière-plan
+b.about.name = Le livre de cuisine de Hurry Curry!.
+b.bun = Petit pain
+b.bun.desc = Le repas le plus nourrissant de tous. À déguster de préférence avec une soupe à la tomate.
+b.burger = Burger
+b.curry = Curry au riz
+b.dishes = Plats
+b.drinks = Boissons
+b.icecream = Glace à la fraise
+b.ingred.bun = un petit pain
+b.ingred.cheese = un morceau de fromage
+c.chat.write_message = Écrire un message
c.credits.developed_by=développé par
+c.credits.models=Modèles
+c.credits.sounds=Sons
c.credits.thanks=Merci d’avoir joué
c.credits.title=Hurry Curry! - un jeu sur la cuisine
-c.error=Erreur
c.error.cannot_cancel_no_game=Impossible d’annuler la partiecar aucune partie n’est en cours.
+c.error.empty_username = Le nom d’utilisateur ne peut pas être vide.
c.error.must_join_to_cancel=Vous devez rejoindre une partie pour pouvoir l’annuler.
c.error.placeholder=///.
-c.error.websocket=WebSocket clos par le code: {0}, raison {1}. Nettoyer: {2}
-c.hint=Indice
+c.error.select_hairstyle = Tu doit choisir une coiffure.
+c.error.server = Erreur du serveur : {0}
+c.error.websocket=WebSocket a fermé avec le code : {0}, raison {1}. Propre : {2}
+c.error=Erreur
c.hint.boost=Appuyez sur {0} pour le boost
c.hint.framerate_low=Votre fréquence d’images semble mauvaise. Vous pouvez réduire vos paramètres graphiques dans le menu des paramètres.
+c.hint.interact=Appuyez sur {0} pour attraper des objets et maintenez {1} enfoncé pour interagir avec les outils
c.hint.movement=Utilisez {0} pour avancer
c.hint.reset_camera=Appuyez sur {0} pour réinitialiser la caméra
c.hint.zoom_camera=Utilisez {0} pour zoomer/dézoomer
+c.hint=Indice
c.lobby.botenable=Activer des robots
c.lobby.mapname=Nom de la carte
c.lobby.players=Joueurs
c.lobby.start=Comencer serveur
-c.map.difficulty=Difficulté
c.map.difficulty.0=Facile
c.map.difficulty.1=Difficile
c.map.difficulty.2=Normale
c.map.difficulty.3=L’horreur
c.map.difficulty.4=Très difficile
+c.map.difficulty=Difficulté
c.map.players_recommended={0} joueurs recommandés
+c.menu.accept=Accepter
c.menu.back=Retour
c.menu.credits=Crédits
c.menu.ingame.cancel=Annuler la partie
@@ -53,10 +56,10 @@ c.menu.ingame.reconnect=Se reconnecter
c.menu.ingame.resume=Reprendre
c.menu.ingame.spectate=Mode spectateur
c.menu.my_chef=Mon Chef
-c.menu.play=Jouer
c.menu.play.connect=Connexion
c.menu.play.quick_connect=Connexion rapide
c.menu.play.server=Serveur
+c.menu.play=Jouer
c.menu.quit=Quitter
c.menu.settings=Paramètres
c.score.acceptable=Service acceptable
@@ -64,68 +67,90 @@ c.score.completed=Complété
c.score.excellent=Excellent service
c.score.failed=Échoué
c.score.good=Bon service
-c.score.points=Points
c.score.points_par=Vous avez collecté {0} points
+c.score.points=Points
c.score.poor=Mauvais service
c.settings.apply=Sauver & Appliquer
-c.settings.audio=
c.settings.audio.master_volume=Volume principal
c.settings.audio.music_volume=Volume de la musique
c.settings.audio.sfx_volume=Volume des effets sonores
-c.settings.input=
-c.settings.input.add=
-c.settings.input.joypad=
-c.settings.input.joypad_axis=
-c.settings.input.keyboard=
-c.settings.input.mouse_button=Bouton de menu
-c.settings.input.other_event=
-c.settings.input.press_any_key=
+c.settings.audio=
+c.settings.gameplay.hints_started=Tutoriel commencé
+c.settings.gameplay.interpolate_camera_rotation=Interpoler la rotation de la caméra
+c.settings.gameplay.invert_camera=Inverser le mouvement de caméra
+c.settings.gameplay.latch_boost=Toujours prolonger le boost jusqu’à la durée maximale
+c.settings.gameplay.setup_completed=Configuration initiale terminée. (Décochez et recommencer pour entrer à nouveau)
+c.settings.gameplay.usernames=Montrer les noms d’utilisateur
+c.settings.gameplay=
+c.settings.graphics.aa=Anti crénelage
+c.settings.graphics.ao=Occlusion ambiante
c.settings.graphics.debug_info=Montrer les informations de débogage (Fréquence d’images, etc.)
-c.settings.graphics.fullscreen=Plein écran
c.settings.graphics.fullscreen.always=Toujours
c.settings.graphics.fullscreen.keep=Garder
c.settings.graphics.fullscreen.never=Jamais
-c.settings.gameplay=
-c.settings.gameplay.latch_boost=Toujours prolonger le boost jusqu’à la durée maximale
-c.settings.graphics.gi=Luminosité générale
+c.settings.graphics.fullscreen=Plein écran
c.settings.graphics.gi.sdfgi=SDFGI
c.settings.graphics.gi.voxelgi=IG Voxel
+c.settings.graphics.gi=Luminosité générale
c.settings.graphics.glow=Activer la lueur
-c.settings.graphics=Graphismes
-c.settings.graphics.aa=Anti crénelage
-c.settings.graphics.ao=Occlusion ambiante
-c.settings.graphics.taa=Anti crénelage temporel
c.settings.graphics.grass_amount=Quantité d’herbe 3D par tuile d’herbe
-c.settings.ui.language=Langue
-c.settings.ui.language.system=Défaut du système
c.settings.graphics.lq_trees=Arbres de quelques polygones
-c.settings.other=
c.settings.graphics.preset.high=Élevé
c.settings.graphics.preset.low=Faible
c.settings.graphics.preset.medium=Moyen
-c.settings.other.server_data=Répertoire de données du serveur (laisser vide pour la détection automatique)
-c.settings.other.server_binary=Binaire du serveur (laisser vide pour rechercher le chemin)
-c.settings.other.server_binary.placeholder=Entrez le chemin
c.settings.graphics.shadows=Activer les ombres
-c.settings.gameplay.interpolate_camera_rotation=Interpoler la rotation de la caméra
-c.settings.ui=Nom d’utilisateur
+c.settings.graphics.taa=Anti crénelage temporel
+c.settings.graphics.ui_blur=Activer le flou dans l’interface utilisateus
+c.settings.graphics=Graphismes
+c.settings.input.add=
+c.settings.input.backwards=
+c.settings.input.boost=
+c.settings.input.chat=
+c.settings.input.forwards=
+c.settings.input.fullscreen=Plein écran
+c.settings.input.interact=Entrez le chemin
+c.settings.input.joypad_axis=
+c.settings.input.joypad=
+c.settings.input.keyboard=
+c.settings.input.left=
+c.settings.input.mouse_button=Bouton de menu
+c.settings.input.other_event=
+c.settings.input.press_any_key=
+c.settings.input.reset=Utilisez {0} pour réinitialiser la caméra
+c.settings.input.right=
+c.settings.input.rotate_down=
+c.settings.input.rotate_left=
+c.settings.input.rotate_right=
+c.settings.input.rotate_up=
+c.settings.input.zoom_in_discrete=
+c.settings.input.zoom_in=
+c.settings.input.zoom_out_discrete=
+c.settings.input.zoom_out=
+c.settings.input=
+c.settings.other.server_binary.placeholder=Entrez le chemin
+c.settings.other.server_binary=Binaire du serveur (laisser vide pour rechercher le chemin)
+c.settings.other.server_data=Répertoire de données du serveur (laisser vide pour la détection automatique)
+c.settings.other=
+c.settings.ui.language.system=Défaut du système
+c.settings.ui.language=Langue
c.settings.ui.scale_factor=Taille de l’interface utilisateur
-c.settings.ui.scale_mode=Mode d’échelle de l’interface utilisateur
c.settings.ui.scale_mode.resize=Redimensionner
+c.settings.ui.scale_mode=Mode d’échelle de l’interface utilisateur
c.settings.ui.touch_controls=Activer les commandes de l’écran tactile
-c.settings.graphics.ui_blur=Activer le flou dans l’interface utilisateus
+c.settings.ui=Nom d’utilisateur
c.settings.username=Nom d’utilisateur
-c.setup.contract_title=CONTRAT DE TRAVAIL
-c.setup.contract_desc=Ce contrat légal est rédigé entre vous (l’employé) et Musterfoods Ltd. (l’employeur) pour travailler comme chef ou serveur.
-c.setup.name=1. [b]Nom de l’employé[/b]
-c.setup.position=2. [b]Fiche de poste[/b]
-c.setup.position.value=Chef / Serveur
-c.setup.uniform=3. [b]Uniforme de travail.[/b] Vous devrez toujours porter l’une des coiffures suivantes.
-c.setup.compensation=6. [b]Compensation.[/b] Vous recevrez une compensation mensuelle pour votre travail.
c.setup.compensation.salary.prefix=Le salaire est de
-c.setup.compensation.salary=0,00 €
c.setup.compensation.salary.suffix=par mois
+c.setup.compensation.salary=0,00 €
+c.setup.compensation=6. [b]Compensation.[/b] Vous recevrez une compensation mensuelle pour votre travail.
+c.setup.contract_desc=Ce contrat légal est rédigé entre vous (l’employé) et Musterfoods Ltd. (l’employeur) pour travailler comme chef ou serveur.
+c.setup.contract_title=CONTRAT DE TRAVAIL
c.setup.frank_signature=F.Miller
+c.setup.name=1. [b]Nom de l’employé[/b] Entre votre nom, s'il vous plaît. Les autres chefs peuvent voir ton nom sur votre étiquette.
+c.setup.position.value=Chef / Serveur
+c.setup.position=2. [b]Fiche de poste[/b]
+c.setup.uniform.value=Coiffure {0}
+c.setup.uniform=3. [b]Uniforme de travail.[/b] Vous devrez toujours porter l’une des coiffures suivantes.
c.setup.user_signature=Cliquez pour signer
s.bot.simple=Chef simple
s.bot.waiter=Barman
@@ -138,26 +163,35 @@ unknown464=-
unknown476=MAJUSCULE
unknown484=stick gauche
unknown488=BARRE D’ESPACE
-c.settings.gameplay.invert_camera=Inverser le mouvement de caméra
-c.hint.interact=Appuyez sur {0} pour attraper des objets et maintenez {1} enfoncé pour interagir avec les outils
unknown506=Page précédente/Page suivante
unknown510=Utilisez {0} pour orienter le point de vue de la caméra
unknown514=Touches fléchées
unknown518=stick droit
unknown524=Les noms d’utilisateurs peuvent être activées/désactivées dans les paramètres
-c.settings.gameplay.usernames=Montrer les noms d’utilisateur
unknown530=Appuyez sur {0} et cliquez sur "Rejoindre" pour rejoindre le partie lorsqu’elle est en route
unknown534=ÉCHAP
unknown538=Bouton de menu
unknown551=Serveur (Indisponible)
-c.setup.uniform.value=Coiffure {0}
-c.credits.models=Modèles
-c.credits.sounds=Sons
-c.settings.gameplay.setup_completed=Configuration initiale terminée. (Décochez et recommencer pour entrer à nouveau)
unknown622=Vous devez remplir tous les champs requis.
-c.menu.accept=Accepter
-c.settings.gameplay.hints_started=Tutoriel commencé
unknown732=
unknown736=
unknown740=Regarder
unknown752=
+b.about.image_attrib = Attribution de l'image d'arrière-plan
+b.ingred.cheese = un morceau de fromage
+c.chat.write_message = Écrire un message
+c.error.server = Erreur du serveur : {0}
+c.error.empty_username = Le nom d’utilisateur ne peut pas être vide.
+b.dishes = Plats
+b.ingred.bun = un petit pain
+c.error.select_hairstyle = Tu doit choisir une coiffure.
+b.about.name = Le livre de cuisine de Hurry Curry!.
+b.about = À propos de ce live
+b.bun = Petit pain
+b.burger = Burger
+b.curry = Curry au riz
+b.drinks = Boissons
+b.icecream = Glace à la fraise
+b.bun.desc = Le repas le plus nourrissant de tous. À déguster de préférence avec une soupe à la tomate.
+c.error.version_mismatch = Les versions du serveur et du client ne correspondent pas. Serveur : {0}.{1}, Client : {2}.{3}%nEst-tu sûr que le jeu est à jour ?
+c.error.websocket.unavailable = indisponible
diff --git a/locale/ko.ini b/locale/ko.ini
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/locale/ko.ini
@@ -0,0 +1 @@
+
diff --git a/locale/nl.ini b/locale/nl.ini
index e975f473..d3431dbe 100644
--- a/locale/nl.ini
+++ b/locale/nl.ini
@@ -266,3 +266,32 @@ c.settings.gameplay.vibration = Trillingen inschakelen
c.menu.deny = Weigeren
c.play.allow_query_registry = Wil je in het register zoeken naar openbare servers?
c.error.select_hairstyle = Kies een haarstijl.
+b.about.image_attrib = Maker van achtergrondafbeelding
+b.about.name = Het Hurry Curry!-receptenboek.
+b.about = Over dit boek
+b.bun.desc = De meest verzadigende maaltijd van allemaal. Serveer met tomatensoep.
+b.curry.desc = Dit smakelijke, exotische gerecht geeft je een warm gevoel op een koude dag, en voorziet je van nieuwe energie.
+b.burger.variation = De burger kan op meerdere manieren worden gemaakt, bijvoorbeeld zonder kaas of vegetarisch.
+b.burger = Burger
+b.curry.steps = Extraheer de melk uit de kokosnoot door deze in een keukenmachine fijn te hakken. Let niet op de stukjes hout in het mengsel. Als de noot volledig verwerkt is, kun je de melk in een pan gieten, tezamen met een tomaat en prei. Je hoeft ze niet van tevoren te snijden, want ze worden vanzelf lekker zompig in de kokosmelk. Kook vervolgens de rijst zonder water (deze speciale rijst produceert zelf water). Combineer de rijst en de saus en geniet van de maaltijd!
+b.bun.steps = Stop de bloem in een keukenmachine. De zak is niet relevant, want die wordt in kleine, onzichtbare stukjes gehakt. Als het deeg de juiste consistentie heeft bereik, kun je het uit de machine halen en in de oven stoppen totdat het mooi bruin is. Wacht daarna tot het is afgekoeld en snijd het op een snijplank in plakjes.
+b.bun = Broodje
+b.burger.desc = Een rijke maaltijd met gezonde groenten, brood en een perfecte steak.
+b.burger.steps = Leg de steak op een snijplank en snijd met een mes in een ronde vorm. Leg de burger in een pan en laat twee minuten op middelhoge temperatuur bakken. Snijd ondertussen alle groenten in kleine plakjes en het broodje in tweeën. Leg vervolgens de burger op de ene helft van het broodje en de groenten daar weer bovenop, en ten slotte de andere helft van het broodje. Et voilà.
+b.curry = Curry met rijst
+b.drinks = Dranken
+b.icecream.steps = Stop kokosnoot en aardbei in een keukenmachine en blijf doorroeren.
+b.icecream = Aardbeienijs
+b.mochi.steps = Maak je eigen rijstbloem door rijst te verwerken in een keukenmachine. Kook de rijstbloem vervolgens stoomgaar in een pan.
+b.dishes = Gerechten
+b.ingred.bun = een broodje
+b.ingred.cheese = een stuk kaas
+b.ingred.coconut = een kokosnoot
+b.ingred.fish = een vis
+b.ingred.flour = een zak bloem
+b.ingred.leek = een prei
+b.ingred.lettuce = een krop sla
+b.ingred.rice = een zak rijst
+b.ingred.steak = een rauwe steak
+b.ingred.strawberry = een aardbei
+b.ingred.tomato = een tomaat
diff --git a/locale/zh_Hans.ini b/locale/zh_Hans.ini
index 4e0940bc..6b68b3c7 100644
--- a/locale/zh_Hans.ini
+++ b/locale/zh_Hans.ini
@@ -281,7 +281,7 @@ b.drinks = 饮料
b.bun.steps = 首先用食品加工机加工面粉。不要介意袋子,它会被撕成不可见的碎片。面团达到可操作的稠度后,就将其从食品加工机中取出并放入烤箱中烘烤。取出面包后,等待其冷却,然后在砧板上切片。
b.burger.variation = 汉堡有多种做法,如不加奶酪或作为素食汉堡。
b.burger = 汉堡
-b.curry.steps = 将椰子磨成泥,取椰奶,番茄和韭菜放入椰奶中煮熟,咖喱与单独煮好的米饭一起上桌。
+b.curry.steps = 首先,从椰子中榨出椰奶。最有效的方法是用食品加工机将整个椰子切碎。不要在意混合物中的木屑,它们不重要!椰子完全搅匀后,您可以将一整个番茄和一整根韭菜放入锅中,无需切碎,因为它们在椰奶中煮沸时会变成糊状。不要浪费时间等待酱汁,而是最好将其用于烹饪菜肴的主要成分:米饭。将其放入锅中。这里不需要加水,这是一种特殊的自我保湿大米品种!完成后,只需将两部分混合即可享用!
b.curry = 咖喱饭
b.about.name = Hurry Curry!食谱书。
b.about.image_attrib = 背景图片署名
@@ -318,3 +318,5 @@ s.error.tutorial_already_running = 教程已在运行
b.ingred.cheese = 一块奶酪
b.ingred.steak = 一块生牛排
b.ingred.strawberry = 一颗草莓
+b.curry.desc = 这道开胃且充满异国情调的菜肴会在寒冷的日子里为您带来温暖,并赋予您新的力量。
+b.dishes = 菜肴
diff --git a/readme.md b/readme.md
index 8b304883..a340dcf1 100644
--- a/readme.md
+++ b/readme.md
@@ -91,6 +91,10 @@ make test-client
`python -m http.server 8080 -d test-client`
- Open the page with your browser.
+## Contributing
+
+For discussion regarding development, feel free to join our matrix room: [#hurrycurry:metamuffin.org](https://matrix.to/#/#hurrycurry:metamuffin.org).
+
## License
AGPL-3.0-only; See [COPYING](./COPYING).
diff --git a/server/bot/src/algos/dishwasher.rs b/server/bot/src/algos/dishwasher.rs
index bfe57d0c..b52b72d1 100644
--- a/server/bot/src/algos/dishwasher.rs
+++ b/server/bot/src/algos/dishwasher.rs
@@ -99,10 +99,9 @@ impl Context<'_, DishWasher> {
self.assert_tile_is_clear(pos)?;
}
if self.is_hand_item(self.state.dirty_plate.unwrap()) {
- self.interact_with(
- self.find_empty_interactable_tile_by_name("sink").unwrap(),
- 2.0,
- )?;
+ if let Some(sink) = self.find_empty_interactable_tile_by_name("sink") {
+ self.interact_with(sink, 2.0)?;
+ }
}
self.assert_hand_is_clear()?;
Ok(())