Example (for a cyclist spaced every 100 pixels to the left):
[BG Cyclist 1]
type = anim
actionno = 5 ;(or whatever number)
start = 0, 0 ; (or wherever number)
delta = 1, 1
id = 5 ; (or whatever number)
[BG Cyclist 2]
type = anim
actionno = 5 ;(or whatever number)
start = -100, 0 ; (or wherever number)
delta = 1, 1
id = 5 ; (or whatever number)
[BG Cyclist 3]
type = anim
actionno = 5 ;(or whatever number)
start = -200, 0 ; (or wherever number as long as it creates the same distance as from Cyclist 2 to Cyclist 1)
delta = 1, 1
id = 5 ; (or whatever number)
[BG Cyclist 4]
type = anim
actionno = 5 ;(or whatever number)
start = -300, 0 ; (or wherever number as long as it creates the same distance as from Cyclist 2 to Cyclist 1)
delta = 1, 1
id = 5 ; (or whatever number)
[BGCtrlDef 5]
looptime = 100 ; (depending on your velocity, however long it takes for the second cyclist to reach the same spot as the first began)
CtrlID = 5 ; (or whatever number you gave the cyclists)
[BGCtrl 5A1] ; (or whatever you need to call it)
type = PosSet
time = 0
x = 0 ; (This resets the position to the beginning after every loop. Use y = 0 also if you ever use Y velocities.)
CtrlID = 5
[BGCtrl 5A2] ; (or whatever you want to call it)
type = VelSet
time = 0
x = 1 ; (This gets the cyclists moving to the left)
CtrlID = 5
The looptime in the BGCtrlDef is set by the distance of your animations from each other, and your velocity. Distance divided by Velocity, so here, it is (100 / 1) = 100. If the velocity was half as fast, x = .5, the looptime would be (100 / .5) = 200.
You could also create sprites with all the cyclists you want in a row with equal spacing, and do it that way, but it makes larger animating sprites.
Also, you would likely have similar issue with the Tai Ji students in the SFA3 stage. You wouldn't need to code any velocities, but you would likely need to code the students separately (where they loop) with identical spacing.