Difference between revisions of "Modding Whiplash/Fatal Racing"

From The /ovg/ Wiki
Jump to navigation Jump to search
Line 168: Line 168:
 
|12||Wall/roof height||<code>int</code>||
 
|12||Wall/roof height||<code>int</code>||
 
|-
 
|-
|13||View (forward main chunks)||<code>int</code>||
+
|13||View (forward main chunks)||<code>int</code>||Number of chunks to render while going forward<br>Range: 8-128 Default: 32
 
|-
 
|-
|14||View (forward extra start)||<code>int</code>||
+
|14||View (forward extra start)||<code>int</code>||Chunk index of extra range to render while going forward<br>Range: 8-128 Default: -1 (disabled)
 
|-
 
|-
|15||View (forward extra chunks)||<code>int</code>||
+
|15||View (forward extra chunks)||<code>int</code>||Number of chunks to render while going forward<br>Range: 8-128 Default: 0
 
|-
 
|-
 
|16||Subdivide (left shoulder)||<code>int</code>||Values: 20,40,60<ref group="N" name="subdivide"></ref>
 
|16||Subdivide (left shoulder)||<code>int</code>||Values: 20,40,60<ref group="N" name="subdivide"></ref>
Line 196: Line 196:
 
|26||Subdivide (right upper outer wall)||<code>int</code>||Values: 1<ref group="N" name="subdivide"></ref>
 
|26||Subdivide (right upper outer wall)||<code>int</code>||Values: 1<ref group="N" name="subdivide"></ref>
 
|-
 
|-
|27||View (backward main chunks)||<code>int</code>||
+
|27||View (backward main chunks)||<code>int</code>||Number of chunks to render while going backward<br>Range: 8-128 Default: 32
 
|-
 
|-
|28||View (backward extra start)||<code>int</code>||
+
|28||View (backward extra start)||<code>int</code>||Chunk index of extra range to render while going backward<br>Range: 8-128 Default: -1 (disabled)
 
|-
 
|-
|29||View (backward extra chunks)||<code>int</code>||
+
|29||View (backward extra chunks)||<code>int</code>||Number of chunks to render while going backward<br>Range: 8-128 Default: 0
 
|}
 
|}
 
====Notes====
 
====Notes====
Line 246: Line 246:
 
|8||0x00000100||Apply texture||
 
|8||0x00000100||Apply texture||
 
|-
 
|-
|9||0x00000200||Look up texture in anms array||Cars only
+
|9||0x00000200||Car: Look up texture in anms array<br>Track: ?||
 
|-
 
|-
 
|10||0x00000400||Partial transparency||
 
|10||0x00000400||Partial transparency||
Line 264: Line 264:
 
|14||0x00004000||Concave||
 
|14||0x00004000||Concave||
 
|-
 
|-
|15||0x00008000||Change livery?||Cars only
+
|15||0x00008000||Car: Change livery?<br>Track: ?||
 
|-
 
|-
 
|16||0x00010000||Texture pair||
 
|16||0x00010000||Texture pair||
Line 274: Line 274:
 
|19||0x00080000||Non-magnetic||
 
|19||0x00080000||Non-magnetic||
 
|-
 
|-
|20||0x00100000||Bounce off walls||
+
|20||0x00100000||Bounce off walls||Left/right lanes only
 
|-
 
|-
 
|21||0x00200000||Transparent||Requires no texture<br>Changes what texture index does, see texture bits
 
|21||0x00200000||Transparent||Requires no texture<br>Changes what texture index does, see texture bits
Line 280: Line 280:
 
|22||0x00400000||Wall||Cannot be driven on
 
|22||0x00400000||Wall||Cannot be driven on
 
|-
 
|-
|23||0x00800000||AI fast zone||Fast strategy only
+
|23||0x00800000||AI fast zone||Forces fast strategy only<br>Center lane only
 
|-
 
|-
|24||0x01000000||Pit zone||Yellow on track map
+
|24||0x01000000||Pit zone||Yellow on track map (any lane)<br>Center lane only for other effects<br>Must have sufficiently long contiguous section for AI to pit
 
|-
 
|-
 
|25||0x02000000||Pit||Actual pit work area
 
|25||0x02000000||Pit||Actual pit work area
 
|-
 
|-
|26||0x04000000||Pit box||AI targets and respawn points
+
|26||0x04000000||Pit box||AI pit targets and respawn points<br>Center lane only
 
|-
 
|-
|27||0x08000000||Placement disabled||Disallow spawn here
+
|27||0x08000000||Placement disabled||Disallow spawn here<br>Applies to grid, respawn, flip/fall
 
|-
 
|-
|28||0x10000000||AI target speed override||Max speed only
+
|28||0x10000000||AI target speed override||Max speed regardless of strategy/difficulty/target<br>Center lane only
 
|-
 
|-
 
|29||0x20000000||Echo||Tunnel effect
 
|29||0x20000000||Echo||Tunnel effect
 
|-
 
|-
|30||0x40000000||Bounce off walls||
+
|30||0x40000000||Bounce off walls||Center lane only
 
|-
 
|-
 
|31||0x80000000||Wall||Cannot be driven on<br>
 
|31||0x80000000||Wall||Cannot be driven on<br>

Revision as of 00:18, 10 September 2025

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
0 0 Floor depth
int

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
5 Right shoulder height int
6 Length int
7 Yaw rotation, counter-clockwise (°) float
8 Pitch rotation, upwards (°) float
9 Roll rotation, counter-clockwise (°) float
10 AI line int
11 AI line int
12 AI line int
13 AI line int
14 Track grip int
15 Left shoulder grip int
16 Right shoulder grip int
17 AI max speed int
18 AI accuracy int
19 Audio (above trigger) int
20 Audio trigger speed int
21 Audio (below trigger) int

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
4 Right wall type int
5 Roof type int
6 Left upper outer wall type int
7 Left lower outer wall type int
8 Outer floor type int
9 Right lower outer wall type int
10 Right upper outer wall type int
11 Environment floor type int
12 Building/Sign type int See Building/Sign type
13 Building/Sign horizontal offset int
14 Building/Sign vertical offset int
15 Building/Sign yaw, counter-clockwise (°) float
16 Building/Sign pitch, upwards (°) float
17 Building/Sign roll, counter-clockwise (°) float

Row 2

Column index Field Type Notes
0 Left upper outer wall horizontal offset int
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
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 View (forward main chunks) int Number of chunks to render while going forward
Range: 8-128 Default: 32
14 View (forward extra start) int Chunk index of extra range to render while going forward
Range: 8-128 Default: -1 (disabled)
15 View (forward extra chunks) int Number of chunks to render while going forward
Range: 8-128 Default: 0
16 Subdivide (left shoulder) int Values: 20,40,60[N 1]
17 Subdivide (center lane) int Values: 20,40,60,80[N 1]
18 Subdivide (right shoulder) int Values: 20,40[N 1]
19 Subdivide (left wall) int Values: 20[N 1]
20 Subdivide (right wall) int Values: 20[N 1]
21 Subdivide (roof) int Values: 20,40,60,80[N 1]
22 Subdivide (left upper outer wall) int Values: 1[N 1]
23 Subdivide (left lower outer wall) int Values: 20[N 1]
24 Subdivide (outer floor) int Values: 1,20,40[N 1]
25 Subdivide (right lower outer wall) int Values: 20[N 1]
26 Subdivide (right upper outer wall) int Values: 1[N 1]
27 View (backward main chunks) int Number of chunks to render while going backward
Range: 8-128 Default: 32
28 View (backward extra start) int Chunk index of extra range to render while going backward
Range: 8-128 Default: -1 (disabled)
29 View (backward extra chunks) int Number of chunks to render while going backward
Range: 8-128 Default: 0

Notes

  1. 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 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 Car: Look up texture in anms array
Track: ?
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
15 0x00008000 Car: Change livery?
Track: ?
16 0x00010000 Texture pair
17 0x00020000 Skip render
18 0x00040000 Flip vertically
19 0x00080000 Non-magnetic
20 0x00100000 Bounce off walls 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)
Center lane only for other effects
Must have sufficiently long contiguous section for AI to pit
25 0x02000000 Pit Actual pit work area
26 0x04000000 Pit box AI pit targets and respawn points
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 Wall Cannot be driven on
  • Track surface: appears to be same effect as bit 22: solid block that can't be driven on
  • 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

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

Audio

  • Index of audio to play when driven over (order in SOUND.INI)
  • 0: no audio
  • Above plays when over trigger speed
  • Below plays when between ~26 mph and trigger speed

Audio trigger speed

  • 200 is about 67 mph

Wall type

  • Left and right must exist to draw roof
  • -1: not present

Roof type

  • -1: not present

Outer 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
    • 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

Environment floor type

  • Controls color of the bottom of the void
    • 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

Building/Sign offset

  • >0: left/up
  • 0: center
  • <0: right/down

Outer lower/upper wall horizontal offset

  • >0: outward
  • 0: vertical
  • <0: inward

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.

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