Skip to content

Commit

Permalink
add gamepak config dir
Browse files Browse the repository at this point in the history
  • Loading branch information
networkfusion committed Sep 28, 2024
1 parent 55e7663 commit 3caac06
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 0 deletions.
29 changes: 29 additions & 0 deletions src/menu/rom_info.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

#include <mini.c/src/mini.h>

#include "menu.h"

#include "boot/cic.h"
#include "rom_info.h"
#include "utils/fs.h"
Expand All @@ -18,6 +20,10 @@

#define CLOCK_RATE_DEFAULT (0x0000000F)

#ifndef GAMEPAK_CONFIG_SUBDIRECTORY
#define GAMEPAK_CONFIG_SUBDIRECTORY "config"
#endif


/** @brief ROM File Information Structure. */
typedef struct __attribute__((packed)) {
Expand Down Expand Up @@ -794,7 +800,21 @@ static void extract_rom_info (match_t *match, rom_header_t *rom_header, rom_info
}
}

static bool create_gamepak_config_subdirectory (path_t *path) {
path_t *gamepak_config_path = path_clone(path);
path_pop(gamepak_config_path);
path_push(gamepak_config_path, GAMEPAK_CONFIG_SUBDIRECTORY);
bool error = directory_create(path_get(gamepak_config_path));
path_free(gamepak_config_path);
return error;
}

static void load_overrides (path_t *path, rom_info_t *rom_info) {

if ( menu->settings.use_gamepak_config_folder) {
path_push_subdir(path, GAMEPAK_CONFIG_SUBDIRECTORY)
}

path_t *overrides_path = path_clone(path);

path_ext_replace(overrides_path, "ini");
Expand Down Expand Up @@ -828,6 +848,15 @@ static void load_overrides (path_t *path, rom_info_t *rom_info) {
}

static rom_err_t save_override (path_t *path, const char *id, int value, int default_value) {

if ( menu->settings.use_gamepak_config_folder) {
// if the sub dir does not exist, create it
// TODO: would it be quicker to check it exists first?
create_gamepak_config_subdirectory(path);

path_push_subdir(path, GAMEPAK_CONFIG_SUBDIRECTORY)
}

path_t *overrides_path = path_clone(path);

path_ext_replace(overrides_path, "ini");
Expand Down
3 changes: 3 additions & 0 deletions src/menu/settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ static settings_t init = {
.show_protected_entries = false,
.default_directory = "/",
.use_saves_folder = true,
.use_gamepak_custom_config_folder = false,
.sound_enabled = true,

/* Beta feature flags (should always init to off) */
Expand All @@ -39,6 +40,7 @@ void settings_load (settings_t *settings) {
settings->show_protected_entries = mini_get_bool(ini, "menu", "show_protected_entries", init.show_protected_entries);
settings->default_directory = strdup(mini_get_string(ini, "menu", "default_directory", init.default_directory));
settings->use_saves_folder = mini_get_bool(ini, "menu", "use_saves_folder", init.use_saves_folder);
settings->use_gamepak_custom_config_folder = mini_get_bool(ini, "menu", "use_gamepak_custom_config_folder", init.use_gamepak_custom_config_folder);
settings->sound_enabled = mini_get_bool(ini, "menu", "sound_enabled", init.sound_enabled);

/* Beta feature flags, they might not be in the file */
Expand All @@ -55,6 +57,7 @@ void settings_save (settings_t *settings) {
mini_set_bool(ini, "menu", "show_protected_entries", settings->show_protected_entries);
mini_set_string(ini, "menu", "default_directory", settings->default_directory);
mini_set_bool(ini, "menu", "use_saves_folder", settings->use_saves_folder);
mini_set_bool(ini, "menu", "use_gamepak_custom_config_folder", settings->use_gamepak_custom_config_folder);
mini_set_bool(ini, "menu", "sound_enabled", settings->sound_enabled);

/* Beta feature flags, they should not save until production ready! */
Expand Down
3 changes: 3 additions & 0 deletions src/menu/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ typedef struct {
/** @brief Put saves into separate directory */
bool use_saves_folder;

/** @brief Put custom GamePak configs into separate directory */
bool use_gamepak_custom_config_folder;

/** @brief Enable Background music */
bool bgm_enabled;

Expand Down
14 changes: 14 additions & 0 deletions src/menu/views/settings_editor.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ static void set_use_saves_folder_type (menu_t *menu, void *arg) {
settings_save(&menu->settings);
}

static void set_use_gamepak_custom_config_folder_type (menu_t *menu, void *arg) {
menu->settings.use_gamepak_custom_config_folder = (bool) (arg);
settings_save(&menu->settings);
}

static void set_sound_enabled_type (menu_t *menu, void *arg) {
menu->settings.sound_enabled = (bool) (arg);
sound_use_sfx(menu->settings.sound_enabled);
Expand Down Expand Up @@ -76,6 +81,12 @@ static component_context_menu_t set_use_saves_folder_type_context_menu = { .list
COMPONENT_CONTEXT_MENU_LIST_END,
}};

static component_context_menu_t set_use_gamepak_custom_config_folder_type_context_menu = { .list = {
{.text = "On", .action = set_use_gamepak_custom_config_folder_type, .arg = (void *) (true) },
{.text = "Off", .action = set_use_gamepak_custom_config_folder_type, .arg = (void *) (false) },
COMPONENT_CONTEXT_MENU_LIST_END,
}};

#ifdef BETA_SETTINGS
static component_context_menu_t set_bgm_enabled_type_context_menu = { .list = {
{.text = "On", .action = set_bgm_enabled_type, .arg = (void *) (true) },
Expand All @@ -95,6 +106,7 @@ static component_context_menu_t options_context_menu = { .list = {
{ .text = "Show Hidden Files", .submenu = &set_protected_entries_type_context_menu },
{ .text = "Sound Effects", .submenu = &set_sound_enabled_type_context_menu },
{ .text = "Use Saves Folder", .submenu = &set_use_saves_folder_type_context_menu },
{ .text = "Use Game Config Folder", .submenu = &set_use_gamepak_custom_config_folder_type_context_menu },
#ifdef BETA_SETTINGS
{ .text = "Background Music", .submenu = &set_bgm_enabled_type_context_menu },
{ .text = "Rumble Feedback", .submenu = &set_rumble_enabled_type_context_menu },
Expand Down Expand Up @@ -140,6 +152,7 @@ static void draw (menu_t *menu, surface_t *d) {
"* PAL60 Mode : %s\n"
" Show Hidden Files : %s\n"
" Use Saves folder : %s\n"
" Use config folder : %s\n"
" Sound Effects : %s\n"
#ifdef BETA_SETTINGS
" Background Music : %s\n"
Expand All @@ -151,6 +164,7 @@ static void draw (menu_t *menu, surface_t *d) {
format_switch(menu->settings.pal60_enabled),
format_switch(menu->settings.show_protected_entries),
format_switch(menu->settings.use_saves_folder),
format_switch(menu->settings.use_gamepak_custom_config_folder),
format_switch(menu->settings.sound_enabled)
#ifdef BETA_SETTINGS
,
Expand Down

0 comments on commit 3caac06

Please sign in to comment.