Station Protocol - RainMz/NintendoClients GitHub Wiki
The difference between the reliable and unreliable protocol is that the reliable protocol wraps messages in a reliable sliding window. The reliable protocol is not used by Pia however, and support for it was removed in version 5.6.
| Port |
Description |
| 0 |
Unreliable |
| 1 |
Reliable |
The first byte of each packet indicates the message type.
Version numbers
| Pia Version |
Version |
| 3.3 - 3.6 |
2 |
| 3.7 - 3.10 |
3 |
| 4.5 - 4.10 |
5 |
| 5.2 - 5.6 |
7 |
| 5.7 - 5.9 |
8 |
| 5.10 - 5.18 |
9 |
In version 5.19, the StationProtocol was renamed to MeshStationProtocol and version numbers start at 0 again:
| Pia Version |
Version |
| 5.19 - 5.23 |
0 |
| 5.24 - 5.26 |
1 |
| 5.27 - 5.43 |
2 |
Connection Request
3.3 - 4.10:
| Type |
Description |
| Uint8 |
Message type (1) |
| Uint8 |
Connection id |
| Uint8 |
Version number |
| Uint8 |
Is inverse connection request |
| StationConnectionInfo |
Station connection info |
| Uint32 |
Ack id |
5.2 - 5.6:
5.7 - 5.9:
5.10 - 5.18:
5.19 - 5.26:
| Type |
Description |
| Uint8 |
Message type (1) |
| Uint8 |
Number of available protocols (N) |
| Uint8 (N*2) |
Protocol list |
| Uint8 |
Connection id |
| Uint8 |
Is inverse connection request |
| Uint64 |
Target constant id |
| Uint32 |
Target variable id |
| Uint8 |
Inverse connection id |
| StationLocation |
Station location |
| Uint32 |
Ack id |
5.27 - 5.43:
| Type |
Description |
| Uint8 |
Message type (1) |
| Uint8 |
Connection result (always 0) |
| Uint8 |
Platform id |
| Uint64 |
Target constant id |
| Uint32 |
Target variable id |
| Uint8 |
Number of available protocols (N) |
| Uint8 (N*2) |
Protocol list |
| Uint16 |
Size of station location |
| StationLocation |
Station location |
| Uint8 (32) |
Identification token (ascii) |
| Uint32 |
Session id |
| Uint8 |
Number of players |
| Uint8 |
Number of participants. This is either 1 or equal to the number of players, depending on whether each player should count as a participant in the session. |
| Uint8 |
Number of player infos (P) |
| PlayerInfo (P) |
Player info |
| Uint32 |
Ack id |
Connection Response
A connection response can either accept or deny the connection request. This is indicated by the connection result.
Accepted
3.3 - 4.10:
5.2 - 5.6:
| Type |
Description |
| Uint8 |
Message type (2) |
| Uint8 |
Connection result (accepted) |
| Uint8 |
Version number |
| Uint8 |
Platform id |
| Uint8 |
Fragment id |
| Uint8 (32) |
Identification token (ascii) |
| Uint32 |
Session id |
| Uint8 |
Number of players |
| Uint8 |
Number of participants. This is either 1 or equal to the number of players, depending on whether each player should count as a participant in the session. |
| Uint8 |
Number of player infos |
| PlayerInfo (2 or 4) |
Player info, may be fragmented. |
| Uint32 |
Ack id |
5.7 - 5.18:
| Type |
Description |
| Uint8 |
Message type (2) |
| Uint8 |
Connection result (accepted) |
| Uint8 |
Version number |
| Uint8 |
Platform id |
| Uint8 |
Fragment id |
| Uint64 |
Target constant id |
| Uint32 |
Target variable id |
| Uint8 (32) |
Identification token (ascii) |
| Uint32 |
Session id |
| Uint8 |
Number of players |
| Uint8 |
Number of participants. This is either 1 or equal to the number of players, depending on whether each player should count as a participant in the session. |
| Uint8 |
Number of player infos |
| PlayerInfo (2 or 4) |
Player info, may be fragmented. |
| Uint32 |
Ack id |
5.27 - 5.43:
| Type |
Description |
| Uint8 |
Message type (2) |
| Uint8 |
Connection result (accepted) |
| Uint8 |
Platform id |
| Uint64 |
Target constant id |
| Uint32 |
Target variable id |
| Uint8 |
Number of available protocols (N) |
| Uint8 (N*2) |
Protocol list |
| Uint16 |
Size of station location |
| StationLocation |
Station location |
| Uint8 (32) |
Identification token (ascii) |
| Uint32 |
Session id |
| Uint8 |
Number of players |
| Uint8 |
Number of participants. This is either 1 or equal to the number of players, depending on whether each player should count as a participant in the session. |
| Uint8 |
Number of player infos |
| PlayerInfo (2 or 4) |
Player info |
| Uint32 |
Ack id |
Denying
3.3 - 5.6:
5.7 - 5.18:
5.19 - 5.23:
| Type |
Description |
| Uint8 |
Message type (2) |
| Uint8 |
Connection result |
| Uint8 |
Protocol id that has unexpected protocol version |
| Uint8 |
Expected protocol version |
| Uint16 |
Always 0 |
| Uint64 |
Constant id |
| Uint32 |
Variable id |
5.24 - 5.26:
| Type |
Description |
| Uint8 |
Message type (2) |
| Uint8 |
Connection result |
| Uint8 |
Protocol id that has unexpected protocol version |
| Uint8 |
Expected protocol version |
| Uint16 |
Always 0 |
| Uint64 |
Constant id |
| Uint32 |
Variable id |
| Uint8 |
Connection id |
5.27 - 5.43:
Disconnection request
| Offset |
Size |
Description |
| 0x0 |
1 |
Message type |
Disconnection response
| Offset |
Size |
Description |
| 0x0 |
1 |
Message type |
Ack
| Offset |
Size |
Description |
| 0x0 |
1 |
Message type |
| 0x1 |
3 |
Padding |
| 0x4 |
4 |
Ack id |
Platform ID
| ID |
Platform |
| 3 |
Wii U |
| 4 |
Switch |
Connection Result
| Value |
Description |
| 0 |
Accepted |
| 1 |
Connection denied |
| 2 |
Incompatible version |
Fragment ID
In some Pia versions, the connection response may be fragmented, depending on the maximum payload size.
| ID |
Description |
| 0 |
The player info array contains all players. |
| 1 |
The player info array contains the first two players. |
| 2 |
The player info array contains the last two players. |
Protocol List
The protocol list contains the following for every available protocol.
| Type |
Description |
| Uint8 |
Protocol id |
| Uint8 |
Protocol version |
Player Info
3.3 - 3.10:
| Type |
Description |
| Uint16 (16) |
Player name (utf16) |
| Uint8 |
Player name length |
| Uint8 |
Language |
| Uint16 |
Padding |
4.5 - 4.10:
| Type |
Description |
| Uint16 (16) |
Player name (utf16) |
| Uint8 |
Player name length |
| Uint8 |
Language |
| Uint32 |
Unknown |
| Uint16 |
Padding |
5.2 - 5.6:
| Type |
Description |
| Bytes (80) |
Player name |
| Uint8 |
Player name encoding (1=utf8, 2=utf16) |
| Bytes (40) |
Account name |
| Uint8 |
Account name encoding (1=utf8, 2=utf16) |
| Uint8 |
Language |
| Bytes (64) |
Play history registration key |
5.7 - 5.19:
| Type |
Description |
| Bytes (80) |
Player name |
| Uint8 |
Player name encoding (1=utf8, 2=utf16) |
| Bytes (40) |
Account name |
| Uint8 |
Account name encoding (1=utf8, 2=utf16) |
| Uint8 |
Language |
| Bytes (64) |
Play history registration key |
| Uint64 |
Principal id |
5.27 - 5.43:
| Type |
Description |
| Uint8 |
Player name encoding (1=utf8, 2=utf16) |
| Bytes (80) |
Player name |
| Uint8 |
Account name encoding (1=utf8, 2=utf16) |
| Bytes (40) |
Account name |
| Uint8 |
Language |
| Bytes (64) |
Play history registration key |
| Uint64 |
Principal id |