Class ModAssetCatalogs
- Namespace
- GrindFest
- Assembly
- GrindFest.dll
Runtime side of the mod asset pipeline: a mod's assets are a built content directory, scoped
mod:<mod folder name>.
Mods/<Mod>/Content/content-directory/ ← GrindFest ▸ Mods ▸ Build Mod Assets
It is registered by RegisterAllAsync(CancellationToken) at boot, after the base game — which is
what makes a mod's version of a key win, with no id remapping and no bundle rewriting. What is left here is the
policy check that mechanism cannot express: every key a mod contributes has to live under
mod/<folder name>/, because otherwise a mod can shadow a base-game asset by accident and the
override looks like the game being broken rather than like a mod doing its job.
The Addressables catalogue path is gone (2026-09-20). It needed a catalogue to load, bundle internal ids to
rewrite and an InternalIdTransformFunc to make paths machine-independent; a content directory is
self-describing and addressed by path, so none of that exists any more. A mod that still ships only a catalogue
is now a red error naming the command to run — not a silently empty mod, and not a second code path that has to
keep working forever.
Failures are per-mod by design: a broken mod is a red error naming the mod, never a dead boot.
public static class ModAssetCatalogs
- Inheritance
-
objectModAssetCatalogs
Fields
- AddressPrefix
Address namespace every mod's keys must use:
mod/<mod folder name>/….
Properties
- Loaded
Mods loaded this session (mod folder name → info).
Methods
- LoadAsync(IReadOnlyList<ModDefinition>)
Records every mod whose content directory is registered (registration itself happens in RegisterAllAsync(CancellationToken), which owns the order that makes a mod override the base game). Returns how many were newly recorded this call.