
#include <math.h>
#include "noise.h"

#define XS XRES
#define YS YRES

#ifdef HICOLOR
#define MASK 0x7bef
#else
#define MASK 0x7f7f7f
#endif

void noise(buftype *buf,int ctr)
{
    int n,x,y,off;
    static char *shite,
                dirt[4*4]={0,1,0,0, 0,1,1,0, 1,1,1,1, 0,1,1,0},
                dirt2[4*4]={0,0,0,0, 0,0,1,0, 0,1,1,0, 1,0,0,0};

    /* Lines */
    for(n=0;n<0+(ctr/50%4)-2;n++)
    {
        if((ctr+n)%4==0)
            continue;
        x=n*XS/2+ctr*n+XS+n/10.0+sinf(ctr/20.0f+n*2)*(float)XS;
        x%=XS;
        for(y=0;y<YS;y++)
        {
            buf[x+y*XS]>>=1;
            buf[x+y*XS]&=MASK;
        }
    }
    /* Small noise */
    for(n=0;n<10+(ctr/20%10);n++)
    {
        x=n*n+ctr*ctr+n*19;
        x%=XS;
        y=x+n*10+ctr*17;
        y%=YS;

        buf[x+y*XS]>>=1;
        buf[x+y*XS]&=MASK;
    }

    /* Dirt blob */
    //    if(ctr%6==0)
    for (n=0; n<50; n++)
    {
        if(ctr%3==0)
            shite=dirt;
        else
            shite=dirt2;

        off=ctr*ctr*13+1000+sin(ctr)*500.0;
        off%=XS*(YS-4);

        for(y=0;y<4;y++)
            for(x=0;x<4;x++)
                if(shite[y*4+x])
                {
                    buf[x+y*XS+off]>>=1;
                    buf[x+y*XS]&=MASK;
                }
    }
}
