void drawdig(int n,int d,int x,int y,bool f) { drawdigger(n-curplayer,d,x,y,f); if (digdat[n].invin) { digdat[n].ivt--; if (digdat[n].ivt==0) digdat[n].invin=FALSE; else if (digdat[n].ivt%10<5) erasespr(FIRSTDIGGER+n-curplayer); } }
static void diggerdie(struct digger_draw_api *ddap, int n) { int clfirst[TYPES],clcoll[SPRITES],i; bool alldead; switch (digdat[n].deathstage) { case 1: if (bagy(digdat[n].deathbag)+6>digdat[n].dob.y) digdat[n].dob.y=bagy(digdat[n].deathbag)+6; drawdigger(n-curplayer,15,digdat[n].dob.x,digdat[n].dob.y,false); incpenalty(); if (getbagdir(digdat[n].deathbag)+1==0) { soundddie(); digdat[n].deathtime=5; digdat[n].deathstage=2; digdat[n].deathani=0; digdat[n].dob.y-=6; } break; case 2: if (digdat[n].deathtime!=0) { digdat[n].deathtime--; break; } if (digdat[n].deathani==0) music(2); drawdigger(n-curplayer,14-digdat[n].deathani,digdat[n].dob.x,digdat[n].dob.y, false); for (i=0;i<TYPES;i++) clfirst[i]=first[i]; for (i=0;i<SPRITES;i++) clcoll[i]=coll[i]; incpenalty(); if (digdat[n].deathani==0 && clfirst[2]!=-1) killmonsters(clfirst,clcoll); if (digdat[n].deathani<4) { digdat[n].deathani++; digdat[n].deathtime=2; } else { digdat[n].deathstage=4; if (musicflag || diggers>1) digdat[n].deathtime=60; else digdat[n].deathtime=10; } break; case 3: digdat[n].deathstage=5; digdat[n].deathani=0; digdat[n].deathtime=0; break; case 5: if (digdat[n].deathani>=0 && digdat[n].deathani<=6) { drawdigger(n-curplayer,15,digdat[n].dob.x, digdat[n].dob.y-deatharc[digdat[n].deathani],false); if (digdat[n].deathani==6 && !isalive()) musicoff(); incpenalty(); digdat[n].deathani++; if (digdat[n].deathani==1) soundddie(); if (digdat[n].deathani==7) { digdat[n].deathtime=5; digdat[n].deathani=0; digdat[n].deathstage=2; } } break; case 4: if (digdat[n].deathtime!=0) digdat[n].deathtime--; else { digdat[n].dead=true; alldead=true; for (i=0;i<diggers;i++) if (!digdat[i].dead) { alldead=false; break; } if (alldead) setdead(true); else if (isalive() && digdat[n].lives>0) { if (!gauntlet) digdat[n].lives--; drawlives(ddap); if (digdat[n].lives>0) { digdat[n].v=9; digdat[n].mdir=4; digdat[n].h=(diggers==1) ? 7 : (8-n*2); digdat[n].dob.x=digdat[n].h*20+12; digdat[n].dob.dir=(n==0) ? DIR_RIGHT : DIR_LEFT; digdat[n].rx=0; digdat[n].ry=0; digdat[n].bagtime=0; digdat[n].dob.alive=true; digdat[n].dead=false; digdat[n].invin=true; digdat[n].ivt=50; digdat[n].deathstage=1; digdat[n].dob.y=digdat[n].v*18+18; erasespr(n+FIRSTDIGGER-curplayer); CALL_METHOD(&digdat[n].dob, put); digdat[n].notfiring=true; digdat[n].emocttime=0; digdat[n].firepressed=false; digdat[n].bob.expsn=0; digdat[n].rechargetime=0; digdat[n].emn=0; digdat[n].msc=1; } clearfire(n); if (bonusmode) music(0); else music(1); } } } }
int mainprog(void) { Sint4 frame,t,x; loadscores(); escape=false; do { soundstop(); creatembspr(); detectjoy(); gclear(); gtitle(); outtext("D I G G E R",100,0,3); shownplayers(); showtable(); started=false; frame=0; newframe(); teststart(); while (!started) { started=teststart(); if ((akeypressed==27 || akeypressed=='n' || akeypressed=='N') && !gauntlet && diggers==1) { switchnplayers(); shownplayers(); akeypressed=0; } if (frame==0) for (t=54;t<174;t+=12) outtext(" ",164,t,0); if (frame==50) { movedrawspr(FIRSTMONSTER,292,63); x=292; } if (frame>50 && frame<=77) { x-=4; drawmon(0,1,DIR_LEFT,x,63); } if (frame>77) drawmon(0,1,DIR_RIGHT,184,63); if (frame==83) outtext("NOBBIN",216,64,2); if (frame==90) { movedrawspr(FIRSTMONSTER+1,292,82); drawmon(1,0,DIR_LEFT,292,82); x=292; } if (frame>90 && frame<=117) { x-=4; drawmon(1,0,DIR_LEFT,x,82); } if (frame>117) drawmon(1,0,DIR_RIGHT,184,82); if (frame==123) outtext("HOBBIN",216,83,2); if (frame==130) { movedrawspr(FIRSTDIGGER,292,101); drawdigger(0,DIR_LEFT,292,101,1); x=292; } if (frame>130 && frame<=157) { x-=4; drawdigger(0,DIR_LEFT,x,101,1); } if (frame>157) drawdigger(0,DIR_RIGHT,184,101,1); if (frame==163) outtext("DIGGER",216,102,2); if (frame==178) { movedrawspr(FIRSTBAG,184,120); drawgold(0,0,184,120); } if (frame==183) outtext("GOLD",216,121,2); if (frame==198) drawemerald(184,141); if (frame==203) outtext("EMERALD",216,140,2); if (frame==218) drawbonus(184,158); if (frame==223) outtext("BONUS",216,159,2); newframe(); frame++; if (frame>250) frame=0; } if (savedrf) { if (gotgame) { recsavedrf(); gotgame=false; } savedrf=false; continue; } if (escape) break; recinit(); game(); gotgame=true; if (gotname) { recsavedrf(); gotgame=false; } savedrf=false; escape=false; } while (!escape); finish(); return 0; }