From 6f8330f91bfa2e082228104589d37d63ff5b7be7 Mon Sep 17 00:00:00 2001 From: Frakits Date: Sat, 19 Jul 2025 14:40:40 +0300 Subject: [PATCH] h --- assets/data/config/modpack.ini | 25 -------- source/funkin/backend/system/Flags.hx | 51 ++++++++++++--- source/funkin/backend/utils/DiscordUtil.hx | 4 ++ source/funkin/editors/ModConfigWarning.hx | 74 ++++++++++++++++++++++ source/funkin/menus/MainMenuState.hx | 20 ++++++ 5 files changed, 139 insertions(+), 35 deletions(-) delete mode 100644 assets/data/config/modpack.ini create mode 100644 source/funkin/editors/ModConfigWarning.hx diff --git a/assets/data/config/modpack.ini b/assets/data/config/modpack.ini deleted file mode 100644 index 313d86b2..00000000 --- a/assets/data/config/modpack.ini +++ /dev/null @@ -1,25 +0,0 @@ -[Common] -Name="baconeggandcheese" -Description="who gaf" -APIVersion="uhmmmm probs like 2" -DownloadedFrom="https://yourmom.org" -Dependencies=[ - "linkA", - "linkB", - "linkC" -] -Icon64="path/to/icon64.png" -Icon32="path/to/icon32.png" -Icon16="path/to/icon16.png" -Icon="path/to/icon.ico" - -[Flags] -UseNoteRendererV2=false -UseAway3D=false -UseDiscordRPCIntegration=true -UseLocalization=false -UseLegacyFlixelAnimateHitbox=false - -[Discord] -ClientID="1027994136193810442", -LogoKey="icon" \ No newline at end of file diff --git a/source/funkin/backend/system/Flags.hx b/source/funkin/backend/system/Flags.hx index 010f9238..4e1d2854 100644 --- a/source/funkin/backend/system/Flags.hx +++ b/source/funkin/backend/system/Flags.hx @@ -1,6 +1,7 @@ package funkin.backend.system; import flixel.util.FlxColor; +import funkin.backend.assets.ModsFolder; import funkin.backend.assets.IModsAssetLibrary; import funkin.backend.assets.ScriptedAssetLibrary; import funkin.backend.system.macros.GitCommitMacro; @@ -13,6 +14,9 @@ import lime.utils.AssetType; */ @:build(funkin.backend.system.macros.FlagMacro.build()) class Flags { + // -- Codename's Addon Config -- + @:bypass public static var addonFlags:Map = []; + // -- Codename's Mod Config -- public static var MOD_NAME:String = ""; public static var MOD_DESCRIPTION:String = ""; @@ -27,6 +31,7 @@ class Flags { public static var MOD_DISCORD_CLIENT_ID:String = ""; public static var MOD_DISCORD_LOGO_KEY:String = ""; + public static var MOD_DISCORD_LOGO_TEXT:String = ""; // -- Codename's Default Flags -- public static var COMMIT_NUMBER:Int = GitCommitMacro.commitNumber; public static var COMMIT_HASH:String = GitCommitMacro.commitHash; @@ -219,16 +224,42 @@ class Flags { * Loads the flags from the assets. **/ public static function load(?libs:Array = null) { - if (libs == null) - libs = Paths.assetsTree.libraries; - final flagsPath = Paths.getPath("flags.ini"); - var datas:Array = [ - for(lib in libs) - if(lib.exists(flagsPath, AssetType.TEXT)) - lib.getAsset(flagsPath, AssetType.TEXT) - ]; + if (libs == null) { + libs = Paths.assetsTree.libraries.copy(); + libs.reverse(); + } + for(lib in libs) { + var l = lib; + if (l is openfl.utils.AssetLibrary) { + @:privateAccess + l = cast(l, openfl.utils.AssetLibrary).__proxy; + } - var flags:Map = loadFromDatas(datas); - parseFlags(flags); + if (l is IModsAssetLibrary) { + var flagsTxt = ""; + if (l.exists(Paths.getPath("data/config/modpack.ini"), AssetType.TEXT)) + flagsTxt = l.getAsset(Paths.getPath("data/config/modpack.ini"), AssetType.TEXT); + if (cast(l, IModsAssetLibrary).modName == "assets") continue; + + if (cast(l, IModsAssetLibrary).modName == ModsFolder.currentModFolder) { + var flags:Map = []; + loadFromData(flags, flagsTxt); + parseFlags(flags); + } + else { + var flags:Map = []; + loadFromData(flags, flagsTxt); + addonFlags.set(cast(l, IModsAssetLibrary).modName.toLowerCase().replace(" ", "").trim(), flags); + } + } + else { + var flagsTxt = ""; + if (l.exists(Paths.getPath("data/config/flags.ini"), AssetType.TEXT)) + flagsTxt = l.getAsset(Paths.getPath("data/config/flags.ini"), AssetType.TEXT); + var flags:Map = []; + loadFromData(flags, flagsTxt); + parseFlags(flags); + } + } } } \ No newline at end of file diff --git a/source/funkin/backend/utils/DiscordUtil.hx b/source/funkin/backend/utils/DiscordUtil.hx index 39a92e49..68bdf128 100644 --- a/source/funkin/backend/utils/DiscordUtil.hx +++ b/source/funkin/backend/utils/DiscordUtil.hx @@ -89,6 +89,10 @@ class DiscordUtil config.logoKey = config.logoKey.getDefault(Flags.DEFAULT_DISCORD_LOGO_KEY); config.logoText = config.logoText.getDefault(Flags.DEFAULT_DISCORD_LOGO_TEXT); config.clientID = config.clientID.getDefault(Flags.DEFAULT_DISCORD_CLIENT_ID); + + if (Flags.MOD_DISCORD_CLIENT_ID.length > 0) config.clientID = Flags.MOD_DISCORD_CLIENT_ID; + if (Flags.MOD_DISCORD_LOGO_KEY.length > 0) config.logoKey = Flags.MOD_DISCORD_LOGO_KEY; + if (Flags.MOD_DISCORD_LOGO_TEXT.length > 0) config.logoText = Flags.MOD_DISCORD_LOGO_TEXT; currentID = config.clientID; #end } diff --git a/source/funkin/editors/ModConfigWarning.hx b/source/funkin/editors/ModConfigWarning.hx new file mode 100644 index 00000000..4aeebcdd --- /dev/null +++ b/source/funkin/editors/ModConfigWarning.hx @@ -0,0 +1,74 @@ +package funkin.editors; + +class ModConfigWarning extends UIState { + + var libraryToMakeConfigIn:Dynamic = null; + public static var defaultModConfigText = +'[Common] +MOD_NAME="YOUR MOD NAME HERE" +MOD_DESCRIPTION="YOUR MOD DESCRIPTION HERE" + +# DO NOT EDIT!! this is used to check for version compatibility! +MOD_API_VERSION=1 + +MOD_DOWNLOADED_LINK="YOUR MOD PAGE LINK HERE" + +# Not supported yet +;MOD_ICON64="path/to/icon64.png" +;MOD_ICON32="path/to/icon32.png" +;MOD_ICON16="path/to/icon16.png" +;MOD_ICON="path/to/icon.ico" + +[Flags] +DISABLE_BETA_WARNING_SCREEN=true + +[Discord] +MOD_DISCORD_CLIENT_ID="" +MOD_DISCORD_LOGO_KEY=""'; + + public function new(library) { + super(); + + libraryToMakeConfigIn = library; + } + + override function create() { + super.create(); + + openSubState(new UIWarningSubstate("Missing mod config!", "Your mod is currently missing a mod config file!\n\n\nWould you like to automatically generate one?\n\n(PS: If this is not your mod please disable Developer mode to stop this popup from appearing.)", + [ + { + label: "Not Now", + color: 0x969533, + onClick: function (_) { + funkin.menus.MainMenuState.hadPopup = true; + MusicBeatState.skipTransIn = false; + MusicBeatState.skipTransOut = false; + FlxG.switchState(new funkin.menus.MainMenuState()); + } + }, + { + label: "Yes", + onClick: function(_) { + trace(libraryToMakeConfigIn.getPath("data/config/modpack.ini")); + sys.io.File.saveContent(libraryToMakeConfigIn.getPath("data/config/modpack.ini"), defaultModConfigText); + openSubState(new UIWarningSubstate("Created mod config!", "Your mod config file has been created at " + libraryToMakeConfigIn.getPath("data/config/modpack.ini") + "!", [ + { + label: "Ok", + onClick: function (_) { + funkin.menus.MainMenuState.hadPopup = true; + MusicBeatState.skipTransIn = false; + MusicBeatState.skipTransOut = false; + FlxG.switchState(new funkin.menus.MainMenuState()); + } + }, + ], false)); + } + } + ], false)); + } + + override function update(elapsed) { + super.update(elapsed); + } +} \ No newline at end of file diff --git a/source/funkin/menus/MainMenuState.hx b/source/funkin/menus/MainMenuState.hx index 220bf73b..51004b9c 100644 --- a/source/funkin/menus/MainMenuState.hx +++ b/source/funkin/menus/MainMenuState.hx @@ -27,8 +27,11 @@ class MainMenuState extends MusicBeatState public var canAccessDebugMenus:Bool = !Flags.DISABLE_EDITORS; + public static var hadPopup = false; + override function create() { + super.create(); DiscordUtil.call("onMenuLoaded", ["Main Menu"]); @@ -79,6 +82,23 @@ class MainMenuState extends MusicBeatState add(versionText); changeItem(); + + if (Options.devMode && !MainMenuState.hadPopup) + for (i in Paths.assetsTree.libraries) { + var l = i; + if (l is openfl.utils.AssetLibrary) { + @:privateAccess + l = cast(l, openfl.utils.AssetLibrary).__proxy; + } + if (cast(l, funkin.backend.assets.IModsAssetLibrary).modName == funkin.backend.assets.ModsFolder.currentModFolder) { + if (!l.exists(Paths.getPath("data/config/modpack.ini"), lime.utils.AssetType.TEXT)) { + MusicBeatState.skipTransIn = true; + MusicBeatState.skipTransOut = true; + FlxG.switchState(new funkin.editors.ModConfigWarning(l)); + } + break; + } + } } var selectedSomethin:Bool = false;