Difference between revisions of "Modding Whiplash/Fatal Racing"
Aspirations (talk | contribs) |
Aspirations (talk | contribs) |
||
Line 48: | Line 48: | ||
|Right shoulder height<br><code>int</code> | |Right shoulder height<br><code>int</code> | ||
|Length<br><code>int</code> | |Length<br><code>int</code> | ||
− | |Yaw rotation, clockwise (°)<br><code>float</code> | + | |Yaw rotation, counter-clockwise (°)<br><code>float</code> |
|Pitch rotation, upwards (°)<br><code>float</code> | |Pitch rotation, upwards (°)<br><code>float</code> | ||
− | |Roll rotation, clockwise (°)<br><code>float</code> | + | |Roll rotation, counter-clockwise (°)<br><code>float</code> |
|AI line<br><code>int</code> | |AI line<br><code>int</code> | ||
|AI line<br><code>int</code> | |AI line<br><code>int</code> | ||
Line 67: | Line 67: | ||
|Center surface type<br><code>int</code> | |Center surface type<br><code>int</code> | ||
|Right surface type<br><code>int</code> | |Right surface type<br><code>int</code> | ||
− | |Left wall type | + | |Left wall type<br><code>int</code> |
− | |Right wall type | + | |Right wall type<br><code>int</code> |
− | |Roof type | + | |Roof type<br><code>int</code> |
|Left upper outer wall type<br><code>int</code> | |Left upper outer wall type<br><code>int</code> | ||
|Left lower outer wall type<br><code>int</code> | |Left lower outer wall type<br><code>int</code> | ||
Line 77: | Line 77: | ||
|Environment floor type<br><code>int</code> | |Environment floor type<br><code>int</code> | ||
|Building/Sign type<br><code>int</code> | |Building/Sign type<br><code>int</code> | ||
− | |<br><code>int</code> | + | |Building/Sign horizontal offset<br><code>int</code> |
− | |<br><code>int</code> | + | |Building/Sign vertical offset<br><code>int</code> |
− | |<br><code>float</code> | + | |Building/Sign yaw, counter-clockwise (°)<br><code>float</code> |
− | |<br><code>float</code> | + | |Building/Sign pitch, upwards (°)<br><code>float</code> |
− | |<br><code>float</code> | + | |Building/Sign roll, counter-clockwise (°)<br><code>float</code> |
|- | |- | ||
|Left upper outer wall angle?<br><code>int</code> | |Left upper outer wall angle?<br><code>int</code> | ||
Line 95: | Line 95: | ||
|Right lower outer wall height<br><code>int</code> | |Right lower outer wall height<br><code>int</code> | ||
|Right upper outer wall height<br><code>int</code> | |Right upper outer wall height<br><code>int</code> | ||
− | |<br><code>int</code> | + | |Wall/roof height<br><code>int</code> |
− | |<br><code>int</code> | + | |Draw order?<br><code>int</code> |
− | |<br><code>int</code> | + | |Draw order?<br><code>int</code> |
− | |<br><code>int</code> | + | |Draw order<br><code>int</code> |
|<br><code>int</code> | |<br><code>int</code> | ||
|<br><code>int</code> | |<br><code>int</code> | ||
Line 148: | Line 148: | ||
*** Bits 1-7: pair index, first texture on left, second on right | *** Bits 1-7: pair index, first texture on left, second on right | ||
**** <code>00000000</code> is first pair, <code>00000010</code> is second pair, <code>00000100</code> is third pair, etc | **** <code>00000000</code> is first pair, <code>00000010</code> is second pair, <code>00000100</code> is third pair, etc | ||
+ | These apply for road surface, wall/roof, and outer wall/floor. | ||
====Building/Sign type==== | ====Building/Sign type==== | ||
{| class="wikitable" style="text-align: center;" | {| class="wikitable" style="text-align: center;" | ||
Line 202: | Line 203: | ||
* 0: full grip | * 0: full grip | ||
* 12: ice | * 12: ice | ||
− | ====Wall type | + | ====Wall type==== |
− | * Left and right | + | * Left and right must exist to draw roof |
====Outer wall floor type?==== | ====Outer wall floor type?==== | ||
* -2: outer walls even with shoulder, normal solid wall | * -2: outer walls even with shoulder, normal solid wall | ||
* -1: no outer walls, can fall off | * -1: no outer walls, can fall off | ||
* >=0: texture indexing with 9 bits as usual, moves walls below track and applies to floor, can drive partially off shoulder and bounce off | * >=0: texture indexing with 9 bits as usual, moves walls below track and applies to floor, can drive partially off shoulder and bounce off | ||
+ | ====Building/Sign offset==== | ||
+ | * >0: left/up | ||
+ | * 0: center | ||
+ | * <0: right/down | ||
====Outer lower/upper wall angle?==== | ====Outer lower/upper wall angle?==== | ||
* Not the actual walls | * Not the actual walls | ||
* >0: outward | * >0: outward | ||
* 0: vertical | * 0: vertical | ||
+ | ====Draw order?==== | ||
+ | These three values seem to combine to determine whether track is visible through other track. For example, given Bonus 4 with a bunch of buildings/signs over transparent track with transparent track on the other side, when the third value is 0, no buildings/signs are visible. When said value is greater than 0, some buildings/signs are visible. Changing the value or the values of the other two may change which buildings/signs are visible. | ||
====Third row==== | ====Third row==== | ||
These properties only ever have these values over all 11018 geometry segments of the retail tracks. | These properties only ever have these values over all 11018 geometry segments of the retail tracks. |
Revision as of 01:15, 25 March 2024
Contents
TRK file structure
The tracks.
Definition
Header |
Empty line |
Empty line |
Geometry |
Signs |
Empty line |
Stunts |
Empty line |
Textures |
Empty line |
Race info |
Empty line |
//
denotes a single line comment- integer values are 32-bit signed integers
- floating point values are double precision
Header
Geometry lengthint |
0 | 0 | Distance between track and floorint
|
Geometry
Track geometry.
Left shoulder widthint
|
Left lane widthint
|
Right lane widthint
|
Right shoulder widthint
|
Left shoulder heightint
|
Right shoulder heightint
|
Lengthint
|
Yaw rotation, counter-clockwise (°)float
|
Pitch rotation, upwards (°)float
|
Roll rotation, counter-clockwise (°)float
|
AI lineint
|
AI lineint
|
AI lineint
|
AI lineint
|
Track gripint
|
Left shoulder gripint
|
Right shoulder gripint
|
int
|
int
|
int
|
int
|
int
| ||||||||
Left surface typeint
|
Center surface typeint
|
Right surface typeint
|
Left wall typeint
|
Right wall typeint
|
Roof typeint
|
Left upper outer wall typeint
|
Left lower outer wall typeint
|
Outer wall floor type?int
|
Right lower outer wall typeint
|
Right upper outer wall typeint
|
Environment floor typeint
|
Building/Sign typeint
|
Building/Sign horizontal offsetint
|
Building/Sign vertical offsetint
|
Building/Sign yaw, counter-clockwise (°)float
|
Building/Sign pitch, upwards (°)float
|
Building/Sign roll, counter-clockwise (°)float
| ||||||||||||
Left upper outer wall angle?int
|
Left lower outer wall angle?int
|
int
|
int
|
Right lower outer wall angle?int
|
Right upper outer wall angle?int
|
Left upper outer wall heightint
|
Left lower outer wall heightint
|
int
|
int
|
Right lower outer wall heightint
|
Right upper outer wall heightint
|
Wall/roof heightint
|
Draw order?int
|
Draw order?int
|
Draw orderint
|
int
|
int
|
int
|
int
|
int
|
int
|
int
|
int
|
int
|
int
|
int
|
int
|
int
|
int
|
Empty line | |||||||||||||||||||||||||||||
... |
Surface type bit flags
Least significant bit | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Surface type | Wall (cannot be driven on) |
Bounce off walls | Echo | Pit | Yellow on track map |
Wall (cannot be driven on) |
Transparent Requires no texture |
Bounce off walls | Non-magnetic | Flip vertically | Non-solid | Texture pair | Flip horizontally | Apply texture | Texture |
- Texture
- Transparent
- Setting bit 0 makes it darker
- Single
- Bits are just texture index
- Pair
- Bit 0: left index+1 right index-3
- Bits 1-7: pair index, first texture on left, second on right
00000000
is first pair,00000010
is second pair,00000100
is third pair, etc
- Transparent
These apply for road surface, wall/roof, and outer wall/floor.
Building/Sign type
Value | Name | Description | Requires apply bit? | Texturing |
---|---|---|---|---|
0 | TOWER | tall box | Yes | Index |
1 | TOWER 2 | tall box, different texture | No | Fixed (22) |
2 | SIGN 1 | small, back upside down, on one leg | Yes, but not for legs | Index, legs fixed (20) |
3 | SIGN 2 | small, back upside down, on two legs | Yes, but not for legs | Index, legs fixed (21) |
4 | BUILD | complex building, drawn differently, different texture | No | Fixed (20, 21) |
5 | BUILD 1 | giant tall folded boxes, different texture | No | Fixed (0) |
6 | BUILD 2 | more giant tall folded box, different texture | No | Fixed (20) |
7 | BUILD 3 | WIDE short box | Yes | Index |
8 | HEELBAR | cube, different texture | No | Fixed (8) |
9 | BALLOON | flat square, always face camera | Yes | Index |
10 | TREE | flat skinny rectangle, always face camera | No | Fixed (1) |
11 | ADVERT | flat small square, fixed, same back | Yes | Index |
12 | ADVERT 2 | fixed flat square, back upside down | Yes | Index |
13 | QUAD BLD | 4 tall skinny boxes | No | Fixed (23, 24, 25, 26) |
14 | BLD 0 | tall box with pyramid top, different texture | No | Fixed (20, 21) |
15 | BIG BALL | flat square, always face camera, larger than BALLOON | Yes | Index |
16 | BIG AD | fixed flat square, back upside down, smaller than ADVERT 2 | Yes | Index |
>=256 | no idea |
Textures are determined by BLD file.
- Index: first 9 bits work just like road textures
- Fixed: Same texture is always applied (index in parentheses)
Shoulder height
- >0: up
- 0: flat
- <0: down
AI line
- >0: left
- 0: center
- <0: right
Grip
- 0: full grip
- 12: ice
Wall type
- Left and right must exist to draw roof
Outer wall floor type?
- -2: outer walls even with shoulder, normal solid wall
- -1: no outer walls, can fall off
- >=0: texture indexing with 9 bits as usual, moves walls below track and applies to floor, can drive partially off shoulder and bounce off
Building/Sign offset
- >0: left/up
- 0: center
- <0: right/down
Outer lower/upper wall angle?
- Not the actual walls
- >0: outward
- 0: vertical
Draw order?
These three values seem to combine to determine whether track is visible through other track. For example, given Bonus 4 with a bunch of buildings/signs over transparent track with transparent track on the other side, when the third value is 0, no buildings/signs are visible. When said value is greater than 0, some buildings/signs are visible. Changing the value or the values of the other two may change which buildings/signs are visible.
Third row
These properties only ever have these values over all 11018 geometry segments of the retail tracks.
Property index | Values |
---|---|
16 | 20,40,60 |
17 | 20,40,60,80 |
18 | 20,40 |
19 | 20 |
20 | 20 |
21 | 20,40,60,80 |
22 | 1 |
23 | 20 |
24 | 1,20,40 |
25 | 20 |
26 | 1 |
Signs
Empty on some tracks.
Signable geometry indexint |
Textureint
|
... | |
-1 | -1 |
- Signable geometry index
- 0: first geometry section with
0 <= sign type < 256
- 1: second, etc
- 0: first geometry section with
- Texture
- Bits 0-7: index in BLD texture file
- Bit 8: apply texture
- Bit 15: invisible
- No other bits seem to have an effect
Stunts
Controls geometry that moves and potrudes. Empty on some tracks.
Geometry indexint
|
Scale factor?int
|
Angle?int
|
?int
|
Timing groupint
|
Heightint
|
Time bulgingint
|
Time flatint
|
Smaller expands/larger contracts?int
|
Bulge?int
|
... | |||||||||
-1 |
- Scale factor?
- Increases the length and height of the "ramp"
- 1 is a bump, 4 starts breaking textures, 6 is huge vertical wall
- Angle?
- Lower is flatter, higher becomes trapezoid with longer top
- ?
- No clue
- Timing group
- With otherwise identical config, two bumps with same number move together, with 1 and 2 move oppositely
Textures
Texture fileTEX:<DRH file>
| |
Building texture fileBLD:<DRH file>
| |
BACKS:
| |
int |
int
|
... | |
-1 |
Race info
Not present on some tracks.
Track numberint
| |||||
Impossible lapsint |
Hard lapsint |
Tricky lapsint |
Medium lapsint |
Easy lapsint |
Girlie lapsint
|
Track map size, smaller is largerfloat |
Track map fidelity, smaller is more accurateint |
float
|
Effects
Bonus 7
- Swapping yaw and pitch: loop
- Swapping yaw and roll: twisting line
- Swapping yaw and pitch, roll 90.00000: vertical ring to the left
- Negative yaw: turnright
Length
Given Pulse at its maximum 193 mph on a modified Bonus 4 where all 494 sectors are 1200 long can complete at lap in 28.36 seconds and on the same track but with 50 flat sectors on each side shortened to 100 can complete a lap in 27.41 seconds, 1000 length units is equivalent to 13.45 ft or 4.10 m. Additionally, the rotated portions of the track contribute approximately 0.20 seconds extra compared to flat.