Home docs misc Mario Kart 8 Tournaments
Post

Mario Kart 8 Tournaments

Mario Kart 8 implement tournaments using the Matchmake Extension Protocol (MK8).

The SimpleSearchObject describes a tournament, the attributes and metadata describe the settings.

  • NOTE: The following description matches the data observed in Mario Kart 8 for the WiiU.

Attributes

A simple search object contains a list of 20 uint32 attributes, index 0 to 13 included are used, the others are reserved/unused.

Attribute 0 - Public target

ValueDescription
1Public
2Private

Attribute 1 - Country ID / Region

Attribute 2 - Race mode

ValueDescription
0200cc
150cc
2100cc
3150cc
4Mirror
5Battle

Attribute 3 - Items

ValueDescription
1All items
2Shells only
3Bananas only
4Mushrooms only
5Bob-ombs
6No items
7No items or coins
8Frantic mode

Attribute 4 - Teams

ValueDescription
1No teams
2Team game

Attribute 5 - Vehicles

ValueDescription
1All vehicles
2Karts only
3Bikes only

Attribute 6 - Control methods

ValueDescription
1All methods
2Motion controls

Attribute 7 - Region

ValueDescription
1Global
2Regional

Attribute 8 - Player rating

ValueDescription
10 - 99999
20 - 1500
30 - 2500
40 - 5000
51500 - 2500
61500 - 5000
71500 - 99999
85000 - 99999
99000 - 99999

Attribute 9 - Available courses

ValueDescription
0Base
1Base + DLC 1
2Base + DLC 2
3Base + DLC 1+2
4Only DLC 1+2

Attribute 10 - Group switching

ValueDescription
1Don’t switch
2Every 4th match

Attribute 11 - CPUs

ValueDescription
1No CPU
2Easy CPU
3Normal CPU
4Hard CPU

Attribute 12 - Official

ValueDescription
1Not official
2Official
ValueDescription
1Not recommended
2Recommended

Metadata

It’s encoded ChunkData

ChunkData format

It consists of the following 2 byte header:

TypeDescription
Uint16Magic (0x5a5a, ‘ZZ’)

Then following the header, there’s these structures:

TypeDescription
Uint8ID
Uint16Length
TContent (of the above length, can be anything)
  • It goes until ID 255

Here’s what each ID correspond to for MK8 tournaments:

IDTypeDescription
0Uint8Revision
1Uint32Version
2UTF16Tournament name
3Uint8Tournament icon index
4UTF16Tournament description
5Uint32Repeat type
6Uint32Game set number
7UTF16Team 1 name
8UTF16Team 2 name
9Uint32Battle duration
11Uint32Competition update datetime

Repeat type

ValueDescription
1Week
2Day
3Fixed time

Battle duration

ValueDescription
01 min
12 min
23 min
34 min
35 min

Competition update datetime

It’s calculated like this:

1
2
3
4
5
this->minute = 10 * (value % 10);
this->hour = value / 10 % 100;
this->day = value / 1000 % 100;
this->month = value / 100000 % 100;
this->year = value / 10000000 + 2000;
Contents