I tried once (at pixel level) effects like refraction using C++, and when I tried to translate it to GM I had a 60 times lower FPS <_< (I'm serious, I did measure the time difference)
It seems it's not practical editing pixel by pixel in GM, but I don't know how it could be done using grids.
EDIT: In pixel level I'd use something like this:
//START ANIMATION EVENT:
t=0;
//STEP EVENT:
var xx,yy,newy,pix[640,480];
for(xx=0;xx<640;xx+=1)
for(yy=0;yy<480;yy+=1)
{
newy=floor(yy+25*sin((yy+t)/25));
if(newy>=0&&newy<480)
pix[xx,yy]=pixel_get_color(xx,newy);//I'm not sure of the name of this function though
else
pix[xx,yy]=pixel_get_color(xx,yy);
}
for(xx=0;xx<640;xx+=1)
for(yy=0;yy<480;yy+=1)
pixel_set_color(xx,yy,pix[xx,yy]);//I'm not sure of the name of this function either
t+=1;