]> git.jsancho.org Git - lugaru.git/commitdiff
merge
authorVadim Trochinsky <vadim.trochinsky@gmail.com>
Thu, 20 May 2010 20:57:06 +0000 (22:57 +0200)
committerVadim Trochinsky <vadim.trochinsky@gmail.com>
Thu, 20 May 2010 20:57:06 +0000 (22:57 +0200)
1  2 
CMakeLists.txt
Source/GameTick.cpp
Source/OpenGL_Windows.cpp
Source/Settings.cpp

diff --combined CMakeLists.txt
index c56a43ad6f0ad882180d5fce573840991725e3e5,4280154a9a28e22d0f158f0c5dfd301c76b8cd29..766bd3768640f4d3152b7458b5168d6b8a442499
@@@ -77,7 -77,7 +77,8 @@@ set(LUGARU_SRC
        ${SRCDIR}/OpenGL_Windows.cpp
        ${SRCDIR}/openal_wrapper.cpp
        ${SRCDIR}/WinInput.cpp
+       ${SRCDIR}/Settings.cpp
 +      ${SRCDIR}/Stereo.cpp
  )
  
  set(LUGARU_H
        ${SRCDIR}/pack_private.h
        ${SRCDIR}/private.h
        ${SRCDIR}/unpack_private.h
+       ${SRCDIR}/Settings.h
 +      ${SRCDIR}/Stereo.h
  )
  
  if(UNIX)
diff --combined Source/GameTick.cpp
index a8d0c28dbf130b2aa06e70696d5b696fdef32806,57d7722c70cb4e141074172765dfa2c16cff07d2..8010f4f265d014dec90a00ff7afec107f47f575c
@@@ -30,6 -30,7 +30,7 @@@ Foundation, Inc., 59 Temple Place - Sui
  #include <ctime>
  #include "Game.h"
  #include "openal_wrapper.h"
+ #include "Settings.h"
  
  using namespace std;
  
@@@ -1184,7 -1185,7 +1185,7 @@@ void Screenshot (void
        char temp[1024];
        time_t  t = time(NULL);
        struct  tm *tme = localtime(&t);
-       sprintf(temp, "Screenshots\\Screenshot_%04d_%02d_%02d--%02d_%02d_%02d.png", tme->tm_year + 1900, tme->tm_mon + 1, tme->tm_mday, tme->tm_hour, tme->tm_min, tme->tm_sec);
+       sprintf(temp, "Screenshots/Screenshot_%04d_%02d_%02d--%02d_%02d_%02d.png", tme->tm_year + 1900, tme->tm_mon + 1, tme->tm_mday, tme->tm_hour, tme->tm_min, tme->tm_sec);
  
        #if defined(_WIN32)
        mkdir("Screenshots");
@@@ -2608,43 -2609,6 +2609,43 @@@ void  Game::Tick(
  
  
        static bool mainmenutogglekeydown;
 +
 +      if (IsKeyDown(theKeyMap, MAC_F6_KEY) && !freezetogglekeydown) {
 +              if (IsKeyDown(theKeyMap, MAC_SHIFT_KEY)) {
 +                      stereoreverse=true;
 +              } else {
 +                      stereoreverse=false;
 +              }
 +
 +              if (stereoreverse) {
 +                      printf("Stereo reversed\n");
 +              } else {
 +                      printf("Stereo unreversed\n");
 +              }
 +              freezetogglekeydown=1;
 +      }
 +
 +      if (IsKeyDown(theKeyMap, MAC_F7_KEY)) {
 +              if (IsKeyDown(theKeyMap, MAC_SHIFT_KEY)) {
 +                      stereoseparation -= 0.001;
 +              } else {
 +                      stereoseparation -= 0.010;
 +              }
 +
 +              printf("Stereo decreased increased to %f\n", stereoseparation);
 +      }
 +
 +      if (IsKeyDown(theKeyMap, MAC_F8_KEY)) {
 +              if (IsKeyDown(theKeyMap, MAC_SHIFT_KEY)) {
 +                      stereoseparation += 0.001;
 +              } else {
 +                      stereoseparation += 0.010;
 +              }
 +
 +              printf("Stereo separation increased to %f\n", stereoseparation);
 +      }
 +
 +
        if(!console){
                if(mainmenu&&endgame==1)mainmenu=10;
                if(IsKeyDown(theKeyMap, MAC_ESCAPE_KEY)&&!mainmenutogglekeydown&&(mainmenu==7&&entername)){
                                if(newscreenwidth<0)newscreenwidth=screenwidth;
                                if(newscreenheight<0)newscreenheight=screenheight;
  
-                               ofstream opstream(ConvertFileName(":Data:config.txt", "w"));
-                               opstream << "Screenwidth:\n";
-                               opstream << newscreenwidth;
-                               opstream << "\nScreenheight:\n";
-                               opstream << newscreenheight;
-                               opstream << "\nMouse sensitivity:\n";
-                               opstream << usermousesensitivity;
-                               opstream << "\nBlur(0,1):\n";
-                               opstream << ismotionblur;
-                               opstream << "\nOverall Detail(0,1,2) higher=better:\n";
-                               opstream << newdetail;
-                               opstream << "\nFloating jump:\n";
-                               opstream << floatjump;
-                               opstream << "\nMouse jump:\n";
-                               opstream << mousejump;
-                               opstream << "\nAmbient sound:\n";
-                               opstream << ambientsound;
-                               opstream << "\nBlood (0,1,2):\n";
-                               opstream << bloodtoggle;
-                               opstream << "\nAuto slomo:\n";
-                               opstream << autoslomo;
-                               opstream << "\nFoliage:\n";
-                               opstream << foliage;
-                               opstream << "\nMusic:\n";
-                               opstream << musictoggle;
-                               opstream << "\nTrilinear:\n";
-                               opstream << trilinear;
-                               opstream << "\nDecals(shadows,blood puddles,etc):\n";
-                               opstream << decals;
-                               opstream << "\nInvert mouse:\n";
-                               opstream << invertmouse;
-                               opstream << "\nGamespeed:\n";
-                               if(oldgamespeed==0)oldgamespeed=1;
-                               opstream << oldgamespeed;
-                               opstream << "\nDifficulty(0,1,2) higher=harder:\n";
-                               opstream << difficulty;
-                               opstream << "\nDamage effects(blackout, doublevision):\n";
-                               opstream << damageeffects;
-                               opstream << "\nText:\n";
-                               opstream << texttoggle;
-                               opstream << "\nDebug:\n";
-                               opstream << debugmode;
-                               opstream << "\nVBL Sync:\n";
-                               opstream << vblsync;
-                               opstream << "\nShow Points:\n";
-                               opstream << showpoints;
-                               opstream << "\nAlways Blur:\n";
-                               opstream << alwaysblur;
-                               opstream << "\nImmediate mode (turn on on G5):\n";
-                               opstream << immediate;
-                               opstream << "\nVelocity blur:\n";
-                               opstream << velocityblur;
-                           opstream << "\nVolume:\n";
-                       opstream << volume;
-                               opstream << "\nForward key:\n";
-                               opstream << KeyToChar(forwardkey);
-                               opstream << "\nBack key:\n";
-                               opstream << KeyToChar(backkey);
-                               opstream << "\nLeft key:\n";
-                               opstream << KeyToChar(leftkey);
-                               opstream << "\nRight key:\n";
-                               opstream << KeyToChar(rightkey);
-                               opstream << "\nJump key:\n";
-                               opstream << KeyToChar(jumpkey);
-                               opstream << "\nCrouch key:\n";
-                               opstream << KeyToChar(crouchkey);
-                               opstream << "\nDraw key:\n";
-                               opstream << KeyToChar(drawkey);
-                               opstream << "\nThrow key:\n";
-                               opstream << KeyToChar(throwkey);
-                               opstream << "\nAttack key:\n";
-                               opstream << KeyToChar(attackkey);
-                               opstream << "\nChat key:\n";
-                               opstream << KeyToChar(chatkey);
-                               opstream << "\nStereoMode:\n";
-                               opstream << stereomode;
-                               opstream << "\nStereoSeparation:\n";
-                               opstream << stereoseparation;
-                               opstream << "\nStereoReverse:\n";
-                               opstream << stereoreverse;
-                               opstream.close();
+                               SaveSettings(*this);
                        }
                        if(mainmenu==4||mainmenu==5||mainmenu==6||mainmenu==7||mainmenu==9||mainmenu==13||mainmenu==10||mainmenu==11||mainmenu==100){
                                float gLoc[3]={0,0,0};
                                if(newscreenheight<0)newscreenheight=screenheight;
  
  
-                               ofstream opstream(ConvertFileName(":Data:config.txt", "w"));
-                               opstream << "Screenwidth:\n";
-                               opstream << newscreenwidth;
-                               opstream << "\nScreenheight:\n";
-                               opstream << newscreenheight;
-                               opstream << "\nMouse sensitivity:\n";
-                               opstream << usermousesensitivity;
-                               opstream << "\nBlur(0,1):\n";
-                               opstream << ismotionblur;
-                               opstream << "\nOverall Detail(0,1,2) higher=better:\n";
-                               opstream << newdetail;
-                               opstream << "\nFloating jump:\n";
-                               opstream << floatjump;
-                               opstream << "\nMouse jump:\n";
-                               opstream << mousejump;
-                               opstream << "\nAmbient sound:\n";
-                               opstream << ambientsound;
-                               opstream << "\nBlood (0,1,2):\n";
-                               opstream << bloodtoggle;
-                               opstream << "\nAuto slomo:\n";
-                               opstream << autoslomo;
-                               opstream << "\nFoliage:\n";
-                               opstream << foliage;
-                               opstream << "\nMusic:\n";
-                               opstream << musictoggle;
-                               opstream << "\nTrilinear:\n";
-                               opstream << trilinear;
-                               opstream << "\nDecals(shadows,blood puddles,etc):\n";
-                               opstream << decals;
-                               opstream << "\nInvert mouse:\n";
-                               opstream << invertmouse;
-                               opstream << "\nGamespeed:\n";
-                               if(oldgamespeed==0)oldgamespeed=1;
-                               opstream << oldgamespeed;
-                               opstream << "\nDifficulty(0,1,2) higher=harder:\n";
-                               opstream << difficulty;
-                               opstream << "\nDamage effects(blackout, doublevision):\n";
-                               opstream << damageeffects;
-                               opstream << "\nText:\n";
-                               opstream << texttoggle;
-                               opstream << "\nDebug:\n";
-                               opstream << debugmode;
-                               opstream << "\nVBL Sync:\n";
-                               opstream << vblsync;
-                               opstream << "\nShow Points:\n";
-                               opstream << showpoints;
-                               opstream << "\nAlways Blur:\n";
-                               opstream << alwaysblur;
-                               opstream << "\nImmediate mode (turn on on G5):\n";
-                               opstream << immediate;
-                               opstream << "\nVelocity blur:\n";
-                               opstream << velocityblur;
-                           opstream << "\nVolume:\n";
-                       opstream << volume;
-                               opstream << "\nForward key:\n";
-                               opstream << KeyToChar(forwardkey);
-                               opstream << "\nBack key:\n";
-                               opstream << KeyToChar(backkey);
-                               opstream << "\nLeft key:\n";
-                               opstream << KeyToChar(leftkey);
-                               opstream << "\nRight key:\n";
-                               opstream << KeyToChar(rightkey);
-                               opstream << "\nJump key:\n";
-                               opstream << KeyToChar(jumpkey);
-                               opstream << "\nCrouch key:\n";
-                               opstream << KeyToChar(crouchkey);
-                               opstream << "\nDraw key:\n";
-                               opstream << KeyToChar(drawkey);
-                               opstream << "\nThrow key:\n";
-                               opstream << KeyToChar(throwkey);
-                               opstream << "\nAttack key:\n";
-                               opstream << KeyToChar(attackkey);
-                               opstream << "\nChat key:\n";
-                               opstream << KeyToChar(chatkey);
-                               opstream << "\nStereoMode:\n";
-                               opstream << stereomode;
-                               opstream << "\nStereoSeparation:\n";
-                               opstream << stereoseparation;
-                               opstream << "\nStereoReverse:\n";
-                               opstream << stereoreverse;
-                               opstream.close();
+                               SaveSettings(*this);
                                if(mainmenu==3&&gameon)mainmenu=2;
                                if(mainmenu==3&&!gameon)mainmenu=1;
                        }
                                if(newscreenwidth<0)newscreenwidth=screenwidth;
                                if(newscreenheight<0)newscreenheight=screenheight;
  
-                               ofstream opstream(ConvertFileName(":Data:config.txt", "w"));
-                               opstream << "Screenwidth:\n";
-                               opstream << newscreenwidth;
-                               opstream << "\nScreenheight:\n";
-                               opstream << newscreenheight;
-                               opstream << "\nMouse sensitivity:\n";
-                               opstream << usermousesensitivity;
-                               opstream << "\nBlur(0,1):\n";
-                               opstream << ismotionblur;
-                               opstream << "\nOverall Detail(0,1,2) higher=better:\n";
-                               opstream << newdetail;
-                               opstream << "\nFloating jump:\n";
-                               opstream << floatjump;
-                               opstream << "\nMouse jump:\n";
-                               opstream << mousejump;
-                               opstream << "\nAmbient sound:\n";
-                               opstream << ambientsound;
-                               opstream << "\nBlood (0,1,2):\n";
-                               opstream << bloodtoggle;
-                               opstream << "\nAuto slomo:\n";
-                               opstream << autoslomo;
-                               opstream << "\nFoliage:\n";
-                               opstream << foliage;
-                               opstream << "\nMusic:\n";
-                               opstream << musictoggle;
-                               opstream << "\nTrilinear:\n";
-                               opstream << trilinear;
-                               opstream << "\nDecals(shadows,blood puddles,etc):\n";
-                               opstream << decals;
-                               opstream << "\nInvert mouse:\n";
-                               opstream << invertmouse;
-                               opstream << "\nGamespeed:\n";
-                               if(oldgamespeed==0)oldgamespeed=1;
-                               opstream << oldgamespeed;
-                               opstream << "\nDifficulty(0,1,2) higher=harder:\n";
-                               opstream << difficulty;
-                               opstream << "\nDamage effects(blackout, doublevision):\n";
-                               opstream << damageeffects;
-                               opstream << "\nText:\n";
-                               opstream << texttoggle;
-                               opstream << "\nDebug:\n";
-                               opstream << debugmode;
-                               opstream << "\nVBL Sync:\n";
-                               opstream << vblsync;
-                               opstream << "\nShow Points:\n";
-                               opstream << showpoints;
-                               opstream << "\nAlways Blur:\n";
-                               opstream << alwaysblur;
-                               opstream << "\nImmediate mode (turn on on G5):\n";
-                               opstream << immediate;
-                               opstream << "\nVelocity blur:\n";
-                               opstream << velocityblur;
-                           opstream << "\nVolume:\n";
-                       opstream << volume;
-                               opstream << "\nForward key:\n";
-                               opstream << KeyToChar(forwardkey);
-                               opstream << "\nBack key:\n";
-                               opstream << KeyToChar(backkey);
-                               opstream << "\nLeft key:\n";
-                               opstream << KeyToChar(leftkey);
-                               opstream << "\nRight key:\n";
-                               opstream << KeyToChar(rightkey);
-                               opstream << "\nJump key:\n";
-                               opstream << KeyToChar(jumpkey);
-                               opstream << "\nCrouch key:\n";
-                               opstream << KeyToChar(crouchkey);
-                               opstream << "\nDraw key:\n";
-                               opstream << KeyToChar(drawkey);
-                               opstream << "\nThrow key:\n";
-                               opstream << KeyToChar(throwkey);
-                               opstream << "\nAttack key:\n";
-                               opstream << KeyToChar(attackkey);
-                               opstream << "\nChat key:\n";
-                               opstream << KeyToChar(chatkey);
-                               opstream << "\nStereoMode:\n";
-                               opstream << stereomode;
-                               opstream << "\nStereoSeparation:\n";
-                               opstream << stereoseparation;
-                               opstream << "\nStereoReverse:\n";
-                               opstream << stereoreverse;
-                               opstream.close();
+                               SaveSettings(*this);
                        }
                }
  
                                opstream << KeyToChar(attackkey);
                                opstream << "\nChat key:\n";
                                opstream << KeyToChar(chatkey);
 +                              opstream << "\nStereoMode:\n";
 +                              opstream << stereomode;
 +                              opstream << "\nStereoSeparation:\n";
 +                              opstream << stereoseparation;
 +                              opstream << "\nStereoReverse:\n";
 +                              opstream << stereoreverse;
                                opstream.close();
                        }
                }
index d4251fca6af1c3a8089ec13a33b9f1e6e5509c4a,8542abff87f700e0e76a190c4142c4708fc149d9..5759ddc15fa40d270e876cca271091b7f05df98f
@@@ -63,51 -63,28 +63,28 @@@ static bool save_png(const char * fname
  
  extern bool buttons[3];
  extern float multiplier;
- extern float screenwidth,screenheight;
  extern float sps;
  extern float realmultiplier;
  extern int slomo;
- extern bool ismotionblur;
- extern float usermousesensitivity;
- extern int detail;
- extern bool floatjump;
  extern bool cellophane;
  // MODIFIED GWC
  //extern int terraindetail;
  //extern int texdetail;
  extern float terraindetail;
  extern float texdetail;
- extern int bloodtoggle;
  extern bool osx;
- extern bool autoslomo;
- extern bool foliage;
- extern bool musictoggle;
- extern bool trilinear;
- extern float gamespeed;
- extern int difficulty;
- extern bool damageeffects;
  extern int numplayers;
- extern bool decals;
- extern bool invertmouse;
- extern bool texttoggle;
- extern bool ambientsound;
- extern bool mousejump;
  extern bool freeze;
  extern Person player[maxplayers];
- extern bool vblsync;
  extern bool stillloading;
- extern bool showpoints;
- extern bool alwaysblur;
- extern bool immediate;
- extern bool velocityblur;
- extern bool debugmode;
  extern int mainmenu;
  /*extern*/ bool gameFocused;
- extern int kBitsPerPixel;
  extern float slomospeed;
  extern float slomofreq;
- extern float oldgamespeed;
- extern float volume;
  
  #include <math.h>
  #include <stdio.h>
  #include <iostream>
  #include "gamegl.h"
  #include "MacCompatibility.h"
+ #include "Settings.h"
  
  #ifdef WIN32
  #include <shellapi.h>
@@@ -320,12 -297,7 +297,12 @@@ void ShutdownDSp (
  
  void DrawGL (Game & game)
  {
 -      game.DrawGLScene();
 +      if ( stereomode == stereoNone ) {
 +              game.DrawGLScene(stereoCenter);
 +      } else {
 +              game.DrawGLScene(stereoLeft);
 +              game.DrawGLScene(stereoRight);
 +      }
  }
  
  
@@@ -580,301 -552,22 +557,22 @@@ Boolean SetUp (Game & game
        randSeed = UpTime().lo;
  
        osx = 0;
-       ifstream ipstream(ConvertFileName(":Data:config.txt"), std::ios::in /*| std::ios::nocreate*/);
-       detail=1;
-       ismotionblur=0;
-       usermousesensitivity=1;
-       kContextWidth=640;
-       kContextHeight=480;
-       kBitsPerPixel = 32;
-       floatjump=0;
        cellophane=0;
        texdetail=4;
-       autoslomo=1;
-       decals=1;
-       invertmouse=0;
-       bloodtoggle=0;
        terraindetail=2;
-       foliage=1;
-       musictoggle=1;
-       trilinear=1;
-       gamespeed=1;
-       difficulty=1;
-       damageeffects=0;
-       texttoggle=1;
-       alwaysblur=0;
-       showpoints=0;
-       immediate=0;
-       velocityblur=0;
        slomospeed=0.25;
        slomofreq=8012;
-       volume = 0.8f;
-       game.crouchkey=MAC_SHIFT_KEY;
-       game.jumpkey=MAC_SPACE_KEY;
-       game.leftkey=MAC_A_KEY;
-       game.forwardkey=MAC_W_KEY;
-       game.backkey=MAC_S_KEY;
-       game.rightkey=MAC_D_KEY;
-       game.drawkey=MAC_E_KEY;
-       game.throwkey=MAC_Q_KEY;
-       game.attackkey=MAC_MOUSEBUTTON1;
-       game.chatkey=MAC_T_KEY;
        numplayers=1;
-       ambientsound=1;
-       vblsync=0;
-       debugmode=0;
+       
+       DefaultSettings(game);
  
        selectDetail(kContextWidth, kContextHeight, kBitsPerPixel, detail);
  
-       if(!ipstream) {
-               ofstream opstream(ConvertFileName(":Data:config.txt", "w"));
-               opstream << "Screenwidth:\n";
-               opstream << kContextWidth;
-               opstream << "\nScreenheight:\n";
-               opstream << kContextHeight;
-               opstream << "\nMouse sensitivity:\n";
-               opstream << usermousesensitivity;
-               opstream << "\nBlur(0,1):\n";
-               opstream << ismotionblur;
-               opstream << "\nOverall Detail(0,1,2) higher=better:\n";
-               opstream << detail;
-               opstream << "\nFloating jump:\n";
-               opstream << floatjump;
-               opstream << "\nMouse jump:\n";
-               opstream << mousejump;
-               opstream << "\nAmbient sound:\n";
-               opstream << ambientsound;
-               opstream << "\nBlood (0,1,2):\n";
-               opstream << bloodtoggle;
-               opstream << "\nAuto slomo:\n";
-               opstream << autoslomo;
-               opstream << "\nFoliage:\n";
-               opstream << foliage;
-               opstream << "\nMusic:\n";
-               opstream << musictoggle;
-               opstream << "\nTrilinear:\n";
-               opstream << trilinear;
-               opstream << "\nDecals(shadows,blood puddles,etc):\n";
-               opstream << decals;
-               opstream << "\nInvert mouse:\n";
-               opstream << invertmouse;
-               opstream << "\nGamespeed:\n";
-               opstream << gamespeed;
-               opstream << "\nDifficulty(0,1,2) higher=harder:\n";
-               opstream << difficulty;
-               opstream << "\nDamage effects(blackout, doublevision):\n";
-               opstream << damageeffects;
-               opstream << "\nText:\n";
-               opstream << texttoggle;
-               opstream << "\nDebug:\n";
-               opstream << debugmode;
-               opstream << "\nVBL Sync:\n";
-               opstream << vblsync;
-               opstream << "\nShow Points:\n";
-               opstream << showpoints;
-               opstream << "\nAlways Blur:\n";
-               opstream << alwaysblur;
-               opstream << "\nImmediate mode (turn on on G5):\n";
-               opstream << immediate;
-               opstream << "\nVelocity blur:\n";
-               opstream << velocityblur;
-               opstream << "\nVolume:\n";
-               opstream << volume;
-               opstream << "\nForward key:\n";
-               opstream << KeyToChar(game.forwardkey);
-               opstream << "\nBack key:\n";
-               opstream << KeyToChar(game.backkey);
-               opstream << "\nLeft key:\n";
-               opstream << KeyToChar(game.leftkey);
-               opstream << "\nRight key:\n";
-               opstream << KeyToChar(game.rightkey);
-               opstream << "\nJump key:\n";
-               opstream << KeyToChar(game.jumpkey);
-               opstream << "\nCrouch key:\n";
-               opstream << KeyToChar(game.crouchkey);
-               opstream << "\nDraw key:\n";
-               opstream << KeyToChar(game.drawkey);
-               opstream << "\nThrow key:\n";
-               opstream << KeyToChar(game.throwkey);
-               opstream << "\nAttack key:\n";
-               opstream << KeyToChar(game.attackkey);
-               opstream << "\nChat key:\n";
-               opstream << KeyToChar(game.chatkey);
-               opstream << "\nStereoMode:\n";
-               opstream << stereomode;
-               opstream << "\nStereoSeparation:\n";
-               opstream << stereoseparation;
-               opstream << "\nStereoReverse:\n";
-               opstream << stereoreverse;
-               opstream.close();
-       }
-       if(ipstream){
-               int i;
-               ipstream.ignore(256,'\n');
-               ipstream >> kContextWidth;
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> kContextHeight;
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> usermousesensitivity;
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               ismotionblur = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> detail;
-               if(detail!=0)kBitsPerPixel=32;
-               else kBitsPerPixel=16;
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               floatjump = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               mousejump = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               ambientsound = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> bloodtoggle;
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               autoslomo = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               foliage = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               musictoggle = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               trilinear = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               decals = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               invertmouse = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> gamespeed;
-               oldgamespeed=gamespeed;
-               if(oldgamespeed==0){
-                       gamespeed=1;
-                       oldgamespeed=1;
-               }
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> difficulty;
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               damageeffects = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               texttoggle = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               debugmode = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               vblsync = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               showpoints = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               alwaysblur = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               immediate = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> i;
-               velocityblur = (i != 0);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n'); 
-               ipstream >> volume;
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n'); 
-               ipstream >> string;
-               game.forwardkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.backkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.leftkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.rightkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.jumpkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.crouchkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.drawkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.throwkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.attackkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               ipstream >> string;
-               game.chatkey=CharToKey(string);
-               ipstream.ignore(256,'\n');
-               ipstream.ignore(256,'\n');
-               if (!ipstream.eof()) {
-                       ipstream >> i;
-                       stereomode = (StereoMode)i;
-                       ipstream.ignore(256,'\n');
-                       ipstream.ignore(256,'\n');
-                       ipstream >> stereoseparation;
-                       ipstream.ignore(256,'\n');
-                       ipstream.ignore(256,'\n');
-                       ipstream >> stereoreverse;
-               }
-               ipstream.close();
-               if(detail>2)detail=2;
-               if(detail<0)detail=0;
-               if(screenwidth<0)screenwidth=640;
-               if(screenheight<0)screenheight=480;
+       if(!LoadSettings(game)) {
+               fprintf(stderr, "Failed to load config, creating default\n");
+               SaveSettings(game);
        }
+       
        if(kBitsPerPixel!=32&&kBitsPerPixel!=16){
                kBitsPerPixel=16;
        }
      SDL_ShowCursor(0);
  
      SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
 -
 +    SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1);
 +    
      if (SDL_SetVideoMode(kContextWidth, kContextHeight, 0, sdlflags) == NULL)
      {
          fprintf(stderr, "SDL_SetVideoMode() failed: %s\n", SDL_GetError());
        glDisable( GL_FOG);
        glDisable( GL_LIGHTING);
        glDisable( GL_LOGIC_OP);
 -      glDisable( GL_STENCIL_TEST);
        glDisable( GL_TEXTURE_1D);
        glDisable( GL_TEXTURE_2D);
        glPixelTransferi( GL_MAP_COLOR, GL_FALSE);
        game.newscreenwidth=screenwidth;
        game.newscreenheight=screenheight;
  
 +      if ( CanInitStereo(stereomode) ) {
 +              InitStereo(stereomode);
 +      } else {
 +              fprintf(stderr, "Failed to initialize stereo, disabling.\n");
 +              stereomode = stereoNone;
 +      }
 +
        game.InitGame();
  
        return true;
diff --combined Source/Settings.cpp
index 0000000000000000000000000000000000000000,34cf99fff1ae1ded490e3ee2b8722c2813eeb11e..754c2ac4e316ec2c0a995dcebfd741227ba3009d
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,262 +1,277 @@@
+ #include "Settings.h"
+ #include "Game.h"
+ void DefaultSettings(Game &game) {
+       detail=1;
+       ismotionblur=0;
+       usermousesensitivity=1;
+       kContextWidth=640;
+       kContextHeight=480;
+       kBitsPerPixel = 32;
+       floatjump=0;
+       autoslomo=1;
+       decals=1;
+       invertmouse=0;
+       bloodtoggle=0;
+       foliage=1;
+       musictoggle=1;
+       trilinear=1;
+       gamespeed=1;
+       difficulty=1;
+       damageeffects=0;
+       texttoggle=1;
+       alwaysblur=0;
+       showpoints=0;
+       immediate=0;
+       velocityblur=0;
+       volume = 0.8f;
+       ambientsound=1;
+       vblsync=0;
+       debugmode=0;
+       
+       game.crouchkey=MAC_SHIFT_KEY;
+       game.jumpkey=MAC_SPACE_KEY;
+       game.leftkey=MAC_A_KEY;
+       game.forwardkey=MAC_W_KEY;
+       game.backkey=MAC_S_KEY;
+       game.rightkey=MAC_D_KEY;
+       game.drawkey=MAC_E_KEY;
+       game.throwkey=MAC_Q_KEY;
+       game.attackkey=MAC_MOUSEBUTTON1;
+       game.chatkey=MAC_T_KEY;
+ }
+ void SaveSettings(Game &game) {
+       ofstream opstream(ConvertFileName(":Data:config.txt", "w"));
+       opstream << "Screenwidth:\n";
+       opstream << game.newscreenwidth;
+       opstream << "\nScreenheight:\n";
+       opstream << game.newscreenheight;
+       opstream << "\nMouse sensitivity:\n";
+       opstream << usermousesensitivity;
+       opstream << "\nBlur(0,1):\n";
+       opstream << ismotionblur;
+       opstream << "\nOverall Detail(0,1,2) higher=better:\n";
+       opstream << game.newdetail;
+       opstream << "\nFloating jump:\n";
+       opstream << floatjump;
+       opstream << "\nMouse jump:\n";
+       opstream << mousejump;
+       opstream << "\nAmbient sound:\n";
+       opstream << ambientsound;
+       opstream << "\nBlood (0,1,2):\n";
+       opstream << bloodtoggle;
+       opstream << "\nAuto slomo:\n";
+       opstream << autoslomo;
+       opstream << "\nFoliage:\n";
+       opstream << foliage;
+       opstream << "\nMusic:\n";
+       opstream << musictoggle;
+       opstream << "\nTrilinear:\n";
+       opstream << trilinear;
+       opstream << "\nDecals(shadows,blood puddles,etc):\n";
+       opstream << decals;
+       opstream << "\nInvert mouse:\n";
+       opstream << invertmouse;
+       opstream << "\nGamespeed:\n";
+       if(oldgamespeed==0)oldgamespeed=1;
+       opstream << oldgamespeed;
+       opstream << "\nDifficulty(0,1,2) higher=harder:\n";
+       opstream << difficulty;
+       opstream << "\nDamage effects(blackout, doublevision):\n";
+       opstream << damageeffects;
+       opstream << "\nText:\n";
+       opstream << texttoggle;
+       opstream << "\nDebug:\n";
+       opstream << debugmode;
+       opstream << "\nVBL Sync:\n";
+       opstream << vblsync;
+       opstream << "\nShow Points:\n";
+       opstream << showpoints;
+       opstream << "\nAlways Blur:\n";
+       opstream << alwaysblur;
+       opstream << "\nImmediate mode (turn on on G5):\n";
+       opstream << immediate;
+       opstream << "\nVelocity blur:\n";
+       opstream << velocityblur;
+       opstream << "\nVolume:\n";
+       opstream << volume;
+       opstream << "\nForward key:\n";
+       opstream << KeyToChar(game.forwardkey);
+       opstream << "\nBack key:\n";
+       opstream << KeyToChar(game.backkey);
+       opstream << "\nLeft key:\n";
+       opstream << KeyToChar(game.leftkey);
+       opstream << "\nRight key:\n";
+       opstream << KeyToChar(game.rightkey);
+       opstream << "\nJump key:\n";
+       opstream << KeyToChar(game.jumpkey);
+       opstream << "\nCrouch key:\n";
+       opstream << KeyToChar(game.crouchkey);
+       opstream << "\nDraw key:\n";
+       opstream << KeyToChar(game.drawkey);
+       opstream << "\nThrow key:\n";
+       opstream << KeyToChar(game.throwkey);
+       opstream << "\nAttack key:\n";
+       opstream << KeyToChar(game.attackkey);
+       opstream << "\nChat key:\n";
+       opstream << KeyToChar(game.chatkey);
++      opstream << "\nStereoMode:\n";
++      opstream << stereomode;
++      opstream << "\nStereoSeparation:\n";
++      opstream << stereoseparation;
++      opstream << "\nStereoReverse:\n";
++      opstream << stereoreverse;
++      
+       opstream.close();
+ }
+ bool LoadSettings(Game &game) {
+       ifstream ipstream(ConvertFileName(":Data:config.txt"), std::ios::in);
+       if ( !ipstream || ipstream.fail() ) {
+               printf("Config file not found\n");
+               return false;
+       }
+       char setting[256];
+       char string[256];
+       
+       printf("Loading config\n");
+       while(!ipstream.eof()) {
+               ipstream.getline( setting, sizeof(setting) );
+               
+               // skip blank lines
+               // assume lines starting with spaces are all blank
+               if ( strlen(setting) == 0 || setting[0] == ' ' || setting[0] == '\t') continue;
+               if ( ipstream.eof() || ipstream.fail() ) {
+                       fprintf(stderr, "Error reading config file: Got setting name '%s', but value can't be read\n", setting);
+                       ipstream.close();                       
+                       return false;
+               }
+               
+       
+               if ( !strncmp(setting, "Screenwidth", 11) ) {
+                       ipstream >> kContextWidth;
+               } else if ( !strncmp(setting, "Screenheight", 12) ) {
+                       ipstream >> kContextHeight;
+               } else if ( !strncmp(setting, "Mouse sensitivity", 17) ) {
+                       ipstream >> usermousesensitivity;
+               } else if ( !strncmp(setting, "Blur", 4) ) {
+                       ipstream >> ismotionblur;
+               } else if ( !strncmp(setting, "Overall Detail", 14) ) {
+                       ipstream >> detail;
+                       if(detail!=0)kBitsPerPixel=32;
+                       else kBitsPerPixel=16;
+               } else if ( !strncmp(setting, "Floating jump", 13) ) {
+                       ipstream >> floatjump;
+               } else if ( !strncmp(setting, "Mouse jump", 10) ) {
+                       ipstream >> mousejump;
+               } else if ( !strncmp(setting, "Ambient sound", 13) ) {
+                       ipstream >> ambientsound;
+               } else if ( !strncmp(setting, "Blood ", 6) ) {
+                       ipstream >> bloodtoggle;
+               } else if ( !strncmp(setting, "Auto slomo", 10) ) {
+                       ipstream >> autoslomo;
+               } else if ( !strncmp(setting, "Foliage", 7) ) {
+                       ipstream >> foliage;
+               } else if ( !strncmp(setting, "Music", 5) ) {
+                       ipstream >> musictoggle;
+               } else if ( !strncmp(setting, "Trilinear", 9) ) {
+                       ipstream >> trilinear;
+               } else if ( !strncmp(setting, "Decals", 6) ) {
+                       ipstream >> decals;
+               } else if ( !strncmp(setting, "Invert mouse", 12) ) {
+                       ipstream >> invertmouse;
+               } else if ( !strncmp(setting, "Gamespeed", 9) ) {
+                       ipstream >> gamespeed;
+                       oldgamespeed=gamespeed;
+                       if(oldgamespeed==0){
+                               gamespeed=1;
+                               oldgamespeed=1;
+                       }
+               } else if ( !strncmp(setting, "Difficulty", 10) ) {
+                       ipstream >> difficulty;
+               } else if ( !strncmp(setting, "Damage effects", 14) ) {
+                       ipstream >> damageeffects;
+               } else if ( !strncmp(setting, "Text", 4) ) {
+                       ipstream >> texttoggle;
+               } else if ( !strncmp(setting, "Debug", 5) ) {
+                       ipstream >> debugmode;
+               } else if ( !strncmp(setting, "VBL Sync", 8) ) {
+                       ipstream >> vblsync;
+               } else if ( !strncmp(setting, "Show Points", 11) ) {
+                       ipstream >> showpoints;
+               } else if ( !strncmp(setting, "Always Blur", 11) ) {
+                       ipstream >> alwaysblur;
+               } else if ( !strncmp(setting, "Immediate mode ", 15) ) {
+                       ipstream >> immediate;
+               } else if ( !strncmp(setting, "Velocity blur", 13) ) {
+                       ipstream >> velocityblur;
+               } else if ( !strncmp(setting, "Volume", 6) ) {
+                       ipstream >> volume;
+               } else if ( !strncmp(setting, "Forward key", 11) ) {
+                       ipstream >> string;
+                       game.forwardkey = CharToKey(string);
+               } else if ( !strncmp(setting, "Back key", 8) ) {
+                       ipstream >> string;
+                       game.backkey = CharToKey(string);
+               } else if ( !strncmp(setting, "Left key", 8) ) {
+                       ipstream >> string;
+                       game.leftkey = CharToKey(string);
+               } else if ( !strncmp(setting, "Right key", 9) ) {
+                       ipstream >> string;
+                       game.rightkey = CharToKey(string);
+               } else if ( !strncmp(setting, "Jump key", 8) ) {
+                       ipstream >> string;
+                       game.jumpkey = CharToKey(string);
+               } else if ( !strncmp(setting, "Crouch key", 10) ) {
+                       ipstream >> string;
+                       game.crouchkey = CharToKey(string);
+               } else if ( !strncmp(setting, "Draw key", 8) ) {
+                       ipstream >> string;
+                       game.drawkey = CharToKey(string);
+               } else if ( !strncmp(setting, "Throw key", 9) ) {
+                       ipstream >> string;
+                       game.throwkey = CharToKey(string);
+               } else if ( !strncmp(setting, "Attack key", 10) ) {
+                       ipstream >> string;
+                       game.attackkey = CharToKey(string);
+               } else if ( !strncmp(setting, "Chat key", 8) ) {
+                       ipstream >> string;
+                       game.chatkey = CharToKey(string);
++              } else if ( !strncmp(setting, "StereoMode", 10) ) {
++                      int i;
++                      ipstream >> i;
++                      stereomode = (StereoMode)i;
++              } else if ( !strncmp(setting, "StereoSeparation", 16) ) {
++                      ipstream >> stereoseparation;
++              } else if ( !strncmp(setting, "StereoReverse", 13) ) {
++                      ipstream >> stereoreverse;
+               } else {
+                       ipstream >> string;
+                       fprintf(stderr, "Unknown config option '%s' with value '%s'. Ignoring.\n", setting, string);
+               }
+               
+               if ( ipstream.fail() ) {
+                       fprintf(stderr, "Error reading config file: EOF reached when trying to read value for setting '%s'.\n", setting);
+                       ipstream.close();                       
+                       return false;
+               }
+               
+               if ( ipstream.bad() ) {
+                       fprintf(stderr, "Error reading config file: Failed to read value for setting '%s'.\n", setting);
+                       ipstream.close();
+                       return false;
+               }
+       }
+       
+       ipstream.close();
+       
+       if(detail>2)detail=2;
+       if(detail<0)detail=0;
+       if(screenwidth<0)screenwidth=640;
+       if(screenheight<0)screenheight=480;
+       
+       return true;
+ }