Documenting the protocols, structures and concepts used by Hyperscape.
Striven
2026-02-20 2c26434de9a7ffcfdd83114129189619b2328112
04_rendezvous/05_rmc_protocol.md
@@ -6,7 +6,7 @@
## Official Implementation
As seen in HyperScape, this protocol is done over [RendezVous](./03_structure.md) data packets.
As seen in HyperScape, this protocol is done over [RendezVous](03_structure.md) data packets.
When a request is made, usually in a function going by `<protocol name>Protocol::Call<method name>`, a call context is created and containers in memory for data returned by the server are associated with **return value pointers**, with IDs from `[0, n)`, where n is the number of parameters.
@@ -18,10 +18,10 @@
| Protocol                                                                     | Description                                                                                      | HyperScape-specific? |
|------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|----------------------|
| [`LoginProtocol`](./01_rmc_protocols/loginprotocol.md)                       | Used for authenticating with an RMC server using a Ubisoft token.                                | ✖️                    |
| [`CloudServersProtocol`](./01_rmc_protocols/cloudserversprotocol.md)         | Used for listing datacenters for connecting to game servers.                                     | ✔️                    |
| [`ApexAntitoxicityProtocol`](./01_rmc_protocols/apexantitoxicityprotocol.md) | Currently unknown, possibly for managing bans and mutes.                                         | ✔️                    |
| [`SessionProtocol`](./01_rmc_protocols/sessionprotocol.md)                   | Presumably for creating, joining and leaving game sessions, but it is unknown what that entails. | ✔️                    |
| [`LoginProtocol`](01_rmc_protocols/loginprotocol.md)                       | Used for authenticating with an RMC server using a Ubisoft token.                                | ✖️                    |
| [`CloudServersProtocol`](01_rmc_protocols/cloudserversprotocol.md)         | Used for listing datacenters for connecting to game servers.                                     | ✔️                    |
| [`ApexAntitoxicityProtocol`](01_rmc_protocols/apexantitoxicityprotocol.md) | Currently unknown, possibly for managing bans and mutes.                                         | ✔️                    |
| [`SessionProtocol`](01_rmc_protocols/sessionprotocol.md)                   | Presumably for creating, joining and leaving game sessions, but it is unknown what that entails. | ✔️                    |
| ...                                                                          | ...                                                                                              | ...                  |
> [!NOTE]
@@ -33,7 +33,7 @@
| Name          | Description                                                                                                                                                 | Type                                           |
|---------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------|
| Packet Length | The total number of bytes in the packet, not including the length itself.                                                                                   | `u32`                                          |
| Protocol Name | The protocol service on the server that is responsible for managing this request                                                                            | [`String`](./03_structure.md#structure-string) |
| Protocol Name | The protocol service on the server that is responsible for managing this request                                                                            | [`String`](03_structure.md#structure-string) |
| Is Request?   | Whether or not this packet is for a _request_.                                                                                                              | `bool`                                         |
| ...           | See [Request Packet Format](#request-packet-format) or [Response Packet Format](#response-packet-format) for parsing the packet depending on `Is Request?`. | ...                                            |
@@ -65,8 +65,8 @@
|----------------|---------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|
| ...            | See [Base Packet Format](#base-packet-format) for parsing the prologue of a request packet.                         | ...                                                                                        |
| Call ID        | The nonce token for this call to identify the response associated with this request.                                | `u32`                                                                                      |
| Method Name    | The method to call on the server.                                                                                   | [`String`](./03_structure.md#structure-string)                                             |
| Class Versions | Version information about the data in the request                                                                   | [`List`](./03_structure.md#structure-listt)`<`[`ClassVersion`](#structure-classversion)`>` |
| Method Name    | The method to call on the server.                                                                                   | [`String`](03_structure.md#structure-string)                                             |
| Class Versions | Version information about the data in the request                                                                   | [`List`](03_structure.md#structure-listt)`<`[`ClassVersion`](#structure-classversion)`>` |
| ...            | See the respective [protocol and method specification](#known-protocols) to parse and write the rest of the packet. |                                                                                            |
### Structure: `ClassVersion`
@@ -79,7 +79,7 @@
| Name           | Description                                       | Type                                           |
|----------------|---------------------------------------------------|------------------------------------------------|
| Structure Name | The name of the structure to assign a version to. | [`String`](./03_structure.md#structure-string) |
| Structure Name | The name of the structure to assign a version to. | [`String`](03_structure.md#structure-string) |
| Version        | The version of the structure.                     | `u16`                                          |
## Response Packet Format
@@ -109,7 +109,7 @@
|-------------|---------------------------------------------------------------------------------------------------------------------|------------------------------------------------|
| ...         | See [Response Packet Format](#response-packet-format) for parsing the prologue of a successful response packet.     | ...                                            |
| Call ID     | The nonce token for the call to associate the response to the request.                                              | `u32`                                          |
| Method Name | The method that was called by the client, see note below.                                                           | [`String`](./03_structure.md#structure-string) |
| Method Name | The method that was called by the client, see note below.                                                           | [`String`](03_structure.md#structure-string) |
| ...         | See the respective [protocol and method specification](#known-protocols) to parse and write the rest of the packet. |                                                |
> [!NOTE]
@@ -123,6 +123,6 @@
| Name            | Description                                                                                                        | Type                                           |
|-----------------|--------------------------------------------------------------------------------------------------------------------|------------------------------------------------|
| ...             | See [Response Packet Format](#response-packet-format) for parsing the prologue of an unsuccessful response packet. | ...                                            |
| Error Namespace | The category of error that occurred.                                                                               | [`String`](./03_structure.md#structure-string) |
| Error Namespace | The category of error that occurred.                                                                               | [`String`](03_structure.md#structure-string) |
| Error Code      | The code of the error in the specified namespace                                                                   | `u16`                                          |
| Call ID         | The nonce token for the call to associate the response to the request.                                             | `u32`                                          |