2 // SETTINGS.CPP: Game configuration loading/saving support
5 // (C) 2005 Underground Software
7 // JLH = James L. Hammons <jlhamm@acm.org>
10 // --- ---------- ------------------------------------------------------------
11 // JLH 01/04/2006 Added changelog ;-)
20 #include "sdlemu_config.h"
29 // Private function prototypes
31 static void CheckForTrailingSlash(char * path);
34 // Load StarGem2's settings
36 void LoadSettings(void)
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");
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);
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);
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);
89 // Save StarGem2's settings
91 void SaveSettings(void)
96 // Check path for a trailing slash, and append if not present
98 static void CheckForTrailingSlash(char * path)
100 if (strlen(path) > 0)
101 if (path[strlen(path) - 1] != '/')
102 strcat(path, "/"); // NOTE: Possible buffer overflow