diff --git a/Output/Languages/Czech.xml b/Output/Languages/cs.xml similarity index 81% rename from Output/Languages/Czech.xml rename to Output/Languages/cs.xml index fe288daf..39d2c221 100644 --- a/Output/Languages/Czech.xml +++ b/Output/Languages/cs.xml @@ -15,6 +15,7 @@ Nahrané písně Myš Využití paměti + Herní režim Normální Duet Směska @@ -31,6 +32,10 @@ Normální uživatel Správce Uživatel klávesnice + Zdroj písně + Seznam skladeb + Skupina + Všechny písně Software OpenGL Direct3D @@ -147,10 +152,21 @@ (%v písní) (%v píseň) %a - %t + A-Z = Skok na písmeno • F3 = Vyhledávat • CTRL+R = Náhodný výběr - CTRL+S = Spustit směsku • CTRL+# = Změnit řazení skladeb • CTRL+T = Zapnout/Vypnout zobrazení kategorií • Mezerník = Otevřít volby skladby • ESC = Zpět do hlavní nabídky + A-Z = Vyhledávání umělce a názvu, předpony pro vyhledávání → a: = umělec • t: = název • c: = tvůrce • e: = edice • g: = žánr • y: = rok (např. 1999 nebo 1980-1989) • l: = jazyk • al: = album • fi: = název souboru • fo: = název složky + 1-6 = stisknutím čísla týmu použijete náhodný žolík. + Řazení: %s + Žádnou směsku pro tuto píseň! Pozastavit Zastavit zpívání Pokračovat Přeskočit tuto píseň + Začít kolo znovu + Začít hru znovu + Žádné další písně v seznamu skladeb! + Webová kamera není dostupná! + Poměr stran: %a + Přeskočeno %s sekund Výsledky Hodnocení Body @@ -183,6 +199,7 @@ Nabídka písně Třídění písně Karty + Přehrávat automaticky náhledy písní Obtížnost hry Režim časomíry Styl pro nejlepší výsledky @@ -234,4 +251,19 @@ Hlasitost Adresa serveru Server neběží. Prověřte, prosím, config.xml! + Promiňte + Vocaluxe postihla chyba a spadl.\r\nPomožte nám opravit problém, pošlete hlášení.\r\nPro odstranění možná citlivých údajů před odesláním upravte následující zápis. + , že jste zažili chybu.\r\nPomožte nám opravit problém, pošlete hlášení.\r\nPro odstranění možná citlivých údajů před odesláním upravte následující zápis. + Nenahrávejte nic (můžete pořád zkopírovat hlášení o chybě výše) + Nahrajte a otevřete téma (veřejně viditelné + vyžaduje účet na Githubu) + Nahrajte a získejte odkaz na svoji zprávu (veřejně viditelné) + Odeslat + Nahrává se + Ukončit + Pokračovat + Odkaz na vaše hlášení: + Chyba při nahrávání zápisu. + Poslední chyba + Nedostupné + Zde popište potíže.\n\n### Kroky k zopakování situace\nŘekněte nám, jak zopakovat tento problém.\n\n### Verze Vocaluxe a soubor se záznamem\n{0}\n{1} diff --git a/Output/Languages/German.xml b/Output/Languages/de.xml similarity index 83% rename from Output/Languages/German.xml rename to Output/Languages/de.xml index 9076e3b8..79e97df3 100644 --- a/Output/Languages/German.xml +++ b/Output/Languages/de.xml @@ -15,6 +15,7 @@ Geladene Songs Maus Speicherverbrauch + Spielmodus Normal Duett Medley @@ -31,6 +32,10 @@ Normaler Benutzer Administrator Tastatur Benutzer + Song-Quelle + Playlist + Kategorie + Alle Lieder Software OpenGL Direct3D @@ -147,19 +152,21 @@ (%v Lieder) (%v Lied) %a -%t - A-Z = Zum Buchstaben springen • F3 = Suchen • STRG+R = Zufällige Auswahl • STRG+S = Starte Medley • STRG+# = Song Sortierung ändern • STRG+T = Kategorieansicht ein-/ausschalten • Leertaste = Lied-Optionen öffnen • ESC = Zurück zum Hauptmenü - A-Z = Interpreten und Titel durchsuchen, Präfixe für die Suche → a: = Interpret • t: = Titel • c: = Ersteller • e: = Edition • g: = Genre • y: = Jahr (z.B. 1999 oder 1980-1989) • l: = Sprache • al: = Album • fi: = Dateiname • fo: = Ordnername - 1-6 = Drücke die Teamnummer um einen Zufallssong Joker zu verwenden + A-Z = Zum Buchstaben springen • F3 = Suchen • STRG+R = Zufällige Auswahl • STRG+S = Medley starten • STRG+# = Song-Reihenfolge ändern • STRG+T = Kategorieansicht an-/abschalten • Leertaste = Songoptionen öffnen • ESC = Zurück zum Hauptmenü + A-Z = Interpret und Titel suchen; Präfixe für die Suche → a: = Interpret • t: = Titel • c: = Autor • e: = Edition • g: = Genre • y: = Jahr (z.B. 1999 oder 1980-1989) • l: = Sprache • al: = Album • fi: = Dateiname • fo: = Ordnername + 1-6 = Drücke die Nummer Deines Teams, um einen zufälligen Song-Joker einzusetzen Sortierung: %s Kein Medley für diesen Song! Pause Lied beenden Fortfahren Lied überspringen + Runde neustarten + Spiel neustarten Keine weiteren Songs in der Playlist! Keine Webcam verfügbar! - Seitenverhältnis: %a - %s Sekunden gesprungen + Bildverhältnis: %a + %s Sekunden übersprungen Auswertung Bewertung Punkte @@ -192,6 +199,7 @@ Song-Menu-Stil Sortierung der Lieder Kategorieren anzeigen + Autoplay für Songvorschau Schwierigkeit Zeit-Modus Highscore-Stil @@ -243,4 +251,19 @@ Lautstärke Serveradresse Server läuft derzeit nicht. Bitte überprüfe die config.xml! + Es tut uns leid + dass Vocaluxe abgestürzt ist.\r\nUm uns zu helfen, das Problem zu beheben, schicke uns bitte einen Absturzbericht.\r\nBitte bearbeite das folgende Protokoll, so dass keine eventuell persönlichen Daten enthalten sind. + dass Du einen Fehler festgestellt hast.\r\nUm uns zu helfen, das Problem zu beheben, schicke uns bitte einen Absturzbericht.\r\nBitte bearbeite das folgende Protokoll, so dass keine eventuell persönlichen Daten enthalten sind. + Nichts hochladen (Du kannst immer noch die Fehlermeldung oben kopieren) + Hochladen und ein Ticket eröffnen (öffentlich sichtbar und benötigt einen github-Account) + Hochladen und einen Link zum Bericht erhalten (öffentlich sichtbar) + Senden + Lade hoch + Verlassen + Fortfahren + Der Link zu Deinem Bericht: + Fehler beim Hochladen des Protokolls. + Letzter Fehler + Nicht verfügbar + Beschreibe Dein Problem hier.\n\n###Schritte zum Reproduzieren des Problems\nTeil uns mit wie man das Problem reproduzieren kann.\n\n###Vocaluxe-Version und -Protokoll\n{0}\n{1} diff --git a/Output/Languages/English.xml b/Output/Languages/en.xml similarity index 100% rename from Output/Languages/English.xml rename to Output/Languages/en.xml diff --git a/Output/Languages/Spanish.xml b/Output/Languages/es.xml similarity index 100% rename from Output/Languages/Spanish.xml rename to Output/Languages/es.xml diff --git a/Output/Languages/French.xml b/Output/Languages/fr.xml similarity index 83% rename from Output/Languages/French.xml rename to Output/Languages/fr.xml index 53dd928d..5968f548 100644 --- a/Output/Languages/French.xml +++ b/Output/Languages/fr.xml @@ -35,7 +35,7 @@ Source des chansons Playlist Catégorie - Toutes les chansons + Toutes les chansons Logiciel OpenGL Direct3D @@ -145,19 +145,28 @@ Options de la chanson Rechercher: Pas de Langue - Pas d'Année + Pas d\'Année Pas de Genre - Pas d'Edition + Pas d\'Edition Toutes les chansons (%v Chansons) (%v Chanson) %a - %t + A-Z = Sauter à la lettre • F3 = Chercher • CTRL+R = Sélectionner au hasard • CTRL+S = Lancer medley • CTRL+# = Changer le tri des chansons • CTRL+T = Activer/Désactiver la vue par catégorie • Espace = Ouvrir les options de chanson • Échap = Retouner au menu précédent + A-Z = Chercher artiste et titre, préfixes pour la recherche → a: = artiste • t: = titre • c: = créateurr • e: = édition • g: = genre • y: = année (ex: 1999 ou 1980-1989) • l: = langage • al: = album • fi: = nom du fichier • fo: = nom du dossier + 1-6 = Pressez votre numéro d'équipe afin d'utiliser une chanson joker au hasard + Classement en cours : %s + Aucun Medley pour cette chanson ! Pause Arrêter de chanter Continuer Passer cette chanson Redémarer le tour Redémarer le jeu + Plus aucune chanson dans la playlist ! + Pas de webcam disponible ! + Ratio d'aspect : %a + %s secondes passées Scores Note Points @@ -242,4 +251,29 @@ Volume Adresse du serveur Le serveur ne fonctionne pas. Merci de vérifier config.xml ! + Nous sommes désolés + Vocaluxe a rencontré une erreur ou un bug. +Pour nous aider à résoudre le problème, envoyez-nous un rapport. +Avant de soumettre le bug, modifiez le journal pour supprimer des informations sensibles. + Vous avez rencontré une erreur ou un bug. +Pour nous aider à résoudre le problème, envoyez-nous un rapport. +Avant de soumettre le bug, modifiez le journal suivant pour supprimer des informations sensibles. + N'envoi rien (vous pouvez toujours copier le message d'erreur ci-dessus) + Envoyer et ouvrir un problème (visible publiquement + nécessite un compte github) + Envoyer et obtenir le lien de votre rapport (visible publiquement) + Soumettre + Envoyer + Quitter + Continuer + Lien de votre rapport: + Erreur lors de l'envoi du journal. + Dernière erreur + Indisponible + Décrivez votre problème ici. + +### Procédure de reproduction +Dites-nous comment reproduire ce problème. +### Version Vocaluxe et fichier journal +{0} +{1} diff --git a/Output/Languages/Hungarian.xml b/Output/Languages/hu.xml similarity index 100% rename from Output/Languages/Hungarian.xml rename to Output/Languages/hu.xml diff --git a/Output/Languages/Italian.xml b/Output/Languages/it.xml similarity index 78% rename from Output/Languages/Italian.xml rename to Output/Languages/it.xml index e2e34af9..a1f0c4a9 100644 --- a/Output/Languages/Italian.xml +++ b/Output/Languages/it.xml @@ -15,6 +15,7 @@ Canzoni caricate Mouse Uso della Memoria + Modalità di gioco Normale Duetto Medley @@ -31,6 +32,10 @@ Utente normale Amministratore Tasti Utente + Sorgente della Canzone + Playlist + Categoria + Tutte le canzoni Software OpenGL Direct3D @@ -51,7 +56,7 @@ Scacchiera Libro Su richiesta - All'avvio + All\\'avvio Dinamico Nessuno Casuale @@ -84,6 +89,7 @@ Niente Riempi Salta + Slide Zoom Sotto Sopra @@ -119,10 +125,10 @@ 4 giocatori 5 giocatori 6 giocatori - Attenzione: Non c'è nessun microfono assegnato al giocatore %v! - Attenzione: Non c'è nessun microfono assegnato ai giocatori %v! - Attenzione: Non c'è nessun profilo assegnato al giocatore %v! - Attenzione: Non c'è nessun profilo assegnato ai giocatori %v! + Attenzione: Non c\'è nessun microfono assegnato al giocatore %v! + Attenzione: Non c\'è nessun microfono assegnato ai giocatori %v! + Attenzione: Non c\'è nessun profilo assegnato al giocatore %v! + Attenzione: Non c\'è nessun profilo assegnato ai giocatori %v! Selezione canzone Canta Aggiungi alla playlist @@ -146,10 +152,21 @@ (%v Canzoni) (%v Canzone) %a - %t + A-Z = Salta alla lettera • F3 = Cerca • CTRL+R = Selezione casuale • CTRL+S = Inizia medley • CTRL+# = Cambia l\'ordinamento delle canzoni • CTRL+T = Attiva/Disattiva visualizzazione categoria • Space = Apri impostazioni canzone • ESC = Ritorna al menu principale + A-Z = Cerca artista e titolo, prefissi per la ricerca → a: = artista • t: = titolo • c: = creatore • e: = edizione • g: = genere • y: = anno (es. 1999 o 1980-1989) • l: = lingua • al: = album • fi: = nome file • fo: = nome cartella + 1-6: Premi il numero del tuo team per usare una canzone giullare casuale + Ordinamento: %s + Nessun Medley per questa canzone! Pausa Smetti di cantare Continua Salta questa canzone + Rinizia turno + Rinizia il gioco + Nessun\'altra canzone nella playlist! + Nessuna webcam disponibile! + Proporzioni: %a + Saltati %s secondi Punteggi Voto Punti @@ -182,8 +199,10 @@ Menu canzone Ordine canzone Schede + Riproduci automaticamente le anteprime delle canzoni Difficoltà gioco Modalità a tempo + Stile del punteggio più alto Opzioni registrazione Dispositivo Input @@ -223,7 +242,7 @@ Webcam Risoluzione-Webcam Sistemazione schermo - Premi CTR + ALT (+ SHIFT) + Freccia|"+\ per sistemare lo schermo + Premi CTR + ALT (+ SHIFT) + Freccia|+ per sistemare lo schermo CTR + ALT + 0 per ripristinare Sopra a sinistra Sopra a destra @@ -232,4 +251,19 @@ Volume Indirizzo server Il server non sta funzionando. Per favore controlla il file config.xml! + Siamo spiacenti + che Vocaluxe si è imbattuto in un errore e si è arrestato.\r\nPer aiutarci a risolvere il problema, vi preghiamo di inviarci un rapporto.\r\nModifica il seguente log prima di inviare per rimuovere le informazioni eventualmente sensibili. + che Vocaluxe si è imbattuto in un errore.\r\nPer aiutarci a risolvere il problema, vi preghiamo di inviarci un rapporto.\r\nModifica il seguente log prima di inviare per rimuovere le informazioni eventualmente sensibili. + Non caricare niente (puoi comunque copiare il messaggio di errore soprastante) + Carica e apri una segnalazione (visibile pubblicamente + richiede un account github) + Carica e ottieni un link per il tuo rapporto (visibile pubblicamente) + Invia + Caricamento + Esci + Continua + Il link al tuo rapporto: + Errore nel caricamento del registro + Ultimo errore + Non disponibile + Descrivi qui il tuo problema.\n\n### Passaggi per riprodurre \nDiteci come riprodurre questo problema.\n\n### Versione di Vocaluxe e file di registro\n{0}\n{1} diff --git a/Output/Languages/Dutch.xml b/Output/Languages/nl.xml similarity index 100% rename from Output/Languages/Dutch.xml rename to Output/Languages/nl.xml diff --git a/Output/Languages/Portuguese.xml b/Output/Languages/pt.xml similarity index 83% rename from Output/Languages/Portuguese.xml rename to Output/Languages/pt.xml index b4b22541..940595b2 100644 --- a/Output/Languages/Portuguese.xml +++ b/Output/Languages/pt.xml @@ -15,6 +15,7 @@ Músicas carregadas Rato Utilização da Memória + Modo de Jogo Normal Dueto Miscelânea @@ -31,6 +32,10 @@ Utilizador Normal Administrador Utilizador de Teclado + Origem da Música + Lista de Reprodução + Categoria + Todas as Músicas Software OpenGL Direct3D @@ -73,6 +78,8 @@ Total Normal Expandida + Mostrar Todas + Mostrar as Melhores Apenas musica e musica de fundo Não utilizar música própria Apenas música própria @@ -80,6 +87,10 @@ Todas Apenas nomes e avatares Nada + Preencher + Saltar + Deslizar + Aumentar Fundo Topo Topo e Fundo @@ -145,6 +156,10 @@ Terminar de cantar Continuar Saltar esta música + Recomeçar a Ronda + Recomeçar o Jogo + Sem mais Músicas na sua lista de reprodução! + Nenhuma câmara web disponível! Pontuações Classificação Pontos @@ -177,8 +192,10 @@ Menu das Músicas Ordenação das Musicas Separadores + Autoplay das Amostras de Músicas Dificildade do Jogo Modo Temporizado + Estilo da Melhor Pontuação Opções de Gravação Dispositivo Entrada @@ -197,6 +214,7 @@ Origem da Música de Fundo Prévisualizar Volume da Música Volume da Música no Jogo + Efeito Karaoke Opções do Tema Tema Skin @@ -226,4 +244,19 @@ Volume Endereço do Servidor Servidor não está em execução. Por favor verifique o config.xml! + Pedimos Desculpa + mas o Vocaluxe encontrou um erro e crashou.\r\nPara nos ajudares a resolver a questão envia-nos um relatório.\r\nSugerimos que edites o log seguinte antes de enviares para removeres alguma informação sigilosa. + que tenhas sofrido um problema.\r\nPara nos ajudares a resolver a questão envia-nos um relatório.\r\nSugerimos que edites o log seguinte antes de enviares para removeres alguma informação sigilosa. + Não fazer upload de nada (ainda podes copiar o código de erro que está por cima) + Fazer upload e abrir um problema (visível publicamente e requer uma conta github) + Fazer upload e obter um link para o teu relatório (visível publicamente) + Submeter + Uploading + Sair + Continuar + O Link para o teu relatório: + Erro a fazer upload do log. + Último erro + Indisponível + Descreve o teu problema aqui.\n\n### Passos para o reproduzir novamente \nDiz-nos como reproduzir este problema.\n\n### Versão do Vocaluxe e ficheiro Log\n{0}\n{1} diff --git a/Output/Languages/ru.xml b/Output/Languages/ru.xml new file mode 100644 index 00000000..9695f746 --- /dev/null +++ b/Output/Languages/ru.xml @@ -0,0 +1,269 @@ + + + Русский + Вокалюкс + и + Выход + Сохранить + Назад + Старт + Аудиопотоки + Видеопотоки + Текстуры + ToneAbs + Макс. громкость + Загруженные песни + Мышь + Память + Игровой режим + Нормальный + Дуэт + Попурри + Краткая версия + Вокальный Герой + Суперзвезда + Ведущий певец + Восходящая звезда + Многообещающий + Подражатель + Любитель + Нету слуха + Гость + Обычный пользователь + Администратор + Пользователь клавиатуры + Источник песни + Плейлист + Категория + Все песни + Программное обеспечение + OpenGL + Direct3D + Низший + Низкий + Средний + Высокий + Наивысший + Выкл. + Вкл. + Только FPS + Уровень 1 + Уровень 2 + Уровень 3 + Макс. + Список + Дрейдл + Плитки + Книга + По требованию + При запуске + Динамически + Нет + Случайно + Папка + Исполнитель + Исполнитель по букве + Название по букве + Версия + Жанр + Год + Десятилетие + Язык + Дата добавления + Лёгкая + Нормальная + Сложная + Текущее + Оставшееся + Общее + Обычное + Расширенное + Список всех + Список лучших + Собственная музыка и фоновая музыка + Без собственной музыки + Только собственная музыка + Только выбранная песня + Все + Только имена и аватары + Ничего + Заполнение + Прыжок + Слайд + Зум + Внизу + Сверху + Сверху и снизу + Динамический + Загрузка + Весь + песни + загружен + Общее Меню + Пение + Вечеринка + Опции + Профили + Профили не найдены! + Выбор режима Вечеринки + Режим Вечеринки + Описание + Автор + Версия + Не получилось загрузить этот режим вечеринки. + Нет настроенных микрофонов! + %d микрофон(ов) необходимо для этого режима вечеринки! + Целевая аудитория + Нет команд + Количество команд + Количество игроков + Выбор игроков + Игрок + 1 игрок + 2 игрока + 3 игрока + 4 игрока + 5 игроков + 6 игроков + Внимание: Не обнаружен микрофон игрока %v! + Внимание: Не обнаружены микрофоны игроков %v! + Внимание: Не обнаружен профиль игрока %v! + Внимание: Не обнаружены профили игроков %v! + Выбор песни + Петь + Добавить в плейлист + Закрыть + Выбрать случайную песню + Выбрать случяйную категорию + Петь все песни + Петь все видимые песни + Открыть плейлист + Выбрать + Спеть случайное попурри + Петь попурри + Новый плейлист + Опции пения + Поиск: + Нет языка + Нет Года + Нет Жанра + Нет Версии + Все песни + (%v песни) + (%v песня) + %a - %t + A-Z = Начать ввод • F3 = Поиск • CTRL+R = Случайный выбор • CTRL+S = Начать попурри • CTRL+# = Выбор сортировки песен • CTRL+T = Включить/Выключить просмотр категории • Space = Открыть параметры песни • ESC = Вернуться в главное меню + A-Z = Поиск исполнителя и названия, префиксы для поиска → a: = артист • t: = название • c: = автор • e: = версия • g: = жанр • y: = год (напр. 1999 или 1980-1989) • l: = язык • al: = альбом • fi: = имя файла • fo: = имя папки + 1-6 = Нажмите номер вашей команды, чтобы использовать случайную песню джокер + Сортировать: %s + Нет Попурри для этой песни! + Пауза + Остановить пение + Продолжить + Пропустить эту песню + Перезапустить раунд + Перезапустить игру + В плейлисте больше нет песен! + Веб-камера недоступна! + Соотношение сторон: %a + Пропущено %s секунд + Счёт + Рейтинг + Очки + Сложность + Общий счёт + Рекорд + Профили + Имя игрока + Сложность игры + Аватар + Роль + Активный + Новый + Удалить + Сделать снимок + Сохранить снимок + Удалить снимок + Веб-камера + Опции + Игра + Звук + Запись + Видео + Текст песни + Тема + Адрес сервера + Опции игры + Язык + Уровень отладки + Стиль меню песни + Сортировка песен + Вкладки + Автозапуск предпросмотра песен + Сложность игры + Режим таймера + Стиль Рекордов + Параметры Записи + Устройство + Ввод + Игрок 1 + Игрок 2 + Игрок 3 + Игрок 4 + Игрок 5 + Игрок 6 + Задержка микрофона + Внимание: один из игроков назначен на два микрофона. + Тест задержки + Настройки Звука + Фоновая музыка + Громкость фоновой музыки + Источник фоновой музыки + Предпрослушивание громкости музыки + Громкость игровой музыки + Эффект Караоке + Настройки темы + Тема + Скин + Тема обложки + Показать строки заметки + Показать тон-помощник + Режим временной шкалы + Угасание информации об игроке + Обложка-поведение при загрузке + Варианты песен + Стиль анимации + Позиция текста + Опции видео + Видео фоны + Предпросмотр видео + Видео во время пения + Отображение текущей фоновой музыки видео + Веб-камеры + Разрешение веб-камеры + Настроить экран + Нажмите CTRL + ALT (+ SHIFT) + Стрелки для настройки экрана + CTRL + ALT + 0 сброс + Сверху слева + Сверху справа + Внизу слева + Внизу справа + Громкость + Адрес сервера + Сервер не работает. Пожалуйста, проверьте config.xml! + Нам очень жаль + В Vocaluxe произошла ошибка и произошел сбой.\r\nЧтобы помочь нам решить проблему, отправьте нам отчет.\r\nИзмените следующий журнал перед отправкой, чтобы удалить потенциально конфиденциальную информацию. + что вы столкнулись с ошибкой.\r\nЧтобы помочь нам решить проблему, отправьте нам отчет..\r\nИзменить следующий журнал перед отправкой, чтобы удалить потенциально конфиденциальную информацию. + Не загружать ничего (вы можете скопировать сообщение об ошибке выше) + Загрузить и откройть проблему (общедоступно + требуется учетная запись github) + Загрузить и получить ссылку на свой отчет (общедоступная) + Отправить + Загрузка + Выход + Продолжить + Ссылка на ваш отчет: + Ошибка при загрузке журнала. + Последняя ошибка + Не доступно + Опишите свою проблему здесь.\n\n### шаги для воспроизведения\nРасскажите, как воспроизвести эту проблему.\n\n### версию Vocaluxe и лог файл\n{0}\n{1} + diff --git a/Output/Languages/Swedish.xml b/Output/Languages/sv.xml similarity index 81% rename from Output/Languages/Swedish.xml rename to Output/Languages/sv.xml index 81bfe9f9..746be5f5 100644 --- a/Output/Languages/Swedish.xml +++ b/Output/Languages/sv.xml @@ -15,6 +15,7 @@ Laddade låtar Mus Minnesanvändning + Spelläge Normal Duett Medley @@ -31,6 +32,10 @@ Normal användare Administratör Tangentbordsanvändare + Låtkälla + Spellista + Kategori + Alla låtar Mjukvara OpenGL Direct3D @@ -147,10 +152,21 @@ (%v låtar) (%v låt) %a - %t + A-Z = Hoppa till bokstaven • F3 = Sök • CTRL+R = Slumpa • CTRL+S = Starta medley • CTRL+# = Ändra sångsortering • CTRL+T = Aktivera/Inaktivera kategorivy • Mellanslag = Öppna sångalternativ • ESC = Tillbaka till huvudmenyn + A-Z = Sök artist och titel, prefix för sökningen → a: = artist • t: = titel • c: = skapare • e: = utgåva • g: = genre • y: = år (t ex. 1999 eller 1980-1989) • l: = språk • al: = album • fi: = filnamn • fo: = mappnamn + 1-6 = Tryck ditt lagnummer för att använda en slumpad sångjoker + Sortering: %s + Inget medley för denna sång! Paus Avsluta låt Fortsätt Hoppa över låt + Starta om runda + Starta om spel + Inga fler sånger i spellistan! + Ingen webkamera tillgänglig! + Bildformat: %a + Hoppade över %s sekunder Resultat Rankning Poäng @@ -183,7 +199,7 @@ Låtmeny Låtsortering Flikar - Förhandsvisa låtar automatiskt + Förhandsgranska låt automatiskt Spelets svårighetsgrad Timerläge Topplistsvy @@ -235,4 +251,19 @@ Volym Serveradress Servern körs inte. Var god kontrollera config.xml! + Vi ber om ursäkt + så Vocaluxe sätte på ett fel och har kraschat..\r\nFör att hjälpa oss att åtgärda problemet, ber vi er att skicka oss en rapport.\r\nÄndra följande logg innan du skickar in den och ta bort eventuellt känslig information. + att du har upplevt ett fel.\r\nFör att hjälp oss att åtgärda problemet, så ber vi er skicka in er rapport.\r\nÄndra loggen innan den skickar in för att ta bort eventuellt känslig information. + Ladda inte upp något. (du kan fortfarande kopiera felmeddelandet ovanför) + Ladda upp och felanmäla ett problem (Som kommer synas för alla och kräver ett github konto) + Ladda upp så får ni länk till er rapport (som kommer synas för alla) + Skicka in + Laddar upp + Lämna + Fortsätt + Länken till er rapport. + Problem uppstod när loggen skulle skickas. + Senaste fel + Inte tillgänglig + Beskriv ert problem här.\n\n### Steg att reproducera \ nBerätta för oss hur du reproducerat detta problem.\n\n### Vocaluxe-version och loggfil\n{0}\n{1} diff --git a/Output/Languages/Turkish.xml b/Output/Languages/tr.xml similarity index 100% rename from Output/Languages/Turkish.xml rename to Output/Languages/tr.xml diff --git a/Output/PartyModes/Challenge/Languages/Asturian.xml b/Output/PartyModes/Challenge/Languages/ast.xml similarity index 100% rename from Output/PartyModes/Challenge/Languages/Asturian.xml rename to Output/PartyModes/Challenge/Languages/ast.xml diff --git a/Output/PartyModes/Challenge/Languages/Czech.xml b/Output/PartyModes/Challenge/Languages/cs.xml similarity index 97% rename from Output/PartyModes/Challenge/Languages/Czech.xml rename to Output/PartyModes/Challenge/Languages/cs.xml index c0fce8eb..6fb11001 100644 --- a/Output/PartyModes/Challenge/Languages/Czech.xml +++ b/Output/PartyModes/Challenge/Languages/cs.xml @@ -11,6 +11,7 @@ Ano Ne Další kolo + Písně Soutěžní režim: Nastavení Počet hráčů Počet mikrofonů diff --git a/Output/PartyModes/Challenge/Languages/German.xml b/Output/PartyModes/Challenge/Languages/de.xml similarity index 100% rename from Output/PartyModes/Challenge/Languages/German.xml rename to Output/PartyModes/Challenge/Languages/de.xml diff --git a/Output/PartyModes/Challenge/Languages/English.xml b/Output/PartyModes/Challenge/Languages/en.xml similarity index 100% rename from Output/PartyModes/Challenge/Languages/English.xml rename to Output/PartyModes/Challenge/Languages/en.xml diff --git a/Output/PartyModes/Challenge/Languages/Spanish.xml b/Output/PartyModes/Challenge/Languages/es.xml similarity index 100% rename from Output/PartyModes/Challenge/Languages/Spanish.xml rename to Output/PartyModes/Challenge/Languages/es.xml diff --git a/Output/PartyModes/Challenge/Languages/French.xml b/Output/PartyModes/Challenge/Languages/fr.xml similarity index 100% rename from Output/PartyModes/Challenge/Languages/French.xml rename to Output/PartyModes/Challenge/Languages/fr.xml diff --git a/Output/PartyModes/Challenge/Languages/Hungarian.xml b/Output/PartyModes/Challenge/Languages/hu.xml similarity index 85% rename from Output/PartyModes/Challenge/Languages/Hungarian.xml rename to Output/PartyModes/Challenge/Languages/hu.xml index 30b313a2..fd86b1aa 100644 --- a/Output/PartyModes/Challenge/Languages/Hungarian.xml +++ b/Output/PartyModes/Challenge/Languages/hu.xml @@ -1,8 +1,8 @@ Magyar - Bajnokság Mód - Bajnokság Módban egymás ellen + Bajnokság + Bajnokság mód egymás ellen Azoknak akik szeretnék megmérettetni magukat egymás ellen Következő Vissza @@ -15,6 +15,8 @@ Játékosok Száma Mikrofonok Száma Körök Száma + Jokerek száma + Jokerek újratöltése minden körben Bajnokság Mód: Válassz Játékost Véletlenszerű választás Bajnokság Mód: Áttekintés diff --git a/Output/PartyModes/Challenge/Languages/Italian.xml b/Output/PartyModes/Challenge/Languages/it.xml similarity index 97% rename from Output/PartyModes/Challenge/Languages/Italian.xml rename to Output/PartyModes/Challenge/Languages/it.xml index 05b77510..cdcfd734 100644 --- a/Output/PartyModes/Challenge/Languages/Italian.xml +++ b/Output/PartyModes/Challenge/Languages/it.xml @@ -11,6 +11,7 @@ Si No Prossimo Turno + Canzoni Modalità Sfida: Configurazione Numero di giocatori Numero di microfoni diff --git a/Output/PartyModes/Challenge/Languages/Dutch.xml b/Output/PartyModes/Challenge/Languages/nl.xml similarity index 100% rename from Output/PartyModes/Challenge/Languages/Dutch.xml rename to Output/PartyModes/Challenge/Languages/nl.xml diff --git a/Output/PartyModes/Challenge/Languages/Portuguese.xml b/Output/PartyModes/Challenge/Languages/pt.xml similarity index 89% rename from Output/PartyModes/Challenge/Languages/Portuguese.xml rename to Output/PartyModes/Challenge/Languages/pt.xml index 0a25c2fc..5cab563b 100644 --- a/Output/PartyModes/Challenge/Languages/Portuguese.xml +++ b/Output/PartyModes/Challenge/Languages/pt.xml @@ -11,10 +11,13 @@ Sim Não Ronda Seguinte + Músicas Modo Desafio: Configuração Número de Jogadores Número de microfones Número de rondas + Número de "Jokers" + Recarregar os "Jokers" todas as rondas Modo Desafio: Escolher Jogador Escolha Aleatória Modo Desafio: Resumo diff --git a/Output/PartyModes/Challenge/Languages/ru.xml b/Output/PartyModes/Challenge/Languages/ru.xml new file mode 100644 index 00000000..00e55d30 --- /dev/null +++ b/Output/PartyModes/Challenge/Languages/ru.xml @@ -0,0 +1,33 @@ + + + Русский + Режим соревнования + Сыграть несколько раундов соревнований. + Для всех, кому интересны дуэльные бои. + Далее + Назад + Начать + Выход + Да + Нет + Следующий раунд + Песни + Режим испытания: Конфигурация + Количество игроков + Количество микрофонов + Количество раундов + Количество джокеров + Пополняйте джокеры каждый раунд + Режим соревнования: Выбор игрока + Случайный выбор + Режим соревнования: Обзор + Позиция + Имя + Раундов + Побед + Очки пения + Счёт + Вы действительно хотите выйти? + Игрок следующего раунда: + Спеты все раунды! И победителем становится... + diff --git a/Output/PartyModes/Challenge/Languages/Swedish.xml b/Output/PartyModes/Challenge/Languages/sv.xml similarity index 100% rename from Output/PartyModes/Challenge/Languages/Swedish.xml rename to Output/PartyModes/Challenge/Languages/sv.xml diff --git a/Output/PartyModes/Challenge/Languages/Turkish.xml b/Output/PartyModes/Challenge/Languages/tr.xml similarity index 100% rename from Output/PartyModes/Challenge/Languages/Turkish.xml rename to Output/PartyModes/Challenge/Languages/tr.xml diff --git a/Output/PartyModes/TicTacToe/Languages/Asturian.xml b/Output/PartyModes/TicTacToe/Languages/ast.xml similarity index 100% rename from Output/PartyModes/TicTacToe/Languages/Asturian.xml rename to Output/PartyModes/TicTacToe/Languages/ast.xml diff --git a/Output/PartyModes/TicTacToe/Languages/Czech.xml b/Output/PartyModes/TicTacToe/Languages/cs.xml similarity index 74% rename from Output/PartyModes/TicTacToe/Languages/Czech.xml rename to Output/PartyModes/TicTacToe/Languages/cs.xml index a328a32f..49e692fd 100644 --- a/Output/PartyModes/TicTacToe/Languages/Czech.xml +++ b/Output/PartyModes/TicTacToe/Languages/cs.xml @@ -13,19 +13,19 @@ Spustit Písně Tým - Seznam skladeb - Skupina - Všechny písně Tic-Tac-Toe: Nastavení Počet hráčů v týmu 1 Počet hráčů v týmu 2 Počet polí - Zdroj písně - Herní režim + Doplnit žolíky každé kolo + Počet žolíků + Přepnout hráče Tic-Tac-Toe: Výběr hráče + Vybraní hráči pro tento tým: Tým 1 Tým 2 Vybrat náhodně + Přidejte alespoň jednoho hráče do obou týmů! / Přetáhněte zástupné obrázky hráčů a přidejte je do seznamu vybraných hráčů! / Klepnutím pravým tlačítkem myši na jej zastupující obrázek vybraného hráče odeberete! Tic-Tac-Toe Vybrat pole. Další hráč diff --git a/Output/PartyModes/TicTacToe/Languages/German.xml b/Output/PartyModes/TicTacToe/Languages/de.xml similarity index 94% rename from Output/PartyModes/TicTacToe/Languages/German.xml rename to Output/PartyModes/TicTacToe/Languages/de.xml index 1413dac7..57c68b5f 100644 --- a/Output/PartyModes/TicTacToe/Languages/German.xml +++ b/Output/PartyModes/TicTacToe/Languages/de.xml @@ -18,6 +18,8 @@ Anzahl der Spieler in Team 2 Anzahl der Felder Joker nach jeder Runde auffüllen + Joker-Anzahl + Spieler wechseln Tic-Tac-Toe: Spielerwahl Ausgewählte Spieler für dieses Team: Team 1 diff --git a/Output/PartyModes/TicTacToe/Languages/English.xml b/Output/PartyModes/TicTacToe/Languages/en.xml similarity index 93% rename from Output/PartyModes/TicTacToe/Languages/English.xml rename to Output/PartyModes/TicTacToe/Languages/en.xml index 0066f864..49e44511 100644 --- a/Output/PartyModes/TicTacToe/Languages/English.xml +++ b/Output/PartyModes/TicTacToe/Languages/en.xml @@ -17,7 +17,9 @@ Number of players in team 1 Number of players in team 2 Number of fields - Refill jokers every round + Refill jokers every round + Number of jokers + Switch player Tic-Tac-Toe: Choose Player Selected players for this team: Team 1 diff --git a/Output/PartyModes/TicTacToe/Languages/Spanish.xml b/Output/PartyModes/TicTacToe/Languages/es.xml similarity index 85% rename from Output/PartyModes/TicTacToe/Languages/Spanish.xml rename to Output/PartyModes/TicTacToe/Languages/es.xml index 48133d84..1a08cbf8 100644 --- a/Output/PartyModes/TicTacToe/Languages/Spanish.xml +++ b/Output/PartyModes/TicTacToe/Languages/es.xml @@ -13,15 +13,10 @@ Iniciar Canciones Equipo - Lista de reproducción - Categoría - Todas las canciones Ta-Te-Ti: Configuración Nro. de cantantes equipo 1 Nro. de cantantes equipo 2 Nro. de campos - Origen de la canción - Modo de juego Ta-Te-Ti: Selección de cantante Equipo 1 Equiipo 2 diff --git a/Output/PartyModes/TicTacToe/Languages/French.xml b/Output/PartyModes/TicTacToe/Languages/fr.xml similarity index 71% rename from Output/PartyModes/TicTacToe/Languages/French.xml rename to Output/PartyModes/TicTacToe/Languages/fr.xml index 67f9cd54..b4c6f24d 100644 --- a/Output/PartyModes/TicTacToe/Languages/French.xml +++ b/Output/PartyModes/TicTacToe/Languages/fr.xml @@ -1,8 +1,8 @@ Français - Tic-Tac-Toe - Jouez au Tic-Tac-Toe d'une nouvelle façon + Morpion + Jouez au Morpion d\'une nouvelle façon Des matchs amusants alliant stratégie, gains et compétences Suivant Retour @@ -14,14 +14,18 @@ Chansons Equipe Tic-Tac-Toe: Configuration - Nombre de joueurs dans l'Equipe 1 - Nombre de joueurs dans l'Equipe 2 + Nombre de joueurs dans l\'Équipe 1 + Nombre de joueurs dans l\'Équipe 2 Nombre de champs Recharger les jokers a chaque tour + Nombre de jokers + Changer de joueur Tic-Tac-Toe: Choix des joueurs + Joueurs sélectionnés pour cette équipe : Equipe 1 Equipe 2 Sélectionner au hasard + Ajoutez au moins un joueur aux deux équipes ! / Tirez l'avatar d'un joueur vers la liste des joueurs sélectionnés ! / Faites un clic droit sur l'avatar d'un joueur pour le retirer ! Tic-Tac-Toe Choisissez une case. Joueur suivant diff --git a/Output/PartyModes/TicTacToe/Languages/Hungarian.xml b/Output/PartyModes/TicTacToe/Languages/hu.xml similarity index 86% rename from Output/PartyModes/TicTacToe/Languages/Hungarian.xml rename to Output/PartyModes/TicTacToe/Languages/hu.xml index 0f1a8dc8..7802ab6f 100644 --- a/Output/PartyModes/TicTacToe/Languages/Hungarian.xml +++ b/Output/PartyModes/TicTacToe/Languages/hu.xml @@ -13,18 +13,14 @@ Kezdés Dalok Csapat - Dal Lista - Kategória - Összes Dal Tic-Tac-Toe: Beállítások 1. Csapat játékosainak száma 2. Csapat játékosainak száma Mezők száma - Dal-forrás - Játék Mód Tic-Tac-Toe: Válassz Játékost 1. Csapat 2. Csapat + Véletlenszerű választás Tic-Tac-Toe Válassz egy mezőt. Következő Játékos diff --git a/Output/PartyModes/TicTacToe/Languages/Italian.xml b/Output/PartyModes/TicTacToe/Languages/it.xml similarity index 81% rename from Output/PartyModes/TicTacToe/Languages/Italian.xml rename to Output/PartyModes/TicTacToe/Languages/it.xml index f20d59dd..f63f982d 100644 --- a/Output/PartyModes/TicTacToe/Languages/Italian.xml +++ b/Output/PartyModes/TicTacToe/Languages/it.xml @@ -13,15 +13,11 @@ Inizia Canzoni Squadra - Playlist - Categoria - Tutte le canzoni Tris: Configurazione Numero di giocatori della squadra 1 Numero di giocatori della squadra 2 Numero di caselle - Sorgente della Canzone - Modalità di Gioco + Ricarica i giullari ad ogni turno Tris: Scegli il Giocatore Squadra 1 Squadra 2 @@ -31,5 +27,5 @@ Prossimo giocatore Vuoi veramente uscire dal Tris? E il vincitore è... - Non c'è nessun vincitore in questo turno... + Non c\'è nessun vincitore in questo turno... diff --git a/Output/PartyModes/TicTacToe/Languages/Dutch.xml b/Output/PartyModes/TicTacToe/Languages/nl.xml similarity index 86% rename from Output/PartyModes/TicTacToe/Languages/Dutch.xml rename to Output/PartyModes/TicTacToe/Languages/nl.xml index cdac1e9a..1d3f7182 100644 --- a/Output/PartyModes/TicTacToe/Languages/Dutch.xml +++ b/Output/PartyModes/TicTacToe/Languages/nl.xml @@ -13,15 +13,10 @@ Start Liedjes Team - Afspeellijst - Categorie - Alle liedjes Drie-op-een-rij: configuratie Aantal spelers in team 1 Aantal spelers in team 2 Aantal vakjes - Liedjesbron - Spelmodus Drie-op-een-rij: Kies speler Team 1 Team 2 diff --git a/Output/PartyModes/TicTacToe/Languages/Portuguese.xml b/Output/PartyModes/TicTacToe/Languages/pt.xml similarity index 85% rename from Output/PartyModes/TicTacToe/Languages/Portuguese.xml rename to Output/PartyModes/TicTacToe/Languages/pt.xml index 42da10a3..c796c00f 100644 --- a/Output/PartyModes/TicTacToe/Languages/Portuguese.xml +++ b/Output/PartyModes/TicTacToe/Languages/pt.xml @@ -13,15 +13,11 @@ Iniciar Músicas Equipa - Lista de Reprodução - Categoria - Todas as Músicas Jogo do Galo: Configuração Número de Jogadores na Equipa 1 Número de Jogadores na Equipa 2 Número de Campos - Origem da Música - Modo do Jogo + Recarregar os \"Jokers\" todas as rondas Jogo do Galo: Esolher Jogador Equipa 1 Equipa 2 diff --git a/Output/PartyModes/TicTacToe/Languages/ru.xml b/Output/PartyModes/TicTacToe/Languages/ru.xml new file mode 100644 index 00000000..5879a215 --- /dev/null +++ b/Output/PartyModes/TicTacToe/Languages/ru.xml @@ -0,0 +1,34 @@ + + + Русский + Крестики-нолики + Играйте в Крестики-нолики особым образом + Веселые раунды со стратегией, удачей и навыками + Далее + Назад + Начать + Выход + Да + Нет + Старт + Песни + Команда + Крестики-нолики: Конфигурация + Номер игрока из команды 1 + Номер игрока из команды 2 + Количество полей + Пополняйте джокеры каждый раунд + Количество джокеров + Сменить игрока + Крестики-нолики: Выберите игрока + Выбранные игроки для этой команды: + Команда 1 + Команда 2 + Случайный выбор + Крестики-нолики + Выберите поле. + Следующий игрок + Действительно выйти из Крестики-нолики? + И победителем становится... + В этом раунде нет победителя... + diff --git a/Output/PartyModes/TicTacToe/Languages/Swedish.xml b/Output/PartyModes/TicTacToe/Languages/sv.xml similarity index 100% rename from Output/PartyModes/TicTacToe/Languages/Swedish.xml rename to Output/PartyModes/TicTacToe/Languages/sv.xml diff --git a/Output/PartyModes/TicTacToe/Languages/Turkish.xml b/Output/PartyModes/TicTacToe/Languages/tr.xml similarity index 85% rename from Output/PartyModes/TicTacToe/Languages/Turkish.xml rename to Output/PartyModes/TicTacToe/Languages/tr.xml index 9af5e420..eb5e284d 100644 --- a/Output/PartyModes/TicTacToe/Languages/Turkish.xml +++ b/Output/PartyModes/TicTacToe/Languages/tr.xml @@ -13,15 +13,10 @@ Başla Şarkılar Takım - Çalma Listesi - Kategori - Tüm Şarkılar XOX: Yapılandırma 1. takımdaki oyuncu sayısı 2. takımdaki oyuncu sayısı Bölge sayısı - Şarkı Kaynağı - Oyun Modu XOX: Oyuncu Seç 1. Takım 2. Takım diff --git a/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeConfig.xml b/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeConfig.xml index a5ad9fa9..c879b56a 100644 --- a/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeConfig.xml +++ b/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeConfig.xml @@ -2,7 +2,7 @@ PartyScreenTicTacToeConfig - 2 + 3 @@ -55,7 +55,7 @@ Outline TR_SCREENCONFIG_NUMFIELDS - + 75 165 0 @@ -67,8 +67,36 @@ Center Outline + TR_SCREENCONFIG_NUMJOKERS + + + 75 + 225 + 0 + 27 + 0 + + + Left + Center + + Outline TR_SCREENCONFIG_REFILLJOKERS + + 75 + 285 + 0 + 27 + 0 + + + Left + Center + + Outline + TR_SCREENCONFIG_SWITCH_PLAYER + + + diff --git a/Output/Readme.txt b/Output/Readme.txt index c0d408a1..d6840537 100644 --- a/Output/Readme.txt +++ b/Output/Readme.txt @@ -1,4 +1,4 @@ -Vocaluxe 0.4 README +Vocaluxe 0.4.1 README ---------------------------- ================================= diff --git a/Output/Themes/Genius/01_Standard.xml b/Output/Themes/Genius/01_Standard.xml index f3174336..5b0d368f 100644 --- a/Output/Themes/Genius/01_Standard.xml +++ b/Output/Themes/Genius/01_Standard.xml @@ -328,6 +328,15 @@ NotesBGLeft.png NotesBGMid.png NotesBGRight.png + RapNotesLeft.png + RapNotesMid.png + RapNotesRight.png + RapNotesFillLeft.png + RapNotesFillMid.png + RapNotesFillRight.png + RapNotesBGLeft.png + RapNotesBGMid.png + RapNotesBGRight.png PointsBar.png PointsBarBG.png LyricHelper.png @@ -340,6 +349,7 @@ SearchBar.png PlaylistBG.png DuetIcon.png + RapIcon.png VideoIcon.png MedleyCalcIcon.png MedleyTagIcon.png diff --git a/Output/Themes/Genius/02_Ice_Blue.xml b/Output/Themes/Genius/02_Ice_Blue.xml index 9d27bd3b..636e1a7a 100644 --- a/Output/Themes/Genius/02_Ice_Blue.xml +++ b/Output/Themes/Genius/02_Ice_Blue.xml @@ -328,6 +328,15 @@ NotesBGLeft.png NotesBGMid.png NotesBGRight.png + RapNotesLeft.png + RapNotesMid.png + RapNotesRight.png + RapNotesFillLeft.png + RapNotesFillMid.png + RapNotesFillRight.png + RapNotesBGLeft.png + RapNotesBGMid.png + RapNotesBGRight.png PointsBar.png PointsBarBG.png LyricHelper.png @@ -340,6 +349,7 @@ SearchBar.png PlaylistBG.png DuetIcon.png + RapIcon.png VideoIcon.png MedleyCalcIcon.png MedleyTagIcon.png diff --git a/Output/Themes/Genius/03_Crimson_Red.xml b/Output/Themes/Genius/03_Crimson_Red.xml index c29f5e8e..3e8d405a 100644 --- a/Output/Themes/Genius/03_Crimson_Red.xml +++ b/Output/Themes/Genius/03_Crimson_Red.xml @@ -328,6 +328,15 @@ NotesBGLeft.png NotesBGMid.png NotesBGRight.png + RapNotesLeft.png + RapNotesMid.png + RapNotesRight.png + RapNotesFillLeft.png + RapNotesFillMid.png + RapNotesFillRight.png + RapNotesBGLeft.png + RapNotesBGMid.png + RapNotesBGRight.png PointsBar.png PointsBarBG.png LyricHelper.png @@ -340,6 +349,7 @@ SearchBar.png PlaylistBG.png DuetIcon.png + RapIcon.png VideoIcon.png MedleyCalcIcon.png MedleyTagIcon.png diff --git a/Output/Themes/Genius/RapIcon.png b/Output/Themes/Genius/RapIcon.png new file mode 100644 index 00000000..097fa55e Binary files /dev/null and b/Output/Themes/Genius/RapIcon.png differ diff --git a/Output/Themes/Genius/RapNotesBGLeft.png b/Output/Themes/Genius/RapNotesBGLeft.png new file mode 100644 index 00000000..0c321303 Binary files /dev/null and b/Output/Themes/Genius/RapNotesBGLeft.png differ diff --git a/Output/Themes/Genius/RapNotesBGMid.png b/Output/Themes/Genius/RapNotesBGMid.png new file mode 100644 index 00000000..989fa118 Binary files /dev/null and b/Output/Themes/Genius/RapNotesBGMid.png differ diff --git a/Output/Themes/Genius/RapNotesBGRight.png b/Output/Themes/Genius/RapNotesBGRight.png new file mode 100644 index 00000000..4d3b8238 Binary files /dev/null and b/Output/Themes/Genius/RapNotesBGRight.png differ diff --git a/Output/Themes/Genius/RapNotesFillLeft.png b/Output/Themes/Genius/RapNotesFillLeft.png new file mode 100644 index 00000000..732b0313 Binary files /dev/null and b/Output/Themes/Genius/RapNotesFillLeft.png differ diff --git a/Output/Themes/Genius/RapNotesFillMid.png b/Output/Themes/Genius/RapNotesFillMid.png new file mode 100644 index 00000000..172b394a Binary files /dev/null and b/Output/Themes/Genius/RapNotesFillMid.png differ diff --git a/Output/Themes/Genius/RapNotesFillRight.png b/Output/Themes/Genius/RapNotesFillRight.png new file mode 100644 index 00000000..2a0c56b4 Binary files /dev/null and b/Output/Themes/Genius/RapNotesFillRight.png differ diff --git a/Output/Themes/Genius/RapNotesLeft.png b/Output/Themes/Genius/RapNotesLeft.png new file mode 100644 index 00000000..ee6365d9 Binary files /dev/null and b/Output/Themes/Genius/RapNotesLeft.png differ diff --git a/Output/Themes/Genius/RapNotesMid.png b/Output/Themes/Genius/RapNotesMid.png new file mode 100644 index 00000000..42146d41 Binary files /dev/null and b/Output/Themes/Genius/RapNotesMid.png differ diff --git a/Output/Themes/Genius/RapNotesRight.png b/Output/Themes/Genius/RapNotesRight.png new file mode 100644 index 00000000..0de874d0 Binary files /dev/null and b/Output/Themes/Genius/RapNotesRight.png differ diff --git a/Output/Themes/Genius/Screens/ScreenSing.xml b/Output/Themes/Genius/Screens/ScreenSing.xml index 44badc9c..a3e0b439 100644 --- a/Output/Themes/Genius/Screens/ScreenSing.xml +++ b/Output/Themes/Genius/Screens/ScreenSing.xml @@ -2,7 +2,7 @@ ScreenSing - 10 + 11 @@ -694,6 +694,20 @@ Outline TR_SCREENSING_PAUSE + + 640 + 10 + -2.11 + 40 + 0 + + + Center + Center + + Normal + + 10 55 @@ -1580,6 +1594,15 @@ NoteBackgroundLeft NoteBackgroundMiddle NoteBackgroundRight + RapNoteLeft + RapNoteMiddle + RapNoteRight + RapNoteFillLeft + RapNoteFillMiddle + RapNoteFillRight + RapNoteBackgroundLeft + RapNoteBackgroundMiddle + RapNoteBackgroundRight Star ToneHelper Star diff --git a/Output/Themes/Genius/Screens/ScreenSong.xml b/Output/Themes/Genius/Screens/ScreenSong.xml index 61852554..b80cc556 100644 --- a/Output/Themes/Genius/Screens/ScreenSong.xml +++ b/Output/Themes/Genius/Screens/ScreenSong.xml @@ -846,6 +846,7 @@ CoverTile DuetIcon + RapIcon VideoIcon MedleyCalcIcon MedleyTagIcon @@ -958,18 +959,29 @@ DuetIcon - 200 + 160 530 40 40 -1 + + RapIcon + + + 240 + 530 + 40 + 40 + -1 + + VideoIcon - 120 + 80 530 40 40 @@ -980,7 +992,7 @@ MedleyCalcIcon - 280 + 320 530 40 40 @@ -991,7 +1003,7 @@ MedleyTagIcon - 280 + 320 530 40 40 @@ -1099,18 +1111,29 @@ DuetIcon - 200 + 160 530 40 40 -1 + + RapIcon + + + 240 + 530 + 40 + 40 + -1 + + VideoIcon - 120 + 80 530 40 40 @@ -1121,7 +1144,7 @@ MedleyCalcIcon - 280 + 320 530 40 40 @@ -1132,7 +1155,7 @@ MedleyTagIcon - 280 + 320 530 40 40 diff --git a/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs b/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs index 321586c9..6a911fcd 100644 --- a/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs +++ b/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs @@ -104,11 +104,10 @@ namespace VocaluxeLib.PartyModes.TicTacToe public int NumPlayerTeam1; public int NumPlayerTeam2; public int NumFields; + public int NumJockers; public int Team; public List ProfileIDsTeam1; public List ProfileIDsTeam2; - public List PlayerTeam1; - public List PlayerTeam2; public ESongSource SongSource; public ESongSorting Sorting; @@ -127,6 +126,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe public int[] NumJokerRandom; public int[] NumJokerRetry; public EOffOn RefillJokers; + public EOffOn SwitchPlayer; } public SData GameData; @@ -149,10 +149,9 @@ namespace VocaluxeLib.PartyModes.TicTacToe NumPlayerTeam1 = 2, NumPlayerTeam2 = 2, NumFields = 9, + NumJockers = 1, ProfileIDsTeam1 = new List(), ProfileIDsTeam2 = new List(), - PlayerTeam1 = new List(), - PlayerTeam2 = new List(), CurrentRoundNr = 0, FieldNr = 0, Sorting = CBase.Config.GetSongSorting(), @@ -183,8 +182,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe GameData.Songs.Clear(); GameData.Rounds.Clear(); - GameData.PlayerTeam1.Clear(); - GameData.PlayerTeam2.Clear(); } public override bool Init() @@ -247,7 +244,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe GameData.CurrentRoundNr = 1; _CreateRounds(); _SetNumJokers(); - _PreparePlayerList(0); break; case EStage.Main: _Stage = EStage.Singing; @@ -256,7 +252,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe case EStage.Singing: _Stage = EStage.Main; GameData.Team = GameData.Team == 1 ? 0 : 1; - _UpdatePlayerList(); if (GameData.RefillJokers == EOffOn.TR_CONFIG_ON) _SetNumJokers(); break; @@ -337,101 +332,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe } } - private void _PreparePlayerList(int team) - { - switch (team) - { - case 0: - { - GameData.PlayerTeam1 = new List(); - GameData.PlayerTeam2 = new List(); - - //Prepare Player-IDs - var ids1 = new List(); - var ids2 = new List(); - //Add IDs to team-list - while (GameData.PlayerTeam1.Count < GameData.NumFields + GameData.NumJokerRetry[0] && - GameData.PlayerTeam2.Count < GameData.NumFields + GameData.NumJokerRetry[1]) - { - if (ids1.Count == 0) - { - for (int i = 0; i < GameData.NumPlayerTeam1; i++) - ids1.Add(i); - } - if (ids2.Count == 0) - { - for (int i = 0; i < GameData.NumPlayerTeam2; i++) - ids2.Add(i); - } - int num; - if (GameData.PlayerTeam1.Count < GameData.NumFields + GameData.NumJokerRetry[0]) - { - num = CBase.Game.GetRandom(ids1.Count); - if (num >= ids1.Count) - num = ids1.Count - 1; - GameData.PlayerTeam1.Add(ids1[num]); - ids1.RemoveAt(num); - } - if (GameData.PlayerTeam2.Count < GameData.NumFields + GameData.NumJokerRetry[1]) - { - num = CBase.Game.GetRandom(ids2.Count); - if (num >= ids2.Count) - num = ids2.Count - 1; - GameData.PlayerTeam2.Add(ids2[num]); - ids2.RemoveAt(num); - } - } - } - break; - case 1: - { - //Prepare Player-IDs - var ids = new List(); - //Add IDs to team-list - while (GameData.PlayerTeam1.Count < GameData.NumFields + GameData.NumJokerRetry[0] && ids.Count == 0) - { - if (ids.Count == 0) - { - for (int i = 0; i < GameData.NumPlayerTeam1; i++) - ids.Add(i); - } - if (GameData.PlayerTeam1.Count < GameData.NumFields + GameData.NumJokerRetry[0]) - { - int num = CBase.Game.GetRandom(ids.Count); - if (num >= ids.Count) - num = ids.Count - 1; - GameData.PlayerTeam1.Add(ids[num]); - ids.RemoveAt(num); - } - } - } - break; - case 2: - { - //Prepare Player-IDs - var ids = new List(); - //Add IDs to team-list - while (GameData.PlayerTeam2.Count < GameData.NumFields + GameData.NumJokerRetry[1] && ids.Count == 0) - { - if (ids.Count == 0) - { - for (int i = 0; i < GameData.NumPlayerTeam2; i++) - ids.Add(i); - } - if (GameData.PlayerTeam2.Count < GameData.NumFields + GameData.NumJokerRetry[1]) - { - int num = CBase.Game.GetRandom(ids.Count); - if (num >= ids.Count) - num = ids.Count - 1; - GameData.PlayerTeam2.Add(ids[num]); - ids.RemoveAt(num); - } - } - } - break; - } - } - public void UpdateSongList() { if (GameData.Songs.Count > 0) @@ -465,14 +365,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe GameData.Songs.Shuffle(); } - private void _UpdatePlayerList() - { - if (GameData.PlayerTeam1.Count == 0) - _PreparePlayerList(1); - if (GameData.PlayerTeam2.Count == 0) - _PreparePlayerList(2); - } - private void _StartRound(int roundNr) { CBase.Game.Reset(); @@ -505,25 +397,23 @@ namespace VocaluxeLib.PartyModes.TicTacToe private void _SetNumJokers() { + + GameData.NumJokerRandom[0] = GameData.NumJockers; + GameData.NumJokerRandom[1] = GameData.NumJockers; + switch (GameData.NumFields) { case 9: - GameData.NumJokerRandom[0] = 1; - GameData.NumJokerRandom[1] = 1; GameData.NumJokerRetry[0] = 0; GameData.NumJokerRetry[1] = 0; break; case 16: - GameData.NumJokerRandom[0] = 2; - GameData.NumJokerRandom[1] = 2; GameData.NumJokerRetry[0] = 1; GameData.NumJokerRetry[1] = 1; break; case 25: - GameData.NumJokerRandom[0] = 3; - GameData.NumJokerRandom[1] = 3; GameData.NumJokerRetry[0] = 2; GameData.NumJokerRetry[1] = 2; break; diff --git a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs index 640fffbf..0d68bb52 100644 --- a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs +++ b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs @@ -26,16 +26,19 @@ namespace VocaluxeLib.PartyModes.TicTacToe { // ReSharper disable UnusedMember.Global public class CPartyScreenTicTacToeConfig : CPartyScreenTicTacToe - // ReSharper restore UnusedMember.Global + // ReSharper restore UnusedMember.Global { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion { - get { return 2; } + get { return 3; } } private const string _SelectSlideNumFields = "SelectSlideNumFields"; + private const string _SelectSlideNumJockers = "SelectSlideNumJockers"; private const string _SelectSlideRefillJokers = "SelectSlideRefillJokers"; + private const string _SelectSlideNumJokers = "SelectSlideNumJokers"; + private const string _SelectSlideSwitchPlayer = "SelectSlideSwitchPlayer"; private const string _ButtonNext = "ButtonNext"; private const string _ButtonBack = "ButtonBack"; @@ -46,15 +49,15 @@ namespace VocaluxeLib.PartyModes.TicTacToe { base.Init(); - _ThemeSelectSlides = new string[] { _SelectSlideNumFields }; - _ThemeButtons = new string[] {_ButtonNext, _ButtonBack}; + _ThemeSelectSlides = new string[] { _SelectSlideNumFields, _SelectSlideNumJokers, _SelectSlideRefillJokers, _SelectSlideSwitchPlayer }; + _ThemeButtons = new string[] { _ButtonNext, _ButtonBack }; } public override bool HandleInput(SKeyEvent keyEvent) { base.HandleInput(keyEvent); - if (keyEvent.KeyPressed) {} + if (keyEvent.KeyPressed) { } else { switch (keyEvent.Key) @@ -131,14 +134,25 @@ namespace VocaluxeLib.PartyModes.TicTacToe _SelectSlides[_SelectSlideNumFields].SelectedTag = _PartyMode.GameData.NumFields; + _SelectSlides[_SelectSlideNumJockers].Clear(); + for (int i = 0; i <= 3; i++) + _SelectSlides[_SelectSlideNumJockers].AddValue(i); + + _SelectSlides[_SelectSlideNumJockers].SelectedTag = _PartyMode.GameData.NumJockers; + _SelectSlides[_SelectSlideRefillJokers].AddValues(Enum.GetNames(typeof(EOffOn))); _SelectSlides[_SelectSlideRefillJokers].Selection = (int)_PartyMode.GameData.RefillJokers; + + _SelectSlides[_SelectSlideSwitchPlayer].AddValues(Enum.GetNames(typeof(EOffOn))); + _SelectSlides[_SelectSlideSwitchPlayer].Selection = (int)_PartyMode.GameData.SwitchPlayer; } private void _UpdateSlides() { _PartyMode.GameData.NumFields = _SelectSlides[_SelectSlideNumFields].SelectedTag; + _PartyMode.GameData.NumJockers = _SelectSlides[_SelectSlideNumJockers].Selection; _PartyMode.GameData.RefillJokers = (EOffOn)_SelectSlides[_SelectSlideRefillJokers].Selection; + _PartyMode.GameData.SwitchPlayer = (EOffOn)_SelectSlides[_SelectSlideSwitchPlayer].Selection; } } } \ No newline at end of file diff --git a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs index a2722ed4..9f04452d 100644 --- a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs +++ b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs @@ -17,6 +17,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Windows.Forms; using VocaluxeLib.Menu; using VocaluxeLib.Songs; @@ -33,7 +34,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe // ReSharper disable UnusedMember.Global public class CPartyScreenTicTacToeMain : CPartyScreenTicTacToe - // ReSharper restore UnusedMember.Global + // ReSharper restore UnusedMember.Global { // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion @@ -60,6 +61,8 @@ namespace VocaluxeLib.PartyModes.TicTacToe private const string _ButtonJokerRandomT2 = "ButtonJokerRandomT2"; private const string _ButtonJokerRetryT1 = "ButtonJokerRetryT1"; private const string _ButtonJokerRetryT2 = "ButtonJokerRetryT2"; + private const string _ButtonSwitchPlayerT1 = "ButtonSwitchPlayerT1"; + private const string _ButtonSwitchPlayerT2 = "ButtonSwitchPlayerT2"; private const string _StaticPopupBG = "StaticPopupBG"; private const string _StaticAvatarT1 = "StaticAvatarT1"; @@ -78,6 +81,12 @@ namespace VocaluxeLib.PartyModes.TicTacToe private const int _FieldSpace = 10; private float _FieldSize = 100; + private int idPlayer1 = 0; + private int idPlayer2 = 0; + + private static readonly Random random = new Random(); + private static readonly object syncLock = new object(); + private int _OldSelectedField = -1; private int[,] _Possibilities; @@ -92,9 +101,9 @@ namespace VocaluxeLib.PartyModes.TicTacToe _ThemeButtons = new string[] { _ButtonNextRound, _ButtonBack, _ButtonExit, _ButtonPopupYes, _ButtonPopupNo, _ButtonField, _ButtonJokerRandomT1, _ButtonJokerRandomT2, _ButtonJokerRetryT1, - _ButtonJokerRetryT2 + _ButtonJokerRetryT2, _ButtonSwitchPlayerT1, _ButtonSwitchPlayerT2 }; - _ThemeStatics = new string[] {_StaticPopupBG, _StaticAvatarT1, _StaticAvatarT2, _StaticTeam1, _StaticTeam2}; + _ThemeStatics = new string[] { _StaticPopupBG, _StaticAvatarT1, _StaticAvatarT2, _StaticTeam1, _StaticTeam2 }; var texts = new List(); texts.AddRange(_EqualizerTeam); @@ -116,7 +125,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe { base.HandleInput(keyEvent); - if (keyEvent.KeyPressed) {} + if (keyEvent.KeyPressed) { } else { switch (keyEvent.Key) @@ -178,6 +187,10 @@ namespace VocaluxeLib.PartyModes.TicTacToe _UseJoker(0, 1); if (_Buttons[_ButtonJokerRetryT2].Selected) _UseJoker(1, 1); + if (_Buttons[_ButtonSwitchPlayerT1].Selected) + _ChangePlayer(0, true); + if (_Buttons[_ButtonSwitchPlayerT2].Selected) + _ChangePlayer(1, true); } } else @@ -243,6 +256,10 @@ namespace VocaluxeLib.PartyModes.TicTacToe _UseJoker(0, 1); if (_Buttons[_ButtonJokerRetryT2].Selected) _UseJoker(1, 1); + if (_Buttons[_ButtonSwitchPlayerT1].Selected) + _ChangePlayer(0, true); + if (_Buttons[_ButtonSwitchPlayerT2].Selected) + _ChangePlayer(1, true); } } else @@ -269,7 +286,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe _ShowPopup(false); } - if (mouseEvent.Wheel != 0) {} + if (mouseEvent.Wheel != 0) { } return true; } @@ -323,6 +340,8 @@ namespace VocaluxeLib.PartyModes.TicTacToe _Buttons[_ButtonJokerRandomT2].Visible = false; _Buttons[_ButtonJokerRetryT1].Visible = false; _Buttons[_ButtonJokerRetryT2].Visible = false; + _Buttons[_ButtonSwitchPlayerT1].Visible = false; + _Buttons[_ButtonSwitchPlayerT2].Visible = false; _Buttons[_ButtonNextRound].Visible = false; _Texts[_TextFinishMessage].Visible = false; } @@ -357,9 +376,9 @@ namespace VocaluxeLib.PartyModes.TicTacToe for (int i = 0; i < 2; i++) { CBase.Record.AnalyzeBuffer(i); - _Equalizers["EqualizerTeam" + (i+1)].Update(CBase.Record.ToneWeigth(i), CBase.Record.GetMaxVolume(i)); + _Equalizers["EqualizerTeam" + (i + 1)].Update(CBase.Record.ToneWeigth(i), CBase.Record.GetMaxVolume(i)); } - + return true; } @@ -453,38 +472,22 @@ namespace VocaluxeLib.PartyModes.TicTacToe { if (!jokerUsed) { - int singerTeam1 = 0; - int singerTeam2 = 0; - - if (_PartyMode.GameData.PlayerTeam1.Count > 0) - { - singerTeam1 = _PartyMode.GameData.PlayerTeam1[0]; - _PartyMode.GameData.PlayerTeam1.RemoveAt(0); - } - - if (_PartyMode.GameData.PlayerTeam2.Count > 0) - { - singerTeam2 = _PartyMode.GameData.PlayerTeam2[0]; - _PartyMode.GameData.PlayerTeam2.RemoveAt(0); - } - _PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SingerTeam1 = singerTeam1; - _PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SingerTeam2 = singerTeam2; - - _UpdatePlayerInformation(); + _ChangePlayer(); } _PartyMode.UpdateSongList(); int[] songIDs = new int[_PartyMode.GameData.GameMode == EGameMode.TR_GAMEMODE_MEDLEY ? _PartyMode.GameData.NumMedleySongs : 1]; - for(int i = 0; i < songIDs.Length; i++) + for (int i = 0; i < songIDs.Length; i++) { songIDs[i] = _PartyMode.GameData.Songs[0]; _PartyMode.GameData.Songs.RemoveAt(0); - } + } _StartPreview(songIDs[0]); _Status = EStatus.FieldSelected; _PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SongIDs = songIDs; _UpdateFieldContents(); _UpdateJokerButtons(); + _UpdateSwitchPlayerButtons(); _Buttons[_ButtonNextRound].Visible = true; _Buttons[_ButtonExit].Visible = true; @@ -519,6 +522,49 @@ namespace VocaluxeLib.PartyModes.TicTacToe CBase.BackgroundMusic.LoadPreview(song); } + private int _GetRamdom(int max) + { + lock (syncLock) + { + return random.Next(max+1); + } + } + + private void _ChangePlayer(int teamNr = -1, bool next = false) + { + + if (_PartyMode.GameData.ProfileIDsTeam1.Count > 0 && (teamNr == 0 || teamNr == -1)) + { + idPlayer1 = _GetTeamPlayer(idPlayer1, _PartyMode.GameData.ProfileIDsTeam1.Count, next); + _PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SingerTeam1 = idPlayer1; + } + + if (_PartyMode.GameData.ProfileIDsTeam2.Count > 0 && (teamNr == 1 || teamNr == -1)) + { + idPlayer2 = _GetTeamPlayer(idPlayer2, _PartyMode.GameData.ProfileIDsTeam2.Count, next); + _PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SingerTeam2 = idPlayer2; + } + + _UpdatePlayerInformation(); + } + + private int _GetTeamPlayer(int idPlayer, int teamCount, bool next) + { + if (next) + { + idPlayer++; + if (idPlayer >= _PartyMode.GameData.ProfileIDsTeam1.Count) + { + idPlayer = 0; + } + } + else + { + idPlayer = _GetRamdom(_PartyMode.GameData.ProfileIDsTeam1.Count - 1); + } + return idPlayer; + } + private void _UpdatePlayerInformation() { _Texts[_TextNextPlayerT1].Visible = true; @@ -543,7 +589,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe { switch (jokerNum) { - //Random-Joker + //Random-Joker case 0: if (_PartyMode.GameData.NumJokerRandom[teamNr] > 0) { @@ -552,7 +598,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe } break; - //Retry-Joker + //Retry-Joker case 1: if (_PartyMode.GameData.NumJokerRetry[teamNr] > 0 && _PartyMode.GameData.CurrentRoundNr > 1) { @@ -596,6 +642,16 @@ namespace VocaluxeLib.PartyModes.TicTacToe _Buttons[_ButtonJokerRetryT2].Selectable = _PartyMode.GameData.NumJokerRetry[1] > 0 && _PartyMode.GameData.CurrentRoundNr > 1; } + private void _UpdateSwitchPlayerButtons() + { + if (_PartyMode.GameData.SwitchPlayer == EOffOn.TR_CONFIG_ON) + { + _Buttons[_ButtonSwitchPlayerT1].Visible = true; + _Buttons[_ButtonSwitchPlayerT2].Visible = true; + } + + } + private void _NextRound() { _PartyMode.Next(); @@ -627,7 +683,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe private void _BuildWinnerPossibilities() { var numOneRow = (int)Math.Sqrt(_PartyMode.GameData.NumFields); - _Possibilities = new int[(numOneRow * 2) + 2,numOneRow]; + _Possibilities = new int[(numOneRow * 2) + 2, numOneRow]; for (int i = 0; i < _Possibilities.GetLength(0); i++) { if (i < numOneRow) diff --git a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeNames.cs b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeNames.cs index 49241507..875000e7 100644 --- a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeNames.cs +++ b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeNames.cs @@ -17,6 +17,7 @@ using System; using System.Collections.Generic; +using System.Linq; using VocaluxeLib.Menu; namespace VocaluxeLib.PartyModes.TicTacToe @@ -76,11 +77,9 @@ namespace VocaluxeLib.PartyModes.TicTacToe _PartyMode.GameData.ProfileIDsTeam1 = _TeamList[0]; _PartyMode.GameData.ProfileIDsTeam2 = _TeamList[1]; } - if (_NumPlayerTeams.Length == 2) - { - _PartyMode.GameData.NumPlayerTeam1 = _NumPlayerTeams[0]; - _PartyMode.GameData.NumPlayerTeam2 = _NumPlayerTeams[1]; - } + _PartyMode.GameData.NumPlayerTeam1 = _PartyMode.GameData.ProfileIDsTeam1.Count; + _PartyMode.GameData.NumPlayerTeam2 = _PartyMode.GameData.ProfileIDsTeam2.Count; + _PartyMode.Next(); } } diff --git a/Tests/VocaluxeLib/XML/CXmlSerializerTest.cs b/Tests/VocaluxeLib/XML/CXmlSerializerTest.cs index 8c027489..ca381abc 100644 --- a/Tests/VocaluxeLib/XML/CXmlSerializerTest.cs +++ b/Tests/VocaluxeLib/XML/CXmlSerializerTest.cs @@ -371,6 +371,38 @@ namespace Tests.VocaluxeLib.XML ", newXml); } + [Test] + public void TestEscapedValues() + { + const string s = _Head + @" + Foo\'Bar + + Foo\'Bar + +"; + _AssertSerDeserMatch(s); + var xml = new CXmlDeserializer(new CXmlErrorHandler(exception => { })); + SUnescaping foo = xml.DeserializeString(@""); + Assert.AreEqual(foo.S, "Foo\'Bar"); + Assert.AreEqual(foo.Sub.S, "Foo\'Bar"); + } + + [Test] + public void TestUnescapedValues() + { + const string s = _Head + @" + Foo\'Bar + + Foo\'Bar + +"; + _AssertSerDeserMatch(s); + var xml = new CXmlDeserializer(new CXmlErrorHandler(exception => { }), true); + SUnescaping foo = xml.DeserializeString(@""); + Assert.AreEqual(foo.S, "Foo'Bar"); + Assert.AreEqual(foo.Sub.S, "Foo'Bar"); + } + [Test] public void TestRealFiles([Values(typeof(SThemeCover), typeof(CConfig.SConfig), /*typeof(SThemeScreen),*/ typeof(SDefaultFonts), typeof(SSkin), typeof(STheme), typeof(Dictionary))] Type type) { @@ -491,6 +523,20 @@ namespace Tests.VocaluxeLib.XML public SDefaultSub Sub; } + private struct SUnescaping + { + [DefaultValue("Foo\'Bar")] + public string S; + public SUnescapingSub Sub; + } + + private struct SUnescapingSub + { + [DefaultValue("Foo\'Bar")] + public string S; + } + + #pragma warning restore 169 #pragma warning restore 649 diff --git a/Vocaluxe/Base/CGame.cs b/Vocaluxe/Base/CGame.cs index a90b062a..444d5208 100644 --- a/Vocaluxe/Base/CGame.cs +++ b/Vocaluxe/Base/CGame.cs @@ -302,6 +302,9 @@ namespace Vocaluxe.Base if(p == 0) tonePlayer = tone; #endif + if (notes[note].Type == ENoteType.Rap || notes[note].Type == ENoteType.RapGolden) + tonePlayer = tone; + Players[p].NoteDiff = Math.Abs(tone - tonePlayer); bool hit = Players[p].NoteDiff <= (2 - (int)CProfiles.GetDifficulty(Players[p].ProfileID)); @@ -311,7 +314,7 @@ namespace Vocaluxe.Base //CRecord.RecordSetTone(p, Tone); double points = (CSettings.MaxScore - CSettings.LinebonusScore) * (double)notes[note].PointsForBeat / song.Notes.GetVoice(Players[p].VoiceNr).Points; - if (notes[note].Type == ENoteType.Golden) + if (notes[note].Type == ENoteType.Golden || notes[note].Type == ENoteType.RapGolden) Players[p].PointsGoldenNotes += points; Players[p].Points += points; @@ -411,7 +414,7 @@ namespace Vocaluxe.Base { if (note.StartBeat < nextStart) { - if (note.Hit && note.HitNote.Type == ENoteType.Golden) + if (note.Hit && (note.HitNote.Type == ENoteType.Golden || note.HitNote.Type == ENoteType.RapGolden)) Players[p].PointsGoldenNotes += note.Points; Players[p].Points += note.Points; } @@ -421,7 +424,7 @@ namespace Vocaluxe.Base } while (line.NoteCount > n && n >= 0) { - if (line.Notes[n].Hit && line.Notes[n].HitNote.Type == ENoteType.Golden) + if (line.Notes[n].Hit && (line.Notes[n].HitNote.Type == ENoteType.Golden || line.Notes[n].HitNote.Type == ENoteType.RapGolden)) Players[p].PointsGoldenNotes -= line.Notes[n].Points; Players[p].Points -= line.Notes[n].Points; line.DeleteNote(n); diff --git a/Vocaluxe/Base/CLanguage.cs b/Vocaluxe/Base/CLanguage.cs index a7f6f1ec..e1a30c41 100644 --- a/Vocaluxe/Base/CLanguage.cs +++ b/Vocaluxe/Base/CLanguage.cs @@ -161,7 +161,7 @@ namespace Vocaluxe.Base private static bool _LoadLanguageEntries(string filePath, out Dictionary texts) { - var deser = new CXmlDeserializer(); + var deser = new CXmlDeserializer(true); try { texts = deser.Deserialize>(filePath); diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index 1f29a202..b7cb3b65 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -41,7 +41,7 @@ namespace Vocaluxe.Screens // Version number for theme files. Increment it, if you've changed something on the theme files! protected override int _ScreenVersion { - get { return 10; } + get { return 11; } } private struct STimeRect @@ -57,6 +57,7 @@ namespace Vocaluxe.Screens private const string _TextDuetName1 = "TextDuetName1"; private const string _TextDuetName2 = "TextDuetName2"; private const string _TextMedleyCountdown = "TextMedleyCountdown"; + private const string _TextPauseSongName = "TextPauseSongName"; private string[,,] _TextScores; private string[,,] _TextNames; private List _TextsPause; @@ -1114,6 +1115,13 @@ namespace Vocaluxe.Screens _Buttons[_ButtonRestartGame].Visible = _Pause; _Buttons[_ButtonRestartRound].Visible = _Pause && CGame.NumRounds > 1; + if (_Pause && _TimerSongText.IsRunning) + _TimerSongText.Stop(); + else + _TimerSongText.Start(); + + _Texts[_TextSongName].Visible = !_Pause; + if (_Pause) CSound.Pause(_CurrentStream); else @@ -1149,6 +1157,7 @@ namespace Vocaluxe.Screens if (rounds > 1) songname += " (" + CGame.RoundNr + "/" + rounds + ")"; _Texts[_TextSongName].Text = songname; + _Texts[_TextPauseSongName].Text = songname; _CurrentStream = CSound.Load(song.GetMP3(), false, true, CConfig.Config.Sound.KaraokeEffect == EOffOn.TR_CONFIG_ON ? EAudioEffect.Karaoke : EAudioEffect.None); CSound.SetStreamVolume(_CurrentStream, 100); diff --git a/Vocaluxe/Website/locales/cs.json b/Vocaluxe/Website/locales/cs.json index 3cc5e9c2..e300efc1 100644 --- a/Vocaluxe/Website/locales/cs.json +++ b/Vocaluxe/Website/locales/cs.json @@ -77,10 +77,10 @@ "discoverConnectButton": "Připojit se", "Checking...": "Ověřuje se...", "timeout": "Překročení časového omezení", - "keyboardButtonShift": "Shift", - "keyboardButtonAlt": "Alt", + "keyboardButtonShift": "Shift", + "keyboardButtonAlt": "Alt", "keyboardButtonCtrl": "Ctrl", "keyboardButtonBackspace": "Backspace", "keyboardAutoSend": "Poslat klávesy automaticky", - "keyboardButtonSend": "Poslat" + "keyboardButtonSend": "Poslat" } \ No newline at end of file diff --git a/Vocaluxe/Website/locales/de.json b/Vocaluxe/Website/locales/de.json index 1464ca30..89b2f705 100644 --- a/Vocaluxe/Website/locales/de.json +++ b/Vocaluxe/Website/locales/de.json @@ -15,7 +15,7 @@ "mainPageSelectProfile": "Profile", "mainPageSelectProfileDesc": "Listet alle Profile auf", "mainPageTakePhotoLink": "Nehme Foto auf", - "mainPageTakePhotoLinkDesc": "Nimmt ein Foto auf und zeige es am Ende der Runde an", + "mainPageTakePhotoLinkDesc": "Nimmt ein Foto auf und zeigt es am ende der Runde an", "mainPageKeyboard": "Tastatur", "mainPageKeyboardDesc": "Sende Tastatureingaben", "mainPageSelectUserAdmin": "Administration", @@ -77,10 +77,10 @@ "discoverConnectButton": "Verbinden", "Checking...": "Prüfen...", "timeout": "Zeitüberschreitung", - "keyboardButtonShift": "Shift", - "keyboardButtonAlt": "Alt", + "keyboardButtonShift": "Shift", + "keyboardButtonAlt": "Alt", "keyboardButtonCtrl": "Steuerung", "keyboardButtonBackspace": "Backspace", "keyboardAutoSend": "Automatisch Tasten senden", - "keyboardButtonSend": "Senden" + "keyboardButtonSend": "Senden" } \ No newline at end of file diff --git a/Vocaluxe/Website/locales/es.json b/Vocaluxe/Website/locales/es.json index ff33aef1..5c3f4113 100644 --- a/Vocaluxe/Website/locales/es.json +++ b/Vocaluxe/Website/locales/es.json @@ -77,10 +77,10 @@ "discoverConnectButton": "Conectar", "Checking...": "Comprobando...", "timeout": "Tiempo de espera", - "keyboardButtonShift": "Shift", - "keyboardButtonAlt": "Alt", + "keyboardButtonShift": "Shift", + "keyboardButtonAlt": "Alt", "keyboardButtonCtrl": "Control", "keyboardButtonBackspace": "Retroceso", "keyboardAutoSend": "Auto-enviar teclas.", - "keyboardButtonSend": "Mandar" + "keyboardButtonSend": "Mandar" } \ No newline at end of file diff --git a/Vocaluxe/Website/locales/fr.json b/Vocaluxe/Website/locales/fr.json index 4ab27121..44a3241d 100644 --- a/Vocaluxe/Website/locales/fr.json +++ b/Vocaluxe/Website/locales/fr.json @@ -77,10 +77,10 @@ "discoverConnectButton": "Connecter", "Checking...": "Vérification", "timeout": "Temps dépassé", - "keyboardButtonShift": "Maj.", - "keyboardButtonAlt": "Alt", + "keyboardButtonShift": "Maj.", + "keyboardButtonAlt": "Alt", "keyboardButtonCtrl": "Controle", "keyboardButtonBackspace": "Retour", "keyboardAutoSend": "Envoyer la saisie automatiquement", - "keyboardButtonSend": "Envoyer" + "keyboardButtonSend": "Envoyer" } \ No newline at end of file diff --git a/Vocaluxe/Website/locales/Hungarian.json b/Vocaluxe/Website/locales/hu.json similarity index 97% rename from Vocaluxe/Website/locales/Hungarian.json rename to Vocaluxe/Website/locales/hu.json index a817b65a..a4d4af4a 100644 --- a/Vocaluxe/Website/locales/Hungarian.json +++ b/Vocaluxe/Website/locales/hu.json @@ -77,10 +77,10 @@ "discoverConnectButton": "Kapcsolódás", "Checking...": "Ellenőrzés...", "timeout": "Időtúllépés", - "keyboardButtonShift": "Shift", - "keyboardButtonAlt": "Alt", + "keyboardButtonShift": "Shift", + "keyboardButtonAlt": "Alt", "keyboardButtonCtrl": "Ctrl", "keyboardButtonBackspace": "Backspace", "keyboardAutoSend": "Billentyűleütések automatikus küldése", - "keyboardButtonSend": "Küldés" + "keyboardButtonSend": "Küldés" } \ No newline at end of file diff --git a/Vocaluxe/Website/locales/it.json b/Vocaluxe/Website/locales/it.json index c055b460..906aafea 100644 --- a/Vocaluxe/Website/locales/it.json +++ b/Vocaluxe/Website/locales/it.json @@ -77,10 +77,10 @@ "discoverConnectButton": "Connetti", "Checking...": "Controllo...", "timeout": "Timeout", - "keyboardButtonShift": "Shift", - "keyboardButtonAlt": "Alt", + "keyboardButtonShift": "Shift", + "keyboardButtonAlt": "Alt", "keyboardButtonCtrl": "Control", "keyboardButtonBackspace": "Backspace", - "keyboardAutoSend": "Auto send keys", - "keyboardButtonSend": "Send" + "keyboardAutoSend": "Tasti auto invio", + "keyboardButtonSend": "Invia" } \ No newline at end of file diff --git a/Vocaluxe/Website/locales/nl.json b/Vocaluxe/Website/locales/nl.json index aeee54ba..5642fbca 100644 --- a/Vocaluxe/Website/locales/nl.json +++ b/Vocaluxe/Website/locales/nl.json @@ -77,10 +77,10 @@ "discoverConnectButton": "Verbinden", "Checking...": "Controleren...", "timeout": "Timeout", - "keyboardButtonShift": "Shift", - "keyboardButtonAlt": "Alt", + "keyboardButtonShift": "Shift", + "keyboardButtonAlt": "Alt", "keyboardButtonCtrl": "Control", "keyboardButtonBackspace": "Backspace", "keyboardAutoSend": "Stuur toetsen automatisch", - "keyboardButtonSend": "Verzenden" + "keyboardButtonSend": "Verzenden" } \ No newline at end of file diff --git a/Vocaluxe/Website/locales/Polish.json b/Vocaluxe/Website/locales/pl.json similarity index 100% rename from Vocaluxe/Website/locales/Polish.json rename to Vocaluxe/Website/locales/pl.json diff --git a/Vocaluxe/Website/locales/pt.json b/Vocaluxe/Website/locales/pt.json index cfdff899..fc024f99 100644 --- a/Vocaluxe/Website/locales/pt.json +++ b/Vocaluxe/Website/locales/pt.json @@ -77,10 +77,10 @@ "discoverConnectButton": "Ligar", "Checking...": "A verificar...", "timeout": "Tempo de espera excedido", - "keyboardButtonShift": "Shift", - "keyboardButtonAlt": "Alt", + "keyboardButtonShift": "Shift", + "keyboardButtonAlt": "Alt", "keyboardButtonCtrl": "Control", "keyboardButtonBackspace": "Backspace", "keyboardAutoSend": "Enviar teclas automáticamente", - "keyboardButtonSend": "Enviar" + "keyboardButtonSend": "Enviar" } \ No newline at end of file diff --git a/Vocaluxe/Website/locales/ru.json b/Vocaluxe/Website/locales/ru.json new file mode 100644 index 00000000..38f163ae --- /dev/null +++ b/Vocaluxe/Website/locales/ru.json @@ -0,0 +1,86 @@ +{ + "loginName": "Пользователь:", + "loginPassword": "Пароль:", + "loginButton": "Логин", + "registerButton": "Создать профиль", + "discoverReadQrButton": "Сканировать QR-код", + "mainPageYourProfileLink": "Ваш профиль", + "mainPageYourProfileLinkDesc": "Редактировать ваш профиль", + "mainPageCurrentSongLink": "Текущая песня", + "mainPageCurrentSongLinkDesc": "Отображение информации о текущей песне", + "mainPageSelectSong": "Все песни", + "mainPageSelectSongDesc": "Список всех доступных песен", + "mainPageSelectPlaylist": "Все плейлисты", + "mainPageSelectPlaylistDesc": "Список всех плейлистов", + "mainPageSelectProfile": "Профили", + "mainPageSelectProfileDesc": "Показать все профили", + "mainPageTakePhotoLink": "Выбрать Фото", + "mainPageTakePhotoLinkDesc": "Выбрать фотографию и отображать ее в конце текущего раунда", + "mainPageKeyboard": "Клавиатура", + "mainPageKeyboardDesc": "Отправить ключи", + "mainPageSelectUserAdmin": "Администрирование", + "mainPageSelectUserAdminDesc": "Настроить права пользователя", + "mainPageLogoutLink": "Выход из системы", + "mainPageLogoutLinkDesc": "Закрыть сессию", + "selectProfileHeader": "Все профили", + "displayProfileHeader": "Профиль", + "displayProfileName": "Имя:", + "displayProfilePlayerType": "Тип Игрока:", + "displayProfilePlayerTypeNormal": "Обычный", + "displayProfilePlayerTypeGuest": "Гость", + "displayProfilePlayerDifficulty": "Сложность:", + "displayProfilePlayerDifficultyEasy": "Легко", + "displayProfilePlayerDifficultyNormal": "Нормально", + "displayProfilePlayerDifficultyHard": "Сложно", + "displayProfilePlayerPassword": "Новый Пароль:", + "displayProfilePlayerSaveButton": "Сохранить и загрузить", + "displaySongHeader": "Нет текущей песни", + "displaySongArtist": "Артист:", + "displaySongGenre": "Жанр:", + "displaySongYear": "Год:", + "displaySongLanguage": "Язык:", + "displaySongIsDuet": "Дуэт:", + "popupVideoClose": "Закрыть", + "selectSongHeader": "Все песни", + "keyboardHeader": "Клавиатура", + "keyboardButtonUp": "вверх", + "keyboardButtonLeft": "влево", + "keyboardButtonRight": "вправо", + "keyboardButtonDown": "вниз", + "keyboardButtonEscape": "escape", + "keyboardButtonTab": "tab", + "keyboardButtonReturn": "return", + "keyboardButtonKeys": "Чтобы отправить другие ключи введите здесь:", + "selectUserAdminHeader": "Все профили", + "displayUserAdminHeader": "Профиль", + "displayUserAdminContentSaveButton": "Сохранить", + "selectPlaylistHeader": "Выборать из плейлиста", + "displayPlaylistHeader": "Плейлист", + "displayPlaylistSaveButton": "Сохранить", + "selectPlaylistAddPlaylistButton": "Добавить", + "Loading (external)...": "Загрузка (внешняя)...", + "Loading...": "Загрузка...", + "Creating...": "Создание...", + "Error...": "Ошибка...", + "No connection": "Нет соединения", + "No session": "Нет сеанса", + "Uploading photo...": "Загрузка фото..", + "Getting current song...": "Получение текущей песни...", + "Login...": "Логин...", + "Creating profile...": "Создание профиля...", + "This is not a valid name.": "Это неверное имя.", + "Uploading profile...": "Загрузка профиля...", + "songs": "песни", + "YourName": "Ваше имя", + "discoverConnectHeader": "Подключиться к серверу", + "discoverConnectServerAddress": "Адрес сервера:", + "discoverConnectButton": "Соединение", + "Checking...": "Проверка...", + "timeout": "Время ожидания", + "keyboardButtonShift": "Shift", + "keyboardButtonAlt": "Alt", + "keyboardButtonCtrl": "Control", + "keyboardButtonBackspace": "Backspace", + "keyboardAutoSend": "Автоматическая отправка ключей", + "keyboardButtonSend": "Отправить" +} \ No newline at end of file diff --git a/Vocaluxe/Website/locales/sv.json b/Vocaluxe/Website/locales/sv.json index 53203293..98427174 100644 --- a/Vocaluxe/Website/locales/sv.json +++ b/Vocaluxe/Website/locales/sv.json @@ -77,10 +77,10 @@ "discoverConnectButton": "Anslut", "Checking...": "Kontrollerar...", "timeout": "Timeout", - "keyboardButtonShift": "Skift", - "keyboardButtonAlt": "Alt", + "keyboardButtonShift": "Skift", + "keyboardButtonAlt": "Alt", "keyboardButtonCtrl": "Ctrl", "keyboardButtonBackspace": "Backsteg", "keyboardAutoSend": "Autoskicka knappar", - "keyboardButtonSend": "Skicka" + "keyboardButtonSend": "Skicka" } \ No newline at end of file diff --git a/Vocaluxe/Website/locales/tr.json b/Vocaluxe/Website/locales/tr.json index 527a3b48..189d53ac 100644 --- a/Vocaluxe/Website/locales/tr.json +++ b/Vocaluxe/Website/locales/tr.json @@ -77,10 +77,10 @@ "discoverConnectButton": "Bağlan", "Checking...": "Kontrol ediliyor...", "timeout": "Zaman aşımı", - "keyboardButtonShift": "Shift", - "keyboardButtonAlt": "Alt", + "keyboardButtonShift": "Shift", + "keyboardButtonAlt": "Alt", "keyboardButtonCtrl": "Control", "keyboardButtonBackspace": "Backspace", "keyboardAutoSend": "Auto send keys", - "keyboardButtonSend": "Send" + "keyboardButtonSend": "Send" } \ No newline at end of file diff --git a/VocaluxeLib/Enums.cs b/VocaluxeLib/Enums.cs index 02cb86a7..d73741e2 100644 --- a/VocaluxeLib/Enums.cs +++ b/VocaluxeLib/Enums.cs @@ -366,7 +366,9 @@ namespace VocaluxeLib { Normal, Golden, - Freestyle + Freestyle, + Rap, + RapGolden } public enum EMusicType diff --git a/VocaluxeLib/Menu/SingNotes/CNoteBars.cs b/VocaluxeLib/Menu/SingNotes/CNoteBars.cs index 5e6c50ee..585fb62f 100644 --- a/VocaluxeLib/Menu/SingNotes/CNoteBars.cs +++ b/VocaluxeLib/Menu/SingNotes/CNoteBars.cs @@ -84,7 +84,7 @@ namespace VocaluxeLib.Menu.SingNotes _Flares.Clear(); _PerfectNoteEffect.Clear(); - foreach (CSongNote note in _Lines[_CurrentLine].Notes.Where(note => note.Type == ENoteType.Golden)) + foreach (CSongNote note in _Lines[_CurrentLine].Notes.Where(note => (note.IsGoldenNote))) _AddGoldenNote(_GetNoteRect(note)); } @@ -109,8 +109,8 @@ namespace VocaluxeLib.Menu.SingNotes { SRectF rect = _GetNoteRect(note); - _DrawNoteBG(rect, color); - _DrawNoteBase(rect, new SColorF(_NoteBaseColor, _NoteBaseColor.A * Alpha), 1f); + _DrawNoteBG(rect, color, note.IsRapNote); + _DrawNoteBase(rect, new SColorF(_NoteBaseColor, _NoteBaseColor.A * Alpha), 1f, note.IsRapNote); } } @@ -128,9 +128,9 @@ namespace VocaluxeLib.Menu.SingNotes float factor = (note.Hit) ? 1f : 0.6f; - _DrawNoteFill(rect, color, factor); + _DrawNoteFill(rect, color, factor, note.IsRapNote); - if (note.EndBeat >= CBase.Game.GetRecordedBeat() && note.Hit && note.HitNote.Type == ENoteType.Golden) + if (note.EndBeat >= CBase.Game.GetRecordedBeat() && note.Hit && note.IsGoldenNote) { SRectF re = rect; re.W = (CBase.Game.GetMidRecordedBeat() - note.StartBeat) / beats * Rect.W; @@ -175,14 +175,22 @@ namespace VocaluxeLib.Menu.SingNotes { CSongLine line = _Lines[_CurrentLine]; float beats = line.LastNoteBeat - line.FirstNoteBeat + 1; + bool isRapNote = note.IsRapNote; float width = note.Duration * Rect.W / beats; + float y = Rect.Y + (CBase.Settings.GetNumNoteLines() - 1 - (note.Tone - line.BaseLine) / 2f) * _NoteLineHeight - _AddNoteHeight / 2; + float height = _NoteLineHeight + _AddNoteHeight; + + if (isRapNote) { + y = Rect.Y; + height = Rect.H; + } var noteRect = new SRectF( Rect.X + (note.StartBeat - line.FirstNoteBeat) * Rect.W / beats, - Rect.Y + (CBase.Settings.GetNumNoteLines() - 1 - (note.Tone - line.BaseLine) / 2f) * _NoteLineHeight - _AddNoteHeight / 2, + y, width, - _NoteLineHeight + _AddNoteHeight, + height, Rect.Z ); return noteRect; @@ -267,26 +275,26 @@ namespace VocaluxeLib.Menu.SingNotes CBase.Drawing.DrawTexture(noteEnd, new SRectF(noteRect.X + noteRect.W - endsW, noteRect.Y, endsW, noteRect.H, noteRect.Z), color, false); } - private void _DrawNoteBase(SRectF rect, SColorF color, float factor) + private void _DrawNoteBase(SRectF rect, SColorF color, float factor, bool isRapNote = false) { - CTextureRef noteBegin = CBase.Themes.GetSkinTexture(_Theme.SkinLeft, _PartyModeID); - CTextureRef noteMiddle = CBase.Themes.GetSkinTexture(_Theme.SkinMiddle, _PartyModeID); - CTextureRef noteEnd = CBase.Themes.GetSkinTexture(_Theme.SkinRight, _PartyModeID); + CTextureRef noteBegin = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapLeft : _Theme.SkinLeft, _PartyModeID); + CTextureRef noteMiddle = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapMiddle : _Theme.SkinMiddle, _PartyModeID); + CTextureRef noteEnd = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapRight : _Theme.SkinRight, _PartyModeID); _DrawNote(rect, color, noteBegin, noteMiddle, noteEnd, factor); } - private void _DrawNoteFill(SRectF rect, SColorF color, float factor) + private void _DrawNoteFill(SRectF rect, SColorF color, float factor, bool isRapNote = false) { - CTextureRef noteBegin = CBase.Themes.GetSkinTexture(_Theme.SkinFillLeft, _PartyModeID); - CTextureRef noteMiddle = CBase.Themes.GetSkinTexture(_Theme.SkinFillMiddle, _PartyModeID); - CTextureRef noteEnd = CBase.Themes.GetSkinTexture(_Theme.SkinFillRight, _PartyModeID); + CTextureRef noteBegin = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapFillLeft : _Theme.SkinFillLeft, _PartyModeID); + CTextureRef noteMiddle = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapFillMiddle : _Theme.SkinFillMiddle, _PartyModeID); + CTextureRef noteEnd = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapFillRight : _Theme.SkinFillRight, _PartyModeID); _DrawNote(rect, color, noteBegin, noteMiddle, noteEnd, factor); } - private void _DrawNoteBG(SRectF rect, SColorF color) + private void _DrawNoteBG(SRectF rect, SColorF color, bool isRapNote = false) { const float period = 1500; //[ms] @@ -300,9 +308,9 @@ namespace VocaluxeLib.Menu.SingNotes var col = new SColorF(color, color.A * alpha); - CTextureRef noteBegin = CBase.Themes.GetSkinTexture(_Theme.SkinBackgroundLeft, _PartyModeID); - CTextureRef noteMiddle = CBase.Themes.GetSkinTexture(_Theme.SkinBackgroundMiddle, _PartyModeID); - CTextureRef noteEnd = CBase.Themes.GetSkinTexture(_Theme.SkinBackgroundRight, _PartyModeID); + CTextureRef noteBegin = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapBackgroundLeft : _Theme.SkinBackgroundLeft, _PartyModeID); + CTextureRef noteMiddle = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapBackgroundMiddle : _Theme.SkinBackgroundMiddle, _PartyModeID); + CTextureRef noteEnd = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapBackgroundRight : _Theme.SkinBackgroundRight, _PartyModeID); _DrawNote(rect, col, noteBegin, noteMiddle, noteEnd, 1f); } diff --git a/VocaluxeLib/Menu/SingNotes/CSingNotes.cs b/VocaluxeLib/Menu/SingNotes/CSingNotes.cs index bedfb95c..4d49befc 100644 --- a/VocaluxeLib/Menu/SingNotes/CSingNotes.cs +++ b/VocaluxeLib/Menu/SingNotes/CSingNotes.cs @@ -49,6 +49,18 @@ namespace VocaluxeLib.Menu.SingNotes public string SkinBackgroundMiddle; public string SkinBackgroundRight; + public string SkinRapLeft; + public string SkinRapMiddle; + public string SkinRapRight; + + public string SkinRapFillLeft; + public string SkinRapFillMiddle; + public string SkinRapFillRight; + + public string SkinRapBackgroundLeft; + public string SkinRapBackgroundMiddle; + public string SkinRapBackgroundRight; + public string SkinGoldenStar; public string SkinToneHelper; public string SkinPerfectNoteStart; diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs index e644159c..0068545c 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs @@ -30,6 +30,7 @@ namespace VocaluxeLib.Menu.SongMenu public string CoverBackground; public string CoverBigBackground; public string DuetIcon; + public string RapIcon; public string VideoIcon; public string MedleyCalcIcon; public string MedleyTagIcon; @@ -68,6 +69,7 @@ namespace VocaluxeLib.Menu.SongMenu public SThemeStatic StaticCoverBig; public SThemeStatic StaticTextBG; public SThemeStatic StaticDuetIcon; + public SThemeStatic StaticRapIcon; public SThemeStatic StaticVideoIcon; public SThemeStatic StaticMedleyCalcIcon; public SThemeStatic StaticMedleyTagIcon; @@ -117,6 +119,7 @@ namespace VocaluxeLib.Menu.SongMenu public SThemeStatic StaticCoverBig; public SThemeStatic StaticTextBG; public SThemeStatic StaticDuetIcon; + public SThemeStatic StaticRapIcon; public SThemeStatic StaticVideoIcon; public SThemeStatic StaticMedleyCalcIcon; public SThemeStatic StaticMedleyTagIcon; diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs index 6c9c0640..e2003a06 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs @@ -33,6 +33,7 @@ namespace VocaluxeLib.Menu.SongMenu private readonly CStatic _CoverBig; private readonly CStatic _TextBG; private readonly CStatic _DuetIcon; + private readonly CStatic _RapIcon; private readonly CStatic _VideoIcon; private readonly CStatic _MedleyCalcIcon; private readonly CStatic _MedleyTagIcon; @@ -123,10 +124,11 @@ namespace VocaluxeLib.Menu.SongMenu _CoverBig = new CStatic(_Theme.SongMenuList.StaticCoverBig, _PartyModeID); _TextBG = new CStatic(_Theme.SongMenuList.StaticTextBG, _PartyModeID); _DuetIcon = new CStatic(_Theme.SongMenuList.StaticDuetIcon, _PartyModeID); + _RapIcon = new CStatic(_Theme.SongMenuList.StaticRapIcon, _PartyModeID); _VideoIcon = new CStatic(_Theme.SongMenuList.StaticVideoIcon, _PartyModeID); _MedleyCalcIcon = new CStatic(_Theme.SongMenuList.StaticMedleyCalcIcon, _PartyModeID); _MedleyTagIcon = new CStatic(_Theme.SongMenuList.StaticMedleyTagIcon, _PartyModeID); - _SubElements.AddRange(new IMenuElement[] {_Artist, _Title, _SongLength, _SongYear, _DuetIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon}); + _SubElements.AddRange(new IMenuElement[] {_Artist, _Title, _SongLength, _SongYear, _DuetIcon, _RapIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon}); } private void _ReadSubTheme() @@ -137,6 +139,7 @@ namespace VocaluxeLib.Menu.SongMenu _Theme.SongMenuList.TextTitle = (SThemeText)_Title.GetTheme(); _Theme.SongMenuList.StaticCoverBig = (SThemeStatic)_CoverBig.GetTheme(); _Theme.SongMenuList.StaticDuetIcon = (SThemeStatic)_DuetIcon.GetTheme(); + _Theme.SongMenuList.StaticRapIcon = (SThemeStatic)_RapIcon.GetTheme(); _Theme.SongMenuList.StaticMedleyCalcIcon = (SThemeStatic)_MedleyCalcIcon.GetTheme(); _Theme.SongMenuList.StaticMedleyTagIcon = (SThemeStatic)_MedleyTagIcon.GetTheme(); _Theme.SongMenuList.StaticTextBG = (SThemeStatic)_TextBG.GetTheme(); @@ -222,6 +225,7 @@ namespace VocaluxeLib.Menu.SongMenu _SongLength.Text = String.Empty; _SongYear.Text = String.Empty; _DuetIcon.Visible = false; + _RapIcon.Visible = false; _VideoIcon.Visible = false; _MedleyCalcIcon.Visible = false; _MedleyTagIcon.Visible = false; @@ -251,6 +255,7 @@ namespace VocaluxeLib.Menu.SongMenu _Title.Text = song.Title; _SongYear.Text = song.Year; _DuetIcon.Visible = song.IsDuet; + _RapIcon.Visible = song.IsRap; _VideoIcon.Visible = song.VideoFileName != ""; _MedleyCalcIcon.Visible = song.Medley.Source == EDataSource.Calculated; _MedleyTagIcon.Visible = song.Medley.Source == EDataSource.Tag; diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs index a5000bdf..621066e2 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs @@ -32,6 +32,7 @@ namespace VocaluxeLib.Menu.SongMenu private CStatic _CoverBig; private CStatic _TextBG; private CStatic _DuetIcon; + private CStatic _RapIcon; private CStatic _VideoIcon; private CStatic _MedleyCalcIcon; private CStatic _MedleyTagIcon; @@ -118,10 +119,11 @@ namespace VocaluxeLib.Menu.SongMenu _CoverBig = new CStatic(_Theme.SongMenuTileBoard.StaticCoverBig, _PartyModeID); _TextBG = new CStatic(_Theme.SongMenuTileBoard.StaticTextBG, _PartyModeID); _DuetIcon = new CStatic(_Theme.SongMenuTileBoard.StaticDuetIcon, _PartyModeID); + _RapIcon = new CStatic(_Theme.SongMenuTileBoard.StaticRapIcon, _PartyModeID); _VideoIcon = new CStatic(_Theme.SongMenuTileBoard.StaticVideoIcon, _PartyModeID); _MedleyCalcIcon = new CStatic(_Theme.SongMenuTileBoard.StaticMedleyCalcIcon, _PartyModeID); _MedleyTagIcon = new CStatic(_Theme.SongMenuTileBoard.StaticMedleyTagIcon, _PartyModeID); - _SubElements.AddRange(new IMenuElement[] {_Artist, _Title, _SongLength, _SongYear, _DuetIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon}); + _SubElements.AddRange(new IMenuElement[] {_Artist, _Title, _SongLength, _SongYear, _DuetIcon, _RapIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon}); } private void _UpdateTileSelection() @@ -141,6 +143,7 @@ namespace VocaluxeLib.Menu.SongMenu _Theme.SongMenuTileBoard.TextTitle = (SThemeText)_Title.GetTheme(); _Theme.SongMenuTileBoard.StaticCoverBig = (SThemeStatic)_CoverBig.GetTheme(); _Theme.SongMenuTileBoard.StaticDuetIcon = (SThemeStatic)_DuetIcon.GetTheme(); + _Theme.SongMenuTileBoard.StaticRapIcon = (SThemeStatic)_RapIcon.GetTheme(); _Theme.SongMenuTileBoard.StaticMedleyCalcIcon = (SThemeStatic)_MedleyCalcIcon.GetTheme(); _Theme.SongMenuTileBoard.StaticMedleyTagIcon = (SThemeStatic)_MedleyTagIcon.GetTheme(); _Theme.SongMenuTileBoard.StaticTextBG = (SThemeStatic)_TextBG.GetTheme(); @@ -213,6 +216,7 @@ namespace VocaluxeLib.Menu.SongMenu _SongLength.Text = String.Empty; _SongYear.Text = String.Empty; _DuetIcon.Visible = false; + _RapIcon.Visible = false; _VideoIcon.Visible = false; _MedleyCalcIcon.Visible = false; _MedleyTagIcon.Visible = false; @@ -242,6 +246,7 @@ namespace VocaluxeLib.Menu.SongMenu _Title.Text = song.Title; _SongYear.Text = song.Year; _DuetIcon.Visible = song.IsDuet; + _RapIcon.Visible = song.IsRap; _VideoIcon.Visible = song.VideoFileName != ""; _MedleyCalcIcon.Visible = song.Medley.Source == EDataSource.Calculated; _MedleyTagIcon.Visible = song.Medley.Source == EDataSource.Tag; diff --git a/VocaluxeLib/Songs/CBaseNote.cs b/VocaluxeLib/Songs/CBaseNote.cs index 271283c3..d28750c2 100644 --- a/VocaluxeLib/Songs/CBaseNote.cs +++ b/VocaluxeLib/Songs/CBaseNote.cs @@ -82,6 +82,20 @@ namespace VocaluxeLib.Songs } public abstract int PointsForBeat { get; } + + public bool IsRapNote + { + get { return IsNoteType(ENoteType.Rap, ENoteType.RapGolden); } + } + + public bool IsGoldenNote + { + get { return IsNoteType(ENoteType.Golden, ENoteType.RapGolden); } + } #endregion Properties + + #region Methods + public abstract bool IsNoteType(params ENoteType[] noteTypes); + #endregion Methods } } \ No newline at end of file diff --git a/VocaluxeLib/Songs/CSong.cs b/VocaluxeLib/Songs/CSong.cs index bc101698..dfef5a99 100644 --- a/VocaluxeLib/Songs/CSong.cs +++ b/VocaluxeLib/Songs/CSong.cs @@ -165,6 +165,7 @@ namespace VocaluxeLib.Songs { get { return Notes.VoiceCount > 1; } } + public bool IsRap = false; public readonly List Editions = new List(); public readonly List Genres = new List(); diff --git a/VocaluxeLib/Songs/CSongLoader.cs b/VocaluxeLib/Songs/CSongLoader.cs index 762e9d3c..beebe242 100644 --- a/VocaluxeLib/Songs/CSongLoader.cs +++ b/VocaluxeLib/Songs/CSongLoader.cs @@ -570,9 +570,9 @@ namespace VocaluxeLib.Songs break; case ':': case '*': + case 'R': + case 'G': case 'F': - case 'R': // Read R (RAP) and G (Golden RAP) notes as Freestyle notes currently. Final implementation needed! - case 'G': // Read R (RAP) and G (Golden RAP) notes as Freestyle notes currently. Final implementation needed! string[] noteData = line.Split(splitChars, 4); if (noteData.Length < 4) { @@ -622,6 +622,16 @@ namespace VocaluxeLib.Songs noteType = ENoteType.Golden; else if (tag.Equals('F') || tag.Equals('R') || tag.Equals('G')) // Read R (RAP) and G (Golden RAP) notes as Freestyle notes currently. Final implementation needed! noteType = ENoteType.Freestyle; + else if (tag.Equals('R')) + { + noteType = ENoteType.Rap; + _Song.IsRap = true; + } + else if (tag.Equals('G')) + { + noteType = ENoteType.RapGolden; + _Song.IsRap = true; + } else noteType = ENoteType.Normal; diff --git a/VocaluxeLib/Songs/CSongNote.cs b/VocaluxeLib/Songs/CSongNote.cs index 3079c61e..1a96b8e7 100644 --- a/VocaluxeLib/Songs/CSongNote.cs +++ b/VocaluxeLib/Songs/CSongNote.cs @@ -15,6 +15,8 @@ // along with Vocaluxe. If not, see . #endregion +using System.Linq; + namespace VocaluxeLib.Songs { /// @@ -37,6 +39,13 @@ namespace VocaluxeLib.Songs } #endregion Constructors + #region Methods + public override bool IsNoteType(params ENoteType[] noteTypes) + { + return noteTypes.Contains(Type); + } + #endregion Method + #region Properties public ENoteType Type { get; set; } @@ -49,8 +58,10 @@ namespace VocaluxeLib.Songs switch (Type) { case ENoteType.Normal: + case ENoteType.Rap: return 1; case ENoteType.Golden: + case ENoteType.RapGolden: return 2; case ENoteType.Freestyle: return 0; diff --git a/VocaluxeLib/Songs/CSongWriter.cs b/VocaluxeLib/Songs/CSongWriter.cs index bdae39c4..957905e3 100644 --- a/VocaluxeLib/Songs/CSongWriter.cs +++ b/VocaluxeLib/Songs/CSongWriter.cs @@ -187,6 +187,12 @@ namespace VocaluxeLib.Songs case ENoteType.Freestyle: tag = "F"; break; + case ENoteType.Rap: + tag = "R"; + break; + case ENoteType.RapGolden: + tag = "G"; + break; default: throw new NotImplementedException("Note type " + note.Type); } diff --git a/VocaluxeLib/Songs/CSungNote.cs b/VocaluxeLib/Songs/CSungNote.cs index 3fd3b9a1..d010722c 100644 --- a/VocaluxeLib/Songs/CSungNote.cs +++ b/VocaluxeLib/Songs/CSungNote.cs @@ -15,6 +15,8 @@ // along with Vocaluxe. If not, see . #endregion +using System.Linq; + namespace VocaluxeLib.Songs { /// @@ -74,6 +76,10 @@ namespace VocaluxeLib.Songs Perfect = result; } + public override bool IsNoteType(params ENoteType[] noteTypes) + { + return HitNote != null && noteTypes.Contains(HitNote.Type); + } #endregion Methods public override int PointsForBeat diff --git a/VocaluxeLib/Xml/CXmlDeserializer.cs b/VocaluxeLib/Xml/CXmlDeserializer.cs index 5a415397..c835dff4 100644 --- a/VocaluxeLib/Xml/CXmlDeserializer.cs +++ b/VocaluxeLib/Xml/CXmlDeserializer.cs @@ -23,6 +23,7 @@ using System.IO; using System.Linq; using System.Reflection; using System.Text; +using System.Text.RegularExpressions; using System.Xml; using VocaluxeLib.Log; @@ -179,14 +180,28 @@ namespace VocaluxeLib.Xml } private readonly IXmlErrorHandler _ErrorHandler; + private readonly bool _UnescapeStringValues; + + /// + /// Creates a new XmlDeserializer + /// + /// Set to true if string values should be unescaped during reading + public CXmlDeserializer(bool unescapeStringValues) + { + _ErrorHandler = new CXmlDefaultErrorHandler(); + _UnescapeStringValues = unescapeStringValues; + } + /// /// Creates a new XmlDeserializer /// /// Class to be used for error callbacks, if not given a default handler will be used which throws errors and logs warnings - public CXmlDeserializer(IXmlErrorHandler errorHandler = null) + /// Set to true if string values should be unescaped during reading + public CXmlDeserializer(IXmlErrorHandler errorHandler = null, bool unescapeStringValues = false) { _ErrorHandler = errorHandler ?? new CXmlDefaultErrorHandler(); + _UnescapeStringValues = unescapeStringValues; } /// @@ -216,8 +231,15 @@ namespace VocaluxeLib.Xml } if (type == typeof(Guid)) return Guid.Parse(node.InnerText); - if (type == typeof(string)) - return node == null ? null : node.InnerText; + if (type == typeof(string)) { + if(node == null) { + return null; + } else if(_UnescapeStringValues) { + return Regex.Unescape(node.InnerText); + } else { + return node.InnerText; + } + } if (type.IsPrimitive) return _GetPrimitiveValue(node, type) ?? value; if (type.IsNullable()) diff --git a/transifex.yaml b/transifex.yaml new file mode 100644 index 00000000..51a3a67d --- /dev/null +++ b/transifex.yaml @@ -0,0 +1,24 @@ +git: + filters: + - filter_type: file + file_format: ANDROID + source_file: Output/Languages/en.xml + source_language: en + translation_files_expression: 'Output/Languages/.xml' + - filter_type: file + file_format: ANDROID + source_file: Output/PartyModes/Challenge/Languages/en.xml + source_language: en + translation_files_expression: 'Output/PartyModes/Challenge/Languages/.xml' + - filter_type: file + file_format: ANDROID + source_file: Output/PartyModes/TicTacToe/Languages/en.xml + source_language: en + translation_files_expression: 'Output/PartyModes/TicTacToe/Languages/.xml' + - filter_type: file + file_format: KEYVALUEJSON + source_file: Vocaluxe/Website/locales/en.json + source_language: en + translation_files_expression: 'Vocaluxe/Website/locales/.json' + settings: + pr_branch_name: translations/ \ No newline at end of file