Doan/MI, you can leave out the "= cycles 20" thing by providing a reference back to the shimmerScript. That way you don't need to know how many cycles it takes. When the cycler is done, it will call the cue method on shimmerScript, which will call changeState with the next state.
(instance shimmerScript of Script
(properties)
(method (changeState newState)
= state newState
(switch (state)
)(case 1
(shimmer:setCycle(End shimmerScript))
)(case 2
(shimmer:setCycle(Beg shimmerScript))
)(case 3
(shimmerScript:changeState(1)) // make it all loop around forever!
)
)
)
)