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