diff --git a/assets/languages/en/Editors.xml b/assets/languages/en/Editors.xml
index 904e6332..35a186a0 100644
--- a/assets/languages/en/Editors.xml
+++ b/assets/languages/en/Editors.xml
@@ -43,6 +43,14 @@
Scroll Speed
+
+ Step: {0}
+ Beat: {0}
+ Measure: {0}
+ BPM: {0}
+ Time Signature: {0}/{1}
+
+
Create Event Group
Edit Event Group
@@ -387,4 +395,30 @@
Debug Options
+
+
+
+
+
+ (Chart Playtesting)
+ Exit Game
+
+ Save & Exit Game
+ Save & Exit To Menu
+ Cancel
+
+ UNSAVED CHANGES!
+ Your changes will be *lost* if you don't save them. (Can't be recovered)\n\n\nWould you like to Cancel?
+
+
+
+ Unsaved Changes!
+ Your changes will be lost if you don't save them. (Can't be recovered)\n\n\nWould you like to Cancel?
+
+ Exit Game
+
+ Save & Exit Game
+ Save & Exit To Menu
+ Cancel
+
\ No newline at end of file
diff --git a/assets/languages/en/Main.xml b/assets/languages/en/Main.xml
index 2d517c10..0ea3b7e3 100644
--- a/assets/languages/en/Main.xml
+++ b/assets/languages/en/Main.xml
@@ -18,18 +18,6 @@
S++
-
- (Chart Playtesting)
- Exit Game
-
- Save & Exit Game
- Save & Exit To Menu
- Cancel
-
- UNSAVED CHANGES!
- Your changes will be *lost* if you don't save them. (Can't be recovered)\n\n\nWould you like to Cancel?
-
-
WEEK SCORE:{0}
TRACKS
diff --git a/assets/languages/en/Options.xml b/assets/languages/en/Options.xml
index ba4315b4..f7debfaf 100644
--- a/assets/languages/en/Options.xml
+++ b/assets/languages/en/Options.xml
@@ -42,7 +42,8 @@
Engine
- Switch Mod
+
+ Change Mod or Mode
diff --git a/source/funkin/backend/system/updating/UpdateAvailableScreen.hx b/source/funkin/backend/system/updating/UpdateAvailableScreen.hx
index 8814dcec..a4cf4d6b 100644
--- a/source/funkin/backend/system/updating/UpdateAvailableScreen.hx
+++ b/source/funkin/backend/system/updating/UpdateAvailableScreen.hx
@@ -41,7 +41,9 @@ class UpdateAvailableScreen extends MusicBeatState {
bg.screenCenter();
add(bg);
- title = new Alphabet(0, 10, "NEW UPDATE", true);
+ // which file should i put this in?
+ // Misc.xml?
+ title = new Alphabet(0, 10, TU.translate("updateAvailable.title"), true);
title.screenCenter(X);
title.scrollFactor.set();
@@ -61,8 +63,8 @@ class UpdateAvailableScreen extends MusicBeatState {
changeLogText.borderColor = 0xFF000000;
MarkdownUtil.applyMarkdownText(changeLogText, check.updates.last().body);
- installButton = new FunkinText(0, FlxG.height - 25, Std.int(FlxG.width / 2), "> INSTALL <", 32);
- skipButton = new FunkinText(Std.int(FlxG.width / 2), FlxG.height - 25, Std.int(FlxG.width / 2), "SKIP", 32);
+ installButton = new FunkinText(0, FlxG.height - 25, Std.int(FlxG.width / 2), "PLACEHOLDER", 32);
+ skipButton = new FunkinText(Std.int(FlxG.width / 2), FlxG.height - 25, Std.int(FlxG.width / 2), "PLACEHOLDER", 32);
skipButton.y -= skipButton.height;
installButton.y -= installButton.height;
@@ -91,6 +93,8 @@ class UpdateAvailableScreen extends MusicBeatState {
oldPos = FlxG.mouse.getScreenPosition();
+ changeSelection(false);
+
DiscordUtil.call("onMenuLoaded", ["Update Available Screen"]);
}
@@ -132,16 +136,18 @@ class UpdateAvailableScreen extends MusicBeatState {
}
}
+ var installText = TU.translate("updateAvailable.install");
+ var skipText = TU.translate("updateAvailable.skip");
- public function changeSelection() {
+ public function changeSelection(playSFX:Bool = true) {
CoolUtil.playMenuSFX(SCROLL, 0.7);
- if (installSelected) {
- installButton.text = "> INSTALL <";
- skipButton.text = "SKIP";
- } else {
- installButton.text = "INSTALL";
- skipButton.text = "> SKIP <";
- }
+
+ // keeping this local just incase we wanna change this later
+ inline function wrap(str:String, shouldWrap:Bool)
+ return shouldWrap ? "> " + str + " <" : str;
+
+ installButton.text = wrap(installText, installSelected);
+ skipButton.text = wrap(skipText, !installSelected);
}
public override function destroy() {
diff --git a/source/funkin/editors/SaveWarning.hx b/source/funkin/editors/SaveWarning.hx
index b475e3e2..b94c8c5f 100644
--- a/source/funkin/editors/SaveWarning.hx
+++ b/source/funkin/editors/SaveWarning.hx
@@ -21,15 +21,15 @@ class SaveWarning {
if (warningFunc != null) warningFunc(closingWindow);
if (FlxG.state != null && FlxG.state is UIState) {
- FlxG.state.openSubState(new UIWarningSubstate("Unsaved Changes!", "Your changes will be lost if you don't save them. (Can't be recovered)\n\n\nWould you like to Cancel?",
+ FlxG.state.openSubState(new UIWarningSubstate(TU.translate("saveWarning.warningTitle"), TU.translate("saveWarning.warningDesc"),
[
{
- label: "Cancel",
+ label: TU.translate("saveWarning.cancel"),
color: 0x969533,
onClick: function (_) {if (closingWindow) WindowUtils.resetClosing();}
},
{
- label: closingWindow ? "Exit Game" : "Exit To Menu",
+ label: closingWindow ? TU.translate("saveWarning.exitGame") : TU.translate("saveWarning.exitToMenu"),
color: 0x969533,
onClick: function(_) {
if (!closingWindow) {
@@ -42,7 +42,7 @@ class SaveWarning {
}
},
{
- label: closingWindow ? "Save & Exit Game" : "Save & Exit To Menu",
+ label: closingWindow ? TU.translate("saveWarning.saveAndExitGame") : TU.translate("saveWarning.saveAndExitToMenu"),
color: 0x969533,
onClick: function(_) {
if (saveFunc != null) saveFunc();
diff --git a/source/funkin/editors/charter/Charter.hx b/source/funkin/editors/charter/Charter.hx
index d7ebf584..e34818f1 100644
--- a/source/funkin/editors/charter/Charter.hx
+++ b/source/funkin/editors/charter/Charter.hx
@@ -88,6 +88,12 @@ class Charter extends UIState {
public static var clipboard:Array = [];
public static var waveformHandler:CharterWaveformHandler;
+ private var SONGPOSINFO_STEP = TU.getRaw("songPosInfo.step");
+ private var SONGPOSINFO_BEAT = TU.getRaw("songPosInfo.beat");
+ private var SONGPOSINFO_MEASURE = TU.getRaw("songPosInfo.measure");
+ private var SONGPOSINFO_BPM = TU.getRaw("songPosInfo.bpm");
+ private var SONGPOSINFO_TIMESIGNATURE = TU.getRaw("songPosInfo.timeSignature");
+
public function new(song:String, diff:String, reload:Bool = true) {
super();
if (song != null) {
@@ -1220,13 +1226,15 @@ class Charter extends UIState {
for (strumLine in strumLines.members) strumLine.vocals.pause();
}
- // TODO: make this translatable?
- songPosInfo.text = '${CoolUtil.timeToStr(Conductor.songPosition)} / ${CoolUtil.timeToStr(songLength)}'
- + '\nStep: ${curStep}'
- + '\nBeat: ${curBeat}'
- + '\nMeasure: ${curMeasure}'
- + '\nBPM: ${Conductor.bpm}'
- + '\nTime Signature: ${Conductor.beatsPerMeasure}/${Conductor.stepsPerBeat}';
+ songPosInfo.text = [
+ // no need to translate the time text since it has no text only numbers
+ '${CoolUtil.timeToStr(Conductor.songPosition)} / ${CoolUtil.timeToStr(songLength)}',
+ SONGPOSINFO_STEP.format([curStep]),
+ SONGPOSINFO_BEAT.format([curBeat]),
+ SONGPOSINFO_MEASURE.format([curMeasure]),
+ SONGPOSINFO_BPM.format([Conductor.bpm]),
+ SONGPOSINFO_TIMESIGNATURE.format([Conductor.beatsPerMeasure, Conductor.stepsPerBeat])
+ ].join("\n");
if (charterCamera.zoom != (charterCamera.zoom = lerp(charterCamera.zoom, __camZoom, __firstFrame ? 1 : 0.125)))
updateDisplaySprites();
diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx
index 13402d0e..5599267d 100644
--- a/source/funkin/game/PlayState.hx
+++ b/source/funkin/game/PlayState.hx
@@ -741,9 +741,9 @@ class PlayState extends MusicBeatState
add(icon);
}
- scoreTxt = new FunkinText(healthBarBG.x + 50, healthBarBG.y + 30, Std.int(healthBarBG.width - 100), TU.translate("game.score", [songScore]), 16);
- missesTxt = new FunkinText(healthBarBG.x + 50, healthBarBG.y + 30, Std.int(healthBarBG.width - 100), TU.translate("game.misses", [misses]), 16);
- accuracyTxt = new FunkinText(healthBarBG.x + 50, healthBarBG.y + 30, Std.int(healthBarBG.width - 100), TU.translate("game.accuracy", ["-%", "(N/A)"]), 16);
+ scoreTxt = new FunkinText(healthBarBG.x + 50, healthBarBG.y + 30, Std.int(healthBarBG.width - 100), TEXT_GAME_SCORE.format([songScore]), 16);
+ missesTxt = new FunkinText(healthBarBG.x + 50, healthBarBG.y + 30, Std.int(healthBarBG.width - 100), TEXT_GAME_MISSES.format([misses]), 16);
+ accuracyTxt = new FunkinText(healthBarBG.x + 50, healthBarBG.y + 30, Std.int(healthBarBG.width - 100), TEXT_GAME_ACCURACY.format(["-%", "(N/A)"]), 16);
accuracyTxt.addFormat(accFormat, 0, 1);
for(text in [scoreTxt, missesTxt, accuracyTxt]) {
@@ -1211,16 +1211,22 @@ class PlayState extends MusicBeatState
iconP2.health = 1 - (healthBar.percent / 100);
}
+ // bypass the caching in FormatUtil by doing it manually so its faster
+ private var TEXT_GAME_SCORE = TU.getRaw("game.score");
+ private var TEXT_GAME_MISSES = TU.getRaw("game.misses");
+ private var TEXT_GAME_COMBOBREAKS = TU.getRaw("game.comboBreaks");
+ private var TEXT_GAME_ACCURACY = TU.getRaw("game.accuracy");
+
function updateRatingStuff() {
- scoreTxt.text = TU.translate("game.score", [songScore]);
- missesTxt.text = TU.translate(comboBreaks ? "game.comboBreaks" : "game.misses", [misses]);
+ scoreTxt.text = TEXT_GAME_SCORE.format([songScore]);
+ missesTxt.text = (comboBreaks ? TEXT_GAME_COMBOBREAKS : TEXT_GAME_MISSES).format([misses]);
if (curRating == null)
curRating = new ComboRating(0, "[N/A]", 0xFF888888);
@:privateAccess {
accFormat.format.color = curRating.color;
- accuracyTxt.text = TU.translate("game.accuracy", [accuracy < 0 ? "-%" : '${CoolUtil.quantize(accuracy * 100, 100)}%', curRating.rating]);
+ accuracyTxt.text = TEXT_GAME_ACCURACY.format([accuracy < 0 ? "-%" : '${CoolUtil.quantize(accuracy * 100, 100)}%', curRating.rating]);
accuracyTxt._formatRanges[0].range.start = accuracyTxt.text.length - curRating.rating.length;
accuracyTxt._formatRanges[0].range.end = accuracyTxt.text.length;
diff --git a/source/funkin/menus/FreeplayState.hx b/source/funkin/menus/FreeplayState.hx
index 1be94dbb..c055a405 100644
--- a/source/funkin/menus/FreeplayState.hx
+++ b/source/funkin/menus/FreeplayState.hx
@@ -202,6 +202,8 @@ class FreeplayState extends MusicBeatState
public var autoplayShouldPlay:Bool = true;
#end
+ private var TEXT_FREEPLAY_SCORE = TU.getRaw("freeplay.score");
+
override function update(elapsed:Float)
{
super.update(elapsed);
@@ -224,7 +226,7 @@ class FreeplayState extends MusicBeatState
updateOptionsAlpha();
}
- scoreText.text = TU.translate("freeplay.score", [Math.round(lerpScore)]);
+ scoreText.text = TEXT_FREEPLAY_SCORE.format([Math.round(lerpScore)]);
scoreBG.scale.set(Math.max(Math.max(diffText.width, scoreText.width), coopText.width) + 8, (coopText.visible ? coopText.y + coopText.height : 66));
scoreBG.updateHitbox();
scoreBG.x = FlxG.width - scoreBG.width;
@@ -425,19 +427,22 @@ class FreeplayState extends MusicBeatState
var event = event("onUpdateOptionsAlpha", EventManager.get(FreeplayAlphaUpdateEvent).recycle(0.6, 0.45, 1, 1, 0.25));
if (event.cancelled) return;
- for (i in 0...iconArray.length)
- iconArray[i].alpha = lerp(iconArray[i].alpha, #if PRELOAD_ALL songInstPlaying ? event.idlePlayingAlpha : #end event.idleAlpha, event.lerp);
+ final idleAlpha = #if PRELOAD_ALL songInstPlaying ? event.idlePlayingAlpha : #end event.idleAlpha;
+ final selectedAlpha = #if PRELOAD_ALL songInstPlaying ? event.selectedPlayingAlpha : #end event.selectedAlpha;
- iconArray[curSelected].alpha = #if PRELOAD_ALL songInstPlaying ? event.selectedPlayingAlpha : #end event.selectedAlpha;
+ for (i in 0...iconArray.length)
+ iconArray[i].alpha = lerp(iconArray[i].alpha, idleAlpha, event.lerp);
+
+ iconArray[curSelected].alpha = selectedAlpha;
for (i=>item in grpSongs.members)
{
item.targetY = i - curSelected;
- item.alpha = lerp(item.alpha, #if PRELOAD_ALL songInstPlaying ? event.idlePlayingAlpha : #end event.idleAlpha, event.lerp);
+ item.alpha = lerp(item.alpha, idleAlpha, event.lerp);
if (item.targetY == 0)
- item.alpha = #if PRELOAD_ALL songInstPlaying ? event.selectedPlayingAlpha : #end event.selectedAlpha;
+ item.alpha = selectedAlpha;
}
}
}