Name: Multiplayer Arc
Summary: Implement Multiplayer Support
Scope: Engine
Current Goal: Entity Serialization cleanup
Phase: Implementation
Curator: Immortius
I realise I have a number of other Arcs with outstanding tasks (primarily modding), but getting multiplayer implemented is important as it will impact on how other systems will work. I believe things have reached the point where multiplayer can be added so this will be my primary focus. Once multiplayer is done I'll return focus back to modding, cleanup, documentation and some actual gameplay.
Still need to work out the details, but what I envision is involved:
Work Complete:
Summary: Implement Multiplayer Support
Scope: Engine
Current Goal: Entity Serialization cleanup
Phase: Implementation
Curator: Immortius
I realise I have a number of other Arcs with outstanding tasks (primarily modding), but getting multiplayer implemented is important as it will impact on how other systems will work. I believe things have reached the point where multiplayer can be added so this will be my primary focus. Once multiplayer is done I'll return focus back to modding, cleanup, documentation and some actual gameplay.
Still need to work out the details, but what I envision is involved:
- Basic connection support (Host listen server, join server).
- Chat support.
- RemoteChunkProvider and chunk transfer support.
- Proper connection handshake with configuration transfer (active mods, block to id allocation, etc)
- Chunk updates, various other world related updates (particularly notification when a block is allocated to an id due to lazy allocation)
- Network Component
- Entity replication (probably involves annotations on component fields)
- Event replication
- Player persistence between sessions
- Headless server (Dedicated server)
- Master server, identity server or any sort of server browser.
- Rigorous cheat protection/prevention
- Automatic download of needed mods (too dangerous without mod sandboxing)
- Probably Source engine style client-side prediction of character movement. Assuming we want it.
Work Complete:
- Basic network system and connection establishment
- Bits of the connection handshake - server information flows to client during loading
- RemoteChunkProvider
- Transfer of chunks and block updates
- Basic entity replication
- Event replication
- Simple chat
- Basic Client/ClientInfo/Character setup
- Inventory replication
- Inventory behaviour and world interaction netcode
- Improved control over the replication of fields
- Inform client when blocks are allocated ids after joining
- Improve handling of block update messages
- Remove lighting information from chunk messages, and have the client recalculate lighting
- Proper connection failure/disconnect behaviour
- Optimisations, generally via one-off replicating lookup tables (asset uris -> ids) and flow control
- Improve chat interface