# Unified Character Catalog Design ## Goal Make `Assets/Resources/Config/CharacterConfig.json` the only source of truth for the selectable lobby characters. Refreshing the configuration from the Unity editor must make the corresponding character selectable and loadable in the lobby without a matching code edit. ## Current issue `CharacterSwitchController` builds its selection UI from `CharacterConfig.json` and stores the selected character ID in `PlayerPrefs`. `LobbyWorldController` instead maps that ID through its own hard-coded `ActorPaths` array. A generated entry such as `cityboy_sk` is not in that array, so the mapping falls back to figure `1` and displays `Assasin`. ## Design `LobbyWorldController` will load the same resource configuration used by the selection UI. It will use the ordered `characters` list for both directions of the existing network mapping: - selected character ID -> one-based `Figure` index sent to the server; - received one-based `Figure` index -> the configured prefab path to load. The order generated by `CharacterConfigGenerator` remains alphabetical and is therefore deterministic across clients built with the same content. The network protocol remains unchanged: it still carries a one-based integer. The hard-coded actor-path array will be removed. Config loading validates that the list exists and contains usable entries. If configuration cannot be read, or a selected ID is absent, the lobby will log a specific error and use the configured default character (or the first valid entry) rather than silently mapping the unknown ID to `Assasin`. ## Components - `CharacterConfigData` retains lookup of character items by ID and default selection. - `LobbyWorldController` owns a loaded `CharacterConfigData` instance and uses it to resolve figure indices and prefab paths. - `CharacterSwitchController` continues to populate the UI from the same JSON asset and to persist the selected ID. No prefab or network-server change is required. ## Error handling On missing, invalid, or empty configuration, the lobby does not index into a path array. It logs an actionable configuration error and avoids attempting to load an arbitrary model. Invalid remote figure indices are handled as invalid configuration data and fall back to the catalog's default item. ## Tests Add focused tests for catalog-to-figure and figure-to-prefab resolution, including the generated `cityboy_sk` entry, unknown IDs, and invalid indices. Keep existing valid figure ordering compatible with the network protocol.