Hey Dan! Thanks so much again for your help.
var L = index > 1 ? thisComp.layer(index - 1) : null;
var C = thisComp.layer("Start");
var ctrl = thisComp.layer("CTRL");
var p = L ? L.position : [0, 0];
// Controls
var d = ctrl ? ctrl.effect("WaveLovers")("Delay") : 0;
var g = ctrl ? ctrl.effect("WaveLovers")("Inertia") * -1 : 0;
var s = ctrl ? ctrl.effect("WaveLovers")("Space") : 0;
// Oscillation parameters
var amp = ctrl ? ctrl.effect("WaveLovers")("Amp") : 0;
var freq = ctrl ? ctrl.effect("WaveLovers")("Freq") : 0;
var decay = ctrl ? ctrl.effect("WaveLovers")("Decay") : 0;
// Ensure index values are defined and valid
var indexA = C ? C.index : 0;
var indexB = thisLayer.index;
var indexRelative = indexA - indexB;
// Adjusted offset calculation
var offset = L ? L.index - index : 0;
// Calculate delay factor and ensure it doesn't go below 0
var delayFactor = ctrl ? ctrl.effect("WaveLovers")("Delay Factor") * offset : 0;
var newDelay = Math.max(d - delayFactor, 0);
// Calculate deltaX and deltaY with delay
var deltaY = p.valueAtTime(time - newDelay)[1] - p.valueAtTime(0)[1];
var deltaX = p.valueAtTime(time - newDelay)[0] - p.valueAtTime(0)[0];
// Apply delay and oscillation effect to position
var pos = value + [(deltaX * (1 + offset * g)) - (s * indexRelative * -1), deltaY * (1 + offset * g)];
// Handle keyframes and oscillation
var n = 0;
if (p.numKeys > 0) {
n = p.nearestKey(time).index;
if (p.key(n).time > time) {
n--;
}
}
if (n > 0) {
var t = time - p.key(n).time;
if (t < 1) {
var v = p.velocityAtTime(p.key(n).time - thisComp.frameDuration);
pos += v * (amp / 100) * Math.sin(freq * t * 2 * Math.PI) / Math.exp(decay * t);
}
}
pos; // Return the final position