-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Track Data
Data about track pieces lives in a few places in RCT2.
First, there is the ordering of track pieces, which is used everywhere in the game; you might see a comparison to 72h
to check if a track piece is an on-ride photo for example. Here is the list. The first two digits are the hex numbers corresponding to the order.
Hex | Description |
---|---|
00 | flat |
01 | end station |
02 | begin station |
03 | middle station |
04 | 25° ▲ |
05 | 60° ▲ |
06 | flat to 25° ▲ |
07 | 25° ▲ to 60° ▲ |
08 | 60° ▲ to 25° ▲ |
09 | 25° ▲ to flat |
0A | 25° ▼ |
0B | 60° ▼ |
0C | flat to 25° ▼ |
0D | 25° ▼ to 60° ▼ |
0E | 60° ▼ to 25° ▼ |
0F | 25° ▼ to flat |
10 | L ¼ D5 |
11 | R ¼ D5 |
12 | flat to L bank |
13 | flat to R bank |
14 | L bank to flat |
15 | R bank to flat |
16 | L ¼ D5 bank |
17 | R ¼ D5 bank |
18 | L bank to 25° ▲ |
19 | R bank to 25° ▲ |
1A | 25° ▲ to L bank |
1B | 25° ▲ to R bank |
1C | L bank to 25° ▼ |
1D | R bank to 25° ▼ |
1E | 25° ▼ to L bank |
1F | 25° ▼ to R bank |
20 | L bank |
21 | R bank |
22 | L ¼ D5 25° ▲ |
23 | R ¼ D5 25° ▲ |
24 | L ¼ D5 25° ▼ |
25 | R ¼ D5 25° ▼ |
26 | L "S" bend |
27 | R "S" bend |
28 | L vertical loop |
29 | R vertical loop |
2A | L ¼ D3 |
2B | R ¼ D3 |
2C | L ¼ D3 bank |
2D | R ¼ D3 bank |
2E | L ¼ D3 25° ▲ |
2F | R ¼ D3 25° ▲ |
30 | L ¼ D3 25° ▼ |
31 | R ¼ D3 25° ▼ |
32 | L ¼ D1 |
33 | R ¼ D1 |
34 | L twist ▼ to ▲ |
35 | R twist ▼ to ▲ |
36 | L twist ▲ to ▼ |
37 | R twist ▲ to ▼ |
38 | ½ loop ▲ |
39 | ½ loop ▼ |
3A | L corkscrew ▲ |
3B | R corkscrew ▲ |
3C | L corkscrew ▼ |
3D | R corkscrew ▼ |
3E | flat to 60° ▲ |
3F | 60° ▲ to flat |
40 | flat to 60° ▼ |
41 | 60° ▼ to flat |
42 | tower base |
43 | tower section |
44 | flat covered |
45 | 25° ▲ covered |
46 | 60° ▲ covered |
47 | flat to 25° ▲ covered |
48 | 25° ▲ to 60° ▲ covered |
49 | 60° ▲ to 25° ▲ covered |
4A | 25° ▲ to flat covered |
4B | 25° ▼ covered |
4C | 60° ▼ covered |
4D | flat to 25° ▼ covered |
4E | 25° ▼ to 60° ▼ covered |
4F | 60° ▼ to 25° ▼ covered |
50 | 25° ▼ to flat covered |
51 | L ¼ D5 covered |
52 | R ¼ D5 covered |
53 | L "S" bend covered |
54 | R "S" bend covered |
55 | L ¼ D3 covered |
56 | R ¼ D3 covered |
57 | L ½ banked helix ▲ small |
58 | R ½ banked helix ▲ small |
59 | L ½ banked helix ▼ small |
5A | R ½ banked helix ▼ small |
5B | L ½ banked helix ▲ large |
5C | R ½ banked helix ▲ large |
5D | L ½ banked helix ▼ large |
5E | R ½ banked helix ▼ large |
5F | L ¼ D1 60° ▲ |
60 | R ¼ D1 60° ▲ |
61 | L ¼ D1 60° ▼ |
62 | R ¼ D1 60° ▼ |
63 | brakes |
64 | booster RCT2: Rotation control toggle (Spinning Wild Mouse) |
65 | {reserved}RCT2: inverted 90° ▲ to flat quarter loop (multidim) |
66 | L ¼ banked helix large▲ |
67 | R ¼ banked helix large▲ |
68 | L ¼ banked helix large▼ |
69 | R ¼ banked helix large▼ |
6A | L ¼ helix large▲ |
6B | R ¼ helix large▲ |
6C | L ¼ helix large▼ |
6D | R ¼ helix large▼ |
6E | {ride base: 2 X 2} RCT2: 25° ▲ L banked |
6F | {ride base: 4 X 4} RCT2: 25° ▲ R banked |
70 | waterfall |
71 | rapids |
72 | on ride photo |
73 | {reserved}RCT2: 25° ▼ L banked |
74 | {ride base: 1 X 5}RCT2: 25° ▼ R banked |
75 | watersplash |
76 | {shop/stall} RCT2: flat to 60° ▲ - long base |
77 | {ride base: 1 X 2} RCT2: 60° ▲ to flat - long base |
78 | whirlpool |
79 | {info kiosk}RCT2: 60° ▼ to flat - long base |
7A | {ride base: 1 X 4}RCT2: flat to 60° ▼ - long base |
7B | {ride base: 3 X 3}RCT2: Cable Lift Hill |
7C | reverse whoa belly slope |
7D | reverse whoa belly vertical |
7E | 90° ▲ |
7F | 90° ▼ |
80 | 60° ▲ to 90° ▲ |
81 | 90° ▼ to 60° ▼ |
82 | 90° ▲ to 60° ▲ |
83 | 60° ▼ to 90° ▼ |
84 | brake for drop |
85 | L 1/8 OTD |
86 | R 1/8 OTD |
87 | L 1/8 DTO |
88 | R 1/8 DTO |
89 | L 1/8 bank OTD |
8A | R 1/8 bank OTD |
8B | L 1/8 bank DTO |
8C | R 1/8 bank DTO |
8D | Diag flat |
8E | Diag 25° ▲ |
8F | Diag 60° ▲ |
90 | Diag flat to 25° ▲ |
91 | Diag 25° ▲ to 60° ▲ |
92 | Diag 60° ▲ to 25° ▲ |
93 | Diag 25° ▲ to flat |
94 | Diag 25° ▼ |
95 | Diag60° ▼ |
96 | Diag flat to 25° ▼ |
97 | Diag 25° ▼ to 60° ▼ |
98 | Diag 60° ▼ to 25° ▼ |
99 | Diag 25° ▼ to flat |
9A | Diag flat to 60° ▲ |
9B | Diag 60° ▲ to flat |
9C | Diag flat to 60° ▼ |
9D | Diag 60° ▼ to flat |
9E | Diag flat to L bank |
9F | Diag flat to R bank |
A0 | Diag L bank to flat |
A1 | Diag R bank to flat |
A2 | Diag L bank to 25° ▲ |
A3 | Diag R bank to 25° ▲ |
A4 | Diag 25° ▲ to L bank |
A5 | Diag 25° ▲ to R bank |
A6 | Diag L bank to 25° ▼ |
A7 | Diag R bank to 25° ▼ |
A8 | Diag 25° ▼ to L bank |
A9 | Diag 25° ▼ to R bank |
AA | Diag L bank |
AB | Diag R bank |
AC | Log flume reverser |
AD | spinning tunnel |
AE | L barrel roll ▲ to ▼ |
AF | R barrel roll ▲ to ▼ |
B0 | L barrel roll ▼ to ▲ |
B1 | R barrel roll ▼ to ▲ |
B2 | L bank to L ¼ D3 25° ▲ |
B3 | R bank to R ¼ D3 25° ▲ |
B4 | L ¼ D3 25° ▼ to L bank |
B5 | R ¼ D3 25° ▼ to R bank |
B6 | powered lift |
B7 | L large ½ loop ▲ |
B8 | R large ½ loop ▲ |
B9 | R large ½ loop ▼ |
BA | L large ½ loop ▼ |
BB | L flyer twist ▲ to ▼ |
BC | R flyer twist ▲ to ▼ |
BD | L flyer twist ▼ to ▲ |
BE | R flyer twist ▼ to ▲ |
BF | flyer ½ loop ▲ |
C0 | flyer ½ loop ▼ |
C1 | L fly corkscrw ▲ to ▼ |
C2 | R fly corkscrw ▲ to ▼ |
C3 | L fly corkscrw ▼ to ▲ |
C4 | R fly corkscrew ▼ to ▲ |
C5 | heartline transfer up |
C6 | heartline transfer down |
C7 | L heartline roll |
C8 | R heartline roll |
C9 | mini golf hole A |
CA | mini golf hole B |
CB | mini golf hole C |
CC | mini golf hole D |
CD | RCT2: mini golf hole E |
CE | RCT2: inverted flat to 90° ▼ quarter loop (multidim) |
CF | RCT2: Quarter loop 90° ▲ to invert |
D0 | RCT2: Quarter loop invert to 90° ▼ |
D1 | RCT2: L curved lift hill |
D2 | RCT2: R curved lift hill |
D3 | L reverser |
D4 | R reverser |
D5 | Air Thrust top cap |
D6 | Air Thrust Vertical down |
D7 | Air Thrust vertical down to level |
D8 | Block Brakes |
D9 | L ¼ D3 25° ▲ banked |
DA | R ¼ D3 25° ▲ banked |
DB | L ¼ D3 25° ▼ banked |
DC | R ¼ D3 25° ▼ banked |
DD | L ¼ D5 25° ▲ banked |
DE | R ¼ D5 25° ▲ banked |
DF | L ¼ D5 25° ▼ banked |
E0 | R ¼ D5 25° ▼ banked |
E1 | 25° ▲ to L bank 25° ▲ |
E2 | 25° ▲ to R bank 25° ▲ |
E3 | L bank 25° ▲ to 25° ▲ |
E4 | R bank 25° ▲ to 25° ▲ |
E5 | 25° ▼ to L bank 25° ▼ |
E6 | 25° ▼ to R bank 25° ▼ |
E7 | L bank 25° ▼ to 25° ▼ |
E8 | R bank 25° ▼ to 25° ▼ |
E9 | L bank to L bank 25° ▲ |
EA | R bank to R bank 25° ▲ |
EB | L bank 25° ▲ to L bank flat |
EC | R bank 25° ▲ to R bank flat |
ED | L bank to L bank 25° ▼ |
EE | R bank to R bank 25° ▼ |
EF | L bank 25° ▼ to L bank flat |
F0 | R bank 25° ▼ to R bank flat |
F1 | flat to L bank 25° ▲ |
F2 | flat to R bank 25° ▲ |
F3 | L bank 25° ▲ to flat |
F4 | R bank 25° ▲ to flat |
F5 | flat to L bank 25° ▼ |
F6 | flat to R bank 25° ▼ |
F7 | L bank 25° ▼ to flat |
F8 | R bank 25° ▼ to flat |
F9 | L ¼ D1 90° ▲ |
FA | R ¼ D1 90° ▲ |
FB | L ¼ D1 90° ▼ |
FC | R ¼ D1 90° ▼ |
FD | 90° ▲ to inverted flat quarter loop (multidim) |
FE | flat to 90° ▼ quarter loop (multidim) |
FF | END OF TRACK |
More data about each track piece lives in a few different places in the game. First, starting at 0x997C9D
series of 8 byte structs containing information about the starting and ending slope of track pieces, and the starting and ending bank of track pieces. For each of those 8 byte structs, here's some more information about what these pieces mean. For example, if you see the decimal value 18 in the first column, this means the track piece is a half loop.
Decimal | Description |
---|---|
2 | end station |
7 | vertical loop |
13 | s bend |
17 | twist |
18 | half loop |
19 | corkscrew |
20 | tower base |
21 | small helix |
22 | large helix |
23 | unbanked large helix |
24 | brakes |
26 | on ride photo |
27 | water splash |
29 | barrel roll |
30 | powered lift |
31 | half loop |
33 | log flume reverser |
36 | whoa belly |
43 | lift hill |
46 | spinning tunnel |
47 | rotation control toggle |
52 | rapids (rct2 only) |
152 | waterfall/whirlpool |
172 | brake for drop |
Decimal | Description |
---|---|
2 | ends at 25 degree up |
4 | ends at 60 degree up |
6 | ends at 25 degree down |
8 | ends at 60 degree down |
10 | 90 degree up (tower, whoa belly) |
18 | 90 degree down |
Decimal | Description |
---|---|
2 | starts at 25 degree up |
4 | starts at 60 degree up |
6 | starts at 25 degree down |
8 | starts at 60 degree down |
10 | 90 degree up (also tower, whoa belly) |
18 | 90 degree down |
Decimal | Description |
---|---|
2 | ends with left bank |
4 | ends with right bank |
15 | ends upside down |
Decimal | Description |
---|---|
2 | starts with L bank |
4 | starts with R bank |
15 | starts upside down |
Decimal | Description |
---|---|
64 | half loop up |
192 | half loop down |
208 | something relating to vertical loops. same for both L and R |
224 | corkscrew down |
Data about the height and direction change of track pieces is stored in 11-byte
structs, beginning at 0x994e34
. However, the structs here do not map 1:1
with track pieces. Instead, use the lookup table beginning at 0x994a38
to
determine which struct corresponds to your given track piece.
There are two lookup tables, one at 0x994a38
and one at 0x994632
. I am not
sure yet which one is used in which situations, though it depends on whether a
flag is set at bit 20 of the ride struct beginning at 0x97CF40
.
Here's the breakdown of those 11 byte structs
all empty, as far as I can tell
contains flags relating to helixes and loops
255 if a loop piece that ends going downward, else 0
These seem to track the height change required by the piece. 16 represents a height change of 1 unit, but there are also 8 and 12 represented. check byte 8 for the direction.
Some of this is confusing; a helix up piece should have at least some height change but instead is 0 in the code. Bit 3 set means "helix down"
bit | Description |
---|---|
0 | always set (?) |
1 | 0 if track piece starts diagonal, 1 if track piece starts orthogonal |
2 | if 0, right turn |
3 | if 0, left turn |
4 or 5 | if either is 1, track starts or finishes downhill |
6 or 7 | if either is 1, track starts or finishes uphill |
So a flat track piece with no turns would be 15.
4 if the track piece starts or ends at a 90 degree angle. 0 otherwise.
is either 1 or 255, 1 if a turn?
- Home
- FAQ & Common Issues
- Roadmap
- Installation
- Building
- Features
- Development
- Benchmarking & stress testing OpenRCT2
- Coding Style
- Commit Messages
- Overall program structure
- Data Structures
- CSS1.DAT
- Custom Music and Ride Music Objects
- Game Actions
- G1 Elements Layout
- game.cfg structure
- Maps
- Music Cleanup
- Objects
- Official extended scenery set
- Peep AI
- Peep Sprite Type
- RCT1 ride and vehicle types and their RCT2 equivalents
- RCT12_MAX_SOMETHING versus MAX_SOMETHING
- Ride rating calculation
- SV6 Ride Structure
- Settings in config.ini
- Sizes and angles in the game world
- Sprite List csg1.dat
- Sprite List g1.dat
- Strings used in RCT1
- Strings used in the game
- TD6 format
- Terminology
- Track Data
- Track Designs
- Track drawers, RTDs and vehicle types
- Track types
- Vehicle Sprite Layout
- Widget colours
- Debugging OpenRCT2 on macOS
- OpenGL renderer
- Rebase and Sync fork with OpenRCT2
- Release Checklist
- Replay System
- Using minidumps from crash reports
- Using Track Block Get Previous
- History
- Testing