G'day all.
Although the comp is long finished, I have continued working on this thing.
There is still more work that could be done (when is that not the case?), like putting in a driver and perhaps adding a few more dynamic things, like a swinging tow chain on the front bumper or whatever, but I'm done with it for now (gotta get back to other projects).
Everything that rotates is controlled by a script, such as this one below which controls the rotation of the left front wheel:
float $speed;
float $speedbasic;
float $workingframe;
float $a;
float $b;
float $c;
float $d;
float $e;
float $timekey;
$timekey=time*24;
$a=$timekey;
$b=211-(((221-$timekey)*(221-$timekey))/40);
$c=211;
$d=211-((($timekey-279)*($timekey-279))/40);
$e=500-$timekey;
if (frame<201)
$workingframe=$a;
else if (frame<221)
$workingframe=$b;
else if (frame<280)
$workingframe=$c;
else if (frame<300)
$workingframe=$d;
else
$workingframe=$e;
$speedbasic=0.0581776;
$speed=$speedbasic/1.72308;
$orientation = (sin($speed*$workingframe),0,0,cos($speed*$workingframe));The script rotates the wheel first in a forward direction at a constant speed, decelerates to zero, rests for a bit, accelerates in reverse, and finally reverses at a contant speed. This script would have been WAY simpler if it were possible to define variables that could be remembered from frame to frame. At present it is necessary to calculate the position of each rotating object at each frame relative to the object's initial orientation, rather than relative to the objects position in the preceding frame.
The smoke is also scripted, separate scripts controlling each smoke-puff's rotation, location and scale in a cyclic fashion. The pistons and various valve linkages are keyframed, though scripts would not have been impossible to figure out.
The mechanisms were assembled in Scene mode, rather than defining the whole machine as a figure, using parent/child object relationships to ensure mechanical integrity. Rendering was done with ART, total rendering time estimated to be over 150 hours.