# Mod Asset Loading

This document covers `TODOS.phase-72.72.14.1.6`: loading `.mayamod` assets so
mods can add textures, meshes, audio, levels, and related engine assets through
the V2 modding runtime.

## Runtime Surface

- module: `V2Modding`
- policy: `FV2ModAssetLoadingPolicy`
- request: `FV2ModAssetLoadRequest`
- mount record: `FV2ModAssetMount`
- plan/result: `FV2ModAssetLoadPlan`
- helper functions: `BuildDefaultModAssetLoadingPolicy`,
  `BuildModAssetLoadRequest`, `EvaluateModAssetLoadRequest`,
  `BuildModAssetLoadPlan`, and `ExecuteModAssetLoadPlan`
- automation: `V2/ue/Source/V2Tests/Private/Modding/ModLoadingSystem.spec.cpp`
- contract: `V2/ue/Content/V2/Modding/ModAssetLoading_V2_Contract.json`

## Asset Kinds

The loader accepts manifest assets of kind `Texture`, `Mesh`, `Level`,
`Material`, `Audio`, `Animation`, `DataTable`, `Localization`, `PreviewImage`,
and `ScriptData`. Runtime requests preserve the manifest asset id, relative
package path, load phase, tags, integrity hash, byte size, and `/V2/Mods/` mount
point.

`BuildModAssetLoadPlan` turns manifest entries into `FV2ModAssetMount` records
with deterministic registry paths and soft object paths.
`ExecuteModAssetLoadPlan` marks accepted mounts as mounted and registered with
the engine asset system so later runtime work can hand the mount records to
concrete package or asset registry adapters.

## Policy

The default policy requires sandbox approval, keeps mounts under `/V2/Mods/`,
caps individual assets at 256 MiB, and registers accepted assets with the engine
asset system. Level assets are restricted to `MatchLoad` or `OnDemand` phases so
mods cannot inject levels during startup or menu boot.

## Verification

```bash
python3 V2/ue/Tools/check-v2-mod-asset-loading.py
python3 V2/ue/Tools/check-v2-mod-file-format.py
python3 V2/ue/Tools/check-v2-mod-scripting-integration.py
python3 V2/ue/Tools/check-v2-mod-api-surface.py
python3 V2/ue/Tools/check-v2-mod-sandboxing.py
python3 V2/ue/Tools/check-v2-mod-loading-system.py
python3 V2/ue/Tools/check-v2-ci-workflow.py
python3 V2/tools/validate-v2-docs.py
python3 -m py_compile V2/ue/Tools/check-v2-mod-asset-loading.py V2/ue/Tools/check-v2-mod-file-format.py V2/ue/Tools/check-v2-ci-workflow.py
python3 -m json.tool V2/ue/Content/V2/Modding/ModAssetLoading_V2_Contract.json
```
