void checkmusic(void) { int count,count2; int queued; float vec[3]; if (!soundenabled) return; if (!config.sound) return; if (!option.sound) return; if (!option.music) game.songnum=-1; if (game.songnum>8) game.songnum=0; #ifdef DEMO if (game.songnum>0 && game.songnum<8) game.songnum=0; #endif if (game.songnum!=game.currentsongnum) { if (game.currentsongnum!=-1) { alSourceStop(oggsource); alGetSourcei(oggsource,AL_BUFFERS_QUEUED,&queued); while (queued>0) { alSourceUnqueueBuffers(oggsource,1,(ALuint*)&count); queued--; } ov_clear(&oggstream[0]); } if (game.songnum!=-1) { vorbiscallbacks.read_func=vorbisread; vorbiscallbacks.seek_func=vorbisseek; vorbiscallbacks.close_func=vorbisclose; vorbiscallbacks.tell_func=vorbistell; oggmemoryfile[game.songnum].dataread=0; if (ov_open_callbacks(&oggmemoryfile[game.songnum],&oggstream[0],NULL,0,vorbiscallbacks)>=0) { vorbisinfo=ov_info(&oggstream[0],-1); if (vorbisinfo->channels==1) oggformat=AL_FORMAT_MONO16; else oggformat=AL_FORMAT_STEREO16; streamogg(oggbuffer[0]); streamogg(oggbuffer[1]); alSourceQueueBuffers(oggsource,2,oggbuffer); vec[0]=0.0f; vec[1]=0.0f; vec[2]=0.0f; alSource3f(oggsource,AL_POSITION,vec[0],vec[1],vec[2]); alSource3f(oggsource,AL_VELOCITY,0.0f,0.0f,0.0f); alSourcef(oggsource,AL_REFERENCE_DISTANCE,10.0f); alSourcef(oggsource,AL_GAIN,0.3f*option.musicvolume); alSourcei(oggsource,AL_SOURCE_RELATIVE,AL_TRUE); alSourcePlay(oggsource); updateogg(); alSourcePlay(oggsource); game.currentsongnum=game.songnum; } else game.currentsongnum=-1; } else { game.currentsongnum=game.songnum; } } if (game.currentsongnum!=-1) { alGetSourcei(oggsource,AL_SOURCE_STATE,&count); if (count!=AL_PLAYING) alSourcePlay(oggsource); } }
void singlelevelmenu(void) { int count; 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); count=320; createmenuitem(TXT_LEVEL" 1-1",64,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 1-2",64,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 1-3",64,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 1-4",64,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 1-5",64,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 1-6",64,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 1-7",64,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 2-1",64,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 2-2",64,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; count=320; createmenuitem(TXT_LEVEL" 2-3",192,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 2-4",192,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 2-5",192,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 2-6",192,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 2-7",192,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 3-1",192,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 3-2",192,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 3-3",192,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 3-4",192,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; count=320; createmenuitem(TXT_LEVEL" 3-5",320,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 3-6",320,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 3-7",320,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 4-1",320,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 4-2",320,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 4-3",320,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 4-4",320,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 4-5",320,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 4-6",320,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; count=320; createmenuitem(TXT_LEVEL" 4-7",448,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 5-1",448,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 5-2",448,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 5-3",448,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 5-4",448,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 5-5",448,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; createmenuitem(TXT_LEVEL" 5-6",448,count,12,1.0f,1.0f,1.0f,1.0f); count+=12; 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(620); drawtext(TXT_SINGLE_LEVEL,(320|TEXT_CENTER),304,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(); for (count=1;count<=34;count++) if (menuitem[count].active) { game.songnum=-1; checkmusic(); game.editing=0; game.levelnum=0; loadstorylevel(count); gameloop(); savereplay(count+100); joymenunum=count; } } resetmenuitems(); }
void custommenu(void) { int count; 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=352; createmenuitem(TXT_PLAY_CAMPAIGN,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_C); count+=16; createmenuitem(TXT_LOAD_LEVEL,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_L); count+=16; createmenuitem(TXT_LEVEL_EDITOR,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_E); count+=16; createmenuitem(TXT_CAMPAIGN_EDITOR,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_A); count+=16; 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(620); drawtext(TXT_CUSTOM_LEVELS,(320|TEXT_CENTER),304,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) { game.songnum=-1; checkmusic(); game.editing=0; playcampaignmenu(); } if (menuitem[2].active) { game.songnum=-1; checkmusic(); game.editing=0; loadlevelmenu(); } if (menuitem[3].active) { game.songnum=-1; checkmusic(); game.editing=1; game.levelnum=0; createlevel(); gameloop(); game.editing=0; } if (menuitem[4].active) { newmappackmenu(); } } resetmenuitems(); }
void playerdifficultymenu(void) { int count; resetmenuitems(); joymenunum=1; while (!menuitem[0].active && !menuitem[1].active && !menuitem[2].active && !menuitem[3].active && !menuitem[4].active && !windowinfo.shutdown) { glClearColor(0.0f,0.0f,0.0f,0.0f); glClear(GL_COLOR_BUFFER_BIT); numofmenuitems=0; createmenuitem(TXT_CANCEL,0,0,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_ESC); count=352; createmenuitem(TXT_EASY,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_E); count+=16; createmenuitem(TXT_NORMAL,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_N); count+=16; createmenuitem(TXT_HARD,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_H); count+=16; if (player[playernum].unlock[1]) { createmenuitem(TXT_LUDICROUS,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_L); count+=16; if (player[playernum].unlock[2]) { createmenuitem(TXT_MINI_GISH,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_M); count+=16; } } 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(620); if (!player[playernum].gamepassed) drawtext(player[playernum].name,(320|TEXT_CENTER),304,16,1.0f,1.0f,1.0f,1.0f); else drawtext(player[playernum].name,(320|TEXT_CENTER),304,16,1.0f,1.0f,0.0f,1.0f); drawtext(TXT_SELECT_DIFFICULTY,48,336,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[0].active) game.difficulty=-1; if (menuitem[1].active) game.difficulty=0; if (menuitem[2].active) game.difficulty=1; if (menuitem[3].active) game.difficulty=2; if (menuitem[4].active) game.difficulty=3; if (menuitem[5].active) game.difficulty=4; } resetmenuitems(); }
void collectionmenu(void) { int count; 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); count=320; createmenuitem(TXT_LEVEL" 1",64,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 2",64,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 3",64,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 4",64,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 5",64,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 6",64,count,16,1.0f,1.0f,1.0f,1.0f); count+=16; createmenuitem(TXT_LEVEL" 7",64,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 8",64,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; count=320; createmenuitem(TXT_LEVEL" 9",240,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 10",240,count,16,1.0f,1.0f,1.0f,1.0f); count+=16; createmenuitem(TXT_LEVEL" 11",240,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 12",240,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 13",240,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 14",240,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 15",240,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 16",240,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; count=320; createmenuitem(TXT_LEVEL" 17",416,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 18",416,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 19",416,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 20",416,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 21",416,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 22",416,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_LEVEL" 23",416,count,16,1.0f,1.0f,1.0f,1.0f); #ifdef DEMO setmenuitem(MO_HIGHLIGHT,0); #endif count+=16; createmenuitem(TXT_HIGH_SCORE,416,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_H); count+=16; 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(620); drawtext(TXT_COLLECTION_MODE,(320|TEXT_CENTER),304,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(); for (count=1;count<24;count++) if (menuitem[count].active) { game.songnum=-1; checkmusic(); game.editing=0; game.levelnum=0; loadcollectionlevel(count); gameloop(); if (!game.playreplay) if (game.exit==4) highscoremenu(count); joymenunum=count; } if (menuitem[24].active) { game.exit=3; highscoremenu(1); } } resetmenuitems(); }
void playerstartmenu(void) { int count,count2,count3; if (playernum==-1) return; 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); count=352; if (player[playernum].levelnum>0) { createmenuitem(TXT_CONTINUE,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_C); count+=16; createmenuitem(TXT_COLLECTION_GAME,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_O); count+=16; createmenuitem(TXT_NEW_GAME,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_N); count+=16; createmenuitem(TXT_PRACTICE,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_P); count+=16; createmenuitem(TXT_REPLAY,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_R); count+=16; #ifndef DEMO /* if (player[playernum].unlock[0]) { createmenuitem(TXT_SINGLE_LEVEL,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_S); count+=16; } else */ createmenuitemempty(); #endif #ifndef DEMO createmenuitem(TXT_CUSTOM_LEVELS,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_U); count+=16; #endif } else { createmenuitem(TXT_NEW_GAME,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_N); count+=16; createmenuitem(TXT_COLLECTION_GAME,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_O); count+=16; createmenuitemempty(); createmenuitem(TXT_PRACTICE,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_P); count+=16; createmenuitem(TXT_REPLAY,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_R); count+=16; /* if (player[playernum].unlock[0]) { createmenuitem(TXT_SINGLE_LEVEL,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_S); count+=16; } else */ createmenuitemempty(); #ifndef DEMO createmenuitem(TXT_CUSTOM_LEVELS,48,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_U); count+=16; #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(620); count2=(player[playernum].levelnum-1)/7+1; count3=(player[playernum].levelnum-1)%7+1; if (count3==0) count3=1; if (!player[playernum].gamepassed) { drawtext(player[playernum].name,(320|TEXT_CENTER),304,16,1.0f,1.0f,1.0f,1.0f); if (player[playernum].levelnum>0) { drawtext(TXT_PLAYER_INFO,(320|TEXT_CENTER),320,12,1.0f,1.0f,1.0f,1.0f,count2,count3,player[playernum].numoflives,player[playernum].totalscore,player[playernum].highscore); if (player[playernum].difficulty==0) drawtext(TXT_EASY,(320|TEXT_CENTER),332,12,1.0f,1.0f,1.0f,1.0f); if (player[playernum].difficulty==1) drawtext(TXT_NORMAL,(320|TEXT_CENTER),332,12,1.0f,1.0f,1.0f,1.0f); if (player[playernum].difficulty==2) drawtext(TXT_HARD,(320|TEXT_CENTER),332,12,1.0f,1.0f,1.0f,1.0f); if (player[playernum].difficulty==3) drawtext(TXT_LUDICROUS,(320|TEXT_CENTER),332,12,1.0f,1.0f,1.0f,1.0f); if (player[playernum].difficulty==4) drawtext(TXT_MINI_GISH,(320|TEXT_CENTER),332,12,1.0f,1.0f,1.0f,1.0f); } } else { drawtext(player[playernum].name,(320|TEXT_CENTER),304,16,1.0f,1.0f,0.0f,1.0f); if (player[playernum].levelnum>0) { drawtext(TXT_PLAYER_INFO,(320|TEXT_CENTER),320,12,1.0f,1.0f,0.0f,1.0f,count2,count3,player[playernum].numoflives,player[playernum].totalscore,player[playernum].highscore); if (player[playernum].difficulty==0) drawtext(TXT_EASY,(320|TEXT_CENTER),332,12,1.0f,1.0f,0.0f,1.0f); if (player[playernum].difficulty==1) drawtext(TXT_NORMAL,(320|TEXT_CENTER),332,12,1.0f,1.0f,0.0f,1.0f); if (player[playernum].difficulty==2) drawtext(TXT_HARD,(320|TEXT_CENTER),332,12,1.0f,1.0f,0.0f,1.0f); if (player[playernum].difficulty==3) drawtext(TXT_LUDICROUS,(320|TEXT_CENTER),332,12,1.0f,1.0f,0.0f,1.0f); if (player[playernum].difficulty==4) drawtext(TXT_MINI_GISH,(320|TEXT_CENTER),332,12,1.0f,1.0f,0.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) { if (player[playernum].levelnum>0) { game.levelnum=player[playernum].levelnum; game.totalscore=player[playernum].totalscore; game.difficulty=player[playernum].difficulty; game.numoflives=player[playernum].numoflives; } else { playerdifficultymenu(); if (game.difficulty==-1) { game.difficulty=0; goto newgamebypass; } player[playernum].difficulty=game.difficulty; game.levelnum=1; game.totalscore=0; game.numoflives=5; if (player[playernum].difficulty==3) { game.numoflives=0; game.turbomode=1; } storyscreen(); } game.songnum=-1; checkmusic(); pregamemenu(); player[playernum].levelnum=game.levelnum; player[playernum].totalscore=game.totalscore; player[playernum].numoflives=game.numoflives; if (player[playernum].highscore<player[playernum].totalscore) player[playernum].highscore=player[playernum].totalscore; #ifdef DEMO if (player[playernum].levelnum==6) { player[playernum].levelnum=0; player[playernum].totalscore=0; player[playernum].numoflives=5; player[playernum].gamepassed=1; } #endif if (player[playernum].levelnum==35) { if (player[playernum].difficulty==1 || player[playernum].difficulty==2) player[playernum].unlock[0]=1; if (player[playernum].difficulty==2) player[playernum].unlock[1]=1; if (player[playernum].difficulty==3) player[playernum].unlock[2]=1; if (player[playernum].difficulty==4) player[playernum].unlock[3]=1; player[playernum].levelnum=0; player[playernum].totalscore=0; player[playernum].numoflives=5; player[playernum].gamepassed=1; } //game.difficulty=0; //menuitem[0].active=1; newgamebypass:; } if (menuitem[2].active) { collectionmenu(); //menuitem[0].active=1; } if (menuitem[3].active) { playerdifficultymenu(); if (game.difficulty==-1) { game.difficulty=0; goto newgamebypass2; } player[playernum].difficulty=game.difficulty; game.levelnum=1; game.totalscore=0; game.numoflives=5; if (player[playernum].difficulty==3) { game.numoflives=0; game.turbomode=1; } storyscreen(); game.songnum=-1; checkmusic(); pregamemenu(); player[playernum].levelnum=game.levelnum; player[playernum].totalscore=game.totalscore; player[playernum].numoflives=game.numoflives; if (player[playernum].highscore<player[playernum].totalscore) player[playernum].highscore=player[playernum].totalscore; #ifdef DEMO if (player[playernum].levelnum==6) { player[playernum].levelnum=0; player[playernum].totalscore=0; player[playernum].numoflives=5; player[playernum].gamepassed=1; } #endif if (player[playernum].levelnum==35) { if (player[playernum].difficulty==1 || player[playernum].difficulty==2) player[playernum].unlock[0]=1; if (player[playernum].difficulty==2) player[playernum].unlock[1]=1; if (player[playernum].difficulty==3) player[playernum].unlock[2]=1; if (player[playernum].difficulty==4) player[playernum].unlock[3]=1; player[playernum].levelnum=0; player[playernum].totalscore=0; player[playernum].numoflives=5; player[playernum].gamepassed=1; } //game.difficulty=0; //menuitem[0].active=1; newgamebypass2:; } if (menuitem[4].active) { game.songnum=-1; checkmusic(); game.editing=0; game.levelnum=0; loadlevel("playroom.lvl"); gameloop(); } if (menuitem[5].active) { game.songnum=-1; checkmusic(); replaymenu(); } if (menuitem[6].active) { singlelevelmenu(); } if (menuitem[7].active) { custommenu(); } } resetmenuitems(); }
void playermenu(void) { int count,count2,count3; int deleteplayer; resetmenuitems(); joymenunum=1; playernum=-1; deleteplayer=0; 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); if (playernum==-1) { count=128; createmenuitem("",64,count,32,0.25f,0.25f,0.25f,1.0f); setmenuitem(MO_SET,&playernum,0); setmenuitem(MO_HOTKEY,SCAN_1); count+=40; createmenuitem("",64,count,32,0.25f,0.25f,0.25f,1.0f); setmenuitem(MO_SET,&playernum,1); setmenuitem(MO_HOTKEY,SCAN_2); count+=40; createmenuitem("",64,count,32,0.25f,0.25f,0.25f,1.0f); setmenuitem(MO_SET,&playernum,2); setmenuitem(MO_HOTKEY,SCAN_3); count+=40; createmenuitem("",64,count,32,0.25f,0.25f,0.25f,1.0f); setmenuitem(MO_SET,&playernum,3); setmenuitem(MO_HOTKEY,SCAN_4); count+=40; createmenuitem("",64,count,32,0.25f,0.25f,0.25f,1.0f); setmenuitem(MO_SET,&playernum,4); setmenuitem(MO_HOTKEY,SCAN_5); count+=40; createmenuitem("",64,count,32,0.25f,0.25f,0.25f,1.0f); setmenuitem(MO_SET,&playernum,5); setmenuitem(MO_HOTKEY,SCAN_6); count+=40; count+=16; createmenuitem(TXT_DELETE_PLAYER,64,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_TOGGLE,&deleteplayer); } else if (!deleteplayer) { count=128+playernum*40-16; createmenuitem(" ",96,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_STRINGINPUT,player[playernum].name); if (player[playernum].name[0]!=0) { createmenuitem(TXT_CREATE,432,count+16,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_HOTKEY,SCAN_C); } } checksystemmessages(); checkkeyboard(); checkmouse(); checkjoystick(); checkmenuitems(); updateogg(); checkmusic(); game.songnum=8; soundsimulation(view.position,view.orientation); if (playernum!=-1) { if (numofmenuitems>3) { if (player[playernum].name[0]!=0) menuitem[2].active=1; else menuitem[1].active=1; } } setuptextdisplay(); glColor4f(1.0f,1.0f,1.0f,1.0f); displaybackground(580); drawmenuitems(); for (count=0;count<6;count++) { if (count!=playernum || deleteplayer) { if (player[count].name[0]!=0) { count2=(player[count].levelnum-1)/7+1; count3=(player[count].levelnum-1)%7+1; if (count3==0) count3=1; if (!player[count].gamepassed) { drawtext("/i-/s",64,128+count*40,16,1.0f,1.0f,1.0f,1.0f,count+1,player[count].name); drawtext(TXT_PLAYER_INFO,64,128+count*40+16,12,1.0f,1.0f,1.0f,1.0f,count2,count3,player[count].numoflives,player[count].totalscore,player[count].highscore); } else { drawtext("/i-/s",64,128+count*40,16,1.0f,1.0f,0.0f,1.0f,count+1,player[count].name); drawtext(TXT_PLAYER_INFO,64,128+count*40+16,12,1.0f,1.0f,0.0f,1.0f,count2,count3,player[count].numoflives,player[count].totalscore,player[count].highscore); } if (count==playernum && deleteplayer) { drawtext("/i-/s",64,128+count*40,16,1.0f,0.0f,0.0f,1.0f,count+1,player[count].name); drawtext(TXT_PLAYER_INFO,64,128+count*40+16,12,1.0f,0.0f,0.0f,1.0f,count2,count3,player[count].numoflives,player[count].totalscore,player[count].highscore); } } else drawtext(TXT_NEW_PLAYER,64,128+count*40,16,1.0f,1.0f,1.0f,1.0f,count+1); } else drawtext("/i-",64,128+count*40,16,1.0f,1.0f,1.0f,1.0f,count+1); } if (playernum==-1) drawtext(TXT_CHOOSE_PLAYER,(320|TEXT_CENTER),64,16,1.0f,1.0f,1.0f,1.0f); else { if (!deleteplayer || player[playernum].name[0]==0) drawtext(TXT_ENTER_NAME,(320|TEXT_CENTER),64,16,1.0f,1.0f,1.0f,1.0f); else drawtext(TXT_DELETE_Y_N,(320|TEXT_CENTER),64,16,1.0f,1.0f,1.0f,1.0f,player[playernum].name); } drawmousecursor(768+font.cursornum,mouse.x,mouse.y,16,1.0f,1.0f,1.0f,1.0f); SDL_GL_SwapBuffers(); if (deleteplayer) if (playernum!=-1) { if (player[playernum].name[0]==0) deleteplayer=0; else { #ifdef GERMAN if (keyboard[SCAN_J]) #else if (keyboard[SCAN_Y]) #endif { memset(&player[playernum],0,sizeof(player[playernum])); playernum=-1; deleteplayer=0; resetmenuitems(); } if (keyboard[SCAN_N] || keyboard[SCAN_ESC]) { playernum=-1; deleteplayer=0; resetmenuitems(); } } } if (playernum!=-1) if (player[playernum].name[0]!=0) if (menuitem[2].active) { if (!deleteplayer) { playerstartmenu(); joymenunum=0;//playernum+1; playernum=-1; } /* else { //menuitem[2].active=0; //playernum=-1; } */ } } if (playernum!=-1) player[playernum].name[0]=0; 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(); }
void highscoremenu(int levelnum) { int count,count2; int replaysaved; float bright; replaysaved=0; count2=-1; if (game.exit==GAMEEXIT_WON) { count2=10; while (count2>0 && game.time>highscore[levelnum][count2-1].time) count2--; if (count2!=10) { for (count=10;count>=count2;count--) { highscore[levelnum][count+1].time=highscore[levelnum][count].time; memcpy(highscore[levelnum][count+1].name,highscore[levelnum][count].name,32); } highscore[levelnum][count2].time=game.time; memcpy(highscore[levelnum][count2].name,player[playernum].name,32); } } 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); if (game.exit==GAMEEXIT_WON) if (!replaysaved) createmenuitem(TXT_SAVEREPLAY,96,356,16,1.0f,1.0f,1.0f,1.0f); if (game.exit!=GAMEEXIT_WON) { count=320; createmenuitem(TXT_LEVEL" 1",64,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,1); count+=16; createmenuitem(TXT_LEVEL" 2",64,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,2); count+=16; createmenuitem(TXT_LEVEL" 3",64,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,3); count+=16; createmenuitem(TXT_LEVEL" 4",64,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,4); count+=16; createmenuitem(TXT_LEVEL" 5",64,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,5); count+=16; createmenuitem(TXT_LEVEL" 6",64,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,6); count+=16; createmenuitem(TXT_LEVEL" 7",64,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,7); count+=16; createmenuitem(TXT_LEVEL" 8",64,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,8); count+=16; count=320; createmenuitem(TXT_LEVEL" 9",240,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,9); count+=16; createmenuitem(TXT_LEVEL" 10",240,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,10); count+=16; createmenuitem(TXT_LEVEL" 11",240,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,11); count+=16; createmenuitem(TXT_LEVEL" 12",240,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,12); count+=16; createmenuitem(TXT_LEVEL" 13",240,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,13); count+=16; createmenuitem(TXT_LEVEL" 14",240,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,14); count+=16; createmenuitem(TXT_LEVEL" 15",240,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,15); count+=16; createmenuitem(TXT_LEVEL" 16",240,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,16); count+=16; count=320; createmenuitem(TXT_LEVEL" 17",416,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,17); count+=16; createmenuitem(TXT_LEVEL" 18",416,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,18); count+=16; createmenuitem(TXT_LEVEL" 19",416,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,19); count+=16; createmenuitem(TXT_LEVEL" 20",416,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,20); count+=16; createmenuitem(TXT_LEVEL" 21",416,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,21); count+=16; createmenuitem(TXT_LEVEL" 22",416,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,22); count+=16; createmenuitem(TXT_LEVEL" 23",416,count,16,1.0f,1.0f,1.0f,1.0f); setmenuitem(MO_SET,&levelnum,23); count+=16; } 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(580); drawtext(TXT_LEVEL_HIGHSCORE,(320|TEXT_CENTER),48,16,1.0f,1.0f,1.0f,1.0f,levelnum); drawtext(TXT_NAME,96+64,80,16,1.0f,1.0f,1.0f,1.0f); drawtext(TXT_TIME,96+320,80,16,1.0f,1.0f,1.0f,1.0f); for (count=0;count<10;count++) { if (count==count2 || count2==-1) bright=1.0f; else bright=0.5f; drawtext("/i.",96,112+count*16,16,bright,bright,bright,1.0f,count+1); drawtext(highscore[levelnum][count].name,96+64,112+count*16,16,bright,bright,bright,1.0f); if (((highscore[levelnum][count].time/50)%60)>=10) drawtext("/i:/i./i",96+320,112+count*16,16,bright,bright,bright,1.0f,(highscore[levelnum][count].time/3000),((highscore[levelnum][count].time/50)%60),((highscore[levelnum][count].time/5)%10)); else drawtext("/i:0/i./i",96+320,112+count*16,16,bright,bright,bright,1.0f,(highscore[levelnum][count].time/3000),((highscore[levelnum][count].time/50)%60),((highscore[levelnum][count].time/5)%10)); } if (game.exit==GAMEEXIT_WON) { drawtext(player[playernum].name,96+64,292,16,1.0f,1.0f,1.0f,1.0f); if (((game.time/50)%60)>=10) drawtext("/i:/i./i",96+320,292,16,1.0f,1.0f,1.0f,1.0f,(game.time/3000),((game.time/50)%60),((game.time/5)%10)); else drawtext("/i:0/i./i",96+320,292,16,1.0f,1.0f,1.0f,1.0f,(game.time/3000),((game.time/50)%60),((game.time/5)%10)); } if (game.exit==GAMEEXIT_WON) if (replaysaved) createmenuitem(TXT_REPLAYSAVED,96,356,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 (game.exit==GAMEEXIT_WON) if (menuitem[1].active) { savereplay(levelnum); replaysaved=1; menuitem[1].active=0; } } resetmenuitems(); }
void objectcycle(void) { int count,count2,count3,count4; int x,y; float vec[3],vec2[3]; float veclength,bondlength; float angle,spin; float intersectpoint[3]; float normal[3]; float scale,scale2; for (count=0;count<numofropes;count++) { updateogg(); if (rope[count].type>=5 && rope[count].type<9) { bond[rope[count].bondnum].length=bond[rope[count].bondnum].maxlength+(rope[count].range-cos(rope[count].angle)*rope[count].range); if (rope[count].cyclelength==0.0f) { if (rope[count].link==-1 || object[rope[count].link].idata[0]==1) { rope[count].angle+=2.0f*pi/(50.0f*rope[count].cycle); if (rope[count].angle>2.0f*pi) rope[count].angle-=2.0f*pi; } } else { if (rope[count].link==-1) { if (rope[count].cyclecount<rope[count].cyclelength*2.0f*pi) { rope[count].angle+=2.0f*pi/(50.0f*rope[count].cycle); if (rope[count].angle>2.0f*pi) rope[count].angle-=2.0f*pi; rope[count].cyclecount+=2.0f*pi/(50.0f*rope[count].cycle); } } else { count2=0; if (object[rope[count].link].idata[0]==1 && rope[count].cyclecount==0.0f) count2=1; if (rope[count].cyclecount>0.0f && rope[count].cyclecount<rope[count].cyclelength*2.0f*pi) count2=1; if (rope[count].cyclecount>rope[count].cyclelength*2.0f*pi+2.0f*pi/(50.0f*rope[count].cycle)) count2=1; if (object[rope[count].link].idata[0]==0 && rope[count].cyclecount>0.0f) count2=1; if (count2==1) { rope[count].angle+=2.0f*pi/(50.0f*rope[count].cycle); if (rope[count].angle>2.0f*pi) rope[count].angle-=2.0f*pi; rope[count].cyclecount+=2.0f*pi/(50.0f*rope[count].cycle); if (rope[count].cyclecount>=rope[count].cyclelength*4.0f*pi) rope[count].cyclecount=0.0f; } } } } } for (count=0;count<numofobjects;count++) { updateogg(); if (object[count].damagedelay>0) object[count].damagedelay--; if (object[count].numofparticles!=0) { zerovector(object[count].velocity); for (count2=0;count2<object[count].numofparticles;count2++) addvectors(object[count].velocity,object[count].velocity,particle[object[count].particle[count2]].velocity); scalevector(object[count].velocity,object[count].velocity,1.0f/(float)object[count].numofparticles); zerovector(object[count].position); for (count2=0;count2<object[count].numofparticles;count2++) addvectors(object[count].position,object[count].position,particle[object[count].particle[count2]].position); scalevector(object[count].position,object[count].position,1.0f/(float)object[count].numofparticles); } objectsound(count); if (object[count].link!=-1) { if (object[count].lighttype==1 || object[count].lighttype==3) { if (object[object[count].link].idata[0]) object[count].lighton=0; else object[count].lighton=1; } if (object[count].lighttype==2) { if (object[object[count].link].idata[0]) object[count].lighton=1; else object[count].lighton=0; } } if (object[count].lighttype==3) { object[count].lightintensity+=((rand()&255)/255.0f-0.5f)*0.2f*object[count].lightintensitymax; if (object[count].lightintensity<object[count].lightintensitymax*0.5f) object[count].lightintensity=object[count].lightintensitymax*0.5f; if (object[count].lightintensity>object[count].lightintensitymax*1.5f) object[count].lightintensity=object[count].lightintensitymax*1.5f; } if (object[count].type==9) if (object[count].idata[0]==0 || object[count].idata[1]==0) { vec[1]=particle[object[count].particle[6]].position[1]-particle[object[count].particle[4]].position[1]; vec[1]*=0.08f; vec[1]-=particle[object[count].particle[4]].velocity[1]; particle[object[count].particle[4]].velocity[1]+=vec[1]; vec[1]=particle[object[count].particle[6]].position[1]-particle[object[count].particle[5]].position[1]; vec[1]*=0.08f; vec[1]-=particle[object[count].particle[5]].velocity[1]; particle[object[count].particle[5]].velocity[1]+=vec[1]; if (particle[object[count].particle[4]].position[1]>particle[object[count].particle[6]].position[1]-0.1f) if (particle[object[count].particle[5]].position[1]>particle[object[count].particle[6]].position[1]-0.1f) { if (object[count].idata[0]==1) playsound(14,object[count].position,NULL,0.2f,0,1.0f,-1,0); object[count].idata[0]=0; } if (particle[object[count].particle[4]].position[1]<particle[object[count].particle[6]].position[1]-0.2f) if (particle[object[count].particle[5]].position[1]<particle[object[count].particle[6]].position[1]-0.2f) { if (object[count].idata[0]==0) playsound(14,object[count].position,NULL,0.2f,0,1.0f,-1,0); object[count].idata[0]=1; } if (object[count].link!=-1) if (object[object[count].link].idata[0]==1) object[count].idata[0]=1; } if (object[count].type==9) if (object[count].idata[0]==1 && object[count].idata[1]==1) { vec[1]=particle[object[count].particle[6]].position[1]-0.375f-particle[object[count].particle[4]].position[1]; vec[1]*=0.08f; vec[1]-=particle[object[count].particle[4]].velocity[1]; particle[object[count].particle[4]].velocity[1]+=vec[1]; vec[1]=particle[object[count].particle[6]].position[1]-0.375f-particle[object[count].particle[5]].position[1]; vec[1]*=0.08f; vec[1]-=particle[object[count].particle[5]].velocity[1]; particle[object[count].particle[5]].velocity[1]+=vec[1]; } if (object[count].type==16) if (object[count].idata[0]==0 || object[count].idata[1]==0) { object[count].idata[0]=0; if (fabs(object[0].position[0]-object[count].position[0])<object[count].size[0]*0.5f) if (fabs(object[0].position[1]-object[count].position[1])<object[count].size[1]*0.5f) { object[count].idata[0]=1; if (object[count].idata[1]==2) { if ((rand()&3)==0) playsound(8,object[count].position,NULL,1.0f,0,1.0f,-1,0); else playsound(9,object[count].position,NULL,1.0f,0,1.0f,-1,0); game.bonus[8]++; } } if (level.gametype==11) if (fabs(object[1].position[0]-object[count].position[0])<object[count].size[0]*0.5f) if (fabs(object[1].position[1]-object[count].position[1])<object[count].size[1]*0.5f) { object[count].idata[0]=1; if (object[count].idata[1]==2) { if ((rand()&3)==0) playsound(8,object[count].position,NULL,1.0f,0,1.0f,-1,0); else playsound(9,object[count].position,NULL,1.0f,0,1.0f,-1,0); game.bonus[8]++; } } } if (object[count].type==15) { if (object[count].link==-1 || object[object[count].link].idata[0]==1) if ((game.framenum&255)==128) { createwheel(object[count].position,object[count].size[0],object[count].size[1],object[count].mass,0.8f,0); object[numofobjects-1].texturenum=object[count].texturenum; object[numofobjects-1].timetolive=512; object[numofobjects-1].link=-1; for (count2=0;count2<object[numofobjects-1].numofparticles;count2++) { particle[object[numofobjects-1].particle[count2]].velocity[0]=object[count].lightcolor[0]/PHYSICSCYCLE; particle[object[numofobjects-1].particle[count2]].velocity[1]=object[count].lightcolor[1]/PHYSICSCYCLE; } } } if (object[count].type==10) { if (object[count].rotate==0 || object[count].rotate==2) count3=1; else count3=0; for (count2=1;count2<=2;count2++) { vec[count3]=particle[object[count].particle[4]].position[count3]-particle[object[count].particle[count2]].position[count3]; if (vec[count3]<0.0f) vec[count3]+=0.25f; else vec[count3]-=0.25f; if (vec[count3]<0.0f) { vec[2]=-0.04f; if (vec[2]<vec[count3]) vec[2]=vec[count3]; } else { vec[2]=0.04f; if (vec[2]>vec[count3]) vec[2]=vec[count3]; } vec[2]-=particle[object[count].particle[count2]].velocity[count3]; particle[object[count].particle[count2]].velocity[count3]+=vec[2]; if (particle[object[count].particle[count2]].position[count3]>particle[object[count].particle[4]].position[count3]+0.25f) particle[object[count].particle[count2]].position[count3]=particle[object[count].particle[4]].position[count3]+0.25f; if (particle[object[count].particle[count2]].position[count3]<particle[object[count].particle[4]].position[count3]-0.25f) particle[object[count].particle[count2]].position[count3]=particle[object[count].particle[4]].position[count3]-0.25f; } vec[0]=particle[object[count].particle[4]].position[count3]-particle[object[count].particle[1]].position[count3]; if (object[count].rotate==3) vec[0]=-vec[0]; if (vec[0]<-0.2f) { if (object[count].idata[0]==1) playsound(14,object[count].position,NULL,0.2f,0,1.0f,-1,0); object[count].idata[0]=0; } if (vec[0]>0.2f) { if (object[count].idata[0]==0) playsound(14,object[count].position,NULL,0.2f,0,1.0f,-1,0); object[count].idata[0]=1; } if (object[count].link!=-1) if (object[object[count].link].idata[0]==1) object[count].idata[0]=1; } if (object[count].type==1) { if (count!=0) if (level.gametype==0 && game.levelnum==34) objectai(count); for (count2=0;count2<16;count2++) { x=particle[object[count].particle[count2]].position[0]; y=particle[object[count].particle[count2]].position[1]; if (x>0 && x<254) if (y>0 && y<254) { if (block[level.foregrid[y][x]].density!=0.0f) if ((rand()&255)==0) { createparticle(5,object[count].position,object[count].velocity,0.125f*0.25f,-1,100+(rand()&63)); particle[numofparticles-1].rendersize=0.125+(float)(rand()&127)/1000.0f; particle[numofparticles-1].texturenum=366; } if (block[level.foregrid[y][x]].foredamage!=0) object[count].hitpoints-=block[level.foregrid[y][x]].foredamage; if ((level.grid[y][x]>=248 && level.grid[y][x]<=255 && level.gridmod[y][x]==0) || (level.grid[y][x]>=240 && level.grid[y][x]<=247 && level.gridmod[y][x]==2)) { vec[0]=(float)x+0.5f; vec[1]=(float)y+0.5f; vec[2]=0.0f; subtractvectors(vec2,vec,particle[object[count].particle[count2]].position); if (vectorlength(vec2)<0.45f) { scale=1.0f; if (level.grid[y][x]==251 || (level.grid[y][x]==251-8 && level.gridmod[y][x]==2)) { if (game.numoflives<99 && game.difficulty!=3) { game.numoflives++; createsprite(0,vec); sprintf(sprite[numofsprites-1].text,"1UP"); sprite[numofsprites-1].size=14; } else { game.score[0]+=1000; createsprite(1000,vec); } } if (level.grid[y][x]==252 || (level.grid[y][x]==252-8 && level.gridmod[y][x]==2)) { if (object[count].hitpoints<900) object[count].hitpoints+=100; else object[count].hitpoints=1000; } if (level.grid[y][x]==253 || (level.grid[y][x]==253-8 && level.gridmod[y][x]==2)) { if (level.gametype!=15) { game.score[0]+=50; createsprite(50,vec); } else game.score[count]++; } if (level.grid[y][x]==254 || (level.grid[y][x]==254-8 && level.gridmod[y][x]==2)) { game.score[0]+=100; createsprite(100,vec); if (game.oldschool==0) scale=0.9f; } if (level.grid[y][x]==255 || (level.grid[y][x]==255-8 && level.gridmod[y][x]==2)) { game.score[0]+=1000; createsprite(1000,vec); if (game.oldschool==0) scale=0.8f; } if (level.grid[y][x]==252 || (level.grid[y][x]==252-8 && level.gridmod[y][x]==2)) playsound(20,vec,NULL,0.7f,0,scale,-1,0); else playsound(10,vec,NULL,0.4f,0,scale,-1,0); level.gridmod[y][x]=1; if (level.grid[y][x]>=248 && level.grid[y][x]<=255) game.bonus[level.grid[y][x]-248]++; if (level.grid[y][x]>=240 && level.grid[y][x]<=247) game.bonus[level.grid[y][x]-240]++; } } } } count4=0; for (count2=0;count2<16;count2++) for (count3=0;count3<16;count3++) if (abs(count2-count3)>6) { subtractvectors(vec,particle[object[count].particle[count3]].position,particle[object[count].particle[count2]].position); veclength=vectorlength(vec); if (veclength<0.15f) count4++; //if (veclength<0.15f) // object[count].hitpoints-=(0.2f-veclength)*500.0f; } if (count4>=2) object[count].hitpoints-=(count4-1)*50; if (object[count].numoforientations==0) copyvector(object[count].orientation[1],yaxis); else normalizevector(object[count].orientation[1],object[count].orientation[1]); crossproduct(object[count].orientation[0],zaxis,object[count].orientation[1]); normalizevector(object[count].orientation[0],object[count].orientation[0]); if (dotproduct(object[count].velocity,object[count].orientation[0])<-0.02f) object[count].direction=0; if (dotproduct(object[count].velocity,object[count].orientation[0])>0.02f) object[count].direction=1; angle=atan2(object[count].orientation[0][1],object[count].orientation[0][0]); spin=cos(angle)*fabs(cos(angle))*object[count].axis[0]+sin(angle)*fabs(sin(angle))*object[count].axis[1]; if (spin<-1.0f) spin=-1.0f; if (spin>1.0f) spin=1.0f; if (angle<object[count].angle-pi) angle+=2.0f*pi; if (angle>object[count].angle+pi) angle-=2.0f*pi; /* scale=(angle-object[count].angle); if (scale<-0.1f) scale=-0.1f; if (scale>0.1f) scale=0.1f; object[count].angle+=scale; */ object[count].angle+=(angle-object[count].angle)*0.05f; if (object[count].angle<0.0f) object[count].angle+=2.0f*pi; if (object[count].angle>2.0f*pi) object[count].angle-=2.0f*pi; for (count2=0;count2<16;count2++) { subtractvectors(vec,particle[object[count].particle[count2]].position,object[count].position); crossproduct(vec2,zaxis,vec); normalizevector(vec2,vec2); if (object[count].numoforientations!=0) { scaleaddvectors(particle[object[count].particle[count2]].velocity,particle[object[count].particle[count2]].velocity,vec2,spin*0.004f); } //if (object[count].numoforientations==0) { scaleaddvectors(particle[object[count].particle[count2]].velocity,particle[object[count].particle[count2]].velocity,xaxis,object[count].axis[0]*0.001f); if (object[count].axis[1]<0.0f) scaleaddvectors(particle[object[count].particle[count2]].velocity,particle[object[count].particle[count2]].velocity,yaxis,object[count].axis[1]*0.001f); else scaleaddvectors(particle[object[count].particle[count2]].velocity,particle[object[count].particle[count2]].velocity,yaxis,object[count].axis[1]*0.0005f); } } if ((object[count].button&4)==4) object[count].friction=0.01f; else object[count].friction=1.2f; if ((object[count].button&2)==2 || (object[count].button&8)==8) { for (count2=0;count2<numofbonds;count2++) if (bond[count2].objectnum==count && bond[count2].type==2) { bond[count2].cycles=0; //bond[count2].elasticity=0.02f; } } else { for (count2=0;count2<numofbonds;count2++) if (bond[count2].objectnum==count && bond[count2].type==2) { bond[count2].cycles=31; /* if ((object[count].button&4)==4) bond[count2].elasticity=0.005f; else bond[count2].elasticity=0.02f; */ } } if ((object[count].button&8)==8) { for (count2=0;count2<object[count].numofparticles;count2++) { particle[object[count].particle[count2]].gravity=10.0f/(PHYSICSCYCLE*PHYSICSCYCLE); particle[object[count].particle[count2]].mass=0.5f; } } else { for (count2=0;count2<object[count].numofparticles;count2++) { particle[object[count].particle[count2]].gravity=4.0f/(PHYSICSCYCLE*PHYSICSCYCLE); particle[object[count].particle[count2]].mass=0.25f; } } } if (object[count].type==20) { subtractvectors(object[count].orientation[1],particle[object[count].particle[0]].position,particle[object[count].particle[3]].position); normalizevector(object[count].orientation[1],object[count].orientation[1]); object[count].orientation[0][0]=object[count].orientation[1][1]; object[count].orientation[0][1]=-object[count].orientation[1][0]; object[count].orientation[0][2]=0.0f; object[count].data[0]+=object[count].axis[0]*0.05f; if (object[count].data[0]<0.0f) object[count].data[0]+=0.02f; if (object[count].data[0]>0.0f) object[count].data[0]-=0.02f; if (object[count].data[0]<-0.5f) object[count].data[0]=-0.5f; if (object[count].data[0]>0.5f) object[count].data[0]=0.5f; object[count].data[1]+=object[count].axis[1]*0.008f; if ((object[count].button&2)==2) object[count].data[1]=0.0f; if (object[count].data[1]<0.0f) object[count].data[1]+=0.004f; if (object[count].data[1]>0.0f) object[count].data[1]-=0.004f; if (object[count].data[1]<-0.3f) object[count].data[1]=-0.3f; if (object[count].data[1]>0.3f) object[count].data[1]=0.3f; for (count2=0;count2<4;count2++) { copyvector(vec,particle[object[count].particle[count2]].velocity); if (count2==1 || count2==2) { //normal[0]=object[count].orientation[0][0]*cos(object[count].data[0])+object[count].orientation[0][1]*sin(object[count].data[0]); //normal[1]=object[count].orientation[1][1]*cos(object[count].data[0])-object[count].orientation[1][0]*sin(object[count].data[0]); scalevector(normal,object[count].orientation[0],cos(object[count].data[0])); scaleaddvectors(normal,normal,object[count].orientation[1],-sin(object[count].data[0])); calculatefriction(vec,vec2,normal,0.8f); subtractvectors(particle[object[count].particle[count2]].velocity,particle[object[count].particle[count2]].velocity,vec2); } else { copyvector(normal,object[count].orientation[0]); scaleaddvectors(vec,vec,normal,-object[count].data[1]); vec[2]=1.0f/PHYSICSCYCLE; calculatefriction(vec,vec2,zaxis,0.8f); vec2[2]=0.0f; subtractvectors(particle[object[count].particle[count2]].velocity,particle[object[count].particle[count2]].velocity,vec2); } //copyvector(particle[object[count].particle[count2]].velocity,vec); } for (count2=0;count2<4;count2++) { subtractvectors(vec,particle[object[count].particle[count2]].position,object[count].position); crossproduct(vec2,zaxis,vec); normalizevector(vec2,vec2); //scaleaddvectors(particle[object[count].particle[count2]].velocity,particle[object[count].particle[count2]].velocity,vec2,object[count].axis[0]*0.002f); //scaleaddvectors(particle[object[count].particle[count2]].velocity,particle[object[count].particle[count2]].velocity,object[count].orientation[0],object[count].axis[1]*0.003f); } } if (object[count].type==4) { for (count2=0;count2<4;count2++) { x=particle[object[count].particle[count2]].position[0]; y=particle[object[count].particle[count2]].position[1]; if (x>0 && x<254) if (y>0 && y<254) { if (block[level.foregrid[y][x]].foredamage!=0) object[count].hitpoints-=block[level.foregrid[y][x]].foredamage*4; } } if (object[count].hitpoints<0) if (object[count].timetolive>45) object[count].timetolive=45; subtractvectors(object[count].orientation[1],particle[object[count].particle[0]].position,particle[object[count].particle[3]].position); normalizevector(object[count].orientation[1],object[count].orientation[1]); object[count].orientation[0][0]=object[count].orientation[1][1]; object[count].orientation[0][1]=-object[count].orientation[1][0]; object[count].orientation[0][2]=0.0f; objectai(count); if (object[0].position[0]<object[count].position[0]) object[count].direction=0; else object[count].direction=1; if (object[count].velocity[0]<-0.01f) object[count].direction=0; if (object[count].velocity[0]>0.01f) object[count].direction=1; if (object[count].link!=-1) object[object[count].link].direction=object[count].direction; if (dotproduct(object[count].orientation[1],yaxis)>0.7f) if (object[count].numoforientations!=0) { if (object[count].beasttype>=0 && object[count].beasttype<=2) scale=2.0f; if (object[count].beasttype==8 || object[count].beasttype==11) scale=2.0f; if (object[count].beasttype==16) scale=2.0f; if (object[count].beasttype>=3 && object[count].beasttype<=6) scale=2.0f; if (object[count].beasttype==9 || object[count].beasttype==10) scale=2.0f; if (object[count].beasttype==7 || object[count].beasttype==13) scale=1.5f; if (object[count].beasttype==15) scale=2.5f; if (object[count].axis[0]==-1.0f) { for (count2=0;count2<4;count2++) if (particle[object[count].particle[count2]].velocity[0]>-3.0f/PHYSICSCYCLE) particle[object[count].particle[count2]].velocity[0]-=scale/(PHYSICSCYCLE*PHYSICSCYCLE); } if (object[count].axis[0]==1.0f) { for (count2=0;count2<4;count2++) if (particle[object[count].particle[count2]].velocity[0]<3.0f/PHYSICSCYCLE) particle[object[count].particle[count2]].velocity[0]+=scale/(PHYSICSCYCLE*PHYSICSCYCLE); } } if (object[count].beasttype==0 || object[count].beasttype==2 || object[count].beasttype==8 || object[count].beasttype==16) if (object[count].numoforientations!=0) if ((object[count].button&2)==2) for (count2=0;count2<4;count2++) { if (object[count].beasttype!=8) scaleaddvectors(particle[object[count].particle[count2]].velocity,particle[object[count].particle[count2]].velocity,yaxis,0.08f); else scaleaddvectors(particle[object[count].particle[count2]].velocity,particle[object[count].particle[count2]].velocity,yaxis,0.12f); } if (object[count].beasttype==15) if (object[count].numoforientations!=0) if ((object[count].button&2)==2) for (count2=0;count2<2;count2++) scaleaddvectors(particle[object[count].particle[count2]].velocity,particle[object[count].particle[count2]].velocity,yaxis,0.08f); if (object[count].numoforientations!=0) if (dotproduct(object[count].orientation[1],yaxis)<0.7f) { if (object[count].orientation[1][0]<0.0f) spin=1.0f; else spin=-1.0f; for (count2=0;count2<4;count2++) { subtractvectors(vec,particle[object[count].particle[count2]].position,object[count].position); crossproduct(vec2,zaxis,vec); normalizevector(vec2,vec2); scaleaddvectors(particle[object[count].particle[count2]].velocity,particle[object[count].particle[count2]].velocity,vec2,spin*0.003f); } } } } }