From b79e87c7cac98e1b2122e8d428e9eb37bd137d1e Mon Sep 17 00:00:00 2001 From: Rendo Date: Wed, 17 Dec 2025 16:59:21 +0500 Subject: [PATCH] Translations --- gui/buy_menu/buy_menu.tscn | 5 +- gui/client_settings/client_settings.gd | 13 +++ gui/client_settings/client_settings.tscn | 90 +++++++++++------- gui/host_menu/host_menu.gd | 6 +- gui/host_menu/host_menu.tscn | 42 ++++---- gui/main_menu/language_button.gd | 14 +++ gui/main_menu/language_button.gd.uid | 1 + gui/main_menu/main_menu.tscn | 49 ++++++---- gui/main_menu/main_menu_gui.gd | 6 -- gui/main_menu/version_label.gd | 4 +- gui/team_choice/team_choice_menu.tscn | 10 +- .../version_confirmation.tscn | 9 +- project.godot | 4 + systems/auto_update.gd | 10 +- translations/gameplay.csv | 15 +++ translations/gameplay.csv.import | 17 ++++ translations/gameplay.en.translation | Bin 0 -> 540 bytes translations/gameplay.ikg.translation | Bin 0 -> 477 bytes translations/gameplay.ru.translation | Bin 0 -> 622 bytes translations/gui.csv | 43 +++++++++ translations/gui.csv.import | 17 ++++ translations/gui.en.translation | Bin 0 -> 1157 bytes translations/gui.ikg.translation | Bin 0 -> 653 bytes translations/gui.ru.translation | Bin 0 -> 1396 bytes translations/info.csv | 7 ++ translations/info.csv.import | 17 ++++ translations/info.en.translation | Bin 0 -> 674 bytes translations/info.ikg.translation | Bin 0 -> 578 bytes translations/info.ru.translation | Bin 0 -> 518 bytes weapons/molikman/fire_smoke/fire_smoke.tscn | 1 + 30 files changed, 279 insertions(+), 101 deletions(-) create mode 100644 gui/main_menu/language_button.gd create mode 100644 gui/main_menu/language_button.gd.uid create mode 100644 translations/gameplay.csv create mode 100644 translations/gameplay.csv.import create mode 100644 translations/gameplay.en.translation create mode 100644 translations/gameplay.ikg.translation create mode 100644 translations/gameplay.ru.translation create mode 100644 translations/gui.csv create mode 100644 translations/gui.csv.import create mode 100644 translations/gui.en.translation create mode 100644 translations/gui.ikg.translation create mode 100644 translations/gui.ru.translation create mode 100644 translations/info.csv create mode 100644 translations/info.csv.import create mode 100644 translations/info.en.translation create mode 100644 translations/info.ikg.translation create mode 100644 translations/info.ru.translation diff --git a/gui/buy_menu/buy_menu.tscn b/gui/buy_menu/buy_menu.tscn index 7d4118c..61d2c86 100644 --- a/gui/buy_menu/buy_menu.tscn +++ b/gui/buy_menu/buy_menu.tscn @@ -45,7 +45,7 @@ size_flags_horizontal = 3 [node name="Shotgun" type="Label" parent="CenterContainer/PanelContainer/WeaponsContainer/WeaponsContainer/ShotgunContainer"] layout_mode = 2 -text = "Дробовики" +text = "shotguns" horizontal_alignment = 1 vertical_alignment = 1 @@ -55,12 +55,13 @@ weapon = ExtResource("4_8uk5y") [node name="AbilitiesLabel" type="Label" parent="CenterContainer/PanelContainer/WeaponsContainer"] layout_mode = 2 -text = "Способности" +text = "abilities" horizontal_alignment = 1 vertical_alignment = 1 [node name="AbilitiesContainer" type="HBoxContainer" parent="CenterContainer/PanelContainer/WeaponsContainer"] layout_mode = 2 +alignment = 1 [node name="MolotovButton" parent="CenterContainer/PanelContainer/WeaponsContainer/AbilitiesContainer" instance=ExtResource("1_8guql")] layout_mode = 2 diff --git a/gui/client_settings/client_settings.gd b/gui/client_settings/client_settings.gd index 798c459..f657b27 100644 --- a/gui/client_settings/client_settings.gd +++ b/gui/client_settings/client_settings.gd @@ -2,16 +2,26 @@ extends Node const PLAYER_CFG = "user://client_settings" +signal locale_changed(StringName) + var NICKNAME: StringName = "MyNameIs" var SENSITIVITY: float = 0.004 var TOGGLE_CROUCH: bool = false var TOGGLE_SCOPE: bool = false var TOGGLE_WALK: bool = false +var LOCALE: StringName = "automatic": + set(value): + LOCALE = value + locale_changed.emit(value) + TranslationServer.set_locale(value) func _ready() -> void: load_settings() multiplayer.connected_to_server.connect(send_client_data) + + if LOCALE == "automatic": + TranslationServer.set_locale(OS.get_locale_language()) func _exit_tree() -> void: save_settings() @@ -33,6 +43,7 @@ func save_settings() -> void: var compacted_toggles = 1 * int(TOGGLE_CROUCH) | 2 * int(TOGGLE_SCOPE) | 4 * int(TOGGLE_WALK) file.store_line(str(compacted_toggles)) + file.store_line(TranslationServer.get_locale()) func load_settings() -> void: var file = FileAccess.open(PLAYER_CFG,FileAccess.READ) @@ -47,3 +58,5 @@ func load_settings() -> void: TOGGLE_CROUCH = compacted_toggles & 1 TOGGLE_SCOPE = compacted_toggles & 2 TOGGLE_WALK = compacted_toggles & 4 + + LOCALE = file.get_line() diff --git a/gui/client_settings/client_settings.tscn b/gui/client_settings/client_settings.tscn index c01b188..536c962 100644 --- a/gui/client_settings/client_settings.tscn +++ b/gui/client_settings/client_settings.tscn @@ -13,25 +13,40 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="PanelContainer" type="PanelContainer" parent="CenterContainer"] +[node name="PanelContainer" type="TabContainer" parent="CenterContainer"] +custom_minimum_size = Vector2(512, 256) layout_mode = 2 +tab_alignment = 1 +current_tab = 3 script = ExtResource("1_xqyus") -[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer/PanelContainer"] +[node name="gameplay" type="VBoxContainer" parent="CenterContainer/PanelContainer"] +visible = false +layout_mode = 2 +metadata/_tab_index = 0 + +[node name="video" type="VBoxContainer" parent="CenterContainer/PanelContainer"] +visible = false +layout_mode = 2 +metadata/_tab_index = 1 + +[node name="FullscreenButton" type="CheckButton" parent="CenterContainer/PanelContainer/video"] +layout_mode = 2 +text = "fullscreen" + +[node name="controls" type="VBoxContainer" parent="CenterContainer/PanelContainer"] +visible = false +layout_mode = 2 +metadata/_tab_index = 2 + +[node name="Sensitivity" type="HBoxContainer" parent="CenterContainer/PanelContainer/controls"] layout_mode = 2 -[node name="FullscreenButton" type="CheckButton" parent="CenterContainer/PanelContainer/VBoxContainer"] +[node name="Label" type="Label" parent="CenterContainer/PanelContainer/controls/Sensitivity"] layout_mode = 2 -text = "Полный экран" +text = "sensitivity" -[node name="Sensitivity" type="HBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer"] -layout_mode = 2 - -[node name="Label" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/Sensitivity"] -layout_mode = 2 -text = "Чувствительность" - -[node name="SensitivitySlider" type="HSlider" parent="CenterContainer/PanelContainer/VBoxContainer/Sensitivity"] +[node name="SensitivitySlider" type="HSlider" parent="CenterContainer/PanelContainer/controls/Sensitivity"] unique_name_in_owner = true custom_minimum_size = Vector2(256, 0) layout_mode = 2 @@ -41,7 +56,7 @@ max_value = 0.02 step = 0.001 value = 0.001 -[node name="SensitivityBox" type="SpinBox" parent="CenterContainer/PanelContainer/VBoxContainer/Sensitivity"] +[node name="SensitivityBox" type="SpinBox" parent="CenterContainer/PanelContainer/controls/Sensitivity"] unique_name_in_owner = true layout_mode = 2 max_value = 0.1 @@ -50,14 +65,30 @@ value = 0.02 allow_greater = true allow_lesser = true -[node name="GameplayMainAudio" type="HBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer"] +[node name="StopSession" type="Button" parent="CenterContainer/PanelContainer/controls"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +text = "Окончить сессию" + +[node name="LeaveButton" type="Button" parent="CenterContainer/PanelContainer/controls"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +text = "Покинуть сессию" + +[node name="audio" type="VBoxContainer" parent="CenterContainer/PanelContainer"] +layout_mode = 2 +metadata/_tab_index = 3 + +[node name="GameplayMainAudio" type="HBoxContainer" parent="CenterContainer/PanelContainer/audio"] layout_mode = 2 -[node name="Label" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/GameplayMainAudio"] +[node name="Label" type="Label" parent="CenterContainer/PanelContainer/audio/GameplayMainAudio"] layout_mode = 2 -text = "Геймплейные звуки" +text = "audio_gameplay" -[node name="GameplayMainSlider" type="HSlider" parent="CenterContainer/PanelContainer/VBoxContainer/GameplayMainAudio"] +[node name="GameplayMainSlider" type="HSlider" parent="CenterContainer/PanelContainer/audio/GameplayMainAudio"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 @@ -65,22 +96,9 @@ max_value = 1.0 step = 0.01 value = 1.0 -[node name="StopSession" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer"] -unique_name_in_owner = true -visible = false -layout_mode = 2 -text = "Окончить сессию" - -[node name="LeaveButton" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer"] -unique_name_in_owner = true -visible = false -layout_mode = 2 -text = "Покинуть сессию" - -[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/FullscreenButton" to="CenterContainer/PanelContainer" method="_on_fullscreen_button_pressed"] -[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/FullscreenButton" to="CenterContainer/PanelContainer" method="_on_fullscreen_button_toggled"] -[connection signal="value_changed" from="CenterContainer/PanelContainer/VBoxContainer/Sensitivity/SensitivitySlider" to="CenterContainer/PanelContainer" method="_on_sensitivity_slider_value_changed"] -[connection signal="value_changed" from="CenterContainer/PanelContainer/VBoxContainer/Sensitivity/SensitivityBox" to="CenterContainer/PanelContainer" method="_on_sensitivity_box_value_changed"] -[connection signal="value_changed" from="CenterContainer/PanelContainer/VBoxContainer/GameplayMainAudio/GameplayMainSlider" to="CenterContainer/PanelContainer" method="_on_gameplay_main_slider_value_changed"] -[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/StopSession" to="CenterContainer/PanelContainer" method="_on_stop_session_pressed"] -[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/LeaveButton" to="CenterContainer/PanelContainer" method="_on_leave_button_pressed"] +[connection signal="toggled" from="CenterContainer/PanelContainer/video/FullscreenButton" to="CenterContainer/PanelContainer" method="_on_fullscreen_button_toggled"] +[connection signal="value_changed" from="CenterContainer/PanelContainer/controls/Sensitivity/SensitivitySlider" to="CenterContainer/PanelContainer" method="_on_sensitivity_slider_value_changed"] +[connection signal="value_changed" from="CenterContainer/PanelContainer/controls/Sensitivity/SensitivityBox" to="CenterContainer/PanelContainer" method="_on_sensitivity_box_value_changed"] +[connection signal="pressed" from="CenterContainer/PanelContainer/controls/StopSession" to="CenterContainer/PanelContainer" method="_on_stop_session_pressed"] +[connection signal="pressed" from="CenterContainer/PanelContainer/controls/LeaveButton" to="CenterContainer/PanelContainer" method="_on_leave_button_pressed"] +[connection signal="value_changed" from="CenterContainer/PanelContainer/audio/GameplayMainAudio/GameplayMainSlider" to="CenterContainer/PanelContainer" method="_on_gameplay_main_slider_value_changed"] diff --git a/gui/host_menu/host_menu.gd b/gui/host_menu/host_menu.gd index a48c539..a0cdfef 100644 --- a/gui/host_menu/host_menu.gd +++ b/gui/host_menu/host_menu.gd @@ -13,7 +13,6 @@ func _ready() -> void: %InfiniteMoney.set_pressed_no_signal(LobbySettings.infinite_money) var popup: PopupMenu = %MapsButton.get_popup() - %MapsButton.text = LobbySettings.selected_map popup.index_pressed.connect(on_maps_index_pressed) for level in Registry.maps.keys(): levels_by_index.append(level) @@ -52,9 +51,12 @@ func _on_allow_team_switch_toggled(toggled_on: bool) -> void: LobbySettings.allow_team_switch = toggled_on func on_maps_index_pressed(index: int): - %MapsButton.text = levels_by_index[index] LobbySettings.selected_map = levels_by_index[index] func _on_infinite_money_toggled(toggled_on: bool) -> void: LobbySettings.infinite_money = toggled_on + + +func _on_start_button_pressed() -> void: + Lobby.start_game() diff --git a/gui/host_menu/host_menu.tscn b/gui/host_menu/host_menu.tscn index e912b27..822f6ea 100644 --- a/gui/host_menu/host_menu.tscn +++ b/gui/host_menu/host_menu.tscn @@ -7,15 +7,20 @@ [node name="HostMenu" type="VBoxContainer"] script = ExtResource("1_83e8q") +[node name="StartButton" type="Button" parent="."] +unique_name_in_owner = true +layout_mode = 2 +text = "start" + [node name="MapsButton" type="MenuButton" parent="."] unique_name_in_owner = true layout_mode = 2 -text = "Выбор уровня" +text = "pick_level" [node name="Time" type="FoldableContainer" parent="."] layout_mode = 2 folded = true -title = "Время раунда" +title = "round_time" [node name="VBoxContainer" type="VBoxContainer" parent="Time"] visible = false @@ -26,7 +31,7 @@ layout_mode = 2 [node name="Label" type="Label" parent="Time/VBoxContainer/RoundTime"] layout_mode = 2 -text = "Время раунда" +text = "round_time" [node name="RoundTimeBox" type="SpinBox" parent="Time/VBoxContainer/RoundTime"] unique_name_in_owner = true @@ -41,7 +46,7 @@ layout_mode = 2 [node name="Label" type="Label" parent="Time/VBoxContainer/BombTime"] layout_mode = 2 -text = "Отсчёт бомбы" +text = "bomb_time" [node name="BombTimeBox" type="SpinBox" parent="Time/VBoxContainer/BombTime"] unique_name_in_owner = true @@ -56,7 +61,7 @@ layout_mode = 2 [node name="Label" type="Label" parent="Time/VBoxContainer/BuyTime"] layout_mode = 2 -text = "Время закупок" +text = "buy_time" [node name="BuyTimeBox" type="SpinBox" parent="Time/VBoxContainer/BuyTime"] unique_name_in_owner = true @@ -69,7 +74,7 @@ allow_greater = true [node name="Round" type="FoldableContainer" parent="."] layout_mode = 2 folded = true -title = "Раунд" +title = "round_settings" [node name="VBoxContainer" type="VBoxContainer" parent="Round"] visible = false @@ -80,7 +85,7 @@ layout_mode = 2 [node name="Label" type="Label" parent="Round/VBoxContainer/RoundAmount"] layout_mode = 2 -text = "Раундов для победы" +text = "win_rounds" [node name="RoundBox" type="SpinBox" parent="Round/VBoxContainer/RoundAmount"] unique_name_in_owner = true @@ -96,7 +101,7 @@ layout_mode = 2 [node name="Label" type="Label" parent="Round/VBoxContainer/TeamSwitchAmount"] layout_mode = 2 -text = "Раунд смены сторон" +text = "half_rounds" [node name="TeamSwitchBox" type="SpinBox" parent="Round/VBoxContainer/TeamSwitchAmount"] unique_name_in_owner = true @@ -110,7 +115,7 @@ allow_greater = true [node name="Gameplay" type="FoldableContainer" parent="."] layout_mode = 2 folded = true -title = "Геймплей" +title = "gameplay" [node name="VBoxContainer" type="VBoxContainer" parent="Gameplay"] visible = false @@ -120,20 +125,20 @@ layout_mode = 2 unique_name_in_owner = true custom_minimum_size = Vector2(200, 0) layout_mode = 2 -text = "Неограниченная закупка абилок" +text = "allow_multiple_abilities" autowrap_mode = 2 [node name="InfiniteMoney" type="CheckButton" parent="Gameplay/VBoxContainer"] unique_name_in_owner = true custom_minimum_size = Vector2(200, 0) layout_mode = 2 -text = "Бесконечные деньги" +text = "infinite_money" autowrap_mode = 2 [node name="PortForward" type="FoldableContainer" parent="."] layout_mode = 2 folded = true -title = "Проброс портов" +title = "port_forwarding" [node name="PortForwardContainer" type="VBoxContainer" parent="PortForward"] visible = false @@ -141,12 +146,12 @@ layout_mode = 2 [node name="ForwardPortButton" type="Button" parent="PortForward/PortForwardContainer"] layout_mode = 2 -text = "Попробовать пробросить порты" +text = "try_forward" script = ExtResource("2_lgwxd") [node name="Label" type="Label" parent="PortForward/PortForwardContainer"] layout_mode = 2 -text = "Статус публичного IP:" +text = "public_ip_status" [node name="PublicIP" type="LineEdit" parent="PortForward/PortForwardContainer"] unique_name_in_owner = true @@ -156,21 +161,24 @@ script = ExtResource("3_f5ibf") [node name="Teams" type="FoldableContainer" parent="."] layout_mode = 2 -title = "Команды" +folded = true +title = "teams" [node name="VBoxContainer" type="VBoxContainer" parent="Teams"] +visible = false layout_mode = 2 [node name="AllowTeamSwitch" type="CheckButton" parent="Teams/VBoxContainer"] unique_name_in_owner = true layout_mode = 2 -text = "Разрешить смену команд" +text = "allow_team_switch" autowrap_mode = 2 [node name="Shuffle" type="Button" parent="Teams/VBoxContainer"] layout_mode = 2 -text = "Перемешать" +text = "shuffle" +[connection signal="pressed" from="StartButton" to="." method="_on_start_button_pressed"] [connection signal="value_changed" from="Time/VBoxContainer/RoundTime/RoundTimeBox" to="." method="_on_round_time_box_value_changed"] [connection signal="value_changed" from="Time/VBoxContainer/BombTime/BombTimeBox" to="." method="_on_bomb_time_box_value_changed"] [connection signal="value_changed" from="Time/VBoxContainer/BuyTime/BuyTimeBox" to="." method="_on_buy_time_box_value_changed"] diff --git a/gui/main_menu/language_button.gd b/gui/main_menu/language_button.gd new file mode 100644 index 0000000..62f7d77 --- /dev/null +++ b/gui/main_menu/language_button.gd @@ -0,0 +1,14 @@ +extends MenuButton + + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + var popup: PopupMenu = get_popup() + for locale in TranslationServer.get_loaded_locales(): + popup.add_item(locale) + + popup.index_pressed.connect(on_locale_selected) + +func on_locale_selected(index: int): + var popup: PopupMenu = get_popup() + ClientSettings.LOCALE = popup.get_item_text(index) diff --git a/gui/main_menu/language_button.gd.uid b/gui/main_menu/language_button.gd.uid new file mode 100644 index 0000000..8aeb921 --- /dev/null +++ b/gui/main_menu/language_button.gd.uid @@ -0,0 +1 @@ +uid://dx0tfstuwspll diff --git a/gui/main_menu/main_menu.tscn b/gui/main_menu/main_menu.tscn index df841e8..5d711c0 100644 --- a/gui/main_menu/main_menu.tscn +++ b/gui/main_menu/main_menu.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=4 format=3 uid="uid://cbtp4rvg66ba1"] +[gd_scene load_steps=5 format=3 uid="uid://cbtp4rvg66ba1"] [ext_resource type="Script" uid="uid://bsyuos803g7qf" path="res://gui/main_menu/main_menu_gui.gd" id="1_l6cm7"] [ext_resource type="PackedScene" uid="uid://dswn8a8anj2hu" path="res://gui/host_menu/host_menu.tscn" id="2_85nol"] [ext_resource type="Script" uid="uid://fhfot05mnhua" path="res://gui/main_menu/version_label.gd" id="3_qy2xc"] +[ext_resource type="Script" uid="uid://dx0tfstuwspll" path="res://gui/main_menu/language_button.gd" id="4_6wy0j"] [node name="MainMenu" type="CenterContainer"] anchors_preset = 15 @@ -14,6 +15,7 @@ script = ExtResource("1_l6cm7") metadata/_edit_lock_ = true [node name="MainMenu" type="PanelContainer" parent="."] +visible = false custom_minimum_size = Vector2(256, 0) layout_mode = 2 @@ -23,7 +25,7 @@ layout_mode = 2 [node name="NicknameEdit" type="LineEdit" parent="MainMenu/VBoxContainer"] unique_name_in_owner = true layout_mode = 2 -placeholder_text = "Nickname" +placeholder_text = "nick" max_length = 16 [node name="HBoxContainer" type="HBoxContainer" parent="MainMenu/VBoxContainer"] @@ -32,7 +34,7 @@ layout_mode = 2 [node name="HostButton" type="Button" parent="MainMenu/VBoxContainer/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 -text = "HOST" +text = "host" [node name="VBoxContainer" type="VBoxContainer" parent="MainMenu/VBoxContainer/HBoxContainer"] layout_mode = 2 @@ -40,7 +42,7 @@ size_flags_horizontal = 3 [node name="ConnectButton" type="Button" parent="MainMenu/VBoxContainer/HBoxContainer/VBoxContainer"] layout_mode = 2 -text = "CONNECT" +text = "connect" [node name="IpEdit" type="LineEdit" parent="MainMenu/VBoxContainer/HBoxContainer/VBoxContainer"] unique_name_in_owner = true @@ -49,10 +51,9 @@ placeholder_text = "ip" [node name="ExitButton" type="Button" parent="MainMenu/VBoxContainer"] layout_mode = 2 -text = "Выйти из игры" +text = "exit" [node name="Lobby" type="PanelContainer" parent="."] -visible = false custom_minimum_size = Vector2(256, 256) layout_mode = 2 @@ -74,7 +75,7 @@ size_flags_horizontal = 3 [node name="TeamName" type="Label" parent="Lobby/HBoxContainer/ClientMenu/Players/AttackTeam"] layout_mode = 2 -text = "Attack" +text = "attack" horizontal_alignment = 1 [node name="DefenceTeam" type="VBoxContainer" parent="Lobby/HBoxContainer/ClientMenu/Players"] @@ -84,7 +85,7 @@ size_flags_horizontal = 3 [node name="TeamName" type="Label" parent="Lobby/HBoxContainer/ClientMenu/Players/DefenceTeam"] layout_mode = 2 -text = "Defence" +text = "defence" horizontal_alignment = 1 [node name="SpectatorsTeam" type="VBoxContainer" parent="Lobby/HBoxContainer/ClientMenu/Players"] @@ -94,7 +95,7 @@ size_flags_horizontal = 3 [node name="TeamName" type="Label" parent="Lobby/HBoxContainer/ClientMenu/Players/SpectatorsTeam"] layout_mode = 2 -text = "Spectators" +text = "spectators" horizontal_alignment = 1 [node name="Buttons" type="HBoxContainer" parent="Lobby/HBoxContainer/ClientMenu"] @@ -104,28 +105,23 @@ alignment = 1 [node name="LeaveButton" type="Button" parent="Lobby/HBoxContainer/ClientMenu/Buttons"] unique_name_in_owner = true layout_mode = 2 -text = "Leave" - -[node name="StartButton" type="Button" parent="Lobby/HBoxContainer/ClientMenu/Buttons"] -unique_name_in_owner = true -layout_mode = 2 -text = "Start" +text = "leave" [node name="JoinAttackButton" type="Button" parent="Lobby/HBoxContainer/ClientMenu/Buttons"] unique_name_in_owner = true layout_mode = 2 -text = "Join Attack" +text = "join_attack" [node name="JoinDefenceButton" type="Button" parent="Lobby/HBoxContainer/ClientMenu/Buttons"] unique_name_in_owner = true layout_mode = 2 -text = "Join Defence" +text = "join_defence" [node name="JoinSpectatorsButton" type="Button" parent="Lobby/HBoxContainer/ClientMenu/Buttons"] unique_name_in_owner = true visible = false layout_mode = 2 -text = "Join Spectators" +text = "join_spectators" [node name="HostConainer" type="ScrollContainer" parent="Lobby/HBoxContainer"] layout_mode = 2 @@ -135,10 +131,10 @@ horizontal_scroll_mode = 0 unique_name_in_owner = true layout_mode = 2 -[node name="LabelContainer" type="Control" parent="."] +[node name="Independent" type="Control" parent="."] layout_mode = 2 -[node name="Label" type="RichTextLabel" parent="LabelContainer"] +[node name="Version" type="RichTextLabel" parent="Independent"] top_level = true layout_mode = 1 anchors_preset = 3 @@ -158,13 +154,24 @@ horizontal_alignment = 2 vertical_alignment = 2 script = ExtResource("3_qy2xc") +[node name="LanguageButton" type="MenuButton" parent="Independent"] +top_level = true +layout_mode = 1 +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -8.0 +offset_right = 8.0 +grow_vertical = 0 +text = "language" +script = ExtResource("4_6wy0j") + [connection signal="text_changed" from="MainMenu/VBoxContainer/NicknameEdit" to="." method="_on_nickname_edit_text_changed"] [connection signal="text_submitted" from="MainMenu/VBoxContainer/NicknameEdit" to="." method="_on_nickname_edit_text_submitted"] [connection signal="pressed" from="MainMenu/VBoxContainer/HBoxContainer/HostButton" to="." method="_on_host_button_pressed"] [connection signal="pressed" from="MainMenu/VBoxContainer/HBoxContainer/VBoxContainer/ConnectButton" to="." method="_on_connect_button_pressed"] [connection signal="pressed" from="MainMenu/VBoxContainer/ExitButton" to="." method="_on_exit_button_pressed"] [connection signal="pressed" from="Lobby/HBoxContainer/ClientMenu/Buttons/LeaveButton" to="." method="_on_leave_button_pressed"] -[connection signal="pressed" from="Lobby/HBoxContainer/ClientMenu/Buttons/StartButton" to="." method="_on_start_button_pressed"] [connection signal="pressed" from="Lobby/HBoxContainer/ClientMenu/Buttons/JoinAttackButton" to="." method="_on_join_attack_button_pressed"] [connection signal="pressed" from="Lobby/HBoxContainer/ClientMenu/Buttons/JoinDefenceButton" to="." method="_on_join_defence_button_pressed"] [connection signal="pressed" from="Lobby/HBoxContainer/ClientMenu/Buttons/JoinSpectatorsButton" to="." method="_on_join_spectators_button_pressed"] diff --git a/gui/main_menu/main_menu_gui.gd b/gui/main_menu/main_menu_gui.gd index 172aeb2..78dfee0 100644 --- a/gui/main_menu/main_menu_gui.gd +++ b/gui/main_menu/main_menu_gui.gd @@ -24,16 +24,10 @@ func cleanup_lobby() -> void: %JoinDefenceButton.show() %JoinSpectatorsButton.hide() - -func _on_start_button_pressed() -> void: - Lobby.start_game() - func hide_host_buttons() -> void: - %StartButton.hide() %HostMenu.hide() func show_host_buttons() -> void: - %StartButton.show() %HostMenu.show() func _on_host_button_pressed() -> void: diff --git a/gui/main_menu/version_label.gd b/gui/main_menu/version_label.gd index 79270d8..ff3e82d 100644 --- a/gui/main_menu/version_label.gd +++ b/gui/main_menu/version_label.gd @@ -3,8 +3,8 @@ extends RichTextLabel func _ready() -> void: AutoUpdate.update_version_text.connect(update_version) - update_version("") + update_version(tr("au_loading")) func update_version(version: StringName): - text = "Текущая версия игры: " + preload("res://version.tres").version + "\n" + version + text = tr("vr_version") + preload("res://version.tres").version + "\n" + version diff --git a/gui/team_choice/team_choice_menu.tscn b/gui/team_choice/team_choice_menu.tscn index c01a791..fc4b227 100644 --- a/gui/team_choice/team_choice_menu.tscn +++ b/gui/team_choice/team_choice_menu.tscn @@ -19,7 +19,7 @@ layout_mode = 2 [node name="Label" type="Label" parent="Panel/VBoxContainer"] layout_mode = 2 -text = "Choose your team" +text = "pick_team" horizontal_alignment = 1 [node name="HBoxContainer" type="HBoxContainer" parent="Panel/VBoxContainer"] @@ -27,19 +27,19 @@ layout_mode = 2 [node name="SpectatorButton" type="Button" parent="Panel/VBoxContainer/HBoxContainer"] layout_mode = 2 -text = "Spectators" +text = "spectators" [node name="AttackButton" type="Button" parent="Panel/VBoxContainer/HBoxContainer"] layout_mode = 2 -text = "Attackers" +text = "attackers" [node name="DefenceButton" type="Button" parent="Panel/VBoxContainer/HBoxContainer"] layout_mode = 2 -text = "Defenders" +text = "defenders" [node name="CancelButton" type="Button" parent="Panel/VBoxContainer"] layout_mode = 2 -text = "Cancel" +text = "cancel" [connection signal="pressed" from="Panel/VBoxContainer/HBoxContainer/SpectatorButton" to="." method="_on_spectator_button_pressed"] [connection signal="pressed" from="Panel/VBoxContainer/HBoxContainer/AttackButton" to="." method="_on_attack_button_pressed"] diff --git a/gui/version_confirmation/version_confirmation.tscn b/gui/version_confirmation/version_confirmation.tscn index 306030b..ea02232 100644 --- a/gui/version_confirmation/version_confirmation.tscn +++ b/gui/version_confirmation/version_confirmation.tscn @@ -2,11 +2,10 @@ [node name="VersionConfirmation" type="ConfirmationDialog"] oversampling_override = 1.0 -title = "Изменение версии" +title = "version_update" size = Vector2i(558, 106) -ok_button_text = "Установить" -dialog_text = "На сервере обнаружена новая (или просто другая) версия игры. -Установить её?" -cancel_button_text = "Не устанавливать" +ok_button_text = "install" +dialog_text = "version_update_desc" +cancel_button_text = "ninstall" [node name="HTTPRequest" type="HTTPRequest" parent="."] diff --git a/project.godot b/project.godot index 7457e99..3e82dcc 100644 --- a/project.godot +++ b/project.godot @@ -193,6 +193,10 @@ plr_recent_weapon={ ] } +[internationalization] + +locale/translations=PackedStringArray("res://translations/gui.en.translation", "res://translations/gui.ru.translation", "res://translations/gameplay.en.translation", "res://translations/gameplay.ikg.translation", "res://translations/gameplay.ru.translation", "res://translations/gui.ikg.translation", "res://translations/info.ikg.translation", "res://translations/info.ru.translation", "res://translations/info.en.translation") + [layer_names] 3d_render/layer_1="MainRender" diff --git a/systems/auto_update.gd b/systems/auto_update.gd index a8f9ab8..b684782 100644 --- a/systems/auto_update.gd +++ b/systems/auto_update.gd @@ -18,22 +18,22 @@ func _ready() -> void: patch_request.download_file = exec_dir.path_join("chelimbalo.pck") patch_request.request_completed.connect(patch_downloaded) - update_version_text.emit("Подгружаем данные с сервера...") + update_version_text.emit(tr("au_loading")) request("https://2ndbeam.ru/durenije/chelimbalo/release/deploy_data") func on_request_completed(result: int, _response_code: int, _headers: PackedStringArray, body: PackedByteArray): if result != OK: - update_version_text.emit("[color=red]Ошибка загрузки данных:" + str(result) +"[/color]") + update_version_text.emit("[color=red]" + tr("au_err_load") + str(result) +"[/color]") return var ver_hash = body.get_string_from_ascii().split("\n")[1] if ver_hash != load("res://version.tres").version: - update_version_text.emit("Доступна новая версия!") + update_version_text.emit(tr("au_new_version")) popup.popup_centered() else: - update_version_text.emit("[color=green]У вас самая актуальная версия игры![/color]") + update_version_text.emit("[color=green]"+tr("au_current_version")+"[/color]") func download_button_pressed() -> void: popup.get_node("HTTPRequest").request("https://2ndbeam.ru/durenije/chelimbalo/release/chelimbalo.pck") @@ -43,4 +43,4 @@ func patch_downloaded(result: int, _response_code: int, _headers: PackedStringAr OS.create_process(OS.get_executable_path(),OS.get_cmdline_args()) get_tree().quit() else: - update_version_text.emit("[color=red]Ошибка загрузки новой версии:" + str(result) +"[/color]") + update_version_text.emit("[color=red]" + tr("au_err_install") + str(result) +"[/color]") diff --git a/translations/gameplay.csv b/translations/gameplay.csv new file mode 100644 index 0000000..7cfff67 --- /dev/null +++ b/translations/gameplay.csv @@ -0,0 +1,15 @@ +key,ru,en,ikg +attack,Сторона атаки,Attack, +attacker,Атакующий,Attacker, +attackers,Атакующие,Attackers, +defence,Сторона защиты,Defence, +defender,Защищающий,Defender, +defenders,Защищающие,Defenders, +spectator,Наблюдатель,Spectator, +spectators,Наблюдатели,Spectators, +pistols,Пистолеты,Pistols, +sm_gun,Пистолеты-пулемёты,Submachine guns, +shotguns,Дробовики,Shotguns, +rifles,Винтовки,Rifles, +abilities,Способности,Abilities, +MyNameIs,:докер:,MyNameIs,Ïγрõõma∆~ğònñ fīłøроñī diff --git a/translations/gameplay.csv.import b/translations/gameplay.csv.import new file mode 100644 index 0000000..0546e53 --- /dev/null +++ b/translations/gameplay.csv.import @@ -0,0 +1,17 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://1okuxajts7cd" + +[deps] + +files=["res://translations/gameplay.ru.translation", "res://translations/gameplay.en.translation", "res://translations/gameplay.ikg.translation"] + +source_file="res://translations/gameplay.csv" +dest_files=["res://translations/gameplay.ru.translation", "res://translations/gameplay.en.translation", "res://translations/gameplay.ikg.translation"] + +[params] + +compress=true +delimiter=0 diff --git a/translations/gameplay.en.translation b/translations/gameplay.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..91f572404448c46c2dc6c86084a06975b7b1c222 GIT binary patch literal 540 zcmV+%0^|KsQ$s@n000005C8yv0{{R70ssIgwJ-f(egf4G0A^TOMF6oTjREY7{vDqx3;Ww1I+waoM_KleP#r>2|dYDdq-(= z(&{rs+fqFMJ^)n!yUP6{D+lF(RchQ*H%}Xk-FDLGvAR|7SMY=8z#;;*ykPn8dn`L` z!fhq=Frd_f#%Xh9;YaX;`~d!s4^Jqq{3$1+1O@)k&M*2$4OWq=QUkY@axlAgUKa$E z-!oU57dMldH+QNkvSxk(>ox=DDYY>5kF0;ls~HTc2QrKU}hRX;65-DU( zu2Rm$rjv~@c3J|5?Q*ouek-B8MFboj#%e6n*M?D zL~yQX*KOL|r**^)Eo!2@4#N$zzCi|>K6Ws5Y}yX|Z`yWv+l;{5Qd2?m=UBTj<*Fz) elpU>gg*woZVER+)pp<|0)9%H66i@iP7)wci)Ql;+E5p(fQzYwg|yuqIa<~vEz~0wr%sa zDK!8y07L*|^=wDpE~FkAcGW9Uq^;#&;K%I1^LZAueq{d1BMDv_+L4wRHdGIw2;S3$ zf530~D?jA}G(1(2ew@7=2jTNe?g=bC`;B0E?X4ycMfyjsA&K6uWNGQ&T>s0qe$?73 z{+X*tM*!DBG|31T22g0609b^~30cT;8A9X5r%gNsJw_W9+k+b-=ZX&!IxiVKw7&v{ z2LA`aMj*hinf;u9`%GX3H0U#dpbh~c(MY5^S7u8`$~D6bVMBFt*jDBU!%T645JAER z6dn6Bh=Sd{)Dmt383Le)-7o?7 zw%WNe*v1>%K~hNoQvh247kK_C)0x^RovMGpQ?-2tp5NpsY89fqjazxB$$_mEo#4;l z7jOh4L4>?!Mksy&f2%IsJo;^52N07)r|Lo$hhM>e@(1`$J_-ILGDsA7XxafCGfG$x z(Gv9YqvY3+VZsl=g|q;{PoU^m`AIFX^h*nT8L@e+soGK|8k$U}2fr4wI*_BOuLDCG z&JbLS<{v#hnk_`t(5>bJb;V9D(2DD-;*!LbZMinJTvz4U*ChNcMTCYh)EKR~s07jQ z0sDG*C^E5QGQ=|TVMvY*L`P7Fl&qYvu>wO&`Aeo0p$b}qe@6=fW@3uvzrZ;F zBBKQ`F)}f~_Q|G>3$*3J_B6S!D!ZxW&X&hVw&d=R>$BzdxL{FnEKZ$mY24V}RB~ge zsIeVkt5aj!v*Nz?QQVvtdy49+;{J>`mfW1GQ*i=Mr~$DtN+SxSq$P!n0dRsDt1=G~ z0OUNL2^crg3^A=;KLZ%2>2(VXd~b+TL-<#!wed2b`mFc zI$U~c4LY0l;844=kil<8C9)x7uzCcGgNM5kH;y=%tw*Z>8mjHU<{9 literal 0 HcmV?d00001 diff --git a/translations/gui.csv b/translations/gui.csv new file mode 100644 index 0000000..e8c5af3 --- /dev/null +++ b/translations/gui.csv @@ -0,0 +1,43 @@ +key,ru,en,ikg +allow_multiple_abilities,Разрешить несколько одинаковых способностей,Allow multiple same abilities, +allow_team_switch,Разрешить смену команд,Allow team switch, +audio,Звук,Audio, +audio_gameplay,Геймплейные звуки,Gameplay sounds, +bomb_time,Отсчёт бомбы,Bomb time, +buy_time,Время закупок,Buy phase time, +cancel,Отменить,Cancel, +connect,Подключится по IP,Connect to IP, +controls,Управление,Controls, +exit,Выйти из игры,Exit the game, +fullscreen,Полный экран,Fullscreen, +gameplay,Геймплей,Gameplay, +half_rounds,Раундов до смены сторон,Rounds to switch sides, +host,Захостить сервер,Host server, +infinite_money,Бесконечные деньги,Infinite money, +install,Установить,Install, +ip,IP,IP, +join_attack,Стать атакующим,Join attack, +join_defence,Стать защищающим,Join defence, +join_spectators,Стать наблюдателем,Join spectators, +language,Язык,Language, +leave,Покинуть лобби,Leave lobby, +nick,Никнейм,Nickname, +ninstall,Не устанавливать,Don’t install, +pick_level,Выбор уровня,Pick level, +pick_team,Выберите свою команду,Pick your team, +port_forwarding,Проброс портов,Port forwarding, +public_ip_status,Статус публичного IP,Public IP status, +round_settings,Настройки раунда,Round settings, +round_time,Время раунда,Round time, +sensitivity,Чувствительность,Sensitivity, +settings,Настройки,Settings, +shuffle,Перемешать команды,Shuffle teams, +start,Начать сессию,Start session, +teams,Команды,Teams, +try_forward,Попробовать пробросить порты,Try to forward ports, +version_update,Изменение версии,Version update, +version_update_desc,"На сервере обнаружена новая (или просто другая) версия игры. +Установить её?","There’s new (or just different) version on server. +Install it?", +video,Видео,Video, +win_rounds,Раундов до победы,Rounds to win, diff --git a/translations/gui.csv.import b/translations/gui.csv.import new file mode 100644 index 0000000..07fccaf --- /dev/null +++ b/translations/gui.csv.import @@ -0,0 +1,17 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://cb0irxjgwubm4" + +[deps] + +files=["res://translations/gui.ru.translation", "res://translations/gui.en.translation", "res://translations/gui.ikg.translation"] + +source_file="res://translations/gui.csv" +dest_files=["res://translations/gui.ru.translation", "res://translations/gui.en.translation", "res://translations/gui.ikg.translation"] + +[params] + +compress=true +delimiter=0 diff --git a/translations/gui.en.translation b/translations/gui.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..adf517421f6710c6dcf3e60e9918ffc3aa0d1c00 GIT binary patch literal 1157 zcmV;01bX{YQ$s@n000005C8ya2LJ$V1ONaiwJ-f(X$Bo50LFLBNr0M}#(qA(Hp9i7 z;^#*>Bu^ZJ#_NAe<4)qmrWK_YWbtEepsf&ZjC9*I^3>V9;jl+5A!MxA9vsFVyh!vq zfvOt^-u|AJ>=c;*#sI_s|5=!r`VU2g{&)Jn0YmbCQRx3q_n*Oko}B-+Y&M(y-}~i?bpH@|JsIm$~?5&vV4r|;~-a_m-@PTIpO zeP`5ITC@paBGk3=FAdh~o$R?Sd*nPM`2U?{8V8`TeSB zZ-cN@OJ(Jx23COG8kD z{}=(dYlBy2+(#aLUtNfX`VoW1mZ1omBVL54h~ajZp$sNPNoDeXyKlm# ztf8rPdX-MpX3Ic`xzw0eR#+}~u#q@+JE|Wn=new3FRap0Q2gGq1I$@r6DY-WK%Uyx zFaxo++?S=UUVisrBLv4>mAok1(r%Z_QSN!x%5P;)YQ*}KMj{Q#r7^}NlC85l%Ra~> zALk1+#T0^fSDKIT`Ox@Dt)nv^gx9<3t!m ztC{u*YoxNmjakC)2J~&LLmx}r39o}^xgJ6IPtzG6_Pn*Jw}p9UTX$zH#4q|s@fiIc zM5lX}=YpEk&juYcn$BE?dj&g4e+BQw>jF#yFQ9mu2rTdb}oU X^)-E|+M~~>@U%mF zCeRB1Lyt7-qazzQ4-r^_}Z_g+J>nJXP0Mz39ptvb^Al4uial7LCL8 z7Jr(5Wd}7}1E}Nc_?xT4ls$v1dKPp|vu>6PxX5AP7{7Fo%|kjB=EAIG$=4Oc{Yt zfl))cFk?svnSKX&45>00vnfeap*S72C}dtgh-R#iAk~teL7akM9agwYz{P59xS@bt z$)1Gt_;)1zM>PHuc09XdHZLqKvQ!X5s8{pK)lB$c0p?;dR7y-hZduY+FyTRNO*K>le##fJ)`eSSsPQNv#HS<$snZzX0+||G9TK2Y6r3eMSS6PC+3TyM zrduUxm4qXaeEH!@^02TmapFz6>70YW9BeHQcWf{m(d2D^piuAcV!Q*TQ7}>>obV;j zh3L71Q_BNsruTe=Qd2`i)#o)M literal 0 HcmV?d00001 diff --git a/translations/gui.ru.translation b/translations/gui.ru.translation new file mode 100644 index 0000000000000000000000000000000000000000..ea7d7cb4281eff0cb7f40916746842b3aeff3e26 GIT binary patch literal 1396 zcmV-)1&jJpQ$s@n000005C8y>3IG6H1pojjwJ-f(kO`G405*NnNr2i>IzO#;!(OIa zye=Cp+UVrk31-^L4;nw>s$ApM#)|#mrQYmsCOH40q}Gkx3eD*sH@h@GIsUZbSq;(# zuv!2YbH6syb_%ut*8sZ!Td4epqWphs^1sOcApd>v@co|w732Sl|1MY@{VyW=Kjia& z=f6&Z|2fTOv-uzBKN_{;`A^jDCl|E@#Onb85n=d$dr-L@j<=-C?RvakDgzg#^uNH< zCZ$_1iHUb(`cL5L{{ZKuOE(@bb^4F<)aj-(@Kl%Lcu7yaq^2A0sVOPN?V_G|>F)o7 z{{r3s1R9Yt9S0@;pVvL*dbcK??zTgEk=n>P<$6#?{~7!T@c-t&?GI)^9KwGom@wLb zAm_x8*4SC=*%^bjriNre540K#u9lmJp%p)S^5sm;iVz*lvTS2sh;El7`0vq|vva+Mc=4dQmv{q7htd6ozm~=&2q$!3_1lEn3=IkIDWd7d{Z;r+ zH5@CF=OPOm#X5OIaOi0SMZ-WqzrXB{}ppyK?|yt z9h=1a+KCESw3yro|D%)v6GFR4H!Wp8n*tg)Bhvexzm_zBlLO1sUCJ1D~<4h%@u4VtHfS%7GK!KBBQ{@>Z$%Uu(|jwBN<&;*vv2%<0b## zD>>Lk*5V(T$to|=U^98;CI33fD+8O!MQ-`mEsOE5QK=TTkyU0g%SUb*wdyc#S;@a% znaQYC1Dj>4UfI`3R{043wlJrK0|T051a4a@xl)R7k`)P6S-C_qig=cs*D<9^mh@%_ z0+L3>`6XuI44Zor!PqFr+%Q+CgtQ;{Yr7G=B92rX{lCIK^2$YSSsr(*uGYosiH_0(hlJdo8@2sri4_zTD6gb%|u0$tn$_ux6E>|gGToC zuZu?b!5((YMwZx2HWsbg$ZW9DRmm)G6~j2#N?{|}i@#itTvWNLRYoqE<*FVwisVLa zyZ9`BvDG?-#W%9ASN^qBtE|9)umHU<~HbqoF>2iWJ8+!zu{rMKzrGe__TU zdi^imNGe~(V!Gy4jt9uN&AXp1I~9mTyxy2Eq7dR(Kki1gAE884FAW@9FDBJ|G;t3{(Ok+VBn00{&?$lHAr&$priS7vzSWyS?1fDV6nyimG|2t<48Mg*oU}Ob0H&n`@Cp@OL0e8nmrEeKRd0=qo*|Q1bgO zcBf?p;n`97T_w#e7mScX`DNtXY-HwB@Y<#isx#nSgPi^8!lt(L*<4&e%;_i#5~2+6k+w*8ll)D%w-gYJ((FQ$s^w CWv}`G literal 0 HcmV?d00001 diff --git a/translations/info.csv b/translations/info.csv new file mode 100644 index 0000000..95cd18b --- /dev/null +++ b/translations/info.csv @@ -0,0 +1,7 @@ +key,ru,en,ikg +au_loading,Подгружаем данные с сервера…,Loading data from server…, +au_err_load,Ошибка загрузки данных: ,Error while loading data: , +au_err_install,Ошибка загрузки новой версии: ,Error while downloading new version: , +au_new_version,Доступна новая версия!,New version available!, +au_current_version,У вас самая актуальная версия игры!,Your version is the current version!, +vr_version,Текущая версия игры: ,Game version: , diff --git a/translations/info.csv.import b/translations/info.csv.import new file mode 100644 index 0000000..fbf3416 --- /dev/null +++ b/translations/info.csv.import @@ -0,0 +1,17 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://4n0g51c0w3ht" + +[deps] + +files=["res://translations/info.ru.translation", "res://translations/info.en.translation", "res://translations/info.ikg.translation"] + +source_file="res://translations/info.csv" +dest_files=["res://translations/info.ru.translation", "res://translations/info.en.translation", "res://translations/info.ikg.translation"] + +[params] + +compress=true +delimiter=0 diff --git a/translations/info.en.translation b/translations/info.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..88ea621dcc507828b33aafa5d41b144838ea097d GIT binary patch literal 674 zcmWFv4svFI0u~_63dC$cEDFT_1tpoenN_JNAw`LK#W{&3nfZA@VF+LbQaSw(^(G&> zt_%|+hUNe&k^thO)Z+ZoqU6;0oc!d(ocNOb_~PW$yi^80WVyV=+*Afmph#|NadBdL zYB2*lkOS6{%D@d|W+WD8#Fr!{<)kw30=Y@0$=RtTPyvul#U(|VdFc>s#mPmP1tma1 z1_nkT2Dut+l9j$bHlN0qrex+6Fld6*0s+nd0fia}D*!Rb4IuCz3b>HiFfkA<02CKP zk^_ah0u(a=X^@?-TINIw0cl|%mImU$UjgwBP`)^j2B`tzOB*V;0VxKMS{WdQiMu;q zc%};EgY>EaG0fbKvsa>mfqamMK=M74ye4M=X^`9bffy9~@<3b)#Q%KQUbrn)Uz~0y z{ro@kqlRS+|6F;By}yT_1&g!%vtsxM6I#mV$SDRCe#7L*@cfEAM9L4$>0`-d`M?qt o{-05i;a}tppmbjeqvtfm0FXkkpgT(rToceSFrKwOksoL^d$oEo2#pPZNzUy>hRoSd4M%D{&#mzS8E%D@Q}$xSUTPE1cN zW?%<$z&cVHxPi=!#Nv$jlEkE(R0dukH>or^JGBHV0J5pLq$o2l9ipu`xhS)s1SrVB zzzD?3Knym?N?#wFPvg_el8TBMG(l>C0B3-JLJSlbAQ}{cnc3-JS^>xgxd{aRLje~O z8zu%TpWNOB;v6rh+1NQ2z)s%1_jh=$?7UjgwTdtrPSeQ87GHlQ$uxVz(pXE3us oYGLe-vsa=(?uO~_ndCJYWIv1#N)7Tr45DEG6bm5vAYkeN01f+k(*OVf literal 0 HcmV?d00001 diff --git a/translations/info.ru.translation b/translations/info.ru.translation new file mode 100644 index 0000000000000000000000000000000000000000..4be3aacf1d51f16ce49a83905be4706b2e303305 GIT binary patch literal 518 zcmV+h0{Q(?Q$s@n000005C8ya0{{T-0RR9fwJ-f(X#yn=00vlALI87{;dBC^lmbAD zQB2y!n9*wojv}kqT@PqUBF!+C@6VcurPSD@tj6+UBR++7A6ORa=)oTfOh!QWQ$JmQ z_tR2907U>r0MPRr7<#Tv!El3Ev^dYwE{xMGh;<(>!tQtQ7kDH_=fvm-iVlB(H!kxo zEpAuG!32)TJeh}r;b-s@_y_y~J{f>$nDA5Zz*52ofCm4913|v}bP?8kIt>S6%Qn&5 zY&Z~p%0tOIEOxf6^P&esV4spd!B8u?JnJN0CqIJWpE<(L6=N;B3=j|5QqUwdG^^08 zNKKihnkwtkDyF2$zEm_plSW;7s*66Q`5#c36&F;fi2OJ{?8q^y@SF6ghz06Jgw#Pv z_*twYBpXOFoD@?uOC|M14@vo2sZ1M{rOKE}38ROs%#|rky;0F5F+=lI7GJ-HW>ur7 zw)9j}#W69zmI@;a(@M6~8T~q%0X!gZ0y1+)4@miybtT!avoPBR1f~JCVUEY;x!+JU z<2(RM{GCur1_Xo2K-7wIt?~pY6mbEVaForrl>qWNZ&OJFmTF( zuc5``nww-|R%2~Ik-(XPLIQFa0EQS$2^h&BahtF@y45Y(Q!NHCF^4Lx$de<%{Q4fo Iu~Jh*LvD%YbpQYW literal 0 HcmV?d00001 diff --git a/weapons/molikman/fire_smoke/fire_smoke.tscn b/weapons/molikman/fire_smoke/fire_smoke.tscn index 8708188..c796607 100644 --- a/weapons/molikman/fire_smoke/fire_smoke.tscn +++ b/weapons/molikman/fire_smoke/fire_smoke.tscn @@ -3,6 +3,7 @@ [ext_resource type="Material" uid="uid://bw3uex67yy8e7" path="res://materials/fire_wall.tres" id="1_w3iei"] [sub_resource type="CylinderMesh" id="CylinderMesh_cqb3p"] +resource_local_to_scene = true material = ExtResource("1_w3iei") top_radius = 3.5 bottom_radius = 3.5