diff --git a/assets/preload/data/roses/rosesDialogue-french.txt b/assets/preload/data/roses/rosesDialogue-french.txt new file mode 100644 index 00000000..d3776170 --- /dev/null +++ b/assets/preload/data/roses/rosesDialogue-french.txt @@ -0,0 +1,3 @@ +:dad:Pas mal pour un minable dégeulase. +:dad:Mais cette fois je Je vais t'arracher les &éçà&çé juste après que ta copine ait fini de me gargariser. +:bf:Bop beep be be skdoo bep \ No newline at end of file diff --git a/assets/preload/data/roses/rosesDialogue-pt.txt b/assets/preload/data/roses/rosesDialogue-pt.txt new file mode 100644 index 00000000..6b1cde4f --- /dev/null +++ b/assets/preload/data/roses/rosesDialogue-pt.txt @@ -0,0 +1,3 @@ +:dad:Nada mal para um verme feio. +:dad:Mas desta vez vou arrancar-te as bolas logo após a sua namorada acabar de gargarejar as minhas. +:bf:Bop beep be skdoo bep diff --git a/assets/preload/data/roses/rosesDialogue-spanish.txt b/assets/preload/data/roses/rosesDialogue-spanish.txt new file mode 100644 index 00000000..09a1a01e --- /dev/null +++ b/assets/preload/data/roses/rosesDialogue-spanish.txt @@ -0,0 +1,3 @@ +:dad:No está mal para un gusano feo. +:dad:Pero esta vez te arrancaré las bolas justo después de que tu novia termine de hacer gárgaras con las mías. +:bf:Bop bip be be skdoo bep diff --git a/assets/preload/data/senpai/senpaiDialogue-french.txt b/assets/preload/data/senpai/senpaiDialogue-french.txt new file mode 100644 index 00000000..504c913a --- /dev/null +++ b/assets/preload/data/senpai/senpaiDialogue-french.txt @@ -0,0 +1,3 @@ +:dad:Ah, une nouvelle fille vient chercher la vrai amour. +:dad:Une sérénade entre gentlemen décidera où résidera son beau coeur. +:bf:Beep bo bop \ No newline at end of file diff --git a/assets/preload/data/senpai/senpaiDialogue-pt.txt b/assets/preload/data/senpai/senpaiDialogue-pt.txt new file mode 100644 index 00000000..b8235a80 --- /dev/null +++ b/assets/preload/data/senpai/senpaiDialogue-pt.txt @@ -0,0 +1,3 @@ +:dad:Ah, uma nova donzela veio em busca do verdadeiro amor! +:dad:Uma serenata entre cavalheiros decidirá onde residirá o seu belo coração. +:bf:Beep bo bop bop diff --git a/assets/preload/data/senpai/senpaiDialogue-spanish.txt b/assets/preload/data/senpai/senpaiDialogue-spanish.txt new file mode 100644 index 00000000..f976e673 --- /dev/null +++ b/assets/preload/data/senpai/senpaiDialogue-spanish.txt @@ -0,0 +1,3 @@ +:dad:¡Ah, una nueva doncella hermosa ha venido en busca del amor verdadero! +:dad:Una serenata entre caballeros decidirá dónde residirá su hermoso corazón. +:bf:Bip bo bop diff --git a/assets/preload/data/thorns/thornsDialogue-french.txt b/assets/preload/data/thorns/thornsDialogue-french.txt new file mode 100644 index 00000000..ced6d486 --- /dev/null +++ b/assets/preload/data/thorns/thornsDialogue-french.txt @@ -0,0 +1,5 @@ +:dad:Contact direct avec des vrais humains, après être blockée ici pour tellement longtemps... +:dad:et ELLE de toutes les personnes. +:dad:Je vais faire payer son père pour tout qu'il on nous a fait,,,, +:dad:Je vais te battre et faire toi prendre ma place. +:dad:Cela ne vous dérange pas que vos corps soient empruntés n'est-ce pas? C'est tellement logique... \ No newline at end of file diff --git a/assets/preload/data/thorns/thornsDialogue-pt.txt b/assets/preload/data/thorns/thornsDialogue-pt.txt new file mode 100644 index 00000000..98bfeb8c --- /dev/null +++ b/assets/preload/data/thorns/thornsDialogue-pt.txt @@ -0,0 +1,5 @@ +:dad:Contato direto com humanos reais, depois de estar aqui preso por tanto tempo... +:dad:com ELA de todas as pessoas. +:dad:farei o pai dela pagar pelo que me fez a mim e a todos os outros,,.., +:dad:Vou te derrotar e fazer você tomar meu lugar +:dad:Vocês não se importariam se seus corpos fossem pegos emprestados, certo? É justo... diff --git a/assets/preload/data/thorns/thornsDialogue-spanish.txt b/assets/preload/data/thorns/thornsDialogue-spanish.txt new file mode 100644 index 00000000..06d32986 --- /dev/null +++ b/assets/preload/data/thorns/thornsDialogue-spanish.txt @@ -0,0 +1,5 @@ +:dad:Contacto directo con humanos reales, después de estar atrapado aquí por tanto tiempo... +:dad:y ELLA de todas las personas. +:dad:Haré que su padre pague por lo que me ha hecho a mí y a todos los demás,,,, +:dad:Te golpearé y haré que tomes mi lugar. +:dad:No les importa que sus cuerpos sean prestados, ¿verdad? Que es justo... diff --git a/source/Achievements.hx b/source/Achievements.hx index 855ddb8a..7a921fd3 100644 --- a/source/Achievements.hx +++ b/source/Achievements.hx @@ -10,9 +10,46 @@ import flixel.text.FlxText; using StringTools; class Achievements { - public static var achievementsStuff:Array = [ //Name, Description, Achievement save tag, Hidden achievement, alpha (array) - ["Freaky on a Friday Night", "Play on a Friday... Night.", 'friday_night_play', true], - ["She Calls Me Daddy Too", "Beat Week 1 with no Misses.", 'week1_nomiss', false], + public static var achievementsStuff:Array = if(ClientPrefs.language == 'spanish') + [ //Name, Description, Achievement save tag, Hidden achievement + ["Freaky on a Friday Night", "Juega un Viernes por la... Noche.", 'friday_night_play', true], + ["Ella También Me Llama Daddy", "Termina sin misses la Week 1", 'week1_nomiss', false], + ["No Más Truco", "Termina sin misses la Week 2", 'week2_nomiss', false], + ['Llámame El Pistolero', "Termina sin misses la Week 3", 'week3_nomiss', false], + ["Dama Asesina", "Termina sin misses la Week 4", 'week4_nomiss', false], + ["Navidad Con Pocos Misses", "Termina sin misses la Week 5", 'week5_nomiss', false], + ["¡¡Highscore!!", "Termina sin misses la Week 6", 'week6_nomiss', false], + ["¡Maldita Sea, Maldita Sea!", "Termina sin misses la Week 7", 'week7_nomiss', false], + ["¡Qué Desastre Ritmítico!", "Completa una Canción con una valoración de menos de 20%.", 'ur_bad', false], + ["Perfeccionista", "Completa una Canción con una valoración del 100%.", 'ur_good', false], + ["Estusiasmo Atropellista", "Mira a los Henchmen morir por 100 veces.", 'roadkill_enthusiast', false], + ["¿Sobrecantando Mucho...?", "Mantén pulsado una nota por 10 segundos.", 'oversinging', false], + ["Hiperactivo", "Completa una Canción sin dejar que se vea el Idle", 'hype', false], + ["Solo Nosotros 2", "Completa una Canción con solo pulsando 2 notas.", 'two_keys', false], + ["Gamer Tostador", "¿Has intentado jugar el juego en una tostadora?", 'toastie', false], + ["Debugger", "Completa la Canción \"Test\" desde el Chart Editor.", 'debugger', true], + ["Not Freaky on a Friday Night", "Juega un... ¿Sábado por la Noche?", 'saturday_night_play', true] + ] else if (ClientPrefs.language == 'Francais') [ + ["Freaky dans un vendredi soir", "Jouer le vendredi... soir.", 'friday_night_play', true], + ["Elle m'appèlle papa aussi", "Compléter Semaine 1 sans erreur.", 'week1_nomiss', false], + ["Plus de blagues", "Compléter Semaine 2 sans erreur.", 'week2_nomiss', false], + ["Appèlle moi l'assasin", "Compléter Semaine 3 sans erreur.", 'week3_nomiss', false], + ["Tueur de femmes", "Compléter Semaine 4 sans erreur.", 'week4_nomiss', false], + ["Noël sans faute", "Compléter Semaine 5 sans erreur.", 'week5_nomiss', false], + ["Score élevé!!", "Compléter Semaine 6 sans erreur.", 'week6_nomiss', false], + ["Dieu Effing Merde!", "Compléter Semaine 7 sans erreur.", 'week7_nomiss', false], + ["Quel Funkin' Désastre!", "Compléter une chanson avec une évaluation de moins de 20%.", 'ur_bad', false], + ["Perfectionniste", "Compléter une Chanson avec une évaluation de 100%.", 'ur_good', false], + ["Passionné de Roadkill", "Regarder les Henchmen mourir plus de 100 tfois.", 'roadkill_enthusiast', false], + ["Chante trop...?", "Clique une note pour 10 secondes.", 'oversinging', false], + ["Hyperactive", "Terminez une chanson sans rester inactif.", 'hype', false], + ["Juste que nous deux", "Terminez une chanson en pressant que deux clés.", 'two_keys', false], + ["Toaster Gamer", "As-tu essayé de jouer ce jeu sur un toaster?", 'toastie', false], + ["Débogueur", "Compléter la chanson \"Test\" depuis l'éditeur de Chart.", 'debugger', true], + ["Pas Freaky en un vendredi soir", "Jouer en un Samedi... Soir ?", 'saturday_night_play', true] + ] else [ + ["Freaky on a Friday Night", "Play on a Friday... Night.", 'friday_night_play', true], + ["She Calls Me Daddy Too", "Beat Week 1 with no Misses.", 'week1_nomiss', false], ["No More Tricks", "Beat Week 2 with no Misses.", 'week2_nomiss', false], ["Call Me The Hitman", "Beat Week 3 with no Misses.", 'week3_nomiss', false], ["Lady Killer", "Beat Week 4 with no Misses.", 'week4_nomiss', false], @@ -29,6 +66,7 @@ class Achievements { ["Debugger", "Beat the \"Test\" Stage from the Chart Editor.", 'debugger', true], ["Not Freaky on a Friday Night", "Play on a Saturday... Night ?", 'saturday_night_play', true] ]; + public static var achievementsMap:Map = new Map(); public static var henchmenDeath:Int = 0; diff --git a/source/ClientPrefs.hx b/source/ClientPrefs.hx index f05083f9..86801a86 100644 --- a/source/ClientPrefs.hx +++ b/source/ClientPrefs.hx @@ -30,6 +30,7 @@ class ClientPrefs { public static var noReset:Bool = false; public static var healthBarAlpha:Float = 1; public static var controllerMode:Bool = false; + public static var language:String = 'English'; public static var hitsoundVolume:Float = 0; public static var pauseMusic:String = 'Tea Time'; public static var introbg:Bool = false; @@ -139,6 +140,7 @@ class ClientPrefs { FlxG.save.data.scoreZoom = scoreZoom; FlxG.save.data.kadetxt = kadetxt; FlxG.save.data.introbg = introbg; + FlxG.save.data.language = language; FlxG.save.data.noReset = noReset; FlxG.save.data.noscore = noscore; FlxG.save.data.opponentStrums = opponentStrums; @@ -217,6 +219,9 @@ class ClientPrefs { if(FlxG.save.data.globalAntialiasing != null) { globalAntialiasing = FlxG.save.data.globalAntialiasing; } + if(FlxG.save.data.language != null) { + language = FlxG.save.data.language; + } if(FlxG.save.data.noteSplashes != null && Std.isOfType(FlxG.save.data.noteSplashes, noteSplashes)) { noteSplashes = FlxG.save.data.noteSplashes; } diff --git a/source/FreeplayState.hx b/source/FreeplayState.hx index 24b31ef7..ce19dcfa 100644 --- a/source/FreeplayState.hx +++ b/source/FreeplayState.hx @@ -267,7 +267,10 @@ class FreeplayState extends MusicBeatState ratingSplit[1] += '0'; } - scoreText.text = 'PERSONAL BEST: ' + lerpScore + ' (' + ratingSplit.join('.') + '%)'; + scoreText.text = if(ClientPrefs.language == 'Spanish') + 'MEJOR PERSONAL: ' + lerpScore + '(' + ratingSplit.join('.') + '%)' + else + 'PERSONAL BEST: ' + lerpScore + ' (' + ratingSplit.join('.') + '%)'; positionHighscore(); var upP = controls.UI_UP_P; diff --git a/source/Note.hx b/source/Note.hx index dea78bd1..0855fa6a 100644 --- a/source/Note.hx +++ b/source/Note.hx @@ -128,7 +128,7 @@ class Note extends FlxSprite if(noteData > -1 && noteType != value) { switch(value) { - case 'Hurt Note': // NOTE THAT FOR ALL CUSTOM NOTETYPES YOULL NEED TO ADD THEM TO CHARTING STATE ELSE THE USER CANT USE IT + case 'Hurt Note' | 'Nota Daño': // NOTE THAT FOR ALL CUSTOM NOTETYPES YOULL NEED TO ADD THEM TO CHARTING STATE ELSE THE USER CANT USE IT ignoreNote = mustPress; reloadNote('HURT'); noteSplashTexture = 'HURTnoteSplashes'; @@ -144,7 +144,7 @@ class Note extends FlxSprite missHealth = 0.3; } hitCausesMiss = true; - case 'Instakill Note': + case 'Instakill Note' | 'Nota Instakill': ignoreNote = mustPress; reloadNote('INSTAKILL'); noteSplashTexture = 'HURTnoteSplashes'; @@ -158,7 +158,7 @@ class Note extends FlxSprite missHealth = 500;//lol you will die } hitCausesMiss = true; - case 'Crash Note': + case 'Crash Note' | 'Nota Crash': ignoreNote = mustPress; reloadNote('CRASH'); noteSplashTexture = 'HURTnoteSplashes'; @@ -167,7 +167,7 @@ class Note extends FlxSprite colorSwap.brightness = 0; hitByOpponent = false; hitCausesMiss = true; - case 'Window Note': + case 'Window Note' | 'Nota Window': ignoreNote = mustPress; reloadNote('WINDOW'); colorSwap.hue = 0; @@ -175,7 +175,7 @@ class Note extends FlxSprite colorSwap.brightness = 0; hitByOpponent = false; hitCausesMiss = true; - case 'Warning Note': + case 'Warning Note' | 'Nota Alerta': ignoreNote = mustPress; reloadNote('WARNING'); colorSwap.hue = 0; @@ -184,7 +184,7 @@ class Note extends FlxSprite if (tooLate) { missHealth = 500; } - case 'Poisoned Note': + case 'Poisoned Note' | 'Nota Envenenada': ignoreNote = mustPress; reloadNote('POISONED'); colorSwap.hue = 0; diff --git a/source/PauseSubState.hx b/source/PauseSubState.hx index 8657a8b2..59f3a666 100644 --- a/source/PauseSubState.hx +++ b/source/PauseSubState.hx @@ -20,8 +20,21 @@ class PauseSubState extends MusicBeatSubstate { var grpMenuShit:FlxTypedGroup; - var menuItems:Array = []; - var menuItemsOG:Array = ['Resume', 'Restart Song', 'Change Difficulty', 'Options', 'Exit to menu']; + static var menuItems:Array = []; + + static var resumeL:String = 'Resume'; + static var restartL:String = 'Restart Song'; + static var changeL:String = 'Change Difficulty'; + static var optionsL:String = 'Options'; + static var exitL:String = 'Exit to menu'; + static var leaveL:String = 'Leave Charting Mode'; + static var skipL:String = 'Skip Time'; + static var endL:String = 'End Song'; + static var tog:String = 'Toggle Practice Mode'; + static var bot:String = 'Toggle Botplay'; + static var bac:String = 'BACK'; + + var menuItemsOG:Array = [resumeL, restartL, changeL, optionsL, exitL]; var difficultyChoices = []; var curSelected:Int = 0; @@ -40,26 +53,78 @@ class PauseSubState extends MusicBeatSubstate public function new(x:Float, y:Float) { super(); + + switch(ClientPrefs.language.toLowerCase()) { + case 'francais': + resumeL = 'Résumer'; + restartL = 'Redémarrer'; + changeL = 'Changer de Difficulté'; + optionsL = 'Choix'; + exitL = 'Quitter le menu'; + leaveL = 'Quitter le Mode Graphique'; + skipL = 'Sauter le Temps'; + endL = 'Chanson de Fin'; + tog = 'Basculer en Mode Entraînement'; + bot = 'Basculer le Botplay'; + bac = 'ARRIÈRE'; + case 'portugues': + resumeL = 'Continuar Musica'; + restartL = 'Reiniciar Musica'; + changeL = 'Dificuldade de Mudança'; + optionsL = 'Opções'; + exitL = 'Sair para o menu'; + leaveL = 'Sair do Charting Mode'; + skipL = 'Pular Tempo'; + endL = 'Terminar Musica'; + tog = 'Ligar Modo Prática'; + bot = 'Ligar Botplay'; + bac = 'COSTAS'; + case 'spanish': + resumeL = 'Continuar'; + restartL = 'Reiniciar'; + changeL = 'Cambiar Dificultad'; + optionsL = 'Opciones'; + exitL = 'Salir al Menú'; + leaveL = 'Salir Modo Charting'; + skipL = 'Saltar Tiempo'; + endL = 'Terminar Canción'; + tog = 'Alternar Modo Practicar'; + bot = 'Alternar Botplay'; + bac = 'ATRÁS'; + default: + resumeL = 'Resume'; + restartL = 'Restart Song'; + changeL = 'Change Difficulty'; + optionsL = 'Options'; + exitL = 'Exit to menu'; + leaveL = 'Leave Charting Mode'; + skipL = 'Skip Time'; + endL = 'End Song'; + tog = 'Toggle Practice Mode'; + bot = 'Toggle Botplay'; + bac = 'BACK'; + } + menuItemsOG = [resumeL, restartL, changeL, optionsL, exitL]; if(CoolUtil.difficulties.length < 2 || CoolUtil.defaultDifficulties.length < 2) { - menuItemsOG.remove('Change Difficulty'); //No need to change difficulty if there is only one! + menuItemsOG.remove(changeL); //No need to change difficulty if there is only one! } toOptions = false; if(PlayState.chartingMode) { - menuItemsOG.insert(2, 'Leave Charting Mode'); + menuItemsOG.insert(2, leaveL); var num:Int = 0; if(!PlayState.instance.startingSong) { num = 1; - menuItemsOG.insert(3, 'Skip Time'); + menuItemsOG.insert(3, skipL); } - menuItemsOG.insert(3 + num, 'End Song'); - menuItemsOG.insert(4 + num, 'Toggle Practice Mode'); - menuItemsOG.insert(5 + num, 'Toggle Botplay'); + menuItemsOG.insert(3 + num, endL); + menuItemsOG.insert(4 + num, tog); + menuItemsOG.insert(5 + num, bot); } menuItems = menuItemsOG; @@ -67,7 +132,7 @@ class PauseSubState extends MusicBeatSubstate var diff:String = '' + CoolUtil.difficulties[i]; difficultyChoices.push(diff); } - difficultyChoices.push('BACK'); + difficultyChoices.push(bac); pauseMusic = new FlxSound(); @@ -90,7 +155,19 @@ class PauseSubState extends MusicBeatSubstate bg.scrollFactor.set(); add(bg); - Application.current.window.title = "Friday Night Funkin': Theoyeah Engine - " + PlayState.SONG.song + ' [' + CoolUtil.difficultyString() + ']' + ' [PAUSED]'; + var pauseL:String = 'PAUSED'; + switch(ClientPrefs.language.toLowerCase()) { + case 'francais': + pauseL = 'EN PAUSE'; //please correct me if is incorrect + case 'spanish': + pauseL = 'PAUSADO'; + case 'portugues': + pauseL = 'PAUSADO'; //please correct me if is incorrect + default: + pauseL = 'PAUSED'; + } + + Application.current.window.title = "Friday Night Funkin': Theoyeah Engine - " + PlayState.SONG.song + ' [' + CoolUtil.difficultyString() + '] [$pauseL]'; var levelInfo:FlxText = new FlxText(20, 15, 0, "", 32); levelInfo.text += PlayState.SONG.song; @@ -159,9 +236,9 @@ class PauseSubState extends MusicBeatSubstate super.update(elapsed); updateSkipTextStuff(); - var upP = controls.UI_UP_P; - var downP = controls.UI_DOWN_P; - var accepted = controls.ACCEPT; + var upP:Bool = controls.UI_UP_P; + var downP:Bool = controls.UI_DOWN_P; + var accepted:Bool = controls.ACCEPT; if (upP || FlxG.mouse.wheel > 0) { @@ -175,7 +252,7 @@ class PauseSubState extends MusicBeatSubstate var daSelected:String = menuItems[curSelected]; switch (daSelected) { - case 'Skip Time': + case skipL: if (controls.UI_LEFT_P) { FlxG.sound.play(Paths.sound('scrollMenu'), 0.4); @@ -234,22 +311,22 @@ class PauseSubState extends MusicBeatSubstate switch (daSelected) { - case "Resume": + case 'Résumer' | 'Resume' | 'Continuar Musica' | 'Continuar': Application.current.window.title = "Friday Night Funkin': Theoyeah Engine - " + PlayState.SONG.song + ' [' + CoolUtil.difficultyString() + ']'; close(); - case 'Change Difficulty': + case 'Changer de Difficulté' | 'Dificuldade de Mudança' | 'Cambiar Dificultad' | 'Change Difficulty': menuItems = difficultyChoices; regenMenu(); - case 'Toggle Practice Mode': + case 'Alternar Modo Practicar' | 'Toggle Practice Mode' | 'Ligar Modo Prática' | 'Basculer en Mode Entraînement': PlayState.instance.practiceMode = !PlayState.instance.practiceMode; PlayState.changedDifficulty = true; practiceText.visible = PlayState.instance.practiceMode; - case "Restart Song": + case 'Redémarrer' | 'Reiniciar Musica' | 'Reiniciar' | 'Restart Song': restartSong(); - case "Leave Charting Mode": + case 'Salir Modo Charting' | 'Leave Charting Mode' | 'Sair do Charting Mode' | 'Quitter le Mode Graphique': restartSong(); PlayState.chartingMode = false; - case 'Skip Time': + case 'Saltar Tiempo' | 'Skip Time' | 'Pular Tempo' | 'Sauter le Temps': if(curTime < Conductor.songPosition) { PlayState.startOnTime = curTime; @@ -264,21 +341,21 @@ class PauseSubState extends MusicBeatSubstate } close(); } - case "End Song": + case 'Chanson de Fin' | 'Terminar Musica' | 'Terminar Canción' | 'End Song': close(); PlayState.instance.finishSong(true); - case 'Toggle Botplay': + case 'Ligar Botplay' | 'Basculer le Botplay' | 'Alternar Botplay' | 'Toggle Botplay': PlayState.instance.cpuControlled = !PlayState.instance.cpuControlled; PlayState.changedDifficulty = true; PlayState.instance.botplayTxt.visible = PlayState.instance.cpuControlled; PlayState.instance.botplayTxt.alpha = 1; PlayState.instance.botplaySine = 0; - case "Options": + case 'Opciones' | 'Options' | 'Choix' | 'Opções': Application.current.window.title = "Friday Night Funkin': Theoyeah Engine"; toOptions = true; MusicBeatState.switchState(new options.OptionsState()); FlxG.sound.playMusic(Paths.music('freakyMenu')); - case "Exit to menu": + case 'Sair para o menu' | 'Salir al Menú' | 'Exit to menu' | 'Quitter le menu': PlayState.deathCounter = 0; PlayState.seenCutscene = false; @@ -374,7 +451,7 @@ class PauseSubState extends MusicBeatSubstate item.targetY = i; grpMenuShit.add(item); - if(menuItems[i] == 'Skip Time') + if(menuItems[i] == skipL) { skipTimeText = new FlxText(0, 0, 0, '', 64); skipTimeText.setFormat(Paths.font("vcr.ttf"), 64, FlxColor.WHITE, CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); diff --git a/source/PlayState.hx b/source/PlayState.hx index 48639275..5d1e7b73 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -80,7 +80,30 @@ class PlayState extends MusicBeatState public static var STRUM_X = 42; public static var STRUM_X_MIDDLESCROLL = -278; - public static var ratingStuff:Array = [ + + public static var ratingStuff:Array = if(ClientPrefs.language == 'Francais') [ + ['Pas dur tes juste mauvais', 0.2], //From 0% to 19% + ['Problème', 0.4], //From 20% to 39% + ['Nul', 0.5], //From 40% to 49% + ['Ok', 0.6], //From 50% to 59% + ['Pas mauvais', 0.69], //From 60% to 68% + ['Yo', 0.7], //69% + ['Cool!', 0.8], //From 70% to 79% + ['Bien!', 0.9], //From 80% to 89% + ['Génial!!', 1], //From 90% to 99% + ['Parfait!!!', 1] //The value on this one isn't used actually, since Perfect is always "1" + ] else if(ClientPrefs.language == 'Spanish') [ + ['No es difícil es solo que eres lo peor', 0.2], //From 0% to 19% + ['Problema de Habilidad', 0.4], //From 20% to 39% + ['Mal', 0.5], //From 40% to 49% + ['Ok', 0.6], //From 50% to 59% + ['No está Mal', 0.69], //From 60% to 68% + ['Genial', 0.7], //69% + ['¡Guay!', 0.8], //From 70% to 79% + ['¡Bien!', 0.9], //From 80% to 89% + ['¡¡Fabuloso!!', 1], //From 90% to 99% + ['¡¡¡Perfecto!!!', 1] //The value on this one isn't used actually, since Perfect is always "1" + ] else [ ['Its not hard you just suck as hell', 0.2], //From 0% to 19% ['skill issue', 0.4], //From 20% to 39% ['Bad', 0.5], //From 40% to 49% @@ -92,6 +115,7 @@ class PlayState extends MusicBeatState ['Sick!!', 1], //From 90% to 99% ['Perfect!!!', 1] //The value on this one isn't used actually, since Perfect is always "1" ]; + public var modchartTweens:Map = new Map(); public var modchartSprites:Map = new Map(); public var modchartTimers:Map = new Map(); @@ -1006,11 +1030,28 @@ class PlayState extends MusicBeatState } var file:String = Paths.json('$songName/dialogue'); //Checks for json/Psych Engine dialogue - if (OpenFlAssets.exists(file)) - dialogueJson = DialogueBoxPsych.parseDialogue(file); + var langSuffix:String = ''; + switch (ClientPrefs.language.toLowerCase()) + { + case "francais": + langSuffix = '-french'; + case "espanol": + langSuffix = '-spanish'; + case "portugues": + langSuffix = '-pt'; + + //etc.. + + default: + langSuffix = ''; + } + + if (OpenFlAssets.exists(file)) { + dialogueJson = DialogueBoxPsych.parseDialogue(file + langSuffix); + } - var file:String = Paths.txt(songName + '/' + songName + 'Dialogue'); //Checks for vanilla/Senpai dialogue + var file:String = Paths.txt(songName + '/' + songName + 'Dialogue' + langSuffix); //Checks for vanilla/Senpai dialogue if (OpenFlAssets.exists(file)) dialogue = CoolUtil.coolTextFile(file); @@ -1220,12 +1261,16 @@ class PlayState extends MusicBeatState judgementCounter.scrollFactor.set(); judgementCounter.cameras = [camHUD]; judgementCounter.screenCenter(Y); - judgementCounter.text = 'Sicks: ${sicks}\nGoods: ${goods}\nBads: ${bads}\nShits: ${shits}';//\nTotal hit: ${totals}'; + switch(ClientPrefs.language.toLowerCase()) { + // case 'spanish': judgementCounter.text = 'Geniales: ${sicks}\nBien: ${goods}\nMal: ${bads}\nM*erdas: ${shits}'; // i think this is unnecessary + case 'francais': judgementCounter.text = 'Génials: ${sicks}\nBiens: ${goods}\nMauvais: ${bads}\nM*rde: ${shits}'; + default: judgementCounter.text = 'Sicks: ${sicks}\nGoods: ${goods}\nBads: ${bads}\nShits: ${shits}'; + } add(judgementCounter); } - botplayTxt = new FlxText(400, timeBarBG.y + 55, FlxG.width - 800, "CHEATING MODE", 32); + botplayTxt = new FlxText(400, timeBarBG.y + 55, FlxG.width - 800, "BOTPLAY", 32); botplayTxt.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.RED, CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); botplayTxt.scrollFactor.set(); botplayTxt.borderSize = 1.25; @@ -4778,7 +4823,7 @@ class PlayState extends MusicBeatState boyfriend.holdTimer = 0; } - if(note.noteType == 'Hey!') { + if(note.noteType == 'Hey!' || note.noteType == '¡Hey!') { if(boyfriend.animOffsets.exists('hey')) { boyfriend.playAnim('hey', true); boyfriend.specialAnim = true; @@ -5325,14 +5370,21 @@ class PlayState extends MusicBeatState if (goods > 0) ratingFC = "GFC"; if (bads > 0 || shits > 0) ratingFC = "FC"; if (songMisses > 0 && songMisses < 10) ratingFC = "SDCB"; - else if (songMisses >= 10) ratingFC = "Clear"; + else if (songMisses >= 10) if(ClientPrefs.language == 'Spanish') + ratingFC = 'Limpio' + else + ratingFC = "Clear"; } setOnLuas('rating', ratingPercent); setOnLuas('ratingName', ratingName); setOnLuas('ratingFC', ratingFC); + if (ClientPrefs.crazycounter) { - var totals:Int = sicks + goods + bads + shits; - judgementCounter.text = 'Sicks: ${sicks}\nGoods: ${goods}\nBads: ${bads}\nShits: ${shits}';//\nTotal hit: ${totals}; + switch(ClientPrefs.language.toLowerCase()) { + //case 'spanish': judgementCounter.text = 'Geniales: ${sicks}\nBien: ${goods}\nMal: ${bads}\nM*erdas: ${shits}'; // i think this is unnecessary + case 'francais': judgementCounter.text = 'Génials: ${sicks}\nCools: ${goods}\nMauvais: ${bads}\nM*rde: ${shits}'; + default: judgementCounter.text = 'Sicks: ${sicks}\nGoods: ${goods}\nBads: ${bads}\nShits: ${shits}'; + } } } diff --git a/source/ResetScoreSubState.hx b/source/ResetScoreSubState.hx index 93985564..ac87092d 100644 --- a/source/ResetScoreSubState.hx +++ b/source/ResetScoreSubState.hx @@ -39,7 +39,10 @@ class ResetScoreSubState extends MusicBeatSubstate add(bg); var tooLong:Float = (name.length > 18) ? 0.8 : 1; //Fucking Winter Horrorland - var text:Alphabet = new Alphabet(0, 180, "Reset the score of", true); + var text:Alphabet = if(ClientPrefs.language == 'Spanish') + new Alphabet(0, 180, "Resetear score de", true) + else + new Alphabet(0, 180, "Reset the score of", true); text.screenCenter(X); alphabetArray.push(text); text.alpha = 0; @@ -114,4 +117,4 @@ class ResetScoreSubState extends MusicBeatSubstate noText.scale.set(scales[1 - confirmInt], scales[1 - confirmInt]); if(week == -1) icon.animation.curAnim.curFrame = confirmInt; } -} \ No newline at end of file +} diff --git a/source/TitleState.hx b/source/TitleState.hx index 7bb60496..c4663aaa 100644 --- a/source/TitleState.hx +++ b/source/TitleState.hx @@ -653,7 +653,14 @@ class TitleState extends MusicBeatState FlxG.sound.playMusic(Paths.music('freakyMenu'), 0); FlxG.sound.music.fadeIn(4, 0, 1); case 2: - createCoolText(['Theoyeah Engine by'], 15); + switch(ClientPrefs.language.toLowerCase()) { + case 'francais': + createCoolText(['Theoyeah Engine par'], 15); + case 'portugues' | 'spanish': + createCoolText(['Theoyeah Engine por'], 15); + default: + createCoolText(['Theoyeah Engine by'], 15); + } // credTextShit.visible = true; case 3: addMoreText('Theoyeah', 15); @@ -667,7 +674,16 @@ class TitleState extends MusicBeatState // credTextShit.text = 'In association \nwith'; // credTextShit.screenCenter(); case 5: - createCoolText(['With help of'], 15); + switch(ClientPrefs.language.toLowerCase()) { + case 'francais': + createCoolText(["Avec l'aide de"], 15); + case 'portugues': + createCoolText(['Com ajuda de'], 15); + case 'spanish': + createCoolText(['Con ayuda de'], 15); + default: + createCoolText(['With help of'], 15); + } case 7: addMoreText('Wither362'); addMoreText('DEMOLITIONDON69'); @@ -676,7 +692,16 @@ class TitleState extends MusicBeatState deleteCoolText(); coolguys.visible = false; case 10: - createCoolText(['A Modified Version of'], -40); + switch(ClientPrefs.language.toLowerCase()) { + case 'francais': + createCoolText(['Une Version Modifiée de'], -40); + case 'portugues': + createCoolText(['Uma Versão Modificada de'], -40); + case 'spanish': + createCoolText(['Una Versión Modificada de'], -40); + default: + createCoolText(['A Modified Version of'], -40); + } case 11: addMoreText('Psych Engine', -40); psychSpr.visible = true; diff --git a/source/editors/ChartingState.hx b/source/editors/ChartingState.hx index 1e530dcd..e6c52501 100644 --- a/source/editors/ChartingState.hx +++ b/source/editors/ChartingState.hx @@ -59,28 +59,71 @@ using StringTools; class ChartingState extends MusicBeatState { - public static var noteTypeList:Array = //Used for backwards compatibility with 0.1 - 0.3.2 charts, though, you should add your hardcoded custom note types here too. + static var language:String = ClientPrefs.language.toLowerCase(); + public static var noteTypeList:Array = if(language == 'spanish') //Used for backwards compatibility with 0.1 - 0.3.2 charts, though, you should add your hardcoded custom note types here too. [ '', - 'Alt Animation', + 'Animación Alt', + '¡Hey!', + 'Nota Daño', + 'Nota Instakill', + 'Nota Window', + 'Nota Alerta', + 'Nota Envenenada', + 'Nota Crash', //so we can actually test it EDIT: Wait, that released right ? + 'GF Canta', + 'No Animación', + ] else if(language == 'Francais') [ + '', + 'Animation alternative', 'Hey!', - 'Hurt Note', - 'Instakill Note', - 'Window Note', + 'Note blessante', + 'Note Tuant', + 'Note de fenêtre ', 'Warning Note', - 'Poisoned Note', - 'Crash Note', //so we can actually test it -DEMOLITIONDON96 // Wait, that released right ? -Theoyeah // Wait, what do you mean? -Wither362 - 'GF Sing', - 'No Animation', + 'Note Empoisoné', + 'Note Crash', //so we can actually test it EDIT: Wait, that released right ? + 'GF Chante', + 'Aucune Animation', + ] else [ + '', + 'Alt Animation', + 'Hey!', + 'Hurt Note', + 'Instakill Note', + 'Window Note', + 'Warning Note', + 'Poisoned Note', + 'Crash Note', //so we can actually test it EDIT: Wait, that released right ? + 'GF Sing', + 'No Animation', ]; + private var noteTypeIntMap:Map = new Map(); private var noteTypeMap:Map> = new Map>(); private var didAThing = false; public var ignoreWarnings = false; var undos = []; var redos = []; - var eventStuff:Array = - [ + var eventStuff:Array = if(language == 'spanish') + [ // name of the event for code - name of the text that appears - description + ['', '', "Nada. Sip, es verdad."], + ['Hey!', '¡Hey!', "Plays the \"Hey!\" animation from Bopeebo,\nValue 1: BF = Only Boyfriend, GF = Only Girlfriend,\nSomething else = Both.\nValue 2: Custom animation duration,\nleave it blank for 0.6s"], + ['Set GF Speed', 'Cambiar Velocidad de GF', "Sets GF head bopping speed,\nValue 1: 1 = Normal speed,\n2 = 1/2 speed, 4 = 1/4 speed etc.\nUsed on Fresh during the beatbox parts.\n\nWarning: Value must be integer!"], + ['Philly Glow', "Exclusive to Week 3\nValue 1: 0/1/2 = OFF/ON/Reset Gradient\n \nNo, i won't add it to other weeks."], + ['Kill Henchmen', "For Mom's songs, don't use this please, i love them :("], + ['Add Camera Zoom', 'Añadir Cámara Zoom', "Usado en MILF en esa parte \"difícil\" \nValor 1: Cuanto (Por defecto: 0.015)\nValor 2: UI zoom (por defecto: 0.03)\nDeja los valores en BLANCO si quieres utilizar los valores Por Defecto."], + ['BG Freaks Expression', "Should be used only in \"school\" Stage!"], + ['Trigger BG Ghouls', "Should be used only in \"schoolEvil\" Stage!"], + ['Play Animation', "Plays an animation on a Character,\nonce the animation is completed,\nthe animation changes to Idle\n\nValue 1: Animation to play.\nValue 2: Character (Dad, BF, GF)"], + ['Camera Follow Pos', "Value 1: X\nValue 2: Y\n\nThe camera won't change the follow point\nafter using this, for getting it back\nto normal, leave both values blank."], + ['Alt Idle Animation', "Sets a specified suffix after the idle animation name.\nYou can use this to trigger 'idle-alt' if you set\nValue 2 to -alt\n\nValue 1: Character to set (Dad, BF or GF)\nValue 2: New suffix (Leave it blank to disable)"], + ['Screen Shake', "Value 1: Camera shake\nValue 2: HUD shake\n\nEvery value works as the following example: \"1, 0.05\".\nThe first number (1) is the duration.\nThe second number (0.05) is the intensity."], + ['Change Character', "Value 1: Character to change (Dad, BF, GF)\nValue 2: New character's name"], + ['Change Scroll Speed', "Value 1: Scroll Speed Multiplier (1 is default)\nValue 2: Time it takes to change fully in seconds."], + ['Set Property', "Value 1: Variable name\nValue 2: New value"], + ['Change Icon', "Value 1: Character to change icon (Dad, BF)\nValue 2: Icon name"] + ] else [ ['', "Nothing. Yep, that's right."], ['Dadbattle Spotlight', "Used in Dad Battle,\nValue 1: 0/1 = ON/OFF,\n2 = Target Dad\n3 = Target BF"], ['Hey!', "Plays the \"Hey!\" animation from Bopeebo,\nValue 1: BF = Only Boyfriend, GF = Only Girlfriend,\nSomething else = Both.\nValue 2: Custom animation duration,\nleave it blank for 0.6s"], @@ -342,7 +385,18 @@ class ChartingState extends MusicBeatState UI_box.scrollFactor.set(); var keyBonds = ClientPrefs.keyBinds; - text = + text = if(language == 'spanish') + "W/S o Mouse Wheel - Ir abajo o arriba + \nA o Izquierda/D o Derecha - Ir a la siguiente/anterior sección + \nMantén Shift para mover 4 veces más rápido + \nHold Control and click on an arrow to select it + \n" + keyBonds["zoom+"][0] + "/" + keyBonds["zoom-"][0] + " - Más/Menos Zoom + \n + \nEsc - Prueba tu chart dentro del Chart Editor + \nEnter - Juega tu chart + \n" + keyBonds["decrease"][0] + "/" + keyBonds["increase"][0] + " - Incrementar/Decrementar Largo de Nota + \nSpace - Parar/Continuar canción" + else "W/S or Mouse Wheel - Change Conductor's strum time \nA/D - Go to the previous/next section \nLeft/Right - Change Snap @@ -414,7 +468,13 @@ class ChartingState extends MusicBeatState UI_songTitle = new FlxUIInputText(10, 10, 70, _song.song, 8); blockPressWhileTypingOn.push(UI_songTitle); - var check_voices = new FlxUICheckBox(10, 25, null, null, "Has voice track", 100); + var check_voices = if(language == 'spanish') + new FlxUICheckBox(10, 25, null, null, "Tiene voces", 100) + else if(language == 'Francais') + new FlxUICheckBox(10, 25, null, null, "A une piste vocale", 100); + else + new FlxUICheckBox(10, 25, null, null, "Has voice track", 100); + check_voices.checked = _song.needsVoices; // _song.needsVoices = check_voices.checked; check_voices.callback = function() @@ -423,38 +483,77 @@ class ChartingState extends MusicBeatState //trace('CHECKED!'); }; - var saveButton:FlxButton = new FlxButton(110, 8, "Save", function() - { - saveLevel(); - }); + var saveButton:FlxButton = if(language == 'spanish') + new FlxButton(110, 8, "Save", function() + { + saveLevel(); + }) + else + new FlxButton(110, 8, "Save", function() + { + saveLevel(); + }); - var reloadSong:FlxButton = new FlxButton(saveButton.x + 90, saveButton.y, "Reload Audio", function() - { - currentSongName = Paths.formatToSongPath(UI_songTitle.text); - loadSong(); - updateWaveform(); - }); + var reloadSong:FlxButton = if(language == 'spanish') + new FlxButton(saveButton.x + 90, saveButton.y, "Actualizar Audio", function() + { + currentSongName = Paths.formatToSongPath(UI_songTitle.text); + loadSong(); + updateWaveform(); + }) + else + new FlxButton(saveButton.x + 90, saveButton.y, "Reload Audio", function() + { + currentSongName = Paths.formatToSongPath(UI_songTitle.text); + loadSong(); + updateWaveform(); + }); - var reloadSongJson:FlxButton = new FlxButton(reloadSong.x, saveButton.y + 30, "Reload JSON", function() - { - openSubState(new Prompt('This action will clear current progress.\n\nProceed?', 0, function(){loadJson(_song.song.toLowerCase()); }, null,ignoreWarnings)); - }); + var reloadSongJson:FlxButton = if(language == 'spanish') + new FlxButton(reloadSong.x, saveButton.y + 30, "Resetear JSON", function() + { + openSubState(new Prompt('Esta acción destruirá el progreso no guardado.\n\n¿Proceder?', 0, function(){loadJson(_song.song.toLowerCase()); }, null,ignoreWarnings)); + }) + else + new FlxButton(reloadSong.x, saveButton.y + 30, "Reload JSON", function() + { + openSubState(new Prompt('This action will clear current progress.\n\nProceed?', 0, function(){loadJson(_song.song.toLowerCase()); }, null,ignoreWarnings)); + }); - var loadAutosaveBtn:FlxButton = new FlxButton(reloadSongJson.x, reloadSongJson.y + 30, 'Load Autosave', function() - { - PlayState.SONG = Song.parseJSONshit(FlxG.save.data.autosave); - MusicBeatState.resetState(); - }); + var loadAutosaveBtn:FlxButton = if(language == 'spanish') + new FlxButton(reloadSongJson.x, reloadSongJson.y + 30, 'Cargar Autoguardado', function() + { + PlayState.SONG = Song.parseJSONshit(FlxG.save.data.autosave); + MusicBeatState.resetState(); + }) + else + new FlxButton(reloadSongJson.x, reloadSongJson.y + 30, 'Load Autosave', function() + { + PlayState.SONG = Song.parseJSONshit(FlxG.save.data.autosave); + MusicBeatState.resetState(); + }); - var loadEventJson:FlxButton = new FlxButton(loadAutosaveBtn.x, loadAutosaveBtn.y + 30, 'Load Events', function() - { - loadEvents(); - }); + var loadEventJson:FlxButton = if(language == 'spanish') + new FlxButton(loadAutosaveBtn.x, loadAutosaveBtn.y + 30, 'Cargar Eventos', function() + { + loadEvents(); + }) + else + new FlxButton(loadAutosaveBtn.x, loadAutosaveBtn.y + 30, 'Load Events', function() + { + loadEvents(); + }); - var saveEvents:FlxButton = new FlxButton(110, reloadSongJson.y, 'Save Events', function () - { - saveEvents(); - }); + var saveEvents:FlxButton = if(language == 'spanish') + new FlxButton(110, reloadSongJson.y, 'Guardar Eventos', function () + { + saveEvents(); + }) + else + new FlxButton(110, reloadSongJson.y, 'Save Events', function () + { + saveEvents(); + }); var clear_events:FlxButton = new FlxButton(320, 310, 'Clear events', function() { @@ -597,10 +696,16 @@ class ChartingState extends MusicBeatState noteSplashesInputText = new FlxUIInputText(noteSkinInputText.x, noteSkinInputText.y + 35, 150, _song.splashSkin, 8); blockPressWhileTypingOn.push(noteSplashesInputText); - var reloadNotesButton:FlxButton = new FlxButton(noteSplashesInputText.x + 5, noteSplashesInputText.y + 20, 'Change Notes', function() { - _song.arrowSkin = noteSkinInputText.text; - updateGrid(); - }); + var reloadNotesButton:FlxButton = if(language == 'spanish') + new FlxButton(noteSplashesInputText.x + 5, noteSplashesInputText.y + 20, 'Cambiar Notas', function() { + _song.arrowSkin = noteSkinInputText.text; + updateGrid(); + }) + else + new FlxButton(noteSplashesInputText.x + 5, noteSplashesInputText.y + 20, 'Change Notes', function() { + _song.arrowSkin = noteSkinInputText.text; + updateGrid(); + }); var tab_group_song = new FlxUI(null, UI_box); tab_group_song.name = "Song"; @@ -1003,7 +1108,11 @@ class ChartingState extends MusicBeatState var leEvents:Array = []; for (i in 0...eventStuff.length) { - leEvents.push(eventStuff[i][0]); + if(eventStuff[i][2] != null) { //checks if the event has a + leEvents.push(eventStuff[i][1]); + } else { + leEvents.push(eventStuff[i][0]); + } } var text:FlxText = new FlxText(20, 30, 0, "Event:"); @@ -1120,12 +1229,17 @@ class ChartingState extends MusicBeatState curEventSelected += change; if(curEventSelected < 0) curEventSelected = Std.int(curSelectedNote[1].length) - 1; else if(curEventSelected >= curSelectedNote[1].length) curEventSelected = 0; - selectedEventText.text = 'Selected Event: ' + (curEventSelected + 1) + ' / ' + curSelectedNote[1].length; + selectedEventText.text = if(language == 'spanish') 'Evento Seleccionado: ' + (curEventSelected + 1) + ' / ' + curSelectedNote[1].length + else + 'Selected Event: ' + (curEventSelected + 1) + ' / ' + curSelectedNote[1].length; } else { curEventSelected = 0; - selectedEventText.text = 'Selected Event: None'; + selectedEventText.text = if(language == 'spanish') + 'Evento Seleccionado: Ninguno' + else + 'Selected Event: None'; } updateNoteUI(); } diff --git a/source/editors/MasterEditorMenu.hx b/source/editors/MasterEditorMenu.hx index 11a81ff8..fed443af 100644 --- a/source/editors/MasterEditorMenu.hx +++ b/source/editors/MasterEditorMenu.hx @@ -20,16 +20,16 @@ using StringTools; class MasterEditorMenu extends MusicBeatState { - var options:Array = [ - 'Week Editor', - 'Menu Character Editor', - 'Dialogue Editor', - 'Dialogue Portrait Editor', - 'Character Editor', - 'Chart Editor', - 'Stage Editor', + var options:Array> = [ + ['Week Editor'], + ['Menu Character Editor'], + ['Dialogue Editor'], + ['Dialogue Portrait Editor'], + ['Character Editor'], + ['Chart Editor'], + ['Stage Editor'] #if (!html5 && MODS_ALLOWED) - 'Mod Manager' + ,['Mod Manager'] #end ]; private var grpTexts:FlxTypedGroup; @@ -41,6 +41,52 @@ class MasterEditorMenu extends MusicBeatState override function create() { + var language:String = ClientPrefs.language.toLowerCase(); + var weekEditor:String = if(language == 'spanish') + 'Editor de Weeks' + else + 'Week Editor'; + var menuCharacterEditor:String = if(language == 'spanish') + 'Editor de Menú Personajes' + else + 'Menu Character Editor'; + var characterEditor:String = if(language == 'spanish') + 'Editor de Personajes' + else + 'Character Editor'; + var dialogueEditor:String = if(language == 'spanish') + 'Editor de Diálogo' + else + 'Dialogue Editor'; + var dialoguePortraitEditor:String = if(language == 'spanish') + 'Editor de Personajes de Diálogo' + else + 'Dialogue Portrait Editor'; + var chartEditor:String = if(language == 'spanish') + 'Editor de Chart' + else + 'Chart Editor'; + var stageEditor:String = if(language == 'spanish') + 'Editor de Stages' + else + 'Stage Editor'; + var modManager:String = if(language == 'spanish') + 'Mánager de Mods' + else + 'Mod Manager'; + + options = [ + [weekEditor, 'Week Editor'], + [menuCharacterEditor, 'Menu Character Editor'], + [dialogueEditor, 'Dialogue Editor'], + [dialoguePortraitEditor, 'Dialogue Portrait Editor'], + [characterEditor, 'Character Editor'], + [chartEditor, 'Chart Editor'], + [stageEditor, 'Stage Editor'] + #if (!html5 && MODS_ALLOWED) + ,[modManager, 'Mod Manager'] + #end + ]; FlxG.camera.bgColor = FlxColor.BLACK; #if desktop // Updating Discord Rich Presence @@ -57,12 +103,12 @@ class MasterEditorMenu extends MusicBeatState for (i in 0...options.length) { - var leText:Alphabet = new Alphabet(0, (70 * i) + 30, options[i], true, false); + var leText:Alphabet = new Alphabet(0, (70 * i) + 30, options[i][0], true, false); leText.isMenuItem = true; leText.targetY = i; grpTexts.add(leText); } - + #if MODS_ALLOWED var textBG:FlxSprite = new FlxSprite(0, FlxG.height - 42).makeGraphic(FlxG.width, 42, 0xFF000000); textBG.alpha = 0.6; @@ -119,7 +165,7 @@ class MasterEditorMenu extends MusicBeatState if (controls.ACCEPT || FlxG.mouse.justPressed) { - switch(options[curSelected]) { + switch(options[curSelected][1]) { case 'Character Editor': LoadingState.loadAndSwitchState(new CharacterEditorState(Character.DEFAULT_CHARACTER, false)); case 'Week Editor': @@ -188,12 +234,17 @@ class MasterEditorMenu extends MusicBeatState curDirectory = 0; WeekData.setDirectoryFromWeek(); - if(directories[curDirectory] == null || directories[curDirectory].length < 1) - directoryTxt.text = '< No Mod Directory Loaded >'; - else - { + if(directories[curDirectory] == null || directories[curDirectory].length < 1) { + switch(ClientPrefs.language.toLowerCase()) { + case 'spanish': directoryTxt.text = '< Directorio de Mod No Cargado >'; + default: directoryTxt.text = '< No Mod Directory Loaded >'; + } + } else { Paths.currentModDirectory = directories[curDirectory]; - directoryTxt.text = '< Loaded Mod Directory: ' + Paths.currentModDirectory + ' >'; + switch(ClientPrefs.language.toLowerCase()) { + case 'spanish': directoryTxt.text = '< Directorio "' + Paths.currentModDirectory + '" Cargado >'; + default: directoryTxt.text = '< Loaded Mod Directory: ' + Paths.currentModDirectory + ' >'; + } } directoryTxt.text = directoryTxt.text.toUpperCase(); } diff --git a/source/options/VisualsUISubState.hx b/source/options/VisualsUISubState.hx index 19151705..7bbe6b6a 100644 --- a/source/options/VisualsUISubState.hx +++ b/source/options/VisualsUISubState.hx @@ -158,6 +158,14 @@ class VisualsUISubState extends BaseOptionsMenu addOption(option); option.onChange = onChangeFPSCounter; #end + + var option:Option = new Option('Language', + "What language would you like ?", + 'language', + 'string', + 'English', //this is the default option + ['English', 'Francais', 'Spanish', 'Portugues']); + addOption(option); super();