Finished Charter & Options in Translation File

This commit is contained in:
Furo
2025-07-21 19:06:25 +02:00
parent 64f8553811
commit daa7550c35
21 changed files with 230 additions and 156 deletions
+46 -8
View File
@@ -23,7 +23,7 @@
<group name="ChartEditor">
<group name="CharterSelection" prefix="charterSelection.">
<str id="desc">Select a song to modify the charts from."</str>
<str id="desc">Select a song to modify the charts from.</str>
<str id="acceptSong">Press ACCEPT to choose a difficulty to edit.</str>
<str id="acceptDifficulty">Press ACCEPT to edit the chart for the selected difficulty.</str>
<str id="selectDifficulty">Select a difficulty to continue.</str>
@@ -113,10 +113,22 @@
<group name="SongCreationScreen" prefix="songCreationScreen.">
<str id="win-title">Creating New Song</str>
<str id="win-title-importing">Importing Song</str>
<str id="title">Song Info</str>
<str id="instAudio">Inst Audio File $* Required*$</str>
<str id="voicesAudio">Vocal Audio File $* Required*$</str>
<str id="voicesAudio">Vocal Audio File</str>
<str id="importFrom">Import from...</str>
<str id="importSource">Import Source:</str>
<str id="legacyOrPsych">Psych/Legacy FNF</str>
<str id="vslice">V-Slice</str>
<str id="vsliceProject">V-Slice Project (.fnfc)</str>
<str id="importChartFormat">Chart Format</str>
<str id="importAudios">Add Audios</str>
<str id="songFileName">Song file name $* Required$</str>
<str id="songDataFile">Data/Chart File $* Required$</str>
<str id="songMetaFile">Meta File $* Required$</str>
<str id="back">Back</str>
<str id="next">Next</str>
@@ -129,13 +141,15 @@
<str id="scrollSpeed">Scroll Speed</str>
<str id="stagePos">Stage Position</str>
<str id="scale">Scale</str>
<str id="spacing">Spacing</str>
<str id="hudPos">Hud Position (X [Ratio 0-1],Y)</str>
<str id="visible">Visible?</str>
<str id="useChartScrollSpeed">Uses charts scroll speed?</str>
<str id="vocalSuffix">Vocal Suffix</str>
<str id="keyCount">Key Count</str>
</group>
<group name="ChartEditor" prefix="chart.">
<group name="ChartEditor" prefix="charter.">
<!-- Charter.hx -->
<group name="TopBar">
<str id="topBar.file">File</str>
@@ -143,10 +157,10 @@
<str id="new">New</str>
<str id="save">Save</str>
<str id="saveAs">Save As...</str>
<str id="saveWithoutEvents">Save Without Events</str>
<str id="saveWithoutEventsAs">Save Without Events As...</str>
<str id="saveEventsSeparately">Save Events Separately</str>
<str id="saveEventsSeparatelyAs">Save Events Separately As...</str>
<str id="saveGlobalEvents">Save Global Events</str>
<str id="saveGlobalEventsAs">Save Global Events As...</str>
<str id="saveNoLocalEvents">Save Chart without Local Events</str>
<str id="saveNoLocalEventsAs">Save Chart without Local Events As...</str>
<str id="saveMeta">Save Meta</str>
<str id="saveMetaAs">Save Meta As...</str>
<str id="exportFnfLegacy">Export For FNF Legacy...</str>
@@ -182,7 +196,11 @@
<str id="resetZoom">Reset Zoom</str>
<str id="showSectionsSeparator">Show Sections Separator</str>
<str id="showBeatsSeparator">Show Beats Separator</str>
<str id="rainbowWaveforms">Rainbow Waveforms</str>
<str id="lowDetailWaveforms">Low Detail Waveforms</str>
<str id="scrollLeft">Scroll Left</str>
<str id="scrollRight">Scroll Right</str>
<str id="scrollReset">Reset Scroll</str>
</group>
<str id="topBar.song">Song</str>
@@ -193,6 +211,18 @@
<str id="muteVoices">Mute voices</str>
</group>
<group name="BookmarkMenu" prefix="bookmarks.">
<str id="addBookmarkHere">Add Bookmark Here</str>
<str id="editBookmarkList">Edit Bookmark List</str>
<str id="goto">Go to "{0}"</str>
<str id="createBookmarkTitle">Creating New Bookmark...</str>
<str id="createBookmarkName">Bookmark Name:</str>
<str id="createBookmarkColor">Bookmark Color:</str>
<str id="editBookmarkListTitle">Bookmark List</str>
<str id="editBookmarksTitle">Edit Bookmarks</str>
<str id="newBookmarkName">New Bookmark</str>
</group>
<str id="topBar.note">Note</str>
<group name="NoteMenu" prefix="note.">
<str id="addSustainLength">Add sustain length</str>
@@ -218,6 +248,9 @@
<str id="speedLower">↓ Speed {0}%</str>
<str id="sectionBack">Go back a section</str>
<str id="sectionForward">Go forward a section</str>
<str id="sectionStart">Go to start of section</str>
<str id="backStep">Go back a step</str>
<str id="forwardStep">Go forward a step</str>
<str id="metronome">Metronome</str>
<str id="visualMetronome">Visual metronome</str>
</group>
@@ -257,6 +290,11 @@
<str id="createNew">Create New</str>
<str id="lock-unlock">Lock/Unlock</str>
<str id="info.localEvents">Local Events\n(Only This Difficulty)</str>
<str id="info.globalEvents">Global Events\n(All Difficulties)</str>
<str id="eventType-local">Local Event</str>
<str id="eventType-global">Global Event</str>
<!-- CharterEventAdd.hx -->
<str id="addEvent">Add Event</str>
<str id="editEvent">Edit</str> <!-- Should maybe be "Edit Event" -->
@@ -279,7 +317,7 @@
<group name="Warnings" prefix="warnings.">
<str id="notImplemented-title">New Character: Feature Not Implemented!</str>
<str id="notImplemented-body">This feature isn't implemented yet. Please wait for more cne updates to have this functional.\n\n\n- Codename Devs</str>
<str id="notImplemented-body">This feature isn't implemented yet. Please wait for more cne updates to have this functional.\n\n\n- Codename Crew</str>
</group>
</group>
+26 -1
View File
@@ -42,7 +42,17 @@
<str id="category.engine">Engine</str>
<group name="engine" prefix="engine.">
<str id="switchMod">Mod/Mode</str>
<str id="switchMod">Switch Mod</str>
</group>
<str id="category.volume">Volume</str>
<str id="volume.mute">mute</str>
<str id="category.developer">Developer</str>
<group name="developer" prefix="developer.">
<str id="devMenus">Developer Menus</str>
<str id="openConsole">Open Console</str>
<str id="reloadState">Reload State</str>
</group>
</group>
@@ -73,6 +83,12 @@
<str id="autoPause-name">Auto Pause</str>
<str id="autoPause-desc">If checked, switching windows will pause the game.</str>
<str id="streamedMusic-name">Streamed Music</str>
<str id="streamedMusic-desc">"If checked, only musics will have streamed audio, ALSO freeing a LOT of memory with the downside of higher cpu usage if more audio are being streamed at once (EXPERIMENTAL). Turning this off will consume a lot of memory, especially on longer songs. If you aren't sure, leave this on.</str>
<str id="streamedVocals-name">Streamed Vocals</str>
<str id="streamedVocals-desc">If checked, vocals will also be streamed if Streamed Music is checked, will impact the performance if the song uses alot of vocals (EXPERIMENTAL). If you aren't sure, leave this on.</str>
</group>
<group name="GameplayOptions" prefix="GameplayOptions.">
@@ -108,6 +124,9 @@
<str id="checkForUpdates-desc">Select this option to check for new engine updates.</str>
<str id="checkForUpdates-noUpdateFound">No update found.</str>
<str id="devMode-name">Developer Mode</str>
<str id="devMode-desc">If checked, you will be able to access developer features like certain keybinds, editors, developer options, state reloads, console and more.</str>
<str id="resetSaveData-name">Reset Save Data</str>
<str id="resetSaveData-desc">Select this option to reset save data. This will remove all of your highscores.</str>
</group>
@@ -119,6 +138,12 @@
<str id="showConsole-name">Show Console</str>
<str id="showConsole-desc">Select this to show the debug console, which contains log information about the game.</str>
<str id="editorsResizable-name">Resizable Editors</str>
<str id="editorsResizable-desc">If checked, this will allow the editors to render beyond the base 1280x720 resolution of FNF (allowing for more detail and space...)</str>
<str id="bypassEditorsResize-name">Bypass Editor Resize</str>
<str id="bypassEditorsResize-desc">Disables the minimum resolution for resizing editors (Needs Resizable Editors To Be Enabled).</str>
<str id="editorSFX-name">Editor SFXs</str>
<str id="editorSFX-desc">If checked, will play sound effects when working on editors (ex: will play sfxs when checking checkboxes...)</str>
+1 -1
View File
@@ -5,7 +5,7 @@
title="Friday Night Funkin' - Codename Engine" main="funkin.backend.system.Main"
file="CodenameEngine" packageName="com.yoshman29.codenameengine"
package="com.yoshman29.codenameengine"
version="0.1.0-legacy" company="Yoshman29" />
version="1.0.0" company="Yoshman29" />
<!--
CHANGE THE SAVE PATH & NAME FOR YOUR MOD HERE!
+6 -2
View File
@@ -37,9 +37,13 @@ class DebugOptionsScreen extends OptionsScreen {
}));
#end
add(new Checkbox(
"Resizable Editors",
"If checked, this will allow the editors to render beyond the base 1280x720 resolution of FNF (allowing for more detail and space...)",
getName("editorsResizable"),
getDesc("editorsResizable"),
"editorsResizable"));
add(new Checkbox(
getName("bypassEditorsResize"),
getDesc("bypassEditorsResize"),
"bypassEditorsResize"));
add(new Checkbox(
getName("editorSFX"),
getDesc("editorSFX"),
@@ -48,7 +48,7 @@ class CharacterCreationScreen extends UISubstateWindow {
[new FlxTextFormatMarkerPair(new FlxTextFormat(0xFFAD1212), "$")]);
imageExplorer.maxSize.y -= 100;
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20 - 125, windowSpr.y + windowSpr.bHeight - 16 - 32, "Save & Close", function() {
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20 - 125, windowSpr.y + windowSpr.bHeight - 16 - 32, TU.translate("editor.saveClose"), function() {
close();
createCharacter();
}, 125);
@@ -436,7 +436,7 @@ class CharacterEditor extends UIState {
super.onResize(width, height);
if (!UIState.resolutionAware) return;
if (width < FlxG.initialWidth || height < FlxG.initialHeight) {
if ((width < FlxG.initialWidth || height < FlxG.initialHeight) && !Options.bypassEditorsResize) {
width = FlxG.initialWidth; height = FlxG.initialHeight;
}
@@ -42,7 +42,7 @@ class CharacterSpriteScreen extends UISubstateWindow {
ogImageSaveData = imageExplorer.getSaveData();
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20, windowSpr.y + windowSpr.bHeight - 20, "Save & Close", function() {
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20, windowSpr.y + windowSpr.bHeight - 20, TU.translate("editor.saveClose"), function() {
addToUndo(); // should be async?? -lunar
imageExplorer.saveFiles('${Paths.getAssetsRoot()}/images/characters', () -> {
onSave('${imageExplorer.saveData.directory.length > 0 ? '${imageExplorer.saveData.directory}/' : ""}' + imageExplorer.imageName, imageExplorer.isAtlas);
+83 -85
View File
@@ -34,6 +34,9 @@ class Charter extends UIState {
private function get_chart()
return PlayState.SONG;
inline function translate(id:String, ?args:Array<Dynamic>)
return TU.translate("charter." + id, args);
public static var instance(get, never):Charter;
private static inline function get_instance()
@@ -129,149 +132,143 @@ class Charter extends UIState {
topMenu = [
{
label: TU.translate("chart.topBar.file"),
label: translate("topBar.file"),
childs: [
/*{
label: TU.translate("chart.file.new")
label: translate("file.new")
},
null,*/
{
label: TU.translate("chart.file.save"),
label: translate("file.save"),
keybind: [CONTROL, S],
onSelect: _file_save_all,
},
null,
{
label: "Save chart",
keybind: [CONTROL, SHIFT, S],
onSelect: _file_save,
},
{
label: TU.translate("chart.file.saveAs"),
label: translate("file.saveAs"),
keybind: [CONTROL, SHIFT, S],
onSelect: _file_saveas,
},
null,
{
label: "Save global events",
label: translate("file.saveGlobalEvents"),
keybind: [CONTROL, B, S],
onSelect: _file_events_save,
},
{
label: "Save global events as...",
label: translate("file.saveGlobalEvents"),
onSelect: _file_events_saveas,
},
{
label: "Save chart without local events",
label: translate("file.saveNoLocalEvents"),
keybind: [CONTROL, ALT, S],
onSelect: _file_save_no_events,
},
{
label: "Save chart without local events as...",
label: translate("file.saveNoLocalEventsAs"),
onSelect: _file_saveas_no_events,
},
null,
{
label: TU.translate("chart.file.saveMeta"),
label: translate("file.saveMeta"),
keybind: [CONTROL, M, S],
onSelect: _file_meta_save,
},
{
label: TU.translate("chart.file.saveMetaAs"),
label: translate("file.saveMetaAs"),
onSelect: _file_meta_saveas,
},
null,
{
label: TU.translate("chart.file.exportFnfLegacy"),
label: translate("file.exportFnfLegacy"),
onSelect: _file_saveas_fnflegacy,
},
{
label: TU.translate("chart.file.exportPsych"),
label: translate("file.exportPsych"),
onSelect: _file_saveas_psych,
},
null,
{
label: TU.translate("chart.file.exit"),
label: translate("file.exit"),
onSelect: _file_exit
}
]
},
{
label: TU.translate("chart.topBar.edit"),
label: translate("topBar.edit"),
childs: [
{
label: TU.translate("chart.edit.undo"),
label: translate("edit.undo"),
keybind: [CONTROL, Z],
onSelect: _edit_undo
},
{
label: TU.translate("chart.edit.redo"),
label: translate("edit.redo"),
keybinds: [[CONTROL, Y], [CONTROL, SHIFT, Z]],
onSelect: _edit_redo
},
null,
{
label: TU.translate("chart.edit.copy"),
label: translate("edit.copy"),
keybind: [CONTROL, C],
onSelect: _edit_copy
},
{
label: TU.translate("chart.edit.paste"),
label: translate("edit.paste"),
keybind: [CONTROL, V],
onSelect: _edit_paste
},
null,
{
label: TU.translate("chart.edit.cut"),
label: translate("edit.cut"),
keybind: [CONTROL, X],
onSelect: _edit_cut
},
{
label: TU.translate("chart.edit.delete"),
label: translate("edit.delete"),
keybind: [DELETE],
onSelect: _edit_delete
}
]
},
{
label: TU.translate("chart.topBar.chart"),
label: translate("topBar.chart"),
childs: [
{
label: TU.translate("chart.chart.playtest"),
label: translate("chart.playtest"),
keybind: [ENTER],
onSelect: _chart_playtest
},
{
label: TU.translate("chart.chart.playtestHere"),
label: translate("chart.playtestHere"),
keybind: [SHIFT, ENTER],
onSelect: _chart_playtest_here
},
null,
{
label: TU.translate("chart.chart.playtestOpponent"),
label: translate("chart.playtestOpponent"),
keybind: [CONTROL, ENTER],
onSelect: _chart_playtest_opponent
},
{
label: TU.translate("chart.chart.playtestOpponentHere"),
label: translate("chart.playtestOpponentHere"),
keybind: [CONTROL, SHIFT, ENTER],
onSelect: _chart_playtest_opponent_here
},
null,
{
label: TU.translate("chart.chart.enableScripts"),
label: translate("chart.enableScripts"),
onSelect: _chart_enablescripts,
icon: Options.charterEnablePlaytestScripts ? 1 : 0
},
null,
{
label: TU.translate("chart.chart.editChartData"),
label: translate("chart.editChartData"),
color: 0xFF959829, icon: 4,
onCreate: function (button:UIContextMenuOptionSpr) {button.label.offset.x = button.icon.offset.x = -2;},
onSelect: chart_edit_data
},
{
label: TU.translate("chart.chart.editMetadata"),
label: translate("chart.editMetadata"),
color: 0xFF959829, icon: 4,
onCreate: function (button:UIContextMenuOptionSpr) {button.label.offset.x = button.icon.offset.x = -2;},
onSelect: chart_edit_metadata
@@ -279,133 +276,133 @@ class Charter extends UIState {
]
},
{
label: TU.translate("chart.topBar.view"),
label: translate("topBar.view"),
childs: [
{
label: TU.translate("chart.view.zoomIn"),
label: translate("view.zoomIn"),
keybind: [CONTROL, NUMPADPLUS],
onSelect: _view_zoomin
},
{
label: TU.translate("chart.view.zoomOut"),
label: translate("view.zoomOut"),
keybind: [CONTROL, NUMPADMINUS],
onSelect: _view_zoomout
},
{
label: TU.translate("chart.view.resetZoom"),
label: translate("view.resetZoom"),
keybind: [CONTROL, NUMPADZERO],
onSelect: _view_zoomreset
},
null,
{
label: TU.translate("chart.view.showSectionsSeparator"),
label: translate("view.showSectionsSeparator"),
onSelect: _view_showeventSecSeparator,
icon: Options.charterShowSections ? 1 : 0
},
{
label: TU.translate("chart.view.showBeatsSeparator"),
label: translate("view.showBeatsSeparator"),
onSelect: _view_showeventBeatSeparator,
icon: Options.charterShowBeats ? 1 : 0
},
null,
{
label: 'Rainbow Waveforms',
label: translate("view.rainbowWaveforms"),
onSelect: _view_switchWaveformRainbow,
icon: Options.charterRainbowWaveforms ? 1 : 0
},
{
label: TU.translate("chart.view.lowDetailWaveforms"),
label: translate("view.lowDetailWaveforms"),
onSelect: _view_switchWaveformDetail,
icon: Options.charterLowDetailWaveforms ? 1 : 0
},
null,
{
label: "Scroll left",
label: translate("view.scrollLeft"),
keybind: [SHIFT, LEFT],
onSelect: _view_scrollleft
},
{
label: "Scroll right",
label: translate("view.scrollRight"),
keybind: [SHIFT, RIGHT],
onSelect: _view_scrollright
},
{
label: "Reset scroll",
label: translate("view.scrollReset"),
keybind: [SHIFT, DOWN],
onSelect: _view_scrollreset
}
]
},
{
label: TU.translate("chart.topBar.song"),
label: translate("topBar.song"),
childs: buildSongUI()
},
{
label: TU.translate("chart.topBar.note") + " >",
label: translate("topBar.note") + " >",
childs: buildNoteTypesUI()
},
{
label: TU.translate("chart.topBar.snap") + " >",
label: translate("topBar.snap") + " >",
childs: buildSnapsUI()
},
{
label: TU.translate("chart.topBar.playback") + " >",
label: translate("topBar.playback") + " >",
childs: [
{
label: TU.translate("chart.playback.play"),
label: translate("playback.play"),
keybind: [SPACE],
onSelect: _playback_play
},
null,
{
label: TU.translate("chart.playback.speedRaise", ["25"]),
label: translate("playback.speedRaise", ["25"]),
keybind: [PERIOD],
onSelect: _playback_speed_raise
},
{
label: TU.translate("chart.playback.speedReset"),
label: translate("playback.speedReset"),
onSelect: _playback_speed_reset
},
{
label: TU.translate("chart.playback.speedLower", ["25"]),
label: translate("playback.speedLower", ["25"]),
keybind: [COMMA],
onSelect: _playback_speed_lower
},
null,
{
label: TU.translate("chart.playback.sectionBack"),
label: translate("playback.sectionBack"),
keybind: [A],
onSelect: _playback_back
},
{
label: TU.translate("chart.playback.sectionForward"),
label: translate("playback.sectionForward"),
keybind: [D],
onSelect: _playback_forward
},
{
label: "Go to start of section",
label: translate("playback.sectionStart"),
keybind: [SHIFT, S],
onSelect: _playback_section_start
},
null,
{
label: "Go back a step",
label: translate("playback.backStep"),
keybind: [W],
onSelect: _playback_back_step
},
{
label: "Go forward a step",
label: translate("playback.forwardStep"),
keybind: [S],
onSelect: _playback_forward_step
},
null,
{
label: TU.translate("chart.playback.metronome"),
label: translate("playback.metronome"),
onSelect: _playback_metronome,
icon: Options.charterMetronomeEnabled ? 1 : 0
},
/*{
label: TU.translate("chart.playback.visualMetronome")
label: translate("playback.visualMetronome")
},*/
]
}
@@ -431,7 +428,7 @@ class Charter extends UIState {
gridBackdrops = new CharterBackdropGroup(strumLines);
gridBackdrops.notesGroup = this.notesGroup;
leftEventRowText = new UIText(0, -40, 0, "Local Events\n(Only This Difficulty)", 12);
leftEventRowText = new UIText(0, -40, 0, translate("info.localEvents"), 12);
leftEventRowText.alignment = "center"; leftEventRowText.alpha = 0.75;
leftEventsBackdrop = new EventBackdrop(false);
@@ -441,7 +438,7 @@ class Charter extends UIState {
leftEventsGroup.eventsBackdrop = leftEventsBackdrop;
leftEventsGroup.eventsRowText = leftEventRowText;
rightEventRowText = new UIText(0, -40, 0, "Global Events\n(All Difficulties)", 12);
rightEventRowText = new UIText(0, -40, 0, translate("info.globalEvents"), 12);
rightEventRowText.alignment = "center"; rightEventRowText.alpha = 0.75;
rightEventsBackdrop = new EventBackdrop(true);
@@ -469,7 +466,7 @@ class Charter extends UIState {
topMenuSpr = new UITopMenu(topMenu);
topMenuSpr.cameras = uiGroup.cameras = [uiCamera];
noteTypeText = new UIText(0, 0, 0, "(0) " + TU.translate("chart.noteTypes.default"));
noteTypeText = new UIText(0, 0, 0, "(0) " + translate("noteTypes.default"));
noteTypeText.cameras = [uiCamera];
scrollBar = new UIScrollBar(FlxG.width - 20, topMenuSpr.bHeight, 1000, 0, 100);
@@ -507,12 +504,12 @@ class Charter extends UIState {
autoSaveNotif = new CharterAutoSaveUI(20, strumlineInfoBG.y + strumlineInfoBG.height + 20);
uiGroup.add(autoSaveNotif);
strumlineAddButton = new CharterStrumlineButton("editors/new", TU.translate("chart.createNew"));
strumlineAddButton = new CharterStrumlineButton("editors/new", translate("createNew"));
strumlineAddButton.onClick = createStrumWithUI;
strumlineAddButton.animationOnClick = false;
strumlineAddButton.textColorLerp = 0.5;
strumlineLockButton = new CharterStrumlineButton("editors/charter/lock-strumline", TU.translate("chart.lock-unlock"));
strumlineLockButton = new CharterStrumlineButton("editors/charter/lock-strumline", translate("lock-unlock"));
strumlineLockButton.onClick = function () {
if (strumLines != null) {
strumLines.draggable = !strumLines.draggable;
@@ -782,7 +779,7 @@ class Charter extends UIState {
if (Options.charterAutoSavesSeparateFolder)
__autoSaveLocation = __diff.toLowerCase() + DateTools.format(Date.now(), "%m-%d_%H-%M");
var filename = !Options.charterAutoSavesSeparateFolder ? '${__diff.toLowerCase()}.json' : '${__autoSaveLocation}.json';
autoSaveNotif.startAutoSave(autoSaveTimer, TU.translate("chart.popup.savedChartAt", [filename]));
autoSaveNotif.startAutoSave(autoSaveTimer, translate("popup.savedChartAt", [filename]));
}
if (autoSaveTimer <= 0) {
autoSaveTimer = Options.charterAutoSaveTime;
@@ -1331,7 +1328,7 @@ class Charter extends UIState {
noteTypeText.x = noteTopButton.x + noteTopButton.bWidth + 6;
noteTypeText.y = Std.int((noteTopButton.bHeight - noteTypeText.height) / 2);
}
noteTypeText.text = '($noteType) ' + (noteTypes[noteType-1] == null ? TU.translate("chart.noteTypes.default") : noteTypes[noteType-1]);
noteTypeText.text = '($noteType) ' + (noteTypes[noteType-1] == null ? translate("noteTypes.default") : noteTypes[noteType-1]);
super.update(elapsed);
@@ -1431,7 +1428,7 @@ class Charter extends UIState {
super.onResize(width, height);
if (!UIState.resolutionAware) return;
if (width < FlxG.initialWidth || height < FlxG.initialHeight) {
if ((width < FlxG.initialWidth || height < FlxG.initialHeight) && !Options.bypassEditorsResize) {
width = FlxG.initialWidth; height = FlxG.initialHeight;
}
@@ -1854,7 +1851,7 @@ class Charter extends UIState {
}
if (FlxG.keys.pressed.SHIFT)
addBookmarkAt("New Bookmark", 0xFF911DD9, curStepFloat);
addBookmarkAt(translate("bookmarks.newBookmarkName"), 0xFF911DD9, curStepFloat);
else {
FlxG.state.openSubState(new CharterBookmarkCreation(curStepFloat, (success, n, c, s) -> {
if (success)
@@ -1943,22 +1940,22 @@ class Charter extends UIState {
var songTopButton:UITopMenuButton = topMenuSpr == null ? null : cast topMenuSpr.members[songIndex];
var newChilds:Array<UIContextMenuOption> = [
{
label: TU.translate("chart.song.goStart"),
label: translate("song.goStart"),
keybind: [HOME],
onSelect: _song_start
},
{
label: TU.translate("chart.song.goEnd"),
label: translate("song.goEnd"),
keybind: [END],
onSelect: _song_end
},
null,
{
label: "Add Bookmark Here",
label: translate("bookmarks.addBookmarkHere"),
onSelect: _bookmarks_add
},
{
label: "Edit Bookmark List",
label: translate("bookmarks.editBookmarkList"),
color: 0xFF959829, icon: 4,
onCreate: function (button:UIContextMenuOptionSpr) {button.label.offset.x = button.icon.offset.x = -2; button.icon.offset.y = -1;},
onSelect: _bookmarks_edit_list
@@ -1970,10 +1967,11 @@ class Charter extends UIState {
if (bookmarks.length > 0)
{
var goToBookmark = TU.getRaw("charter.bookmarks.goTo");
for (b in bookmarks)
{
newChilds.push({
label: "Go To \"" + b.name + "\"",
label: goToBookmark.format([b.name]),
onSelect: function(_) { Conductor.songPosition = Conductor.getTimeForStep(b.time); }
});
}
@@ -1982,12 +1980,12 @@ class Charter extends UIState {
newChilds.push({
label: TU.translate("chart.song.muteInst"),
label: translate("song.muteInst"),
onSelect: _song_muteinst
});
newChilds.push({
label: TU.translate("chart.song.muteVoices"),
label: translate("song.muteVoices"),
onSelect: _song_mutevoices
});
@@ -2045,16 +2043,16 @@ class Charter extends UIState {
var snapsTopButton:UITopMenuButton = topMenuSpr == null ? null : cast topMenuSpr.members[snapIndex];
var newChilds:Array<UIContextMenuOption> = [
{
label: TU.translate("chart.snap.increaseSnap"),
label: translate("snap.increaseSnap"),
keybind: [X],
onSelect: _snap_increasesnap
},
{
label: TU.translate("chart.snap.resetSnap"),
label: translate("snap.resetSnap"),
onSelect: _snap_resetsnap
},
{
label: TU.translate("chart.snap.decreaseSnap"),
label: translate("snap.decreaseSnap"),
keybind: [Z],
onSelect: _snap_decreasesnap
},
@@ -2133,29 +2131,29 @@ class Charter extends UIState {
var noteTopButton:UITopMenuButton = topMenuSpr == null ? null : cast topMenuSpr.members[noteIndex];
var newChilds:Array<UIContextMenuOption> = [
{
label: TU.translate("chart.note.addSustainLength"),
label: translate("note.addSustainLength"),
keybind: [E],
onSelect: _note_addsustain
},
{
label: TU.translate("chart.note.subtractSustainLength"),
label: translate("note.subtractSustainLength"),
keybind: [Q],
onSelect: _note_subtractsustain
},
null,
{
label: TU.translate("chart.note.selectAll"),
label: translate("note.selectAll"),
keybind: [CONTROL, A],
onSelect: _note_selectall
},
{
label: TU.translate("chart.note.selectMeasure"),
label: translate("note.selectMeasure"),
keybind: [CONTROL, SHIFT, A],
onSelect: _note_selectmeasure
},
null,
{
label: "(0) " + TU.translate("chart.noteTypes.default"),
label: "(0) " + translate("noteTypes.default"),
keybind: [ZERO],
onSelect: (_) -> {changeNoteType(0);},
icon: this.noteType == 0 ? 1 : 0
@@ -2175,7 +2173,7 @@ class Charter extends UIState {
newChilds.push(newChild);
}
newChilds.push({
label: TU.translate("chart.note.editNoteTypesList"),
label: translate("note.editNoteTypesList"),
color: 0xFF959829, icon: 4,
onCreate: function (button:UIContextMenuOptionSpr) {button.label.offset.x = button.icon.offset.x = -2;},
onSelect: editNoteTypesList
@@ -20,7 +20,7 @@ class CharterBookmarkCreation extends UISubstateWindow {
winWidth = 320;
winHeight = 250;
winTitle = 'Creating New Bookmark';
winTitle = TU.translate("charter.bookmarks.createBookmarkTitle");
callback = close;
@@ -39,22 +39,22 @@ class CharterBookmarkCreation extends UISubstateWindow {
super.create();
textBox = new UITextBox(windowSpr.x + 20, windowSpr.y + 70, "New Bookmark", 276);
textBox = new UITextBox(windowSpr.x + 20, windowSpr.y + 70, TU.translate("charter.bookmarks.newBookmarkName"), 276);
textBox.antialiasing = true;
add(textBox);
addLabelOn(textBox, "Bookmark Name:");
addLabelOn(textBox, TU.translate("charter.bookmarks.createBookmarkName"));
colorPicker = new UICompactColorwheel(textBox.x, textBox.y + textBox.bHeight + 34, flixel.util.FlxColor.RED);
add(colorPicker);
addLabelOn(colorPicker, "Bookmark Color:");
addLabelOn(colorPicker, TU.translate("charter.bookmarks.createBookmarkColor"));
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20 - 125, windowSpr.y + windowSpr.bHeight - 16 - 32, "Save & Close", function() {
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20 - 125, windowSpr.y + windowSpr.bHeight - 16 - 32, TU.translate("editor.saveClose"), function() {
callback(true, textBox.label.text, colorPicker.curColor, bookmarkStep);
close();
}, 125);
add(saveButton);
closeButton = new UIButton(saveButton.x - 20, saveButton.y, "Close", function() {
closeButton = new UIButton(saveButton.x - 20, saveButton.y, TU.translate("editor.close"), function() {
callback(false, "", FlxColor.TRANSPARENT, -1);
close();
}, 125);
@@ -12,14 +12,14 @@ class CharterBookmarkList extends UISubstateWindow {
FlxG.sound.music.pause();
Charter.instance.vocals.pause();
winTitle = 'Bookmark List Editor';
winTitle = TU.translate("charter.bookmarks.editBookmarkListTitle");
winWidth = 380;
winHeight = 390;
super.create();
var title:UIText;
add(title = new UIText(windowSpr.x + 20, windowSpr.y + 30 + 16, 0, "Edit Bookmarks", 28));
add(title = new UIText(windowSpr.x + 20, windowSpr.y + 30 + 16, 0, TU.translate("charter.bookmarks.editBookmarksTitle"), 28));
bookmarkList = new UIButtonList<BookmarkButton>(20, title.y + title.height + 10, winWidth - 40, 342 - 85 - 16, null, FlxPoint.get(winWidth - 40, (342 - 85 - 16)/4), null, 0);
bookmarkList.cameraSpacing = 0;
@@ -32,13 +32,13 @@ class CharterBookmarkList extends UISubstateWindow {
bookmarkList.content.remove(bookmarkList.addButton); //i dont need it
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20 - 125, windowSpr.y + windowSpr.bHeight - 16 - 32, "Save & Close", function() {
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20 - 125, windowSpr.y + windowSpr.bHeight - 16 - 32, TU.translate("editor.saveClose"), function() {
saveList();
close();
}, 125);
add(saveButton);
closeButton = new UIButton(saveButton.x - 20, saveButton.y, "Close", function() {
closeButton = new UIButton(saveButton.x - 20, saveButton.y, TU.translate("editor.close"), function() {
close();
}, 125);
add(closeButton);
@@ -15,7 +15,7 @@ class CharterEventAdd extends UISliceSprite {
this.global = flipX = global;
sideText = new UIText(0, -40, 0, global ? "Global Event" : "Local Event", 12);
sideText = new UIText(0, -40, 0, TU.translate("charter.eventType-" + (global ? "global" : "local")), 12);
sideText.alignment = "center"; sideText.alpha = 0.75;
text = new UIText(0, 0, 0, "");
@@ -37,7 +37,7 @@ class CharterEventAdd extends UISliceSprite {
public override function update(elapsed:Float) {
super.update(elapsed);
text.follow(this, global ? bWidth - text.width - (text.text == "Add event" ? 15 : 20) : 20, (bHeight - text.height) / 2);
text.follow(this, global ? bWidth - text.width - (text.text == TU.translate("charter.addEvent") ? 15 : 20) : 20, (bHeight - text.height) / 2);
sideText.follow(this, (bWidth/2) - (sideText.fieldWidth/2), -(sideText.height + 2));
alpha = sprAlpha * 0.75;
text.alpha = sprAlpha;
@@ -122,7 +122,7 @@ class CharterStrumlineScreen extends UISubstateWindow {
hudSpacingStepper = new UINumericStepper(hudScaleStepper.x + 80 - 32 + 26, hudScaleStepper.y, strumLine.strumSpacing != null ? strumLine.strumSpacing : 1, 0.001, 10, null, null, 84);
add(hudSpacingStepper);
addLabelOn(hudSpacingStepper, "Spacing");
addLabelOn(hudSpacingStepper, TU.translate("charterStrumLine.spacing"));
var strOffset:Float = strumLine.strumLinePos == null ? (strumLine.type == 1 ? 0.75 : 0.25) : strumLine.strumLinePos;
@@ -175,7 +175,7 @@ class CharterStrumlineScreen extends UISubstateWindow {
keyCountStepper = new UINumericStepper(stagePositionDropdown.x, vocalsSuffixDropDown.y, strumLine.keyCount != null ? strumLine.keyCount : 4, 1, 0, 1, 1000, 84);
// if (Flags.CHARTER_ADVANCED_SETTINGS) {
add(keyCountStepper);
addLabelOn(keyCountStepper, "Key Count");
addLabelOn(keyCountStepper, TU.translate("charterStrumLine.keyCount"));
// }
strumLineCam = new HudCamera();
@@ -140,10 +140,10 @@ class SongCreationScreen extends UISubstateWindow {
translate("voicesAudio"),
[new FlxTextFormatMarkerPair(new FlxTextFormat(0xFFAD1212), "$")]);*/
addLabelOn(voicesExplorer, "Vocal Audio File");
addLabelOn(voicesExplorer, translate("voicesAudio"));
importFrom = new UIButton(windowSpr.x + 20, windowSpr.y + windowSpr.bHeight - 16 - 32, "Import From...", function() {
winTitle = "Importing Song";
importFrom = new UIButton(windowSpr.x + 20, windowSpr.y + windowSpr.bHeight - 16 - 32, translate("importFrom"), function() {
winTitle = translate("win-title-importing");
isImporting = true;
updatePagesTexts();
refreshPages();
@@ -183,14 +183,14 @@ class SongCreationScreen extends UISubstateWindow {
{checkbox.y += 6; checkbox.x += 4;}
var menuTitle:UIText;
selectFormatGroup.add(menuTitle = new UIText(windowSpr.x + 20, windowSpr.y + 30 + 16, 0, "Import From:", 28));
selectFormatGroup.add(menuTitle = new UIText(windowSpr.x + 20, windowSpr.y + 30 + 16, 0, translate("importSource"), 28));
engineDropdown = new UIDropDown(menuTitle.x, menuTitle.y + menuTitle.height + 36, 480, 32, ["Psych/Legacy FNF", "V-Slice", "V-Slice Project (.fnfc)"]);
engineDropdown = new UIDropDown(menuTitle.x, menuTitle.y + menuTitle.height + 36, 480, 32, [translate("legacyOrPsych"), translate("vslice"), translate("vsliceProject")]);
selectFormatGroup.add(engineDropdown);
addLabelOn(engineDropdown, "Chart Format");
addLabelOn(engineDropdown, translate("importChartFormat"));
createSong = new UIButton(windowSpr.x + 20, windowSpr.y + windowSpr.bHeight - 16 - 32, "< Back", function() {
winTitle = "Creating New Song";
createSong = new UIButton(windowSpr.x + 20, windowSpr.y + windowSpr.bHeight - 16 - 32, "< " + translate("back"), function() {
winTitle = translate("win-title");
isImporting = false;
updatePagesTexts();
refreshPages();
@@ -198,7 +198,7 @@ class SongCreationScreen extends UISubstateWindow {
selectFormatGroup.add(createSong);
var menuTitle:UIText;
importAudioGroup.add(menuTitle = new UIText(windowSpr.x + 20, windowSpr.y + 30 + 16, 0, "Add Audios", 28));
importAudioGroup.add(menuTitle = new UIText(windowSpr.x + 20, windowSpr.y + 30 + 16, 0, translate("importAudios"), 28));
importInstExplorer = new UIFileExplorer(menuTitle.x, menuTitle.y + menuTitle.height + 36, null, null, Flags.SOUND_EXT, function (path, res) {
if (path == null || res == null) return;
@@ -207,8 +207,8 @@ class SongCreationScreen extends UISubstateWindow {
importInstExplorer.uiElement = audioPlayer;
});
importAudioGroup.add(importInstExplorer);
addLabelOn(importInstExplorer, "Inst Audio File").applyMarkup(
"Inst Audio File $* Required$",
addLabelOn(importInstExplorer, "").applyMarkup(
translate("instAudio"),
[new FlxTextFormatMarkerPair(new FlxTextFormat(0xFFAD1212), "$")]);
importVoicesExplorer = new UIFileExplorer(importInstExplorer.x + 320 + 26, importInstExplorer.y, null, null, Flags.SOUND_EXT, function (path, res) {
@@ -218,26 +218,26 @@ class SongCreationScreen extends UISubstateWindow {
importVoicesExplorer.uiElement = audioPlayer;
});
importAudioGroup.add(importVoicesExplorer);
addLabelOn(importVoicesExplorer, "Vocal Audio File");
addLabelOn(importVoicesExplorer, translate("voicesAudio"));
var menuTitle:UIText;
importDataGroup.add(menuTitle = new UIText(windowSpr.x + 20, windowSpr.y + 30 + 16, 0, "Add Data", 28));
importDataGroup.add(importIdTextBox = new UITextBox(menuTitle.x, menuTitle.y + menuTitle.height + 36));
addLabelOn(importIdTextBox, "Song file name").applyMarkup(
"Song file name $* Required$",
addLabelOn(importIdTextBox, "").applyMarkup(
translate("songFileName"),
[new FlxTextFormatMarkerPair(new FlxTextFormat(0xFFAD1212), "$")]);
importChartFile = new UIFileExplorer(importIdTextBox.x, importIdTextBox.y + importIdTextBox.height + 56, null, null, "fnfc", function (_, _) importIdTextBox.label.text = new haxe.io.Path(importChartFile.filePath).file);
importDataGroup.add(importChartFile);
addLabelOn(importChartFile, "Data/Chart File").applyMarkup(
"Data/Chart File $* Required$",
addLabelOn(importChartFile, "").applyMarkup(
translate("songDataFile"),
[new FlxTextFormatMarkerPair(new FlxTextFormat(0xFFAD1212), "$")]);
importMetaFile = new UIFileExplorer(importChartFile.x + 320 + 26, importChartFile.y, null, null, "json");
importDataGroup.add(importMetaFile);
addLabelOn(importMetaFile, "Meta File").applyMarkup(
"Meta File $* Required$",
addLabelOn(importMetaFile, "").applyMarkup(
translate("songMetaFile"),
[new FlxTextFormatMarkerPair(new FlxTextFormat(0xFFAD1212), "$")]);
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20 - 125, windowSpr.y + windowSpr.bHeight - 16 - 32, TU.translate("editor.saveClose"), function() {
@@ -291,7 +291,7 @@ class SongCreationScreen extends UISubstateWindow {
if (isImporting)
{
var name = engineDropdown.options[engineDropdown.index];
var project = name == "V-Slice Project (.fnfc)";
var project = name == translate("vsliceProject");
if (curPage == 1) {
importInstExplorer.selectable = importVoicesExplorer.selectable = !project;
@@ -299,7 +299,7 @@ class SongCreationScreen extends UISubstateWindow {
} else if (curPage == 2) {
importIdTextBox.selectable = !project;
importChartFile.fileType = project ? "fnfc" : "json";
importMetaFile.selectable = name == "V-Slice";
importMetaFile.selectable = name == translate("vslice");
saveButton.selectable = importChartFile.file != null && (!importMetaFile.selectable || importMetaFile.file != null) && (!importIdTextBox.selectable || importIdTextBox.label.text.trim().length > 0);
} else
saveButton.selectable = true;
@@ -331,7 +331,7 @@ class SongCreationScreen extends UISubstateWindow {
titleSpr.x = windowSpr.x + 25;
titleSpr.y = windowSpr.y + ((30 - titleSpr.height) / 2);
saveButton.field.text = curPage == pages.length-1 ? "Save & Close" : 'Next >';
saveButton.field.text = curPage == pages.length-1 ? TU.translate("editor.saveClose") : translate("next") + ' >';
titleSpr.text = '$winTitle (${curPage+1}/${pages.length})';
backButton.field.text = '< ' + translate("back");
@@ -358,9 +358,9 @@ class SongCreationScreen extends UISubstateWindow {
function saveSongInfo() {
if (isImporting)
{
try switch(engineDropdown.options[engineDropdown.index])
try switch(engineDropdown.index)
{
case "V-Slice Project (.fnfc)":
case 0 /*"V-Slice Project (.fnfc)"*/:
var files:Map<String, Any> = [];
for (field in new ZipReader(new BytesInput(importChartFile.file)).read()) {
var fileName = field.fileName;
@@ -368,7 +368,7 @@ class SongCreationScreen extends UISubstateWindow {
files.set(fileName, fileContent);
}
saveFromVSlice(files);
case "V-Slice":
case 1 /*"V-Slice"*/:
var songId = importIdTextBox.label.text;
var files:Map<String, Any> = [];
files.set('${songId}-metadata.json', importMetaFile.file);
@@ -43,7 +43,7 @@ class StageCreationScreen extends UISubstateWindow {
add(stagePathTextBox = new UITextBox(stageNameTextBox.x + 320 + 26, stageNameTextBox.y, "Stage Path"));
addLabelOn(stagePathTextBox, "Stage Path");
add(saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20 - 125, windowSpr.y + windowSpr.bHeight - 16 - 32, "Save & Close", function() {
add(saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20 - 125, windowSpr.y + windowSpr.bHeight - 16 - 32, TU.translate("editor.saveClose"), function() {
saveStageInfo();
close();
}, 125));
@@ -88,6 +88,14 @@ class UIContextMenu extends MusicBeatSubstate {
for(o in separators)
o.y -= bg.bHeight;
}
if (bg.x + bg.bWidth > FlxG.width && bg.x > FlxG.width*0.5) {
bg.x -= bg.bWidth;
for(o in contextMenuOptions)
o.x -= bg.bWidth;
for(o in separators)
o.x -= bg.bWidth;
}
}
public function select(option:UIContextMenuOption) {
+1 -1
View File
@@ -4,7 +4,7 @@ import flixel.system.scaleModes.StageSizeScaleMode;
class UIScaleMode extends StageSizeScaleMode {
override public function onMeasure(Width:Int, Height:Int):Void {
if (Width < FlxG.initialWidth || Height < FlxG.initialHeight) {
if ((Width < FlxG.initialWidth || Height < FlxG.initialHeight) && !Options.bypassEditorsResize) {
@:privateAccess {
FlxG.width = FlxG.initialWidth;
FlxG.height = FlxG.initialHeight;
@@ -283,7 +283,7 @@ class UISoftcodedWindow extends UISubstateWindow {
addLayout(getArr(layout.elements));
if(get("hasSaveButton")) {
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20, windowSpr.y + windowSpr.bHeight - 20, "Save & Close", function() {
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 20, windowSpr.y + windowSpr.bHeight - 20, TU.translate("editor.saveClose"), function() {
saveData();
close();
}, 125);
@@ -295,7 +295,7 @@ class UISoftcodedWindow extends UISubstateWindow {
if(get("hasCloseButton")) {
var x = saveButton != null ? saveButton.x - 20 : windowSpr.x + windowSpr.bWidth - 20;
var y = saveButton != null ? saveButton.y : windowSpr.y + windowSpr.bHeight - 20;
closeButton = new UIButton(x, y, "Close", function() {
closeButton = new UIButton(x, y, TU.translate("editor.close"), function() {
close();
}, 125);
if(saveButton != null)
+1
View File
@@ -56,6 +56,7 @@ class Options
public static var editorSFX:Bool = true;
public static var editorPrettyPrint:Bool = false;
public static var editorsResizable:Bool = true;
public static var bypassEditorsResize:Bool = false;
public static var maxUndos:Int = 120;
/**
@@ -44,12 +44,12 @@ class AppearanceOptions extends OptionsScreen {
}
#end
add(new Checkbox(
"Streamed Music",
"If checked, only musics will have streamed audio, ALSO freeing a LOT of memory with the downside of higher cpu usage if more audio are being streamed at once (EXPERIMENTAL). Turning this off will consume a lot of memory, especially on longer songs. If you aren't sure, leave this on.",
getName("streamedMusic"),
getDesc("streamedMusic"),
"streamedMusic"));
add(new Checkbox(
"Streamed Vocals",
"If checked, vocals will also be streamed if Streamed Music is checked, will impact the performance if the song uses alot of vocals (EXPERIMENTAL). If you aren't sure, leave this on.",
getName("streamedVocals"),
getDesc("streamedVocals"),
"streamedVocals"));
add(new Checkbox(
getName("autoPause"),
@@ -4,8 +4,8 @@ class MiscOptions extends OptionsScreen {
public override function new(title:String, desc:String) {
super(title, desc, "MiscOptions.");
add(new Checkbox(
"Developer Mode",
"If checked, you will be able to access developer features like certain keybinds, editors, developer options, state reloads, console and more.",
getName("devMode"),
getDesc("devMode"),
"devMode"));
#if UPDATE_CHECKING
add(new Checkbox(
@@ -100,18 +100,18 @@ class KeybindsOptions extends MusicBeatSubstate {
]
},
{
name: 'Volume',
name: translate("category.volume"),
settings: [
{
name: 'Up',
name: translate("up"),
control: 'VOLUME_UP'
},
{
name: 'Down',
name: translate("down"),
control: 'VOLUME_DOWN'
},
{
name: 'Mute',
name: translate("volume.mute"),
control: 'VOLUME_MUTE'
},
]
@@ -126,19 +126,19 @@ class KeybindsOptions extends MusicBeatSubstate {
]
},
{
name: 'Developer',
name: translate("category.developer"),
devModeOnly: true,
settings: [
{
name: 'Developer Menus',
name: translate("developer.devMenus"),
control: 'DEV_ACCESS'
},
{
name: 'Open Console',
name: translate("developer.openConsole"),
control: 'DEV_CONSOLE'
},
{
name: 'Reload State',
name: translate("developer.reloadState"),
control: 'DEV_RELOAD'
},
]