Based on a Lissajous curve algorithm, this behavior is extremely versatile, and can produce an amazing variety of results. You can create curves of all sorts with the option to add loops so sprites can "swim" around all sorts of ways.
-- Moves a sprite on a definable Lissajous curve
-- Behavior by Ken Loge - kenl@ori.org
-- 06-01-02
-- Algorithm based on Lissajous Lab from Stormsky
property pWidthRange -- the width "spread" of the curve description
property pHeightRange -- the height "spread" of the curve description
property pOffsetValue -- if > 0 the curve appears to rotate on its X-axis
property pCurveLoops -- the number of "loops" the curve will make
property pIncrementAmount -- the "speed" the curve is drawn. A lower number produces a smoother curve, but is slower to draw.
property pHalfStageWidth -- use to store half of the stage width
property pHalfStageHeight -- use to store half of the stage height
property pCurveIncrementer -- use to add the increment amount for curve smoothness and draw speed