Game server
Provides communication within a single age instance by relaying Plasma messages over the network.
The game server also provides the “game manager” (GameMgr), a different mechanism used for some multiplayer activities, like Ayoheek, marker games, and the hood garden age puzzle. The game manager is implemented by MOSS and Cyan’s server software, but is notably absent from DIRTSAND — H’uru has moved away from using the game manager to reduce complexity on the server side. Instead, H’uru clients support alternative implementations for all mechanics that originally relied on the game manager. Between 2015 and 2022, H’uru clients didn’t support the game manager at all, but this support is being gradually reintroduced for compatibility with non-H’uru clients. The OpenUru client continues to use the game manager, with essentially no changes compared to the original open-sourced client code.
There can theoretically be multiple game server instances, but in practice all MOULa servers use a single game server for all age instances.
Messages
# |
Cli2Game |
Game2Cli |
# |
---|---|---|---|
0 |
0 |
||
1 |
1 |
||
2 |
2 |
||
3 |
GameMgrMsg |
GameMgrMsg |
3 |
Cli2Game_PingRequest
Message type = 0
Ping time: 4-byte unsigned int.
See Ping messages for details.
Game2Cli_PingReply
Message type = 0
Ping time: 4-byte unsigned int.
See Ping messages for details.
Cli2Game_JoinAgeRequest
Message type = 1
Transaction ID: 4-byte unsigned int.
MCP ID: 4-byte unsigned int. Identifies the age instance to join. This value must be obtained from an Auth2Cli_AgeReply.
Account ID: 16-byte UUID. ID of the account that owns the avatar joining the age.
Player vault node ID: 4-byte unsigned int. KI number of the avatar joining the age.
Request to join the given age instance using the specified avatar. Sent by the client as part of the linking process, immediately after connecting to the game server.
Game2Cli_JoinAgeReply
Message type = 1
Transaction ID: 4-byte unsigned int.
Result: 4-byte
ENetError
.
Reply to a JoinAgeRequest. Upon receiving this message, if the result is successful, the client fetches the entire tree of vault nodes under the age instance’s Age node (whose node ID was previously sent to the client in the Auth2Cli_AgeReply) and then begins loading the age.
Cli2Game_PropagateBuffer
Message type = 2
Class index: 4-byte unsigned int.
plCreatable
class index of the message stored in the following buffer. Must be one ofplNetMessage
’s subclasses.Buffer length: 4-byte unsigned int. Byte length of the following buffer field. Can be at most 1 MiB.
Buffer: Variable-length byte array. The serialized message, in the format produced by
plNetMessage::PokeBuffer
and understood byplNetMessage::PeekBuffer
. The class index in the serialized buffer must match the one in the class index field.
Transmits a serialized plNetMessage
from the client to the server.
See Game network messages for details on the different kinds of messages that are sent this way.
Game2Cli_PropagateBuffer
Identical message type and format as Cli2Game_PropagateBuffer, but sent from the server to the client.
Nested message protocols
The low-level game server messages wrap multiple higher-level protocols. Because of their complexity, each of these nested protocols is documented separately.