From 458ac4af5e2311f20fe47513d3df5a56a15a1252 Mon Sep 17 00:00:00 2001 From: Joey Maher Date: Sat, 6 Jun 2020 13:09:01 -0500 Subject: [PATCH 1/3] Adds simple auto walk functionality. Toggleable or push to hold --- CHANGELOG.md | 1 + assets/voxygen/i18n/en.ron | 4 ++ voxygen/src/hud/mod.rs | 35 +++++++++++++++ voxygen/src/hud/settings_window.rs | 71 +++++++++++++++++++++++++++++- voxygen/src/key_state.rs | 5 ++- voxygen/src/session.rs | 58 ++++++++++++++++++++++-- voxygen/src/settings.rs | 6 +++ voxygen/src/window.rs | 2 + 8 files changed, 176 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3d2e299df..2eba85b7c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Character name and level information to chat, social tab and `/players` command. - Added inventory, armour and weapon saving - Show where screenshots are saved to in the chat +- Added basic auto walk ### Changed diff --git a/assets/voxygen/i18n/en.ron b/assets/voxygen/i18n/en.ron index ff4ed07b8c..04f30c9a16 100644 --- a/assets/voxygen/i18n/en.ron +++ b/assets/voxygen/i18n/en.ron @@ -264,6 +264,8 @@ magically infused items?"#, "hud.settings.invert_mouse_y_axis": "Invert Mouse Y Axis", "hud.settings.enable_mouse_smoothing": "Camera Smoothing", "hud.settings.free_look_behavior": "Free look behavior", + "hud.settings.auto_walk_behavior": "Auto walk behavior", + "hud.settings.stop_auto_walk_on_input": "Stop auto walk on movement", "hud.settings.view_distance": "View Distance", "hud.settings.sprites_view_distance": "Sprites View Distance", @@ -296,6 +298,7 @@ magically infused items?"#, "hud.spell": "Spells", "hud.free_look_indicator": "Free look active", + "hud.auto_walk_indicator": "Auto walk active", /// End HUD section @@ -348,6 +351,7 @@ magically infused items?"#, "gameinput.togglewield": "Toggle Wield", "gameinput.interact": "Interact", "gameinput.freelook": "Free Look", + "gameinput.autowalk": "Auto Walk", /// End GameInput section diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index adab3db211..7b5770395b 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -184,6 +184,10 @@ widget_ids! { free_look_txt, free_look_bg, + // Auto walk indicator + auto_walk_txt, + auto_walk_bg, + // Example Quest quest_bg, q_headline_bg, @@ -255,6 +259,8 @@ pub enum Event { ChangeLanguage(LanguageMetadata), ChangeBinding(GameInput), ChangeFreeLookBehavior(PressBehavior), + ChangeAutoWalkBehavior(PressBehavior), + ChangeStopAutoWalkOnInput(bool), } // TODO: Are these the possible layouts we want? @@ -319,6 +325,7 @@ pub struct Show { want_grab: bool, stats: bool, free_look: bool, + auto_walk: bool, } impl Show { fn bag(&mut self, open: bool) { @@ -522,6 +529,7 @@ impl Hud { ingame: true, stats: false, free_look: false, + auto_walk: false, }, to_focus: None, //never_show: false, @@ -1677,6 +1685,12 @@ impl Hud { settings_window::Event::ChangeFreeLookBehavior(behavior) => { events.push(Event::ChangeFreeLookBehavior(behavior)); }, + settings_window::Event::ChangeAutoWalkBehavior(behavior) => { + events.push(Event::ChangeAutoWalkBehavior(behavior)); + }, + settings_window::Event::ChangeStopAutoWalkOnInput(state) => { + events.push(Event::ChangeStopAutoWalkOnInput(state)); + }, } } } @@ -1795,6 +1809,25 @@ impl Hud { .set(self.ids.free_look_txt, ui_widgets); } + // Auto walk indicator + if self.show.auto_walk { + Text::new(&self.voxygen_i18n.get("hud.auto_walk_indicator")) + .color(TEXT_BG) + .mid_top_with_margin_on( + ui_widgets.window, + if self.show.free_look { 128.0 } else { 100.0 }, + ) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(20)) + .set(self.ids.auto_walk_bg, ui_widgets); + Text::new(&self.voxygen_i18n.get("hud.auto_walk_indicator")) + .color(KILL_COLOR) + .top_left_with_margins_on(self.ids.auto_walk_bg, -1.0, -1.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(20)) + .set(self.ids.auto_walk_txt, ui_widgets); + } + // Maintain slot manager for event in self.slot_manager.maintain(ui_widgets) { use comp::slot::Slot; @@ -2155,4 +2188,6 @@ impl Hud { } pub fn free_look(&mut self, free_look: bool) { self.show.free_look = free_look; } + + pub fn auto_walk(&mut self, auto_walk: bool) { self.show.auto_walk = auto_walk; } } diff --git a/voxygen/src/hud/settings_window.rs b/voxygen/src/hud/settings_window.rs index df81814a16..e3fc95b383 100644 --- a/voxygen/src/hud/settings_window.rs +++ b/voxygen/src/hud/settings_window.rs @@ -156,7 +156,11 @@ widget_ids! { speech_bubble_dark_mode_text, speech_bubble_dark_mode_button, free_look_behavior_text, - free_look_behavior_list + free_look_behavior_list, + auto_walk_behavior_text, + auto_walk_behavior_list, + stop_auto_walk_on_input_button, + stop_auto_walk_on_input_label, } } @@ -240,6 +244,8 @@ pub enum Event { ChangeLanguage(LanguageMetadata), ChangeBinding(GameInput), ChangeFreeLookBehavior(PressBehavior), + ChangeAutoWalkBehavior(PressBehavior), + ChangeStopAutoWalkOnInput(bool), } pub enum ScaleChange { @@ -1344,6 +1350,69 @@ impl<'a> Widget for SettingsWindow<'a> { _ => unreachable!(), } } + + // Auto walk behavior + Text::new( + &self + .localized_strings + .get("hud.settings.auto_walk_behavior"), + ) + .down_from(state.ids.mouse_zoom_invert_button, 10.0) + .right_from(state.ids.free_look_behavior_text, 150.0) + .font_size(self.fonts.cyri.scale(14)) + .font_id(self.fonts.cyri.conrod_id) + .color(TEXT_COLOR) + .set(state.ids.auto_walk_behavior_text, ui); + + let auto_walk_selected = + self.global_state.settings.gameplay.auto_walk_behavior as usize; + + if let Some(clicked) = DropDownList::new(&mode_label_list, Some(auto_walk_selected)) + .w_h(200.0, 30.0) + .color(MENU_BG) + .label_color(TEXT_COLOR) + .label_font_id(self.fonts.cyri.conrod_id) + .down_from(state.ids.auto_walk_behavior_text, 8.0) + .set(state.ids.auto_walk_behavior_list, ui) + { + match clicked { + 0 => events.push(Event::ChangeAutoWalkBehavior(PressBehavior::Toggle)), + 1 => events.push(Event::ChangeAutoWalkBehavior(PressBehavior::Hold)), + _ => unreachable!(), + } + } + + // Stop autowalk on input toggle + let stop_auto_walk_on_input_toggle = ToggleButton::new( + self.global_state.settings.gameplay.stop_auto_walk_on_input, + self.imgs.checkbox, + self.imgs.checkbox_checked, + ) + .w_h(18.0, 18.0) + .right_from(state.ids.auto_walk_behavior_text, 80.0) + .hover_images(self.imgs.checkbox_mo, self.imgs.checkbox_checked_mo) + .press_images(self.imgs.checkbox_press, self.imgs.checkbox_checked) + .set(state.ids.stop_auto_walk_on_input_button, ui); + + if self.global_state.settings.gameplay.stop_auto_walk_on_input + != stop_auto_walk_on_input_toggle + { + events.push(Event::ChangeStopAutoWalkOnInput( + !self.global_state.settings.gameplay.stop_auto_walk_on_input, + )); + } + + Text::new( + &self + .localized_strings + .get("hud.settings.stop_auto_walk_on_input"), + ) + .right_from(state.ids.stop_auto_walk_on_input_button, 10.0) + .font_size(self.fonts.cyri.scale(14)) + .font_id(self.fonts.cyri.conrod_id) + .graphics_for(state.ids.stop_auto_walk_on_input_button) + .color(TEXT_COLOR) + .set(state.ids.stop_auto_walk_on_input_label, ui); } // 3) Controls Tab -------------------------------- diff --git a/voxygen/src/key_state.rs b/voxygen/src/key_state.rs index e2ebc8e703..91fbaf1583 100644 --- a/voxygen/src/key_state.rs +++ b/voxygen/src/key_state.rs @@ -10,6 +10,7 @@ pub struct KeyState { pub toggle_wield: bool, pub toggle_sit: bool, pub toggle_dance: bool, + pub auto_walk: bool, pub swap_loadout: bool, pub respawn: bool, pub analog_matrix: Vec2, @@ -27,6 +28,7 @@ impl KeyState { toggle_wield: false, toggle_sit: false, toggle_dance: false, + auto_walk: false, swap_loadout: false, respawn: false, analog_matrix: Vec2::zero(), @@ -37,7 +39,8 @@ impl KeyState { let dir = if self.analog_matrix == Vec2::zero() { Vec2::::new( if self.right { 1.0 } else { 0.0 } + if self.left { -1.0 } else { 0.0 }, - if self.up { 1.0 } else { 0.0 } + if self.down { -1.0 } else { 0.0 }, + if self.up || self.auto_walk { 1.0 } else { 0.0 } + + if self.down { -1.0 } else { 0.0 }, ) } else { self.analog_matrix diff --git a/voxygen/src/session.rs b/voxygen/src/session.rs index fb4fd12f8a..e6d981b4be 100644 --- a/voxygen/src/session.rs +++ b/voxygen/src/session.rs @@ -142,6 +142,13 @@ impl PlayState for SessionState { let mut ori = self.scene.camera().get_orientation(); let mut free_look = false; + let mut auto_walk = false; + + fn stop_auto_walk(auto_walk: &mut bool, key_state: &mut KeyState, hud: &mut Hud) { + *auto_walk = false; + hud.auto_walk(false); + key_state.auto_walk = false; + } // Game loop let mut current_client_state = self.client.borrow().get_client_state(); @@ -309,6 +316,7 @@ impl PlayState for SessionState { { self.key_state.toggle_sit = state; if state { + stop_auto_walk(&mut auto_walk, &mut self.key_state, &mut self.hud); self.client.borrow_mut().toggle_sit(); } } @@ -317,13 +325,34 @@ impl PlayState for SessionState { { self.key_state.toggle_dance = state; if state { + stop_auto_walk(&mut auto_walk, &mut self.key_state, &mut self.hud); self.client.borrow_mut().toggle_dance(); } } - Event::InputUpdate(GameInput::MoveForward, state) => self.key_state.up = state, - Event::InputUpdate(GameInput::MoveBack, state) => self.key_state.down = state, - Event::InputUpdate(GameInput::MoveLeft, state) => self.key_state.left = state, - Event::InputUpdate(GameInput::MoveRight, state) => self.key_state.right = state, + Event::InputUpdate(GameInput::MoveForward, state) => { + if state && global_state.settings.gameplay.stop_auto_walk_on_input { + stop_auto_walk(&mut auto_walk, &mut self.key_state, &mut self.hud); + } + self.key_state.up = state + }, + Event::InputUpdate(GameInput::MoveBack, state) => { + if state && global_state.settings.gameplay.stop_auto_walk_on_input { + stop_auto_walk(&mut auto_walk, &mut self.key_state, &mut self.hud); + } + self.key_state.down = state + }, + Event::InputUpdate(GameInput::MoveLeft, state) => { + if state && global_state.settings.gameplay.stop_auto_walk_on_input { + stop_auto_walk(&mut auto_walk, &mut self.key_state, &mut self.hud); + } + self.key_state.left = state + }, + Event::InputUpdate(GameInput::MoveRight, state) => { + if state && global_state.settings.gameplay.stop_auto_walk_on_input { + stop_auto_walk(&mut auto_walk, &mut self.key_state, &mut self.hud); + } + self.key_state.right = state + }, Event::InputUpdate(GameInput::Glide, state) => { self.inputs.glide.set_state(state); }, @@ -442,6 +471,21 @@ impl PlayState for SessionState { _ => {}, }; }, + Event::InputUpdate(GameInput::AutoWalk, state) => { + match (global_state.settings.gameplay.auto_walk_behavior, state) { + (PressBehavior::Toggle, true) => { + auto_walk = !auto_walk; + self.key_state.auto_walk = auto_walk; + self.hud.auto_walk(auto_walk); + }, + (PressBehavior::Hold, state) => { + auto_walk = state; + self.key_state.auto_walk = auto_walk; + self.hud.auto_walk(auto_walk); + }, + _ => {}, + } + }, Event::AnalogGameInput(input) => match input { AnalogGameInput::MovementX(v) => { self.key_state.analog_matrix.x = v; @@ -767,6 +811,12 @@ impl PlayState for SessionState { HudEvent::ChangeFreeLookBehavior(behavior) => { global_state.settings.gameplay.free_look_behavior = behavior; }, + HudEvent::ChangeAutoWalkBehavior(behavior) => { + global_state.settings.gameplay.auto_walk_behavior = behavior; + }, + HudEvent::ChangeStopAutoWalkOnInput(state) => { + global_state.settings.gameplay.stop_auto_walk_on_input = state; + }, } } diff --git a/voxygen/src/settings.rs b/voxygen/src/settings.rs index 5ae6d87294..140ca54732 100644 --- a/voxygen/src/settings.rs +++ b/voxygen/src/settings.rs @@ -140,6 +140,7 @@ impl ControlSettings { GameInput::ToggleWield => KeyMouse::Key(VirtualKeyCode::T), //GameInput::Charge => KeyMouse::Key(VirtualKeyCode::Key1), GameInput::FreeLook => KeyMouse::Key(VirtualKeyCode::L), + GameInput::AutoWalk => KeyMouse::Key(VirtualKeyCode::Period), GameInput::Slot1 => KeyMouse::Key(VirtualKeyCode::Key1), GameInput::Slot2 => KeyMouse::Key(VirtualKeyCode::Key2), GameInput::Slot3 => KeyMouse::Key(VirtualKeyCode::Key3), @@ -200,6 +201,7 @@ impl Default for ControlSettings { GameInput::ToggleWield, //GameInput::Charge, GameInput::FreeLook, + GameInput::AutoWalk, GameInput::Slot1, GameInput::Slot2, GameInput::Slot3, @@ -467,6 +469,8 @@ pub struct GameplaySettings { pub bar_numbers: BarNumbers, pub ui_scale: ScaleMode, pub free_look_behavior: PressBehavior, + pub auto_walk_behavior: PressBehavior, + pub stop_auto_walk_on_input: bool, } impl Default for GameplaySettings { @@ -491,6 +495,8 @@ impl Default for GameplaySettings { bar_numbers: BarNumbers::Off, ui_scale: ScaleMode::RelativeToWindow([1920.0, 1080.0].into()), free_look_behavior: PressBehavior::Toggle, + auto_walk_behavior: PressBehavior::Toggle, + stop_auto_walk_on_input: true, } } } diff --git a/voxygen/src/window.rs b/voxygen/src/window.rs index 78f60f3db2..70db080825 100644 --- a/voxygen/src/window.rs +++ b/voxygen/src/window.rs @@ -63,6 +63,7 @@ pub enum GameInput { //Charge, SwapLoadout, FreeLook, + AutoWalk, } impl GameInput { @@ -104,6 +105,7 @@ impl GameInput { GameInput::ToggleWield => "gameinput.togglewield", //GameInput::Charge => "gameinput.charge", GameInput::FreeLook => "gameinput.freelook", + GameInput::AutoWalk => "gameinput.autowalk", GameInput::Slot1 => "gameinput.slot1", GameInput::Slot2 => "gameinput.slot2", GameInput::Slot3 => "gameinput.slot3", From de7ab9f5edb58dbe69c892b5e58251cb35989f61 Mon Sep 17 00:00:00 2001 From: Pfauenauge90 <44173739+Pfauenauge90@users.noreply.github.com> Date: Sat, 6 Jun 2020 21:29:35 +0200 Subject: [PATCH 2/3] update default keybindings file, en.ron, de_DE.ron --- assets/voxygen/element/help.png | 4 ++-- assets/voxygen/i18n/de_DE.ron | 3 ++- assets/voxygen/i18n/en.ron | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/assets/voxygen/element/help.png b/assets/voxygen/element/help.png index 7787e11e90..68c382b3f6 100644 --- a/assets/voxygen/element/help.png +++ b/assets/voxygen/element/help.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a3c800b96a59308c1d1c800bff00d34f06a8cc6104be7bb3a93a568a64687d24 -size 15596 +oid sha256:8bf2944cf39261d9f32fab48e9194e874e5ec93f31cdf8a039e14764395c1b6b +size 16021 diff --git a/assets/voxygen/i18n/de_DE.ron b/assets/voxygen/i18n/de_DE.ron index 979379fbab..df54b77e7d 100644 --- a/assets/voxygen/i18n/de_DE.ron +++ b/assets/voxygen/i18n/de_DE.ron @@ -347,7 +347,8 @@ magischen Gegenstände ergattern?"#, "gameinput.charge": "Anstürmen", "gameinput.togglewield": "Waffe ziehen/wegstecken", "gameinput.interact": "Interagieren", - "gameinput.freelook": "Freie Sicht", + "gameinput.freelook": "Freie Sicht", + "gameinput.autowalk": "Automatisch Laufen", "gameinput.dance": "Tanzen", /// End GameInput section diff --git a/assets/voxygen/i18n/en.ron b/assets/voxygen/i18n/en.ron index 04f30c9a16..cc2da69520 100644 --- a/assets/voxygen/i18n/en.ron +++ b/assets/voxygen/i18n/en.ron @@ -352,6 +352,7 @@ magically infused items?"#, "gameinput.interact": "Interact", "gameinput.freelook": "Free Look", "gameinput.autowalk": "Auto Walk", + "gameinput.dance": "Dance", /// End GameInput section From 1c1d0d9ca68f28697d987e0bc8c07ef5c36e39b8 Mon Sep 17 00:00:00 2001 From: Pfauenauge90 <44173739+Pfauenauge90@users.noreply.github.com> Date: Sat, 6 Jun 2020 21:46:53 +0200 Subject: [PATCH 3/3] Added spanish translation file --- assets/voxygen/i18n/es_ES.ron | 439 ++++++++++++++++++++++++++++++++++ 1 file changed, 439 insertions(+) create mode 100644 assets/voxygen/i18n/es_ES.ron diff --git a/assets/voxygen/i18n/es_ES.ron b/assets/voxygen/i18n/es_ES.ron new file mode 100644 index 0000000000..bede5e50c4 --- /dev/null +++ b/assets/voxygen/i18n/es_ES.ron @@ -0,0 +1,439 @@ +/// Translation document instructions +/// +/// In order to keep localization documents readible please follow the following +/// rules: +/// - separate the string map sections using a commentary describing the purpose +/// of the next section +/// - prepend multi-line strings with a commentary +/// - append one blank lines after a multi-line strings and two after sections +/// +/// To add a new language in Veloren, just write an additional `.ron` file in +/// `assets/voxygen/i18n` and that's it! +/// +/// Localization for Spanish (Spain) + +VoxygenLocalization( + metadata: ( + language_name: "Español de España", + language_identifier: "es_ES", + ), + convert_utf8_to_ascii: false, + fonts: { + "opensans": Font ( + asset_key: "voxygen.font.OpenSans-Regular", + scale_ratio: 1.0, + ), + "metamorph": Font ( + asset_key: "voxygen.font.Metamorphous-Regular", + scale_ratio: 1.0, + ), + "alkhemi": Font ( + asset_key: "voxygen.font.Alkhemikal", + scale_ratio: 1.0, + ), + "wizard": Font ( + asset_key: "voxygen.font.wizard", + scale_ratio: 1.0, + ), + "cyri": Font ( + asset_key: "voxygen.font.haxrcorp_4089_cyrillic_altgr_extended", + scale_ratio: 1.0, + ), + }, + string_map: { + /// Start Common section + // Texts used in multiple locations with the same formatting + "common.username": "Usuario", + "common.singleplayer": "Solo", + "common.multiplayer": "Multijugador", + "common.servers": "Servidores", + "common.quit": "Salir", + "common.settings": "Opciones", + "common.languages": "Idiomas", + "common.interface": "Interfaz", + "common.gameplay": "Juego", + "common.controls": "Controles", + "common.video": "Gráficos", + "common.sound": "Sonido", + "common.resume": "Continuar", + "common.characters": "Personajes", + "common.close": "Cerrar", + "common.yes": "Sí", + "common.no": "No", + "common.back": "Atrás", + "common.create": "Crear", + "common.okay": "Okay", + "common.accept": "Aceptar", + "common.disclaimer": "Atención", + "common.cancel": "Cancelar", + "common.none": "Ninguno", + "common.error": "Error", + "common.fatal_error": "Error Fatal", + + // Message when connection to the server is lost + "common.connection_lost": r#"¡Conexión perdida! +¿Se reinició el servidor? +¿Está el cliente actualizado?"#, + + + "common.species.orc": "Orco", + "common.species.human": "Humano", + "common.species.dwarf": "Enano", + "common.species.elf": "Elfo", + "common.species.undead": "No muerto", + "common.species.danari": "Danari", + + "common.weapons.axe": "Hacha", + "common.weapons.sword": "Espada", + "common.weapons.staff": "Bastón", + "common.weapons.bow": "Arco", + "common.weapons.hammer": "Martillo", + /// End Common section + + + /// Start Main screen section + "main.connecting": "Conectando", + "main.creating_world": "Creando mundo", + + // Welcome notice that appears the first time Veloren is started + "main.notice": r#"¡Bienvenido a la versión alfa de Veloren! + +Antes de que te adentres en la diversión, por favor ten en cuenta un par de cosas: + +- Esto es una alfa muy temprana. Espera errores, mecánicas de juego extremadamente sin terminar, mecánicas sin pulir, y características que faltan. + +- Si tienes feedback constructivo o reportes de error, puedes contactar con nosotros vía Reddit, GitLab, o nuestro servidor de Discord comunitario. + +- Veloren se licencia bajo la licencia de código abierto GPL 3. Esto quiere decir que eres libre para jugar, modificar y redistribuir el juego tal y como desees (siempre y cuando tal trabajo se licencie también bajo la GPL 3). + +- Veloren es un proyecto comunitario sin ánimo de lucro, y todo aquel que trabaja en él es un voluntario. +Si te gusta lo que ves, ¡eres bienvenido de unirte a los equipos de desarrollo o arte! + +Gracias por tomarte el tiempo de leer esta noticia, ¡esperamos que disfrutes del juego! + +~ Los desarrolladores de Veloren"#, + + // Login process description + "main.login_process": r#"Información sobre el proceso de login: + +Si estás experimentando problemas para autenticarte: + +Por favor, ten en cuenta que ahora necesitas una cuenta +para jugar en servidores con autenticación activada. + +Puedes crear una cuenta en + +https://account.veloren.net."#, + "main.login.server_not_found": "Servidor no encontrado", + "main.login.authentication_error": "Error de autenticación al servidor", + "main.login.server_full": "El servidor está lleno", + "main.login.untrusted_auth_server": "Servidor con autenticación sin confianza", + "main.login.outdated_client_or_server": "ServerEnloquecido: Probablemente las versiones son incompatibles, revisa si hay actualizaciones.", + "main.login.timeout": "Timeout: El servidor no respondió a tiempo. (Sobrecargado o con problemas de red).", + "main.login.server_shut_down": "Servidor apagado", + "main.login.already_logged_in": "Ya estás accediendo al servidor.", + "main.login.network_error": "Error de red", + "main.login.failed_sending_request": "Petición al servidor de autenticación fallida", + "main.login.invalid_character": "El personaje seleccionado no es válido", + "main.login.client_crashed": "El cliente se cerró inesperadamente", + + /// End Main screen section + + + /// Start HUD Section + "hud.do_not_show_on_startup": "No muestres esto al inicio", + "hud.show_tips": "Mostrar ayuda", + "hud.quests": "Misiones", + "hud.you_died": "Has muerto", + "hud.waypoint_saved": "Punto de ruta guardado", + + "hud.press_key_to_show_keybindings_fmt": "Pulsa {key} para mostrar atajos de teclado", + "hud.press_key_to_show_debug_info_fmt": "Pulsa {key} para mostrar información de depuración", + "hud.press_key_to_toggle_keybindings_fmt": "Pulsa {key} para alternar los atajos de teclado", + "hud.press_key_to_toggle_debug_info_fmt": "Pulsa {key} para alternar la información de depuración", + + // Respawn message + "hud.press_key_to_respawn": r#"Pulsa {key} para reaparecer en el último campamento que visitaste."#, + + // Welcome message + "hud.welcome": r#"¡Bienvenido a la alfa de Veloren! + + +Algunos consejos antes de empezar: + + +Pulsa F1 para ver los comandos disponibles. + +Escribe /help en el chat para ver los comandos de chat + + +¡Cofres y otros objetos aparecen aleatoriamente en el mundo! + +Click derecho para recogerlos. + +Para utilizar lo que recojas de esos cofres, abre tu inventario con 'B'. + +Haz doble click sobre los objetos en tu inventario para usarlos o equipártelos. + +Deshazte de ellos haciendo click una vez sobre ellos y haciendo click fuera del inventario + + +Las noches pueden ser muy oscuras en Veloren. + +Enciende tu linterna pulsando 'G' + + +¿Quieres liberar tu cursor para cerrar esta ventana? ¡Pulsa TAB! + + +Disfruta de tu estancia en el mundo de Veloren."#, + +"hud.temp_quest_headline": r#"¡Por favor, ayúdanos Viajero!"#, +"hud.temp_quest_text": r#"¡Mazmorras llenas de fanáticos +han emergido en cada rincón de nuestras pacíficas ciudades! + + +Encuentra algo de compañía, acumula comida +y derrota a sus viles líderes y acólitos. + + +¿Quizás podrías obtener incluso uno de sus +objetos imbuidos de magia?"#, + + + + // Inventory + "hud.bag.inventory": "Inventario de {playername}", + "hud.bag.stats_title": "Atributos de {playername}", + "hud.bag.exp": "Exp", + "hud.bag.armor": "Armadura", + "hud.bag.stats": "Atributos", + "hud.bag.head": "Cabeza", + "hud.bag.neck": "Cuello", + "hud.bag.tabard": "Tabardo", + "hud.bag.shoulders": "Hombros", + "hud.bag.chest": "Pecho", + "hud.bag.hands": "Manos", + "hud.bag.lantern": "Linterna", + "hud.bag.belt": "Cinturón", + "hud.bag.ring": "Anillo", + "hud.bag.back": "Espalda", + "hud.bag.legs": "Piernas", + "hud.bag.feet": "Pies", + "hud.bag.mainhand": "Mano principal", + "hud.bag.offhand": "Mano secundaria", + + + // Map and Questlog + "hud.map.map_title": "Mapa", + "hud.map.qlog_title": "Misiones", + + // Settings + "hud.settings.general": "General", + "hud.settings.none": "Ninguno", + "hud.settings.press_behavior.toggle": "Alternar", + "hud.settings.press_behavior.hold": "Mantener", + "hud.settings.help_window": "Ventana de ayuda", + "hud.settings.debug_info": "Información de depuración", + "hud.settings.tips_on_startup": "Consejos-Al-Iniciar", + "hud.settings.ui_scale": "Escala-IU", + "hud.settings.relative_scaling": "Escala relativa", + "hud.settings.custom_scaling": "Escala personalizada", + "hud.settings.crosshair": "Punto de mira", + "hud.settings.transparency": "Transparencia", + "hud.settings.hotbar": "Barra rápida", + "hud.settings.toggle_shortcuts": "Alternar atajos", + "hud.settings.toggle_bar_experience": "Alternar barra de experiencia", + "hud.settings.scrolling_combat_text": "Texto de combate deslizante", + "hud.settings.single_damage_number": "Números de daño único", + "hud.settings.cumulated_damage": "Daño acumulado", + "hud.settings.incoming_damage": "Daño inminente", + "hud.settings.cumulated_incoming_damage": "Daño inminente acumulado", + "hud.settings.speech_bubble_dark_mode": "Modo oscuro de burbuja de diálogo", + "hud.settings.energybar_numbers": "Números de barra de energía", + "hud.settings.values": "Valores", + "hud.settings.percentages": "Porcentaje", + "hud.settings.chat": "Chat", + "hud.settings.background_transparency": "Transparencia del fondo", + + "hud.settings.pan_sensitivity": "Sensibilidad de paneo", + "hud.settings.zoom_sensitivity": "Sensibilidad de zoom", + "hud.settings.invert_scroll_zoom": "Invertir el deslizamiento del zoom", + "hud.settings.invert_mouse_y_axis": "Invertir eje Y del ratón", + "hud.settings.enable_mouse_smoothing": "Suavizado de cámara", + "hud.settings.free_look_behavior": "Comportamiento de vista libre", + + "hud.settings.view_distance": "Ver distancia", + "hud.settings.sprites_view_distance": "Distancia de visión de sprites", + "hud.settings.figures_view_distance": "Distancia de visión de entidades", + "hud.settings.maximum_fps": "FPS máximos", + "hud.settings.fov": "Campo de visión (grados)", + "hud.settings.gamma": "Gamma", + "hud.settings.antialiasing_mode": "Modo AntiAliasing", + "hud.settings.cloud_rendering_mode": "Modo renderizado de nubes", + "hud.settings.fluid_rendering_mode": "Modo de renderizado fluido", + "hud.settings.fluid_rendering_mode.cheap": "Barato", + "hud.settings.fluid_rendering_mode.shiny": "Brillante", + "hud.settings.cloud_rendering_mode.regular": "Regular", + "hud.settings.fullscreen": "Pantalla completa", + "hud.settings.save_window_size": "Guardar tamaño de ventana", + + "hud.settings.music_volume": "Volumen de música", + "hud.settings.sound_effect_volume": "Volumen de efectos de sonido", + "hud.settings.audio_device": "Dispositivo de audio", + + "hud.settings.awaitingkey": "Pulsa una tecla...", + + "hud.social": "Social", + "hud.social.online": "Conectado", + "hud.social.friends": "Amigos", + "hud.social.not_yet_available": "No disponible todavía", + "hud.social.faction": "Facción", + "hud.social.play_online_fmt": "{nb_player} jugador(es) conectados", + + "hud.spell": "Hechizos", + + "hud.free_look_indicator": "Vista libre activa", + + /// End HUD section + + + /// Start GameInput section + + "gameinput.primary": "Ataque básico", + "gameinput.secondary": "Ataque secundario/Bloquear/Apuntar", + "gameinput.slot1": "Ranura 1 de barra rápida", + "gameinput.slot2": "Ranura 2 de barra rápida", + "gameinput.slot3": "Ranura 3 de barra rápida", + "gameinput.slot4": "Ranura 4 de barra rápida", + "gameinput.slot5": "Ranura 5 de barra rápida", + "gameinput.slot6": "Ranura 6 de barra rápida", + "gameinput.slot7": "Ranura 7 de barra rápida", + "gameinput.slot8": "Ranura 8 de barra rápida", + "gameinput.slot9": "Ranura 9 de barra rápida", + "gameinput.slot10": "Ranura 10 de barra rápida", + "gameinput.swaploadout": "Intercambiar armamento", + "gameinput.togglecursor": "Alternar cursor", + "gameinput.help": "Alternar ventana de ayuda", + "gameinput.toggleinterface": "Alternar interfaz", + "gameinput.toggledebug": "Alternar FPS e información de depuración", + "gameinput.screenshot": "Tomar captura de pantalla", + "gameinput.toggleingameui": "Alternar nombres de usuario", + "gameinput.fullscreen": "Alternar pantalla completa", + "gameinput.moveforward": "Moverse hacia delante", + "gameinput.moveleft": "Moverse a la izquierda", + "gameinput.moveright": "Moverse a la derecha", + "gameinput.moveback": "Moverse hacia atrás", + "gameinput.jump": "Saltar", + "gameinput.glide": "Planear", + "gameinput.roll": "Rodar", + "gameinput.climb": "Trepar", + "gameinput.climbdown": "Trepar hacia abajo", + "gameinput.wallleap": "Salto en muro", + "gameinput.togglelantern": "Alternar linterna", + "gameinput.mount": "Montar", + "gameinput.enter": "Entrar", + "gameinput.command": "Comando", + "gameinput.escape": "Escapar", + "gameinput.map": "Mapa", + "gameinput.bag": "Inventario", + "gameinput.social": "Social", + "gameinput.sit": "Sentarse", + "gameinput.spellbook": "Hechizos", + "gameinput.settings": "Opciones", + "gameinput.respawn": "Revivir", + "gameinput.charge": "Cargar", + "gameinput.togglewield": "Alternar empuñadura", + "gameinput.interact": "Interactuar", + "gameinput.freelook": "Vista libre", + "gameinput.autowalk": "Auto Correr", + + /// End GameInput section + + + /// Start chracter selection section + "char_selection.loading_characters": "Cargando personajes...", + "char_selection.delete_permanently": "¿Borrar permanentemente este personaje?", + "char_selection.deleting_character": "Borrando personaje...", + "char_selection.change_server": "Cambiar de servidor", + "char_selection.enter_world": "Entrar al mundo", + "char_selection.logout": "Salir", + "char_selection.create_new_charater": "Crear nuevo personaje", + "char_selection.creating_character": "Creando personaje...", + "char_selection.character_creation": "Creación de personaje", + + "char_selection.human_default": "Humano Predeterminado", + "char_selection.level_fmt": "Nivel {level_nb}", + "char_selection.uncanny_valley": "Tierra salvaje", + "char_selection.plains_of_uncertainty": "Llanuras de la incertidumbre", + "char_selection.beard": "Barba", + "char_selection.hair_style": "Estilo de pelo", + "char_selection.hair_color": "Color de pelo", + "char_selection.eye_color": "Color de ojos", + "char_selection.skin": "Piel", + "char_selection.eyeshape": "Detalle de los ojos", + "char_selection.accessories": "Accesorios", + "char_selection.create_info_name": "¡Tu personaje necesita un nombre!", + + /// End chracter selection section + + + /// Start character window section + "character_window.character_name": "Nombre del personaje", + // Charater stats + "character_window.character_stats": r#"Resistencia + +Aptitud + +Fuerza de voluntad +"#, + /// End character window section + + + /// Start Escape Menu Section + "esc_menu.logout": "Salir", + "esc_menu.quit_game": "Salir del juego", + /// End Escape Menu Section + }, + + vector_map: { + "npc.speech.villager_under_attack": [ + "Ayuda, ¡me atacan!", + "¡Ayuda! ¡Me atacan!", + "¡Auch! ¡Me atacan!", + "¡Auch! ¡Me atacan! ¡Ayuda!", + "¡Ayúdame! ¡Me atacan!", + "¡Me atacan! ¡Ayuda!", + "¡Me atacan! ¡Ayúdame!", + "¡Ayuda!", + "¡Ayuda! ¡Ayuda!", + "¡Ayuda! ¡Ayuda! ¡Ayuda!", + "¡Me atacan!", + "¡AAAHHH! ¡Me atacan!", + "¡AAAHHH! ¡Me atacan! ¡Ayuda!", + "¡Ayuda! ¡Nos están atacando!", + "¡Ayuda! ¡Asesino!", + "¡Ayuda! ¡Hay un asesino suelto!", + "¡Ayuda! ¡Me están intentando matar!", + "Guardias, ¡me están atacando!", + "Guardias, ¡me están atacando!", + "¡Me están atacando! ¡Guardias!", + "¡Ayuda! ¡Guardias! ¡Me están atacando!", + "¡Guardias! ¡Venid rápido!", + "¡Guardias! ¡Guardias!", + "¡Guardias! ¡Un villano me ataca!", + "Guardias, ¡acabad con este infame villano!", + "¡Guardias! ¡Hay un asesino!", + "¡Guardias! ¡Ayudadme!", + "¡No te saldrás con la tuya! ¡Guardias!", + "¡Desalmado!", + "¡Ayúdame!", + "¡Ayuda! ¡Por favor!", + "¡Auch! ¡Guardias! ¡Ayuda!", + "¡Vienen a por mí!", + "¡Ayuda! ¡Ayuda! Me están reprimiendo", + "Ah, ahora vemos la violencia inherente al sistema.", + "¡No es más que un rasguño!" + ], + } +)