SCAR Code:
procedure DoThings;
var
A: Array of Array of Array of Variant;
I, R: Integer;
begin
A:= T3DVariantArray([T2DVariantArray([TVariantArray([True]), TVariantArray([True]), TVariantArray(['S']), TVariantArray([True])]), T2DVariantArray([TVariantArray(['SetAngle']), TVariantArray(['SetRun']), TVariantArray(['MakeCompass']), TVariantArray(['Retaliate'])])]);
for I:= 0 to 3 do
begin
R:= Random(4 - I);
CallProc(A[1][R][0], A[0][R]);
Swap(A[1][R], A[1][3 - I]);
Swap(A[0][R], A[0][3 - I]);
SetLength(A[1][0], 3 - I);
SetLength(A[0], 3 - I);
end;
end;
Safer than marpis', since there is no potential endless loop (though there is really not much of a chance that his will lag your script), but you will need this somewhere:
SCAR Code:
type
T2DVariantArray = Array of TVariantArray;
T3DVariantArray = Array of T2DVariantArray;