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 ;-)
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, up, down, inviso,
54 // 1 player start, 2 player start, left coin, center coin, right coin, auto up, advance,
55 // high score reset, slam switch
56 settings.keyBindings[S_KEY_FIRE] = sdlemu_getval_int("k_fire", SDLK_SEMICOLON);
57 settings.keyBindings[S_KEY_THRUST] = sdlemu_getval_int("k_thrust", SDLK_l);
58 settings.keyBindings[S_KEY_SMARTBOMB] = sdlemu_getval_int("k_smartbomb", SDLK_SPACE);
59 settings.keyBindings[S_KEY_HYPERSPACE] = sdlemu_getval_int("k_hyperspace", SDLK_BACKSPACE);
60 settings.keyBindings[S_KEY_REVERSE] = sdlemu_getval_int("k_reverse", SDLK_RETURN);
61 settings.keyBindings[S_KEY_UP] = sdlemu_getval_int("k_up", SDLK_r);
62 settings.keyBindings[S_KEY_DOWN] = sdlemu_getval_int("k_down", SDLK_f);
63 settings.keyBindings[S_KEY_INVISO] = sdlemu_getval_int("k_inviso", SDLK_a);
64 settings.keyBindings[S_KEY_1P_START] = sdlemu_getval_int("k_1p_start", SDLK_1);
65 settings.keyBindings[S_KEY_2P_START] = sdlemu_getval_int("k_2p_start", SDLK_2);
66 settings.keyBindings[S_KEY_LEFT_COIN] = sdlemu_getval_int("k_left_coin", SDLK_3);
67 settings.keyBindings[S_KEY_CENTER_COIN] = sdlemu_getval_int("k_center_coin", SDLK_4);
68 settings.keyBindings[S_KEY_RIGHT_COIN] = sdlemu_getval_int("k_right_coin", SDLK_5);
69 settings.keyBindings[S_KEY_AUTO_UP] = sdlemu_getval_int("k_auto_up", SDLK_F1);
70 settings.keyBindings[S_KEY_ADVANCE] = sdlemu_getval_int("k_advance", SDLK_F2);
71 settings.keyBindings[S_KEY_HS_RESET] = sdlemu_getval_int("k_high_score_reset", SDLK_F3);
72 settings.keyBindings[S_KEY_SLAM_SWITCH] = sdlemu_getval_int("k_slam_switch", SDLK_F4);
73 // settings.keyBindings[17] = sdlemu_getval_int("k_8", SDLK_KP8);
74 // settings.keyBindings[18] = sdlemu_getval_int("k_9", SDLK_KP9);
75 // settings.keyBindings[19] = sdlemu_getval_int("k_pound", SDLK_KP_DIVIDE);
76 // settings.keyBindings[20] = sdlemu_getval_int("k_star", SDLK_KP_MULTIPLY);
78 strcpy(settings.BIOSPath, sdlemu_getval_string("BIOSROM", "./ROMs/"));
79 strcpy(settings.disksPath, sdlemu_getval_string("disks", "./disks/"));
80 strcpy(settings.diskImagePath1, sdlemu_getval_string("floppyImage1", "./disks/bt1_boot.dsk"));
81 strcpy(settings.diskImagePath2, sdlemu_getval_string("floppyImage2", "./disks/bt1_char.dsk"));
82 strcpy(settings.autoStatePath, sdlemu_getval_string("autoStateFilename", "./apple2auto.state"));
83 CheckForTrailingSlash(settings.disksPath);
84 CheckForTrailingSlash(settings.BIOSPath);
88 // Save StarGem2's settings
90 void SaveSettings(void)
95 // Check path for a trailing slash, and append if not present
97 static void CheckForTrailingSlash(char * path)
100 if (path[strlen(path) - 1] != '/')
101 strcat(path, "/"); // NOTE: Possible buffer overflow