static void game (void) { gentable (); while (aa_getevent(context, 0) == AA_NONE) { drawfire (); } }
void drawexplosion(int n) { switch (digdat[n].expsn) { case 1: soundexplode(n); case 2: case 3: drawfire(n-curplayer,digdat[n].fx,digdat[n].fy,digdat[n].expsn); incpenalty(); digdat[n].expsn++; break; default: killfire(n); digdat[n].expsn=0; } }
void updatefire(int n) { Sint4 pix; int clfirst[TYPES],clcoll[SPRITES],i; bool clflag; if (digdat[n].notfiring) { if (digdat[n].rechargetime!=0) digdat[n].rechargetime--; else if (getfirepflag(n-curplayer)) if (digdat[n].alive) { digdat[n].rechargetime=levof10()*3+60; digdat[n].notfiring=FALSE; switch (digdat[n].dir) { case DIR_RIGHT: digdat[n].fx=digdat[n].x+8; digdat[n].fy=digdat[n].y+4; break; case DIR_UP: digdat[n].fx=digdat[n].x+4; digdat[n].fy=digdat[n].y; break; case DIR_LEFT: digdat[n].fx=digdat[n].x; digdat[n].fy=digdat[n].y+4; break; case DIR_DOWN: digdat[n].fx=digdat[n].x+4; digdat[n].fy=digdat[n].y+8; } digdat[n].fdir=digdat[n].dir; movedrawspr(FIRSTFIREBALL+n-curplayer,digdat[n].fx,digdat[n].fy); soundfire(n); } } else { switch (digdat[n].fdir) { case DIR_RIGHT: digdat[n].fx+=8; pix=ggetpix(digdat[n].fx,digdat[n].fy+4)| ggetpix(digdat[n].fx+4,digdat[n].fy+4); break; case DIR_UP: digdat[n].fy-=7; pix=0; for (i=0;i<7;i++) pix|=ggetpix(digdat[n].fx+4,digdat[n].fy+i); pix&=0xc0; break; case DIR_LEFT: digdat[n].fx-=8; pix=ggetpix(digdat[n].fx,digdat[n].fy+4)| ggetpix(digdat[n].fx+4,digdat[n].fy+4); break; case DIR_DOWN: digdat[n].fy+=7; pix=0; for (i=0;i<7;i++) pix|=ggetpix(digdat[n].fx,digdat[n].fy+i); pix&=0x3; break; } drawfire(n-curplayer,digdat[n].fx,digdat[n].fy,0); for (i=0;i<TYPES;i++) clfirst[i]=first[i]; for (i=0;i<SPRITES;i++) clcoll[i]=coll[i]; incpenalty(); i=clfirst[2]; while (i!=-1) { killmon(i-FIRSTMONSTER); scorekill(n); digdat[n].expsn=1; i=clcoll[i]; } i=clfirst[4]; while (i!=-1) { if (i-FIRSTDIGGER+curplayer!=n && !digdat[i-FIRSTDIGGER+curplayer].invin && digdat[i-FIRSTDIGGER+curplayer].alive) { killdigger(i-FIRSTDIGGER+curplayer,3,0); digdat[n].expsn=1; } i=clcoll[i]; } if (clfirst[0]!=-1 || clfirst[1]!=-1 || clfirst[2]!=-1 || clfirst[3]!=-1 || clfirst[4]!=-1) clflag=TRUE; else clflag=FALSE; if (clfirst[0]!=-1 || clfirst[1]!=-1 || clfirst[3]!=-1) { digdat[n].expsn=1; i=clfirst[3]; while (i!=-1) { if (digdat[i-FIRSTFIREBALL+curplayer].expsn==0) digdat[i-FIRSTFIREBALL+curplayer].expsn=1; i=clcoll[i]; } } switch (digdat[n].fdir) { case DIR_RIGHT: if (digdat[n].fx>296) digdat[n].expsn=1; else if (pix!=0 && !clflag) { digdat[n].expsn=1; digdat[n].fx-=8; drawfire(n-curplayer,digdat[n].fx,digdat[n].fy,0); } break; case DIR_UP: if (digdat[n].fy<15) digdat[n].expsn=1; else if (pix!=0 && !clflag) { digdat[n].expsn=1; digdat[n].fy+=7; drawfire(n-curplayer,digdat[n].fx,digdat[n].fy,0); } break; case DIR_LEFT: if (digdat[n].fx<16) digdat[n].expsn=1; else if (pix!=0 && !clflag) { digdat[n].expsn=1; digdat[n].fx+=8; drawfire(n-curplayer,digdat[n].fx,digdat[n].fy,0); } break; case DIR_DOWN: if (digdat[n].fy>183) digdat[n].expsn=1; else if (pix!=0 && !clflag) { digdat[n].expsn=1; digdat[n].fy-=7; drawfire(n-curplayer,digdat[n].fx,digdat[n].fy,0); } } } }