diff --git a/assets/common/items/armor/starter/lantern.ron b/assets/common/items/armor/starter/lantern.ron new file mode 100644 index 0000000000..e9e67e729b --- /dev/null +++ b/assets/common/items/armor/starter/lantern.ron @@ -0,0 +1,12 @@ +Item( + name: "Black Lantern", + description: "Used by city guards.", + kind: Lantern( + ( + kind: Black0, + color: (r: 255, g: 190, b: 75), + strength_thousandths: 3000, + flicker_thousandths: 300, + ), + ), +) diff --git a/assets/voxygen/audio/soundtrack.ron b/assets/voxygen/audio/soundtrack.ron index a082e43cc0..b5238684ec 100644 --- a/assets/voxygen/audio/soundtrack.ron +++ b/assets/voxygen/audio/soundtrack.ron @@ -1,3 +1,5 @@ +// TODO: Re-add tunes that are not fitting general outside day/night situations + ( tracks: [ ( @@ -14,13 +16,13 @@ timing: Some(Night), artist: "Aeronic", ), - ( + /*( title: "Snowtop Volume", path: "voxygen.audio.soundtrack.snowtop_volume", length: 89.0, timing: Some(Day), artist: "Aeronic", - ), + ),*/ ( title: "Mineral Deposits", path: "voxygen.audio.soundtrack.mineral_deposits", @@ -42,13 +44,13 @@ timing: Some(Night), artist: "Aeronic", ), - ( + /*( title: "Rest Assured", path: "voxygen.audio.soundtrack.rest_assured", length: 185.0, timing: Some(Day), artist: "badbbad", - ), + ),*/ ( title: "Just The Beginning", path: "voxygen.audio.soundtrack.just_the_beginning", @@ -70,13 +72,13 @@ timing: Some(Night), artist: "badbbad", ), - ( + /*( title: "Down The Rabbit Hole", path: "voxygen.audio.soundtrack.down_the_rabbit_hole", length: 244.0, timing: Some(Night), artist: "badbbad", - ), + ),*/ ( title: "Between The Fairies", path: "voxygen.audio.soundtrack.between_the_fairies", diff --git a/assets/voxygen/background/bg_1.png b/assets/voxygen/background/bg_1.png index a16312145e..c6c118f654 100644 Binary files a/assets/voxygen/background/bg_1.png and b/assets/voxygen/background/bg_1.png differ diff --git a/assets/voxygen/background/bg_12.png b/assets/voxygen/background/bg_12.png new file mode 100644 index 0000000000..35a369b984 Binary files /dev/null and b/assets/voxygen/background/bg_12.png differ diff --git a/assets/voxygen/background/bg_13.png b/assets/voxygen/background/bg_13.png new file mode 100644 index 0000000000..5c9bacc3c2 Binary files /dev/null and b/assets/voxygen/background/bg_13.png differ diff --git a/assets/voxygen/background/bg_14.png b/assets/voxygen/background/bg_14.png new file mode 100644 index 0000000000..2d77aa1bab Binary files /dev/null and b/assets/voxygen/background/bg_14.png differ diff --git a/assets/voxygen/background/bg_15.png b/assets/voxygen/background/bg_15.png new file mode 100644 index 0000000000..f3b63de715 Binary files /dev/null and b/assets/voxygen/background/bg_15.png differ diff --git a/assets/voxygen/background/bg_3.png b/assets/voxygen/background/bg_3.png index cc93c6cb1f..9a388dc235 100644 Binary files a/assets/voxygen/background/bg_3.png and b/assets/voxygen/background/bg_3.png differ diff --git a/assets/voxygen/i18n/de_DE.ron b/assets/voxygen/i18n/de_DE.ron index 01a9c63ecf..c1bed2b84f 100644 --- a/assets/voxygen/i18n/de_DE.ron +++ b/assets/voxygen/i18n/de_DE.ron @@ -54,7 +54,7 @@ VoxygenLocalization( "common.controls": "Tastenbelegung", "common.video": "Grafik", "common.sound": "Audio", - "common.resume": "Weiter", + "common.resume": "Zurück", "common.characters": "Charaktere", "common.close": "Schließen", "common.yes": "Ja", @@ -136,6 +136,7 @@ eurer erstellen Charaktere gespeichert."#, "main.login.already_logged_in": "Ihr seid bereits eingelogged", "main.login.network_error": "Netzwerkfehler", "main.login.failed_sending_request": "Authentifizierung fehlgeschlagen", + "main.login.invalid_character": "Ungültiger Charakter", "main.login.client_crashed": "Client abgestürzt", /// End Main screen section @@ -146,6 +147,7 @@ eurer erstellen Charaktere gespeichert."#, "hud.show_tips": "Tips zeigen.", "hud.quests": "Quests", "hud.you_died": "Ihr seid gestorben.", + "hud.waypoint_saved": "Wegpunkt gesichert", "hud.press_key_to_show_keybindings_fmt": "Drückt {key} um die Tastenbelegung zu zeigen", "hud.press_key_to_show_debug_info_fmt": "Drückt {key} um die Debug-Info zu zeigen", @@ -317,6 +319,7 @@ Viel Spaß in der Welt von Veloren, Abenteurer!"#, "gameinput.climb": "Klettern", "gameinput.climbdown": "Runter klettern", "gameinput.wallleap": "Wandsprung", + "gameinput.togglelantern": "Laterne ein-/ausschalten", "gameinput.mount": "Aufsteigen", "gameinput.enter": "Betreten", "gameinput.command": "Befehl", @@ -336,11 +339,14 @@ Viel Spaß in der Welt von Veloren, Abenteurer!"#, /// End GameInput section /// Start chracter selection section + "char_selection.loading_characters": "Lade Charaktere...", "char_selection.delete_permanently": "Diesen Charakter unwiderruflich löschen?", + "char_selection.deleting_character": "Lösche Charakter...", "char_selection.change_server": "Server wechseln.", "char_selection.enter_world": "Betreten", - "char_selection.logout": "Logout", + "char_selection.logout": "Ausloggen", "char_selection.create_charater": "Charakter erstellen", + "char_selection.creating_character": "Erstelle Charakter...", "char_selection.character_creation": "Charakter Erstellung", "char_selection.create_new_charater": "Neuen Charakter erstellen", @@ -356,6 +362,7 @@ Viel Spaß in der Welt von Veloren, Abenteurer!"#, "char_selection.skin": "Hautton", "char_selection.eyebrows": "Augenbrauen", "char_selection.accessories": "Accessoires", + "char_selection.create_info_name": "Euer Charakter braucht einen Namen!", /// End chracter selection section /// Start character window section "character_window.character_name": "Charakter", diff --git a/assets/voxygen/i18n/en.ron b/assets/voxygen/i18n/en.ron index 6d7ed5d254..bc99805041 100644 --- a/assets/voxygen/i18n/en.ron +++ b/assets/voxygen/i18n/en.ron @@ -351,7 +351,7 @@ Enjoy your stay in the World of Veloren."#, "char_selection.human_default": "Human Default", "char_selection.level_fmt": "Level {level_nb}", - "char_selection.uncanny_valley": "Uncanny Valley", + "char_selection.uncanny_valley": "Wilderness", "char_selection.plains_of_uncertainty": "Plains of Uncertainty", "char_selection.beard": "Beard", "char_selection.hair_style": "Hair Style", @@ -361,6 +361,7 @@ Enjoy your stay in the World of Veloren."#, "char_selection.skin": "Skin", "char_selection.eyebrows": "Eyebrows", "char_selection.accessories": "Accessories", + "char_selection.create_info_name": "Your Character needs a name!", /// End chracter selection section diff --git a/assets/voxygen/i18n/it.ron b/assets/voxygen/i18n/it_IT.ron similarity index 99% rename from assets/voxygen/i18n/it.ron rename to assets/voxygen/i18n/it_IT.ron index 75d8b7a9de..5af28e1e58 100644 --- a/assets/voxygen/i18n/it.ron +++ b/assets/voxygen/i18n/it_IT.ron @@ -17,7 +17,7 @@ VoxygenLocalization( metadata: ( language_name: "Italiano", - language_identifier: "it", + language_identifier: "it_IT", ), convert_utf8_to_ascii: false, fonts: { diff --git a/assets/voxygen/i18n/ru_RU.ron b/assets/voxygen/i18n/ru_RU.ron new file mode 100644 index 0000000000..51ae278708 --- /dev/null +++ b/assets/voxygen/i18n/ru_RU.ron @@ -0,0 +1,369 @@ +/// Localization for "global" Russian +VoxygenLocalization( + metadata: ( + language_name: "Русский", + language_identifier: "ru_RU", + ), + 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": "Имя пользователя", + "common.singleplayer": "Одиночная игра", + "common.multiplayer": "Мультиплеер", + "common.servers": "Сервера", + "common.quit": "Выход", + "common.settings": "Настройки", + "common.languages": "Язык", + "common.interface": "Интерфейс", + "common.gameplay": "Геймплей", + "common.controls": "Управление", + "common.video": "Видео", + "common.sound": "Звук", + "common.resume": "Продолжить", + "common.characters": "Персонажи", + "common.close": "Закрыть", + "common.yes": "Да", + "common.no": "Нет", + "common.back": "Назад", + "common.create": "Создать", + "common.okay": "Хорошо", + "common.accept": "Принять", + "common.disclaimer": "Дисклеймер", + "common.cancel": "Отмена", + "common.none": "Нет", + "common.error": "Ошибка", + "common.fatal_error": "Критическая ошибка", + + // Message when connection to the server is lost + "common.connection_lost": r#"Соединение потеряно! +Сервер перезагрузился? +Клиент обновлен до последней версии?"#, + + + "common.races.orc": "Орк", + "common.races.human": "Человек", + "common.races.dwarf": "Дварф", + "common.races.elf": "Эльф", + "common.races.undead": "Нежить", + "common.races.danari": "Данари", + + "common.weapons.axe": "Топор", + "common.weapons.sword": "Меч", + "common.weapons.staff": "Посох", + "common.weapons.bow": "Лук", + "common.weapons.hammer": "Молот", + /// End Common section + + + /// Start Main screen section + "main.connecting": "Подключение", + "main.creating_world": "Создание мира", + + // Welcome notice that appears the first time Veloren is started + "main.notice": r#"Добро пожаловать в Veloren-Alpha! + +Прежде чем начать веселье, прими во внимание следующие вещи: + +- Это очень ранняя альфа. Тут есть баги, крайне незавершенный геймплей, неотполированные механики и отсутсвующие фичи. +- Если у вас есть конструктивный фидбек или сообщение об ошибке, вы можете связаться с нами через Reddit, GitLab или наш Discord-сервер. +- Veloren лицензирован GPL 3 open-source licence. Это означает, игра бесплатна, ее можно модифицировать и переделывать на свой вкус (при условии, что готовая работа тоже лицензирована GPL 3). +- Veloren - некоммерческий проект, каждый работает над ним добровольно. +Если тебе нравится, что ты видишь, милости просим присоедниться к команде разработчиков или худождественной команде! +- 'Воксельная РПГ' - самобытный жанр. ФПС тоже привыкли называть 'Клонами Дума'. + +Как и они, мы пытаемся построить нишу. Эта игра не клон, ее развитие в будущем будет отличаться от существующих игр. + +Спасибо за прочтение, мы надеемся, вам понравится игра! + +~ Команда разработчиков Veloren"#, + + + // Login process description + "main.login_process": r#"Информация по входу: + +Если у вас есть проблемы со входом: + +Обратите внимание, что теперь вам нужен аккаунт +играть на серверах с включенной аутентификацией. + +Вы можете создать аккаунт тут: + +https://account.veloren.net."#, + "main.login.server_not_found": "Сервер не найден", + "main.login.authentication_error": "Ошибка аутентификации на сервер", + "main.login.server_full": "Сервер полон", + "main.login.untrusted_auth_server": "Аутентификация не пройдена", + "main.login.outdated_client_or_server": "ServerWentMad: Возможно, версии несовместимы. Проверьте наличие обновлений.", + "main.login.timeout": "Timeout: Сервер не ответил вовремя. (Перегрузка или проблемы с сетью).", + "main.login.server_shut_down": "Сервер выключен", + "main.login.already_logged_in": "Вы уже вошли на сервер.", + "main.login.network_error": "Ошибка сети", + "main.login.failed_sending_request": "Запрос аутентификации провален", + "main.login.client_crashed": "Клиент вылетел", + + /// End Main screen section + + + /// Start HUD Section + "hud.do_not_show_on_startup": "Не показывать это при запуске", + "hud.show_tips": "Показать советы", + "hud.quests": "Квесты", + "hud.you_died": "Вы мертвы", + + "hud.press_key_to_show_keybindings_fmt": "Нажмите {key}, чтобы посмотреть раскладку", + "hud.press_key_to_show_debug_info_fmt": "Нажмите {key}, чтобы показать панель отладки", + "hud.press_key_to_toggle_keybindings_fmt": "Нажмите {key}, чтобы привязать клавишу", + "hud.press_key_to_toggle_debug_info_fmt": "Нажмите {key}, чтобы переназначить панель отладки", + + // Respawn message + "hud.press_key_to_respawn": r#"Нажмите {key}, чтобы возродиться на последнем костре, который вы посетили."#, + + // Welcome message + "hud.welcome": r#"Добро пожаловать в Veloren-Alpha!, + + +Немного советов перед тем началом игры: + + +НАИБОЛЕЕ ВАЖНО: Чтобы установить точку спауна, напишите /waypoint в чат. + +Это возможно, даже если вы уже мертвы! + + +Нажмите F1, чтобы увидеть доступые команды. + +Напишите /help, чтобы увидеть команды чата. + + +В мире есть сундуки и другие рандомно генерируемые объекты! + +Нажмите ПКМ, чтобы собрать их. + +Чтобы использовать то, что мы нашли в сундуках, откройте свой инвентарь 'B'. + +Двойной клик на предмет в инвентаре использует или экипирует его. + +Чтобы выкинуть их, кликните на предмет, а потом кликите вне инвентаря. + + +Ночи в Veloren могут быть довольно темными. + +Зажгите свой фонарь, написав /lantern в чат. + + +Хотите увидеть курсор, чтобы закрыть это окно? Нажмите TAB! + + +Наслаждайтесь миром Veloren."#, + + + // Inventory + "hud.bag.inventory": "Инвентарь", + "hud.bag.stats_title": "Статы", + "hud.bag.exp": "Опыт", + "hud.bag.armor": "Броня", + "hud.bag.stats": "Статы", + "hud.bag.head": "Голова", + "hud.bag.neck": "Шея", + "hud.bag.tabard": "Накидка", + "hud.bag.shoulders": "Плечи", + "hud.bag.chest": "Нагрудник", + "hud.bag.hands": "Руки", + "hud.bag.lantern": "Фонарь", + "hud.bag.belt": "Пояс", + "hud.bag.ring": "Кольцо", + "hud.bag.back": "Спина", + "hud.bag.legs": "Ноги", + "hud.bag.feet": "Ботинки", + "hud.bag.mainhand": "Главная рука", + "hud.bag.offhand": "Второстепенная рука", + + + // Map and Questlog + "hud.map.map_title": "Карта", + "hud.map.qlog_title": "Квесты", + + // Settings + "hud.settings.general": "Общие", + "hud.settings.none": "Нет", + "hud.settings.press_behavior.toggle": "Переключить", + "hud.settings.press_behavior.hold": "Держать", + "hud.settings.help_window": "Окно помощи", + "hud.settings.debug_info": "Панель отладки", + "hud.settings.tips_on_startup": "Советы на старте", + "hud.settings.ui_scale": "Размер интерфейса", + "hud.settings.relative_scaling": "Относительное масштабирование", + "hud.settings.custom_scaling": "Пользовательское масштабирование", + "hud.settings.crosshair": "Перекрестие", + "hud.settings.transparency": "Прозрачность", + "hud.settings.hotbar": "Хотбар", + "hud.settings.toggle_shortcuts": "Отображать ярлыки", + "hud.settings.toggle_bar_experience": "Отображать полоску опыта", + "hud.settings.scrolling_combat_text": "Боевой журнал", + "hud.settings.single_damage_number": "Отдельные числа урона", + "hud.settings.cumulated_damage": "Суммарный урон", + "hud.settings.incoming_damage": "Входящий урон", + "hud.settings.cumulated_incoming_damage": "Суммарный входящий урон", + "hud.settings.energybar_numbers": "Отображение полоски энергии", + "hud.settings.values": "Значение", + "hud.settings.percentages": "Проценты", + "hud.settings.chat": "Чат", + "hud.settings.background_transparency": "Прозрачность заднего фона", + + "hud.settings.pan_sensitivity": "Чувствительность камеры", + "hud.settings.zoom_sensitivity": "Чувствительность зума", + "hud.settings.invert_scroll_zoom": "Инвертировать прокрутку зума", + "hud.settings.invert_mouse_y_axis": "Инвертировать ось Y", + "hud.settings.free_look_behavior": "Настройка свободной камеры", + + "hud.settings.view_distance": "Дальность прорисовки", + "hud.settings.maximum_fps": "Максимум FPS", + "hud.settings.fov": "Поле зрения (градусы)", + "hud.settings.gamma": "Гамма", + "hud.settings.antialiasing_mode": "Сглаживание", + "hud.settings.cloud_rendering_mode": "Рендер облаков", + "hud.settings.fluid_rendering_mode": "Рендер жидкостей", + "hud.settings.fluid_rendering_mode.cheap": "Низко", + "hud.settings.fluid_rendering_mode.shiny": "Высоко", + "hud.settings.cloud_rendering_mode.regular": "Обычно", + "hud.settings.fullscreen": "Полный экран", + "hud.settings.save_window_size": "Сохранить размер окна", + + "hud.settings.music_volume": "Громкость музыки", + "hud.settings.sound_effect_volume": "Громкость звуковых эффектов", + "hud.settings.audio_device": "Устройство аудио", + + "hud.settings.awaitingkey": "Нажми клавишу...", + + "hud.social": "Социальное", + "hud.social.online": "Онлайн", + "hud.social.friends": "Друзья", + "hud.social.not_yet_available": "Пока недоступно", + "hud.social.faction": "Фракция", + "hud.social.play_online_fmt": "{nb_player} игрок(ов) онлайн", + + "hud.spell": "Заклинание", + + "hud.free_look_indicator": "Свободная камера активна", + + /// End HUD section + + + /// Start GameInput section + + "gameinput.primary": "Основная атака", + "gameinput.secondary": "Второстепенная атака/Блок/Прицел", + "gameinput.slot1": "Быстрый слот 1", + "gameinput.slot2": "Быстрый слот 2", + "gameinput.slot3": "Быстрый слот 3", + "gameinput.slot4": "Быстрый слот 4", + "gameinput.slot5": "Быстрый слот 5", + "gameinput.slot6": "Быстрый слот 6", + "gameinput.slot7": "Быстрый слот 7", + "gameinput.slot8": "Быстрый слот 8", + "gameinput.slot9": "Быстрый слот 9", + "gameinput.slot10": "Быстрый слот 10", + "gameinput.swaploadout": "Сменить снаряжение", + "gameinput.togglecursor": "Отображать курсор курсор", + "gameinput.help": "Отображать окно помощи", + "gameinput.toggleinterface": "Отображать интерфейс", + "gameinput.toggledebug": "Отображать FPS и экран отладки", + "gameinput.screenshot": "Сделать скриншот", + "gameinput.toggleingameui": "Отображать неймтеги", + "gameinput.fullscreen": "Включить полный экран", + "gameinput.moveforward": "Двигаться вперед", + "gameinput.moveleft": "Двигаться влево", + "gameinput.moveright": "Двигаться вправо", + "gameinput.moveback": "Двигаться назад", + "gameinput.jump": "Прыжок", + "gameinput.glide": "Глайдер", + "gameinput.roll": "Кувырок", + "gameinput.climb": "Карабкаться", + "gameinput.climbdown": "Карабкаться вниз", + "gameinput.wallleap": "Прыжок от стены", + "gameinput.mount": "Оседлать", + "gameinput.enter": "Войти", + "gameinput.command": "Командовать", + "gameinput.escape": "Выйти", + "gameinput.map": "Карта", + "gameinput.bag": "Рюкзак", + "gameinput.social": "Социальное", + "gameinput.sit": "Сесть", + "gameinput.spellbook": "Заклинания", + "gameinput.settings": "Найстройки", + "gameinput.respawn": "Возродиться", + "gameinput.charge": "Зарядить", + "gameinput.togglewield": "Достать/убрать оружие", + "gameinput.interact": "Взаимодействовать", + "gameinput.freelook": "Свободная камера", + + /// End GameInput section + + + /// Start chracter selection section + "char_selection.delete_permanently": "Навсегда удалить этого персонажа?", + "char_selection.change_server": "Сменить сервер", + "char_selection.enter_world": "Войти в мир", + "char_selection.logout": "Выйти в меню", + "char_selection.create_new_charater": "Создать нового персонажа", + "char_selection.character_creation": "Создание персонажа", + + "char_selection.human_default": "Стандартный человек", + "char_selection.level_fmt": "Уровень {level_nb}", + "char_selection.uncanny_valley": "Uncanny Valley", + "char_selection.plains_of_uncertainty": "Plains of Uncertainty", + "char_selection.beard": "Борода", + "char_selection.hair_style": "Прическа", + "char_selection.hair_color": "Цвет волос", + "char_selection.chest_color": "Цвет нагрудника", + "char_selection.eye_color": "Цвет глаз", + "char_selection.skin": "Кожа", + "char_selection.eyebrows": "Брови", + "char_selection.accessories": "Аксессуары", + + /// End chracter selection section + + + /// Start character window section + "character_window.character_name": "Имя персонажа", + // Charater stats + "character_window.character_stats": r#"Стойкость + +Выносливость + +Сила воли +"#, + + + /// Start character window section + + + /// Start Escape Menu Section + "esc_menu.logout": "Выйти в меню", + "esc_menu.quit_game": "Выйти из игры", + /// End Escape Menu Section + } +) diff --git a/assets/voxygen/voxel/sprite/door/door-0.vox b/assets/voxygen/voxel/sprite/door/door-0.vox index dcde98313f..88101bf3bf 100644 Binary files a/assets/voxygen/voxel/sprite/door/door-0.vox and b/assets/voxygen/voxel/sprite/door/door-0.vox differ diff --git a/common/src/comp/inventory/mod.rs b/common/src/comp/inventory/mod.rs index 66c63636a8..e7e126ed96 100644 --- a/common/src/comp/inventory/mod.rs +++ b/common/src/comp/inventory/mod.rs @@ -3,7 +3,6 @@ pub mod slot; use crate::assets; use item::{Consumable, Item, ItemKind}; -use rand::{seq::SliceRandom, thread_rng}; use specs::{Component, FlaggedStorage, HashMapStorage}; use specs_idvs::IDVStorage; use std::ops::Not; @@ -305,15 +304,6 @@ impl Default for Inventory { }; inventory.push(assets::load_expect_cloned("common.items.cheese")); inventory.push(assets::load_expect_cloned("common.items.apple")); - let mut rng = thread_rng(); - let starter_lantern = [ - "common.items.lantern.black_0", - "common.items.lantern.red_0", - "common.items.lantern.blue_0", - ] - .choose(&mut rng) - .unwrap(); - inventory.push(assets::load_expect_cloned(starter_lantern)); inventory } } diff --git a/common/src/comp/inventory/test.rs b/common/src/comp/inventory/test.rs index ae84f71ff5..30f9d0b63b 100644 --- a/common/src/comp/inventory/test.rs +++ b/common/src/comp/inventory/test.rs @@ -8,7 +8,7 @@ lazy_static! { } /// The `Default` inventory should contain 3 items: cheese, apple, lantern #[test] -fn create_default_count() { assert_eq!(Inventory::default().count(), 3) } +fn create_default_count() { assert_eq!(Inventory::default().count(), 2) } /// Attempting to push into a full inventory should return the same item. #[test] diff --git a/server/src/state_ext.rs b/server/src/state_ext.rs index b908e3a7c4..5834792165 100644 --- a/server/src/state_ext.rs +++ b/server/src/state_ext.rs @@ -240,7 +240,9 @@ impl StateExt for State { back: None, ring: None, neck: None, - lantern: None, + lantern: Some(assets::load_expect_cloned( + "common.items.armor.starter.lantern", + )), head: None, tabard: None, } diff --git a/voxygen/src/menu/char_selection/ui.rs b/voxygen/src/menu/char_selection/ui.rs index 7d853130c0..5984ce69b0 100644 --- a/voxygen/src/menu/char_selection/ui.rs +++ b/voxygen/src/menu/char_selection/ui.rs @@ -891,30 +891,58 @@ impl CharSelectionUi { to_select = true; } // Create Button - if Button::image(self.imgs.button) + let create_button = Button::image(self.imgs.button) .bottom_right_with_margins_on(ui_widgets.window, 10.0, 10.0) .w_h(150.0, 40.0) - .hover_image(self.imgs.button_hover) - .press_image(self.imgs.button_press) + .hover_image(if *name != "Character Name" { + self.imgs.button_hover + } else { + self.imgs.button + }) + .press_image(if *name != "Character Name" { + self.imgs.button_press + } else { + self.imgs.button + }) .label(&self.voxygen_i18n.get("common.create")) .label_font_id(self.fonts.cyri.conrod_id) - .label_color( - /* if self.mode { TEXT_COLOR } else { */ TEXT_COLOR, /* , } */ - ) + .label_color(if *name != "Character Name" { + TEXT_COLOR + } else { + TEXT_COLOR_2 + }) .label_font_size(self.fonts.cyri.scale(20)) - .label_y(conrod_core::position::Relative::Scalar(3.0)) - .set(self.ids.create_button, ui_widgets) - .was_clicked() - { - self.info_content = InfoContent::CreatingCharacter; + .label_y(conrod_core::position::Relative::Scalar(3.0)); - events.push(Event::AddCharacter { - alias: name.clone(), - tool: tool.map(|tool| tool.to_string()), - body: comp::Body::Humanoid(body.clone()), - }); + if *name == "Character Name" { + //TODO: We need a server side list of disallowed names and certain naming rules + if create_button + .with_tooltip( + tooltip_manager, + &self.voxygen_i18n.get("char_selection.create_info_name"), + "", + &tooltip_human, + ) + .bottom_offset(55.0) + .x_offset(-10.0) + .set(self.ids.create_button, ui_widgets) + .was_clicked() + {} + } else { + if create_button + .set(self.ids.create_button, ui_widgets) + .was_clicked() + { + self.info_content = InfoContent::CreatingCharacter; - to_select = true; + events.push(Event::AddCharacter { + alias: name.clone(), + tool: tool.map(|tool| tool.to_string()), + body: comp::Body::Humanoid(body.clone()), + }); + + to_select = true; + } } // Character Name Input Rectangle::fill_with([320.0, 50.0], color::rgba(0.0, 0.0, 0.0, 0.97)) diff --git a/voxygen/src/menu/main/ui.rs b/voxygen/src/menu/main/ui.rs index 69554960ed..2d7d255d91 100644 --- a/voxygen/src/menu/main/ui.rs +++ b/voxygen/src/menu/main/ui.rs @@ -179,6 +179,10 @@ impl MainMenuUi { "voxygen.background.bg_9", "voxygen.background.bg_10", "voxygen.background.bg_11", + "voxygen.background.bg_12", + "voxygen.background.bg_13", + "voxygen.background.bg_14", + "voxygen.background.bg_15", ]; let mut rng = thread_rng(); diff --git a/voxygen/src/ui/widgets/tooltip.rs b/voxygen/src/ui/widgets/tooltip.rs index 9402991dfe..fe81bb716e 100644 --- a/voxygen/src/ui/widgets/tooltip.rs +++ b/voxygen/src/ui/widgets/tooltip.rs @@ -100,6 +100,7 @@ impl TooltipManager { image_dims: Option<(f64, f64)>, src_id: widget::Id, bottom_offset: f64, + x_offset: f64, ui: &mut UiCell, ) { let tooltip_id = self.tooltip_id; @@ -121,7 +122,7 @@ impl TooltipManager { // Determine position based on size and mouse position // Flow to the bottom right of the mouse - let x = (m_x + t_w / 2.0).min(w_w / 2.0 - t_w / 2.0); + let x = (m_x + t_w / 2.0).min(w_w / 2.0 - t_w / 2.0 + x_offset); let y = (m_y - mp_h - t_h / 2.0).max(-w_h / 2.0 + t_h / 2.0 + bottom_offset); tooltip .floating(true) @@ -157,6 +158,7 @@ pub struct Tooltipped<'a, W> { image_dims: Option<(f64, f64)>, // Offsets limit of bottom of tooltip bottom_offset: Option, + x_offset: Option, tooltip: &'a Tooltip<'a>, } impl<'a, W: Widget> Tooltipped<'a, W> { @@ -170,6 +172,11 @@ impl<'a, W: Widget> Tooltipped<'a, W> { self } + pub fn x_offset(mut self, off: f64) -> Self { + self.x_offset = Some(off); + self + } + pub fn bottom_offset(mut self, off: f64) -> Self { self.bottom_offset = Some(off); self @@ -185,6 +192,7 @@ impl<'a, W: Widget> Tooltipped<'a, W> { self.image_dims, id, self.bottom_offset.unwrap_or(0.0), + self.x_offset.unwrap_or(0.0), ui, ); event @@ -219,6 +227,7 @@ impl Tooltipable for W { img_id: None, image_dims: None, bottom_offset: None, + x_offset: None, tooltip, } }