A bit about the file format used: The first 144 bytes are the control-points and tangent-points for the track curve. There are 24 points in all; 12 control-points and 12 tangent-points. The points are stored in this order CP1, TP1, CP2, TP2, etc (where CP=control-point and TP = tangent-point). A Bézier curve segment is created using four points, 2 cp's and 2 tp's. In the rollercoaster demo the second tangent-point is always calculated by mirroring a tangent-point around the previous control-point to ensure that the movement is smooth (equal direction & magnitude of the tangent vector at the curve-joins). See roller.c for an example of how this is done. Next is NUM_STEPS * 4 * 4 short words, which equals NUM_STEPS * 4 SVECTOR structs. Each step contains 4 SVECTORs, top1, top2, bottom1, bottom2 (in that order). Obviously, the top1 & top2 values represent the top of the track, and bottom1 & bottom2 represent the bottom. :)