Files
AIC-Project/docs/superpowers/specs/2026-07-27-unified-character-catalog-design.md
T

60 lines
2.5 KiB
Markdown

# 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.