#include <snd.h>
#include <egb.h>
#include <msdos.cf>

#include <concorde.h>

char EGB_work[EgbWorkSize];
short virt[320*240];

void change(int *d,int *s,int a,int b)
{
	int i,x1,y1,x2,y2;
	d[0]=s[0];
	x2=s[s[0]*2-1];
	y2=s[s[0]*2  ];
	for(i=0; i<s[0]; i++)
	{
		x1=x2;
		y1=y2;
		x2=s[i*2+1];
		y2=s[i*2+2];
		d[i*2+1]=(x2*a+x1*b)/(a+b);
		d[i*2+2]=(y2*a+y1*b)/(a+b);
	}
}

void main()
{
	PAGE rp,vp;
	int h,i,j,k,c,g,r,b,pad;
	int grb[]={0,0,31, 0,31,0, 0,31,31, 31,0,0, 31,0,31, 31,31,0, 31,31,31};
	int src[64],dst[64],pnt[]={4,  40,0,  279,0,  279,239,  40,239};

	EGB_init(EGB_work,EgbWorkSize);
	EGB_resolution(EGB_work,0,10);
	EGB_resolution(EGB_work,1,10);
	EGB_writePage(EGB_work,1);
	EGB_displayStart(EGB_work,0,0,0);
	EGB_displayStart(EGB_work,2,2,2);
	EGB_displayStart(EGB_work,3,320,240);
	EGB_displayPage(EGB_work,1,2);

	YGH_initPage(&rp,SEG_VRAMP,0x40000  ,512,256);
	YGH_initPage(&vp,SEG_VIRTU,ADR(virt),320,240);
	YGH_clearPage(&vp,15);

	pad=255;  i=0;  h=0;
	while(pad==255)
	{
		for(k=0; k<pnt[0]*2+1; k++)src[k]=pnt[k];
		for(j=0; j<40; j++)
		{
			if( (c=((j+i)%40)) >=20 )c=40-c;
			g=grb[h*3  ]*c/20;
			r=grb[h*3+1]*c/20;
			b=grb[h*3+2]*c/20;
			YGH_color(&vp,g*1024+r*32+b);
			YGH_emptyPolygon(&vp,src);
			change(dst,src,7,1);
			for(k=0; k<dst[0]*2+1; k++)src[k]=dst[k];
		}
		YGH_pageCopy(&rp,&vp);
		if((i=(i+1)%40)==0)h=(h+1)%7;
		SND_joy_in_2(0,&pad);
	}
}
