]> git.jsancho.org Git - lugaru.git/blob - Source/Settings.cpp
7b5854f461c7586004c4de7fdd07ae11789995f7
[lugaru.git] / Source / Settings.cpp
1 #include "Settings.h"
2 #include "Game.h"
3 #include "Input.h"
4
5 using namespace Game;
6
7 void DefaultSettings() {
8         detail=1;
9         ismotionblur=0;
10         usermousesensitivity=1;
11         newscreenwidth=kContextWidth=640;
12         newscreenheight=kContextHeight=480;
13         kBitsPerPixel = 32;
14         floatjump=0;
15         autoslomo=1;
16         decals=1;
17         invertmouse=0;
18         bloodtoggle=0;
19         foliage=1;
20         musictoggle=1;
21         trilinear=1;
22         gamespeed=1;
23         difficulty=1;
24         damageeffects=0;
25         texttoggle=1;
26         alwaysblur=0;
27         showpoints=0;
28         showdamagebar=0;
29         immediate=0;
30         velocityblur=0;
31         volume = 0.8f;
32         ambientsound=1;
33         vblsync=1;
34         debugmode=0;
35         
36         crouchkey=SDLK_LSHIFT;
37         jumpkey=SDLK_SPACE;
38         leftkey=SDLK_a;
39         forwardkey=SDLK_w;
40         backkey=SDLK_s;
41         rightkey=SDLK_d;
42         drawkey=SDLK_e;
43         throwkey=SDLK_q;
44         attackkey=MOUSEBUTTON1;
45         consolekey=SDLK_BACKQUOTE;
46         chatkey=SDLK_t;
47 }
48
49 void SaveSettings() {
50         if(newdetail<0) newdetail=0;
51         if(newdetail>2) newdetail=2;
52         if(newscreenwidth>3000) newscreenwidth=screenwidth;
53         if(newscreenwidth<0) newscreenwidth=screenwidth;
54         if(newscreenheight>3000) newscreenheight=screenheight;
55         if(newscreenheight<0) newscreenheight=screenheight;
56         ofstream opstream(ConvertFileName(":Data:config.txt", "w"));
57         opstream << "Screenwidth:\n";
58         opstream << newscreenwidth;
59         opstream << "\nScreenheight:\n";
60         opstream << newscreenheight;
61         opstream << "\nMouse sensitivity:\n";
62         opstream << usermousesensitivity;
63         opstream << "\nBlur(0,1):\n";
64         opstream << ismotionblur;
65         opstream << "\nOverall Detail(0,1,2) higher=better:\n";
66         opstream << newdetail;
67         opstream << "\nFloating jump:\n";
68         opstream << floatjump;
69         opstream << "\nMouse jump:\n";
70         opstream << mousejump;
71         opstream << "\nAmbient sound:\n";
72         opstream << ambientsound;
73         opstream << "\nBlood (0,1,2):\n";
74         opstream << bloodtoggle;
75         opstream << "\nAuto slomo:\n";
76         opstream << autoslomo;
77         opstream << "\nFoliage:\n";
78         opstream << foliage;
79         opstream << "\nMusic:\n";
80         opstream << musictoggle;
81         opstream << "\nTrilinear:\n";
82         opstream << trilinear;
83         opstream << "\nDecals(shadows,blood puddles,etc):\n";
84         opstream << decals;
85         opstream << "\nInvert mouse:\n";
86         opstream << invertmouse;
87         opstream << "\nGamespeed:\n";
88         if(oldgamespeed==0)oldgamespeed=1;
89         opstream << oldgamespeed;
90         opstream << "\nDifficulty(0,1,2) higher=harder:\n";
91         opstream << difficulty;
92         opstream << "\nDamage effects(blackout, doublevision):\n";
93         opstream << damageeffects;
94         opstream << "\nText:\n";
95         opstream << texttoggle;
96         opstream << "\nDebug:\n";
97         opstream << debugmode;
98         opstream << "\nVBL Sync:\n";
99         opstream << vblsync;
100         opstream << "\nShow Points:\n";
101         opstream << showpoints;
102         opstream << "\nAlways Blur:\n";
103         opstream << alwaysblur;
104         opstream << "\nImmediate mode (turn on on G5):\n";
105         opstream << immediate;
106         opstream << "\nVelocity blur:\n";
107         opstream << velocityblur;
108         opstream << "\nVolume:\n";
109         opstream << volume;
110         opstream << "\nForward key:\n";
111         opstream << Input::keyToChar(forwardkey);
112         opstream << "\nBack key:\n";
113         opstream << Input::keyToChar(backkey);
114         opstream << "\nLeft key:\n";
115         opstream << Input::keyToChar(leftkey);
116         opstream << "\nRight key:\n";
117         opstream << Input::keyToChar(rightkey);
118         opstream << "\nJump key:\n";
119         opstream << Input::keyToChar(jumpkey);
120         opstream << "\nCrouch key:\n";
121         opstream << Input::keyToChar(crouchkey);
122         opstream << "\nDraw key:\n";
123         opstream << Input::keyToChar(drawkey);
124         opstream << "\nThrow key:\n";
125         opstream << Input::keyToChar(throwkey);
126         opstream << "\nAttack key:\n";
127         opstream << Input::keyToChar(attackkey);
128         opstream << "\nConsole key:\n";
129         opstream << Input::keyToChar(consolekey);
130         opstream << "\nChat key:\n";
131         opstream << Input::keyToChar(chatkey);
132         opstream << "\nDamage bar:\n";
133         opstream << showdamagebar;
134         opstream << "\nStereoMode:\n";
135         opstream << stereomode;
136         opstream << "\nStereoSeparation:\n";
137         opstream << stereoseparation;
138         opstream << "\nStereoReverse:\n";
139         opstream << stereoreverse;
140         opstream.close();
141 }
142
143 bool LoadSettings() {
144         ifstream ipstream(ConvertFileName(":Data:config.txt"), std::ios::in);
145         if ( !ipstream || ipstream.fail() ) {
146                 printf("Config file not found\n");
147                 return false;
148         }
149         char setting[256];
150         char string[256];
151         
152         printf("Loading config\n");
153         while(!ipstream.eof()) {
154                 ipstream.getline( setting, sizeof(setting) );
155                 
156                 // skip blank lines
157                 // assume lines starting with spaces are all blank
158                 if ( strlen(setting) == 0 || setting[0] == ' ' || setting[0] == '\t') continue;
159                 //~ printf("setting : %s\n",setting);
160
161                 if ( ipstream.eof() || ipstream.fail() ) {
162                         fprintf(stderr, "Error reading config file: Got setting name '%s', but value can't be read\n", setting);
163                         ipstream.close();                       
164                         return false;
165                 }
166                 
167         
168                 if ( !strncmp(setting, "Screenwidth", 11) ) {
169                         ipstream >> kContextWidth;
170                 } else if ( !strncmp(setting, "Screenheight", 12) ) {
171                         ipstream >> kContextHeight;
172                 } else if ( !strncmp(setting, "Mouse sensitivity", 17) ) {
173                         ipstream >> usermousesensitivity;
174                 } else if ( !strncmp(setting, "Blur", 4) ) {
175                         ipstream >> ismotionblur;
176                 } else if ( !strncmp(setting, "Overall Detail", 14) ) {
177                         ipstream >> detail;
178                         if(detail!=0)kBitsPerPixel=32;
179                         else kBitsPerPixel=16;
180                 } else if ( !strncmp(setting, "Floating jump", 13) ) {
181                         ipstream >> floatjump;
182                 } else if ( !strncmp(setting, "Mouse jump", 10) ) {
183                         ipstream >> mousejump;
184                 } else if ( !strncmp(setting, "Ambient sound", 13) ) {
185                         ipstream >> ambientsound;
186                 } else if ( !strncmp(setting, "Blood ", 6) ) {
187                         ipstream >> bloodtoggle;
188                 } else if ( !strncmp(setting, "Auto slomo", 10) ) {
189                         ipstream >> autoslomo;
190                 } else if ( !strncmp(setting, "Foliage", 7) ) {
191                         ipstream >> foliage;
192                 } else if ( !strncmp(setting, "Music", 5) ) {
193                         ipstream >> musictoggle;
194                 } else if ( !strncmp(setting, "Trilinear", 9) ) {
195                         ipstream >> trilinear;
196                 } else if ( !strncmp(setting, "Decals", 6) ) {
197                         ipstream >> decals;
198                 } else if ( !strncmp(setting, "Invert mouse", 12) ) {
199                         ipstream >> invertmouse;
200                 } else if ( !strncmp(setting, "Gamespeed", 9) ) {
201                         ipstream >> gamespeed;
202                         oldgamespeed=gamespeed;
203                         if(oldgamespeed==0){
204                                 gamespeed=1;
205                                 oldgamespeed=1;
206                         }
207                 } else if ( !strncmp(setting, "Difficulty", 10) ) {
208                         ipstream >> difficulty;
209                 } else if ( !strncmp(setting, "Damage effects", 14) ) {
210                         ipstream >> damageeffects;
211                 } else if ( !strncmp(setting, "Text", 4) ) {
212                         ipstream >> texttoggle;
213                 } else if ( !strncmp(setting, "Debug", 5) ) {
214                         ipstream >> debugmode;
215                 } else if ( !strncmp(setting, "VBL Sync", 8) ) {
216                         ipstream >> vblsync;
217                 } else if ( !strncmp(setting, "Show Points", 11) ) {
218                         ipstream >> showpoints;
219                 } else if ( !strncmp(setting, "Always Blur", 11) ) {
220                         ipstream >> alwaysblur;
221                 } else if ( !strncmp(setting, "Immediate mode ", 15) ) {
222                         ipstream >> immediate;
223                 } else if ( !strncmp(setting, "Velocity blur", 13) ) {
224                         ipstream >> velocityblur;
225                 } else if ( !strncmp(setting, "Volume", 6) ) {
226                         ipstream >> volume;
227                 } else if ( !strncmp(setting, "Forward key", 11) ) {
228                         ipstream.getline( string, sizeof(string) );
229                         forwardkey = Input::CharToKey(string);
230                 } else if ( !strncmp(setting, "Back key", 8) ) {
231                         ipstream.getline( string, sizeof(string) );
232                         backkey = Input::CharToKey(string);
233                 } else if ( !strncmp(setting, "Left key", 8) ) {
234                         ipstream.getline( string, sizeof(string) );
235                         leftkey = Input::CharToKey(string);
236                 } else if ( !strncmp(setting, "Right key", 9) ) {
237                         ipstream.getline( string, sizeof(string) );
238                         rightkey = Input::CharToKey(string);
239                 } else if ( !strncmp(setting, "Jump key", 8) ) {
240                         ipstream.getline( string, sizeof(string) );
241                         jumpkey = Input::CharToKey(string);
242                 } else if ( !strncmp(setting, "Crouch key", 10) ) {
243                         ipstream.getline( string, sizeof(string) );
244                         crouchkey = Input::CharToKey(string);
245                 } else if ( !strncmp(setting, "Draw key", 8) ) {
246                         ipstream.getline( string, sizeof(string) );
247                         drawkey = Input::CharToKey(string);
248                 } else if ( !strncmp(setting, "Throw key", 9) ) {
249                         ipstream.getline( string, sizeof(string) );
250                         throwkey = Input::CharToKey(string);
251                 } else if ( !strncmp(setting, "Attack key", 10) ) {
252                         ipstream.getline( string, sizeof(string) );
253                         attackkey = Input::CharToKey(string);
254                 } else if ( !strncmp(setting, "Console key", 11) ) {
255                         ipstream.getline( string, sizeof(string) );
256                         consolekey = Input::CharToKey(string);
257                 } else if ( !strncmp(setting, "Chat key", 8) ) {
258                         ipstream.getline( string, sizeof(string) );
259                         chatkey = Input::CharToKey(string);
260                 } else if ( !strncmp(setting, "Damage bar", 10) ) {
261                         ipstream >> showdamagebar;
262                 } else if ( !strncmp(setting, "StereoMode", 10) ) {
263                         int i;
264                         ipstream >> i;
265                         stereomode = (StereoMode)i;
266                 } else if ( !strncmp(setting, "StereoSeparation", 16) ) {
267                         ipstream >> stereoseparation;
268                 } else if ( !strncmp(setting, "StereoReverse", 13) ) {
269                         ipstream >> stereoreverse;
270                 } else {
271                         ipstream >> string;
272                         fprintf(stderr, "Unknown config option '%s' with value '%s'. Ignoring.\n", setting, string);
273                 }
274                 
275                 if ( ipstream.fail() ) {
276                         fprintf(stderr, "Error reading config file: EOF reached when trying to read value for setting '%s'.\n", setting);
277                         ipstream.close();                       
278                         return false;
279                 }
280                 
281                 if ( ipstream.bad() ) {
282                         fprintf(stderr, "Error reading config file: Failed to read value for setting '%s'.\n", setting);
283                         ipstream.close();
284                         return false;
285                 }
286         }
287         
288         ipstream.close();
289         
290         if(detail>2)detail=2;
291         if(detail<0)detail=0;
292         if(screenwidth<0)screenwidth=640;
293         if(screenheight<0)screenheight=480;
294         
295         return true;
296 }