2 // SETTINGS.CPP: Game configuration loading/saving support
5 // (C) 2005 Underground Software
7 // JLH = James Hammons <jlhamm@acm.org>
10 // --- ---------- ------------------------------------------------------------
11 // JLH 01/04/2006 Added changelog ;-)
19 #include "sdlemu_config.h"
28 // Private function prototypes
30 static void CheckForTrailingSlash(char * path);
33 // Load StarGem2's settings
35 void LoadSettings(void)
37 if (sdlemu_init_config("./stargem2.cfg") == 0 // CWD
38 && sdlemu_init_config("~/stargem2.cfg") == 0 // Home
39 && sdlemu_init_config("~/.stargem2/stargem2.cfg") == 0 // Home under .stargem2 directory
40 && sdlemu_init_config("stargem2.cfg") == 0) // Somewhere in the path
41 WriteLog("Settings: Couldn't find configuration file. Using defaults...\n");
43 settings.useJoystick = sdlemu_getval_bool("useJoystick", false);
44 settings.joyport = sdlemu_getval_int("joyport", 0);
45 settings.hardwareTypeNTSC = sdlemu_getval_bool("hardwareTypeNTSC", true);
46 settings.frameSkip = sdlemu_getval_int("frameSkip", 0);
47 settings.fullscreen = sdlemu_getval_bool("fullscreen", false);
48 settings.useOpenGL = sdlemu_getval_bool("useOpenGL", true);
49 settings.glFilter = sdlemu_getval_int("glFilterType", 0);
50 settings.renderType = sdlemu_getval_int("renderType", 0);
51 settings.autoStateSaving = sdlemu_getval_bool("autoSaveState", true);
53 // Keybindings in order of fire, thrust, smartbomb, hyperspace, reverse,
54 // up, down, inviso, 1 player start, 2 player start, left coin, center
55 // coin, right coin, auto up, advance, high score reset, slam switch
56 settings.keyBindings[S_KEY_FIRE] = sdlemu_getval_int("k_fire", SDL_SCANCODE_SEMICOLON);
57 settings.keyBindings[S_KEY_THRUST] = sdlemu_getval_int("k_thrust", SDL_SCANCODE_L);
58 settings.keyBindings[S_KEY_SMARTBOMB] = sdlemu_getval_int("k_smartbomb", SDL_SCANCODE_SPACE);
59 settings.keyBindings[S_KEY_HYPERSPACE] = sdlemu_getval_int("k_hyperspace", SDL_SCANCODE_BACKSPACE);
60 settings.keyBindings[S_KEY_REVERSE] = sdlemu_getval_int("k_reverse", SDL_SCANCODE_RETURN);
61 settings.keyBindings[S_KEY_UP] = sdlemu_getval_int("k_up", SDL_SCANCODE_R);
62 settings.keyBindings[S_KEY_DOWN] = sdlemu_getval_int("k_down", SDL_SCANCODE_F);
63 settings.keyBindings[S_KEY_INVISO] = sdlemu_getval_int("k_inviso", SDL_SCANCODE_A);
64 settings.keyBindings[S_KEY_1P_START] = sdlemu_getval_int("k_1p_start", SDL_SCANCODE_1);
65 settings.keyBindings[S_KEY_2P_START] = sdlemu_getval_int("k_2p_start", SDL_SCANCODE_2);
66 settings.keyBindings[S_KEY_LEFT_COIN] = sdlemu_getval_int("k_left_coin", SDL_SCANCODE_3);
67 settings.keyBindings[S_KEY_CENTER_COIN] = sdlemu_getval_int("k_center_coin", SDL_SCANCODE_4);
68 settings.keyBindings[S_KEY_RIGHT_COIN] = sdlemu_getval_int("k_right_coin", SDL_SCANCODE_5);
69 settings.keyBindings[S_KEY_AUTO_UP] = sdlemu_getval_int("k_auto_up", SDL_SCANCODE_F1);
70 settings.keyBindings[S_KEY_ADVANCE] = sdlemu_getval_int("k_advance", SDL_SCANCODE_F2);
71 settings.keyBindings[S_KEY_HS_RESET] = sdlemu_getval_int("k_high_score_reset", SDL_SCANCODE_F3);
72 settings.keyBindings[S_KEY_SLAM_SWITCH] = sdlemu_getval_int("k_slam_switch", SDL_SCANCODE_F4);
74 strcpy(settings.BIOSPath, sdlemu_getval_string("BIOSROM", "./ROMs/"));
75 strcpy(settings.disksPath, sdlemu_getval_string("disks", "./disks/"));
76 strcpy(settings.diskImagePath1, sdlemu_getval_string("floppyImage1", "./disks/bt1_boot.dsk"));
77 strcpy(settings.diskImagePath2, sdlemu_getval_string("floppyImage2", "./disks/bt1_char.dsk"));
78 strcpy(settings.autoStatePath, sdlemu_getval_string("autoStateFilename", "./apple2auto.state"));
79 CheckForTrailingSlash(settings.disksPath);
80 CheckForTrailingSlash(settings.BIOSPath);
84 // Save StarGem2's settings
86 void SaveSettings(void)
91 // Check path for a trailing slash, and append if not present
93 static void CheckForTrailingSlash(char * path)
96 if (path[strlen(path) - 1] != '/')
97 strcat(path, "/"); // NOTE: Possible buffer overflow