// -*- C++ -*- //Chrisoft Bullet Lab Remix HGE //Menu Implementations //"Copyleft" Chrisoft 2013 hgeGUI *StartGUI,*DeathGUI,*CompleteGUI,*HighScoreGUI; hgeGUI *HSViewGUI,*HSDetailGUI,*PauseGUI,*BkTTitleGUI; hgeGUI *OptionsGUI,*PlayerProfGUI; char ds1[255],ds2[255],ds3[255],ds4[255]; char hs1[255],hs2[255],hs3[255],hs4[255],hs5[255],hs6[255]; char HSVstr[7][255]; char HSDetstr[10][255]; char opt[10][255]; bool toogleundl; int view,detv; int lastkeypressed; void HSViewGUI_Init(); void HighScoreGUI_Init(); void PauseGUI_Init(); void StartGUI_Init() { StartGUI=new hgeGUI(); StartGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Easy")); StartGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,"Normal")); StartGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,"Extreme")); StartGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,"Free Play Mode")); StartGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,"Back")); StartGUI->SetCursor(spr); StartGUI->SetNavMode(HGEGUI_UPDOWN); StartGUI->SetFocus(1); StartGUI->Enter(); } void StartGUI_FrameFnk() { float dt=hge->Timer_GetDelta(); int id=StartGUI->Update(dt); if (id) { switch (id) { case 1: playerpos.x=400,playerpos.y=400,playerrot=0; frameleft=TenSeconds; level=1,part=1;frms=0,averfps=0.0;restarts=0;bsscale=0.75; towcnt=bulcnt=0; mode=4; score=0; coll=semicoll=clrusg=0; memset(tower,0,sizeof(tower)); memset(bullet,0,sizeof(bullet)); Complete=false; Refliction=false; Level1Part1(); IfCallLevel=true; break; case 2: playerpos.x=400,playerpos.y=400,playerrot=0; frameleft=TenSeconds; level=1,part=1;frms=0,averfps=0.0;restarts=0;bsscale=1; towcnt=bulcnt=0; mode=1; score=0; coll=semicoll=clrusg=0; memset(tower,0,sizeof(tower)); memset(bullet,0,sizeof(bullet)); Complete=false; Refliction=false; Level1Part1(); IfCallLevel=true; break; case 3: playerpos.x=400,playerpos.y=400,playerrot=0; frameleft=ThirtySeconds; level=3,part=1;frms=0,averfps=0.0;restarts=0;bsscale=1.5; towcnt=4;bulcnt=0; memset(tower,0,sizeof(tower)); memset(bullet,0,sizeof(bullet)); mode=2; score=0; coll=semicoll=clrusg=0; IfShowTip=true; Complete=false; Refliction=false; Level3Part0(); IfCallLevel=true; break; case 4: playerpos.x=400,playerpos.y=400,playerrot=0; frameleft=TenSeconds; level=1,part=1;frms=0,averfps=0.0;bsscale=1; towcnt=bulcnt=0; score=0; coll=semicoll=clrusg=0; memset(tower,0,sizeof(tower)); memset(bullet,0,sizeof(bullet)); Complete=false; Refliction=false; Level1Part1(); IfCallLevel=true; mode=3; break; case 5: Current_Position=0; StartGUI->Leave(); gui->Enter(); } } } void DeathGUI_Init() { DeathGUI=new hgeGUI(); Current_Position=5; DisableAllTower=true;DisablePlayer=true; DeathGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,160,0.0f,"You Are Dead!")); sprintf(ds1,"You scored %lld at level %d",score,level); DeathGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,200,0.1f,ds1)); switch (mode) { case 1:sprintf(ds2,"Difficulty: Normal");break; case 2:sprintf(ds2,"Difficulty: Extreme");break; case 3:sprintf(ds2,"What Happened?! You died in Free Play Mode?!");break; case 4:sprintf(ds2,"Difficulty: Easy");break; } DeathGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,240,0.2f,ds2)); sprintf(ds3,"Average FPS: %.2f",averfps); DeathGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,280,0.3f,ds3)); DeathGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,320,0.3f,"")); DeathGUI->AddCtrl(new hgeGUIMenuItem(6,fnt,snd,400,360,0.4f,"Continue from beginning of level? Your score will be set to minus!")); DeathGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,400,0.5f,"Continue!")); DeathGUI->AddCtrl(new hgeGUIMenuItem(8,fnt,snd,400,440,0.6f,"No thanks...")); for (int i=1;i<=6;++i)DeathGUI->EnableCtrl(i,false); DeathGUI->SetCursor(spr); DeathGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED); DeathGUI->SetFocus(7); DeathGUI->Enter(); } void DeathGUI_FrameFnk() { float dt=hge->Timer_GetDelta(); int id=DeathGUI->Update(dt); if (id) { switch (id) { case 7: IfCallLevel=true; Current_Position=1; DeathGUI->Leave(); score=-abs(score); ++restarts; part=1; clockrot=deltarot=0; coll=towcnt=bulcnt=0; DisableAllTower=DisablePlayer=false; break; case 8:Current_Position=0;gui->Enter();DeathGUI->Leave();break; } } } void NewHighScoreGUI_Init() { Current_Position=7; memset(newname,0,sizeof(newname));newlen=0;tbframebrk=0;toogleundl=false; TipFont->SetColor(0xFFFFFFFF); } void nameins(char a) { if (newlen<=14) newname[newlen++]=a; } void namedel() { if (newlen>0)newname[--newlen]=0; } void NewHighScoreGUI_FrameFnk() { int key=hge->Input_GetKey(); if (key>=0x30&&key<=0x39)nameins('0'+key-0x30); if (key>=0x41&&key<=0x5A) nameins('a'+key-0x41); if (key==HGEK_SPACE)nameins('_'); if (key==HGEK_BACKSPACE)namedel(); if (key==HGEK_ENTER) { InsertHighScore(); switch (mode) { case 4:view=1;HSViewGUI_Init();break; case 1:view=2;HSViewGUI_Init();break; case 2:view=3;HSViewGUI_Init();break; case 3:view=4;HSViewGUI_Init();break; } } } void NewHighScoreGUI_Render() { if (LOWFPS)tbframebrk+=17;else ++tbframebrk; if (tbframebrk>=500)toogleundl=!toogleundl,tbframebrk=0; TipFont->printf(200,200,HGETEXT_LEFT,"Please Enter Your Honorable Name..."); if (!toogleundl) TipFont->printf(200,240,HGETEXT_LEFT,"%s",newname); else TipFont->printf(200,240,HGETEXT_LEFT,"%s_",newname); } void CompleteGUI_Init() { CompleteGUI=new hgeGUI(); Current_Position=6; DisableAllTower=true;DisablePlayer=true; CompleteGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,120,0.0f,"YOU DID THAT!")); if (CheckHighScore()!=-1) sprintf(hs1,"New Highscore %lld!",score); else sprintf(hs1,"Score %lld",score); CompleteGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,160,0.1f,hs1)); switch (mode) { case 1: case 2: case 4:sprintf(hs2,"Restarts %d",restarts);break; case 3:sprintf(hs2,"Collisions %d",coll);break; } CompleteGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,200,0.2f,hs2)); sprintf(hs3,"Semi-Collisions %d",semicoll); CompleteGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,240,0.3f,hs3)); sprintf(hs4,"CLR usage %d",clrusg); CompleteGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,280,0.3f,hs4)); sprintf(hs5,"Average FPS %.2f",averfps); CompleteGUI->AddCtrl(new hgeGUIMenuItem(6,fnt,snd,400,320,0.4f,hs5)); if (CheckHighScore()!=-1) { CompleteGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,360,0.5f,"Keep this in your record?")); CompleteGUI->AddCtrl(new hgeGUIMenuItem(8,fnt,snd,400,400,0.6f,"Yes")); CompleteGUI->AddCtrl(new hgeGUIMenuItem(9,fnt,snd,400,440,0.7f,"No thanks...")); } else { CompleteGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,360,0.5f,"")); CompleteGUI->AddCtrl(new hgeGUIMenuItem(8,fnt,snd,400,400,0.6f,"")); CompleteGUI->AddCtrl(new hgeGUIMenuItem(9,fnt,snd,400,440,0.7f,"Back to menu")); } for (int i=1;i<=7;++i)CompleteGUI->EnableCtrl(i,false); CompleteGUI->SetCursor(spr); CompleteGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED); CompleteGUI->SetFocus(7); CompleteGUI->Enter(); } void CompleteGUI_FrameFnk() { float dt=hge->Timer_GetDelta(); int id=CompleteGUI->Update(dt); if (id) { switch (id) { case 8:NewHighScoreGUI_Init();CompleteGUI->Leave();break; case 9:Current_Position=0;gui->Enter();CompleteGUI->Leave();break; } } } void HSDetGUI_Init() { HSDetailGUI=new hgeGUI(); Current_Position=10; switch (view) { case 1: memset(HSDetstr,0,sizeof(HSDetstr)); if (!ERec[detv].score)sprintf(HSDetstr[1],"Nothing here..."); else { sprintf(HSDetstr[1],"No. %d of Easy Mode",detv); sprintf(HSDetstr[2],"Scored %lld by %s",ERec[detv].score,ERec[detv].name); sprintf(HSDetstr[3],"Restarts %d",ERec[detv].rescol); sprintf(HSDetstr[4],"Semi-Collisions %d",ERec[detv].scoll); sprintf(HSDetstr[5],"CLR Usage %d",ERec[detv].clrusg); sprintf(HSDetstr[6],"Average FPS %d.%d",ERec[detv].af_int,ERec[detv].af_fric); } for (int i=1;i<=6;++i) HSDetailGUI->AddCtrl(new hgeGUIMenuItem(i,fnt,snd,400,170+30*i,0.1f*i-0.1f,HSDetstr[i])), HSDetailGUI->EnableCtrl(i,false); HSDetailGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Back")); break; case 2: memset(HSDetstr,0,sizeof(HSDetstr)); if (!NRec[detv].score)sprintf(HSDetstr[1],"Nothing here..."); else { sprintf(HSDetstr[1],"No. %d of Normal Mode",detv); sprintf(HSDetstr[2],"Scored %lld by %s",NRec[detv].score,NRec[detv].name); sprintf(HSDetstr[3],"Restarts %d",NRec[detv].rescol); sprintf(HSDetstr[4],"Semi-Collisions %d",NRec[detv].scoll); sprintf(HSDetstr[5],"CLR Usage %d",NRec[detv].clrusg); sprintf(HSDetstr[6],"Average FPS %d.%d",NRec[detv].af_int,NRec[detv].af_fric); } for (int i=1;i<=6;++i) HSDetailGUI->AddCtrl(new hgeGUIMenuItem(i,fnt,snd,400,170+30*i,0.1f*i-0.1f,HSDetstr[i])), HSDetailGUI->EnableCtrl(i,false); HSDetailGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Back")); break; case 3: memset(HSDetstr,0,sizeof(HSDetstr)); if (!ExRec[detv].score)sprintf(HSDetstr[1],"Nothing here..."); else { sprintf(HSDetstr[1],"No. %d of Extreme Mode",detv); sprintf(HSDetstr[2],"Scored %lld by %s",ExRec[detv].score,ExRec[detv].name); sprintf(HSDetstr[3],"Restarts %d",ExRec[detv].rescol); sprintf(HSDetstr[4],"Semi-Collisions %d",ExRec[detv].scoll); sprintf(HSDetstr[5],"CLR Usage %d",ExRec[detv].clrusg); sprintf(HSDetstr[6],"Average FPS %d.%d",ExRec[detv].af_int,ExRec[detv].af_fric); } for (int i=1;i<=6;++i) HSDetailGUI->AddCtrl(new hgeGUIMenuItem(i,fnt,snd,400,170+30*i,0.1f*i-0.1f,HSDetstr[i])), HSDetailGUI->EnableCtrl(i,false); HSDetailGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Back")); break; case 4: memset(HSDetstr,0,sizeof(HSDetstr)); if (!FPMRec[detv].score)sprintf(HSDetstr[1],"Nothing here..."); else { sprintf(HSDetstr[1],"No. %d of Free Play Mode",detv); sprintf(HSDetstr[2],"Scored %lld by %s",FPMRec[detv].score,FPMRec[detv].name); sprintf(HSDetstr[3],"Collisions %d",FPMRec[detv].rescol); sprintf(HSDetstr[4],"Semi-Collisions %d",FPMRec[detv].scoll); sprintf(HSDetstr[5],"CLR Usage %d",FPMRec[detv].clrusg); sprintf(HSDetstr[6],"Average FPS %d.%d",FPMRec[detv].af_int,FPMRec[detv].af_fric); } for (int i=1;i<=6;++i) HSDetailGUI->AddCtrl(new hgeGUIMenuItem(i,fnt,snd,400,170+30*i,0.1f*i-0.1f,HSDetstr[i])), HSDetailGUI->EnableCtrl(i,false); HSDetailGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Back")); break; } HSDetailGUI->SetCursor(spr); HSDetailGUI->SetNavMode(HGEGUI_UPDOWN); HSDetailGUI->SetFocus(7); HSDetailGUI->Enter(); } void HSDetGUI_FrameFnk() { float dt=hge->Timer_GetDelta(); int id=HSDetailGUI->Update(dt); if (id) { switch (id) { case 7:Current_Position=9;HSDetailGUI->Leave();HSViewGUI->Enter();break; } } } void HSViewGUI_Init() { Current_Position=9; HSViewGUI=new hgeGUI(); switch (view) { case 1: HSViewGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Highscore - Easy")); for (int i=1;i<=Ecnt;++i) { sprintf(HSVstr[i],"%d. %s - %lld",i,ERec[i].name,ERec[i].score); HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i])); } for (int i=Ecnt+1;i<=5;++i) { sprintf(HSVstr[i],"%d. ----------",i); HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i])); } break; case 2: HSViewGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Highscore - Normal")); for (int i=1;i<=Ncnt;++i) { sprintf(HSVstr[i],"%d. %s - %lld",i,NRec[i].name,NRec[i].score); HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i])); } for (int i=Ncnt+1;i<=5;++i) { sprintf(HSVstr[i],"%d. ----------",i); HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i])); } break; case 3: HSViewGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Highscore - Extreme")); for (int i=1;i<=Excnt;++i) { sprintf(HSVstr[i],"%d. %s - %lld",i,ExRec[i].name,ExRec[i].score); HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i])); } for (int i=Excnt+1;i<=5;++i) { sprintf(HSVstr[i],"%d. ----------",i); HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i])); } break; case 4: HSViewGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Highscore - Free Play Mode")); for (int i=1;i<=FPMcnt;++i) { sprintf(HSVstr[i],"%d. %s - %lld",i,FPMRec[i].name,FPMRec[i].score); HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i])); } for (int i=FPMcnt+1;i<=5;++i) { sprintf(HSVstr[i],"%d. ----------",i); HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i])); } break; } HSViewGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Select one record to view details.")); HSViewGUI->AddCtrl(new hgeGUIMenuItem(8,fnt,snd,400,410,0.7f,"Back")); HSViewGUI->EnableCtrl(1,false);HSViewGUI->EnableCtrl(7,false); HSViewGUI->SetCursor(spr); HSViewGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED); HSViewGUI->SetFocus(2); HSViewGUI->Enter(); } void HSViewGUI_FrameFnk() { float dt=hge->Timer_GetDelta(); int id=HSViewGUI->Update(dt); if (id) { switch (id) { case 2:detv=1;HSDetGUI_Init();break; case 3:detv=2;HSDetGUI_Init();break; case 4:detv=3;HSDetGUI_Init();break; case 5:detv=4;HSDetGUI_Init();break; case 6:detv=5;HSDetGUI_Init();break; case 8:Current_Position=8;HSViewGUI->Leave();if (!HighScoreGUI)HighScoreGUI_Init();HighScoreGUI->Enter();break; } } } void HighScoreGUI_Init() { HighScoreGUI=new hgeGUI(); Current_Position=8; HighScoreGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,350,200,0.0f,"View Highscores && Records for...")); HighScoreGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,"Easy")); HighScoreGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,"Normal")); HighScoreGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,"Extreme")); HighScoreGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,"Free Play Mode")); HighScoreGUI->AddCtrl(new hgeGUIMenuItem(6,fnt,snd,400,400,0.5f,"Back")); HighScoreGUI->EnableCtrl(1,false); HighScoreGUI->SetCursor(spr); HighScoreGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED); HighScoreGUI->SetFocus(7); HighScoreGUI->Enter(); } void HighScoreGUI_FrameFnk() { float dt=hge->Timer_GetDelta(); int id=HighScoreGUI->Update(dt); if (id) { switch (id) { case 2:view=1;HSViewGUI_Init();break; case 3:view=2;HSViewGUI_Init();break; case 4:view=3;HSViewGUI_Init();break; case 5:view=4;HSViewGUI_Init();break; case 6:Current_Position=0;HighScoreGUI->Leave();gui->Enter();break; } } } void BkTTitleGUI_Init() { BkTTitleGUI=new hgeGUI(); Current_Position=12; BkTTitleGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Really?")); BkTTitleGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,200,250,0.1f,"I've pressed the wrong key")); BkTTitleGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,600,250,0.2f,"Do return to menu!")); BkTTitleGUI->EnableCtrl(1,false); BkTTitleGUI->SetCursor(spr); BkTTitleGUI->SetNavMode(HGEGUI_LEFTRIGHT|HGEGUI_CYCLED); BkTTitleGUI->SetFocus(2); BkTTitleGUI->Enter(); } void BkTTitleGUI_FrameFnk() { float dt=hge->Timer_GetDelta(); int id=BkTTitleGUI->Update(dt); if (id) { switch (id) { case 2: BkTTitleGUI->Leave(); Current_Position=11; PauseGUI_Init(); break; case 3: Current_Position=0;BkTTitleGUI->Leave();gui->Enter(); break; } } } void PauseGUI_Init() { PauseGUI=new hgeGUI(); Current_Position=11; DisableAllTower=DisablePlayer=true; PauseGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Paused...")); PauseGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,"Return to Game")); PauseGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,"Return to Title")); PauseGUI->EnableCtrl(1,false); PauseGUI->SetCursor(spr); PauseGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED); PauseGUI->SetFocus(2); PauseGUI->Enter(); } void PauseGUI_FrameFnk() { float dt=hge->Timer_GetDelta(); int id=PauseGUI->Update(dt); if (id) { switch (id) { case 2: PauseGUI->Leave(); Current_Position=1; DisableAllTower=DisablePlayer=false; break; case 3: BkTTitleGUI_Init(); break; } } } int AP_Update(int plrspd,int plrslospd,int clrbns) { int res=0; if (plrspd<=4)res+=plrspd*1200;else res+=5000; switch (plrslospd) { case 1:res+=4000;break; case 2:res+=3200;break; case 3:res+=2000;break; case 4:res+=1500;break; case 5:res+=700;break; } switch (clrbns) { case 0:break; case 1:res+=1500;break; case 2:res+=2700;break; case 3:res+=4000;break; case 4:res+=5500;break; } return res; } void Options_Writeback() { freopen("blr.cfg","w",stdout); printf(";CBL"); printf("%c",fpslvl==1?1:0); printf("%c",tfs?1:0); printf("%c",fpslvl==2?1:0); printf("%c",diffkey?1:0); printf("%c%c%c",plrspd,plrslospd,clrbns); fclose(stdout); } void OptionsGUI_Init() { OptionsGUI=new hgeGUI(); Current_Position=13; if (!tfs) sprintf(opt[0],"Fullscreen: Off"); else sprintf(opt[0],"Fullscreen: On"); OptionsGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,opt[0])); switch (fpslvl) { case 0:sprintf(opt[1],"FPS Level: Natural");break; case 1:sprintf(opt[1],"FPS Level: Low FPS");break; case 2:sprintf(opt[1],"FPS Level: Highest");break; } OptionsGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,opt[1])); if (diffkey) sprintf(opt[2],"Use Key X for Clear Range"); else sprintf(opt[2],"Use Key Z for Clear Range"); OptionsGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,opt[2])); OptionsGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,"Player Profile")); OptionsGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,"Save and Exit")); OptionsGUI->SetNavMode(HGEGUI_UPDOWN); OptionsGUI->SetCursor(spr); OptionsGUI->SetFocus(1); OptionsGUI->Enter(); } void PlayerProfGUI_Init() { PlayerProfGUI=new hgeGUI(); Current_Position=14; sprintf(opt[3],"Moving Speed: -%d+",plrspd); sprintf(opt[4],"Precise Moving Speed: -%d+",plrslospd); sprintf(opt[5],"Clear Range Bonus: -%d+",clrbns); sprintf(opt[6],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns)); PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,opt[3])); PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,opt[4])); PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,opt[5])); PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,opt[6])); PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,"Back")); PlayerProfGUI->SetNavMode(HGEGUI_UPDOWN); PlayerProfGUI->SetCursor(spr); PlayerProfGUI->SetFocus(1); PlayerProfGUI->Enter(); } void PlayerProfGUI_FrameFnk() { float dt=hge->Timer_GetDelta(); int id=PlayerProfGUI->Update(dt); if (id==5&&AP_Update(plrspd,plrslospd,clrbns)<=10000) {PlayerProfGUI->Leave();OptionsGUI_Init();} if (hge->Input_GetKeyState(HGEK_LEFT)) { if (!LOWFPS)++lastkeypressed;else lastkeypressed+=17; if (lastkeypressed>=100) { switch (PlayerProfGUI->GetFocus()) { case 1: if (plrspd>1)--plrspd; sprintf(opt[3],"Moving Speed: -%d+",plrspd); ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(1))->RePos(400,200); sprintf(opt[6],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns)); ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320); break; case 2: if (plrslospd>1)--plrslospd; sprintf(opt[4],"Precise Moving Speed: -%d+",plrslospd); ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(2))->RePos(400,240); sprintf(opt[6],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns)); ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320); break; case 3: if (clrbns>0)--clrbns; sprintf(opt[5],"Clear Range Bonus: -%d+",clrbns); ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(3))->RePos(400,280); sprintf(opt[6],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns)); ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320); break; } lastkeypressed=0; } } if (hge->Input_GetKeyState(HGEK_RIGHT)) { if (!LOWFPS)++lastkeypressed;else lastkeypressed+=17; if (lastkeypressed>=100) { switch (PlayerProfGUI->GetFocus()) { case 1: if (plrspd<5)++plrspd; sprintf(opt[3],"Moving Speed: -%d+",plrspd); ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(1))->RePos(400,200); sprintf(opt[6],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns)); ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320); break; case 2: if (plrslospd<5)++plrslospd; sprintf(opt[4],"Precise Moving Speed: -%d+",plrslospd); ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(2))->RePos(400,240); sprintf(opt[6],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns)); ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320); break; case 3: if (clrbns<4)++clrbns; sprintf(opt[5],"Clear Range Bonus: -%d+",clrbns); ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(3))->RePos(400,280); sprintf(opt[6],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns)); ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320); break; } lastkeypressed=0; } } } void OptionsGUI_FrameFnk() { float dt=hge->Timer_GetDelta(); int id=OptionsGUI->Update(dt); if (id) { switch (id) { case 1: tfs=!tfs; if (!tfs) sprintf(opt[0],"Fullscreen: Off"); else sprintf(opt[0],"Fullscreen: On"); ((hgeGUIMenuItem*)OptionsGUI->GetCtrl(1))->RePos(400,200); break; case 2: switch (fpslvl) { case 0: fpslvl=1;LOWFPS=true; hge->System_SetState(HGE_FPS,61); break; case 1: fpslvl=2;LOWFPS=false; hge->System_SetState(HGE_FPS,1000); break; case 2: fpslvl=0;LOWFPS=false; hge->System_SetState(HGE_FPS,0); break; } switch (fpslvl) { case 0:sprintf(opt[1],"FPS Level: Natural");break; case 1:sprintf(opt[1],"FPS Level: Low FPS");break; case 2:sprintf(opt[1],"FPS Level: Highest");break; } ((hgeGUIMenuItem*)OptionsGUI->GetCtrl(2))->RePos(400,240); break; case 3: diffkey=!diffkey; if (diffkey) sprintf(opt[2],"Use Key X for Clear Range"); else sprintf(opt[2],"Use Key Z for Clear Range"); ((hgeGUIMenuItem*)OptionsGUI->GetCtrl(3))->RePos(400,280); break; case 4: PlayerProfGUI_Init(); break; case 5: Options_Writeback(); OptionsGUI->Leave(); gui->Enter(); Current_Position=0; break; } } }