Home docs pia ENL
Post

ENL

ENL is Nintendo’s private peer-to-peer framework that’s used by many first-party games, such as Mario Kart 8, Splatoon 2 and Super Mario Maker 2. Check out the pages about PIA for details on how a peer-to-peer session is set up. Once the session is ready, ENL sends all packets through the unreliable protocol.

To transmit game-data, games can register content transporters to ENL. ENL also implements a few content transporters on its own.

A message consists of one or more records, terminated by a record with type 255. No byte swapping is done on the fields. The endianness depends on the system.

Record Header

TypeDescription
Uint8Record type
Uint16Record size
BytesRecord data
Record TypeDescription
0 - 31Game-specific
253System request info
254System information
255End record

System request info

Clients can use this to request a specific record from another client. Every non-zero bit in the record mask indicates a record type that the client wants to receive. The least significant bit represents record type 0, and the most significant bit represents record type 31.

On the Switch, a new field was added that lets a client request a system-record. Here, bit 0 represents record type 253, and bit 1 represents record type 254.

Wii U:

TypeDescription
Uint32Record mask (games)

Switch:

TypeDescription
Uint32Record mask (games)
Uint32Record mask (system)

System information

In the tables below, the values of P (maximum number of players) and Q (maximum number of CPUs) are configured by the game.

GamePQ
Mario Kart 81410
Splatoon 2100
Super Mario Maker 240

Wii U:

TypeDescription
Uint32Connected AID bitmap
Uint32Disconnected AID bitmap
Uint32CPU AID bitmap
Uint32Received AID bitmap
Uint64Session time at join
Uint32Principal id
Uint32Unknown
Uint8Is player id table initialized
UniqueId (P*2-1)Player unique ids
UniqueId (Q)CPU unique ids
Uint8Player id sync unique
Uint8 (P)Player id table

Switch:

TypeDescription
Uint64Connected AID bitmap
Uint64Disconnected AID bitmap
Uint64CPU AID bitmap
Uint64Received AID bitmap
Uint64Session time at join
Uint64Principal id
Uint8Is player id table initialized
UniqueId (P*2-1)Player unique ids
UniqueId (Q)CPU unique ids
Uint8Player id sync unique
Uint8 (P)Player id table

UniqueId

Wii U:

OffsetSizeDescription
0x04[Constant id]
0x42Unknown
0x62Padding (always 0)

Switch:

OffsetSizeDescription
0x08[Constant id]
0x82Unknown
0xA6Padding (always 0)
Contents