Asset Lifecycle
This page connects the server operator and mod developer views of Anomaly assets without documenting internal transfer messages.
Server-provided assets
Section titled “Server-provided assets”Server assets start in the configured AssetDirectory. When a client joins, Anomaly compares the server’s asset list with the client’s local cache and downloads only what is missing.
After transfer, client-side code can load server-provided textures and bundles through AnomalyResources.
Local user overrides
Section titled “Local user overrides”Players can also place files under <MelonLoader UserData>/Anomaly/Overrides/ to replace supported local assets. Under loadouts, that usually means the active runtime UserData/ linked from GameRoot/loadouts/<name>/runtime/UserData/. The layout mirrors asset kinds:
UserData/Anomaly/Overrides/├── AudioClip/├── Texture2D/├── Sprite/└── Mesh/Audio overrides are available today. Texture and mesh support depends on the specific catalog page and runtime support for that asset kind.
Cache behavior
Section titled “Cache behavior”Downloaded server assets are cached under the shared Anomaly data directory, not inside a single modded install. This means a player can reinstall Anomaly without redownloading every server asset.
The cache is managed by Anomaly. Mods should use public asset APIs instead of reading cache files directly.
Late joiners
Section titled “Late joiners”If a server companion plugin uses Anomaly’s asset spawn and override APIs, Anomaly remembers the current state and sends it to late joiners after their asset check finishes.
This keeps late joiners visually aligned with players who were already in the round.
Failure modes
Section titled “Failure modes”| Symptom | Likely cause |
|---|---|
Asset API returns false | The file is not cached yet, the server did not offer it, or transfer failed. |
| Reconnect downloads again | The local cache is missing or not writable. |
| Late joiner misses an override | The server plugin applied the change outside Anomaly’s asset APIs. |
| Local override is ignored | The asset kind or path is not supported, or the server-provided override takes priority. |