From 1c6ec00d23b74366179ba6e5ca67ff0aec715007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=8D=9A=7ENex?= <87421482+NexIsDumb@users.noreply.github.com> Date: Tue, 1 Apr 2025 14:28:20 +0200 Subject: [PATCH] vslice bpm changes --- .../{BaseGameParser.hx => VSliceParser.hx} | 25 +++++++++++++++---- .../editors/charter/SongCreationScreen.hx | 8 +++--- 2 files changed, 24 insertions(+), 9 deletions(-) rename source/funkin/backend/chart/{BaseGameParser.hx => VSliceParser.hx} (94%) diff --git a/source/funkin/backend/chart/BaseGameParser.hx b/source/funkin/backend/chart/VSliceParser.hx similarity index 94% rename from source/funkin/backend/chart/BaseGameParser.hx rename to source/funkin/backend/chart/VSliceParser.hx index b05e7ca8..f5159b33 100644 --- a/source/funkin/backend/chart/BaseGameParser.hx +++ b/source/funkin/backend/chart/VSliceParser.hx @@ -3,7 +3,7 @@ package funkin.backend.chart; import funkin.backend.chart.ChartData.ChartMetaData; // These new structures are kinda a mess to port, i love and hate them at the same time; why the hell are every difficulty in the same file??? - Nex -class BaseGameParser { +class VSliceParser { public static function parseChart(data:Dynamic, metaData:Dynamic, events:Dynamic, result:ChartData) { // base fnf chart parsing var data:Array = data; @@ -38,16 +38,16 @@ class BaseGameParser { }); } - var firstTimeChange = metadata.timeChanges[0]; - result.meta.bpm = firstTimeChange.bpm; + var timeChanges = metadata.timeChanges; + result.meta.bpm = timeChanges[0].bpm; result.meta.needsVoices = true; for (note in data) { var daNoteType:Null = null; - if (note.k != null) + if (note.k != null) // TODO: check if kind is alt maybe - Nex daNoteType = Chart.addNoteType(result, note.k); - + var daNoteData:Int = Std.int(note.d % 8); var isMustHit:Bool = Math.floor(daNoteData / 4) == 0; @@ -59,6 +59,21 @@ class BaseGameParser { }); } + var curBPM = result.meta.bpm; + for (i in 1...timeChanges.length) // starting from 1 on purpose - Nex + { + var curChange = timeChanges[i]; + if (curBPM != curChange.bpm) + { + curBPM = curChange.bpm; + result.events.push({ + time: curChange.t, + name: "BPM Change", + params: [curBPM] + }); + } + } + for (event in events) { switch (event.e) diff --git a/source/funkin/editors/charter/SongCreationScreen.hx b/source/funkin/editors/charter/SongCreationScreen.hx index 8dd5864c..2fdf9ee9 100644 --- a/source/funkin/editors/charter/SongCreationScreen.hx +++ b/source/funkin/editors/charter/SongCreationScreen.hx @@ -3,7 +3,7 @@ package funkin.editors.charter; import flixel.group.FlxGroup; import flixel.text.FlxText.FlxTextFormat; import flixel.text.FlxText.FlxTextFormatMarkerPair; -import funkin.backend.chart.BaseGameParser; +import funkin.backend.chart.VSliceParser; import funkin.backend.chart.ChartData; import funkin.backend.utils.ZipUtil; import haxe.Json; @@ -415,10 +415,10 @@ class SongCreationScreen extends UISubstateWindow { displayName: vslicemeta.songName, icon: Flags.DEFAULT_HEALTH_ICON, color: "#FFFFFF", - parsedColor: 0xFFFFFF, + //parsedColor: 0xFFFFFF, opponentModeAllowed: true, coopAllowed: true, - difficulties: difficulties, + difficulties: difficulties }; if (onSave != null) onSave({ @@ -445,7 +445,7 @@ class SongCreationScreen extends UISubstateWindow { codenameChart: true, fromMods: Paths.assetsTree.existsSpecific(chartPath, "TEXT", MODS) }; - BaseGameParser.parseChart(vsliceChartData, vslicemeta, vslicechart.events, base); + VSliceParser.parseChart(vsliceChartData, vslicemeta, vslicechart.events, base); CoolUtil.safeSaveFile('$songFolder/charts/$diff.json', Json.stringify(base, Flags.JSON_PRETTY_PRINT)); } #end