# 1. Mods as Additional Catalogs Part of [[Modding with Addressables]]. Next: [[2. Authoring a Content Pack]]. In this course a **mod** (or a cosmetic / optional pack) is a **content catalog plus its bundles**, loaded at runtime with official `Addressables.LoadContentCatalogAsync`, then addressed with the same `LoadAssetAsync` / `InstantiateAsync` you already know from [[3. Loading Instantiating and Releasing]]. It is not a new programming language, and it is not a storefront. ## 1.1 What can be in the pack Assets that use **types already compiled into the player**: - Prefabs whose scripts are types the player already contains (a hat that uses your existing `CosmeticAttach` component). - ScriptableObject definitions whose classes already live in the game ([[ScriptableObject Architecture]]). - Textures, audio, Animator controllers that your existing runtime knows how to play. - Optionally an Addressable **scene**, loaded with `LoadSceneAsync` as in [[5. Scenes Catalogs and Remote Content]], if that scene only references player-known types. ## 1.2 What this series will not do - Load a **new managed DLL** or "drop in a .cs file and compile it in the player." Addressables is an asset catalog, not a scripting sandbox. If a later elective wants a verified scripting hook, that is a different, carefully scoped design — not a hidden API in 2.9.1 `LoadContentCatalogAsync`. - Implement IAP, paid DLC checkout, or Unity Economy. A pack may be optional; selling it is out of scope ([[Publishing to itch.io and Steam]] stays non-commercial). - Redo groups, Play Mode Scripts, or the release-handle rules. If you leak a handle here, reread [[3. Loading Instantiating and Releasing]] and [[7. Addressables Pitfalls and Quest]]. ## 1.3 Trust is a design requirement A catalog is a map plus bundles you did not necessarily build in the same sitting as the player. Treat the catalog **URL or path** as something you chose (a class server, a known HTTPS folder, a file next to the player). Do not teach "paste any URL from chat" as a feature. Part 4 covers hash files, HTTPS, and failed loads. ## 1.4 Exercise Write the pack contract on a cover sheet: one label you will use (`cosmetics` or `mod_hats`), three asset types allowed, and a sentence that all MonoBehaviours on those prefabs already exist in the player. ## Sources - https://docs.unity3d.com/Packages/[email protected]/manual/LoadContentCatalogAsync.html - [[Addressables]]