Time Shifted Multiplayer (TSM) is an algorithm used in the game Real Racing 3 that generates opponents for players. In traditional racing games, when a player races against other players’ records, he or she can only race against a ghost. TSM, on the other hand, is highly innovative in the sense that it generates from past records opponents that are fully interactive. However, within the design of the TSM algorithm there are inadvertent loopholes as well as intrinsic limitations that the player can take advantage of to lower (or raise) the difficulty of the game.
1. In this article the term “TSM” refers to the algorithm as a whole, regardless of whether the player plays online or not.
2. Data and facts in this article are gathered from game version 3.1.0. It is possible that Firemonkeys will update the algorithm in later versions so that observations made here no longer apply.
3. This article relies heavily on hypothesis, rather than hard facts. Any efforts to help test the validity of these hypotheses will be much appreciated.
The TSM algorithm
According to information shown on the loading screen of the game, “Real Racing 3 carefully picks opponents to keep the game exciting.” It can also easily be noticed that when the player keeps winning, the game gets progressively harder, while when the player keeps losing, the game gets progressively easier.
The most probable design of the algorithm is as follows. The game keeps a pool of past race records for each racing event, and a general ranking for each player. The player’s ranking is based on his or her past performances. When the player enters a race, the game picks opponents that are similar in ranking to the player. If the player keeps winning races, his or her ranking is raised, so that in later races there will be more skilled opponents; if the player keeps losing, the ranking is lowered, and there will be less skilled opponents.
Online and Offline racing
Although playing the game online is much more challenging than playing offline, there is no difference in the algorithm behind the scenes. The only difference is that there are different pools of past racing records: when offline, the game picks opponents from its built-in pool, while in online racing the game picks opponents from Firemonkeys' server. The reason for the higher difficulty of online racing is that, while the built-in pool always stays the same, the online pool is constantly being updated, and only players’ best records are uploaded to the server for others to compete against (according the information from the loading screen). Hence the records online get better and better, and as a result a top 50% record from the online pool can be much faster than a top 50% record from the built-in pool.
Although Firemonkeys claims that “when racing online, every opponent is a time-shifted double of another player” on the loading screen, it is not exactly the case. To record each car’s exact movement during a race (as in Time Trials), store all the data on a server, and allow the game to download up to 21 such records within a reasonable amount of time for each racing is simply infeasible, considering the large number of records stored on the server. So the algorithm uses an ingenious alternative: it stores only the finishing time of a player’s race (or the distance in an Endurance event, etc.), and in the actual race generates an AI racer that races at a certain skill level so that it finishes at exactly the same time as the real human racer.
This can be seen from the fact that TSM opponents in the game never race like real humans: they never cut corners, and always stick to the race line unless attempting overtakes.
Another characteristic of the algorithm is that the skill level of an AI racer only affects its cornering speed; at straights it will always sprint flat-out.
Taking advantage of the TSM algorithm
Because of the design of the TSM algorithm, it is possible to take advantage of it to lower the difficulty of the game. Here are some tricks:
1. To lower the difficulty of the game, lose several races continuously.
Losing lowers your overall ranking, so that in later races the game will pick less skilled opponents. Note that the first two losses will not affect your ranking; at least three continuous losses are needed for this technique to take effect. Also, to save time and effort, you should pick events that you can lose quickly (such as Speed Snap or Drag) or without having to do anything at all (such as Endurance or Elimination).
2. When you win, try to win by small margins; when you lose, lose by big margins.
Winning raises your ranking, so after some wins the difficulty of the game will eventually go back to normal. However, you can slow down the increase of difficulty by winning by small margins. One advantageous characteristic of the TSM algorithm is that it ranks players according to their actual finishing times (or distances for Endurance events, etc.), rather than finishing position. So finishing a race at 50 seconds and win will raise you to a much higher ranking than finishing at 60 seconds and win, therefore giving you much more challenge in later races.
Moreover, this system of ranking actually makes it possible to win races and lower your ranking (hence difficulty) at the same time. The trick is to:
3. Slow down your opponents as much as possible.
Suppose you currently have a ranking of top 30%, and that means for a certain race your finishing time is 50 seconds. Now the game picks three opponents that, by default, will finish the race at 50, 51 and 52 seconds. Normally you have to finish in less than 50s to win this race. However, if you can slow down each one of your opponents by 10s, you can finish at 59s and still win the race. Since your ranking is calculated based on your finishing time, you will be ranked lower, and in the next race you will face slower opponents.
This is feasible for another reason. The skill level for each AI opponent is constant during the entire race, which means if you ram one of them off the road and slow it down for five seconds, it will race at the same speed for the rest of the event as it did before, rather than race faster to make up for the time lost. So if you always try to slow down your opponents at every race (ram them off the road, set them spinning, blocking them, etc.), you will notice that the game gets easier and easier even though you keep winning.
Indicators of current level of difficulty
When manipulating the difficulty of the game, you will want to know the current level of difficulty. A good indicator is the winning distance of an Endurance race. The distance seems to be a universal indicator, i.e. a certain distance indicates the same difficulty level, regardless of your cars, your upgrade levels, your series, etc.
And here are some data from my observations:
|Winning distance (offline)||Difficulty|
|less than 5km||obscenely easy|
My suggestion is to keep the winning distance below 7km. In this way you can save a lot of time on servicing, since most races can be easily won even with a wrecked car. Also you can save a lot of R$ and gold on upgrading, as long as you are not trying to meet a certain PR requirement.
1. A player’s overall ranking can be different across different series; changes in ranking in one series will not affect ranking in another.
2. Time Trial results have no effect on difficulty.
3. Difficulty setting will only affect the opponents’ cornering skill; it does not affect their upgrade level. So in later events of a series, you will still face opponents that are upgraded to the teeth, and they can really give you a challenge on straights, especially if you are driving an unserviced car.
4. In time-limited events (such as Exclusive Reveal), failure to reach a certain goal will be considered a loss regardless of whether you finish the race or not. So you can simply retire and retry a race for several times to lower the difficulty (failure will be indicated by a pop-up message saying “GOAL FAILED”).
List of Offline Bots Names
|No.||Offline Bots Names||Difficulty|
|1||Dr Perriwinkle||outrageously hard|
|11||The Raven||very hard|
|18||_thefreak_||a bit hard|
|19||Sparx||a bit hard|
|20||Bronson Guthry||a bit hard|
|21||drollted||a bit hard|
|22||PerturB||a bit hard|
|23||jojo76||a bit hard|
|24||morkRING||a bit hard|
|31||The Brioche||not so easy|
|32||Kranger||not so easy|
|33||Pungent Sauce||not so easy|
|34||HeAt||not so easy|
|35||mintCrystal||not so easy|
|36||Turnipage||not so easy|
|43||Tiesha Francione||very easy|
|44||Gayle Lokan||very easy|
|45||Jerrell Omo||very easy|
|46||Rosamond Mahula||very easy|
|48||Dane Rabenold||very easy|
|49||Marcel Corrigeux||very easy|
|50||Moises Gabby||obscenely easy|