Modding Whiplash/Fatal Racing

From The /ovg/ Wiki
Jump to navigation Jump to search

Track (TRK) files

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 length
int
Initial X position
int
Initial Y position
int
Initial Z position
int

Initial X and Y positions are always 0 in retail tracks. Z is vertical.

Geometry

Track geometry.

Row 0
Row 1
Row 2
Empty line
...

Row 0

Column index Field Type Notes
0 Left shoulder width int
1 Left lane width int
2 Right lane width int
3 Right shoulder width int
4 Left shoulder height int
  • >0: up
  • 0: flat
  • <0: down
5 Right shoulder height int
6 Length int
7 Yaw rotation float counter-clockwise (°)
8 Pitch rotation float upwards (°)
9 Roll rotation float counter-clockwise (°)
10 AI line int
  • >0: left
  • 0: center
  • <0: right
11 AI line int
12 AI line int
13 AI line int
14 Track grip int

0: full grip
12: ice

15 Left shoulder grip int
16 Right shoulder grip int
17 AI max speed int
18 Ground height int Height at which a car stops falling and resets
Setting equal to outer floor height makes it appear as if one fell on it
19 Audio (above trigger) int Index of audio to play when driven over (order in SOUND.INI)
0: no audio
Plays when over trigger speed
20 Audio trigger speed int 200 is about 67 mph
21 Audio (below trigger) int Index of audio to play when driven over (order in SOUND.INI)
0: no audio
Plays when between ~26 mph and trigger speed

Row 1

Column index Field Type Notes
0 Left surface type int
1 Center surface type int
2 Right surface type int
3 Left wall type int Left and right must exist to draw roof
-1: not present
4 Right wall type int
5 Roof type int -1: not present
6 Left upper outer wall type int
7 Left lower outer wall type int
8 Outer floor type int
  • -2: outer walls even with shoulder, normal solid wall
  • -1: no outer walls, can fall off
  • >=0: texture indexing with 9 bits as usual
    • floor height is based on environment depth
    • floor width is based on main track width
    • outer walls are attached to edges of floor
    • can drive partially off shoulder and bounce off
9 Right lower outer wall type int
10 Right upper outer wall type int
11 Environment floor type int

Value of geometry currently being driven on determines entire color below the horizon
First 8 bits are palette color index
Higher bits are used but none seem to have any effect

12 Building/Sign type int See Building/Sign type
13 Building/Sign horizontal offset int
  • >0: left/up
  • 0: center
  • <0: right/down
14 Building/Sign vertical offset int
15 Building/Sign yaw float counter-clockwise (°)
16 Building/Sign pitch float upwards (°)
17 Building/Sign roll float counter-clockwise (°)

Row 2

Column index Field Type Notes Observed values[N 1]
0 Left upper outer wall horizontal offset int
  • >0: outward
  • 0: vertical
  • <0: inward
1 Left lower outer wall horizontal offset int
2 Left outer floor horizontal offset int
3 Right outer floor horizontal offset int
4 Right lower outer wall horizontal offset int
  • >0: outward
  • 0: vertical
  • <0: inward
5 Right upper outer wall horizontal offset int
6 Left upper outer wall height int
7 Left lower outer wall height int
8 Left outer floor height int
9 Right outer floor height int
10 Right lower outer wall height int
11 Right upper outer wall height int
12 Wall/roof height int
13 Near chunks (forward) int Number of chunks for collision/render while going forward
Range: 8-128 Default: 32
14 Near chunks (forward extra start) int Chunk index of extra range for collision/render while going forward
Default: -1 (disabled)
15 Near chunks (forward extra) int Number of chunks for collision/render while going forward
Range: 8-128 Default: 0
16 Subdivide distance (left shoulder) int Distance at which geometry should subdivide
Smaller is closer
20,40,60
17 Subdivide distance (center lane) int 20,40,60,80
18 Subdivide distance (right shoulder) int 20,40
19 Subdivide distance (left wall) int 20
20 Subdivide distance (right wall) int 20
21 Subdivide distance (roof) int 20,40,60,80
22 Subdivide distance (left upper outer wall) int 1
23 Subdivide distance (left lower outer wall) int 20
24 Subdivide distance (outer floor) int 1,20,40
25 Subdivide distance (right lower outer wall) int 20
26 Subdivide distance (right upper outer wall) int 1
27 Near chunks (backward) int Number of chunks for collision/render while going backward
Range: 8-128 Default: 32
28 Near chunks (backward extra start) int Chunk index of extra range for collision/render while going backward
Default: -1 (disabled)
29 Near chunks (backward extra) int Number of chunks for collision/render while going backward
Range: 8-128 Default: 0

Notes

  1. These properties only ever have these values over all 11018 geometry segments of the retail tracks.

Surface type bit flags

These apply for road surface, wall/roof, and outer wall/floor.

Bit Mask Surface type Notes
0 0x000000FF Texture
  • Transparent
    • 0 = completely transparent
    • 1 = light tint
    • 2 = medium tint
    • 3 = dark tint
    • 4 = light blue tint
    • 5-15 = solid black, no transparency
    • 16+ = glitches out
  • Single
    • Bits are just texture index
  • Pair
    • Bits are texture index of left, index+1 on right
  • When apply texture not set
    • Bits indicate a solid color corresponding to the index within PALETTE.PAL
1
2
3
4
5
6
7
8 0x00000100 Apply texture
9 0x00000200 No extras Excludes the designated "extra" chunks as possible chunks to land on after a jump
Can be used to prevent shortcuts on overlapping portions of track
Center lane only
10 0x00000400 Partial transparency

Toggles transparency on textures that contain transparent sections, e.g. guardrail
Turns palette texture index 0 transparent (#000000) (not to be confused with the same color at another index)
Only works when a texture is applied

11 0x00000800 Back

Toggles application of a different texture on the outside face of walls
When a BACK is set, texture will be the BACK texture
Otherwise, no clue how this texture is determined, changes when wall type changes and not in any consistent way, sometimes is broken

12 0x00001000 Flip horizontally
13 0x00002000 Flip backface
14 0x00004000 Concave Renders as concave polygon
15 0x00008000 Prevent jump Prevents jumping/falling off non-magnetic chunks with speeds of at least ~80 mph
Used for top portion of loops
16 0x00010000 Texture pair
17 0x00020000 Skip render As if it were nonexistent
18 0x00040000 Flip vertically
19 0x00080000 Non-magnetic Car aren't glued to the road
20 0x00100000 Fall off Allows falling off track (no invisible wall if walls not set)
Left/right lanes only
21 0x00200000 Transparent Requires no texture
Changes what texture index does, see texture bits
22 0x00400000 Wall Cannot be driven on
23 0x00800000 AI fast zone Forces fast strategy only
Center lane only
24 0x01000000 Pit zone Yellow on track map (any lane)
Must have sufficiently long contiguous section for AI to pit
Center lane only for other effects
25 0x02000000 Pit Actual pit work area
26 0x04000000 Pit box AI pit targets and respawn points
Must be at least one pit box for AI to pit (max 10)
Center lane only
27 0x08000000 Placement disabled Disallow spawn here
Applies to grid, respawn, flip/fall
28 0x10000000 AI target speed override Max speed regardless of strategy/difficulty/target
Center lane only
29 0x20000000 Echo Tunnel effect
30 0x40000000 Bounce off walls Center lane only
31 0x80000000 Special toggle
  • Wall: when unset, walls are outside of the shoulder, when set walls are between shoulder and center
  • Roof: turns roof vertical and tied to upper outer walls
  • Track surface/outer walls: no special handling, so has the effect of inverting all bits

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)

Signs

Empty on some tracks.

Signable geometry index
int
Texture
int
...
-1 -1
  • Signable geometry index
    • 0: first geometry section with 0 <= sign type < 256
    • 1: second, etc
  • 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 index
int
Ramp chunk count
int
Number of ticks
int
Tick start index
int
Timing group
int
Height change per tick
int
Time bulging
int
Time flat
int
Ramp side length
int
Bulge Section
int
...
-1
  • Ramp chunk count
    • Increases the length and height of the "ramp" by increasing the number of chunks before and after the stunt chunk included in the ramp
  • Number of ticks
    • Number of game ticks the stunt expansion process takes
    • 0 breaks the track
  • Tick start index
    • Index within the animation of the stunt that it will be in when the track loads
    • If it's higher than or equal to the number of ticks the stunt glitches out
  • Timing group
    • With otherwise identical config, two bumps with same number move together
    • Appears to be a boolean, 1 is group 1, any other value is group 2
  • Height change per tick
    • Negative values break the track
  • Ramp side length
    • The length that the chunks before and after the stunted chunk change to when the stunt is active
    • Value is percentage, 1024 = 100%
    • Value appears to be the hypotenuse or actual surface length rather than the flat length beneath
    • If this value is incompatible with height change per tick * num ticks, it will take priority limiting the max height of the stunt, otherwise the chunk indicated as the "stunt" is stretched in length to make this fit
  • Bulge section
    • Bit flags to specify which section of the track moves
      • Bit 0: left shoulder
      • Bit 1: left wall
      • Bit 2: left lane
      • Bit 3: right lane
      • Bit 4: right shoulder
      • Bit 5: right wall
      • Higher bits move nothing
  • Ramps are pitch-based, calculate pitch by height/length
    • Ramp pitch takes the place of chunk's base pitch rather than being added to it
    • Ramps on pitched chunks have odd behavior and will do things like teleport the car to the outside of a loop when active on upsidown sections
    • In the release tracks all stunts are on chunks with a base pitch very close to 0

Textures

Texture file
TEX:<DRH file>
Building/Sign texture file
BLD:<DRH file>
BACKS:
Geometry index
int
Texture
int
...
-1

Backs

The outside texture of walls when there is a wall between the track and the shoulder. Transparent when texture index does not correspond to an actual texture. This indexes into the texture tile list, e.g. when a wall is set to texture x, texture y will display on the "back" side when the show backs flag is set

Race info

Not present on some tracks.

Track number
int
Impossible laps
int
Hard laps
int
Tricky laps
int
Medium laps
int
Easy laps
int
Girlie laps
int
Track map scale, smaller is larger
float
Track map chunk sampling interval
int
Track preview scale, smaller is larger
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.

Palette (PAL) files

Texture color palettes.

PALETTE.PAL

Index 0x00 may be treated as having a fully transparent alpha (RBGA #00000000). All other colors are fully opaque, including the other black at index 0x70 (RBGA #000000FF).

0 1 2 3 4 5 6 7 8 9 A B C D E F
0x
1x
2x
3x
4x
5x
6x
7x
8x
9x
Ax
Bx
Cx
Dx
Ex
Fx