fixed tutorial and additional stuff
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
2355
|
||||
2366
|
||||
@@ -1,10 +1,17 @@
|
||||
package funkin.chart;
|
||||
|
||||
import funkin.chart.ChartData;
|
||||
import flixel.util.FlxColor;
|
||||
import haxe.io.Path;
|
||||
import funkin.system.Song.SwagSong;
|
||||
import haxe.Json;
|
||||
import openfl.utils.Assets;
|
||||
|
||||
#if sys
|
||||
import sys.io.File;
|
||||
import sys.FileSystem;
|
||||
#end
|
||||
|
||||
using StringTools;
|
||||
|
||||
class Chart {
|
||||
public static function loadChartMeta(songName:String, difficulty:String = "normal") {
|
||||
@@ -90,7 +97,7 @@ class Chart {
|
||||
}
|
||||
|
||||
if (Reflect.hasField(data, "codenameChart") && Reflect.field(data, "codenameChart") == true) {
|
||||
return cast data;
|
||||
base = data;
|
||||
} else {
|
||||
// base fnf chart parsing
|
||||
var data:SwagSong = data;
|
||||
@@ -168,7 +175,7 @@ class Chart {
|
||||
time: daStrumTime,
|
||||
id: daNoteData % 4,
|
||||
type: daNoteType,
|
||||
sustainLength: note[2]
|
||||
sLen: note[2]
|
||||
});
|
||||
}
|
||||
|
||||
@@ -198,89 +205,61 @@ class Chart {
|
||||
return chart.noteTypes.length;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
typedef ChartData = {
|
||||
public var strumLines:Array<ChartStrumLine>;
|
||||
public var events:Array<ChartEvent>;
|
||||
public var meta:ChartMetaData;
|
||||
public var codenameChart:Bool;
|
||||
public var stage:String;
|
||||
public var scrollSpeed:Float;
|
||||
public var fromMods:Bool;
|
||||
public var noteTypes:Array<String>;
|
||||
}
|
||||
|
||||
typedef ChartMetaData = {
|
||||
public var name:String;
|
||||
public var bpm:Float;
|
||||
public var ?displayName:String;
|
||||
public var ?beatsPerMesure:Float;
|
||||
public var ?stepsPerBeat:Float;
|
||||
public var ?needsVoices:Bool;
|
||||
public var ?icon:String;
|
||||
public var ?color:Dynamic;
|
||||
public var ?difficulties:Array<String>;
|
||||
public var ?coopAllowed:Bool;
|
||||
public var ?opponentModeAllowed:Bool;
|
||||
|
||||
// NOT TO BE EXPORTED
|
||||
public var ?parsedColor:FlxColor;
|
||||
}
|
||||
|
||||
typedef ChartStrumLine = {
|
||||
var characters:Array<String>;
|
||||
var opponent:Bool;
|
||||
var notes:Array<ChartNote>;
|
||||
var position:String;
|
||||
var ?strumLinePos:Float; // 0.25 = default opponent pos, 0.75 = default boyfriend pos
|
||||
var ?visible:Null<Bool>;
|
||||
}
|
||||
|
||||
typedef ChartNote = {
|
||||
var time:Float; // time at which the note will be hit (ms)
|
||||
var id:Int; // strum id of the note
|
||||
var type:Int; // type (int) of the note
|
||||
var sustainLength:Float; // sustain length of the note (ms)
|
||||
}
|
||||
|
||||
typedef ChartEvent = {
|
||||
var time:Float;
|
||||
var type:ChartEventType;
|
||||
var params:Array<Dynamic>;
|
||||
}
|
||||
|
||||
@:enum
|
||||
abstract ChartEventType(Int) from Int to Int {
|
||||
/**
|
||||
* CUSTOM EVENT
|
||||
* Params:
|
||||
* - Function Name (String)
|
||||
* - Function Parameters...
|
||||
*/
|
||||
var CUSTOM = -1;
|
||||
/**
|
||||
* NO EVENT, MADE FOR UNKNOWN EVENTS / EVENTS THAT CANNOT BE PARSED
|
||||
*/
|
||||
var NONE = 0;
|
||||
/**
|
||||
* CAMERA MOVEMENT EVENT
|
||||
* Params:
|
||||
* - Target Strumline ID (Int)
|
||||
*/
|
||||
var CAM_MOVEMENT = 1;
|
||||
|
||||
/**
|
||||
* BPM CHANGE EVENT
|
||||
* Params:
|
||||
* - Target BPM (Float)
|
||||
* Saves the chart to the specific song folder path.
|
||||
* @param songFolderPath Path to the song folder (ex: `mods/your mod/songs/song/`)
|
||||
* @param chart Chart to save
|
||||
* @param difficulty Name of the difficulty
|
||||
* @param saveSettings
|
||||
* @return Filtered chart used for saving.
|
||||
*/
|
||||
var BPM_CHANGE = 2;
|
||||
/**
|
||||
* ALT ANIM TOGGLE
|
||||
* Params:
|
||||
* - Strum Line which is going to be toggled (Int)
|
||||
* - Whenever its going to be toggled or not (Bool)
|
||||
*/
|
||||
var ALT_ANIM_TOGGLE = 3;
|
||||
public static function save(songFolderPath:String, chart:ChartData, difficulty:String = "normal", ?saveSettings:ChartSaveSettings):ChartData {
|
||||
if (saveSettings == null) saveSettings = {};
|
||||
|
||||
var filteredChart = filterChartForSaving(chart, saveSettings.saveMetaInChart);
|
||||
var meta = filteredChart.meta;
|
||||
|
||||
// idk how null reacts to it so better be sure
|
||||
|
||||
#if sys
|
||||
if (!FileSystem.exists('${songFolderPath}\\charts\\'))
|
||||
FileSystem.createDirectory('${songFolderPath}\\charts\\');
|
||||
|
||||
var chartPath = '${songFolderPath}\\charts\\${difficulty.trim()}.json';
|
||||
var metaPath = '${songFolderPath}\\meta.json';
|
||||
|
||||
File.saveContent(chartPath, Json.stringify(filteredChart, null, saveSettings.prettyPrint == true ? "\t" : null));
|
||||
|
||||
if (saveSettings.overrideExistingMeta == true || !FileSystem.exists(metaPath))
|
||||
File.saveContent(metaPath, Json.stringify(meta, null, saveSettings.prettyPrint == true ? "\t" : null));
|
||||
#end
|
||||
return filteredChart;
|
||||
}
|
||||
|
||||
public static function filterChartForSaving(chart:ChartData, ?saveMetaInChart:Null<Bool>):ChartData {
|
||||
var data = Reflect.copy(chart); // make a copy of the chart to leave the OG intact
|
||||
if (saveMetaInChart != true) {
|
||||
data.meta = null;
|
||||
} else {
|
||||
data.meta = Reflect.copy(chart.meta); // also make a copy of the metadata to leave the OG intact.
|
||||
if (data.meta != null) data.meta.parsedColor = null;
|
||||
}
|
||||
|
||||
data.fromMods = null;
|
||||
|
||||
var sortedData:Dynamic = {};
|
||||
for(f in Reflect.fields(data)) {
|
||||
var v = Reflect.field(data, f);
|
||||
if (v != null)
|
||||
Reflect.setField(sortedData, f, v);
|
||||
}
|
||||
return sortedData;
|
||||
}
|
||||
}
|
||||
|
||||
typedef ChartSaveSettings = {
|
||||
var ?overrideExistingMeta:Bool;
|
||||
var ?saveMetaInChart:Bool;
|
||||
var ?prettyPrint:Bool;
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package funkin.chart;
|
||||
|
||||
import flixel.util.FlxColor;
|
||||
|
||||
typedef ChartData = {
|
||||
public var strumLines:Array<ChartStrumLine>;
|
||||
public var events:Array<ChartEvent>;
|
||||
public var meta:ChartMetaData;
|
||||
public var codenameChart:Bool;
|
||||
public var stage:String;
|
||||
public var scrollSpeed:Float;
|
||||
public var noteTypes:Array<String>;
|
||||
|
||||
public var ?fromMods:Bool;
|
||||
}
|
||||
|
||||
typedef ChartMetaData = {
|
||||
public var name:String;
|
||||
public var bpm:Float;
|
||||
public var ?displayName:String;
|
||||
public var ?beatsPerMesure:Float;
|
||||
public var ?stepsPerBeat:Float;
|
||||
public var ?needsVoices:Bool;
|
||||
public var ?icon:String;
|
||||
public var ?color:Dynamic;
|
||||
public var ?difficulties:Array<String>;
|
||||
public var ?coopAllowed:Bool;
|
||||
public var ?opponentModeAllowed:Bool;
|
||||
|
||||
// NOT TO BE EXPORTED
|
||||
public var ?parsedColor:FlxColor;
|
||||
}
|
||||
|
||||
typedef ChartStrumLine = {
|
||||
var characters:Array<String>;
|
||||
var opponent:Bool;
|
||||
var notes:Array<ChartNote>;
|
||||
var position:String;
|
||||
var ?strumLinePos:Float; // 0.25 = default opponent pos, 0.75 = default boyfriend pos
|
||||
var ?visible:Null<Bool>;
|
||||
}
|
||||
|
||||
typedef ChartNote = {
|
||||
var time:Float; // time at which the note will be hit (ms)
|
||||
var id:Int; // strum id of the note
|
||||
var type:Int; // type (int) of the note
|
||||
var sLen:Float; // sustain length of the note (ms)
|
||||
}
|
||||
|
||||
typedef ChartEvent = {
|
||||
var time:Float;
|
||||
var type:ChartEventType;
|
||||
var params:Array<Dynamic>;
|
||||
}
|
||||
|
||||
@:enum
|
||||
abstract ChartEventType(Int) from Int to Int {
|
||||
/**
|
||||
* CUSTOM EVENT
|
||||
* Params:
|
||||
* - Function Name (String)
|
||||
* - Function Parameters...
|
||||
*/
|
||||
var CUSTOM = -1;
|
||||
/**
|
||||
* NO EVENT, MADE FOR UNKNOWN EVENTS / EVENTS THAT CANNOT BE PARSED
|
||||
*/
|
||||
var NONE = 0;
|
||||
/**
|
||||
* CAMERA MOVEMENT EVENT
|
||||
* Params:
|
||||
* - Target Strumline ID (Int)
|
||||
*/
|
||||
var CAM_MOVEMENT = 1;
|
||||
|
||||
/**
|
||||
* BPM CHANGE EVENT
|
||||
* Params:
|
||||
* - Target BPM (Float)
|
||||
*/
|
||||
var BPM_CHANGE = 2;
|
||||
/**
|
||||
* ALT ANIM TOGGLE
|
||||
* Params:
|
||||
* - Strum Line which is going to be toggled (Int)
|
||||
* - Whenever its going to be toggled or not (Bool)
|
||||
*/
|
||||
var ALT_ANIM_TOGGLE = 3;
|
||||
}
|
||||
@@ -3,7 +3,6 @@ package funkin.cutscenes;
|
||||
import flixel.system.FlxSound;
|
||||
import flixel.FlxG;
|
||||
import flixel.FlxCamera;
|
||||
import openfl.utils.Assets;
|
||||
import funkin.cutscenes.dialogue.*;
|
||||
import haxe.xml.Access;
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ package funkin.cutscenes;
|
||||
import flixel.FlxSprite;
|
||||
import flixel.FlxG;
|
||||
import flixel.FlxCamera;
|
||||
import openfl.utils.Assets;
|
||||
|
||||
/**
|
||||
* Substate made for video cutscenes. To use it in a scripted cutscene, call `startVideo`.
|
||||
|
||||
@@ -2,7 +2,6 @@ package funkin.cutscenes.dialogue;
|
||||
|
||||
import flixel.addons.text.FlxTypeText;
|
||||
import flixel.text.FlxText;
|
||||
import openfl.utils.Assets;
|
||||
import flixel.FlxG;
|
||||
import flixel.math.FlxPoint;
|
||||
import haxe.xml.Access;
|
||||
|
||||
@@ -2,7 +2,6 @@ package funkin.cutscenes.dialogue;
|
||||
|
||||
import flixel.tweens.FlxEase;
|
||||
import flixel.tweens.FlxTween;
|
||||
import openfl.utils.Assets;
|
||||
import haxe.xml.Access;
|
||||
|
||||
class DialogueCharacter extends FunkinSprite {
|
||||
|
||||
@@ -14,7 +14,6 @@ import flixel.animation.FlxBaseAnimation;
|
||||
import flixel.graphics.frames.FlxAtlasFrames;
|
||||
import flixel.math.FlxRect;
|
||||
|
||||
import openfl.utils.Assets;
|
||||
import haxe.xml.Access;
|
||||
import haxe.Exception;
|
||||
import haxe.io.Path;
|
||||
@@ -258,9 +257,17 @@ class Character extends FunkinSprite implements IBeatReceiver implements IOffset
|
||||
*/
|
||||
public var danceOnBeat:Bool = true;
|
||||
|
||||
/**
|
||||
* Interval at which the character will dance (higher number = slower dance)
|
||||
*/
|
||||
public var danceInterval:Int = 1;
|
||||
|
||||
public override function beatHit(curBeat:Int) {
|
||||
script.call("beatHit", [curBeat]);
|
||||
if (danceOnBeat && !__lockAnimThisFrame) {
|
||||
if (danceInterval < 1)
|
||||
danceInterval = 1;
|
||||
|
||||
if (danceOnBeat && curBeat % danceInterval == 0 && !__lockAnimThisFrame) {
|
||||
tryDance();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package funkin.game;
|
||||
|
||||
import flixel.FlxSprite;
|
||||
import openfl.utils.Assets;
|
||||
|
||||
class HealthIcon extends FlxSprite
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package funkin.game;
|
||||
|
||||
import funkin.chart.Chart.ChartNote;
|
||||
import openfl.utils.Assets;
|
||||
import funkin.chart.Chart;
|
||||
import funkin.chart.ChartData;
|
||||
import flixel.FlxG;
|
||||
import flixel.FlxCamera;
|
||||
import flixel.FlxSprite;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package funkin.game;
|
||||
|
||||
import funkin.chart.Chart;
|
||||
import funkin.chart.ChartData;
|
||||
import funkin.game.SplashHandler;
|
||||
import funkin.scripting.DummyScript;
|
||||
import funkin.menus.StoryMenuState.WeekData;
|
||||
@@ -234,7 +235,7 @@ class PlayState extends MusicBeatState
|
||||
/**
|
||||
* Interval at which Girlfriend dances.
|
||||
*/
|
||||
public var gfSpeed:Int = 1;
|
||||
public var gfSpeed(get, set):Int;
|
||||
|
||||
/**
|
||||
* Current health. Goes from 0 to maxHealth (defaults to 2)
|
||||
@@ -937,7 +938,7 @@ class PlayState extends MusicBeatState
|
||||
* Returns the Discord RPC icon.
|
||||
*/
|
||||
public inline function getIconRPC():String
|
||||
return (dad != null ? (dad.icon != null ? dad.icon : dad.curCharacter) : null);
|
||||
return SONG.meta.icon;
|
||||
|
||||
var __songPlaying:Bool = false;
|
||||
var __wasAutoPause:Bool = false;
|
||||
@@ -1579,9 +1580,6 @@ class PlayState extends MusicBeatState
|
||||
iconP1.updateHitbox();
|
||||
iconP2.updateHitbox();
|
||||
|
||||
if (gf != null && curBeat % gfSpeed == 0)
|
||||
gf.tryDance();
|
||||
|
||||
scripts.call("beatHit", [curBeat]);
|
||||
}
|
||||
|
||||
@@ -1629,6 +1627,13 @@ class PlayState extends MusicBeatState
|
||||
return players[0];
|
||||
private inline function get_playerStrums():StrumLine
|
||||
return players[1];
|
||||
private inline function get_gfSpeed():Int
|
||||
return (players[2] != null && players[2].characters[0] != null) ? players[2].characters[0].danceInterval : 1;
|
||||
private inline function set_gfSpeed(v:Int):Int {
|
||||
if (players[2] != null && players[2].characters[0] != null)
|
||||
players[2].characters[0].danceInterval = v;
|
||||
return v;
|
||||
}
|
||||
}
|
||||
|
||||
class ComboRating {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package funkin.game;
|
||||
|
||||
import flixel.FlxG;
|
||||
import openfl.utils.Assets;
|
||||
import haxe.xml.Access;
|
||||
import flixel.group.FlxGroup.FlxTypedGroup;
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ import funkin.options.Options;
|
||||
import flixel.FlxG;
|
||||
import flixel.FlxState;
|
||||
import flixel.FlxSprite;
|
||||
import openfl.utils.Assets;
|
||||
import haxe.xml.Access;
|
||||
import flixel.FlxBasic;
|
||||
import flixel.math.FlxMath;
|
||||
|
||||
@@ -2,7 +2,8 @@ package funkin.game;
|
||||
|
||||
import funkin.scripting.events.SimpleNoteEvent;
|
||||
import funkin.system.Conductor;
|
||||
import funkin.chart.Chart.ChartStrumLine;
|
||||
import funkin.chart.Chart;
|
||||
import funkin.chart.ChartData;
|
||||
import funkin.system.Controls;
|
||||
import funkin.scripting.events.StrumCreationEvent;
|
||||
import flixel.group.FlxGroup.FlxTypedGroup;
|
||||
@@ -65,12 +66,12 @@ class StrumLine extends FlxTypedGroup<Strum> {
|
||||
if (strumLine.notes != null) for(note in strumLine.notes) {
|
||||
notes.add(new Note(this, note, false));
|
||||
|
||||
if (note.sustainLength > Conductor.stepCrochet * 0.75) {
|
||||
var len:Float = note.sustainLength;
|
||||
if (note.sLen > Conductor.stepCrochet * 0.75) {
|
||||
var len:Float = note.sLen;
|
||||
var curLen:Float = 0;
|
||||
while(len > 10) {
|
||||
curLen = Math.min(len, Conductor.stepCrochet);
|
||||
notes.add(new Note(this, note, true, curLen, note.sustainLength - len));
|
||||
notes.add(new Note(this, note, true, curLen, note.sLen - len));
|
||||
len -= curLen;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,9 +7,10 @@ import funkin.system.FunkinSprite;
|
||||
import funkin.utils.*;
|
||||
import funkin.system.Logs;
|
||||
import funkin.game.PlayState;
|
||||
|
||||
import funkin.scripting.EventManager;
|
||||
|
||||
import openfl.utils.Assets;
|
||||
|
||||
using StringTools;
|
||||
using funkin.utils.CoolUtil;
|
||||
#end
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package funkin.menus;
|
||||
|
||||
import funkin.chart.Chart;
|
||||
import funkin.chart.Chart.ChartMetaData;
|
||||
import funkin.chart.ChartData;
|
||||
import haxe.io.Path;
|
||||
import flash.text.TextField;
|
||||
import flixel.FlxG;
|
||||
@@ -244,6 +244,9 @@ class FreeplayState extends MusicBeatState
|
||||
FlxG.switchState(new MainMenuState());
|
||||
}
|
||||
|
||||
if (FlxG.keys.justPressed.EIGHT && Sys.args().contains("-livereload"))
|
||||
convertChart();
|
||||
|
||||
if (controls.ACCEPT && !dontPlaySongThisFrame)
|
||||
select();
|
||||
}
|
||||
@@ -271,6 +274,12 @@ class FreeplayState extends MusicBeatState
|
||||
FlxG.switchState(new PlayState());
|
||||
}
|
||||
|
||||
public function convertChart() {
|
||||
trace('Converting ${songs[curSelected].name} (${songs[curSelected].difficulties[curDifficulty]}) to Codename format...');
|
||||
var chart = Chart.parse(songs[curSelected].name, songs[curSelected].difficulties[curDifficulty]);
|
||||
Chart.save('${Main.pathBack}assets/songs/${songs[curSelected].name}', chart, songs[curSelected].difficulties[curDifficulty].toLowerCase());
|
||||
}
|
||||
|
||||
/**
|
||||
* Changes the current difficulty
|
||||
* @param change How much to change.
|
||||
|
||||
@@ -7,7 +7,6 @@ import flixel.graphics.frames.FlxFramesCollection;
|
||||
import flixel.group.FlxGroup.FlxTypedGroup;
|
||||
import funkin.game.Highscore;
|
||||
import flixel.tweens.FlxTween;
|
||||
import openfl.utils.Assets;
|
||||
import flixel.FlxG;
|
||||
import flixel.math.FlxMath;
|
||||
import flixel.util.FlxColor;
|
||||
|
||||
@@ -5,7 +5,6 @@ import funkin.menus.TitleState;
|
||||
import funkin.system.Main;
|
||||
import openfl.utils.AssetCache;
|
||||
import flixel.util.FlxSignal.FlxTypedSignal;
|
||||
import openfl.utils.Assets;
|
||||
import openfl.utils.AssetManifest;
|
||||
import openfl.utils.AssetLibrary;
|
||||
import flixel.graphics.FlxGraphic;
|
||||
|
||||
@@ -4,7 +4,6 @@ import lime.app.Application;
|
||||
import flixel.util.FlxDestroyUtil.IFlxDestroyable;
|
||||
import flixel.FlxBasic;
|
||||
import haxe.io.Path;
|
||||
import openfl.utils.Assets;
|
||||
|
||||
/**
|
||||
* Class used for scripting.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package funkin.system;
|
||||
|
||||
import funkin.mods.ModsAssetLibrary;
|
||||
import openfl.utils.Assets;
|
||||
import lime.utils.AssetLibrary;
|
||||
|
||||
class AssetsLibraryList extends AssetLibrary {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package funkin.system;
|
||||
|
||||
import funkin.chart.Chart;
|
||||
import funkin.chart.ChartData;
|
||||
import flixel.math.FlxMath;
|
||||
import openfl.Lib;
|
||||
import flixel.FlxState;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package funkin.system;
|
||||
|
||||
import flixel.FlxG;
|
||||
import openfl.utils.Assets;
|
||||
import haxe.io.Path;
|
||||
import funkin.scripting.events.PlayAnimEvent.PlayAnimContext;
|
||||
import funkin.interfaces.IOffsetCompatible;
|
||||
|
||||
@@ -116,6 +116,14 @@ class Main extends Sprite
|
||||
public static var audioDisconnected:Bool = false;
|
||||
|
||||
public static var changeID:Int = 0;
|
||||
public static var pathBack = #if windows
|
||||
"../../../../"
|
||||
#elseif mac
|
||||
"../../../../../../../"
|
||||
#else
|
||||
""
|
||||
#end;
|
||||
public static var startedFromSource:Bool = false;
|
||||
|
||||
|
||||
private static var __threadCycle:Int = 0;
|
||||
@@ -156,15 +164,7 @@ class Main extends Sprite
|
||||
#end
|
||||
|
||||
#if sys
|
||||
if (Sys.args().contains("-livereload")) {
|
||||
var pathBack = #if windows
|
||||
"../../../../"
|
||||
#elseif mac
|
||||
"../../../../../../../"
|
||||
#else
|
||||
""
|
||||
#end;
|
||||
|
||||
if (startedFromSource = Sys.args().contains("-livereload")) {
|
||||
#if USE_SOURCE_ASSETS
|
||||
#if windows
|
||||
trace("Used lime test windows. Switching into source assets.");
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package funkin.ui;
|
||||
|
||||
import openfl.utils.Assets;
|
||||
import openfl.utils.AssetLibrary;
|
||||
import haxe.xml.Access;
|
||||
import funkin.mods.LimeLibrarySymbol;
|
||||
|
||||
@@ -2,7 +2,6 @@ package funkin.utils;
|
||||
|
||||
import funkin.scripting.events.DiscordPresenceUpdateEvent;
|
||||
import haxe.Json;
|
||||
import openfl.utils.Assets;
|
||||
import flixel.system.FlxSound;
|
||||
#if DISCORD_RPC
|
||||
import discord_rpc.DiscordRpc;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package funkin.utils;
|
||||
|
||||
import openfl.utils.Assets;
|
||||
|
||||
/**
|
||||
* DOESNT SUPPORT CATEGORIES YET!!
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package funkin.utils;
|
||||
|
||||
import openfl.utils.Assets;
|
||||
import lime.app.Application;
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user