]> Shamusworld >> Repos - stargem2/blob - src/settings.cpp
Converted to SDL 2, added fullscreen support (F12 to toggle).
[stargem2] / src / settings.cpp
1 //
2 // SETTINGS.CPP: Game configuration loading/saving support
3 //
4 // by James L. Hammons
5 // (C) 2005 Underground Software
6 //
7 // JLH = James L. Hammons <jlhamm@acm.org>
8 //
9 // WHO  WHEN        WHAT
10 // ---  ----------  ------------------------------------------------------------
11 // JLH  01/04/2006  Added changelog ;-)
12 //
13
14 #include "settings.h"
15
16 #include <stdlib.h>
17 #include <string>
18 //#include "SDL.h"
19 #include <SDL2/SDL.h>
20 #include "sdlemu_config.h"
21 #include "log.h"
22
23 using namespace std;
24
25 // Global variables
26
27 Settings settings;
28
29 // Private function prototypes
30
31 static void CheckForTrailingSlash(char * path);
32
33 //
34 // Load StarGem2's settings
35 //
36 void LoadSettings(void)
37 {
38         if (sdlemu_init_config("./stargem2.cfg") == 0           // CWD
39                 && sdlemu_init_config("~/stargem2.cfg") == 0    // Home
40                 && sdlemu_init_config("~/.stargem2/stargem2.cfg") == 0  // Home under .stargem2 directory
41                 && sdlemu_init_config("stargem2.cfg") == 0)             // Somewhere in the path
42                 WriteLog("Settings: Couldn't find configuration file. Using defaults...\n");
43
44         settings.useJoystick = sdlemu_getval_bool("useJoystick", false);
45         settings.joyport = sdlemu_getval_int("joyport", 0);
46         settings.hardwareTypeNTSC = sdlemu_getval_bool("hardwareTypeNTSC", true);
47         settings.frameSkip = sdlemu_getval_int("frameSkip", 0);
48         settings.fullscreen = sdlemu_getval_bool("fullscreen", false);
49         settings.useOpenGL = sdlemu_getval_bool("useOpenGL", true);
50         settings.glFilter = sdlemu_getval_int("glFilterType", 0);
51         settings.renderType = sdlemu_getval_int("renderType", 0);
52         settings.autoStateSaving = sdlemu_getval_bool("autoSaveState", true);
53
54         // Keybindings in order of fire, thrust, smartbomb, hyperspace, reverse, up, down, inviso,
55         // 1 player start, 2 player start, left coin, center coin, right coin, auto up, advance,
56         // high score reset, slam switch
57         settings.keyBindings[S_KEY_FIRE]        = sdlemu_getval_int("k_fire", SDL_SCANCODE_SEMICOLON);
58         settings.keyBindings[S_KEY_THRUST]      = sdlemu_getval_int("k_thrust", SDL_SCANCODE_L);
59         settings.keyBindings[S_KEY_SMARTBOMB]   = sdlemu_getval_int("k_smartbomb", SDL_SCANCODE_SPACE);
60         settings.keyBindings[S_KEY_HYPERSPACE]  = sdlemu_getval_int("k_hyperspace", SDL_SCANCODE_BACKSPACE);
61         settings.keyBindings[S_KEY_REVERSE]     = sdlemu_getval_int("k_reverse", SDL_SCANCODE_RETURN);
62         settings.keyBindings[S_KEY_UP]          = sdlemu_getval_int("k_up", SDL_SCANCODE_R);
63         settings.keyBindings[S_KEY_DOWN]        = sdlemu_getval_int("k_down", SDL_SCANCODE_F);
64         settings.keyBindings[S_KEY_INVISO]      = sdlemu_getval_int("k_inviso", SDL_SCANCODE_A);
65         settings.keyBindings[S_KEY_1P_START]    = sdlemu_getval_int("k_1p_start", SDL_SCANCODE_1);
66         settings.keyBindings[S_KEY_2P_START]    = sdlemu_getval_int("k_2p_start", SDL_SCANCODE_2);
67         settings.keyBindings[S_KEY_LEFT_COIN]   = sdlemu_getval_int("k_left_coin", SDL_SCANCODE_3);
68         settings.keyBindings[S_KEY_CENTER_COIN] = sdlemu_getval_int("k_center_coin", SDL_SCANCODE_4);
69         settings.keyBindings[S_KEY_RIGHT_COIN]  = sdlemu_getval_int("k_right_coin", SDL_SCANCODE_5);
70         settings.keyBindings[S_KEY_AUTO_UP]     = sdlemu_getval_int("k_auto_up", SDL_SCANCODE_F1);
71         settings.keyBindings[S_KEY_ADVANCE]     = sdlemu_getval_int("k_advance", SDL_SCANCODE_F2);
72         settings.keyBindings[S_KEY_HS_RESET]    = sdlemu_getval_int("k_high_score_reset", SDL_SCANCODE_F3);
73         settings.keyBindings[S_KEY_SLAM_SWITCH] = sdlemu_getval_int("k_slam_switch", SDL_SCANCODE_F4);
74 //      settings.keyBindings[17] = sdlemu_getval_int("k_8", SDL_SCANCODE_KP8);
75 //      settings.keyBindings[18] = sdlemu_getval_int("k_9", SDL_SCANCODE_KP9);
76 //      settings.keyBindings[19] = sdlemu_getval_int("k_pound", SDL_SCANCODE_KP_DIVIDE);
77 //      settings.keyBindings[20] = sdlemu_getval_int("k_star", SDL_SCANCODE_KP_MULTIPLY);
78
79         strcpy(settings.BIOSPath, sdlemu_getval_string("BIOSROM", "./ROMs/"));
80         strcpy(settings.disksPath, sdlemu_getval_string("disks", "./disks/"));
81         strcpy(settings.diskImagePath1, sdlemu_getval_string("floppyImage1", "./disks/bt1_boot.dsk"));
82         strcpy(settings.diskImagePath2, sdlemu_getval_string("floppyImage2", "./disks/bt1_char.dsk"));
83         strcpy(settings.autoStatePath, sdlemu_getval_string("autoStateFilename", "./apple2auto.state"));
84         CheckForTrailingSlash(settings.disksPath);
85         CheckForTrailingSlash(settings.BIOSPath);
86 }
87
88 //
89 // Save StarGem2's settings
90 //
91 void SaveSettings(void)
92 {
93 }
94
95 //
96 // Check path for a trailing slash, and append if not present
97 //
98 static void CheckForTrailingSlash(char * path)
99 {
100         if (strlen(path) > 0)
101                 if (path[strlen(path) - 1] != '/')
102                         strcat(path, "/");      // NOTE: Possible buffer overflow
103 }