void Game::LoadCampaign() {
if(!accountactive)
return;
- if(!Mainmenuitems[7]) {
- ifstream test(ConvertFileName((":Data:Textures:"+accountactive->getCurrentCampaign()+":World.png").c_str()));
- if(test.good()) {
- LoadTextureData((":Data:Textures:"+accountactive->getCurrentCampaign()+":World.png").c_str(),&Mainmenuitems[7],0,0);
- } else {
- LoadTextureData(":Data:Textures:World.png",&Mainmenuitems[7],0,0);
- }
- }
ifstream ipstream(ConvertFileName((":Data:Campaigns:"+accountactive->getCurrentCampaign()+".txt").c_str()));
ipstream.ignore(256,':');
ipstream >> campaignnumlevels;
}
ipstream.close();
- for(int i=0;i<campaignnumlevels;i++){
- levelvisible[i]=0;
- levelhighlight[i]=0;
+ if(!Mainmenuitems[7]) {
+ ifstream test(ConvertFileName((":Data:Textures:"+accountactive->getCurrentCampaign()+":World.png").c_str()));
+ if(test.good()) {
+ LoadTextureData((":Data:Textures:"+accountactive->getCurrentCampaign()+":World.png").c_str(),&Mainmenuitems[7],0,0);
+ } else {
+ LoadTextureData(":Data:Textures:World.png",&Mainmenuitems[7],0,0);
+ }
}
- levelorder[0]=0;
- levelvisible[0]=1;
- for(int i=0;i<accountactive->getCampaignChoicesMade();i++){
- levelorder[i+1]=campaignnextlevel[levelorder[i]][accountactive->getCampaignChoice(i)];
- levelvisible[levelorder[i+1]]=1;
- }
- int whichlevelstart = accountactive->getCampaignChoicesMade()-1;
- if(whichlevelstart<0){
+ if(accountactive->getCampaignChoicesMade()==0) {
accountactive->setCampaignScore(0);
accountactive->resetFasttime();
- campaignchoicenum=1;
- campaignchoicewhich[0]=0;
- }
- else
- {
- campaignchoicenum=campaignnumnext[levelorder[whichlevelstart]];
- for(int i=0;i<campaignchoicenum;i++){
- campaignchoicewhich[i]=campaignnextlevel[levelorder[whichlevelstart]][i];
- levelvisible[campaignnextlevel[levelorder[whichlevelstart]][i]]=1;
- levelhighlight[campaignnextlevel[levelorder[whichlevelstart]][i]]=1;
- }
}
}
}
if(mainmenu==5){
- nummenuitems=NB_CAMPAIGN_MENU_ITEM+1+(accountactive?accountactive->getCampaignChoicesMade():0)+campaignchoicenum;
+ nummenuitems=NB_CAMPAIGN_MENU_ITEM+1+accountactive->getCampaignChoicesMade()+(accountactive->getCampaignChoicesMade()>0?campaignnumnext[accountactive->getCampaignChoicesMade()-1]:1);
sprintf (menustring[0], "%s",accountactive->getName());
startx[0]=5;
endx[NB_CAMPAIGN_MENU_ITEM]=startx[NB_CAMPAIGN_MENU_ITEM]+400;
endy[NB_CAMPAIGN_MENU_ITEM]=30+480-50;
- if((accountactive?accountactive->getCampaignChoicesMade():0)) {
- for(i=0;i<(accountactive?accountactive->getCampaignChoicesMade():0);i++) {
- sprintf (menustring[NB_CAMPAIGN_MENU_ITEM+1+i], "%s", campaigndescription[levelorder[i]]);
- startx[NB_CAMPAIGN_MENU_ITEM+1+i]=30+120+campaignlocationx[levelorder[i]]*400/512;
- starty[NB_CAMPAIGN_MENU_ITEM+1+i]=30+30+(512-campaignlocationy[levelorder[i]])*400/512;
+ if(accountactive->getCampaignChoicesMade()) {
+ for(i=0;i<accountactive->getCampaignChoicesMade();i++) {
+ sprintf (menustring[NB_CAMPAIGN_MENU_ITEM+1+i], "%s", campaigndescription[i]);
+ startx[NB_CAMPAIGN_MENU_ITEM+1+i]=30+120+campaignlocationx[i]*400/512;
+ starty[NB_CAMPAIGN_MENU_ITEM+1+i]=30+30+(512-campaignlocationy[i])*400/512;
endx[NB_CAMPAIGN_MENU_ITEM+1+i]=startx[NB_CAMPAIGN_MENU_ITEM+1+i]+10;
endy[NB_CAMPAIGN_MENU_ITEM+1+i]=starty[NB_CAMPAIGN_MENU_ITEM+1+i]+10;
}
- }
-
- if(campaignchoicenum>0) {
- for(i=(accountactive?accountactive->getCampaignChoicesMade():0);i<(accountactive?accountactive->getCampaignChoicesMade():0)+campaignchoicenum;i++){
- sprintf (menustring[NB_CAMPAIGN_MENU_ITEM+1+i], "%s", campaigndescription[levelorder[i]]);
- startx[NB_CAMPAIGN_MENU_ITEM+1+i]=30+120+campaignlocationx[campaignchoicewhich[i-((accountactive?accountactive->getCampaignChoicesMade():0))]]*400/512;
- starty[NB_CAMPAIGN_MENU_ITEM+1+i]=30+30+(512-campaignlocationy[campaignchoicewhich[i-((accountactive?accountactive->getCampaignChoicesMade():0))]])*400/512;
- endx[NB_CAMPAIGN_MENU_ITEM+1+i]=startx[NB_CAMPAIGN_MENU_ITEM+1+i]+10;
- endy[NB_CAMPAIGN_MENU_ITEM+1+i]=starty[NB_CAMPAIGN_MENU_ITEM+1+i]+10;
+ for(i=0;i<campaignnumnext[accountactive->getCampaignChoicesMade()-1];i++) {
+ int j = campaignnextlevel[accountactive->getCampaignChoicesMade()-1][i];
+ sprintf (menustring[NB_CAMPAIGN_MENU_ITEM+1+j], "%s", campaigndescription[j]);
+ startx[NB_CAMPAIGN_MENU_ITEM+1+j]=30+120+campaignlocationx[j]*400/512;
+ starty[NB_CAMPAIGN_MENU_ITEM+1+j]=30+30+(512-campaignlocationy[j])*400/512;
+ endx[NB_CAMPAIGN_MENU_ITEM+1+j]=startx[NB_CAMPAIGN_MENU_ITEM+1+j]+10;
+ endy[NB_CAMPAIGN_MENU_ITEM+1+j]=starty[NB_CAMPAIGN_MENU_ITEM+1+j]+10;
}
+ } else {
+ sprintf (menustring[NB_CAMPAIGN_MENU_ITEM+1], "%s", campaigndescription[0]);
+ startx[NB_CAMPAIGN_MENU_ITEM+1]=30+120+campaignlocationx[0]*400/512;
+ starty[NB_CAMPAIGN_MENU_ITEM+1]=30+30+(512-campaignlocationy[0])*400/512;
+ endx[NB_CAMPAIGN_MENU_ITEM+1]=startx[NB_CAMPAIGN_MENU_ITEM+1]+10;
+ endy[NB_CAMPAIGN_MENU_ITEM+1]=starty[NB_CAMPAIGN_MENU_ITEM+1]+10;
}
}
Normalise(&offset);
glDisable(GL_TEXTURE_2D);
- if(j<NB_CAMPAIGN_MENU_ITEM+(accountactive?accountactive->getCampaignChoicesMade():0)){
+ if(j<NB_CAMPAIGN_MENU_ITEM+accountactive->getCampaignChoicesMade()){
glColor4f(0.5,0,0,1);
endsize=.5;
} else {
linestart+=fac*4*startsize;
lineend-=fac*4*endsize;
- if(!(j>NB_CAMPAIGN_MENU_ITEM+1+(accountactive?accountactive->getCampaignChoicesMade():0)+campaignchoicenum)){
+ //~ if(!(j>NB_CAMPAIGN_MENU_ITEM+1+accountactive->getCampaignChoicesMade()+campaignchoicenum)){
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glPushMatrix();
glBegin(GL_QUADS);
glVertex3f(lineend.x-offset.x*endsize, lineend.y-offset.y*endsize, 0.0f);
glEnd();
glPopMatrix();
- }
+ //~ }
glEnable(GL_TEXTURE_2D);
}
midpoint.x=(startx[j]+endx[j])/2;
midpoint.y=(starty[j]+endy[j])/2;
if (j>NB_CAMPAIGN_MENU_ITEM &&
- (j-NB_CAMPAIGN_MENU_ITEM-1 < (accountactive?accountactive->getCampaignChoicesMade():0))) {
+ (j-NB_CAMPAIGN_MENU_ITEM-1 < accountactive->getCampaignChoicesMade())) {
itemsize*=.5;
}
- if(!(j-NB_CAMPAIGN_MENU_ITEM-1 > (accountactive?accountactive->getCampaignChoicesMade():0)+campaignchoicenum))
- {
+ //~ if(!(j-NB_CAMPAIGN_MENU_ITEM-1 > accountactive->getCampaignChoicesMade()+campaignnumnext[accountactive->getCampaignChoicesMade()]))
+ //~ {
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glPushMatrix();
glBegin(GL_QUADS);
glPopMatrix();
}
}
- }
+ //~ }
glPopMatrix();
glPopMatrix();
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
else
LoadStuff();
whichchoice=selected-NB_CAMPAIGN_MENU_ITEM-1-accountactive->getCampaignChoicesMade();
+ actuallevel=(accountactive->getCampaignChoicesMade()>0?campaignnextlevel[accountactive->getCampaignChoicesMade()-1][whichchoice]:0);
visibleloading=1;
stillloading=1;
- Loadlevel(campaignmapname[campaignchoicewhich[whichchoice]]);
+ Loadlevel(campaignmapname[actuallevel]);
campaign=1;
mainmenu=0;
gameon=1;
if(mainmenu&&endgame==1)
mainmenu=10;
//go to level select after completing a campaign level
- if(campaign&&winfreeze&&mainmenu==0&&campaignchoosenext[campaignchoicewhich[whichchoice]]==1) {
+ if(campaign&&winfreeze&&mainmenu==0&&campaignchoosenext[actuallevel]==1) {
mainmenu=5;
gameon=0;
winfreeze=0;
fireSound();
flash();
- if(musictoggle){
+ if(musictoggle) {
OPENAL_SetFrequency(OPENAL_ALL, 0.001);
emit_stream_np(stream_menutheme);
pause_sound(leveltheme);
fireSound(firestartsound);
- Loadlevel(campaignmapname[levelorder[accountactive->getCampaignChoicesMade()]]);
+ Loadlevel(campaignmapname[accountactive->getCampaignChoicesMade()]);
fireSound();
// 0 = load next level
// 1 = go back to level select screen
// 2 = stealthload next level
- if(mainmenu==0&&winfreeze&&(campaignchoosenext[campaignchoicewhich[whichchoice]])==1){
- if(campaignnumnext[campaignchoicewhich[whichchoice]]==0)
+ if(mainmenu==0&&winfreeze&&(campaignchoosenext[actuallevel])==1){
+ if(campaignnumnext[actuallevel]==0)
endgame=1;
} else if(mainmenu==0&&winfreeze) {
- stealthloading = (campaignchoosenext[campaignchoicewhich[whichchoice]]==2);
+ stealthloading = (campaignchoosenext[actuallevel]==2);
if(!stealthloading){
fireSound(firestartsound);
if(!firstload)
LoadStuff();
whichchoice=0;
+ actuallevel=campaignnextlevel[actuallevel][0];
visibleloading=1;
stillloading=1;
- Loadlevel(campaignmapname[campaignchoicewhich[0]]);
+ Loadlevel(campaignmapname[actuallevel]);
campaign=1;
mainmenu=0;
gameon=1;