#include"main.h"
#include"phong.h"
#include"phong2.h"
#define abprall 25

#define anzballs 6
int x;

/*int ccx[]     = {110,40 ,210,240,60 ,160};          //aktueller x wert
int ccy[]     = {110,110,40 ,60 ,140,160};
int ccxtemp[] = {110,40 ,210,240,60 ,160};
int ccytemp[] = {110,110,40 ,60 ,140,160};
/*int ccxadd[]  = {-3 , 2 ,-4 , 2 ,-4 , 3 };             //geschwindigkeit
int ccyadd[]  = { 2 , 3 , 2 , 4 ,-3 ,-5 };/**/

int ccx[]     = { 90,160,230, 90,160,230};
int ccy[]     = { 30, 30, 30,170,170,170};
int ccxtemp[] = { 90,160,230, 90,160,230};
int ccytemp[] = { 30, 30, 30,170,170,170};/**/
int ccxadd[]  = { 4 , 4 ,-4 , 4 , 4 ,-4 };             //geschwindigkeit
int ccyadd[]  = { 4 , 4 , 4 ,-4 , 4 ,-4 };

//int abprall[] = { 26, 24, 28, 17, 23, 16};
//               0   1   2   3   4   5
//0=star mit komet, 1=star, 2=star mit komet, 3=meta, 4=star, 5=meta

void initmetastar(){
int i;
	for (i=0; i<256; i++){
            if (phong[i*3+0]>5)  phong[i*3+0]-= 5; else phong[i*3+0]=0;
            if (phong[i*3+1]>5)  phong[i*3+1]-= 5; else phong[i*3+1]=0;
            if (phong[i*3+2]>5)  phong[i*3+2]-= 5; else phong[i*3+2]=0;

            phong[i*3+2]+=25;

            testpal3[i]=(( (phong[i*3+2]>>4)<<16)+(phong2[i*3+1]<<8)+(phong[i*3+0]));
            testpal2[i]=((phong2[i*3+2]<<16)+(phong2[i*3+1]<<8)+(phong2[i*3+0]));
            testpal[i]=((phong[i*3+2]<<16)+(phong[i*3+1]<<8)+(phong[i*3+0]));
        }

}

/* ===================================================================================== */

void do_metastuff(int originx,int originy,unsigned char color){
int x,y,a,b;
for (x=0;x<127;x++){
           a=originx+cosine2[x];
           b=originy+sine2[x];
           line(originx,originy,a,b,color,phong2);
         }
}

/* ===================================================================================== */

void do_metastuffMMX(int originx,int originy,unsigned char color){
int x,y,a,b;
for (x=0;x<127;x++){
           a=originx+cosine2[x];
           b=originy+sine2[x];
           lineimp(originx,originy,a,b,color,1,schweif);
//           lineimp(originx,originy,a,b,color,1,schweif);
         }
}

void do_metastuffMMXu(int originx,int originy,unsigned char color,int size,unsigned char *dest){
int x,y,a,b;
if (size==0){
for (x=0;x<128/2;x++){
           a=originx+cosine2[x<<2];
           b=originy+sine2[x<<2];
           lineimpu(originx,originy,a,b,color,0,dest);
         }
} else
{
for (x=0;x<128;x++){
           a=originx+cosine2[x<<1];
           b=originy+sine2[x<<1];
           lineimpu(originx,originy,a,b,color,0,dest);
         }
         }
}

/* ===================================================================================== */

void do_starstuff(int originx,int originy,int staerke){
int x,y,a,b;
         for (x=0;x<127;x+=staerke){
           a=originx+cosine2[x];
           b=originy+sine2[x];
           line(originx,originy,a,b,random()%255,phong,schweif);
         }

}

/* ===================================================================================== */

void do_starstuffMMX(int originx,int originy,int staerke){
int x,y,a,b;
         for (x=0;x<127;x+=staerke){
           a=originx+cosine2[x];
           b=originy+sine2[x];
           lineimp(originx,originy,a,b,random()%255,0,schweif);
         }
}

/* ===================================================================================== */

void draw_nd_update_stuff(unsigned char bb, unsigned char bb1, unsigned char bb2){
int a,b;
int xdif,ydif;

do_starstuffMMX(ccx[0],                       ccy[0],3);
do_metastuffMMX(ccx[0]+cosine3[bb],           ccy[0]+sine3[bb],80);
do_metastuffMMX(ccx[0]+cosine3[(bb+128)%255], ccy[0]+sine3[(bb+128)%255],80);

do_starstuffMMX(ccx[2],                        ccy[2],3);
do_metastuffMMX(ccx[2]+cosine3[bb1],           ccy[2]+sine3[bb1],90);
do_metastuffMMX(ccx[2]+cosine3[(bb1+128)%255], ccy[2]+sine3[(bb1+128)%255],80);

do_starstuffMMX(ccx[1],ccy[1],2);
do_starstuffMMX(ccx[4],ccy[4],2);
/**/
do_metastuffMMX(ccx[3],ccy[3],220);
do_metastuffMMX(ccx[5],ccy[5],200);



x=0;
for (a=0;a<anzballs;a++)                       //kollision?
for (b=x++;b<anzballs;b++)
    {
      if (a!=b)
      {
        xdif=abs(ccx[a]-ccx[b]);// + abs(ccxadd[a]) + abs(ccxadd[b]);
        ydif=abs(ccy[a]-ccy[b]);// + abs(ccyadd[a]) + abs(ccyadd[b]);
/*        xdif=abs(ccx[a]-ccx[b]) - abs(ccxadd[a]) - abs(ccxadd[b]);
        ydif=abs(ccy[a]-ccy[b]) - abs(ccyadd[a]) - abs(ccyadd[b]);/**/
        if ( (xdif<abprall) && (ydif<abprall) )
        {
          if (xdif<(abprall>>1))                //schon zu nahe x?
          {
            xdif=ccxadd[a];                        //switch speed
            ccxadd[a]=ccxadd[b];
            ccxadd[b]=xdif;/**/
            ccxadd[a]=0-ccxadd[b];//a
            ccxadd[b]=0-ccxadd[a];//b
          }  else
          {
          ccxadd[a]=0-ccxadd[a];//a
          ccxadd[b]=0-ccxadd[b];//b
          }

          if (ydif<(abprall>>1))                //schon zu nahe y?
          {
            xdif=ccyadd[a];                        //switch speed
            ccyadd[a]=ccyadd[b];
            ccyadd[b]=xdif;/**/
            ccyadd[a]=0-ccyadd[a];//a
            ccyadd[b]=0-ccyadd[b];//b
          } else
          {
            ccyadd[a]=0-ccyadd[a];//a
            ccyadd[b]=0-ccyadd[b];//b
          }

        }
      }
    }

for (a=0;a<anzballs;a++){

//drunk mode
//ccx[a]+=(random()%10)-4; ccy[a]+=(random()%10)-4;/**/

//bewegung
ccx[a]+=ccxadd[a];
ccy[a]+=ccyadd[a];

//clipping
if (ccx[a]>285) {ccx[a]=285; ccxadd[a]=0-ccxadd[a];}
if (ccx[a]<35)  {ccx[a]=35;  ccxadd[a]=0-ccxadd[a];}
if (ccy[a]>170) {ccy[a]=170; ccyadd[a]=0-ccyadd[a];}
if (ccy[a]<30)  {ccy[a]=30;  ccyadd[a]=0-ccyadd[a];}

//klebe test
if ((ccxtemp[a]-ccx[a])<2) ccx[a]+=(random()%10)-4;
if ((ccytemp[a]-ccy[a])<2) ccy[a]+=(random()%10)-4;

/*if (abs(ccxtemp[a]-ccx[a])<4) ccx[a]+=(random()%10)-4;
if (abs(ccytemp[a]-ccy[a])<4) ccy[a]+=(random()%10)-4;*/

ccxtemp[a]=ccx[a];
ccytemp[a]=ccy[a]; /**/

}

}

/* ===================================================================================== */

void crediz_part(int wahl){
int fntx,x;
long l;
            if ((fntx=random()%15+2)<5) fnty=random()%10;//10
            if ((wahl%100)<50){
                for (x=0;x<20;x++)
                    do_metastuffMMX(10+random()%240,15+fnty+random()%80,(random()%120)+80);
                __write13h2(0,"`D[[\0",fntx,(25+fnty)<<2);
                __write13h2(0,"\\CODE\\[[\0",fntx,(50+fnty)<<2);
                __write13h (0,"IQUITO[[[[[[\0",fntx,(75+fnty)<<2);
            } else
            if ((wahl%100)<100){
                for (x=0;x<20;x++)
                    do_metastuffMMX(60+random()%240,90+fnty+random()%80,(random()%120)+80);
                __write13h2(0,"[_D\0",fntx,(100+fnty)<<2);
                __write13h2(0,"[\\CODE\\\0",fntx,(125+fnty)<<2);
                __write13h (0,"[[GENOZ[TASH\0",fntx,(150+fnty)<<2);
            }/**/
            do_plasma();
            asmcopyfontschweif(schweif,buffer);
            asmblurscreenrgbmmx(0x070503,schweif);/**/

}

