void endingmenu(void) { int count; resetmenuitems(); while (!menuitem[0].active && !windowinfo.shutdown) { glClearColor(0.0f,0.0f,0.0f,0.0f); glClear(GL_COLOR_BUFFER_BIT); numofmenuitems=0; createmenuitem("Next",(640|TEXT_END),0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_ESC); checksystemmessages(); checkkeyboard(); checkmouse(); checkjoystick(); checkmenuitems(); setuptextdisplay(); glColor4f(1.0f,1.0f,1.0f,1.0f); displaybackground(580); count=192; if (game.exit==GAMEEXIT_WON) { drawbackground(520,(320|TEXT_CENTER),48,256,128,640,480); drawtext(TXT_ENDING_LINE1,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE2,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE3,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE4,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE5,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE6,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; count+=14; drawtext(TXT_ENDING_LINE7,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE8,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE9,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE10,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE11,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_LINE12,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; } if (game.exit==GAMEXIT_WARPZONE) { drawbackground(519,(320|TEXT_CENTER),48,256,128,640,480); drawtext(TXT_ENDING_BAD_LINE1,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE2,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE3,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE4,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE5,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE6,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE7,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; count+=14; drawtext(TXT_ENDING_BAD_LINE8,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE9,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE10,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE11,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE12,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; drawtext(TXT_ENDING_BAD_LINE13,64,count,14,1.0f,1.0f,1.0f,1.0f); count+=14; } drawtext(TXT_TOTAL_POINTS":/i",64,400,16,1.0f,1.0f,1.0f,1.0f,game.totalscore); if (player[playernum].difficulty==1 || player[playernum].difficulty==2) drawtext(TXT_NEW_VS_MODE,64,416,16,1.0f,1.0f,1.0f,1.0f); if (player[playernum].difficulty==2) drawtext(TXT_NEW_VS_LEVEL,64,432,16,1.0f,1.0f,1.0f,1.0f); if (player[playernum].difficulty==3) drawtext(TXT_MINI_GISH_MODE,64,432,16,1.0f,1.0f,1.0f,1.0f); drawmenuitems(); drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f); SDL_GL_SwapBuffers(); } resetmenuitems(); while (!menuitem[0].active && !windowinfo.shutdown) { glClearColor(0.0f,0.0f,0.0f,0.0f); glClear(GL_COLOR_BUFFER_BIT); numofmenuitems=0; createmenuitem(TXT_BACK,0,0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_ESC); checksystemmessages(); checkkeyboard(); checkmouse(); checkjoystick(); checkmenuitems(); setuptextdisplay(); glColor4f(1.0f,1.0f,1.0f,1.0f); displaybackground(560); if (game.exit==GAMEXIT_WARPZONE) drawbackground(256+68,288,320,96,96,640,480); drawmenuitems(); drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f); SDL_GL_SwapBuffers(); } resetmenuitems(); }
void postgamemenu(void) { int count; int scoretemp; int scorecountdelay; int simtimer; int simcount; savereplay(game.levelnum+100); scoretemp=game.totalscore; scorecountdelay=0; simtimer=SDL_GetTicks(); resetmenuitems(); joymenunum=1; while (!menuitem[0].active && !menuitem[1].active && !windowinfo.shutdown) { glClearColor(0.0f,0.0f,0.0f,0.0f); glClear(GL_COLOR_BUFFER_BIT); numofmenuitems=0; createmenuitem(TXT_BACK,0,0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_ESC); if (game.levelnum!=34) { createmenuitem(TXT_NEXTLEVEL,(640|TEXT_END),0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_N); } else { createmenuitem(TXT_ENDING,(640|TEXT_END),0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_N); } checksystemmessages(); checkkeyboard(); checkmouse(); checkjoystick(); checkmenuitems(); soundsimulation(view.position,view.orientation); setuptextdisplay(); glColor4f(1.0f,1.0f,1.0f,1.0f); displaybackground(580); drawbackground(468,(320|TEXT_CENTER),48,384,64,640,480); drawbackground(469,400,160,128,128,640,480); if (!game.bosslevel) { count=128; drawtext(TXT_SMALL_AMBER" /i///i",64,count,16,1.0f,1.0f,1.0f,1.0f,game.bonus[5],game.numofbonus[5]); count+=16; drawtext(TXT_MEDIUM_AMBER" /i///i",64,count,16,1.0f,1.0f,1.0f,1.0f,game.bonus[6],game.numofbonus[6]); count+=16; drawtext(TXT_LARGE_AMBER" /i///i",64,count,16,1.0f,1.0f,1.0f,1.0f,game.bonus[7],game.numofbonus[7]); count+=16; drawtext(TXT_TARBALLS" /i///i",64,count,16,1.0f,1.0f,1.0f,1.0f,game.bonus[4],game.numofbonus[4]); count+=16; drawtext(TXT_EXTRA_LIVES" /i///i",64,count,16,1.0f,1.0f,1.0f,1.0f,game.bonus[3],game.numofbonus[3]); count+=16; drawtext(TXT_SECRETS" /i///i",64,count,16,1.0f,1.0f,1.0f,1.0f,game.bonus[8],game.numofbonus[8]); count+=16; drawtext(TXT_LIFE_BONUS":/i",64,352,16,1.0f,1.0f,1.0f,1.0f,(object[0].hitpoints/50)*10); drawtext(TXT_LEVEL_POINTS":/i",64,368,16,1.0f,1.0f,1.0f,1.0f,game.score[0]-(object[0].hitpoints/50)*10); } else { if (game.levelnum==34 && game.exit==GAMEEXIT_WON) drawtext(TXT_GF_RESCUING_BONUS,64,336,16,1.0f,1.0f,1.0f,1.0f); drawtext(TXT_LIFE_BONUS":/i",64,352,16,1.0f,1.0f,1.0f,1.0f,(object[0].hitpoints/50)*10); if (game.levelnum==34 && game.exit==GAMEEXIT_WON) drawtext(TXT_BOSS_POINTS":/i",64,368,16,1.0f,1.0f,1.0f,1.0f,game.score[0]-(object[0].hitpoints/50)*10-1); else drawtext(TXT_BOSS_POINTS":/i",64,368,16,1.0f,1.0f,1.0f,1.0f,game.score[0]-(object[0].hitpoints/50)*10); } drawtext(TXT_TOTAL_POINTS":/i",64,384,16,1.0f,1.0f,1.0f,1.0f,scoretemp); drawtext("+/i",64+19*16,384,16,1.0f,1.0f,1.0f,1.0f,game.score[0]-(scoretemp-game.totalscore)); drawmenuitems(); drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f); SDL_GL_SwapBuffers(); simcount=0; while (SDL_GetTicks()-simtimer>20 && simcount<5) { simcount++; count=SDL_GetTicks()-simtimer-20; simtimer=SDL_GetTicks()-count; scorecountdelay++; if (scorecountdelay>=25) if (scoretemp<game.totalscore+game.score[0]) { if (scoretemp<=game.totalscore+game.score[0]-10) scoretemp+=10; else scoretemp++; if ((scorecountdelay&1)==1) playsound(15,view.position,NULL,0.2f,0,1.0f,-1,0); } } } if (menuitem[0].active) { game.exit=GAMEEXIT_EXITGAME; } for (count=numofsounds-1;count>=0;count--) deletesound(count); resetmenuitems(); }
int main(int argc, char* argv[]) { bool finished; int ch; engine_t engine; /* Initialize */ rand_init(); /* must be called before engine_init () */ engine_init(&engine, score_function); /* must be called before using engine.curshape */ finished = shownext = FALSE; memset(shapecount, 0, NUMSHAPES * sizeof(int)); shapecount[engine.curshape]++; parse_options(argc,argv); /* must be called after initializing variables */ if (level < MINLEVEL) { choose_level(); } io_init(); drawbackground(); in_timeout(DELAY); /* Main loop */ do { /* draw shape */ showstatus(&engine); drawboard(engine.board); out_refresh(); /* Check if user pressed a key */ if ((ch = in_getch ()) != ERR) { switch (ch) { case 'j': case KEY_LEFT: engine_move(&engine,ACTION_LEFT); break; case 'k': case '\n': engine_move(&engine,ACTION_ROTATE); break; case 'l': case KEY_RIGHT: engine_move(&engine,ACTION_RIGHT); break; case ' ': case KEY_DOWN: engine_move(&engine,ACTION_DROP); break; /* show next piece */ case 's': shownext = TRUE; break; /* toggle dotted lines */ case 'd': dottedlines = !dottedlines; break; /* next level */ case 'a': case KEY_UP: if (level < MAXLEVEL) { level++; in_timeout(DELAY); } else out_beep(); break; /* quit */ case 'q': finished = TRUE; break; /* pause */ case 'p': out_setcolor(COLOR_WHITE,COLOR_BLACK); out_gotoxy((out_width() - 34) / 2,out_height() - 2); out_printf("Paused - Press any key to continue"); while ((ch = in_getch ()) == ERR) ; /* Wait for a key to be pressed */ in_flush(); /* Clear keyboard buffer */ out_gotoxy((out_width() - 34) / 2, out_height() - 2); out_printf(" "); break; /* unknown keypress */ default: out_beep(); } in_flush(); } else { switch (engine_evaluate(&engine)) { /* game over (board full) */ case -1: if ((level < MAXLEVEL) && ((engine.status.droppedlines / 10) > level)) level++; finished = TRUE; break; /* shape at bottom, next one released */ case 0: if ((level < MAXLEVEL) && ((engine.status.droppedlines / 10) > level)) { level++; in_timeout(DELAY); } shapecount[engine.curshape]++; break; /* shape moved down one line */ case 1: break; } } } while (!finished); /* Restore console settings and exit */ io_close(); /* Don't bother the player if he want's to quit */ if (ch != 'q') { showplayerstats(&engine); savescores(GETSCORE(engine.score)); } exit(EXIT_SUCCESS); }
void pregamemenu(void) { int count,count2; int simtimer; int simcount; int startdelay; game.exit=GAMEEXIT_NONE; startdelay=0; simtimer=SDL_GetTicks(); resetmenuitems(); joymenunum=1; while (!menuitem[0].active && !windowinfo.shutdown) { glClearColor(0.0f,0.0f,0.0f,0.0f); glClear(GL_COLOR_BUFFER_BIT); numofmenuitems=0; createmenuitem(TXT_BACK,0,0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_ESC); createmenuitem(TXT_START,(320|TEXT_CENTER),320,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_S); checksystemmessages(); checkkeyboard(); checkmouse(); checkjoystick(); checkmenuitems(); setuptextdisplay(); glColor4f(1.0f,1.0f,1.0f,1.0f); displaybackground(540); if (game.levelnum<35) { count=(game.levelnum-1)/7+1; count2=(game.levelnum-1)%7+1; if (count==1) drawbackground(521,(320|TEXT_CENTER),48,192,192,640,480); if (count==2) drawbackground(522,(320|TEXT_CENTER),48,192,192,640,480); if (count==3) drawbackground(523,(320|TEXT_CENTER),48,192,192,640,480); if (count==4) drawbackground(524,(320|TEXT_CENTER),48,192,192,640,480); if (count==5) drawbackground(525,(320|TEXT_CENTER),48,192,192,640,480); drawtext("/i-/i",(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f,count,count2); drawtext(TXT_LIVES" /i",(320|TEXT_CENTER),272,16,1.0f,1.0f,1.0f,1.0f,game.numoflives); drawtext(TXT_POINTS" /i",(320|TEXT_CENTER),288,16,1.0f,1.0f,1.0f,1.0f,game.totalscore); } if (game.levelnum==64) { drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480); drawtext(" -1",(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f); } if (game.levelnum==65) { drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480); drawtext(" -2",(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f); } if (game.levelnum==66) { drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480); drawtext(" -3",(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f); } if (game.levelnum==67) { drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480); drawtext(TXT_ISLE_OF_THE,(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f); drawtext(TXT_DEAD,(320|TEXT_CENTER),272,16,1.0f,1.0f,1.0f,1.0f); } if (game.levelnum==68) { drawbackground(526,(320|TEXT_CENTER),48,192,192,640,480); drawtext(TXT_SATANS_LAIR,(320|TEXT_CENTER),256,16,1.0f,1.0f,1.0f,1.0f); } drawmenuitems(); drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f); SDL_GL_SwapBuffers(); if (menuitem[1].active)// || startdelay>=150) { loadstorylevel(game.levelnum); gameloop(); if (game.exit==GAMEEXIT_EXITGAME || game.exit==GAMEEXIT_DIED) if (game.levelnum<64) { if (game.numoflives<99) game.numoflives--; if (game.numoflives<0) { if (player[playernum].highscore<game.totalscore) player[playernum].highscore=game.totalscore; game.totalscore=0; game.numoflives=5; if (game.difficulty==1) { count2=(game.levelnum-1)%7+1; if (count2!=7) { count=(game.levelnum-1)/7; game.levelnum=count*7+1; } } if (game.difficulty>=2) game.levelnum=0; gameovermenu(); goto changelevelbypass; } } if (game.levelnum==34) if (game.exit==GAMEEXIT_WON || game.exit==GAMEXIT_WARPZONE) { game.score[0]=10000; if (game.levelnum==34 && game.exit==GAMEEXIT_WON) game.score[0]+=1; game.score[0]+=(object[0].hitpoints/50)*10; postgamemenu(); game.totalscore+=game.score[0]; endingmenu(); menuitem[0].active=1; game.levelnum=35; goto changelevelbypass; } if (game.exit==GAMEEXIT_WON) { //if (!game.bosslevel) if (game.levelnum!=68 || game.dialog==0) { if (game.levelnum==6) game.score[0]=1000; if (game.levelnum==13) game.score[0]=2000; if (game.levelnum==20) game.score[0]=3000; if (game.levelnum==27) game.score[0]=4000; if (game.levelnum==33) game.score[0]=5000; if (game.levelnum==34) game.score[0]=10000; if (game.levelnum==68) game.score[0]=20000; //if (game.levelnum==34 && game.exit==won) // game.score[0]+=10; game.oldschool=0; game.score[0]+=(object[0].hitpoints/50)*10; postgamemenu(); game.totalscore+=game.score[0]; if (game.exit==GAMEEXIT_EXITGAME) { game.exit=GAMEEXIT_WON; menuitem[0].active=1; } } if (game.levelnum<35) game.levelnum++; } if (game.levelnum==64) { game.levelnum=4; if (game.over==3) game.levelnum=22; if (game.over==4) game.levelnum=15; if (game.over==5) game.levelnum=8; goto changelevelbypass; } if (game.levelnum==65) { game.levelnum=9; goto changelevelbypass; } if (game.levelnum==66) { game.levelnum=26; goto changelevelbypass; } if (game.levelnum==67) { if (game.exit==GAMEEXIT_EXITGAME || game.exit==GAMEEXIT_DIED) game.levelnum=19; else game.levelnum=68; goto changelevelbypass; } if (game.levelnum==68) { game.levelnum=19; goto changelevelbypass; } if (game.exit==GAMEXIT_WARPZONE) { game.totalscore+=game.score[0]; if (game.levelnum==3) game.levelnum=64; if (game.levelnum==4) game.levelnum=24; if (game.levelnum==8) game.levelnum=65; if (game.levelnum==18) game.levelnum=67; if (game.levelnum==25) game.levelnum=66; goto changelevelbypass; } changelevelbypass:; simtimer=SDL_GetTicks(); startdelay=0; joymenunum=1; } simcount=0; while (SDL_GetTicks()-simtimer>20 && simcount<5) { simcount++; count=SDL_GetTicks()-simtimer-20; simtimer=SDL_GetTicks()-count; //startdelay++; } if (game.exit==GAMEEXIT_EXITGAME) menuitem[0].active=1; } resetmenuitems(); }
void versusmodemenu(int versusnum) { int count; int unlocked; char filename[32]; unlocked=0; for (count=0;count<6;count++) if (player[count].unlock[1]) unlocked=1; resetmenuitems(); joymenunum=1; while (!menuitem[0].active && !windowinfo.shutdown) { glClearColor(0.0f,0.0f,0.0f,0.0f); glClear(GL_COLOR_BUFFER_BIT); numofmenuitems=0; createmenuitem(TXT_EXIT,0,0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_ESC); count=250; createmenuitem(TXT_LEVEL" 1",(320|TEXT_CENTER),count,20,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_1); count+=20; createmenuitem(TXT_LEVEL" 2",(320|TEXT_CENTER),count,20,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_2); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=20; createmenuitem(TXT_LEVEL" 3",(320|TEXT_CENTER),count,20,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_3); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=20; #ifndef DEMO if (unlocked) { createmenuitem(TXT_LEVEL" 4",(320|TEXT_CENTER),count,20,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_4); count+=20; } else createmenuitemempty(); #endif #ifndef DEMO count=360; if (versusnum==0 || versusnum==1) { createmenuitem(TXT_LEVEL" 5",(320|TEXT_CENTER),count,20,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_5); count+=20; createmenuitem(TXT_LEVEL" 6",(320|TEXT_CENTER),count,20,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_6); count+=20; } #endif checksystemmessages(); checkkeyboard(); checkmouse(); checkjoystick(); checkmenuitems(); updateogg(); checkmusic(); game.songnum=8; soundsimulation(view.position,view.orientation); setuptextdisplay(); glColor4f(1.0f,1.0f,1.0f,1.0f); displaybackground(540); drawbackground(530+versusnum,(320|TEXT_CENTER),48,192,192,640,480); drawtext("2 "TXT_PLAYER,(320|TEXT_CENTER),234,16,1.0f,1.0f,1.0f,1.0f); if (versusnum==0 || versusnum==1) drawtext("4 "TXT_PLAYER,(320|TEXT_CENTER),344,16,1.0f,1.0f,1.0f,1.0f); drawmenuitems(); drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f); SDL_GL_SwapBuffers(); if (versusnum==0) strcpy(filename,"bathhouse"); if (versusnum==1) strcpy(filename,"field"); if (versusnum==2) strcpy(filename,"amber"); if (versusnum==3) strcpy(filename,"fight"); if (versusnum==4) strcpy(filename,"dragster"); if (versusnum==5) strcpy(filename,"colvs"); if (versusnum==6) strcpy(filename,"racing"); if (menuitem[1].active) { game.songnum=-1; checkmusic(); game.levelnum=0; strcat(filename,".lvl"); loadlevel(filename); gameloop(); } if (menuitem[2].active) { game.songnum=-1; checkmusic(); game.levelnum=0; strcat(filename,"2.lvl"); loadlevel(filename); gameloop(); } if (menuitem[3].active) { game.songnum=-1; checkmusic(); game.levelnum=0; strcat(filename,"3.lvl"); loadlevel(filename); gameloop(); } if (menuitem[4].active) { game.songnum=-1; checkmusic(); game.levelnum=0; strcat(filename,"4.lvl"); loadlevel(filename); gameloop(); } if (menuitem[5].active) { game.songnum=-1; checkmusic(); if (versusnum==0) strcpy(filename,"4bath"); if (versusnum==1) strcpy(filename,"4field"); game.levelnum=0; strcat(filename,".lvl"); loadlevel(filename); gameloop(); } if (menuitem[6].active) { game.songnum=-1; checkmusic(); if (versusnum==0) strcpy(filename,"4bath"); if (versusnum==1) strcpy(filename,"4field"); game.levelnum=0; strcat(filename,"2.lvl"); loadlevel(filename); gameloop(); } } resetmenuitems(); }