#include "globals.h"
#include "water.h"


void SWater15(BITMAP *water1,BITMAP *water2,int x,int y,int sx,int sy,int sw,int sh,int DX,int DY)
{
  int i,j;
  int c;
  int dx,dy;
  int r,g,b;

  for (j=sy/WATERSCALE+1;j<sy/WATERSCALE+sh/WATERSCALE-1;j++) {
    for (i=sx/WATERSCALE+1;i<sx/WATERSCALE+sw/WATERSCALE-1;i++) {
      c=-4*_getpixel(water1,i,j)
          +_getpixel(water2,i-1,j-1)
          +_getpixel(water2,i,j-1)
          +_getpixel(water2,i+1,j-1)
          +_getpixel(water2,i-1,j)
          +_getpixel(water2,i+1,j)
          +_getpixel(water2,i-1,j+1)
          +_getpixel(water2,i,j+1)
          +_getpixel(water2,i+1,j+1);
      c/=4;
      c=c-(c>>2);
      c=MID(0,c,255);
      putpixel(water1,i-DX,j-DY,c);
    }
  }

/*
  // Fill the rest
  if (DX>0) { // Right
    rectfill(water1,water1->w-DX,0,water1->w,water1->h,0);
  }
  else if (DX<0) { // Left
    rectfill(water1,0,0,-DX,water1->h,0);
  }
  if (DY>0) { // Bottom
    rectfill(water1,0,water1->h-DY,water1->w,water1->h,0);
  }
  else if (DY<0) { // Top
    rectfill(water1,0,0,water1->w,-DY,0);
  }
*/

/*
  // Fill the rest
  if (DX>0) { // Right
    rectfill(water2,sx+sw-DX,sy,sw,sy+sh,0);
  }
  else if (DX<0) { // Left
    rectfill(water2,sx,sy,sx-DX,sy+sh,0);
  }
  if (DY>0) { // Bottom
    rectfill(water2,sx,sy+sh-DY,sx+sw,sy+sh,0);
  }
  else if (DY<0) { // Top
    rectfill(water2,sx,sy,sx+sw,sy-DY,0);
  }
*/

  for (j=sy/WATERSCALE+1-1;j<sy/WATERSCALE+sh/WATERSCALE-1;j++) {
    for (i=sx/WATERSCALE+1-1;i<sx/WATERSCALE+sw/WATERSCALE-1;i++) {
      dx=_getpixel(water1,i,j)-_getpixel(water1,i+1,j);
      dy=_getpixel(water1,i,j)-_getpixel(water1,i,j+1);
      c=getpixel(
        bg,((1<<16)+i*WATERSCALE+dx+x)&255,((1<<16)+j*WATERSCALE+dy+y)&127
      );
      r=getr15(c);
      g=getg15(c);
      b=getb15(c);
      r=r-dx/2;
      r=MID(0,r,255);
      g=g-dx/2;
      g=MID(0,g,255);
      b=b-dx/2;
      b=MID(0,b,255);
      c=makecol15(r,g,b);
      //putpixel(drawable,sx+i*WATERSCALE,sy+j*WATERSCALE,c);
#if WATERSCALE==4
      _putpixel15(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+0,c);
      _putpixel15(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+0,c);
      _putpixel15(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+0,c);
      _putpixel15(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+0,c);
      _putpixel15(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+1,c);
      _putpixel15(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+1,c);
      _putpixel15(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+1,c);
      _putpixel15(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+1,c);
      _putpixel15(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+2,c);
      _putpixel15(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+2,c);
      _putpixel15(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+2,c);
      _putpixel15(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+2,c);
      _putpixel15(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+3,c);
      _putpixel15(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+3,c);
      _putpixel15(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+3,c);
      _putpixel15(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+3,c);
#else
      rectfill(
        drawable,
        1+i*WATERSCALE,1+j*WATERSCALE,
        1+i*WATERSCALE+WATERSCALE,1+j*WATERSCALE+WATERSCALE,
        c
      );
#endif
    }
  }
}

void SWater16(BITMAP *water1,BITMAP *water2,int x,int y,int sx,int sy,int sw,int sh,int DX,int DY)
{
  int i,j;
  int c;
  int dx,dy;
  int r,g,b;

  for (j=sy/WATERSCALE+1;j<sy/WATERSCALE+sh/WATERSCALE-1;j++) {
    for (i=sx/WATERSCALE+1;i<sx/WATERSCALE+sw/WATERSCALE-1;i++) {
      c=-4*_getpixel(water1,i,j)
          +_getpixel(water2,i-1,j-1)
          +_getpixel(water2,i,j-1)
          +_getpixel(water2,i+1,j-1)
          +_getpixel(water2,i-1,j)
          +_getpixel(water2,i+1,j)
          +_getpixel(water2,i-1,j+1)
          +_getpixel(water2,i,j+1)
          +_getpixel(water2,i+1,j+1);
      c/=4;
      c=c-(c>>2);
      c=MID(0,c,255);
      putpixel(water1,i-DX,j-DY,c);
    }
  }

/*
  // Fill the rest
  if (DX>0) { // Right
    rectfill(water1,water1->w-DX,0,water1->w,water1->h,0);
  }
  else if (DX<0) { // Left
    rectfill(water1,0,0,-DX,water1->h,0);
  }
  if (DY>0) { // Bottom
    rectfill(water1,0,water1->h-DY,water1->w,water1->h,0);
  }
  else if (DY<0) { // Top
    rectfill(water1,0,0,water1->w,-DY,0);
  }
*/

/*
  // Fill the rest
  if (DX>0) { // Right
    rectfill(water1,sx+sw-DX,sy,sw,sy+sh,0);
    rectfill(water2,sx+sw-DX,sy,sw,sy+sh,0);
  }
  else if (DX<0) { // Left
    rectfill(water1,sx,sy,sx-DX,sy+sh,0);
    rectfill(water2,sx,sy,sx-DX,sy+sh,0);
  }
  if (DY>0) { // Bottom
    rectfill(water1,sx,sy+sh-DY,sx+sw,sy+sh,0);
    rectfill(water2,sx,sy+sh-DY,sx+sw,sy+sh,0);
  }
*/

/*
  // Fill the rest
  if (DX<0) { // Right
    rectfill(water1,sx+sw+DX,sy,sw,sy+sh,0);
    rectfill(water2,sx+sw+DX,sy,sw,sy+sh,0);
  }
  else if (DX>0) { // Left
    rectfill(water1,sx,sy,sx+DX,sy+sh,0);
    rectfill(water2,sx,sy,sx+DX,sy+sh,0);
  }
  if (DY<0) { // Bottom
    rectfill(water1,sx,sy+sh+DY,sx+sw,sy+sh,0);
    rectfill(water2,sx,sy+sh+DY,sx+sw,sy+sh,0);
  }
  else if (DY>0) { // Top
    rectfill(water1,sx,sy,sx+sw,sy+DY,0);
    rectfill(water2,sx,sy,sx+sw,sy+DY,0);
  }
*/

  for (j=sy/WATERSCALE+1-1;j<sy/WATERSCALE+sh/WATERSCALE-1;j++) {
    for (i=sx/WATERSCALE+1-1;i<sx/WATERSCALE+sw/WATERSCALE-1;i++) {
      dx=_getpixel(water1,i,j)-_getpixel(water1,i+1,j);
      dy=_getpixel(water1,i,j)-_getpixel(water1,i,j+1);
      c=getpixel(
        bg,((1<<16)+i*WATERSCALE+dx+x)&255,((1<<16)+j*WATERSCALE+dy+y)&127
      );
      r=getr16(c);
      g=getg16(c);
      b=getb16(c);
      r=r-dx/2;
      r=MID(0,r,255);
      g=g-dx/2;
      g=MID(0,g,255);
      b=b-dx/2;
      b=MID(0,b,255);
      c=makecol16(r,g,b);
      //putpixel(drawable,sx+i*WATERSCALE,sy+j*WATERSCALE,c);
#if WATERSCALE==4
      _putpixel16(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+0,c);
      _putpixel16(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+0,c);
      _putpixel16(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+0,c);
      _putpixel16(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+0,c);
      _putpixel16(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+1,c);
      _putpixel16(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+1,c);
      _putpixel16(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+1,c);
      _putpixel16(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+1,c);
      _putpixel16(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+2,c);
      _putpixel16(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+2,c);
      _putpixel16(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+2,c);
      _putpixel16(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+2,c);
      _putpixel16(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+3,c);
      _putpixel16(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+3,c);
      _putpixel16(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+3,c);
      _putpixel16(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+3,c);
#else
      rectfill(
        drawable,
        1+i*WATERSCALE,1+j*WATERSCALE,
        1+i*WATERSCALE+WATERSCALE,1+j*WATERSCALE+WATERSCALE,
        c
      );
#endif
    }
  }
}

void SWater24(BITMAP *water1,BITMAP *water2,int x,int y,int sx,int sy,int sw,int sh,int DX,int DY)
{
  int i,j;
  int c;
  int dx,dy;
  int r,g,b;

  for (j=sy/WATERSCALE+1;j<sy/WATERSCALE+sh/WATERSCALE-1;j++) {
    for (i=sx/WATERSCALE+1;i<sx/WATERSCALE+sw/WATERSCALE-1;i++) {
      c=-4*_getpixel(water1,i,j)
          +_getpixel(water2,i-1,j-1)
          +_getpixel(water2,i,j-1)
          +_getpixel(water2,i+1,j-1)
          +_getpixel(water2,i-1,j)
          +_getpixel(water2,i+1,j)
          +_getpixel(water2,i-1,j+1)
          +_getpixel(water2,i,j+1)
          +_getpixel(water2,i+1,j+1);
      c/=4;
      c=c-(c>>2);
      c=MID(0,c,255);
      putpixel(water1,i-DX,j-DY,c);
    }
  }

/*
  // Fill the rest
  if (DX>0) { // Right
    rectfill(water1,water1->w-DX,0,water1->w,water1->h,0);
  }
  else if (DX<0) { // Left
    rectfill(water1,0,0,-DX,water1->h,0);
  }
  if (DY>0) { // Bottom
    rectfill(water1,0,water1->h-DY,water1->w,water1->h,0);
  }
  else if (DY<0) { // Top
    rectfill(water1,0,0,water1->w,-DY,0);
  }
*/

/*
  // Fill the rest
  if (DX>0) { // Right
    rectfill(water2,sx+sw-DX,sy,sw,sy+sh,0);
  }
  else if (DX<0) { // Left
    rectfill(water2,sx,sy,sx-DX,sy+sh,0);
  }
  if (DY>0) { // Bottom
    rectfill(water2,sx,sy+sh-DY,sx+sw,sy+sh,0);
  }
  else if (DY<0) { // Top
    rectfill(water2,sx,sy,sx+sw,sy-DY,0);
  }
*/

  for (j=sy/WATERSCALE+1-1;j<sy/WATERSCALE+sh/WATERSCALE-1;j++) {
    for (i=sx/WATERSCALE+1-1;i<sx/WATERSCALE+sw/WATERSCALE-1;i++) {
      dx=_getpixel(water1,i,j)-_getpixel(water1,i+1,j);
      dy=_getpixel(water1,i,j)-_getpixel(water1,i,j+1);
      c=getpixel(
        bg,((1<<16)+i*WATERSCALE+dx+x)&255,((1<<16)+j*WATERSCALE+dy+y)&127
      );
      r=getr24(c);
      g=getg24(c);
      b=getb24(c);
      r=r-dx/2;
      r=MID(0,r,255);
      g=g-dx/2;
      g=MID(0,g,255);
      b=b-dx/2;
      b=MID(0,b,255);
      c=makecol24(r,g,b);
      //putpixel(drawable,sx+i*WATERSCALE,sy+j*WATERSCALE,c);
#if WATERSCALE==4
      _putpixel24(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+0,c);
      _putpixel24(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+0,c);
      _putpixel24(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+0,c);
      _putpixel24(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+0,c);
      _putpixel24(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+1,c);
      _putpixel24(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+1,c);
      _putpixel24(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+1,c);
      _putpixel24(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+1,c);
      _putpixel24(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+2,c);
      _putpixel24(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+2,c);
      _putpixel24(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+2,c);
      _putpixel24(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+2,c);
      _putpixel24(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+3,c);
      _putpixel24(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+3,c);
      _putpixel24(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+3,c);
      _putpixel24(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+3,c);
#else
      rectfill(
        drawable,
        1+i*WATERSCALE,1+j*WATERSCALE,
        1+i*WATERSCALE+WATERSCALE,1+j*WATERSCALE+WATERSCALE,
        c
      );
#endif
    }
  }
}

void SWater32(BITMAP *water1,BITMAP *water2,int x,int y,int sx,int sy,int sw,int sh,int DX,int DY)
{
  int i,j;
  int c;
  int dx,dy;
  int r,g,b;

  for (j=sy/WATERSCALE+1;j<sy/WATERSCALE+sh/WATERSCALE-1;j++) {
    for (i=sx/WATERSCALE+1;i<sx/WATERSCALE+sw/WATERSCALE-1;i++) {
      c=-4*_getpixel(water1,i,j)
          +_getpixel(water2,i-1,j-1)
          +_getpixel(water2,i,j-1)
          +_getpixel(water2,i+1,j-1)
          +_getpixel(water2,i-1,j)
          +_getpixel(water2,i+1,j)
          +_getpixel(water2,i-1,j+1)
          +_getpixel(water2,i,j+1)
          +_getpixel(water2,i+1,j+1);
      c/=4;
      c=c-(c>>2);
      c=MID(0,c,255);
      putpixel(water1,i-DX,j-DY,c);
    }
  }

/*
  // Fill the rest
  if (DX>0) { // Right
    rectfill(water1,water1->w-DX,0,water1->w,water1->h,0);
  }
  else if (DX<0) { // Left
    rectfill(water1,0,0,-DX,water1->h,0);
  }
  if (DY>0) { // Bottom
    rectfill(water1,0,water1->h-DY,water1->w,water1->h,0);
  }
  else if (DY<0) { // Top
    rectfill(water1,0,0,water1->w,-DY,0);
  }
*/

/*
  // Fill the rest
  if (DX>0) { // Right
    rectfill(water2,sx+sw-DX,sy,sw,sy+sh,0);
  }
  else if (DX<0) { // Left
    rectfill(water2,sx,sy,sx-DX,sy+sh,0);
  }
  if (DY>0) { // Bottom
    rectfill(water2,sx,sy+sh-DY,sx+sw,sy+sh,0);
  }
  else if (DY<0) { // Top
    rectfill(water2,sx,sy,sx+sw,sy-DY,0);
  }
*/

  for (j=sy/WATERSCALE+1-1;j<sy/WATERSCALE+sh/WATERSCALE-1;j++) {
    for (i=sx/WATERSCALE+1-1;i<sx/WATERSCALE+sw/WATERSCALE-1;i++) {
      dx=_getpixel(water1,i,j)-_getpixel(water1,i+1,j);
      dy=_getpixel(water1,i,j)-_getpixel(water1,i,j+1);
      c=getpixel(
        bg,((1<<16)+i*WATERSCALE+dx+x)&255,((1<<16)+j*WATERSCALE+dy+y)&127
      );
      r=getr32(c);
      g=getg32(c);
      b=getb32(c);
      r=r-dx/2;
      r=MID(0,r,255);
      g=g-dx/2;
      g=MID(0,g,255);
      b=b-dx/2;
      b=MID(0,b,255);
      c=makecol32(r,g,b);
      //putpixel(drawable,sx+i*WATERSCALE,sy+j*WATERSCALE,c);
#if WATERSCALE==4
      _putpixel32(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+0,c);
      _putpixel32(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+0,c);
      _putpixel32(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+0,c);
      _putpixel32(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+0,c);
      _putpixel32(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+1,c);
      _putpixel32(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+1,c);
      _putpixel32(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+1,c);
      _putpixel32(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+1,c);
      _putpixel32(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+2,c);
      _putpixel32(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+2,c);
      _putpixel32(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+2,c);
      _putpixel32(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+2,c);
      _putpixel32(drawable,1+i*WATERSCALE+0,1+j*WATERSCALE+3,c);
      _putpixel32(drawable,1+i*WATERSCALE+1,1+j*WATERSCALE+3,c);
      _putpixel32(drawable,1+i*WATERSCALE+2,1+j*WATERSCALE+3,c);
      _putpixel32(drawable,1+i*WATERSCALE+3,1+j*WATERSCALE+3,c);
#else
      rectfill(
        drawable,
        1+i*WATERSCALE,1+j*WATERSCALE,
        1+i*WATERSCALE+WATERSCALE,1+j*WATERSCALE+WATERSCALE,
        c
      );
#endif
    }
  }
}


void SWater(BITMAP *water1,BITMAP *water2,int x,int y,int sx,int sy,int sw,int sh,int DX,int DY)
{
#ifdef DEBUG
  Log("SWater at frame %d: %d %d %d %d\n",frames,sx,sy,sw,sh);
#endif
  set_clip(
    water1,
    sx/WATERSCALE,sy/WATERSCALE,(sx+sw)/WATERSCALE-1,(sy+sh)/WATERSCALE-1
  );
  switch (_color_depth) {
    case 15:SWater15(water1,water2,x,y,sx,sy,sw,sh,DX,DY);break;
    case 16:SWater16(water1,water2,x,y,sx,sy,sw,sh,DX,DY);break;
    case 24:SWater24(water1,water2,x,y,sx,sy,sw,sh,DX,DY);break;
    case 32:SWater32(water1,water2,x,y,sx,sy,sw,sh,DX,DY);break;
  }
}

void SWaterScreen(BITMAP *water1,BITMAP *water2,int x,int y,int sx,int sy,int sw,int sh)
{
  int i,j;
  int c;
  int dx,dy;
  int r,g,b;

  for (j=sy/WATERSCALE2+1;j<sy/WATERSCALE2+sh/WATERSCALE2-1;j++) {
    for (i=sx/WATERSCALE2+1;i<sx/WATERSCALE2+sw/WATERSCALE2-1;i++) {
      c=-4*_getpixel(water1,i,j)
          +_getpixel(water2,i-1,j-1)
          +_getpixel(water2,i,j-1)
          +_getpixel(water2,i+1,j-1)
          +_getpixel(water2,i-1,j)
          +_getpixel(water2,i+1,j)
          +_getpixel(water2,i-1,j+1)
          +_getpixel(water2,i,j+1)
          +_getpixel(water2,i+1,j+1);
      c/=4;
      c=c-(c>>2);
      c=MID(0,c,255);
      putpixel(water1,i,j,c);
    }
  }

  for (j=sy/WATERSCALE2+1;j<sy/WATERSCALE2+sh/WATERSCALE2-1;j++) {
    for (i=sx/WATERSCALE2+1;i<sx/WATERSCALE2+sw/WATERSCALE2-1;i++) {
      dx=_getpixel(water1,i,j)-_getpixel(water1,i+1,j);
      dy=_getpixel(water1,i,j)-_getpixel(water1,i,j+1);
      c=getpixel(
        bg,((1<<16)+i*WATERSCALE2+dx+x)&255,((1<<16)+j*WATERSCALE2+dy+y)&127
      );
      r=getr(c);
      g=getg(c);
      b=getb(c);
      r=r-dx/2;
      r=MID(0,r,255);
      g=g-dx/2;
      g=MID(0,g,255);
      b=b-dx/2;
      b=MID(0,b,255);
      //putpixel(drawable,sx+i*WATERSCALE2,sy+j*WATERSCALE2,makecol(r,g,b));
      rectfill(
        drawable,
        i*WATERSCALE2,j*WATERSCALE2,
        i*WATERSCALE2+WATERSCALE2,j*WATERSCALE2+WATERSCALE2,makecol(r,g,b)
      );
    }
  }
}

void Water(BITMAP **water,BITMAP **water2,int x,int y,int sz,int DX,int DY,int bgx,int bgy)
{
  int i,j;
  BITMAP *swapper;
  int c;
  int dx,dy;
  int r,g,b;

  for (j=1;j<2*sz+1-1;j++) {
    for (i=1;i<2*sz+1-1;i++) {
      c=-4*_getpixel(*water,i,j)
          +_getpixel(*water2,i-1,j-1)
          +_getpixel(*water2,i,j-1)
          +_getpixel(*water2,i+1,j-1)
          +_getpixel(*water2,i-1,j)
          +_getpixel(*water2,i+1,j)
          +_getpixel(*water2,i-1,j+1)
          +_getpixel(*water2,i,j+1)
          +_getpixel(*water2,i+1,j+1);
      c/=4;
      c=c-(c>>3);
      c=MID(0,c,255);
      putpixel(*water,i-DX,j-DY,c);
    }
  }

  // Fill the rest
  if (DX>0) {
    rectfill(*water,(*water)->w-DX,0,(*water)->w,(*water)->h,0);
  }
  else if (DX<0) {
    rectfill(*water,0,0,-DX,(*water)->h,0);
  }
  if (DY>0) {
    rectfill(*water,0,(*water)->h-DY,(*water)->w,(*water)->h,0);
  }
  else if (DY<0) {
    rectfill(*water,0,0,(*water)->w,-DY,0);
  }

  // For the moment, draw height field only
  //blit(*water,drawable,0,0,x-sz,y-sz,2*sz,2*sz);

  // Water !
  for (j=1-1;j<2*sz+1-1;j++) {
    for (i=1-1;i<2*sz+1-1;i++) {
      dx=_getpixel(*water,i,j)-_getpixel(*water,i+1,j);
      dy=_getpixel(*water,i,j)-_getpixel(*water,i,j+1);
      c=getpixel(bg,(256*bg->w+i+dx+bgx)%bg->w,(256*bg->h+j+dy+bgy)%bg->h);
      r=getr(c);
      g=getg(c);
      b=getb(c);
      r=r-dx/16;
      r=MID(0,r,255);
      g=g-dx/16;
      g=MID(0,g,255);
      b=b-dx/16;
      b=MID(0,b,255);
      putpixel(drawable,x+i,y+j,makecol(r,g,b));
    }
  }

  swapper=*water;
  *water=*water2;
  *water2=swapper;
}

