void initdigger(void) { int dig; for (dig=curplayer;dig<diggers+curplayer;dig++) { if (digdat[dig].lives==0) continue; digdat[dig].v=9; digdat[dig].mdir=4; digdat[dig].h=(diggers==1) ? 7 : (8-dig*2); digdat[dig].x=digdat[dig].h*20+12; digdat[dig].dir=(dig==0) ? DIR_RIGHT : DIR_LEFT; digdat[dig].rx=0; digdat[dig].ry=0; digdat[dig].bagtime=0; digdat[dig].alive=TRUE; digdat[dig].dead=FALSE; /* alive !=> !dead but dead => !alive */ digdat[dig].invin=FALSE; digdat[dig].ivt=0; digdat[dig].deathstage=1; digdat[dig].y=digdat[dig].v*18+18; movedrawspr(dig+FIRSTDIGGER-curplayer,digdat[dig].x,digdat[dig].y); digdat[dig].notfiring=TRUE; digdat[dig].emocttime=0; digdat[dig].firepressed=FALSE; digdat[dig].expsn=0; digdat[dig].rechargetime=0; digdat[dig].emn=0; digdat[dig].msc=1; } digvisible=TRUE; bonusvisible=bonusmode=FALSE; }
void createmonster(void) { Sint4 i; for (i=0;i<MONSTERS;i++) if (!mondat[i].flag) { mondat[i].flag=true; mondat[i].alive=true; mondat[i].t=0; mondat[i].nob=true; mondat[i].hnt=0; mondat[i].h=14; mondat[i].v=0; mondat[i].x=292; mondat[i].y=18; mondat[i].xr=0; mondat[i].yr=0; mondat[i].dir=DIR_LEFT; mondat[i].hdir=DIR_LEFT; mondat[i].chase=chase+curplayer; chase=(chase+1)%diggers; nextmonster++; nextmontime=mongaptime; mondat[i].stime=5; movedrawspr(i+FIRSTMONSTER,mondat[i].x,mondat[i].y); break; } }
static int monster_obj_put(struct monster_obj *self) { struct monster_obj_private *mop; mop = self->priv; monster_obj_updspr(mop); movedrawspr(FIRSTMONSTER + mop->m_id, mop->pos.x, mop->pos.y); return (0); }
void drawbags(void) { Sint4 bag; for (bag=0;bag<BAGS;bag++) { if (curplayer==0) memcpy(&bagdat[bag],&bagdat1[bag],sizeof(struct bag)); else memcpy(&bagdat[bag],&bagdat2[bag],sizeof(struct bag)); if (bagdat[bag].exist) movedrawspr(bag+FIRSTBAG,bagdat[bag].x,bagdat[bag].y); } }
void diggerdie(int n) { int clfirst[TYPES],clcoll[SPRITES],i; bool alldead; switch (digdat[n].deathstage) { case 1: if (bagy(digdat[n].deathbag)+6>digdat[n].y) digdat[n].y=bagy(digdat[n].deathbag)+6; drawdigger(n-curplayer,15,digdat[n].x,digdat[n].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].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].x,digdat[n].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].x, digdat[n].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(); if (digdat[n].lives>0) { digdat[n].v=9; digdat[n].mdir=4; digdat[n].h=(diggers==1) ? 7 : (8-n*2); digdat[n].x=digdat[n].h*20+12; digdat[n].dir=(n==0) ? DIR_RIGHT : DIR_LEFT; digdat[n].rx=0; digdat[n].ry=0; digdat[n].bagtime=0; digdat[n].alive=TRUE; digdat[n].dead=FALSE; digdat[n].invin=TRUE; digdat[n].ivt=50; digdat[n].deathstage=1; digdat[n].y=digdat[n].v*18+18; erasespr(n+FIRSTDIGGER-curplayer); movedrawspr(n+FIRSTDIGGER-curplayer,digdat[n].x,digdat[n].y); digdat[n].notfiring=TRUE; digdat[n].emocttime=0; digdat[n].firepressed=FALSE; digdat[n].expsn=0; digdat[n].rechargetime=0; digdat[n].emn=0; digdat[n].msc=1; } clearfire(n); if (bonusmode) music(0); else music(1); } } } }
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); } } } }
int mainprog(void) { int16_t frame,t; struct monster_obj *nobbin, *hobbin; struct digger_obj odigger; struct obj_position newpos; loadscores(); escape=false; nobbin = NULL; hobbin = NULL; do { soundstop(); creatembspr(); detectjoy(); ddap->gclear(); ddap->gtitle(); outtext(ddap, "D I G G E R",100,0,3); shownplayers(); showtable(ddap); 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(ddap, " ",164,t,0); if (frame==50) { if (nobbin != NULL) { CALL_METHOD(nobbin, dtor); } nobbin = monster_obj_ctor(0, MON_NOBBIN, DIR_LEFT, 292, 63); CALL_METHOD(nobbin, put); } if (frame>50 && frame<=77) { CALL_METHOD(nobbin, getpos, &newpos); newpos.x -= 4; if (frame == 77) { newpos.dir = DIR_RIGHT; } CALL_METHOD(nobbin, setpos, &newpos); } if (frame > 50) { CALL_METHOD(nobbin, animate); } if (frame==83) outtext(ddap, "NOBBIN",216,64,2); if (frame==90) { if (hobbin != NULL) { CALL_METHOD(hobbin, dtor); } hobbin = monster_obj_ctor(1, MON_NOBBIN, DIR_LEFT, 292, 82); CALL_METHOD(hobbin, put); } if (frame>90 && frame<=117) { CALL_METHOD(hobbin, getpos, &newpos); newpos.x -= 4; if (frame == 117) { newpos.dir = DIR_RIGHT; } CALL_METHOD(hobbin, setpos, &newpos); } if (frame == 100) { CALL_METHOD(hobbin, mutate); } if (frame > 90) { CALL_METHOD(hobbin, animate); } if (frame==123) outtext(ddap, "HOBBIN",216,83,2); if (frame==130) { digger_obj_init(&odigger, 0, DIR_LEFT, 292, 101); CALL_METHOD(&odigger, put); } if (frame>130 && frame<=157) { odigger.x -= 4; } if (frame>157) { odigger.dir = DIR_RIGHT; } if (frame >= 130) { CALL_METHOD(&odigger, animate); } if (frame==163) outtext(ddap, "DIGGER",216,102,2); if (frame==178) { movedrawspr(FIRSTBAG,184,120); drawgold(0,0,184,120); } if (frame==183) outtext(ddap, "GOLD",216,121,2); if (frame==198) drawemerald(184,141); if (frame==203) outtext(ddap, "EMERALD",216,140,2); if (frame==218) drawbonus(184,158); if (frame==223) outtext(ddap, "BONUS",216,159,2); if (frame == 235) { CALL_METHOD(nobbin, damage); } if (frame == 239) { CALL_METHOD(nobbin, kill); } if (frame == 242) { CALL_METHOD(hobbin, damage); } if (frame == 246) { CALL_METHOD(hobbin, kill); } 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; }
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; }
void drawbonus(int16_t x,int16_t y) { int n=0; initspr(FIRSTBONUS+n,81,4,15,0,0); movedrawspr(FIRSTBONUS+n,x,y); }