High Data Rate

From Custom Mario Kart
Jump to navigation Jump to search

High Data Rate is a small modification to networking in Mario Kart Wii made by MrBean35000vr and Chadderz. It causes RACE data packets to be sent by the console much more often. The notable side effect of this is a reduction in perceived 'lag' online. For example, red shell items will hit their targets a lot faster and more smoothly from the user's perspective.


The modification occurs in a method inside StaticR.rel (address RMCE:806539A8/RMCJ:8065749C/RMCP:80657E30) responsible for sending the RACE packets. Normally, the game forms a RACE packet every frame, then calls the method once per frame. The method first checks that at least 17ms have passed since the last time it ran. If so it starts looking through the list of peers that it is connected to and tries to send the RACE packet to a peer. If it succeeds it stops, otherwise it keeps looking for peers to send to until it has tried them all.

High Data Rate changes the behaviour. First of all, it reduces the check to ensure at least 7ms have passed. The reasoning is that 17ms is possibly a mistake, as the method is in fact called once per visual frame, which will typically be once every 16.7ms. Therefore, the method may skip sending a packet on a given frame simply because less than 17ms have passed, even though the player has moved. Secondly, High Data Rate causes the method to keep looking for players to send messages to, even if it finds one. This means the method will send a message to every peer, rather than just one.

The result of these changes is that in a 12 player room, the game goes from sending one RACE packet to any given peer every 22 frames on average to sending every frame. That means a reduction in latency of up to 360ms.


From a player's perspective the effects of High Data Rate are:

  • Red Shells lock faster and hit more quickly.
  • Thunder Clouds pass accurately and quickly.
  • Dropped items appear more accurately without delay.
  • Bumping into other drivers is more accurate.
  • Thrown items seem to hit more accurate.
  • Position trackers are better synchronised.

Asymmetric connections

If one player has High Data Rate and connects to another player who does not, the game will still function correctly. The High Data Rate player will still send more data to the normal player, but the normal player will use the standard data rate. Consequently, the normal player will feel some of the benefits above and so will the High Data Rate player. For example, the High Data Rate player will find it easier to hit the normal player with Red Shells or Thunder Clouds, but the normal player will find it easier to bump or throw items at the High Data Rate player.

Insufficient Connections

If one player's Internet connection does not meet the Bandwidth requirements of High Data Rate, that player can start 'teleporting' and can end up appearing worse that if they did not have High Data Rate. They may also experience no trouble, so failing to meet the requirements is not a guarantee that there will be problems.

Latency and Bandwidth

For comparison the following table shows information about how the data rates will differ between clients with the modification and clients without it. The Latency column shows the amount of time between a player action (such as firing an item) and a RACE packet being sent to all players about it. The Bandwidth column shows the amount of bandwidth used in both the upstream and downstream directions. All of the values in this table are shown as ranges and were derived analytically rather than measured.

High Data Rate comparison
Wiis Latency Bandwidth
Original New Original New
2 17-33ms 7-33ms 0.04-0.25mbps 0.04-0.25mbps
4 51-100ms 7-33ms 0.04-0.25mbps 0.13-0.74mbps
6 85-167ms 7-33ms 0.04-0.25mbps 0.22-1.23mbps
8 119-233ms 7-33ms 0.04-0.25mbps 0.31-1.72mbps
10 153-300ms 7-33ms 0.04-0.25mbps 0.40-2.21mbps
12 187-367ms 7-33ms 0.04-0.25mbps 0.49-2.70mbps

Please note that the Latency column only covers the game's internal latency. There will still be network latency to transfer the packet to the peer before it arrives. So for example, a good connection between the UK and France has approximately 10ms of Internet latency. A connection from the EU to USA will have approximately 100ms of Internet latency. A connection from the USA to Japan will have approximately 150ms of Internet latency. A connection from the EU to Australia will have approximately 250ms of Internet latency. All of these values should be added to the internal latency to compute the delay between a game action (such as turning or firing an item) and the other player seeing the action.

GCT Code

A GCT version of the modification is as follows: