diff --git a/assets/shaders/engine/README.md b/assets/shaders/engine/README.md deleted file mode 100644 index d5534429..00000000 --- a/assets/shaders/engine/README.md +++ /dev/null @@ -1,3 +0,0 @@ -THOSE SHADERS ARE USED INTERNALLY BY THE ENGINE - -MODIFY THEM AT YOUR OWN RISK!! IF IT CRASHES IT AINT MY FAULT \ No newline at end of file diff --git a/source/funkin/backend/chart/BaseGameParser.hx b/source/funkin/backend/chart/BaseGameParser.hx new file mode 100644 index 00000000..c4367dfa --- /dev/null +++ b/source/funkin/backend/chart/BaseGameParser.hx @@ -0,0 +1,176 @@ +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 { + public static function parseChart(data:Dynamic, metaData:Dynamic, result:ChartData) { + // TO DO + } + + public static function parseMeta(data:Dynamic, result:ChartMetaData) { + var data:SwagMetadata = data; + result.name = data.songName; + result.artist = data.artist; + + result.customValues = {}; + result.customValues.timeChanges = data.timeChanges; + var firstTimeChng:SwagTimeChange = data.timeChanges[0]; + result.bpm = firstTimeChng.bpm; + result.beatsPerMeasure = firstTimeChng.b != null ? firstTimeChng.b : Constants.DEFAULT_BEATS_PER_MEASURE; + + result.difficulties = data.playData.difficulties.concat(data.playData.songVariations); + Reflect.deleteField(data.playData, "difficulties"); + + for (field in Reflect.fields(data.playData)) + Reflect.setProperty(result.customValues, field, Reflect.getProperty(data.playData, field)); + } + + public static function encodeMeta(meta:ChartMetaData, ?chart:ChartData):SwagMetadata { + var addVars:Dynamic = meta.customValues; + var defStage:String = addVars.stage != null ? addVars.stage : Constants.DEFAULT_STAGE; + var defChars:SwagCharactersList = addVars.characters != null ? addVars.characters : {player: Constants.DEFAULT_CHARACTER, girlfriend: Constants.DEFAULT_GIRLFRIEND, opponent: Constants.DEFAULT_OPPONENT}; + var defTimeCh:Array; + + if (addVars.timeChanges != null && addVars.timeChanges.length > 0) { + defTimeCh = addVars.timeChanges; + defTimeCh[0].bpm = meta.bpm; + } + else defTimeCh = [{bpm: meta.bpm, t: -1}]; + + if (chart != null) { + defStage = chart.stage; + + var done:Array = [false, false, false]; + for (strumLine in chart.strumLines) switch (strumLine.type) { + case OPPONENT: + if (!done[0]) { + done[0] = true; + defChars.opponent = strumLine.characters.getDefault([defChars.opponent])[0]; + } + case PLAYER: + if (!done[1]) { + done[1] = true; + defChars.player = strumLine.characters.getDefault([defChars.player])[0]; + } + case ADDITIONAL: + if (!done[3]) { + done[3] = true; + defChars.girlfriend = strumLine.characters.getDefault([defChars.girlfriend])[0]; + } + } + } + + var result:SwagMetadata = { + songName: meta.name, + timeFormat: MILLISECONDS, + artist: meta.artist, + timeChanges: defTimeCh, + looped: false, + generatedBy: 'Basegame Chart Importer (Codename Engine)', + version: Constants.BASEGAME_SONG_METADATA_VERSION, + playData: { + stage: defStage, + characters: defChars, + songVariations: addVars.songVariations != null ? [for (i in 0...addVars.songVariations.length) {meta.difficulties.remove(addVars.songVariations[i]); addVars.songVariations[i];}] : [], + difficulties: meta.difficulties, + noteStyle: addVars.noteStyle != null ? addVars.noteStyle : Constants.BASEGAME_DEFAULT_NOTE_STYLE, + album: addVars.album != null ? addVars.album : Constants.BASEGAME_DEFAULT_ALBUM_ID, + previewStart: addVars.previewStart != null ? addVars.previewStart : Constants.BASEGAME_DEFAULT_PREVIEW_START, + previewEnd: addVars.previewEnd != null ? addVars.previewEnd : Constants.BASEGAME_DEFAULT_PREVIEW_END + }, + }; + + return result; + return null; + } + + public static function encodeChart(chart:ChartData):NewSwagSong { + // TO DO + return null; + } +} + +// METADATA STRUCTURES +typedef SwagMetadata = +{ + var timeFormat:SwagTimeFormat; + var artist:String; + var songName:String; + var playData:SwagPlayData; + var timeChanges:Array; + var generatedBy:String; + var looped:Bool; + var version:String; + + var ?divisions:Int; + var ?offsets:SwagSongOffsets; +} + +enum abstract SwagTimeFormat(String) from String to String +{ + var TICKS = 'ticks'; + var FLOAT = 'float'; + var MILLISECONDS = 'ms'; +} + +typedef SwagTimeChange = +{ + var ?d:Int; // Time Signature Den + var ?n:Int; // Time Signature Num + var t:Int; // Time Stamp + var ?b:Int; // Beat Time + var ?bt:Array; // Beat Tuplets + var bpm:Float; +} + +typedef SwagPlayData = +{ + var album:String; + var previewStart:Int; + var previewEnd:Int; + var stage:String; + var characters:SwagCharactersList; + var songVariations:Array; + var difficulties:Array; + var noteStyle:String; +} + +typedef SwagCharactersList = +{ + var player:String; + var girlfriend:String; + var opponent:String; +} + +typedef SwagSongOffsets = +{ + var ?instrumental:Float; + var ?altInstrumentals:Dynamic; + var ?vocals:Dynamic; +} + +// CHART STRUCTURE +typedef NewSwagSong = +{ + var version:String; + var scrollSpeed:Dynamic; // Map + var events:Array; + var notes:Dynamic; // Map> + var generatedBy:String; +} + +typedef SwagEvent = +{ + var t:Float; // Time + var e:String; // Event Kind + var v:Dynamic; // Value (Map) +} + +typedef SwagNote = +{ + var t:Float; // Time + var d:Int; // Data + var l:Float; // Length + var k:String; // Kind +} \ No newline at end of file diff --git a/source/funkin/backend/chart/ChartData.hx b/source/funkin/backend/chart/ChartData.hx index 3f8f3302..c2d068e8 100644 --- a/source/funkin/backend/chart/ChartData.hx +++ b/source/funkin/backend/chart/ChartData.hx @@ -27,6 +27,7 @@ typedef ChartMetaData = { public var ?opponentModeAllowed:Bool; public var ?customValues:Dynamic; public var ?needsVoices:Bool; + public var ?artist:String; // NOT TO BE EXPORTED public var ?parsedColor:FlxColor; diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index 99fd0959..09acc704 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -239,6 +239,10 @@ class PlayState extends MusicBeatState * Current song name (lowercase) */ public var curSong:String = ""; + /** + * Current song name (lowercase and spaces to dashes) + */ + public var curSongID:String = ""; /** * Current stage name */ @@ -1016,6 +1020,7 @@ class PlayState extends MusicBeatState Conductor.changeBPM(songData.meta.bpm, cast songData.meta.beatsPerMeasure.getDefault(4), cast songData.meta.stepsPerBeat.getDefault(4)); curSong = songData.meta.name.toLowerCase(); + curSongID = curSong.replace(" ", "-"); inst = FlxG.sound.load(Paths.inst(SONG.meta.name, difficulty)); if (SONG.meta.needsVoices != false && Assets.exists(Paths.voices(SONG.meta.name, difficulty))) // null or true