subtype idKGScriptParserduration?ð framebaseencodingparms inputFormat inputCountpublicnrippletitleRippleuitypetypemin?€maxA@default@ value@ uiinfosnapdetents ?€@@@@€@ @À@àAAA A0A@ amplitude AmplitudeBÈA A A  accelerate AccelerationA ?€?€?€centerCenterhilite HighlightBÈprivatestaticsscriptf//see www.fxscript.org for more //based on the apple ripple dissolve with one bleedin' obvious improvement. transition "better ripple" group "stib's transitions" wipeCode(0, 100); producesAlpha; input nripple, "Ripple", slider, 5, 1, 12 snap 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12; input amplitude, "Amplitude", slider, 20, 0, 100 detent 20; input accelerate, "Acceleration", slider, 1, 0, 10 detent 1; input center, "Center", point, 0, 0; input hilite, "Highlight", slider, 0, 0, 100 detent 0; code float i, radiusTable[nripple], widthTable[nripple], radius, width, w, h; point centerofview, centerofring, poly[4] //we need a buffer so I inserted these lines DimensionsOf(dest, w, h); image buf1[w][h]; boundsof(dest, poly); centerof(poly, centerofview); dimensionsof(dest, centerofring.x, centerofring.y); centerofring *= center; radius = distto(centerofview, centerofring) + distto(centerofview, poly[0]); width = (radius/nripple)/2; radius += width; for i = 0 to nripple-1 radiusTable[i] = i; next; radiusTable /= nripple radiusTable += ratio*accelerate; radiusTable %= 1; radiusTable *= radius widthTable += width; blend(src1, src2, buf1, ratio); PondRipple(buf1, dest, centerofring, radiusTable, widthTable, (1-Abs(100-200*ratio)/100)*amplitude/100*width, ratio*hilite/100, aspectOf(dest)); //spot the difference? I blend befor I ripple, so that both images get rippledname better ripplescriptid5groupstib's transitionswipecode wipeaccuracyd producesalphaencoded