If an
Actor is set in motion, the
Motion class will first set the actor's heading, then
either call the actor's looper (which may be a
Grooper), or use the
DirLoop kernel call, giving either of them the actor's heading.
DirLoop's logic, as seen in SCI11:
nLoops = GetNumLoops(ResLoad(RES_VIEW, IndexedProp(actor, actView)));
//Set the loop for the actor based on how many loops it has.
if (angle > 315 || angle < 45)
loop = (nLoops >= 4)? 3 : -1;
else if (angle > 135 && angle < 225)
loop = (nLoops >= 4)? 2 : -1;
else if ((angle < 180))
loop = 0;
else
loop = 1;
//If the loop is not 'same' (-1), set it.
if (loop != -1)
IndexedProp(actor, actLoop) = loop;
Testing this in
The Dating Pool by removing the grooper from ego, my diagonals go unused. It is in fact the grooper that specifically adds diagonal support. And not all SCI0
had a grooper! Iceman, KQ1, and QFG2 are the only ones in whose decompiles I can find the line "
class Grooper" -- the rest are all SCI10 or later. There could of course be other SCI0 games that supported diagonals but didn't
gradually switch from one loop to the other.
I once added an EGA SCI1.0 ego sprite to a SCI0 game and its diagonal views were automatically used.
Was it one of those three? If not, which was it?