From 80cd593113db07a024319080be8310a45854b1a8 Mon Sep 17 00:00:00 2001 From: swordcube <49110074+swordcube@users.noreply.github.com> Date: Mon, 26 Feb 2024 21:50:53 -0600 Subject: [PATCH] Chart events can now be saved into a separate JSON file --- source/funkin/backend/chart/Chart.hx | 28 ++++++++++++++++++++++++ source/funkin/editors/charter/Charter.hx | 13 +++++++++++ 2 files changed, 41 insertions(+) diff --git a/source/funkin/backend/chart/Chart.hx b/source/funkin/backend/chart/Chart.hx index 793928ca..ae6d62df 100644 --- a/source/funkin/backend/chart/Chart.hx +++ b/source/funkin/backend/chart/Chart.hx @@ -18,6 +18,24 @@ class Chart { */ public inline static var defaultColor:FlxColor = 0xFF9271FD; + public static function loadEventsJson(songName:String, difficulty:String = "normal") { + var eventsPath = Paths.file('songs/${songName.toLowerCase()}/events.json'); + var eventsDiffPath = Paths.file('songs/${songName.toLowerCase()}/events-${difficulty.toLowerCase()}.json'); + + var data:Array = null; + for(path in [eventsDiffPath, eventsPath]) { + if (Assets.exists(path)) { + try { + data = Json.parse(Assets.getText(path)).events; + } catch(e) { + Logs.trace('Failed to load song event data for ${songName} ($path): ${Std.string(e)}', ERROR); + } + if (data != null) break; + } + } + return data; + } + public static function loadChartMeta(songName:String, difficulty:String = "normal", fromMods:Bool = true) { var metaPath = Paths.file('songs/${songName.toLowerCase()}/meta.json'); var metaDiffPath = Paths.file('songs/${songName.toLowerCase()}/meta-${difficulty.toLowerCase()}.json'); @@ -145,6 +163,16 @@ class Chart { } base.meta = loadedMeta; } + + /** + * events.json + events-diff.json LOADING + */ + #if REGION + var extraEvents:Array = loadEventsJson(songName, difficulty); + if (extraEvents != null) + base.events = base.events.concat(extraEvents); + #end + return base; } diff --git a/source/funkin/editors/charter/Charter.hx b/source/funkin/editors/charter/Charter.hx index 5c1efe3d..28c25d05 100644 --- a/source/funkin/editors/charter/Charter.hx +++ b/source/funkin/editors/charter/Charter.hx @@ -137,6 +137,11 @@ class Charter extends UIState { keybind: [CONTROL, ALT ,SHIFT, S], onSelect: _file_meta_saveas, }, + { + label: "Save Events", + keybind: [CONTROL, TAB, S], + onSelect: _file_events_save, + }, null, { label: "Exit", @@ -1131,6 +1136,14 @@ class Charter extends UIState { })); } + function _file_events_save(_) { + #if sys + openSubState(new SaveSubstate(Json.stringify({events: PlayState.SONG.events}), { + defaultSaveFile: 'events-${__diff.toLowerCase()}.json' + })); + #end + } + #if sys function saveTo(path:String) { buildChart();