diff options
57 files changed, 1296 insertions, 1370 deletions
diff --git a/client/global.gd b/client/global.gd index d62f5413..0923b457 100644 --- a/client/global.gd +++ b/client/global.gd @@ -19,7 +19,6 @@ class_name G extends Node -signal settings_changed() signal using_joypad_change(using: bool) signal using_touch_change(using: bool) @@ -39,90 +38,16 @@ var default_profile := { "has_seen_join_while_running": false } } -var languages := language_array() + var using_joypad := false var using_touch := false -@onready var default_settings := [ - SettingsCategory.new(tr("Gameplay"), "gameplay", { - "touch_controls": DropdownSetting.new(tr("Enable touch screen controls"), 0, [tr("Automatic"), tr("Enabled"), tr("Disabled")]), - "interpolate_camera_rotation": ToggleSetting.new(tr("Smooth camera rotation"), false), - "invert_camera": ToggleSetting.new(tr("Invert camera movement"), false), - "usernames": ToggleSetting.new(tr("Show username tags"), true), - "setup_complete": ToggleSetting.new(tr("Initial setup complete. (Uncheck and restart to reenter)"), false), - "tutorial_started": ToggleSetting.new(tr("Tutorial started"), false), - "latch_boost": ToggleSetting.new(tr("Always extend boost to maximum duration"), true), - }), - SettingsCategory.new(tr("Graphics"), "graphics", { - "fullscreen": DropdownSetting.new(tr("Fullscreen"), 0, [tr("Keep"), tr("Always"), tr("Never")]), - "aa": DropdownSetting.new(tr("Anti-aliasing"), 2 if on_high_end() else 0, [tr("Disabled"), "FXAA", "MSAA 2x", "MSAA 4x"]), - "ssao": ToggleSetting.new(tr("Ambient occlusion"), true if on_high_end() else false), - "taa": ToggleSetting.new(tr("Temporal Anti-Aliasing"), false), - "gi": DropdownSetting.new(tr("Global illumination"), 0, [tr("Disabled"), tr("SDFGI"), tr("Voxel GI")]), - "shadows": ToggleSetting.new(tr("Enable shadows"), true if on_high_end() else false), - "glow": ToggleSetting.new(tr("Enable glow"), true if on_high_end() else false), - "grass_amount": RangeSetting.new(tr("3D grass amount per grass tile"), 16 if on_high_end() else 0, 0, 32, false), - "lq_trees": ToggleSetting.new(tr("Low-poly trees"), false if on_high_end() else true), - "ui_blur": ToggleSetting.new(tr("Enable UI blur"), true) - }, [ - Preset.new(tr("Graphics"), { - tr("Low"): { - "ui_blur": true, - "aa": 0, - "ssao": false, - "taa": false, - "shadows": false, - "glow": false, - "grass_amount": 0, - "lq_trees": true - }, - tr("Medium"): { - "ui_blur": true, - "aa": 1, - "ssao": false, - "taa": false, - "shadows": true, - "glow": false, - "grass_amount": 0, - "lq_trees": false - }, - tr("High"): { - "ui_blur": true, - "aa": 2, - "ssao": true, - "taa": false, - "shadows": true, - "glow": true, - "grass_amount": 16, - "lq_trees": false - } - }) - ]), - SettingsCategory.new(tr("Audio"), "audio", { - "master_volume": RangeSetting.new(tr("Master Volume"), 0, -30, 0), - "music_volume": RangeSetting.new(tr("Music Volume"), 0, -30, 0), - "sfx_volume": RangeSetting.new(tr("SFX Volume"), 0, -30, 0), - }), - SettingsCategory.new(tr("User interface"), "ui", { - "language": DropdownSetting.new(tr("Language"), 0, languages.map(func(e): return e[1])), - "ui_scale_mode": DropdownSetting.new(tr("UI scale mode"), 0, [tr("Resize"), tr("Disabled")]), - "ui_scale_factor": RangeSetting.new(tr("UI scale factor"), 1. if not on_mobile() else 1.5, 0.5, 1.5, 3), - }), - SettingsCategory.new(tr("Controls"), "input", - InputManager.input_map_to_settings_dictionary(InputManager.default_input_map) - ), - SettingsCategory.new(tr("Other"), "other", { - "server_binary": TextSetting.new(tr("Server binary (leave empty to search PATH)"), "", tr("Enter path")), - "server_data": TextSetting.new(tr("Server data directory (leave empty to auto-detect)"), "", tr("Enter path")), - "debug_info": ToggleSetting.new(tr("Display debug info (Framerate, etc.)"), false), - }) - ] - -# Profile and settings are stored in a Dictionary[String, GameSetting] -# Unlike the default settings, the settings dictionary is not split into categories. +# profile and settings are stored in a Dictionary[String, Any] var profile: Dictionary var settings: Dictionary +var settings_tree: GameSetting + var server_url = "" var error_message = "" @@ -131,28 +56,20 @@ var focused_node: Control func _ready(): profile = load_dict("user://profile", default_profile) load_settings("user://settings") - apply_settings() get_viewport().gui_focus_changed.connect(Sound.play_hover_maybe) get_viewport().gui_focus_changed.connect(func(node): focused_node = node) func _input(event): if Input.is_action_just_pressed("fullscreen"): - match Global.get_setting("fullscreen"): - 0: - # Keep setting + match Global.get_setting("graphics.fullscreen"): + "keep": if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) else: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) - 1: - # Always - set_setting("fullscreen", 2) # Set to never - update_fullscreen() - 2: - # Never - set_setting("fullscreen", 1) # Set to always - update_fullscreen() + "always": set_setting("graphics.fullscreen", "never") + "never": set_setting("graphics.fullscreen", "always") # Update using_joypad variable if event is InputEventMouseButton or event is InputEventKey: @@ -165,7 +82,7 @@ func _input(event): using_joypad_change.emit(using_joypad) # Update using_touch variable - if get_setting("touch_controls") == 0: # Only if set to automatic + if get_setting("ui.touch_controls") == "automatic": # Only if set to automatic if event is InputEventScreenTouch or event is InputEventScreenDrag: if not using_touch: using_touch = true @@ -175,89 +92,11 @@ func _input(event): using_touch = false using_touch_change.emit(using_touch) -func apply_settings(): - update_fullscreen() - update_language() - - # Anti-aliasing - match get_setting("aa"): - 0: - get_viewport().msaa_2d = Viewport.MSAA_DISABLED - get_viewport().msaa_3d = Viewport.MSAA_DISABLED - get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED - 1: - get_viewport().msaa_2d = Viewport.MSAA_DISABLED - get_viewport().msaa_3d = Viewport.MSAA_DISABLED - get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_FXAA - 2: - get_viewport().msaa_2d = Viewport.MSAA_2X - get_viewport().msaa_3d = Viewport.MSAA_2X - get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED - 3: - get_viewport().msaa_2d = Viewport.MSAA_4X - get_viewport().msaa_3d = Viewport.MSAA_4X - get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED - - # Temporal Anti-aliasing - get_viewport().use_taa = get_setting("taa") - - # UI scale mode - match get_setting("ui_scale_mode"): - 0: - get_tree().root.content_scale_mode = Window.CONTENT_SCALE_MODE_CANVAS_ITEMS - 1: - get_tree().root.content_scale_mode = Window.CONTENT_SCALE_MODE_DISABLED - - # UI scale factor - get_tree().root.content_scale_factor = get_setting("ui_scale_factor") - - # Hints - if not get_setting("tutorial_started"): - for k in profile["hints"].keys(): - set_hint(k, false) - - # Sets all volumes - Sound.set_volume(0, get_setting("master_volume")) - Sound.set_volume(1, get_setting("music_volume")) - Sound.set_volume(2, get_setting("sfx_volume")) - - # Touch controls - match get_setting("touch_controls"): - # 0: Automatically adjusted - 1: # Enabled - using_touch = true - 2: # Disabled - using_touch = false - using_touch_change.emit() - - # Input settings - InputManager.apply_input_map(InputManager.settings_dictionary_to_input_map(get_category_settings("input"))) - - settings_changed.emit() - -func update_language(): - var language = languages[get_setting("language")][0] - if language == "system": language = OS.get_locale_language() - TranslationServer.set_locale(language) - -func update_fullscreen(): - match get_setting("fullscreen"): - 0: pass - 1: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) - 2: if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN: - DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) - func save_profile(): save_dict("user://profile", profile) func save_settings(): - for v in settings.values(): - v.fetch_setting() - var dict := {} - for k in settings.keys(): - var setting: GameSetting = settings[k] - dict[k] = setting.get_value() - save_dict("user://settings", dict) + save_dict("user://settings", settings) func save_dict(path: String, dict: Dictionary): var f = FileAccess.open(path, FileAccess.WRITE) @@ -271,29 +110,19 @@ func load_dict(path: String, default: Dictionary) -> Dictionary: return default var f = FileAccess.open(path, FileAccess.READ) var saved_dict = f.get_var(true) - - if saved_dict != null and saved_dict is Dictionary: - add_missing_keys(saved_dict, default) - return saved_dict func load_settings(path: String): - for category: SettingsCategory in default_settings.duplicate(true): - for k: String in category.settings.keys(): - settings[k] = category.settings[k] - - if not FileAccess.file_exists(path): - print("Skip settings load") - return - var f = FileAccess.open(path, FileAccess.READ) - var saved_dict = f.get_var(true) - - if saved_dict != null and saved_dict is Dictionary: - for k in settings.keys(): - if saved_dict.has(k) and typeof(settings[k].get_value()) == typeof(saved_dict[k]): - settings[k].set_value(saved_dict[k]) - - save_settings() # Save updated keys + if FileAccess.file_exists(path): + var f = FileAccess.open(path, FileAccess.READ) + settings = f.get_var(true) + else: + print("No settings file found.") + settings = {} + settings_tree = Settings.get_root() + settings_tree.check() + Settings.apply_initial() + save_settings() func on_mobile() -> bool: var os_name := OS.get_name() @@ -307,35 +136,24 @@ func on_high_end() -> bool: func on_vulkan() -> bool: return ProjectSettings.get_setting("rendering/rendering_device/driver") == "vulkan" -func add_missing_keys(dict: Dictionary, reference: Dictionary): - for k in reference.keys(): - if !dict.has(k): - dict[k] = reference[k] - else: - if dict[k] is Dictionary: - add_missing_keys(dict[k], reference[k]) - func get_setting(key: String): - if settings.has(key): - return settings[key].get_value() - else: + if !settings.has(key): push_error("Tried to access setting \"%s\", which does not exist (missing key)" % key) return null + return settings[key] -func get_category_settings(category_id: String): - for c: SettingsCategory in default_settings: - if c.id == category_id: - return c.settings - push_error("Category %s not found" % category_id) - return null +func set_setting_unchecked(key: String, value): + value = value.duplicate(true) if value is Array else value + if key in settings and typeof(settings[key]) == typeof(value) and not value is Array and settings[key] == value: return + settings[key] = value + Settings.trigger_hook(key, value) + save_settings() func set_setting(key: String, value): if !settings.has(key): push_error("Tried to set setting \"%s\", which does not yet exist (missing key)" % key) return - if get_setting(key) != value: - settings[key].set_value(value) - save_settings() + else: set_setting_unchecked(key, value) func get_profile(key: String): if profile.has(key): @@ -391,43 +209,8 @@ func find_menu(node: Node) -> Menu: if node is Menu: return node else: return find_menu(node.get_parent()) -const NATIVE_LANGUAGE_NAMES = { - "en": "English", - "de": "Deutsch", - "fr": "Français", - "es": "Español", - "eu": "euskara", - "ja": "日本語", - "he": "עִברִית", - "tr": "Türkçe", - "fi": "suomen", - "ar": "العربية", - "zh_Hans": "中文 (简化字)", - "zh_Hant": "中文 (繁體字)", - "pl": "Polski", - "pt": "Português", -} - -func language_display(l: String): return "%s (%s)" % [NATIVE_LANGUAGE_NAMES[l], l] -func language_array() -> Array: - var lang: Array = [["system", tr("System default")]] - var to_order : Array = [] - for l in TranslationServer.get_loaded_locales(): - to_order.append([l, language_display(l)]) - to_order.append(["en", language_display("en")]) - to_order = sort_language_array(to_order) - for i in to_order: - lang.append(i) - return lang - -func sort_language_array(lang : Array) -> Array: - var sorting_array : Array = [] - var sorted_lang : Array = [] - for i in lang.size(): - sorting_array.append(lang[i][0]) - sorting_array.sort() - for shorthand in sorting_array: - for arr in lang: - if arr[0] == shorthand: - sorted_lang.append(arr) - return sorted_lang +func language_list(): + var a = TranslationServer.get_loaded_locales() + a.sort() + a.insert(0, "system") + return a diff --git a/client/makefile b/client/makefile index 2f17bee1..085ed748 100644 --- a/client/makefile +++ b/client/makefile @@ -37,4 +37,4 @@ po/locales.csv: $(LT) po/%.po: ../locale/%.ini $(LT) @mkdir -p po - $(LT) export-po $< $@ --remap-ids ../locale/en.ini + $(LT) export-po $< $@ --fallback ../locale/en.ini diff --git a/client/map/auto_setup/environment_setup.gd b/client/map/auto_setup/environment_setup.gd index 3ce8add3..c484ca1d 100644 --- a/client/map/auto_setup/environment_setup.gd +++ b/client/map/auto_setup/environment_setup.gd @@ -22,12 +22,9 @@ func set_sky(sky_name: String): environment.sky.sky_material = load("res://map/environment/presets/%s_sky.tres" % sky_name) func _ready(): - apply_settings() - Global.settings_changed.connect(apply_settings) - -func apply_settings(): - environment.ssao_enabled = Global.get_setting("ssao") - environment.sdfgi_enabled = Global.get_setting("gi") == 1 and allow_sdfgi - environment.glow_enabled = Global.get_setting("glow") + Settings.hook_changed_init("graphics.ssao", false, func (x): environment.ssao_enabled = x) + Settings.hook_changed_init("graphics.gi", false, func (x): environment.sdfgi_enabled = x == "sdfgi" and allow_sdfgi) + Settings.hook_changed_init("graphics.glow", false, func (x): environment.glow_enabled = x) + if !Global.on_vulkan(): environment.environment.tonemap_exposure = 0.5 diff --git a/client/map/auto_setup/light_setup.gd b/client/map/auto_setup/light_setup.gd index 1e256dae..7d1b0b7a 100644 --- a/client/map/auto_setup/light_setup.gd +++ b/client/map/auto_setup/light_setup.gd @@ -19,13 +19,12 @@ class_name LightSetup @export var completely_disable_light_if_shadows_disabled := false func _ready(): - apply_settings() - Global.settings_changed.connect(apply_settings) + Settings.hook_changed_init("graphics.shadows", false, apply_settings) -func apply_settings(): +func apply_settings(setting: bool): if completely_disable_light_if_shadows_disabled: - visible = Global.get_setting("shadows") - shadow_enabled = Global.get_setting("shadows") + visible = setting + shadow_enabled = setting func set_sky(sky_name: String): match sky_name: diff --git a/client/map/map.gd b/client/map/map.gd index 208665bf..ce3c6dfa 100644 --- a/client/map/map.gd +++ b/client/map/map.gd @@ -52,17 +52,18 @@ func clear_tile(pos: Vector2i): func _ready(): voxelgi_timer.connect("timeout", gi_bake) - Global.settings_changed.connect(func(): - # is not baked yet but setting is true - if Global.get_setting("gi") == 2 and not currently_baked: - gi_bake() - else: - currently_baked = false - voxelgi.data = null - ) + Settings.hook_changed("graphics.gi", false, apply_gi_setting) + +func apply_gi_setting(state): + if state == "voxelgi" and not currently_baked: + gi_bake() + else: + currently_baked = false + voxelgi.data = null + func gi_bake(): - if not Global.get_setting("gi") == 2: return + if Global.get_setting("graphics.gi") != "voxelgi": return print("Map: Rebaking VoxelGI") currently_baked = true gi_bake_blocking() diff --git a/client/map/tiles/exterior_tree.gd b/client/map/tiles/exterior_tree.gd index edc08df3..9054cbaa 100644 --- a/client/map/tiles/exterior_tree.gd +++ b/client/map/tiles/exterior_tree.gd @@ -27,7 +27,7 @@ func _init(rename: String, _neighbors: Array): var trunk: Mesh = load("res://map/tiles/tree/trunk_%d.res" % tree) var leaves: Mesh = load("res://map/tiles/tree/leaves_%d_%s.res" % [ tree, - "lq" if Global.get_setting("lq_trees") else "hq" + "lq" if Global.get_setting("graphics.lq_trees") else "hq" ]) var trunk_instance: MeshInstance3D = MeshInstance3D.new() trunk_instance.mesh = trunk diff --git a/client/map/tiles/grass.gd b/client/map/tiles/grass.gd index b33642a3..4bd3587c 100644 --- a/client/map/tiles/grass.gd +++ b/client/map/tiles/grass.gd @@ -25,7 +25,7 @@ func _init(rename: String, _neighbors: Array): var random = RandomNumberGenerator.new() random.seed = rename.hash() - for _i in Global.get_setting("grass_amount"): + for _i in Global.get_setting("graphics.grass_amount"): var g: Node3D = GRASS_SIDE.instantiate() base_mesh.add_child(g) g.position = Vector3(random.randf_range(-.5, .5), 0, random.randf_range(-.5, .5)) diff --git a/client/map/tiles/light_tile.gd b/client/map/tiles/light_tile.gd index fac3ee39..346cc3bb 100644 --- a/client/map/tiles/light_tile.gd +++ b/client/map/tiles/light_tile.gd @@ -18,12 +18,5 @@ extends Node3D @export var lights: Array[Light3D] func _ready(): - Global.settings_changed.connect(func(): - for l in lights: - update_shadows() - ) - update_shadows() - -func update_shadows(): - for l in lights: - l.shadow_enabled = Global.get_setting("shadows") + # TODO hook settings + for l in lights: l.shadow_enabled = Global.get_setting("graphics.shadows") diff --git a/client/menu/blur_setup.gd b/client/menu/blur_setup.gd index 97729074..331d1f47 100644 --- a/client/menu/blur_setup.gd +++ b/client/menu/blur_setup.gd @@ -16,8 +16,8 @@ extends Control func _ready(): - update() - Global.settings_changed.connect(update) + update(Global.get_setting("graphics.ui_blur")) + Settings.hook_changed("graphics.ui_blur", false, update) -func update(): - material.set_shader_parameter("enable_blur", Global.get_setting("ui_blur")) +func update(state): + material.set_shader_parameter("enable_blur", state) diff --git a/client/menu/character.tscn b/client/menu/character.tscn index ef0cd842..6652982c 100644 --- a/client/menu/character.tscn +++ b/client/menu/character.tscn @@ -82,7 +82,7 @@ grow_horizontal = 2 [node name="Label" type="Label" parent="VBoxContainer/top_panel/a"] layout_mode = 2 -text = "Username" +text = "c.settings.username" horizontal_alignment = 1 [node name="username" type="LineEdit" parent="VBoxContainer/top_panel/a"] @@ -144,7 +144,7 @@ offset_bottom = 22.0 grow_horizontal = 2 grow_vertical = 2 size_flags_vertical = 8 -text = "Back" +text = "c.menu.back" [node name="SceneTransition" parent="." instance=ExtResource("4_c0ocf")] visible = false diff --git a/client/menu/credits.gd b/client/menu/credits.gd index 0eccaae2..52a3b7e6 100644 --- a/client/menu/credits.gd +++ b/client/menu/credits.gd @@ -22,13 +22,13 @@ const cc_by_4 := "CC-BY 4.0" const cc_by_3 := "CC-BY 3.0" const cc0 := "CC0" var credits := [ - [tr("Models"), [ + [tr("c.credits.models"), [ ["kenney.nl", "Various Models", cc0], ["Kay Lousberg", "Kitchen tiles", cc0], ["Poly by Google", "Strawberry", cc_by_3], ["Poly by Google", "Fish", cc_by_3] ]], - [tr("Sounds"), [ + [tr("c.credits.sounds"), [ ["Dryoma", "Footstep sounds", cc_by_4], ["Koops", "Page_Turn_24.wav", cc_by_4], ["InspectorJ", "Pencil, Writing, Close, A.wav", cc_by_4], @@ -49,8 +49,8 @@ func _ready(): var text = "[center]" text += "\n\n\n[b]%s[/b]\n\n%s\n\n[b]%s[/b]\n\n\n" % [ - tr("Hurry Curry! - a game about cooking"), - tr("developed by"), + tr("c.credits.title"), + tr("c.credits.developed_by"), "\n".join(contributors) ] @@ -62,7 +62,7 @@ func _ready(): text += "[cell][left]%s[/left][/cell]" % entry[2] text += "[/table]\n\n\n" - text += "\n[b]%s[/b]\n\n\n[/center]" % tr("Thank You For Playing") + text += "\n[b]%s[/b]\n\n\n[/center]" % tr("c.credits.thanks") label.text = text diff --git a/client/menu/entry.gd b/client/menu/entry.gd index 5ca6dacb..456709ed 100644 --- a/client/menu/entry.gd +++ b/client/menu/entry.gd @@ -18,7 +18,7 @@ extends Menu func _ready(): super() - if not Global.get_setting("setup_complete"): + if not Global.get_setting("gameplay.setup_complete"): await submenu("res://menu/setup.tscn") else: await submenu("res://menu/main.tscn") diff --git a/client/menu/game.gd b/client/menu/game.gd index f50a43a6..a2eb858c 100644 --- a/client/menu/game.gd +++ b/client/menu/game.gd @@ -43,7 +43,7 @@ func _menu_cover(state): game.camera.update_disable_input() func _process(_delta): - if Global.get_setting("debug_info"): + if Global.get_setting("graphics.debug_info"): debug_label.show() debug_label.text = "%d FPS\nDriver: %s" % [Engine.get_frames_per_second(), ProjectSettings.get_setting("rendering/rendering_device/driver")] else: debug_label.hide() diff --git a/client/menu/ingame.tscn b/client/menu/ingame.tscn index ce42bbdd..55678847 100644 --- a/client/menu/ingame.tscn +++ b/client/menu/ingame.tscn @@ -94,22 +94,22 @@ layout_mode = 2 [node name="Resume" type="Button" parent="Side/Margin/Options"] layout_mode = 2 -text = "Resume" +text = "c.menu.ingame.resume" alignment = 0 [node name="Leave" type="Button" parent="Side/Margin/Options"] layout_mode = 2 -text = "Join Game" +text = "c.menu.ingame.join" alignment = 0 [node name="Lobby" type="Button" parent="Side/Margin/Options"] layout_mode = 2 -text = "Cancel game" +text = "c.menu.ingame.cancel" alignment = 0 [node name="Reconnect" type="Button" parent="Side/Margin/Options"] layout_mode = 2 -text = "Reconnect" +text = "c.menu.ingame.reconnect" alignment = 0 [node name="Spacer2" type="Control" parent="Side/Margin/Options"] @@ -118,7 +118,7 @@ layout_mode = 2 [node name="Settings" type="Button" parent="Side/Margin/Options"] layout_mode = 2 -text = "Settings" +text = "c.menu.settings" alignment = 0 [node name="Spacer3" type="Control" parent="Side/Margin/Options"] @@ -127,12 +127,12 @@ layout_mode = 2 [node name="MainMenu" type="Button" parent="Side/Margin/Options"] layout_mode = 2 -text = "Main menu" +text = "c.menu.ingame.main_menu" alignment = 0 [node name="Quit" type="Button" parent="Side/Margin/Options"] layout_mode = 2 -text = "Quit game" +text = "c.menu.quit" alignment = 0 [connection signal="pressed" from="Side/Margin/Options/Resume" to="." method="_on_resume_pressed"] diff --git a/client/menu/lobby.tscn b/client/menu/lobby.tscn index 05b6507c..d1fe2233 100644 --- a/client/menu/lobby.tscn +++ b/client/menu/lobby.tscn @@ -124,7 +124,7 @@ layout_mode = 2 [node name="EnableBots" type="CheckButton" parent="HBoxContainer/Bottom/MarginContainer/VBoxContainer/Bots"] layout_mode = 2 -text = "Enable bots" +text = "c.menu.lobby.enable_bots" [node name="ScrollContainerCustom" type="ScrollContainer" parent="HBoxContainer/Bottom/MarginContainer/VBoxContainer/Bots"] visible = false @@ -145,7 +145,7 @@ alignment = 1 [node name="JoinSpectate" parent="HBoxContainer/Bottom/MarginContainer/VBoxContainer/VBoxContainer" instance=ExtResource("7_t6mox")] custom_minimum_size = Vector2(148, 0) layout_mode = 2 -text = "Spectate" +text = "c.menu.ingame.spectate" expand_icon = true controller_texture = ExtResource("11_5uugf") press_action = "join_spectate" @@ -153,7 +153,7 @@ press_action = "join_spectate" [node name="Start" parent="HBoxContainer/Bottom/MarginContainer/VBoxContainer/VBoxContainer" instance=ExtResource("7_t6mox")] custom_minimum_size = Vector2(148, 0) layout_mode = 2 -text = "Start game" +text = "c.menu.lobby.start_game" expand_icon = true controller_texture = ExtResource("9_q14bw") press_action = "start_game" diff --git a/client/menu/main.tscn b/client/menu/main.tscn index 94726109..26decd2b 100644 --- a/client/menu/main.tscn +++ b/client/menu/main.tscn @@ -63,27 +63,27 @@ layout_mode = 2 [node name="play" type="Button" parent="side/margin/options/first"] layout_mode = 2 -text = "Play" +text = "c.menu.play" alignment = 0 [node name="change_character" type="Button" parent="side/margin/options/first"] layout_mode = 2 -text = "My Chef" +text = "c.menu.my_chef" alignment = 0 [node name="settings" type="Button" parent="side/margin/options/first"] layout_mode = 2 -text = "Settings" +text = "c.menu.settings" alignment = 0 [node name="credits" type="Button" parent="side/margin/options/first"] layout_mode = 2 -text = "Credits" +text = "c.menu.credits" alignment = 0 [node name="quit" type="Button" parent="side/margin/options/first"] layout_mode = 2 -text = "Quit" +text = "c.menu.quit" alignment = 0 [connection signal="pressed" from="side/margin/options/first/play" to="." method="_on_play_pressed"] diff --git a/client/menu/overlay.tscn b/client/menu/overlay.tscn index e28013db..0947e308 100644 --- a/client/menu/overlay.tscn +++ b/client/menu/overlay.tscn @@ -67,16 +67,16 @@ layout_mode = 2 theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 25 -text = "Completed" +text = "c.score.completed" [node name="Spacer" type="Control" parent="Score/Paper/Margin/Lines/Line1"] layout_mode = 2 size_flags_horizontal = 3 [node name="Completed" type="Label" parent="Score/Paper/Margin/Lines/Line1"] +auto_translate_mode = 2 custom_minimum_size = Vector2(100, 0) layout_mode = 2 -auto_translate = false theme_override_colors/font_color = Color(0, 0.278431, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 35 @@ -91,16 +91,16 @@ layout_mode = 2 theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 25 -text = "Failed" +text = "c.score.failed" [node name="Spacer" type="Control" parent="Score/Paper/Margin/Lines/Line2"] layout_mode = 2 size_flags_horizontal = 3 [node name="Failed" type="Label" parent="Score/Paper/Margin/Lines/Line2"] +auto_translate_mode = 2 custom_minimum_size = Vector2(100, 0) layout_mode = 2 -auto_translate = false theme_override_colors/font_color = Color(0.505882, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 35 @@ -115,16 +115,16 @@ layout_mode = 2 theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 35 -text = "Points" +text = "c.score.points" [node name="Spacer" type="Control" parent="Score/Paper/Margin/Lines/Line3"] layout_mode = 2 size_flags_horizontal = 3 [node name="Points" type="Label" parent="Score/Paper/Margin/Lines/Line3"] +auto_translate_mode = 2 custom_minimum_size = Vector2(100, 0) layout_mode = 2 -auto_translate = false theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 45 @@ -156,9 +156,9 @@ texture = ExtResource("3_oum5g") layout_mode = 0 [node name="Seconds" type="Label" parent="Time/Paper/Line"] +auto_translate_mode = 2 custom_minimum_size = Vector2(100, 0) layout_mode = 2 -auto_translate = false theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 45 @@ -166,8 +166,8 @@ text = "300" horizontal_alignment = 2 [node name="Point" type="Label" parent="Time/Paper/Line"] +auto_translate_mode = 2 layout_mode = 2 -auto_translate = false theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 45 @@ -175,8 +175,8 @@ text = "." horizontal_alignment = 1 [node name="Decimals" type="Label" parent="Time/Paper/Line"] +auto_translate_mode = 2 layout_mode = 2 -auto_translate = false theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 45 diff --git a/client/menu/play.tscn b/client/menu/play.tscn index 959ca760..b91f7bda 100644 --- a/client/menu/play.tscn +++ b/client/menu/play.tscn @@ -59,7 +59,7 @@ layout_mode = 2 [node name="quick_connect" type="Button" parent="side/margin/options/second"] layout_mode = 2 -text = "Quick Connect" +text = "c.menu.play.quick_connect" alignment = 0 [node name="connect" type="HBoxContainer" parent="side/margin/options/second"] @@ -73,7 +73,7 @@ placeholder_text = "wss://example.org" [node name="connect" type="Button" parent="side/margin/options/second/connect"] layout_mode = 2 -text = "Connect" +text = "c.menu.play.connect" [node name="server" type="HBoxContainer" parent="side/margin/options/second"] layout_mode = 2 @@ -81,12 +81,12 @@ layout_mode = 2 [node name="control" type="Button" parent="side/margin/options/second/server"] layout_mode = 2 size_flags_horizontal = 3 -text = "Server" +text = "c.menu.play.server" alignment = 0 [node name="connect" type="Button" parent="side/margin/options/second/server"] layout_mode = 2 -text = "Connect" +text = "c.menu.play.connect" [node name="spacer2" type="Control" parent="side/margin/options/second"] custom_minimum_size = Vector2(0, 10) @@ -94,7 +94,7 @@ layout_mode = 2 [node name="back" type="Button" parent="side/margin/options/second"] layout_mode = 2 -text = "Back" +text = "c.menu.back" alignment = 0 [connection signal="pressed" from="side/margin/options/second/quick_connect" to="." method="_on_quick_connect_pressed"] diff --git a/client/menu/popup_message.gd b/client/menu/popup_message.gd index 90e86faa..1464e20c 100644 --- a/client/menu/popup_message.gd +++ b/client/menu/popup_message.gd @@ -109,24 +109,24 @@ func _input(_event): Global.set_hint("has_reset", true) func _on_boost_timeout(): - if not Global.get_hint("has_boosted") and not Global.get_setting("touch_controls"): + if not Global.get_hint("has_boosted") and not Global.get_setting("ui.touch_controls"): display_hint_msg(tr("Press %s to boost") % display_keybind(tr("SHIFT"), "B")) func _on_move_timeout(): - if not Global.get_hint("has_moved") and not Global.get_setting("touch_controls"): + if not Global.get_hint("has_moved") and not Global.get_setting("ui.touch_controls"): display_hint_msg(tr("Use %s to move") % display_keybind("WASD", tr("left stick"))) func _on_interact_timeout(): - if not Global.get_hint("has_interacted") and not Global.get_setting("touch_controls"): + if not Global.get_hint("has_interacted") and not Global.get_setting("ui.touch_controls"): var keybind = display_keybind(tr("SPACE"), "A") display_hint_msg(tr("Press %s to pick up items and hold %s to interact with tools") % [keybind, keybind]) func _on_reset_timeout(): - if not Global.get_hint("has_reset") and not Global.get_setting("touch_controls"): + if not Global.get_hint("has_reset") and not Global.get_setting("ui.touch_controls"): display_hint_msg(tr("Press %s to reset the camera view") % display_keybind("R", "Y")) func _on_zoom_timeout(): - if not Global.get_hint("has_zoomed") and not Global.get_setting("touch_controls"): + if not Global.get_hint("has_zoomed") and not Global.get_setting("ui.touch_controls"): display_hint_msg(tr("Use %s to zoom in/out") % display_keybind(tr("PageUp/PageDown"), "LT/RT")) func display_keybind(keyboard: String, joypad: String, touch = null) -> String: @@ -143,11 +143,11 @@ func any_action_just_pressed(actions: Array) -> bool: return false func _on_rotate_camera_timeout(): - if not Global.get_hint("has_rotated") and not Global.get_setting("touch_controls"): + if not Global.get_hint("has_rotated") and not Global.get_setting("ui.touch_controls"): display_hint_msg(tr("Use %s to rotate the camera view") % display_keybind(tr("arrow keys"), tr("right stick"))) func _on_nametags_timeout(): - if not Global.get_hint("has_seen_nametags") and not Global.get_setting("usernames"): + if not Global.get_hint("has_seen_nametags") and not Global.get_setting("graphics.usernames"): Global.set_hint("has_seen_nametags", true) display_hint_msg(tr("Username tags can be enabled/disabled in the settings")) diff --git a/client/menu/settings.gd b/client/menu/settings.gd index eb143900..f035f712 100644 --- a/client/menu/settings.gd +++ b/client/menu/settings.gd @@ -16,52 +16,17 @@ # extends Menu -const SETTINGS_ROW_SCENE = preload("res://menu/settings/settings_row.tscn") - -@onready var settings_tabs: TabContainer = $OuterGap/Panel/InnerGap/VBoxContainer/TabContainer +@onready var container = $OuterGap/Panel/InnerGap/VBoxContainer func _ready(): super() - update_rows() + var row = Global.settings_tree.create_row() + container.add_child(row) + container.move_child(row, 1) func _on_back_pressed(): exit() func exit(): Global.save_settings() - Global.apply_settings() super() - -func update_rows(fix_focus = false): - for c in settings_tabs.get_children(): - c.queue_free() - - for category: SettingsCategory in Global.default_settings: - var category_settings = category.settings - var scroll := ScrollContainerCustom.new() - var options := VBoxContainer.new() - scroll.name = category.name - scroll.size_flags_horizontal = Control.SIZE_EXPAND_FILL - settings_tabs.add_child(scroll) - options.size_flags_horizontal = Control.SIZE_EXPAND_FILL - scroll.add_child(options) - - var category_presets = category.presets - if category_presets != null: - for i: Preset in category_presets: - var row: SettingsRow = SETTINGS_ROW_SCENE.instantiate() - options.add_child(row) - row.label.text = i.label - row.reset_button.visible = false - for b in i.buttons(): - row.value_parent.add_child(b) - - for k: String in category_settings.keys(): - var row: SettingsRow = Global.settings[k].get_row() - options.add_child(row) - - if fix_focus: - pass - # TODO: Not implemented! - # await get_tree().process_frame - # Global.focus_first(self) diff --git a/client/menu/settings.tscn b/client/menu/settings.tscn index 9f523f7c..0a55e222 100644 --- a/client/menu/settings.tscn +++ b/client/menu/settings.tscn @@ -1,12 +1,10 @@ -[gd_scene load_steps=6 format=3 uid="uid://8ic77jmadadj"] +[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="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"] -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_85urc"] - [node name="SettingsMenu" type="Control"] layout_mode = 3 anchors_preset = 15 @@ -52,11 +50,6 @@ size_flags_horizontal = 0 theme_override_font_sizes/font_size = 36 text = "Settings" -[node name="TabContainer" type="TabContainer" parent="OuterGap/Panel/InnerGap/VBoxContainer"] -layout_mode = 2 -size_flags_vertical = 3 -theme_override_styles/panel = SubResource("StyleBoxEmpty_85urc") - [node name="Back" type="Button" parent="OuterGap/Panel/InnerGap/VBoxContainer"] layout_mode = 2 size_flags_vertical = 8 diff --git a/client/menu/settings/dropdown_setting.gd b/client/menu/settings/dropdown_setting.gd index e57fc40f..3d6b7c80 100644 --- a/client/menu/settings/dropdown_setting.gd +++ b/client/menu/settings/dropdown_setting.gd @@ -18,23 +18,14 @@ extends GameSetting var options: Array -func _init(new_description: String, new_preset: int, new_options: Array): - assert(new_preset < new_options.size()) - super(new_description, new_preset) +func _init(new_id: String, new_default, new_options: Array): + super(new_id, new_default) options = new_options -func _update_row(): - super() +func create_row(): + var row = super() row.value_node = OptionButton.new() - for i in options: - row.value_node.add_item(i) - row.value_node.select(_value) - -func fetch_setting(): - if row != null: - _value = row.value_node.selected - -func set_value(v): - super(v) - if row != null: - row.value_node.selected = _value + for i in options: row.value_node.add_item(tr(nskey + "." + i)) + Settings.hook_changed_init(key, true, func (value): row.value_node.select(options.find(value))) + row.value_node.item_selected.connect(func(item): Global.set_setting(key, options[item])) + return row diff --git a/client/menu/settings/game_setting.gd b/client/menu/settings/game_setting.gd index afe1fe65..a98d5abb 100644 --- a/client/menu/settings/game_setting.gd +++ b/client/menu/settings/game_setting.gd @@ -16,39 +16,27 @@ class_name GameSetting extends Object -var preset -var _value -var description: String +var default +var key: String +var nskey: String -var row: SettingsRow +func _init(new_id: String, new_default = null): + default = new_default + key = new_id -func _init(new_description: String, new_preset): - preset = new_preset - set_value(new_preset) - description = new_description +func set_parent(parent: GameSetting): + if parent != null: key = parent.key + "." + key + nskey = "c.settings." + key -func reset(): - set_value(preset) - -func get_row() -> SettingsRow: - _update_row() +func create_row(): + var row = preload("res://menu/settings/settings_row.tscn").instantiate() + row.description = tr(nskey) + row.reset.connect(func(): Global.set_setting(key, default)) return row -func _update_row(): - if row != null: - row.queue_free() - row = preload("res://menu/settings/settings_row.tscn").instantiate() - row.description = description - row.reset.connect(reset) - -func fetch_setting(): - pass - -func get_value(): - return _value - -func set_value(v): - if v is Array: - _value = v.duplicate(true) - else: - _value = v +func check(): + if default != null: + if not key in Global.settings: + Global.set_setting_unchecked(key, default) + if typeof(default) != typeof(Global.settings[key]): + Global.set_setting_unchecked(key, default) diff --git a/client/menu/settings/input/input_manager.gd b/client/menu/settings/input/input_manager.gd index 96cdca09..d216884b 100644 --- a/client/menu/settings/input/input_manager.gd +++ b/client/menu/settings/input/input_manager.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 tpart +# Copyright 2024 metamuffin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -15,32 +16,6 @@ # extends Node -var action_descriptions = { - "forwards": tr("Move forwards"), - "backwards": tr("Move backwards"), - "left": tr("Move left"), - "right": tr("Move right"), - "rotate_left": tr("Rotate camera to the left"), - "rotate_right": tr("Rotate camera to the right"), - "rotate_up": tr("Rotate camera upwards"), - "rotate_down": tr("Rotate camera downwards"), - "interact": tr("Interact", "Interacting with items, etc."), - "boost": tr("Boost movement"), - "zoom_in": tr("Zoom in"), - "zoom_out": tr("Zoom out"), - "chat": tr("Toggle chat", "Toggle chat on or off"), - "reset": tr("Reset camera view"), - "fullscreen": tr("Toggle fullscreen"), - "previous": tr("Previous"), - "next": tr("Next"), - "start_game": tr("Start game"), - "join_spectate": tr("Join / Spectate"), - "zoom_in_discrete": tr("Zoom in (discrete)"), - "zoom_out_discrete": tr("Zoom out (discrete)"), - "scroll_down": tr("Scroll down"), - "scroll_up": tr("Scroll up"), -} - var default_input_map = {} var input_map @@ -56,19 +31,12 @@ func get_input_map() -> Dictionary: kb[a] = input_events return kb -func input_map_to_settings_dictionary(map: Dictionary) -> Dictionary: - var settings_dict := {} +func input_map_to_settings(map: Dictionary) -> Array: + var entries := [] for k in map.keys(): var events = map[k] - settings_dict[k] = InputSetting.new(action_descriptions[k] if action_descriptions.has(k) else k, events) - return settings_dict - -func settings_dictionary_to_input_map(settings: Dictionary) -> Dictionary: - var map := {} - for k in settings.keys(): - var setting: InputSetting = settings[k] - map[k] = setting.get_value() - return map + entries.append(InputSetting.new(k, events)) + return entries func change_input_map_action(action_name: String, events: Array, save: bool = true): if !InputMap.has_action(action_name): diff --git a/client/menu/settings/input/input_setting.gd b/client/menu/settings/input/input_setting.gd index eec68bdc..7388af78 100644 --- a/client/menu/settings/input/input_setting.gd +++ b/client/menu/settings/input/input_setting.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 tpart +# Copyright 2024 metamuffin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -18,17 +19,9 @@ extends GameSetting const INPUT_VALUE_NODE_SCENE = preload("res://menu/settings/input/input_value_node.tscn") -func _update_row(): - super() +func create_row(): + var row = super() row.value_node = INPUT_VALUE_NODE_SCENE.instantiate() - row.value_node.value = _value - -func fetch_setting(): - if row != null: - _value = row.value_node.value - -func set_value(v): - super(v) - if row != null: - row.value_node.value = _value - row.value_node.update() + Settings.hook_changed_init(key, true, func(value): row.value_node.value = value) + row.value_node.changed.connect(func(): Global.set_setting(key, row.value_node.value)) + return row diff --git a/client/menu/settings/input/input_value_node.gd b/client/menu/settings/input/input_value_node.gd index 125a946b..9f89416b 100644 --- a/client/menu/settings/input/input_value_node.gd +++ b/client/menu/settings/input/input_value_node.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 tpart +# Copyright 2024 metamuffin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -19,6 +20,8 @@ class_name InputValueNode var value: Array[InputEvent] = [] var listening := false +signal changed() + @onready var actions_container: VBoxContainer = $ActionsContainer @onready var add_button: Button = $Add @onready var add_text = add_button.text @@ -55,6 +58,7 @@ func update(fix_focus: bool = false): func erase_event(e: InputEvent): value.erase(e) update(true) + changed.emit() func _input(e: InputEvent): if listening: @@ -66,6 +70,7 @@ func _input(e: InputEvent): value.append(e) _on_add_pressed() update() + changed.emit() func events_equal(e1: InputEvent, e2: InputEvent) -> bool: if e1 is InputEventKey and e2 is InputEventKey: diff --git a/client/menu/settings/preset.gd b/client/menu/settings/preset_row.gd index bb13b570..af6cfe0e 100644 --- a/client/menu/settings/preset.gd +++ b/client/menu/settings/preset_row.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 nokoe +# Copyright 2024 metamuffin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -13,27 +14,32 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # -class_name Preset -extends Object +class_name PresetRow +extends GameSetting -var label: String var options: Dictionary +var arr: Array[Button] -func _init(name_: String, options_: Dictionary): - label = name_ +func _init(id: String, options_: Dictionary): + super(id) options = options_ +var prefix = "" +func set_parent(parent): + super(parent) + if parent != null: prefix = parent.key + func apply(preset_name: String): - var preset: Dictionary = options[preset_name] + var preset = options[preset_name] for i in preset.keys(): - var setting_name: String = i - Global.set_setting(setting_name, preset[setting_name]) + Global.set_setting(prefix + "." + i, preset[i]) -func buttons() -> Array[Button]: - var arr: Array[Button] = [] +func create_row(): + var row = super() + row.value_node = HBoxContainer.new() for i in options.keys(): var button := Button.new() button.pressed.connect(apply.bind(i)) - button.text = i - arr.push_back(button) - return arr + button.text = tr(nskey + "." + i) + row.value_node.add_child(button) + return row diff --git a/client/menu/settings/range_setting.gd b/client/menu/settings/range_setting.gd index d13e2262..b119a205 100644 --- a/client/menu/settings/range_setting.gd +++ b/client/menu/settings/range_setting.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 nokoe +# Copyright 2024 metamuffin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -21,27 +22,20 @@ var max_value: float var tick_count var smooth: bool -func _init(new_description: String, new_preset: float, new_min_value: float, new_max_value: float, new_smooth: bool = true, new_tick_count = null): - super(new_description, new_preset) +func _init(new_id: String, new_default: float, new_min_value: float, new_max_value: float, new_smooth: bool = true, new_tick_count = null): + super(new_id, new_default) min_value = new_min_value max_value = new_max_value tick_count = new_tick_count smooth = new_smooth -func _update_row(): - super() +func create_row(): + var row = super() row.value_node = HSlider.new() row.value_node.min_value = min_value row.value_node.max_value = max_value row.value_node.tick_count = abs(max_value - min_value) if tick_count == null else tick_count row.value_node.step = 0 if smooth else (1 if tick_count == null else abs(max_value - min_value) / (tick_count - 1)) - row.value_node.value = _value - -func fetch_setting(): - if row != null: - _value = row.value_node.value - -func set_value(v): - super(v) - if row != null: - row.value_node.value = _value + Settings.hook_changed_init(key, true, func(value): row.value_node.value = value) + row.value_node.value_changed.connect(func(value): Global.set_setting(key, value)) + return row diff --git a/client/menu/settings/settings_category.gd b/client/menu/settings/settings_category.gd index c4601429..b5d02d8f 100644 --- a/client/menu/settings/settings_category.gd +++ b/client/menu/settings/settings_category.gd @@ -14,15 +14,32 @@ # along with this program. If not, see <https://www.gnu.org/licenses/>. # class_name SettingsCategory -extends Object +extends GameSetting -var name: String -var id: String -var settings: Dictionary # Dictionary[String, GameSetting] -var presets # Array[Preset] | null +var settings: Array # Dictionary[String, GameSetting] -func _init(new_name: String, new_id: String, new_settings: Dictionary, new_presets = null): - name = new_name - id = new_id +var options: VBoxContainer + +func _init(new_id: String, new_settings: Array): + super(new_id) settings = new_settings - presets = new_presets + +func set_parent(parent: GameSetting): + super(parent) + for c in settings: + c.set_parent(self) + +func create_row(): + var row = ScrollContainerCustom.new() + var options = VBoxContainer.new() + row.name = tr(nskey) + row.size_flags_horizontal = Control.SIZE_EXPAND_FILL + options.size_flags_horizontal = Control.SIZE_EXPAND_FILL + row.add_child(options) + + for r in settings: options.add_child(r.create_row()) + return row + +func check(): + for c in settings: + c.check() diff --git a/client/menu/settings/settings_root.gd b/client/menu/settings/settings_root.gd new file mode 100644 index 00000000..1beb0d9b --- /dev/null +++ b/client/menu/settings/settings_root.gd @@ -0,0 +1,34 @@ +# Hurry Curry! - a game about cooking +# Copyright 2024 metamuffin +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, version 3 of the License only. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. +# +extends GameSetting +class_name SettingsRoot + +var children: Array +func _init(new_children: Array): + super("root") + children = new_children + for c in children: + c.set_parent(null) + +func create_row(): + var row = TabContainer.new() + row.size_flags_vertical = Control.SIZE_EXPAND_FILL + for r in children: row.add_child(r.create_row()) + return row + +func check(): + for c in children: + c.check() diff --git a/client/menu/settings/settings_row.gd b/client/menu/settings/settings_row.gd index f5621d78..68340918 100644 --- a/client/menu/settings/settings_row.gd +++ b/client/menu/settings/settings_row.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 nokoe +# Copyright 2024 metamuffin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by diff --git a/client/menu/settings/text_setting.gd b/client/menu/settings/text_setting.gd index faafa610..dc9352ab 100644 --- a/client/menu/settings/text_setting.gd +++ b/client/menu/settings/text_setting.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 nokoe +# Copyright 2024 metamuffin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -18,21 +19,14 @@ extends GameSetting var placeholder: String -func _init(new_description: String, new_preset: String, new_placeholder: String = ""): - super(new_description, new_preset) +func _init(new_id: String, new_default: String, new_placeholder: String = ""): + super(new_id, new_default) placeholder = new_placeholder -func _update_row(): - super() +func create_row(): + var row = super() row.value_node = LineEdit.new() - row.value_node.text = _value row.value_node.placeholder_text = placeholder - -func fetch_setting(): - if row != null: - _value = row.value_node.text - -func set_value(v): - super(v) - if row != null: - row.value_node.text = _value + row.value_node.text_changed.connect(func(text): Global.set_setting(key, text)) + Settings.hook_changed_init(key, true, func(text): row.value_node.text = text) + return row diff --git a/client/menu/settings/toggle_setting.gd b/client/menu/settings/toggle_setting.gd index 6d4150d4..8e0c030c 100644 --- a/client/menu/settings/toggle_setting.gd +++ b/client/menu/settings/toggle_setting.gd @@ -1,5 +1,6 @@ # Hurry Curry! - a game about cooking # Copyright 2024 nokoe +# Copyright 2024 metamuffin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -16,19 +17,12 @@ class_name ToggleSetting extends GameSetting -func _init(new_description: String, new_preset: bool): - super(new_description, new_preset) +func _init(new_id: String, new_default: bool): + super(new_id, new_default) -func fetch_setting(): - if row != null: - _value = row.value_node.button_pressed - -func _update_row(): - super() +func create_row(): + var row = super() row.value_node = CheckButton.new() - row.value_node.button_pressed = _value - -func set_value(v): - super(v) - if row != null: - row.value_node.button_pressed = _value + row.value_node.pressed.connect(func(): Global.set_setting(key, row.value_node.button_pressed)) + Settings.hook_changed_init(key, true, func(value): row.value_node.button_pressed = value) + return row diff --git a/client/menu/setup.gd b/client/menu/setup.gd index 6c3c90cd..16944c7c 100644 --- a/client/menu/setup.gd +++ b/client/menu/setup.gd @@ -73,5 +73,5 @@ func _on_sign_pressed(): Global.set_profile("username", username.text) Global.set_profile("character", character) - Global.set_setting("setup_complete", true) + Global.set_setting("gameplay.setup_complete", true) replace_menu("res://menu/main.tscn") diff --git a/client/menu/setup.tscn b/client/menu/setup.tscn index 9d8e4975..53c4565e 100644 --- a/client/menu/setup.tscn +++ b/client/menu/setup.tscn @@ -209,8 +209,8 @@ layout_mode = 2 [node name="LineEdit" type="LineEdit" parent="ScrollContainer/Control/TextureRect/PaperMargin/Contents/PositionEntry"] custom_minimum_size = Vector2(300, 30) layout_mode = 2 -theme_override_colors/font_color = Color(0.458824, 0, 0, 1) theme_override_colors/font_uneditable_color = Color(0.458824, 0, 0, 1) +theme_override_colors/font_color = Color(0.458824, 0, 0, 1) editable = false [node name="LineEdit2" type="Label" parent="ScrollContainer/Control/TextureRect/PaperMargin/Contents/PositionEntry/LineEdit"] diff --git a/client/menu/warning_popup.gd b/client/menu/warning_popup.gd index 20741834..fd23a30a 100644 --- a/client/menu/warning_popup.gd +++ b/client/menu/warning_popup.gd @@ -2,7 +2,6 @@ extends Menu class_name WarningPopup func _ready(): - print(self.data) $CenterContainer/Panel/MarginContainer/VBoxContainer/Message.text = self.data func _on_accept_pressed(): diff --git a/client/multiplayer.gd b/client/multiplayer.gd index d8c6c1ff..168e62e6 100644 --- a/client/multiplayer.gd +++ b/client/multiplayer.gd @@ -85,10 +85,8 @@ func _process(_delta): handle_packet(socket.get_packet()) elif state == WebSocketPeer.STATE_CLOSED: var code = socket.get_close_code() - var reason = socket.get_close_reason() if code == socket.STATE_CLOSED else tr("unavailable", "The reason for the websocket closing is unavailable") - connection_closed.emit( - tr("WebSocket closed with code: %d, reason %s. Clean: %s") % [code, reason, code != -1] - ) + var reason = socket.get_close_reason() if code == socket.STATE_CLOSED else tr("c.error.websocket.unavailable") + connection_closed.emit(tr("c.error.websocket") % [code, reason, code != -1]) self.queue_free() func handle_packet(bytes: PackedByteArray): @@ -108,7 +106,7 @@ func handle_packet(bytes: PackedByteArray): if major != VERSION_MAJOR and minor >= VERSION_MINOR: socket.close() connected = false - connection_closed.emit(tr("Server and client versions do not match. Server: %d.%d, Client: %d.%d.\nAre you sure the game is up to date?") % [major, minor, VERSION_MAJOR, VERSION_MINOR]) + connection_closed.emit(tr("c.error.version_mismatch") % [major, minor, VERSION_MAJOR, VERSION_MINOR]) "data": var item_names = decoded["data"]["item_names"] var tile_names = decoded["data"]["tile_names"] diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd index 81315630..142d5f47 100644 --- a/client/player/controllable_player.gd +++ b/client/player/controllable_player.gd @@ -60,7 +60,7 @@ func _process(delta): func _process_movement(delta): var input = Input.get_vector("left", "right", "forwards", "backwards") if is_input_enabled() else Vector2.ZERO - var boost = Input.is_action_pressed("boost") or (Global.get_setting("latch_boost") and boosting) + var boost = Input.is_action_pressed("boost") or (Global.get_setting("gameplay.latch_boost") and boosting) input = input.rotated( - game.camera.angle_target) if Input.is_action_pressed("interact") or Input.is_action_just_released("interact"): input *= 0 diff --git a/client/player/follow_camera.gd b/client/player/follow_camera.gd index 516b1ba1..88b6cad4 100644 --- a/client/player/follow_camera.gd +++ b/client/player/follow_camera.gd @@ -71,12 +71,12 @@ func reset(): func follow(delta): if not _disable_input: angle_target += Input.get_axis("rotate_left", "rotate_right") * ( - ROTATE_SPEED * delta * (-1 if Global.get_setting("invert_camera") else 1) + ROTATE_SPEED * delta * (-1 if Global.get_setting("gameplay.invert_camera") else 1) ) angle = G.interpolate_angle(angle, angle_target, delta * ROTATE_WEIGHT) if not _disable_input: angle_up_target += Input.get_axis("rotate_down", "rotate_up") * ( - ROTATE_UP_SPEED * delta * (-1 if Global.get_setting("invert_camera") else 1) + ROTATE_UP_SPEED * delta * (-1 if Global.get_setting("gameplay.invert_camera") else 1) ) angle_up_target = clamp(angle_up_target, ANGLE_UP_MIN, ANGLE_UP_MAX) angle_up = G.interpolate_angle(angle_up, angle_up_target, delta * ROTATE_UP_WEIGHT) @@ -87,7 +87,7 @@ func follow(delta): new_transform.origin = target.position + offset new_transform = new_transform.looking_at(target.position) - if Global.get_setting("interpolate_camera_rotation"): + if Global.get_setting("gameplay.interpolate_camera_rotation"): transform.basis = Basis.from_euler(Vector3( G.interpolate_angle(transform.basis.get_euler().x, new_transform.basis.get_euler().x, delta * LOOK_WEIGHT), G.interpolate_angle(transform.basis.get_euler().y, new_transform.basis.get_euler().y, delta * LOOK_WEIGHT), diff --git a/client/player/player.gd b/client/player/player.gd index d5837d47..f418337b 100644 --- a/client/player/player.gd +++ b/client/player/player.gd @@ -77,18 +77,17 @@ func _ready(): character.select_hairstyle(character_idx) clear_timer.timeout.connect(clear_message) - update_username_tag() - Global.settings_changed.connect(update_username_tag) + Settings.hook_changed_init("gameplay.usernames", false, update_username_tag) func update_position(new_position: Vector2, new_rotation: float, new_boosting: bool): position_ = new_position rotation_ = new_rotation boosting = new_boosting -func update_username_tag(): +func update_username_tag(state): var tag: Label3D = character.username_tag tag.text = username - tag.visible = Global.get_setting("usernames") + tag.visible = state func set_item(i: Item): i.owned_by = hand_base diff --git a/client/server.gd b/client/server.gd index 3529e7e4..40d87672 100644 --- a/client/server.gd +++ b/client/server.gd @@ -85,18 +85,16 @@ func _server_exec(): sem.post() func get_server_path() -> String: - var path: String = Global.get_setting("server_binary") + var path: String = Global.get_setting("other.server_binary") if path != "": return path else: return "hurrycurry-server" func get_server_data(): - var path: String = Global.get_setting("server_data") - if path != "": - return path - else: - return null + var path: String = Global.get_setting("other.server_data") + if path != "": return path + else: return null func _process(_delta): match state: diff --git a/client/settings.gd b/client/settings.gd new file mode 100644 index 00000000..2c3ae9a5 --- /dev/null +++ b/client/settings.gd @@ -0,0 +1,165 @@ +# Hurry Curry! - a game about cooking +# Copyright 2024 metamuffin +# Copyright 2024 tpart +# Copyright 2024 nokoe +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, version 3 of the License only. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. +# +extends Node +class_name Settings + +static func get_root(): + return SettingsRoot.new([ + SettingsCategory.new("gameplay", [ + ToggleSetting.new("interpolate_camera_rotation", false), + ToggleSetting.new("invert_camera", false), + ToggleSetting.new("usernames", true), + ToggleSetting.new("setup_complete", false), + ToggleSetting.new("tutorial_started", false), + ToggleSetting.new("latch_boost", true), + ]), + SettingsCategory.new("graphics", [ + PresetRow.new("preset", { + "low": {"ui_blur": true, "aa": "disabled", "ssao": false, "taa": false, "shadows": false, "glow": false, "grass_amount": 0, "lq_trees": true}, + "medium": {"ui_blur": true, "aa": "fx", "ssao": false, "taa": false, "shadows": true, "glow": false, "grass_amount": 0, "lq_trees": false}, + "high": {"ui_blur": true, "aa": "ms2x", "ssao": true, "taa": false, "shadows": true, "glow": true, "grass_amount": 16, "lq_trees": false} + }), + DropdownSetting.new("fullscreen", "keep", ["keep", "always", "never"]), + DropdownSetting.new("aa", "ms2x" if Global.on_high_end() else "disabled", ["disabled", "fx", "ms2x", "ms4x"]), + ToggleSetting.new("ssao", true if Global.on_high_end() else false), + ToggleSetting.new("taa", false), + DropdownSetting.new("gi", "disabled", ["disabled", "sdfgi", "voxelgi"]), + ToggleSetting.new("shadows", true if Global.on_high_end() else false), + ToggleSetting.new("glow", true if Global.on_high_end() else false), + RangeSetting.new("grass_amount", 16 if Global.on_high_end() else 0, 0, 32, false), + ToggleSetting.new("lq_trees", false if Global.on_high_end() else true), + ToggleSetting.new("debug_info", false), + ToggleSetting.new("ui_blur", true) + ]), + SettingsCategory.new("audio", [ + RangeSetting.new("master_volume", 0, -30, 0), + RangeSetting.new("music_volume", 0, -30, 0), + RangeSetting.new("sfx_volume", 0, -30, 0), + ]), + SettingsCategory.new("ui", [ + DropdownSetting.new("touch_controls", "automatic", ["automatic", "enabled", "disabled"]), + DropdownSetting.new("language", "system", Global.language_list()), + DropdownSetting.new("scale_mode", "resize", ["resize", "disabled"]), + RangeSetting.new("scale_factor", 1. if not Global.on_mobile() else 1.5, 0.5, 1.5, 3), + ]), + SettingsCategory.new("input", + InputManager.input_map_to_settings(InputManager.default_input_map) + ), + SettingsCategory.new("other", [ + TextSetting.new("server_binary", ""), + TextSetting.new("server_data", ""), + ]) + ]) + +static func trigger_hook(key: String, value): + if Settings.change_hooks_display.get(key) != null: Settings.change_hooks_display.get(key).call(value) + if Settings.change_hooks_apply.get(key) != null: Settings.change_hooks_apply.get(key).call(value) + if key.find(".") != -1: trigger_hook(key.rsplit(".", false, 1)[0], null) + +static func hook_changed(key: String, display: bool, callable: Callable): + if display: change_hooks_display[key] = callable + else: change_hooks_apply[key] = callable + +static func hook_changed_init(key: String, display: bool, callable: Callable): + hook_changed(key, display, callable) + callable.call(Global.get_setting(key)) + +static func get_category_dict(prefix: String): + var map = {} + for k in Global.settings.keys(): + var kn = k.trim_prefix(prefix+".") + if kn == k: continue + map[kn] = Global.get_setting(k) + return map + +static var change_hooks_display = {} +static var change_hooks_apply = { + "input": h_input, + "graphics.aa": h_aa, + "graphics.taa": h_taa, + "graphics.fullscreen": h_fullscreen, + "ui.scale_mode": h_scale_mode, + "ui.scale_factor": h_scale_factor, + "ui.language": h_language, + "audio.master_volume": h_volume_master, + "audio.music_volume": h_volume_music, + "audio.sfx_volume": h_volume_sfx, +} + +static func apply_initial(): + for key in change_hooks_apply.keys(): + change_hooks_apply[key].call(Global.get_setting(key)) + +static func h_aa(mode): + match mode: + "disabled": + Global.get_viewport().msaa_2d = Viewport.MSAA_DISABLED + Global.get_viewport().msaa_3d = Viewport.MSAA_DISABLED + Global.get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED + "fx": + Global.get_viewport().msaa_2d = Viewport.MSAA_DISABLED + Global.get_viewport().msaa_3d = Viewport.MSAA_DISABLED + Global.get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_FXAA + "ms2x": + Global.get_viewport().msaa_2d = Viewport.MSAA_2X + Global.get_viewport().msaa_3d = Viewport.MSAA_2X + Global.get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED + "ms4x": + Global.get_viewport().msaa_2d = Viewport.MSAA_4X + Global.get_viewport().msaa_3d = Viewport.MSAA_4X + Global.get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED + +static func h_taa(enabled): + Global.get_viewport().use_taa = enabled + +static func h_scale_mode(mode: String): + match mode: + "resize": Global.get_tree().root.content_scale_mode = Window.CONTENT_SCALE_MODE_CANVAS_ITEMS + "disabled": Global.get_tree().root.content_scale_mode = Window.CONTENT_SCALE_MODE_DISABLED + +static func h_scale_factor(value: float): + Global.get_tree().root.content_scale_factor = value + +static func h_volume_master(value: float): Sound.set_volume(0, value) +static func h_volume_music(value: float): Sound.set_volume(1, value) +static func h_volume_sfx(value: float): Sound.set_volume(2, value) + +static func h_touch(mode: String): + match mode: + "enabled": Global.using_touch = true + "disabled": Global.using_touch = false + Global.using_touch_change.emit() + +static func h_language(language: String): + if language == "system": language = OS.get_locale_language() + TranslationServer.set_locale(language) + +static func h_fullscreen(mode: String): + match mode: + "keep": pass + "always": DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) + "never": if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN: + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) + +static func h_input(_x): + InputManager.apply_input_map(Settings.get_category_dict("input")) + +# TODO whatever this does +# if not get_setting("tutorial_started"): +# for k in profile["hints"].keys(): +# set_hint(k, false) diff --git a/locale/ar.ini b/locale/ar.ini index 20fdfbba..83d9d815 100644 --- a/locale/ar.ini +++ b/locale/ar.ini @@ -1,21 +1,21 @@ [hurrycurry] -c.controls.boost= -c.controls.camera_down= -c.controls.camera_left= -c.controls.camera_reset=استخدموا %s لتدوير الكاميرا -c.controls.camera_right= -c.controls.camera_up= -c.controls.chat= -c.controls.fullscreen=إملأ الشاشة -c.controls.interact=مسار الملف -c.controls.move_backward= -c.controls.move_forward= -c.controls.move_left= -c.controls.move_right= -c.controls.zoom_in= -c.controls.zoom_in_discrete= -c.controls.zoom_out= -c.controls.zoom_out_discrete= +c.settings.input.boost= +c.settings.input.down= +c.settings.input.left= +c.settings.input.reset=استخدموا %s لتدوير الكاميرا +c.settings.input.right= +c.settings.input.up= +c.settings.input.chat= +c.settings.input.fullscreen=إملأ الشاشة +c.settings.input.interact=مسار الملف +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= c.credits.developed_by=المطورين c.credits.thanks=شكرا لكم على اللعب c.credits.title=هري كري! - لعبة عن الطبخ @@ -72,48 +72,48 @@ c.settings.audio= c.settings.audio.master_volume=صوت البرنامج c.settings.audio.music_volume=صوت الموسيقى c.settings.audio.sfx_volume=صوت المؤثرات -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button=زر القائمة/الهمبرغر/Menu -c.settings.controls.other_event= -c.settings.controls.press_any_key= -c.settings.debug_info=عرض معلومات التصحيح (fps، إلخ) -c.settings.fullscreen=إملأ الشاشة -c.settings.fullscreen.always=دائماً -c.settings.fullscreen.keep=كما هو -c.settings.fullscreen.never=أبداً +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=زر القائمة/الهمبرغر/Menu +c.settings.input.other_event= +c.settings.input.press_any_key= +c.settings.graphics.debug_info=عرض معلومات التصحيح (fps، إلخ) +c.settings.graphics.fullscreen=إملأ الشاشة +c.settings.graphics.fullscreen.always=دائماً +c.settings.graphics.fullscreen.keep=كما هو +c.settings.graphics.fullscreen.never=أبداً c.settings.gameplay= -c.settings.gameplay.extend_boost=قم دائمًا بتمديد الجري إلى أقصى مدة -c.settings.gi=إضاءة عالمية -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi=Voxel GI -c.settings.glow=توهج +c.settings.gameplay.latch_boost=قم دائمًا بتمديد الجري إلى أقصى مدة +c.settings.graphics.gi=إضاءة عالمية +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi=Voxel GI +c.settings.graphics.glow=توهج c.settings.graphics=رسوميات c.settings.graphics.aa=تقنية التنعيم c.settings.graphics.ao=انسداد المحيط c.settings.graphics.taa=تقنية التنعيم الزمني -c.settings.grass_amount=كمية العشب الـ3D للخانة -c.settings.language=اللغة -c.settings.language.system=الوضع الافتراضي للجهاز -c.settings.low_poly_trees=أشجار Low-poly +c.settings.graphics.grass_amount=كمية العشب الـ3D للخانة +c.settings.ui.language=اللغة +c.settings.ui.language.system=الوضع الافتراضي للجهاز +c.settings.graphics.lq_trees=أشجار Low-poly c.settings.other= -c.settings.preset_high=عالي -c.settings.preset_low=ضعيف -c.settings.preset_medium=متوسط -c.settings.server_data=دليل الـserver data (اتركوه فارغًا للبحث التلقائي) -c.settings.server_path=ملف للـserver binary (اتركوه فارغًا للبحث في PATH) -c.settings.server_path.placeholder=مسار الملف -c.settings.shadows=ظلال -c.settings.smooth_camera=سلّس حركة الكاميرا +c.settings.graphics.preset.high=عالي +c.settings.graphics.preset.low=ضعيف +c.settings.graphics.preset.medium=متوسط +c.settings.other.server_data=دليل الـserver data (اتركوه فارغًا للبحث التلقائي) +c.settings.other.server_binary=ملف للـserver binary (اتركوه فارغًا للبحث في PATH) +c.settings.other.server_binary.placeholder=مسار الملف +c.settings.graphics.shadows=ظلال +c.settings.gameplay.interpolate_camera_rotation=سلّس حركة الكاميرا c.settings.ui=الإسم c.settings.ui.scale_factor=عامل حجم واجهة المستخدم c.settings.ui.scale_mode=طريقة تحجيم واجهة المستخدم c.settings.ui.scale_mode.resize=تحديد الحجم تلقائيًا c.settings.ui.touch_controls=فعّل شاشة اللمس -c.settings.ui_blur=موّه واجهة المستخدم +c.settings.graphics.ui_blur=موّه واجهة المستخدم c.settings.username=الإسم c.setup.contract_title=عقد عمل c.setup.par00=هذا عقد ملزم بينكم (الموظف) وشركة موستر فوودز(Musterfoods) المحدودة (صاحب العمل) للعمل كطهاة أو نادلين. @@ -139,25 +139,25 @@ unknown464=- unknown476=مفتاح الإزاحة/ العالي/SHIFT unknown484=عصا التحكم اليسرى unknown488=مفتاح الفراغ/SPACE -unknown49=عكّس حركة الكاميرا -unknown494=اضغطوا على %s لالتقاط الأغراض واضغطوا باستمرار على %s للتفاعل مع الأدوات +c.settings.gameplay.invert_camera=عكّس حركة الكاميرا +c.hint.interact=اضغطوا على %s لالتقاط الأغراض واضغطوا باستمرار على %s للتفاعل مع الأدوات unknown506=مفتاحا صفحة لأعلى(PageUp)/صفحة لأسفل(PageDown) unknown510=استخدموا %s لتدوير الكاميرا unknown514=مفاتيح الأسهم(Arrow keys) unknown518=عصا التحكم اليمنى unknown524=يمكن إظهار/إخفاء الأسماء في الإعدادات -unknown53=اسماء اللاعبين +c.settings.gameplay.usernames=اسماء اللاعبين unknown530=اضغطوا على %s وانقروا على "انضم إلى اللعبة" للانضمام إلى اللعبة أثناء تشغيلها unknown534=مفتاح الهروب/Esc unknown538=زر القائمة/الهمبرغر/Menu unknown551=غير موجود unknown568=تسريحة الشعر %d -unknown572=النماذج -unknown576=الاصوات -unknown59=تم الانتهاء من الإعداد الأولي. (إزيلوا علامة الإختيار وأعدوا التشغيل لإعادة الدخول) +c.credits.models=النماذج +c.credits.sounds=الاصوات +c.settings.gameplay.setup_completed=تم الانتهاء من الإعداد الأولي. (إزيلوا علامة الإختيار وأعدوا التشغيل لإعادة الدخول) unknown622=يجب عليكم ملء جميع الحقول. unknown626=حسنا -unknown63=بدأ البرنامج التعليمي +c.settings.gameplay.tutorial_started=بدأ البرنامج التعليمي unknown732= unknown736= unknown740=مشاهدين diff --git a/locale/de.ini b/locale/de.ini index f887201e..fb96b1c0 100644 --- a/locale/de.ini +++ b/locale/de.ini @@ -1,45 +1,31 @@ [hurrycurry] -c.controls.boost=Bewegungsschub -c.controls.camera_down=Kamera nach unten rotieren -c.controls.camera_left=Kamera nach links rotieren -c.controls.camera_reset=Kameraansicht zurücksetzen -c.controls.camera_right=Kamera nach rechts rotieren -c.controls.camera_up=Kamera nach oben rotieren -c.controls.chat=Chat öffnen/schließen -c.controls.fullscreen=Vollbild umschalten -c.controls.interact=Interargieren -c.controls.move_backward=Rückwärts bewegen -c.controls.move_forward=Vorwärts bewegen -c.controls.move_left=Nach links bewegen -c.controls.move_right=Nach rechts bewegen -c.controls.zoom_in=Hineinzoomen -c.controls.zoom_in_discrete=Hineinzoomen (diskret) -c.controls.zoom_out=Herauszoomen -c.controls.zoom_out_discrete=Herauszoomen (diskret) c.credits.developed_by=entwickelt von +c.credits.models=Modelle +c.credits.sounds=Soundeffekte c.credits.thanks=Danke fürs Spielen c.credits.title=Hurry Curry! - ein Spiel rund ums Kochen -c.error=Fehler c.error.cannot_cancel_no_game=Spiel kann nicht abgebrochen werde, da gerade kein Spiel läuft. c.error.must_join_to_cancel=Du must dem Spiel beitreten um es abbrechen zu können. c.error.placeholder=Dies sollte die Fehlernachricht sein. c.error.websocket=Web-Socket wurde geschlossen mit Code: %d, Grund %s. Sauber: %s -c.hint=Tipp +c.error=Fehler c.hint.boost=Drücke %s für Schub c.hint.framerate_low=Ihre Bildrate scheint niedrig zu sein. Sie können Ihre Grafikeinstellungen in den Optionen verringern. +c.hint.interact=Drücke %s, um Gegenstände aufzuheben und halte %s gedrückt, um mit Utensilien zu interagieren c.hint.movement=Nutze %s zum Bewegen c.hint.reset_camera=Drücke %s, um die Kameradrehung zurückzusetzen c.hint.zoom_camera=Nutze %s zum Zoomen +c.hint=Tipp c.lobby.botenable=Roboter aktivieren c.lobby.mapname=Kartenname c.lobby.players=Spieler c.lobby.start=Spiel starten -c.map.difficulty=Schwierigkeitsstufe c.map.difficulty.0=Einfach c.map.difficulty.1=Schwer c.map.difficulty.2=Medium c.map.difficulty.3=Unspielbar c.map.difficulty.4=Sehr schwer +c.map.difficulty=Schwierigkeitsstufe c.map.players_recommended=%d Spieler empfohlen c.menu.back=Zurück c.menu.credits=Anerkennung @@ -53,10 +39,10 @@ c.menu.ingame.reconnect=Erneut verbinden c.menu.ingame.resume=Fortsetzen c.menu.ingame.spectate=Zuschauen c.menu.my_chef=Mein Koch -c.menu.play=Spielen c.menu.play.connect=Verbinden c.menu.play.quick_connect=Jetzt verbinden c.menu.play.server=Server +c.menu.play=Spielen c.menu.quit=Verlassen c.menu.settings=Einstellungen c.score.acceptable=Akzeptabler Service @@ -64,56 +50,77 @@ c.score.completed=Abgeschlossen c.score.excellent=Ausgezeichneter Service c.score.failed=Verfehlt c.score.good=Guter Service -c.score.points=Punkte c.score.points_par=Sie haben %s Punkte gesammelt +c.score.points=Punkte c.score.poor=Schlechter Service c.settings.apply=Speichern & Anwenden -c.settings.audio=Audio c.settings.audio.master_volume=Gesamtlautstärke c.settings.audio.music_volume=Musiklautstärke c.settings.audio.sfx_volume=Effektlautstärke -c.settings.controls=Steuerung -c.settings.controls.add=Hinzufügen -c.settings.controls.joypad=%s (Joypad) -c.settings.controls.joypad_axis=Joypad-Achse %s -c.settings.controls.keyboard=%s (Tastatur) -c.settings.controls.mouse_button=Maustaste %s -c.settings.controls.other_event=Anderes Ereignis -c.settings.controls.press_any_key=Drücke eine Taste... -c.settings.debug_info=Diagnosedaten anzeigen (Bildrate, etc.) -c.settings.fullscreen=Vollbild -c.settings.fullscreen.always=Immer -c.settings.fullscreen.keep=Beibehalten -c.settings.fullscreen.never=Nie +c.settings.audio=Audio +c.settings.gameplay.interpolate_camera_rotation=Kameradrehung glätten +c.settings.gameplay.invert_camera=Kamerabewegung invertieren +c.settings.gameplay.latch_boost=Schub immer bis zum Anschlag verlängern +c.settings.gameplay.setup_completed=Ersteinrichtung abgeschlossen (Deaktivieren und Spiel neu starten zum Neueinrichten) +c.settings.gameplay.tutorial_started=Anleitung gestartet +c.settings.gameplay.usernames=Benutzernamen anzeigen c.settings.gameplay=Spiel -c.settings.gameplay.extend_boost=Schub immer bis zum Anschlag verlängern -c.settings.gi=Globale Beleuchtung -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi=Voxel GlobaleBeleuchtung -c.settings.glow=Glow aktivieren -c.settings.graphics=Grafikvoreinstellung c.settings.graphics.aa=Kantenglättung c.settings.graphics.ao=Umgebungsverdeckung +c.settings.graphics.debug_info=Diagnosedaten anzeigen (Bildrate, etc.) +c.settings.graphics.fullscreen.always=Immer +c.settings.graphics.fullscreen.keep=Beibehalten +c.settings.graphics.fullscreen.never=Nie +c.settings.graphics.fullscreen=Vollbild +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi=Voxel GlobaleBeleuchtung +c.settings.graphics.gi=Globale Beleuchtung +c.settings.graphics.glow=Glow aktivieren +c.settings.graphics.grass_amount=3D-Grasmenge pro Tile +c.settings.graphics.lq_trees=Low-poly-Bäume +c.settings.graphics.preset.high=Hoch +c.settings.graphics.preset.low=Niedrig +c.settings.graphics.preset.medium=Mittel +c.settings.graphics.shadows=Schatten aktivieren c.settings.graphics.taa=Zeitliche Kantenglättung -c.settings.grass_amount=3D-Grasmenge pro Tile -c.settings.language=Sprache -c.settings.language.system=Systemstandard -c.settings.low_poly_trees=Low-poly-Bäume +c.settings.graphics.ui_blur=Benutzeroberflächenunschärfe +c.settings.graphics=Grafikvoreinstellung +c.settings.input.add=Hinzufügen +c.settings.input.boost=Bewegungsschub +c.settings.input.chat=Chat öffnen/schließen +c.settings.input.fullscreen=Vollbild umschalten +c.settings.input.interact=Interargieren +c.settings.input.joypad_axis=Joypad-Achse %s +c.settings.input.joypad=%s (Joypad) +c.settings.input.keyboard=%s (Tastatur) +c.settings.input.mouse_button=Maustaste %s +c.settings.input.backwards=Rückwärts bewegen +c.settings.input.forwards=Vorwärts bewegen +c.settings.input.left=Nach links bewegen +c.settings.input.right=Nach rechts bewegen +c.settings.input.other_event=Anderes Ereignis +c.settings.input.press_any_key=Drücke eine Taste... +c.settings.input.reset=Kameraansicht zurücksetzen +c.settings.input.rotate_down=Kamera nach unten rotieren +c.settings.input.rotate_left=Kamera nach links rotieren +c.settings.input.rotate_right=Kamera nach rechts rotieren +c.settings.input.rotate_up=Kamera nach oben rotieren +c.settings.input.zoom_in_discrete=Hineinzoomen (diskret) +c.settings.input.zoom_in=Hineinzoomen +c.settings.input.zoom_out_discrete=Herauszoomen (diskret) +c.settings.input.zoom_out=Herauszoomen +c.settings.input=Steuerung +c.settings.other.server_binary.placeholder=Pfad eingeben +c.settings.other.server_binary=Pfad zum Server (leer lassen, um PATH zu durchsuchen) +c.settings.other.server_data=Server Datenverzeichnis (leer lassen, um automatisch zu erkennen) c.settings.other=Sonstiges -c.settings.preset_high=Hoch -c.settings.preset_low=Niedrig -c.settings.preset_medium=Mittel -c.settings.server_data=Server Datenverzeichnis (leer lassen, um automatisch zu erkennen) -c.settings.server_path=Pfad zum Server (leer lassen, um PATH zu durchsuchen) -c.settings.server_path.placeholder=Pfad eingeben -c.settings.shadows=Schatten aktivieren -c.settings.smooth_camera=Kameradrehung glätten -c.settings.ui=Benutzeroberfläche +c.settings.ui.language.system=Systemstandard +c.settings.ui.language=Sprache c.settings.ui.scale_factor=Benutzeroberflächen Skalierungs Faktor -c.settings.ui.scale_mode=Benutzeroberflächen Skalierungs Modus c.settings.ui.scale_mode.resize=Skalieren +c.settings.ui.scale_mode=Benutzeroberflächen Skalierungs Modus c.settings.ui.touch_controls=Touchsteuerelemente aktivieren -c.settings.ui_blur=Benutzeroberflächenunschärfe +c.settings.ui=Benutzeroberfläche c.settings.username=Benutzername c.setup.contract_title=ARBEITSVERTRAG c.setup.par00=Dies ist ein verbindlicher Vertrag zwischen Ihnen (der/die Angestelte) und Musterfoods GmbH. Sie verpflichten sich, Ihren Aufgaben als Koch/Köchin bzw. Bedienung nachzugehen. @@ -139,25 +146,18 @@ unknown464=- unknown476=UMSCHALTEN unknown484=linken Stick unknown488=LEERTASTE -unknown49=Kamerabewegung invertieren -unknown494=Drücke %s, um Gegenstände aufzuheben und halte %s gedrückt, um mit Utensilien zu interagieren unknown506=BildHoch/BildRunter unknown510=Nutze %s, um die Kameraansicht zurückzusetzen unknown514=Pfeiltasten unknown518=rechten Stick unknown524=Die Anzeige von Nutzernamen kann in den Einstellungen ein- und ausgeschaltet werden -unknown53=Benutzernamen anzeigen unknown530=Drücken Sie %s und klicken Sie „Beitreten“, um beizutreten, während das Spiel läuft unknown534=ESCAPE unknown538=Menü-Knopf unknown551=Nicht verfügbar unknown568=Frisur %d -unknown572=Modelle -unknown576=Soundeffekte -unknown59=Ersteinrichtung abgeschlossen (Deaktivieren und Spiel neu starten zum Neueinrichten) unknown622=Sie müssen alle verlangten Felder ausfüllen. unknown626=Akzeptieren -unknown63=Anleitung gestartet unknown732=Zurück unknown736=Nächstes unknown740=Beitreten / Zuschauen diff --git a/locale/en.ini b/locale/en.ini index 3903c574..509cfd34 100644 --- a/locale/en.ini +++ b/locale/en.ini @@ -1,40 +1,23 @@ [hurrycurry] -c.controls.boost=Boost movement -c.controls.camera_down=Rotate camera downwards -c.controls.camera_left=Rotate camera to the left -c.controls.camera_reset=Reset camera view -c.controls.camera_right=Rotate camera to the right -c.controls.camera_up=Rotate camera upwards -c.controls.chat=Toggle chat -c.controls.fullscreen=Toggle fullscreen -c.controls.interact=Interact -c.controls.move_backward=Move backwards -c.controls.move_forward=Move forwards -c.controls.move_left=Move left -c.controls.move_right=Move right -c.controls.zoom_in_discrete=Zoom in (discrete) -c.controls.zoom_in=Zoom in -c.controls.zoom_out_discrete=Zoom out (discrete) -c.controls.zoom_out=Zoom out c.credits.developed_by=developed by +c.credits.models=Models +c.credits.sounds=Sounds c.credits.thanks=Thank You For Playing c.credits.title=Hurry Curry! - a game about cooking c.error.cannot_cancel_no_game=Cannot cancel game since no game is running. c.error.must_join_to_cancel=You must join in order to be able to cancel the current game. c.error.placeholder=This should be the error message. +c.error.version_mismatch=Server and client versions do not match. Server: %d.%d, Client: %d.%d.%nAre you sure the game is up to date? +c.error.websocket.unavailable=unavailable c.error.websocket=WebSocket closed with code: %d, reason %s. Clean: %s c.error=Error c.hint.boost=Press %s to boost c.hint.framerate_low=Your framerate seems to be low. You can lower your graphics settings in the settings menu. -c.hint.interact=Press %s to pick up items and hold %s to interact with toolsDrücke %s, um Gegenstände aufzuheben und halte %s gedrückt= um mit Utensilien zu interagieren +c.hint.interact=Press %s to pick up items and hold %s to interact with tools c.hint.movement=Use %s to move c.hint.reset_camera=Press %s to reset the camera view c.hint.zoom_camera=Use %s to zoom in/out c.hint=Hint -c.lobby.botenable=Enable bots -c.lobby.mapname=Map name -c.lobby.players=Players -c.lobby.start=Start game c.map.difficulty.0=Easy c.map.difficulty.1=Hard c.map.difficulty.2=Moderate @@ -50,11 +33,15 @@ c.menu.ingame.join2=Join Game c.menu.ingame.leave=Leave game c.menu.ingame.leave2=Leave Game c.menu.ingame.main_menu=Main menu -c.menu.ingame.mainmenu=Main Menu +c.menu.ingame.main_menu2=Main Menu c.menu.ingame.quit=Quit game c.menu.ingame.reconnect=Reconnect c.menu.ingame.resume=Resume c.menu.ingame.spectate=Spectate +c.menu.lobby.enable_bots=Enable bots +c.menu.lobby.mapname=Map name +c.menu.lobby.players=Players +c.menu.lobby.start=Start game c.menu.my_chef=My Chef c.menu.play.connect=Connect c.menu.play.quick_connect=Quick Connect @@ -75,46 +62,86 @@ c.settings.audio.master_volume=Master Volume c.settings.audio.music_volume=Music Volume c.settings.audio.sfx_volume=SFX Volume c.settings.audio=Audio -c.settings.controls.add=Add new -c.settings.controls.joypad_axis=Joypad axis %s -c.settings.controls.joypad=%s (Joypad) -c.settings.controls.keyboard=%s (Keyboard) -c.settings.controls.mouse_button=Mouse button %s -c.settings.controls.other_event=Other event -c.settings.controls.press_any_key=Press any key... -c.settings.controls=Controls -c.settings.debug_info=Display debug info (Framerate, etc.) -c.settings.fullscreen.always=Always -c.settings.fullscreen.keep=Keep -c.settings.fullscreen.never=Never -c.settings.fullscreen=Fullscreen -c.settings.gameplay.extend_boost=Always extend boost to maximum duration +c.settings.gameplay.interpolate_camera_rotation=Smooth camera rotation +c.settings.gameplay.invert_camera=Invert camera movement +c.settings.gameplay.latch_boost=Always extend boost to maximum duration +c.settings.gameplay.setup_completed=Initial setup complete. (Uncheck and restart to reenter) +c.settings.gameplay.tutorial_started=Tutorial started +c.settings.gameplay.usernames=Show username tags c.settings.gameplay=Gameplay -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi=Voxel GI -c.settings.gi=Global illumination -c.settings.glow=Enable glow +c.settings.graphics.aa.disabled=Disabled +c.settings.graphics.aa.fx=FXAA +c.settings.graphics.aa.ms2x=MSAA 2x +c.settings.graphics.aa.ms4x=MSAA 4x c.settings.graphics.aa=Anti-aliasing c.settings.graphics.ao=Ambient occlusion +c.settings.graphics.debug_info=Display debug info (Framerate, etc.) +c.settings.graphics.fullscreen.always=Always +c.settings.graphics.fullscreen.keep=Keep +c.settings.graphics.fullscreen.never=Never +c.settings.graphics.fullscreen=Fullscreen +c.settings.graphics.gi.disabled=Disabled +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi=Voxel GI +c.settings.graphics.gi=Global illumination +c.settings.graphics.glow=Enable glow +c.settings.graphics.grass_amount=3D grass amount per grass tile +c.settings.graphics.lq_trees=Low-poly trees +c.settings.graphics.preset.high=High +c.settings.graphics.preset.low=Low +c.settings.graphics.preset.medium=Medium +c.settings.graphics.preset=Load preset +c.settings.graphics.shadows=Enable shadows +c.settings.graphics.ssao=Screen-space ambient occlusion (SSAO) c.settings.graphics.taa=Temporal Anti-Aliasing +c.settings.graphics.ui_blur=Enable UI blur c.settings.graphics=Graphics -c.settings.grass_amount=3D grass amount per grass tile -c.settings.language.system=System default -c.settings.language=Language -c.settings.low_poly_trees=Low-poly trees +c.settings.input.add=Add new +c.settings.input.backwards=Move Backwards +c.settings.input.boost=Boost movement +c.settings.input.chat=Toggle chat +c.settings.input.forwards=Move Forwards +c.settings.input.fullscreen=Toggle fullscreen +c.settings.input.interact=Interact +c.settings.input.join_spectate=Join/Spectate +c.settings.input.joypad_axis=Joypad axis %s +c.settings.input.joypad=%s (Joypad) +c.settings.input.keyboard=%s (Keyboard) +c.settings.input.left=Move Left +c.settings.input.mouse_button=Mouse button %s +c.settings.input.next=Select next item +c.settings.input.other_event=Other event +c.settings.input.press_any_key=Press any key... +c.settings.input.previous=Select previous item +c.settings.input.reset=Reset camera +c.settings.input.right=Move Right +c.settings.input.rotate_down=Rotate camera down +c.settings.input.rotate_left=Rotate camera left +c.settings.input.rotate_right=Rotate camera right +c.settings.input.rotate_up=Rotate camera up +c.settings.input.scroll_down_discrete=Scroll down (discrete) +c.settings.input.scroll_down=Scroll down +c.settings.input.scroll_up_discrete=Scroll up (discrete) +c.settings.input.scroll_up=Scroll up +c.settings.input.start_game=Start game +c.settings.input.zoom_in_discrete=Zoom in (discrete) +c.settings.input.zoom_in=Zoom in +c.settings.input.zoom_out_discrete=Zoom out (discrete) +c.settings.input.zoom_out=Zoom out +c.settings.input=Controls +c.settings.other.server_binary.placeholder=Enter path +c.settings.other.server_binary=Server binary (leave empty to search PATH) +c.settings.other.server_data=Server data directory (leave empty to auto-detect) c.settings.other=Other -c.settings.preset_high=High -c.settings.preset_low=Low -c.settings.preset_medium=Medium -c.settings.server_data=Server data directory (leave empty to auto-detect) -c.settings.server_path.placeholder=Enter path -c.settings.server_path=Server binary (leave empty to search PATH) -c.settings.shadows=Enable shadows -c.settings.smooth_camera=Smooth camera rotation -c.settings.ui_blur=Enable UI blur +c.settings.ui.language.system=System default +c.settings.ui.language=Language c.settings.ui.scale_factor=UI scale factor +c.settings.ui.scale_mode.disabled=Disabled c.settings.ui.scale_mode.resize=Resize c.settings.ui.scale_mode=UI scale mode +c.settings.ui.touch_controls.automatic=Automatic +c.settings.ui.touch_controls.disabled=Disabled +c.settings.ui.touch_controls.enabled=Enabled c.settings.ui.touch_controls=Enable touch screen controls c.settings.ui=User interface c.settings.username=Username @@ -146,27 +173,18 @@ unknown464=- unknown476=SHIFT unknown484=left stick unknown488=SPACE -unknown49=Invert camera movement -unknown494=Press %s to pick up items and hold %s to interact with tools unknown506=PageUp/PageDown unknown510=Use %s to rotate the camera view unknown514=arrow keys unknown518=right stick unknown524=Username tags can be enabled/disabled in the settings -unknown53=Show username tags unknown530=Press %s and click "Join" to join the game while it is running unknown534=ESCAPE unknown538=Menu button unknown551=unavailable -unknown564=Server and client versions do not match. Server: %d.%d, Client: %d.%d.%nAre you sure the game is up to date? unknown568=Hairstyle %d -unknown572=Models -unknown576=Sounds -unknown59=Initial setup complete. (Uncheck and restart to reenter) -unknown598=[/table]%n%n%n unknown622=You must fill out all requested fields. unknown626=Accept -unknown63=Tutorial started unknown732=Previous unknown736=Next unknown740=Join / Spectate diff --git a/locale/es.ini b/locale/es.ini index d6a0a371..2c6d5883 100644 --- a/locale/es.ini +++ b/locale/es.ini @@ -1,45 +1,48 @@ [hurrycurry] -c.controls.boost= -c.controls.camera_down= -c.controls.camera_left= -c.controls.camera_reset=Usa %s para restablecer la cámara -c.controls.camera_right= -c.controls.camera_up= -c.controls.chat= -c.controls.fullscreen=Pantalla completa -c.controls.interact=Pone ruta -c.controls.move_backward= -c.controls.move_forward= -c.controls.move_left= -c.controls.move_right= -c.controls.zoom_in= -c.controls.zoom_in_discrete= -c.controls.zoom_out= -c.controls.zoom_out_discrete= +c.settings.input.boost= +c.settings.input.rotate_down= +c.settings.input.rotate_left= +c.settings.input.reset=Usa %s para restablecer la cámara +c.settings.input.rotate_right= +c.settings.input.rotate_up= +c.settings.input.chat= +c.settings.input.fullscreen=Pantalla completa +c.settings.input.interact=Pone ruta +c.settings.input.backwards= +c.settings.input.forwards= +c.settings.input.left= +c.settings.input.right= +c.settings.input.zoom_in_discrete= +c.settings.input.zoom_in= +c.settings.input.zoom_out_discrete= +c.settings.input.zoom_out= c.credits.developed_by=desarrollado por +c.credits.models=Modelos +c.credits.sounds=Sonidos c.credits.thanks=Gracias por jugar c.credits.title=¡Hurry Curry! - un juego sobre cocinar -c.error=Error c.error.cannot_cancel_no_game=No se puede cancelar el juego porque no hay ningún juego en ejecución. c.error.must_join_to_cancel=Debes unirte para poder cancelar el juego. c.error.placeholder=///. c.error.websocket=WebSocket cerrado con código: %d, motivo %s. Limpiar: %s -c.hint=Pista +c.error=Error c.hint.boost=Presione %s para impulsar c.hint.framerate_low=La velocidad de cuadros parece ser baja. Puedes reducir la configuración de gráficos en el menú de configuración. +c.hint.interact=Presione %s para recoger elementos y mantenga presionado %s para interactuar con útiles c.hint.movement=Usa %s para moverte c.hint.reset_camera=Presione %s para restablecer la cámara c.hint.zoom_camera=Usa %s para hacer zoom +c.hint=Pista c.lobby.botenable=Activar robots c.lobby.mapname=Nombre del mapa c.lobby.players=Jugadores c.lobby.start=Iniciar juego -c.map.difficulty=Dificultad c.map.difficulty.0=Fácil c.map.difficulty.1=Duro c.map.difficulty.2=Moderado c.map.difficulty.3=Demasiado c.map.difficulty.4=Muy duro +c.map.difficulty=Dificultad c.map.players_recommended=%d jugadores recomendadas c.menu.back=Atrás c.menu.credits=Créditos @@ -53,10 +56,10 @@ c.menu.ingame.reconnect=Reconectar c.menu.ingame.resume=Resumir c.menu.ingame.spectate=Observar c.menu.my_chef=Mi cocinero -c.menu.play=Iniciar partida c.menu.play.connect=Conectar c.menu.play.quick_connect=Conexión rápida c.menu.play.server=Servidor +c.menu.play=Iniciar partida c.menu.quit=Abandonar c.menu.settings=Ajustes c.score.acceptable=Servicio aceptable @@ -64,56 +67,60 @@ c.score.completed=Terminado c.score.excellent=Excelente servicio c.score.failed=Fallido c.score.good=Buen servicio -c.score.points=Puntos c.score.points_par=Has acumulado %s puntos +c.score.points=Puntos c.score.poor=Servicio pobre c.settings.apply=Guardar & aplicar -c.settings.audio= c.settings.audio.master_volume=Volumen principal c.settings.audio.music_volume=Volumen de la música c.settings.audio.sfx_volume=Volumen de efectos especiales -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button=Botón de menú -c.settings.controls.other_event= -c.settings.controls.press_any_key= -c.settings.debug_info=Mostrar información de depuración (Cuadros por segundo, etc.) -c.settings.fullscreen=Pantalla completa -c.settings.fullscreen.always=Siempre -c.settings.fullscreen.keep=Mantener -c.settings.fullscreen.never=Jamás +c.settings.audio= +c.settings.gameplay.interpolate_camera_rotation=Interpolar la rotación de la cámara +c.settings.gameplay.invert_camera=Invertir el movimiento de la cámara +c.settings.gameplay.latch_boost=Siempre extienda el impulso a la duración máxima +c.settings.gameplay.setup_completed=Configuración inicial completa. (Desmarque y recomenza para reentrar) +c.settings.gameplay.tutorial_started=Tutorial comenzó +c.settings.gameplay.usernames=Mostrar nombres de usuarios c.settings.gameplay= -c.settings.gameplay.extend_boost=Siempre extienda el impulso a la duración máxima -c.settings.gi=Iluminación global -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi=Voxel GI -c.settings.glow=Activar brillo -c.settings.graphics=Gráficos c.settings.graphics.aa=Antialiasing c.settings.graphics.ao=Oclusión ambiental +c.settings.graphics.debug_info=Mostrar información de depuración (Cuadros por segundo, etc.) +c.settings.graphics.fullscreen.always=Siempre +c.settings.graphics.fullscreen.keep=Mantener +c.settings.graphics.fullscreen.never=Jamás +c.settings.graphics.fullscreen=Pantalla completa +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi=Voxel GI +c.settings.graphics.gi=Iluminación global +c.settings.graphics.glow=Activar brillo +c.settings.graphics.grass_amount=cantidad de hierba 3D por loseta de césped +c.settings.graphics.lq_trees=Árboles con pocos polígonos +c.settings.graphics.preset.high=Alto +c.settings.graphics.preset.low=Bajo +c.settings.graphics.preset.medium=Medio +c.settings.graphics.shadows=Activar sombras c.settings.graphics.taa=Antialiasing temporal -c.settings.grass_amount=cantidad de hierba 3D por loseta de césped -c.settings.language=Lengua -c.settings.language.system=Sistema por defecto -c.settings.low_poly_trees=Árboles con pocos polígonos +c.settings.graphics.ui_blur=Activar difuminar +c.settings.graphics=Gráficos +c.settings.input.add= +c.settings.input.joypad_axis= +c.settings.input.joypad= +c.settings.input.keyboard= +c.settings.input.mouse_button=Botón de menú +c.settings.input.other_event= +c.settings.input.press_any_key= +c.settings.input= +c.settings.other.server_binary.placeholder=Pone ruta +c.settings.other.server_binary=Binario del servidor (deja vacío para buscar RUTA) +c.settings.other.server_data=Directorio de datos del servidor (deja vacío para detectar automáticamente) c.settings.other= -c.settings.preset_high=Alto -c.settings.preset_low=Bajo -c.settings.preset_medium=Medio -c.settings.server_data=Directorio de datos del servidor (deja vacío para detectar automáticamente) -c.settings.server_path=Binario del servidor (deja vacío para buscar RUTA) -c.settings.server_path.placeholder=Pone ruta -c.settings.shadows=Activar sombras -c.settings.smooth_camera=Interpolar la rotación de la cámara -c.settings.ui=Nombre de usuario +c.settings.ui.language.system=Sistema por defecto +c.settings.ui.language=Lengua c.settings.ui.scale_factor=Escala de interfaz de usuario -c.settings.ui.scale_mode=Modo d’escala de interfaz de usuario c.settings.ui.scale_mode.resize=Redimensionado +c.settings.ui.scale_mode=Modo d’escala de interfaz de usuario c.settings.ui.touch_controls=Permitir controles de pantalla táctil -c.settings.ui_blur=Activar difuminar +c.settings.ui=Nombre de usuario c.settings.username=Nombre de usuario c.setup.contract_title=CONTRATO DE EMPLEO c.setup.par00=Este es un contrato oficial entre usted (el empleado) y Musterfoods Ltd. (el empleador) para trabajar como chef o camarero. @@ -139,25 +146,18 @@ unknown464=- unknown476=CAMBIO unknown484=palo izquierdo unknown488=BARRA ESPACIADORA -unknown49=Invertir el movimiento de la cámara -unknown494=Presione %s para recoger elementos y mantenga presionado %s para interactuar con útiles unknown506=RePág/AvPág unknown510=Usa %s para restablecer la cámara unknown514=teclas de flechas unknown518=palo derecho unknown524=Los nombres de usuarios se pueden habilitar/deshabilitar en la configuración -unknown53=Mostrar nombres de usuarios unknown530=Presiona %s y haz clic en "Unirse" para unirte al juego unknown534=ESCAPAR unknown538=Botón de menú unknown551=Servidor (No disponible) unknown568=Peinado %d -unknown572=Modelos -unknown576=Sonidos -unknown59=Configuración inicial completa. (Desmarque y recomenza para reentrar) unknown622=Debes completar todos los requisitos. unknown626=Aceptar -unknown63=Tutorial comenzó unknown732= unknown736= unknown740=Observar diff --git a/locale/eu.ini b/locale/eu.ini index 359e9760..b84e9191 100644 --- a/locale/eu.ini +++ b/locale/eu.ini @@ -1,21 +1,21 @@ [hurrycurry] -c.controls.boost=Bultzada -c.controls.camera_down=Kamera behera biratu -c.controls.camera_left=Kamera ezkerrera biratu -c.controls.camera_reset=Berrezarri kamera -c.controls.camera_right=Kamera eskuinera biratu -c.controls.camera_up=Kamera gora biratu -c.controls.chat=Chat-a erakutsi/gorde -c.controls.fullscreen=Pantaila osoa gaitu/desgaitu -c.controls.interact=Eragin -c.controls.move_backward=Mugitu atzera -c.controls.move_forward=Mugitu aurrera -c.controls.move_left=Mugitu ezkerrera -c.controls.move_right=Mugitu eskuinera -c.controls.zoom_in=Handiagotu -c.controls.zoom_in_discrete=Handiagotu (diskretua) -c.controls.zoom_out=Txikiagotu -c.controls.zoom_out_discrete=Txikiagotu (diskretua) +c.settings.input.boost=Bultzada +c.settings.input.rotate_down=Kamera behera biratu +c.settings.input.rotate_left=Kamera ezkerrera biratu +c.settings.input.reset=Berrezarri kamera +c.settings.input.rotate_right=Kamera eskuinera biratu +c.settings.input.rotate_up=Kamera gora biratu +c.settings.input.chat=Chat-a erakutsi/gorde +c.settings.input.fullscreen=Pantaila osoa gaitu/desgaitu +c.settings.input.interact=Eragin +c.settings.input.backwards=Mugitu atzera +c.settings.input.forwards=Mugitu aurrera +c.settings.input.left=Mugitu ezkerrera +c.settings.input.right=Mugitu eskuinera +c.settings.input.zoom_in=Handiagotu +c.settings.input.zoom_in_discrete=Handiagotu (diskretua) +c.settings.input.zoom_out=Txikiagotu +c.settings.input.zoom_out_discrete=Txikiagotu (diskretua) c.credits.developed_by=garatzailea c.credits.thanks=Eskerrik asko jostatzeagatik c.credits.title=Hurry Curry! - sukaldaritza jokoa @@ -72,48 +72,48 @@ c.settings.audio=Audioa c.settings.audio.master_volume=Bolumen Orokorra c.settings.audio.music_volume=Musikaren Bolumena c.settings.audio.sfx_volume=Efektuen Bolumena -c.settings.controls=Kontrolak -c.settings.controls.add=Gehitu berria -c.settings.controls.joypad=%s (Agintea) -c.settings.controls.joypad_axis=Agintearen %s ardatza -c.settings.controls.keyboard=%s (Teklatua) -c.settings.controls.mouse_button=Saguaren %s botoia -c.settings.controls.other_event=Beste gertaerak -c.settings.controls.press_any_key=Sakatu edozein tekla... -c.settings.debug_info=Erakutsi arazte informazioa (FPS, etab.) -c.settings.fullscreen=Pantaila osoa -c.settings.fullscreen.always=Beti -c.settings.fullscreen.keep=Mantendu -c.settings.fullscreen.never=Inoiz ez +c.settings.input=Kontrolak +c.settings.input.add=Gehitu berria +c.settings.input.joypad=%s (Agintea) +c.settings.input.joypad_axis=Agintearen %s ardatza +c.settings.input.keyboard=%s (Teklatua) +c.settings.input.mouse_button=Saguaren %s botoia +c.settings.input.other_event=Beste gertaerak +c.settings.input.press_any_key=Sakatu edozein tekla... +c.settings.graphics.debug_info=Erakutsi arazte informazioa (FPS, etab.) +c.settings.graphics.fullscreen=Pantaila osoa +c.settings.graphics.fullscreen.always=Beti +c.settings.graphics.fullscreen.keep=Mantendu +c.settings.graphics.fullscreen.never=Inoiz ez c.settings.gameplay=Jokoa -c.settings.gameplay.extend_boost=Beti luzatu bultzada iraupen luzeenera -c.settings.gi=Argiztapen orokorra -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi=Voxel GI -c.settings.glow=Gaitu distira +c.settings.gameplay.latch_boost=Beti luzatu bultzada iraupen luzeenera +c.settings.graphics.gi=Argiztapen orokorra +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi=Voxel GI +c.settings.graphics.glow=Gaitu distira c.settings.graphics=Grafikoak c.settings.graphics.aa=Anti-aliasinga c.settings.graphics.ao=Giro oklusioa c.settings.graphics.taa=Anti-aliasing tenporala -c.settings.grass_amount=3D belar kopurua belar lauza bakoitzeko -c.settings.language=Hizkuntza -c.settings.language.system=Sistemaren berezkoak -c.settings.low_poly_trees=Low-poly zuhaitzak +c.settings.graphics.grass_amount=3D belar kopurua belar lauza bakoitzeko +c.settings.ui.language=Hizkuntza +c.settings.ui.language.system=Sistemaren berezkoak +c.settings.graphics.lq_trees=Low-poly zuhaitzak c.settings.other=Besteak -c.settings.preset_high=Altua -c.settings.preset_low=Baxua -c.settings.preset_medium=Erdikoa -c.settings.server_data=Zerbitzariaren datu direktorioa (hutsik utzi automatikoki bilatzeko) -c.settings.server_path=Zerbitzari exekutagarria (hutsik utzi PATH-en bilatzeko) -c.settings.server_path.placeholder=Sartu bidea -c.settings.shadows=Gaitu itzalak -c.settings.smooth_camera=Kamera biraketa leuna +c.settings.graphics.preset.high=Altua +c.settings.graphics.preset.low=Baxua +c.settings.graphics.preset.medium=Erdikoa +c.settings.other.server_data=Zerbitzariaren datu direktorioa (hutsik utzi automatikoki bilatzeko) +c.settings.other.server_binary=Zerbitzari exekutagarria (hutsik utzi PATH-en bilatzeko) +c.settings.other.server_binary.placeholder=Sartu bidea +c.settings.graphics.shadows=Gaitu itzalak +c.settings.gameplay.interpolate_camera_rotation=Kamera biraketa leuna c.settings.ui=Erab. Interfazea c.settings.ui.scale_factor=UI eskalatze faktorea c.settings.ui.scale_mode=UI eskalatze modua c.settings.ui.scale_mode.resize=Neurria aldatu c.settings.ui.touch_controls=Gaitu ukipen-pantaila kontrolak -c.settings.ui_blur=Gaitu UI lausotzea +c.settings.graphics.ui_blur=Gaitu UI lausotzea c.settings.username=Erabiltzaile izena c.setup.contract_title=LAN KONTRATUA c.setup.par00=Zure (langilea) eta Musterfoods Ltd. (enpresa)-ren arteko kontratu loteslea da hau, chef edo zerbitzari gisa lan egin dezazun. @@ -139,25 +139,25 @@ unknown464=- unknown476=SHIFT unknown484=ezker palanka unknown488=HUTSUNEA -unknown49=Kamera mugimendua alderantzikatu -unknown494=Sakatu %s objektuak hartzeko eta eutsi %s tresnekin lan egiteko +c.settings.gameplay.invert_camera=Kamera mugimendua alderantzikatu +c.hint.interact=Sakatu %s objektuak hartzeko eta eutsi %s tresnekin lan egiteko unknown506=PageUp/PageDown unknown510=Erabili %s kamera bista biratzeko unknown514=gezi teklak unknown518=eskuin palanka unknown524=Erabiltzaile etiketak ezarpenetan gaitu/desgaitu daitezke -unknown53=Erakutsi erabiltzaile izen etiketak +c.settings.gameplay.usernames=Erakutsi erabiltzaile izen etiketak unknown530=Sakatu %s eta klikatu "Batu" martxan dagoen joko batean batzeko unknown534=ESCAPE unknown538=Menu botoia unknown551=eskuraezina unknown568=%d orrazkera -unknown572=Modeloak -unknown576=Soinuak -unknown59=Hasierako konfigurazioa osatuta. (Marka kendu eta berrabiarazi berriz sartzeko) +c.credits.models=Modeloak +c.credits.sounds=Soinuak +c.settings.gameplay.setup_completed=Hasierako konfigurazioa osatuta. (Marka kendu eta berrabiarazi berriz sartzeko) unknown622=Eskatutako eremu guztiak bete behar dituzu. unknown626=Onartu -unknown63=Tutoriala hasi da +c.settings.gameplay.tutorial_started=Tutoriala hasi da unknown732=Aurrekoa unknown736=Hurrengoa unknown740=Batu / Ikusi diff --git a/locale/fi.ini b/locale/fi.ini index 8b8996a8..322a0fa8 100644 --- a/locale/fi.ini +++ b/locale/fi.ini @@ -1,21 +1,21 @@ [hurrycurry] -c.controls.boost= -c.controls.camera_down= -c.controls.camera_left= -c.controls.camera_reset= -c.controls.camera_right= -c.controls.camera_up= -c.controls.chat= -c.controls.fullscreen= -c.controls.interact= -c.controls.move_backward= -c.controls.move_forward= -c.controls.move_left= -c.controls.move_right= -c.controls.zoom_in= -c.controls.zoom_in_discrete= -c.controls.zoom_out= -c.controls.zoom_out_discrete= +c.settings.input.boost= +c.settings.input.rotate_down= +c.settings.input.rotate_left= +c.settings.input.reset= +c.settings.input.rotate_right= +c.settings.input.rotate_up= +c.settings.input.chat= +c.settings.input.fullscreen= +c.settings.input.interact= +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= c.credits.developed_by= c.credits.thanks= c.credits.title= @@ -72,48 +72,48 @@ c.settings.audio= c.settings.audio.master_volume= c.settings.audio.music_volume= c.settings.audio.sfx_volume= -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button= -c.settings.controls.other_event= -c.settings.controls.press_any_key= -c.settings.debug_info= -c.settings.fullscreen= -c.settings.fullscreen.always= -c.settings.fullscreen.keep= -c.settings.fullscreen.never= +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= +c.settings.input.other_event= +c.settings.input.press_any_key= +c.settings.graphics.debug_info= +c.settings.graphics.fullscreen= +c.settings.graphics.fullscreen.always= +c.settings.graphics.fullscreen.keep= +c.settings.graphics.fullscreen.never= c.settings.gameplay= -c.settings.gameplay.extend_boost= -c.settings.gi= -c.settings.gi.sdfgi= -c.settings.gi.voxelgi= -c.settings.glow= +c.settings.gameplay.latch_boost= +c.settings.graphics.gi= +c.settings.graphics.gi.sdfgi= +c.settings.graphics.gi.voxelgi= +c.settings.graphics.glow= c.settings.graphics= c.settings.graphics.aa= c.settings.graphics.ao= c.settings.graphics.taa= -c.settings.grass_amount= -c.settings.language= -c.settings.language.system= -c.settings.low_poly_trees= +c.settings.graphics.grass_amount= +c.settings.ui.language= +c.settings.ui.language.system= +c.settings.graphics.lq_trees= c.settings.other= -c.settings.preset_high= -c.settings.preset_low= -c.settings.preset_medium= -c.settings.server_data= -c.settings.server_path= -c.settings.server_path.placeholder= -c.settings.shadows= -c.settings.smooth_camera= +c.settings.graphics.preset.high= +c.settings.graphics.preset.low= +c.settings.graphics.preset.medium= +c.settings.other.server_data= +c.settings.other.server_binary= +c.settings.other.server_binary.placeholder= +c.settings.graphics.shadows= +c.settings.gameplay.interpolate_camera_rotation= c.settings.ui= c.settings.ui.scale_factor= c.settings.ui.scale_mode= c.settings.ui.scale_mode.resize= c.settings.ui.touch_controls= -c.settings.ui_blur= +c.settings.graphics.ui_blur= c.settings.username= c.setup.contract_title= c.setup.par00= @@ -139,25 +139,25 @@ unknown464= unknown476= unknown484= unknown488= -unknown49= -unknown494= +c.settings.gameplay.invert_camera= +c.hint.interact= unknown506= unknown510= unknown514= unknown518= unknown524= -unknown53= +c.settings.gameplay.usernames= unknown530= unknown534= unknown538= unknown551= unknown568= -unknown572= -unknown576= -unknown59= +c.credits.models= +c.credits.sounds= +c.settings.gameplay.setup_completed= unknown622= unknown626= -unknown63= +c.settings.gameplay.tutorial_started= unknown732= unknown736= unknown740= diff --git a/locale/fr.ini b/locale/fr.ini index 157c56fa..4ae4a305 100644 --- a/locale/fr.ini +++ b/locale/fr.ini @@ -1,21 +1,21 @@ [hurrycurry] -c.controls.boost= -c.controls.camera_down= -c.controls.camera_left= -c.controls.camera_reset=Utilisez %s pour réinitialiser la caméra -c.controls.camera_right= -c.controls.camera_up= -c.controls.chat= -c.controls.fullscreen=Plein écran -c.controls.interact=Entrez le chemin -c.controls.move_backward= -c.controls.move_forward= -c.controls.move_left= -c.controls.move_right= -c.controls.zoom_in= -c.controls.zoom_in_discrete= -c.controls.zoom_out= -c.controls.zoom_out_discrete= +c.settings.input.boost= +c.settings.input.rotate_down= +c.settings.input.rotate_left= +c.settings.input.reset=Utilisez %s 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= c.credits.developed_by=développé par c.credits.thanks=Merci d’avoir joué c.credits.title=Hurry Curry! - un jeu sur la cuisine @@ -72,48 +72,48 @@ 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.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button=Bouton de menu -c.settings.controls.other_event= -c.settings.controls.press_any_key= -c.settings.debug_info=Montrer les informations de débogage (Fréquence d’images, etc.) -c.settings.fullscreen=Plein écran -c.settings.fullscreen.always=Toujours -c.settings.fullscreen.keep=Garder -c.settings.fullscreen.never=Jamais +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.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.extend_boost=Toujours prolonger le boost jusqu’à la durée maximale -c.settings.gi=Luminosité générale -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi=IG Voxel -c.settings.glow=Activer la lueur +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.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi=IG Voxel +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.grass_amount=Quantité d’herbe 3D par tuile d’herbe -c.settings.language=Langue -c.settings.language.system=Défaut du système -c.settings.low_poly_trees=Arbres de quelques polygones +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.preset_high=Élevé -c.settings.preset_low=Faible -c.settings.preset_medium=Moyen -c.settings.server_data=Répertoire de données du serveur (laisser vide pour la détection automatique) -c.settings.server_path=Binaire du serveur (laisser vide pour rechercher le chemin) -c.settings.server_path.placeholder=Entrez le chemin -c.settings.shadows=Activer les ombres -c.settings.smooth_camera=Interpoler la rotation de la caméra +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.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.touch_controls=Activer les commandes de l’écran tactile -c.settings.ui_blur=Activer le flou dans l’interface utilisateus +c.settings.graphics.ui_blur=Activer le flou dans l’interface utilisateus c.settings.username=Nom d’utilisateur c.setup.contract_title=CONTRAT DE TRAVAIL c.setup.par00=Ce contrat légal est rédigé entre vous (l’employé) et Musterfoods Ltd. (l’employeur) pour travailler comme chef ou serveur. @@ -139,25 +139,25 @@ unknown464=- unknown476=MAJUSCULE unknown484=stick gauche unknown488=BARRE D’ESPACE -unknown49=Inverser le mouvement de caméra -unknown494=Appuyez sur %s pour attraper des objets et maintenez %s enfoncé pour interagir avec les outils +c.settings.gameplay.invert_camera=Inverser le mouvement de caméra +c.hint.interact=Appuyez sur %s pour attraper des objets et maintenez %s enfoncé pour interagir avec les outils unknown506=Page précédente/Page suivante unknown510=Utilisez %s 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 -unknown53=Montrer les noms d’utilisateur +c.settings.gameplay.usernames=Montrer les noms d’utilisateur unknown530=Appuyez sur %s et cliquez sur "Rejoindre" pour rejoindre le partie lorsqu’elle est en route unknown534=ÉCHAP unknown538=Bouton de menu unknown551=Serveur (Indisponible) unknown568=Coiffure %d -unknown572=Modèles -unknown576=Sons -unknown59=Configuration initiale terminée. (Décochez et recommencer pour entrer à nouveau) +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. unknown626=Accepter -unknown63=Tutoriel commencé +c.settings.gameplay.tutorial_started=Tutoriel commencé unknown732= unknown736= unknown740=Regarder diff --git a/locale/he.ini b/locale/he.ini index 24141707..e27de6c9 100644 --- a/locale/he.ini +++ b/locale/he.ini @@ -1,21 +1,21 @@ [hurrycurry] -c.controls.boost= -c.controls.camera_down= -c.controls.camera_left= -c.controls.camera_reset=לחצו %s על מנת לאפס את מיקום המצלמה -c.controls.camera_right= -c.controls.camera_up= -c.controls.chat= -c.controls.fullscreen=מסך מלא -c.controls.interact=הכנס נתיב -c.controls.move_backward= -c.controls.move_forward= -c.controls.move_left= -c.controls.move_right= -c.controls.zoom_in= -c.controls.zoom_in_discrete= -c.controls.zoom_out= -c.controls.zoom_out_discrete= +c.settings.input.boost= +c.settings.input.rotate_down= +c.settings.input.rotate_left= +c.settings.input.reset=לחצו %s על מנת לאפס את מיקום המצלמה +c.settings.input.rotate_right= +c.settings.input.rotate_up= +c.settings.input.chat= +c.settings.input.fullscreen=מסך מלא +c.settings.input.interact=הכנס נתיב +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= c.credits.developed_by=פותח על ידי c.credits.thanks=תודה ששיחקתם c.credits.title=הרי קרי! - משחק בישול @@ -72,48 +72,48 @@ c.settings.audio= c.settings.audio.master_volume= c.settings.audio.music_volume= c.settings.audio.sfx_volume= -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button=כפתור התפריט -c.settings.controls.other_event= -c.settings.controls.press_any_key= -c.settings.debug_info= -c.settings.fullscreen=מסך מלא -c.settings.fullscreen.always=תמיד -c.settings.fullscreen.keep=שמור -c.settings.fullscreen.never=אף פעם +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=כפתור התפריט +c.settings.input.other_event= +c.settings.input.press_any_key= +c.settings.graphics.debug_info= +c.settings.graphics.fullscreen=מסך מלא +c.settings.graphics.fullscreen.always=תמיד +c.settings.graphics.fullscreen.keep=שמור +c.settings.graphics.fullscreen.never=אף פעם c.settings.gameplay= -c.settings.gameplay.extend_boost=תמיד הארך דחיפה לזמן המירבי -c.settings.gi=תאורה גלובאלית -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi= -c.settings.glow=אפשר זוהר +c.settings.gameplay.latch_boost=תמיד הארך דחיפה לזמן המירבי +c.settings.graphics.gi=תאורה גלובאלית +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi= +c.settings.graphics.glow=אפשר זוהר c.settings.graphics=גרפיקה c.settings.graphics.aa=אנטי אליאסינג c.settings.graphics.ao=ספיגה סביבתית c.settings.graphics.taa= -c.settings.grass_amount=כמות דשא תלת מימדית לכל אריח דשא -c.settings.language=שפה -c.settings.language.system=ברירת מחדל -c.settings.low_poly_trees= +c.settings.graphics.grass_amount=כמות דשא תלת מימדית לכל אריח דשא +c.settings.ui.language=שפה +c.settings.ui.language.system=ברירת מחדל +c.settings.graphics.lq_trees= c.settings.other= -c.settings.preset_high=גבוה -c.settings.preset_low=נמוך -c.settings.preset_medium= -c.settings.server_data=תקיית המידע של השרת (השאר ריק על מנת לזהות אוטומטית) -c.settings.server_path=קובץ הרצה של השרת (השאר ריק על מנת לחפש ב PATH) -c.settings.server_path.placeholder=הכנס נתיב -c.settings.shadows=אפשר צללים -c.settings.smooth_camera= +c.settings.graphics.preset.high=גבוה +c.settings.graphics.preset.low=נמוך +c.settings.graphics.preset.medium= +c.settings.other.server_data=תקיית המידע של השרת (השאר ריק על מנת לזהות אוטומטית) +c.settings.other.server_binary=קובץ הרצה של השרת (השאר ריק על מנת לחפש ב PATH) +c.settings.other.server_binary.placeholder=הכנס נתיב +c.settings.graphics.shadows=אפשר צללים +c.settings.gameplay.interpolate_camera_rotation= c.settings.ui=שם משתמש c.settings.ui.scale_factor= c.settings.ui.scale_mode= c.settings.ui.scale_mode.resize=שנה גודל c.settings.ui.touch_controls=אפשר מסך מגע -c.settings.ui_blur= +c.settings.graphics.ui_blur= c.settings.username=שם משתמש c.setup.contract_title=חוזה מעביד c.setup.par00=מסמך זה הינו חוזה המחייב בינך (העובד) ומאסטרפוד בע"מ (המעביד) על מנת לעבוד כשף או מלצר. @@ -139,25 +139,25 @@ unknown464= unknown476=SHIFT unknown484=ג'ויסטיק שמאלי unknown488=רווח -unknown49=הפוך תזוזת מצלמה -unknown494= +c.settings.gameplay.invert_camera=הפוך תזוזת מצלמה +c.hint.interact= unknown506=PageUp/PageDown unknown510= unknown514=חיצים unknown518=ג'ויסטיק ימני unknown524= -unknown53=הראה שמות משתמשים +c.settings.gameplay.usernames=הראה שמות משתמשים unknown530= unknown534=Escape unknown538=כפתור התפריט unknown551= unknown568=תספורת %d -unknown572=מודלים -unknown576= -unknown59=אתחול ראשוני נגמר. (הורד סימון והדלק מחדש על מנת להכנס מחדש) +c.credits.models=מודלים +c.credits.sounds= +c.settings.gameplay.setup_completed=אתחול ראשוני נגמר. (הורד סימון והדלק מחדש על מנת להכנס מחדש) unknown622=אנא מלאו את כל השדות הנדרשים. unknown626=אשר -unknown63=הדרכה התחילה +c.settings.gameplay.tutorial_started=הדרכה התחילה unknown732= unknown736= unknown740=צפייה diff --git a/locale/ja.ini b/locale/ja.ini index 90f4a187..dc286bb5 100644 --- a/locale/ja.ini +++ b/locale/ja.ini @@ -1,21 +1,21 @@ [hurrycurry] -c.controls.boost= -c.controls.camera_down= -c.controls.camera_left= -c.controls.camera_reset=カメラをリセットするには %s を使用して -c.controls.camera_right= -c.controls.camera_up= -c.controls.chat= -c.controls.fullscreen=全画面 -c.controls.interact=パスを入力 -c.controls.move_backward= -c.controls.move_forward= -c.controls.move_left= -c.controls.move_right= -c.controls.zoom_in= -c.controls.zoom_in_discrete= -c.controls.zoom_out= -c.controls.zoom_out_discrete= +c.settings.input.boost= +c.settings.input.rotate_down= +c.settings.input.rotate_left= +c.settings.input.reset=カメラをリセットするには %s を使用して +c.settings.input.rotate_right= +c.settings.input.rotate_up= +c.settings.input.chat= +c.settings.input.fullscreen=全画面 +c.settings.input.interact=パスを入力 +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= c.credits.developed_by=開発者 c.credits.thanks=プレイしていただきありがとうございます c.credits.title=Hurry Curry!料理に関するゲーム @@ -72,48 +72,48 @@ c.settings.audio= c.settings.audio.master_volume=音量 c.settings.audio.music_volume=音量 c.settings.audio.sfx_volume=音量 -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button=メニューボタン -c.settings.controls.other_event= -c.settings.controls.press_any_key= -c.settings.debug_info=デバッグ情報を表示(フレームレートなど) -c.settings.fullscreen=全画面 -c.settings.fullscreen.always=いつも -c.settings.fullscreen.keep=保つ -c.settings.fullscreen.never=決して +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=メニューボタン +c.settings.input.other_event= +c.settings.input.press_any_key= +c.settings.graphics.debug_info=デバッグ情報を表示(フレームレートなど) +c.settings.graphics.fullscreen=全画面 +c.settings.graphics.fullscreen.always=いつも +c.settings.graphics.fullscreen.keep=保つ +c.settings.graphics.fullscreen.never=決して c.settings.gameplay= -c.settings.gameplay.extend_boost=ブーストを常に最大限に拡張する -c.settings.gi=グローバルイルミネーション -c.settings.gi.sdfgi=SDFGI -c.settings.gi.voxelgi=Voxel GI -c.settings.glow=グローを有効に +c.settings.gameplay.latch_boost=ブーストを常に最大限に拡張する +c.settings.graphics.gi=グローバルイルミネーション +c.settings.graphics.gi.sdfgi=SDFGI +c.settings.graphics.gi.voxelgi=Voxel GI +c.settings.graphics.glow=グローを有効に c.settings.graphics=グラフィックス c.settings.graphics.aa=アンチエイリアシング c.settings.graphics.ao=アンビエントオクルージョン c.settings.graphics.taa=テンポラルアンチエイリアシング -c.settings.grass_amount=芝生タイルあたりの3D芝生 -c.settings.language=言語 -c.settings.language.system=システムのデフォルト -c.settings.low_poly_trees=ローポリ木 +c.settings.graphics.grass_amount=芝生タイルあたりの3D芝生 +c.settings.ui.language=言語 +c.settings.ui.language.system=システムのデフォルト +c.settings.graphics.lq_trees=ローポリ木 c.settings.other= -c.settings.preset_high=高 -c.settings.preset_low=悪い -c.settings.preset_medium=正常 -c.settings.server_data=サーバーデータディレクトリ(させて空の -> 自動検出) -c.settings.server_path=サーバーバイナリ(させて空の ->「パス」) -c.settings.server_path.placeholder=パスを入力 -c.settings.shadows=影を有効に -c.settings.smooth_camera=カメラの回転を補間 +c.settings.graphics.preset.high=高 +c.settings.graphics.preset.low=悪い +c.settings.graphics.preset.medium=正常 +c.settings.other.server_data=サーバーデータディレクトリ(させて空の -> 自動検出) +c.settings.other.server_binary=サーバーバイナリ(させて空の ->「パス」) +c.settings.other.server_binary.placeholder=パスを入力 +c.settings.graphics.shadows=影を有効に +c.settings.gameplay.interpolate_camera_rotation=カメラの回転を補間 c.settings.ui=ユーザー名 c.settings.ui.scale_factor=UIスケール c.settings.ui.scale_mode=UIスケール c.settings.ui.scale_mode.resize=サイズ変更 c.settings.ui.touch_controls=タッチスクリーンコントロールを有効に -c.settings.ui_blur=グローを有効に +c.settings.graphics.ui_blur=グローを有効に c.settings.username=ユーザー名 c.setup.contract_title=「雇用契約」 c.setup.par00=これは雇用契約。あなた【 従業員】と Musterfoods Ltd.【雇用主】の間のシェフやウェイターとして働く。 @@ -139,25 +139,25 @@ unknown464=- unknown476=「シフト」 unknown484=左スティック unknown488=「スペース」 -unknown49=カメラの動きを反転 -unknown494=%s キーを押すとアイテムを拾い、 %s キーを押したままにするとツールを操作できます +c.settings.gameplay.invert_camera=カメラの動きを反転 +c.hint.interact=%s キーを押すとアイテムを拾い、 %s キーを押したままにするとツールを操作できます unknown506=ページアップ/ページダウン unknown510=カメラをリセットするには %s を使用して unknown514=矢印キー unknown518=右スティック unknown524=ユーザー名は設定で有効/無効にできます -unknown53=ユーザー名を表示 +c.settings.gameplay.usernames=ユーザー名を表示 unknown530=ゲームに参加するには、 %s を押して「参加」をクリック unknown534=「エスケープ」 unknown538=メニューボタン unknown551=利用不可 unknown568=髪型 %d -unknown572=モデル -unknown576=サウンド -unknown59=初期設定完了。(チェックを外して再起動して) +c.credits.models=モデル +c.credits.sounds=サウンド +c.settings.gameplay.setup_completed=初期設定完了。(チェックを外して再起動して) unknown622=要求されたフィールドをすべて入力する必要があります。 unknown626=アクセプト -unknown63=チュートリアルを開始 +c.settings.gameplay.tutorial_started=チュートリアルを開始 unknown732= unknown736= unknown740=観戦 diff --git a/locale/pl.ini b/locale/pl.ini index a51b29b5..2fcc0e17 100644 --- a/locale/pl.ini +++ b/locale/pl.ini @@ -1,21 +1,21 @@ [hurrycurry] -c.controls.boost= -c.controls.camera_down= -c.controls.camera_left= -c.controls.camera_reset=Użyj %s aby obrócić kamerę -c.controls.camera_right= -c.controls.camera_up= -c.controls.chat= -c.controls.fullscreen=Pełny ekran -c.controls.interact=Podaj ścieżkę -c.controls.move_backward= -c.controls.move_forward= -c.controls.move_left= -c.controls.move_right= -c.controls.zoom_in= -c.controls.zoom_in_discrete= -c.controls.zoom_out= -c.controls.zoom_out_discrete= +c.settings.input.boost= +c.settings.input.rotate_down= +c.settings.input.rotate_left= +c.settings.input.reset=Użyj %s aby obrócić kamerę +c.settings.input.rotate_right= +c.settings.input.rotate_up= +c.settings.input.rotate_chat= +c.settings.input.fullscreen=Pełny ekran +c.settings.input.interact=Podaj ścieżkę +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= c.credits.developed_by=stworzone przez c.credits.thanks=Dziękujemy za grę c.credits.title=Hurry Curry! - gra o gotowaniu @@ -72,48 +72,48 @@ c.settings.audio= c.settings.audio.master_volume=Głośność główna c.settings.audio.music_volume=Głośność muzyki c.settings.audio.sfx_volume=Głośność efektów dźwiękowych -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button=przycisk menu -c.settings.controls.other_event= -c.settings.controls.press_any_key= -c.settings.debug_info=Wyświetlaj informacje debugowania (częstość klatek itp.) -c.settings.fullscreen=Pełny ekran -c.settings.fullscreen.always=Zawsze -c.settings.fullscreen.keep=Zachowaj -c.settings.fullscreen.never=Nigdy +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=przycisk menu +c.settings.input.other_event= +c.settings.input.press_any_key= +c.settings.graphics.debug_info=Wyświetlaj informacje debugowania (częstość klatek itp.) +c.settings.graphics.fullscreen=Pełny ekran +c.settings.graphics.fullscreen.always=Zawsze +c.settings.graphics.fullscreen.keep=Zachowaj +c.settings.graphics.fullscreen.never=Nigdy c.settings.gameplay= -c.settings.gameplay.extend_boost=Zawsze wydłużaj przyspieszenie do maksymalnego czasu trwania -c.settings.gi=Globalne oświetlenie -c.settings.gi.sdfgi=SDF -c.settings.gi.voxelgi=Oświetlenie wokselowe -c.settings.glow=Połysk +c.settings.gameplay.latch_boost=Zawsze wydłużaj przyspieszenie do maksymalnego czasu trwania +c.settings.graphics.gi=Globalne oświetlenie +c.settings.graphics.gi.sdfgi=SDF +c.settings.graphics.gi.voxelgi=Oświetlenie wokselowe +c.settings.graphics.glow=Połysk c.settings.graphics=Ustawienia grafiki c.settings.graphics.aa=Antyaliasing c.settings.graphics.ao=Okluzja otoczenia c.settings.graphics.taa=Antyaliasing temporalny -c.settings.grass_amount=Gęstość trawy 3D -c.settings.language=Język -c.settings.language.system=Domyślny systemowy -c.settings.low_poly_trees=Drzewa low-poly +c.settings.graphics.grass_amount=Gęstość trawy 3D +c.settings.ui.language=Język +c.settings.ui.language.system=Domyślny systemowy +c.settings.graphics.lq_trees=Drzewa low-poly c.settings.other= -c.settings.preset_high=Wysokie -c.settings.preset_low=Niskie -c.settings.preset_medium=Średnie -c.settings.server_data=Folder danych serwera (pozostaw puste aby wykryć automatycznie) -c.settings.server_path=Plik wykonywalny serwera (pozostaw puste aby przeszukać ścieżkę PATH) -c.settings.server_path.placeholder=Podaj ścieżkę -c.settings.shadows=Cienie -c.settings.smooth_camera=Gładki obrót kamery +c.settings.graphics.preset.high=Wysokie +c.settings.graphics.preset.low=Niskie +c.settings.graphics.preset.medium=Średnie +c.settings.other.server_data=Folder danych serwera (pozostaw puste aby wykryć automatycznie) +c.settings.other.server_binary=Plik wykonywalny serwera (pozostaw puste aby przeszukać ścieżkę PATH) +c.settings.other.server_binary.placeholder=Podaj ścieżkę +c.settings.graphics.shadows=Cienie +c.settings.gameplay.interpolate_camera_rotation=Gładki obrót kamery c.settings.ui=Nazwa użytkownika c.settings.ui.scale_factor=Stopień skalowania interfejsu c.settings.ui.scale_mode=Skalowanie interfejsu c.settings.ui.scale_mode.resize=Dopasuj c.settings.ui.touch_controls=Sterowanie dotykowe -c.settings.ui_blur=Rozmycie interfejsu +c.settings.graphics.ui_blur=Rozmycie interfejsu c.settings.username=Nazwa użytkownika c.setup.contract_title=UMOWA ZATRUDNIENIA c.setup.par00=Niniejszy dokument stanowi umowę między Panem/Panią (zatrudnionym) a Musterfoods sp. z o. o. (pracodawcą) na stanowisku kucharz/kelner. @@ -139,25 +139,25 @@ unknown464=- unknown476=SHIFT unknown484=lewy dżojstik unknown488=SPACJA -unknown49=Odwrócone sterowanie kamerą -unknown494=Wciśnij %s aby podnieść przedmioty i przytrzymaj %s aby użyć narzędzia +c.settings.gameplay.invert_camera=Odwrócone sterowanie kamerą +c.hint.interact=Wciśnij %s aby podnieść przedmioty i przytrzymaj %s aby użyć narzędzia unknown506=PageUp/PageDown unknown510=Użyj %s aby obrócić kamerę unknown514=klawisze strzałek unknown518=prawy dżojstik unknown524=Tagi z nazwą użytkownika możesz włączyć/wyłączyć w ustawieniach -unknown53=Pokazywanie tagów z nazwą użytkownika +c.settings.gameplay.usernames=Pokazywanie tagów z nazwą użytkownika unknown530=Wciśnij %s i wybierz "Dołącz" aby dołączyć do gry w toku unknown534=ESCAPE unknown538=przycisk menu unknown551=niedostępne unknown568=Fryzura %d -unknown572=Modele -unknown576=Oprawa dźwiękowa -unknown59=Konfiguracja wstępna ukończona. (Odznacz i zrestartuj aby wykonać ponownie) +c.credits.models=Modele +c.credits.sounds=Oprawa dźwiękowa +c.settings.gameplay.setup_completed=Konfiguracja wstępna ukończona. (Odznacz i zrestartuj aby wykonać ponownie) unknown622=Musisz wypełnić wymagane pola. unknown626=Zatwierdź -unknown63=Tutorial rozpoczęty +c.settings.gameplay.tutorial_started=Tutorial rozpoczęty unknown732= unknown736= unknown740=Oglądaj diff --git a/locale/pt.ini b/locale/pt.ini index 8b8996a8..322a0fa8 100644 --- a/locale/pt.ini +++ b/locale/pt.ini @@ -1,21 +1,21 @@ [hurrycurry] -c.controls.boost= -c.controls.camera_down= -c.controls.camera_left= -c.controls.camera_reset= -c.controls.camera_right= -c.controls.camera_up= -c.controls.chat= -c.controls.fullscreen= -c.controls.interact= -c.controls.move_backward= -c.controls.move_forward= -c.controls.move_left= -c.controls.move_right= -c.controls.zoom_in= -c.controls.zoom_in_discrete= -c.controls.zoom_out= -c.controls.zoom_out_discrete= +c.settings.input.boost= +c.settings.input.rotate_down= +c.settings.input.rotate_left= +c.settings.input.reset= +c.settings.input.rotate_right= +c.settings.input.rotate_up= +c.settings.input.chat= +c.settings.input.fullscreen= +c.settings.input.interact= +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= c.credits.developed_by= c.credits.thanks= c.credits.title= @@ -72,48 +72,48 @@ c.settings.audio= c.settings.audio.master_volume= c.settings.audio.music_volume= c.settings.audio.sfx_volume= -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button= -c.settings.controls.other_event= -c.settings.controls.press_any_key= -c.settings.debug_info= -c.settings.fullscreen= -c.settings.fullscreen.always= -c.settings.fullscreen.keep= -c.settings.fullscreen.never= +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= +c.settings.input.other_event= +c.settings.input.press_any_key= +c.settings.graphics.debug_info= +c.settings.graphics.fullscreen= +c.settings.graphics.fullscreen.always= +c.settings.graphics.fullscreen.keep= +c.settings.graphics.fullscreen.never= c.settings.gameplay= -c.settings.gameplay.extend_boost= -c.settings.gi= -c.settings.gi.sdfgi= -c.settings.gi.voxelgi= -c.settings.glow= +c.settings.gameplay.latch_boost= +c.settings.graphics.gi= +c.settings.graphics.gi.sdfgi= +c.settings.graphics.gi.voxelgi= +c.settings.graphics.glow= c.settings.graphics= c.settings.graphics.aa= c.settings.graphics.ao= c.settings.graphics.taa= -c.settings.grass_amount= -c.settings.language= -c.settings.language.system= -c.settings.low_poly_trees= +c.settings.graphics.grass_amount= +c.settings.ui.language= +c.settings.ui.language.system= +c.settings.graphics.lq_trees= c.settings.other= -c.settings.preset_high= -c.settings.preset_low= -c.settings.preset_medium= -c.settings.server_data= -c.settings.server_path= -c.settings.server_path.placeholder= -c.settings.shadows= -c.settings.smooth_camera= +c.settings.graphics.preset.high= +c.settings.graphics.preset.low= +c.settings.graphics.preset.medium= +c.settings.other.server_data= +c.settings.other.server_binary= +c.settings.other.server_binary.placeholder= +c.settings.graphics.shadows= +c.settings.gameplay.interpolate_camera_rotation= c.settings.ui= c.settings.ui.scale_factor= c.settings.ui.scale_mode= c.settings.ui.scale_mode.resize= c.settings.ui.touch_controls= -c.settings.ui_blur= +c.settings.graphics.ui_blur= c.settings.username= c.setup.contract_title= c.setup.par00= @@ -139,25 +139,25 @@ unknown464= unknown476= unknown484= unknown488= -unknown49= -unknown494= +c.settings.gameplay.invert_camera= +c.hint.interact= unknown506= unknown510= unknown514= unknown518= unknown524= -unknown53= +c.settings.gameplay.usernames= unknown530= unknown534= unknown538= unknown551= unknown568= -unknown572= -unknown576= -unknown59= +c.credits.models= +c.credits.sounds= +c.settings.gameplay.setup_completed= unknown622= unknown626= -unknown63= +c.settings.gameplay.tutorial_started= unknown732= unknown736= unknown740= diff --git a/locale/tools/src/main.rs b/locale/tools/src/main.rs index 1ae59c83..68805b99 100644 --- a/locale/tools/src/main.rs +++ b/locale/tools/src/main.rs @@ -26,11 +26,30 @@ enum Args { ExportPo { #[arg(long)] remap_ids: Option<PathBuf>, + #[arg(long)] + fallback: Option<PathBuf>, input: PathBuf, output: PathBuf, }, } +static NATIVE_LANGUAGE_NAMES: &[(&'static str, &'static str)] = &[ + ("en", "English"), + ("de", "Deutsch"), + ("fr", "Français"), + ("es", "Español"), + ("eu", "euskara"), + ("ja", "日本語"), + ("he", "עִברִית"), + ("tr", "Türkçe"), + ("fi", "suomen"), + ("ar", "العربية"), + ("zh_Hans", "中文 (简化字)"), + ("zh_Hant", "中文 (繁體字)"), + ("pl", "Polski"), + ("pt", "Português"), +]; + fn main() -> Result<()> { let args = Args::parse(); match args { @@ -38,9 +57,23 @@ fn main() -> Result<()> { remap_ids: id_map, input, output, + fallback, } => { - let ini = load_ini(&input)?; + let mut ini = load_ini(&input)?; let id_map = id_map.map(|path| load_ini(&path)).transpose()?; + if let Some(fallback) = fallback { + let f = load_ini(&fallback)?; + for (k, v) in f { + if !ini.contains_key(&k) { + eprintln!("fallback: key {k:?} is missing"); + ini.insert(k, v); + } + } + } + + for &(code, name) in NATIVE_LANGUAGE_NAMES { + ini.insert(format!("c.settings.ui.language.{code}"), name.to_owned()); + } File::create(output)?.write_all( format!( diff --git a/locale/tr.ini b/locale/tr.ini index 8b8996a8..322a0fa8 100644 --- a/locale/tr.ini +++ b/locale/tr.ini @@ -1,21 +1,21 @@ [hurrycurry] -c.controls.boost= -c.controls.camera_down= -c.controls.camera_left= -c.controls.camera_reset= -c.controls.camera_right= -c.controls.camera_up= -c.controls.chat= -c.controls.fullscreen= -c.controls.interact= -c.controls.move_backward= -c.controls.move_forward= -c.controls.move_left= -c.controls.move_right= -c.controls.zoom_in= -c.controls.zoom_in_discrete= -c.controls.zoom_out= -c.controls.zoom_out_discrete= +c.settings.input.boost= +c.settings.input.rotate_down= +c.settings.input.rotate_left= +c.settings.input.reset= +c.settings.input.rotate_right= +c.settings.input.rotate_up= +c.settings.input.chat= +c.settings.input.fullscreen= +c.settings.input.interact= +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= c.credits.developed_by= c.credits.thanks= c.credits.title= @@ -72,48 +72,48 @@ c.settings.audio= c.settings.audio.master_volume= c.settings.audio.music_volume= c.settings.audio.sfx_volume= -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button= -c.settings.controls.other_event= -c.settings.controls.press_any_key= -c.settings.debug_info= -c.settings.fullscreen= -c.settings.fullscreen.always= -c.settings.fullscreen.keep= -c.settings.fullscreen.never= +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= +c.settings.input.other_event= +c.settings.input.press_any_key= +c.settings.graphics.debug_info= +c.settings.graphics.fullscreen= +c.settings.graphics.fullscreen.always= +c.settings.graphics.fullscreen.keep= +c.settings.graphics.fullscreen.never= c.settings.gameplay= -c.settings.gameplay.extend_boost= -c.settings.gi= -c.settings.gi.sdfgi= -c.settings.gi.voxelgi= -c.settings.glow= +c.settings.gameplay.latch_boost= +c.settings.graphics.gi= +c.settings.graphics.gi.sdfgi= +c.settings.graphics.gi.voxelgi= +c.settings.graphics.glow= c.settings.graphics= c.settings.graphics.aa= c.settings.graphics.ao= c.settings.graphics.taa= -c.settings.grass_amount= -c.settings.language= -c.settings.language.system= -c.settings.low_poly_trees= +c.settings.graphics.grass_amount= +c.settings.ui.language= +c.settings.ui.language.system= +c.settings.graphics.lq_trees= c.settings.other= -c.settings.preset_high= -c.settings.preset_low= -c.settings.preset_medium= -c.settings.server_data= -c.settings.server_path= -c.settings.server_path.placeholder= -c.settings.shadows= -c.settings.smooth_camera= +c.settings.graphics.preset.high= +c.settings.graphics.preset.low= +c.settings.graphics.preset.medium= +c.settings.other.server_data= +c.settings.other.server_binary= +c.settings.other.server_binary.placeholder= +c.settings.graphics.shadows= +c.settings.gameplay.interpolate_camera_rotation= c.settings.ui= c.settings.ui.scale_factor= c.settings.ui.scale_mode= c.settings.ui.scale_mode.resize= c.settings.ui.touch_controls= -c.settings.ui_blur= +c.settings.graphics.ui_blur= c.settings.username= c.setup.contract_title= c.setup.par00= @@ -139,25 +139,25 @@ unknown464= unknown476= unknown484= unknown488= -unknown49= -unknown494= +c.settings.gameplay.invert_camera= +c.hint.interact= unknown506= unknown510= unknown514= unknown518= unknown524= -unknown53= +c.settings.gameplay.usernames= unknown530= unknown534= unknown538= unknown551= unknown568= -unknown572= -unknown576= -unknown59= +c.credits.models= +c.credits.sounds= +c.settings.gameplay.setup_completed= unknown622= unknown626= -unknown63= +c.settings.gameplay.tutorial_started= unknown732= unknown736= unknown740= diff --git a/locale/zh_Hans.ini b/locale/zh_Hans.ini index 3042b7ec..5ea728f5 100644 --- a/locale/zh_Hans.ini +++ b/locale/zh_Hans.ini @@ -1,45 +1,48 @@ [hurrycurry] -c.controls.boost=加速移动 -c.controls.camera_down=向下旋转摄像头 -c.controls.camera_left=向左旋转摄像头 -c.controls.camera_reset=重置摄像头视图 -c.controls.camera_right=向右旋转摄像头 -c.controls.camera_up=向上旋转摄像头 -c.controls.chat=切换聊天 -c.controls.fullscreen=切换全屏 -c.controls.interact=交互 -c.controls.move_backward=向后移动 -c.controls.move_forward=向前移动 -c.controls.move_left=向左移动 -c.controls.move_right=向右移动 -c.controls.zoom_in=放大 -c.controls.zoom_in_discrete=放大(离散) -c.controls.zoom_out=缩小 -c.controls.zoom_out_discrete=缩小(离散) +c.settings.input.boost=加速移动 +c.settings.input.rotate_down=向下旋转摄像头 +c.settings.input.rotate_left=向左旋转摄像头 +c.settings.input.reset=重置摄像头视图 +c.settings.input.rotate_right=向右旋转摄像头 +c.settings.input.rotate_up=向上旋转摄像头 +c.settings.input.chat=切换聊天 +c.settings.input.fullscreen=切换全屏 +c.settings.input.interact=交互 +c.settings.input.backwards=向后移动 +c.settings.input.forwards=向前移动 +c.settings.input.left=向左移动 +c.settings.input.right=向右移动 +c.settings.input.zoom_in_discrete=放大(离散) +c.settings.input.zoom_in=放大 +c.settings.input.zoom_out_discrete=缩小(离散) +c.settings.input.zoom_out=缩小 c.credits.developed_by=开发人员 +c.credits.models=模型 +c.credits.sounds=声音 c.credits.thanks=谢谢你玩 c.credits.title=Hurry Curry! — 一个关于烹饪的游戏 -c.error=错误 c.error.cannot_cancel_no_game=无法取消游戏,因为没有游戏正在运行。 c.error.must_join_to_cancel=您必须加入才能取消当前游戏。 c.error.placeholder=这应该是错误消息。 c.error.websocket=WebSocket 已关闭,代码为:%d,原因 %s。清理:%s -c.hint=提示 +c.error=错误 c.hint.boost=按 %s 来加速 c.hint.framerate_low=您的帧速率似乎较低。您可以在设置菜单中降低图形设置。 +c.hint.interact=按下 %s 可拾取物品,按住 %s 可与工具交互 c.hint.movement=使用 %s 来移动 c.hint.reset_camera=按 %s 重置摄像头视图 c.hint.zoom_camera=使用 %s 放大/缩小 +c.hint=提示 c.lobby.botenable=启用机器人 c.lobby.mapname=地图名称 c.lobby.players=玩家 c.lobby.start=开始游戏 -c.map.difficulty=难度 c.map.difficulty.0=简单 c.map.difficulty.1=困难 c.map.difficulty.2=中等 c.map.difficulty.3=无法玩 c.map.difficulty.4=非常困难 +c.map.difficulty=难度 c.map.players_recommended=%d 名玩家推荐 c.menu.back=返回 c.menu.credits=致谢 @@ -53,10 +56,10 @@ c.menu.ingame.reconnect=重新连接 c.menu.ingame.resume=重新开始 c.menu.ingame.spectate=旁观 c.menu.my_chef=我的厨师 -c.menu.play=玩 c.menu.play.connect=连接 c.menu.play.quick_connect=快速连接 c.menu.play.server=服务器 +c.menu.play=玩 c.menu.quit=退出 c.menu.settings=设置 c.score.acceptable=可接受的服务 @@ -64,56 +67,60 @@ c.score.completed=已完成 c.score.excellent=优质服务 c.score.failed=失败 c.score.good=服务好 -c.score.points=积分 c.score.points_par=您已收集 %s 积分 +c.score.points=积分 c.score.poor=服务差 c.settings.apply=保存并应用 -c.settings.audio=音频 c.settings.audio.master_volume=主音量 c.settings.audio.music_volume=音乐音量 c.settings.audio.sfx_volume=音效音量 -c.settings.controls=限定 -c.settings.controls.add=添加新的 -c.settings.controls.joypad=%s(游戏手柄) -c.settings.controls.joypad_axis=游戏手柄轴 %s -c.settings.controls.keyboard=%s(键盘) -c.settings.controls.mouse_button=鼠标按钮 %s -c.settings.controls.other_event=其他活动 -c.settings.controls.press_any_key=按任意键… -c.settings.debug_info=显示调试信息(帧率等) -c.settings.fullscreen=全屏 -c.settings.fullscreen.always=始终 -c.settings.fullscreen.keep=保持 -c.settings.fullscreen.never=从不 +c.settings.audio=音频 +c.settings.gameplay.interpolate_camera_rotation=平滑的摄像头旋转 +c.settings.gameplay.invert_camera=反转摄像头移动 +c.settings.gameplay.latch_boost=始终将加速延长至最大持续时间 +c.settings.gameplay.setup_completed=初始设置完成。(取消选中并重启以重新进入) +c.settings.gameplay.tutorial_started=教程已开始 +c.settings.gameplay.usernames=显示用户名标签 c.settings.gameplay=游戏玩法 -c.settings.gameplay.extend_boost=始终将加速延长至最大持续时间 -c.settings.gi=全局照明 -c.settings.gi.sdfgi=有符号距离场全局照明 -c.settings.gi.voxelgi=体素全局照明 -c.settings.glow=启用辉光 -c.settings.graphics=图形 c.settings.graphics.aa=抗锯齿 c.settings.graphics.ao=环境光遮蔽 +c.settings.graphics.debug_info=显示调试信息(帧率等) +c.settings.graphics.fullscreen.always=始终 +c.settings.graphics.fullscreen.keep=保持 +c.settings.graphics.fullscreen.never=从不 +c.settings.graphics.fullscreen=全屏 +c.settings.graphics.gi.sdfgi=有符号距离场全局照明 +c.settings.graphics.gi.voxelgi=体素全局照明 +c.settings.graphics.gi=全局照明 +c.settings.graphics.glow=启用辉光 +c.settings.graphics.grass_amount=每块草砖的 3D 草量 +c.settings.graphics.lq_trees=低多边形树 +c.settings.graphics.preset.high=高 +c.settings.graphics.preset.low=低 +c.settings.graphics.preset.medium=中 +c.settings.graphics.shadows=启用阴影 c.settings.graphics.taa=随机采样抗锯齿 -c.settings.grass_amount=每块草砖的 3D 草量 -c.settings.language=语言 -c.settings.language.system=系统默认 -c.settings.low_poly_trees=低多边形树 +c.settings.graphics.ui_blur=启用用户界面模糊 +c.settings.graphics=图形 +c.settings.input.add=添加新的 +c.settings.input.joypad_axis=游戏手柄轴 %s +c.settings.input.joypad=%s(游戏手柄) +c.settings.input.keyboard=%s(键盘) +c.settings.input.mouse_button=鼠标按钮 %s +c.settings.input.other_event=其他活动 +c.settings.input.press_any_key=按任意键… +c.settings.input=限定 +c.settings.other.server_binary.placeholder=输入路径 +c.settings.other.server_binary=服务器二进制文件(留空以搜索路径) +c.settings.other.server_data=服务器数据目录(留空以自动检测) c.settings.other=其他 -c.settings.preset_high=高 -c.settings.preset_low=低 -c.settings.preset_medium=中 -c.settings.server_data=服务器数据目录(留空以自动检测) -c.settings.server_path=服务器二进制文件(留空以搜索路径) -c.settings.server_path.placeholder=输入路径 -c.settings.shadows=启用阴影 -c.settings.smooth_camera=平滑的摄像头旋转 -c.settings.ui=用户界面 +c.settings.ui.language.system=系统默认 +c.settings.ui.language=语言 c.settings.ui.scale_factor=用户界面比例系数 -c.settings.ui.scale_mode=用户界面缩放模式 c.settings.ui.scale_mode.resize=调整大小 +c.settings.ui.scale_mode=用户界面缩放模式 c.settings.ui.touch_controls=启用触摸屏控制 -c.settings.ui_blur=启用用户界面模糊 +c.settings.ui=用户界面 c.settings.username=用户名 c.setup.contract_title=雇佣合同 c.setup.par00=这是您(雇员)和 Musterfoods Ltd. (雇主)之间有约束力的厨师或服务员合同。 @@ -139,25 +146,18 @@ unknown464=- unknown476=Shift unknown484=左摇杆 unknown488=空格键 -unknown49=反转摄像头移动 -unknown494=按下 %s 可拾取物品,按住 %s 可与工具交互 unknown506=向上/向下翻页 unknown510=使用 %s 旋转摄像头视图 unknown514=方向键 unknown518=右摇杆 unknown524=可以在设置中启用/禁用用户名标签 -unknown53=显示用户名标签 unknown530=按 %s 并单击“加入”以在游戏运行时加入游戏 unknown534=Esc unknown538=菜单按钮 unknown551=不可用 unknown568=发型 %d -unknown572=模型 -unknown576=声音 -unknown59=初始设置完成。(取消选中并重启以重新进入) unknown622=您必须填写所有要求的字段。 unknown626=接受 -unknown63=教程已开始 unknown732=上一个 unknown736=下一个 unknown740=加入/旁观 diff --git a/locale/zh_Hant.ini b/locale/zh_Hant.ini index 167f1bd9..6e304c2c 100644 --- a/locale/zh_Hant.ini +++ b/locale/zh_Hant.ini @@ -1,21 +1,21 @@ [hurrycurry] -c.controls.boost= -c.controls.camera_down= -c.controls.camera_left= -c.controls.camera_reset=使用 %s 來旋轉相機視角 -c.controls.camera_right= -c.controls.camera_up= -c.controls.chat= -c.controls.fullscreen=全螢幕 -c.controls.interact=輸入路徑 -c.controls.move_backward= -c.controls.move_forward= -c.controls.move_left= -c.controls.move_right= -c.controls.zoom_in= -c.controls.zoom_in_discrete= -c.controls.zoom_out= -c.controls.zoom_out_discrete= +c.settings.input.boost= +c.settings.input.rotate_down= +c.settings.input.rotate_left= +c.settings.input.reset=使用 %s 來旋轉相機視角 +c.settings.input.rotate_right= +c.settings.input.rotate_up= +c.settings.input.chat= +c.settings.input.fullscreen=全螢幕 +c.settings.input.interact=輸入路徑 +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= c.credits.developed_by=開發者 c.credits.thanks=感謝你遊玩 c.credits.title=Hurry Curry!—一個關於烹飪的遊戲 @@ -72,48 +72,48 @@ c.settings.audio= c.settings.audio.master_volume=主音量 c.settings.audio.music_volume=音樂音量 c.settings.audio.sfx_volume=音效音量 -c.settings.controls= -c.settings.controls.add= -c.settings.controls.joypad= -c.settings.controls.joypad_axis= -c.settings.controls.keyboard= -c.settings.controls.mouse_button=選單按鈕 -c.settings.controls.other_event= -c.settings.controls.press_any_key= -c.settings.debug_info=顯示偵錯資訊(幀率等) -c.settings.fullscreen=全螢幕 -c.settings.fullscreen.always=總是 -c.settings.fullscreen.keep=保留 -c.settings.fullscreen.never=永不 +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=選單按鈕 +c.settings.input.other_event= +c.settings.input.press_any_key= +c.settings.graphics.debug_info=顯示偵錯資訊(幀率等) +c.settings.graphics.fullscreen=全螢幕 +c.settings.graphics.fullscreen.always=總是 +c.settings.graphics.fullscreen.keep=保留 +c.settings.graphics.fullscreen.never=永不 c.settings.gameplay= -c.settings.gameplay.extend_boost=總是將加速延長至最長持續時間 -c.settings.gi=全域照明 -c.settings.gi.sdfgi=有符號距離場全域照明(SDFGI) -c.settings.gi.voxelgi=Voxel 全域照明 -c.settings.glow=啟用發光 +c.settings.gameplay.latch_boost=總是將加速延長至最長持續時間 +c.settings.graphics.gi=全域照明 +c.settings.graphics.gi.sdfgi=有符號距離場全域照明(SDFGI) +c.settings.graphics.gi.voxelgi=Voxel 全域照明 +c.settings.graphics.glow=啟用發光 c.settings.graphics=圖形 c.settings.graphics.aa=抗鋸齒 c.settings.graphics.ao=環境遮擋 c.settings.graphics.taa=時間抗鋸齒 -c.settings.grass_amount=每個草塊的 3D 草量 -c.settings.language=語言 -c.settings.language.system=系統預設 -c.settings.low_poly_trees=低多邊形樹 +c.settings.graphics.grass_amount=每個草塊的 3D 草量 +c.settings.ui.language=語言 +c.settings.ui.language.system=系統預設 +c.settings.graphics.lq_trees=低多邊形樹 c.settings.other= -c.settings.preset_high=高 -c.settings.preset_low=低 -c.settings.preset_medium=中 -c.settings.server_data=伺服器資料目錄(留空以自動偵測) -c.settings.server_path=伺服器二進制檔案(留空以搜尋 PATH) -c.settings.server_path.placeholder=輸入路徑 -c.settings.shadows=啟用陰影 -c.settings.smooth_camera=平滑的相機旋轉 +c.settings.graphics.preset.high=高 +c.settings.graphics.preset.low=低 +c.settings.graphics.preset.medium=中 +c.settings.other.server_data=伺服器資料目錄(留空以自動偵測) +c.settings.other.server_binary=伺服器二進制檔案(留空以搜尋 PATH) +c.settings.other.server_binary.placeholder=輸入路徑 +c.settings.graphics.shadows=啟用陰影 +c.settings.gameplay.interpolate_camera_rotation=平滑的相機旋轉 c.settings.ui=使用者名稱 c.settings.ui.scale_factor=介面比例系數 c.settings.ui.scale_mode=介面縮放模式 c.settings.ui.scale_mode.resize=調整大小 c.settings.ui.touch_controls=啟用觸控螢幕控制 -c.settings.ui_blur=啟用介面模糊 +c.settings.graphics.ui_blur=啟用介面模糊 c.settings.username=使用者名稱 c.setup.contract_title=僱傭合約 c.setup.par00=這是你(僱員)和 Musterfoods Ltd.(僱主)之間關於擔任廚師或服務生的具有約束力的合約。 @@ -139,25 +139,25 @@ unknown464=- unknown476=SHIFT unknown484=左搖桿 unknown488=空白鍵 -unknown49=反相相機移動 -unknown494=按下 %s 來拾取物品並按住 %s 來與工具互動 +c.settings.gameplay.invert_camera=反相相機移動 +c.hint.interact=按下 %s 來拾取物品並按住 %s 來與工具互動 unknown506=PageUp/PageDown unknown510=使用 %s 來旋轉相機視角 unknown514=方向鍵 unknown518=右搖桿 unknown524=可以在設定中啟用/停用使用者名稱標籤 -unknown53=顯示使用者名稱標籤 +c.settings.gameplay.usernames=顯示使用者名稱標籤 unknown530=按下 %s 並點擊「加入」以在遊戲運行時加入 unknown534=ESCAPE unknown538=選單按鈕 unknown551=不可用 unknown568=髮型 %d -unknown572=模型 -unknown576=聲音 -unknown59=初始設定完成。(取消勾選並重新啟動以重新進入) +c.credits.models=模型 +c.credits.sounds=聲音 +c.settings.gameplay.setup_completed=初始設定完成。(取消勾選並重新啟動以重新進入) unknown622=你必須填寫所有要求的欄位。 unknown626=接受 -unknown63=教程已啟動 +c.settings.gameplay.tutorial_started=教程已啟動 unknown732= unknown736= unknown740=旁觀 |