/********************************** 
Mad Factory V3.0 erstmals in C  
   by Roman Stumm in 1989!
UPDATE:16/07/89 
cc Mad.c -S -E200 +idf1:Mad.PRE +L 
ln Mad.o -lc32 -ldf1:Mad -lm32 +C
***********************************/
#define JOY_RIGHT 2
#define JOY_LEFT 4
#define JOY_UP 8
#define JOY_DOWN 16

/* Globale Variablen für Sounds */
BYTE *wave;
UWORD *Volume = 0xdff0a8, *Laenge=0xdff0a4,
      *Period = 0xdff0a6, *DMACON=0xdff096;
LONG *Memory = 0xdff0a0;
LONG f[6] = {
392, 523, 659, 
784, 659, 784
};
SHORT l[6] = {
4, 4, 4, 8, 4, 28
};

VOID expl(ix,iy) /* Explosion für player, Fragezeichen */ 
SHORT ix;
SHORT iy; 
{ 
SHORT a, b; 
for(a=0;a<2;a++) {
	DrawImage(rp,&peng[a],(ix-1)*16,(iy-2)*16);
	for(b=1;b<5;b++) (void)sound(20*b,1);
	} /* End for a */
} /* End expl() */

VOID bombpeng(a)
SHORT a;
{
register SHORT h, v, p;
bomb--;
for(h=x[a]-1;h<=x[a]+1;h++) {
	for(v=y[a]-1;v<=y[a]+1;v++) {
		p=bild[h][v];
		if((p==13)||(p==15)||(p==0)||(p==7)) {
			if((h>0)&&(h<21)&&(v>1)&&(v<17))
				DrawImage(rp,&peng[0],(h-1)*16,(v-2)*16);
			} /* End if p||p */
	} /* End for v */
} /* End for h */
for (v=0;v<2;v++) for(h=1;h<5;h++) (void)sound(20*h,1);
for(h=x[a]-1;h<=x[a]+1;h++) {
	for(v=y[a]-1;v<=y[a]+1;v++) {
		p=bild[h][v];
		if((p==13)||(p==15)||(p==0)||(p==7)) {
			if((h>0)&&(h<21)&&(v>1)&&(v<17))
				DrawImage(rp,&peng[1],(h-1)*16,(v-2)*16);
		} /* End if p||p */
	} /* End for v */
} /* End for h */
WaitTOF(); WaitTOF();
for(h=x[a]-1;h<=x[a]+1;h++) {
	for(v=y[a]-1;v<=y[a]+1;v++) {
		p=bild[h][v];
		if((p==13)||(p==15)||(p==0)||(p==7)) {
			if((h>0)&&(h<21)&&(v>1)&&(v<17)) {
				DrawImage(rp,&pic[0],(h-1)*16,(v-2)*16);
				bild[h][v]=0;
			} /* End for v||h */
		} /* End if p||p */
	} /* End for v */
} /* End for h */
p=bild[x[a]][y[a]+1];
if(p==0) {
	DrawImage(rp,&pic[12],(x[a]-1)*16,(y[a]-1)*16);
	bild[x[a]][y[a]+1]=12;
	}
} /* End bombpeng() */

BYTE playermove(a) /* Gehen und hochspringen */
SHORT a;
{
register SHORT p;
p=bild[x[a]+rx][y[a]+ry]; /* In Richtung */
if((p>8)&&(p!=17)&&(p!=10)) return(0); 
else if((p==10)&&(key<=0)) return(0);
if((rx==0)&&(ry==0)) return(0);
switch(a) {
	case 0: /* Player 1 */
	switch(rx) {
		case 1: /* Right */ 
		for(p=0;p<17;p+=2) {
			ChangeSprite(vp,&pl1,&r1[(p/2)%2][0]);
			MoveSprite(vp,&pl1,(x[0]-1)*16+p,(y[0]-2)*16);
			WaitTOF(); 
			} /* End for p */
		x[0]++; 
		break;
		case -1: /* Left */
		for(p=0;p<17;p+=2) {
			ChangeSprite(vp,&pl1,&l1[(p/2)%2][0]);
			MoveSprite(vp,&pl1,(x[0]-1)*16-p,(y[0]-2)*16);
			WaitTOF(); 
			} /* End for p */
		x[0]--; 
		break;
		default:
		if(p==8) { 
		(void)leiter(0);
		goto Abschluss;
		} /* End if */
		ChangeSprite(vp,&pl1,&jr1[0]); /* Up */
		for(p=0;p<17;p++) {
			MoveSprite(vp,&pl1,(x[0]-1)*16,(y[0]-2)*16-p);
			WaitTOF(); 
			}
		y[0]--; 
		break;
		} /* End switch */
	break;
	case 1: /* Player 2 */
	switch(rx) {
		case 1: /* Right */ 
		for(p=0;p<17;p+=2) {
			ChangeSprite(vp,&pl2,&r2[(p/2)%2][0]);
			MoveSprite(vp,&pl2,(x[1]-1)*16+p,(y[1]-2)*16);
			WaitTOF(); 
			}
		x[1]++; 
		break;
		case -1: /* Left */
		for(p=0;p<17;p+=2) {
			ChangeSprite(vp,&pl2,&l2[(p/2)%2][0]);
			MoveSprite(vp,&pl2,(x[1]-1)*16-p,(y[1]-2)*16);
			WaitTOF(); 
			}
		x[1]--; 
		break;
		default:
		if(p==8) {
		(void)leiter(1);
		goto Abschluss;
		}
		ChangeSprite(vp,&pl2,&jr2[0]); /* Up */
		for(p=0;p<17;p++) {
			MoveSprite(vp,&pl2,(x[1]-1)*16,(y[1]-2)*16-p);
			WaitTOF(); }
		y[1]--;
		break;
		} /* End switch */
	} /* End switch a */
Abschluss:
p=bild[x[a]][y[a]];
if(p==10) { /* Door */
	key--; 
	DrawImage(rp,&pic[17],(x[a]-1)*16,(y[a]-2)*16);
	bild[x[a]][y[a]]=17;
	}
return(1);
} /* End playermove() */

VOID initsound() /* Klangfarbe u. Soundparameter */
{
LONG i;
if ((wave = AllocMem(16,MEMF_CLEAR | MEMF_CHIP))==NULL)
 exit(FALSE);
for (i=-8; i<8 ; i++) *(wave+8+i) = 10*i;
*Memory = wave;
*Volume = 64;
*Laenge = 8;
}

VOID sound(f,l) /* sound(Frequenz,Länge); */
LONG f;
SHORT l;
{
*Period = 1000000000/(f*16*279.37);
*DMACON = 0x8001; 
Delay(l); 
*DMACON = 0x00f;
}

VOID growing() /* Vermehrung der Amöbe */
{
register SHORT h, v;
register SHORT a, b;
for(a=0;a<grow;a++) {
	h=(SHORT)(zufall()*20)+1; /* 1-21 */
	v=(SHORT)(zufall()*15)+2; /* 2-17 */
	if(bild[h][v]==7) {
		for(b=h-1;b<=h+1;b+=2) {
			if((bild[b][v]==0)||(bild[b][v]==12)) {
				DrawImage(rp,&pic[7],(b-1)*16,(v-2)*16);
				bild[b][v]=7;
				(void)sound(1000,1);
			} /* End if bild[][] */
		} /* End for b */
		for(b=v-1;b<=v+1;b+=2) {
			if((bild[h][b]==0)||(bild[h][b]==12)) {
				DrawImage(rp,&pic[7],(h-1)*16,(b-2)*16);
				bild[h][b]=7;
				(void)sound(1000,1);
			} /* End if bild[][] */
		} /* End for b */
	} /* End if */
} /* END for a */
} /* End growing() */

VOID tod(a) /* Tot einer Spielfigur */
SHORT a;
{
SHORT b;
game++; 
leben--;
FreeSprite(3-a); /* Player weg */
for(b=0;b<10;b++) (void)expl(x[a],y[a]); /* B O O M ! */
} /* End tod() */

SHORT drawlevel() /* Läd u. zeichnet Level auf Screen */ 
{
SHORT nr, h, v, a;
LONG stell;
UBYTE gel[10];
anzstone=0;
SetRast(rp,0);
nr = open("MadData",0); /* MadData im aktuellen Verzeichnis */
stell=lseek(nr,348*levelnr,0);
for (h=2;h<=16;h++) {
	for (v=1;v<=20;v++) {
		a=read(nr,&gel,1); /* In Array eintragen */
                bild[v][h]=gel[0];
		if(gel[0]==11) anzstone++;
		if (a!=1) return(-1); /* EOF od. ERROR */	
		DrawImage(rp,&pic[bild[v][h]],(v-1)*16,(h-2)*16); /* Darstellen */
		} /* End for v */
	} /* End for h */
a=read(nr,&gel,1); /* Amöbe */
grow=gel[0];
a=read(nr,&gel,1); /* Frage */
frage=gel[0];
a=read(nr,&gel,1); /* Nächster Level bei Frage */
nextfrag=gel[0];
a=read(nr,&gel,1); /* Nächster Level bei Ausgang */
nextlev=gel[0];
a=read(nr,&gel,4); /* Player 1\2 x,y */
x[0]=gel[0];
y[0]=gel[1];
x[1]=gel[2];
y[1]=gel[3];
for(h=0;h<=4;h++) {
	a=read(nr,&gel,8);
	art[h]=gel[0]; /* Feindart */
 	/* gel[1] (Nummer) 1 BYTE noch unbelegt */
	fx[h]=gel[2]; /* x-Koord Feind */
	fy[h]=gel[3]; /* y-Koord Feind */
	sx[h]=gel[4]; /* Von X */
	sy[h]=gel[5]; /* Von Y */
	zx[h]=gel[6]; /* Bis X */
	zy[h]=gel[7]; /* Bis Y */
	} /* End for h */
a=close(nr); /* File schließen */
return(1); /* OK */
} /* End drawlevel() */

SHORT sprung1(a)
SHORT a;
{
register BYTE p;
register SHORT b, ix, iy;
ix=(x[a]-1)*16;
iy=(y[a]-2)*16;
p=bild[x[a]+rx][y[a]];   /* Seitlich */
if((p>8)&&(p!=17)&&(p!=10)) return(0);
p=bild[x[a]][y[a]-1]; /* Oben */
if((p>8)&&(p!=17)&&(p!=10)) return(0);
if((p==10)&&(key<=0)) return(0); /* No key */
p=bild[x[a]+rx][y[a]-1]; /* Schräg oben */
if((p>8)&&(p!=17)&&(p!=10)) return(0);
if((p==10)&&(key<=0)) return(0); 
if(rx==0) return(0); 
if((p==10)&&(key>0)) { 
	key--;
	DrawImage(rp,&pic[17],ix+rx*16,iy-16);
	bild[x[a]+rx][y[a]-1]=17;
	}
if(bild[x[a]][y[a]-1]==10) {
	if(key>0) {
	key--;
	DrawImage(rp,&pic[17],ix,iy-16);
	bild[x[a]][y[a]-1]=17;
	} /* End if */
	else {
	return(0);
	} /* End else */
	} /* End if */
switch(a) {
	case 0: /* Player 1 */
	switch(rx) {
		case 1: /* right */
		ChangeSprite(vp,&pl1,&jr1[0]);
		break;
		case -1: /* left */
		ChangeSprite(vp,&pl1,&jl1[0]);
		}
	for(b=0;b<17;b++) {
		MoveSprite(vp,&pl1,ix+b*rx,iy-b);
		WaitTOF();
		}
	x[0]+=rx;
	y[0]--;
	break;
	case 1: /* Player2 */
	switch(rx) {
		case 1: /* right */
		ChangeSprite(vp,&pl2,&jr2[0]);
		break;
		case -1: /* left */
		ChangeSprite(vp,&pl2,&jl2[0]);
		}
	for(b=0;b<17;b++) {
		MoveSprite(vp,&pl2,ix+b*rx,iy-b);
		WaitTOF();
		}
	x[1]+=rx;
	y[1]--;
	break;
	} /* End switch a */
return(1);
} /* End sprung1() */

VOID sprung2(a)
SHORT a;
{
register SHORT ix=(x[a]-1)*16;
register SHORT iy=(y[a]-2)*16;
register SHORT b;
register BYTE p;
p=bild[rx+x[a]][y[a]]; /* seitlich */
if((p>8)&&(p!=17)&&(p!=10)) return();
if((p==10)&&(key<=0)) return();
if((p==10)&&(key>0)) {
	key--; /* Door */
	DrawImage(rp,&pic[17],ix+rx*16,iy);
	bild[rx+x[a]][y[a]]=17;
	}
ry=1;
p=bild[rx+x[a]][y[a]+1]; /* schräg unten */
if(p>8) ry=0;
switch(a) {
	case 0:
	for(b=0;b<17;b++) {
		MoveSprite(vp,&pl1,ix+rx*b,iy+ry*b);
		WaitTOF();
		}
	x[0]+=rx;
	y[0]+=ry;
	switch(rx) {
		case 1:
		ChangeSprite(vp,&pl1,&r1[1][0]);
		break;
		case -1:
		ChangeSprite(vp,&pl1,&l1[1][0]);
		}
	break;
	case 1:
	for(b=0;b<17;b++) {
		MoveSprite(vp,&pl2,ix+rx*b,iy+ry*b);
		WaitTOF();
		}
	x[1]+=rx;
	y[1]+=ry;
		switch(rx) {
		case 1:
		ChangeSprite(vp,&pl2,&r2[1][0]);
		break;
		case -1:
		ChangeSprite(vp,&pl2,&l2[1][0]);
		}
	} /* End switch a */
} /* End sprung2() */

VOID tusch() /* Melodie bei Levelausgang, Bonusleben */
{
SHORT a;
for(a=0;a<7;a++)
(void)sound(f[a],l[a]);
}

main(argc,argv)
long argc;
char *argv[];
{
BYTE  ff, p;
register SHORT mode, ret, a, h, v;
register SHORT spring[2]; /* Sprung 0=kein 1=aktiv */
LONG speed; /* Für gleichmäßigen Spielverlauf */
USHORT ok=0; /* Für Inkey */
(void)openlib();
(void)initsound();
SetAPen(rp,11);
SetBPen(rp,0);
SetDrMd(rp,JAM2);
for(;;) { /* Mainloop */
 ok=0; /* Voreinstellungen */
 leben=3;
 if(argc!=2) levelnr=0;
 else { levelnr=atoi(argv[1]); argc=0; }
 if(levelnr<0) levelnr=0;
 key=0;
 punkte=0;
 bomb=0;
 for(a=0;a<8;a++) FreeSprite(a); /* Sprites weg */
 Move(rp,20,20);
 Text(rp,"One (1) or Two (2) Players?",27);
 while((ok!=49)&&(ok!=50)&&(ok!=27)) ok=inkey();
 if(ok==27) { /* EXIT Programm */ 
	FreeMem(wave,16);
	(void)closelib();
	} /* End if */
 mode=(SHORT)(ok-49); /* 0=1 Player, 1=2 Player */
 if(mode==0) speed=7;
 else speed=3;
 while(leben>0) { /* Game on */
  for(a=0;a<8;a++) FreeSprite(a); /* Sprites weg */
  game=0;
  title(0);
  if(game>0) continue; /* ESC gedrückt */
  for(a=0;a<=21;a++) {
	for(ret=0;ret<=17;ret++) bild[a][ret]=7;
	}/*  End for a */
  if(drawlevel()==-1) { /* EOF */
	title(1);
	break;
	} /* End if */
  for(a=0;a<5;a++) { /* Sprites einsetzen und darstellen */
	rfx[a]=rfy[a]=1;
	 switch(art[a]) {
	 case 0:
	 ChangeSprite(vp,&feind[a],&stamper[a][0]);
	 break;
	 case 1:
	 ChangeSprite(vp,&feind[a],&wagen[a][0]);
	 break;
	 case 2:
	 ChangeSprite(vp,&feind[a],&robot[a][0]);
	 break;
	 case 3:
	 ChangeSprite(vp,&feind[a],&bohrer[a][0]);
	 break;
	 case 4:
	 ChangeSprite(vp,&feind[a],&hammer[a][0]);
	 break;
	 default:
	 FreeSprite(feind[a].num);
	 } /* End switch art[a] */
	if(art[a]<5) MoveSprite(vp,&feind[a],(fx[a]-1)*16,(fy[a]-2)*16);
	} /* End for a */
	switch(mode) { /* Players darstellen */
	 case 1:
	 ChangeSprite(vp,&pl2,&r2[1][0]);
	 MoveSprite(vp,&pl2,(x[1]-1)*16,(y[1]-2)*16);
	 case 0:
	 ChangeSprite(vp,&pl1,&r1[1][0]);
	 MoveSprite(vp,&pl1,(x[0]-1)*16,(y[0]-2)*16);
	 } /* End switch mode */
        spring[0]=0;
	spring[1]=0;
while(game==0) { /* Start Action */
/* -- Scoreanzeige -- */
(void)score();
/* -- Stonefall -- */
if(anzstone>0) {
for (v=1;v<=20;v++) {
	for (h=2;h<=16;h++) {
		if(bild[v][h]==11) {
			if(bild[v][h+1]<=1) {
				DrawImage(rp,&pic[0],(v-1)*16,(h-2)*16);
				DrawImage(rp,&pic[11],(v-1)*16,(h-1)*16);
				bild[v][h]=0;
				bild[v][h+1]=11;
				h++;
				} /* End if */
			} /* End if */
		} /* End for v */
	} /*  End for h */
} /* End if */      
/* -- Player Bewegung -- */
	for(a=0;a<=mode;a++) { /* Player 0 bis 1 */
		switch(a) {
			case 0:
			switch(port2()) {
 			 case JOY_LEFT:  rx=-1; ry=0; break;
 			 case JOY_RIGHT: rx=1;  ry=0; break;
			 case JOY_UP:    ry=-1; rx=0; break;
			 case JOY_DOWN:  ry=1;  rx=0; break;
 			 default: rx=0; ry=0;
 			 } /* End port2() */
			ff=fire(2); 
			break;
			case 1:
			switch(port1()) {
			 case JOY_LEFT:  rx=-1; ry=0; break;
			 case JOY_RIGHT: rx=1;  ry=0; break;
			 case JOY_UP:    ry=-1; rx=0; break;
			 case JOY_DOWN:  ry=1;  rx=0; break;
			 default: rx=0; ry=0;
			 } /* End port1() */
			ff=fire(1); 
			}
		if(bild[x[a]][y[a]]==7) {
			(void)tod(a);
			goto Gestorben;
			} /* Tod, da Amöbe */
		if(bild[x[a]][y[a]]==11) {
			(void)tod(a);
			goto Gestorben;
			} /* Tod, da Stone */
		if(spritekoll(a)==1) {
			(void)tod(a);
			goto Gestorben;
			} /* Tod durch SpriteKoll. */
		if(spring[a]==1) {
			(void)sprung2(a); /* Seitl. Sprung zuende */  
			rx=0;
			ry=0; 
			ff=0;
			spring[a]=0; 
			goto Test;
			}
		if(bild[x[a]][y[a]+1]==9) {
			(void)tod(a);
			goto Gestorben;
			} /* Tod durch Gift */ 
		if(bild[x[a]][y[a]+1]<8) {
			(void)fallen(a);
			goto Test;
			} /* Fall nach unten */
		else if(bild[x[a]][y[a]+1]==12) 
			(void)bruch(x[a],y[a]+1); /* Bruchboden */
if((rx!=0)&&(ff==0)&&(bild[x[a]+rx][y[a]]==11)) {
	if(bild[x[a]+2*rx][y[a]]==0) { /* Stone schieben */
		DrawImage(rp,&pic[0],(x[a]-1+rx)*16,(y[a]-2)*16);
		(void)sound(130,1);
		DrawImage(rp,&pic[11],(x[a]-1+2*rx)*16,(y[a]-2)*16);
		bild[x[a]+2*rx][y[a]]=11;
		bild[x[a]+rx][y[a]]=0;
		} /* End schieben */
	switch(a) { 
		case 0: /* Player 1 */
		switch(rx) { 
			case 1: /* Right */
			ChangeSprite(vp,&pl1,&r1[1][0]);
			break;
			case -1: /* Left */
			ChangeSprite(vp,&pl1,&l1[1][0]);
			} /* End switch */
		break;
		case 1: /* Player 2 */
		switch(rx) {
			case 1: /* Right */
			ChangeSprite(vp,&pl2,&r2[1][0]);
			break;
			case -1: /* Left */
			ChangeSprite(vp,&pl2,&l2[1][0]);
			} /* End switch */
		} /* End switch */
	rx=0;
} /* End if */
if((rx==0)&&(ff==0)&&(ry==0)) {
	Delay(speed);
 	goto Test; /* Nothing */
 	}
else if((ff!=0)&&(ry!=1)&(rx==0)) { /* Knopf & evtl. Stick hoch */
	ry=-1; /* Jump up */
	}
else if(ff!=0) { /* Knopf gedrückt */
	if (rx!=0)  { /* Knopf + Stick x bewegt */
 		ry=-1;
		spring[a]=1;  /* Seitlich springen */
		}
	else if((ry==1)&&(bomb>0)) { /* Bombe gezündet */
		(void)bombpeng(a);
		goto Test;		
		}
	}
else if(ry==-1) { /* Stick hoch ohne Knopf */
	if(bild[x[a]][y[a]]!=8) ry=0; /* Keine Leiter */
	}
else if(ry==1) { /* Stick down ohne Knopf */
	if(bild[x[a]][y[a]+1]!=8) ry=0; /* Keine Leiter */
	}
if(spring[a]==1) {
if((spring[a]=sprung1(a))==0) Delay(speed);
}
else {
if(playermove(a)==0) Delay(speed);
}
Test:
/* -- auf Bonus testen -- */
switch(bild[x[a]][y[a]]) {
	case 1: /* ausgang */
	levelnr=nextlev;
	(void)tusch();
	game++;
	punkte+=20;
	break;
	case 2: /* bomb */
	bomb++;
	punkte+=1;
	bild[x[a]][y[a]]=0;
	DrawImage(rp,&pic[0],(x[a]-1)*16,(y[a]-2)*16);
	(void)sound(350,2);
	break;
	case 3: /* diamond */
	punkte+=10;
	bild[x[a]][y[a]]=0;
	DrawImage(rp,&pic[0],(x[a]-1)*16,(y[a]-2)*16);
	(void)sound(750,2);
	break;
	case 4: /* key */
	key++;
	punkte+=1;
	bild[x[a]][y[a]]=0;
	DrawImage(rp,&pic[0],(x[a]-1)*16,(y[a]-2)*16);
	(void)sound(550,2);
	break;
	case 5: /* glühbirne */
	leben++;
	bild[x[a]][y[a]]=0;
	DrawImage(rp,&pic[0],(x[a]-1)*16,(y[a]-2)*16);
	(void)tusch();
	break;
	case 6: /* frage */
	if(frage==0) { /* Zufall */
	ret=(SHORT)(zufall()*5)+2; /* 0-6 */
	if(ret<6) {
		bild[x[a]][y[a]]=ret;
		DrawImage(rp,&pic[ret],(x[a]-1)*16,(y[a]-2)*16);
		} /* End if */
	else { /* ret >= 6 */
		(void)expl(x[a],y[a]);
		bild[x[a]][y[a]]=0;
		punkte+=(key+bomb);
		key=bomb=0;
		DrawImage(rp,&pic[0],(x[a]-1)*16,(y[a]-2)*16);
		} /* End else */
	break;
	} /* End if */
	else if(frage==1) { /* ausgang */
	levelnr=nextfrag;
	(void)tusch();
	punkte+=5;
	game++;
	break;
	} /* End else if */
	else if(frage==6) {
		(void)expl(x[a],y[a]);
		bild[x[a]][y[a]]=0;
		punkte+=(key+bomb);
		key=bomb=0;
		frage=0;
		DrawImage(rp,&pic[0],(x[a]-1)*16,(y[a]-2)*16);	
	} /* End else if */
	else { /* frage==anderes Image */
	bild[x[a]][y[a]]=frage;
	if(frage==11) anzstone++;
	DrawImage(rp,&pic[frage],(x[a]-1)*16,(y[a]-2)*16);
	frage=0; /* Ab jetzt Zufall */
	break;
	} /* End else */
	} /* End switch bild[][] */
	/* -- SpriteKoll testen -- */
	if(spritekoll(a)==1) {
		(void)tod(a);
		goto Gestorben;
		}
	} /* End for a */
if(grow>0)(void)growing();
/* -- Spritebewegung -- */
for(a=0;a<5;a++) {
	switch(art[a]) {
		case 5:
		break;
		default:
		(void)feindmove(a);
		} /* End switch art[a] */
	} /* End for a */
		if(inkey()==27) (void)tod(0); /* ESC gedrückt */
		Gestorben:;
		} /* End Game Action */
  	SetRast(rp,0);
	RefreshWindowFrame(win);
 } /* End while leben */
 for(a=0;a<8;a++) FreeSprite(a); /* Sprites weg */
 (void)title(2);
 SetRast(rp,0);
 RefreshWindowFrame(win);
 } /* End Mainloop */
} /* End main() */
