Skip to navigation


The Oulton Park track

One of the four extra tracks in the Revs 4 Tracks expansion

Oulton Park was one of the four new tracks released by Acornsoft as part of the Revs 4 Tracks expansion in late 1985 (the others being Brands Hatch, Donington Park and Snetterton).

The track looks like this, if we extract the data from the track data file and draw the results:

The Oulton Park track in RevsThe Oulton Park track in RevsThe Oulton Park track in Revs

The track's elevation profile looks like this:

The elevation of the Oulton Park track in RevsThe elevation of the Oulton Park track in RevsThe elevation of the Oulton Park track in Revs

The track is broken up into 27 sections, as follows:

NumberShapeDescription
0|<-|Lodge to Old Hall (4/4)
1->Old Hall
2||Old Hall to Cascades (1/4)
3->Old Hall to Cascades (2/4)
4->Old Hall to Cascades (3/4)
5{}Old Hall to Cascades (4/4)
6<-Cascades
7||Cascades to Island Hairpin (1/2)
8|->|Cascades to Island Hairpin (2/2)
9|->|Island Hairpin
10{}Island Hairpin to Knickerbrook (1/4)
11{}Island Hairpin to Knickerbrook (2/4)
12||Island Hairpin to Knickerbrook (3/4)
13{}Island Hairpin to Knickerbrook (4/4)
14->Knickerbrook
15|->|Knickerbrook to Druids (1/4)
16<-Knickerbrook to Druids (2/4)
17|<-|Knickerbrook to Druids (3/4)
18|<->|Knickerbrook to Druids (4/4)
19->Druids
20|<-|Druids to Lodge (1/3)
21||Druids to Lodge (2/3)
22|->|Druids to Lodge (3/3)
23->Lodge
24->Lodge to Old Hall (1/4)
25<-Lodge to Old Hall (2/4)
26|<-|Lodge to Old Hall (3/4)

Each section is one of the following shapes:

  • || is a straight section that doesn't curve to the left or right, and has the same gradient throughout the whole section
  • {} is a straight section in the sense that it doesn't curve to the left or right, but the gradient can differ between sub-sections
  • -> consists of sub-sections that all curve to the right
  • <- consists of sub-sections that all curve to the left
  • |->| consists of sub-sections that are either straight or curve to the right
  • |<-| consists of sub-sections that are either straight or curve to the left
  • |<->| consists of sub-sections that are either straight or curve to the left or right

See the deep dives on the extra tracks data file format and dynamic track generation in the extra tracks for information on how the extra tracks are constructed, and how the track segment vectors are dynamically generated in the extra tracks. You may also find it useful to read the deep dives on the original track data file format and building a 3D track from sections and segments.

Track generation and shapes
---------------------------

Each track section has lots of associated data, most of which is stored in the two track section data blocks. These are split into part 1 and part 2. See the deep dives on the track data file format and the extra tracks data file format for details.

In the extra track files, track sections are broken up into sub-sections, which are then broken up into segments. Each section therefore has an associated size, given as the number of segments. There is also a track segment vector number, which determines which track segment vectors make up the sections; specifically, it points to the position in the segment vector table where the section's first vector is stored. Note, however, that because the track segment vectors are dynamically generated for this track, the vector number points to the position in the table where the first calculated vector will be stored, rather than pointing to the data itself (as the data is only generated when needed).

Finally, each section has inner and outer coordinates that define the inner and outer track edges at the start of the section. These coordinates share the same y-coordinate, as track sections are level from left to right, so the following table shows the coordinates as (x, z), or longitude and latitude, and the section height is shown separately.

The section data for the Oulton Park track is as follows:

SectionVectorSizeSegmentsInner coordOuter coordHeight
00450-44(-12000, -12000)(-12240, -12000)4608
151945-63(-12605, -6644)(-12843, -6674)4283
2243764-100(-11739, -4757)(-11819, -4531)4105
32524101-124(-7558, -3277)(-7638, -3051)3994
496125-130(-4811, -2422)(-4875, -2190)3922
51522131-152(-4098, -2339)(-4100, -2099)3862
63741153-193(-1458, -2317)(-1460, -2077)3286
73864194-257(813, 1171)(589, 1087)3040
83930258-287(-1875, 8339)(-2099, 8255)3936
92919288-306(-3043, 11742)(-3271, 11666)3771
10840307-346(-1912, 12480)(-1698, 12590)3572
11820347-366(288, 8200)(502, 8310)3892
122859367-425(1388, 6060)(1602, 6170)3652
132922426-447(4633, -253)(4847, -143)3534
141116448-463(5843, -2607)(6057, -2497)3933
152744464-507(5643, -4435)(5851, -4555)4055
163113508-520(2812, -8875)(3004, -9017)3754
17444521-564(2155, -10279)(2387, -10341)4326
18837565-601(1020, -15429)(1258, -15459)4474
19630602-631(1169, -19867)(1407, -19891)4251
203723632-654(-1498, -21899)(-1504, -22139)4635
212131655-685(-4258, -21896)(-4238, -22136)4402
222342686-727(-7978, -22206)(-7958, -22446)4743
232612728-739(-13014, -22359)(-13058, -22595)4827
243933740-772(-13656, -21236)(-13890, -21184)4833
25338773-780(-12396, -17492)(-12614, -17392)5354
26238781-818(-12174, -16563)(-12414, -16543)5226

The shape of each track section is also defined in the track data file. Section coordinates are generated on-the-fly, as described in the deep dive on dynamic track generation in the extra tracks, and bit 6 of the track section flags in trackSectionFlag determines the kind of generator that is used (curved or straight).

The shape data for the Oulton Park track is as follows:

SectionSignList sizeGenerator (bit 6)Shape (bit 0)Shape
0121 = Curve0 = Straight|<-|
1211 = Curve1 = Curve->
2230 = Straight0 = Straight||
3331 = Curve0 = Straight->
4331 = Curve0 = Straight->
5421 = Curve0 = Straight{}
6531 = Curve1 = Curve<-
7540 = Straight0 = Straight||
8631 = Curve0 = Straight|->|
9731 = Curve1 = Curve|->|
10831 = Curve0 = Straight{}
11831 = Curve0 = Straight{}
12920 = Straight0 = Straight||
131051 = Curve0 = Straight{}
141041 = Curve1 = Curve->
151031 = Curve0 = Straight|->|
161131 = Curve1 = Curve<-
171131 = Curve0 = Straight|<-|
181231 = Curve0 = Straight|<->|
191331 = Curve1 = Curve->
201431 = Curve0 = Straight|<-|
211430 = Straight0 = Straight||
221411 = Curve0 = Straight|->|
231511 = Curve1 = Curve->
241531 = Curve0 = Straight->
25031 = Curve1 = Curve<-
26031 = Curve0 = Straight|<-|

The sign number describes which signs to show when driving around the track (see the next section for details), and the list size determines the size of the track section list in the track verge buffer (see the deep dive on data structures for the track calculations for an explanation).

Road signs
----------

Revs supports up to 16 road signs per track. Each sign's 3D coordinate is stored as a vector (xTrackSignVector, yTrackSignVector, zTrackSignVector) that is scaled down to fit into 8-bit coordinates. This vector describes the sign's coordinate relative to the inner coordinates of a specified track section. Inner section coordinates are stored in part 1 and part 2 of the section data, in the 16-bit variables (xTrackSectionIHi xTrackSectionILo), (yTrackSectionIHi yTrackSectionILo) and (zTrackSectionIHi zTrackSectionILo). We can therefore calculate the 3D coordinate of a sign by scaling the sign vector and adding it to the relevant section coordinate. See the deep dive on road signs for details of this calculation.

The following table shows the sign number, the sign type, the number of the section to which the sign coordinate is relative, the inner section coordinate, the scaled sign vector and the 3D coordinate of the sign that we calculate from all of the preceding data.

Each track section also has an associated sign number in the trackSectionData entry in the first block of track section data. A sign is drawn if this number changes when we drive into a new track section (so it shows the correct sign whether we are driving forwards or backwards into the new section). The sign numbers are shown in the shape table in the previous section.

The road signs for the Oulton Park track are as follows:

SignTypeSectiontrackSectionItrackSignVectorCoordinate
0Start flag26[ -12174 ]
[   5226 ]
[ -16563 ]
[   3 ]
[ -26 ]
[  49 ]
[ -11982 ]
[   4810 ]
[ -13427 ]
1Right turn0[ -12000 ]
[   4608 ]
[ -12000 ]
[  -7 ]
[   8 ]
[  26 ]
[ -12448 ]
[   4736 ]
[ -10336 ]
2Straight2[ -11739 ]
[   4105 ]
[  -4757 ]
[  20 ]
[   6 ]
[   6 ]
[ -10459 ]
[   4201 ]
[  -4373 ]
3Straight3[  -7558 ]
[   3994 ]
[  -3277 ]
[   4 ]
[   7 ]
[   7 ]
[  -7302 ]
[   4106 ]
[  -2829 ]
4Left turn4[  -4811 ]
[   3922 ]
[  -2422 ]
[   4 ]
[   7 ]
[   0 ]
[  -4555 ]
[   4034 ]
[  -2422 ]
5Straight7[    813 ]
[   3040 ]
[   1171 ]
[ -11 ]
[  24 ]
[  34 ]
[    109 ]
[   3424 ]
[   3347 ]
6Hairpin9[  -3043 ]
[   3771 ]
[  11742 ]
[  22 ]
[   8 ]
[ -76 ]
[  -1635 ]
[   3899 ]
[   6878 ]
7Straight9[  -3043 ]
[   3771 ]
[  11742 ]
[  -6 ]
[   1 ]
[  13 ]
[  -3427 ]
[   3787 ]
[  12574 ]
8Straight10[  -1912 ]
[   3572 ]
[  12480 ]
[  44 ]
[  24 ]
[ -75 ]
[    904 ]
[   3956 ]
[   7680 ]
9Right turn14[   5843 ]
[   3933 ]
[  -2607 ]
[ -34 ]
[ -14 ]
[  76 ]
[   3667 ]
[   3709 ]
[   2257 ]
10Straight15[   5643 ]
[   4055 ]
[  -4435 ]
[  -4 ]
[ -12 ]
[ -25 ]
[   5387 ]
[   3863 ]
[  -6035 ]
11Straight16[   2812 ]
[   3754 ]
[  -8875 ]
[  -9 ]
[  36 ]
[ -15 ]
[   2236 ]
[   4330 ]
[  -9835 ]
12Right turn19[   1169 ]
[   4251 ]
[ -19867 ]
[   2 ]
[  22 ]
[  61 ]
[   1297 ]
[   4603 ]
[ -15963 ]
13Straight19[   1169 ]
[   4251 ]
[ -19867 ]
[ -21 ]
[   9 ]
[ -25 ]
[   -175 ]
[   4395 ]
[ -21467 ]
14Right turn23[ -13014 ]
[   4827 ]
[ -22359 ]
[  76 ]
[   4 ]
[  -2 ]
[  -8150 ]
[   4891 ]
[ -22487 ]
15Straight25[ -12396 ]
[   5354 ]
[ -17492 ]
[ -16 ]
[  -8 ]
[ -23 ]
[ -13420 ]
[   5226 ]
[ -18964 ]

Corner markers and verge markings
---------------------------------

Each track section can optionally have a set of corner markers (three markers are shown for each curve when configured, while one marker is shown for each applicable straight). The markers can either be a combination of red and white markers, or just white, according to bit 5 of the track section flags in trackSectionFlag. They can also appear on the left or the right of the track, according to bits 3-4 of the section flags.

Track sections can also have differently coloured verge markings. These are black-and-white by default, but can be configured in bits 1-2 of the section flags to be red-and-white on the left or the right of the track.

See the deep dive on corner markers for details of how corner markers work, and the deep dive on the track verges for more on how the verge markings are implemented.

The corner markers and verge markings for the Oulton Park track are as follows:

SectionMarker colours
(bit 5)
Marker positions
(bits 3-4)
Verge colours
(bits 1-2)
01 = Red/white10 = Left00 = Both black/white
11 = Red/white01 = Right10 = Red/white on right
20 = White00 = None01 = Red/white on left
30 = White00 = None00 = Both black/white
40 = White00 = None00 = Both black/white
51 = Red/white01 = Right00 = Both black/white
61 = Red/white10 = Left01 = Red/white on left
70 = White00 = None10 = Red/white on right
81 = Red/white10 = Left00 = Both black/white
91 = Red/white01 = Right10 = Red/white on right
100 = White00 = None01 = Red/white on left
110 = White00 = None00 = Both black/white
120 = White00 = None00 = Both black/white
131 = Red/white10 = Left00 = Both black/white
141 = Red/white01 = Right10 = Red/white on right
151 = Red/white01 = Right01 = Red/white on left
161 = Red/white10 = Left01 = Red/white on left
171 = Red/white01 = Right00 = Both black/white
181 = Red/white10 = Left00 = Both black/white
191 = Red/white01 = Right10 = Red/white on right
200 = White00 = None01 = Red/white on left
210 = White00 = None00 = Both black/white
221 = Red/white10 = Left00 = Both black/white
231 = Red/white01 = Right10 = Red/white on right
241 = Red/white01 = Right01 = Red/white on left
251 = Red/white10 = Left01 = Red/white on left
260 = White00 = None00 = Both black/white

Driver speeds and approaches
----------------------------

The track data also contains data that influences how the non-player drivers drive (see the deep dive on tactics of the non-player drivers for details). This data latter is not only used to control non-player drivers, but feeds into computer assisted steering (CAS) as well; see the deep dive computer assisted steering (CAS) for more on this.

This data includes the segment number in each section where non-player drivers should start turning (in trackSectionTurn), the optimum speed for each section (in trackSectionSpeed), the optimum steering to apply for this section (in trackSteering), and whether this section has a maximum speed (in bit 7 of trackSectionFlag).

The non-player driver data for the Oulton Park track is as follows:

SectionTurn at segmentOptimum speedSpeed as bit 7:0-6Section shapeOptimum steeringMaximum speed
0421200:120|<-|<- 6*-
127150:15->-> 18120
22552551:127||<- 6*-
392551:127->-> 6*-
436200:20->-> 12*-
5181301:2{}-> 12*-
649260:26<-<- 11130
72552551:127||<- 6*-
828670:67|->|<- 0*-
923100:10|->|-> 1867
102552551:127{}<- 6*-
112552551:127{}<- 6*-
122552551:127||<- 6*-
13131401:12{}<- 6*-
1434180:18->-> 15140
15282551:127|->|-> 21*-
1638120:12<-<- 17*-
172552551:127|<-|<- 6*-
18311371:9|<->|<- 6*-
1942230:23->-> 13137
202552551:127|<-|<- 6*-
212552551:127||<- 6*-
2237910:91|->|<- 6*-
2322130:13->-> 1791
2462551:127->-> 6*-
2545140:14<-<- 13*-
262552551:127|<-|<- 6*-

The speed is shown as-is, and with bit 7 split out, which is used in the driver tactic calculations. The optimum steering is shown as a direction and a magnitude, and if there is an asterisk (*), then the magnitude is scaled by the track's base speed for the chosen class.