The framework has one gameplay architecture for dedicated server, host, and remote clients. The server owns truth, shared services own rules, NGO bridges carry requests and replication, and scene presentation binds only to the locally owned player.
Layer model
| Layer | Responsibility | Examples |
|---|---|---|
| Tile Tick Movement | Gameplay clock, grids, tile coordinates, pathfinding, motor | TickManager, GridManager, TilePathService, MovementMotor |
| Core RPG runtime | Transport-agnostic RPG state and rules | UnitCombat, UnitSkills, SimpleInventory, UnitEquipment, CombatFormulaService |
| Multiplayer authority | Request validation, ownership, replication, spawn/readiness | NetworkBootstrap, NetworkPlayer, ServerInteractionPipeline |
| Persistence | Capture/restore modules and storage lifecycle | SaveCoordinator, IPlayerSaveModule, ServerCharacterPersistence |
| Client presentation | Input, UI, camera, interpolation, VFX, sound | LocalPlayerPresentationBinder, LocalPlayerContext, HUD/panels |
| Editor/data | Designer authoring and stable definitions | ScriptableObjects and Core RPG Hub databases/editors |
Runtime lifecycle
NetworkBootstrap chooses Server / Host / Client
↓
Transport connection
↓
NetworkLoginService authenticates
↓
NetworkPlayerSpawner creates owned player
↓
NetworkPlayer injects authority + identity
↓
ServerCharacterPersistence loads character
↓
NetworkLocationSession restores location
↓
LocalPlayerPresentationBinder binds owner UI/camera
↓
GameplayReadiness.AllReady
Composition over global lookups
PlayerComposition is the network-prefab composition bridge. The player prefab is expected to contain NetworkObject, NetworkPlayer, and PlayerComposition. Server-only authority dependencies are injected during spawn; owner/client presentation dependencies bind after ownership and readiness.
Exactly-once services
- One
NetworkManager/NetworkBootstrap. - One authoritative
TickManagerper gameplay world. - One shared grid/path service set.
- One
NetworkPlayerSpawnerper network session. - One
LocalPlayerPresentationBinderper client gameplay composition. - One
AudioManager; it self-creates and rejects duplicates.
Anti-pattern: adding a new manager because an existing service is inconvenient. First find the authoritative owner and add an interface, handler, definition, or module at that boundary.
Namespace map
| Root | Use |
|---|---|
GreenCloakGames.TileTickMovement | Tick, grid, pathfinding and movement foundation. |
GreenCloakGames.TileTickRPGCore | Core runtime systems, data definitions, UI and saving. |
GreenCloakGames.TileTickRPGCore.Multiplayer | Transport-agnostic multiplayer contracts/configuration. |
GreenCloakGames.TileTickRPGCore.Multiplayer.NGO | Netcode for GameObjects bridges and replication. |