Track updates

How to create a historically accurate season?

Formula 2 (1967)
Formula 3 (1967)




     Historically accurate seasons

In this document you will find general guidelines on how I have designed my driver.ini and gpl_ai.ini files. It is rather long and if you do not want to go through all the formulas but just use the files, go ahead to particular season files using the menu on the left.

How to create a historically accurate season?

Well, itís impossible J. The variety of the results was too big to be exactly reproducible in GPL. E.g., in 1967 season the dominant car was the Lotus 49. However, it was first entered in the third GP of the year in Zandvoort, while in the first two GPs Clark and Hill had to drive an older and weaker car. Ferrari did not take part in the first GP at Kyalami as they did not want to travel that far for just one race. The good news, however, is that it is not desirable to model the seasons precisely as the game would become too predictable and playing the season could change in just placing yourself in a more or less fixed grid.

You can find an excellent report of the 1967 season here.

I am not the first who attempts to model the GPL season more realistically than Papyrus did in the original release. There is an excellent site by David Wright where you can find files to change the GPL installation as close to the real 1967 season as possible Ė including track updates, correct team and driver names and driversí speed. While not explicitly stated, I suppose he did something very similar also for the 65 mod.

The reason why I developed my own approach to realistic season files is twofold. First, I have slightly different feeling about some of the changes David Wright did. And second, I do not know the formulas he used and I wanted to simulate consistently not only the 67 and 65 seasons but also the 66, 68 and 69 seasons, for which we have the carsets and layouts available, with possible extensions to future mods and seasons.

My approach is based on statistics of the seasons that are available on the internet and on guessing and tuning the formulas supposedly used by GPL. I used two sources of statistics: the site for season results and qualifying times and the site for the reliability data.

The speed and behavior of the AI drivers in GPL is set at several places:

  • driver.ini (driv65.ini for the 65 mod) Ė this file contains relative data for all the AI drivers. The most important are global_hype_scaling, hype, qualifying, quickness and all the chance_ failure items. I also provide data for the aggression, experience, smoothness and alertness items although I am not entirely sure about their meaning for actual AI driverís behavior.

  • gpl_ai.ini (gpla65.ini for the 65 mod) Ė this file contains general guidelines for the AI behavior. The fundamental setting here is the npt_override which sets the overall speed of the AI grid and its role is explained below. Another crucially important item is the mechanical_failure_chance which controls the probability of mechanical failures of the AIs during the race. This is very important is the chance_ items contained in the driver.ini file determine only relative distribution of the failure among the AI drivers. If the mechanical_failure_chance was set too low, the low reliability drivers (who are often quite fast, like Dan Gurney in 67 season) would have got unrealistically high chance to win the races and the whole championship. If, in turn, it was set to high, slow but reliable drivers would have turned to sure winners all the whole season would have got completely random if any reliability stars were absent from the grid. There is a number of other items that I have changed in the gpl_ai.ini field in the belief that it helps the AI to behave more realistically, most of them being inspired by this thread at the RSC forums.

  • Certain factors influencing the speed of the AI drivers seem to be built-in either in the GPL main executable or somewhere in the track files. I am none of those track wizards so I have not really an idea where but I found empirically that there is a fundamental car handicap, aside from the driver.ini settings, that influences the speed of the AI drivers on a given track. I discuss these values below. There are probably also reliability factors other than those in gpl_ai.ini and driver.ini. Their exact role in the overall probability is however, not known.

To create a realistic season for GPL, you need more than the modifications to the files above. You can have changes to the sound files and to graphics: the carset, the tracks and the layout files (team info screens), you can correct team names in the gpl.exe, you can add tracks that were not included in the original release of the game but the GPs in the particular season were held there. For the latter purpose you will also need to edit the gp.ini file. All these changes and what is available are described in other sections of this site. Now letís continue the description how to modify the driver.ini and gpl_ai.ini files.


Model of the season for driver.ini file

The input data obtained from the F1Gamers site are:

  • Driver names  and the year of their first GP

  • Number of races in the season  and number of laps in the races

  • Team names

  • Qualifying times of all the drivers at each track

  • Race results of all drivers at each track . The value of  is either the position at the end of the race or the reason for not being classified. The reasons can be: - did not finish due to failure, - did not finish due to accident, - did not prequalify, - did not start, - not classified.

  • Number of races entered by the driver  and completed by the driver on a classified position

  • The year of the season

From the site you can get the "percent of distance driven" statistics which is a good measure of driverís reliability:

Two parameters are obtained from simulations performed in GPL:  is a mean lap time achieved by GPL cars with as many random factors disabled as possible and  values are relative speeds of GPL teams built-in the game. These relative speeds in fact are different at each track, an average over the season's tracks is taken. I have used simulated qualification involving 19 AI drivers with a special gpl_ai.ini and driver.ini files. In gpl_ai.ini file the following settings were used:

  • disable_random_modifiers = 1.000000

  • n_mods_per_interval = 0.00000

  • mechanical_failure_chance = 0.0000

with other values as described at the bottom of this page. The driver.ini gets the following settings for each driver:

  • aggression = 1.000

  • alertness = 1.000

  • experience = 1.000

  • hype = 1.0000

  • qualifying = 1.000

  • quickness = 1.000

  • smoothness = 1.000

  • magic_grip = 1.000

So, only the built-in speed coefficients should influence the qualifying AI driver speed. There is still some random factor that causes that some driver might achieve substantially better times than his teammate, but usually all AI drivers of one team achieve the same time up to few hundredths of a second. If the random improvement happens, experiment gets repeated. The results for the 1967 Papyrus tracks plus the Le Mans Bugatti are as follows:

We can see that the Lotus is the best AI car for most of the season with the exception of Zandvoort and Monza where it gets beaten by the Eagle. Similarly, BRMs get seriously handicapped at Monaco as are Murasamas (Hondas) at Silverstone at Watkins Glen. The average over all tracks gives the following  factors that are in perfect agreement with what can be obtained with the GPLseason utility by Nigel Pattinson:















For the tracks of the 65 mod we get:

and the averages yield  factors:















Clearly Murasama (Honda) is best for the whole season with Eagle and Coventry (Cooper) being the worse except for Zandvoort where Brabham and even Lotus are surpassed by all other cars.

The zero percent time in the above plots is given by average over all seven teams for each track and we take it as a normalized time  time in seconds:












East London








































Watkins Glen


Watkins Glen















The  times are different for the 65 mod as it features different physics. The values for the 67 season are currently usable also for 1966, 1968 and 1969 seasons (until particular physics mods are developed).

In the following I will define several formulas that will be used for the determination of several pameters of the driver.ini and gpl_ai.ini files. To maek the formulas simpler, we introduce a couple of functions:


To compute the values for the driver.ini file we first derive three auxiliary values. The  quantity describes the average qualifying speed of each driver regardless of his team speed:

Another quantity gives driverís average position over the season:




is an average classified position over the whole grid and all races in a season. In that way, the  quantity speaks out about the driverís average success in the races, the second term in the nominator then expresses certain penalty for not entering a race Ė such race is counted as either his average classified result or the average result of the whole grid (whichever is worse). Without this correction the drivers who entered, e.g., just one race in a season and achieved an excellent result, would be the stars of the whole season in GPL. This correction says to them: If you did not enter the race, youíre taken as average for that race. This is a compromise, as we can hardly know whether such driver achieved an extraordinary result more-or-less by chance or whether it is an excellent driver in an extraordinary car who simply did not have the opportunity to show us his art in the rest of the season. The interseasonal comparison goes outside the scope of my considerations.

The third auxiliary value is called  and it expresses the difference between fastest and slowest driver in each qualification and I take it as a measure of the spread of the field in the race as well, as I do not have driversí race lap data available:

No we can compute some of the values for the driver.ini file. First, the value of quickness is based directly on the :

The fundamental parameter that influences the speed of each driver during the race is the :

This formula looks complicated but basically it expresses that the hype for each driver is given mainly by its average position in a race scaled by the average spread of the field and overall speed of the whole grid corrected by the team factor and 1/10 of the quickness, as in fact about 1/10th of the quickness value contributes to the total speed of the AI driver. The factor 0.865 has been guessed empirically.

Having  and , the  can be found as follows:

The experience factor of each driver can be expressed as

i.e. it is the higher the longer time passed since the driverís first GP. Alertness is then based on experience in the following manner

and aggressivity is a combination of experience (negatively) and quickness (positively):

I know that this choice is disputable as not every older driver gets more cautious and vice versa but I can see some logic under this construction. Smoothness is given by the fluctuation of the qualifying position:

where the Rank function returns the index in the increasingly ordered list of values and Variance is a measure of their fluctuations. Again, I know, that the fluctuation of qualifying times is given by many more factors than just the smoothness (consistency) of the driver. But it at least in some weak relation. Reliability of each driver is constructed in the following manner:

the last term expressing reliability penalty for not entering a race - it basically counts as a race with an average chance of failure. All failure reasons are given the same probability.

I did not use the magic_grip parameter, it seems to me that once the quickness and smoothness values are in a reasonable range, magic_grip is not needed. The global_hype_scaling = 1.000000 for each driver.

All the formulas above are included in the MS Excel spreadsheets that you can find in particular seasons.


Changes to the gpl_ai.ini file

As already mentioned before, the mechanical_failure_chance parameter must be set in accordance with the parameters in driver.ini file, otherwise unrealistic results would occur. In addition, this parameter must be scaled with race length, which is unfortunately not done by the game itself. I determine the value of mechanical_failure_chance as follows. First, the number of DNF (did not finish due to failure) results in each race is summed

and then a mechanical_failure_chance  factor for each race can be obtained as

where nd is a number of drivers that entered the race and  is mechanical_failure_interval in the gpl_ai.ini file. The factor 0.66 accounts for the fact that GPL simulates more accidents and unreasoned retirements that indeed happened in reality. The mechanical_failure_chance parameter is then obtained as an average of the  over all races. This value is correct for the GP length of the races. For other lengths it must be divided by the following factors: 0.3 for long races, 0.15 for short races and 0.075 for novice races.

The following two parameters are necessary for the mod to work. The first of them must be set to 1.0 otherwise AI drivers would change their speed with race type selected. The second parameter is set to 0.0 by default which results in improvements of the AI drivers as the human driver improves. This is what Papyrus, the creators of the game, originally intended but hardly anyone is using the original setting as it makes the races almost impossible to win. In addition, using the second parameter, the relative speed of the whole field of AI drivers can be set using the second parameter.

  • override_difficulty_hype = 1.0         ;(default: 0.0)

  • npt_override = 1.00                       ;(default: 0.0)

If you want the whole field to be about 10% slower, set npt_override to 1.10. This only works correctly if you set the parameter track_global_hype_scaling = 1.00 in all track.ini files for the tracks you want to use in the season.

The following parameter controls the start reaction of the AI drivers. Default (18) is too fast for most of us, the following is good for me (it is in fact in units of 1/36 s).

  • base_race_start_hiatus = 25.000     ;(default: 18.0)

The rest of the changes introduced in the gpl_ai.ini file has nothing to do with the speed of the AI drivers directly, but they influence the behavior of the AIs, in particular they should help them not to get stuck behind slower drivers. Most of them are taken from this discussion at the RSC forums:

  • attempt_outbrake_dlong_sep = 25.0              ;(default: 12.410400)

  • auto_blocker_line_speed_pct = 0.93              ;(default: 0.74)

  • being_squeezed_speed_coeff = 0.8               ;(default: 0.85)

  • straightaway_pass_speed_coeff = 1.0001      ;(default: 0.000)

  • braking_efficiency_coeff = 0.95                    ;(default: 0.800)

The following two changes have been made to increase the number of errors AI drivers do (I still do many more):

  • base_brake_lock_chance = 20.000000              ;(default: 10.0)

  • base_missed_gear_chance = 20.000000           ;(default: 10.0)

So, thatís it. A long journey, isnít it. Hope you find the information collected here useful.

And remember, there are many random factors, so you can still get crazy season results with my files. You should not, however, get results far from reality too often or even regularly. If you do, let me know, please.

Back to the top of page