1 /*
2 ** c_cvars.cpp
3 **
4 **---------------------------------------------------------------------------
5 ** Copyright 2011 Braden Obrzut
6 ** All rights reserved.
7 **
8 ** Redistribution and use in source and binary forms, with or without
9 ** modification, are permitted provided that the following conditions
10 ** are met:
11 **
12 ** 1. Redistributions of source code must retain the above copyright
13 ** notice, this list of conditions and the following disclaimer.
14 ** 2. Redistributions in binary form must reproduce the above copyright
15 ** notice, this list of conditions and the following disclaimer in the
16 ** documentation and/or other materials provided with the distribution.
17 ** 3. The name of the author may not be used to endorse or promote products
18 ** derived from this software without specific prior written permission.
19 **
20 ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21 ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22 ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23 ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24 ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 ** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 **---------------------------------------------------------------------------
31 **
32 **
33 */
34
35 #include "c_cvars.h"
36 #include "config.h"
37 #include "wl_def.h"
38 #include "am_map.h"
39 #include "id_sd.h"
40 #include "id_in.h"
41 #include "id_us.h"
42 #include "wl_main.h"
43 #include "wl_play.h"
44
45 static bool doWriteConfig = false;
46
47 Aspect r_ratio = ASPECT_4_3, vid_aspect = ASPECT_NONE;
48 bool forcegrabmouse = false;
49 bool vid_fullscreen = false;
50 bool vid_vsync = false;
51 bool quitonescape = false;
52 fixed movebob = FRACUNIT;
53
54 bool alwaysrun;
55 bool mouseenabled, mouseyaxisdisabled, joystickenabled;
56
57 #if SDL_VERSION_ATLEAST(1,3,0)
58 // Convert SDL1 keycode to SDL2 scancode
59 static const SDL_Scancode SDL2ConversionTable[323] = {
60 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
61 SDL_SCANCODE_BACKSPACE,SDL_SCANCODE_TAB,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_CLEAR,SDL_SCANCODE_RETURN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
62 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_PAUSE,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
63 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_ESCAPE,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
64 SDL_SCANCODE_SPACE,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_APOSTROPHE,
65 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_COMMA,SDL_SCANCODE_MINUS,SDL_SCANCODE_PERIOD,SDL_SCANCODE_SLASH,
66 SDL_SCANCODE_0,SDL_SCANCODE_1,SDL_SCANCODE_2,SDL_SCANCODE_3,SDL_SCANCODE_4,SDL_SCANCODE_5,SDL_SCANCODE_6,SDL_SCANCODE_7,
67 SDL_SCANCODE_8,SDL_SCANCODE_9,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_SEMICOLON,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_EQUALS,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
68 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
69 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
70 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
71 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_LEFTBRACKET,SDL_SCANCODE_BACKSLASH,SDL_SCANCODE_RIGHTBRACKET,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
72 SDL_SCANCODE_GRAVE,SDL_SCANCODE_A,SDL_SCANCODE_B,SDL_SCANCODE_C,SDL_SCANCODE_D,SDL_SCANCODE_E,SDL_SCANCODE_F,SDL_SCANCODE_G,
73 SDL_SCANCODE_H,SDL_SCANCODE_I,SDL_SCANCODE_J,SDL_SCANCODE_K,SDL_SCANCODE_L,SDL_SCANCODE_M,SDL_SCANCODE_N,SDL_SCANCODE_O,
74 SDL_SCANCODE_P,SDL_SCANCODE_Q,SDL_SCANCODE_R,SDL_SCANCODE_S,SDL_SCANCODE_T,SDL_SCANCODE_U,SDL_SCANCODE_V,SDL_SCANCODE_W,
75 SDL_SCANCODE_X,SDL_SCANCODE_Y,SDL_SCANCODE_Z,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_DELETE,
76 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
77 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
78 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
79 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
80 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
81 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
82 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
83 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
84 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
85 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
86 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
87 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
88 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
89 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
90 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
91 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,
92 SDL_SCANCODE_KP_0,SDL_SCANCODE_KP_1,SDL_SCANCODE_KP_2,SDL_SCANCODE_KP_3,SDL_SCANCODE_KP_4,SDL_SCANCODE_KP_5,SDL_SCANCODE_KP_6,SDL_SCANCODE_KP_7,
93 SDL_SCANCODE_KP_8,SDL_SCANCODE_KP_9,SDL_SCANCODE_KP_PERIOD,SDL_SCANCODE_KP_DIVIDE,SDL_SCANCODE_KP_MULTIPLY,SDL_SCANCODE_KP_MINUS,SDL_SCANCODE_KP_PLUS,SDL_SCANCODE_KP_ENTER,
94 SDL_SCANCODE_KP_EQUALS,SDL_SCANCODE_UP,SDL_SCANCODE_DOWN,SDL_SCANCODE_RIGHT,SDL_SCANCODE_LEFT,SDL_SCANCODE_INSERT,SDL_SCANCODE_HOME,SDL_SCANCODE_END,
95 SDL_SCANCODE_PAGEUP,SDL_SCANCODE_PAGEDOWN,SDL_SCANCODE_F1,SDL_SCANCODE_F2,SDL_SCANCODE_F3,SDL_SCANCODE_F4,SDL_SCANCODE_F5,SDL_SCANCODE_F6,
96 SDL_SCANCODE_F7,SDL_SCANCODE_F8,SDL_SCANCODE_F9,SDL_SCANCODE_F10,SDL_SCANCODE_F11,SDL_SCANCODE_F12,SDL_SCANCODE_F13,SDL_SCANCODE_F14,
97 SDL_SCANCODE_F15,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_NUMLOCKCLEAR,SDL_SCANCODE_CAPSLOCK,SDL_SCANCODE_SCROLLLOCK,SDL_SCANCODE_RSHIFT,
98 SDL_SCANCODE_LSHIFT,SDL_SCANCODE_RCTRL,SDL_SCANCODE_LCTRL,SDL_SCANCODE_RALT,SDL_SCANCODE_LALT,SDL_SCANCODE_RGUI,SDL_SCANCODE_LGUI,SDL_SCANCODE_UNKNOWN,
99 SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_MODE,SDL_SCANCODE_APPLICATION,SDL_SCANCODE_HELP,SDL_SCANCODE_PRINTSCREEN,SDL_SCANCODE_SYSREQ,SDL_SCANCODE_PAUSE,SDL_SCANCODE_MENU,
100 SDL_SCANCODE_POWER,SDL_SCANCODE_UNKNOWN,SDL_SCANCODE_UNDO,
101 };
102
SDL2Convert(int sc)103 int SDL2Convert(int sc)
104 {
105 if(sc < 0)
106 return sc;
107
108 return SDL2ConversionTable[sc];
109 }
110
SDL2Backconvert(int sc)111 int SDL2Backconvert(int sc)
112 {
113 if(sc < 0)
114 return sc;
115
116 for(unsigned int i = 0;i < 323;++i)
117 {
118 if(SDL2ConversionTable[i] == sc)
119 return i;
120 }
121 return 0;
122 }
123 #else
SDL2Convert(int sc)124 int SDL2Convert(int sc) { return sc; }
SDL2Backconvert(int sc)125 int SDL2Backconvert(int sc) { return sc; }
126 #endif
127
FinalReadConfig()128 void FinalReadConfig()
129 {
130 SDMode sd;
131 SMMode sm;
132 SDSMode sds;
133
134 sd = static_cast<SDMode> (config.GetSetting("SoundDevice")->GetInteger());
135 sm = static_cast<SMMode> (config.GetSetting("MusicDevice")->GetInteger());
136 sds = static_cast<SDSMode> (config.GetSetting("DigitalSoundDevice")->GetInteger());
137
138 if ((sd == sdm_AdLib || sm == smm_AdLib) && !AdLibPresent
139 && !SoundBlasterPresent)
140 {
141 sd = sdm_PC;
142 sm = smm_Off;
143 }
144
145 if ((sds == sds_SoundBlaster && !SoundBlasterPresent))
146 sds = sds_Off;
147
148 SD_SetMusicMode(sm);
149 SD_SetSoundMode(sd);
150 SD_SetDigiDevice(sds);
151
152 AM_UpdateFlags();
153
154 doWriteConfig = true;
155 }
156
157 /*
158 ====================
159 =
160 = ReadConfig
161 =
162 ====================
163 */
164
ReadConfig(void)165 void ReadConfig(void)
166 {
167 config.CreateSetting("ForceGrabMouse", false);
168 config.CreateSetting("MouseEnabled", 1);
169 config.CreateSetting("JoystickEnabled", true);
170 config.CreateSetting("ViewSize", 19);
171 config.CreateSetting("MouseXAdjustment", 5);
172 config.CreateSetting("MouseYAdjustment", 5);
173 config.CreateSetting("PanXAdjustment", 5);
174 config.CreateSetting("PanYAdjustment", 5);
175 config.CreateSetting("SoundDevice", sdm_AdLib);
176 config.CreateSetting("MusicDevice", smm_AdLib);
177 config.CreateSetting("DigitalSoundDevice", sds_SoundBlaster);
178 config.CreateSetting("AlwaysRun", 0);
179 config.CreateSetting("MouseYAxisDisabled", 0);
180 config.CreateSetting("SoundVolume", MAX_VOLUME);
181 config.CreateSetting("MusicVolume", MAX_VOLUME);
182 config.CreateSetting("DigitizedVolume", MAX_VOLUME);
183 config.CreateSetting("Vid_FullScreen", false);
184 config.CreateSetting("Vid_Aspect", ASPECT_NONE);
185 config.CreateSetting("Vid_Vsync", false);
186 config.CreateSetting("ScreenWidth", screenWidth);
187 config.CreateSetting("ScreenHeight", screenHeight);
188 config.CreateSetting("QuitOnEscape", quitonescape);
189 config.CreateSetting("MoveBob", FRACUNIT);
190 config.CreateSetting("Gamma", 1.0f);
191 config.CreateSetting("AM_Rotate", 0);
192 config.CreateSetting("AM_DrawTexturedWalls", true);
193 config.CreateSetting("AM_DrawFloors", false);
194 config.CreateSetting("AM_Overlay", 0);
195 config.CreateSetting("AM_OverlayTextured", false);
196 config.CreateSetting("AM_Pause", true);
197 config.CreateSetting("AM_ShowRatios", false);
198
199 char joySettingName[50] = {0};
200 char keySettingName[50] = {0};
201 char mseSettingName[50] = {0};
202 forcegrabmouse = config.GetSetting("ForceGrabMouse")->GetInteger() != 0;
203 mouseenabled = config.GetSetting("MouseEnabled")->GetInteger() != 0;
204 joystickenabled = config.GetSetting("JoystickEnabled")->GetInteger() != 0;
205 for(unsigned int i = 0;controlScheme[i].button != bt_nobutton;i++)
206 {
207 sprintf(joySettingName, "Joystick_%s", controlScheme[i].name);
208 sprintf(keySettingName, "Keybaord_%s", controlScheme[i].name);
209 sprintf(mseSettingName, "Mouse_%s", controlScheme[i].name);
210 for(unsigned int j = 0;j < 50;j++)
211 {
212 if(joySettingName[j] == ' ')
213 joySettingName[j] = '_';
214 if(keySettingName[j] == ' ')
215 keySettingName[j] = '_';
216 if(mseSettingName[j] == ' ')
217 mseSettingName[j] = '_';
218 }
219 config.CreateSetting(joySettingName, controlScheme[i].joystick);
220 config.CreateSetting(keySettingName, SDL2Backconvert(controlScheme[i].keyboard));
221 config.CreateSetting(mseSettingName, controlScheme[i].mouse);
222 controlScheme[i].joystick = config.GetSetting(joySettingName)->GetInteger();
223 controlScheme[i].keyboard = SDL2Convert(config.GetSetting(keySettingName)->GetInteger());
224 controlScheme[i].mouse = config.GetSetting(mseSettingName)->GetInteger();
225 }
226 viewsize = config.GetSetting("ViewSize")->GetInteger();
227 mousexadjustment = config.GetSetting("MouseXAdjustment")->GetInteger();
228 mouseyadjustment = config.GetSetting("MouseYAdjustment")->GetInteger();
229 panxadjustment = config.GetSetting("PanXAdjustment")->GetInteger();
230 panyadjustment = config.GetSetting("PanYAdjustment")->GetInteger();
231 mouseyaxisdisabled = config.GetSetting("MouseYAxisDisabled")->GetInteger() != 0;
232 alwaysrun = config.GetSetting("AlwaysRun")->GetInteger() != 0;
233 AdlibVolume = config.GetSetting("SoundVolume")->GetInteger();
234 SD_UpdatePCSpeakerVolume();
235 MusicVolume = config.GetSetting("MusicVolume")->GetInteger();
236 SoundVolume = config.GetSetting("DigitizedVolume")->GetInteger();
237 vid_fullscreen = config.GetSetting("Vid_FullScreen")->GetInteger() != 0;
238 vid_aspect = static_cast<Aspect>(config.GetSetting("Vid_Aspect")->GetInteger());
239 vid_vsync = config.GetSetting("Vid_Vsync")->GetInteger() != 0;
240 screenWidth = config.GetSetting("ScreenWidth")->GetInteger();
241 screenHeight = config.GetSetting("ScreenHeight")->GetInteger();
242 quitonescape = config.GetSetting("QuitOnEscape")->GetInteger() != 0;
243 movebob = config.GetSetting("MoveBob")->GetInteger();
244 screenGamma = static_cast<float>(config.GetSetting("Gamma")->GetFloat());
245 am_rotate = config.GetSetting("AM_Rotate")->GetInteger();
246 am_drawtexturedwalls = config.GetSetting("AM_DrawTexturedWalls")->GetInteger() != 0;
247 am_drawfloors = config.GetSetting("AM_DrawFloors")->GetInteger() != 0;
248 am_overlay = config.GetSetting("AM_Overlay")->GetInteger();
249 am_overlaytextured = config.GetSetting("AM_OverlayTextured")->GetInteger() != 0;
250 am_pause = config.GetSetting("AM_Pause")->GetInteger() != 0;
251 am_showratios = config.GetSetting("AM_ShowRatios")->GetInteger() != 0;
252
253 char hsName[50];
254 char hsScore[50];
255 char hsCompleted[50];
256 char hsGraphic[50];
257 for(unsigned int i = 0;i < MaxScores;i++)
258 {
259 sprintf(hsName, "HighScore%u_Name", i);
260 sprintf(hsScore, "HighScore%u_Score", i);
261 sprintf(hsCompleted, "HighScore%u_Completed", i);
262 sprintf(hsGraphic, "HighScore%u_Graphic", i);
263
264 config.CreateSetting(hsName, Scores[i].name);
265 config.CreateSetting(hsScore, Scores[i].score);
266 config.CreateSetting(hsCompleted, Scores[i].completed);
267 config.CreateSetting(hsGraphic, Scores[i].graphic);
268
269 strcpy(Scores[i].name, config.GetSetting(hsName)->GetString());
270 Scores[i].score = config.GetSetting(hsScore)->GetInteger();
271 if(config.GetSetting(hsCompleted)->GetType() == SettingsData::ST_STR)
272 Scores[i].completed = config.GetSetting(hsCompleted)->GetString();
273 else
274 Scores[i].completed.Format("%d", config.GetSetting(hsCompleted)->GetInteger());
275 strncpy(Scores[i].graphic, config.GetSetting(hsGraphic)->GetString(), 8);
276 Scores[i].graphic[8] = 0;
277 }
278
279 // make sure values are correct
280 if (mousexadjustment<0) mousexadjustment = 0;
281 else if (mousexadjustment>20) mousexadjustment = 20;
282
283 if (mouseyadjustment<0) mouseyadjustment = 0;
284 else if (mouseyadjustment>20) mouseyadjustment = 20;
285
286 if (panxadjustment<0) panxadjustment = 0;
287 else if (panxadjustment>20) panxadjustment = 20;
288
289 if (panyadjustment<0) panyadjustment = 0;
290 else if (panyadjustment>20) panyadjustment = 20;
291
292 if(viewsize<4) viewsize=4;
293 else if(viewsize>21) viewsize=21;
294 }
295
296 /*
297 ====================
298 =
299 = WriteConfig
300 =
301 ====================
302 */
303
WriteConfig(void)304 void WriteConfig(void)
305 {
306 if(!doWriteConfig)
307 return;
308
309 char joySettingName[50] = {0};
310 char keySettingName[50] = {0};
311 char mseSettingName[50] = {0};
312 config.GetSetting("ForceGrabMouse")->SetValue(forcegrabmouse);
313 config.GetSetting("MouseEnabled")->SetValue(mouseenabled);
314 config.GetSetting("JoystickEnabled")->SetValue(joystickenabled);
315 for(unsigned int i = 0;controlScheme[i].button != bt_nobutton;i++)
316 {
317 sprintf(joySettingName, "Joystick_%s", controlScheme[i].name);
318 sprintf(keySettingName, "Keybaord_%s", controlScheme[i].name);
319 sprintf(mseSettingName, "Mouse_%s", controlScheme[i].name);
320 for(unsigned int j = 0;j < 50;j++)
321 {
322 if(joySettingName[j] == ' ')
323 joySettingName[j] = '_';
324 if(keySettingName[j] == ' ')
325 keySettingName[j] = '_';
326 if(mseSettingName[j] == ' ')
327 mseSettingName[j] = '_';
328 }
329 config.GetSetting(joySettingName)->SetValue(controlScheme[i].joystick);
330 config.GetSetting(keySettingName)->SetValue(SDL2Backconvert(controlScheme[i].keyboard));
331 config.GetSetting(mseSettingName)->SetValue(controlScheme[i].mouse);
332 }
333 config.GetSetting("ViewSize")->SetValue(viewsize);
334 config.GetSetting("MouseXAdjustment")->SetValue(mousexadjustment);
335 config.GetSetting("MouseYAdjustment")->SetValue(mouseyadjustment);
336 config.GetSetting("PanXAdjustment")->SetValue(panxadjustment);
337 config.GetSetting("PanYAdjustment")->SetValue(panyadjustment);
338 config.GetSetting("MouseYAxisDisabled")->SetValue(mouseyaxisdisabled);
339 config.GetSetting("AlwaysRun")->SetValue(alwaysrun);
340 config.GetSetting("SoundDevice")->SetValue(SoundMode);
341 config.GetSetting("MusicDevice")->SetValue(MusicMode);
342 config.GetSetting("DigitalSoundDevice")->SetValue(DigiMode);
343 config.GetSetting("SoundVolume")->SetValue(AdlibVolume);
344 config.GetSetting("MusicVolume")->SetValue(MusicVolume);
345 config.GetSetting("DigitizedVolume")->SetValue(SoundVolume);
346 config.GetSetting("Vid_FullScreen")->SetValue(vid_fullscreen);
347 config.GetSetting("Vid_Aspect")->SetValue(vid_aspect);
348 config.GetSetting("Vid_Vsync")->SetValue(vid_vsync);
349 config.GetSetting("ScreenWidth")->SetValue(screenWidth);
350 config.GetSetting("ScreenHeight")->SetValue(screenHeight);
351 config.GetSetting("QuitOnEscape")->SetValue(quitonescape);
352 config.GetSetting("MoveBob")->SetValue(movebob);
353 config.GetSetting("Gamma")->SetValue(screenGamma);
354 config.GetSetting("AM_Rotate")->SetValue(am_rotate);
355 config.GetSetting("AM_DrawTexturedWalls")->SetValue(am_drawtexturedwalls);
356 config.GetSetting("AM_DrawFloors")->SetValue(am_drawfloors);
357 config.GetSetting("AM_Overlay")->SetValue(am_overlay);
358 config.GetSetting("AM_OverlayTextured")->SetValue(am_overlaytextured);
359 config.GetSetting("AM_Pause")->SetValue(am_pause);
360 config.GetSetting("AM_ShowRatios")->SetValue(am_showratios);
361
362 char hsName[50];
363 char hsScore[50];
364 char hsCompleted[50];
365 char hsGraphic[50];
366 for(unsigned int i = 0;i < MaxScores;i++)
367 {
368 sprintf(hsName, "HighScore%u_Name", i);
369 sprintf(hsScore, "HighScore%u_Score", i);
370 sprintf(hsCompleted, "HighScore%u_Completed", i);
371 sprintf(hsGraphic, "HighScore%u_Graphic", i);
372
373 config.GetSetting(hsName)->SetValue(Scores[i].name);
374 config.GetSetting(hsScore)->SetValue(Scores[i].score);
375 config.GetSetting(hsCompleted)->SetValue(Scores[i].completed);
376 config.GetSetting(hsGraphic)->SetValue(Scores[i].graphic);
377 }
378
379 config.SaveConfig();
380 }
381