X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=3b51e6e28b92236f2126c769e29d3f78f924735a;hb=852a8eef1e8858a40da0be4093eba3deaf468f51;hp=9a27a0d612c74173eef3f11e7de6f8ecda823b55;hpb=6b9be0de63f8e031e8400b829fd2dc9b125bb0b4;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index 9a27a0d6..3b51e6e2 100644 --- a/src/files.c +++ b/src/files.c @@ -1694,8 +1694,8 @@ static int getFileTypeFromBasename(char *basename) return LEVEL_FILE_TYPE_SP; /* check for typical filename of a Diamond Caves II level package file */ - if (strEqualSuffix(basename, ".dc") || - strEqualSuffix(basename, ".dc2")) + if (strSuffix(basename, ".dc") || + strSuffix(basename, ".dc2")) return LEVEL_FILE_TYPE_DC; /* ---------- try to determine file type from filesize ---------- */ @@ -5767,7 +5767,7 @@ static void LoadLevelFromFileInfo_DC(struct LevelInfo *level, fgets(magic_bytes, num_magic_bytes + 1, file); /* check "magic bytes" for correct file format */ - if (!strEqualPrefix(magic_bytes, "DC2")) + if (!strPrefix(magic_bytes, "DC2")) { level->no_valid_file = TRUE; @@ -5777,8 +5777,8 @@ static void LoadLevelFromFileInfo_DC(struct LevelInfo *level, return; } - if (strEqualPrefix(magic_bytes, "DC2Win95") || - strEqualPrefix(magic_bytes, "DC2Win98")) + if (strPrefix(magic_bytes, "DC2Win95") || + strPrefix(magic_bytes, "DC2Win98")) { int position_first_level = 0x00fa; int extra_bytes = 4; @@ -8013,8 +8013,9 @@ void SaveScore(int nr) #define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS 28 #define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS 29 #define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC 30 +#define SETUP_TOKEN_AUTO_OVERRIDE_ARTWORK 31 -#define NUM_GLOBAL_SETUP_TOKENS 31 +#define NUM_GLOBAL_SETUP_TOKENS 32 /* editor setup */ #define SETUP_TOKEN_EDITOR_EL_BOULDERDASH 0 @@ -8142,6 +8143,7 @@ static struct TokenInfo global_setup_tokens[] = { TYPE_SWITCH, &si.override_level_graphics, "override_level_graphics" }, { TYPE_SWITCH, &si.override_level_sounds, "override_level_sounds" }, { TYPE_SWITCH, &si.override_level_music, "override_level_music" }, + { TYPE_SWITCH, &si.auto_override_artwork, "auto_override_artwork" }, }; static boolean not_used = FALSE; @@ -8270,8 +8272,6 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->sound_music = TRUE; si->sound_simple = TRUE; si->toons = TRUE; - si->double_buffering = TRUE; - si->direct_draw = !si->double_buffering; si->scroll_delay = TRUE; si->scroll_delay_value = STD_SCROLL_DELAY; si->soft_scrolling = TRUE; @@ -8292,12 +8292,13 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->prefer_aga_graphics = TRUE; si->game_frame_delay = GAME_FRAME_DELAY; - si->graphics_set = getStringCopy(GFX_CLASSIC_SUBDIR); - si->sounds_set = getStringCopy(SND_CLASSIC_SUBDIR); - si->music_set = getStringCopy(MUS_CLASSIC_SUBDIR); + si->graphics_set = getStringCopy(GFX_DEFAULT_SUBDIR); + si->sounds_set = getStringCopy(SND_DEFAULT_SUBDIR); + si->music_set = getStringCopy(MUS_DEFAULT_SUBDIR); si->override_level_graphics = FALSE; si->override_level_sounds = FALSE; si->override_level_music = FALSE; + si->auto_override_artwork = FALSE; si->editor.el_boulderdash = TRUE; si->editor.el_emerald_mine = TRUE; @@ -8352,6 +8353,12 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->system.audio_fragment_size = DEFAULT_AUDIO_FRAGMENT_SIZE; si->options.verbose = FALSE; + +#if defined(CREATE_SPECIAL_EDITION_RND_JUE) + si->handicap = FALSE; + si->fullscreen = TRUE; + si->auto_override_artwork = TRUE; +#endif } static void setSetupInfoToDefaults_EditorCascade(struct SetupInfo *si) @@ -8469,8 +8476,6 @@ void LoadSetup() checkSetupFileHashIdentifier(setup_file_hash, filename,getCookie("SETUP")); decodeSetupFileHash(setup_file_hash); - setup.direct_draw = !setup.double_buffering; - freeSetupFileHash(setup_file_hash); /* needed to work around problems with fixed length strings */ @@ -8651,12 +8656,19 @@ void LoadCustomElementDescriptions() static int getElementFromToken(char *token) { +#if 1 + char *value = getHashEntry(element_token_hash, token); + + if (value != NULL) + return atoi(value); +#else int i; /* !!! OPTIMIZE THIS BY USING HASH !!! */ for (i = 0; i < MAX_NUM_ELEMENTS; i++) if (strEqual(token, element_info[i].token_name)) return i; +#endif Error(ERR_WARN, "unknown element token '%s'", token); @@ -8698,7 +8710,92 @@ static int get_token_parameter_value(char *token, char *value_raw) return get_parameter_value(value_raw, suffix, TYPE_INTEGER); } -static void LoadSpecialMenuDesignSettingsFromFilename(char *filename) +void InitMenuDesignSettings_Static() +{ +#if 0 + static SetupFileHash *image_config_hash = NULL; +#endif + int i; + +#if 0 + if (image_config_hash == NULL) + { + image_config_hash = newSetupFileHash(); + + for (i = 0; image_config[i].token != NULL; i++) + setHashEntry(image_config_hash, + image_config[i].token, + image_config[i].value); + } +#endif + +#if 1 + /* always start with reliable default values from static default config */ + for (i = 0; image_config_vars[i].token != NULL; i++) + { + char *value = getHashEntry(image_config_hash, image_config_vars[i].token); + + if (value != NULL) + *image_config_vars[i].value = + get_token_parameter_value(image_config_vars[i].token, value); + } + +#else + + int j; + + /* always start with reliable default values from static default config */ + for (i = 0; image_config_vars[i].token != NULL; i++) + for (j = 0; image_config[j].token != NULL; j++) + if (strEqual(image_config_vars[i].token, image_config[j].token)) + *image_config_vars[i].value = + get_token_parameter_value(image_config_vars[i].token, + image_config[j].value); +#endif +} + +static void InitMenuDesignSettings_SpecialPreProcessing() +{ + int i; + + /* the following initializes hierarchical values from static configuration */ + + /* special case: initialize "ARG_DEFAULT" values in static default config */ + /* (e.g., initialize "[titlemessage].fade_mode" from "[title].fade_mode") */ + titlemessage_initial_default.fade_mode = title_initial_default.fade_mode; + titlemessage_initial_default.fade_delay = title_initial_default.fade_delay; + titlemessage_initial_default.post_delay = title_initial_default.post_delay; + titlemessage_initial_default.auto_delay = title_initial_default.auto_delay; + titlemessage_default.fade_mode = title_default.fade_mode; + titlemessage_default.fade_delay = title_default.fade_delay; + titlemessage_default.post_delay = title_default.post_delay; + titlemessage_default.auto_delay = title_default.auto_delay; + + /* special case: initialize "ARG_DEFAULT" values in static default config */ + /* (e.g., init "titlemessage_1.fade_mode" from "[titlemessage].fade_mode") */ + for (i = 0; i < MAX_NUM_TITLE_MESSAGES; i++) + { + titlemessage_initial[i] = titlemessage_initial_default; + titlemessage[i] = titlemessage_default; + } + + /* special case: initialize "ARG_DEFAULT" values in static default config */ + /* (eg, init "menu.enter_screen.SCORES.xyz" from "menu.enter_screen.xyz") */ + for (i = 0; i < NUM_SPECIAL_GFX_ARGS; i++) + { + menu.enter_screen[i] = menu.enter_screen[GFX_SPECIAL_ARG_DEFAULT]; + menu.leave_screen[i] = menu.leave_screen[GFX_SPECIAL_ARG_DEFAULT]; + } +} + +static void InitMenuDesignSettings_SpecialPostProcessing() +{ + /* special case: initialize later added SETUP list size from LEVELS value */ + if (menu.list_size[GAME_MODE_SETUP] == -1) + menu.list_size[GAME_MODE_SETUP] = menu.list_size[GAME_MODE_LEVELS]; +} + +static void LoadMenuDesignSettingsFromFilename(char *filename) { static struct TitleMessageInfo tmi; static struct TokenInfo titlemessage_tokens[] = @@ -8739,7 +8836,7 @@ static void LoadSpecialMenuDesignSettingsFromFilename(char *filename) int i, j, k; #if 0 - printf("LoadSpecialMenuDesignSettings from file '%s' ...\n", filename); + printf("LoadMenuDesignSettings from file '%s' ...\n", filename); #endif if ((setup_file_hash = loadSetupFileHash(filename)) == NULL) @@ -8864,7 +8961,8 @@ static void LoadSpecialMenuDesignSettingsFromFilename(char *filename) { char *value = getHashEntry(setup_file_hash, image_config_vars[i].token); - if (value != NULL) + /* (ignore definitions set to "[DEFAULT]" which are already initialized) */ + if (value != NULL && !strEqual(value, ARG_DEFAULT)) *image_config_vars[i].value = get_token_parameter_value(image_config_vars[i].token, value); } @@ -8872,77 +8970,32 @@ static void LoadSpecialMenuDesignSettingsFromFilename(char *filename) freeSetupFileHash(setup_file_hash); } -static void LoadSpecialMenuDesignSettings_SpecialPreProcessing() -{ - int i; - - /* the following initializes hierarchical values from static configuration */ - - /* special case: initialize "ARG_DEFAULT" values in static default config */ - /* (e.g., initialize "[titlemessage].fade_mode" from "[title].fade_mode") */ - titlemessage_initial_default.fade_mode = title_initial_default.fade_mode; - titlemessage_initial_default.fade_delay = title_initial_default.fade_delay; - titlemessage_initial_default.post_delay = title_initial_default.post_delay; - titlemessage_initial_default.auto_delay = title_initial_default.auto_delay; - titlemessage_default.fade_mode = title_default.fade_mode; - titlemessage_default.fade_delay = title_default.fade_delay; - titlemessage_default.post_delay = title_default.post_delay; - titlemessage_default.auto_delay = title_default.auto_delay; - - /* special case: initialize "ARG_DEFAULT" values in static default config */ - /* (e.g., init "titlemessage_1.fade_mode" from "[titlemessage].fade_mode") */ - for (i = 0; i < MAX_NUM_TITLE_MESSAGES; i++) - { - titlemessage_initial[i] = titlemessage_initial_default; - titlemessage[i] = titlemessage_default; - } - - /* special case: initialize "ARG_DEFAULT" values in static default config */ - /* (eg, init "menu.enter_screen.SCORES.xyz" from "menu.enter_screen.xyz") */ - for (i = 0; i < NUM_SPECIAL_GFX_ARGS; i++) - { - menu.enter_screen[i] = menu.enter_screen[GFX_SPECIAL_ARG_DEFAULT]; - menu.leave_screen[i] = menu.leave_screen[GFX_SPECIAL_ARG_DEFAULT]; - } -} - -static void LoadSpecialMenuDesignSettings_SpecialPostProcessing() -{ - /* special case: initialize later added SETUP list size from LEVELS value */ - if (menu.list_size[GAME_MODE_SETUP] == -1) - menu.list_size[GAME_MODE_SETUP] = menu.list_size[GAME_MODE_LEVELS]; -} - -void LoadSpecialMenuDesignSettings() +void LoadMenuDesignSettings() { char *filename_base = UNDEFINED_FILENAME, *filename_local; - int i, j; - - /* always start with reliable default values from static default config */ - for (i = 0; image_config_vars[i].token != NULL; i++) - for (j = 0; image_config[j].token != NULL; j++) - if (strEqual(image_config_vars[i].token, image_config[j].token)) - *image_config_vars[i].value = - get_token_parameter_value(image_config_vars[i].token, - image_config[j].value); - LoadSpecialMenuDesignSettings_SpecialPreProcessing(); + InitMenuDesignSettings_Static(); + InitMenuDesignSettings_SpecialPreProcessing(); +#if 1 + if (!GFX_OVERRIDE_ARTWORK(ARTWORK_TYPE_GRAPHICS)) +#else if (!SETUP_OVERRIDE_ARTWORK(setup, ARTWORK_TYPE_GRAPHICS)) +#endif { /* first look for special settings configured in level series config */ filename_base = getCustomArtworkLevelConfigFilename(ARTWORK_TYPE_GRAPHICS); if (fileExists(filename_base)) - LoadSpecialMenuDesignSettingsFromFilename(filename_base); + LoadMenuDesignSettingsFromFilename(filename_base); } filename_local = getCustomArtworkConfigFilename(ARTWORK_TYPE_GRAPHICS); if (filename_local != NULL && !strEqual(filename_base, filename_local)) - LoadSpecialMenuDesignSettingsFromFilename(filename_local); + LoadMenuDesignSettingsFromFilename(filename_local); - LoadSpecialMenuDesignSettings_SpecialPostProcessing(); + InitMenuDesignSettings_SpecialPostProcessing(); } void LoadUserDefinedEditorElementList(int **elements, int *num_elements)