FujiAPI / Fuji

Celeste 64 Mod Loader
32 stars 10 forks source link

Implementing Smarter Asset Loading system for asset replacement and asset naming conflicts #12

Closed jasminegamedev closed 9 months ago

jasminegamedev commented 9 months ago

Basically, I reworked the asset system so assets are now tied to their mods, and when it tries to get an asset it now goes through a process of first trying to get from a namespace/folder, then second try to get it from an asset replacement, and third it tries to get it from vanilla game or a mod, with special priority given to the current map mod. This all lives in a new ModAssetDictionary, which sort of aggregates the asset dictionaries from mods, but lets us continue to keep referencing things the same way we were doing before(to minimize conflicts with upstream, and not have to change every place that touches an asset) This also introduces a new ModInfo concept which pulls from a Fuji.json file and contains various metadata about the mod, including asset replacements, a name, a unique id, the mod author's name, a version number, and dependencies.

Note: The namespace stuff currently makes things not visible in trenchbroom if they are used. Also, this currently doesn't support asset replacing audio files or sprites, because those are more complicated, and kind of broke when I tried. We should maybe look into those as a separate PR.

jasminegamedev commented 9 months ago

Moving forward with this to unblock release. I think it's in a good enough shape to go. We can always iterate on it later if we decide to tweak the priority.