Skip to navigation

Revs on the BBC Micro

The Silverstone track

The original track that came with the first release of Revs

The Silverstone track is the original Revs track, and was the only track supplied with the first Acornsoft release in 1985.

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

The Silverstone track in RevsThe Silverstone track in RevsThe Silverstone track in Revs

The track's elevation profile looks like this:

The elevation of the Silverstone track in RevsThe elevation of the Silverstone track in RevsThe elevation of the Silverstone track in Revs

The Silverstone track is broken up into 24 sections, as follows:

NumberShapeDescription
0||Abbey Curve to Woodcote Corner (2/2)
1->Woodcote Corner (1/3)
2<-Woodcote Corner (2/3)
3->Woodcote Corner (3/3)
4||Woodcote Corner to Copse Corner
5->Copse Corner
6||Copse Corner to Maggotts Curve (1/3)
7{}Copse Corner to Maggotts Curve (2/3)
8||Copse Corner to Maggotts Curve (3/3)
9<-Maggotts Curve
10||Maggotts Curve to Becketts Corner (1/2)
11||Maggotts Curve to Becketts Corner (2/2)
12->Becketts Corner
13||Becketts Corner to Chapel Curve
14<-Chapel Curve
15||Hangar Straight (1/3)
16{}Hangar Straight (2/3)
17||Hangar Straight (3/3)
18->Stowe Corner
19||Stowe Corner to Club Corner
20->Club Corner
21||Club Corner to Abbey Curve
22<-Abbey Curve
23{}Abbey Curve to Woodcote Corner (1/2)

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 changes within the section
  • -> is a section that curves to the right
  • <- is a section that curves to the left

See the deep dives on the track data file format and building a 3D track from sections and segments for details of how the track is constructed.

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

Each track section has a lot 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 dive on the track data file format for details.

In the Silverstone track file, track sections are 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.

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 Silverstone track is as follows:

SectionVectorSizeSegmentsInner coordOuter coordHeight
00990-98(-12000, 4000)(-12352, 3988)3200
112199-119(-12396, 15880)(-12748, 15868)3200
22212120-131(-11483, 18070)(-11579, 18408)3200
33421132-152(-10574, 19089)(-10922, 19145)3200
455105153-257(-8529, 20303)(-8545, 20654)3200
55624258-281(4071, 20828)(4055, 21179)3200
68028282-309(6104, 19209)(6455, 19223)3275
7819310-318(6244, 15849)(6595, 15863)3667
89054319-372(6289, 14769)(6640, 14783)3703
99116373-388(6559, 8289)(6910, 8303)3487
1010738389-426(7162, 6493)(7451, 6693)3423
1110827427-453(9746, 2731)(10035, 2931)3271
1210927454-480(11717, 139)(11997, 351)3163
1313640481-520(10597, -2434)(10707, -2769)3149
1413716521-536(6037, -3954)(6147, -4289)3149
15153135537-671(4568, -5126)(4869, -5308)3085
161546672-677(-3802, -19031)(-3501, -19213)2005
1716028678-705(-4174, -19649)(-3873, -19831)2039
1816140706-745(-5910, -22533)(-5609, -22715)2459
19201104746-849(-10167, -23134)(-10422, -23378)2660
2020233850-882(-18799, -14086)(-19054, -14330)2036
2123585883-967(-18941, -10466)(-19214, -10244)2110
2223618968-985(-12481, -2561)(-12754, -2339)2960
2325438986-1023(-11810, -558)(-12162, -571)3197

The shape of each track section is also defined in the track data file. Silverstone is the only track that contains all its track segment vectors and coordinates as static data in the data file (all the other tracks generate track coordinates and vectors on-the-fly). As a result, bit 6 of the track section flags in trackSectionFlag has no effect in Silverstone.

The shape data for the Silverstone track is as follows:

SectionSignList sizeGenerator (bit 6)Shape (bit 0)Shape
0030 = N/A0 = Straight||
1130 = N/A1 = Curve->
2120 = N/A1 = Curve<-
3220 = N/A1 = Curve->
4220 = N/A0 = Straight||
5330 = N/A1 = Curve->
6420 = N/A0 = Straight||
7530 = N/A1 = Curve{}
8530 = N/A0 = Straight||
9640 = N/A1 = Curve<-
10640 = N/A0 = Straight||
11730 = N/A0 = Straight||
12720 = N/A1 = Curve->
13720 = N/A0 = Straight||
14840 = N/A1 = Curve<-
15930 = N/A0 = Straight||
161020 = N/A1 = Curve{}
171110 = N/A0 = Straight||
181140 = N/A1 = Curve->
191230 = N/A0 = Straight||
201320 = N/A1 = Curve->
211420 = N/A0 = Straight||
221520 = N/A1 = Curve<-
231520 = N/A0 = 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 Silverstone track are as follows:

SignTypeSectiontrackSectionItrackSignVectorCoordinate
0Chicane0[ -12000 ]
[   3200 ]
[   4000 ]
[ -10 ]
[   8 ]
[ 108 ]
[ -12640 ]
[   3328 ]
[  10912 ]
1Straight2[ -11483 ]
[   3200 ]
[  18070 ]
[  -8 ]
[   8 ]
[   4 ]
[ -11995 ]
[   3328 ]
[  18326 ]
2Start flag3[ -10574 ]
[   3200 ]
[  19089 ]
[  82 ]
[   8 ]
[  27 ]
[  -5326 ]
[   3328 ]
[  20817 ]
3Right turn5[   4071 ]
[   3200 ]
[  20828 ]
[ -78 ]
[   8 ]
[   3 ]
[   -921 ]
[   3328 ]
[  21020 ]
4Straight7[   6244 ]
[   3667 ]
[  15849 ]
[   7 ]
[   0 ]
[   8 ]
[   6692 ]
[   3667 ]
[  16361 ]
5Left turn9[   6559 ]
[   3487 ]
[   8289 ]
[  -4 ]
[  18 ]
[  75 ]
[   6303 ]
[   3775 ]
[  13089 ]
6Right turn12[  11717 ]
[   3163 ]
[    139 ]
[ -39 ]
[  17 ]
[  63 ]
[   9221 ]
[   3435 ]
[   4171 ]
7Left turn14[   6037 ]
[   3149 ]
[  -3954 ]
[  40 ]
[   8 ]
[  14 ]
[   8597 ]
[   3277 ]
[  -3058 ]
8Straight14[   6037 ]
[   3149 ]
[  -3954 ]
[  -5 ]
[   8 ]
[  -1 ]
[   5717 ]
[   3277 ]
[  -4018 ]
9Straight14[   6037 ]
[   3149 ]
[  -3954 ]
[ -51 ]
[ -16 ]
[ -79 ]
[   2773 ]
[   2893 ]
[  -9010 ]
10Right turn18[  -5910 ]
[   2459 ]
[ -22533 ]
[  39 ]
[ -20 ]
[  53 ]
[  -3414 ]
[   2139 ]
[ -19141 ]
11Straight19[ -10167 ]
[   2660 ]
[ -23134 ]
[  23 ]
[  12 ]
[ -16 ]
[  -8695 ]
[   2852 ]
[ -24158 ]
12Right turn20[ -18799 ]
[   2036 ]
[ -14086 ]
[  48 ]
[  22 ]
[ -59 ]
[ -15727 ]
[   2388 ]
[ -17862 ]
13Straight21[ -18941 ]
[   2110 ]
[ -10466 ]
[  -6 ]
[   4 ]
[ -16 ]
[ -19325 ]
[   2174 ]
[ -11490 ]
14Left turn22[ -12481 ]
[   2960 ]
[  -2561 ]
[ -46 ]
[ -16 ]
[ -57 ]
[ -15425 ]
[   2704 ]
[  -6209 ]
15Straight23[ -11810 ]
[   3197 ]
[   -558 ]
[   0 ]
[   8 ]
[  36 ]
[ -11810 ]
[   3325 ]
[   1746 ]

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 Silverstone 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
21 = Red/white10 = Left01 = Red/white on left
31 = Red/white01 = Right10 = Red/white on right
41 = Red/white10 = Left01 = Red/white on left
51 = Red/white01 = Right10 = Red/white on right
60 = White00 = None01 = Red/white on left
70 = White00 = None00 = Both black/white
81 = Red/white01 = Right00 = Both black/white
91 = Red/white10 = Left01 = Red/white on left
100 = White00 = None00 = Both black/white
111 = Red/white10 = Left00 = Both black/white
121 = Red/white01 = Right10 = Red/white on right
131 = Red/white01 = Right01 = Red/white on left
141 = Red/white10 = Left01 = Red/white on left
150 = White00 = None00 = Both black/white
160 = White00 = None00 = Both black/white
171 = Red/white10 = Left00 = Both black/white
181 = Red/white01 = Right10 = Red/white on right
191 = Red/white10 = Left01 = Red/white on left
201 = Red/white01 = Right10 = Red/white on right
211 = Red/white01 = Right01 = Red/white on left
221 = Red/white10 = Left01 = Red/white on left
230 = White00 = None10 = Red/white on right

Non-player driver speeds and steering
-------------------------------------

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 Silverstone track is as follows:

SectionTurn at segmentOptimum speedSpeed as bit 7:0-6Section shapeOptimum steeringMaximum speed
0961361:8||<- 5*-
11800:0->-> 12136
2201381:10<-<- 28-
330330:33->-> 14-
4981250:125||<- 6*-
540260:26->-> 12125
62552551:127||-> 5*-
7000:0{}-> 5*-
8332551:127||-> 5*-
940120:12<-<- 15*-
102552551:127||<- 6*-
11211160:116||<- 12*-
1239250:25->-> 12116
13242551:127||-> 14*-
1440200:20<-<- 14*-
152552551:127||<- 5*-
16000:0{}<- 5*-
17221391:11||<- 5*-
1852240:24->-> 13139
19961511:23||<- 8*-
2049280:28->-> 22*151
21692551:127||-> 10-
2236110:11<-<- 21*-
232552551:127{}<- 5*-

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.