102 Patches: Detours to the Rescue
C reference for DttR maintainers and modders.
Loading...
Searching...
No Matches
defaults.c
Go to the documentation of this file.
1#include "config_internal.h"
2#include <dttr_config.h>
3#include <dttr_log.h>
4#include <dttr_path.h>
5
6#include <string.h>
7
8typedef struct {
9 int source;
10 int action;
12
14 .schema_major_version = DTTR_CONFIG_SCHEMA_MAJOR_VERSION,
15 .log_level = DTTR_DEFAULT_LOG_LEVEL,
16 .minidump_type = DTTR_DEFAULT_MINIDUMP_TYPE,
17 .show_crash_popup = true,
18 .log_file_path = "dttr.log",
19 .pcdogs_path = "",
20 .saves_path = "saves",
21 .skip_intro_movies = false,
22 .scaling_fit = DTTR_SCALING_MODE_LETTERBOX,
23 .scaling_method = DTTR_SCALING_METHOD_LOGICAL,
24 .graphics_api = DTTR_GRAPHICS_API_AUTO,
25 .vertex_precision = DTTR_VERTEX_PRECISION_NATIVE,
26 .sprite_smooth = true,
27 .present_filter = SDL_GPU_FILTER_LINEAR,
28 .window_width = WINDOW_WIDTH,
29 .window_height = WINDOW_HEIGHT,
30 .msaa_samples = 2,
31 .texture_upload_sync = false,
32 .generate_texture_mipmaps = true,
33 .fullscreen = false,
34 .hot_reload = false,
35 .mss_sample_gain = 1.0f,
36 .mss_sample_preemphasis = 0.0f,
37 .gamepad_enabled = true,
38 .gamepad_index = 0,
39 .gamepad_axes =
40 {
41 [DTTR_GAMEPAD_AXIS_IDX_STICK_X] = SDL_GAMEPAD_AXIS_LEFTX,
42 [DTTR_GAMEPAD_AXIS_IDX_STICK_Y] = SDL_GAMEPAD_AXIS_LEFTY,
43 [DTTR_GAMEPAD_AXIS_IDX_CAMERA_RZ] = SDL_GAMEPAD_AXIS_RIGHTX,
44 },
45 .gamepad_axis_deadzone =
46 {
50 },
51};
52
54
56 {SDL_GAMEPAD_BUTTON_SOUTH, PCDOGS_GAMEPAD_IDX_BTN_0},
57 {SDL_GAMEPAD_BUTTON_EAST, PCDOGS_GAMEPAD_IDX_BTN_1},
58 {SDL_GAMEPAD_BUTTON_WEST, PCDOGS_GAMEPAD_IDX_BTN_2},
59 {SDL_GAMEPAD_BUTTON_NORTH, PCDOGS_GAMEPAD_IDX_BTN_3},
60 {SDL_GAMEPAD_BUTTON_LEFT_SHOULDER, PCDOGS_GAMEPAD_IDX_BTN_4},
61 {SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER, PCDOGS_GAMEPAD_IDX_BTN_5},
62 {SDL_GAMEPAD_BUTTON_BACK, PCDOGS_GAMEPAD_IDX_BTN_6},
63 {SDL_GAMEPAD_BUTTON_START, PCDOGS_GAMEPAD_IDX_BTN_8},
64 {SDL_GAMEPAD_BUTTON_DPAD_UP, PCDOGS_GAMEPAD_IDX_UP},
65 {SDL_GAMEPAD_BUTTON_DPAD_DOWN, PCDOGS_GAMEPAD_IDX_DOWN},
66 {SDL_GAMEPAD_BUTTON_DPAD_LEFT, PCDOGS_GAMEPAD_IDX_LEFT},
67 {SDL_GAMEPAD_BUTTON_DPAD_RIGHT, PCDOGS_GAMEPAD_IDX_RIGHT},
70};
71
73 if (!map) {
74 return;
75 }
76
78}
79
80static int find_disabled_mod(const DTTR_Config *config, const char *mod_filename) {
81 if (!config || !mod_filename || !mod_filename[0]) {
82 return -1;
83 }
84
85 const size_t mod_filename_len = strlen(mod_filename);
86 for (int i = 0; i < config->disabled_mod_count; i++) {
87 const char *const disabled_mod = config->disabled_mods[i];
88 const size_t disabled_mod_len = strlen(disabled_mod);
89 if (disabled_mod_len == mod_filename_len
90 && DTTR_Path_AsciiIeqN(disabled_mod, mod_filename, disabled_mod_len)) {
91 return i;
92 }
93 }
94
95 return -1;
96}
97
98bool DTTR_Config_IsModDisabled(const DTTR_Config *config, const char *mod_filename) {
99 return find_disabled_mod(config, mod_filename) >= 0;
100}
101
102static void remove_disabled_mod(DTTR_Config *config, int index) {
103 if (!config) {
104 return;
105 }
106
107 const int last_index = config->disabled_mod_count - 1;
108 if (index < 0 || index > last_index) {
109 return;
110 }
111
112 if (index < last_index) {
113 memmove(
114 config->disabled_mods[index],
115 config->disabled_mods[index + 1],
116 (size_t)(last_index - index) * sizeof(config->disabled_mods[0])
117 );
118 }
119
120 config->disabled_mod_count = last_index;
121 config->disabled_mods[last_index][0] = '\0';
122}
123
124static bool add_disabled_mod(DTTR_Config *config, const char *mod_filename) {
125 if (!config || !mod_filename || !mod_filename[0]) {
126 return false;
127 }
128
130 return false;
131 }
132
134 config->disabled_mods[config->disabled_mod_count],
135 sizeof(config->disabled_mods[config->disabled_mod_count]),
136 mod_filename
137 )) {
138 return false;
139 }
140
141 config->disabled_mod_count++;
142 return true;
143}
144
146 DTTR_Config *config,
147 const char *mod_filename,
148 bool enabled
149) {
150 if (!config || !mod_filename || !mod_filename[0]) {
151 return false;
152 }
153
154 const int index = find_disabled_mod(config, mod_filename);
155 if (enabled && index >= 0) {
156 remove_disabled_mod(config, index);
157 }
158
159 if (enabled || index >= 0) {
160 return true;
161 }
162
163 return add_disabled_mod(config, mod_filename);
164}
165
166bool DTTR_Config_DisabledModsChanged(const DTTR_Config *current, const DTTR_Config *base) {
167 if (!current || !base) {
168 return false;
169 }
170
171 if (current->disabled_mod_count != base->disabled_mod_count) {
172 return true;
173 }
174
175 for (int i = 0; i < current->disabled_mod_count; i++) {
176 if (!DTTR_Config_IsModDisabled(base, current->disabled_mods[i])) {
177 return true;
178 }
179 }
180
181 return false;
182}
183
184static void set_default_button_map(int *map) {
186
187 for (size_t i = 0; i < SDL_arraysize(default_button_map); i++) {
188 map[default_button_map[i].source] = default_button_map[i].action;
189 }
190}
191
195
197 if (!config) {
198 return;
199 }
200
201 *config = default_config;
203}
static void config_clear_button_map(int *map)
const char * config_format_graphics_api(DTTR_GraphicsApi api)
static const DTTR_Config default_config
Definition defaults.c:13
bool DTTR_Config_SetModEnabled(DTTR_Config *config, const char *mod_filename, bool enabled)
Definition defaults.c:145
static bool add_disabled_mod(DTTR_Config *config, const char *mod_filename)
Definition defaults.c:124
void DTTR_Config_SetDefaults(DTTR_Config *config)
Resets a config object to built-in defaults.
Definition defaults.c:196
const char * DTTR_Config_GraphicsAPIName(DTTR_GraphicsApi api)
Returns the config token for a graphics API selection.
Definition defaults.c:192
void DTTR_Config_ClearGamepadButtonMap(int *map)
Definition defaults.c:72
static int find_disabled_mod(const DTTR_Config *config, const char *mod_filename)
Definition defaults.c:80
static const default_gamepad_binding default_button_map[]
Definition defaults.c:55
static void set_default_button_map(int *map)
Definition defaults.c:184
bool DTTR_Config_IsModDisabled(const DTTR_Config *config, const char *mod_filename)
Definition defaults.c:98
bool DTTR_Config_DisabledModsChanged(const DTTR_Config *current, const DTTR_Config *base)
Definition defaults.c:166
static void remove_disabled_mod(DTTR_Config *config, int index)
Definition defaults.c:102
@ DTTR_VERTEX_PRECISION_NATIVE
Definition dttr_config.h:44
DTTR_GraphicsApi
Definition dttr_config.h:36
@ DTTR_GRAPHICS_API_AUTO
Definition dttr_config.h:37
#define WINDOW_WIDTH
Definition dttr_config.h:11
#define PCDOGS_GAMEPAD_IDX_BTN_1
Definition dttr_config.h:71
#define DTTR_GAMEPAD_SOURCE_TRIGGER_RIGHT
Definition dttr_config.h:52
#define DTTR_GAMEPAD_AXIS_IDX_STICK_Y
Definition dttr_config.h:61
#define WINDOW_HEIGHT
Definition dttr_config.h:12
@ DTTR_SCALING_METHOD_LOGICAL
Definition dttr_config.h:22
#define DTTR_GAMEPAD_AXIS_IDX_CAMERA_RZ
Definition dttr_config.h:62
#define PCDOGS_GAMEPAD_IDX_BTN_4
Definition dttr_config.h:74
#define PCDOGS_GAMEPAD_IDX_BTN_5
Definition dttr_config.h:75
#define DTTR_GAMEPAD_SOURCE_TRIGGER_LEFT
Definition dttr_config.h:51
#define PCDOGS_GAMEPAD_IDX_BTN_6
Definition dttr_config.h:76
@ DTTR_SCALING_MODE_LETTERBOX
Definition dttr_config.h:15
#define PCDOGS_GAMEPAD_IDX_BTN_3
Definition dttr_config.h:73
DTTR_Config dttr_config
Definition defaults.c:53
#define PCDOGS_GAMEPAD_IDX_BTN_0
Definition dttr_config.h:70
#define DTTR_CONFIG_DISABLED_MODS_MAX
Definition dttr_config.h:56
#define PCDOGS_GAMEPAD_IDX_BTN_8
Definition dttr_config.h:78
#define PCDOGS_GAMEPAD_IDX_UP
Definition dttr_config.h:64
#define DTTR_GAMEPAD_AXIS_IDX_STICK_X
Definition dttr_config.h:60
#define DTTR_CONFIG_SCHEMA_MAJOR_VERSION
Definition dttr_config.h:55
#define PCDOGS_GAMEPAD_IDX_BTN_2
Definition dttr_config.h:72
#define PCDOGS_GAMEPAD_IDX_LEFT
Definition dttr_config.h:66
#define PCDOGS_GAMEPAD_IDX_RIGHT
Definition dttr_config.h:67
#define PCDOGS_GAMEPAD_IDX_DOWN
Definition dttr_config.h:65
bool DTTR_Path_AsciiIeqN(const char *lhs, const char *rhs, size_t n)
Definition path.c:58
bool DTTR_Path_CopyString(char *out, size_t out_size, const char *value)
Definition path.c:68
int gamepad_button_map[DTTR_GAMEPAD_SOURCE_COUNT]
int disabled_mod_count
char disabled_mods[DTTR_CONFIG_DISABLED_MODS_MAX][MAX_PATH]