Merge branch 'master' into 'combat'

# Conflicts:
#   CHANGELOG.md
This commit is contained in:
Imbris 2020-04-01 20:42:27 +00:00
commit 97148cb6bb
22 changed files with 1445 additions and 69 deletions

View File

@ -28,6 +28,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added gamepad/controller support - Added gamepad/controller support
- Added player feedback when attempting to pickup an item with a full inventory - Added player feedback when attempting to pickup an item with a full inventory
- Added free look - Added free look
- Added Italian translation
- Added Portuguese translation
- Added Turkish translation
- Complete rewrite of the combat system into a state machine - Complete rewrite of the combat system into a state machine
- Abilities like Dash and Triplestrike - Abilities like Dash and Triplestrike
- Armor can now be eqipped as items - Armor can now be eqipped as items

6
Cargo.lock generated
View File

@ -633,7 +633,7 @@ dependencies = [
[[package]] [[package]]
name = "conrod_core" name = "conrod_core"
version = "0.63.0" version = "0.63.0"
source = "git+https://gitlab.com/veloren/conrod.git?branch=hide_text#92925b122dfed139169c7d7687b3ca15c0cb5a2e" source = "git+https://gitlab.com/veloren/conrod.git?branch=capucho/hide_text_cursor_fix#df3a5d8098687fb0addf6fdf7c9ad2ac8794997f"
dependencies = [ dependencies = [
"conrod_derive", "conrod_derive",
"copypasta", "copypasta",
@ -648,7 +648,7 @@ dependencies = [
[[package]] [[package]]
name = "conrod_derive" name = "conrod_derive"
version = "0.63.0" version = "0.63.0"
source = "git+https://gitlab.com/veloren/conrod.git?branch=hide_text#92925b122dfed139169c7d7687b3ca15c0cb5a2e" source = "git+https://gitlab.com/veloren/conrod.git?branch=capucho/hide_text_cursor_fix#df3a5d8098687fb0addf6fdf7c9ad2ac8794997f"
dependencies = [ dependencies = [
"proc-macro2 0.4.30", "proc-macro2 0.4.30",
"quote 0.6.13", "quote 0.6.13",
@ -658,7 +658,7 @@ dependencies = [
[[package]] [[package]]
name = "conrod_winit" name = "conrod_winit"
version = "0.63.0" version = "0.63.0"
source = "git+https://gitlab.com/veloren/conrod.git?branch=hide_text#92925b122dfed139169c7d7687b3ca15c0cb5a2e" source = "git+https://gitlab.com/veloren/conrod.git?branch=capucho/hide_text_cursor_fix#df3a5d8098687fb0addf6fdf7c9ad2ac8794997f"
[[package]] [[package]]
name = "const-random" name = "const-random"

Binary file not shown.

View File

@ -62,6 +62,7 @@ VoxygenLocalization(
"common.back": "Back", "common.back": "Back",
"common.create": "Create", "common.create": "Create",
"common.okay": "Okay", "common.okay": "Okay",
"common.accept": "Accept",
"common.disclaimer": "Disclaimer", "common.disclaimer": "Disclaimer",
"common.cancel": "Cancel", "common.cancel": "Cancel",
"common.none": "None", "common.none": "None",
@ -205,6 +206,8 @@ Enjoy your stay in the World of Veloren."#,
// Settings // Settings
"hud.settings.general": "General", "hud.settings.general": "General",
"hud.settings.none": "None", "hud.settings.none": "None",
"hud.settings.press_behavior.toggle": "Toggle",
"hud.settings.press_behavior.hold": "Hold",
"hud.settings.help_window": "Help Window", "hud.settings.help_window": "Help Window",
"hud.settings.debug_info": "Debug Info", "hud.settings.debug_info": "Debug Info",
"hud.settings.tips_on_startup": "Tips-On-Startup", "hud.settings.tips_on_startup": "Tips-On-Startup",
@ -232,6 +235,7 @@ Enjoy your stay in the World of Veloren."#,
"hud.settings.zoom_sensitivity": "Zoom Sensitivity", "hud.settings.zoom_sensitivity": "Zoom Sensitivity",
"hud.settings.invert_scroll_zoom": "Invert Scroll Zoom", "hud.settings.invert_scroll_zoom": "Invert Scroll Zoom",
"hud.settings.invert_mouse_y_axis": "Invert Mouse Y Axis", "hud.settings.invert_mouse_y_axis": "Invert Mouse Y Axis",
"hud.settings.free_look_behavior": "Free look behavior",
"hud.settings.view_distance": "View Distance", "hud.settings.view_distance": "View Distance",
"hud.settings.maximum_fps": "Maximum FPS", "hud.settings.maximum_fps": "Maximum FPS",
@ -321,6 +325,9 @@ Send Chat Message
Scroll Chat Scroll Chat
Free look
Chat commands: Chat commands:
/alias [Name] - Change your Chat Name /alias [Name] - Change your Chat Name

528
assets/voxygen/i18n/it.ron Normal file
View File

@ -0,0 +1,528 @@
/// 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 "global" Italian
VoxygenLocalization(
metadata: (
language_name: "Italiano",
language_identifier: "it",
),
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": "Nome Utente",
"common.singleplayer": "Giocatore Singolo",
"common.multiplayer": "Multigiocatore",
"common.servers": "Server",
"common.quit": "Esci",
"common.settings": "Impostazioni",
"common.languages": "Lingue",
"common.interface": "Interfaccia",
"common.gameplay": "Gameplay",
"common.controls": "Controlli",
"common.video": "Video",
"common.sound": "Audio",
"common.resume": "Riprendi",
"common.characters": "Personaggi",
"common.close": "Chiudi",
"common.yes": "Si",
"common.no": "No",
"common.back": "Indietro",
"common.create": "Crea",
"common.okay": "Ok",
"common.disclaimer": "Disclaimer",
"common.cancel": "Cancella",
"common.none": "Nessuno",
"common.error": "Errore",
"common.fatal_error": "Errore Fatale",
// Message when connection to the server is lost
"common.connection_lost": r#"Connessione persa!
Si è riavviato il server?
Il client è aggiornato?"#,
"common.races.orc": "Orco",
"common.races.human": "Umano",
"common.races.dwarf": "Nano",
"common.races.elf": "Elfo",
"common.races.undead": "Non-Morto",
"common.races.danari": "Danari",
"common.weapons.axe": "Ascia",
"common.weapons.sword": "Spada",
"common.weapons.staff": "Bastone",
"common.weapons.bow": "Arco",
"common.weapons.hammer": "Martello",
/// End Common section
/// Start Main screen section
"main.connecting": "Connessione in corso",
"main.creating_world": "Creazione del mondo",
// Welcome notice that appears the first time Veloren is started
"main.notice": r#"Benvenuto nella versione Alpha di Veloren!
Prima di tuffarti nel divertimento, ti preghiamo di tenere a mente che:
- Questa è unAlpha molto prematura. Aspettati errori, gameplay non completo, meccaniche non rifinite, e funzioni mancanti.
- Se hai critiche costruttive o errori da segnalare, ci puoi contattare tramite Reddit, GitLab, o il server Discord della nostra community.
- Veloren è concesso in licenza con la licenza open-source GPL 3. Il che vuol dire che sei libero di giocare, modificare, e ridistribuire il gioco come tu desideri (purché il lavoro che ne derivi sia sempre sotto licenza GPL 3).
- Veloren è un progetto comunitario no-profit, e chiunque ci lavori sopra è un volontario.
Se ti piace ciò che vedi, sei il benvenuto ad unirti ai team di sviluppo e artistico!
- 'Voxel RPG' è un genere a sé stante. Gli sparatutto-in-prima-persona venivano considerati cloni di Doom.
Come loro, stiamo cercando di costruire una nicchia. Il gioco non è un clone, e il suo sviluppo divergerà dai giochi esistenti in futuro.
Grazie per aver dedicato del tempo a leggere questo avviso, speriamo che ti divertirai col gioco!
~ Il team di sviluppo di Veloren"#,
// Login process description
"main.login_process": r#"Informazioni sul processo del Login:
Se stai avendo problemi nell'accedere:
Notare che hai bisogno di un account
per giocare su server con autenticazione abilitata.
Puoi creare un account su
https://account.veloren.net."#,
"main.login.server_not_found": "Server non trovato",
"main.login.authentication_error": "Errore di autenticazione server",
"main.login.server_full": "Il server è pieno",
"main.login.untrusted_auth_server": "Server di autenticazione non affidabile",
"main.login.outdated_client_or_server": "Il server è impazzito: Probabilmente le versioni sono incompatibili, controlla per degli aggiornamenti",
"main.login.timeout": "Tempo scaduto: Il server non ha risposto in tempo. (In sovraccarico o problemi di rete)",
"main.login.server_shut_down": "Il server è stato chiuso",
"main.login.already_logged_in": "Hai già effettuato l'accesso al server",
"main.login.network_error": "Errore di rete",
"main.login.failed_sending_request": "Richiesta ai server di autenticazione fallita",
"main.login.client_crashed": "Il client si è arrestato",
/// End Main screen section
/// Start HUD Section
"hud.do_not_show_on_startup": "Non mostrare allavvio",
"hud.show_tips": "Mostra consigli",
"hud.quests": "Missioni",
"hud.you_died": "Sei Morto",
"hud.press_key_to_show_keybindings_fmt": "Premi {key} per mostrare le scorciatoie da tastiera",
"hud.press_key_to_show_debug_info_fmt": "Premi {key} per mostrare le informazioni di debug",
"hud.press_key_to_toggle_keybindings_fmt": "Premi {key} per attivare/disattivare le scorciatoie da tastiera",
"hud.press_key_to_toggle_debug_info_fmt": "Premi {key} per attivare/disattivare le informazioni di debug",
// Respawn message
"hud.press_key_to_respawn": r#"Premi {key} per rinascere al tuo Waypoint.
Premi Invio, scrivi /waypoint e conferma per impostarlo qui."#,
// Welcome message
"hud.welcome": r#"Benvenuto nellAlpha di Veloren!
Alcuni consigli prima di cominciare:
MOLTO IMPORTANTE: Per impostare il tuo punto di rinascita scrivi /waypoint
nella chat.
Ciò può essere fatto anche se sei già morto!
Premi F1 per vedere i comandi chiave disponibili.
Scrivi /help nella chat per vedere i comandi della chat.
Ci sono forzieri e altri oggetti che appaiono casualmente nel Mondo!
Clicca col tasto destro del mouse per raccoglierli.
Per usare qualsiasi cosa tu ottenga da quei forzieri apri il tuo inventario con 'B'.
Fai doppio click sugli oggetti nella tua borsa per usarli o equipaggiarli.
Gettali via cliccandoci una volta sopra e una volta fuori dallinventario.
Le notti possono essere molto buie in Veloren.
Accendi la tua lanterna scrivendo /lantern nella chat.
Vuoi sbloccare il cursore per chiudere questa finestra? Premi TAB!
Goditi il tuo soggiorno nel Mondo di Veloren."#,
"hud.settings.general": "Generale",
"hud.settings.none": "Nessuno",
"hud.settings.press_behavior.toggle": "Attiva/Disattiva",
"hud.settings.press_behavior.hold": "Tieni Premuto",
"hud.settings.help_window": "Finestra di Aiuto",
"hud.settings.debug_info": "Informazioni di Debug",
"hud.settings.tips_on_startup": "Consigli allAvvio",
"hud.settings.ui_scale": "Proporzione Interfaccia",
"hud.settings.relative_scaling": "Proporzione Relativa",
"hud.settings.custom_scaling": "Proporzione Person.",
"hud.settings.crosshair": "Mirino",
"hud.settings.transparency": "Trasparenza",
"hud.settings.hotbar": "Barra Veloce",
"hud.settings.toggle_shortcuts": "Attivare/Disattivare Scorciatoie",
"hud.settings.toggle_bar_experience": "Attivare/Disattivare Barra dellEsperienza",
"hud.settings.scrolling_combat_text": "Testo di Combattimento Scorrevole",
"hud.settings.single_damage_number": "Danno Nemico (Singolo)",
"hud.settings.cumulated_damage": "Danno Nemico (Cumulativo)",
"hud.settings.incoming_damage": "Danno Giocatore (Singolo)",
"hud.settings.cumulated_incoming_damage": "Danno Giocatore (Cumulativo)",
"hud.settings.energybar_numbers": "Numeri Barra dellEnergia",
"hud.settings.values": "Valori",
"hud.settings.percentages": "Percentuali",
"hud.settings.chat": "Chat",
"hud.settings.background_transparency": "Trasparenza dello Sfondo",
"hud.settings.none": "Nessuno",
"hud.settings.pan_sensitivity": "Sensibilità Camera",
"hud.settings.zoom_sensitivity": "Sensibilità Zoom",
"hud.settings.invert_scroll_zoom": "Zoom Invertito",
"hud.settings.invert_mouse_y_axis": "Asse Y del Mouse Invertito",
"hud.settings.free_look_behavior": "Comportamento Visuale Libera",
"hud.settings.view_distance": "Distanza Oggetto",
"hud.settings.maximum_fps": "FPS Massimi",
"hud.settings.fov": "Campo Visivo (gradi)",
"hud.settings.gamma": "Gamma",
"hud.settings.antialiasing_mode": "Modalità AntiAliasing",
"hud.settings.cloud_rendering_mode": "Modalità Renderizzazione Nuvole",
"hud.settings.fluid_rendering_mode": "Modalità Renderizzazione Fluido",
"hud.settings.fluid_rendering_mode.cheap": "Economico",
"hud.settings.fluid_rendering_mode.shiny": "Lucente",
"hud.settings.cloud_rendering_mode.regular": "Regolare",
"hud.settings.fullscreen": "Schermo Intero",
"hud.settings.save_window_size": "Salva dimensione finestra",
"hud.settings.music_volume": "Volume Musica",
"hud.settings.sound_effect_volume": "Volume Effetti Sonori",
"hud.settings.audio_device": "Dispositivo Audio",
// Control list
"hud.settings.control_names": r#"Cursore Libero
Attiva/Disattiva Finestra di Aiuto
Attiva/Disattiva Interfaccia
Attiva/Disattiva FPS e Informazioni di Debug
Scatta Screenshot
Attiva/Disattiva Nomi
Attiva/Disattiva Schermo Intero
Movimento in Avanti
Movimento a Sinistra
Movimento a Destra
Movimento allIndietro
Salto
Aliante
Schivata
Rotolata
Scalata
Discesa
Camminata Automatica
Riporre/Sfoderare Armi
Mettere/Rimuovere Elmo
Sedersi
Cavalcatura
Interagire
Attacco Base
Attacco Secondario/Parata/Mira
Slot 1 Barra delle Abilità
Slot 2 Barra delle Abilità
Slot 3 Barra delle Abilità
Slot 4 Barra delle Abilità
Slot 5 Barra delle Abilità
Slot 6 Barra delle Abilità
Slot 7 Barra delle Abilità
Slot 8 Barra delle Abilità
Slot 9 Barra delle Abilità
Slot 10 Barra delle Abilità
Menù di Pausa
Impostazioni
Social
Mappa
Libro degli Incantesimi
Personaggio
Diario delle Missioni
Borsa
Invia Messaggio nella Chat
Scorrimento della Chat
Camera Libera
Comandi della Chat:
/alias [Name] - Cambia il tuo Nome nella Chat
/tp [Name] - Ti teleporta da un altro giocatore
/jump <dx> <dy> <dz> - Devia la tua posizione
/goto <x> <y> <z> - Ti teleporta in una posizione
/kill - Suicidati
/pig - Fai apparire un maiale PNG
/wolf - Fai apparire un lupo PNG
/help - Mostra comandi della Chat"#,
"hud.social": "Social",
"hud.social.online": "Online",
"hud.social.friends": "Amici",
"hud.social.not_yet_available": "Non ancora disponibile",
"hud.social.faction": "Fazione",
"hud.social.play_online_fmt": "{nb_player} giocatore/i online",
"hud.spell": "Incantesimo",
"hud.free_look_indicator": "Visuale Libera Attiva",
/// End HUD section
/// Start character selection section
"char_selection.delete_permanently": "Eliminare permanente questo Personaggio?",
"char_selection.change_server": "Cambia Server",
"char_selection.enter_world": "Unisciti al Mondo",
"char_selection.logout": "Disconnettiti",
"char_selection.create_new_charater": "Crea un nuovo Personaggio",
"char_selection.character_creation": "Creazione Personaggio",
"char_selection.human_default": "Umano Predefinito",
"char_selection.level_fmt": "Livello {level_nb}",
"char_selection.uncanny_valley": "Valle Perturbante",
"char_selection.plains_of_uncertainty": "Pianure dell'Incertezza",
"char_selection.beard": "Barba",
"char_selection.hair_style": "Stile Capelli",
"char_selection.hair_color": "Colore Capelli",
"char_selection.chest_color": "Colore Torace",
"char_selection.eye_color": "Colore Occhi",
"char_selection.skin": "Pelle",
"char_selection.eyebrows": "Sopracciglia",
"char_selection.accessories": "Accessori",
/// End chracter selection section
/// Start character window section
"character_window.character_name": "Nome Personaggio",
// Charater stats
"character_window.character_stats": r#"Stamina
Vitalità
Volontà
"#,
/// Start character window section
/// Start Escape Menu Section
"esc_menu.logout": "Disconnettiti",
"esc_menu.quit_game": "Esci dal Gioco",
/// End Escape Menu Section
}
)

View File

@ -0,0 +1,372 @@
/// Localization for portuguese (Portugal)
VoxygenLocalization(
metadata: (
language_name: "Português",
language_identifier: "pt_PT",
),
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": "nome de utilizador",
"common.singleplayer": "Um jogador",
"common.multiplayer": "Multijogador",
"common.servers": "Servidores",
"common.quit": "Sair",
"common.settings": "Definições",
"common.languages": "Linguagens",
"common.interface": "Interface",
"common.gameplay": "Jogabilidade",
"common.controls": "Controlos",
"common.video": "Video",
"common.sound": "Som",
"common.resume": "Resumir",
"common.characters": "Personagens",
"common.close": "Fechar",
"common.yes": "Sim",
"common.no": "Não",
"common.back": "Voltar",
"common.create": "Criar",
"common.okay": "Okay",
"common.accept": "Aceitar",
"common.disclaimer": "Aviso",
"common.cancel": "Cancelar",
"common.none": "Nenhum",
"common.error": "Erro",
"common.fatal_error": "Erro fatal",
// Message when connection to the server is lost
"common.connection_lost": r#"Conexâo perdida!
Será que o server reiniciou?
O cliente está atualizado?"#,
"common.races.orc": "Ogre",
"common.races.human": "Humano",
"common.races.dwarf": "Anão",
"common.races.elf": "Elfo",
"common.races.undead": "Morto-vivo",
"common.races.danari": "Danari",
"common.weapons.axe": "Machado",
"common.weapons.sword": "Espada",
"common.weapons.staff": "Cajado",
"common.weapons.bow": "Arco",
"common.weapons.hammer": "Martelo",
/// End Common section
/// Start Main screen section
"main.connecting": "Conectando",
"main.creating_world": "Criando o mundo",
// Welcome notice that appears the first time Veloren is started
"main.notice": r#"Bem vindo a versão alpha de Veloren!
Antes de começar a jogar, por favor tenha em mente que:
- Isto é uma versão muito experimental. Prepare-se para defeitos, jogabilidade muito inacabada, mecanismos por polir e funcionalidades por
adicionar.
- Se tiver comentários construtivos ou defeitos para reportar, pode contactar-nos através do Reddit, GitLab ou o nosso servidor comunitário de
Discord.
- Veloren está licenciado sob a licensa código aberto GPL 3. Isto significa que pode jogar, modificar e redistribuir como quiser
(Contanto que o trabalho derivado seja também GPL 3).
- Veloren é um projeto comunitário sem lucro, e toda a gente que trabalha nele é um voluntário. Se gostar do que ve, considere juntar-se a equipa
de desenvolvimento ou a de artes!
- 'Voxel RPG' é um género em si mesmo. First-person shooters costumavam ser chamados de clones do DOOM.
Tal como eles, nós estamos a tentar construir um género. Este jogo não é um clone e o seu desenvolvimento vai divergir de jogos existentes no
futuro.
Obrigado por ler este aviso, nós esperamos que goste do jogo!
~ A equipa do Veloren"#,
// Login process description
"main.login_process": r#"Informação sobre o processo de Login:
Se tiver problemas a logar:
Tenha em atenção que é necessário uma conta
para jogar em servidores com autenticação.
Para criar uma conta navegue até
https://account.veloren.net."#,
"main.login.server_not_found": "Servidor não encontrado",
"main.login.authentication_error": "Erro de autenticação",
"main.login.server_full": "Servidor está cheio",
"main.login.untrusted_auth_server": "Server de autenticação não confiado",
"main.login.outdated_client_or_server": "Servidor endoideceu: Provavelmente as versões são incompativéis, verifique se há versões mais recentes.",
"main.login.timeout": "Tempo esgotado: O servidor não respondeu a tempo. (Sobrecarregado ou problemas de rede).",
"main.login.server_shut_down": "O servidor encerrou",
"main.login.already_logged_in": "Vocé ja está logado neste servidor.",
"main.login.network_error": "Error de rede",
"main.login.failed_sending_request": "Pedido ao servidor de autenticação falhou",
"main.login.client_crashed": "O cliente crashou",
/// End Main screen section
/// Start HUD Section
"hud.do_not_show_on_startup": "Não mostre no início",
"hud.show_tips": "Mostrar dicas",
"hud.quests": "Missões",
"hud.you_died": "Você Morreu",
"hud.press_key_to_show_keybindings_fmt": "Clique em {key} para mostrar as teclas mapeadas",
"hud.press_key_to_show_debug_info_fmt": "Clique em {key} para mostrar a informação de depuração",
"hud.press_key_to_toggle_keybindings_fmt": "Clique em {key} para mostrar/ocultar as teclas mapeadas",
"hud.press_key_to_toggle_debug_info_fmt": "Clique em {key} para mostrar/ocultar a informação de depuração",
// Respawn message
"hud.press_key_to_respawn": r#"Clique em {key} para renascer na última fogueira visitada."#,
// Welcome message
"hud.welcome": r#"Bem vindo a Alpha do Veloren!,
Algumas dicas antes de começar:
MAIS IMPORTANTE: Para definir o seu local de renascimento escreva /waypoint no chat.
Isto também pode ser realizado depois de morto!
Clique em F1 para ver as teclas mapeadas.
Escreva /help no chat para ver os comandos de chat
A muitos baús e outros objetos a aperecer no mundo aleatoriamente!
Pressione o botão direito do mouse pare coletá-los.
Para usar o que coletou basta abrir o inventário pressionando a tecla 'B'.
Faça duplo clique nos items para usá-los ou equipá-los.
Deite-os fora cliquando uma vez neles e depois outra fora do inventário.
As noites podem ser bastante escuras.
Acenda a lanterna escrevendo /lantern no chat.
Quer libertar o mouse para fechar esta janela? Clique em TAB!
Aprecie a sua estadia no mundo de Veloren."#,
"hud.settings.general": "Geral",
"hud.settings.none": "Nenhum",
"hud.settings.press_behavior.toggle": "Alternar",
"hud.settings.press_behavior.hold": "Segurar",
"hud.settings.help_window": "Janela de ajuda",
"hud.settings.debug_info": "Informação de depuração",
"hud.settings.tips_on_startup": "Dicas no início",
"hud.settings.ui_scale": "Escala da interface",
"hud.settings.relative_scaling": "Escala relativa",
"hud.settings.custom_scaling": "Escala customizada",
"hud.settings.crosshair": "Crosshair",
"hud.settings.transparency": "Transparência",
"hud.settings.hotbar": "Hotbar",
"hud.settings.toggle_shortcuts": "Mostar/Ocultar atalhos",
"hud.settings.toggle_bar_experience": "Mostar/Ocultar barra de experiência",
"hud.settings.scrolling_combat_text": "Texto de combate deslizante",
"hud.settings.single_damage_number": "Números de dano únicos",
"hud.settings.cumulated_damage": "Dano acumulado",
"hud.settings.incoming_damage": "Dano recebido",
"hud.settings.cumulated_incoming_damage": "Dano recebido acumulado",
"hud.settings.energybar_numbers": "Números da barra de energia",
"hud.settings.values": "Valores",
"hud.settings.percentages": "Percentagens",
"hud.settings.chat": "Chat",
"hud.settings.background_transparency": "Transparência do fundo",
"hud.settings.pan_sensitivity": "Sensibilidade de rotação",
"hud.settings.zoom_sensitivity": "Sensibilidade de zoom",
"hud.settings.invert_scroll_zoom": "Inverter scroll zoom",
"hud.settings.invert_mouse_y_axis": "Inverter o eixo Y do mouse",
"hud.settings.free_look_behavior": "Ativação de rotação livre",
"hud.settings.view_distance": "Alcance de visão",
"hud.settings.maximum_fps": "FPS máximo",
"hud.settings.fov": "Campo de visão(graus)",
"hud.settings.gamma": "Luminosidade",
"hud.settings.antialiasing_mode": "Modo de antialiasing",
"hud.settings.cloud_rendering_mode": "Modo de representação de nuvens",
"hud.settings.fluid_rendering_mode": "Modo de representação de fluídos",
"hud.settings.fluid_rendering_mode.cheap": "Barato",
"hud.settings.fluid_rendering_mode.shiny": "Brilhante",
"hud.settings.cloud_rendering_mode.regular": "Normal",
"hud.settings.fullscreen": "Tela cheia",
"hud.settings.save_window_size": "Gravar dimensões",
"hud.settings.music_volume": "Volume da música",
"hud.settings.sound_effect_volume": "Volume dos efeitos sonoros",
"hud.settings.audio_device": "Dispositivo de aúdio",
// Control list
"hud.settings.control_names": r#"Libertar mouse
Mostar/Ocultar janela de ajuda
Mostar/Ocultar interface
Mostar/Ocultar FPS e informação de depuração
Gravar captura de ecrã
Mostar/Ocultar nomes
Mostar/Ocultar tela cheia
Mover para frente
Mover para a esquerda
Mover para a direita
Mover para trás
Saltar
Planador
Desviar
Rolar
Trepar
Descer
Auto caminhar
Embainhar/sacar armas
Equipar/remover capacete
Sentar
Montar
Interagir
Ataque básico
Ataque/bloquear/apontar secundário
Habilidade 1
Habilidade 2
Habilidade 3
Habilidade 4
Habilidade 5
Habilidade 6
Habilidade 7
Habilidade 8
Habilidade 9
Habilidade 10
Menu de pausa
Definições
Social
Mapa
Livro de feitiços
Personagem
Registo de missões
Inventário
Enviar mensagem de chat
Scroll chat
Comandos de chat:
/alias [nome] - Mudar o seu nome de chat
/tp [nome] - Teletransporta-te para outro player
/jump <dx> <dy> <dz> - Deslocar a posição
/goto <x> <y> <z> - Teletransporta-te para a posição
/kill - Suicidar
/pig - Invocar NPC de porco
/wolf - Invocar NPC do lobo
/help - Mostrar comandos de chat"#,
"hud.social": "Social",
"hud.social.online": "Online",
"hud.social.friends": "Amigos",
"hud.social.not_yet_available": "Indisponível de momento",
"hud.social.faction": "Facção",
"hud.social.play_online_fmt": "{nb_player} jogador(es) online",
"hud.spell": "Feitiço",
"hud.free_look_indicator": "Rotação livre ativada",
/// End HUD section
/// Start chracter selection section
"char_selection.delete_permanently": "Deletar esta personagem permanentemente?",
"char_selection.change_server": "Mudar de servidor",
"char_selection.enter_world": "Entrar no mundo",
"char_selection.logout": "Desconectar",
"char_selection.create_new_charater": "Criar nova personagem",
"char_selection.character_creation": "Criação de personagem",
"char_selection.human_default": "Humano padrão",
"char_selection.level_fmt": "Nível {level_nb}",
"char_selection.uncanny_valley": "Vale da estranheza",
"char_selection.plains_of_uncertainty": "Planícies da incerteza",
"char_selection.beard": "Barba",
"char_selection.hair_style": "Estilo do cabelo",
"char_selection.hair_color": "Cor do cabelo",
"char_selection.chest_color": "Cor do peitoral",
"char_selection.eye_color": "Cor dos olhos",
"char_selection.skin": "Cor da pele",
"char_selection.eyebrows": "Pestanas",
"char_selection.accessories": "Acessórios",
/// End chracter selection section
/// Start character window section
"character_window.character_name": "Nome da personagem",
// Charater stats
"character_window.character_stats": r#"Resistência
Aptidão fisíca
Força de vontade
"#,
/// Start character window section
/// Start Escape Menu Section
"esc_menu.logout": "Desconectar",
"esc_menu.quit_game": "Sair do jogo",
/// End Escape Menu Section
}
)

View File

@ -0,0 +1,388 @@
/// 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 Turkish (Turkey)
VoxygenLocalization(
metadata: (
language_name: "Türkçe (Türkiye)",
language_identifier: "tr_TR",
),
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": "kullanıcı adı",
"common.singleplayer": "Tek oyuncu",
"common.multiplayer": "Çok oyunculu",
"common.servers": "Sunucular",
"common.quit": "Çık",
"common.settings": "Ayarlar",
"common.languages": "Diller",
"common.interface": "Arayüz",
"common.gameplay": "Oynanış",
"common.controls": "Kontroller",
"common.video": "Video",
"common.sound": "Ses",
"common.resume": "Devam Et",
"common.characters": "Karakterler",
"common.close": "Kapat",
"common.yes": "Evet",
"common.no": "Hayır",
"common.back": "Geri",
"common.create": "Oluştur",
"common.okay": "Tamam",
"common.disclaimer": "Uyarı",
"common.cancel": "İptal Et",
"common.none": "Yok",
"common.error": "Hata",
"common.fatal_error": "Ölümcül hata",
"common.accept": "Kabul Et",
// Message when connection to the server is lost
"common.connection_lost": r#"Bağlantı koptu!
Sunucu yeniden mi başladı?
İstemci güncel mi?"#,
"common.races.orc": "Ork",
"common.races.human": "İnsan",
"common.races.dwarf": "Cüce",
"common.races.elf": "Elf",
"common.races.undead": "Hortlak",
"common.races.danari": "Danari",
"common.weapons.axe": "Balta",
"common.weapons.sword": "Kılıç",
"common.weapons.staff": "Asa",
"common.weapons.bow": "Yay",
"common.weapons.hammer": "Çekiç",
/// End Common section
/// Start Main screen section
"main.connecting": "Bağlanılıyor",
"main.creating_world": "Dünya oluşturuluyor",
// Welcome notice that appears the first time Veloren is started
"main.notice": r#"Veloren Alfa sürümüne hoşgeldin!
Eğlenmeye başlamadan önce, lütfen bir kaç şeyi aklında tut:
- Bu alfa sürümü daha çok yeni. Hatalar, bitmemiş oynanış, elden geçirilmemiş mekanikler ve eksik özellikler bulunuyor.
- Yapıcı geri bildirim veya hata raporların varsa, bize Reddit, GitLab veya Discord sunucumuzdan ulaşabilirsin.
- Veloren GPL 3 açık kaynak lisansı ile lisanslıdır. Bunun anlamı, oyunu istediğin gibi oynayabilir, değiştirebilir ve dağıtabilirsin
(türetilmiş çalışmalarda GPL 3 ile lisanslanmış olduğu sürece)
- Veloren kar gütmeyen bir topluluk projesidir ve üzerinde çalışan herkes birer gönüllüdür.
Gördüklerini beğendiysen, geliştirme veya sanat takımlarına katılabilirsin!
- 'Voxel RPG' kendi başına bir tür. Birinci şahıs nişancı oyunları önceden Doom kopyaları olarak adlandırılıyordu.
Bizde onlar gibi bir niş inşa etmeye çalışıyoruz. Bu oyun bir kopya değil ve gelecekte gelişimi mevcut oyunlardan ayrılacak.
Bu bildiriyi okumaya zaman ayırdığın için teşekkür ederiz, umarız ki oyundan memnun kalırsın!
~ Veloren Geliştiricileri"#,
// Login process description
"main.login_process": r#"Giriş işlemi hakkında bilgi:
Eğer giriş yaparken sorunlarla karşılaşıyorsan:
Lütfen kimlik doğrulaması gerektiren sunucularda
oynamak için bir hesaba ihtiyacın olduğunu hatırla.
https://account.veloren.net adresinden
bir hesap oluşturabilirsin."#,
"main.login.server_not_found": "Sunucu bulunamadı",
"main.login.authentication_error": "Sunucuda kimlik doğrulama hatası",
"main.login.server_full": "Sunucu dolu",
"main.login.untrusted_auth_server": "Kimlik doğrulama sunucusu güvenilir değil",
"main.login.outdated_client_or_server": "SunucuÇılgınaDöndü: Muhtemelen versiyonlar uyuşmuyor, güncellemeler için kontrol et.",
"main.login.timeout": "Zamanaşımı: Sunucu zamanında cevap vermedi. (Aşırı yüklenme veya ağ sorunları).",
"main.login.server_shut_down": "Sunucu kapandı",
"main.login.already_logged_in": "Zaten sunucuya giriş yapmışsın.",
"main.login.network_error": "Ağ hatası",
"main.login.failed_sending_request": "Kimlik doğrulama sunucusuna istek gönderilemedi",
"main.login.client_crashed": "İstemci çöktü",
/// End Main screen section
/// Start HUD Section
"hud.do_not_show_on_startup": "Bunu açılışta gösterme",
"hud.show_tips": "Öneriler",
"hud.quests": "Görevler",
"hud.you_died": "Öldün",
"hud.press_key_to_show_keybindings_fmt": "Kontrolleri göstermek için {key}'e bas",
"hud.press_key_to_show_debug_info_fmt": "Hata ayıklama bilgilerini göstermek için {key}'e bas",
"hud.press_key_to_toggle_keybindings_fmt": "Kontrolleri açmak veya kapamak için {key}'e bas",
"hud.press_key_to_toggle_debug_info_fmt": "Hata ayıklama bilgilerini açmak veya kapamak için {key}'e bas",
// Respawn message
"hud.press_key_to_respawn": r#"Ziyaret ettiğin en son kamp ateşinde yeniden doğmak için {key}'e bas."#,
// Welcome message
"hud.welcome": r#"Veloren Alfa sürümüne hoşgeldin!,
Başlamadan önce bazı ipuçları:
EN ÖNEMLİSİ: Yeniden doğma noktanı ayarlamak için sohbete /waypoint yaz.
Bu ölmüşsen bile yapılabilir!
Kontrolleri görmek için F1'e bas.
Sohbet komutlarını görmek için sohbete /help yaz.
Dünyada rastgele oluşan sandıklar ve başka objeler var!
Onları toplamak için Sağ-Tık kullan.
Topladıklarını kullanmak için 'B'ye basarak envanterini aç.
Envanterindeki eşyaları kullanmak veya kuşanmak için iki kere üzerlerine tıkla.
Üzerlerine bir kere tıklayıp ve sonra envaterin dışına tıklayarak onları at.
Veloren'de geceler oldukça karanlık olabiliyor.
Sohbete /lantern yazarak fenerini yak.
Bu pencereyi kapatmak için imlecini serbest bırakmak mı istiyorsun? TAB'a bas!
Veloren'in Dünyasında sana iyi eğlenceler!"#,
"hud.settings.general": "Genel",
"hud.settings.none": "Yok",
"hud.settings.press_behavior.toggle": "Aç/kapa",
"hud.settings.press_behavior.hold": "Basılı tut",
"hud.settings.help_window": "Yardım Penceresi",
"hud.settings.debug_info": "Hata Ayıklama Bilgileri",
"hud.settings.tips_on_startup": "Açılışta İpuçlarını Göster",
"hud.settings.ui_scale": "Arayüz Ölçeği",
"hud.settings.relative_scaling": "Otomatik Ölçek",
"hud.settings.custom_scaling": "Özel Ölçek",
"hud.settings.crosshair": "İmleç tipi",
"hud.settings.transparency": "Şeffaflık",
"hud.settings.hotbar": "Hotbar",
"hud.settings.toggle_shortcuts": "Kısayolları aç/kapa",
"hud.settings.toggle_bar_experience": "Tecrübe çubuğunu aç/kapa",
"hud.settings.scrolling_combat_text": "Verilen/Alınan Hasar Yazısı",
"hud.settings.single_damage_number": "Verilen Hasarı Tek Tek Göster",
"hud.settings.cumulated_damage": "Toplam Verilen Hasarı Göster",
"hud.settings.incoming_damage": "Alınan Hasarı Tek Tek Göster",
"hud.settings.cumulated_incoming_damage": "Toplam Alınan Hasarı Göster",
"hud.settings.energybar_numbers": "Enerji çubuğu değerleri",
"hud.settings.values": "Sayılar",
"hud.settings.percentages": "Yüzdeler",
"hud.settings.chat": "Sohbet",
"hud.settings.background_transparency": "Arkaplan Şeffaflığı",
"hud.settings.none": "Yok",
"hud.settings.pan_sensitivity": "Kaydırma Hassaslığı",
"hud.settings.zoom_sensitivity": "Büyütme Hassaslığı",
"hud.settings.invert_scroll_zoom": "Kaydırma Büyütmesini ters çevir",
"hud.settings.invert_mouse_y_axis": "Fare Y eksenini ters çevir",
"hud.settings.free_look_behavior": "Serbest bakış davranışı",
"hud.settings.view_distance": "Görüş Mesafesi",
"hud.settings.maximum_fps": "Maksimum FPS",
"hud.settings.fov": "Görüş alanı (derece)",
"hud.settings.gamma": "Gama",
"hud.settings.antialiasing_mode": "Kenar Yumuşatma Modu",
"hud.settings.cloud_rendering_mode": "Bulut Render Modu",
"hud.settings.fluid_rendering_mode": "Su Render Modu",
"hud.settings.fluid_rendering_mode.cheap": "Ucuz",
"hud.settings.fluid_rendering_mode.shiny": "Güzel",
"hud.settings.cloud_rendering_mode.regular": "Normal",
"hud.settings.fullscreen": "Tam ekran",
"hud.settings.save_window_size": "Pencere boyutunu kaydet",
"hud.settings.music_volume": "Müzik Sesi",
"hud.settings.sound_effect_volume": "Efekt Sesi",
"hud.settings.audio_device": "Ses Aygıtı",
// Control list
"hud.settings.control_names": r#"İmleci serbest bırak
Yardım Pencerisini aç/kapa
Arayüzü aç/kapa
FPS ve hata ayıklama bilgilerini aç/kapa
Ekran görüntüsü al
İsim etiketlerini aç/kapa
Tam ekranı aç/kapa
İleri Git
Sola Git
Sağa Git
Geriye Git
Zıpla
Planör
Sıçra
Yuvarlan
Tırman
İn
Otomatik yürüme
Silahları koy/çıkar
Kaskı kuşan/çıkar
Otur
Bin
Etkileşim
Basit Saldırı
İkincil Saldırı/Blok/Nişan Alma
Yetenek çubuğu Slot 1
Yetenek çubuğu Slot 2
Yetenek çubuğu Slot 3
Yetenek çubuğu Slot 4
Yetenek çubuğu Slot 5
Yetenek çubuğu Slot 6
Yetenek çubuğu Slot 7
Yetenek çubuğu Slot 8
Yetenek çubuğu Slot 9
Yetenek çubuğu Slot 10
Duraklatma Menüsü
Ayarlar
Sosyal
Harita
Büyü kitabı
Karakter
Görev kaydı
Çanta
Sohbet Mesajı Gönder
Sohbeti Kaydır
Serbest bakış
Sohbet komutları:
/alias [İsim] - Sohbet İsmini değiştir
/tp [İsim] - Seni başka bir oyuncuya ışınlar
/jump <dx> <dy> <dz> - Pozisyonunu kaydır
/goto <x> <y> <z> - Bir pozisyona ışınlan
/kill - Kendini öldür
/pig - Domuz NPC'si oluştur
/wolf - Kurt NPC'si oluştur
/help - Sohbet komutlarını göster"#,
"hud.social": "Sosyal",
"hud.social.online": "Çevrimiçi",
"hud.social.friends": "Arkadaşlar",
"hud.social.not_yet_available": "Şu anda kullanılabilir değil",
"hud.social.faction": "Klan",
"hud.social.play_online_fmt": "{nb_player} oyuncu çevrimiçi",
"hud.spell": "Büyü",
"hud.free_look_indicator": "Serbest bakış açık",
/// End HUD section
/// Start chracter selection section
// Character delete question
"char_selection.delete_permanently": r#"Bu karakteri kalıcı olarak
silmek istediğinden emin misin?"#,
"char_selection.change_server": "Sunucu Değiştir",
"char_selection.enter_world": "Dünyaya Gir",
"char_selection.logout": "Çıkış yap",
"char_selection.create_new_charater": "Yeni Karakter Oluştur",
"char_selection.character_creation": "Karakter Oluşumu",
"char_selection.human_default": "İnsan Varsayılanı",
"char_selection.level_fmt": "Seviye {level_nb}",
"char_selection.uncanny_valley": "Esrarengiz Vadi",
"char_selection.plains_of_uncertainty": "Belirsizlik Ovaları",
"char_selection.beard": "Sakal",
"char_selection.hair_style": "Saç Stili",
"char_selection.hair_color": "Saç Rengi",
"char_selection.chest_color": "Göğüs Rengi",
"char_selection.eye_color": "Göz Rengi",
"char_selection.skin": "Deri",
"char_selection.eyebrows": "Kaşlar",
"char_selection.accessories": "Aksesuarlar",
/// End chracter selection section
/// Start character window section
"character_window.character_name": "Karakter Adı",
// Charater stats
"character_window.character_stats": r#"Dayanıklılık
Fiziksel yetenek
İrade gücü
"#,
/// Start character window section
/// Start Escape Menu Section
"esc_menu.logout": "Çıkış yap",
"esc_menu.quit_game": "Oyundan çık",
/// End Escape Menu Section
}
)

View File

@ -34,16 +34,6 @@ void main() {
vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz); vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz);
/*
// Round the position to the nearest triangular grid cell
vec3 hex_pos = f_pos * 2.0;
hex_pos = hex_pos + vec3(hex_pos.y * 1.4 / 3.0, hex_pos.y * 0.1, 0);
if (fract(hex_pos.x) > fract(hex_pos.y)) {
hex_pos += vec3(1.0, 1.0, 0);
}
hex_pos = floor(hex_pos);
*/
vec3 light, diffuse_light, ambient_light; vec3 light, diffuse_light, ambient_light;
get_sun_diffuse(f_norm, time_of_day.x, light, diffuse_light, ambient_light, 0.0); get_sun_diffuse(f_norm, time_of_day.x, light, diffuse_light, ambient_light, 0.0);
float point_shadow = shadow_at(f_pos,f_norm); float point_shadow = shadow_at(f_pos,f_norm);
@ -52,7 +42,7 @@ void main() {
vec3 point_light = light_at(f_pos, f_norm); vec3 point_light = light_at(f_pos, f_norm);
light += point_light; light += point_light;
diffuse_light += point_light; diffuse_light += point_light;
vec3 surf_color = illuminate(srgb_to_linear(vec3(0.2, 0.2, 1.0)), light, diffuse_light, ambient_light); vec3 surf_color = srgb_to_linear(vec3(0.4, 0.7, 2.0)) * light * diffuse_light * ambient_light;
float fog_level = fog(f_pos.xyz, focus_pos.xyz, medium.x); float fog_level = fog(f_pos.xyz, focus_pos.xyz, medium.x);
vec4 clouds; vec4 clouds;

View File

@ -68,16 +68,6 @@ void main() {
vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz); vec3 cam_to_frag = normalize(f_pos - cam_pos.xyz);
float frag_dist = length(f_pos - cam_pos.xyz); float frag_dist = length(f_pos - cam_pos.xyz);
/*
// Round the position to the nearest triangular grid cell
vec3 hex_pos = f_pos * 2.0;
hex_pos = hex_pos + vec3(hex_pos.y * 1.4 / 3.0, hex_pos.y * 0.1, 0);
if (fract(hex_pos.x) > fract(hex_pos.y)) {
hex_pos += vec3(1.0, 1.0, 0);
}
hex_pos = floor(hex_pos);
*/
vec3 b_norm; vec3 b_norm;
if (f_norm.z > 0.0) { if (f_norm.z > 0.0) {
b_norm = vec3(1, 0, 0); b_norm = vec3(1, 0, 0);
@ -111,7 +101,7 @@ void main() {
vec3 point_light = light_at(f_pos, norm); vec3 point_light = light_at(f_pos, norm);
light += point_light; light += point_light;
diffuse_light += point_light; diffuse_light += point_light;
vec3 surf_color = illuminate(srgb_to_linear(f_col), light, diffuse_light, ambient_light); vec3 surf_color = srgb_to_linear(vec3(0.2, 0.5, 1.0)) * light * diffuse_light * ambient_light;
float fog_level = fog(f_pos.xyz, focus_pos.xyz, medium.x); float fog_level = fog(f_pos.xyz, focus_pos.xyz, medium.x);
vec4 clouds; vec4 clouds;
@ -119,7 +109,7 @@ void main() {
vec3 reflect_ray_dir = reflect(cam_to_frag, norm); vec3 reflect_ray_dir = reflect(cam_to_frag, norm);
// Hack to prevent the reflection ray dipping below the horizon and creating weird blue spots in the water // Hack to prevent the reflection ray dipping below the horizon and creating weird blue spots in the water
reflect_ray_dir.z = max(reflect_ray_dir.z, 0.05); reflect_ray_dir.z = max(reflect_ray_dir.z, 0.01);
vec4 _clouds; vec4 _clouds;
vec3 reflect_color = get_sky_color(reflect_ray_dir, time_of_day.x, f_pos, vec3(-100000), 0.25, false, _clouds) * f_light; vec3 reflect_color = get_sky_color(reflect_ray_dir, time_of_day.x, f_pos, vec3(-100000), 0.25, false, _clouds) * f_light;

View File

@ -27,6 +27,9 @@ void main() {
f_pos.z *= min(1.0001 - 0.02 / pow(tick.x - load_time, 10.0), 1.0); f_pos.z *= min(1.0001 - 0.02 / pow(tick.x - load_time, 10.0), 1.0);
f_pos.z -= 25.0 * pow(distance(focus_pos.xy, f_pos.xy) / view_distance.x, 20.0); f_pos.z -= 25.0 * pow(distance(focus_pos.xy, f_pos.xy) / view_distance.x, 20.0);
// Small waves
f_pos.z -= 0.05 + 0.05 * (sin(tick.x * 2.0 + f_pos.x * 2.0 + f_pos.y * 2.0) + 1.0) * 0.5;
f_col = vec3( f_col = vec3(
float((v_col_light >> 8) & 0xFFu), float((v_col_light >> 8) & 0xFFu),
float((v_col_light >> 16) & 0xFFu), float((v_col_light >> 16) & 0xFFu),

View File

@ -21,6 +21,8 @@ const vec3 SKY_NIGHT_MID = vec3(0.001, 0.005, 0.02);
const vec3 SKY_NIGHT_BOT = vec3(0.002, 0.004, 0.004); const vec3 SKY_NIGHT_BOT = vec3(0.002, 0.004, 0.004);
const vec3 NIGHT_LIGHT = vec3(0.002, 0.01, 0.03); const vec3 NIGHT_LIGHT = vec3(0.002, 0.01, 0.03);
const float UNDERWATER_MIST_DIST = 100.0;
vec3 get_sun_dir(float time_of_day) { vec3 get_sun_dir(float time_of_day) {
const float TIME_FACTOR = (PI * 2.0) / (3600.0 * 24.0); const float TIME_FACTOR = (PI * 2.0) / (3600.0 * 24.0);
@ -202,7 +204,7 @@ float fog(vec3 f_pos, vec3 focus_pos, uint medium) {
float max_fog = 1.0; float max_fog = 1.0;
if (medium == 1u) { if (medium == 1u) {
mist_radius = 96.0; mist_radius = UNDERWATER_MIST_DIST;
min_fog = 0.0; min_fog = 0.0;
} }

View File

@ -14,5 +14,13 @@ out vec4 tgt_color;
void main() { void main() {
vec4 _clouds; vec4 _clouds;
tgt_color = vec4(get_sky_color(normalize(f_pos), time_of_day.x, cam_pos.xyz, vec3(-100000), 1.0, true, _clouds), 1.0); float fog_level = fog(f_pos.xyz, focus_pos.xyz, medium.x);
float dist = 100000.0;
if (medium.x == 1u) {
dist = UNDERWATER_MIST_DIST;
}
vec3 wpos = cam_pos.xyz + normalize(f_pos) * dist;
tgt_color = vec4(get_sky_color(normalize(f_pos), time_of_day.x, cam_pos.xyz, wpos, 1.0, true, _clouds), 1.0);
} }

View File

@ -332,7 +332,8 @@ mod tests {
#[test] #[test]
fn connect() { fn connect() {
let (mut postoffice, sock) = create_postoffice::<(), ()>(0).unwrap(); let (mut postoffice, bound) = create_postoffice::<(), ()>(0).unwrap();
let sock = (std::net::Ipv4Addr::LOCALHOST, bound.port());
let _client0 = PostBox::<(), ()>::to(sock).unwrap(); let _client0 = PostBox::<(), ()>::to(sock).unwrap();
let _client1 = PostBox::<(), ()>::to(sock).unwrap(); let _client1 = PostBox::<(), ()>::to(sock).unwrap();
@ -364,7 +365,8 @@ mod tests {
#[test] #[test]
fn send_recv() { fn send_recv() {
let (mut postoffice, sock) = create_postoffice::<(), i32>(2).unwrap(); let (mut postoffice, bound) = create_postoffice::<(), i32>(2).unwrap();
let sock = (std::net::Ipv4Addr::LOCALHOST, bound.port());
let test_msgs = vec![1, 1337, 42, -48]; let test_msgs = vec![1, 1337, 42, -48];
let mut client = PostBox::<i32, ()>::to(sock).unwrap(); let mut client = PostBox::<i32, ()>::to(sock).unwrap();
@ -386,7 +388,8 @@ mod tests {
#[test] #[test]
#[ignore] #[ignore]
fn send_recv_huge() { fn send_recv_huge() {
let (mut postoffice, sock) = create_postoffice::<(), Vec<i32>>(3).unwrap(); let (mut postoffice, bound) = create_postoffice::<(), Vec<i32>>(3).unwrap();
let sock = (std::net::Ipv4Addr::LOCALHOST, bound.port());
let test_msgs: Vec<Vec<i32>> = (0..5) let test_msgs: Vec<Vec<i32>> = (0..5)
.map(|i| (0..100000).map(|j| i * 2 + j).collect()) .map(|i| (0..100000).map(|j| i * 2 + j).collect())
.collect(); .collect();
@ -410,7 +413,8 @@ mod tests {
#[test] #[test]
fn send_recv_both() { fn send_recv_both() {
let (mut postoffice, sock) = create_postoffice::<u32, u32>(4).unwrap(); let (mut postoffice, bound) = create_postoffice::<u32, u32>(4).unwrap();
let sock = (std::net::Ipv4Addr::LOCALHOST, bound.port());
let mut client = PostBox::<u32, u32>::to(sock).unwrap(); let mut client = PostBox::<u32, u32>::to(sock).unwrap();
loop_for(Duration::from_millis(250), || ()); loop_for(Duration::from_millis(250), || ());
let mut server = postoffice.new_postboxes().next().unwrap(); let mut server = postoffice.new_postboxes().next().unwrap();

View File

@ -25,8 +25,8 @@ gfx_device_gl = { version = "0.16.2", optional = true }
gfx_window_glutin = "0.31.0" gfx_window_glutin = "0.31.0"
glutin = "0.21.1" glutin = "0.21.1"
winit = { version = "0.19.4", features = ["serde"] } winit = { version = "0.19.4", features = ["serde"] }
conrod_core = { git = "https://gitlab.com/veloren/conrod.git", branch = "hide_text" } conrod_core = { git = "https://gitlab.com/veloren/conrod.git", branch = "capucho/hide_text_cursor_fix" }
conrod_winit = { git = "https://gitlab.com/veloren/conrod.git", branch = "hide_text" } conrod_winit = { git = "https://gitlab.com/veloren/conrod.git", branch = "capucho/hide_text_cursor_fix" }
euc = "0.3.0" euc = "0.3.0"
# ECS # ECS

View File

@ -238,11 +238,8 @@ impl AudioFrontend {
/// Returns the default audio device. /// Returns the default audio device.
/// Does not return rodio Device struct in case our audio backend changes. /// Does not return rodio Device struct in case our audio backend changes.
pub fn get_default_device() -> String { pub fn get_default_device() -> Option<String> {
rodio::default_output_device() rodio::default_output_device().map(|dev| dev.name().expect("Unable to get device name"))
.expect("No audio output devices detected.")
.name()
.expect("Unable to get device name")
} }
/// Returns a vec of the audio devices available. /// Returns a vec of the audio devices available.

View File

@ -236,6 +236,7 @@ pub enum Event {
Logout, Logout,
Quit, Quit,
ChangeLanguage(LanguageMetadata), ChangeLanguage(LanguageMetadata),
ChangeFreeLookBehavior(PressBehavior),
} }
// TODO: Are these the possible layouts we want? // TODO: Are these the possible layouts we want?
@ -276,6 +277,11 @@ pub enum ShortcutNumbers {
On, On,
Off, Off,
} }
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
pub enum PressBehavior {
Toggle = 0,
Hold = 1,
}
pub struct Show { pub struct Show {
ui: bool, ui: bool,
@ -1806,6 +1812,9 @@ impl Hud {
settings_window::Event::AdjustWindowSize(new_size) => { settings_window::Event::AdjustWindowSize(new_size) => {
events.push(Event::AdjustWindowSize(new_size)); events.push(Event::AdjustWindowSize(new_size));
}, },
settings_window::Event::ChangeFreeLookBehavior(behavior) => {
events.push(Event::ChangeFreeLookBehavior(behavior));
},
} }
} }
} }
@ -1879,8 +1888,8 @@ impl Hud {
}, },
Some(esc_menu::Event::Close) => { Some(esc_menu::Event::Close) => {
self.show.esc_menu = false; self.show.esc_menu = false;
self.show.want_grab = false; self.show.want_grab = true;
self.force_ungrab = true; self.force_ungrab = false;
// Unpause the game if we are on singleplayer // Unpause the game if we are on singleplayer
if let Some(singleplayer) = global_state.singleplayer.as_ref() { if let Some(singleplayer) = global_state.singleplayer.as_ref() {

View File

@ -1,6 +1,6 @@
use super::{ use super::{
img_ids::Imgs, BarNumbers, CrosshairType, Intro, ShortcutNumbers, Show, XpBar, MENU_BG, img_ids::Imgs, BarNumbers, CrosshairType, Intro, PressBehavior, ShortcutNumbers, Show, XpBar,
TEXT_COLOR, MENU_BG, TEXT_COLOR,
}; };
use crate::{ use crate::{
i18n::{list_localizations, LanguageMetadata, VoxygenLocalization}, i18n::{list_localizations, LanguageMetadata, VoxygenLocalization},
@ -141,7 +141,8 @@ widget_ids! {
sct_num_dur_text, sct_num_dur_text,
sct_num_dur_slider, sct_num_dur_slider,
sct_num_dur_value, sct_num_dur_value,
free_look_behavior_text,
free_look_behavior_list
} }
} }
@ -220,6 +221,7 @@ pub enum Event {
SctPlayerBatch(bool), SctPlayerBatch(bool),
SctDamageBatch(bool), SctDamageBatch(bool),
ChangeLanguage(LanguageMetadata), ChangeLanguage(LanguageMetadata),
ChangeFreeLookBehavior(PressBehavior),
} }
pub enum ScaleChange { pub enum ScaleChange {
@ -1254,6 +1256,45 @@ impl<'a> Widget for SettingsWindow<'a> {
.graphics_for(state.ids.mouse_y_invert_button) .graphics_for(state.ids.mouse_y_invert_button)
.color(TEXT_COLOR) .color(TEXT_COLOR)
.set(state.ids.mouse_y_invert_label, ui); .set(state.ids.mouse_y_invert_label, ui);
// Free look behaviour
Text::new(
&self
.localized_strings
.get("hud.settings.free_look_behavior"),
)
.down_from(state.ids.mouse_zoom_invert_button, 10.0)
.font_size(self.fonts.cyri.scale(14))
.font_id(self.fonts.cyri.conrod_id)
.color(TEXT_COLOR)
.set(state.ids.free_look_behavior_text, ui);
let mode_label_list = [
&self
.localized_strings
.get("hud.settings.press_behavior.toggle"),
&self
.localized_strings
.get("hud.settings.press_behavior.hold"),
];
// Get which free look behavior is currently active
let selected = self.global_state.settings.gameplay.free_look_behavior as usize;
if let Some(clicked) = DropDownList::new(&mode_label_list, Some(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.free_look_behavior_text, 8.0)
.set(state.ids.free_look_behavior_list, ui)
{
match clicked {
0 => events.push(Event::ChangeFreeLookBehavior(PressBehavior::Toggle)),
1 => events.push(Event::ChangeFreeLookBehavior(PressBehavior::Hold)),
_ => unreachable!(),
}
}
} }
// 3) Controls Tab -------------------------------- // 3) Controls Tab --------------------------------
@ -1365,6 +1406,9 @@ impl<'a> Widget for SettingsWindow<'a> {
{}\n\ {}\n\
\n\ \n\
\n\ \n\
{}\n\
\n\
\n\
\n\ \n\
\n\ \n\
", ",
@ -1413,6 +1457,7 @@ impl<'a> Widget for SettingsWindow<'a> {
controls.bag, controls.bag,
controls.enter, controls.enter,
"Mouse Wheel", // Scroll chat "Mouse Wheel", // Scroll chat
controls.free_look
)) ))
.color(TEXT_COLOR) .color(TEXT_COLOR)
.right_from(state.ids.controls_text, 0.0) .right_from(state.ids.controls_text, 0.0)

View File

@ -1,4 +1,5 @@
#![deny(unsafe_code)] #![deny(unsafe_code)]
#![feature(bool_to_option)]
#![recursion_limit = "2048"] #![recursion_limit = "2048"]
use veloren_voxygen::{ use veloren_voxygen::{
@ -7,7 +8,7 @@ use veloren_voxygen::{
logging, logging,
menu::main::MainMenuState, menu::main::MainMenuState,
meta::Meta, meta::Meta,
settings::Settings, settings::{AudioOutput, Settings},
window::Window, window::Window,
Direction, GlobalState, PlayState, PlayStateResult, Direction, GlobalState, PlayState, PlayStateResult,
}; };
@ -46,16 +47,13 @@ fn main() {
panic!("Failed to save settings: {:?}", err); panic!("Failed to save settings: {:?}", err);
} }
let audio_device = || match &settings.audio.audio_device { let mut audio = match settings.audio.output {
Some(d) => d.to_string(), AudioOutput::Off => None,
None => audio::get_default_device(), AudioOutput::Automatic => audio::get_default_device(),
}; AudioOutput::Device(ref dev) => Some(dev.clone()),
}
let mut audio = if settings.audio.audio_on { .map(|dev| AudioFrontend::new(dev, settings.audio.max_sfx_channels))
AudioFrontend::new(audio_device(), settings.audio.max_sfx_channels) .unwrap_or_else(AudioFrontend::no_audio);
} else {
AudioFrontend::no_audio()
};
audio.set_music_volume(settings.audio.music_volume); audio.set_music_volume(settings.audio.music_volume);
audio.set_sfx_volume(settings.audio.sfx_volume); audio.set_sfx_volume(settings.audio.sfx_volume);

View File

@ -36,7 +36,7 @@ impl PlayState for MainMenuState {
let mut client_init: Option<ClientInit> = None; let mut client_init: Option<ClientInit> = None;
// Kick off title music // Kick off title music
if global_state.settings.audio.audio_on && global_state.audio.music_enabled() { if global_state.settings.audio.output.is_enabled() && global_state.audio.music_enabled() {
global_state.audio.play_title_music(); global_state.audio.play_title_music();
} }

View File

@ -433,7 +433,7 @@ impl MainMenuUi {
.hover_image(self.imgs.button_hover) .hover_image(self.imgs.button_hover)
.press_image(self.imgs.button_press) .press_image(self.imgs.button_press)
.label_y(Relative::Scalar(2.0)) .label_y(Relative::Scalar(2.0))
.label("Accept") .label(&self.voxygen_i18n.get("common.accept"))
.label_font_size(self.fonts.cyri.scale(22)) .label_font_size(self.fonts.cyri.scale(22))
.label_color(TEXT_COLOR) .label_color(TEXT_COLOR)
.label_font_id(self.fonts.cyri.conrod_id) .label_font_id(self.fonts.cyri.conrod_id)

View File

@ -1,11 +1,12 @@
use crate::{ use crate::{
ecs::MyEntity, ecs::MyEntity,
hud::{DebugInfo, Event as HudEvent, Hud}, hud::{DebugInfo, Event as HudEvent, Hud, PressBehavior},
i18n::{i18n_asset_key, VoxygenLocalization}, i18n::{i18n_asset_key, VoxygenLocalization},
key_state::KeyState, key_state::KeyState,
menu::char_selection::CharSelectionState, menu::char_selection::CharSelectionState,
render::Renderer, render::Renderer,
scene::{camera, Scene, SceneData}, scene::{camera, Scene, SceneData},
settings::AudioOutput,
window::{AnalogGameInput, Event, GameInput}, window::{AnalogGameInput, Event, GameInput},
Direction, Error, GlobalState, PlayState, PlayStateResult, Direction, Error, GlobalState, PlayState, PlayStateResult,
}; };
@ -422,9 +423,18 @@ impl PlayState for SessionState {
Event::InputUpdate(GameInput::Charge, state) => { Event::InputUpdate(GameInput::Charge, state) => {
self.inputs.charge.set_state(state); self.inputs.charge.set_state(state);
}, },
Event::InputUpdate(GameInput::FreeLook, true) => { Event::InputUpdate(GameInput::FreeLook, state) => {
free_look = !free_look; match (global_state.settings.gameplay.free_look_behavior, state) {
self.hud.free_look(free_look); (PressBehavior::Toggle, true) => {
free_look = !free_look;
self.hud.free_look(free_look);
},
(PressBehavior::Hold, state) => {
free_look = state;
self.hud.free_look(free_look);
},
_ => {},
};
}, },
Event::AnalogGameInput(input) => match input { Event::AnalogGameInput(input) => match input {
AnalogGameInput::MovementX(v) => { AnalogGameInput::MovementX(v) => {
@ -626,7 +636,7 @@ impl PlayState for SessionState {
HudEvent::ChangeAudioDevice(name) => { HudEvent::ChangeAudioDevice(name) => {
global_state.audio.set_device(name.clone()); global_state.audio.set_device(name.clone());
global_state.settings.audio.audio_device = Some(name); global_state.settings.audio.output = AudioOutput::Device(name);
global_state.settings.save_to_file_warn(); global_state.settings.save_to_file_warn();
}, },
HudEvent::ChangeMaxFPS(fps) => { HudEvent::ChangeMaxFPS(fps) => {
@ -703,6 +713,9 @@ impl PlayState for SessionState {
global_state.settings.graphics.window_size = new_size; global_state.settings.graphics.window_size = new_size;
global_state.settings.save_to_file_warn(); global_state.settings.save_to_file_warn();
}, },
HudEvent::ChangeFreeLookBehavior(behavior) => {
global_state.settings.gameplay.free_look_behavior = behavior;
},
} }
} }

View File

@ -1,5 +1,5 @@
use crate::{ use crate::{
hud::{BarNumbers, CrosshairType, Intro, ShortcutNumbers, XpBar}, hud::{BarNumbers, CrosshairType, Intro, PressBehavior, ShortcutNumbers, XpBar},
i18n, i18n,
render::{AaMode, CloudMode, FluidMode}, render::{AaMode, CloudMode, FluidMode},
ui::ScaleMode, ui::ScaleMode,
@ -348,6 +348,7 @@ pub struct GameplaySettings {
pub shortcut_numbers: ShortcutNumbers, pub shortcut_numbers: ShortcutNumbers,
pub bar_numbers: BarNumbers, pub bar_numbers: BarNumbers,
pub ui_scale: ScaleMode, pub ui_scale: ScaleMode,
pub free_look_behavior: PressBehavior,
} }
impl Default for GameplaySettings { impl Default for GameplaySettings {
@ -369,6 +370,7 @@ impl Default for GameplaySettings {
shortcut_numbers: ShortcutNumbers::On, shortcut_numbers: ShortcutNumbers::On,
bar_numbers: BarNumbers::Off, bar_numbers: BarNumbers::Off,
ui_scale: ScaleMode::RelativeToWindow([1920.0, 1080.0].into()), ui_scale: ScaleMode::RelativeToWindow([1920.0, 1080.0].into()),
free_look_behavior: PressBehavior::Toggle,
} }
} }
} }
@ -461,7 +463,26 @@ impl Default for GraphicsSettings {
} }
} }
} }
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum AudioOutput {
/// Veloren's audio system wont work on some systems,
/// so you can use this to disable it, and allow the
/// game to function
// If this option is disabled, functions in the rodio
// library MUST NOT be called.
Off,
Automatic,
Device(String),
}
impl AudioOutput {
pub fn is_enabled(&self) -> bool {
match self {
Self::Off => false,
_ => true,
}
}
}
/// `AudioSettings` controls the volume of different audio subsystems and which /// `AudioSettings` controls the volume of different audio subsystems and which
/// device is used. /// device is used.
#[derive(Clone, Debug, Serialize, Deserialize)] #[derive(Clone, Debug, Serialize, Deserialize)]
@ -473,8 +494,7 @@ pub struct AudioSettings {
pub max_sfx_channels: usize, pub max_sfx_channels: usize,
/// Audio Device that Voxygen will use to play audio. /// Audio Device that Voxygen will use to play audio.
pub audio_device: Option<String>, pub output: AudioOutput,
pub audio_on: bool,
} }
impl Default for AudioSettings { impl Default for AudioSettings {
@ -484,8 +504,7 @@ impl Default for AudioSettings {
music_volume: 0.4, music_volume: 0.4,
sfx_volume: 0.6, sfx_volume: 0.6,
max_sfx_channels: 10, max_sfx_channels: 10,
audio_device: None, output: AudioOutput::Automatic,
audio_on: true,
} }
} }
} }