Use the original handling, walls and projection from the executable

Decoded from SKIDMARKS_CD32's machine code:

- Car physics: the per-frame engine/grip/steering update, gravity and
  jumps, the hill effect on the throttle, and body tilt. Replaces the
  reconstructed handling model.
- The meaning of every .set value (separate drag, grip and power for
  human and computer drivers; steering, gravity, tow hitch), and the
  six handling presets, offered by a new Handling menu option.
- Walls: the road edges are quadratic B-splines through the gates'
  ends. They match the painted road edges.
- The real projection, which lifts points by their height; the height
  map is indexed by world cells, not screen pixels.
- Tracks have one more gate than the stored count: the last gate was
  being dropped on every track.

Computer drivers now follow the road between the walls and steer like
the original's. Vehicle assets store the values as `handling`; older
files still load. Docs describe the decoded logic.
This commit is contained in:
2026-10-20 07:32:46 +00:00
parent ee895e0455
commit 6226c88d4e
44 changed files with 1283 additions and 791 deletions
+9 -5
View File
@@ -1,11 +1,14 @@
# Skids track TRACK1-5. Lines starting with # are comments.
#
# The picture is track.png: 1024x512, 16 colours. Its palette is the
# track's palette. Colours 8-15 are road (full grip), 0-7 are scenery.
# track's palette. Colours 8-15 are road, 0-7 are scenery (dusty).
#
# gate x1 y1 x2 y2: lap gates in race order, in world units. Gate 0 is
# the start/finish line; the grid forms up behind it. World to picture:
# picture x = wx - wy + 512, picture y = (wx + wy) * 31/64 - 252
# the start/finish line; the grid forms up behind it. The gates' ends
# also shape the walls: each edge of the road is a smooth curve
# through the matching ends of the gates. World to picture, for a
# point at height z (pixels):
# picture x = wx - wy + 512, picture y = (wx + wy) / 2 - 156 - z
gate 456.53125 333.8125 497.53125 236.8125
gate 361.375 315.15625 308.875 219.65625
gate 367.4375 414.6875 278.6875 347.4375
@@ -31,6 +34,7 @@ gate 333.03125 801.21875 431.53125 800.71875
gate 381.40625 687.25 449.78125 749.875
gate 472.28125 690.78125 551.53125 741.53125
gate 468.5625 611.34375 549.5625 610.34375
gate 473.71875 458.5 555.71875 434.5
# Name of the set of tracks this one belongs to, shown in the menu.
set Racing In The Name Of
@@ -39,8 +43,8 @@ set Racing In The Name Of
start 301 79
flags 0
# height: 64 rows of 64 values, ground height x 256. Each value covers
# 16x8 pixels of the picture.
# height: 64 rows (world y) of 64 values (world x), ground height in
# pixels x 64. Each value covers 16 x 16 world units.
height
6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400
6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400 6400