void drawlives(void) { int16_t l,n,g; char buf[10]; if (gauntlet) { g=(int16_t)(cgtime/1193181l); sprintf(buf,"%3i:%02i",g/60,g%60); outtext(buf,124,0,3); return; } n=getlives(0)-1; outtext(" ",96,0,2); if (n>4) { drawlife(0,80,0); sprintf(buf,"X%i",n); outtext(buf,100,0,2); } else for (l=1;l<5;l++) { drawlife(n>0 ? 0 : 2,l*20+60,0); n--; } if (nplayers==2) { outtext(" ",164,0,2); n=getlives(1)-1; if (n>4) { sprintf(buf,"%iX",n); outtext(buf,220-strlen(buf)*12,0,2); drawlife(1,224,0); } else for (l=1;l<5;l++) { drawlife(n>0 ? 1 : 2,244-l*20,0); n--; } } if (diggers==2) { outtext(" ",164,0,1); n=getlives(1)-1; if (n>4) { sprintf(buf,"%iX",n); outtext(buf,220-strlen(buf)*12,0,1); drawlife(3,224,0); } else for (l=1;l<5;l++) { drawlife(n>0 ? 3 : 2,244-l*20,0); n--; } } }
void addscore(int n,Sint4 score) { scdat[n].score+=score; if (scdat[n].score>999999L) scdat[n].score=0; if (n==0) writenum(scdat[n].score,0,0,6,1); else if (scdat[n].score<100000L) writenum(scdat[n].score,236,0,6,1); else writenum(scdat[n].score,248,0,6,1); if (scdat[n].score>=scdat[n].nextbs+n && /* +n to reproduce original bug */ scdat[n].score<1000000L) { if (getlives(n)<5 || unlimlives) { if (gauntlet) cgtime+=17897715L; /* 15 second time bonus instead of the life */ else addlife(n); drawlives(); } scdat[n].nextbs+=bonusscore; } incpenalty(); incpenalty(); incpenalty(); }
int getalllives(void) { int t=0,i; for (i=curplayer;i<diggers+curplayer;i++) t+=getlives(i); return t; }
void game(void) { int16_t t,c,i; bool flashplayer=false; if (gauntlet) { cgtime=gtime*1193181l; timeout=false; } initlives(); gamedat[0].level=startlev; if (nplayers==2) gamedat[1].level=startlev; alldead=false; ddap->gclear(); curplayer=0; initlevel(); curplayer=1; initlevel(); zeroscores(); bonusvisible=true; if (nplayers==2) flashplayer=true; curplayer=0; while (getalllives()!=0 && !escape && !timeout) { while (!alldead && !escape && !timeout) { initmbspr(); if (playing) randv=playgetrand(); else randv=getlrt(); #ifdef INTDRF fprintf(info,"%lu\n",randv); frame=0; #endif recputrand(randv); if (levnotdrawn) { levnotdrawn=false; drawscreen(ddap); if (flashplayer) { flashplayer=false; strcpy(pldispbuf,"PLAYER "); if (curplayer==0) strcat(pldispbuf,"1"); else strcat(pldispbuf,"2"); cleartopline(); for (t=0;t<15;t++) for (c=1;c<=3;c++) { outtext(ddap, pldispbuf,108,0,c); writecurscore(ddap, c); newframe(); if (escape) return; } drawscores(ddap); for (i=0;i<diggers;i++) addscore(ddap, i,0); } } else initchars(); outtext(ddap, " ",108,0,3); initscores(ddap); drawlives(ddap); music(1); flushkeybuf(); for (i=0;i<diggers;i++) readdirect(i); while (!alldead && !gamedat[curplayer].levdone && !escape && !timeout) { penalty=0; dodigger(ddap); domonsters(ddap); dobags(ddap); if (penalty>8) incmont(penalty-8); testpause(); checklevdone(); } erasediggers(); musicoff(); t=20; while ((getnmovingbags()!=0 || t!=0) && !escape && !timeout) { if (t!=0) t--; penalty=0; dobags(ddap); dodigger(ddap); domonsters(ddap); if (penalty<8) t=0; } soundstop(); for (i=0;i<diggers;i++) killfire(i); erasebonus(ddap); cleanupbags(); savefield(); erasemonsters(); recputeol(); if (playing) playskipeol(); if (escape) recputeog(); if (gamedat[curplayer].levdone) soundlevdone(); if (countem()==0 || gamedat[curplayer].levdone) { #ifdef INTDRF fprintf(info,"%i\n",frame); #endif for (i=curplayer;i<diggers+curplayer;i++) if (getlives(i)>0 && !digalive(i)) declife(i); drawlives(ddap); gamedat[curplayer].level++; if (gamedat[curplayer].level>1000) gamedat[curplayer].level=1000; initlevel(); } else if (alldead) { #ifdef INTDRF fprintf(info,"%i\n",frame); #endif for (i=curplayer;i<curplayer+diggers;i++) if (getlives(i)>0) declife(i); drawlives(ddap); } if ((alldead && getalllives()==0 && !gauntlet && !escape) || timeout) endofgame(ddap); } alldead=false; if (nplayers==2 && getlives(1-curplayer)!=0) { curplayer=1-curplayer; flashplayer=levnotdrawn=true; } } #ifdef INTDRF fprintf(info,"-1\n%lu\n%i",getscore0(),gamedat[0].level); #endif }
void newgame() { char d; short i; running = 1; nbullets = cmax / 2; nbugs = 5; if(getlives()) lives = getlives(); else { int fl = senddiff(); if(fl == 1) lives = 15; else if(fl == 2) lives = 10; else if(fl == 3) lives = 8; } if(lives == 0) lives = 15; // lives = 5;//Kitni baar takraye then game over score = 0; level = 25; levels = 1; /*arrow.r and .c are positions of the gun on teh window rows and colmsms*/ arrow.r = rmax / 2; arrow.c = cmax - 3; arrow.w = 3;//width arrow.h = 7;//height arrow.str = " * \n" " ** \n" "*** \n" " \n" "*** \n" " ** \n" " * \n"; bullets = malloc(nbullets * sizeof(object)); for (i = 0; i < nbullets; i++) { newbullet(&bullets[i], 0, 0); } bugs = malloc(nbugs * sizeof(object)); for (i = 0; i < nbugs; i++) { newbug(&bugs[i]); } drawmessage("SEGFAULT SHOOTER", -3); drawmessage("Stop the SEGFAULTS from getting past you", -1); drawmessage("Arrow keys to move, space to shoot", 0); drawmessage("Q to exit", 1); drawmessage("Anything else to start", 2); d = getch(); if (d == 'q') { return; } /*Enables the keyboard arrow keys*/ pthread_t pth; pthread_create(&pth, NULL, input, "get keys"); game(); pthread_cancel(pth); clear(); /* This is printed on the window when game is over*/ drawmessage("Game Over", -1); char string[10] = {'\0'}; sprintf(string, "%d", score); drawmessage(string, 0); drawmessage("Return to continue", 2); while ((d = getch()) && d != '\n') if (d == 'q') return; clear(); highscore(); clear(); highscores(); while ((d = getch()) && d != '\n') if (d == 'q') return; }