]> git.jsancho.org Git - lugaru.git/blobdiff - Source/GameDraw.cpp
Move player account handling into separate class
[lugaru.git] / Source / GameDraw.cpp
index 5acb9472fbe72f6ef50b40a58975fe7c5c1ed98c..288022d32f2a6be934c427340605c69f339dbb81 100644 (file)
@@ -107,17 +107,7 @@ extern XYZ hotspot[40];
 extern int hotspottype[40];
 extern float hotspotsize[40];
 extern char hotspottext[40][256];
-extern int currenthotspot;
-
-extern int numaccounts;
-extern int accountactive;
-extern int accountdifficulty[10];
-extern int accountprogress[10];
-extern float accountpoints[10];
-extern float accounthighscore[10][50];
-extern float accountfasttime[10][50];
-extern bool accountunlocked[10][60];
-extern char accountname[10][256];
+extern int currenthotspot;;
 
 extern int numfalls;
 extern int numflipfail;
@@ -165,16 +155,10 @@ extern int directing;
 extern float dialoguetime;
 extern int dialoguegonethrough[20];
 
-extern int accountcampaignchoicesmade[10];
-extern int accountcampaignchoices[10][5000];
-
-extern float accountcampaignhighscore[10];
-extern float accountcampaignfasttime[10];
-extern float accountcampaignscore[10];
-extern float accountcampaigntime[10];
-
 extern bool gamestarted;
 
+extern bool showdamagebar;
+
 extern OPENAL_SAMPLE   *samp[100];
 extern int channels[100];
 extern "C"     void PlaySoundEx(int channel, OPENAL_SAMPLE *sptr, OPENAL_DSPUNIT *dsp, signed char startpaused);
@@ -211,7 +195,7 @@ long long Game::MD5_string (char *string){
        //return 1111111111111111;
 }
 
-int Game::DrawGLScene(void)
+int Game::DrawGLScene(StereoSide side)
 {      
        static float texcoordwidth,texcoordheight;
        static float texviewwidth, texviewheight;
@@ -230,9 +214,18 @@ int Game::DrawGLScene(void)
 
        lastcheck+=multiplier;
 
-       glColorMask( 1.0, 1.0, 1.0, 1.0 );
-       if(!registered)debugmode=0;
-
+       if ( stereomode == stereoAnaglyph ) {
+               switch(side) {
+                       case stereoLeft: glColorMask( 0.0, 1.0, 1.0, 1.0 ); break;
+                       case stereoRight: glColorMask( 1.0, 0.0, 0.0, 1.0 ); break;
+               }
+       } else {
+               glColorMask( 1.0, 1.0, 1.0, 1.0 );
+               
+               if ( stereomode == stereoHorizontalInterlaced || stereomode == stereoVerticalInterlaced ) {
+                       glStencilFunc(side == stereoLeft ? GL_NOTEQUAL : GL_EQUAL, 0x01, 0x01);
+               }
+       }
 
        if(freeze||winfreeze||(mainmenu&&gameon)||(!gameon&&gamestarted)){
                tempmult=multiplier;
@@ -348,6 +341,11 @@ int Game::DrawGLScene(void)
                glMatrixMode (GL_MODELVIEW);
                glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
                glLoadIdentity ();
+               
+               // Move the camera for the current eye's point of view.
+               // Reverse the movement if we're reversing stereo
+               glTranslatef((stereoseparation/2) * side * (stereoreverse  ? -1 : 1), 0, 0);
+               
                if(!cameramode&&!freeze&&!winfreeze){
                        glRotatef(float(Random()%100)/10*camerashake/*+(woozy*woozy)/10*/,0,0,1);
                        glRotatef(rotation2+sin(woozy/2)*(player[0].damage/player[0].damagetolerance)*5,1,0,0);
@@ -551,29 +549,6 @@ int Game::DrawGLScene(void)
                }
                glPopMatrix();
 
-               //if(cellophane){
-               /*glEnable(GL_CULL_FACE);
-               glCullFace(GL_FRONT);
-               glDepthMask(1);
-               for(k=0;k<numplayers;k++){
-               glEnable(GL_BLEND);
-               glEnable(GL_LIGHTING);
-               terrainlight=terrain.getLighting(player[k].coords.x,player[k].coords.z);
-               distance=findDistancefast(&viewer,&player[k].coords);
-               distance=(viewdistance*viewdistance-(distance-(viewdistance*viewdistance*fadestart))*(1/(1-fadestart)))/viewdistance/viewdistance;
-               glColor4f(terrainlight.x,terrainlight.y,terrainlight.z,distance);
-               if(distance>=1)glDisable(GL_BLEND);
-               if(distance>0){
-               checkpoint=DoRotation(player[k].skeleton.joints[abs(Random()%player[k].skeleton.num_joints)].position,0,player[k].rotation,0)*player[k].scale+player[k].coords;
-               checkpoint.y+=1;
-               if(checkcollide(viewer,checkpoint)){
-               player[k].occluded+=1;
-               }
-               else player[k].occluded=0;
-               if(player[k].occluded<25)player[k].DrawSkeleton();
-               }
-               }*/
-
                glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
                glEnable(GL_CULL_FACE);
                glCullFace(GL_FRONT);
@@ -1219,14 +1194,98 @@ int Game::DrawGLScene(void)
 
                                if(!tutoriallevel&&!winfreeze&&indialogue==-1&&!mainmenu){
                                        if(campaign){
-                                               if(!scoreadded)sprintf (string, "Score: %d", (int)accountcampaignscore[accountactive]+(int)bonustotal);//(int)bonustotal);
-                                               if(scoreadded)sprintf (string, "Score: %d", (int)accountcampaignscore[accountactive]);//(int)bonustotal);
+                                               if(!scoreadded)sprintf (string, "Score: %d", (int)accountactive->getCampaignScore()+(int)bonustotal);//(int)bonustotal);
+                                               if(scoreadded)sprintf (string, "Score: %d", (int)accountactive->getCampaignScore());//(int)bonustotal);
                                        }
                                        if(!campaign)sprintf (string, "Score: %d", (int)bonustotal);
                                        glColor4f(0,0,0,1);
                                        text.glPrintOutline(1024/40-4,768/16-4+768*14/16,string,1,1.5*1.25,1024,768);
                                        glColor4f(1,0,0,1);
                                        text.glPrint(1024/40,768/16+768*14/16,string,1,1.5,1024,768);
+                                       if(showdamagebar) {
+                                               glDisable(GL_DEPTH_TEST);                                                       // Disables Depth Testing
+                                               glDisable(GL_CULL_FACE);
+                                               glDisable(GL_LIGHTING);
+                                               glDisable(GL_TEXTURE_2D);
+                                               glDepthMask(0);
+                                               glMatrixMode(GL_PROJECTION);                                            // Select The Projection Matrix
+                                               glPushMatrix();                                                                         // Store The Projection Matrix
+                                               glLoadIdentity();                                                                       // Reset The Projection Matrix
+                                               glOrtho(0,screenwidth,0,screenheight,-100,100);         // Set Up An Ortho Screen
+                                               glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
+                                               glPushMatrix();                                                                         // Store The Modelview Matrix
+                                               glLoadIdentity();                                                                       // Reset The Modelview Matrix
+                                               glTranslatef(15,screenheight*17.5/20,0);
+                                               glScalef(screenwidth/3+20,screenheight/20,1);
+                                               glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
+                                               glEnable(GL_BLEND);
+                                               glColor4f(0.0,0.4,0.0,0.7);
+                                               float bar=((float)player[0].damage)/player[0].damagetolerance;
+                                               glBegin(GL_QUADS);
+                                               glVertex3f((bar<1?bar:1),0,0.0f);
+                                               glVertex3f(1,0,0.0f);
+                                               glVertex3f(1,1,0.0f);
+                                               glVertex3f((bar<1?bar:1),1,0.0f);
+                                               glEnd();
+                                               glColor4f(0.1,0.0,0.0,1);
+                                               bar = ((float)player[0].bloodloss)/player[0].damagetolerance;
+                                               glBegin(GL_QUADS);
+                                               glVertex3f(0,0,0.0f);
+                                               glVertex3f((bar<1?bar:1),0,0.0f);
+                                               glVertex3f((bar<1?bar:1),1,0.0f);
+                                               glVertex3f(0,1,0.0f);
+                                               glEnd();
+                                               glColor4f(0.4,0.0,0.0,0.7);
+                                               bar = ((float)player[0].damage)/player[0].damagetolerance;
+                                               glBegin(GL_QUADS);
+                                               glVertex3f(0,0,0.0f);
+                                               glVertex3f((bar<1?bar:1),0,0.0f);
+                                               glVertex3f((bar<1?bar:1),1,0.0f);
+                                               glVertex3f(0,1,0.0f);
+                                               glEnd();
+                                               glColor4f(0.4,0.0,0.0,0.7);
+                                               bar = ((float)player[0].permanentdamage)/player[0].damagetolerance;
+                                               glBegin(GL_QUADS);
+                                               glVertex3f(0,0,0.0f);
+                                               glVertex3f((bar<1?bar:1),0,0.0f);
+                                               glVertex3f((bar<1?bar:1),1,0.0f);
+                                               glVertex3f(0,1,0.0f);
+                                               glEnd();
+                                               glColor4f(0.4,0.0,0.0,0.7);
+                                               bar = ((float)player[0].superpermanentdamage)/player[0].damagetolerance;
+                                               glBegin(GL_QUADS);
+                                               glVertex3f(0,0,0.0f);
+                                               glVertex3f((bar<1?bar:1),0,0.0f);
+                                               glVertex3f((bar<1?bar:1),1,0.0f);
+                                               glVertex3f(0,1,0.0f);
+                                               glEnd();
+                                               glColor4f(0.0,0.0,0.0,0.7);
+                                               glLineWidth(2.0);
+                                               glBegin(GL_LINE_STRIP);
+                                               glVertex3f(0,0,0.0f);
+                                               glVertex3f(1,0,0.0f);
+                                               glVertex3f(1,1,0.0f);
+                                               glVertex3f(0,1,0.0f);
+                                               glVertex3f(0,0,0.0f);
+                                               glEnd();
+                                               
+                                               glMatrixMode(GL_PROJECTION);                                            // Select The Projection Matrix
+                                               glPopMatrix();                                                                          // Restore The Old Projection Matrix
+                                               glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
+                                               glPopMatrix();                                                                          // Restore The Old Projection Matrix
+                                               glEnable(GL_DEPTH_TEST);                                                        // Enables Depth Testing
+                                               glEnable(GL_CULL_FACE);
+                                               glDisable(GL_BLEND);
+                                               glDepthMask(1);
+                                               glEnable(GL_TEXTURE_2D);
+                                               
+                                               // writing the numbers : 
+                                               sprintf (string, "Damages : %d/%d (%d)",(int)(player[0].damage),(int)(player[0].damagetolerance),(int)(player[0].bloodloss));
+                                               glColor4f(0,0,0,1);
+                                               text.glPrintOutline(1024/40-4,768/16-4+768*14/16-40,string,1,1.5*1.25,1024,768);
+                                               glColor4f(1,0,0,1);
+                                               text.glPrint(1024/40,768/16+768*14/16-40,string,1,1.5,1024,768);
+                                       }
                                }
 
                                glColor4f(.5,.5,.5,1);
@@ -2278,7 +2337,7 @@ int Game::DrawGLScene(void)
                        if(mainmenu==5){
                                ifstream ipstream(ConvertFileName(":Data:Campaigns:main.txt"));
                                //campaignnumlevels=0;
-                               //accountcampaignchoicesmade[accountactive]=0;
+                               //accountactive->getCampaignChoicesMade()=0;
                                ipstream.ignore(256,':');
                                ipstream >> campaignnumlevels;
                                for(i=0;i<campaignnumlevels;i++){
@@ -2317,16 +2376,16 @@ int Game::DrawGLScene(void)
 
                                levelorder[0]=0;
                                levelvisible[0]=1;
-                               if(accountcampaignchoicesmade[accountactive])
-                                       for(i=0;i<accountcampaignchoicesmade[accountactive];i++){
-                                               levelorder[i+1]=campaignnextlevel[levelorder[i]][accountcampaignchoices[accountactive][i]];
+                               if(accountactive->getCampaignChoicesMade())
+                                       for(i=0;i<accountactive->getCampaignChoicesMade();i++){
+                                               levelorder[i+1]=campaignnextlevel[levelorder[i]][accountactive->getCampaignChoice(i)];
                                                levelvisible[levelorder[i+1]]=1;
                                        }
                                        int whichlevelstart;
-                                       whichlevelstart=accountcampaignchoicesmade[accountactive]-1;
+                                       whichlevelstart=accountactive->getCampaignChoicesMade()-1;
                                        if(whichlevelstart<0){
-                                               accountcampaignscore[accountactive]=0;
-                                               accountcampaignfasttime[accountactive]=0;
+                                               accountactive->setCampaignScore(0);
+                                               accountactive->resetFasttime();
                                                campaignchoicenum=1;
                                                campaignchoicewhich[0]=0;
                                        }
@@ -2334,8 +2393,7 @@ int Game::DrawGLScene(void)
                                        {
                                                campaignchoicenum=campaignnumnext[levelorder[whichlevelstart]];
                                                if(campaignchoicenum==0){
-                                                       if(accountcampaignscore[accountactive]>accountcampaignhighscore[accountactive])accountcampaignhighscore[accountactive]=accountcampaignscore[accountactive];
-                                                       if(accountcampaignfasttime[accountactive]==0||accountcampaigntime[accountactive]<accountcampaignfasttime[accountactive])accountcampaignfasttime[accountactive]=accountcampaigntime[accountactive];              
+                                                       //if(accountactive->getCampaignFasttime()==0||accountcampaigntime[accountactive]<accountactive->getCampaignFasttime())accountactive->getCampaignFasttime()=accountcampaigntime[accountactive];          
                                                }
                                                if(campaignchoicenum)
                                                        for(i=0;i<campaignchoicenum;i++){
@@ -2358,7 +2416,7 @@ int Game::DrawGLScene(void)
 
                /*if(mainmenu!=0)*/oldmainmenu=mainmenu;
 
-               if(mainmenu==3||mainmenu==4||mainmenu==5||mainmenu==6||mainmenu==7||mainmenu==8||mainmenu==9||mainmenu==10||mainmenu==119||mainmenu==12||mainmenu==13||mainmenu==14||mainmenu==15||mainmenu==16||mainmenu==17){
+               if(mainmenu==3||mainmenu==4||mainmenu==5||mainmenu==6||mainmenu==7||mainmenu==8||mainmenu==9||mainmenu==10||mainmenu==119||mainmenu==13||mainmenu==17||mainmenu==18){
                        glClear(GL_DEPTH_BUFFER_BIT);
                        glEnable(GL_ALPHA_TEST);
                        glAlphaFunc(GL_GREATER, 0.001f);
@@ -2422,7 +2480,7 @@ int Game::DrawGLScene(void)
                        glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
 
                        if(mainmenu==3){                        
-                               nummenuitems=12;
+                               nummenuitems=14;
                                if((float)newscreenwidth>(float)newscreenheight*1.61||(float)newscreenwidth<(float)newscreenheight*1.59)sprintf (menustring[0], "Resolution: %d*%d",(int)newscreenwidth,(int)newscreenheight);
                                else sprintf (menustring[0], "Resolution: %d*%d (widescreen)",(int)newscreenwidth,(int)newscreenheight);
                                startx[0]=10+20;
@@ -2508,20 +2566,36 @@ int Game::DrawGLScene(void)
                                
                                sprintf (menustring[11], "Volume: %d%%", (int)(volume*100));
                                startx[11]=10+60;
-                               starty[11]=155;
+                               starty[11]=160;
                                endx[11]=startx[11]+strlen(menustring[11])*10;
                                endy[11]=starty[11]+20;
                                movex[11]=0;
                                movey[11]=0;
                                
+                               sprintf (menustring[13], "Damage Bar: %s",(showdamagebar?"on":"off"));
+                               startx[13]=30;
+                               starty[13]=125;
+                               endx[13]=startx[13]+strlen(menustring[13])*10;
+                               endy[13]=starty[13]+20;
+                               movex[13]=0;
+                               movey[13]=0;
+                               
                                sprintf (menustring[7], "-Configure Controls-");
                                startx[7]=10+15;
-                               starty[7]=100;
+                               starty[7]=90;
                                endx[7]=startx[7]+strlen(menustring[7])*10;
                                endy[7]=starty[7]+20;
                                movex[7]=0;
                                movey[7]=0;
 
+                               sprintf (menustring[12], "-Configure Stereo -");
+                               startx[12]=10+15;
+                               starty[12]=55;
+                               endx[12]=startx[12]+strlen(menustring[7])*10;
+                               endy[12]=starty[12]+20;
+                               movex[12]=0;
+                               movey[12]=0;
+                               
                                if(newdetail==detail&&newscreenheight==(int)screenheight&&newscreenwidth==(int)screenwidth)sprintf (menustring[8], "Back");
                                else sprintf (menustring[8], "Back (some changes take effect next time Lugaru is opened)");
                                startx[8]=10;
@@ -2626,9 +2700,9 @@ int Game::DrawGLScene(void)
                                movey[9]=0;
                        }
                        if(mainmenu==5){                        
-                               nummenuitems=7+accountcampaignchoicesmade[accountactive]+campaignchoicenum;
+                               nummenuitems=7+accountactive->getCampaignChoicesMade()+campaignchoicenum;
 
-                               sprintf (menustring[0], "%s",accountname[accountactive]);
+                               sprintf (menustring[0], "%s",accountactive->getName());
                                startx[0]=5;
                                starty[0]=400;
                                endx[0]=startx[0]+strlen(menustring[0])*10;
@@ -2686,8 +2760,8 @@ int Game::DrawGLScene(void)
                                movex[6]=0;
                                movey[6]=0;
 
-                               if(accountcampaignchoicesmade[accountactive])
-                                       for(i=0;i<accountcampaignchoicesmade[accountactive];i++){
+                               if(accountactive->getCampaignChoicesMade())
+                                       for(i=0;i<accountactive->getCampaignChoicesMade();i++){
                                                sprintf (menustring[7+i], "%s", campaigndescription[levelorder[i]]);
                                                startx[7+i]=30+120+campaignlocationx[levelorder[i]]*400/512;
                                                starty[7+i]=30+30+(512-campaignlocationy[levelorder[i]])*400/512;
@@ -2698,10 +2772,10 @@ int Game::DrawGLScene(void)
                                        }
 
                                        if(campaignchoicenum>0)
-                                               for(i=accountcampaignchoicesmade[accountactive];i<accountcampaignchoicesmade[accountactive]+campaignchoicenum;i++){
+                                               for(i=accountactive->getCampaignChoicesMade();i<accountactive->getCampaignChoicesMade()+campaignchoicenum;i++){
                                                        sprintf (menustring[7+i], "%s", campaigndescription[levelorder[i]]);
-                                                       startx[7+i]=30+120+campaignlocationx[campaignchoicewhich[i-(accountcampaignchoicesmade[accountactive])]]*400/512;
-                                                       starty[7+i]=30+30+(512-campaignlocationy[campaignchoicewhich[i-(accountcampaignchoicesmade[accountactive])]])*400/512;
+                                                       startx[7+i]=30+120+campaignlocationx[campaignchoicewhich[i-(accountactive->getCampaignChoicesMade())]]*400/512;
+                                                       starty[7+i]=30+30+(512-campaignlocationy[campaignchoicewhich[i-(accountactive->getCampaignChoicesMade())]])*400/512;
                                                        endx[7+i]=startx[7+i]+10;
                                                        endy[7+i]=starty[7+i]+10;
                                                        movex[7+i]=0;
@@ -2801,12 +2875,12 @@ int Game::DrawGLScene(void)
                                movey[5]=0;
                        }
 
-                       if(mainmenu==7){                        
-                               nummenuitems=numaccounts+2;
+                       if(mainmenu==7){        
+                               nummenuitems=Account::getNbAccounts()+2;
 
                                int num;
 
-                               if(numaccounts<8)
+                               if(Account::getNbAccounts()<8)
                                        sprintf (menustring[0], "New User");
                                else
                                        sprintf (menustring[0], "No More Users");
@@ -2817,30 +2891,30 @@ int Game::DrawGLScene(void)
                                movex[0]=0;
                                movey[0]=0;
 
-                               if(entername)startx[0]+=10;
+                               if(entername)
+                                       startx[0]+=10;
 
 
                                num=1;
-                               if(numaccounts)
-                                       for(i=0;i<numaccounts;i++){
-                                               sprintf (menustring[num], "%s",accountname[i]);
-                                               startx[num]=10;
-                                               starty[num]=360-20-20*num;
-                                               endx[num]=startx[num]+strlen(menustring[num])*10;
-                                               endy[num]=starty[num]+20;
-                                               movex[num]=0;
-                                               movey[num]=0;
-
-                                               num++;
-                                       }
-
-                                       sprintf (menustring[num], "Back");
+                               for(i=0;i<Account::getNbAccounts();i++){
+                                       sprintf (menustring[num], "%s",Account::get(i)->getName());
                                        startx[num]=10;
+                                       starty[num]=360-20-20*num;
                                        endx[num]=startx[num]+strlen(menustring[num])*10;
-                                       starty[num]=10;
                                        endy[num]=starty[num]+20;
                                        movex[num]=0;
                                        movey[num]=0;
+
+                                       num++;
+                               }
+
+                               sprintf (menustring[num], "Back");
+                               startx[num]=10;
+                               endx[num]=startx[num]+strlen(menustring[num])*10;
+                               starty[num]=10;
+                               endy[num]=starty[num]+20;
+                               movex[num]=0;
+                               movey[num]=0;
                        }
                        if(mainmenu==8){                        
                                nummenuitems=3;
@@ -2882,14 +2956,14 @@ int Game::DrawGLScene(void)
                                        strcpy(menustring[j],temp);
                                        for(i=0;i<17;i++)if(menustring[j][i]=='\0')menustring[j][i]=' ';
                                        menustring[j][17]='\0';
-                                       sprintf (temp, "%d",(int)accounthighscore[accountactive][j]);
+                                       sprintf (temp, "%d",(int)accountactive->getHighScore(j));
                                        strcat(menustring[j],temp);
                                        for(i=18;i<32;i++)if(menustring[j][i]=='\0')menustring[j][i]=' ';
                                        menustring[j][32]='\0';
-                                       sprintf (temp, "%d:",(int)(((int)accountfasttime[accountactive][j]-(int)(accountfasttime[accountactive][j])%60)/60));
+                                       sprintf (temp, "%d:",(int)(((int)accountactive->getFastTime(j)-(int)(accountactive->getFastTime(j))%60)/60));
                                        strcat(menustring[j],temp);
-                                       if((int)(accountfasttime[accountactive][j])%60<10)strcat(menustring[j],"0");
-                                       sprintf (temp, "%d",(int)(accountfasttime[accountactive][j])%60);
+                                       if((int)(accountactive->getFastTime(j))%60<10)strcat(menustring[j],"0");
+                                       sprintf (temp, "%d",(int)(accountactive->getFastTime(j))%60);
                                        strcat(menustring[j],temp);
 
                                        startx[j]=10;
@@ -2929,14 +3003,14 @@ int Game::DrawGLScene(void)
                                        strcpy(menustring[j],temp);
                                        for(i=0;i<17;i++)if(menustring[j][i]=='\0')menustring[j][i]=' ';
                                        menustring[j][17]='\0';
-                                       sprintf (temp, "%d",(int)accounthighscore[accountactive][j]);
+                                       sprintf (temp, "%d",(int)accountactive->getHighScore(j));
                                        strcat(menustring[j],temp);
                                        for(i=18;i<32;i++)if(menustring[j][i]=='\0')menustring[j][i]=' ';
                                        menustring[j][32]='\0';
-                                       sprintf (temp, "%d:",(int)(((int)accountfasttime[accountactive][j]-(int)(accountfasttime[accountactive][j])%60)/60));
+                                       sprintf (temp, "%d:",(int)(((int)accountactive->getFastTime(j)-(int)(accountactive->getFastTime(j))%60)/60));
                                        strcat(menustring[j],temp);
-                                       if((int)(accountfasttime[accountactive][j])%60<10)strcat(menustring[j],"0");
-                                       sprintf (temp, "%d",(int)(accountfasttime[accountactive][j])%60);
+                                       if((int)(accountactive->getFastTime(j))%60<10)strcat(menustring[j],"0");
+                                       sprintf (temp, "%d",(int)(accountactive->getFastTime(j))%60);
                                        strcat(menustring[j],temp);
 
                                        startx[j]=10;
@@ -3005,7 +3079,7 @@ int Game::DrawGLScene(void)
                                strcpy(menustring[4],temp);
                                for(i=0;i<20;i++)if(menustring[4][i]=='\0')menustring[4][i]=' ';
                                menustring[4][20]='\0';
-                               sprintf (temp, "%d",(int)accountcampaignscore[accountactive]);
+                               sprintf (temp, "%d",(int)accountactive->getCampaignScore());
                                strcat(menustring[4],temp);
                                startx[4]=190;
                                endx[4]=startx[4]+strlen(menustring[4])*10;
@@ -3033,7 +3107,7 @@ int Game::DrawGLScene(void)
                                strcpy(menustring[5],temp);
                                for(i=0;i<20;i++)if(menustring[5][i]=='\0')menustring[5][i]=' ';
                                menustring[5][20]='\0';
-                               sprintf (temp, "%d",(int)accountcampaignhighscore[accountactive]);
+                               sprintf (temp, "%d",(int)accountactive->getCampaignHighScore());
                                strcat(menustring[5],temp);
                                startx[5]=190;
                                endx[5]=startx[5]+strlen(menustring[5])*10;
@@ -3047,7 +3121,7 @@ int Game::DrawGLScene(void)
                                strcpy(menustring[7],temp);
                                for(i=0;i<20;i++)if(menustring[7][i]=='\0')menustring[7][i]=' ';
                                menustring[7][20]='\0';
-                               sprintf (temp, "%d",(int)accountcampaignfasttime[accountactive]);
+                               sprintf (temp, "%d",(int)accountactive->getCampaignFasttime());
                                strcat(menustring[7],temp);
                                startx[7]=200;
                                endx[7]=startx[7]+strlen(menustring[7])*10;
@@ -3056,128 +3130,40 @@ int Game::DrawGLScene(void)
                                movex[7]=0;
                                movey[7]=0;*/
                        }
-               }
-
-               if(mainmenu==12){       
-                       menupulse+=multiplier*2;
-
-                       nummenuitems=6;
-                       char temp[255];
-
-                       sprintf (menustring[0], "Register now for only $19.95!");
-                       startx[0]=160;
-                       starty[0]=270;
-                       endx[0]=startx[0]+strlen(menustring[0])*10;
-                       endy[0]=starty[0]+20;
-                       movex[0]=0;
-                       movey[0]=0;
-
-                       sprintf (menustring[1], "Confront raiders, wolves, and more!");
-                       startx[1]=130;
-                       starty[1]=240;
-                       endx[1]=startx[1]+strlen(menustring[1])*10;
-                       endy[1]=starty[1]+20;
-                       movex[1]=0;
-                       movey[1]=0;
-
-                       sprintf (menustring[2], "Fight using swords, staves and armor!");
-                       startx[2]=125;
-                       starty[2]=210;
-                       endx[2]=startx[2]+strlen(menustring[2])*10;
-                       endy[2]=starty[2]+20;
-                       movex[2]=0;
-                       movey[2]=0;
-
-                       if(!tryquit)sprintf (menustring[3], "Back");
-                       else sprintf (menustring[3], "Quit");
-                       startx[3]=10;
-                       endx[3]=startx[3]+strlen(menustring[3])*10;
-                       starty[3]=10;
-                       endy[3]=starty[3]+20;
-                       movex[3]=0;
-                       movey[3]=0;
-
-                       sprintf (menustring[4], "Register now!");
-                       startx[4]=250;
-                       endx[4]=startx[4]+strlen(menustring[4])*10;
-                       starty[4]=140;
-                       endy[4]=starty[4]+20;
-                       movex[4]=0;
-                       movey[4]=0;
-
-                       sprintf (menustring[5], "Enter registration code!");
-                       startx[5]=190;
-                       endx[5]=startx[5]+strlen(menustring[5])*10;
-                       starty[5]=120;
-                       endy[5]=starty[5]+20;
-                       movex[5]=0;
-                       movey[5]=0;
-               }
-
-               if(mainmenu==15){       
-                       nummenuitems=2;
-                       char temp[255];
-
-                       sprintf (menustring[0], "Thank you for supporting Wolfire Software!");
-                       startx[0]=100;
-                       starty[0]=270;
-                       endx[0]=startx[0]+strlen(menustring[0])*10;
-                       endy[0]=starty[0]+20;
-                       movex[0]=0;
-                       movey[0]=0;
-
-                       sprintf (menustring[1], "Back");
-                       startx[1]=10;
-                       endx[1]=startx[1]+strlen(menustring[1])*10;
-                       starty[1]=10;
-                       endy[1]=starty[1]+20;
-                       movex[1]=0;
-                       movey[1]=0;
-               }
-
-               if(mainmenu==16){       
-                       nummenuitems=5;
-                       char temp[255];
-
-                       sprintf (menustring[0], "Sorry, that name/serial number combination is incorrect.");
-                       startx[0]=40;
-                       starty[0]=270;
-                       endx[0]=startx[0]+strlen(menustring[0])*10;
-                       endy[0]=starty[0]+20;
-                       movex[0]=0;
-                       movey[0]=0;
-
-                       sprintf (menustring[1], "Back");
-                       startx[1]=10;
-                       endx[1]=startx[1]+strlen(menustring[1])*10;
-                       starty[1]=10;
-                       endy[1]=starty[1]+20;
-                       movex[1]=0;
-                       movey[1]=0;
-
-                       sprintf (menustring[2], "Please make sure you are copying your name and serial");
-                       startx[2]=50;
-                       starty[2]=240;
-                       endx[2]=startx[2]+strlen(menustring[2])*10;
-                       endy[2]=starty[2]+20;
-                       movex[2]=0;
-                       movey[2]=0;
+                       if (mainmenu==18) {
+                               nummenuitems=4;
+                               sprintf (menustring[0], "Stereo mode: %s", StereoModeName(newstereomode));
+                               startx[0]=70;
+                               starty[0]=400;
+                               endx[0]=startx[0]+strlen(menustring[0])*10;
+                               endy[0]=starty[0]+20;
+                               movex[0]=0;
+                               movey[0]=0;
+                               
+                               sprintf (menustring[1], "Stereo separation: %.3f", stereoseparation);
+                               startx[1]=10;
+                               starty[1]=360;
+                               endx[1]=startx[1]+strlen(menustring[1])*10;
+                               endy[1]=starty[1]+20;
+                               movex[1]=0;
+                               movey[1]=0;
 
-                       sprintf (menustring[3], "number exactly as they appear in your email.");
-                       startx[3]=90;
-                       starty[3]=210;
-                       endx[3]=startx[3]+strlen(menustring[3])*10;
-                       endy[3]=starty[3]+20;
-                       movex[3]=0;
-                       movey[3]=0;
-
-                       sprintf (menustring[4], "Capitalization and punctuation matter!");
-                       startx[4]=120;
-                       starty[4]=180;
-                       endx[4]=startx[4]+strlen(menustring[4])*10;
-                       endy[4]=starty[4]+20;
-                       movex[4]=0;
-                       movey[4]=0;
+                               sprintf (menustring[2], "Reverse stereo: %s", stereoreverse ? "Yes" : "No");
+                               startx[2]=40;
+                               starty[2]=320;
+                               endx[2]=startx[2]+strlen(menustring[2])*10;
+                               endy[2]=starty[2]+20;
+                               movex[2]=0;
+                               movey[2]=0;
+                               
+                               sprintf (menustring[3], "Back");
+                               startx[3]=10;
+                               endx[3]=startx[3]+strlen(menustring[3])*10;
+                               starty[3]=10;
+                               endy[3]=starty[3]+20;
+                               movex[3]=0;
+                               movey[3]=0;                             
+                       }
                }
 
                if(mainmenu==13){       
@@ -3200,49 +3186,6 @@ int Game::DrawGLScene(void)
                        movex[1]=0;
                        movey[1]=0;
                }
-
-               if(mainmenu==14){       
-                       nummenuitems=2;
-                       char temp[255];
-
-                       sprintf (menustring[0], "Please enter your number:");
-                       startx[0]=30;
-                       starty[0]=250;
-                       endx[0]=startx[0]+strlen(menustring[0])*10;
-                       endy[0]=starty[0]+20;
-                       movex[0]=0;
-                       movey[0]=0;
-
-                       sprintf (menustring[1], "Please enter your name:");
-                       startx[1]=290;
-                       starty[1]=250;
-                       endx[1]=startx[1]+strlen(menustring[1])*10;
-                       endy[1]=starty[1]+20;
-                       movex[1]=0;
-                       movey[1]=0;
-                       /*
-                       char tempstring[256];
-                       sprintf (tempstring, "%s", registrationname);
-                       long num1;
-                       long num2;
-                       long num3;
-                       long num4;
-                       long long longnum;
-                       longnum = MD5_string ( tempstring);
-                       //longnum = 1111111111111111;
-                       num1 = longnum/100000000;
-                       num2 = longnum%100000000;
-                       sprintf (tempstring, "%d-%d-%d-%d", num1/10000, num1%10000, num2/10000, num2%10000);
-
-                       sprintf (menustring[2], "%s", tempstring);
-                       startx[2]=290;
-                       starty[2]=230;
-                       endx[2]=startx[2]+strlen(menustring[2])*10;
-                       endy[2]=starty[2]+20;
-                       movex[2]=0;
-                       movey[2]=0;                             */      
-               }
-
                if(mainmenu==1||mainmenu==2){
                        nummenuitems=7;
                        startx[0]=150;
@@ -3410,7 +3353,7 @@ int Game::DrawGLScene(void)
                                }
                        }
 
-                       if(mainmenu==3||mainmenu==4||mainmenu==5||mainmenu==6||mainmenu==7||mainmenu==8||mainmenu==9||mainmenu==10||mainmenu==11||mainmenu==12||mainmenu==13||mainmenu==14||mainmenu==15||mainmenu==16||mainmenu==17)
+                       if(mainmenu==3||mainmenu==4||mainmenu==5||mainmenu==6||mainmenu==7||mainmenu==8||mainmenu==9||mainmenu==10||mainmenu==11||mainmenu==13||mainmenu==17||mainmenu==18)
                                for(i=0;i<nummenuitems;i++){
                                        if((mousecoordh/screenwidth*640)>startx[i]&&(mousecoordh/screenwidth*640)<endx[i]&&480-(mousecoordv/screenheight*480)>starty[i]&&480-(mousecoordv/screenheight*480)<endy[i]){
                                                if(mainmenu!=5)selected=i;
@@ -3603,40 +3546,30 @@ int Game::DrawGLScene(void)
                                                                                        }
                                                                                }
                                                                        }
-                                                                       if(mainmenu==3||mainmenu==4||mainmenu==5||mainmenu==6||mainmenu==7||mainmenu==8||mainmenu==9||mainmenu==10||mainmenu==11||mainmenu==12||mainmenu==13||mainmenu==14||mainmenu==15||mainmenu==16||mainmenu==17)
+                                                                       if(mainmenu==3||mainmenu==4||mainmenu==5||mainmenu==6||mainmenu==7||mainmenu==8||mainmenu==9||mainmenu==10||mainmenu==11||mainmenu==13||mainmenu==17||mainmenu==18)
                                                                        {
                                                                                if(mainmenu!=5||j<6)
                                                                                {
                                                                                        glColor4f(1,0,0,1);
-                                                                                       if(mainmenu==12&&j==4)glColor4f(1,(sin(menupulse)+1)/2,(sin(menupulse)+1)/2,1);
-                                                                                       if(mainmenu==9&&j>accountprogress[accountactive]&&j<numchallengelevels)glColor4f(0.5,0,0,1);
-                                                                                       if(mainmenu==11&&j>accountprogress[accountactive]&&j<numchallengelevels)glColor4f(0.5,0,0,1);
+                                                                                       if(mainmenu==9&&j>accountactive->getProgress()&&j<numchallengelevels)glColor4f(0.5,0,0,1);
+                                                                                       if(mainmenu==11&&j>accountactive->getProgress()&&j<numchallengelevels)glColor4f(0.5,0,0,1);
                                                                                        //if(1-((float)i)/10-(1-selectedlong[j])>0){
                                                                                        glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
                                                                                        glPushMatrix();
-                                                                                               if((mainmenu!=7||j!=0||!entername)&&(mainmenu!=13||j!=1)&&(mainmenu!=14||j!=1))text.glPrint(startx[j],starty[j],menustring[j],0,1,640,480);
+                                                                                               if(mainmenu!=7||j!=0||!entername)
+                                                                                                       text.glPrint(startx[j],starty[j],menustring[j],0,1,640,480);
                                                                                                else
                                                                                                {
                                                                                                        if(displayblink){
                                                                                                                sprintf (string, "_");
                                                                                                                text.glPrint(startx[j]+(float)(displayselected)*10,starty[j],string,0,1,640,480);
                                                                                                        }
-                                                                                                       k=0;
-                                                                                                       for(l=0;l<displaychars[k];l++){
-                                                                                                               if(l<displaychars[k]){
-                                                                                                                       sprintf (string, "%c",displaytext[k][l]);
-                                                                                                                       text.glPrint(startx[j]+l*10,starty[j],string,0,1,640,480);
-                                                                                                               }
+                                                                                                       for(l=0;l<displaychars[0];l++){
+                                                                                                               sprintf (string, "%c",displaytext[0][l]);
+                                                                                                               text.glPrint(startx[j]+l*10,starty[j],string,0,1,640,480);
                                                                                                        }
                                                                                                }
                                                                                        glPopMatrix();
-                                                                                       /*}
-                                                                                       else{
-                                                                                       glPushMatrix();
-                                                                                       sprintf (string, "Hooo!");
-                                                                                       text.glPrint(startx[0],starty[0],string,0,1,640,480);
-                                                                                       glPopMatrix();
-                                                                                       }*/
                                                                                        glEnable(GL_BLEND);
                                                                                        glBlendFunc(GL_SRC_ALPHA,GL_ONE);
                                                                                        for(i=0;i<15;i++)
@@ -3644,24 +3577,20 @@ int Game::DrawGLScene(void)
                                                                                                if(1-((float)i)/15-(1-selectedlong[j])>0)
                                                                                                {
                                                                                                        glColor4f(1,0,0,(1-((float)i)/10-(1-selectedlong[j]))*.25);
-                                                                                                       if(mainmenu==12&&j==4)glColor4f(1,(sin(menupulse)+1)/2,(sin(menupulse)+1)/2,(1-((float)i)/10-(1-selectedlong[j]))*.25);
-                                                                                                       if(mainmenu==9&&j>accountprogress[accountactive]&&j<numchallengelevels)glColor4f(0.5,0,0,(1-((float)i)/10-(1-selectedlong[j]))*.25);
-                                                                                                       if(mainmenu==11&&j>accountprogress[accountactive]&&j<numchallengelevels)glColor4f(0.5,0,0,(1-((float)i)/10-(1-selectedlong[j]))*.25);
+                                                                                                       if(mainmenu==9&&j>accountactive->getProgress()&&j<numchallengelevels)glColor4f(0.5,0,0,(1-((float)i)/10-(1-selectedlong[j]))*.25);
+                                                                                                       if(mainmenu==11&&j>accountactive->getProgress()&&j<numchallengelevels)glColor4f(0.5,0,0,(1-((float)i)/10-(1-selectedlong[j]))*.25);
                                                                                                        if(mainmenu==3)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4-((/*1*/+((float)i)/70)*strlen(menustring[j]))*3,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
                                                                                                        if(mainmenu==4)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
                                                                                                        if(mainmenu==5)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
                                                                                                        if(mainmenu==6)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
-                                                                                                       if(mainmenu==7&&(j!=0||!entername))text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
+                                                                                                       if(mainmenu==7&&(j!=0||!entername)) text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4,starty[j]+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
                                                                                                        if(mainmenu==8)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
                                                                                                        if(mainmenu==9)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
                                                                                                        if(mainmenu==11)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
                                                                                                        if(mainmenu==10)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
-                                                                                                       if(mainmenu==12)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
-                                                                                                       if(mainmenu==15)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
-                                                                                                       if(mainmenu==16)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
                                                                                                        if(mainmenu==17)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
                                                                                                        if(mainmenu==13&&j!=1)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
-                                                                                                       if(mainmenu==14&&j!=1)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
+                                                                                                       if(mainmenu==18)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
                                                                                                        /*else{
                                                                                                        if(displayblink){
                                                                                                        sprintf (string, "_");
@@ -3714,9 +3643,9 @@ int Game::DrawGLScene(void)
                                                                                                                        //float linestartx,lineendx,linestarty,lineendy,offsetx,offsety;
                                                                                                                        linestart.x=(startx[j]+endx[j])/2;
                                                                                                                        linestart.y=(starty[j]+endy[j])/2;
-                                                                                                                       if(j>=6+accountcampaignchoicesmade[accountactive]){
-                                                                                                                               linestart.x=(startx[6+accountcampaignchoicesmade[accountactive]]+endx[6+accountcampaignchoicesmade[accountactive]])/2;
-                                                                                                                               linestart.y=(starty[6+accountcampaignchoicesmade[accountactive]]+endy[6+accountcampaignchoicesmade[accountactive]])/2;
+                                                                                                                       if(j>=6+accountactive->getCampaignChoicesMade()){
+                                                                                                                               linestart.x=(startx[6+accountactive->getCampaignChoicesMade()]+endx[6+accountactive->getCampaignChoicesMade()])/2;
+                                                                                                                               linestart.y=(starty[6+accountactive->getCampaignChoicesMade()]+endy[6+accountactive->getCampaignChoicesMade()])/2;
                                                                                                                        }
                                                                                                                        lineend.x=(startx[j+1]+endx[j+1])/2;
                                                                                                                        lineend.y=(starty[j+1]+endy[j+1])/2;
@@ -3727,12 +3656,12 @@ int Game::DrawGLScene(void)
                                                                                                                        Normalise(&offset);
                                                                                                                        glDisable(GL_TEXTURE_2D);                                                       
 
-                                                                                                                       if(j<6+accountcampaignchoicesmade[accountactive]){
+                                                                                                                       if(j<6+accountactive->getCampaignChoicesMade()){
                                                                                                                                glColor4f(0.5,0,0,1);
                                                                                                                                startsize=.5;
                                                                                                                                endsize=.5;
                                                                                                                        }
-                                                                                                                       if(j>=6+accountcampaignchoicesmade[accountactive]){
+                                                                                                                       if(j>=6+accountactive->getCampaignChoicesMade()){
                                                                                                                                glColor4f(1,0,0,1);
                                                                                                                                endsize=1;
                                                                                                                                startsize=.5;
@@ -3741,7 +3670,7 @@ int Game::DrawGLScene(void)
                                                                                                                        linestart+=fac*4*startsize;
                                                                                                                        lineend-=fac*4*endsize;
 
-                                                                                                                       if(!(j>7+accountcampaignchoicesmade[accountactive]+campaignchoicenum)){
+                                                                                                                       if(!(j>7+accountactive->getCampaignChoicesMade()+campaignchoicenum)){
                                                                                                                                glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
                                                                                                                                glPushMatrix();
                                                                                                                                        glBegin(GL_QUADS);
@@ -3764,8 +3693,8 @@ int Game::DrawGLScene(void)
                                                                                                                else glBindTexture( GL_TEXTURE_2D, Mapcircletexture);
                                                                                                                glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
                                                                                                                glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
-                                                                                                               if(j-7<accountcampaignchoicesmade[accountactive])glColor4f(0.5,0,0,1);
-                                                                                                               if(j-7>=accountcampaignchoicesmade[accountactive])glColor4f(1,0,0,1);
+                                                                                                               if(j-7<accountactive->getCampaignChoicesMade())glColor4f(0.5,0,0,1);
+                                                                                                               if(j-7>=accountactive->getCampaignChoicesMade())glColor4f(1,0,0,1);
                                                                                                                if(j==6)glColor4f(1,1,1,1);
                                                                                                                XYZ midpoint;
                                                                                                                float itemsize;
@@ -3773,8 +3702,8 @@ int Game::DrawGLScene(void)
                                                                                                                midpoint=0;
                                                                                                                midpoint.x=(startx[j]+endx[j])/2;
                                                                                                                midpoint.y=(starty[j]+endy[j])/2;
-                                                                                                               if(j>6&&(j-7<accountcampaignchoicesmade[accountactive]))itemsize*=.5;
-                                                                                                               if(!(j-7>accountcampaignchoicesmade[accountactive]+campaignchoicenum))
+                                                                                                               if(j>6&&(j-7<accountactive->getCampaignChoicesMade()))itemsize*=.5;
+                                                                                                               if(!(j-7>accountactive->getCampaignChoicesMade()+campaignchoicenum))
                                                                                                                {
                                                                                                                        glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
                                                                                                                        glPushMatrix();
@@ -3819,7 +3748,7 @@ int Game::DrawGLScene(void)
                                                                                        glPopMatrix();
                                                                                        glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
 
-                                                                                       if(j-7>=accountcampaignchoicesmade[accountactive]){
+                                                                                       if(j-7>=accountactive->getCampaignChoicesMade()){
                                                                                                //glColor4f(0,0,0,1);
                                                                                                //text.glPrintOutline(startx[j]+10-1.5,starty[j]-4-1.5,menustring[j],0,0.6*1.25,640,480);
                                                                                                //glColor4f(1,0,0,1);
@@ -3921,6 +3850,7 @@ int Game::DrawGLScene(void)
 
                                                                if(flashamount>0)
                                                                {
+                                                                       //printf("Flash amount: %f, delay %i\n", flashamount, flashdelay);
                                                                        if(flashamount>1)flashamount=1;
                                                                        if(flashdelay<=0)flashamount-=multiplier;
                                                                        flashdelay--;
@@ -3963,12 +3893,12 @@ int Game::DrawGLScene(void)
                multiplier=0;
        }
 
-
        //glFlush();
-       if(drawmode!=motionblurmode||mainmenu){
-
-               swap_gl_buffers();
-  }
+       if ( side == stereoRight || side == stereoCenter ) {
+               if(drawmode!=motionblurmode||mainmenu){
+                       swap_gl_buffers();
+               }
+       }
 
        //myassert(glGetError() == GL_NO_ERROR);
        glDrawBuffer(GL_BACK);