larsiusprime / polymod

Atomic modding framework for Haxe
MIT License
162 stars 62 forks source link

Small issue #181

Closed Joalor64GH closed 1 month ago

Joalor64GH commented 1 month ago

I'm testing out polymod for modding support, but for some reason, audio file replacement isn't working?? Can it even replace audio files or is it just something that needs to be fixed?

EliteMasterEric commented 1 month ago

It should be able to replace any binary asset. You'd need to give more information about your setup for me to be able to help you.

Joalor64GH commented 1 month ago

Well, I think it might have something to do with this.

package backend;

#if FUTURE_POLYMOD
import polymod.Polymod;
import polymod.Polymod.Framework;
import polymod.backends.PolymodAssets.PolymodAssetType;
import polymod.format.ParseRules;
#end

class ModHandler {
    private static final MOD_DIR:String = 'mods';

    #if FUTURE_POLYMOD
    private static final extensions:Map<String, PolymodAssetType> = [
        'ogg' => AUDIO_GENERIC,
        'png' => IMAGE,
        'xml' => TEXT,
        'json' => TEXT,
        'txt' => TEXT,
        'hxs' => TEXT,
        'ttf' => FONT,
        'otf' => FONT
    ];

    public static var trackedMods:Array<ModMetadata> = [];
    #end

    public static function reload():Void {
        #if FUTURE_POLYMOD
        trace('Reloading Polymod...');
        loadMods(getMods());
        #else
        trace("Polymod reloading is not supported on your Platform!");
        #end
    }

    #if FUTURE_POLYMOD
    public static function loadMods(folders:Array<String>):Void {
        var loadedModlist:Array<ModMetadata> = Polymod.init({
            modRoot: MOD_DIR,
            dirs: folders,
            framework: Framework.FLIXEL,
            apiVersion: Lib.application.meta.get('version'),
            errorCallback: onError,
            parseRules: getParseRules(),
            extensionMap: extensions,
            frameworkParams: {
                assetLibraryPaths: ["default" => "./"]
            },
            ignoredFiles: Polymod.getDefaultIgnoreList()
        });

        if (loadedModlist == null)
            return;

        trace('Loading Successful, ${loadedModlist.length} / ${folders.length} new mods.');

        for (mod in loadedModlist)
            trace('Name: ${mod.title}, [${mod.id}]');
    }

    public static function getMods():Array<String> {
        trackedMods = [];

        if (FlxG.save.data.disabledMods == null) {
            FlxG.save.data.disabledMods = [];
            FlxG.save.flush();
        }

        var daList:Array<String> = [];

        trace('Searching for Mods...');

        for (i in Polymod.scan(MOD_DIR, '*.*.*', onError)) {
            trackedMods.push(i);
            if (!FlxG.save.data.disabledMods.contains(i.id))
                daList.push(i.id);
        }

        if (daList != null && daList.length > 0)
            trace('Found ${daList.length} new mods.');

        return daList != null && daList.length > 0 ? daList : [];
    }

    public static function getParseRules():ParseRules {
        final output:ParseRules = ParseRules.getDefault();
        output.addType("txt", TextFileFormat.LINES);
        output.addType("hxs", TextFileFormat.PLAINTEXT);
        return output != null ? output : null;
    }

    static function onError(error:PolymodError):Void {
        switch (error.severity) {
            case NOTICE:
                trace(error.message);
            case WARNING:
                trace(error.message);
            case ERROR:
                trace(error.message);
        }
    }
    #end
}

Or this:

public static function returnSound(key:String, ?cache:Bool = true):Sound {
        if (Assets.exists(file('$key.ogg'), SOUND)) {
            var path:String = file('$key.ogg');
            if (!currentTrackedSounds.exists(path))
                currentTrackedSounds.set(path, Assets.getSound(path, cache));

            localTrackedAssets.push(path);
            return currentTrackedSounds.get(path);
        }

        trace('oops! $key returned null');
        return null;
    }
Joalor64GH commented 1 month ago

Nevermind, it works! It was just an issue with my mod handler.