diff --git a/commandline/commands/Update.hx b/commandline/commands/Update.hx index 6ac0f0f3..f96a12db 100644 --- a/commandline/commands/Update.hx +++ b/commandline/commands/Update.hx @@ -42,6 +42,9 @@ class Update { case "git": prettyPrint((lib.global == "true" ? "Globally installing" : "Locally installing") + ' "${lib.name}" from git url "${lib.url}"'); Sys.command('haxelib git ${lib.name} ${lib.url}${lib.ref != null ? ' ${lib.ref}' : ''}${globalism != null ? ' $globalism' : ''} --always'); + case "custom": + Sys.command('haxelib dev ${lib.name} "./libraries/${lib.name}"'); + default: prettyPrint('Cannot resolve library of type "${lib.type}"'); } diff --git a/libraries/macro-fixer/extraParams.hxml b/libraries/macro-fixer/extraParams.hxml new file mode 100644 index 00000000..6a8e1ff9 --- /dev/null +++ b/libraries/macro-fixer/extraParams.hxml @@ -0,0 +1,2 @@ +--macro macros.CustomFieldMacro.init() +--macro macros.HashLinkFixer.init() diff --git a/libraries/macro-fixer/haxelib.json b/libraries/macro-fixer/haxelib.json new file mode 100644 index 00000000..74ac6ce8 --- /dev/null +++ b/libraries/macro-fixer/haxelib.json @@ -0,0 +1,9 @@ +{ + "name": "custom-fields-macro", + "url": "https://example.com/", + "license": "Public", + "description": "A fix", + "version": "1.0.0", + "releasenote": "NOTHING", + "contributors": ["NeeEoo"] +} diff --git a/source/funkin/backend/system/macros/CustomFieldMacro.hx b/libraries/macro-fixer/macros/CustomFieldMacro.hx similarity index 80% rename from source/funkin/backend/system/macros/CustomFieldMacro.hx rename to libraries/macro-fixer/macros/CustomFieldMacro.hx index 6adc0a2e..8924c963 100644 --- a/source/funkin/backend/system/macros/CustomFieldMacro.hx +++ b/libraries/macro-fixer/macros/CustomFieldMacro.hx @@ -1,4 +1,4 @@ -package funkin.backend.system.macros; +package macros; #if macro import haxe.macro.Context; @@ -12,7 +12,7 @@ using StringTools; */ class CustomFieldMacro { public static function init() { - Compiler.addGlobalMetadata("lime.utils", '@:build(funkin.backend.system.macros.UsingHandler.build("lime.utils.AssetLibrary", "tag", "funkin.backend.assets.AssetSource"))'); + Compiler.addGlobalMetadata("lime.utils", '@:build(macros.CustomFieldMacro.build("lime.utils.AssetLibrary", "tag", "funkin.backend.assets.AssetSource"))'); } // TODO: Add support for default values @@ -25,7 +25,7 @@ class CustomFieldMacro { var key = cl.module; var fkey = cl.module + "." + cl.name; - if(fkey != lib) { + if(lib != cl.module) { return fields; } diff --git a/source/funkin/backend/system/macros/HashLinkFixer.hx b/libraries/macro-fixer/macros/HashLinkFixer.hx similarity index 95% rename from source/funkin/backend/system/macros/HashLinkFixer.hx rename to libraries/macro-fixer/macros/HashLinkFixer.hx index 046929e8..b9451825 100644 --- a/source/funkin/backend/system/macros/HashLinkFixer.hx +++ b/libraries/macro-fixer/macros/HashLinkFixer.hx @@ -1,4 +1,4 @@ -package funkin.backend.system.macros; +package macros; #if macro import haxe.macro.Expr; @@ -8,7 +8,7 @@ using StringTools; using haxe.macro.PositionTools; class HashLinkFixer { - public static var buildMacroString = '@:build(funkin.backend.system.macros.HashLinkFixer.build())'; + public static var buildMacroString = '@:build(macros.HashLinkFixer.build())'; public static var applyOn:Array = [ "lime", @@ -133,7 +133,7 @@ class HashLinkFixer { helperClass.name = hcClassName; if(definedFields.length > 0) { - trace(cl.module); + //trace(cl.module); /*for(m in metas.copy()) { trace(" " + m.name); diff --git a/libs.xml b/libs.xml index cfdec718..a96c5af9 100644 --- a/libs.xml +++ b/libs.xml @@ -19,4 +19,6 @@ + + diff --git a/project.xml b/project.xml index 0bb98931..9c69253d 100644 --- a/project.xml +++ b/project.xml @@ -183,6 +183,9 @@ + + +
diff --git a/source/funkin/backend/assets/AssetSource.hx b/source/funkin/backend/assets/AssetSource.hx new file mode 100644 index 00000000..d8ba6b14 --- /dev/null +++ b/source/funkin/backend/assets/AssetSource.hx @@ -0,0 +1,7 @@ +package funkin.backend.assets; + +enum abstract AssetSource(Null) from Bool from Null to Null { + var SOURCE = true; + var MODS = false; + var BOTH = null; +} \ No newline at end of file diff --git a/source/funkin/backend/assets/AssetsLibraryList.hx b/source/funkin/backend/assets/AssetsLibraryList.hx index f05cc6ed..8d26a900 100644 --- a/source/funkin/backend/assets/AssetsLibraryList.hx +++ b/source/funkin/backend/assets/AssetsLibraryList.hx @@ -22,10 +22,10 @@ class AssetsLibraryList extends AssetLibrary { return lib; } public function existsSpecific(id:String, type:String, source:AssetSource = BOTH) { - if (!id.startsWith("assets/") && exists('assets/$id', type)) + if (!id.startsWith("assets/") && existsSpecific('assets/$id', type, source)) return true; for(k=>e in libraries) { - if (shouldSkipLib(k, source)) continue; + if (shouldSkipLib(e, source)) continue; if (e.exists(id, type)) return true; } @@ -36,7 +36,7 @@ class AssetsLibraryList extends AssetLibrary { public function getSpecificPath(id:String, source:AssetSource = BOTH) { for(k=>e in libraries) { - if (shouldSkipLib(k, source)) continue; + if (shouldSkipLib(e, source)) continue; @:privateAccess if (e.exists(id, e.types.get(id))) { @@ -54,7 +54,7 @@ class AssetsLibraryList extends AssetLibrary { public function getFiles(folder:String, source:AssetSource = BOTH):Array { var content:Array = []; for(k=>e in libraries) { - if (shouldSkipLib(k, source)) continue; + if (shouldSkipLib(e, source)) continue; var l = e; @@ -78,7 +78,7 @@ class AssetsLibraryList extends AssetLibrary { public function getFolders(folder:String, source:AssetSource = BOTH):Array { var content:Array = []; for(k=>e in libraries) { - if (shouldSkipLib(k, source)) continue; + if (shouldSkipLib(e, source)) continue; var l = e; @@ -108,7 +108,7 @@ class AssetsLibraryList extends AssetLibrary { } } for(k=>e in libraries) { - if (shouldSkipLib(k, source)) continue; + if (shouldSkipLib(e, source)) continue; @:privateAccess if (e.exists(id, e.types.get(id))) { @@ -125,15 +125,9 @@ class AssetsLibraryList extends AssetLibrary { return null; } - private function shouldSkipLib(k:Int, source:AssetSource) { - #if TRANSLATIONS_SUPPORT - k -= libraries.indexOf(transLib) + 1; - #end - return switch(source) { - case BOTH: false; - case SOURCE: k < libraries.length - __defaultLibraries.length; - case MODS: k >= libraries.length - __defaultLibraries.length; - }; + private function shouldSkipLib(lib:AssetLibrary, source:AssetSource) { + if (source == BOTH || lib.tag == BOTH) return false; + return source != lib.tag; } public override inline function getAsset(id:String, type:String):Dynamic return getSpecificAsset(id, type, BOTH); @@ -171,10 +165,4 @@ class AssetsLibraryList extends AssetLibrary { lib.tag = tag; return lib; } -} - -enum abstract AssetSource(Null) from Bool from Null to Null { - var SOURCE = true; - var MODS = false; - var BOTH = null; } \ No newline at end of file diff --git a/source/funkin/backend/assets/ModsFolder.hx b/source/funkin/backend/assets/ModsFolder.hx index 138ff0a2..6ae6a88f 100644 --- a/source/funkin/backend/assets/ModsFolder.hx +++ b/source/funkin/backend/assets/ModsFolder.hx @@ -48,8 +48,10 @@ class ModsFolder { * Initialises `mods` folder. */ public static function init() { - if(!getModsList().contains(Options.lastLoadedMod)) + if(!getModsList().contains(Options.lastLoadedMod)) { Options.lastLoadedMod = null; + Logs.trace("Mod not found in mods list, switching to base game!", WARNING, YELLOW); + } } /** @@ -59,6 +61,10 @@ class ModsFolder { public static function switchMod(mod:String) { Options.lastLoadedMod = currentModFolder = mod; reloadMods(); + Logs.traceColored([ + Logs.logText('Switched to mod ', GRAY), + Logs.logText(mod, GREEN) + ], VERBOSE); } public static function reloadMods() { diff --git a/source/funkin/backend/assets/Paths.hx b/source/funkin/backend/assets/Paths.hx index 1d526b9b..a0cb0138 100644 --- a/source/funkin/backend/assets/Paths.hx +++ b/source/funkin/backend/assets/Paths.hx @@ -236,7 +236,7 @@ class Paths return graph.imageFrame; } - public static function getFolderDirectories(key:String, addPath:Bool = false, source:AssetsLibraryList.AssetSource = BOTH):Array { + public static function getFolderDirectories(key:String, addPath:Bool = false, source:AssetSource = BOTH):Array { if (!key.endsWith("/")) key += "/"; var content = assetsTree.getFolders('assets/$key', source); if (addPath) { @@ -246,7 +246,7 @@ class Paths return content; } - public static function getFolderContent(key:String, addPath:Bool = false, source:AssetsLibraryList.AssetSource = BOTH):Array { + public static function getFolderContent(key:String, addPath:Bool = false, source:AssetSource = BOTH):Array { // designed to work both on windows and web if (!key.endsWith("/")) key += "/"; var content = assetsTree.getFiles('assets/$key', source); diff --git a/source/funkin/backend/assets/TranslatedAssetLibrary.hx b/source/funkin/backend/assets/TranslatedAssetLibrary.hx index 8c275bfe..33eb7010 100644 --- a/source/funkin/backend/assets/TranslatedAssetLibrary.hx +++ b/source/funkin/backend/assets/TranslatedAssetLibrary.hx @@ -57,6 +57,16 @@ class TranslatedAssetLibrary extends AssetLibrary implements IModsAssetLibrary { return null; } + public override function getText(id:String):String + { + for(lib in ModsFolder.getLoadedModsLibs(true)) { + if(!(lib is AssetLibrary)) continue; + var val = cast(lib, AssetLibrary).getText(formatPath(lib.prefix, id)); + if(val != null) return val; + } + return null; + } + public override function getFont(id:String):Font { for(lib in ModsFolder.getLoadedModsLibs(true)) { diff --git a/source/funkin/backend/system/macros/Macros.hx b/source/funkin/backend/system/macros/Macros.hx index 4da56f71..e74231e6 100644 --- a/source/funkin/backend/system/macros/Macros.hx +++ b/source/funkin/backend/system/macros/Macros.hx @@ -43,10 +43,6 @@ class Macros { } public static function initMacros() { - if(Context.defined("hl")) - HashLinkFixer.init(); - - CustomFieldsMacro.init(); } } #end \ No newline at end of file diff --git a/source/funkin/backend/utils/TranslationUtil.hx b/source/funkin/backend/utils/TranslationUtil.hx index 048e1706..5c8d3cfd 100644 --- a/source/funkin/backend/utils/TranslationUtil.hx +++ b/source/funkin/backend/utils/TranslationUtil.hx @@ -125,7 +125,7 @@ class TranslationUtil } if (xml == null) return []; if (!xml.hasNode.translations) { - FlxG.log.warn("A translation xml file requires a translations root element."); + Logs.trace("A translation xml file requires a translations root element.", WARNING, YELLOW); return []; } diff --git a/source/funkin/menus/FreeplayState.hx b/source/funkin/menus/FreeplayState.hx index d555d747..d062f417 100644 --- a/source/funkin/menus/FreeplayState.hx +++ b/source/funkin/menus/FreeplayState.hx @@ -430,7 +430,7 @@ class FreeplaySonglist { public function new() {} - public function getSongsFromSource(source:funkin.backend.assets.AssetsLibraryList.AssetSource, useTxt:Bool = true) { + public function getSongsFromSource(source:funkin.backend.assets.AssetSource, useTxt:Bool = true) { var path:String = Paths.txt('freeplaySonglist'); var songsFound:Array = []; if (useTxt && Paths.assetsTree.existsSpecific(path, "TEXT", source)) { diff --git a/source/funkin/menus/StoryMenuState.hx b/source/funkin/menus/StoryMenuState.hx index 384118e5..9a24864c 100644 --- a/source/funkin/menus/StoryMenuState.hx +++ b/source/funkin/menus/StoryMenuState.hx @@ -297,7 +297,7 @@ class StoryMenuState extends MusicBeatState { characters[charName] = charObj; } - public function getWeeksFromSource(weeks:Array, source:funkin.backend.assets.AssetsLibraryList.AssetSource) { + public function getWeeksFromSource(weeks:Array, source:funkin.backend.assets.AssetSource) { var path:String = Paths.txt('freeplaySonglist'); var weeksFound:Array = []; if (Paths.assetsTree.existsSpecific(path, "TEXT", source)) { diff --git a/source/funkin/menus/credits/CreditsMain.hx b/source/funkin/menus/credits/CreditsMain.hx index 56507274..c43cc92f 100644 --- a/source/funkin/menus/credits/CreditsMain.hx +++ b/source/funkin/menus/credits/CreditsMain.hx @@ -20,7 +20,7 @@ class CreditsMain extends TreeMenu { var selectables:Array = []; var xmlPath = Paths.xml('config/credits'); - for(source in [funkin.backend.assets.AssetsLibraryList.AssetSource.SOURCE, funkin.backend.assets.AssetsLibraryList.AssetSource.MODS]) { + for(source in [funkin.backend.assets.AssetSource.SOURCE, funkin.backend.assets.AssetSource.MODS]) { if (Paths.assetsTree.existsSpecific(xmlPath, "TEXT", source)) { var access:Access = null; try { diff --git a/source/funkin/options/OptionsMenu.hx b/source/funkin/options/OptionsMenu.hx index f9232e13..e2afeda4 100644 --- a/source/funkin/options/OptionsMenu.hx +++ b/source/funkin/options/OptionsMenu.hx @@ -69,7 +69,7 @@ class OptionsMenu extends TreeMenu { })]); var xmlPath = Paths.xml("config/options"); - for(source in [funkin.backend.assets.AssetsLibraryList.AssetSource.SOURCE, funkin.backend.assets.AssetsLibraryList.AssetSource.MODS]) { + for(source in [funkin.backend.assets.AssetSource.SOURCE, funkin.backend.assets.AssetSource.MODS]) { if (Paths.assetsTree.existsSpecific(xmlPath, "TEXT", source)) { var access:Access = null; try {