From e557f9d3439aa7bcf5a4d951c99a9c20b56cb7bc Mon Sep 17 00:00:00 2001 From: Vadim Trochinsky Date: Tue, 18 May 2010 00:29:46 +0200 Subject: [PATCH] Rewrite config file system, remove duplicate config writing code, make a better config parser --- CMakeLists.txt | 2 + Source/GameTick.cpp | 230 +--------------------------- Source/OpenGL_Windows.cpp | 306 ++------------------------------------ Source/Settings.cpp | 262 ++++++++++++++++++++++++++++++++ Source/Settings.h | 41 +++++ 5 files changed, 320 insertions(+), 521 deletions(-) create mode 100644 Source/Settings.cpp create mode 100644 Source/Settings.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d37995..4280154 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,6 +77,7 @@ set(LUGARU_SRCS ${SRCDIR}/OpenGL_Windows.cpp ${SRCDIR}/openal_wrapper.cpp ${SRCDIR}/WinInput.cpp + ${SRCDIR}/Settings.cpp ) set(LUGARU_H @@ -110,6 +111,7 @@ set(LUGARU_H ${SRCDIR}/pack_private.h ${SRCDIR}/private.h ${SRCDIR}/unpack_private.h + ${SRCDIR}/Settings.h ) if(UNIX) diff --git a/Source/GameTick.cpp b/Source/GameTick.cpp index e9ccdda..57d7722 100644 --- a/Source/GameTick.cpp +++ b/Source/GameTick.cpp @@ -30,6 +30,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include "Game.h" #include "openal_wrapper.h" +#include "Settings.h" using namespace std; @@ -2750,81 +2751,7 @@ void Game::Tick() 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.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}; @@ -3145,82 +3072,7 @@ void Game::Tick() 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.close(); - + SaveSettings(*this); if(mainmenu==3&&gameon)mainmenu=2; if(mainmenu==3&&!gameon)mainmenu=1; } @@ -3773,81 +3625,7 @@ void Game::Tick() 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.close(); + SaveSettings(*this); } } diff --git a/Source/OpenGL_Windows.cpp b/Source/OpenGL_Windows.cpp index 3752028..8542abf 100644 --- a/Source/OpenGL_Windows.cpp +++ b/Source/OpenGL_Windows.cpp @@ -63,51 +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 #include @@ -116,7 +93,7 @@ extern float volume; #include #include "gamegl.h" #include "MacCompatibility.h" - +#include "Settings.h" #ifdef WIN32 #include @@ -575,283 +552,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.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.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; } diff --git a/Source/Settings.cpp b/Source/Settings.cpp new file mode 100644 index 0000000..8261ed2 --- /dev/null +++ b/Source/Settings.cpp @@ -0,0 +1,262 @@ +#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 << 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"; + 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.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 { + 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; +} diff --git a/Source/Settings.h b/Source/Settings.h new file mode 100644 index 0000000..88b23e7 --- /dev/null +++ b/Source/Settings.h @@ -0,0 +1,41 @@ +#ifndef SETTINGS_H_ +#define SETTINGS_H_ + +#include "Game.h" + +extern float usermousesensitivity; +extern bool ismotionblur; +extern bool floatjump; +extern bool mousejump; +extern bool ambientsound; +extern int bloodtoggle; +extern bool autoslomo; +extern bool foliage; +extern bool musictoggle; +extern bool trilinear; +extern bool decals; +extern bool invertmouse; +extern float gamespeed; +extern float oldgamespeed; +extern int difficulty; +extern bool damageeffects; +extern bool texttoggle; +extern bool debugmode; +extern bool vblsync; +extern bool showpoints; +extern bool alwaysblur; +extern bool immediate; +extern bool velocityblur; +extern float volume; +extern int detail; +extern int kBitsPerPixel; +extern int kContextWidth; +extern int kContextHeight; +extern float screenwidth,screenheight; + +void DefaultSettings(Game &game); +void SaveSettings(Game &game); +bool LoadSettings(Game &game); + + +#endif -- 2.39.5